25 character*1024 in_file
27 character*1024 config_file
28 character*16 num_events_arg
29 logical config_file_set
30 character(kind=c_char, len=1024)
31 & in_file_cstr, config_file_cstr, etc_dir
35 integer(c_int) reader_status
41 integer(c_int) nrows_p
42 integer(c_int) pindex(n_max)
43 integer(c_int) pid(n_max)
44 real(c_float) px(n_max), py(n_max), pz(n_max)
45 real(c_float) vz(n_max)
46 integer(c_int) stat(n_max)
49 integer(c_int) nrows_c
50 real(c_float) torus(n_max)
51 integer(c_int) runnum(n_max)
52 integer(c_int) evnum(n_max)
55 integer(c_int) nrows_trk, nrows_cal, nrows_sci
56 integer(c_int) sector_trk(n_max)
57 integer(c_int) pindex_trk(n_max)
58 integer(c_int) sector_cal(n_max)
59 integer(c_int) pindex_cal(n_max)
60 integer(c_int) sector_sci(n_max)
61 integer(c_int) pindex_sci(n_max)
64 logical(c_bool) accept(n_max)
65 real(c_double) qx, qy, qz, qe
66 real(c_double) q2, x, y, w, nu
67 real(c_double) beampz, targetm
68 integer(c_int) key_vz_filter
69 integer(c_int) key_inc_kin
70 integer(c_int) sector(n_max)
71 integer(c_int) nrows_sec
74 integer(c_int) algo_eb_filter, algo_vz_filter,
75 & algo_inc_kin, algo_sec_finder, algo_mom_cor
89 config_file_set = .false.
93 call iguana_getconfiginstallationprefix(etc_dir)
94 print *,
'ERROR: please at least specify a HIPO_FILE'
96 print *,
'ARGS: ',
'HIPO_FILE',
' ',
'NUM_EVENTS'
98 print *,
' HIPO_FILE: ',
'the input HIPO file'
100 print *,
' NUM_EVENTS (optional): ',
101 &
'the number of events (0 for all)'
102 print *,
' default: ', num_events
104 print *,
' CONFIG_FILE (optional): ',
105 &
'algorithm configuration file'
106 print *,
' default: ',
'use the internal defaults'
107 print *,
' example config file: ',
108 & trim(etc_dir)//
'/examples/my_z_vertex_cuts.yaml'
111 call getarg(1, in_file)
112 in_file_cstr = trim(in_file)//c_null_char
115 call getarg(2, num_events_arg)
116 read(num_events_arg,*) num_events
119 call getarg(3, config_file)
120 config_file_cstr = trim(config_file)//c_null_char
121 config_file_set = .true.
125 call hipo_file_open(in_file_cstr)
146 call iguana_algo_create(
148 &
'clas12::EventBuilderFilter'//c_null_char)
149 call iguana_algo_create(
151 &
'clas12::ZVertexFilter'//c_null_char)
152 call iguana_algo_create(
154 &
'physics::InclusiveKinematics'//c_null_char)
155 call iguana_algo_create(
157 &
'clas12::SectorFinder'//c_null_char)
158 call iguana_algo_create(
160 &
'clas12::MomentumCorrection'//c_null_char)
167 call iguana_algo_set_log_level(
168 & algo_eb_filter,
'debug'//c_null_char)
169 call iguana_algo_set_log_level(
170 & algo_vz_filter,
'debug'//c_null_char)
171 call iguana_algo_set_log_level(
172 & algo_inc_kin,
'debug'//c_null_char)
173 call iguana_algo_set_log_level(
174 & algo_sec_finder,
'debug'//c_null_char)
175 call iguana_algo_set_log_level(
176 & algo_mom_cor,
'debug'//c_null_char)
179 if(config_file_set)
then
180 call iguana_set_config_file(config_file_cstr)
190 10
if(reader_status.eq.0 .and.
191 & (num_events.eq.0 .or. counter.lt.num_events))
then
194 print *,
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> event ', counter
197 call hipo_file_next(reader_status)
199 call hipo_read_bank(
'REC::Particle', nrows_p)
200 call hipo_read_bank(
'RUN::config', nrows_c)
201 call hipo_read_bank(
'REC::Track', nrows_trk)
202 call hipo_read_bank(
'REC::Calorimeter', nrows_cal)
203 call hipo_read_bank(
'REC::Scintillator', nrows_sci)
205 call hipo_read_int(
'REC::Particle',
'pid', nr, pid, n_max)
206 call hipo_read_float(
'REC::Particle',
'px', nr, px, n_max)
207 call hipo_read_float(
'REC::Particle',
'py', nr, py, n_max)
208 call hipo_read_float(
'REC::Particle',
'pz', nr, pz, n_max)
209 call hipo_read_float(
'REC::Particle',
'vz', nr, vz, n_max)
210 call hipo_read_int(
'REC::Particle',
'status', nr, stat, n_max)
211 call hipo_read_float(
'RUN::config',
'torus', nr, torus, n_max)
212 call hipo_read_int(
'RUN::config',
'run', nr, runnum, n_max)
213 call hipo_read_int(
'RUN::config',
'event', nr, evnum, n_max)
214 call hipo_read_int(
'REC::Track',
'sector', nr,
216 call hipo_read_int(
'REC::Track',
'pindex', nr,
218 call hipo_read_int(
'REC::Calorimeter',
'sector', nr,
220 call hipo_read_int(
'REC::Calorimeter',
'pindex', nr,
222 call hipo_read_int(
'REC::Scintillator',
'sector', nr,
224 call hipo_read_int(
'REC::Scintillator',
'pindex', nr,
228 print *,
'evnum =', evnum(1)
238 print *,
'===> call iguana prepare-event functions'
239 call iguana_clas12_zvertexfilter_prepareevent(
240 & algo_vz_filter, runnum(1), key_vz_filter)
247 call iguana_physics_inclusivekinematics_prepareevent(
248 & algo_inc_kin, runnum(1), -1.0_c_double, key_inc_kin)
258 print *,
'===> filter particles with iguana:'
261 call iguana_clas12_eventbuilderfilter_filter(
262 & algo_eb_filter, pid(i), accept(i))
263 call iguana_clas12_zvertexfilter_filter(
264 & algo_vz_filter, vz(i), pid(i), stat(i),
265 & key_vz_filter, accept(i))
266 print *,
' pindex =', pindex(i),
' pid =', pid(i),
267 &
' vz =', vz(i),
' status =', stat(i),
268 &
' => accept =', accept(i)
273 print *,
'===> determine particle sectors:'
282 call iguana_clas12_sectorfinder_getstandardsectorvec(
284 & sector_trk, nrows_trk, pindex_trk, nrows_trk,
285 & sector_cal, nrows_cal, pindex_cal, nrows_cal,
286 & sector_sci, nrows_sci, pindex_sci, nrows_sci,
289 write(*,*)
' pindex:', (pindex(j),j=1,nrows_p)
290 write(*,*)
' sector:', (sector(j),j=1,nrows_sec)
293 if(nrows_c.lt.1)
then
294 print *,
'===> no RUN::config bank; cannot ',
295 &
'apply momentum corrections'
297 print *,
'===> momentum corrections:'
298 print *,
'evnum =', evnum(1)
301 print *,
'Particle PDG =', pid(i)
302 print *,
' sector =', sector(i)
303 print *,
' p_old = (', px(i),
',', py(i),
',', pz(i),
')'
304 call iguana_clas12_momentumcorrection_transform(
306 & px(i), py(i), pz(i),
307 & sector(i), pid(i), torus(1),
308 & px(i), py(i), pz(i))
309 print *,
' p_new = (', px(i),
',', py(i),
',', pz(i),
')'
317 print *,
'===> finding electron...'
320 print *,
' pindex =', pindex(i),
' status =', stat(i)
321 if(pid(i).eq.11 .and. stat(i).lt.0)
then
322 p = sqrt(px(i)**2 + py(i)**2 + pz(i)**2)
332 print *,
'===> found DIS electron:'
333 print *,
' pindex =', pindex(i_ele)
334 print *,
' |p| =', p_ele
335 print *,
' p = (', px(i_ele), py(i_ele), pz(i_ele),
')'
337 print *,
'===> no DIS electron'
342 call iguana_physics_inclusivekinematics_computefromlepton(
344 & px(i_ele), py(i_ele), pz(i_ele),
349 print *,
'===> inclusive kinematics:'
350 print *,
' q = (', qx, qy, qz, qe,
')'
351 print *,
' Q2 = ', q2
355 print *,
' nu = ', nu
358 counter = counter + 1
program iguana_ex_fortran_01_action_functions
Fortran example program.