23 <<
"An input samweb definition. \n" 24 <<
"Whether you want to run all cuts or not. I will assume full cuts.\n" 38 if ( InputDef.find(
"nd") != std::string::npos) {
46 MyWeight = kTimingSidebandWeight;
58 std::vector<Cut> kDefinedCut;
59 unsigned int NumCuts = 1;
60 if (RunAllCuts) NumCuts=4;
65 kDefinedCut.push_back( TimingCut &&
kNumuQuality && kDetCut );
66 kDefinedCut.push_back( TimingCut &&
kNumuQuality && kDetCut );
67 kDefinedCut.push_back( TimingCut &&
kNumuQuality && kDetCut && kMyPIDCut );
69 CutNames[0] =
"_QualCuts";
70 CutNames[1] =
"_DetCuts" ;
71 CutNames[2] =
"_CosmCuts";
72 CutNames[3] =
"_PIDCuts";
74 if ( InputDef.find(
"fd") != std::string::npos ) {
75 kDefinedCut[2] = kDefinedCut[2] && kMyCosRejCut;
76 kDefinedCut[3] = kDefinedCut[3] && kMyCosRejCut;
79 else if (NumCuts == 1) {
81 kDefinedCut.push_back( TimingCut &&
kNumuQuality && kDetCut && kMyPIDCut );
83 CutNames[0] =
"_AllCuts";
85 if ( InputDef.find(
"fd") != std::string::npos ) {
86 kDefinedCut[0] = kDefinedCut[0] && kMyCosRejCut;
94 if (InputDef.find(
"rhc") != std::string::npos ) sFHC =
"rhc";
96 std::string NUMUDATA_DIR =
"/cvmfs/nova.opensciencegrid.org/externals/numudata/v00.00/NULL/";
97 std::string fdspecfile = NUMUDATA_DIR+
"ana2018/Quantiles/quantiles__"+sFHC+
"_full__numu2018.root";
102 TFile*
inFile = TFile::Open( fdspecfile.c_str() );
104 TH2 *FDSpec2D = (TH2*)inFile->FindObjectAny(
"FDSpec2D" );
112 const unsigned int NumQuants = 5;
113 Cut kQuantCut[NumQuants] = {
kNoCut , HadEFracQuantCuts[0], HadEFracQuantCuts[1], HadEFracQuantCuts[2], HadEFracQuantCuts[3] };
114 const std::string QuantNames[NumQuants] = {
"_AllQuants",
"_Quant1" ,
"_Quant2" ,
"_Quant3" ,
"_Quant4" };
119 if (InputDef.find(
"7d8b") != std::string::npos ) sPer =
"_Epochs_7d_8b_";
132 if ( IsCosmics) sSwap =
"Cosmics_";
136 if (InputDef.find(
"sumdecaf") != std::string::npos ) sCAF =
"concat";
137 else if (InputDef.find(
"restricted") != std::string::npos ) sCAF =
"res-concat";
140 std::string OutputName =
"CompPlots_" + sDet + sSwap + sFHC + sPer + sCAF +
".root";
143 std::cout <<
"Before I declare anything, the following is set;\n" 144 <<
"\tInput definit is " << InputDef <<
"\n" 145 <<
"\tOutput file name " << OutputName <<
"\n" 146 <<
"\tNumber of Cuts " << NumCuts <<
"\n" 147 <<
"\tIs debug mode is " << Debug <<
"\n" 153 Spectrum *sReconstEnergy[NumCuts][NumQuants];
154 Spectrum *sSliceTimeFull[NumCuts][NumQuants];
155 Spectrum *sSliceTimeZoom[NumCuts][NumQuants];
156 Spectrum *sMuonEnergy [NumCuts][NumQuants];
157 Spectrum *sMuonEnPerHit [NumCuts][NumQuants];
158 Spectrum *sHadronEnergy [NumCuts][NumQuants];
159 Spectrum *sHadroEnPerHit[NumCuts][NumQuants];
160 Spectrum *sHadFracEnergy[NumCuts][NumQuants];
161 Spectrum *sHitsPerSlice [NumCuts][NumQuants];
162 Spectrum *sRemIDScore [NumCuts][NumQuants];
163 Spectrum *sCVNCosmicScor[NumCuts][NumQuants];
164 Spectrum *sCVNNuMuIDScor[NumCuts][NumQuants];
165 Spectrum *sCVNNuMuID2017[NumCuts][NumQuants];
166 Spectrum *sNuMuContPID [NumCuts][NumQuants];
167 Spectrum *sSANuMuContPID[NumCuts][NumQuants];
169 Spectrum *sTrueNuEnergy [NumCuts][NumQuants];
170 Spectrum *sReTrOverTrNuE[NumCuts][NumQuants];
173 Spectrum *sTrkStartX[NumCuts][NumQuants];
174 Spectrum *sTrkStartY[NumCuts][NumQuants];
175 Spectrum *sTrkStartZ[NumCuts][NumQuants];
176 Spectrum *sTrkEndX [NumCuts][NumQuants];
177 Spectrum *sTrkEndY [NumCuts][NumQuants];
178 Spectrum *sTrkEndZ [NumCuts][NumQuants];
179 Spectrum *sTrkLenXY [NumCuts][NumQuants];
182 Spectrum *sNumKalTracks [NumCuts][NumQuants];
183 Spectrum *sNumKalTrHits [NumCuts][NumQuants];
184 Spectrum *sRatKalHitSlc [NumCuts][NumQuants];
185 Spectrum *sKalTrLength [NumCuts][NumQuants];
186 Spectrum *sKalTrBeamAng [NumCuts][NumQuants];
187 Spectrum *sKalMostFwdCel[NumCuts][NumQuants];
188 Spectrum *sKalMostBakCel[NumCuts][NumQuants];
189 Spectrum *sKalTrVer_MaxY[NumCuts][NumQuants];
190 Spectrum *sKalTrVer_MaxZ[NumCuts][NumQuants];
191 Spectrum *sKalTrDir_Y [NumCuts][NumQuants];
192 Spectrum *sScattKalTrLen[NumCuts][NumQuants];
195 Spectrum *sFirstHitCell [NumCuts][NumQuants];
196 Spectrum *sLastHitCell [NumCuts][NumQuants];
197 Spectrum *sMaxActivity_Y[NumCuts][NumQuants];
198 Spectrum *sMinActivity_Y[NumCuts][NumQuants];
199 Spectrum *sMaxActivity_Z[NumCuts][NumQuants];
200 Spectrum *sMinActivity_Z[NumCuts][NumQuants];
201 Spectrum *sMinCellToEdge[NumCuts][NumQuants];
204 Spectrum *sRemIDScatLLH [NumCuts][NumQuants];
205 Spectrum *sRemIDdEdxLLH [NumCuts][NumQuants];
206 Spectrum *sRemIDMeasFrac[NumCuts][NumQuants];
209 Spectrum *sCor_RecEn[NumCuts][NumQuants][4];
210 Spectrum *sCor_MuoEn[NumCuts][NumQuants][4];
211 Spectrum *sCor_HadEn[NumCuts][NumQuants][4];
212 Spectrum *sCor_HFrEn[NumCuts][NumQuants][4];
214 Spectrum *sCor_RecTr[NumCuts][NumQuants][4];
215 Spectrum *sCor_MuoTr[NumCuts][NumQuants][4];
216 Spectrum *sCor_HadTr[NumCuts][NumQuants][4];
217 Spectrum *sCor_HFrTr[NumCuts][NumQuants][4];
218 Spectrum *sCor_ReTr [NumCuts][NumQuants][4];
221 const std::string CutName[4] = {
"_TopL",
"_TopR",
"_BotL",
"_BotR" };
228 for (
unsigned int cc=0;
cc<NumCuts; ++
cc) {
230 for (
unsigned int qq=0; qq<NumQuants; ++qq) {
232 const Cut kThisCut = kDefinedCut[
cc] && kQuantCut[qq];
291 for (
int cor=0; cor<4; ++cor) {
292 const Cut kCorCut = kThisCut && kCorner[cor];
312 TFile *
outFile =
new TFile(OutputName.c_str(),
"RECREATE");
316 for (
unsigned int cc=0;
cc<NumCuts; ++
cc) {
318 for (
unsigned int qq=0; qq<NumQuants; ++qq) {
321 sReconstEnergy[
cc][qq] ->
SaveTo( outFile, TString(
"sReconstEnergy")+TString(MyAppend) ) ;
322 sSliceTimeFull[
cc][qq] ->
SaveTo( outFile, TString(
"sSliceTimeFull")+TString(MyAppend) ) ;
323 sSliceTimeZoom[
cc][qq] ->
SaveTo( outFile, TString(
"sSliceTimeZoom")+TString(MyAppend) ) ;
324 sMuonEnergy [
cc][qq] ->
SaveTo( outFile, TString(
"sMuonEnergy") +TString(MyAppend) ) ;
325 sMuonEnPerHit [
cc][qq] ->
SaveTo( outFile, TString(
"sMuonEnPerHit") +TString(MyAppend) ) ;
326 sHadronEnergy [
cc][qq] ->
SaveTo( outFile, TString(
"sHadronEnergy") +TString(MyAppend) ) ;
327 sHadroEnPerHit[
cc][qq] ->
SaveTo( outFile, TString(
"sHadroEnPerHit")+TString(MyAppend) ) ;
328 sHadFracEnergy[
cc][qq] ->
SaveTo( outFile, TString(
"sHadFracEnergy")+TString(MyAppend) ) ;
329 sHitsPerSlice [
cc][qq] ->
SaveTo( outFile, TString(
"sHitsPerSlice") +TString(MyAppend) ) ;
330 sRemIDScore [
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDScore") +TString(MyAppend) ) ;
331 sCVNCosmicScor[
cc][qq] ->
SaveTo( outFile, TString(
"sCVNCosmicScor")+TString(MyAppend) ) ;
332 sCVNNuMuIDScor[
cc][qq] ->
SaveTo( outFile, TString(
"sCVNNuMuIDScor")+TString(MyAppend) ) ;
333 sCVNNuMuID2017[
cc][qq] ->
SaveTo( outFile, TString(
"sCVNNuMuID2017")+TString(MyAppend) ) ;
334 sNuMuContPID [
cc][qq] ->
SaveTo( outFile, TString(
"sNuMuContPID") +TString(MyAppend) ) ;
335 sSANuMuContPID[
cc][qq] ->
SaveTo( outFile, TString(
"sSANuMuContPID")+TString(MyAppend) ) ;
337 sTrueNuEnergy [
cc][qq] ->
SaveTo( outFile, TString(
"sTrueNuEnergy") +TString(MyAppend) ) ;
338 sReTrOverTrNuE[
cc][qq] ->
SaveTo( outFile, TString(
"sReTrOverTrNuE")+TString(MyAppend) ) ;
341 sTrkStartX[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkStartX")+TString(MyAppend) ) ;
342 sTrkStartY[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkStartY")+TString(MyAppend) ) ;
343 sTrkStartZ[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkStartZ")+TString(MyAppend) ) ;
344 sTrkEndX[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkEndX") +TString(MyAppend) ) ;
345 sTrkEndY[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkEndY") +TString(MyAppend) ) ;
346 sTrkEndZ[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkEndZ") +TString(MyAppend) ) ;
347 sTrkLenXY[
cc][qq] ->
SaveTo( outFile, TString(
"sTrkLenXY") +TString(MyAppend) ) ;
350 sNumKalTracks [
cc][qq] ->
SaveTo( outFile, TString(
"sNumKalTracks") +TString(MyAppend) ) ;
351 sNumKalTrHits [
cc][qq] ->
SaveTo( outFile, TString(
"sNumKalTrHits") +TString(MyAppend) ) ;
352 sRatKalHitSlc [
cc][qq] ->
SaveTo( outFile, TString(
"sRatKalHitSlc") +TString(MyAppend) ) ;
353 sKalTrLength [
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrLength") +TString(MyAppend) ) ;
354 sKalTrBeamAng [
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrBeamAng") +TString(MyAppend) ) ;
355 sKalMostFwdCel[
cc][qq] ->
SaveTo( outFile, TString(
"sKalMostFwdCel")+TString(MyAppend) ) ;
356 sKalMostBakCel[
cc][qq] ->
SaveTo( outFile, TString(
"sKalMostBakCel")+TString(MyAppend) ) ;
357 sKalTrVer_MaxY[
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrVer_MaxY")+TString(MyAppend) ) ;
358 sKalTrVer_MaxZ[
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrVer_MaxZ")+TString(MyAppend) ) ;
359 sKalTrDir_Y [
cc][qq] ->
SaveTo( outFile, TString(
"sKalTrDir_Y") +TString(MyAppend) ) ;
360 sScattKalTrLen[
cc][qq] ->
SaveTo( outFile, TString(
"sScattKalTrLen")+TString(MyAppend) ) ;
363 sFirstHitCell [
cc][qq] ->
SaveTo( outFile, TString(
"sFirstHitCell") +TString(MyAppend) ) ;
364 sLastHitCell [
cc][qq] ->
SaveTo( outFile, TString(
"sLastHitCell") +TString(MyAppend) ) ;
365 sMaxActivity_Y[
cc][qq] ->
SaveTo( outFile, TString(
"sMaxActivity_Y")+TString(MyAppend) ) ;
366 sMinActivity_Y[
cc][qq] ->
SaveTo( outFile, TString(
"sMinActivity_Y")+TString(MyAppend) ) ;
367 sMinCellToEdge[
cc][qq] ->
SaveTo( outFile, TString(
"sMinCellToEdge")+TString(MyAppend) ) ;
368 sMaxActivity_Z[
cc][qq] ->
SaveTo( outFile, TString(
"sMaxActivity_Z")+TString(MyAppend) ) ;
369 sMinActivity_Z[
cc][qq] ->
SaveTo( outFile, TString(
"sMinActivity_Z")+TString(MyAppend) ) ;
372 sRemIDScatLLH [
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDScatLLH") +TString(MyAppend) ) ;
373 sRemIDdEdxLLH [
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDdEdxLLH") +TString(MyAppend) ) ;
374 sRemIDMeasFrac[
cc][qq] ->
SaveTo( outFile, TString(
"sRemIDMeasFrac")+TString(MyAppend) ) ;
377 for (
int cor=0; cor<4; ++cor) {
378 sCor_RecEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_RecEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
379 sCor_MuoEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_MuoEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
380 sCor_HadEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_HadEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
381 sCor_HFrEn[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_HFrEn")+TString(MyAppend)+TString(CutName[cor]) ) ;
383 sCor_RecTr[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_RecTr")+TString(MyAppend)+TString(CutName[cor]) ) ;
384 sCor_MuoTr[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_MuoTr")+TString(MyAppend)+TString(CutName[cor]) ) ;
385 sCor_HadTr[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_HadTr")+TString(MyAppend)+TString(CutName[cor]) ) ;
386 sCor_HFrTr[
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_HFrTr")+TString(MyAppend)+TString(CutName[cor]) ) ;
387 sCor_ReTr [
cc][qq][cor] ->
SaveTo( outFile, TString(
"sCor_ReTr" )+TString(MyAppend)+TString(CutName[cor]) ) ;
390 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 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);})
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
void Compare_Spectra(std::string InputDef, bool IsCosmics=false, bool RunAllCuts=false, bool Debug=false)
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 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 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 kTrueHFrE([](const caf::SRProxy *sr){float HadE=kTrueHadE(sr);float TruE=kTrueE(sr);return(HadE/TruE);})
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 kNumuCosmicRej2018([](const caf::SRProxy *sr){return(sr->sel.cosrej.anglekal > 0.5 && sr->sel.cosrej.numucontpid2019 > 0.53 && sr->slc.nhit< 400 && sr->sel.nuecosrej.pngptp< 0.9 );})
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;})
virtual void Go() override
Load all the registered spectra.
const std::string QuantNames[NumQuant]
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 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;})
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 kTrueMuonE([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return 0.f;if(sr->mc.nu[0].prim.empty()) return 0.f;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return 0.f;return float(sr->mc.nu[0].prim[0].p.E);})
const Cut kNumuPID2018([](const caf::SRProxy *sr){std::cout<< "ERROR::kNumuPID2018, cutting on both cvnProd3Train and cvn2017."<< " Neither branch exists anymore. Returning False."<< std::endl;abort();return false;})
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 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);})
std::vector< std::string > CutNames