40 std::string labelCont =
"Minimum Distance to Any Detector Face (cm)";
49 std::string labelTop =
"Distance to Top of Detector (cm)";
82 float mindist = 10000.;
89 return (mindist > 9999. ? (
float)-1. : mindist);
103 if(nhit <= 0.) {
return 0.; }
115 const HistAxis kAxisCont(labelCont, kNearEdgeBins, kMinDistP);
117 const HistAxis kAxisLID( labelLID, kFinePIDBins, kElecID);
120 const HistAxis kAxisNCP( labelNCP, kFinePIDBins, kNCP);
121 const HistAxis kAxisPTP( labelPTP, kFinePIDBins, kPartPTP);
131 const Cut kFidMinusX(
137 if(vtx.Y() < -720.0)
return false;
138 if(vtx.Y() > 600.0)
return false;
139 if(vtx.Z() < 50.0)
return false;
140 if(vtx.Z() > 5450.0)
return false;
143 const Cut kFidMinusY(
149 if(vtx.X() < -680.0)
return false;
150 if(vtx.X() > 650.0)
return false;
151 if(vtx.Z() < 50.0)
return false;
152 if(vtx.Z() > 5450.0)
return false;
155 const Cut kFidMinusZ(
161 if(vtx.X() < -680.0)
return false;
162 if(vtx.X() > 650.0)
return false;
163 if(vtx.Y() < -720.0)
return false;
164 if(vtx.Y() > 600.0)
return false;
168 const Cut kNCSelMinusHit(
174 const Cut kNCSelMinusCVN(
177 if(sr->
slc.
nhit >= 200)
return false;
181 const Cut kCosRejMinusNCP(
186 if(partptp >= 0.8)
return false;
189 if(
nhit <= 0.)
return false;
194 const Cut kCosRejMinusPTP(
197 double numucontpid = sr->
sel.
cosrej.numucontpid;
199 if(numucontpid <= 0.5)
return false;
202 if(
nhit <= 0.)
return false;
207 const Cut kCosRejMinusIsM(
210 double numucontpid = sr->
sel.
cosrej.numucontpid;
212 if(numucontpid <= 0.5)
return false;
213 if(partptp >= 0.8)
return false;
215 if(nhit <= 0.)
return false;
216 if(sr->
slc.
calE/nhit <= 0.018)
return false;
220 const Cut kCosRejMinusEpH(
223 double numucontpid = sr->
sel.
cosrej.numucontpid;
226 if(numucontpid <= 0.5)
return false;
227 if(partptp >= 0.8)
return false;
232 const Cut kCosRejMinusTop(
235 double numucontpid = sr->
sel.
cosrej.numucontpid;
238 if(numucontpid <= 0.5)
return false;
239 if(partptp >= 0.8)
return false;
242 if(
nhit <= 0.)
return false;
334 TFile* rootF =
new TFile(outfile.c_str(),
"RECREATE");
335 TDirectory*
tmp = gDirectory;
336 TDirectory* saveDir = gDirectory;
339 saveDir = rootF->mkdir(
"dND_Reco0");
340 dND_Reco0.SaveTo(saveDir);
341 saveDir = rootF->mkdir(
"dND_Reco1");
342 dND_Reco1.
SaveTo(saveDir);
343 saveDir = rootF->mkdir(
"dND_Reco2");
344 dND_Reco2.
SaveTo(saveDir);
345 saveDir = rootF->mkdir(
"dND_Reco3");
346 dND_Reco3.
SaveTo(saveDir);
347 saveDir = rootF->mkdir(
"dND_Reco4");
348 dND_Reco4.
SaveTo(saveDir);
349 saveDir = rootF->mkdir(
"dND_Reco5");
350 dND_Reco5.
SaveTo(saveDir);
352 saveDir = rootF->mkdir(
"pFD_Reco0");
353 pFD_Reco0.
SaveTo(saveDir);
354 saveDir = rootF->mkdir(
"pFD_Reco1");
355 pFD_Reco1.
SaveTo(saveDir);
356 saveDir = rootF->mkdir(
"pFD_Reco2");
357 pFD_Reco2.
SaveTo(saveDir);
358 saveDir = rootF->mkdir(
"pFD_Reco3");
359 pFD_Reco3.
SaveTo(saveDir);
360 saveDir = rootF->mkdir(
"pFD_Reco4");
361 pFD_Reco4.
SaveTo(saveDir);
362 saveDir = rootF->mkdir(
"pFD_Reco5");
363 pFD_Reco5.
SaveTo(saveDir);
365 saveDir = rootF->mkdir(
"sCS_Reco0");
366 sCS_Reco0.
SaveTo(saveDir);
367 saveDir = rootF->mkdir(
"sCS_Reco1");
368 sCS_Reco1.
SaveTo(saveDir);
369 saveDir = rootF->mkdir(
"sCS_Reco2");
370 sCS_Reco2.
SaveTo(saveDir);
371 saveDir = rootF->mkdir(
"sCS_Reco3");
372 sCS_Reco3.
SaveTo(saveDir);
373 saveDir = rootF->mkdir(
"sCS_Reco4");
374 sCS_Reco4.
SaveTo(saveDir);
375 saveDir = rootF->mkdir(
"sCS_Reco5");
376 sCS_Reco5.
SaveTo(saveDir);
378 saveDir = rootF->mkdir(
"pFD_VertexX1");
379 pFD_VertexX1.
SaveTo(saveDir);
380 saveDir = rootF->mkdir(
"pFD_VertexY1");
381 pFD_VertexY1.
SaveTo(saveDir);
382 saveDir = rootF->mkdir(
"pFD_VertexZ1");
383 pFD_VertexZ1.
SaveTo(saveDir);
384 saveDir = rootF->mkdir(
"pFD_Contain1");
385 pFD_Contain1.
SaveTo(saveDir);
386 saveDir = rootF->mkdir(
"pFD_NHit3");
387 pFD_NHit3.
SaveTo(saveDir);
388 saveDir = rootF->mkdir(
"pFD_CVN3");
390 saveDir = rootF->mkdir(
"pFD_LID3");
392 saveDir = rootF->mkdir(
"pFD_Rem3");
394 saveDir = rootF->mkdir(
"pFD_NumucontPID4");
395 pFD_NumucontPID4.
SaveTo(saveDir);
396 saveDir = rootF->mkdir(
"pFD_PartPTP4");
397 pFD_PartPTP4.
SaveTo(saveDir);
398 saveDir = rootF->mkdir(
"pFD_IsMu4");
399 pFD_IsMu4.
SaveTo(saveDir);
400 saveDir = rootF->mkdir(
"pFD_EperHit4");
401 pFD_EperHit4.
SaveTo(saveDir);
402 saveDir = rootF->mkdir(
"pFD_DistTop4");
403 pFD_DistTop4.
SaveTo(saveDir);
405 saveDir = rootF->mkdir(
"sCS_VertexX1");
406 sCS_VertexX1.
SaveTo(saveDir);
407 saveDir = rootF->mkdir(
"sCS_VertexY1");
408 sCS_VertexY1.
SaveTo(saveDir);
409 saveDir = rootF->mkdir(
"sCS_VertexZ1");
410 sCS_VertexZ1.
SaveTo(saveDir);
411 saveDir = rootF->mkdir(
"sCS_Contain1");
412 sCS_Contain1.
SaveTo(saveDir);
413 saveDir = rootF->mkdir(
"sCS_NHit3");
414 sCS_NHit3.
SaveTo(saveDir);
415 saveDir = rootF->mkdir(
"sCS_Rem3");
417 saveDir = rootF->mkdir(
"sCS_LID3");
419 saveDir = rootF->mkdir(
"sCS_CVN3");
421 saveDir = rootF->mkdir(
"sCS_NumucontPID4");
422 sCS_NumucontPID4.
SaveTo(saveDir);
423 saveDir = rootF->mkdir(
"sCS_PartPTP4");
424 sCS_PartPTP4.
SaveTo(saveDir);
425 saveDir = rootF->mkdir(
"sCS_IsMu4");
426 sCS_IsMu4.
SaveTo(saveDir);
427 saveDir = rootF->mkdir(
"sCS_EperHit4");
428 sCS_EperHit4.
SaveTo(saveDir);
429 saveDir = rootF->mkdir(
"sCS_DistTop4");
430 sCS_DistTop4.
SaveTo(saveDir);
432 saveDir = rootF->mkdir(
"pNM1_VertexX");
433 pNM1_VertexX.
SaveTo(saveDir);
434 saveDir = rootF->mkdir(
"pNM1_VertexY");
435 pNM1_VertexY.
SaveTo(saveDir);
436 saveDir = rootF->mkdir(
"pNM1_VertexZ");
437 pNM1_VertexZ.
SaveTo(saveDir);
438 saveDir = rootF->mkdir(
"pNM1_Contain");
439 pNM1_Contain.
SaveTo(saveDir);
440 saveDir = rootF->mkdir(
"pNM1_NHit");
441 pNM1_NHit.
SaveTo(saveDir);
442 saveDir = rootF->mkdir(
"pNM1_Rem");
444 saveDir = rootF->mkdir(
"pNM1_LID");
446 saveDir = rootF->mkdir(
"pNM1_CVN");
448 saveDir = rootF->mkdir(
"pNM1_NumucontPID");
449 pNM1_NumucontPID.
SaveTo(saveDir);
450 saveDir = rootF->mkdir(
"pNM1_PartPTP");
451 pNM1_PartPTP.
SaveTo(saveDir);
452 saveDir = rootF->mkdir(
"pNM1_IsMu");
453 pNM1_IsMu.
SaveTo(saveDir);
454 saveDir = rootF->mkdir(
"pNM1_EperHit");
455 pNM1_EperHit.
SaveTo(saveDir);
456 saveDir = rootF->mkdir(
"pNM1_DistTop");
457 pNM1_DistTop.
SaveTo(saveDir);
459 saveDir = rootF->mkdir(
"sNM1_VertexX");
460 sNM1_VertexX.
SaveTo(saveDir);
461 saveDir = rootF->mkdir(
"sNM1_VertexY");
462 sNM1_VertexY.
SaveTo(saveDir);
463 saveDir = rootF->mkdir(
"sNM1_VertexZ");
464 sNM1_VertexZ.
SaveTo(saveDir);
465 saveDir = rootF->mkdir(
"sNM1_Contain");
466 sNM1_Contain.
SaveTo(saveDir);
467 saveDir = rootF->mkdir(
"sNM1_NHit");
468 sNM1_NHit.
SaveTo(saveDir);
469 saveDir = rootF->mkdir(
"sNM1_Rem");
471 saveDir = rootF->mkdir(
"sNM1_LID");
473 saveDir = rootF->mkdir(
"sNM1_CVN");
475 saveDir = rootF->mkdir(
"sNM1_NumucontPID");
476 sNM1_NumucontPID.
SaveTo(saveDir);
477 saveDir = rootF->mkdir(
"sNM1_PartPTP");
478 sNM1_PartPTP.
SaveTo(saveDir);
479 saveDir = rootF->mkdir(
"sNM1_IsMu");
480 sNM1_IsMu.
SaveTo(saveDir);
481 saveDir = rootF->mkdir(
"sNM1_EperHit");
482 sNM1_EperHit.
SaveTo(saveDir);
483 saveDir = rootF->mkdir(
"sNM1_DistTop");
484 sNM1_DistTop.
SaveTo(saveDir);
caf::Proxy< unsigned int > nshwlid
Near Detector underground.
const Cut kNusFDFiducial([](const caf::SRProxy *sr){ if(!sr->vtx.elastic.IsValid) return false;const TVector3 vtx=sr->vtx.elastic.vtx;if(vtx.X()< -680.0) return false;if(vtx.X() > 650.0) return false;if(vtx.Y()< -720.0) return false;if(vtx.Y() > 500.0) return false;if(vtx.Z()< 50.0) return false;if(vtx.Z() > 5450.0) return false;return true;})
FD Fiducial volume from docdb 15285.
caf::Proxy< caf::SRFuzzyK > fuzzyk
Far Detector at Ash River.
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
caf::Proxy< float > stoptop
const std::string fnametau_concat
const Cut kNusEventQuality([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;if(sr->sel.nuecosrej.hitsperplane >=8) return false;if(sr->vtx.elastic.fuzzyk.nshwlid==0) return false;if(sr->vtx.elastic.fuzzyk.png[0].shwlid.gap >=100.) return false;if(sr->slc.ncontplanes<=2) return false;return true;})
Data Quality cuts from docdb 14241.
const Var kDistTop([](const caf::SRProxy *sr){return std::min(sr->sel.nuecosrej.starttop, sr->sel.nuecosrej.stoptop);})
const std::string fnamecos_concat
Proxy for caf::StandardRecord.
Collection of SpectrumLoaders for many configurations.
void CutTableLoad(std::string outfile)
const Cut kNusNDFiducial([](const caf::SRProxy *sr){assert(sr->vtx.elastic.IsValid &&"Must apply DQ cuts");if(sr->vtx.elastic.vtx.X()< -100.0) return false;if(sr->vtx.elastic.vtx.X() > 100.0) return false;if(sr->vtx.elastic.vtx.Y()< -100.0) return false;if(sr->vtx.elastic.vtx.Y() > 100.0) return false;if(sr->vtx.elastic.vtx.Z()< 200.0) return false;if(sr->vtx.elastic.vtx.Z() > 1000.0) return false;return true;})
ND Fiducial volume from docdb 15242.
const Cut kNusFDContain([](const caf::SRProxy *sr){const caf::SRNueCosRejProxy &cr=sr->sel.nuecosrej;if(std::min(cr.starteast, cr.stopeast)< 10) return false;if(std::min(cr.startwest, cr.stopwest)< 10) return false;if(std::min(cr.starttop, cr.stoptop) < 10) return false;if(std::min(cr.startbottom, cr.stopbottom)< 10) return false;if(std::min(cr.startfront, cr.stopfront)< 10) return false;if(std::min(cr.startback, cr.stopback)< 10) return false;return true;})
Containment variable for NC events from docdb 14241.
void SetSpillCut(const SpillCut &cut)
const Var kEPerHit([](const caf::SRProxy *sr){if(sr->slc.nhit >0) return 1000.0 *(sr->slc.calE/sr->slc.nhit);else return-5.;})
const Cut kNusNCSel([](const caf::SRProxy *sr){if(sr->slc.nhit >=200) return false;if(sr->slc.nhit< 20) return false;if(sr->sel.cvn.ncid< 0.2) return false;return true;})
Cut that is more CC rejection than NC selection from docdb 15285.
caf::Proxy< float > starttop
Representation of a spectrum in any variable, with associated POT.
caf::Proxy< caf::SRCosRej > cosrej
void Go()
Call Go() on all the loaders.
const Cut kInCosmicTimingWindow
Is the event far from the start and ends of the spill ? For FD cosmic selection.
caf::Proxy< caf::SRElastic > elastic
caf::Proxy< caf::SRNueCosRej > nuecosrej
const SpillCut kOnly14DB([](const caf::SRSpillProxy *spill){if(spill->det!=caf::kFARDET) return true;std::bitset< 14 > binary(spill->dibmask);for(int i=0;i< 14;++i){if(!binary[i]) return false;}return true;})
caf::Proxy< std::vector< caf::SRFuzzyKProng > > png
const std::string fnamenear_concat
void SetSpillCut(const SpillCut &cut)
caf::Proxy< unsigned int > nhit
const std::string fnameneardata_concat
caf::Proxy< caf::SRCVNResult > cvn
const Cut kIsMuon([](const caf::SRProxy *sr){return(abs(sr->mc.nu[0].beam.ptype)==13);})
const Binning kBooleanBins
caf::Proxy< float > partptp
virtual void Go() override
Load all the registered spectra.
void SaveTo(TDirectory *dir, const std::string &name) const
const HistAxis kNCAxis("Calorimetric Energy (GeV)", kNCDisappearanceEnergyBinning, kCaloE)
Axes used in Ana01 analysis by nus group.
#define SIMPLEVAR(CAFNAME)
For Vars where literally all you need is a single CAF variable.
Output from Cosmic Rejection (Nuecosrej) module.
const SystShifts kNoShift
void SaveTo(TDirectory *dir, const std::string &name) const override
caf::Proxy< bool > IsValid
caf::Proxy< caf::SRSlice > slc
Splits Data proportionally according to MC.
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
caf::Proxy< caf::SRVector3D > vtx
const Binning kFinePIDBins
const Cut kNusCosRejMod([](const caf::SRProxy *sr){double partptp=sr->sel.nuecosrej.partptp;if(sr->vtx.elastic.fuzzyk.nshwlid==0) return false;if(partptp >=0.8) return false;if(sr->vtx.elastic.fuzzyk.png[0].shwlid.lid.ismuon==1) return false;double nhit=(double) sr->slc.nhit;if(nhit<=0.) return false;if(sr->slc.calE/nhit<=0.009) return false;return true;})
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
caf::Proxy< caf::SRIDBranch > sel
T min(const caf::Proxy< T > &a, T b)
caf::Proxy< caf::SRVertexBranch > vtx
const std::string fnameswap_concat
const std::string fnamefar_concat
void SetLoaderPath(const std::string &path, caf::Det_t det, DataMC datamc, DataSource src=kBeam, SwappingConfig swap=kNonSwap)
Configure loader via wildcard path.
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 Cut kNusCosRej([](const caf::SRProxy *sr){double numucontpid2019=sr->sel.cosrej.numucontpid2019;double partptp=sr->sel.nuecosrej.partptp;if(sr->vtx.elastic.fuzzyk.nshwlid==0) return false;if(numucontpid2019<=0.5) return false;if(partptp >=0.8) return false;if(sr->vtx.elastic.fuzzyk.png[0].shwlid.lid.ismuon==1) return false;double nhit=(double) sr->slc.nhit;if(nhit<=0.) return false;if(sr->slc.calE/nhit<=0.018) return false;if(std::min(sr->sel.nuecosrej.starttop, sr->sel.nuecosrej.stoptop)< 480) return false;return true;})
Cosmic rejection for the NC sample from docdb 15241.