23 covmx::Sample sample = opt.Contains(
"neardet", TString::kIgnoreCase) ?
34 std::vector<std::tuple<SpectrumLoaderBase*, const Cut, std::string>>
components;
41 components.push_back(std::make_tuple(nonswap,
kIsBeamNue &&
kIsAntiNu,
"cc_nuebar_to_nuebar" ));
42 components.push_back(std::make_tuple(nonswap,
kIsNumuCC && !
kIsAntiNu,
"cc_numu_to_numu" ));
43 components.push_back(std::make_tuple(nonswap,
kIsNumuCC &&
kIsAntiNu,
"cc_numubar_to_numubar"));
44 components.push_back(std::make_tuple(nonswap,
kIsNC,
"nc" ));
52 components.push_back(std::make_tuple(swap,
kIsSig && !
kIsAntiNu,
"cc_numu_to_nue" ));
53 components.push_back(std::make_tuple(swap,
kIsSig &&
kIsAntiNu,
"cc_numubar_to_nuebar" ));
55 components.push_back(std::make_tuple(swap,
kIsNumuApp &&
kIsAntiNu,
"cc_nuebar_to_numubar" ));
63 std::vector<Var> kPPFXFluxUnivWgts;
64 for (
size_t i = 0;
i < 100; ++
i) {
67 if (sr->
mc.
nnu != 1)
return 1.f;
68 if (sr->
mc.
nu[0].rwgt.ppfx.vuniv[
i] <= 0)
return 1.f;
69 return (
float)sr->
mc.
nu[0].rwgt.ppfx.vuniv[
i];
71 kPPFXFluxUnivWgts.push_back(tempPPFXWgt);
80 std::vector<Spectrum*> nominal(components.size());
81 std::vector<std::vector<Spectrum*> > ppfx(components.size(),
82 std::vector<Spectrum*>(kPPFXFluxUnivWgts.size(),
nullptr));
85 for (
size_t c = 0;
c < components.size(); ++
c) {
88 nominal[
c] =
new Spectrum(*std::get<0>(components[
c]),
89 axis, sel && std::get<1>(components[c]),
kNoShift, kReweight);
92 for (
size_t u = 0;
u < 100; ++
u)
93 ppfx[c][
u] =
new Spectrum(*std::get<0>(components[c]),
102 TFile*
f = TFile::Open(fileName.c_str(),
"recreate");
105 TDirectory*
dir = outDir->mkdir(
"nominal");
106 for (
size_t c = 0;
c < components.size(); ++
c) {
107 nominal[
c]->SaveTo(dir->mkdir(std::get<2>(components[
c]).c_str()));
110 dir = outDir->mkdir(
"ppfx");
111 for (
size_t u = 0;
u < 100; ++
u) {
112 TDirectory* udir = dir->mkdir(Form(
"u%zu",
u+1));
113 for (
size_t c = 0;
c < components.size(); ++
c) {
114 ppfx[
c][
u]->SaveTo(udir->mkdir(std::get<2>(components[
c]).c_str()));
Near Detector underground.
const Cut kIsNumuCC(CCFlavSel(14, 14))
Select CC .
Far Detector at Ash River.
Cuts and Vars for the 2020 FD DiF Study.
caf::Proxy< caf::SRHeader > hdr
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?
const Cut kIsBeamNue(CCFlavSel(12, 12))
Select CC .
const Cut kIsNumuApp(CCFlavSel(14, 12))
Select CC .
std::string GetTag() const
caf::Proxy< short int > nnu
void Go()
Call Go() on all the loaders.
void SetSpillCut(const SpillCut &cut)
const Cut kIsTauFromE(CCFlavSel(16, 12))
Select CC .
const Cut kIsTauFromMu(CCFlavSel(16, 14))
Select CC .
const Cut kIsNC([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return!sr->mc.nu[0].iscc;})
Is this a Neutral Current event?
SpectrumLoaderBase & GetLoader(caf::Det_t det, DataMC datamc, DataSource src=kBeam, SwappingConfig swap=kNonSwap)
Retrieve a specific loader.
const Cut kIsSig(CCFlavSel(12, 14))
Select CC .
void MakePPFXRatios(std::string detector, int job, bool concat=true, bool rhc=false)
const Var kXSecCVWgt2018RPAFix
const covmx::Sample kNusFHCFarDet(covmx::Analysis::kNC, covmx::Polarity::kFHC, covmx::Detector::kFarDet)
const Cut kNus18ND
Full Nus18 ND analysis selection.
std::vector< float > Spectrum
const SystShifts kNoShift
Base class for the various types of spectrum loader.
caf::Proxy< caf::SRTruthBranch > mc
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
For nominal spectra and reweighting systs (xsec/flux)
const covmx::Sample kNusFHCNearDet(covmx::Analysis::kNC, covmx::Polarity::kFHC, covmx::Detector::kNearDet)