6 #include "CAFAna/Core/Binning.h" 9 #include "CAFAna/nus/NuSPlotFunctions.h" 26 <<
"A Detector;\n\t1 For ND.\n\t2 for FD. \n" 27 <<
"An input samweb definition. \n" 28 <<
"An output file name. \n" 33 std::string InputDef=
"/pnfs/nova/persistent/users/bzamoran/CheckEvents/fd_data.root",
34 unsigned int NumCuts=1,
bool Debug=
false )
47 if ( WhichDetector == 1 ) {
49 }
else if (WhichDetector == 2) {
58 CosWeight = kTimingSidebandWeight;
62 std::vector<Cut> kDefinedCut;
67 kDefinedCut.push_back( TimingCut &&
kNumuQuality && kDetCut );
68 kDefinedCut.push_back( TimingCut &&
kNumuQuality && kDetCut );
71 CutNames[0] =
"_QualCuts";
72 CutNames[1] =
"_DetCuts" ;
73 CutNames[2] =
"_CosmCuts";
74 CutNames[3] =
"_NeuCCuts";
76 if ( WhichDetector == 2 ) {
81 else if (NumCuts == 1) {
85 CutNames[0] =
"_NeuCCuts";
87 if ( WhichDetector == 2 ) {
94 if (InputDef.find(
"period1") ) WhichPeriod =
"period1";
95 else if (InputDef.find(
"period2") ) WhichPeriod =
"period2";
96 else if (InputDef.find(
"period3") ) WhichPeriod =
"period3";
97 else if (InputDef.find(
"period5") ) WhichPeriod =
"period5";
98 TString fdspecfile =
"/nova/app/users/karlwarb/Workspace/NuMuSystematics/FDQuantileHists/final_"+WhichPeriod+
"_FD_histo_for_quantile_cuts.root";
100 gDirectory->cd(
"dir_FDSpec2D");
101 TH2 *FDSpec2D = (TH2*)inFile.FindObjectAny(
"FDSpec2D");
106 const unsigned int NumQuants = 5;
107 Cut kQuantCut[NumQuants] = {
kNoCut, HadEFracQuantCuts[0], HadEFracQuantCuts[1], HadEFracQuantCuts[2], HadEFracQuantCuts[3] };
117 std::cout <<
"Before I declare anything, the following is set;\n" 118 <<
"\tWhichDetector is " << WhichDetector <<
"\n" 119 <<
"\tInput definit is " << InputDef <<
"\n" 120 <<
"\tOutput file name " << OutputName <<
"\n" 121 <<
"\tRunning sideband " << Cosmics <<
"\n" 122 <<
"\tNumber of Cuts " << NumCuts <<
"\n" 123 <<
"\tIs debug mode is " << Debug <<
"\n" 128 Spectrum *sReconstEnergy[NumCuts][NumQuants];
129 Spectrum *sSliceTimeFull[NumCuts][NumQuants];
130 Spectrum *sSliceTimeZoom[NumCuts][NumQuants];
131 Spectrum *sMuonEnergy [NumCuts][NumQuants];
132 Spectrum *sMuonEnPerHit [NumCuts][NumQuants];
133 Spectrum *sHadronEnergy [NumCuts][NumQuants];
134 Spectrum *sHadroEnPerHit[NumCuts][NumQuants];
135 Spectrum *sHadFracEnergy[NumCuts][NumQuants];
136 Spectrum *sHitsPerSlice [NumCuts][NumQuants];
137 Spectrum *sRemIDScore [NumCuts][NumQuants];
138 Spectrum *sCVNCosmicScor[NumCuts][NumQuants];
139 Spectrum *sCVNNuMuIDScor[NumCuts][NumQuants];
140 Spectrum *sNuMuContPID [NumCuts][NumQuants];
141 Spectrum *sSANuMuContPID[NumCuts][NumQuants];
143 Spectrum *sTrueNuEnergy [NumCuts][NumQuants];
144 Spectrum *sReTrOverTrNuE[NumCuts][NumQuants];
147 Spectrum *sTrkStartX[NumCuts][NumQuants];
148 Spectrum *sTrkStartY[NumCuts][NumQuants];
149 Spectrum *sTrkStartZ[NumCuts][NumQuants];
150 Spectrum *sTrkEndX [NumCuts][NumQuants];
151 Spectrum *sTrkEndY [NumCuts][NumQuants];
152 Spectrum *sTrkEndZ [NumCuts][NumQuants];
153 Spectrum *sTrkLenXY [NumCuts][NumQuants];
156 Spectrum *sNumKalTracks [NumCuts][NumQuants];
157 Spectrum *sNumKalTrHits [NumCuts][NumQuants];
158 Spectrum *sRatKalHitSlc [NumCuts][NumQuants];
159 Spectrum *sKalTrLength [NumCuts][NumQuants];
160 Spectrum *sKalTrBeamAng [NumCuts][NumQuants];
161 Spectrum *sKalMostFwdCel[NumCuts][NumQuants];
162 Spectrum *sKalMostBakCel[NumCuts][NumQuants];
163 Spectrum *sKalTrVer_MaxY[NumCuts][NumQuants];
164 Spectrum *sKalTrVer_MaxZ[NumCuts][NumQuants];
165 Spectrum *sKalTrDir_Y [NumCuts][NumQuants];
166 Spectrum *sScattKalTrLen[NumCuts][NumQuants];
169 Spectrum *sFirstHitCell [NumCuts][NumQuants];
170 Spectrum *sLastHitCell [NumCuts][NumQuants];
171 Spectrum *sMaxActivity_Y[NumCuts][NumQuants];
172 Spectrum *sMinActivity_Y[NumCuts][NumQuants];
173 Spectrum *sMaxActivity_Z[NumCuts][NumQuants];
174 Spectrum *sMinActivity_Z[NumCuts][NumQuants];
175 Spectrum *sMinCellToEdge[NumCuts][NumQuants];
179 Spectrum *sVisEInSlice [NumCuts][NumQuants];
180 Spectrum *sNHitInSlice [NumCuts][NumQuants];
181 Spectrum *sVisEPerHitSlc[NumCuts][NumQuants];
183 Spectrum *sVisEInTrack [NumCuts][NumQuants];
184 Spectrum *sNHitInTrack [NumCuts][NumQuants];
185 Spectrum *sVisEPerHitTrk[NumCuts][NumQuants];
187 Spectrum *sVisEInHadron [NumCuts][NumQuants];
188 Spectrum *sNHitInHadron [NumCuts][NumQuants];
189 Spectrum *sVisEPerHitHad[NumCuts][NumQuants];
192 Spectrum *sRemIDScatLLH [NumCuts][NumQuants];
193 Spectrum *sRemIDdEdxLLH [NumCuts][NumQuants];
194 Spectrum *sRemIDMeasFrac[NumCuts][NumQuants];
197 Spectrum *sCor_RecEn[NumCuts][NumQuants][4];
198 Spectrum *sCor_MuoEn[NumCuts][NumQuants][4];
199 Spectrum *sCor_HadEn[NumCuts][NumQuants][4];
200 Spectrum *sCor_HFrEn[NumCuts][NumQuants][4];
203 const std::string CutName[4] = {
"_TopL",
"_TopR",
"_BotL",
"_BotR" };
206 for (
unsigned int cc=0;
cc<NumCuts; ++
cc) {
208 for (
unsigned int qq=0; qq<NumQuants; ++qq) {
282 for (
int cor=0; cor<4; ++cor) {
283 const Cut kCorCut = kThisCut && kCorner[cor];
296 TFile *
outFile =
new TFile(OutputName.c_str(),
"RECREATE");
300 for (
unsigned int cc=0;
cc<NumCuts; ++
cc) {
302 for (
unsigned int qq=0; qq<NumQuants; ++qq) {
305 sReconstEnergy[
cc][qq] ->
SaveTo( outFile, TString(
"sReconstEnergy")+TString(MyAppend) ) ;
306 sSliceTimeFull[
cc][qq] ->
SaveTo( outFile, TString(
"sSliceTimeFull")+TString(MyAppend) ) ;
307 sSliceTimeZoom[
cc][qq] ->
SaveTo( outFile, TString(
"sSliceTimeZoom")+TString(MyAppend) ) ;
308 sMuonEnergy [
cc][qq] ->
SaveTo( outFile, TString(
"sMuonEnergy") +TString(MyAppend) ) ;
309 sMuonEnPerHit [
cc][qq] ->
SaveTo( outFile, TString(
"sMuonEnPerHit") +TString(MyAppend) ) ;
310 sHadronEnergy [
cc][qq] ->
SaveTo( outFile, TString(
"sHadronEnergy") +TString(MyAppend) ) ;
311 sHadroEnPerHit[
cc][qq] ->
SaveTo( outFile, TString(
"sHadroEnPerHit")+TString(MyAppend) ) ;
312 sHadFracEnergy[
cc][qq] ->
SaveTo( outFile, TString(
"sHadFracEnergy")+TString(MyAppend) ) ;
313 sHitsPerSlice [
cc][qq] ->
SaveTo( outFile, TString(
"sHitsPerSlice") +TString(MyAppend) ) ;
314 sRemIDScore [
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDScore") +TString(MyAppend) ) ;
315 sCVNCosmicScor[
cc][qq] ->
SaveTo( outFile, TString(
"sCVNCosmicScor")+TString(MyAppend) ) ;
316 sCVNNuMuIDScor[
cc][qq] ->
SaveTo( outFile, TString(
"sCVNNuMuIDScor")+TString(MyAppend) ) ;
317 sNuMuContPID [
cc][qq] ->
SaveTo( outFile, TString(
"sNuMuContPID") +TString(MyAppend) ) ;
318 sSANuMuContPID[
cc][qq] ->
SaveTo( outFile, TString(
"sSANuMuContPID")+TString(MyAppend) ) ;
320 sTrueNuEnergy [
cc][qq] ->
SaveTo( outFile, TString(
"sTrueNuEnergy") +TString(MyAppend) ) ;
321 sReTrOverTrNuE[
cc][qq] ->
SaveTo( outFile, TString(
"sReTrOverTrNuE")+TString(MyAppend) ) ;
324 sTrkStartX[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkStartX")+TString(MyAppend) ) ;
325 sTrkStartY[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkStartY")+TString(MyAppend) ) ;
326 sTrkStartZ[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkStartZ")+TString(MyAppend) ) ;
327 sTrkEndX [
cc][qq] ->
SaveTo( outFile, TString(
"sTrkEndX") +TString(MyAppend) ) ;
328 sTrkEndY [
cc][qq] ->
SaveTo( outFile, TString(
"sTrkEndY") +TString(MyAppend) ) ;
329 sTrkEndZ [
cc][qq] ->
SaveTo( outFile, TString(
"sTrkEndZ") +TString(MyAppend) ) ;
330 sTrkLenXY [
cc][qq] ->
SaveTo( outFile, TString(
"sTrkLenXY") +TString(MyAppend) ) ;
333 sNumKalTracks [
cc][qq] ->
SaveTo( outFile, TString(
"sNumKalTracks") +TString(MyAppend) ) ;
334 sNumKalTrHits [
cc][qq] ->
SaveTo( outFile, TString(
"sNumKalTrHits") +TString(MyAppend) ) ;
335 sRatKalHitSlc [
cc][qq] ->
SaveTo( outFile, TString(
"sRatKalHitSlc") +TString(MyAppend) ) ;
336 sKalTrLength [
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrLength") +TString(MyAppend) ) ;
337 sKalTrBeamAng [
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrBeamAng") +TString(MyAppend) ) ;
338 sKalMostFwdCel[
cc][qq] ->
SaveTo( outFile, TString(
"sKalMostFwdCel")+TString(MyAppend) ) ;
339 sKalMostBakCel[
cc][qq] ->
SaveTo( outFile, TString(
"sKalMostBakCel")+TString(MyAppend) ) ;
340 sKalTrVer_MaxY[
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrVer_MaxY")+TString(MyAppend) ) ;
341 sKalTrVer_MaxZ[
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrVer_MaxZ")+TString(MyAppend) ) ;
342 sKalTrDir_Y [
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrDir_Y") +TString(MyAppend) ) ;
343 sScattKalTrLen[
cc][qq] ->
SaveTo( outFile, TString(
"sScattKalTrLen")+TString(MyAppend) ) ;
346 sFirstHitCell [
cc][qq] ->
SaveTo( outFile, TString(
"sFirstHitCell") +TString(MyAppend) ) ;
347 sLastHitCell [
cc][qq] ->
SaveTo( outFile, TString(
"sLastHitCell") +TString(MyAppend) ) ;
348 sMaxActivity_Y[
cc][qq] ->
SaveTo( outFile, TString(
"sMaxActivity_Y")+TString(MyAppend) ) ;
349 sMinActivity_Y[
cc][qq] ->
SaveTo( outFile, TString(
"sMinActivity_Y")+TString(MyAppend) ) ;
350 sMaxActivity_Z[
cc][qq] ->
SaveTo( outFile, TString(
"sMaxActivity_Z")+TString(MyAppend) ) ;
351 sMinActivity_Z[
cc][qq] ->
SaveTo( outFile, TString(
"sMinActivity_Z")+TString(MyAppend) ) ;
352 sMinCellToEdge[
cc][qq] ->
SaveTo( outFile, TString(
"sMinCellToEdge")+TString(MyAppend) ) ;
356 sVisEInSlice [
cc][qq] ->
SaveTo( outFile, TString(
"sVisEInSlice") +TString(MyAppend) ) ;
357 sNHitInSlice [
cc][qq] ->
SaveTo( outFile, TString(
"sNHitInSlice") +TString(MyAppend) ) ;
358 sVisEPerHitSlc[
cc][qq] ->
SaveTo( outFile, TString(
"sVisEPerHitSlc")+TString(MyAppend) ) ;
360 sVisEInTrack [
cc][qq] ->
SaveTo( outFile, TString(
"sVisEInTrack") +TString(MyAppend) ) ;
361 sNHitInTrack [
cc][qq] ->
SaveTo( outFile, TString(
"sNHitInTrack") +TString(MyAppend) ) ;
362 sVisEPerHitTrk[
cc][qq] ->
SaveTo( outFile, TString(
"sVisEPerHitTrk")+TString(MyAppend) ) ;
364 sVisEInHadron [
cc][qq] ->
SaveTo( outFile, TString(
"sVisEInHadron") +TString(MyAppend) ) ;
365 sNHitInHadron [
cc][qq] ->
SaveTo( outFile, TString(
"sNHitInHadron") +TString(MyAppend) ) ;
366 sVisEPerHitHad[
cc][qq] ->
SaveTo( outFile, TString(
"sVisEPerHitHad")+TString(MyAppend) ) ;
369 sRemIDScatLLH [
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDScatLLH") +TString(MyAppend) ) ;
370 sRemIDdEdxLLH [
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDdEdxLLH") +TString(MyAppend) ) ;
371 sRemIDMeasFrac[
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDMeasFrac")+TString(MyAppend) ) ;
374 for (
int cor=0; cor<4; ++cor) {
375 sCor_RecEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_RecEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
376 sCor_MuoEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_MuoEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
377 sCor_HadEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_HadEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
378 sCor_HFrEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_HFrEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
381 std::cerr <<
"\tWritten quantile set " << qq <<
" for cut set " <<
cc <<
" to disk!!!" <<
std::endl;
Cuts and Vars for the 2020 FD DiF Study.
const Var kEnPHHad([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)(sr->slc.calE-sr->trk.kalman.tracks[0].calE)/(float)(1.78 *(sr->slc.nhit-sr->trk.kalman.tracks[0].nhit));})
const Var kMaxKalYPos([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return std::max(sr->trk.kalman.tracks[0].start.Y()/100, sr->trk.kalman.tracks[0].stop.Y()/100);})
const Var kVisESlc([](const caf::SRProxy *sr){return sr->slc.calE;})
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
const Var kNHitSlc([](const caf::SRProxy *sr){return sr->slc.nhit;})
const Var kSlcMaxZ([](const caf::SRProxy *sr){return sr->slc.boxmax.Z()/100.;})
const Var kSlcMaxY([](const caf::SRProxy *sr){return sr->slc.boxmax.Y()/100.;})
const Cut kNumuContainND2017([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;++i){TVector3 start=sr->vtx.elastic.fuzzyk.png[i].shwlid.start;TVector3 stop=sr->vtx.elastic.fuzzyk.png[i].shwlid.stop;if(std::min(start.X(), stop.X())< -180.0) return false;if(std::max(start.X(), stop.X()) > 180.0) return false;if(std::min(start.Y(), stop.Y())< -180.0) return false;if(std::max(start.Y(), stop.Y()) > 180.0) return false;if(std::min(start.Z(), stop.Z())< 20.0) return false;if(std::max(start.Z(), stop.Z()) > 1525.0) return false;}if(sr->trk.kalman.ntracks< 1) return false;for(unsigned int i=0;i< sr->trk.kalman.ntracks;++i){if(i==sr->trk.kalman.idxremid) continue;else if(sr->trk.kalman.tracks[i].start.Z() > 1275||sr->trk.kalman.tracks[i].stop.Z() > 1275) return false;}return(sr->trk.kalman.ntracks > sr->trk.kalman.idxremid &&sr->slc.firstplane > 1
&&sr->slc.lastplane< 212 &&sr->trk.kalman.tracks[0].start.Z()< 1100
&&(sr->trk.kalman.tracks[0].stop.Z()< 1275 ||sr->sel.contain.kalyposattrans< 55) &&sr->sel.contain.kalfwdcellnd > 5 &&sr->sel.contain.kalbakcellnd > 10);})
const Var kEnPHSlc([](const caf::SRProxy *sr){if(sr->slc.nhit< 1) return-10.0f;return(float)(sr->slc.calE)/(float)(1.78 *sr->slc.nhit);})
const HistAxis kHadEFracAxis("E_{had.} / E_{#nu}", Binning::Simple(200, 0, 1), kHadEFrac)
HistAxis that implements Hadronic Energy fraction binning used by L.Vinton to derive Hadronic Energy ...
const Var kNHitHad([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)(sr->slc.nhit-sr->trk.kalman.tracks[0].nhit);})
const Var kMinCellEdg([](const caf::SRProxy *sr){return std::min((sr->sel.contain.kalfwdcell+sr->sel.contain.kalbakcell), (sr->sel.contain.cosfwdcell+sr->sel.contain.cosbakcell));})
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;})
const Var kFirstCell([](const caf::SRProxy *sr){return sr->slc.firstcell;})
const Var kSliceTime([](const caf::SRProxy *sr){return sr->slc.meantime/1000;})
const Var kLastCell([](const caf::SRProxy *sr){return sr->slc.lastcell;})
void SetSpillCut(const SpillCut &cut)
const Var kKalFwdCell([](const caf::SRProxy *sr){return sr->sel.contain.kalfwdcell;})
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 kScattTrLen([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)((float) sr->sel.cosrej.scatt/(float) sr->trk.kalman.tracks[0].len);})
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 Var kDirY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].dir.Y();})
Representation of a spectrum in any variable, with associated POT.
const Var kSlcMinY([](const caf::SRProxy *sr){return sr->slc.boxmin.Y()/100.;})
const Cut kInTimingSideband([](const caf::SRProxy *sr){if(sr->spill.run > util::kLastBadTimingRun) return(kInTimingSideband_before(sr)|| kInTimingSideband_after(sr));else return(kInTimingSideband_before(sr)|| kInTimingSideband_afterA(sr)|| kInTimingSideband_afterB(sr));}, [](const caf::SRSpillProxy *spill){if(spill->run > util::kLastBadTimingRun) return(kInTimingSideband_before.Livetime(spill)+ kInTimingSideband_after.Livetime(spill));else return(kInTimingSideband_before.Livetime(spill)+ kInTimingSideband_afterA.Livetime(spill)+ kInTimingSideband_afterB.Livetime(spill));}, [](const caf::SRSpillProxy *spill){return 0;})
const Cut kNumu2017Veto([](const caf::SRProxy *sr){return sr->sel.veto.keep;})
cosmic veto cut for FD
const Var kTrueE([](const caf::SRProxy *sr){assert(sr->mc.nnu==1);return sr->mc.nu[0].E;})
const Var kRatOfKalHi([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)((float) sr->trk.kalman.tracks[0].nhit/(float) sr->slc.nhit);})
const Cut kNumuContainFD2017
const Cut kW_TR([](const caf::SRProxy *sr){bool IsTrue(sr->trk.kalman.tracks[0].start.X() > XCent && sr->trk.kalman.tracks[0].start.Y() > YCent);return IsTrue;})
const Var kSANumuContPID([](const caf::SRProxy *sr){return sr->sel.cosrej.numuSAcontpid;})
const Cut kW_BR([](const caf::SRProxy *sr){bool IsTrue(sr->trk.kalman.tracks[0].start.X() > XCent && sr->trk.kalman.tracks[0].start.Y()< YCent);return IsTrue;})
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;})
const Var kNHitTrk([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float) sr->trk.kalman.tracks[0].nhit;})
virtual void Go() override
Load all the registered spectra.
const std::string QuantNames[NumQuant]
const Cut kNumuPID2017([](const caf::SRProxy *sr){return(sr->sel.remid.pid > 0.5 &&sr->sel.cvn.numuid > 0.5);})
std::vector< float > Spectrum
const HistAxis kNumuCCOptimisedAxis("Reconstructed Neutrino Energy (GeV)", kNumuCCEOptimisedBinning, kCCE)
HistAxis that implements optimised numuCCE from L. Vinton. See docdb 16332. This was close to 'custC'...
const Cut kW_TL([](const caf::SRProxy *sr){bool IsTrue=(sr->trk.kalman.tracks[0].start.X()< XCent && sr->trk.kalman.tracks[0].start.Y() > YCent);return IsTrue;})
const Cut kNumuCosmicRej2017([](const caf::SRProxy *sr){return(sr->sel.cosrej.anglekal > 0.5 && sr->sel.cosrej.numucontpid2020 > 0.5 && sr->slc.nhit< 400);})
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;})
const Var kTrkLenXY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;float XLen=(sr->trk.kalman.tracks[0].start.X()-sr->trk.kalman.tracks[0].stop.X())/100;float YLen=(sr->trk.kalman.tracks[0].start.Y()-sr->trk.kalman.tracks[0].stop.Y())/100;return XLen-YLen;})
void ComparisonPlots_Data()
const Var kKalBakCell([](const caf::SRProxy *sr){return sr->sel.contain.kalbakcell;})
const Cut kW_BL([](const caf::SRProxy *sr){bool IsTrue(sr->trk.kalman.tracks[0].start.X()< XCent && sr->trk.kalman.tracks[0].start.Y()< YCent);return IsTrue;})
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.
const Var kVisETrk([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float) sr->trk.kalman.tracks[0].calE;})
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 Cut kInBeamSpill([](const caf::SRProxy *sr){if(sr->spill.run > util::kLastBadTimingRun) return kInBeamSpill_main(sr);else return kInBeamSpill_main(sr)||kInBeamSpill_shifted(sr);}, [](const caf::SRSpillProxy *spill){if(spill->run > util::kLastBadTimingRun) return kInBeamSpill_main.Livetime(spill);else return kInBeamSpill_main.Livetime(spill)+kInBeamSpill_shifted.Livetime(spill);}, [](const caf::SRSpillProxy *spill) -> double{return spill->spillpot;})
Does the event fall inside the window we call the beam spill?
const Var kVisEHad([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)(sr->slc.calE-sr->trk.kalman.tracks[0].calE);})
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
const Var kMaxKalZPos([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return std::max(sr->trk.kalman.tracks[0].start.Z()/100, sr->trk.kalman.tracks[0].stop.Z()/100);})
const Var kUnweighted
The simplest possible Var, always 1. Used as a default weight.
const Cut kNoCut
The simplest possible cut: pass everything, used as a default.
const Var kCosNumi([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999){if(sr->hdr.det==1){return sr->trk.kalman.tracks[0].dir.Dot(beamDirND);}if(sr->hdr.det==2){return sr->trk.kalman.tracks[0].dir.Dot(beamDirFD);}}return-5.f;})
const Var kSlcMinZ([](const caf::SRProxy *sr){return sr->slc.boxmin.Z()/100.;})
const Var kTrkNhits([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 65535;return int(sr->trk.kalman.tracks[0].nhit);})
const Var kEnPHTrk([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)(sr->trk.kalman.tracks[0].calE)/(float)(1.78 *sr->trk.kalman.tracks[0].nhit);})
std::vector< std::string > CutNames