OscCalc.cxx
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////
2 // //
3 // \file OscCalc.cxx //
4 // //
5 // Class with methods for calculating all things related to oscillation //
6 // probabilities. //
7 // <rbpatter@caltech.edu> //
8 // //
9 //////////////////////////////////////////////////////////////////////////
10 #include "OscLib/OscCalc.h"
11 
12 #include <iostream>
13 #include <cmath>
14 
15 #include "TF1.h"
16 #include "TMath.h"
17 
18 namespace osc {
19 
20  // --------------------------------------------
22  {
23 
24  // put some sensible defaults here...
25 
26  fRho = 2.75; // g/cm^3
27  fL = 810; // km
28  fDmsq21 = 7.59E-5; // eV^2
29  fDmsq32 = 2.43E-3; //eV^2
30  fTh12 = 0.601;
31  fTh13 = 0.0;
32  fTh23 = 7.85398163397448279e-01; // pi/4
33  fdCP = 0;
34 
35  fUpdated = false;
36  }
37 
38  // --------------------------------------------
40  {
41  }
42 
43  // --------------------------------------------
45  {
46  return new OscCalc(*this);
47  }
48 
49  // --------------------------------------------
50  double OscCalc::P(int flavBefore, int flavAfter, double E)
51  {
52  bool antinu = (flavBefore<0&&flavAfter<0);
53  if (antinu) {
54  flavBefore *= -1;
55  flavAfter *= -1;
56  }
57  if (flavBefore==12&&flavAfter==12) return P_ee(E,antinu);
58  else if (flavBefore==12&&flavAfter==14) return P_em(E,antinu);
59  else if (flavBefore==12&&flavAfter==16) return P_et(E,antinu);
60  else if (flavBefore==14&&flavAfter==12) return P_me(E,antinu);
61  else if (flavBefore==14&&flavAfter==14) return P_mm(E,antinu);
62  else if (flavBefore==14&&flavAfter==16) return P_mt(E,antinu);
63  else if (flavBefore==16&&flavAfter==12) return P_te(E,antinu);
64  else if (flavBefore==16&&flavAfter==14) return P_tm(E,antinu);
65  else if (flavBefore==16&&flavAfter==16) return P_tt(E,antinu);
66  else return 0;
67  }
68 
69  double OscCalc::P_ee(double E, bool antinu) { return P_internal_ee(E,antinu,0); }
70  double OscCalc::P_em(double E, bool antinu) { return P_internal_me(E,antinu,1); }
71  double OscCalc::P_et(double E, bool antinu) { return P_internal_te(E,antinu,1); }
72 
73  double OscCalc::P_me(double E, bool antinu) { return P_internal_me(E,antinu,0); }
74  double OscCalc::P_mm(double E, bool antinu) { return 1-P_me(E,antinu)-P_mt(E,antinu); }
75  double OscCalc::P_mt(double E, bool antinu) { return P_internal_mt(E,antinu,0); }
76 
77  double OscCalc::P_te(double E, bool antinu) { return P_internal_te(E,antinu,0); }
78  double OscCalc::P_tm(double E, bool antinu) { return P_internal_mt(E,antinu,1); }
79  double OscCalc::P_tt(double E, bool antinu) { return 1 - P_te(E,antinu) - P_tm(E,antinu); }
80 
81  // --------------------------------------------
82  TF1* OscCalc::GetTF1(int flavBefore, int flavAfter)
83  {
84  TF1 *theTF1 = new TF1(Form("OscCalcFunction_%d_%d_%p",flavBefore,flavAfter,(void*)this),
85  this,&osc::OscCalc::P_wrapper,0,120,2,"OscCalc","P_wrapper");
86  theTF1->SetParameters(flavBefore,flavAfter);
87  theTF1->SetNpx(1000);
88  return theTF1;
89  }
90 
91  // --------------------------------------------
92  double OscCalc::P_wrapper(double *x, double *p)
93  {
94  // function for use by TF1
95  int flavBefore = int(p[0]);
96  int flavAfter = int(p[1]);
97  bool antinu = (flavBefore<0&&flavAfter<0);
98  if (antinu) {
99  flavBefore *= -1;
100  flavAfter *= -1;
101  }
102 
103  double (osc::OscCalc::*P_xx)(double,bool);
104  if (flavBefore==12&&flavAfter==12) P_xx = &osc::OscCalc::P_ee;
105  else if (flavBefore==12&&flavAfter==14) P_xx = &osc::OscCalc::P_em;
106  else if (flavBefore==12&&flavAfter==16) P_xx = &osc::OscCalc::P_et;
107  else if (flavBefore==14&&flavAfter==12) P_xx = &osc::OscCalc::P_me;
108  else if (flavBefore==14&&flavAfter==14) P_xx = &osc::OscCalc::P_mm;
109  else if (flavBefore==14&&flavAfter==16) P_xx = &osc::OscCalc::P_mt;
110  else if (flavBefore==16&&flavAfter==12) P_xx = &osc::OscCalc::P_te;
111  else if (flavBefore==16&&flavAfter==14) P_xx = &osc::OscCalc::P_tm;
112  else if (flavBefore==16&&flavAfter==16) P_xx = &osc::OscCalc::P_tt;
113  else P_xx = &osc::OscCalc::P_null;
114 
115  return (this->*P_xx)(x[0],antinu);
116  }
117 
118  // -----------------------------------------------
120  {
121  if (fUpdated) return;
122 
123  fDmsq31 = fDmsq21 + fDmsq32;
124  if (fDmsq31!=0) {
126  }
127  else {
128  std::cerr << "OscCalc::UpdateBasic() -- fDmsq31 should never be zero, but it is" << std::endl;
129  falpha = 0;
130  }
131  fsin_th12 = sin(fTh12);
132  fsin_th13 = sin(fTh13);
133  fsin_th23 = sin(fTh23);
134  fcos_th12 = cos(fTh12);
135  fcos_th13 = cos(fTh13);
136  fcos_th23 = cos(fTh23);
137  fsin_2th12 = sin(2*fTh12);
138  fsin_2th13 = sin(2*fTh13);
139  fsin_2th23 = sin(2*fTh23);
140  fcos_2th12 = cos(2*fTh12);
141  fcos_2th13 = cos(2*fTh13);
142  fcos_2th23 = cos(2*fTh23);
155 
156  static const double ZperA = 0.5; // e- per nucleon
157  static const double G_F = 1.16637E-23; // eV^-2
158  static const double hbar_c_eV_cm = 1.97326938E-5; // eV-cm
159 
160  fV = TMath::Sqrt2()*G_F*fRho*ZperA*TMath::Na()*hbar_c_eV_cm*hbar_c_eV_cm*hbar_c_eV_cm;
161 
162  fUpdated = true;
163  }
164 
165  // --------------------------------------------
166  void OscCalc::UpdateEDep(double E, bool antinu, bool fliptime)
167  {
168  static const double hbar_c_eV_km = 1.97326938E-10; // eV-km
169  static const double eVPerGeV = 1E9;
170 
171  int s = (antinu)?-1:1;
172  int t = (fliptime)?-1:1;
173 
174  fA = s*2*fV*E*eVPerGeV/fDmsq31;
175  fD = fDmsq31*fL/(4*E*eVPerGeV*hbar_c_eV_km);
176 
177  fdCPproxy = s*t*fdCP;
180 
181  if (falpha!=0) {
183  }
184  else {
185  std::cerr << "OscCalc::UpdateEDep() -- falpha should never be zero, but it is" << std::endl;
186  fC12 = 1;
187  }
189  }
190 
191  // --------------------------------------------
192  double OscCalc::P_internal_me(double E, bool antinu, bool fliptime)
193  {
194  UpdateBasic();
195  UpdateEDep(E,antinu,fliptime);
196 
197  double cosC13D = cos(fC13*fD);
198  double sinC13D = sin(fC13*fD);
199  double sin1pAD = sin((fA+1)*fD);
200  double cos1pAD = cos((fA+1)*fD);
201  double sinAD = sin(fA*fD);
202  double sinAm1D = sin((fA-1)*fD);
203  double cosdpD = cos(fdCPproxy+fD);
204  double sinApam2D = sin((fA+falpha-2)*fD);
205  double cosApam2D = cos((fA+falpha-2)*fD);
206  double cosaC12D = cos(falpha*fC12*fD);
207  double sinaC12D = sin(falpha*fC12*fD);
208 
209  // This is coming straight from the MINOS NueAna package...
210 
211  // First we calculate the terms for the alpha expansion (good to all orders in th13)
212 
213  // Leading order term
214  double p1 = fsin_sq_th23*fsin_sq_2th13*sinC13D*sinC13D/(fC13*fC13);
215 
216  // Terms that appear at order alpha
217  double p2Inner =
218  fD*cosC13D*(1-fA*fcos_2th13)/fC13 -
219  fA*sinC13D*(fcos_2th13-fA)/(fC13*fC13);
220 
221  double p2 = -2*fsin_sq_th12*fsin_sq_th23*fsin_sq_2th13*sinC13D/(fC13*fC13)*p2Inner*falpha;
222 
223  double p3Inner =
224  -fsin_dCPproxy*(cosC13D - cos1pAD)*fC13
225  + fcos_dCPproxy*(fC13*sin1pAD - (1-fA*fcos_2th13)*sinC13D);
226 
227  double p3 = fsin_2th12*fsin_2th23*fsin_th13*sinC13D/(fA*fC13*fC13)*p3Inner*falpha;
228 
229  // p1 + p2 + p3 is the complete contribution for this expansion
230 
231  // Now for the expansion in orders of sin(th13) (good to all order alpha)
232 
233  double pa1 = 0.0, pa2 = 0.0;
234  if (fabs(falpha)>1E-10) {
235  // leading order term
236  pa1 = fcos_th23*fcos_th23*fsin_sq_2th12*sinaC12D*sinaC12D/(fC12*fC12);
237 
238  // the first order in s13 term
239  double t1 = (fcos_2th12 - fA/falpha)/fC12
241  double t2 = -fcos_dCPproxy*(sinApam2D-sinaC12D*t1);
242  double t3 = -(cosaC12D-cosApam2D)*fsin_dCPproxy;
243  double denom = (1-fA-falpha+fA*falpha*fcos_th12*fcos_th12)*fC12;
244  double t4 = fsin_2th12*fsin_2th23*(1-falpha)*sinaC12D/denom;
245 
246  pa2 = t4*(t3+t2)*fsin_th13;
247  }
248  // pa1+pa2 is the complete contribution from this expansion
249 
250  // Now we need to add the two expansions and subtract off the terms that are
251  // in both (falpha^1, s13^1)
252 
253  double t1 = sinAD*cosdpD*sinAm1D/(fA*(fA-1));
254  double repeated = 2*falpha*fsin_2th12*fsin_2th23*fsin_th13*t1;
255 
256  // Calculate the total probability
257  double totalP = p1+p2+p3 + (pa1+pa2) - repeated;
258  return totalP;
259  }
260 
261  // --------------------------------------------
262  double OscCalc::P_internal_te(double E, bool antinu, bool fliptime)
263  {
264  UpdateBasic();
265  UpdateEDep(E,antinu,fliptime);
266 
267  double cosC13D = cos(fC13*fD);
268  double sinC13D = sin(fC13*fD);
269  double sin1pAD = sin((fA+1)*fD);
270  double cos1pAD = cos((fA+1)*fD);
271  double sinAD = sin(fA*fD);
272  double sinAm1D = sin((fA-1)*fD);
273  double cosdpD = cos(fdCPproxy+fD);
274  double sinApam2D = sin((fA+falpha-2)*fD);
275  double cosApam2D = cos((fA+falpha-2)*fD);
276  double cosaC12D = cos(falpha*fC12*fD);
277  double sinaC12D = sin(falpha*fC12*fD);
278 
279  // This is coming straight from the MINOS NueAna package...
280 
281  // First we calculate the terms for the alpha expansion (good to all orders in th13)
282 
283  // Leading order term
284  double p1 = fcos_sq_th23*fsin_sq_2th13*sinC13D*sinC13D/(fC13*fC13);
285 
286  // Terms that appear at order alpha
287  double p2Inner =
288  fD*cosC13D*(1-fA*fcos_2th13)/fC13 -
289  fA*sinC13D*(fcos_2th13-fA)/(fC13*fC13);
290 
291  double p2 = -2*fsin_sq_th12*fcos_sq_th23*fsin_sq_2th13*sinC13D/(fC13*fC13)*p2Inner*falpha;
292 
293  double p3Inner =
294  -fsin_dCPproxy*(cosC13D - cos1pAD)*fC13
295  + fcos_dCPproxy*(fC13*sin1pAD - (1-fA*fcos_2th13)*sinC13D);
296 
297  double p3 = fsin_2th12*(-fsin_2th23)*fsin_th13*sinC13D/(fA*fC13*fC13)*p3Inner*falpha;
298 
299  // p1 + p2 + p3 is the complete contribution for this expansion
300 
301  // Now for the expansion in orders of sin(th13) (good to all order falpha)
302 
303  double pa1 = 0.0, pa2 = 0.0;
304  if (fabs(falpha)>1E-10) {
305  // leading order term
306  pa1 = fsin_th23*fsin_th23*fsin_sq_2th12*sinaC12D*sinaC12D/(fC12*fC12);
307 
308  // the first order in s13 term
309  double t1 = (fcos_2th12 - fA/falpha)/fC12
310  - falpha*fA*fC12*fsin_sq_2th12/(2*(1-falpha)*fC12*fC12);
311  double t2 = -fcos_dCPproxy*(sinApam2D-sinaC12D*t1);
312  double t3 = -(cosaC12D-cosApam2D)*fsin_dCPproxy;
313  double denom = (1-fA-falpha+fA*falpha*fcos_th12*fcos_th12)*fC12;
314  double t4 = fsin_2th12*(-fsin_2th23)*(1-falpha)*sinaC12D/denom;
315 
316  pa2 = t4*(t3+t2)*fsin_th13;
317  }
318  // pa1+pa2 is the complete contribution from this expansion
319 
320  // Now we need to add the two expansions and subtract off the terms that are
321  // in both (falpha^1, s13^1)
322 
323  double t1 = sinAD*cosdpD*sinAm1D/(fA*(fA-1));
324  double repeated = 2*falpha*fsin_2th12*(-fsin_2th23)*fsin_th13*t1;
325 
326  // Calculate the total probability
327  double totalP = p1+p2+p3 + (pa1+pa2) - repeated;
328  return totalP;
329  }
330 
331  // --------------------------------------------
332  double OscCalc::P_internal_ee(double E, bool antinu, bool fliptime)
333  {
334  UpdateBasic();
335  UpdateEDep(E,antinu,fliptime);
336 
337  double cosC13D = cos(fC13*fD);
338  double sinC13D = sin(fC13*fD);
339  double sinaC12D = sin(falpha*fC12*fD);
340 
341  // This is coming straight from the MINOS NueAna package...
342 
343  // First we calculate the terms for the alpha expansion (good to all orders in th13)
344 
345  // Leading order term
346  double p1 = 1 - fsin_sq_2th13*sinC13D*sinC13D/(fC13*fC13);
347 
348  // Terms that appear at order alpha
349  double p2Inner =
350  fD*cosC13D*(1-fA*fcos_2th13)/fC13 -
351  fA*sinC13D*(fcos_2th13-fA)/(fC13*fC13);
352 
353  double p2 = 2*fsin_th12*fsin_th12*fsin_sq_2th13*sinC13D/(fC13*fC13)*p2Inner*falpha;
354 
355  // p1 + p2 is the complete contribution for this expansion
356 
357  // Now for the expansion in orders of sin(th13) (good to all order alpha)
358 
359  double pa1 = 1.0, pa2 = 0.0;
360  if (fabs(falpha)>1E-10) {
361  // leading order term
362  pa1 = 1 - fsin_sq_2th12*sinaC12D*sinaC12D/(fC12*fC12);
363  }
364  // pa1 is the complete contribution from this expansion, there is no order s13^1 term
365 
366  // Now we need to add the two expansions and subtract off the terms that are
367  // in both (falpha^1, s13^1)
368 
369  double repeated = 1;
370 
371  // Calculate the total probability
372  double totalP = p1+p2 + (pa1+pa2) - repeated;
373  return totalP;
374  }
375 
376  // --------------------------------------------
377  double OscCalc::P_internal_mt(double E, bool antinu, bool fliptime)
378  {
379  UpdateBasic();
380  UpdateEDep(E,antinu,fliptime);
381 
382  double cosC13D = cos(fC13*fD);
383  double sinC13D = sin(fC13*fD);
384  double sin1pAD = sin((fA+1)*fD);
385  double cos1pAD = cos((fA+1)*fD);
386  double sinAD = sin(fA*fD);
387  double sinAm1D = sin((fA-1)*fD);
388  double cosAm1D = cos((fA-1)*fD);
389  double sinApam2D = sin((fA+falpha-2)*fD);
390  double cosApam2D = cos((fA+falpha-2)*fD);
391  double cosaC12D = cos(falpha*fC12*fD);
392  double sinaC12D = sin(falpha*fC12*fD);
393  double sin1pAmCD = sin(0.5*(fA+1-fC13)*fD);
394  double sin1pApCD = sin(0.5*(fA+1+fC13)*fD);
395  double sinD = sin(fD);
396  double sin2D = sin(2*fD);
397  double cosaC12pApam2D = cos((falpha*fC12+fA+falpha-2)*fD);
398 
399  // This is coming straight from the MINOS NueAna package...
400 
401  // First we calculate the terms for the alpha expansion (good to all orders in th13)
402 
403  // Leading order term
404  double pmt_0 = 0.5*fsin_sq_2th23;
405  pmt_0 *= (1 - (fcos_2th13-fA)/fC13)*sin1pAmCD*sin1pAmCD
406  + (1 + (fcos_2th13-fA)/fC13)*sin1pApCD*sin1pApCD
407  - 0.5*fsin_sq_2th13*sinC13D*sinC13D/(fC13*fC13);
408 
409  // Terms that appear at order alpha
410  double t0, t1, t2, t3;
412  *(1+2*fsin_th13*fsin_th13*fA+fA*fA)/(fC13*fC13))*cosC13D*sin1pAD*2;
416  t1 *= sinC13D*cos1pAD/fC13;
417 
418  t2 = fsin_th12*fsin_th12*fsin_sq_2th13*sinC13D/(fC13*fC13*fC13);
419  t2 *= fA/fD*sin1pAD+fA/fD*(fcos_2th13-fA)/fC13*sinC13D
420  - (1-fA*fcos_2th13)*cosC13D;
421 
422  double pmt_1 = -0.5*fsin_sq_2th23*fD*(t0+t1+t2);
423 
424  t0 = cosC13D-cos1pAD;
425  t1 = 2*fcos_th13*fcos_th13*fsin_dCPproxy*sinC13D/fC13*t0;
426  t2 = -fcos_2th23*fcos_dCPproxy*(1+fA)*t0*t0;
427 
428  t3 = fcos_2th23*fcos_dCPproxy*(sin1pAD+(fcos_2th13-fA)/fC13*sinC13D);
429  t3 *= (1+2*fsin_th13*fsin_th13*fA + fA*fA)*sinC13D/fC13 - (1+fA)*sin1pAD;
430 
431  pmt_1 += (t1+t2+t3)*fsin_th13*fsin_2th12*fsin_2th23/(2*fA*fcos_th13*fcos_th13);
432  pmt_1 *= falpha;
433 
434  // pmt_0 + pmt_1 is the complete contribution for this expansion
435 
436  // Now for the expansion in orders of sin(th13) (good to all order alpha)
437 
438  // Leading order term
439  double pmt_a0 = 0.5*fsin_sq_2th23;
440 
441  pmt_a0 *= 1 - 0.5*fsin_sq_2th12*sinaC12D*sinaC12D/(fC12*fC12)
442  - cosaC12pApam2D
443  - (1 - (fcos_2th12 - fA/falpha)/fC12)*sinaC12D*sinApam2D;
444 
445  double denom = (1-fA-falpha+fA*falpha*fcos_th12*fcos_th12)*fC12;
446 
447  t0 = (cosaC12D-cosApam2D)*(cosaC12D-cosApam2D);
448  t1 = (fcos_2th12 - fA/falpha)/fC12*sinaC12D+sinApam2D;
449  t2 = ((fcos_2th12 - fA/falpha)/fC12+2*(1-falpha)/(falpha*fA*fC12))*sinaC12D + sinApam2D;
450 
451  t3 = (falpha*fA*fC12)/2*fcos_2th23*fcos_dCPproxy*(t0 + t1*t2);
452  t3 += fsin_dCPproxy*(1-falpha)*(cosaC12D-cosApam2D)*sinaC12D;
453 
454  double pmt_a1 = fsin_th13*fsin_2th12*fsin_2th23/denom*t3;
455 
456  // pmt_a1+pmt_a2 is the complete contribution from this expansion
457 
458  // Now we need to add the two expansions and subtract off the terms that are
459  // in both (falpha^1, s13^1)
460 
461  t1 = fsin_dCPproxy*sinD*sinAD*sinAm1D/(fA*(fA-1));
462  t2 = -1/(fA-1)*fcos_dCPproxy*sinD*(fA*sinD-sinAD*cosAm1D/fA)*fcos_2th23/denom;
463 
465 
466  t1 = fsin_sq_2th23*sinD*sinD
468 
469  double repeated = t0+t1;
470 
471  // Calculate the total probability
472  double totalP = pmt_0 + pmt_1 + pmt_a0 + pmt_a1 - repeated;
473 
474  return totalP;
475  }
476 }//namespace
double fsin_2th13
Definition: OscCalc.h:94
double P_mt(double E, bool antinu=false)
Definition: OscCalc.cxx:75
double P_tm(double E, bool antinu=false)
Definition: OscCalc.cxx:78
double P_ee(double E, bool antinu=false)
Definition: OscCalc.cxx:69
double P_internal_te(double E, bool antinu, bool fliptime)
Definition: OscCalc.cxx:262
fvar< T > fabs(const fvar< T > &x)
Definition: fabs.hpp:15
double fcos_sq_2th13
Definition: OscCalc.h:109
const int Na
double fsin_sq_th23
Definition: OscCalc.h:101
double P_te(double E, bool antinu=false)
Definition: OscCalc.cxx:77
double P_internal_me(double E, bool antinu, bool fliptime)
Definition: OscCalc.cxx:192
const char * p
Definition: xmltok.h:285
double falpha
Definition: OscCalc.h:111
double P_tt(double E, bool antinu=false)
Definition: OscCalc.cxx:79
double fsin_sq_th13
Definition: OscCalc.h:100
double fcos_sq_th23
Definition: OscCalc.h:104
double fcos_sq_th13
Definition: OscCalc.h:103
double fcos_dCPproxy
Definition: OscCalc.h:121
double fcos_sq_th12
Definition: OscCalc.h:102
double fD
Definition: OscCalc.h:116
double fsin_sq_th12
Definition: OscCalc.h:99
double fcos_th13
Definition: OscCalc.h:91
OStream cerr
Definition: OStream.cxx:7
double fsin_th23
Definition: OscCalc.h:89
void UpdateBasic()
Definition: OscCalc.cxx:119
double fcos_th23
Definition: OscCalc.h:92
double fsin_sq_2th23
Definition: OscCalc.h:107
double fcos_sq_2th12
Definition: OscCalc.h:108
double fcos_th12
Definition: OscCalc.h:90
const XML_Char * s
Definition: expat.h:262
double fcos_2th12
Definition: OscCalc.h:96
double fC13
Definition: OscCalc.h:118
double P_me(double E, bool antinu=false)
Definition: OscCalc.cxx:73
Float_t E
Definition: plot.C:20
double fsin_th12
Definition: OscCalc.h:87
double P_et(double E, bool antinu=false)
Definition: OscCalc.cxx:71
void UpdateEDep(double E, bool antinu, bool fliptime)
Definition: OscCalc.cxx:166
double fsin_2th12
Definition: OscCalc.h:93
double P_null(double, bool)
Definition: OscCalc.h:42
double fsin_sq_2th12
Definition: OscCalc.h:105
TF1 * GetTF1(int flavBefore, int flavAfter)
Definition: OscCalc.cxx:82
double t2
double fsin_2th23
Definition: OscCalc.h:95
double fA
Definition: OscCalc.h:115
double fdCPproxy
Definition: OscCalc.h:119
Oscillation probability calculators.
Definition: Calcs.h:5
double fcos_2th13
Definition: OscCalc.h:97
bool fUpdated
Definition: OscCalc.h:83
double fDmsq31
Definition: OscCalc.h:86
double fsin_sq_2th13
Definition: OscCalc.h:106
T sin(T number)
Definition: d0nt_math.hpp:132
double P_internal_ee(double E, bool antinu, bool fliptime)
Definition: OscCalc.cxx:332
Var Sqrt(const Var &v)
Use to take sqrt of a var.
Definition: Var.cxx:326
double P_em(double E, bool antinu=false)
Definition: OscCalc.cxx:70
virtual ~OscCalc()
Definition: OscCalc.cxx:39
double fC12
Definition: OscCalc.h:117
T cos(T number)
Definition: d0nt_math.hpp:78
double fsin_dCPproxy
Definition: OscCalc.h:120
double fsin_th13
Definition: OscCalc.h:88
virtual IOscCalcAdjustable * Copy() const override
Definition: OscCalc.cxx:44
double fV
Definition: OscCalc.h:112
double P_wrapper(double *x, double *p)
Definition: OscCalc.cxx:92
double P(int flavBefore, int flavAfter, double E) override
E in GeV; flavors as PDG codes (so, neg==>antinu)
Definition: OscCalc.cxx:50
double P_internal_mt(double E, bool antinu, bool fliptime)
Definition: OscCalc.cxx:377
double fcos_2th23
Definition: OscCalc.h:98
double fcos_sq_2th23
Definition: OscCalc.h:110
double P_mm(double E, bool antinu=false)
Definition: OscCalc.cxx:74