run_joint_fit_2020_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 
20 #include "../joint_fit_2020_loader_tools.h"
21 
22 #include "TCanvas.h"
23 #include "TBox.h"
24 #include "TColor.h"
25 #include "TGraph.h"
26 #include "TVectorD.h"
27 #include "TF1.h"
28 #include "TLegend.h"
29 #include "TText.h"
30 #include "TLatex.h"
31 #include "TPad.h"
32 #include "TLine.h"
33 #include "TMarker.h"
34 #include "TStyle.h"
35 #include "TSystem.h"
36 #include "TGaxis.h"
37 
38 #include <algorithm>
39 #include <vector>
40 #include <string>
41 #include <fstream>
42 
43 using namespace ana;
44 
45 void run_joint_fit_2020_bestfit(bool corrSysts = true,
46  TString options="joint_realData_both")
47 
48 {
49  bool nueOnly = options.Contains("nueOnly");
50  bool numuOnly = options.Contains("numuOnly");
51  bool joint = options.Contains("joint");
52  assert (nueOnly || numuOnly || joint);
53 
54  bool FHCOnly = options.Contains("FHCOnly");
55  bool RHCOnly = options.Contains("RHCOnly");
56  bool both = options.Contains("both");
57  assert (FHCOnly || RHCOnly || both);
58 
59  bool fake2019 = options.Contains("fake2019");
60  bool realData = options.Contains("realData");
61 
62  auto suffix = options;
63  if(corrSysts) suffix+="_systs";
64  else suffix+="_stats";
65 
66  TString outdir = "/nova/ana/3flavor/Ana2020/Fits/BestFits/";
67 
68  TString outfilename (outdir + "bestfits_" + suffix);
69 
70  //////////////////////////////////////////////////
71  // Load Nue and Numu experiments
72  //////////////////////////////////////////////////
73  //need numu only for prestage seeds
74  std::cout<<"Start loading the predictions "<<std::endl;
75 
76  std::string decomp = ""; // make Pt extrap all the time
77  std::vector <ana::predictions> preds = LoadPredictions (corrSysts, false, decomp, nueOnly || joint, numuOnly || joint, FHCOnly || both, RHCOnly || both);
78  std::vector <ana::predictions> preds_numu_only = LoadPredictions (corrSysts, false, decomp, false, numuOnly || joint, FHCOnly || both, RHCOnly || both);
79  std::vector <Spectrum * > data = LoadRealData (false, nueOnly || joint, numuOnly || joint, FHCOnly || both, RHCOnly || both);
80  std::vector <Spectrum * > data_numu_only = LoadRealData (false, false, numuOnly || joint, FHCOnly || both, RHCOnly || both);
81  std::vector <const IExperiment * > expts;
82  std::vector <const IExperiment * > expts_numu_only;
83 
84  auto calc_fake = DefaultOscCalc();
85  if(fake2019) SetFakeCalc(calc_fake, 0.565, 2.48e-3, 0);
86  else if(!realData) {std::cerr << "need setting for data\n"; exit(1);}
87 
88  int nnumu = 4;
89 
90  for(int i = 0; i < int(preds.size()); ++i){
91  double POT = preds[i].pot;
92  auto thisdata = GetFakeData (preds[i].pred, calc_fake, POT, preds[i].cos.first, preds[i].livetime);
93  if(realData) thisdata = data[i];
94  auto hcos = preds[i].cos.first->ToTH1(preds[i].livetime, kBlack, kSolid, kLivetime);
95  cout<<i<<" "<<preds[i].name<<" POT "<<POT<<" tot MC "<<preds[i].pred->Predict(calc_fake).Integral(POT)<<
96  " cos "<<hcos->Integral()<<" cos er "<<preds[i].cos.second<<" analyze data "<<thisdata->Integral(thisdata->POT())<<endl;
97  expts.push_back(new SingleSampleExperiment(preds[i].pred, *thisdata, *preds[i].cos.first, preds[i].cos.second, true));
98  new TCanvas();
99  DataMCComparison (*thisdata, preds[i].pred, DefaultOscCalc());
100  hcos->SetMarkerStyle(34);
101  hcos->SetMarkerColor(kCosmicBackgroundColor);
102  hcos->Draw("hist p same");
103  gPad->Print(outdir + "debug_predictions_" + suffix + "_" + std::to_string(i) + ".pdf");
104  }
105 
106  cout<<"Make numu only experiment to get the seeds"<<endl;
107  //make numu only experiment for seeds:
108 
109  for(int i = 0; i < (int) preds_numu_only.size(); ++i){
110  double POT = preds_numu_only[i].pot;
111  auto thisdata = GetFakeData (preds_numu_only[i].pred, calc_fake, POT, preds_numu_only[i].cos.first, preds_numu_only[i].livetime);
112  if(realData) thisdata = data_numu_only[i];
113  auto hcos = preds_numu_only[i].cos.first->ToTH1(preds_numu_only[i].livetime, kBlack, kSolid, kLivetime);
114  cout<<i<<" "<<preds_numu_only[i].name<<" POT "<<POT<<" tot MC "<<preds_numu_only[i].pred->Predict(calc_fake).Integral(POT)<<
115  " cos "<<hcos->Integral()<<" cos er "<<preds_numu_only[i].cos.second<<" analyze data "<<thisdata->Integral(thisdata->POT())<<endl;
116  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, true));
117  }
118  ////////////////////////////////////////////////////////////
119  // Add constraints, make experiments
120  ////////////////////////////////////////////////////////////
121  std::cout << "\nCreating multiexperiment\n" << std::endl;
122 
123  expts.push_back(WorldReactorConstraint2019()); std::cout << "Adding WorldReactorConstraint2019\n";
124 
125  if(nueOnly) {
126  std::cout << "Adding Dmsq32ConstraintPDG2019\n";
127  expts.push_back(&kDmsq32ConstraintPDG2019);
128  }
129  std::cout << "Creating Multiexperiment with a total of "
130  << expts.size() << " experiments\n\n" << std::endl;
131  auto exptThis = new MultiExperiment(expts);
132 
133  std::cout << "Creating Multiexperiment of numu only SimpleExp with a total of "
134  << expts_numu_only.size() << " experiments\n\n" << std::endl;
135  auto exptThis_numu_only = new MultiExperiment(expts_numu_only);
136 
137  ////////////////////////////////////////////////////////////
138  // Systematics
139  ////////////////////////////////////////////////////////////
140 
141  std::cout << "Systematics for the fit:\n";
142  bool ptExtrap = true;
143  //if (decomp != "noPt") ptExtrap = true;
144  auto systs = GetJointFitSystematicList(corrSysts, nueOnly, numuOnly, FHCOnly||both, RHCOnly||both, true, ptExtrap);
145 
146  std::cout << "\n\nSystematic correlations...\n";
147  if(!nueOnly && ! numuOnly && corrSysts){
148  if(FHCOnly){
149  exptThis->SetSystCorrelations(0, GetCorrelations(true, true, ptExtrap));
150  auto notfornumu = GetCorrelations(false, true, ptExtrap);
151  for(int i =0; i < nnumu; ++i) exptThis->SetSystCorrelations(i+1, notfornumu);
152  }
153  if(RHCOnly){
154  exptThis->SetSystCorrelations(0, GetCorrelations(true, false, ptExtrap));
155  auto notfornumu = GetCorrelations(false, false, ptExtrap);
156  for(int i =0; i < nnumu; ++i) exptThis->SetSystCorrelations(i+1, notfornumu);
157  }
158  if(both){
159  exptThis->SetSystCorrelations(0, GetCorrelations(true, true, ptExtrap));
160  exptThis->SetSystCorrelations(1, GetCorrelations(true, false, ptExtrap));
161  auto notfornumufhc = GetCorrelations(false, true, ptExtrap);
162  for(int i =0; i < 4; ++i) exptThis->SetSystCorrelations(i+2, notfornumufhc);
163  auto notfornumurhc = GetCorrelations(false, false, ptExtrap);
164  for(int i =0; i < 4; ++i) exptThis->SetSystCorrelations(i+6, notfornumurhc);
165  }
166  }
167  if (nueOnly && corrSysts){
168  if (FHCOnly) exptThis->SetSystCorrelations(0, GetCorrelations(true, true, ptExtrap));
169  if (RHCOnly) exptThis->SetSystCorrelations(0, GetCorrelations(true, false, ptExtrap));
170  if (both) {
171  exptThis->SetSystCorrelations(0, GetCorrelations(true, true, ptExtrap));
172  exptThis->SetSystCorrelations(1, GetCorrelations(true, false, ptExtrap));
173  }
174  }
175 
176  std::cout << "Systematics for the numu only fit:\n";
177  auto systs_numu_only = GetJointFitSystematicList(corrSysts, false, true, FHCOnly||both, RHCOnly||both, true, ptExtrap);
178 
179  if (corrSysts && numuOnly && both){
180  auto notfornumufhc = GetCorrelations(false, true, ptExtrap);
181  for(int i =0; i < 4; ++i) {
182  exptThis->SetSystCorrelations(i, notfornumufhc);
183  exptThis_numu_only->SetSystCorrelations(i, notfornumufhc);
184  }
185  auto notfornumurhc = GetCorrelations(false, false, ptExtrap);
186  for(int i =0; i < 4; ++i) {
187  exptThis->SetSystCorrelations(i+4, notfornumurhc);
188  exptThis_numu_only->SetSystCorrelations(i+4, notfornumurhc);
189  }
190  }
191 
192  ////////////////////////////////////////////////////////////
193  // Fit
194  ////////////////////////////////////////////////////////////
195  std::cout << "Starting the fit" << std::endl;
196 
198 
199  SystShifts auxShifts = SystShifts::Nominal();
200 
201  // In case some systs need different seeds
202  std::vector <SystShifts> seedShifts = {};
203  if (corrSysts){
204  for (double systshift:{-2, +2}){
205  SystShifts tempShifts (&kAnaLightlevelNDSyst, systshift); // attempt to fix flip between positive and negative pulls
206  seedShifts.push_back(tempShifts);
207  }
208  }
209 
210  //////////////////////////////////////////////////////////////////////
211  ///////////////////////// Seed controller ////////////////////////////
212  //////////////////////////////////////////////////////////////////////
213 
214  cout<<"------------------- Start prestage seeds --------------------------"<<endl;
215 
216  std::unique_ptr<IFitter::IFitSummary> minchi_numu;
217  double pre_seed_th23;
218  double pre_seed_dmsq;
219  ResetOscCalcToDefault(calc);
220  auxShifts.ResetToNominal();
221 
222  double maxmix = 0.514; // from the numu results
223  double numu_pre_seedLONH, numu_pre_seedUONH, numu_pre_seedLOIH, numu_pre_seedUOIH, dmsq_numu_pre_seedNH, dmsq_numu_pre_seedIH;
224 
225  for(int hie:{1}){
226  std::cout << "\n\nFinding test best fit " << (hie>0? "NH " : "IH ") << "\n\n";
227  MinuitFitter fitnumu_only(exptThis_numu_only, {&kFitSinSqTheta23, &kFitDmSq32}, {});
228 
229  std::unique_ptr<IFitter::IFitSummary> thisminchi =
230  fitnumu_only.Fit(calc, auxShifts ,
231  SeedList({{&kFitDmSq32,{hie*2.5e-3}},
232  {&kFitSinSqTheta23, {0.4} }}), {}, //seedShifts,
234 
235  if(thisminchi->IsBetterThan(minchi_numu.get())) std::swap(minchi_numu, thisminchi);
236 
237  pre_seed_th23 = kFitSinSqTheta23.GetValue(calc);
238  pre_seed_dmsq = kFitDmSq32.GetValue(calc);
239  }
240 
241  numu_pre_seedLONH = ((pre_seed_th23>maxmix)?(2*maxmix-pre_seed_th23):pre_seed_th23);
242  numu_pre_seedUONH = ((pre_seed_th23>maxmix)?pre_seed_th23:(2*maxmix-pre_seed_th23));
243 
244  ResetOscCalcToDefault(calc);
245  auxShifts.ResetToNominal();
246 
247  cout<<"------------------- End prestage seeds --------------------------"<<endl;
248 
249 
250  struct th23helper{
251  std::vector<double> seeds;
252  const IFitVar * var;
253  TString label;
254  };
255 
256 
257  std::vector <th23helper> th23seeds;
258 
259  th23helper temp;
260  temp.seeds = {0.3};
261  temp.var = &kFitSinSqTheta23LowerOctant;
262  temp.label = "LO";
263 
264  //for NH:
265  th23seeds.push_back( { {0.499, numu_pre_seedLONH}, &kFitSinSqTheta23LowerOctant, "LO"});
266  th23seeds.push_back( { {0.501, numu_pre_seedUONH}, &kFitSinSqTheta23UpperOctant, "UO"});
267 
268  std::vector<double> delta_seeds = {0, 0.5, 1., 1.5};
269  std::vector<double> th23_old_seeds = {0.45, 0.5, 0.55};
270 
271  /////////////////////////////////////////////////////////////////////////
272  ////////////////////////// Different best fit searches //////////////////
273  /////////////////////////////////////////////////////////////////////////
274 
275  // Find the best fit points
276  TFile * outfile = new TFile(outfilename+".root","recreate");
277  outfile->cd();
278 
279  double minchi23 = 1E20;
280  for(int hie:{-1, 1}){
281  for (auto & thseed:th23seeds){
282 
283  std::cout << "\n\nFinding best fit " << (hie > 0 ? "NH " : "IH ")
284  << thseed.label << ", "
285  << "ssth23 seeds ";
286  for (auto const & s:thseed.seeds) std::cout << s << ", ";
287  std::cout << std::endl;
288 
289  std::vector <const IFitVar*> fitvars = {&kFitDeltaInPiUnits,
290  thseed.var,
291  &kFitDmSq32,
293 
294  MinuitFitter fit23(exptThis, fitvars, systs);
295  cout<<" pre dmsq seed is "<<pre_seed_dmsq<<endl;
296  auto thisminchi = fit23.Fit(calc, auxShifts,
297  SeedList({
298  { &kFitDmSq32, {hie*pre_seed_dmsq} },
299  { thseed.var, thseed.seeds },
300  { &kFitDeltaInPiUnits, delta_seeds }
301  //{ &kFitSinSq2Theta13, {0.082}}
302  }), seedShifts,
304  TVectorD v(1);
305  v[0] = thisminchi->EvalMetricVal();
306  string hietag = (hie>0? "NH": "IH");
307  v.Write("chi_"+hietag+"_"+thseed.label);
308  minchi23= min(minchi23, v[0]);
309 
310  if(corrSysts){
311  // Plot the systematic pulls and label with BFV
312  auto shifts = PlotSystShifts(auxShifts);
313  TString str = "Best fit " ;
314  for (auto &v:fitvars){
315  str += TString::Format(" %s=%.3f ",v->LatexName().c_str(),v->GetValue(calc));
316  }
317  str+= TString::Format(" LL=%.6f", thisminchi->EvalMetricVal());
318  shifts->SetTitle(str);
319  gPad->Update();
320  TLine *l=new TLine(gPad->GetUxmin(),0,gPad->GetUxmax(),0);
321  l->Draw("same");
322  gPad->Print(outdir + "debug_slice_shifts_bestfit_" + suffix +
323  (hie>0? "NH": "IH") + thseed.label + ".pdf");
324  }
325  TString dirname = (hie > 0 ? "NH_" : "IH_") + thseed.label;
326  SaveTo(* (osc::IOscCalc*) calc, outfile, (dirname+"_calc").Data());
327  auxShifts.SaveTo(outfile, (dirname+"_systs").Data());
328  ResetOscCalcToDefault(calc);
329  auxShifts.ResetToNominal();
330  }
331  }
332  std::cout << "\nFound overall minchi " << minchi23 << "\n\n";
333 
334  cout<<"Check with oldstyle seeds "<<endl;
335  double minchi23test = 1E20;
336  for(int hie:{-1,1}){
337  std::cout << "\n\nFinding test best fit "
338  << (hie>0? "NH " : "IH ")
339  << "\n\n";
340  std::vector <const IFitVar*> fitvars = {&kFitDeltaInPiUnits,
342  &kFitDmSq32,
344 
345  MinuitFitter fit23(exptThis, fitvars, systs);
346  auto thisminchi = fit23.Fit(calc,auxShifts ,
347  SeedList({
348  {&kFitDmSq32,{hie*fabs(kFitDmSq32.GetValue(calc))}},
349  {&kFitSinSqTheta23, th23_old_seeds},
350  {&kFitDeltaInPiUnits, delta_seeds}
351  }), seedShifts
352  )->EvalMetricVal();
353  minchi23test= min(minchi23test, thisminchi);
354  if(corrSysts){
355  auto shifts = PlotSystShifts(auxShifts);
356  TString str = "Best fit " ;
357  for (auto &v:fitvars){
358  str += TString::Format(" %s=%.3f ",v->LatexName().c_str(),v->GetValue(calc));
359  }
360  str+= TString::Format(" LL=%.6f", thisminchi);
361  shifts->SetTitle(str);
362  gPad->Print(outdir + "debug_slice_shifts_bestfit_" + suffix +
363  (hie>0? "NH": "IH") + "test_chisq_with_no_octant_differentiation.pdf");
364  }
365 
366  ResetOscCalcToDefault(calc);
367  auxShifts.ResetToNominal();
368  }//end hie
369  std::cout << "\nFound overall test minchi " << minchi23test << std::endl;
370 
371  cout<<"<<<<<<<<<<<<<<<<<<<<<<<<<< Test with only systematics free"<<endl;
372  minchi23test = 1E20;
373  ResetOscCalcToDefault(calc);
374  auxShifts.ResetToNominal();
375  // Set here the found BF values
376  if(both){
377  calc->SetdCP(1.99969*M_PI);
378  calc->SetTh23(asin(sqrt(0.564956)));
379  calc->SetDmsq32(0.00248304);
380  calc->SetTh13(asin(sqrt(0.0818912))/2);
381  }
382  if(FHCOnly){
383  calc->SetdCP(1.21*M_PI);
384  calc->SetTh23(asin(sqrt(0.513)));
385  calc->SetDmsq32(0.00246);
386  calc->SetTh13(asin(sqrt(0.082))/2);
387  }
388  if(RHCOnly){
389  calc->SetdCP(1.93*M_PI);
390  calc->SetTh23(asin(sqrt(0.598)));
391  calc->SetDmsq32(0.002515);
392  calc->SetTh13(asin(sqrt(0.082))/2);
393  }
394 
395  MinuitFitter fit23(exptThis, {}, systs);
396  auto thisminchi = fit23.Fit(calc,auxShifts, SeedList(), seedShifts, IFitter::kVerbose)->EvalMetricVal();
397  ofstream txtfile(outdir + "debug_slice_shifts_bestfit_" + suffix +
398  + "test_chisq_with_osc_par_fixed.txt");
399  for (auto &v:systs){
400  txtfile<<v->ShortName().c_str()<<"="<<auxShifts.GetShift(v)<<endl;
401  }
402  txtfile.close();
403  minchi23test= min(minchi23test, thisminchi);
404 
405  auto shifts = PlotSystShifts(auxShifts);
406  TString str = "Best fit " ;
407  str+= TString::Format(" LL=%.6f", thisminchi);
408  shifts->SetTitle(str);
409  gPad->Print(outdir + "debug_slice_shifts_bestfit_" + suffix +
410  + "test_chisq_with_osc_par_fixed.pdf");
411  ResetOscCalcToDefault(calc);
412  auxShifts.ResetToNominal();
413  cout<<"<<<<<<<<<<<< This is not true BF : "<< minchi23test<<endl;
414 
415 }
416 
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
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
const Dmsq32Constraint kDmsq32ConstraintPDG2019(2.444e-3, 0.034e-3, 2.55e-3, 0.04e-3)
OStream cerr
Definition: OStream.cxx:7
std::vector< predictions > LoadPredictions(bool corrSysts=false, bool runOnGrid=false, std::string decomp="", bool nue=true, bool numu=true, bool fhc=true, bool rhc=true, bool NERSC=false)
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
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
void swap(art::HLTGlobalStatus &lhs, art::HLTGlobalStatus &rhs)
const XML_Char * s
Definition: expat.h:262
string outfilename
knobs that need extra care
virtual std::unique_ptr< IFitSummary > Fit(osc::IOscCalcAdjustable *seed, SystShifts &bestSysts=junkShifts, const SeedList &seedPts=SeedList(), const std::vector< SystShifts > &systSeedPts={}, Verbosity verb=kVerbose) const
Master fitting method. Depends on FitHelper and FitHelperSeeded.
Definition: IFitter.cxx:69
T GetShift(const ISyst *syst) const
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
std::vector< Spectrum * > LoadRealData(bool runOnGrid=false, bool nue=true, bool numu=true, bool fhc=true, bool rhc=true)
Combine multiple component experiments.
double livetime
Definition: saveFDMCHists.C:21
const FitSinSqTheta23LowerOctant kFitSinSqTheta23LowerOctant
Definition: FitVars.cxx:17
void ResetToNominal()
Definition: SystShifts.cxx:144
void run_joint_fit_2020_bestfit(bool corrSysts=true, TString options="joint_realData_both")
const ConstrainedFitVarWithPrior fitSsqTh23_UniformPriorSsqTh23 & kFitSinSqTheta23
virtual void SetTh23(const T &th23)=0
exit(0)
T cos(T number)
Definition: d0nt_math.hpp:78
assert(nhit_max >=nhit_nbins)
Interface definition for fittable variables.
Definition: IFitVar.h:16
std::vector< std::pair< const ISyst *, const ISyst * > > GetCorrelations(bool isNue, bool isFHC, bool ptExtrap)
const ReactorExperiment * WorldReactorConstraint2019()
Reactor constraint from PDG 2019.
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:229
TH1 * DataMCComparison(const Spectrum &data, const Spectrum &mc, EBinType bintype)
Definition: Plots.cxx:35
std::string to_string(ModuleType mt)
Definition: ModuleType.h:32
const DummyAnaSyst kAnaLightlevelNDSyst("Light_Level_ND","Light_Level_ND")
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
Compare a single data spectrum to the MC + cosmics expectation.
Perform MINUIT fits in one or two dimensions.
Definition: MinuitFitter.h:17
enum BeamMode string