6 #include "CAFAna/Core/Binning.h" 41 TLatex*
prelim =
new TLatex(.9, .95,
"NO#nuA Preliminary");
42 prelim->SetTextColor(
kBlue);
44 prelim->SetTextSize(2/30.);
45 prelim->SetTextAlign(32);
76 fHist(loader, fAxis.
fObj, fSelA.
fObj, shift, wei),
89 std::cout <<
"\nrun : ---- Running CAF NuMU ND Validation.\n";
98 TH1D* spillHist =
new TH1D(
"reco-spills",
";Detector;Spills", 3, 0, 3);
107 std::vector<Selection> selections_base;
113 selections_base.emplace_back(
kNumuFD,
"numuFD_remid",
114 "Selected events pass the (remid) numu FD selection");
115 selections_base.emplace_back(kNumuFD_cvn,
"numuFD_cvn",
116 "Selected events pass the (cvn) numu FD selection");
119 selections_base.emplace_back(
kNumuND,
"numuND_remid",
120 "Selected events pass the (remid) numu ND selection");
121 selections_base.emplace_back(kNumuND_cvn,
"numuND_cvn",
122 "Selected events pass the (cvn) numu ND selection");
130 return (sr ->
energy.numu.recomuonE);
141 std::vector<TangibleAxis> variables;
143 "CC energy estimator (GeV) ");
144 variables.emplace_back(
HistAxis(
"Muon energy (GeV)", kEnergyBinning,
kRecoMuE),
145 "muE",
"Muon energy (GeV)");
147 "slcNHit",
"Number of hits in slice. " );
148 variables.emplace_back(
HistAxis(
"Slice Calorimetric Energy (GeV)", kEnergyBinning,
kCaloE),
149 "calE",
"Calorimetric energy of slice. " );
150 variables.emplace_back(
HistAxis(
"Hadronic Energy (GeV)", kHadronicEnergyBinning,
kHadE),
152 "Hadronic enery, i.e. numu energy estimate minus muon track energy. " );
153 variables.emplace_back(
HistAxis(
"Average Hadronic Energy Per Hit (GeV)",
156 "Average energy per hit in hadronic cluster, i.e. had_E/had_n_hit. " );
160 "Average energy per hit on primary track, i.e. trk_E/trk_n_hit. " );
162 "hadNHit",
"Number of hits in hadronic cluster. ");
163 variables.emplace_back(
HistAxis(
"Calorimetric Hadronic Energy (GeV)",
165 "hadcalE",
"Sum of calibrated energy deposits in hadronic cluster. " );
169 "nkal",
"Number of tracks in slice. " );
171 "nhit",
"Number of hits in slice. " );
173 "dirZ",
"Z-direction of muon track. " );
175 "sliceDuration",
"Slice duration. " );
177 "trkNhits",
"Number of hits on primary track. ");
179 "trkLength",
"Primary track length. " );
181 "scatLL",
"ReMId scattering log log-likelihood for primary track. " );
183 "dedxLL",
"ReMId dE/dx log log-likelihood for primary track. " );
184 variables.emplace_back(
HistAxis(
"Non-hadronic Plane Fraction",
186 "nonHadPlaneFrac",
"ReMId Non-hadronic plane fraction. " );
188 "remid",
"ReMId kNN score. " );
193 "trkStartX",
"Track start x position. " );
195 "trkStartY",
"Track start y position. " );
197 "trkStartZ",
"Track start z position. " );
198 variables.emplace_back(
HistAxis(
"Track End X Position (m)", kXYBins,
kTrkEndX),
199 "trkEndX",
"Track stop x position. " );
200 variables.emplace_back(
HistAxis(
"Track End Y Position (m)", kXYBins,
kTrkEndY),
201 "trkEndY",
"Track stop y position. " );
202 variables.emplace_back(
HistAxis(
"Track End Z Position (m)", kZBins,
kTrkEndZ),
203 "trkEndZ",
"Track stop z position. " );
206 variables.emplace_back(
HistAxis(
"Track Start X Position (m)", kFDXYBins,
kTrkStartX),
207 "trkStartX",
"Track start x position. " );
208 variables.emplace_back(
HistAxis(
"Track Start Y Position (m)", kFDXYBins,
kTrkStartY),
209 "trkStartY",
"Track start y position. " );
211 "trkStartZ",
"Track start z position. " );
212 variables.emplace_back(
HistAxis(
"Track End X Position (m)", kFDXYBins,
kTrkEndX),
213 "trkEndX",
"Track stop x position. " );
214 variables.emplace_back(
HistAxis(
"Track End Y Position (m)", kFDXYBins,
kTrkEndY),
215 "trkEndY",
"Track stop y position. " );
216 variables.emplace_back(
HistAxis(
"Track End Z Position (m)", kFDZBins,
kTrkEndZ),
217 "trkEndZ",
"Track stop z position. " );
222 std::vector<UsefulHist>
hists;
223 hists.reserve(selections_base.size() * variables.size());
225 for(
const auto& sel_base:selections_base){
226 for(
const auto& variable:variables){
227 hists.emplace_back(sel_base, variable, loader);
232 std::cout <<
"\nrun : --- run loader.\n";
235 double pot = hists[0].fHist.POT();
237 std::cout <<
"\nrun : --- save output.\n";
238 TFile inputfile(kInputFileName.c_str(),
"READ");
239 TFile outputfile(kOutputFileName.c_str(),
"RECREATE");
241 for(
const auto&
hist:hists){
244 temp->Write(tempName.c_str());
249 TH1F *pothist =
new TH1F(
"meta-TotalPOT",
"TotalPOT", 1, 0, 1);
250 TH1F *evthist =
new TH1F(
"meta-TotalEvents",
"TotalEvents", 1, 0, 1);
251 pothist->SetBinContent(1, pot);
252 evthist->SetBinContent(1, spillHist->GetEntries());
253 pothist->Write(
"meta-TotalPOT");
254 evthist->Write(
"meta-TotalEvents");
256 std::cout <<
"\nrun : --- close output files.\n";
const Var kHadNHit([](const caf::SRProxy *sr){unsigned int nought=0;if(sr->trk.kalman.ntracks< 1) return nought;return sr->slc.nhit-sr->trk.kalman.tracks[0].nhit;})
_HistAxis< Var > HistAxis
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
const Binning kRemidBinning
Binning for plotting remid attractively.
Simple record of shifts applied to systematic parameters.
Proxy for caf::StandardRecord.
const Cut kCVNmSel([](const caf::SRProxy *sr){return(sr->sel.cvn.numuid >0.5);})
const Var kTrkStartY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.Y()/100;})
Tangible< Cut > Selection
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 Var kSliceDuration([](const caf::SRProxy *sr){return(sr->slc.endtime-sr->slc.starttime);})
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);})
void SetSpillCut(const SpillCut &cut)
Det_t det
Detector, ND = 1, FD = 2, NDOS = 3.
const Var kDirZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].dir.Z();})
const Var kTrkLength([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].len/100;})
const Var kHadEPerNHit([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.0f;int nHit=sr->slc.nhit-sr->trk.kalman.tracks[0].nhit;if(nHit<=0) return 0.0f;float hadE=sr->energy.numu.hadcalE;return hadE/nHit;})
const Cut kNumuContainND([](const caf::SRProxy *sr){return( sr->trk.kalman.ntracks > sr->trk.kalman.idxremid &&sr->slc.ncellsfromedge > 1 &&sr->slc.firstplane > 1
&&sr->slc.lastplane< 212 &&sr->trk.kalman.tracks[0].start.Z()< 1150
&&( sr->trk.kalman.tracks[0].stop.Z()< 1275 ||sr->sel.contain.kalyposattrans< 55) &&( sr->energy.numu.ndhadcalcatE +sr->energy.numu.ndhadcaltranE)< 0.03
&&sr->sel.contain.kalfwdcellnd > 4 &&sr->sel.contain.kalbakcellnd > 8);})
Representation of a spectrum in any variable, with associated POT.
const HistAxis kNumuCCAxis("Reconstructed Neutrino Energy (GeV)", kNumuEnergyBinning, kCCE)
virtual void AddSpillHistogram(TH1 *h, const SpillVar &var, const SpillCut &cut, const SpillVar &wei=kSpillUnweighted)
Uses include counting the total POT or spills in a run.
const Var kCaloE
Summed calorimetric energy of all hits in slice, uncorrected.
Tangible(const T &obj, const std::string &shortName, const std::string &blurb)
const Binning kHadronicEnergyBinning
const Var kTrkStartZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.Z()/100;})
Tangible< HistAxis > TangibleAxis
const Binning kEnergyBinning
virtual void Go() override
Load all the registered spectra.
const Var kTrkStartX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.X()/100;})
const SystShifts kNoShift
const Var kTrkEndZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.Z()/100;})
UsefulHist(Selection selA, TangibleAxis tanAxis, SpectrumLoader &loader, const Cut &bkg=kNoCut, const SystShifts &shift=kNoShift, const Var &wei=kTuftsWeightCC)
void numu_validation_numuvars(std::string kInputFileName, std::string kOutputFileName, bool isFD)
const Var kTrkEndY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.Y()/100;})
const Var kTrkEndX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.X()/100;})
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
string shortName
THUMBNAIL BLOCK: We need to make a thumbnail for each.
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
const Cut kNoCut
The simplest possible cut: pass everything, used as a default.
const Var kTrkNhits([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 65535;return int(sr->trk.kalman.tracks[0].nhit);})