3 #include "CAFAna/Core/Binning.h" 29 std::string fname =
"$NUMUDATA_LIB_PATH/ana2020/Quantiles/quantiles_" + beam +
"_full_numu2020.root";
31 TFile*
inFile = TFile::Open( fname.c_str() );
32 TH2* quant_hist = (TH2*)inFile->FindObjectAny(
"FDSpec2D" );
33 quant_hist->SetDirectory(0);
57 if ( ehad_quant < 1 || ehad_quant > 4 )
69 std::string fname =
"$NUMUDATA_LIB_PATH/ana2020/Quantiles/pt_quantile_hists_2020_nd_" + beam +
".root";
71 TFile*
inFile = TFile::Open( fname.c_str() );
72 if ( inFile->IsZombie() )
78 TH2D* quant_hist = (TH2D*)inFile->Get( Form(
"RecoPt_vs_RecoEv_NumuBins_Q%d", ehad_quant ) );
79 quant_hist->SetDirectory(0);
83 std::cout << Form(
"\nReturning Numu Pt quant cuts for %d quantiles in EhadFrac quantile %d\n", nquants, ehad_quant ) <<
std::endl;
104 histName =
"RecoPt_vs_RecoEv_NueBins";
109 histName =
"RecoThMu_vs_RecoEv_NueBins";
118 std::string fname =
"$NUMUDATA_LIB_PATH/ana2020/Quantiles/pt_quantile_hists_2020_nd_" + beam +
".root";
120 TFile*
inFile = TFile::Open( fname.c_str() );
121 if ( inFile->IsZombie() )
128 TH2D* quant_hist = (TH2D*)inFile->Get( histName.c_str() );
129 quant_hist->SetDirectory(0);
133 std::vector<Cut> quant_cuts;
137 std::cout << Form(
"\nReturning cuts for %d ND Nue %s quantiles\n", nquants, varName.c_str() ) << std::endl;
143 std::cout << Form(
"\nReturning cuts for %d FD Nue %s quantiles\n", nquants, varName.c_str() ) << std::endl;
Near Detector underground.
Det_t
Which NOvA detector?
Far Detector at Ash River.
Cuts and Vars for the 2020 FD DiF Study.
const Var kNumuMuonPt([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999){double pmu=sqrt(util::sqr(kMuE(sr))-util::sqr(0.1056));double Zbeam=kCosNumi(sr);double pt=pmu *sqrt(1-Zbeam *Zbeam);return(float) pt;}return-5.f;})
const HistAxis kAxisNueBinsNumuEv("Reco E_{#nu} (GeV)", Binning::Simple(10, 0., 5.), kNumuE2020)
const HistAxis kNumuCCOptimisedAxis2020("Reconstructed Neutrino Energy (GeV)", kNumuCCEOptimisedBinning, kNumuE2020)
std::vector< Cut > GetNumuPtQuantCuts2020(const bool isRHC, const unsigned int ehad_quant, const unsigned int nquants)
const HistAxis kAxisNuePt("Reco Elecron #left|#vec{p}_{t}#right| (GeV)", Binning::Simple(100, 0., 5.), kNueElectronPt2020)
const HistAxis kHadEFracAxis2020("E_{had.} / E_{#nu}", Binning::Simple(200, 0, 1), kNumuHadEFrac2020)
const Var kFirstProngTheta([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1000.f;if(sr->vtx.elastic.fuzzyk.npng< 1) return-1000.f;float ct=kFirstProngCosTheta(sr);if(fabs(ct) > 1) return-1000.f;return float(acos(ct)*180.0/3.1416);})
std::vector< Cut > GetNueQuantCuts2020(const bool isRHC, const caf::Det_t det, const unsigned int nquants, const ExtrapVar var)
const HistAxis kAxisNumuPt("Reco Muon #left|#vec{p}_{t}#right| (GeV)", Binning::Simple(100, 0., 5.), kNumuMuonPt)
const HistAxis kAxisNueBinsNueEv("Reco E_{#nu} (GeV)", Binning::Simple(10, 0., 5.), kNueEnergy2020)
const Var kNueEnergy2020([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1.0;if(sr->vtx.elastic.fuzzyk.npng< 1) return-1.0;if(kIsRHC(sr)) return kNueEnergyRHC2020(sr);else return kNueEnergyFHC2020(sr);})
Nue energy with 3d prong info. only (old version of vars)
Collect information describing the x-axis of an analysis histogram.
const Var kNueElectronPt2020([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1000.f;if(sr->vtx.elastic.fuzzyk.npng< 1) return-1000.f;TVector3 elecDir=(TVector3) sr->vtx.elastic.fuzzyk.png[0].dir;TVector3 beamDir=ana::NuMIBeamDirection(sr->hdr.det);float ct=elecDir.Dot(beamDir);float p=kNueElectronE2020(sr);if(p< 0||fabs(ct) > 1) return-1000.f;return float(p *sin(acos(ct)));})
const Var kRecoThetaMu([](const caf::SRProxy *sr){return acos(kCosNumi(sr))*180.0/3.1416;})
std::vector< Cut > QuantileCutsFromTH2(TH2 *quantileHist, const HistAxis &independentAxis, const HistAxis &quantileAxis, const unsigned int &numQuantiles, const bool verbose)
: Do the same as the QuantileCuts function but taking in the TH2 instead of making it...
const HistAxis kAxisNueTheta("Reco #theta_{e} (deg)", Binning::Simple(180, 0., 180.), kFirstProngTheta)
const HistAxis kAxisNumuTheta("Reco #theta_{#mu} (deg)", Binning::Simple(180, 0., 180.), kRecoThetaMu)
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
std::vector< Cut > GetNumuEhadFracQuantCuts2020(const bool isRHC, const unsigned int nquants)