27int main(
int argc,
char** argv)
31 char const* inFileName = argc > 1 ? argv[1] :
"data.hipo";
32 int const numEvents = argc > 2 ? std::stoi(argv[2]) : 3;
35 hipo::reader reader(inFileName, {0});
38 hipo::banklist banks = reader.getBanks({
"REC::Particle",
42 "REC::Scintillator"});
53 iguana::GlobalConcurrencyModel =
"single";
65 std::string config_file =
"examples/config_for_examples.yaml";
71 algo_eventbuilder_filter.
Start();
72 algo_sector_finder.
Start();
73 algo_momentum_correction.
Start();
77 while(reader.next(banks) && (numEvents == 0 || iEvent++ < numEvents)) {
80 auto& particleBank = banks.at(b_particle);
81 auto& configBank = banks.at(b_config);
82 auto& trackBank = banks.at(b_track);
83 auto& calorimeterBank = banks.at(b_calorimeter);
84 auto& scintillatorBank = banks.at(b_scintillator);
90 fmt::print(
"evnum = {}\n", configBank.getInt(
"event", 0));
96 std::vector<int> trackBank_sectors;
97 std::vector<int> trackBank_pindices;
98 std::vector<int> calorimeterBank_sectors;
99 std::vector<int> calorimeterBank_pindices;
100 std::vector<int> scintillatorBank_sectors;
101 std::vector<int> scintillatorBank_pindices;
102 for(
auto const& r : trackBank.getRowList()) {
103 trackBank_sectors.push_back(trackBank.getByte(
"sector", r));
104 trackBank_pindices.push_back(trackBank.getShort(
"pindex", r));
106 for(
auto const& r : calorimeterBank.getRowList()) {
107 calorimeterBank_sectors.push_back(calorimeterBank.getByte(
"sector", r));
108 calorimeterBank_pindices.push_back(calorimeterBank.getShort(
"pindex", r));
110 for(
auto const& r : scintillatorBank.getRowList()) {
111 scintillatorBank_sectors.push_back(scintillatorBank.getByte(
"sector", r));
112 scintillatorBank_pindices.push_back(scintillatorBank.getShort(
"pindex", r));
116 for(
auto const& row : particleBank.getRowList()) {
119 auto pid = particleBank.getInt(
"pid", row);
120 if(algo_eventbuilder_filter.
Filter(pid)) {
127 calorimeterBank_sectors,
128 calorimeterBank_pindices,
129 scintillatorBank_sectors,
130 scintillatorBank_pindices,
134 auto [px, py, pz] = algo_momentum_correction.
Transform(
135 particleBank.getFloat(
"px", row),
136 particleBank.getFloat(
"py", row),
137 particleBank.getFloat(
"pz", row),
140 configBank.getFloat(
"torus", 0));
143 fmt::print(
"Analysis Particle PDG = {}\n", pid);
144 fmt::print(
" sector = {}\n", sector);
145 fmt::print(
" p_old = ({:11.5f}, {:11.5f}, {:11.5f})\n", particleBank.getFloat(
"px", row), particleBank.getFloat(
"py", row), particleBank.getFloat(
"pz", row));
146 fmt::print(
" p_new = ({:11.5f}, {:11.5f}, {:11.5f})\n", px, py, pz);
152 algo_eventbuilder_filter.
Stop();
153 algo_sector_finder.
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...
Momentum3 Transform(vector_element_t const px, vector_element_t const py, vector_element_t const pz, int const sec, int const pid, float const torus) const
Action Function: Apply the momentum correction