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"});
45 auto b_particle = hipo::getBanklistIndex(banks,
"REC::Particle");
46 auto b_config = hipo::getBanklistIndex(banks,
"RUN::config");
47 auto b_track = hipo::getBanklistIndex(banks,
"REC::Track");
48 auto b_calorimeter = hipo::getBanklistIndex(banks,
"REC::Calorimeter");
49 auto b_scintillator = hipo::getBanklistIndex(banks,
"REC::Scintillator");
53 iguana::GlobalConcurrencyModel =
"single";
61 algo_eventbuilder_filter.
SetOption(
"log",
"info");
62 algo_sector_finder.
SetOption(
"log",
"info");
63 algo_momentum_correction.
SetOption(
"log",
"info");
67 algo_eventbuilder_filter.
SetOption<std::vector<int>>(
"pids", {11, 211, -211});
70 algo_eventbuilder_filter.
Start();
71 algo_sector_finder.
Start();
72 algo_momentum_correction.
Start();
76 while(reader.next(banks) && (numEvents == 0 || iEvent++ < numEvents)) {
79 auto& particleBank = banks.at(b_particle);
80 auto& configBank = banks.at(b_config);
81 auto& trackBank = banks.at(b_track);
82 auto& calorimeterBank = banks.at(b_calorimeter);
83 auto& scintillatorBank = banks.at(b_scintillator);
89 fmt::print(
"evnum = {}\n", configBank.getInt(
"event", 0));
95 std::vector<int> trackBank_sectors;
96 std::vector<int> trackBank_pindices;
97 std::vector<int> calorimeterBank_sectors;
98 std::vector<int> calorimeterBank_pindices;
99 std::vector<int> scintillatorBank_sectors;
100 std::vector<int> scintillatorBank_pindices;
101 for(
auto const& r : trackBank.getRowList()) {
102 trackBank_sectors.push_back(trackBank.getByte(
"sector", r));
103 trackBank_pindices.push_back(trackBank.getShort(
"pindex", r));
105 for(
auto const& r : calorimeterBank.getRowList()) {
106 calorimeterBank_sectors.push_back(calorimeterBank.getByte(
"sector", r));
107 calorimeterBank_pindices.push_back(calorimeterBank.getShort(
"pindex", r));
109 for(
auto const& r : scintillatorBank.getRowList()) {
110 scintillatorBank_sectors.push_back(scintillatorBank.getByte(
"sector", r));
111 scintillatorBank_pindices.push_back(scintillatorBank.getShort(
"pindex", r));
115 for(
auto const& row : particleBank.getRowList()) {
118 auto pid = particleBank.getInt(
"pid", row);
119 if(algo_eventbuilder_filter.
Filter(pid)) {
126 calorimeterBank_sectors,
127 calorimeterBank_pindices,
128 scintillatorBank_sectors,
129 scintillatorBank_pindices,
133 auto [px, py, pz] = algo_momentum_correction.
Transform(
134 particleBank.getFloat(
"px", row),
135 particleBank.getFloat(
"py", row),
136 particleBank.getFloat(
"pz", row),
139 configBank.getFloat(
"torus", 0));
142 fmt::print(
"Analysis Particle PDG = {}\n", pid);
143 fmt::print(
" sector = {}\n", sector);
144 fmt::print(
" p_old = ({:11.5f}, {:11.5f}, {:11.5f})\n", particleBank.getFloat(
"px", row), particleBank.getFloat(
"py", row), particleBank.getFloat(
"pz", row));
145 fmt::print(
" p_new = ({:11.5f}, {:11.5f}, {:11.5f})\n", px, py, pz);
151 algo_eventbuilder_filter.
Stop();
152 algo_sector_finder.
Stop();
153 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...