13 #include "CAFAna/Cuts/NueCutsFirstAna.h" 14 #include "CAFAna/Cuts/NumuCuts.h" 33 #include "Utilities/func/MathUtil.h" 47 name =
"plots/assessPaperNuMu/"+prefix+
"_"+
name;
48 if(!suffix.empty()) name +=
"_"+suffix;
50 gPad->Print((name+
".eps").c_str());
51 gPad->Print((name+
".pdf").c_str());
52 gPad->Print((name+
".png").c_str());
60 if(sr->
mc.
nnu == 0)
return false;
64 (sr->
mc.
nu[0].E < 5 && (sr->
mc.
nu[0].iscc==1 &&
abs(sr->
mc.
nu[0].pdg)==14)) ||
65 (sr->
mc.
nu[0].iscc==0) ||
70 (sr->
mc.
nu[0].iscc==0) ||
89 if(sr->
mc.
nnu == 0)
return false;
93 (sr->
mc.
nu[0].E < 5 && (sr->
mc.
nu[0].iscc==1 &&
abs(sr->
mc.
nu[0].pdg)==14)) ||
94 (sr->
mc.
nu[0].iscc==0) ||
99 (sr->
mc.
nu[0].iscc==0) ||
112 if(sr->
mc.
nu.empty())
return 0.;
114 if(!sr->
mc.
nu[0].iscc) ret *= sr->
mc.
nu[0].y;
134 if(sr->
mc.
nu.empty())
return tmp;
135 tmp = sr->
mc.
nu[0].y;
156 void Arrows(TH1* sigId,
double bestCutSoB,
double bestCutSoSB,
double faCut,
bool noarrow =
false)
158 sigId->GetYaxis()->SetRangeUser(0,1.05*sigId->GetMaximum());
160 double maxy = sigId->GetMaximum()/2;
164 TLine* lin =
new TLine(bestCutSoB, 0, bestCutSoB, maxy);
165 lin->SetLineWidth(3);
166 lin->SetLineColor(
kGreen+2);
169 TArrow* arr =
new TArrow(bestCutSoB-0.003, maxy, bestCutSoB+.03, maxy, .02,
"|>");
170 arr->SetLineWidth(3);
171 arr->SetLineColor(
kGreen+2);
172 arr->SetFillColor(
kGreen+2);
179 lin =
new TLine(bestCutSoSB, 0, bestCutSoSB, maxy);
180 lin->SetLineWidth(3);
181 lin->SetLineStyle(2);
182 lin->SetLineColor(
kGreen+3);
186 TArrow* arr =
new TArrow(bestCutSoSB-0.003, maxy, bestCutSoSB+.04, maxy, .02,
"|>");
187 arr->SetLineWidth(3);
188 arr->SetLineColor(
kGreen+3);
189 arr->SetFillColor(
kGreen+3);
194 lin =
new TLine(faCut, 0, faCut, maxy);
195 lin->SetLineWidth(3);
196 lin->SetLineColor(
kRed);
200 TArrow* arr =
new TArrow(faCut, maxy, faCut+.04, maxy, .02,
"|>");
201 arr->SetLineWidth(3);
202 arr->SetLineColor(
kRed);
203 arr->SetFillColor(
kRed);
211 TH1* sig_denom,
double* bestCuts,
double faCut,
215 std::cout <<
" &\t Cut &\t $s/\\sqrt{b}$ &\t $s/\\sqrt{s+b}$ &\t $\\nu_\\mu$ sig &\t Tot bkg &\t NC &\t Appeared $\\nu_e$ &\t Beam $\\nu_e$ &\t Sig eff &\t Purity\\\\" 218 TH1F*
eff =
new TH1F((
"eff_"+suffix+
"_"+eff_suffix).c_str(),
219 "Efficiency vs Cut Value; ;Efficiency (%)",
220 sig->GetNbinsX(), sig->GetXaxis()->GetBinLowEdge(1),
221 sig->GetXaxis()->GetBinUpEdge(sig->GetNbinsX()));
223 TH1F* effxpur =
new TH1F((
"effxpur_"+suffix+
"_"+eff_suffix).c_str(),
224 "Efficiency*Purity vs Cut Value; ;Efficiency*Purity (%)",
225 sig->GetNbinsX(), sig->GetXaxis()->GetBinLowEdge(1),
226 sig->GetXaxis()->GetBinUpEdge(sig->GetNbinsX()));
228 TH1F*
pur =
new TH1F((
"pur_"+suffix+
"_"+eff_suffix).c_str(),
229 "Purity vs Cut Value; ;Purity (%)",
230 sig->GetNbinsX(), sig->GetXaxis()->GetBinLowEdge(1),
231 sig->GetXaxis()->GetBinUpEdge(sig->GetNbinsX()));
232 TH1F* fomsob =
new TH1F((
"sob_"+suffix+
"_"+eff_suffix).c_str(),
233 "s/#sqrt{b} vs Cut Value; ;s/#sqrt{b}",
234 sig->GetNbinsX(), sig->GetXaxis()->GetBinLowEdge(1),
235 sig->GetXaxis()->GetBinUpEdge(sig->GetNbinsX()));
236 TH1F* fomsosb =
new TH1F((
"sosb_"+suffix+
"_"+eff_suffix).c_str(),
237 "s/#sqrt{s+b} vs Cut Value; ;s/#sqrt{s+b}",
238 sig->GetNbinsX(), sig->GetXaxis()->GetBinLowEdge(1),
239 sig->GetXaxis()->GetBinUpEdge(sig->GetNbinsX()));
241 eff->GetXaxis()->CenterTitle();
242 eff->GetYaxis()->CenterTitle();
243 pur->GetXaxis()->CenterTitle();
244 pur->GetYaxis()->CenterTitle();
245 fomsob->GetXaxis()->CenterTitle();
246 fomsob->GetYaxis()->CenterTitle();
247 fomsosb->GetXaxis()->CenterTitle();
248 fomsosb->GetYaxis()->CenterTitle();
250 eff->GetXaxis()->SetTitle(sig->GetXaxis()->GetTitle());
251 pur->GetXaxis()->SetTitle(sig->GetXaxis()->GetTitle());
253 fomsob->GetXaxis()->SetTitle(sig->GetXaxis()->GetTitle());
254 fomsosb->GetXaxis()->SetTitle(sig->GetXaxis()->GetTitle());
256 for(
int n = 0;
n < sig->GetNbinsX()+2; ++
n){
257 if(bkg->Integral(
n, -1) == 0)
break;
260 TGraph* effpurGraph=
new TGraph (ngpoints);
263 double bestSoSB = -1;
266 double bestBkgCC = 0;
268 double totsig = sig_denom->Integral(0, -1);
269 double fomeff, fompur;
271 for(
int n = 0;
n < sig->GetNbinsX()+2; ++
n){
272 const double nsig = sig->Integral(
n, -1);
273 const double nbkg = bkg->Integral(
n, -1);
274 const double nbkgcc = bkgCC->Integral(
n, -1);
275 const double nbkgbeam = bkgBeam->Integral(
n, -1);
279 double neff = nsig*100/(totsig);
280 double npur = nsig*100/(nsig+nbkg);
282 const double fomSoB = nsig/
sqrt(nbkg);
283 const double fomSoSB = nsig/
sqrt(nsig+nbkg);
287 pur->Fill(sig->GetXaxis()->GetBinCenter(
n), npur);
288 eff->Fill(sig->GetXaxis()->GetBinCenter(
n), neff);
289 effxpur->Fill(sig->GetXaxis()->GetBinCenter(
n), 100*(neff/100)*(npur/100));
290 effpurGraph->SetPoint(
n,neff,npur);
291 fomsob->Fill(sig->GetXaxis()->GetBinCenter(
n), fomSoB);
292 fomsosb->Fill(sig->GetXaxis()->GetBinCenter(
n), fomSoSB);
295 if((
metric == 0 && fomSoB > bestSoB) ||
296 (
metric == 1 && fomSoSB > bestSoSB) ||
297 (
metric == 2 &&
fabs(sig->GetXaxis()->GetBinLowEdge(
n) - faCut) < .01)){
304 bestCuts[
metric] = sig->GetXaxis()->GetBinLowEdge(
n);
314 std::cout << std::fixed << std::setprecision(2);
316 <<
" &\t " << bestSoB <<
" &\t " << bestSoSB
317 <<
" &\t " << bestSig <<
" &\t " << bestBkg
318 <<
" &\t " << bestBkg-bestBkgCC-bestBeam
319 <<
" &\t " << bestBkgCC <<
" &\t " << bestBeam
320 <<
" &\t " << fomeff <<
"\\% &\t " << fompur <<
"\\%\\\\"<<
std::endl;
326 Arrows(eff, bestCuts[0], bestCuts[1], faCut,
true);
327 Print(
"eff", suffix+
"_"+eff_suffix);
331 Arrows(pur, bestCuts[0], bestCuts[1], faCut,
true);
332 Print(
"pur", suffix);
336 eff->GetYaxis()->SetTitle(
"Percentage");
337 eff->SetLineColor(
kRed);
338 pur->SetLineColor(
kBlue);
339 effxpur->SetLineColor(
kGreen+2);
340 eff->SetMaximum(110);
344 effxpur->Draw(
"csame");
347 TLegend* legeffpur =
new TLegend(.125, .12, .5, .32);
348 legeffpur->AddEntry(eff,
"Cumulative Efficiency",
"l");
349 legeffpur->AddEntry(pur,
"Cumulative Purity",
"l");
350 legeffpur->AddEntry(effxpur,
"Cumulative Efficiency #times Purity",
"l");
351 legeffpur->SetFillStyle(0);
353 Print(
"effpur", suffix+
"_"+eff_suffix);
356 TH2F* hpx =
new TH2F(
"hpx",
"hpx",100,0,100,100,0,100);
357 hpx->SetStats(kFALSE);
359 hpx->GetXaxis()->SetTitle(
"Efficiency (%)");
360 hpx->GetYaxis()->SetTitle(
"Purity (%)");
361 hpx->GetXaxis()->CenterTitle();
362 hpx->GetYaxis()->CenterTitle();
364 effpurGraph->SetLineWidth(2);
365 effpurGraph->Draw(
"C");
366 Print(
"effpurgraph", suffix+
"_"+eff_suffix);
371 Arrows(fomsob, bestCuts[0], bestCuts[1], faCut,
true);
372 Print(
"fomsob", suffix);
376 Arrows(fomsosb, bestCuts[0], bestCuts[1], faCut,
true);
377 Print(
"fomsosb", suffix);
383 TH1*& hSig, TH1*& hNC, TH1*& hCC, TH1*& hBeam, TH1*&hTotBkg)
409 hTotBkg = (TH1*)hNC->Clone(
UniqueName().c_str());
420 TH1 *hSig, *hNC, *hCC, *hBeam, *hTotBkg;
421 GetSpectra(pred, calc, hSig, hNC, hCC, hBeam, hTotBkg);
425 hSig->GetYaxis()->SetTitle(
"Events / 18#times10^{20} POT");
427 hSig->GetXaxis()->CenterTitle();
428 hSig->GetYaxis()->CenterTitle();
430 if(
maxy) hSig->GetYaxis()->SetRangeUser(0,
maxy);
431 hNC->Draw(
"hist same");
432 hCC->Draw(
"hist same");
433 hBeam->Draw(
"hist same");
434 TLegend* leg2 =
new TLegend(.125, .55, .5, .85);
435 leg2->AddEntry(hCC,
"Appeared #nu_{e}",
"l");
436 leg2->AddEntry(hSig,
"Survived #nu_{#mu}",
"l");
437 leg2->AddEntry(hNC,
"NC background",
"l");
438 leg2->AddEntry(hBeam,
"Beam #nu_{e} background",
"l");
439 leg2->SetFillStyle(0);
442 static bool once =
true;
445 TVirtualPad* bak = gPad;
447 TLegend*
leg =
new TLegend(.1, .1, .9, .9);
448 leg->AddEntry(hSig,
"#nu_{#mu} signal",
"l");
449 leg->AddEntry(hNC,
"NC background",
"l");
450 leg->AddEntry(hCC,
"Appeared #nu_{e} background",
"l");
451 leg->AddEntry(hBeam,
"Beam #nu_{e} background",
"l");
453 gPad->Print(
"plots/assessPaperNuMu/eff_leg.pdf");
454 gPad->Print(
"plots/assessPaperNuMu/eff_leg.eps");
455 gPad->Print(
"plots/assessPaperNuMu/eff_leg.png");
463 for(
int i = 0;
i < h->GetNbinsX()+2; ++
i){
464 if(h->GetBinCenter(
i) > .75 &&
465 h->GetBinCenter(
i) < 3.5){
478 TH1 *hSigNum, *hNCNum, *hCCNum, *hBeamNum, *hTotBkgNum;
479 GetSpectra(predNum, calc, hSigNum, hNCNum, hCCNum, hBeamNum, hTotBkgNum);
481 TH1 *hSigDenom, *hNCDenom, *hCCDenom, *hBeamDenom, *hTotBkgDenom;
482 GetSpectra(predDenom, calc, hSigDenom, hNCDenom, hCCDenom, hBeamDenom, hTotBkgDenom);
484 hSigDenom->SetLineStyle(2);
485 hNCDenom->SetLineStyle(2);
486 hBeamDenom->SetLineStyle(2);
487 hTotBkgDenom->SetLineStyle(2);
488 hCCDenom->SetLineStyle(2);
492 if( label ==
"mode" ){
493 hNCDenom->GetXaxis()->SetLabelSize(0.06);
494 hNCDenom->GetXaxis()->SetBinLabel(1,
"QE");
495 hNCDenom->GetXaxis()->SetBinLabel(2,
"Res");
496 hNCDenom->GetXaxis()->SetBinLabel(3,
"DIS");
497 hNCDenom->GetXaxis()->SetBinLabel(4,
"Coh");
499 hSigNum->GetXaxis()->SetLabelSize(0.06);
500 hSigNum->GetXaxis()->SetBinLabel(1,
"QE");
501 hSigNum->GetXaxis()->SetBinLabel(2,
"Res");
502 hSigNum->GetXaxis()->SetBinLabel(3,
"DIS");
503 hSigNum->GetXaxis()->SetBinLabel(4,
"Coh");
507 hNCDenom->Draw(
"hist");
508 hCCDenom->Draw(
"hist same");
509 hBeamDenom->Draw(
"hist same");
510 hSigDenom->Draw(
"hist same");
511 Print(label,
id,
"nocut");
514 if(
maxy) hSigNum->GetYaxis()->SetRangeUser(0,
maxy);
516 hSigNum->GetYaxis()->CenterTitle();
517 hSigNum->Draw(
"hist");
518 hNCNum->Draw(
"hist same");
519 hBeamNum->Draw(
"hist same");
520 hCCNum->Draw(
"hist same");
521 Print(label,
id,
"cut");
526 <<
" sig: " << 100*hSigNum->Integral(0, -1)/hSigDenom->Integral(0, -1)
527 <<
" NC: " << 100*hNCNum->Integral(0, -1)/hNCDenom->Integral(0, -1)
528 <<
" CC: " << 100*hCCNum->Integral(0, -1)/hCCDenom->Integral(0, -1)
529 <<
" Beam: " << 100*hBeamNum->Integral(0, -1)/hBeamDenom->Integral(0, -1) <<
std::endl;
531 hSigNum->Divide(hSigDenom);
533 hSigNum->SetTitle(title.c_str());
534 hSigNum->GetYaxis()->SetTitle(
"Efficiency (%)");
535 hSigNum->GetYaxis()->SetRangeUser(0, 100);
537 hSigNum->GetXaxis()->CenterTitle();
538 hSigNum->GetYaxis()->CenterTitle();
539 hSigNum->Draw(
"hist");
543 hNCNum->Divide(hNCDenom);
545 hNCNum->Draw(
"hist same");
549 hCCNum->Divide(hCCDenom);
551 hCCNum->Draw(
"hist same");
555 hBeamNum->Divide(hBeamDenom);
556 hBeamNum->Scale(100);
557 hBeamNum->Draw(
"hist same");
567 if(pidIdx == -1) ret =
"No selection";
568 if(pidIdx == 0) ret =
"remID";
569 if(pidIdx == 1) ret =
"CVN#mu";
571 if(rhc) ret +=
" (RHC)";
else ret +=
" (FHC)";
581 if(pidIdx == -1) ret =
"nosel";
582 if(pidIdx == 0) ret =
"lem";
583 if(pidIdx == 1) ret =
"cvn";
585 if(rhc) ret +=
"_rhc";
else ret +=
"_fhc";
605 for(
int rhc =
false; rhc <=
true; ++rhc){
624 SpectrumLoader loader(
"/nova/ana/users/atsaris/work.files/cvn_full_chain_test_new/NEW_ERA_NEW_hadd_new/semfe_nonS_big.root");
625 SpectrumLoader loaderSwap(
"/nova/ana/users/atsaris/work.files/cvn_full_chain_test_new/NEW_ERA_NEW_hadd_new/semfe_S_big.root");
630 const int kNumPIDs = 2;
644 "Reco E (GeV)", kRecoEBinning,
661 "True Visible E (GeV)",
667 "True Visible E (GeV)",
672 "True Visible E (GeV)",
693 "Reco E (GeV)", kRecoEBinning,
697 "Reco E (GeV)", kRecoEBinning,
702 "True Visible E (GeV)", kRecoEBinning,
706 "True Visible E (GeV)", kRecoEBinning,
731 for(
int pidIdx = 0; pidIdx < kNumPIDs; ++pidIdx){
732 TH1 *hSig, *hNC, *hCC, *hBeam, *hTotBkg;
733 GetSpectra(preds[pidIdx], &calc, hSig, hNC, hCC, hBeam, hTotBkg);
736 const double faCut = 0.75;
759 double totalBckOscNuECC=backoscnueNoCut->Integral(0, -1);
760 double totalSig=sigdenomNoCut->Integral(0, -1);
761 double totalBckNuECC=backnueNoCut->Integral(0, -1);
762 double totalBckNC=backncNoCut->Integral(0, -1);
763 double totalBackground=totalBckOscNuECC+totalBckNuECC+totalBckNC;
764 double totalsob=totalSig/
sqrt(totalBackground);
765 double totalsosb=totalSig/
sqrt(totalSig+totalBackground);
766 double totalefficiency=100;
767 double totalpurity=(totalSig*100)/(totalSig+totalBackground);
769 std::cout << std::fixed << std::setprecision(2);
770 std::cout <<
" &\t " << totalsob <<
" &\t " << totalsosb
771 <<
" &\t " << totalSig <<
" &\t " << totalBackground
772 <<
" &\t " << totalBckNC
773 <<
" &\t " << totalBckOscNuECC <<
" &\t " << totalBckNuECC
774 <<
" &\t " << totalefficiency <<
"\\% &\t " << totalpurity <<
"\\%\\\\"<<
std::endl;
785 FOMPlot(hSig, hTotBkg, hCC, hBeam, sigdenomNoCut, cuts, faCut,
PIDFileTag(pidIdx, rhc),
"nocut");
790 Arrows(hSig, cuts[0], cuts[1], faCut);
const Binning kModeBinning
void PrintEffs(TH1 *h, const char *title)
const Var kMode([](const caf::SRProxy *sr){return(sr->mc.nnu==0)?-1:int(sr->mc.nu[0].mode);})
Neutrino interaction mode.
void Print(std::string prefix, std::string name, std::string suffix="")
caf::Proxy< float > trkccE
virtual void SetL(double L)=0
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
void SetTh13(const T &th13) override
virtual Spectrum PredictComponent(osc::IOscCalc *calc, Flavors::Flavors_t flav, Current::Current_t curr, Sign::Sign_t sign) const =0
fvar< T > fabs(const fvar< T > &x)
void SetL(double L) override
TH1D * ToTH1(double exposure, Color_t col=kBlack, Style_t style=kSolid, EExposureType expotype=kPOT, EBinType bintype=kBinContent) const
Histogram made from this Spectrum, scaled to some exposure.
virtual void SetDmsq21(const T &dmsq21)=0
caf::Proxy< caf::SRContain > contain
caf::Proxy< caf::SRNumuEnergy > numu
Proxy for caf::StandardRecord.
const Cut kNumuFAFDContainLight( [](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return(( (sr->mc.nu[0].E< 5 &&(sr->mc.nu[0].iscc==1 &&abs(sr->mc.nu[0].pdg)==14))|| (sr->mc.nu[0].iscc==0)|| (abs(sr->mc.nu[0].pdg)!=14) )&&( ((sr->sel.contain.missE/sr->mc.nu[0].E)< 0.01 &&(sr->mc.nu[0].iscc==1 &&abs(sr->mc.nu[0].pdg)==14))|| (sr->mc.nu[0].iscc==0)|| (abs(sr->mc.nu[0].pdg)!=14) )&&sr->mc.nnu >0 && sr->energy.numu.trkccE< 5 );})
General interface to oscillation calculators.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
const Var kTrueEVis([](const caf::SRProxy *sr){if(sr->mc.nu.empty()) return 0.;double ret=sr->mc.nu[0].E;if(!sr->mc.nu[0].iscc) ret *=sr->mc.nu[0].y;return ret;})
virtual void SetTh13(const T &th13)=0
const Cut kNumuCosmicRej([](const caf::SRProxy *sr){return(sr->sel.cosrej.anglekal > 0.5 &&
sr->sel.cosrej.numucontpid2019 > 0.535 && sr->slc.nhit< 400);})
const Cut kNumuContainFD([](const caf::SRProxy *sr){ std::pair< int, int > planes=calcFirstLastLivePlane(sr->slc.firstplane, std::bitset< 14 >(sr->hdr.dibmask));int planestofront=sr->slc.firstplane-planes.first;int planestoback=planes.second-sr->slc.lastplane;return( sr->slc.ncellsfromedge > 1 &&planestofront > 1 &&planestoback > 1 &&sr->sel.contain.kalfwdcell > 10 &&sr->sel.contain.kalbakcell > 10 &&sr->sel.contain.cosfwdcell > 0 &&sr->sel.contain.cosbakcell > 0);})
caf::Proxy< short int > nnu
caf::Proxy< caf::SREnergyBranch > energy
const Color_t kNumuBackgroundColor
const Var kY([](const caf::SRProxy *sr){float tmp=0.f;if(sr->mc.nu.empty()) return tmp;tmp=sr->mc.nu[0].y;return tmp;})
virtual void SetDmsq32(const T &dmsq32)=0
const Color_t kNueSignalColor
Charged-current interactions.
caf::Proxy< unsigned int > nhit
void nue_pid_effs_paper_numu_neweff()
caf::Proxy< caf::SRTrackBranch > trk
const Var kCaloE
Summed calorimetric energy of all hits in slice, uncorrected.
const Color_t kBeamNueBackgroundColor
Optimized version of OscCalcPMNS.
const Cut kNumuFAFDContain( [](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return( ( (sr->mc.nu[0].E< 5 &&(sr->mc.nu[0].iscc==1 &&abs(sr->mc.nu[0].pdg)==14))|| (sr->mc.nu[0].iscc==0)|| (abs(sr->mc.nu[0].pdg)!=14) )&& ( ((sr->sel.contain.missE/sr->mc.nu[0].E)< 0.01 &&(sr->mc.nu[0].iscc==1 &&abs(sr->mc.nu[0].pdg)==14))|| (sr->mc.nu[0].iscc==0)|| (abs(sr->mc.nu[0].pdg)!=14) )&& sr->slc.nhit >=20 && sr->sel.remid.pid >0 && sr->trk.cosmic.ntracks >0 && sr->mc.nnu >0 && sr->energy.numu.trkccE< 5 && sr->sel.contain.numucontain );})
void Arrows(TH1 *sigId, double bestCutSoB, double bestCutSoSB, double faCut, bool noarrow=false)
virtual void Go() override
Load all the registered spectra.
void SetTh23(const T &th23) override
caf::Proxy< caf::SRRemid > remid
void SetDmsq21(const T &dmsq21) override
caf::Proxy< float > missE
void SetDmsq32(const T &dmsq32) override
caf::Proxy< caf::SRTruthBranch > mc
void FOMPlot(TH1 *sig, TH1 *bkg, TH1 *bkgCC, TH1 *bkgBeam, TH1 *sig_denom, double *bestCuts, double faCut, std::string suffix, std::string eff_suffix)
virtual void SetRho(double rho)=0
caf::Proxy< caf::SRSlice > slc
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
std::string PIDFileTag(int pidIdx, bool rhc)
void SetdCP(const T &dCP) override
virtual void SetTh23(const T &th23)=0
caf::Proxy< caf::SRTrackBase > cosmic
void SetTh12(const T &th12) override
void resetCalc(osc::IOscCalcAdjustable *calc)
Neutral-current interactions.
assert(nhit_max >=nhit_nbins)
Both neutrinos and antineutrinos.
std::string PIDLongName(int pidIdx, bool rhc)
Standard interface to all prediction techniques.
const Color_t kTotalMCColor
caf::Proxy< caf::SRIDBranch > sel
const Binning kRecoEBinning
All neutrinos, any flavor.
void PlotSpectra(Spectrum spectra[], TDirectory *rootOut, FILE *textOFS, std::string name, std::string title, std::string det, int POT, std::string option)
const Color_t kNCBackgroundColor
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
caf::Proxy< bool > numucontain
void PlotEffs(IPrediction *predNum, IPrediction *predDenom, osc::IOscCalc *calc, std::string title, std::string label, std::string id, double maxy=0)
std::string UniqueName()
Return a different string each time, for creating histograms.
void GetSpectra(IPrediction *pred, osc::IOscCalc *calc, TH1 *&hSig, TH1 *&hNC, TH1 *&hCC, TH1 *&hBeam, TH1 *&hTotBkg)
const Cut kNoCut
The simplest possible cut: pass everything, used as a default.
caf::Proxy< size_t > ntracks
virtual void SetTh12(const T &th12)=0
virtual void SetdCP(const T &dCP)=0
void SetRho(double rho) override