4@begin_doc_example{python}
5@file iguana_ex_python_01_action_functions.py
6@brief Python version of `iguana_ex_cpp_01_action_functions.cc` (for more details, see this `.cc` file)
7@note You may need to run this example using `stdbuf -o0` (preceding your command) if the output appears to be jumbled
18 'iguana/algorithms/clas12/EventBuilderFilter/Algorithm.h',
19 'iguana/algorithms/clas12/SectorFinder/Algorithm.h',
20 'iguana/algorithms/clas12/rga/MomentumCorrection/Algorithm.h',
23from cppyy.gbl
import hipo, iguana
27inFile = sys.argv[1]
if len(sys.argv)>1
else 'data.hipo'
28numEvents = int(sys.argv[2])
if len(sys.argv)>2
else 3
31reader = hipo.reader(inFile)
34banks = reader.getBanks([
59config_file =
"examples/config_for_examples.yaml"
60algo_eventbuilder_filter.SetConfigFile(config_file)
61algo_sector_finder.SetConfigFile(config_file)
62algo_momentum_correction.SetConfigFile(config_file)
65algo_eventbuilder_filter.Start()
66algo_sector_finder.Start()
67algo_momentum_correction.Start()
71while(reader.next(banks)
and (numEvents==0
or iEvent < numEvents)):
75 particleBank = banks[b_particle]
76 configBank = banks[b_config]
77 trackBank = banks[b_track]
78 calorimeterBank = banks[b_calorimeter]
79 scintillatorBank = banks[b_scintillator]
85 print(f
'evnum = {configBank.getInt("event",0)}')
91 trackBank_sectors = []
92 trackBank_pindices = []
93 calorimeterBank_sectors = []
94 calorimeterBank_pindices = []
95 scintillatorBank_sectors = []
96 scintillatorBank_pindices = []
97 for r
in trackBank.getRowList():
98 trackBank_sectors.append(trackBank.getByte(
"sector", r))
99 trackBank_pindices.append(trackBank.getShort(
"pindex", r))
100 for r
in calorimeterBank.getRowList():
101 calorimeterBank_sectors.append(calorimeterBank.getByte(
"sector", r))
102 calorimeterBank_pindices.append(calorimeterBank.getShort(
"pindex", r))
103 for r
in scintillatorBank.getRowList():
104 scintillatorBank_sectors.append(scintillatorBank.getByte(
"sector", r))
105 scintillatorBank_pindices.append(scintillatorBank.getShort(
"pindex", r))
108 for row
in particleBank.getRowList():
111 pid = particleBank.getInt(
'pid', row)
112 if(algo_eventbuilder_filter.Filter(pid)):
116 sector = algo_sector_finder.GetStandardSector(
119 calorimeterBank_sectors,
120 calorimeterBank_pindices,
121 scintillatorBank_sectors,
122 scintillatorBank_pindices,
126 p_corrected = algo_momentum_correction.Transform(
127 particleBank.getFloat(
"px", row),
128 particleBank.getFloat(
"py", row),
129 particleBank.getFloat(
"pz", row),
132 configBank.getFloat(
"torus", 0)
136 print(f
'Analysis Particle PDG = {pid}')
137 print(f
' sector = {sector}')
138 print(f
' p_old = ({particleBank.getFloat("px", row):11.5f}, {particleBank.getFloat("py", row):11.5f}, {particleBank.getFloat("pz", row):11.5f})')
139 print(f
' p_new = ({p_corrected.px:11.5f}, {p_corrected.py:11.5f}, {p_corrected.pz:11.5f})')
142algo_eventbuilder_filter.Stop()
143algo_sector_finder.Stop()
144algo_momentum_correction.Stop()
Algorithm: Filter the particle bank (REC::Particle, or similar) bank by PID from the Event Builder
Algorithm: Find the sector for all rows in REC::Particle
Algorithm: Momentum Corrections