8 #include "3FlavorAna/Cuts/NueCutsSecondAna.h" 29 return (sr->
sel.cvn2017.nueid);
33 return (sr->
sel.cvnProd3Train.nueid);
42 if (sr->
vtx.nelastic < 1)
return -1000.f;
46 float maxProngCVNe = -5.;
47 for(
int iProng = 0; iProng < nProngs; iProng++){
48 if(sr->vtx.elastic[0].fuzzyk.png[iProng].cvnpart.electronid >
51 sr->vtx.elastic[0].fuzzyk.png[iProng].cvnpart.electronid;
87 std::vector<Cut> template_cuts;
89 template_cuts.push_back(
chns[
i].
cut);
93 NueCCIncCrossSectionAnalysis nominal_ana(lNDMC,
111 NueCCIncCrossSectionTemplates nominal_templates(lNDMC,
124 NueCCIncCrossSectionAnalysis light_dwn_ana(lNDLightDwn,
139 kXSecCVWgt2018_smallerDISScale_NT,
142 NueCCIncCrossSectionAnalysis light_up_ana(lNDLightUp,
157 kXSecCVWgt2018_smallerDISScale_NT,
160 NueCCIncCrossSectionAnalysis calib_dwn_ana(lNDCalibDwn,
175 kXSecCVWgt2018_smallerDISScale_NT,
178 NueCCIncCrossSectionAnalysis calib_up_ana(lNDCalibUp,
193 kXSecCVWgt2018_smallerDISScale_NT,
196 NueCCIncCrossSectionAnalysis ckv_ana(lNDCkv,
211 kXSecCVWgt2018_smallerDISScale_NT,
214 NueCCIncCrossSectionAnalysis
215 calib_shape_ana(lNDCalibShape,
230 kXSecCVWgt2018_smallerDISScale_NT,
234 std::vector<NueCCIncCrossSectionAnalysis*> genie_universes_ana;
235 std::vector<NueCCIncCrossSectionAnalysis*> ppfx_universes_ana;
240 std::vector<ana::SystShifts> genie_shifts = verse.
GetSystShifts();
242 for(
int i = 0; i < 100; i++){
244 genie_universes_ana.push_back(
new NueCCIncCrossSectionAnalysis
260 kXSecCVWgt2018_smallerDISScale_NT,
263 ppfx_universes_ana.push_back(
new NueCCIncCrossSectionAnalysis
279 kXSecCVWgt2018_smallerDISScale_NT,
280 ppfx_univ[i] * kXSecCVWgt2018));
293 TFile*
fout =
new TFile(
"fAnalysisSpectra.root",
"recreate");
296 TDirectory* nom_dir = fout->mkdir(Form(
"%s",
"Nominal"));
298 nominal_ana.SaveTo(nom_dir->mkdir(
"Analysis"));
299 nominal_templates.SaveTo(nom_dir->mkdir(
"Templates"));
301 TDirectory* light_dwn_dir = fout->mkdir(Form(
"%s",
"LightDwn"));
303 light_dwn_ana.SaveTo(light_dwn_dir->mkdir(
"Analysis"));
305 TDirectory* light_up_dir = fout->mkdir(Form(
"%s",
"LightUp"));
307 light_up_ana.SaveTo(light_up_dir->mkdir(
"Analysis"));
309 TDirectory* calib_dwn_dir = fout->mkdir(Form(
"%s",
"CalibDwn"));
311 calib_dwn_ana.SaveTo(calib_dwn_dir->mkdir(
"Analysis"));
313 TDirectory* calib_up_dir = fout->mkdir(Form(
"%s",
"CalibUp"));
315 calib_up_ana.SaveTo(calib_up_dir->mkdir(
"Analysis"));
317 TDirectory* calib_shape_dir = fout->mkdir(Form(
"%s",
"CalibShape"));
318 calib_shape_dir->cd();
319 calib_shape_ana.SaveTo(calib_shape_dir->mkdir(
"Analysis"));
321 TDirectory* ckv_dir = fout->mkdir(Form(
"%s",
"Ckv"));
323 ckv_ana.SaveTo(ckv_dir->mkdir(
"Analysis"));
325 TDirectory*
genie_dir = fout->mkdir(Form(
"%s",
"GENIE"));
327 for(
int i = 0; i < 100; i++){
328 genie_universes_ana[
i]->SaveTo(genie_dir->mkdir(Form(
"%s_%i",
"Universe",i)));
331 TDirectory* ppfx_dir = fout->mkdir(Form(
"%s",
"PPFX"));
333 for(
int i = 0; i < 100; i++){
334 ppfx_universes_ana[
i]->SaveTo(ppfx_dir->mkdir(Form(
"%s_%i",
"Universe",i)));
caf::Proxy< size_t > npng
const std::string UPLightFiles_full_prod4_CVNProng
caf::Proxy< caf::SRFuzzyK > fuzzyk
const NuTruthCut kIsTrueSigST
Cuts and Vars for the 2020 FD DiF Study.
std::vector< const ISyst * > getAllXsecSysts_2018()
Get master XSec syst list for 2018 analyses.
const std::string DWNLightFiles_full_prod4_CVNProng
const Var kcvn2017([](const caf::SRProxy *sr){return(sr->sel.cvn2017.nueid);})
const Var klid([](const caf::SRProxy *sr){return sr->sel.lid.ann;})
const SelDef chns[knumchns]
const TVector3 vtxmin(-130,-176, 225)
Proxy for caf::StandardRecord.
const mHistAxisSTDef analysis_vars_truth[kvAnalysisVarsST]
void SetSpillCut(const SpillCut &cut)
const std::string CherenkovFiles_full_prod4_CVNProng
std::vector< Var > GetkPPFXFluxUnivWgt()
const ana::Binning pidbins
caf::Proxy< caf::SRElastic > elastic
const Var kprongCVN([](const caf::SRProxy *sr){if(sr->vtx.nelastic< 1) return-1000.f;if(sr->vtx.elastic[0].fuzzyk.npng< 1) return-1000.f;int nProngs=sr->vtx.elastic[0].fuzzyk.npng;float maxProngCVNe=-5.;for(int iProng=0;iProng< nProngs;iProng++){if(sr->vtx.elastic[0].fuzzyk.png[iProng].cvnpart.electronid >maxProngCVNe){maxProngCVNe=sr->vtx.elastic[0].fuzzyk.png[iProng].cvnpart.electronid;}}return maxProngCVNe;})
const mHistAxisDef analysis_vars[6]
caf::Proxy< caf::SRCVNResult > cvn
caf::Proxy< float > nueid
virtual void Go() override
Load all the registered spectra.
std::vector< NuTruthVar > GetkPPFXFluxUnivWgtST()
const NuTruthVar kXSecCVWgt2018_smallerDISScale_NT
const Var kcvnProd3([](const caf::SRProxy *sr){return(sr->sel.cvnProd3Train.nueid);})
const SystShifts kNoShift
caf::Proxy< caf::SRELid > lid
const HistAxis kRecoElecEVsCosStandardAxis("Reconstructed E_{e} vs cos #theta; Elec_{e} (GeV); cos #{theta}", double_diff_bins, kRecoElecEVsCos)
const std::string ShapeCalibFiles_full_prod4_CVNProng
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
std::vector< SystShifts > GetSystShifts()
string genie_dir(std::getenv("GENIE"))
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
caf::Proxy< caf::SRIDBranch > sel
const NuTruthHistAxis kTrueElecEVsCosStandardAxisST("True E_{e} vs cos #theta;cs Elec_{e} (GeV); cos #{theta}", double_diff_bins, kTrueElecEVsCosST)
const std::string NominalMC_full_prod4_CVNProng
caf::Proxy< caf::SRVertexBranch > vtx
const TVector3 vtxmax(160, 160, 1000)
const std::string DWNCalibFiles_full_prod4_CVNProng
void getCrossSectionAnalysisSpectra()
const Var kcvn([](const caf::SRProxy *sr){return(sr->sel.cvn.nueid);})
const std::string UPCalibFiles_full_prod4_CVNProng
const NuTruthVar kPPFXFluxCVWgtST([](const caf::SRNeutrinoProxy *nu){ if(nu->rwgt.ppfx.cv!=nu->rwgt.ppfx.cv){return 1.f;}if(nu->rwgt.ppfx.cv >90){return 1.f;}return float(nu->rwgt.ppfx.cv);})
weight events with the flux PPFX Central value correction.
const mHistAxisDef pid_vars[kNumPIDVars]