4 #include "CAFAna/Core/Binning.h" 52 std::vector<TTree*> &trees, std::vector<Var*> &
vars,
53 std::vector<std::string> varNames)
62 fLocalVars.resize(varNames.size(),0.);
63 for (
uint t = 0;
t < fTrees.size(); ++
t ) {
64 for (
uint v = 0;
v < varNames.size(); ++
v ) {
66 fTrees[
t]->Branch( varNames[
v].c_str(), &(fLocalVars[
v]) );
77 if(fSpillCut && !(*fSpillCut)(&sr->
spill))
return;
80 for (
uint v = 0;
v < fLocalVars.size(); ++
v ) {
81 Var theVar = *(fVars[
v]);
82 fLocalVars[
v] = double( theVar(sr) );
85 for (
uint c = 0;
c < fCuts.size(); ++
c ) {
86 Cut theCut = *(fCuts[
c]);
87 if ( theCut(sr) ) fTrees[
c]->
Fill();
110 std::string sFHC_RHC = (IsFHC ==
true ?
"fhc" :
"rhc");
112 std::string sIsData = (IsData ==
true ?
"Data":
"MC" );
114 std::string OutName =
"FlatTree-"+sFHC_RHC+
"-"+sIsFD+
"-"+sIsData+
".root";
117 std::cout <<
"\n\nLots of input parameters, so I'm going to write them out now....;" 118 <<
"\n\t IsFHC " << (IsFHC ==
true ?
"true --> Run in FHC " :
"false --> Run in RHC" ) <<
" ==> sFHC_RHC is " << sFHC_RHC
119 <<
"\n\t IsFD " << (IsFD ==
true ?
"true --> Run in FD " :
"false --> Run in ND " ) <<
" ==> sIsTrain is " << sIsFD
120 <<
"\n\t IsData " << (IsData ==
true ?
"true --> Run over Data" :
"false --> Run over MC" ) <<
" ==> sIsData is " << sIsData
121 <<
"\n\n OutName is therefore " << OutName
129 if (sr->
mc.
nnu == 0)
return -5.f;
137 if (sr->
mc.
nnu == 0)
return -5.f;
142 calc.SetDmsq32( 0.00248 );
157 if ( kNumuMuE2020(sr) < 0.75 ) {
158 if ( kHadEFrac(sr) < 0.118934 ) return 1.f; if ( kHadEFrac(sr) < 0.166448 ) return 2.f; if ( kHadEFrac(sr) < 0.247718 ) return 3.f; return 4.f;
301 TFile *
outFile =
new TFile( OutName.c_str(),
"RECREATE" );
307 if ( IsFD && !IsData ) MyDef =
"prod_caf_R19-11-18-prod5reco.f_fd_genie_N1810j0211a_nonswap_"+sFHC_RHC+
"_nova_v08_full_v1";
308 else if ( IsFD && IsData ) MyDef =
"prod_caf_R19-11-18-prod5reco.i_fd_cosmic_"+sFHC_RHC+
"_full_v1_goodruns";
309 else if ( !IsFD &&
IsFHC && !IsData ) MyDef =
"prod_caf_R19-11-18-prod5reco.d_nd_genie_N1810j0211a_nonswap_fhc_nova_v08_full_v1_minus_p9";
310 else if ( !IsFD && !
IsFHC && !IsData ) MyDef =
"prod_caf_R19-11-18-prod5reco.d_nd_genie_N1810j0211a_nonswap_rhc_nova_v08_full_v1";
311 else if ( !IsFD &&
IsFHC && IsData ) MyDef =
"prod_caf_R19-11-18-prod5reco.d.f_nd_numi_fhc_full_v1_minus_p9_goodruns";
312 else if ( !IsFD && !
IsFHC && IsData ) MyDef =
"prod_caf_R19-11-18-prod5reco.g_nd_numi_rhc_full_v1_goodruns";
333 TTree *MyTrimTree =
new TTree(
"TrimTree" ,
"TrimTree");
338 std::vector<TTree*> MyTrees;
339 std::vector<Cut*> MyCuts;
340 MyTrees.push_back( MyTrimTree ); MyCuts.push_back( &kMyBaseCut );
345 std::vector<Var*> MyVars;
346 std::vector<std::string> MyVarNames;
348 MyVars.push_back( (
Var*)(&
kRun ) ); MyVarNames.push_back(
"Run" );
349 MyVars.push_back( (
Var*)(&
kEvt ) ); MyVarNames.push_back(
"Evt" );
350 MyVars.push_back( (
Var*)(&kPPFXWgt ) ); MyVarNames.push_back(
"PPFXWgt" );
351 MyVars.push_back( (
Var*)(&kXSecWgt ) ); MyVarNames.push_back(
"XSecWgt" );
353 MyVars.push_back( (
Var*)(&
kTrueE ) ); MyVarNames.push_back(
"TrueNuE" );
354 MyVars.push_back( (
Var*)(&
kIsNuMuCC ) ); MyVarNames.push_back(
"IsNuMuCC" );
355 MyVars.push_back( (
Var*)(&
kMode ) ); MyVarNames.push_back(
"IntMode" );
358 MyVars.push_back( (
Var*)(&
kWOscDumb ) ); MyVarNames.push_back(
"DumbOsc" );
359 MyVars.push_back( (
Var*)(&kOsc2019 ) ); MyVarNames.push_back(
"BestFit2019" );
362 MyVars.push_back( (
Var*)(&
kNumuE2018 ) ); MyVarNames.push_back(
"RecoNuE2018" );
363 MyVars.push_back( (
Var*)(&
kNumuE2020 ) ); MyVarNames.push_back(
"RecoNuE" );
364 MyVars.push_back( (
Var*)(&
kNumuMuE2020 ) ); MyVarNames.push_back(
"RecoMuE" );
365 MyVars.push_back( (
Var*)(&
kNumuHadE2020 ) ); MyVarNames.push_back(
"RecoHadE" );
366 MyVars.push_back( (
Var*)(&kWhichQuant_LP ) ); MyVarNames.push_back(
"LooPTPQuant" );
369 MyVars.push_back( (
Var*)(&
kCosVeto ) ); MyVarNames.push_back(
"CosVeto" );
371 MyVars.push_back( (
Var*)(&
kCVNm_looseptp ) ); MyVarNames.push_back(
"CVNMuonLooPTP" );
374 MyVars.push_back( (
Var*)(&
kRemID ) ); MyVarNames.push_back(
"ReMId" );
378 MyVars.push_back( (
Var*)(&
kNumuContPID ) ); MyVarNames.push_back(
"CosRej2020" );
384 CAFTreeMaker treeMaker( MyDef, MyCuts, MyTrees, MyVars, MyVarNames );
394 for (
uint t = 0;
t < MyTrees.size(); ++
t ) {
caf::Proxy< caf::SRCVNResult > cvnloosepreselptp
caf::Proxy< caf::SRSpill > spill
const Var kMode([](const caf::SRProxy *sr){return(sr->mc.nnu==0)?-1:int(sr->mc.nu[0].mode);})
Neutrino interaction mode.
Cuts and Vars for the 2020 FD DiF Study.
void ResetOscCalcToDefault(osc::IOscCalcAdjustable *calc)
Reset calculator to default assumptions for all parameters.
CAFTreeMaker(const std::string &wildcard, std::vector< Cut * > &cuts, std::vector< TTree * > &trees, std::vector< Var * > &vars, std::vector< std::string > varNames)
std::vector< double > fLocalVars
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
void NuMu2020_TrimCAFs(bool IsFHC, bool IsFD, bool IsData=false)
caf::Proxy< short int > nnu
void SetSpillCut(const SpillCut &cut)
virtual double P(int flavBefore, int flavAfter, double E) override
E in GeV; flavors as PDG codes (so, neg==>antinu)
std::vector< Var * > fVars
std::vector< Cut * > fCuts
void HandleRecord(caf::SRProxy *sr) override
const Cut kInCosmicTimingWindow
Is the event far from the start and ends of the spill ? For FD cosmic selection.
const Var kCosVeto
The result of CosVeto.
const Var kTrueE([](const caf::SRProxy *sr){assert(sr->mc.nnu==1);return sr->mc.nu[0].E;})
correl_yv Fill(-(dy[iP-1][iC-1]), hyv->GetBinContent(iP, iC))
std::vector< std::string > wildcard(const std::string &wildcardString)
const Cut kNumuContainFD2020
Optimized version of OscCalcPMNS.
virtual void Go() override
Load all the registered spectra.
const Var kCVNcos_looseptp
caf::Proxy< caf::SRTruthBranch > mc
const Var kWOscDumb([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return 0.f;return float(sr->mc.nu[0].woscdumb);})
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
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.
caf::Proxy< caf::SRIDBranch > sel
const Var kCVNBestMuonScore([](const caf::SRProxy *sr){float muonScore=-5.0;if(kCVNMuonIdx(sr)< 0.0) return muonScore;if(!sr->vtx.elastic.IsValid) return muonScore;muonScore=sr->vtx.elastic.fuzzyk.png[(unsigned int) kCVNMuonIdx(sr)].cvnpart.muonid;if(sr->vtx.elastic.fuzzyk.png[(unsigned int) kCVNMuonIdx(sr)].len > 500.0) muonScore=1.0;return muonScore;})
: Muon score for best muon prong by CVN score & length
const Cut kNumuContainND2020([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;++i){const caf::SRVector3DProxy &start=sr->vtx.elastic.fuzzyk.png[i].shwlid.start;const caf::SRVector3DProxy &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())< 40.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);})
std::vector< TTree * > fTrees
caf::Proxy< float > numuid