OscProb::PMNS_Fast Class Reference

#include <PMNS_Fast.h>

Inheritance diagram for OscProb::PMNS_Fast:
OscProb::PMNS_Base OscProb::PMNS_NSI

List of all members.

Public Member Functions

 PMNS_Fast ()
virtual ~PMNS_Fast ()
virtual void SetMix (double th12, double th23, double th13, double deltacp)
virtual void SetDeltaMsqrs (double dm21, double dm32)
virtual void PropVacuum (double L, double E, int anti=1)

Protected Member Functions

virtual void SolveHam ()
 Solve the full Hamiltonian for eigenvectors and eigenvalues.
virtual void SetVacuumEigensystem ()
 Set the eigensystem to the analytic solution of the vacuum Hamiltonian.

Detailed Description

Definition at line 39 of file PMNS_Fast.h.


Constructor & Destructor Documentation

PMNS_Fast::PMNS_Fast (  ) 

Definition at line 47 of file PMNS_Fast.cxx.

00047 : PMNS_Base(){}

PMNS_Fast::~PMNS_Fast (  )  [virtual]

Definition at line 49 of file PMNS_Fast.cxx.

00049 {}


Member Function Documentation

void PMNS_Fast::PropVacuum ( double  L,
double  E,
int  anti = 1 
) [virtual]

Propagate a neutrino through vacuum

Parameters:
L - length of slab (km)
E - neutrino energy in GeV
anti - +1 = neutrino case, -1 = anti-neutrino case

Propagate the current neutrino state over a distance L in km with an energy E in GeV through vacuum

Parameters:
anti - positive = neutrino case, negative = anti-neutrino case

Definition at line 167 of file PMNS_Fast.cxx.

References OscProb::PMNS_Base::PropMatter().

Referenced by OscFit::OscillationCalculator::PropVacuum().

00168 {
00169   PropMatter(L, E, 0, anti);
00170 }

void PMNS_Fast::SetDeltaMsqrs ( double  dm21,
double  dm32 
) [virtual]

Set the mass-splittings

Parameters:
dm21 - m2^2-m1^2 in eV^2
dm32 - m3^2-m2^2 in eV^2

Set the mass-splittings. These are m_2^2-m_1^2, m_3^2-m_2^2 and m_3^2-m_1^2 in eV^2

Definition at line 68 of file PMNS_Fast.cxx.

References OscProb::PMNS_Base::SetDm().

Referenced by OscFit::OscillationCalculator::SetPMNS(), NuOscProbCalc::ThreeFlavourExactNuMuToNuElectron(), NuOscProbCalc::ThreeFlavourExactNuMuToNuMu(), NuOscProbCalc::ThreeFlavourExactNuMuToNuTau(), and OscCalc::UpdateNSI().

00069 {
00070 
00071   SetDm(2, dm21);
00072   SetDm(3, dm32 + dm21);
00073 
00074 }

void PMNS_Fast::SetMix ( double  th12,
double  th23,
double  th13,
double  deltacp 
) [virtual]

Set the parameters of the PMNS matrix

Parameters:
th12 - The angle theta_12 in radians
th23 - The angle theta_23 in radians
th13 - The angle theta_13 in radians
deltacp - The CPV phase delta_CP in radians

Definition at line 53 of file PMNS_Fast.cxx.

References OscProb::PMNS_Base::SetAngle(), and OscProb::PMNS_Base::SetDelta().

Referenced by OscFit::OscillationCalculator::SetPMNS(), NuOscProbCalc::ThreeFlavourExactNuMuToNuElectron(), NuOscProbCalc::ThreeFlavourExactNuMuToNuMu(), NuOscProbCalc::ThreeFlavourExactNuMuToNuTau(), and OscCalc::UpdateNSI().

00054 {
00055 
00056   SetAngle(1,2, th12);
00057   SetAngle(1,3, th13);
00058   SetAngle(2,3, th23);
00059   SetDelta(1,3, deltacp);
00060 
00061 }

void PMNS_Fast::SetVacuumEigensystem (  )  [protected, virtual]

Set the eigensystem to the analytic solution of the vacuum Hamiltonian.

We know the vacuum eigensystem, so just write it explicitly

Definition at line 133 of file PMNS_Fast.cxx.

References OscProb::PMNS_Base::fDelta, OscProb::PMNS_Base::fDm, OscProb::PMNS_Base::fEnergy, OscProb::PMNS_Base::fEval, OscProb::PMNS_Base::fEvec, OscProb::PMNS_Base::fIsNuBar, OscProb::PMNS_Base::fTheta, and OscProb::PMNS_Base::kGeV2eV.

Referenced by OscProb::PMNS_NSI::SolveHam(), and SolveHam().

00134 {
00135 
00136   double  s12, s23, s13, c12, c23, c13;
00137   complex idelta(0.0, fDelta[0][2]);
00138   if(fIsNuBar) idelta = conj(idelta);
00139 
00140   s12 = sin(fTheta[0][1]);  s23 = sin(fTheta[1][2]);  s13 = sin(fTheta[0][2]);
00141   c12 = cos(fTheta[0][1]);  c23 = cos(fTheta[1][2]);  c13 = cos(fTheta[0][2]);
00142 
00143   fEvec[0][0] =  c12*c13;
00144   fEvec[0][1] =  s12*c13;
00145   fEvec[0][2] =  s13*exp(-idelta);
00146 
00147   fEvec[1][0] = -s12*c23-c12*s23*s13*exp(idelta);
00148   fEvec[1][1] =  c12*c23-s12*s23*s13*exp(idelta);
00149   fEvec[1][2] =  s23*c13;
00150 
00151   fEvec[2][0] =  s12*s23-c12*c23*s13*exp(idelta);
00152   fEvec[2][1] = -c12*s23-s12*c23*s13*exp(idelta);
00153   fEvec[2][2] =  c23*c13;
00154 
00155   fEval[0] = 0;
00156   fEval[1] = fDm[1] / (2 * kGeV2eV*fEnergy);
00157   fEval[2] = fDm[2] / (2 * kGeV2eV*fEnergy);
00158 
00159 }

void PMNS_Fast::SolveHam (  )  [protected, virtual]

Solve the full Hamiltonian for eigenvectors and eigenvalues.

Solve the full Hamiltonian for eigenvectors and eigenvalues This is using a method from the GLoBES software available at http://www.mpi-hd.mpg.de/personalhomes/globes/3x3/ We should cite them accordingly

Reimplemented from OscProb::PMNS_Base.

Reimplemented in OscProb::PMNS_NSI.

Definition at line 83 of file PMNS_Fast.cxx.

References OscProb::PMNS_Base::BuildHms(), MuELoss::e, OscProb::PMNS_Base::fBuiltHms, OscProb::PMNS_Base::fEnergy, OscProb::PMNS_Base::fEval, OscProb::PMNS_Base::fEvec, OscProb::PMNS_Base::fGotES, OscProb::PMNS_Base::fHms, OscProb::PMNS_Base::fIsNuBar, OscProb::PMNS_Base::fNe, OscProb::PMNS_Base::fNumNus, OscProb::PMNS_Base::kGeV2eV, OscProb::PMNS_Base::kGf, OscProb::PMNS_Base::kK2, SetVacuumEigensystem(), and zheevh3().

00084 {
00085 
00086   if(fNe < 1.0e-6){
00087     SetVacuumEigensystem();
00088     return;
00089   }
00090 
00091   // Check if anything has changed before recalculating
00092   if(!fBuiltHms){
00093     BuildHms();
00094   }
00095   
00096   double lv = 2 * kGeV2eV*fEnergy;     // 2E in eV 
00097   double kr2GNe = kK2*M_SQRT2*kGf*fNe; // Matter potential in eV
00098 
00099   // Finish build Hamiltonian in matter with dimension of eV
00100   complex A[3][3];
00101   for(int i=0;i<fNumNus;i++){
00102     A[i][i] = fHms[i][i]/lv;
00103     for(int j=i+1;j<fNumNus;j++){
00104       if(!fIsNuBar) A[i][j] = fHms[i][j]/lv;
00105       else          A[i][j] = conj(fHms[i][j])/lv;
00106     }
00107   }
00108   if(!fIsNuBar) A[0][0] += kr2GNe;
00109   else          A[0][0] -= kr2GNe;
00110 
00111   double fEvalGLoBES[3];
00112   complex fEvecGLoBES[3][3];
00113 
00114   // Solve Hamiltonian for eigensystem using the GLoBES method
00115   zheevh3(A,fEvecGLoBES,fEvalGLoBES);
00116 
00117   // Fill fEval and fEvec vectors from GLoBES arrays  
00118   for(int i=0;i<fNumNus;i++){
00119     fEval[i] = fEvalGLoBES[i];
00120     for(int j=0;j<fNumNus;j++){
00121       fEvec[i][j] = fEvecGLoBES[i][j];
00122     }
00123   }
00124   
00125   fGotES = true;
00126 
00127 }


The documentation for this class was generated from the following files:

Generated on 16 Jan 2018 for loon by  doxygen 1.6.1