OscCalculatorPMNS_NSI.h
Go to the documentation of this file.
2 
3 #include <cassert>
4 #include <cstdlib>
5 
6 namespace osc
7 {
8  OscCalculatorPMNS_NSI::OscCalculatorPMNS_NSI()
9  : fMixDirty(true), fDmDirty(true), fPropDirty(true), fEpsDirty(true), fPrevAnti(0)
10  {
11  }
12 
13  OscCalculatorPMNS_NSI::~OscCalculatorPMNS_NSI()
14  {
15  }
16 
17  double OscCalculatorPMNS_NSI::P(int flavBefore, int flavAfter, double E)
18  {
19  const int anti = (flavBefore > 0) ? +1 : -1;
20  assert(flavAfter/anti > 0);
21  if(anti != fPrevAnti) fPropDirty = true;
22 
23  int i = -1, j = -1;
24  if(abs(flavBefore) == 12) i = 0;
25  if(abs(flavBefore) == 14) i = 1;
26  if(abs(flavBefore) == 16) i = 2;
27  if(abs(flavAfter) == 12) j = 0;
28  if(abs(flavAfter) == 14) j = 1;
29  if(abs(flavAfter) == 16) j = 2;
30  assert(i >= 0 && j >= 0);
31 
32  if(fMixDirty){
33  fPMNS_NSI.SetMix(fTh12, fTh23, fTh13, fdCP);
34  fMixDirty = false;
35  }
36  if(fDmDirty){
37  fPMNS_NSI.SetDeltaMsqrs(fDmsq21, fDmsq32);
38  fDmDirty = false;
39  }
40  if(fEpsDirty){
41  fPMNS_NSI.SetNSI(fEps_ee, fEps_emu, fEps_etau,
42  fEps_mumu, fEps_mutau, fEps_tautau,
43  fDelta_emu, fDelta_etau, fDelta_mutau);
44  fEpsDirty = false;
45  }
46 
47 
48  fPMNS_NSI.ResetToFlavour(i);
49  // Assume Z/A=0.5
50  const double Ne = fRho/2;
51  fPMNS_NSI.PropMatter(fL, E, Ne, anti);
52  return fPMNS_NSI.P(j);
53  }
54 } // namespace
T abs(T value)
Definition: EarthModel.h:12