joint_fit_2019_bestfit.C
Go to the documentation of this file.
3 #include "CAFAna/Fit/Fit.h"
11 #include "CAFAna/FC/FCSurface.h"
16 #include "CAFAna/Vars/FitVars.h"
17 #include "OscLib/IOscCalc.h"
18 #include "Utilities/rootlogon.C"
19 
21 //#include "./joint_fit_2019_loader_tools.h"
22 
23 #include "TCanvas.h"
24 #include "TBox.h"
25 #include "TColor.h"
26 #include "TGraph.h"
27 #include "TVectorD.h"
28 #include "TF1.h"
29 #include "TLegend.h"
30 #include "TText.h"
31 #include "TLatex.h"
32 #include "TPad.h"
33 #include "TLine.h"
34 #include "TMarker.h"
35 #include "TStyle.h"
36 #include "TSystem.h"
37 #include "TGaxis.h"
38 
39 #include <algorithm>
40 #include <vector>
41 #include <string>
42 #include <fstream>
43 
44 using namespace ana;
45 
46 void joint_fit_2019_bestfit(bool corrSysts = true,
47  TString options="joint_realData_both")
48 
49 {
50  bool nueOnly = options.Contains("nueOnly");
51  bool numuOnly = options.Contains("numuOnly");
52  bool joint = options.Contains("joint");
53  assert (nueOnly || numuOnly || joint);
54 
55  bool FHCOnly = options.Contains("FHCOnly");
56  bool RHCOnly = options.Contains("RHCOnly");
57  bool both = options.Contains("both");
58  assert (FHCOnly || RHCOnly || both);
59 
60  bool fake2018 = options.Contains("fake2018");
61  bool realData = options.Contains("realData");
62 
63  auto suffix = options;
64  if(corrSysts) suffix+="_systs";
65  else suffix+="_stats";
66 
67  TString outdir="./";//"/nova/ana/nu_e_ana/Ana2019/Results/BestFits/";
68 
69  TString outfilename (outdir + "bestfits_" + suffix);
70 
71  //////////////////////////////////////////////////
72  // Load Nue and Numu experiments
73  //////////////////////////////////////////////////
74  //need numu only for prestage seeds
75 
76  struct predictions {
77  const string name;
78  const IPrediction * pred;
79  std::pair <TH1D*, double> cos;
80  double pot;
81  };
82 
83  std::vector <predictions> preds;
84  std::vector <predictions> preds_numu_only;
85  std::vector <Spectrum * > data;
86  std::vector <Spectrum * > data_numu_only;
87  std::vector <const IExperiment * > expts;
88  std::vector <const IExperiment * > expts_numu_only;
89 
90  auto calc_fake = DefaultOscCalc();
91  if(fake2018) SetFakeCalc(calc_fake, 0.58, 2.51e-3, 0.17);
92  else if(!realData) {std::cerr << "need setting for data\n"; exit(1);}
93 
94  if(!numuOnly) {
95  if(FHCOnly || both ) {
96  preds.push_back({"nue_fhc", GetNuePrediction2019("combo", DefaultOscCalc(), corrSysts, "fhc", false), GetNueCosmics2019("fhc"), GetPOT()});
97  }
98  if(RHCOnly || both ) {
99  preds.push_back({"nue_fhc", GetNuePrediction2019("prop", DefaultOscCalc(), corrSysts, "rhc", false), GetNueCosmics2019("rhc"), GetPOT(false)});
100  }
101  }
102 
103  int nnumu = 4;
104  if(!nueOnly) {
105  if(FHCOnly || both ) {
106  auto numu_preds = GetNumuPredictions2019(nnumu, corrSysts, "fhc");
107  auto numu_cosmics = GetNumuCosmics2019(nnumu, "fhc");
108  for (int i = 0; i< nnumu; i++ ){
109  preds.push_back({"numu_fhc_"+std::to_string(i+1), numu_preds[i], numu_cosmics[i], GetPOT()});
110  preds_numu_only.push_back({"numu_fhc_"+std::to_string(i+1), numu_preds[i], numu_cosmics[i], GetPOT()});
111  }
112  }
113  if(RHCOnly || both ) {
114  auto numu_preds = GetNumuPredictions2019(nnumu, corrSysts, "rhc");
115  auto numu_cosmics = GetNumuCosmics2019(nnumu, "rhc");
116  for (int i = 0; i< nnumu; i++ ){
117  preds.push_back({"numu_rhc_"+std::to_string(i+1), numu_preds[i], numu_cosmics[i], GetPOT(false)});
118  preds_numu_only.push_back({"numu_rhc_"+std::to_string(i+1), numu_preds[i], numu_cosmics[i], GetPOT(false)});
119  }
120  }
121  }
122 
123 
124  if(realData){
125  if(!numuOnly){
126  if(FHCOnly || both ) data.push_back(GetNueData2019("fhc"));
127  if(RHCOnly || both ) data.push_back(GetNueData2019("rhc"));
128  }
129  if(!nueOnly){
130  if(FHCOnly || both ){
131  auto numu_data = GetNumuData2019(nnumu, "fhc");
132  data.insert(data.end(),numu_data.begin(), numu_data.end());
133  data_numu_only.insert(data_numu_only.end(),numu_data.begin(), numu_data.end());}
134  if(RHCOnly || both ){
135  auto numu_data = GetNumuData2019(nnumu, "rhc");
136  data.insert(data.end(),numu_data.begin(), numu_data.end());
137  data_numu_only.insert(data_numu_only.end(),numu_data.begin(), numu_data.end());}
138  }
139  }
140 
141  for(int i = 0; i < int(preds.size()); ++i){
142  double POT = preds[i].pot;
143  auto thisdata = GetFakeData (preds[i].pred, calc_fake, POT, preds[i].cos.first);
144  if(realData) thisdata = data[i];
145  cout<<i<<" "<<preds[i].name<<" POT "<<POT<<" tot MC "<<preds[i].pred->Predict(calc_fake).Integral(POT)<<" cos "<<preds[i].cos.first->Integral()<<" cos er "<<preds[i].cos.second<<" analyze data "<<thisdata->Integral(POT)<<endl;
146  expts.push_back(new SingleSampleExperiment(preds[i].pred, *thisdata, preds[i].cos.first, preds[i].cos.second));
147  new TCanvas();
148  DataMCComparison (*thisdata, preds[i].pred, DefaultOscCalc());
149  preds[i].cos.first->SetMarkerStyle(34);
150  preds[i].cos.first->SetMarkerColor(kCosmicBackgroundColor);
151  preds[i].cos.first->Draw("hist p same");
152  gPad->Print(outdir + "debug_predictions_" + suffix + "_" + std::to_string(i) + ".pdf");
153  }
154 
155  cout<<"Make numu only experiment to get the seeds"<<endl;
156  //make numu only experiment for seeds:
157 
158  for(int i = 0; i < (int) preds_numu_only.size(); ++i){
159  double POT = preds_numu_only[i].pot;
160  auto thisdata = GetFakeData (preds_numu_only[i].pred, calc_fake, POT, preds_numu_only[i].cos.first);
161  if(realData) thisdata = data_numu_only[i];
162  cout<<i<<" "<<preds_numu_only[i].name<<" POT "<<POT<<" tot MC "<<preds_numu_only[i].pred->Predict(calc_fake).Integral(POT)<<" cos "<<preds_numu_only[i].cos.first->Integral()<<" cos er "<<preds_numu_only[i].cos.second<<" analyze data "<<thisdata->Integral(POT)<<endl;
163  expts_numu_only.push_back(new SingleSampleExperiment(preds_numu_only[i].pred, *thisdata, preds_numu_only[i].cos.first, preds_numu_only[i].cos.second));
164  }
165  ////////////////////////////////////////////////////////////
166  // Add constraints, make experiments
167  ////////////////////////////////////////////////////////////
168  std::cout << "\nCreating multiexperiment\n" << std::endl;
169 
170  expts.push_back(WorldReactorConstraint2017()); std::cout << "Adding WorldReactorConstraint2017\n";
171 
172  if(nueOnly) {
173  std::cout << "Adding Dmsq32ConstraintPDG2017\n";
174  expts.push_back(&kDmsq32ConstraintPDG2017);
175  }
176  std::cout << "Creating Multiexperiment with a total of "
177  << expts.size() << " experiments\n\n" << std::endl;
178  auto exptThis = new MultiExperiment(expts);
179 
180  std::cout << "Creating Multiexperiment of numu only SimpleExp with a total of "
181  << expts_numu_only.size() << " experiments\n\n" << std::endl;
182  auto exptThis_numu_only = new MultiExperiment(expts_numu_only);
183 
184  ////////////////////////////////////////////////////////////
185  // Systematics
186  ////////////////////////////////////////////////////////////
187  std::cout << "Systematics for the fit:\n";
188  auto systs = GetJointFitSystematicList(corrSysts, nueOnly, numuOnly, FHCOnly||both, RHCOnly||both, true);
189 
190  std::cout << "\n\nSystematic correlations...\n";
191  if(!nueOnly && ! numuOnly && corrSysts){
192  if(FHCOnly){
193  exptThis->SetSystCorrelations(0, GetCorrelations(true, true));
194  auto notfornumu = GetCorrelations(false, true);
195  for(int i =0; i < nnumu; ++i) exptThis->SetSystCorrelations(i+1, notfornumu);
196  }
197  if(RHCOnly){
198  exptThis->SetSystCorrelations(0, GetCorrelations(true, false));
199  auto notfornumu = GetCorrelations(false, true);
200  for(int i =0; i < nnumu; ++i) exptThis->SetSystCorrelations(i+1, notfornumu);
201  }
202  if(both){
203  exptThis->SetSystCorrelations(0, GetCorrelations(true, true));
204  exptThis->SetSystCorrelations(1, GetCorrelations(true, false));
205  auto notfornumu = GetCorrelations(false, true);
206  for(int i =0; i < 8; ++i) exptThis->SetSystCorrelations(i+2, notfornumu);
207  }
208  }
209  if (nueOnly && corrSysts){
210  if (FHCOnly) exptThis->SetSystCorrelations(0, GetCorrelations(true, true));
211  if (RHCOnly) exptThis->SetSystCorrelations(0, GetCorrelations(true, false));
212  if (both) {
213  exptThis->SetSystCorrelations(0, GetCorrelations(true, true));
214  exptThis->SetSystCorrelations(1, GetCorrelations(true, false));
215  }
216  }
217 
218  std::cout << "Systematics for the numu only fit:\n";
219  auto systs_numu_only = GetJointFitSystematicList(corrSysts, false, true, true, true, true);
220 
221  ////////////////////////////////////////////////////////////
222  // Fit
223  ////////////////////////////////////////////////////////////
224  std::cout << "Starting the fit" << std::endl;
225 
227 
228  SystShifts auxShifts = SystShifts::Nominal();
229 
230  // In case some systs need different seeds
231  std::vector <SystShifts> seedShifts = {};
232 
233  //////////////////////////////////////////////////////////////////////
234  ///////////////////////// Seed controller ////////////////////////////
235  //////////////////////////////////////////////////////////////////////
236 
237  cout<<"------------------- Start prestage seeds --------------------------"<<endl;
238 
239  double minchi_numu = 1E20;
240  double pre_seed_th23;
241  double pre_seed_dmsq;
242  ResetOscCalcToDefault(calc);
243  auxShifts.ResetToNominal();
244 
245  double maxmix = 0.514; // from the numu results
246  double numu_pre_seedLONH, numu_pre_seedUONH, numu_pre_seedLOIH, numu_pre_seedUOIH, dmsq_numu_pre_seedNH, dmsq_numu_pre_seedIH;
247 
248  for(int hie:{1}){
249  std::cout << "\n\nFinding test best fit " << (hie>0? "NH " : "IH ") << "\n\n";
250  Fitter fitnumu_only(exptThis_numu_only, {&kFitSinSqTheta23, &kFitDmSq32}, {});
251 
252  auto thisminchi = fitnumu_only.Fit(calc, auxShifts ,
253  {{&kFitDmSq32,{hie*2.5e-3}},
254  {&kFitSinSqTheta23, {0.4} }}, {}, //seedShifts,
255  Fitter::kVerbose);
256 
257  if(thisminchi < minchi_numu) minchi_numu = thisminchi;
258 
259  pre_seed_th23 = kFitSinSqTheta23.GetValue(calc);
260  pre_seed_dmsq = kFitDmSq32.GetValue(calc);
261  }
262 
263  numu_pre_seedLONH = ((pre_seed_th23>maxmix)?(2*maxmix-pre_seed_th23):pre_seed_th23);
264  numu_pre_seedUONH = ((pre_seed_th23>maxmix)?pre_seed_th23:(2*maxmix-pre_seed_th23));
265 
266  ResetOscCalcToDefault(calc);
267  auxShifts.ResetToNominal();
268 
269  cout<<"------------------- End prestage seeds --------------------------"<<endl;
270 
271 
272  struct th23helper{
273  std::vector<double> seeds;
274  const IFitVar * var;
275  TString label;
276  };
277 
278 
279  std::vector <th23helper> th23seeds;
280 
281  th23helper temp;
282  temp.seeds = {0.3};
283  temp.var = kFitSinSqTheta23LowerOctant;
284  temp.label = "LO";
285 
286  //for NH:
287  th23seeds.push_back( { {0.499, numu_pre_seedLONH}, kFitSinSqTheta23LowerOctant, "LO"});
288  th23seeds.push_back( { {0.501, numu_pre_seedUONH}, kFitSinSqTheta23UpperOctant, "UO"});
289 
290  std::vector<double> delta_seeds = {0, 0.5, 1., 1.5};
291  std::vector<double> th23_old_seeds = {0.45, 0.5, 0.55};
292 
293  /////////////////////////////////////////////////////////////////////////
294  ////////////////////////// Different best fit searches //////////////////
295  /////////////////////////////////////////////////////////////////////////
296 
297  // Find the best fit points
298  TFile * outfile = new TFile(outfilename+".root","recreate");
299  outfile->cd();
300 
301  double minchi23 = 1E20;
302  for(int hie:{-1, 1}){
303  for (auto & thseed:th23seeds){
304 
305  std::cout << "\n\nFinding best fit " << (hie > 0 ? "NH " : "IH ")
306  << thseed.label << ", "
307  << "ssth23 seeds ";
308  for (auto const & s:thseed.seeds) std::cout << s << ", ";
309  std::cout << std::endl;
310 
311  std::vector <const IFitVar*> fitvars = {&kFitDeltaInPiUnits,
312  thseed.var,
313  &kFitDmSq32,
315 
316  Fitter fit23(exptThis, fitvars, systs);
317  cout<<" pre dmsq seed is "<<pre_seed_dmsq<<endl;
318  auto thisminchi = fit23.Fit(calc, auxShifts,
319  {
320  { &kFitDmSq32, {hie*pre_seed_dmsq} },
321  { thseed.var, thseed.seeds },
322  { &kFitDeltaInPiUnits, delta_seeds },
323  { &kFitSinSq2Theta13, {0.082}}
324  }, seedShifts,
325  Fitter::kVerbose);
326  minchi23= min(minchi23, thisminchi);
327 
328  if(corrSysts){
329  // Plot the systematic pulls and label with BFV
330  auto shifts = PlotSystShifts(auxShifts);
331  TString str = "Best fit " ;
332  for (auto &v:fitvars){
333  str += TString::Format(" %s=%.3f ",v->LatexName().c_str(),v->GetValue(calc));
334  }
335  str+= TString::Format(" LL=%.6f", thisminchi);
336  shifts->SetTitle(str);
337  gPad->Update();
338  TLine *l=new TLine(gPad->GetUxmin(),0,gPad->GetUxmax(),0);
339  l->Draw("same");
340  gPad->Print(outdir + "debug_slice_shifts_bestfit_" + suffix +
341  (hie>0? "NH": "IH") + thseed.label + ".pdf");
342  }
343  TString dirname = (hie > 0 ? "NH_" : "IH_") + thseed.label;
344  SaveTo(* (osc::IOscCalc*) calc, outfile, dirname+"_calc");
345  auxShifts.SaveTo(outfile, dirname+"_systs");
346  ResetOscCalcToDefault(calc);
347  auxShifts.ResetToNominal();
348  }
349  }
350  std::cout << "\nFound overall minchi " << minchi23 << "\n\n";
351 
352  cout<<"Check with oldstyle seeds "<<endl;
353  double minchi23test = 1E20;
354  for(int hie:{-1,1}){
355  std::cout << "\n\nFinding test best fit "
356  << (hie>0? "NH " : "IH ")
357  << "\n\n";
358  std::vector <const IFitVar*> fitvars = {&kFitDeltaInPiUnits,
360  &kFitDmSq32,
362 
363  Fitter fit23(exptThis, fitvars, systs);
364  auto thisminchi = fit23.Fit(calc,auxShifts ,{
365  {&kFitDmSq32,{hie*fabs(kFitDmSq32.GetValue(calc))}},
366  {&kFitSinSqTheta23, th23_old_seeds},
367  {&kFitDeltaInPiUnits, delta_seeds}
368  }, seedShifts
369  );
370  minchi23test= min(minchi23test, thisminchi);
371  if(corrSysts){
372  auto shifts = PlotSystShifts(auxShifts);
373  TString str = "Best fit " ;
374  for (auto &v:fitvars){
375  str += TString::Format(" %s=%.3f ",v->LatexName().c_str(),v->GetValue(calc));
376  }
377  str+= TString::Format(" LL=%.6f", thisminchi);
378  shifts->SetTitle(str);
379  gPad->Print(outdir + "debug_slice_shifts_bestfit_" + suffix +
380  (hie>0? "NH": "IH") + "test_chisq_with_no_octant_differentiation.pdf");
381  }
382 
383  ResetOscCalcToDefault(calc);
384  auxShifts.ResetToNominal();
385  }//end hie
386  std::cout << "\nFound overall test minchi " << minchi23test << std::endl;
387 
388 
389  cout<<"<<<<<<<<<<<<<<<<<<<<<<<<<< Test with only systematics free"<<endl;
390  minchi23test = 1E20;
391  ResetOscCalcToDefault(calc);
392  auxShifts.ResetToNominal();
393 
394  if(both){
395  calc->SetdCP(1.99969*M_PI);
396  calc->SetTh23(asin(sqrt(0.564956)));
397  calc->SetDmsq32(0.00248304);
398  calc->SetTh13(asin(sqrt(0.0818912))/2);
399  }
400  if(FHCOnly){
401  calc->SetdCP(1.21*M_PI);
402  calc->SetTh23(asin(sqrt(0.513)));
403  calc->SetDmsq32(0.00246);
404  calc->SetTh13(asin(sqrt(0.082))/2);
405  }
406  if(RHCOnly){
407  calc->SetdCP(1.93*M_PI);
408  calc->SetTh23(asin(sqrt(0.598)));
409  calc->SetDmsq32(0.002515);
410  calc->SetTh13(asin(sqrt(0.082))/2);
411  }
412 
413  Fitter fit23(exptThis, {}, systs);
414  auto thisminchi = fit23.Fit(calc,auxShifts ,{}, seedShifts,
415  Fitter::kVerbose);
416  ofstream txtfile(outdir + "debug_slice_shifts_bestfit_" + suffix +
417  + "test_chisq_with_osc_par_fixed.txt");
418  for (auto &v:systs){
419  txtfile<<v->ShortName().c_str()<<"="<<auxShifts.GetShift(v)<<endl;
420  }
421  txtfile.close();
422  minchi23test= min(minchi23test, thisminchi);
423  auto shifts = PlotSystShifts(auxShifts);
424  TString str = "Best fit " ;
425  str+= TString::Format(" LL=%.6f", thisminchi);
426  shifts->SetTitle(str);
427  gPad->Print(outdir + "debug_slice_shifts_bestfit_" + suffix +
428  + "test_chisq_with_osc_par_fixed.pdf");
429  ResetOscCalcToDefault(calc);
430  auxShifts.ResetToNominal();
431  cout<<"<<<<<<<<<<<< This is not true BF : "<< minchi23test<<endl;
432 
433 }
434 
Spectrum * GetFakeData(const IPrediction *pred, osc::IOscCalc *calc, const double pot, TH1D *cosmics=0)
Cuts and Vars for the 2020 FD DiF Study.
Definition: vars.h:6
void ResetOscCalcToDefault(osc::IOscCalcAdjustable *calc)
Reset calculator to default assumptions for all parameters.
Definition: Calcs.cxx:23
TH1 * PlotSystShifts(const SystShifts &shifts, bool sortName)
Definition: Plots.cxx:1495
std::vector< SystGroupDef > systs
Definition: syst_header.h:385
fvar< T > fabs(const fvar< T > &x)
Definition: fabs.hpp:15
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
double GetValue(const osc::IOscCalcAdjustable *osc) const override
const Color_t kCosmicBackgroundColor
Definition: Style.h:41
const FitDmSq32 kFitDmSq32
Definition: FitVars.cxx:18
Simple record of shifts applied to systematic parameters.
Definition: SystShifts.h:20
std::vector< const IPrediction * > GetNumuPredictions2019(const int nq=4, bool useSysts=true, std::string beam="fhc", bool GetFromUPS=false, ENu2018ExtrapType numuExtrap=kNuMu, bool minimizeMemory=false, bool NERSC=false)
const Dmsq32Constraint kDmsq32ConstraintPDG2017(2.45e-3, 0.05e-3, 2.52e-3, 0.05e-3)
double GetValue(const osc::IOscCalcAdjustable *osc) const override
Definition: FitVars.cxx:171
T sqrt(T number)
Definition: d0nt_math.hpp:156
const FitSinSqTheta23UpperOctant kFitSinSqTheta23UpperOctant
Definition: FitVars.cxx:16
General interface to oscillation calculators.
Definition: StanTypedefs.h:22
virtual void SetTh13(const T &th13)=0
OStream cerr
Definition: OStream.cxx:7
static SystShifts Nominal()
Definition: SystShifts.h:34
osc::OscCalcDumb calc
osc::IOscCalcAdjustable * DefaultOscCalc()
Create a new calculator with default assumptions for all parameters.
Definition: Calcs.cxx:49
const IPrediction * GetNuePrediction2019(std::string decomp, osc::IOscCalc *calc, bool corrSysts, std::string beam, bool isFakeData, bool GetFromUPS=false, bool minimizeMemory=false, bool NERSC=false)
virtual void SetDmsq32(const T &dmsq32)=0
#define M_PI
Definition: SbMath.h:34
const char * label
const XML_Char const XML_Char * data
Definition: expat.h:268
const XML_Char * s
Definition: expat.h:262
string outfilename
knobs that need extra care
void joint_fit_2019_bestfit(bool corrSysts=true, TString options="joint_realData_both")
T GetShift(const ISyst *syst) const
const ReactorExperiment * WorldReactorConstraint2017()
Reactor constraint from PDG 2017.
void SetFakeCalc(osc::IOscCalcAdjustable *calc, double ssth23=-5, double dmsq32=-5, double dCP_Pi=-5)
OStream cout
Definition: OStream.cxx:6
std::vector< double > POT
static float min(const float a, const float b, const float c)
Definition: absgeo.cxx:45
Spectrum * GetNueData2019(std::string beam, bool GetFromUPS=false)
Combine multiple component experiments.
std::vector< std::pair< TH1D *, double > > GetNumuCosmics2019(const int nq=4, std::string beam="fhc", bool GetFromUPS=false, bool NERSC=false)
std::vector< Spectrum * > GetNumuData2019(const int nq=4, std::string beam="fhc", bool GetFromUPS=false)
const FitSinSqTheta23LowerOctant kFitSinSqTheta23LowerOctant
Definition: FitVars.cxx:17
void ResetToNominal()
Definition: SystShifts.cxx:143
const ConstrainedFitVarWithPrior fitSsqTh23_UniformPriorSsqTh23 & kFitSinSqTheta23
virtual void SetTh23(const T &th23)=0
exit(0)
assert(nhit_max >=nhit_nbins)
Interface definition for fittable variables.
Definition: IFitVar.h:16
double GetPOT(bool isFHC=true)
std::vector< std::pair< const ISyst *, const ISyst * > > GetCorrelations(bool isNue, bool isFHC, bool ptExtrap)
Standard interface to all prediction techniques.
Definition: IPrediction.h:57
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
Definition: Style.cxx:154
const FitSinSq2Theta13 kFitSinSq2Theta13
Definition: FitVars.cxx:13
void SaveTo(TDirectory *dir, const std::string &name) const
Definition: SystShifts.cxx:228
TH1 * DataMCComparison(const Spectrum &data, const Spectrum &mc, EBinType bintype)
Definition: Plots.cxx:35
std::string to_string(ModuleType mt)
Definition: ModuleType.h:32
std::pair< Spectrum *, double > cos
Float_t e
Definition: plot.C:35
#define for
Definition: msvc_pragmas.h:3
const FitVarWithPrior fitDeltaInPiUnits_UniformPriordCP & kFitDeltaInPiUnits
std::vector< const ISyst * > GetJointFitSystematicList(bool corrSysts, bool nueExclusive=false, bool numuExclusive=false, bool isFHC=true, bool isRHC=true, bool intersection=true, bool ptExtrap=true)
const std::string outdir
FILE * outfile
Definition: dump_event.C:13
virtual void SetdCP(const T &dCP)=0
T asin(T number)
Definition: d0nt_math.hpp:60
std::pair< TH1D *, double > GetNueCosmics2019(std::string beam, bool GetFromUPS=false, bool NERSC=false)
Compare a single data spectrum to the MC + cosmics expectation.