27int main(
int argc,
char** argv)
32 char const* inFileName = argc > argi ? argv[argi++] :
"data.hipo";
33 int const numEvents = argc > argi ? std::stoi(argv[argi++]) : 1;
36 hipo::reader reader(inFileName,{0});
39 hipo::banklist banks = reader.getBanks({
48 auto b_particle = hipo::getBanklistIndex(banks,
"REC::Particle");
49 auto b_config = hipo::getBanklistIndex(banks,
"RUN::config");
50 auto b_track = hipo::getBanklistIndex(banks,
"REC::Track");
51 auto b_calorimeter = hipo::getBanklistIndex(banks,
"REC::Calorimeter");
52 auto b_scintillator = hipo::getBanklistIndex(banks,
"REC::Scintillator");
64 algo_eventbuilder_filter.
SetOption(
"log",
"info");
65 algo_sector_finder.
SetOption(
"log",
"info");
66 algo_momentum_correction.
SetOption(
"log",
"info");
69 algo_eventbuilder_filter.
SetOption<std::vector<int>>(
"pids", {11, 211, -211});
72 algo_eventbuilder_filter.
Start();
73 algo_sector_finder.
Start();
74 algo_momentum_correction.
Start();
78 while(reader.next(banks) && (numEvents == 0 || iEvent++ < numEvents)) {
81 auto& particleBank = banks.at(b_particle);
82 auto& configBank = banks.at(b_config);
83 auto& trackBank = banks.at(b_track);
84 auto& calorimeterBank = banks.at(b_calorimeter);
85 auto& scintillatorBank = banks.at(b_scintillator);
91 fmt::print(
"evnum = {}\n", configBank.getInt(
"event", 0));
97 std::vector<int> trackBank_sectors;
98 std::vector<int> trackBank_pindices;
99 std::vector<int> calorimeterBank_sectors;
100 std::vector<int> calorimeterBank_pindices;
101 std::vector<int> scintillatorBank_sectors;
102 std::vector<int> scintillatorBank_pindices;
103 for(
auto const& r : trackBank.getRowList()) {
104 trackBank_sectors.push_back(trackBank.getByte(
"sector", r));
105 trackBank_pindices.push_back(trackBank.getShort(
"pindex", r));
107 for(
auto const& r : calorimeterBank.getRowList()) {
108 calorimeterBank_sectors.push_back(calorimeterBank.getByte(
"sector", r));
109 calorimeterBank_pindices.push_back(calorimeterBank.getShort(
"pindex", r));
111 for(
auto const& r : scintillatorBank.getRowList()) {
112 scintillatorBank_sectors.push_back(scintillatorBank.getByte(
"sector", r));
113 scintillatorBank_pindices.push_back(scintillatorBank.getShort(
"pindex", r));
117 for(
auto const& row : particleBank.getRowList()) {
120 auto pid = particleBank.getInt(
"pid", row);
121 if(algo_eventbuilder_filter.
Filter(pid)) {
128 calorimeterBank_sectors,
129 calorimeterBank_pindices,
130 scintillatorBank_sectors,
131 scintillatorBank_pindices,
135 auto [px, py, pz] = algo_momentum_correction.
Transform(
136 particleBank.getFloat(
"px", row),
137 particleBank.getFloat(
"py", row),
138 particleBank.getFloat(
"pz", row),
141 configBank.getFloat(
"torus", 0));
144 fmt::print(
"Particle PDG = {}\n", pid);
145 fmt::print(
" sector = {}\n", sector);
146 fmt::print(
" p_old = ({}, {}, {})\n", particleBank.getFloat(
"px", row), particleBank.getFloat(
"py", row), particleBank.getFloat(
"pz", row));
147 fmt::print(
" p_new = ({}, {}, {})\n", px, py, pz);
153 algo_eventbuilder_filter.
Stop();
154 algo_momentum_correction.
Stop();
int GetStandardSector(std::vector< int > const §ors_track, std::vector< int > const &pindices_track, std::vector< int > const §ors_cal, std::vector< int > const &pindices_cal, std::vector< int > const §ors_scint, std::vector< int > const &pindices_scint, int const &pindex_particle) const
Action Function: for a given particle with index pindex_particle, get its sector from using the stand...