10 #include "CAFAna/Core/HistAxis.h" 11 #include "CAFAna/Core/Binning.h" 12 #include "CAFAna/Core/Cut.h" 17 #include "CAFAna/Cuts/NueCutsFirstAna.h" 18 #include "CAFAna/Cuts/NueCutsSecondAna.h" 60 #include "TStopwatch.h" 86 #include "Utilities/func/MathUtil.h" 93 std::string nameData =
"defname: prod_decaf_R17-03-01-prod3reco.d_nd_numi_fhc_full_nue_or_numu_or_nus_contain_v1_goodruns";
94 std::string nameMC =
"defname: prod_decaf_R17-03-01-prod3reco.d_nd_genie_nonswap_fhc_nova_v08_full_nue_or_numu_or_nus_contain_v1";
121 if (fabs(sr->
mc.
nu[0].vtx.X())>180 ||
122 fabs(sr->
mc.
nu[0].vtx.Y())>180 ||
123 sr->
mc.
nu[0].vtx.Z()<0 ||
124 sr->
mc.
nu[0].vtx.Z()>1250)
141 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
142 for(
int varIdx = 0; varIdx <
kNumVars; ++varIdx){
144 spects[selIdx][varIdx] =
new Spectrum(loaderData, axis, sels[selIdx],
kNoShift);
154 TString
fname =
"datamc_ND_numu_kinematics.root";
155 TFile*
fout =
new TFile(fname,
"RECREATE");
156 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
157 TDirectory*
d = fout->mkdir(selNames[selIdx].c_str());
158 for(
int varIdx = 0; varIdx <
kNumVars; ++varIdx){
159 const char*
name = defs[varIdx].
name.c_str();
const ana::Var kRecoQ2([](const caf::SRProxy *sr){const double M_mu_sqrd=util::sqr(0.1056);double E_mu=kMuE(sr);double p_mu=sqrt(util::sqr(E_mu)-M_mu_sqrd);return 2 *kCCE(sr)*(E_mu-p_mu *kCosNumi(sr))-M_mu_sqrd;})
Reconstructed four-momentum transfer invariant (Q^2)
Cuts and Vars for the 2020 FD DiF Study.
const std::vector< T > & GetVars() const
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
void datamc_ND_numu_kinematics()
std::vector< double > Spectrum
caf::Proxy< short int > nnu
virtual void SaveTo(TDirectory *dir, const std::string &name) const
void SetSpillCut(const SpillCut &cut)
Representation of a spectrum in any variable, with associated POT.
const Var kPtP
Transverse momentum fraction in slice.
const Var kTrueE([](const caf::SRProxy *sr){assert(sr->mc.nnu==1);return sr->mc.nu[0].E;})
const SpillCut kStandardDQCuts([](const caf::SRSpillProxy *spill){if(spill->dcmedgematchfrac==0 &&spill->fracdcm3hits==0 &&spill->nmissingdcmslg==0) return bool(spill->isgoodspill); if(spill->det==caf::kNEARDET && (spill->fracdcm3hits > 0.45|| spill->nmissingdcms > 0)) return false; if(spill->eventincomplete) return false; if(spill->det==caf::kFARDET && spill->nmissingdcmslg > 0) return false; if(spill->det==caf::kFARDET && !spill->ismc && spill->dcmedgematchfrac<=0.2) return false;return true;})
Cut out events with a noisy detector or with parts missing.
virtual void Go() override
Load all the registered spectra.
void SaveTo(TDirectory *dir, const std::string &name) const
const HistDef defs[kNumVars]
const SystShifts kNoShift
caf::Proxy< caf::SRTruthBranch > mc
const std::vector< Binning > & GetBinnings() const
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
Standard interface to all prediction techniques.
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
const std::string selNames[kNumSels]
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
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;})
static NullLoader kNullLoader
Dummy loader that doesn't load any files.
const std::vector< std::string > & GetLabels() const