12 const BPFVars emptyBPF{ 0.0, 0.0, { 0, 0, 0 } };
13 std::array<BPFVars, N_BPF>
result;
29 if (! prongBPF_fmp.isValid()) {
33 auto tracks = prongBPF_fmp.at(pngIdx);
39 if (! trackFits_fmp.isValid()) {
47 if (
N_BPF != tracks.size()) {
51 for (
size_t trackIdx = 0; trackIdx < tracks.size(); trackIdx++)
53 auto trackFits = trackFits_fmp.at(trackIdx);
54 if (trackFits.empty()) {
60 result[trackIdx].momentum[0] = fit.
FourMom().Px();
61 result[trackIdx].momentum[1] = fit.
FourMom().Py();
62 result[trackIdx].momentum[2] = fit.
FourMom().Pz();
63 result[trackIdx].energy = fit.
FourMom().E();
65 if (trackOverlapE_fmp.isValid())
67 auto overlapEnergies = trackOverlapE_fmp.at(trackIdx);
68 if (! overlapEnergies.empty()) {
69 result[trackIdx].overlapE = overlapEnergies[0]->E();
87 for (
size_t pngIdx = 0; pngIdx < pngVars.
prongs.size(); pngIdx++) {
93 std::unordered_map<
std::string, std::vector<double>> &dict,
98 std::array<std::vector<double>,
N_BPF> overlapE;
99 std::array<std::vector<double>,
N_BPF> momentum_x;
100 std::array<std::vector<double>,
N_BPF> momentum_y;
101 std::array<std::vector<double>,
N_BPF> momentum_z;
103 for (
size_t bpfIdx = 0; bpfIdx <
N_BPF; bpfIdx++)
105 energy[bpfIdx] .reserve(
bpfVars.size());
106 overlapE[bpfIdx] .reserve(
bpfVars.size());
107 momentum_x[bpfIdx].reserve(
bpfVars.size());
108 momentum_y[bpfIdx].reserve(
bpfVars.size());
109 momentum_z[bpfIdx].reserve(
bpfVars.size());
114 for (
size_t bpfIdx = 0; bpfIdx <
N_BPF; bpfIdx++)
116 energy[bpfIdx] .push_back(
bpf[bpfIdx].energy);
117 overlapE[bpfIdx] .push_back(
bpf[bpfIdx].overlapE);
118 momentum_x[bpfIdx].push_back(
bpf[bpfIdx].
momentum[0]);
119 momentum_y[bpfIdx].push_back(
bpf[bpfIdx].momentum[1]);
120 momentum_z[bpfIdx].push_back(
bpf[bpfIdx].momentum[2]);
124 for (
size_t bpfIdx = 0; bpfIdx <
N_BPF; bpfIdx++)
129 dict.emplace(fullPrefix +
"energy", std::move(energy[bpfIdx]));
130 dict.emplace(fullPrefix +
"overlapE", std::move(overlapE[bpfIdx]));
131 dict.emplace(fullPrefix +
"momentum.x", std::move(momentum_x[bpfIdx]));
132 dict.emplace(fullPrefix +
"momentum.y", std::move(momentum_y[bpfIdx]));
133 dict.emplace(fullPrefix +
"momentum.z", std::move(momentum_z[bpfIdx]));
std::string overlapEBPFLabel
void saveToDict(std::unordered_map< std::string, std::vector< double >> &dict, const std::string &prefix) const
static std::array< BPFVars, N_BPF > getEmptyBPFVars()
ProngBPFVars(const art::Event &evt, const BasicProngVars &pngVars, const Config &config)
const TLorentzVector FourMom() const
std::vector< std::array< BPFVars, N_BPF > > bpfVars
std::vector< art::Ptr< rb::Prong > > prongs
std::string prongBPFLabel
std::array< BPFVars, N_BPF > getBPFVars(const art::Event &evt, const art::FindManyP< rb::Track > &prongBPF_fmp, size_t pngIdx)
std::string overlapELabel
void init(const art::Event &evt, const BasicProngVars &pngVars)
std::string to_string(ModuleType mt)
A container for kinematic information.