48 bool MakeSurf =
false,
50 bool MakeSens =
false,
51 bool Varyth23 =
false,
54 bool isPtExtrap =
false,
55 bool NuMuOnly =
false,
60 bool isFutureSens =
false ) {
64 const std::vector<double> delta_seeds = {0, 0.5, 1., 1.5};
65 const std::vector<double> th23_seeds = {0.45, 0.55};
70 std::string SystTag = isSyst ?
"with_syst":
"just_stat";
71 std::string sNuMu = NuMuOnly ?
"numuonly" :
"numu_nue";
72 std::string sExtrap = isPtExtrap?
"PtExtrap" :
"nonPtExtrap";
74 std::string TagName = sNuMu+
"_"+
horn+
"_"+sHier+
"_"+SystTag+
"_"+sExtrap+
"_"+option;
77 std::cout <<
"\n Greetings! You requested to " << (MakeFile?
" make files." :
" only plot." )
78 <<
"\nIt will use " <<
horn <<
" files and " << SystTag <<
" for " << sNuMu <<
", plotting: " 79 << (MakeSurf?
"contours ":
"no contours ")
80 << (isNH ?
" NH " :
" IH " ) <<
" ; " << whatsurf
81 << (MakeSens?
" slices " :
" no slices" )
82 <<
" in case of slices it will be "<< whatplot
83 <<
"\nAll using option " << option
84 <<
"\n\t TagName is thus " << TagName
89 double BASE_dcp = 0.82*
M_PI;
90 double BASE_th23 = 0.568;
91 double BASE_dmsq32 = 2.41e-3;
94 if ( option.find(
"2019BestFit") != std::string::npos ) {
97 BASE_dmsq32 = 2.48e-3;
101 if ( option.find(
"NHLO") != std::string::npos ) {
104 BASE_dmsq32 = 2.49e-3;
108 if ( option.find(
"IHUO") != std::string::npos ) {
111 BASE_dmsq32 = -2.54e-3;
114 calc ->
SetdCP ( BASE_dcp );
122 std::vector<double>
pot;
131 const double potFD_rhc = temp_potFD_rhc;
132 const double potFD_fhc = temp_potFD_fhc;
133 const double cosFD_rhc = temp_cosFD_rhc;
134 const double cosFD_fhc = temp_cosFD_fhc;
136 std::vector<const IPrediction*> predsvector;
137 std::vector<std::pair <Spectrum*, double>> cosmicsvector;
139 std::vector<const IPrediction*> predictionsNue;
140 std::vector<const IPrediction*> predictionsNumu;
141 std::vector<std::pair <Spectrum*, double>> cosmicsNue;
142 std::vector<std::pair <Spectrum*, double>> cosmicsNumu;
144 string decomp_fhc =
"combo";
145 string decomp_rhc =
"prop";
147 decomp_fhc +=
"_noPt";
148 decomp_rhc +=
"_noPt";
149 outfilename +=
"_noPtExtrap";
152 bool FakeNDData =
false;
167 cosmicsvector.insert(cosmicsvector.end(), cosmicsNue .begin(), cosmicsNue .end());
168 predsvector .insert(predsvector .
end(), predictionsNue.begin(), predictionsNue.end());
175 predictionsNumu.insert(predictionsNumu.end(), numu_preds_fhc .begin(), numu_preds_fhc .end() );
176 cosmicsNumu .insert(cosmicsNumu .
end(), numu_cosmics_fhc.begin(), numu_cosmics_fhc.end() );
181 predictionsNumu.insert( predictionsNumu.end(), numu_preds_rhc .begin(), numu_preds_rhc .end() );
182 cosmicsNumu .insert( cosmicsNumu .
end(), numu_cosmics_rhc.begin(), numu_cosmics_rhc.end() );
185 cosmicsvector.insert(cosmicsvector.end(), cosmicsNumu .begin(), cosmicsNumu .end());
186 predsvector .insert(predsvector .
end(), predictionsNumu.begin(), predictionsNumu.end());
194 pot.push_back(potFD_fhc);
195 livetime.push_back(cosFD_fhc);
198 pot.push_back(potFD_rhc);
199 livetime.push_back(cosFD_rhc);
202 std::vector<TH1*> hNue;
203 std::vector<TH1*> hMC;
204 std::vector<TH1*> hTotbkg;
205 std::vector<TH1*> hBkg;
206 std::vector<TH1*> hNC;
207 std::vector<TH1*> hCC;
208 std::vector<TH1*> hBeam;
209 std::vector<TH1*> hTau;
210 std::vector<TH1*> hCos;
211 std::vector<TH1*> hRock;
212 std::vector<TH1*> hNue_bg;
214 std::vector<TH1*> hNumu;
215 std::vector<TH1*> hCosNumu;
216 std::vector<TH1*> hMCNumu;
218 std::cout<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Here are the predictions for 2020 nue ana with 2019 Best fit values: "<<
std::endl;
219 for(
int i = 0;
i < (
int)predictionsNue.size();
i++){
236 hMC .push_back(predictionsNue[i]->Predict(calc).ToTH1(pot[i]));
242 hBkg.push_back( (TH1D*)temp->Clone(
UniqueName().c_str()));
243 TH1D *tempCos = cosmicsNue[
i].first->ToTH1(livetime[i], kBlack, kSolid,
kLivetime);
244 hCos.push_back( tempCos );
247 hMC[
i]->Add(hCos[i]);
248 hTotbkg.push_back(temp);
250 std::cout << sFHC <<
" mode, with " << pot[
i] <<
" POT, and " << livetime[
i] <<
" s livetime." 251 <<
"\n\t Total MC " << hMC [
i]->Integral()
252 <<
"\n\t Nu_e Signal " << hNue [
i]->Integral()
253 <<
"\n\t Total Bkg " << hTotbkg[
i]->Integral()
254 <<
"\n\t Total Beam bkg " << hBkg [
i]->Integral()
255 <<
"\n\t Wrong Sign bkg " << hNue_bg[
i]->Integral()
256 <<
"\n\t Beam Nu_e " << hBeam [
i]->Integral()
257 <<
"\n\t NC " << hNC [
i]->Integral()
258 <<
"\n\t Nu_mu CC " << hCC [
i]->Integral()
259 <<
"\n\t Nu_tau CC " << hTau [
i]->Integral()
260 <<
"\n\t Cosmic " << hCos [
i]->Integral()
264 std::cout<<
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Here are the predictions for 2020 numu ana with 2019 Best fit values: "<<
std::endl;
265 double AllQ_NuMu_Full, AllQ_Beam_Full, AllQ_Cosm_Full;
266 double AllQ_NuMu_Dip , AllQ_Beam_Dip , AllQ_Cosm_Dip;
267 AllQ_NuMu_Full = AllQ_Beam_Full = AllQ_Cosm_Full = AllQ_NuMu_Dip = AllQ_Beam_Dip = AllQ_Cosm_Dip = 0;
268 for(
int i = 0;
i < (
int)predictionsNumu.size();
i++){
270 double pot = potFD_fhc;
271 double live = cosFD_fhc;
281 hMCNumu .push_back(predictionsNumu[
i]->Predict(calc).ToTH1(pot));
282 TH1D *tempCos = cosmicsNumu[
i].first->ToTH1(live, kBlack, kSolid,
kLivetime);
283 hCosNumu.push_back( tempCos );
285 double NuMu_Full = hNumu [
i]->Integral();
286 double Beam_Full = hMCNumu [
i]->Integral() - NuMu_Full;
287 double Cosm_Full = hCosNumu[
i]->Integral();
288 double FOM_Full = NuMu_Full /
pow( NuMu_Full+Beam_Full+Cosm_Full, 0.5 );
289 int bmin = hNumu[
i]->GetXaxis()->FindBin(1.);
290 int bmax = hNumu[
i]->GetXaxis()->FindBin(2.);
291 double NuMu_Dip = hNumu [
i]->Integral( bmin, bmax );
292 double Beam_Dip = hMCNumu [
i]->Integral( bmin, bmax ) - NuMu_Dip;
293 double Cosm_Dip = hCosNumu[
i]->Integral( bmin, bmax );
294 double FOM_Dip = NuMu_Dip /
pow( NuMu_Dip+Beam_Dip+Cosm_Dip, 0.5 );
295 std::cout << sFHC <<
" mode, Quartile " << quant <<
" with " << pot <<
" POT, and " << live <<
" s livetime." 296 <<
"\n\t Nu_mu Signal Full: " << NuMu_Full <<
"\t Dip: " << NuMu_Dip
297 <<
"\n\t Beam Bkg Full: " << Beam_Full <<
"\t Dip: " << Beam_Dip
298 <<
"\n\t Cosmic Full: " << Cosm_Full <<
"\t Dip: " << Cosm_Dip
299 <<
"\n\t FOM_Full Full: " << FOM_Full <<
"\t Dip: " << FOM_Dip
301 AllQ_NuMu_Full += NuMu_Full; AllQ_NuMu_Dip += NuMu_Dip;
302 AllQ_Beam_Full += Beam_Full; AllQ_Beam_Dip += Beam_Dip;
303 AllQ_Cosm_Full += Cosm_Full; AllQ_Cosm_Dip += Cosm_Dip;
305 double AllQ_FOM_Full = AllQ_NuMu_Full /
pow( AllQ_NuMu_Full+AllQ_Beam_Full+AllQ_Cosm_Full, 0.5 );
306 double AllQ_FOM_Dip = AllQ_NuMu_Dip /
pow( AllQ_NuMu_Dip +AllQ_Beam_Dip +AllQ_Cosm_Dip , 0.5 );
307 std::cout << sFHC <<
" mode, All Quartile with " << pot <<
" POT, and " << live <<
" s livetime." 308 <<
"\n\t Nu_mu Signal Full: " << AllQ_NuMu_Full <<
"\t Dip: " << AllQ_NuMu_Dip
309 <<
"\n\t Beam Bkg Full: " << AllQ_Beam_Full <<
"\t Dip: " << AllQ_Beam_Dip
310 <<
"\n\t Cosmic Full: " << AllQ_Cosm_Full <<
"\t Dip: " << AllQ_Cosm_Dip
311 <<
"\n\t FOM_Full Full: " << AllQ_FOM_Full <<
"\t Dip: " << AllQ_FOM_Dip
313 AllQ_NuMu_Full = AllQ_Beam_Full = AllQ_Cosm_Full = AllQ_NuMu_Dip = AllQ_Beam_Dip = AllQ_Cosm_Dip = 0;
318 std::cout<<
"\n\n Good job, you've got your integrals, now to make sensitivites! \n\n"<<
std::endl;
332 std::vector <const IExperiment * > expts;
334 for(
int i = 0;
i < (
int) predsvector.size(); ++
i){
335 double pot = potFD_fhc;
336 double live = cosFD_fhc;
338 if(
horn==
"both" && ( (!NuMuOnly && (
i==1 ||
i>5) ) ||
345 auto thisdata =
GetFakeData ( predsvector[
i], calc, pot, cosmicsvector[i].first );
352 std::cout<<
"Experiments are ready, number of items in vector is "<<expts.size()<<
" (the above plus WordReactorConstraint)" <<
std::endl;
356 std::vector< const ISyst * >
systs = {};
358 std::vector <SystShifts> seedShifts = {};
367 for (
size_t i=0;
i<expts.size(); ++
i) {
369 exptsAll->SetSystCorrelations(
i, notfornumuFHC);
372 exptsAll->SetSystCorrelations(
i, notfornumuRHC);
383 exptsAll->SetSystCorrelations(0, notfornueFHC);
384 for(
int i=1;
i<5;
i++) {
385 exptsAll->SetSystCorrelations(
i, notfornumuFHC);
389 exptsAll->SetSystCorrelations(0, notfornueFHC);
390 exptsAll->SetSystCorrelations(1, notfornueRHC);
391 for(
int i=0;
i < 4; ++
i) exptsAll->SetSystCorrelations(
i+2, notfornumuFHC);
392 for(
int i=0;
i < 4; ++
i) exptsAll->SetSystCorrelations(
i+6, notfornumuRHC);
411 double minchi23 = 1E20;
413 for(
auto & th23seed:th23_seeds){
415 std::cout <<
"Finding best fit for " << (th23seed<0.5?
"LO ":
"UO ") << (hie>0?
"NH " :
"IH ") <<
std::endl;
416 auto thisminchi = fit.
Fit( calc, auxShifts ,
424 minchi23=
min(minchi23, thisminchi);
440 gSystem->MakeDirectory( FileDir.c_str() );
441 gSystem->MakeDirectory( PlotDir.c_str() );
450 if(!isNH) { hie = -1; }
452 std::string FileName = FileDir+outfilename+
"_Surfonly_"+whatsurf+
".root";
454 if (whatsurf ==
"th23dcp" ) PlotName = TagName+
"-surf_delta_th23";
455 if (whatsurf ==
"dmsqth23") PlotName = TagName+
"-surf_th23_dmsq23";
457 std::cout <<
"\n You now want to make the surfaces called " << PlotName <<
". They will be saved/loaded from " << FileName <<
std::endl;
461 TFile *
outfile =
new TFile( FileName.c_str(),
"recreate" );
465 v.Write(
"overall_minchi");
475 if (whatsurf==
"th23dcp") {
476 int Ysteps = 30;
int Xsteps = 30;
477 std::cout<<
"\t Doing th23dcp --> minimize with grid "<< Ysteps<<
" * "<<Xsteps<<
" points"<<
std::endl;
488 surf_th23_dcp.
SaveTo(outfile, PlotName.c_str() ) ;
491 else if (whatsurf==
"dmsqth23") {
492 int Ysteps = 26;
int Xsteps = 26;
493 std::cout<<
"\t Doing dmsqth23 --> minimize with grid "<< Ysteps<<
" * "<<Xsteps<<
" points"<<
std::endl;
504 auto surf_test=surf_th23_dmsq23.
ToTH2(minchi23);
505 surf_test ->Write( TString(PlotName)+TString(
"_2DTest") );
506 surf_th23_dmsq23.
SaveTo( outfile, PlotName.c_str() ) ;
514 TFile *
infile =
new TFile( FileName.c_str(),
"read");
516 auto mins =* (
TVectorD*)infile->Get(
"overall_minchi");
517 double minchi23 = mins[0];
528 auto leg =
ContourLegend(hie,
false,
false, kFillColor1, kFillColor2, kFillColor3, kBlack,
false);
531 if (whatsurf==
"th23dcp"){
538 surf_th23_dcp.DrawContour(surf_th23_dcp_1Sigma, kSolid , kFillColor1, minchi23);
540 surf_th23_dcp.DrawContour(surf_th23_dcp_3Sigma, kSolid , kFillColor3, minchi23);
545 gPad->Print((TString)PlotDir+PlotName+
".pdf");
548 else if (whatsurf==
"dmsqth23") {
558 surf_th23_dmsq23.DrawContour(surf_th23_dmsq23_1Sigma, kSolid , kFillColor1, minchi23);
560 surf_th23_dmsq23.DrawContour(surf_th23_dmsq23_3Sigma, kSolid , kFillColor3, minchi23);
565 gPad->Print((TString)PlotDir+PlotName+
".pdf");
576 std::vector<std::pair<TGraph*, TString>> slice;
577 std::vector<std::pair<TGraph*, TString>> slice2019;
582 std::vector<double> seeds;
586 std::vector <th23helper> th23seeds;
592 std::string sVary = Varyth23 ?
"Varyth23":
"VarydCP";
593 std::string FileName = FileDir+outfilename+
"_"+sVary+
"_Slicesonly_"+whatplot+
".root";
596 std::cout <<
"\nYou are going to make the file containing the sensitivites." <<
std::endl;
597 TFile *
outfile =
new TFile( FileName.c_str(),
"recreate" );
602 v.Write(
"overall_minchi");
604 th23helper th23seed = th23seeds[0];
606 double th23 = BASE_th23;
607 double delta = BASE_dcp;
609 for(
int hie : {-1,1}) {
611 int steps = 25;
double chi2r[steps], chi2w[steps], chi[steps];
double Fits[steps];
612 double step = 2.0/(steps-1);
613 for (
int i =0;
i<steps;
i++){
614 if ( Varyth23 ) { th23 = (
i*step*0.1 ) + 0.4; }
615 else { delta = (
i*step*
M_PI); }
622 std::vector <const IExperiment * > expts_temp;
623 for(
int i = 0;
i < (
int) predsvector.size(); ++
i){
625 double pot = potFD_fhc;
626 if(
horn==
"both" && ( (!NuMuOnly && (
i==1 ||
i>5) ) ||
631 auto thisdata =
GetFakeData (predsvector[
i],calc, pot, cosmicsvector[i].first);
638 std::cout <<
"\tStep " <<
i <<
" of " << steps <<
", th23 = " << th23 <<
", delta = " << delta <<
" ("<<delta/
M_PI<<
"*M_PI)" <<
std::endl;
647 for (
size_t i=0;
i<expts.size(); ++
i) {
649 exptsAll_temp->SetSystCorrelations(
i, notfornumuFHC);
652 exptsAll_temp->SetSystCorrelations(
i, notfornumuRHC);
662 exptsAll_temp->SetSystCorrelations(0, notfornueFHC);
663 for(
int i=1;
i<5;
i++) {
664 exptsAll_temp->SetSystCorrelations(
i, notfornumuFHC);
668 exptsAll_temp->SetSystCorrelations(0, notfornueFHC);
669 exptsAll_temp->SetSystCorrelations(1, notfornueRHC);
670 for(
int i=0;
i < 4; ++
i) exptsAll_temp->SetSystCorrelations(
i+2, notfornumuFHC);
671 for(
int i=0;
i < 4; ++
i) exptsAll_temp->SetSystCorrelations(
i+6, notfornumuRHC);
678 if( whatplot==
"mh" ){
679 std::cout <<
"\t\t Now to make the MH sensitivities...First the Normal Hierarchy." <<
std::endl;
686 chi2r[
i] = fit.
Fit(calc, auxShifts,
695 chi2w[
i] = fit.
Fit(calc, auxShifts,
703 if( whatplot==
"dcp" ){
704 std::cout <<
"\t\t Now to make the dCP sensitivities...First do DeltaCP = delta = " << delta <<
std::endl;
712 chi2r[
i] = fit.
Fit(calc, auxShifts,
721 double chi2w0 = fit.
Fit(calc, auxShifts,
730 double chi2wpi = fit.
Fit(calc, auxShifts,
741 if( whatplot==
"maxmix" ){
742 std::cout <<
"\t\t Now to make the Maximal Mixing sensitivities...First do theta23 = " << th23 <<
std::endl;
752 chi2r[
i] = fit23.
Fit(calc, auxShifts,
762 chi2w[
i] = fit.
Fit(calc, auxShifts,
770 if ( whatplot==
"oct" ) {
771 std::cout <<
"\t\t Now to make the octant sensitivities...First use the correct octant for th23 " << th23 <<
std::endl;
786 chi2r[
i] = fit1.
Fit(calc, auxShifts,
790 { th23seeds[
id].var , th23seeds[
id].seeds }
796 chi2w[
i] = fit2.
Fit(calc, auxShifts,
800 { th23seeds[revid].var , th23seeds[revid].seeds }
804 if (Varyth23) Fits[
i] =
th23;
805 else Fits[
i] = delta/
M_PI;
810 TString
name = th23seed.label+
" "+(hie>0?
"NH":
"IH");
811 slice.push_back({
new TGraph(steps, Fits, chi), name});
817 ss[0] = slice.size();
820 for(
int i=0;
i<(
int) slice.size();
i++){
821 slice[
i].first->Write(slice[
i].
second);
829 std::cout <<
"You are going to read the file containing the sensitivities -- " << FileName <<
std::endl;
830 TFile *
infile =
new TFile (FileName.c_str(),
"read");
831 auto mins =* (
TVectorD*)infile->Get(
"overall_minchi");
832 double minchi23 = mins[0];
836 double numsl =
ss[0];
843 for (
double th23 : {0.565}){
846 if(
th23 == 0.565) {th23seed = th23seeds[0];}
847 if(
th23 == 0.404) {th23seed = th23seeds[1];}
848 if(
th23 == 0.623) {th23seed = th23seeds[2];}
850 for(
int hie : {-1,1}){
851 TString
name = th23seed.label+
" "+(hie>0?
"NH":
"IH");
853 infile->GetObject(name, get_slice);
854 if(name.Contains(
"2019")) slice2019.push_back({get_slice,name});
855 else slice.push_back({get_slice,name});
864 if(whatplot==
"oct" ) max = 4.1;
865 if(whatplot==
"maxmix" && isFutureSens) max = 6.1;
867 if(whatplot==
"dcp" ) max = 3.1;
868 if(whatplot==
"maxmix") max = 1.5;
869 if(whatplot==
"oct" && NuMuOnly ) max = 0.5;
870 if(whatplot==
"mh" && isFutureSens) max = 6.1;
873 for(
unsigned int i =0;
i < slice2019.size();
i++){
878 slice2019[
i].first->SetLineWidth(3);
879 slice2019[
i].first->Draw(
"same");
882 auto leg2 =
SliceLegend(slice2019, (whatplot!=
"dcp"&&whatplot!=
"mh"), 0.53, whatplot==
"mh",
false, isSyst, isFutureSens);
886 latex(0.138, 0.94,
"NOvA 2020 Best Fit" , 0, 12, 1.3/30.);
887 latex(0.9 , 0.94,
"#nu 31.5#times10^{20} + #bar{#nu} 31.5#times10^{20} POT", 0, 32, 1.3/30.);
892 gPad->Print((TString)PlotDir+TagName+
"-Sens-"+sVary+
"-"+whatplot+
".pdf");
::xsd::cxx::tree::id< char, ncname > id
const Color_t kPrimColorIH
void DrawSliceCanvas(TString slicename, const double ymax, const double xmin=0, const double xmax=2.)
Cuts and Vars for the 2020 FD DiF Study.
std::map< std::string, double > xmax
void ResetOscCalcToDefault(osc::IOscCalcAdjustable *calc)
Reset calculator to default assumptions for all parameters.
fvar< T > fabs(const fvar< T > &x)
const FitDmSq32 kFitDmSq32
Simple record of shifts applied to systematic parameters.
const FitSinSqTheta23UpperOctant kFitSinSqTheta23UpperOctant
TH2 * Gaussian68Percent2D(const FrequentistSurface &s)
Up-value surface for 68% confidence in 2D in gaussian approximation.
const double kFutureRHCPOT
const Color_t k1SigmaConfidenceColorIH
const Color_t k2SigmaConfidenceColorNH
TH2 * Gaussian2Sigma2D(const FrequentistSurface &s)
Up-value surface for 2 sigma confidence in 2D in gaussian approximation.
const double kFutureFHCPOT
std::vector< const IPrediction * > GetNumuPredictions2020(const int nq=4, std::string decomp="noPt", osc::IOscCalc *calc=DefaultOscCalc(), bool useSysts=true, std::string beam="fhc", bool isFakeData=false, bool GetFromUPS=false, bool minimizeMemory=true, bool NERSC=false)
static SystShifts Nominal()
osc::IOscCalcAdjustable * DefaultOscCalc()
Create a new calculator with default assumptions for all parameters.
const Color_t k1SigmaConfidenceColorNH
virtual void SetDmsq32(const T &dmsq32)=0
std::pair< Spectrum *, double > GetNueCosmics2020(std::string beam, bool GetFromUPS=false, bool NERSC=false)
Log-likelihood scan across two parameters.
string outfilename
knobs that need extra care
Charged-current interactions.
void sensitivity2020(bool MakeFile=false, bool MakeSurf=false, std::string whatsurf="th23dcp", bool MakeSens=false, bool Varyth23=false, std::string whatplot="mh", bool isSyst=false, bool isPtExtrap=false, bool NuMuOnly=false, std::string horn="both", bool isNH=true, std::string option="2019BestFit", bool OnGrid=false, bool isFutureSens=false)
const Color_t k3SigmaConfidenceColorNH
const double kFutureFHCLivetime
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.
TH2 * Gaussian3Sigma2D(const FrequentistSurface &s)
Up-value surface for 3 sigma confidence in 2D in gaussian approximation.
const IPrediction * GetNuePrediction2020(std::string decomp, osc::IOscCalc *calc, bool corrSysts, std::string beam, bool isFakeData, bool GetFromUPS=false, bool minimizeMemory=true, bool NERSC=false)
const double kAna2020FHCLivetime
virtual T GetDmsq32() const
TLegend * SliceLegend(std::vector< std::pair< TGraph *, TString > > &graphs, bool isDelta)
const ConstrainedFitVarWithPrior fitDmSq32Scaled_UniformPrior & kFitDmSq32Scaled
const double kAna2020FHCPOT
const double kFutureRHCLivetime
const double kAna2020RHCPOT
void DrawContourCanvas(TString surfName, double minx=0, double maxx=2, double miny=0, double maxy=1)
std::vector< std::pair< Spectrum *, double > > GetNumuCosmics2020(const int nq=4, std::string beam="fhc", bool GetFromUPS=false, bool NERSC=false)
static float min(const float a, const float b, const float c)
virtual T GetTh13() const
const Color_t k3SigmaConfidenceColorIH
TH2 * ToTH2(double minchi=-1) const
TLegend * ContourLegend(int hie, bool fillContour, bool fccorr, Int_t kFillColor1, Int_t kFillColor2, Int_t kFillColor3, Int_t kDarkColor, bool bestFit)
Combine multiple component experiments.
const Style_t k2SigmaConfidenceStyle
void SaveTo(TDirectory *dir, const std::string &name) const
const FitSinSqTheta23LowerOctant kFitSinSqTheta23LowerOctant
const double kAna2020RHCLivetime
const ConstrainedFitVarWithPrior fitSsqTh23_UniformPriorSsqTh23 & kFitSinSqTheta23
virtual void SetTh23(const T &th23)=0
Neutral-current interactions.
Interface definition for fittable variables.
Both neutrinos and antineutrinos.
std::vector< std::pair< const ISyst *, const ISyst * > > GetCorrelations(bool isNue, bool isFHC, bool ptExtrap)
const ReactorExperiment * WorldReactorConstraint2019()
Reactor constraint from PDG 2019.
const FitSinSq2Theta13 kFitSinSq2Theta13
T min(const caf::Proxy< T > &a, T b)
All neutrinos, any flavor.
T max(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
const FitVarWithPrior fitDeltaInPiUnits_UniformPriordCP & kFitDeltaInPiUnits
static std::unique_ptr< FrequentistSurface > LoadFrom(TDirectory *dir, const std::string &name)
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)
std::string UniqueName()
Return a different string each time, for creating histograms.
const Color_t k2SigmaConfidenceColorIH
virtual void SetdCP(const T &dCP)=0
Compare a single data spectrum to the MC + cosmics expectation.
Perform MINUIT fits in one or two dimensions.