46 #include "CAFAna/Core/Binning.h" 52 #include "CAFAna/Core/Var.h" 67 #include "TGraphAsymmErrors.h" 73 #include "G4RwgtPlots/Geant4WeightVars.h" 82 #include "/nova/app/users/csweeney/xsec-TR/Utilities/misc.h" 103 if(sr->
mc.
nnu < 1)
return -5.f;
104 return float(sr->
mc.
nu[0].E);
114 std::string inName =
"/nova/ana/users/csweeney/grid_prod5_g4rwgt_miniprod/*.caf.root";
123 const Var * common_weight =
new Var(kUnity);
128 std::vector<std::vector<Var>> weights_vec{
129 GetkGeantPiplusWeights()
134 std::vector<std::string> myTitle_vec{
135 "Piplus 100 universes" 143 std::vector<std::string> myLabel_vec{
144 "Vertex in X Direction (cm)" 148 std::vector<std::string> myName_vec = {
153 std::vector<Binning> myBins_vec{
158 std::vector<const Var *> kMyVar_vec{
184 std::vector<Multiverse *> mySig_MV_vec;
185 std::vector<Spectrum *> mySig_Spec_vec;
187 std::vector<Multiverse *> mySelsig_MV_vec;
188 std::vector<Spectrum *> mySelsig_Spec_vec;
192 for(
uint i=0;
i<myName_vec.size(); ++
i){
196 const Var * kMyVar = kMyVar_vec[
i];
197 std::vector<Var>
weights = weights_vec[
i];
219 mySig_MV_vec.push_back(mySig_MV);
220 mySig_Spec_vec.push_back(sSig);
226 *kSignal && *kSelection,
234 *kSignal && *kSelection);
235 mySelsig_MV_vec.push_back(mySelsig_MV);
236 mySelsig_Spec_vec.push_back(sSelsig);
247 TFile *
outFile =
new TFile( outName.c_str(),
"recreate");
249 for(
uint i=0;
i< myName_vec.size(); ++
i){
251 TDirectory* base_dir = outFile->mkdir(myName_vec[
i].c_str());
253 mySig_Spec_vec[
i]->SaveTo( base_dir,
"spec_Sig" );
254 mySig_MV_vec[
i]->SaveTo(base_dir,
"mv_Sig");
256 mySelsig_Spec_vec[
i]->SaveTo( base_dir,
"spec_Selsig" );
257 mySelsig_MV_vec[
i]->SaveTo(base_dir,
"mv_Selsig");
const Cut kMyProngQuality([](const caf::SRProxy *sr){if(sr->vtx.elastic.IsValid==false) return false;int nPngs=sr->vtx.elastic.fuzzyk.npng;bool isQuality=(nPngs > 0 && sr->slc.nhit > 20 && sr->slc.ncontplanes > 4);return isQuality;})
_HistAxis< Var > HistAxis
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
Simple record of shifts applied to systematic parameters.
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
caf::Proxy< short int > nnu
_Var< caf::SRProxy > Var
Representation of a variable to be retrieved from a caf::StandardRecord object.
Representation of a spectrum in any variable, with associated POT.
void multiverse_efficiency_macro()
const NuTruthCut kTrueDetector_NT([](const caf::SRNeutrinoProxy *nu){bool fid=(nu->vtx.X()< 192 && nu->vtx.X() >-191 && nu->vtx.Y()< 194 && nu->vtx.Y() >-187 && nu->vtx.Z()< 1270 && nu->vtx.Z() > 0);return fid; })
_Cut< caf::SRProxy > Cut
Representation of a cut (selection) to be applied to a caf::StandardRecord object.
virtual void Go() override
Load all the registered spectra.
std::vector< float > Spectrum
const NuTruthCut kIsNumuCC1Pi_NT([](const caf::SRNeutrinoProxy *nu){int nPions=0;int nMuons=0;int nPrims=nu->prim.size();for(int prim_idx=0;prim_idx< nPrims;prim_idx++){auto &prim=nu->prim[prim_idx];int pdg=prim.pdg;if(abs(pdg)==211)++nPions;else if(pdg==13)++nMuons;}bool is_numucc=nu->iscc &&nu->pdg==14;bool ret=is_numucc &&(nPions==1)&&(nMuons==1);return ret;})
const SystShifts kNoShift
caf::Proxy< caf::SRTruthBranch > mc
const Cut kFiducialRecoVtx([](const caf::SRProxy *sr){if(sr->vtx.elastic.IsValid==false) return false;bool isFid=(sr->vtx.elastic.vtx.x< my_vtxmax.X()&& sr->vtx.elastic.vtx.x > my_vtxmin.X()&& sr->vtx.elastic.vtx.y< my_vtxmax.Y()&& sr->vtx.elastic.vtx.y > my_vtxmin.Y()&& sr->vtx.elastic.vtx.z< my_vtxmax.Z()&& sr->vtx.elastic.vtx.z > my_vtxmin.Z());return isFid;})
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const Var kTrueE_nu([](const caf::SRProxy *sr){if(sr->mc.nnu< 1) return-5.f;return float(sr->mc.nu[0].E);})
const Cut kProngContainment([](const caf::SRProxy *sr) {if(sr->vtx.elastic.IsValid==false) return false;int iMuonPng=kBestMuonPng(sr); for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;++i){const TVector3 start=sr->vtx.elastic.fuzzyk.png[i].shwlid.start;const TVector3 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())< 20.0) return false;if(std::max(start.Z(), stop.Z()) > 1565.0) return false;}int nPngs=sr->vtx.elastic.fuzzyk.npng;if(nPngs< 1) return false;for(int i=0;i< nPngs;++i){if(i==iMuonPng) continue; else if(sr->vtx.elastic.fuzzyk.png[i].shwlid.start.Z() > 1275|| sr->vtx.elastic.fuzzyk.png[i].shwlid.stop.Z() > 1275) return false;} if(iMuonPng< 0||iMuonPng > nPngs) return false;auto &muon_prong=sr->vtx.elastic.fuzzyk.png[iMuonPng]; if(muon_prong.bpf.muon.IsValid==false) return false;auto &muon_bpf=muon_prong.bpf.muon;bool ret=((muon_bpf.stop.z< 1275||muon_bpf.trkyposattrans< 55)
&&muon_bpf.trkfwdcellnd > 5 &&muon_bpf.trkbakcellnd > 10);return ret;})
Var kUnity([](const caf::SRProxy *sr){return 1.f;})
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
Cut CutFromNuTruthCut(const NuTruthCut &stc)