jointsensitivity.C
Go to the documentation of this file.
8 #include "CAFAna/Core/Spectrum.h"
9 #include "CAFAna/FC/FCSurface.h"
14 #include "CAFAna/Core/Spectrum.h"
15 #include "CAFAna/Core/Registry.h"
20 #include "CAFAna/Systs/Systs.h"
22 #include "CAFAna/Vars/FitVars.h"
23 #include "./sensitivity_tools.h"
24 
25 #include "OscLib/IOscCalc.h"
26 #include "Utilities/rootlogon.C"
27 
28 #include "TFile.h"
29 #include "TStyle.h"
30 #include "TGraph.h"
31 #include "TCanvas.h"
32 #include "TH2.h"
33 
34 using namespace ana;
35 
36 void jointsensitivity(bool MakeFile = true, bool IsSyst = false, std::string plotType = "dcp")
37 {
38  bool IsTh23 = false;
39  std::string version = "dcp_mixingmh_";
40  std::string outfilename = version + "sensitivity_" + (IsTh23?"th23_":"delta_");
41  std::string systType = IsSyst?"syst_":"stat_only_";
42 
43  if(plotType == "oct" || plotType == "maxmix") IsTh23 = true;
44 
45  // PlotType: {"mh", "dcp", "oct", "maxmix"}
46 
48 
49  osc::IOscCalcAdjustable* calc_fake = calc->Copy();
50 
51  // set future POT
52  const double FHCPOT = kFutureFHCPOT;
53  const double RHCPOT = kFutureRHCPOT;
54 
55  const double FHCLivetime = kFutureFHCLivetime;
56  const double RHCLivetime = kFutureRHCLivetime;
57 
58  std::vector<double> nuePOT, nueLivetime;
59  std::vector<double> numuPOT, numuLivetime;
60  std::vector<std::pair <TH1D*, double>> Cosm_Nue;
61  std::vector<std::pair <TH1D*, double>> Cosm_Numu;
62  std::vector<const IPrediction*> Pred_Nue;
63  std::vector<const IPrediction*> Pred_Numu;
64 
65  // merging pred and cosmic for experiments
66  std::vector<std::pair <TH1D*, double>> cosmics;
67  std::vector<const IPrediction*> preds;
68  std::vector<double> POTs, Livetimes;
69 
70  // only available for fhc+rhc
71  std::vector<std::pair<const ISyst*, const ISyst*>> notnumu, notnuefhc, notnuerhc;
72  std::vector<const ISyst*> systs;
73 
74  if(IsSyst){
75 
76  systs = getAllAna2018Systs(kJointAna2018, true, kBoth, true);
77 
78  std::vector<const ISyst*> badsysts;
79  badsysts = getAna2018NueOnly(kFHC);
80  for(auto &s: badsysts) {notnuerhc.push_back({s, NULL});notnumu.push_back({s, NULL});}
81 
82  badsysts = getAna2018NueOnly(kRHC);
83  for(auto &s: badsysts) {notnuefhc.push_back({s, NULL});notnumu.push_back({s, NULL});}
84 
85  badsysts = getAna2018NumuOnly(kBoth);
86  for(auto &s: badsysts) {notnuefhc.push_back({s,NULL});notnuerhc.push_back({s, NULL});}
87  }
88  else systs = {};
89 
90  SystShifts auxShifts = SystShifts::Nominal();
91 
92  std::vector <const IFitVar*> fitvars = {&kFitDeltaInPiUnits, &kFitSinSqTheta23, &kFitDmSq32Scaled};
93 
94  std::vector<std::pair<TGraph*, TString>> slice;
95  slice.clear();
96 
97  struct SeedsHelper{
98  std::vector<double> seeds;
99  const IFitVar* var;
100  TString label;
101  };
102 
103  std::vector<SeedsHelper> th23seeds;
104  std::vector<SeedsHelper> deltaseeds;
105 
106  deltaseeds.push_back({{0, 0.5, 1, 1.5, 1.9}, &kFitDeltaInPiUnits, "2018 Best Fit"});
107 
108  th23seeds.push_back({{0.45, 0.55}, &kFitSinSqTheta23, "2018 Best Fit"});
109  th23seeds.push_back({{0.45}, kFitSinSqTheta23LowerOctant, "LO"});
110  th23seeds.push_back({{0.55}, kFitSinSqTheta23UpperOctant, "UO"});
111  th23seeds.push_back({{0.48,0.52}, kFitSinSqTheta23MaxMix, "MaxMix"});
112 
113  if(MakeFile){
114 
115  // Load All Nue Predictions
116  Cosm_Nue.push_back( GetNueCosmics2018("fhc", true));
117  Pred_Nue.push_back( GetNuePrediction2018("combo", calc, IsSyst, "fhc", false)); //isFakeNDData?
118  nuePOT.insert(nuePOT.end(), Pred_Nue.size(), FHCPOT);
119  nueLivetime.insert(nueLivetime.end(), Cosm_Nue.size(), FHCLivetime);
120 
121  Cosm_Nue.push_back( GetNueCosmics2018("rhc", true));
122  Pred_Nue .push_back( GetNuePrediction2018("prop", calc, IsSyst, "rhc", false));
123  nuePOT.insert(nuePOT.end(), Pred_Nue.size()-nuePOT.size(), RHCPOT);
124  nueLivetime.insert(nueLivetime.end(), Cosm_Nue.size()-nueLivetime.size(), RHCLivetime);
125 
126  //Load All Numu Predictions
127  auto pred_Numu_fhc = GetNumuPredictions2018(4, IsSyst, "fhc");
128  auto cosm_Numu_fhc = GetNumuCosmics2018(4, "fhc", kAna2018FHCLivetime, kFutureFHCLivetime);
129  Pred_Numu.insert(Pred_Numu.end(), pred_Numu_fhc.begin(), pred_Numu_fhc.end());
130  Cosm_Numu.insert(Cosm_Numu.end(), cosm_Numu_fhc.begin(), cosm_Numu_fhc.end());
131  numuPOT.insert(numuPOT.end(), Pred_Numu.size(), FHCPOT);
132  numuLivetime.insert(numuLivetime.end(), Cosm_Numu.size(), FHCLivetime);
133 
134  auto pred_Numu_rhc = GetNumuPredictions2018(4, IsSyst, "rhc");
135  auto cosm_Numu_rhc = GetNumuCosmics2018(4, "rhc", kAna2018RHCLivetime, kFutureRHCLivetime);
136  Pred_Numu.insert(Pred_Numu.end(), pred_Numu_rhc.begin(), pred_Numu_rhc.end());
137  Cosm_Numu.insert(Cosm_Numu.end(), cosm_Numu_rhc.begin(), cosm_Numu_rhc.end());
138  numuPOT.insert(numuPOT.end(), Pred_Numu.size()-numuPOT.size(), RHCPOT);
139  numuLivetime.insert(numuLivetime.end(), Cosm_Numu.size()-numuLivetime.size(), RHCLivetime);
140 
141  // Merging Nues
142  preds.insert(preds.end(), Pred_Nue.begin(), Pred_Nue.end());
143  cosmics.insert(cosmics.end(), Cosm_Nue.begin(), Cosm_Nue.end());
144  POTs .insert(POTs.end(), nuePOT.begin(), nuePOT.end());
145  Livetimes. insert(Livetimes.end(), nueLivetime.begin(), nueLivetime.end());
146 
147  // Merging Numus
148  preds.insert(preds.end(), Pred_Numu.begin(), Pred_Numu.end());
149  cosmics.insert(cosmics.end(), Cosm_Numu.begin(), Cosm_Numu.end());
150 
151  POTs .insert(POTs.end(), numuPOT.begin() , numuPOT.end());
152  Livetimes. insert(Livetimes.end(), numuLivetime.begin(), numuLivetime.end());
153 
154  TFile* outfile = new TFile(("files/" + outfilename + systType + plotType + "_Slices.root").c_str(), "recreate");
155 
156 
157  for(double th23 : {0.5}){ //LO/ BF /HO set fake data calc as these 461, 586
158  //update fitters seeds based on fake data seed
159  SeedsHelper th23seed;
160 
161  if(th23 == 0.461) th23seed = th23seeds[1];
162  if(th23 == 0.586) th23seed = th23seeds[2];
163 
164  if(th23 == 0.5) th23seed = th23seeds[0];
165 
166  for(int hie : {-1, 1}){
167 
168  int steps = 41;
169 // if(plotType =="mh") steps = 21;
170  double chir[steps], chiw[steps], chi[steps], delta[steps], delt(0);
171  double step = 2.0/(steps-1);
172  delt = -step;
173 
174  if(IsTh23){
175  step = 0.4/(steps-1);
176  delt = 0.3 - step;
177  }
178  for(int i = 0; i < steps; i++){
179  delt += step;
180 
181  //reset everything for fake data
182  ResetOscCalcToDefault(calc_fake);
183 
184  calc_fake->SetDmsq32(hie*fabs(calc_fake->GetDmsq32()));
185 
186  if(IsTh23){
187  calc_fake->SetTh23(asin(sqrt(delt)));
188 
189  if(hie>0&&delt<0.5) calc_fake->SetdCP(1.989*M_PI);
190  if(hie<0&&delt<0.5) calc_fake->SetdCP(1.372*M_PI);
191  if(hie>0&&delt>0.5) calc_fake->SetdCP(0.186*M_PI);
192  if(hie<0&&delt>0.5) calc_fake->SetdCP(1.462*M_PI);
193 
194  }
195  else{
196  calc_fake->SetTh23(asin(sqrt(th23)));
197  calc_fake->SetdCP(delt*M_PI);
198  }
199  std::vector<const IExperiment*> exps;
200 
201  for(unsigned int i = 0; i < preds.size(); i++){
202  auto tmp_data = GetFakeData( preds[i], calc_fake, POTs[i], cosmics[i].first, Livetimes[i]);
203  exps.push_back(new SingleSampleExperiment(preds[i], *tmp_data, cosmics[i].first, cosmics[i].second));
204 
205  }
206  exps.push_back(WorldReactorConstraint2017());
207 
208  auto MultExp = new MultiExperiment(exps);
209 
210  if(IsSyst){
211  MultExp -> SetSystCorrelations(0, notnuefhc);
212  MultExp -> SetSystCorrelations(1, notnuerhc);
213  for(int i = 2; i < 10; i++) {MultExp -> SetSystCorrelations(i, notnumu);}
214  }
215 
216  SystShifts auxShifts = SystShifts::Nominal();
217 
219 
220  if(plotType == "mh"){
221 
222  ResetOscCalcToDefault(calc);
223  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
224  chir[i] = fit.Fit(calc, auxShifts,
225  { {&kFitDeltaInPiUnits, {0, 0.5, 1., 1.5}}, {&kFitSinSqTheta23, th23seed.seeds}}, {}, IFitter::kQuiet)->EvalMetricVal();
226 
227  ResetOscCalcToDefault(calc);
228  calc->SetDmsq32(-hie*fabs(calc->GetDmsq32()));
229  chiw[i] = fit.Fit(calc, auxShifts,
230  {{&kFitDeltaInPiUnits, {0, 0.5, 1., 1.5}}, {&kFitSinSqTheta23, th23seed.seeds}}, {}, IFitter::kQuiet)->EvalMetricVal();
231  }// end mh
232 
233  if(plotType == "dcp"){
234 
235  MinuitFitter fit(MultExp, {&kFitSinSqTheta23, &kFitDmSq32}, systs);
236 
237  ResetOscCalcToDefault(calc);
238  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
239 
240  calc->SetdCP(delt*M_PI);
241  chir[i] = fit.Fit(calc, auxShifts,
242  {{&kFitSinSqTheta23, th23seed.seeds}, {&kFitDmSq32, {calc->GetDmsq32(), -1*calc->GetDmsq32()}}}, {}, IFitter::kQuiet)->EvalMetricVal();
243 
244  ResetOscCalcToDefault(calc);
245  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
246 
247  calc->SetdCP(0.*M_PI);
248 
249  chiw[i] = fit.Fit(calc, auxShifts,
250  {{&kFitSinSqTheta23, th23seed.seeds}, {&kFitDmSq32, {1*calc->GetDmsq32(), -1*calc->GetDmsq32()}}}, {}, IFitter::kQuiet)->EvalMetricVal();
251 
252 
253  ResetOscCalcToDefault(calc);
254  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
255 
256  calc->SetdCP(1.*M_PI);
257 
258  double tmp_chi = fit.Fit(calc, auxShifts,
259  {{&kFitSinSqTheta23, th23seed.seeds}, {&kFitDmSq32, {1*calc->GetDmsq32(), -1*calc->GetDmsq32()}}}, {}, IFitter::kQuiet);
260 
261  chiw[i] = std::min(chiw[i], tmp_chi);
262 std::cout<<"delta: "<<delt<<"; wrong chisq: "<<chiw[i]<<"; right chisq: "<<chir[i]<<std::endl;
263 
264  }//end dcp
265 
266  if(plotType == "oct"){
267  double right(0), wrong(0);
268  if(delt < 0.5) {right=1; wrong=2;}
269  else {right=2; wrong=1;}
270 
271  MinuitFitter fitr(MultExp, {&kFitDeltaInPiUnits, th23seeds[right].var, &kFitDmSq32Scaled, &kFitSinSq2Theta13}, systs);
272 
273  MinuitFitter fitw(MultExp, {&kFitDeltaInPiUnits, th23seeds[wrong].var, &kFitDmSq32Scaled, &kFitSinSq2Theta13}, systs);
274 
275  ResetOscCalcToDefault(calc);
276  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
277  calc->SetTh23(asin(sqrt(delt)));
278 
279  chir[i] = fitr.Fit(calc, auxShifts,
280  {{&kFitDeltaInPiUnits, deltaseeds[0].seeds}/*, {th23seeds[right].var, th23seeds[right].seeds}*/}, {}, IFitter::kQuiet);
281 cout<<" oct right: dmsq= "<<calc->GetDmsq32()<<"; delta = "<< calc->GetdCP()<<"; ssth23 = "<< calc->GetTh23()<<endl;
282 
283  ResetOscCalcToDefault(calc);
284  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
285  calc->SetTh23(asin(sqrt(1-delt)));
286  chiw[i] = fitw.Fit(calc, auxShifts,
287  {{&kFitDeltaInPiUnits, deltaseeds[0].seeds}/*, {th23seeds[wrong].var, th23seeds[wrong].seeds}*/}, {}, IFitter::kQuiet);
288 cout<<" oct wrong: dmsq= "<<calc->GetDmsq32()<<"; delta = "<< calc->GetdCP()<<"; ssth23 = "<< calc->GetTh23()<<endl;
289 
290  }
291 
292  if(plotType == "maxmix"){
293  MinuitFitter fitw(MultExp, {&kFitDeltaInPiUnits, th23seeds[3].var, &kFitDmSq32Scaled, &kFitSinSq2Theta13}, systs); // fix as maxmix var/seed
294 
295  ResetOscCalcToDefault(calc);
296  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
297  calc->SetTh23(asin(sqrt(delt)));
298 
299  chir[i] = fit.Fit(calc, auxShifts,
300  {{&kFitDeltaInPiUnits, {0, 0.5, 1, 1.5}},
301  {th23seed.var, {0.4, 0.5, 0.6}}}, {}, IFitter::kQuiet);
302 
303  ResetOscCalcToDefault(calc);
304  calc->SetDmsq32(hie*fabs(calc->GetDmsq32()));
305  calc->SetTh23(asin(sqrt(0.5)));
306  chiw[i] = fitw.Fit(calc, auxShifts,
307  {{&kFitDeltaInPiUnits, {0, 0.5, 1, 1.5}},
308  {th23seeds[3].var, th23seeds[3].seeds}}, {}, IFitter::kQuiet);
309  }
310  delta[i] = delt;
311 // +- flip for oct only
312  double sign = 1;//(chiw[i]>chir[i])?1.:-1.;
313 
314  chi[i] = sign*sqrt(fabs(chiw[i] - chir[i]));
315 // cout<<"stepping delt: "<<delt<<" delta-chisq: "<< chi[i]<<" right: "<< chir[i]<<" wrong: "<< chiw[i]<<endl;
316 
317  }//end step on delt
318  TString seedName = th23seed.label + " " + (hie>0? "NH":"IH");
319  slice.push_back({new TGraph(steps, delta, chi), seedName});
320  }//end hie
321  }// end th23
322  outfile->cd();
323  TVectorD sl(1);
324  sl[0] = slice.size();
325  sl.Write("numslice");
326 
327  for(unsigned int i=0; i< slice.size(); i++){
328  slice[i].first->Write(slice[i].second);
329  }
330  outfile->Close();
331  }//end make file
332 
333  else{
334 
335  TFile * infile = new TFile (("files/"+ outfilename + systType + plotType + "_Slices.root").c_str(), "read");
336  auto sl = *(TVectorD*) infile->Get("numslice");
337  double numslice = sl[0];
338 
339  cout<<" reading slices:"<< numslice<< endl;
340 
341 
342  std::vector<std::pair<TGraph*, TString>> slice;
343  std::vector<std::pair<TGraph*, TString>> slice2018;
344 
345  for(double th23: {0.5}){
346  SeedsHelper th23seed;
347  if(th23 == 0.5) {th23seed = th23seeds[0];}
348  if(th23 == 0.461) {th23seed = th23seeds[1];}
349  if(th23 == 0.586) {th23seed = th23seeds[2];}
350 
351  for(int hie : {-1,1}){
352  TString name = th23seed.label+" "+(hie>0?"NH":"IH");
353  TGraph* get_slice;
354  infile->GetObject(name, get_slice);
355  if(name.Contains("2018")) slice2018.push_back({get_slice,name});
356  else slice.push_back({get_slice,name});
357  }
358  }
359  double max(6.1), xmin(0), xmax(2);
360  if(plotType == "dcp") max = 3.1;
361  if(plotType == "mh") max = 5.1;
362  if(plotType == "maxmix") max = 8.1;
363  if(IsTh23) {xmin = 0.3, xmax = 0.7;}
364 
365  if(slice2018.size()){
366  new TCanvas;
367  DrawSliceCanvas(IsTh23, plotType, max, xmin, xmax);
368  for(unsigned int i =0; i < slice2018.size(); i++){
369  if(slice2018[i].second.Contains("IH")){
370  slice2018[i].first->SetLineColor(kPrimColorIH);
371  slice2018[i].second = "Inverted";
372  }
373  if(slice2018[i].second.Contains("NH")){
374  slice2018[i].first->SetLineColor(k3SigmaConfidenceColorNH);
375  slice2018[i].second = "Normal";
376  }
377  slice2018[i].first->SetLineWidth(3);
378  slice2018[i].first->Draw("c same");
379  }
380  auto leg2 = SliceLegend(slice2018, !IsTh23, 0.68, IsSyst);
381  leg2->Draw();
382  TLine* line = new TLine();
383  line->SetLineStyle(3);
384  if(plotType !="dcp") line->DrawLine(xmin, 3., xmax, 3.);
385  else line->DrawLine(xmin, 2., xmax, 2.);
386 
387 // gPad->SetGrid();
388  if(!IsTh23) latex(0.138, 0.94, "sin^{2}2#theta_{13}=0.082, sin^{2}2#theta_{23}=1.00", 0, 12, 1.3/30.);
389  else latex(0.138, 0.94, "sin^{2}2#theta_{13}=0.082", 0, 12, 1.3/30.);
390  latex(0.9, 0.94, "#nu 36#times10^{20} + #bar{#nu} 36#times10^{20} POT", 0, 32, 1.3/30.);
391 
392  SimulationSide();
393  gPad->Print((TString)"plots/"+version+"sens2018_"+systType+plotType+".pdf");
394  }
395  else{
396  DrawSliceCanvas(IsTh23, plotType, max, xmin, xmax);
397  for(unsigned int i = 0; i < slice.size(); i++){
398  if(slice[i].second.Contains("IH")) slice[i].first->SetLineColor(kPrimColorIH);
399  if(slice[i].second.Contains("NH")) slice[i].first->SetLineColor(k3SigmaConfidenceColorNH);
400  if(slice[i].second.Contains("UO")) slice[i].first->SetLineStyle(1);
401  if(slice[i].second.Contains("LO")) slice[i].first->SetLineStyle(7);
402  if(slice[i].second.Contains("2018")) slice[i].first->SetLineStyle(10);
403  slice[i].first->SetLineWidth(3);
404  slice[i].first->Draw("same");
405  }
406  auto leg = SliceLegend(slice, !IsTh23, 0.7, IsSyst);
407  leg->Draw();
408  TLine* line = new TLine();
409  line->SetLineStyle(3);
410  line->DrawLine(xmin, 3., xmax, 3.);
411 
412 // gPad->SetGrid();
413  Simulation();
414  gPad ->Print((TString)"plots/"+version+"sens_"+systType+plotType+".pdf");
415  }
416  }// end make plots
417 }
418 
419 
420 
421 
422 
423 
424 
425 
Spectrum * GetFakeData(const IPrediction *pred, osc::IOscCalc *calc, const double pot, TH1D *cosmics=0)
const Color_t kPrimColorIH
Definition: Style.h:64
void Simulation()
Definition: tools.h:16
void DrawSliceCanvas(TString slicename, const double ymax, const double xmin=0, const double xmax=2.)
const XML_Char * name
Definition: expat.h:151
void latex(double x, double y, std::string txt, double ang=0, int align=22, double size=0.042)
virtual _IOscCalcAdjustable< T > * Copy() const =0
constexpr auto const & right(const_AssnsIter< L, R, D, Dir > const &a, const_AssnsIter< L, R, D, Dir > const &b)
Definition: AssnsIter.h:112
Cuts and Vars for the 2020 FD DiF Study.
Definition: vars.h:6
std::map< std::string, double > xmax
void ResetOscCalcToDefault(osc::IOscCalcAdjustable *calc)
Reset calculator to default assumptions for all parameters.
Definition: Calcs.cxx:23
std::vector< SystGroupDef > systs
Definition: syst_header.h:385
fvar< T > fabs(const fvar< T > &x)
Definition: fabs.hpp:15
std::vector< const ISyst * > getAna2018NueOnly(const BeamType2018 beam)
double th23
Definition: runWimpSim.h:98
double delta
Definition: runWimpSim.h:98
const FitDmSq32 kFitDmSq32
Definition: FitVars.cxx:18
Simple record of shifts applied to systematic parameters.
Definition: SystShifts.h:20
const IConstrainedFitVar * kFitSinSqTheta23MaxMix
T sqrt(T number)
Definition: d0nt_math.hpp:156
const FitSinSqTheta23UpperOctant kFitSinSqTheta23UpperOctant
Definition: FitVars.cxx:16
const double kFutureRHCPOT
Definition: Exposures.h:245
virtual T GetTh23() const
Definition: IOscCalc.h:94
const double kFutureFHCPOT
Definition: Exposures.h:244
std::vector< const IPrediction * > GetNumuPredictions2018(const int nq=4, bool useSysts=true, std::string beam="fhc", bool GetFromUPS=false, ENu2018ExtrapType numuExtrap=kNuMu, bool minimizeMemory=false, bool NERSC=false)
void SimulationSide()
Definition: rootlogon.C:137
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 * s
Definition: expat.h:262
string outfilename
knobs that need extra care
std::vector< const ISyst * > getAllAna2018Systs(const EAnaType2018 ana, const bool smallgenie, const BeamType2018 beam, bool isFit)
string infile
const Color_t k3SigmaConfidenceColorNH
Definition: Style.h:78
const double kFutureFHCLivetime
Definition: Exposures.h:247
void jointsensitivity(bool MakeFile=true, bool IsSyst=false, std::string plotType="dcp")
const ReactorExperiment * WorldReactorConstraint2017()
Reactor constraint from PDG 2017.
virtual T GetDmsq32() const
Definition: IOscCalc.h:91
TLegend * SliceLegend(std::vector< std::pair< TGraph *, TString > > &graphs, bool isDelta)
const ConstrainedFitVarWithPrior fitDmSq32Scaled_UniformPrior & kFitDmSq32Scaled
const double kFutureRHCLivetime
Definition: Exposures.h:248
std::vector< std::pair< TH1D *, double > > GetNumuCosmics2018(const int nq=4, std::string beam="fhc", bool GetFromUPS=false, bool NERSC=false)
virtual T GetdCP() const
Definition: IOscCalc.h:95
OStream cout
Definition: OStream.cxx:6
const XML_Char * version
Definition: expat.h:187
Combine multiple component experiments.
std::pair< TH1D *, double > GetNueCosmics2018(std::string beam, bool GetFromUPS=false, bool NERSC=false)
const FitSinSqTheta23LowerOctant kFitSinSqTheta23LowerOctant
Definition: FitVars.cxx:17
const ConstrainedFitVarWithPrior fitSsqTh23_UniformPriorSsqTh23 & kFitSinSqTheta23
virtual void SetTh23(const T &th23)=0
Interface definition for fittable variables.
Definition: IFitVar.h:16
const FitSinSq2Theta13 kFitSinSq2Theta13
Definition: FitVars.cxx:13
const IPrediction * GetNuePrediction2018(std::string decomp, osc::IOscCalc *calc, bool corrSysts, std::string beam, bool isFakeData, bool GetFromUPS=false, bool minimizeMemory=false, bool NERSC=false)
T min(const caf::Proxy< T > &a, T b)
T max(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
Definition: statistics.h:68
const FitVarWithPrior fitDeltaInPiUnits_UniformPriordCP & kFitDeltaInPiUnits
std::vector< const ISyst * > getAna2018NumuOnly(const BeamType2018 beam)
const double kAna2018FHCLivetime
Definition: Exposures.h:213
FILE * outfile
Definition: dump_event.C:13
def sign(x)
Definition: canMan.py:197
const double kAna2018RHCLivetime
Definition: Exposures.h:214
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