9 #include "3FlavorAna/Cuts/NueCutsSecondAna.h" 28 return (sr->
sel.cvn2017.nueid);
32 return (sr->
sel.cvnProd3Train.nueid);
41 if (sr->
vtx.nelastic < 1)
return -1000.f;
45 float maxProngCVNe = -5.;
46 for(
int iProng = 0; iProng < nProngs; iProng++){
47 if(sr->vtx.elastic[0].fuzzyk.png[iProng].cvnpart.electronid >
50 sr->vtx.elastic[0].fuzzyk.png[iProng].cvnpart.electronid;
74 if(sr->
mc.
nnu == 0)
return 0.;
76 if( (sr->
mc.
nu[0].iscc)
77 && (
abs(sr->
mc.
nu[0].pdg) == 12))
return 1.06;
83 if(sr->
mc.
nnu == 0)
return 1;
85 double q2 = sr->
mc.
nu[0].q2;
86 if(
q2 < 0)
return 1.0;
87 double wt = 0.8 + (
q2*0.08);
88 if (wt <= 0) wt = 1.0;
96 && (
abs(sr->
pdg) == 12))
return 1.06;
103 if(q2 < 0)
return 1.0;
104 double wt = 0.8 + (q2*0.08);
105 if (wt <= 0) wt = 1.0;
112 std::vector<std::string> dataset_labels = {
"nominal",
"fakedata",
113 "fakedata_q2",
"fakedata_sig"};
131 kXSecCVWgt2018_smallerDISScale_NT *
134 kXSecCVWgt2018_smallerDISScale_NT *
139 std::vector<ana::SpectrumLoaderBase*>
loaders;
140 for(
uint idataset = 0; idataset < 4; ++idataset){
142 uint holder = idataset;
143 if(idataset > 0) idataset = 1;
146 loaders.push_back(loader);
150 std::vector<std::vector<ana::Spectrum*>> spec_analysis_3d;
151 std::vector<ana::Spectrum*> spec_template;
152 std::vector<ana::Spectrum*> spec_unfolding_1d;
153 std::vector<ana::Spectrum*> spec_unfolding_2d;
154 std::vector<ana::Spectrum*> spec_efficiency_num_1d;
155 std::vector<ana::Spectrum*> spec_efficiency_num_2d;
156 std::vector<ana::Spectrum*> spec_efficiency_denom_1d;
157 std::vector<ana::Spectrum*> spec_efficiency_denom_2d;
162 for(
uint iload = 0; iload < loaders.size(); ++iload){
164 std::vector<ana::Spectrum*> vspec_analysis_3d;
165 for(
int ichn = 0; ichn <
kcNumChns; ichn++){
166 vspec_analysis_3d.push_back(
new Spectrum(*loaders[iload],
174 spec_analysis_3d.push_back(vspec_analysis_3d);
177 spec_template.push_back(
new Spectrum(*loaders[iload],
185 spec_unfolding_1d.push_back(
new Spectrum(*loaders[iload],
192 spec_unfolding_2d.push_back(
new Spectrum(*loaders[iload],
199 spec_efficiency_num_1d.push_back(
new Spectrum(*loaders[iload],
205 spec_efficiency_num_2d.push_back(
new Spectrum(*loaders[iload],
211 spec_efficiency_denom_1d.push_back(
new Spectrum(*loaders[iload],
216 spec_efficiency_denom_2d.push_back(
new Spectrum(*loaders[iload],
223 for(
uint iload = 0; iload < loaders.size(); ++iload){
224 loaders[iload]->Go();
229 new TFile(
"fCrossSection_Nominal_FakeData_prongcvn_new.root",
"recreate");
231 for(
uint iload = 0; iload < loaders.size(); ++iload){
232 for(
int ichn = 0; ichn <
kcNumChns; ichn++){
234 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
235 "analysis",
chns[ichn].name.c_str());
236 spec_analysis_3d[iload][ichn]->SaveTo(outf, name);
240 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
242 spec_template[iload]->SaveTo(outf, name);
243 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
245 spec_unfolding_1d[iload]->SaveTo(outf, name);
246 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
248 spec_unfolding_2d[iload]->SaveTo(outf, name);
249 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
250 "efficiency",
"num_1d");
251 spec_efficiency_num_1d[iload]->SaveTo(outf, name);
252 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
253 "efficiency",
"num_2d");
254 spec_efficiency_num_2d[iload]->SaveTo(outf, name);
255 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
256 "efficiency",
"denom_1d");
257 spec_efficiency_denom_1d[iload]->SaveTo(outf, name);
258 sprintf(name,
"%s_%s_%s_%s",
"mc", dataset_labels[iload].c_str(),
259 "efficiency",
"denom_2d");
260 spec_efficiency_denom_2d[iload]->SaveTo(outf, name);
caf::Proxy< size_t > npng
const std::string NominalMC_entire_RHC_prod4
caf::Proxy< caf::SRFuzzyK > fuzzyk
const NuTruthCut kIsTrueSigST
const Var klid([](const caf::SRProxy *sr){return sr->sel.lid.ann;})
Cuts and Vars for the 2020 FD DiF Study.
const Var kcvn([](const caf::SRProxy *sr){return(sr->sel.cvn.nueid);})
const SelDef chns[knumchns]
Proxy for caf::SRNeutrino.
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
const Var kcvnProd3([](const caf::SRProxy *sr){return(sr->sel.cvnProd3Train.nueid);})
std::vector< Dataset > datasets
const mHistAxisSTDef analysis_vars_truth[kvAnalysisVarsST]
const mHistAxisDef pid_vars[kNumPIDVars]
caf::Proxy< short int > nnu
void SetSpillCut(const SpillCut &cut)
std::vector< Var > GetkPPFXFluxUnivWgt()
const ana::Binning pidbins
caf::Proxy< caf::SRElastic > elastic
void getCrossSectionAnalysis_Spectra()
const Var kcvn2017([](const caf::SRProxy *sr){return(sr->sel.cvn2017.nueid);})
const mHistAxisDef analysis_vars[6]
caf::Proxy< caf::SRCVNResult > cvn
caf::Proxy< float > nueid
HistAxis HistAxisFromNuTruthHistAxis(NuTruthHistAxis ntha, double _default)
std::vector< NuTruthVar > GetkPPFXFluxUnivWgtST()
const NuTruthVar kXSecCVWgt2018_smallerDISScale_NT
const HistAxis kTrueElecEVsCosStandardAxis
std::vector< float > Spectrum
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 Var kQ2Wgt([](const caf::SRProxy *sr) ->float{if(sr->mc.nnu==0) return 1;double q2=sr->mc.nu[0].q2;if(q2< 0) return 1.0;double wt=0.8+(q2 *0.08);if(wt<=0) wt=1.0;return wt;})
const SystShifts kNoShift
caf::Proxy< caf::SRELid > lid
Base class for the various types of spectrum loader.
const HistAxis kRecoElecEVsCosStandardAxis("Reconstructed E_{e} vs cos #theta; Elec_{e} (GeV); cos #{theta}", double_diff_bins, kRecoElecEVsCos)
caf::Proxy< caf::SRTruthBranch > mc
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
assert(nhit_max >=nhit_nbins)
const NuTruthVar kQ2WgtNT([](const caf::SRNeutrinoProxy *sr) ->float{double q2=sr->q2;if(q2< 0) return 1.0;double wt=0.8+(q2 *0.08);if(wt<=0) wt=1.0;return wt;})
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
caf::Proxy< short int > pdg
caf::Proxy< caf::SRIDBranch > sel
const NuTruthHistAxis kTrueElecEVsCosStandardAxisST("True E_{e} vs cos #theta;cs Elec_{e} (GeV); cos #{theta}", double_diff_bins, kTrueElecEVsCosST)
caf::Proxy< caf::SRVertexBranch > vtx
const Var kMySignalWgt([](const caf::SRProxy *sr) ->float{if(sr->mc.nnu==0) return 0.;assert(sr->mc.nnu==1);if((sr->mc.nu[0].iscc) &&(abs(sr->mc.nu[0].pdg)==12)) return 1.06;else return 1.;})
const NuTruthVar kMySignalWgtNT([](const caf::SRNeutrinoProxy *sr) ->float{if((sr->iscc) &&(abs(sr->pdg)==12)) return 1.06;else return 1.;})
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.
Cut CutFromNuTruthCut(const NuTruthCut &stc)