Best sample texture viewer, V 1.0

by Florian Plentinger, Gerhart Seidl, Walter Winter

If you use the information from this notebook, please cite hep-ph/0612169

Installation instructions: 
- Copy both QLCTextures.nb (Mathematica notebook) and samplenew.mmo (compressed best sample info) in a working directory
- Open QLCTexture.nb in Mathematica (developed for Version 5.2); make sure that it can find samplenew.mmo in the current directory
- Evaluate the Notebook with Kernel/Evaluation/Evaluate notebook
- Now you can use the Selector and PrintModel functions to extract subsamples from our best sample as you wish
NB: Only models from our best sample are included. Therefore, the selector will not find models absolutely incompatible with current data!

Some helper variables. We need this information to reconstruct the models from the compressed information:

Us2[s12_, s13_, s23_, δ_] := Module[{c12, c13, c23},
c12 = Sqrt[1 - s12^2];c13 = Sqrt[1 - s13^2];c23 = Sqrt[1 - s23^2];
 (({{c12 c13, s12 c13, s13 Exp[-I δ]}, {-s12 c23  -  
                            c12 s23 s13  Exp[
                                I δ], c12 c23  -  
                            s12 s23 s13  Exp[
                                I δ], s23 c13}, {s12 s23   -  
                            c12 c23 s13  Exp[
                                I δ], -c12 s23  -  
                            s12 c23 s13  Exp[
                                I δ], c23 c13}}))];
symbollist  =  {+ϵ, +ϵ^2, 0, +1/Sqrt[2]}; deltaphases  =  {0, π}; 
        nuphases = {0, π};
allcomb = 
            Flatten[Outer[List, symbollist, symbollist, symbollist, 
                deltaphases], 3];
allcombmat = 
            Map[Us2[#[[1]], #[[2]], #[[3]], #[[4]]] &, 
              allcomb];
allcombNU = 
            Flatten[Outer[List, symbollist, symbollist, symbollist, 
                deltaphases, nuphases, nuphases, nuphases, nuphases], 7];
allcombmatNU = 
          Map[(DiagonalMatrix[{1, Exp[I #[[5]]], 
                      Exp[I #[[6]]]}] . 
                  Us2[#[[1]], #[[2]], #[[3]], #[[4]]] . 
                  DiagonalMatrix[{Exp[I #[[7]]], Exp[I #[[8]]], 
                      1}]) &, allcombNU];
comblist = 
        Flatten[Outer[List, Table[i, {i, 1, Length[allcombmat]}], 
            Table[j, {j, 1, Length[allcombmatNU]}]], 1];

Helper functions needed to reconstruct  the different matrices. You will not need to use these functions directly.
All of the following take the expansion order ϵorder as parameter. if this parameter is >= 1, expand in ϵ, otherwise, use ϵorder as numerical value for ϵ.

ReturnMajoranaTexture[modelno_, ϵorder_, masses_] := 
      Module[{tex}, 
tex = 
          allcombmatNU[[comblist[[modelno, 2]]]] . 
            DiagonalMatrix[masses] . 
            Transpose[
              allcombmatNU[[comblist[[modelno, 
                      2]]]]];  
If[ϵorder ≥ 1, 
Map[
            Normal[Series[#, {ϵ, 0, ϵorder}]] &, tex], 
          N[tex  /.  ϵ  ->  ϵorder]]
]

ReturnDiracTexture[modelno_, ϵorder_, masses_] := 
      Module[{tex}, 
tex = 
          allcombmatNU[[comblist[[modelno, 2]]]] . 
            DiagonalMatrix[
              masses] ;  
If[ϵorder ≥ 1, 
          Map[Normal[Series[#, {ϵ, 0, ϵorder}]] &, tex], 
          N[tex  /.  ϵ  ->  ϵorder]]
]

ReturnLRMatrices[modelno_, ϵorder_] := 
      Module[{tex}, 
tex = {allcombmat[[comblist[[modelno, 1]]]], 
            allcombmatNU[[comblist[[modelno, 
                    2]]]]}; 
If[ϵorder ≥ 1, 
          Map[Normal[Series[#, {ϵ, 0, ϵorder}]] &, 
            tex, {2}], 
          N[tex  /.  ϵ  ->  ϵorder]]
]

ReturnMNSMatrix[modelno_, ϵorder_] := 
      Module[{tex}, 
tex = 
          Transpose[allcombmat[[comblist[[modelno, 1]]]]] . 
            allcombmatNU[[comblist[[modelno, 
                    2]]]]; 
If[ϵorder ≥ 1, 
          Map[Normal[Series[#, {ϵ, 0, ϵorder}]] &, tex], 
          N[tex  /.  ϵ  ->  ϵorder]]
]

ReturnMLepton[modelno_, ϵorder_] := 
      Module[{tex}, 
tex = 
          allcombmat[[comblist[[modelno, 1]]]] . 
            DiagonalMatrix[{ϵ^4, ϵ^2, 
                1}] ;  
If[ϵorder ≥ 1, 
          Map[Normal[Series[#, {ϵ, 0, ϵorder}]] &, tex], 
          N[tex  /.  ϵ  ->  ϵorder]]
]

Here we load our best sample. Make sure that it is in the current directory such that Mathematica can find it!

bestsample  =  <<  "samplenew.mmo";

bestsample = 
        Sort[bestsample, (#1[[2, 1]] < #2[[2, 
                    1]]) &];

The Selector function selects all models from the best sample with (all angles in degrees!) 
theta12min<= (Subscript[θ, 12])<theta12max,  theta13min<= (Subscript[θ, 13])<theta13max, theta23min<= (Subscript[θ, 23])<theta23max,

\(Selector[theta12min_, theta12max_, theta13min_, theta13max_, 
        theta23min_, theta23max_] := 
      Module[{sa}, 
        sa = Select[
            bestsample, \((\((#[\([1, 1]\)]*180.0/π\  >= 
                      theta12min)\)\  && \ \((#[\([1, 1]\)]*180.0/π\  < 
                      theta12max)\)\  && \((#[\([1, 3]\)]*180.0/π\  >= 
                      theta23min)\)\  && \ \((#[\([1, 3]\)]*180.0/π\  < 
                      theta23max)\)\  && \ \ \((#[\([1, 2]\)]*180.0/π\  >= 
                      theta13min)\)\  && \ \((#[\([1, 2]\)]*180.0/π\  < 
                      theta13max)\)\ )\) &]; 
Print[
          Length[sa], " Models selected!"]; 
sa
]\)

The PrintModels function prints a sample (list) of models , expanded up to order ϵorder, using the neutrino mass scheme masses. The list hierarchies illustrates three different choices for masses: normal hierarchy, inverse hierarchy, degenerate neutrinos

hierarchies = {{ϵ^2, ϵ, 1}, {1, 1, ϵ}, {1, 
            1, 1}};

\(\(PrintModels[sample_, ϵorder_, masses_] := 
        Module[{nm, theϵ}, 
nm = 0; 
          theϵ = 0.2; \  (*\ do\ not\ change, \ 
            this\ best\ sample\ was\ created\ for\ ϵ = 
              0.2\ *) 
Map[\((\(nm++\); 
                Print["Model ", 
                  nm, \*"": (Subscript[θ, 12])="", #[\([1, 
                        1]\)]*180.0/π, \*"" Deg, (Subscript[θ, 13])="", #[\([1, 
                        2]\)]*180.0/π, \*"" Deg, (Subscript[θ, 23])="", #[\([1, 
                        3]\)]*180.0/π, \*"" Deg, (χ^2)="", 
\((Sin[#[\([1, 1]\)]]^2 - 
                            0.3)\)^2/\((0.3\ 0.09)\)^2 + \((Sin[#[\([1, 
                                    3]\)]]^2 - 
                            0.5)\)^2/\((0.5\ 0.16)\)^2]; 
Print[\*""Generated from (Subscript[U, l]) {(Subscript[θ, 12]^l),(Subscript[θ, 13]^l),(Subscript[θ, 23]^l),(δ^l)}="", 
                  allcomb[\([\(comblist[\([#[\([2, 
                                2]\)]]\)]\)[\([1]\)]]\)], \*"", (Subscript[U, ν]) {(Subscript[θ, 12]^ν),(Subscript[θ, 13]^ν),(Subscript[θ, 23]^ν),(δ^ν),(Subscript[φ, 1]^ν),(Subscript[φ, 2]^ν),(Subscript[ϕ, 1]^ν),(Subscript[ϕ, 2]^ν)}="", 
                  allcombNU[\([\(comblist[\([#[\([2, 
                                2]\)]]\)]\)[\([2]\)]]\)]]; 
Print[\*""(Subscript[U, l])= "", 
                  MatrixForm[\ \(ReturnLRMatrices[#[\([2, 
                            2]\)], ϵorder]\)[\([1]\)]], " = ", 
                  MatrixForm[\ \(ReturnLRMatrices[#[\([2, 2]\)], 
                        theϵ]\)[\([1]\)]]]; 
Print[\*""(Subscript[U, ν])= "", 
                  MatrixForm[\ \(ReturnLRMatrices[#[\([2, 
                            2]\)], ϵorder]\)[\([2]\)]], " = ", 
                  MatrixForm[\ \(ReturnLRMatrices[#[\([2, 2]\)], 
                        theϵ]\)[\([2]\)]]]; 
Print[\*""(Subscript[U, PMNS])= "", 
                  MatrixForm[
                    ReturnMNSMatrix[#[\([2, 
                          2]\)], ϵorder]], " = ", 
                  MatrixForm[
                    ReturnMNSMatrix[#[\([2, 2]\)], 
                      theϵ]]]; 
Print["Chosen neutrino mass scheme: ", 
                  masses]; 
Print[\*""(Subscript[M, l])="", 
                  MatrixForm[
                    ReturnMLepton[#[\([2, 
                          2]\)], ϵorder]], " = ", 
                  MatrixForm[
                    ReturnMLepton[#[\([2, 2]\)], 
                      theϵ]]]; 
Print[\*""(Subscript[M, ν])="", MatrixForm[
                    ReturnMajoranaTexture[#[\([2, 2]\)], ϵorder, 
                      masses]], " = ", 
                  MatrixForm[
                    ReturnMajoranaTexture[#[\([2, 2]\)], theϵ, 
                      masses]]]; 
Print[\*""(Subscript[M, D])="", 
                  MatrixForm[
                    ReturnDiracTexture[#[\([2, 2]\)], ϵorder, 
                      masses]], " = ", 
                  MatrixForm[
                    ReturnDiracTexture[#[\([2, 2]\)], theϵ, 
                      masses]]]; 
Print[])\) &, 
            sample];
];\)\)

Example: Assume that (Subscript[θ, 13]) is large. Choose all models with 30  °<(Subscript[θ, 12])< 36  °, 8  °<(Subscript[θ, 13])< 9  °, 44  °<(Subscript[θ, 23])< 46  ° and print them with the analytical textures expanded up to second order in ϵ for a normal mass hierarchy:

mysample  =  Selector[30, 36, 8, 9, 44, 46];

PrintModels[mysample, 2, hierarchies[[1]]];