6 #include "CAFAna/Core/HistAxis.h" 10 #include "CAFAna/Core/Binning.h" 11 #include "CAFAna/Core/Cut.h" 17 #include "CAFAna/Cuts/NueCutsSecondAna.h" 21 #include "TStopwatch.h" 23 #include "Utilities/func/MathUtil.h" 41 if(sr->
mc.
nnu == 0)
return false;
43 return (
abs(sr->
mc.
nu[0].pdg) == 14);
49 if(sr->
mc.
nnu == 0)
return false;
51 return (
abs(sr->
mc.
nu[0].pdg) == 12);
59 if(
fabs(sr->
mc.
nu[0].vtx.X())>180||
fabs(sr->
mc.
nu[0].vtx.Y())>180||sr->
mc.
nu[0].vtx.Z()<0||sr->
mc.
nu[0].vtx.Z()>1250)
return true;
66 if(sr->
mc.
nnu!=1)return (
float)-5.0;
67 return (
float)sr->
mc.
nu[0].E;
71 std::vector<Var> kPPFXFluxUnivWgt;
73 for(
unsigned int UnivIdx = 0; UnivIdx < 100; UnivIdx++){
75 const Var tempPPFXWgt(
79 if(sr->
mc.
nu[0].rwgt.ppfx.vuniv[UnivIdx] <= 0)
return 1.f;
80 return (
float)sr->
mc.
nu[0].rwgt.ppfx.vuniv[UnivIdx];
83 kPPFXFluxUnivWgt.push_back(tempPPFXWgt);
95 std::vector <CompDef>
comps = {
99 {
"anue",
kIsNue && kIsAntiNu},
102 std::map<std::string, Spectrum*> spects;
104 const std::string nearNonSFHC =
"prod_caf_R17-11-14-prod4reco.d_nd_genie_nonswap_fhc_nova_v08_full_v1";
105 const std::string farNonSFHC =
"prod_caf_R17-11-14-prod4reco.d_fd_genie_nonswap_fhc_nova_v08_full_v1";
106 const std::string nearNonSRHC =
"prod_caf_R17-11-14-prod4reco.e_nd_genie_nonswap_rhc_nova_v08_full_v1";
107 const std::string farNonSRHC =
"prod_caf_R17-11-14-prod4reco.e_fd_genie_nonswap_rhc_nova_v08_full_v1";
120 for(
int compIdx = 0; compIdx < (
int) comps.size(); ++compIdx){
126 spects.insert(
std::make_pair(
"unweighted_FHC_ND_"+comps[compIdx].
name, temp_unweighted_ndFHC));
127 spects.insert(
std::make_pair(
"unweighted_FHC_FD_"+comps[compIdx].name, temp_unweighted_fdFHC));
128 spects.insert(
std::make_pair(
"unweighted_RHC_ND_"+comps[compIdx].name, temp_unweighted_ndRHC));
129 spects.insert(
std::make_pair(
"unweighted_RHC_FD_"+comps[compIdx].name, temp_unweighted_fdRHC));
136 spects.insert(
std::make_pair(
"ppfx_cv_FHC_ND_"+comps[compIdx].name, temp_ppfx_cv_ndFHC));
137 spects.insert(
std::make_pair(
"ppfx_cv_FHC_FD_"+comps[compIdx].name, temp_ppfx_cv_fdFHC));
138 spects.insert(
std::make_pair(
"ppfx_cv_RHC_ND_"+comps[compIdx].name, temp_ppfx_cv_ndRHC));
139 spects.insert(
std::make_pair(
"ppfx_cv_RHC_FD_"+comps[compIdx].name, temp_ppfx_cv_fdRHC));
141 for(
int UnivIdx = 0; UnivIdx <
N_PPFX; UnivIdx++){
142 const Var kPPFXFluxWgt = kPPFXFluxUnivWgt[UnivIdx];
143 Spectrum* temp_ppfx_univ_ndFHC =
new Spectrum(loaderNDMCFHC, TrueEAxis, comps[compIdx].cut && !kIsRock,
kNoShift, kPPFXFluxWgt);
144 Spectrum* temp_ppfx_univ_fdFHC =
new Spectrum(loaderFDMCFHC, TrueEAxis, comps[compIdx].cut,
kNoShift, kPPFXFluxWgt);
145 Spectrum* temp_ppfx_univ_ndRHC =
new Spectrum(loaderNDMCRHC, TrueEAxis, comps[compIdx].cut && !kIsRock,
kNoShift, kPPFXFluxWgt);
146 Spectrum* temp_ppfx_univ_fdRHC =
new Spectrum(loaderFDMCRHC, TrueEAxis, comps[compIdx].cut,
kNoShift, kPPFXFluxWgt);
148 int dig0 = UnivIdx % 10;
149 int dig1 = (UnivIdx/10) % 10;
169 TFile*
fout =
new TFile(filename.c_str(),
"RECREATE");
170 std::for_each(spects.begin(), spects.end(),
171 [&](std::pair<std::string, Spectrum*> spect){
172 spect.second->SaveTo(fout, spect.first.c_str());
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
fvar< T > fabs(const fvar< T > &x)
caf::Proxy< caf::SRHeader > hdr
const Cut kIsNumu([](const caf::SRProxy *sr){return(sr->mc.nnu==1 &&abs(sr->mc.nu[0].pdg)==14);})
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
const Cut kIsAntiNu([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return sr->mc.nu[0].pdg< 0;})
Is this truly an antineutrino?
caf::Proxy< short int > nnu
void SetSpillCut(const SpillCut &cut)
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
Representation of a spectrum in any variable, with associated POT.
const unsigned int N_PPFX
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.
const Cut kIsNue([](const caf::SRProxy *sr){return(sr->mc.nnu==1 &&abs(sr->mc.nu[0].pdg)==12);})
virtual void Go() override
Load all the registered spectra.
std::vector< std::string > comps
std::vector< float > Spectrum
void ppfx_smooth_weights_save()
const SystShifts kNoShift
caf::Proxy< caf::SRTruthBranch > mc
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
assert(nhit_max >=nhit_nbins)
std::string to_string(ModuleType mt)
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
const Var kUnweighted
The simplest possible Var, always 1. Used as a default weight.