Primaries.cc
1 #include "Constants.h"
2 #include "vector.hh"
3 #include "position.hh"
4 #include "TF1.h"
5 #include "TTree.h"
6 #include <fstream>
7 #include <iostream>
8 #include <stdio.h>
9 #include "Settings.h"
10 #include "earthmodel.hh"
11 #include "icemodel.hh"
12 #include "Primaries.h"
13 #include "Settings.h"
14 #include "counting.hh"
15 #include "icemc_random.h"
16 
17 #include <cmath>
18 
19 
20 
21 #include "TH2D.h"
22 #include "TCanvas.h"
23 
24 Primaries::Primaries(){//constructor
25 
26  // This is for parametrizations in Connolly et al. 2011
27  //in the form of [i][j] where i is neutrino type(nu_nubar) and j is current type, "nc" vs "cc".
28  //[nu_nubar][currentint]
29  //[0=nu, 1=nubar][0=neutral current, 1=charged current]
30  //[0][0]->[nu][neutral current]
31  //[0][1]->[nu][charged current]
32  //[1][0]->[nubar][neutral current]
33  //[1][1]->[nubar][charged current]
34 
35  //[nu][neutral current]
36  c0[0][0]=-1.826;
37  c1[0][0]=-17.31;
38  c2[0][0]=-6.448;
39  c3[0][0]=1.431;
40  c4[0][0]=-18.61;
41 
42  //[nu][charged current]
43  c0[0][1]=-1.826;
44  c1[0][1]=-17.31;
45  c2[0][1]=-6.406;
46  c3[0][1]=1.431;
47  c4[0][1]=-17.91;
48 
49  //[nubar][neutral current]
50  c0[1][0]=-1.033;
51  c1[1][0]=-15.95;
52  c2[1][0]= -7.296;
53  c3[1][0]=1.569;
54  c4[1][0]=-18.30;
55 
56  //[nubar][charged current]
57  c0[1][1]=-1.033;
58  c1[1][1]=-15.95;
59  c2[1][1]=-7.247;
60  c3[1][1]=1.569;
61  c4[1][1]=-17.72;
62 
63  char ch[50];
64  string stmp;
65  string sbase="fsigma";
66  for(int i=0; i<=1;i++){ // nu, nubar
67  for(int j=0; j<=1; j++){ // nc, cc
68  sprintf(ch,"%d%d",i,j);
69  stmp=ch;
70  m_fsigma[i][j]=new TF1((sbase+stmp).c_str(),"pow(10, [1]+[2]*log(x-[0])+[3]*pow(log(x-[0]),2)+[4]/log(x-[0]))", 4., 21.);//check bounds. they're in log10 GeV.
71  //x=log10(pnu/GeV).
72  m_fsigma[i][j]->SetParameters(c0[i][j], c1[i][j], c2[i][j], c3[i][j], c4[i][j]);
73  //"fsigma00"->[nu][neutral current]
74  //"fsigma01"->[nu][charged current]
75  //"fsigma10"->[nubar][neutral current]
76  //"fsigma11"->[nubar][charged current]
77  }
78  }
79  m_csigma=new TCanvas("m_csigma","m_csigma title",1000, 700);
80  m_hsigma=new TH2D("hsigma","title hsigma", 600, 7., 12., 600, -40., -30.);
81 
82  m_hsigma->SetTitle("log10 (pnu) vs.log10 Cross Section Sigma");
83  m_hsigma->GetXaxis()->SetTitle("Log10(Ev/ GeV)");
84  m_hsigma->GetYaxis()->SetTitle("log10(Cross Section/ m^2)");
85 
86  m_hsigma->Draw("scat");
87  m_hsigma->SetMarkerStyle(7);
88  m_hsigma->SetMarkerSize(3);
89 
90  // again y distributions from Connolly et al. 2011
91  m_myY=new Y();
92 
93  //From Table V. Connolly Calc 2011.
94  //A_low[4];//same for any [i]nu_nubar and [j]currentint.
95  A_low[0]=0.0;
96  A_low[1]=0.0941;
97  A_low[2]=4.72;
98  A_low[3]=0.456;
99  //high y///////////////////
100  //[0=nu, 1=nubar][0=neutral current, 1=charged current]
101  //[nu_bar][currentint];
102  A0_high[0][0]=-0.005;
103  A1_high[0][0]=0.23;
104  A2_high[0][0]=3.0;
105  A3_high[0][0]=1.7;
106 
107  A0_high[0][1]=-0.008;
108  A1_high[0][1]=0.26;
109  A2_high[0][1]=3.0;
110  A3_high[0][1]=1.7;
111 
112  A0_high[1][0]=-0.005;
113  A1_high[1][0]=0.23;
114  A2_high[1][0]=3.0;
115  A3_high[1][0]=1.7;
116 
117  A0_high[1][1]=-0.0026;
118  A1_high[1][1]=0.085;
119  A2_high[1][1]=4.1;
120  A3_high[1][1]=1.7;
121 
122  b0=2.55;
123  b1=-0.0949; //C2_low=b0+b1*epsilon;
124 
125  run_old_code=0;//for GetSigma() & Gety() runs of the old code if 1, else runs current code.
126 
127  // 0=Reno
128  // 1=Connolly et al. 2011
129  mine[0]=1.2E15;
130  mine[1]=1.E4;// minimum energy for cross section parametrizations
131  maxe[0]=1.E21;
132  maxe[1]=1.E21; // use the same upper limit for reno as for connolly et al.
133 }
134 
135 
136 double Primaries::Getyweight(double pnu,double y,int nu_nubar,int currentint) {
137  return m_myY->Getyweight(pnu,y,nu_nubar,currentint);
138 }
139 
140 
141 double Primaries::pickY(Settings *settings1,double pnu,int nu_nubar,int currentint) {
142  return m_myY->pickY(settings1,pnu,nu_nubar,currentint);
143 }
144 
145 
146 Primaries::~Primaries(){//default deconstructor
147  m_hsigma->Draw("same");
148  m_csigma->Print("sigmaCrossSection.pdf");
149  delete m_hsigma;
150  delete m_myY;
151  for(int i=0; i<=1;i++){ // nu, nubar
152  for(int j=0; j<=1; j++){ // nc, cc
153  delete m_fsigma[i][j];
154  }
155  }
156 }//deconstructor
157 
158 
159 int Primaries::GetSigma(double pnu,double& sigma,double &len_int_kgm2,Settings *settings1,int nu_nubar,int currentint){
160  // calculate cross section
161  if (pnu<mine[settings1->SIGMAPARAM] || pnu>maxe[settings1->SIGMAPARAM]) {
162  cout << "Need a parameterization for this energy region.\n";
163  return 0;
164  } //if
165  else {
166 
167  //nu=0, nubar=1
168  if(nu_nubar!=0 && nu_nubar!=1){
169  cout<<"nu_nubar is not defined correctly!\n";
170  return 0;
171  }
172  if (currentint!=Interaction::kcc && currentint!=Interaction::knc){//default "cc"
173  cout<<"Current is not cc or nc!\n";
174  return Interaction::kcc;
175  }
176 
177  if(settings1->SIGMAPARAM==0){ // Reno
178  // fit to cross sections calculated by M.H. Reno using the same method as Gandhi et al, but with the CTEQ6-DIS parton distribution functions instead of the CTEQ4-DIS distribution functions
179  sigma=(2.501E-39)*pow(pnu/1.E9,0.3076)*settings1->SIGMA_FACTOR; // 10^18 eV - 10^21 eV(use this one for ANITA)
180  //sigma=(1.2873E-39)*pow(pnu/1.E9,0.33646)*SIGMA_FACTOR; // 10^17 eV - 10^20 eV (use this one for SalSA)
181  }//old code
182  else if (settings1->SIGMAPARAM==1) {//Connolly et al.
183  double pnuGeV=pnu/1.E9;//Convert eV to GeV.
184  double epsilon=log10(pnuGeV);
185  sigma=settings1->SIGMA_FACTOR*(m_fsigma[nu_nubar][currentint]->Eval(epsilon))/1.E4;//convert cm to meters. multiply by (1m^2/10^4 cm^2).
186 
187  if(m_hsigma->GetEntries()<2000){
188  m_hsigma->Fill(epsilon, log10(sigma));
189  }
190  }//else current code
191  }//if
192  // interaction length in kg/m^2
193 
194  len_int_kgm2=M_NUCL/sigma; // kg/m^2
195  return 1;
196 } //GetSigma
197 
198 
201  string nuflavor;
202 
203  double rnd=getRNG(RNG_INTERACTION)->Rndm();
204 
205  if (rnd<=(1./3.)) {
206  nuflavor="nue";
207  } //if
208  else if(rnd<=(2./3.)) {
209  nuflavor="numu";
210  } //else if
211  else if(rnd<=(1.)) {
212  nuflavor="nutau";
213  } //else if
214  else
215  cout << "unable to pick nu flavor\n";
216  return nuflavor;
217 } //GetNuFlavor
218 
219 
220 Interaction::Interaction(string inttype,Primaries *primary1,Settings *settings1,int whichray,Counting *count1) : banana_flavor("numu"), banana_current("nc"), nu_banana(Position(theta_nu_banana,phi_nu_banana)) {
221 
222  noway=0;
223  wheredoesitleave_err=0;
224  neverseesice=0;
225 
226  wheredoesitenterice_err=0;
227  toohigh=0;
228  toolow=0;
229 
230  iceinteraction=0;
231 
232  //setting it to 1 if it's a source is useless here because it wantonly gets set elsewhere...
233  dtryingdirection = 1.;
234 
235  dnutries=0.;
236 
237  weight_nu=0;
238  weight_nu_prob=0;
239 
240  if (inttype=="banana") {
241  //surface_over_banana_nu and altitude_nu_banana haven't been defined yet!
242  // nu_banana = (surface_over_banana_nu+altitude_nu_banana) * nu_banana;
243 
244  //Set neutrino direction
245  nnu_banana = Vector(nu_banana_theta_angle + PI,nu_banana_phi_angle);
246  nnu_banana = nnu_banana.ChangeCoord(nu_banana);
247 
248  current = banana_current;
249 
250  nuflavor = banana_flavor;
251 
252 
253  }
254  else {
255  setNuFlavor(primary1,settings1,whichray,count1);
256  setCurrent();
257  // setnu_nubar(primary1);//same function for inttype "banna" or otherwise.
258  }
259 }
260 
261 
263  double rndlist[2];
264  getRNG(RNG_DIRECTION)->RndmArray(2,rndlist);
265 
266  costheta_nutraject=2*rndlist[0]-1;
267 
268  // pick a neutrino azimuthal angle
269  phi_nutraject=2*PI*rndlist[1];
270 
271  // check that these give the right result
272  double thetanu=acos(costheta_nutraject);
273 
274  double sinthetanu=sin(thetanu);
275 
276  // find direction vector of neutrino
277  // **** are cosine and sine flipped?
278  nnu.SetX(sinthetanu*cos(phi_nutraject));
279  nnu.SetY(sinthetanu*sin(phi_nutraject));
280  nnu.SetZ(costheta_nutraject);
281 }
282 
283 
284 void Interaction::setNuFlavor(Primaries *primary1,Settings *settings1,int whichray,Counting *counting1) {
285  // pick the neutrino flavor, type of tau decay when relevant,
286  // lpm energy.
287  nuflavor=primary1->GetNuFlavor();
288 
289  if (settings1->MINRAY==whichray) {
290  // only increment neutrino flavor on first ray so you don't count twice
291  if (nuflavor=="nue")
292  counting1->nnu_e++;
293  if (nuflavor=="numu")
294  counting1->nnu_mu++;
295  if (nuflavor=="nutau")
296  counting1->nnu_tau++;
297  }
298 
299  if (settings1->FORSECKEL==1) // For making array of signal vs. freq, viewangle, just use muon neutrinos
300  nuflavor="nue";
301  if (nuflavor=="nue") //For outputting to file
302  nuflavorint=1;
303  else if (nuflavor=="numu")
304  nuflavorint=2;
305  else if (nuflavor=="nutau")
306  nuflavorint=3;
307  else
308  cout<<"nuflavor is "<<nuflavor<<"\n";
309 }
310 
311 
314  string current;
315  double rnd=getRNG(RNG_INTERACTION)->Rndm();
316  if (rnd<=0.6865254) // 10^18 eV - 10^21 eV (use this one for ANITA)
317 //if (rnd<=0.6893498) // 10^17 eV - 10^20 eV (use this one for SalSA)
318  current="cc";
319  else
320  current="nc";
321  return current;
322 } //GetCurrent
323 
324 void Interaction::setCurrent() {
325  // pick whether it is neutral current
326  // or charged current
327  current=this->GetCurrent();
328  if (current=="cc") //For outputting to file
329  currentint=kcc;
330  else if(current=="nc")
331  currentint=knc;
332 }//setCurrent
333 
334 
336 Y::Y() { // Constructor
343  ffrac=new TF1("ffrac","[0]*sin([1]*(x-[2]))",7.,12.); // This is the fraction of the distribution in the low y region given by Equation 18.
344 
345  ffrac->FixParameter(0,0.128); // These parameters are the same for all interaction types
346  ffrac->FixParameter(1,-0.197);
347  ffrac->FixParameter(2,21.8);
348 
349  string sbase="C1_high";
350  char which[50];
351  for (int i=0;i<2;i++) {
352  for (int j=0;j<2;j++) {
353  sprintf(which,"%d%d",i,j);
354  string sname=sbase+which;
355  fC1_high[i][j]=new TF1(sname.c_str(),"[0]-[1]*(exp(-(x-[2])/[3]))",7.,12.); // parameterization of parameter C1 in the high y region according to Equation 16
356  }
357  }
358 
359  int kcc = Interaction::kcc;
360  int knc = Interaction::knc;
361 
362  // parameter A_0 in Table V for the high y region
363  fC1_high[1][kcc]->FixParameter(0,-0.0026);//nubar, CC
364  fC1_high[0][kcc]->FixParameter(0,-0.008); //nu, CC
365  fC1_high[1][knc]->FixParameter(0,-0.005); //nubar, NC
366  fC1_high[0][knc]->FixParameter(0,-0.005); //nu, NC
367 
368  // parameter A_1 in Table V for the high y region
369  fC1_high[1][kcc]->FixParameter(1,0.085); // nubar, CC
370  fC1_high[0][kcc]->FixParameter(1,0.26); // nu, CC
371  fC1_high[1][knc]->FixParameter(1,0.23); // nubar, NC
372  fC1_high[0][knc]->FixParameter(1,0.23); // nu, NC
373 
374 
375  // parameter A_2 in Table V for the high y region
376  fC1_high[1][kcc]->FixParameter(2,4.1); // nubar, CC
377  fC1_high[0][kcc]->FixParameter(2,3.0); // nu, CC
378  fC1_high[1][knc]->FixParameter(2,3.0); // nubar, NC
379  fC1_high[0][knc]->FixParameter(2,3.0); // nu, NC
380 
381  // parameter A_3 in Table V for the high y region. This parameter is the same for all four interaction types
382  for (int i=0;i<2;i++) { // nu, nubar
383  for (int j=0;j<2;j++) { // CC, NC
384  fC1_high[i][j]->FixParameter(3,1.7);
385  }
386  }
387 
388  fC1_low=new TF1("C1_low","[0]-[1]*(exp(-(x-[2])/[3]))",7.,12.); // parameterization of parameter C1 in the low y region according to Equation 16.
389  // This parameterization is the same for all interaction types.
390 
391  fC1_low->FixParameter(0,0.);
392  fC1_low->FixParameter(1,0.0941);
393  fC1_low->FixParameter(2,4.72);
394  fC1_low->FixParameter(3,0.456);
395 
396  fC2=new TF1("C2","[0]+[1]*x",7.,12.); // parameterization of parameter C2 in the low y region according to Equation 17.
397  // This parameterization is the same for all interaction types.
398  fC2->FixParameter(0,2.55);
399  fC2->FixParameter(1,-9.49E-2);
400 
401  // For picking inelasticity in low y region according to Equation 14.
402  fy0_low=new TF3("fy0_low","x+(z*([1]-x)^(-1./y+1)+(1-z)*([0]-x)^(-1./y+1))^(y/(y-1))"); // x=C_1, y=C_2, z=R
403  fy0_low->SetParameter(0,ymin_low); // y_min
404  fy0_low->SetParameter(1,ymax_low); // y_max
405 
406  // For picking inelasticity in high y region according to Equation 15.
407  fy0_high=new TF2("fy0_high","([1]-x)^y/([0]-x)^(y-1.)+x"); // x=C_1, y=R
408  fy0_high->SetParameter(0,ymin_high); // y_min
409  fy0_high->SetParameter(1,ymax_high); // y_max
410 }//Y Constructor
411 
412 
414 double Y::pickY(Settings *settings1,double pnu,int nu_nubar,int currentint) {
415  if(settings1->YPARAM==0){
416  return pickYGandhietal();
417  }//old Gety
418  else { //use prescription in Connolly et al.2011
419  // nu_nubar=0;
420  double elast_y=pickYConnollyetal2011(nu_nubar,currentint,pnu);
421  return elast_y;
422  }//current Gety
423 } //Gety
424 
425 
427 double Y::pickYGandhietal() {
428  double rnd;
429  double x = 0;
430  // generate according to Ghandi fig. 6
431  // adjust exponent until looks like the curve
432  // and has right mean.
433  // (Note this is not the fcn, but the inverse of the integral...)
434  rnd = getRNG(RNG_INTERACTION)->Rndm(1); // (0,1)
435  // cout << "R1, R2, rnd are " << R1 << " " << R2 << " " << rnd << "\n";
436  x=pow(-log(R1+rnd*R2),2.5);
437  return x;
438 }
439 
440 
441 double Y::pickYConnollyetal2011(int NU,int CURRENT,double pnu) {
442  // Select a y according to recipe in Connolly et al. (2011)
443  //pnu is in eV.
444  double epsilon=log10(pnu/1.E9);
445  // pick a y region
446  //double R1=Rand3Y.Rndm(); // choose our first random number
447  double r1=getRNG(RNG_INTERACTION)->Rndm();
448 
449  int iyregion=0; // 0 for high y region
450  if (r1<ffrac->Eval(epsilon)) // Is it going to be in low y region?
451  iyregion=1; // 1 for low y region
452 
453  double C1_this;
454  if (iyregion==0) // high y region
455  C1_this=fC1_high[NU][CURRENT]->Eval(epsilon); // C1 for this event
456  else // low y region
457  C1_this=fC1_low->Eval(epsilon); // C1 for this event
458 
459  double C2_this=fC2->Eval(epsilon); // C2 for this event
460 
461  // pick another random number
462  double r2=getRNG(RNG_INTERACTION)->Rndm();// double r2=Rand3Y.Rndm();
463  double y0=0.;
464 
465  if (iyregion==0) // high y region
466  y0=fy0_high->Eval(C1_this,r2); // pick y0 according to Equation 15
467  else if (iyregion==1) // low y region
468  y0=fy0_low->Eval(C1_this,C2_this,r2); // pick y0 according to Equation 14
469 
470  return y0;
471 }//pickY
472 
473 
474 double Y::Getyweight(double pnu, double y, int nu_nubar, int currentint){
475  //from Connolly Calc 2011, Equations 9, 10, 11, 16, and 17.
476  // double dy=0.;//default
477  //Ev, cc or nc, nu or nubar.
478 
479  double C0_highbar, C0_lowbar,C0_high, C0_low;//these C0's are normalization factors.
480  double dNdy=0.;//default
481  double U, W, B, T;//are added in to help with readability of equations.
482  double C1_low, C2, C1_high;
483  double weighty;
484  double epsilon=log10(pnu/1.E9);
485 
486  C2=fC2->Eval(epsilon);//Eq(17)
487  C1_low=fC1_low->Eval(epsilon);//Eq(16) (Low region)
488 
489  C1_high=fC1_high[nu_nubar][currentint]->Eval(epsilon);//Eq(16)(High region)
490 
491 
492  if(nu_nubar==0) {
493  U=1-1/C2;
494  W=fabs( (ymax_high-C1_high)/(ymin_high-C1_high));
495  B=(pow(ymax_low-C1_low, 1/C2)/(ymax_low-C1_high));
496  T=B*((pow(ymax_low-C1_low, U)-pow(ymin_low-C1_low, U) )/U)+log(W);
497  C0_high=1/T;
498  C0_low=C0_high*(pow(ymax_low-C1_low, 1/C2))/(ymax_low-C1_high);
499 
500  if(y<ymax_low){//Eq(9)
501  // dy=0.00002;
502  dNdy=C0_low/pow(y-C1_low, 1/C2);//Eq(10)
503  }
504  else if(y>=ymax_low && y<1.){//Eq(9)
505  // dy=0.001;
506  dNdy=C0_high/(y-C1_high);//Eq(10)
507  }
508  else{
509  dNdy=0.;
510  cout<<"y value is outside of the domain of y.\n";
511  }
512  }
513  else if(nu_nubar==1){
514  U=1-1/C2;
515  W=fabs( (ymax_high-C1_high)/(ymin_high-C1_high));
516  B=(pow(ymax_low-C1_low, 1/C2)/(ymax_low-C1_high));
517  T=B*((pow(ymax_low-C1_low, U)-pow(ymin_low-C1_low, U) )/U)+log(W);
518  C0_highbar=1/T;
519  C0_lowbar=C0_highbar*(pow(ymax_low-C1_low, 1/C2))/(ymax_low-C1_high);
520 
521  if(y<ymax_low){
522  // dy=0.00002;
523  dNdy=C0_lowbar/pow(y-C1_low, 1/C2);
524  }
525  else if(y>=ymax_low && y<1.){
526  // dy=0.001;
527  dNdy=C0_highbar/(y-C1_high);
528  }
529  else{
530  dNdy=0;
531  cout<<"y value is outside of the domain of y.\n";
532  }
533  }
534  else{
535  cout<<"Nu_nubar is not defined!\n";
536  }
537  weighty=dNdy;
538  return weighty;
539 }//Getyweight
Primaries()
constructor
Definition: Primaries.cc:24
double c4[2][2]
Table V of Connolly et al. for Eq. 7.
Definition: Primaries.h:113
int currentint
Ditto - Stephen.
Definition: Primaries.h:224
double c2[2][2]
Table V of Connolly et al. for Eq. 7.
Definition: Primaries.h:111
double A_low[4]
Table V of Connolly et al. for use in Eq. 16. Same for any nu_nubar and current type.
Definition: Primaries.h:98
int GetSigma(double pnu, double &sigma, double &len_int_kgm2, Settings *settings1, int nu_nubar, int currentint)
Neutrino-nucleon cross-sections using model chosen.
Definition: Primaries.cc:159
double A0_high[2][2]
Table V of Connolly et al. for use in Eq. 16.
Definition: Primaries.h:99
Y()
Definition: Primaries.cc:336
double costheta_nutraject
theta of nnu with earth center to balloon as z axis
Definition: Primaries.h:188
string GetCurrent()
choose CC or NC: get from ratios in Ghandi etal paper, updated for the CTEQ6-DIS parton distribution ...
Definition: Primaries.cc:313
~Primaries()
*primary1 must be manually deleted in icemc for deconstructor to actually be called.
Definition: Primaries.cc:146
Reads in and stores input settings for the run.
Definition: Settings.h:35
double b1
Eq. 17 of Connolly et al.
Definition: Primaries.h:104
double mine[NSIGMAS]
minimum energy for cross section parametrizations, in eV
Definition: Primaries.h:118
Functions you need to generate a primary interaction including cross sections and picking charged cur...
Definition: Primaries.h:83
This class is a 3-vector that represents a position on the Earth&#39;s surface.
Definition: position.hh:26
double pickY(Settings *settings1, double pnu, int nu_nubar, int currentint)
pick inelasticity y according to chosen model
Definition: Primaries.cc:141
double b0
Eq. 17 of Connolly et al.
Definition: Primaries.h:103
double c3[2][2]
Table V of Connolly et al. for Eq. 7.
Definition: Primaries.h:112
double Getyweight(double pnu, double y, int nu_nubar, int currentint)
in case you choose y from a flat distribution, this is the weight you should give it according to Con...
Definition: Primaries.cc:136
int nuflavorint
Added by Stephen for output purposes.
Definition: Primaries.h:223
double phi_nutraject
phi of nnu with earth center to balloon as z axis
Definition: Primaries.h:189
Inelasticity distributions: stores parametrizations and picks inelasticities.
Definition: Primaries.h:38
void PickAnyDirection()
Constructor.
Definition: Primaries.cc:262
double pickY(Settings *settings1, double pnu, int nu_nubar, int currentint)
pick inelasticity y according to chosen model
Definition: Primaries.cc:414
string nuflavor
neutrino flavor
Definition: Primaries.h:221
double c1[2][2]
Table V of Connolly et al. for Eq. 7.
Definition: Primaries.h:110
This class represents a three-vector. Operators are overloaded to provide for the familiar operations...
Definition: vector.hh:27
double A3_high[2][2]
Table V of Connolly et al. for use in Eq. 16.
Definition: Primaries.h:102
string GetNuFlavor()
pick a neutrino type, flavor ratio 1:1:1
Definition: Primaries.cc:200
double maxe[NSIGMAS]
minimum energy for cross section parametrizations, in eV
Definition: Primaries.h:119
Handles event counting as cuts are made.
Definition: counting.hh:10
string current
CC or NC?
Definition: Primaries.h:222
double Getyweight(double pnu, double y, int nu_nubar, int currentint)
If you want to choose y from a flat distribution this is the weight it should have according to Conno...
Definition: Primaries.cc:474
double A1_high[2][2]
Table V of Connolly et al. for use in Eq. 16.
Definition: Primaries.h:100
double c0[2][2]
Table V of Connolly et al. for Eq. 7.
Definition: Primaries.h:109
double A2_high[2][2]
Table V of Connolly et al. for use in Eq. 16.
Definition: Primaries.h:101
Vector nnu
direction of neutrino (+z in south pole direction)
Definition: Primaries.h:187