2 #ifndef __INTEL_COMPILER
3 #define STOP CALL EXIT !
4 #define stop CALL EXIT !
14 CCC Documentation and Description:
16 C This code is intended to provide a quick means of producing
17 C uncorrelated simulated events for event-by-event studies,
18 C detector acceptance and efficiency studies, etc. The
19 C user selects the number of events, the one-particle distribution
20 C model, the Geant particles to include, the ranges in transverse
21 C momentum, pseudorapidity and azimuthal angle, the mean
22 C multiplicity for each particle type for the event run, the
23 C mean temperature, Rapidity width, etc., and the standard deviations
24 C for the event-to-event variation in the model parameters.
25 C Note that these events are produced in the c.m. frame only.
27 C Anisotropic flow may also be simulated by introducing explicit
28 C phi-dependence (azimuthal angle) in the particle distributions.
29 C The assumed model is taken from Poskanzer and Voloshin, Phys. Rev.
30 C C58, 1671 (1998), Eq.(1), where we use,
32 C E d^3N/dp^3 = (1/2*pi*pt)*[d^2N/dpt*dy]
33 C * [1 + SUM(n=1,nflowterms){2*Vn*cos[n(phi-PSIr)]}]
35 C with up to 'nflowterms' (currently set to 6, see file
36 C Parameter_values.inc) Fourier components allowed. Vn are
37 C coefficients and PSIr is the reaction plane angle.
38 C The algebraic signs of the Vn terms for n=odd are reversed
39 C from their input values for particles with rapidity (y) < 0
40 C as suggested in Poskanzer and Voloshin.
41 C The flow parameters can depend on pt and rapidity (y) according
42 C to the model suggested by Art Poskanzer (Feb. 2000) and as
43 C defined in the Function Vn_pt_y.
45 C The user may select either to have the same multiplicity per
46 C particle type for each event or to let the multiplicity vary
47 C randomly according to a Poisson distribution. In addition, an
48 C overall multiplicative scale factor can be applied to each
49 C particle ID's multiplicity (same factor applied to each PID).
50 C This scaling can vary randomly according to a Gaussian from
51 C event-to-event. This is to simulate trigger acceptance
52 C fluctuations. Similarly the
53 C parameters of the one-particle distribution models may either
54 C be fixed to the same value for each event or allowed to randomly
55 C vary about a specified mean with a specified standard deviation
56 C and assuming a Gaussian distribution.
58 C With respect to the reaction plane and anisotropic flow simulation,
59 C the user may select among four options:
60 C (1) ignore reaction plane and anisotropic flow effects; all
61 C distributions will be azimuthally invariant, on average.
62 C (2) assume a fixed reaction plane angle, PSIr, for all events
64 C (3) assume a Gaussian distribution with specified mean and
65 C standard deviation for the reaction plane angles for the
66 C events in the run. PSIr is randomly determined for each
68 C (4) assume uniformly distributed, random values for the reaction
69 C plane angles from 0 to 360 deg., for each event in the run.
71 C The user may also select the anisotropic flow parameters, Vn,
72 C to either be fixed for each event, or to randomly vary from event
73 C to event according to a Gaussian distribution where the user must
74 C specify the mean and std. dev. For both cases the input file must
75 C list the 'nflowterms' (e.g. 6) values of the mean and Std.dev. for
76 C the Vn parameters for all particle ID types included in the run.
78 C The available list of particles has been increased to permit a
79 C number of meson and baryon resonances. For those with broad widths
80 C the code samples the mass distribution for the resonance and outputs
81 C the resonance mass for each instance in a special kinematic file
82 C (see file unit=9, filename = 'mult_gen.kin'). The resonance shapes
83 C are approximately Breit-Wigner and are specific for each resonance
84 C case. The additional particle/resonances include: rho(+,-,0),
85 C omega(0), eta', phi, J/Psi, Delta(-,0,+,++) and K*(+,-,0). Masses
86 C are sampled for the rho, omega, phi, Deltas and D*s.
87 C Refer to SUBR: Particle_prop and Particle_mass for the explicit
88 C parameters, resonance shape models, and sampling ranges.
90 C The input is from a file, named 'mult_gen.in'. The output is
91 C loaded into a file named 'mult_gen.out' which includes run
92 C header information, event header information and the EVENT: and
93 C TRACK: formats as in the new STAR TEXT Format for event generator
94 C input to GSTAR. A log file, 'mult_gen.log' is also written which
95 C may contain error messages. Normally this file should be empty
96 C after a successful run. These filenames can easily be changed
97 C to more suitable names by the script that runs the program or
100 C The method for generating random multiplicities and model parameter
101 C values involves the following steps:
102 C (1) The Poisson or Gaussian distributions are computed and
103 C loaded into function f().
104 C (2) The distribution f(x') is integrated from xmin to x
105 C and saved from x = xmin to x = xmax. The range and mesh
106 C spaces are specified by the user.
107 C (3) The integral of f is normalized to unity where
108 C integral[f(x')](at x = xmin) = 0.0
109 C integral[f(x')](at x = xmax) = 1.0
110 C (4) A random number generator is called which delivers values
111 C between 0.0 and 1.0.
112 C (5) We consider the coordinate x (from xmin to xmax) to be
113 C dependent on the integral[f]. Using the random number
114 C for the selected value of integral[f] the value of x
115 C is obtained by interpolation.
117 C An interpolation subroutine from Rubin Landau, Oregon State Univ.,
118 C is used to do this interpolation; it involves uneven mesh point
121 C The method for generating the particle momenta uses the
122 C standard random elimination method and involves the following
125 C For model_type = 1,2,3,4 which are functions of pt,y (see following):
126 C (1) The y range is computed using the pseudorapidity (eta)
127 C range and includes ample cushioning around the sides
128 C along the eta acceptance edges.
129 C (2) The transverse momentum (pt) and rapidity (y) are
130 C randomly chosen within the specified ranges.
131 C (3) The pseudorapidity is computed for this (pt,y) value
132 C (and the mass for each pid) and checked against the
133 C pseudorapidity acceptance range.
134 C (4) If the pseudorapidity is within range then the one-particle
135 C model distribution is calculated at this point and its ratio
136 C to the maximum value throughout (pt,eta) acceptance region
138 C (5) Another random number is called and if less than the ratio
139 C from step#4 the particle momentum is used; if not, then
140 C another trial value of (pt,y) is obtained.
141 C (6) This continues until the required multiplicity for the
142 C specific event and particle type has been satisfied.
143 C (7) This process is repeated for the requested number of particle
146 C For model_type = 5,6 (see following) which are input bin-by-bin
148 C (1) The transverse momentum (pt) and pseudorapidity (eta) are
149 C randomly chosen within the specified ranges.
150 C (2) The one-particle model distribution is calculated at this
151 C point and its ratio to the maximum value throughout the
152 C (pt,eta) region is calculated.
153 C (3) Another random number is called and if less than the ratio
154 C from step(2) the particle momentum is used; if not then
155 C another trial value of (pt,eta) is obtained.
156 C (4) This continues until the required multiplicity for the
157 C specific event and particle type has been satisfied.
158 C (5) This process is repeated for the requested number of particle
161 C Problematic parameter values are tested, bad input values are checked
162 C and in some cases may be changed so that the program will not crash.
163 C In some cases the code execution is stopped.
164 C Some distributions and/or unusual model parameter values may cause the
165 C code to hang up due to the poor performance of the "elimination"
166 C method for very strongly peaked distributions. These are tested for
167 C certain problematic values and if necessary these events are aborted.
168 C A message, "*** Event No. 2903 ABORTED:" for example is printed
169 C in the 'mult_gen.out' file. Temperatures .le. 0.01 GeV and rapidity
170 C width parameters .le. 0.01 will cause the event to abort.
172 C The input is described below in the 'read' statements and also in
173 C the sample input file. Some additional comments are as follows:
175 C (1) n_events - Selected number of events in run. Can be anything
177 C (2) n_pid_type - Number of particle ID types to include in the
178 C particle list. e.g. pi(+) and pi(-) are counted
179 C separately. The limit is set by parameter npid
180 C in the accompanying include file 'Parameter_values.inc'
181 C and is presently set at 20.
182 C (3) model_type - equals 1,2,3,4,5 or 6 so far. See comments in
183 C Function dNdpty to see what is calculated.
184 C The models included are:
185 C = 1, Factorized mt exponential, Gaussian rapidity model
186 C = 2, Pratt non-expanding, spherical thermal source model
187 C = 3, Bertsch non-expanding spherical thermal source model
188 C = 4, Pratt spherically expanding, thermally equilibrated
190 C = 5, Factorized pt and eta distributions input bin-by-bin.
191 C = 6, Fully 2D pt,eta distributions input bin-by-bin.
192 C NOTE: model_type = 1-4 are functions of (pt,y)
193 C model_type = 5,6 are functions of (pt,eta)
194 C (4) reac_plane_cntrl - Can be either 1,2,3 or 4 where:
195 C = 1 to ignore reaction plane and anisotropic flow,
196 C all distributions will be azimuthally symm.
197 C = 2 to use a fixed reaction plane angle for all
199 C = 3 to assume a randomly varying reaction plane
200 C angle for each event as determined by a
201 C Gaussian distribution.
202 C = 4 to assume a randomly varying reaction plane
203 C for each event in the run as determined by
204 C a uniform distribution from 0 to 360 deg.
205 C (5) PSIr_mean, PSIr_stdev - Reaction plane angle mean and Gaussian
206 C std.dev. (both are in degrees) for cases
207 C with reac_plane_cntrl = 2 (use mean value)
208 C and 3. Note: these are read in regardless
209 C of the value of reac_plane_cntrl.
210 C (6) MultFac_mean, MultFac_stdev - Overall multiplicity scaling factor
211 C for all PID types; mean and std.dev.;
212 C for trigger fluctuations event-to-evt.
213 C (7) pt_cut_min,pt_cut_max - Range of transverse momentum in GeV/c.
214 C (8) eta_cut_min,eta_cut_max - Pseudorapidity range
215 C (9) phi_cut_min,phi_cut_max - Azimuthal angular range in degrees.
216 C (10) n_stdev_mult - Number of standard deviations about the mean value
217 C of multiplicity to include in the random event-to-
218 C event selection process. The maximum number of
219 C steps that can be covered is determined by
220 C parameter n_mult_max_steps in the accompanying
221 C include file 'Parameter_values.inc' which is
222 C presently set at 1000, but the true upper limit for
223 C this is n_mult_max_steps - 1 = 999.
224 C (11) n_stdev_temp - Same, except for the "Temperature" parameter.
225 C (12) n_stdev_sigma- Same, except for the rapidity width parameter.
226 C (13) n_stdev_expvel - Same, except for the expansion velocity parameter.
227 C (14) n_stdev_PSIr - Same, except for the reaction plane angle
228 C (15) n_stdev_Vn - Same, except for the anisotropy coefficients, Vn.
229 C (16) n_stdev_MultFac - Same, except for the multiplicity scaling factor.
230 C (17) n_integ_pts - Number of mesh points to use in the random model
231 C parameter selection process. The upper limit is
232 C set by parameter nmax_integ in the accompanying
233 C include file 'Parameter_values.inc' which is presently
234 C set at 100, but the true upper limit for n_integ_pts
235 C is nmax_integ - 1 = 99.
236 C (18) n_scan_pts - Number of mesh points to use to scan the (pt,y)
237 C dependence of the model distributions looking for
238 C the maximum value. The 2-D grid has
239 C n_scan_pts * n_scan_pts points; no limit to size of
241 C (19) irand - Starting random number seed.
243 C**************************************************************************
244 C FOR MODEL_TYPE = 1,2,3 or 4:
245 C Input the following 7 lines for each particle type; repeat these
246 C set of lines n_pid_type times:
248 C (a) gpid - Geant Particle ID code number
249 C (b) mult_mean,mult_variance_control - Mean multiplicity and
250 C variance control where:
251 C mult_variance_control = 0 for no variance in multiplicity
252 C mult_variance_control = 1 to allow Poisson distribution for
253 C particle multiplicities for all events.
254 C Note that a hard limit exists for the maximum possible
255 C multiplicity for a given particle type per event. This is
256 C determined by parameter factorial_max in accompanying include
257 C file 'common_facfac.inc' and is presently set at 10000.
258 C (c) Temp_mean, Temp_stdev - Temperature parameter mean (in GeV)
259 C and standard deviation (Gaussian distribution assumed).
260 C (d) sigma_mean, sigma_stdev - Rapidity distribution width (sigma)
261 C parameter mean and standard deviation (Gaussian distribution
263 C (e) expvel_mean, expvel_stdev - S. Pratt expansion velocity
264 C (in units of c) mean and standard deviation (Gaussian
265 C distribution assumed).
266 C (f) Vn_mean(k); k=1,4 - Anisotropic flow parameters, mean values
267 C for Fourier component n=1.
268 C (g) Vn_stdev(k); k=1,4 - Anisotropic flow parameters, std.dev.
269 C values for Fourier component n=1.
271 C Repeat the last two lines of input for remaining Fourier
272 C components n=2,3...6. Include all 6 sets of parameters
273 C even if these are not used by the model for Vn(pt,y) (set
274 C unused parameter means and std.dev. to 0.0). List 4 values
275 C on every line, even though for n=even the 4th quantity is
278 C**************************************************************************
279 C FOR MODEL_TYPE = 5 input the following set of lines for each particle
280 C type; repeat these n_pid_type times.
282 C (a) gpid - Geant Particle ID code number
283 C (b) mult_mean,mult_variance_control - Mean multiplicity and
284 C variance control where:
285 C mult_variance_control = 0 for no variance in multiplicity
286 C mult_variance_control = 1 to allow Poisson distribution for
287 C particle multiplicities for all events.
288 C (c) pt_start, eta_start - minimum starting values for pt, eta
289 C input for the bin-by-bin distributions.
290 C (d) n_pt_bins, n_eta_bins - # input pt and eta bins.
291 C (e) delta_pt, pt_bin - pt bin size and function value, repeat for
293 C (f) delta_eta, eta_bin - eta bin size and function value, repeat
295 C (g) Vn_mean(k); k=1,4 - Anisotropic flow parameters, mean values
296 C for Fourier component n=1.
297 C (h) Vn_stdev(k); k=1,4 - Anisotropic flow parameters, std.dev.
298 C values for Fourier component n=1.
300 C Repeat the last two lines of input for remaining Fourier
301 C components n=2,3...6. Include all 6 sets of parameters
302 C even if these are not used by the model for Vn(pt,y) (set
303 C unused parameter means and std.dev. to 0.0). List 4 values
304 C on every line, even though for n=even the 4th quantity is
307 C NOTE: The pt, eta ranges must fully include the requested ranges
308 C in input #4 and 5 above; else the code execution will stop.
310 C Also, variable bin sizes are permitted for the input distributions.
312 C Also, this input distribution is used for all events in the run;
313 C no fluctuations in this "parent" distribution are allowed from
316 C**************************************************************************
317 C FOR MODEL_TYPE = 6 input the following set of lines for each particle
318 C type; repeat these n_pid_type times.
320 C (a) gpid - Geant Particle ID code number
321 C (b) mult_mean,mult_variance_control - Mean multiplicity and
322 C variance control where:
323 C mult_variance_control = 0 for no variance in multiplicity
324 C mult_variance_control = 1 to allow Poisson distribution for
325 C particle multiplicities for all events.
326 C (c) pt_start, eta_start - minimum starting values for pt, eta
327 C input for the bin-by-bin distributions.
328 C (d) n_pt_bins, n_eta_bins - # input pt and eta bins.
329 C (e) delta_pt - pt bin size, repeat for each pt bin.
330 C (f) delta_eta - eta bin size, repeat for each eta bin.
331 C (g) i,j,pt_eta_bin(i,j) - read pt (index = i) and eta (index = j)
332 C bin numbers and bin value for full 2D space.
333 C (h) Vn_mean(k); k=1,4 - Anisotropic flow parameters, mean values
334 C for Fourier component n=1.
335 C (i) Vn_stdev(k); k=1,4 - Anisotropic flow parameters, std.dev.
336 C values for Fourier component n=1.
338 C Repeat the last two lines of input for remaining Fourier
339 C components n=2,3...6. Include all 6 sets of parameters
340 C even if these are not used by the model for Vn(pt,y) (set
341 C unused parameter means and std.dev. to 0.0). List 4 values
342 C on every line, even though for n=even the 4th quantity is
345 C NOTE: The pt, eta ranges must fully include the requested ranges
346 C in input #4 and 5 above; else the code execution will stop.
348 C Also, variable bin sizes are permitted for the input distributions.
350 C Also, this input distribution is used for all events in the run;
351 C no fluctuations in this "parent" distribution are allowed from
354 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
356 Include 'Parameter_values.inc'
357 Include 'common_facfac.inc'
358 include 'common_dist_bin.inc'
359 Common/track/ pout(npid,4,factorial_max)
361 Common/Geant/geant_mass(200),geant_charge(200),
362 1 geant_lifetime(200),geant_width(200)
363 real*4 geant_mass,geant_charge,geant_lifetime,geant_width
364 Common/Mass/ Mass_integ_save(npid,nmax_integ),
365 1 Mass_xfunc_save(npid,nmax_integ)
366 real*4 Mass_integ_save,Mass_xfunc_save
368 integer n_events, n_pid_type, model_type, n_integ_pts, irand
369 integer gpid(npid),mult_mean(npid),mult_variance_control(npid)
370 integer i,j,k,pid,mult_min,mult_max,n_mult_steps(npid),ievent
371 integer mult_event(npid),n_scan_pts,total_mult,n_vertices
372 integer event_abort,status_abort, status
373 integer iptbin, ietabin
374 integer track_counter,start_v,stop_v
375 integer reac_plane_cntrl
376 integer jodd,total_mult_inc(npid)
378 real*4 pt_cut_min,pt_cut_max,eta_cut_min,eta_cut_max
379 real*4 y_cut_min,y_cut_max
380 real*4 phi_cut_min,phi_cut_max,n_stdev_mult,n_stdev_temp
381 real*4 n_stdev_sigma,n_stdev_expvel,Temp_mean(npid)
382 real*4 Temp_stdev(npid),pi,rad,mult_mean_real,mult_stdev
383 real*4 mult_min_real,mult_max_real,ran
384 real*4 Temp_abort, sigma_abort, bin_value
386 real*4 mult_integ(n_mult_max_steps),mult_xfunc(n_mult_max_steps)
387 real*4 mult_integ_save(npid,n_mult_max_steps)
388 real*4 mult_xfunc_save(npid,n_mult_max_steps)
389 real*4 mult_event_real
391 real*4 Temp_min,Temp_max,integ(nmax_integ),xfunc(nmax_integ)
392 real*4 Temp_integ_save(npid,nmax_integ)
393 real*4 Temp_xfunc_save(npid,nmax_integ)
394 real*4 Temp_event(npid)
396 real*4 sigma_stdev(npid),sigma_mean(npid),sigma_min,sigma_max
397 real*4 sigma_integ_save(npid,nmax_integ)
398 real*4 sigma_xfunc_save(npid,nmax_integ)
399 real*4 sigma_event(npid)
401 real*4 expvel_stdev(npid), expvel_mean(npid)
402 real*4 expvel_min, expvel_max
403 real*4 expvel_integ_save(npid,nmax_integ)
404 real*4 expvel_xfunc_save(npid,nmax_integ)
405 real*4 expvel_event(npid)
407 real*4 masstemp,pxtemp,pytemp,pztemp,pttemp,etatemp,ytemp,phitemp
409 CCC Variables associated with anisotropic flow:
411 real*4 PSIr_mean, PSIr_stdev, n_stdev_PSIr, n_stdev_Vn
412 real*4 PSIr_min, PSIr_max, PSIr_event
413 real*4 PSIr_integ_save(nmax_integ)
414 real*4 PSIr_xfunc_save(nmax_integ)
415 real*4 Vn_mean(nflowterms,4,npid), Vn_stdev(nflowterms,4,npid)
416 real*4 Vn_min, Vn_max
417 real*4 Vn1_integ_save(nflowterms,npid,nmax_integ)
418 real*4 Vn1_xfunc_save(nflowterms,npid,nmax_integ)
419 real*4 Vn2_integ_save(nflowterms,npid,nmax_integ)
420 real*4 Vn2_xfunc_save(nflowterms,npid,nmax_integ)
421 real*4 Vn3_integ_save(nflowterms,npid,nmax_integ)
422 real*4 Vn3_xfunc_save(nflowterms,npid,nmax_integ)
423 real*4 Vn4_integ_save(nflowterms,npid,nmax_integ)
424 real*4 Vn4_xfunc_save(nflowterms,npid,nmax_integ)
425 real*4 Vn_event(nflowterms,4,npid), Vn_event_tmp(nflowterms,4)
426 real*4 Vn_sum(nflowterms,npid),cosinefac(nflowterms)
428 CCC Variables associated with trigger fluctuations:
429 real*4 MultFac_mean, MultFac_stdev, n_stdev_MultFac
430 real*4 MultFac_min, MultFac_max, MultFac_event
431 real*4 MultFac_integ_save(nmax_integ)
432 real*4 MultFac_xfunc_save(nmax_integ)
435 open(unit=4,status='old',access='sequential',file='mult_gen.in')
436 C--> Commented for AliRoot direct COMMON block access
437 C open(unit=7,type='new',access='sequential',name='mult_gen.out')
438 C open(unit=8,type='new',access='sequential',name='mult_gen.log')
441 CCC Lines throughout the code which are commented out with "C-OUT"
442 CCC can be activated to output special files (unit=9,10) with just the
443 CCC mass,pt,eta,y,phi values listed for all the tracks for all events,
444 CCC or the cos[n*(phi - PSI-reaction-plane)] for n=1,2...6.
445 CCC These files can be directly loaded into PAW ntuples for analysis.
447 C-OUT open(unit=9,type='new',access='sequential',name='mult_gen.kin')
448 C-OUT open(unit=10,type='new',access='sequential',name='mult_gen.cos')
449 C--> Commented for AliRoot direct COMMON block access
450 C open(unit=9,type='new',access='sequential',name='mult_gen.kin')
451 C open(unit=10,type='new',access='sequential',name='mult_gen.cos')
453 CCC File 'mult_gen.in' is the input file for the run.
454 CCC File 'mult_gen.out' is the output file in STAR New TEXT Format.
455 CCC File 'mult_gen.log' is a log file for the run.
456 CCC File 'mult_gen.kin', if activated, lists track kinematics for PAW ntuples.
457 CCC File 'mult_gen.cos', if activated, lists the cos(n*phi) for PAW ntuples.
459 CCC Initialize Arrays to Zero:
464 mult_variance_control(i) = 0
471 expvel_stdev(i) = 0.0
475 expvel_event(i) = 0.0
476 total_mult_inc(i) = 0
478 do j = 1,n_mult_max_steps
479 mult_integ_save(i,j) = 0.0
480 mult_xfunc_save(i,j) = 0.0
484 Temp_integ_save(i,j) = 0.0
485 Temp_xfunc_save(i,j) = 0.0
486 sigma_integ_save(i,j) = 0.0
487 sigma_xfunc_save(i,j) = 0.0
488 expvel_integ_save(i,j) = 0.0
489 expvel_xfunc_save(i,j) = 0.0
490 Mass_integ_save(i,j) = 0.0
491 Mass_xfunc_save(i,j) = 0.0
498 Vn_event_tmp(j,k) = 0.0
504 Vn_stdev(j,k,i) = 0.0
505 Vn_event(j,k,i) = 0.0
508 Vn1_integ_save(j,i,k) = 0.0
509 Vn1_xfunc_save(j,i,k) = 0.0
510 Vn2_integ_save(j,i,k) = 0.0
511 Vn2_xfunc_save(j,i,k) = 0.0
512 Vn3_integ_save(j,i,k) = 0.0
513 Vn3_xfunc_save(j,i,k) = 0.0
514 Vn4_integ_save(j,i,k) = 0.0
515 Vn4_xfunc_save(j,i,k) = 0.0
521 PSIr_integ_save(i) = 0.0
522 PSIr_xfunc_save(i) = 0.0
523 MultFac_integ_save(i) = 0.0
524 MultFac_xfunc_save(i) = 0.0
527 do i = 1,n_mult_max_steps
537 do i = 1,factorial_max
558 pt_eta_bin(i,j,k) = 0.0
565 read(4,*) n_events ! No. of events to generate
566 read(4,*) n_pid_type ! No. of Geant PID types to include
567 read(4,*) model_type ! Distribution model type (see
568 CCC ! Function dNdpty for explanation).
569 read(4,*) reac_plane_cntrl ! Reaction plane control option (1-4)
570 read(4,*) PSIr_mean,PSIr_stdev ! Reaction plane angle mean and std.
571 CCC ! dev., both are in degrees.
572 read(4,*) MultFac_mean,MultFac_stdev ! Mult scaling factor mean,stdev.
573 read(4,*) pt_cut_min,pt_cut_max ! Min/Max pt range in GeV/c
574 read(4,*) eta_cut_min,eta_cut_max ! Min/Max pseudorapidity range
575 read(4,*) phi_cut_min,phi_cut_max ! Min/Max azimuthal angular range (deg)
576 read(4,*) n_stdev_mult ! No.(+/-) standard deviation range
577 CCC ! for multiplicity
578 read(4,*) n_stdev_temp ! No.(+/-) st.dev. range for Temp.
579 read(4,*) n_stdev_sigma ! No.(+/-) st.dev. range for rapidity
581 read(4,*) n_stdev_expvel ! No.(+/-) st.dev. range for expansion
583 read(4,*) n_stdev_PSIr ! No.(+/-) st.dev. range for PSIr
584 read(4,*) n_stdev_Vn ! No.(+/-) st.dev. range for anisotropic
585 CCC ! flow parameters Vn.
586 read(4,*) n_stdev_MultFac ! No.(+/-) st.dev. range for multipli-
587 CCC ! city scaling factor for all PIDs.
588 read(4,*) n_integ_pts ! No. of integration mesh points to use
589 CCC ! for random parameter fluctuations.
590 read(4,*) n_scan_pts ! No. of pt and eta mesh points to use
591 CCC ! in scan for maximum value of dN/dpt*dy
592 read(4,*) irand ! Random number seed; default=12345.
594 CCC Check Validity and Consistency of Input Parameters so far:
596 if(n_events .le. 0) n_events = 1
597 if(n_pid_type .le. 0) n_pid_type = 1
598 if(pt_cut_min .gt. pt_cut_max) then
599 C--> write(8,40) pt_cut_min,pt_cut_max
602 if(eta_cut_min .gt. eta_cut_max) then
603 C--> write(8,41) eta_cut_min,eta_cut_max
606 if(phi_cut_min .gt. phi_cut_max) then
607 C--> write(8,42) phi_cut_min,phi_cut_max
610 40 Format(//10x,'pt_cut_min = ',F7.4,' gt max = ',F7.4,' -STOP')
611 41 Format(//10x,'eta_cut_min = ',F7.4,' gt max = ',F7.4,' -STOP')
612 42 Format(//10x,'phi_cut_min = ',F7.4,' gt max = ',F7.4,' -STOP')
613 if(n_stdev_mult .lt. 0.0) n_stdev_mult = 1.0
614 if(n_stdev_temp .lt. 0.0) n_stdev_temp = 1.0
615 if(n_stdev_sigma .lt. 0.0) n_stdev_sigma = 1.0
616 if(n_stdev_expvel .lt. 0.0) n_stdev_expvel = 1.0
617 if(n_stdev_PSIr .lt. 0.0) n_stdev_PSIr = 1.0
618 if(n_stdev_Vn .lt. 0.0) n_stdev_Vn = 1.0
619 if(n_stdev_MultFac .lt. 0.0) n_stdev_MultFac = 1.0
620 if(n_integ_pts .le. 0) n_integ_pts = 10
621 if(n_scan_pts .le. 0) n_scan_pts = 10
623 if(irand .le. 0) irand = 12345
624 if(n_pid_type .gt. npid) then
625 C--> write(8,10) n_pid_type, npid
626 10 Format(//10x,'No. requested PID types = ',I7,
627 1 ', exceeds maximum of ',I7,'; reset')
630 if(model_type .lt. 0 .or. model_type .gt. 6) then
631 C--> write(8,11) model_type
632 11 Format(/10x,'model_type = ',I5,' is not allowed; STOP')
635 if(n_integ_pts .gt. nmax_integ) then
636 C--> write(8,12) n_integ_pts, nmax_integ
637 12 Format(/10x,'No. integ. pts = ',I7,
638 1 ', exceeds maximum of ',I7,'; reset')
639 n_integ_pts = nmax_integ
641 if(reac_plane_cntrl .lt. 1 .OR. reac_plane_cntrl .gt. 4) then
642 C--> write(8,*) 'reac_plane_cntrl = ',reac_plane_cntrl,'-STOP'
646 CCC Force the reaction plane angle (mean value) to be within the
647 CCC range 0 to 360 deg.
648 PSIr_mean = PSIr_mean - 360.0*float(int(PSIr_mean/360.0))
649 if(PSIr_mean .lt. 0.0) PSIr_mean = PSIr_mean + 360.0
650 if(PSIr_stdev .lt. 0.0) then
651 C--> write(8,*) 'Reaction plane angle Std. dev. is < 0.0 - STOP'
655 CCC Check the multiplicity scaling factor input parameters:
656 if(MultFac_mean.lt.0.0 .or. MultFac_stdev.lt.0.0) then
657 C--> write(8,48) MultFac_mean, MultFac_stdev
658 48 Format(//10x,'Multiplicity scaling factor mean or stdev = ',
659 1 2F7.4,' - not valid - STOP')
663 CCC FOR MODEL_TYPE = 1,2,3 or 4;
664 CCC Repeat the following lines of input for each particle ID type:
666 IF(model_type.ge.1 .and. model_type.le.4) then
668 do pid = 1,n_pid_type
670 read(4,*) gpid(pid) ! Geant Particle ID code number
672 read(4,*) mult_mean(pid), mult_variance_control(pid)
673 CCC Mean multiplicity and variance control where:
674 CCC mult_variance_control = 0 for no variance in multiplicity
675 CCC mult_variance_control = 1 to allow Poisson distribution for
676 CCC particle multiplicities for all events.
678 read(4,*) Temp_mean(pid), Temp_stdev(pid)
679 CCC Temperature parameter mean (in GeV) and standard deviation (Gaussian
680 CCC distribution assumed).
682 read(4,*) sigma_mean(pid), sigma_stdev(pid)
683 CCC Rapidity distribution width (sigma) parameter mean and standard
684 CCC deviation (Gaussian distribution assumed).
686 read(4,*) expvel_mean(pid), expvel_stdev(pid)
687 CCC S. Pratt expansion velocity (in units of c) mean and standard
688 CCC deviation (Gaussian distribution assumed).
691 read(4,*) (Vn_mean(i,k,pid) ,k=1,4)
692 read(4,*) (Vn_stdev(i,k,pid),k=1,4)
694 CCC Anisotropic flow Fourier component coefficients specifying the
695 CCC azimuthal (phi angle) dependence as defined in Phys. Rev. C58,
696 CCC 1671 (1998), Eq.(1); 'nflowterms' number of parameters are
697 CCC allowed (see file 'Parameter_values.inc' where this is currently
698 CCC set to 6); these are the mean and Gaussian std. dev. to be used
699 CCC if random, Gaussian variation in the Vn values from event-to-event
700 CCC are selected (via reac_plane_cntrl).
701 CCC The flow parameters are pt and y dependent; see Function Vn_pt_y
702 CCC for the full definitions.
704 CCC Check Validity and Consistency of Input Parameters
706 if(Temp_mean(pid).le.0.0 .or. Temp_stdev(pid).lt.0.0) then
707 C--> write(8,45) pid,Temp_mean(pid),Temp_stdev(pid)
708 45 Format(//10x,'For pid # ',I7,', Temp_mean or Temp_stdev= ',
709 1 2F7.4,' - not valid -STOP')
712 if(sigma_mean(pid).le.0.0 .or. sigma_stdev(pid).lt.0.0) then
713 C--> write(8,46) pid,sigma_mean(pid),sigma_stdev(pid)
714 46 Format(//10x,'For pid # ',I7,', sigma_mean or sigma_stdev= ',
715 1 2F7.4,' - not valid -STOP')
718 if(expvel_mean(pid).lt.0.0.or.expvel_stdev(pid).lt.0.0) then
719 C--> write(8,47) pid,expvel_mean(pid),expvel_stdev(pid)
720 47 Format(//10x,'For pid #',I7,',expvel_mean or expvel_stdev=',
721 1 2F7.4,' - not valid -STOP')
727 if(Vn_stdev(i,k,pid) .lt. 0.0) then
728 C--> write(8,*) 'For pid#,term#,k= ',pid,i,k
729 C--> write(8,*) 'Vn_stdev = ',Vn_stdev(i,k,pid)
730 C--> write(8,*) 'which is not valid, must be => 0, STOP'
736 end do ! End of loop over Particle ID types.
738 ELSE IF (model_type .eq. 5) then
740 CCC Input for Factorized pt, eta bin-by-bin distribution:
742 do pid = 1,n_pid_type
744 read(4,*) mult_mean(pid), mult_variance_control(pid)
745 read(4,*) pt_start(pid), eta_start(pid)
746 read(4,*) n_pt_bins(pid), n_eta_bins(pid)
747 do i = 1,n_pt_bins(pid)
748 read(4,*) delta_pt(pid,i), pt_bin(pid,i)
750 do i = 1,n_eta_bins(pid)
751 read(4,*) delta_eta(pid,i), eta_bin(pid,i)
755 read(4,*) (Vn_mean(i,k,pid) ,k=1,4)
756 read(4,*) (Vn_stdev(i,k,pid),k=1,4)
758 CCC Anisotropic flow Fourier component coefficients specifying the
759 CCC azimuthal (phi angle) dependence as defined in Phys. Rev. C58,
760 CCC 1671 (1998), Eq.(1); 'nflowterms' number of parameters are
761 CCC allowed (see file 'Parameter_values.inc' where this is currently
762 CCC set to 6); these are the mean and Gaussian std. dev. to be used
763 CCC if random, Gaussian variation in the Vn values from event-to-event
764 CCC are selected (via reac_plane_cntrl).
765 CCC The flow parameters are pt and y dependent; see Function Vn_pt_y
766 CCC for the full definitions.
768 CCC Evaluate grid and find maximum values of pt and eta for input bins:
770 pt_stop(pid) = pt_start(pid)
771 do i = 1,n_pt_bins(pid)
772 pt_stop(pid) = pt_stop(pid) + delta_pt(pid,i)
773 pt_bin_mesh(pid,i) = pt_stop(pid)
775 eta_stop(pid) = eta_start(pid)
776 do i = 1,n_eta_bins(pid)
777 eta_stop(pid) = eta_stop(pid) + delta_eta(pid,i)
778 eta_bin_mesh(pid,i) = eta_stop(pid)
781 CCC Check ranges of pt and eta coverage:
783 if(pt_cut_min .lt. pt_start(pid)) then
784 C--> write(8,50) pt_cut_min,pt_start(pid)
785 50 Format(//10x,'pt_cut_min = ',F10.7,' .lt. pt_start =',
789 if(pt_cut_max .gt. pt_stop(pid)) then
790 C--> write(8,51) pt_cut_max,pt_stop(pid)
791 51 Format(//10x,'pt_cut_max = ',F10.7,' .gt. pt_stop =',
795 if(eta_cut_min .lt. eta_start(pid)) then
796 C--> write(8,52) eta_cut_min,eta_start(pid)
797 52 Format(//10x,'eta_cut_min = ',F10.7,'.lt.eta_start =',
801 if(eta_cut_max .gt. eta_stop(pid)) then
802 C--> write(8,53) eta_cut_max,eta_stop(pid)
803 53 Format(//10x,'eta_cut_max = ',F10.7,'.gt.eta_stop =',
810 if(Vn_stdev(i,k,pid) .lt. 0.0) then
811 C--> write(8,*) 'For pid#,term#,k= ',pid,i,k
812 C--> write(8,*) 'Vn_stdev = ',Vn_stdev(i,k,pid)
813 C--> write(8,*) 'which is not valid, must be => 0, STOP'
819 end do ! End loop over particle ID types.
821 ELSE IF (model_type .eq. 6) then
823 CCC Input for Full 2D (pt,eta) bin-by-bin distribution:
825 do pid = 1,n_pid_type
827 read(4,*) mult_mean(pid), mult_variance_control(pid)
828 read(4,*) pt_start(pid), eta_start(pid)
829 read(4,*) n_pt_bins(pid), n_eta_bins(pid)
830 do i = 1,n_pt_bins(pid)
831 read(4,*) delta_pt(pid,i)
833 do i = 1,n_eta_bins(pid)
834 read(4,*) delta_eta(pid,i)
837 CCC Evaluate grid and find maximum values of pt and eta for input bins:
839 pt_stop(pid) = pt_start(pid)
840 do i = 1,n_pt_bins(pid)
841 pt_stop(pid) = pt_stop(pid) + delta_pt(pid,i)
842 pt_bin_mesh(pid,i) = pt_stop(pid)
844 eta_stop(pid) = eta_start(pid)
845 do i = 1,n_eta_bins(pid)
846 eta_stop(pid) = eta_stop(pid) + delta_eta(pid,i)
847 eta_bin_mesh(pid,i) = eta_stop(pid)
850 CCC Load 2D bin-by-bin distribution:
852 do i = 1,n_pt_bins(pid)*n_eta_bins(pid)
853 read(4,*) iptbin,ietabin,bin_value
854 pt_eta_bin(pid,iptbin,ietabin) = bin_value
858 read(4,*) (Vn_mean(i,k,pid) ,k=1,4)
859 read(4,*) (Vn_stdev(i,k,pid),k=1,4)
861 CCC Anisotropic flow Fourier component coefficients specifying the
862 CCC azimuthal (phi angle) dependence as defined in Phys. Rev. C58,
863 CCC 1671 (1998), Eq.(1); 'nflowterms' number of parameters are
864 CCC allowed (see file 'Parameter_values.inc' where this is currently
865 CCC set to 6); these are the mean and Gaussian std. dev. to be used
866 CCC if random, Gaussian variation in the Vn values from event-to-event
867 CCC are selected (via reac_plane_cntrl).
868 CCC The flow parameters are pt and y dependent; see Function Vn_pt_y
869 CCC for the full definitions.
871 CCC Check ranges of pt and eta coverage:
873 if(pt_cut_min .lt. pt_start(pid)) then
874 C--> write(8,50) pt_cut_min,pt_start(pid)
877 if(pt_cut_max .gt. pt_stop(pid)) then
878 C--> write(8,51) pt_cut_max,pt_stop(pid)
881 if(eta_cut_min .lt. eta_start(pid)) then
882 C--> write(8,52) eta_cut_min,eta_start(pid)
885 if(eta_cut_max .gt. eta_stop(pid)) then
886 C--> write(8,53) eta_cut_max,eta_stop(pid)
891 if(Vn_stdev(i,k,pid) .lt. 0.0) then
892 C--> write(8,*) 'For pid#,term#,k= ',pid,i,k
893 C--> write(8,*) 'Vn_stdev = ',Vn_stdev(i,k,pid)
894 C--> write(8,*) 'which is not valid, must be => 0, STOP'
900 end do ! End loop over particle ID types.
902 END IF ! End of MODEL_TYPE Options input:
904 CCC Check some more input parameters; Set constants, and load data tables:
906 do pid = 1,n_pid_type
907 if(gpid(pid).le.0 .or. gpid(pid).gt.200) then
908 C--> write(8,43) pid,gpid(pid)
909 43 Format(//10x,'For pid # ',I7,', gpid = ',I7,' - not valid -STOP')
912 if(mult_variance_control(pid) .lt. 0 .or.
913 1 mult_variance_control(pid) .gt. 1)
914 2 mult_variance_control(pid) = 0
915 if(mult_mean(pid) .le. 0) then
916 C--> write(8,44) pid,mult_mean(pid)
917 44 Format(//10x,'For pid # ',I7,', mult_mean= ',I7,
918 1 ' - not valid -STOP')
921 end do ! End Particle ID input parameter check and verification loop.
928 CCC Load particle properties array; mass in GeV, etc.:
932 CCC Load log(n!) values into Common/FACFAC/
936 CCC Set y (rapidity) range, to be used for model_type = 1-4
937 if(eta_cut_min .ge. 0.0) then
940 y_cut_min = eta_cut_min
942 if(eta_cut_max .le. 0.0) then
945 y_cut_max = eta_cut_max
948 CCC Obtain integrals of 1D distribution functions of multiplicity
949 CCC (Poisson, integer) and parameters (Gaussian, real*4) for the
950 CCC particle model distributions, for each particle ID type.
951 CCC These integrated quantities are then used with random number
952 CCC selection to generate a distribution of multiplicities and
953 CCC parameter values for each event in the run.
955 CCC Obtain 1D integrals for Gaussian distributions for reaction plane
958 if(reac_plane_cntrl .eq. 3) then
959 if((n_stdev_PSIr*PSIr_stdev).gt. 0.0) then
960 PSIr_min = PSIr_mean - n_stdev_PSIr*PSIr_stdev
961 PSIr_max = PSIr_mean + n_stdev_PSIr*PSIr_stdev
962 Call Gaussian(PSIr_min,PSIr_max,PSIr_mean,PSIr_stdev,
963 1 n_integ_pts,integ,xfunc,nmax_integ)
964 do i = 1,n_integ_pts + 1
965 PSIr_integ_save(i) = integ(i)
966 PSIr_xfunc_save(i) = xfunc(i)
969 PSIr_event = PSIr_mean
973 CCC Obtain 1D integral for Gaussian distribution for the trigger fluctuation
974 CCC simulations via the overall multiplicity scaling factor.
975 if((n_stdev_MultFac*MultFac_stdev).gt.0.0) then
976 Call MinMax(MultFac_mean,MultFac_stdev,n_stdev_MultFac,
977 1 MultFac_min,MultFac_max)
978 Call Gaussian(MultFac_min,MultFac_max,MultFac_mean,
979 1 MultFac_stdev,n_integ_pts,integ,xfunc,nmax_integ)
980 do i = 1,n_integ_pts + 1
981 MultFac_integ_save(i) = integ(i)
982 MultFac_xfunc_save(i) = xfunc(i)
985 MultFac_event = MultFac_mean
988 do pid = 1,n_pid_type
990 Call Particle_mass(gpid(pid),pid,n_integ_pts)
992 if(mult_variance_control(pid) .ne. 0) then
993 mult_mean_real = float(mult_mean(pid))
994 mult_stdev = sqrt(mult_mean_real)
995 Call MinMax(mult_mean_real,mult_stdev,n_stdev_mult,
996 1 mult_min_real,mult_max_real)
997 mult_min = int(mult_min_real)
998 mult_max = int(mult_max_real + 1)
999 n_mult_steps(pid) = mult_max - mult_min + 1
1000 if((n_mult_steps(pid) + 1) .gt. n_mult_max_steps) then
1001 C--> write(8,20) n_mult_steps(pid),n_mult_max_steps
1002 20 Format(//10x,'No. steps in multiplicity integral = ',
1003 1 I7,' + 1, exceeds max no. of ',I7,'; reset')
1004 mult_min = mult_mean(pid) - (n_mult_max_steps - 1)/2
1005 mult_max = mult_mean(pid) + (n_mult_max_steps - 1)/2
1006 n_mult_steps(pid) = mult_max - mult_min + 1
1008 if((mult_max + 1) .gt. factorial_max) then
1009 C--> write(8,30) mult_max, factorial_max
1010 30 Format(//10x,'In Poisson multiplicity distribution,',
1011 1 ' max = ',I7,', exceeds limit of ',I7,' - STOP')
1015 Call Poisson(mult_min,mult_max,mult_mean(pid),
1016 1 n_mult_steps(pid),mult_integ,mult_xfunc,n_mult_max_steps)
1017 do i = 1,n_mult_steps(pid) + 1
1018 mult_integ_save(pid,i) = mult_integ(i)
1019 mult_xfunc_save(pid,i) = mult_xfunc(i)
1021 else if (mult_variance_control(pid) .eq. 0) then
1022 mult_event(pid) = mult_mean(pid)
1025 if(model_type .le. 4) then
1026 if(Temp_stdev(pid) .ne. 0.0) then
1027 Call MinMax(Temp_mean(pid),Temp_stdev(pid),n_stdev_temp,
1028 1 Temp_min, Temp_max)
1029 Call Gaussian(Temp_min,Temp_max,Temp_mean(pid),
1030 1 Temp_stdev(pid),n_integ_pts,integ,xfunc,nmax_integ)
1031 do i = 1,n_integ_pts + 1
1032 Temp_integ_save(pid,i) = integ(i)
1033 Temp_xfunc_save(pid,i) = xfunc(i)
1035 else if(Temp_stdev(pid) .eq. 0.0) then
1036 Temp_event(pid) = Temp_mean(pid)
1039 if(sigma_stdev(pid) .ne. 0.0) then
1040 Call MinMax(sigma_mean(pid),sigma_stdev(pid),n_stdev_sigma,
1041 1 sigma_min, sigma_max)
1042 Call Gaussian(sigma_min,sigma_max,sigma_mean(pid),
1043 1 sigma_stdev(pid),n_integ_pts,integ,xfunc,nmax_integ)
1044 do i = 1,n_integ_pts + 1
1045 sigma_integ_save(pid,i) = integ(i)
1046 sigma_xfunc_save(pid,i) = xfunc(i)
1048 else if(sigma_stdev(pid) .eq. 0.0) then
1049 sigma_event(pid) = sigma_mean(pid)
1052 if(expvel_stdev(pid) .ne. 0.0) then
1053 Call MinMax(expvel_mean(pid),expvel_stdev(pid),n_stdev_expvel,
1054 1 expvel_min, expvel_max)
1055 Call Gaussian(expvel_min,expvel_max,expvel_mean(pid),
1056 1 expvel_stdev(pid),n_integ_pts,integ,xfunc,nmax_integ)
1057 do i = 1,n_integ_pts + 1
1058 expvel_integ_save(pid,i) = integ(i)
1059 expvel_xfunc_save(pid,i) = xfunc(i)
1061 else if(expvel_stdev(pid) .eq. 0.0) then
1062 expvel_event(pid) = expvel_mean(pid)
1064 end if ! End model_type .le. 4 options.
1066 if(reac_plane_cntrl .gt. 1) then
1069 if((n_stdev_Vn*Vn_stdev(i,k,pid)) .gt. 0.0) then
1070 Vn_min = Vn_mean(i,k,pid)-n_stdev_Vn*Vn_stdev(i,k,pid)
1071 Vn_max = Vn_mean(i,k,pid)+n_stdev_Vn*Vn_stdev(i,k,pid)
1072 Call Gaussian(Vn_min,Vn_max,Vn_mean(i,k,pid),
1073 1 Vn_stdev(i,k,pid),n_integ_pts,integ,xfunc,nmax_integ)
1075 do j = 1,n_integ_pts + 1
1076 Vn1_integ_save(i,pid,j) = integ(j)
1077 Vn1_xfunc_save(i,pid,j) = xfunc(j)
1079 else if(k.eq.2) then
1080 do j = 1,n_integ_pts + 1
1081 Vn2_integ_save(i,pid,j) = integ(j)
1082 Vn2_xfunc_save(i,pid,j) = xfunc(j)
1084 else if(k.eq.3) then
1085 do j = 1,n_integ_pts + 1
1086 Vn3_integ_save(i,pid,j) = integ(j)
1087 Vn3_xfunc_save(i,pid,j) = xfunc(j)
1089 else if(k.eq.4) then
1090 do j = 1,n_integ_pts + 1
1091 Vn4_integ_save(i,pid,j) = integ(j)
1092 Vn4_xfunc_save(i,pid,j) = xfunc(j)
1096 Vn_event(i,k,pid) = Vn_mean(i,k,pid)
1102 end do ! End of PID Loop:
1104 CCC Write Run Header Output:
1107 C--> write(7,201) n_events,n_pid_type
1108 C--> if(model_type .eq. 1) write(7,202)
1109 C--> if(model_type .eq. 2) write(7,203)
1110 C--> if(model_type .eq. 3) write(7,204)
1111 C--> if(model_type .eq. 4) write(7,205)
1112 C--> if(model_type .eq. 5) write(7,2051)
1113 C--> if(model_type .eq. 6) write(7,2052)
1114 C--> write(7,2053) reac_plane_cntrl
1115 C--> write(7,2054) PSIr_mean, PSIr_stdev
1116 C--> write(7,2055) MultFac_mean,MultFac_stdev
1117 C--> write(7,206) pt_cut_min, pt_cut_max
1118 C--> write(7,207) eta_cut_min, eta_cut_max
1119 C--> write(7,2071) y_cut_min,y_cut_max
1120 C--> write(7,208) phi_cut_min, phi_cut_max
1121 C--> write(7,209) n_stdev_mult,n_stdev_temp,n_stdev_sigma,
1122 C--> 1 n_stdev_expvel
1123 C--> write(7,2091) n_stdev_PSIr, n_stdev_Vn
1124 C--> write(7,2092) n_stdev_MultFac
1125 C--> write(7,210) n_integ_pts
1126 C--> write(7,211) n_scan_pts
1127 C--> write(7,212) irand
1128 C--> write(7,213) (gpid(pid),pid = 1,n_pid_type)
1129 C--> write(7,214) (mult_mean(pid),pid = 1,n_pid_type)
1130 C--> write(7,215) (mult_variance_control(pid),pid = 1,n_pid_type)
1131 C--> if(model_type .le. 4) then
1132 C--> write(7,216) (Temp_mean(pid),pid = 1,n_pid_type)
1133 C--> write(7,217) (Temp_stdev(pid),pid = 1,n_pid_type)
1134 C--> write(7,218) (sigma_mean(pid),pid = 1,n_pid_type)
1135 C--> write(7,219) (sigma_stdev(pid),pid = 1,n_pid_type)
1136 C--> write(7,220) (expvel_mean(pid),pid = 1,n_pid_type)
1137 C--> write(7,221) (expvel_stdev(pid),pid = 1,n_pid_type)
1138 C--> else if(model_type .ge. 5) then
1139 C--> write(7,222) (n_pt_bins(pid),pid = 1,n_pid_type)
1140 C--> write(7,223) (n_eta_bins(pid),pid = 1,n_pid_type)
1141 C--> write(7,224) (pt_start(pid),pid = 1,n_pid_type)
1142 C--> write(7,225) (pt_stop(pid),pid = 1,n_pid_type)
1143 C--> write(7,226) (eta_start(pid),pid = 1,n_pid_type)
1144 C--> write(7,227) (eta_stop(pid),pid = 1,n_pid_type)
1146 CCC Print out flow parameters:
1147 do pid = 1,n_pid_type
1149 C--> write(7,2271) pid,i,(Vn_mean(i,k,pid),k=1,4)
1150 C--> write(7,2272) pid,i,(Vn_stdev(i,k,pid),k=1,4)
1154 200 Format('*** Multiplicity Generator Run Header ***')
1155 201 Format('* Number of events = ',I7,'; number of Particle ID',
1157 202 Format('* Factorized mt exponential, Gaussian rapidity model')
1158 203 Format('* Pratt non-expanding, spherical thermal source model')
1159 204 Format('* Bertsch non-expanding spherical thermal source model')
1160 205 Format('* Pratt spherically expanding, thermally equilibrated ',
1162 2051 Format('* Factorized pt,eta bin-by-bin Distribution')
1163 2052 Format('* Full 2D pt,eta bin-by-bin Distribution')
1164 2053 Format('* Reaction plane control = ',I5)
1165 2054 Format('* Reaction plane angles - mean and std.dev. = ',2G12.5,
1167 2055 Format('* Multiplicity Scaling Factor - mean and std.dev = ',
1169 206 Format('* Min, Max range in pt = ', 2G12.5)
1170 207 Format('* Min, Max range in pseudorapidity = ', 2G12.5)
1171 2071 Format('* Min, Max range in rapdity + cush = ', 2G12.5)
1172 208 Format('* Min, Max range in azimuthal angle = ', 2G12.5)
1173 209 Format('* No. std. dev. range used for mult and parameters = ',
1175 2091 Format('* No. std. dev. range for PSIr, Vn = ', 2G12.5)
1176 2092 Format('* No. std. dev. range for MultFac = ',G12.5)
1177 210 Format('* No. integration points for parameter variance = ',
1179 211 Format('* No. of dN/dp(pt,y) scanning grid points to find ',
1181 212 Format('* Starting Random Number Seed = ',I10)
1182 213 Format('* Geant PID: ',10I7)
1183 214 Format('* Mean Multiplicity: ',10I7)
1184 215 Format('* Mult. Var. Control: ',10I7)
1185 216 Format('* Mean Temperature: ',10F7.4)
1186 217 Format('* Std. Dev. Temp: ',10F7.4)
1187 218 Format('* Mean Rap. sigma: ',10F7.4)
1188 219 Format('* Std. Dev. y-sigma: ',10F7.4)
1189 220 Format('* Mean expansion vel: ',10F7.4)
1190 221 Format('* Std. Dev. exp. vel: ',10F7.4)
1191 222 Format('* No. input pt bins: ',10I7)
1192 223 Format('* No. input eta bins: ',10I7)
1193 224 Format('* Input pt start: ',10F7.4)
1194 225 Format('* Input pt stop: ',10F7.4)
1195 226 Format('* Input eta start: ',10F7.4)
1196 227 Format('* Input eta stop: ',10F7.4)
1197 2271 Format('* Anisotropy Vn mean (pid=',I2,',n=',I1,'):',4G12.5)
1198 2272 Format('* Anisotropy Vn std. (pid=',I2,',n=',I1,'):',4G12.5)
1200 CCC END Run Header Output
1202 C**************************************************************
1204 C START EVENT LOOP **
1206 C**************************************************************
1208 DO ievent = 1,n_events
1210 CCC Compute the Reaction plane angle for this event:
1211 if(reac_plane_cntrl .eq. 1) then
1213 else if(reac_plane_cntrl .eq. 2) then
1214 PSIr_event = PSIr_mean
1215 else if(reac_plane_cntrl .eq. 3) then
1216 if((n_stdev_PSIr*PSIr_stdev) .gt. 0.0) then
1217 do i = 1,n_integ_pts + 1
1218 integ(i) = PSIr_integ_save(i)
1219 xfunc(i) = PSIr_xfunc_save(i)
1221 Call LAGRNG(ran(irand),integ,PSIr_event,xfunc,
1222 1 n_integ_pts+1,1,5,n_integ_pts+1,1)
1223 CCC Ensure that the randomly selected reaction plane angle
1224 CCC is within the 0 to 360 deg range.
1225 PSIr_event=PSIr_event-360.0*float(int(PSIr_event/360.0))
1226 if(PSIr_event .lt. 0.0) PSIr_event = PSIr_event + 360.0
1228 CCC NOTE: If PSIr_stdev=0.0, PSIr_event already calculated (see preceding)
1229 else if(reac_plane_cntrl .eq. 4) then
1230 PSIr_event = 360.0*ran(irand)
1235 CCC Compute the multiplicity scaling factor for simulating trigger
1236 CCC fluctuations for this event:
1237 if((n_stdev_MultFac*MultFac_stdev).gt.0.0) then
1238 do i = 1,n_integ_pts + 1
1239 integ(i) = MultFac_integ_save(i)
1240 xfunc(i) = MultFac_xfunc_save(i)
1242 Call LAGRNG(ran(irand),integ,MultFac_event,xfunc,
1243 1 n_integ_pts+1,1,5,n_integ_pts+1,1)
1246 do pid = 1,n_pid_type
1247 if(mult_variance_control(pid) .ne. 0) then
1248 do i = 1,n_mult_steps(pid) + 1
1249 mult_integ(i) = mult_integ_save(pid,i)
1250 mult_xfunc(i) = mult_xfunc_save(pid,i)
1252 Call LAGRNG(ran(irand),mult_integ,mult_event_real,
1253 1 mult_xfunc,n_mult_steps(pid)+1,1,5,
1254 2 n_mult_steps(pid)+1,1)
1255 mult_event(pid) = mult_event_real
1256 else if(mult_variance_control(pid) .eq. 0) then
1257 mult_event(pid) = mult_mean(pid)
1259 mult_event(pid) = int(MultFac_event*float(mult_event(pid))
1261 CCC Check each multiplicity wrt upper array size limit:
1262 if(mult_event(pid).gt.factorial_max) then
1263 C--> write(8,*) 'For event#',ievent,'and pid#',pid,
1264 C--> 1 'multiplicity=',mult_event(pid),
1265 C--> 2 'which is > array size (factorial_max=',
1266 C--> 3 factorial_max,')-STOP'
1270 if(model_type .le. 4) then
1272 if(Temp_stdev(pid) .ne. 0.0) then
1273 do i = 1,n_integ_pts + 1
1274 integ(i) = Temp_integ_save(pid,i)
1275 xfunc(i) = Temp_xfunc_save(pid,i)
1277 Call LAGRNG(ran(irand),integ,Temp_event(pid),xfunc,
1278 1 n_integ_pts+1,1,5,n_integ_pts+1,1)
1281 if(sigma_stdev(pid) .ne. 0.0) then
1282 do i = 1,n_integ_pts + 1
1283 integ(i) = sigma_integ_save(pid,i)
1284 xfunc(i) = sigma_xfunc_save(pid,i)
1286 Call LAGRNG(ran(irand),integ,sigma_event(pid),xfunc,
1287 1 n_integ_pts+1,1,5,n_integ_pts+1,1)
1290 if(expvel_stdev(pid) .ne. 0.0) then
1291 do i = 1,n_integ_pts + 1
1292 integ(i) = expvel_integ_save(pid,i)
1293 xfunc(i) = expvel_xfunc_save(pid,i)
1295 Call LAGRNG(ran(irand),integ,expvel_event(pid),xfunc,
1296 1 n_integ_pts+1,1,5,n_integ_pts+1,1)
1300 if(reac_plane_cntrl .gt. 1) then
1303 if((n_stdev_Vn*Vn_stdev(i,k,pid)) .gt. 0.0) then
1305 do j = 1,n_integ_pts + 1
1306 integ(j) = Vn1_integ_save(i,pid,j)
1307 xfunc(j) = Vn1_xfunc_save(i,pid,j)
1309 else if (k.eq.2) then
1310 do j = 1,n_integ_pts + 1
1311 integ(j) = Vn2_integ_save(i,pid,j)
1312 xfunc(j) = Vn2_xfunc_save(i,pid,j)
1314 else if (k.eq.3) then
1315 do j = 1,n_integ_pts + 1
1316 integ(j) = Vn3_integ_save(i,pid,j)
1317 xfunc(j) = Vn3_xfunc_save(i,pid,j)
1319 else if (k.eq.4) then
1320 do j = 1,n_integ_pts + 1
1321 integ(j) = Vn4_integ_save(i,pid,j)
1322 xfunc(j) = Vn4_xfunc_save(i,pid,j)
1325 Call LAGRNG(ran(irand),integ,Vn_event(i,k,pid),xfunc,
1326 1 n_integ_pts+1,1,5,n_integ_pts+1,1)
1327 end if ! (For n_stdev_Vn*Vn_stdev=0, already have Vn_event)
1332 end do ! End Particle ID setup Loop
1336 if(model_type .le. 4) then
1337 CCC Check validity of Temperature and sigma parameters:
1338 do pid = 1,n_pid_type
1339 if(Temp_event(pid) .le. Temp_abort) event_abort = -86
1340 if(sigma_event(pid).le.sigma_abort) event_abort = -86
1344 if(event_abort .eq. 1) then
1347 do pid = 1,n_pid_type
1348 total_mult = total_mult + mult_event(pid)
1352 do pid = 1,n_pid_type
1353 CCC Load Anisotropic flow parameters for this event# and PID type
1354 CCC into temporary array;
1357 Vn_event_tmp(i,k) = Vn_event(i,k,pid)
1360 CCC For the specified Geant PID, multiplicity, model type, temperature,
1361 CCC rapidity width (sigma), and expansion velocity parameter, generate
1362 CCC random track list:
1364 Call track_gen(gpid(pid),mult_event(pid),model_type,
1365 1 Temp_event(pid),sigma_event(pid),expvel_event(pid),
1366 2 reac_plane_cntrl,PSIr_event,Vn_event_tmp,
1367 3 pt_cut_min,pt_cut_max,eta_cut_min,eta_cut_max,
1368 4 y_cut_min,y_cut_max,
1369 5 phi_cut_min,phi_cut_max,n_scan_pts,irand,rad,pid,status,
1371 if(status .eq. -86) status_abort = -86
1375 if(event_abort.eq.1 .and. status_abort.eq.1) then
1376 CCC Event Header Output:
1377 C--> write(7,230) ievent, total_mult
1378 C--> write(7,2301) PSIr_event
1379 C--> write(7,2302) MultFac_event
1380 C--> write(7,213) (gpid(pid),pid = 1,n_pid_type)
1381 C--> write(7,231) (mult_event(pid),pid = 1,n_pid_type)
1382 C--> if(model_type .le. 4) then
1383 C--> write(7,232) (Temp_event(pid),pid = 1,n_pid_type)
1384 C--> write(7,233) (sigma_event(pid),pid = 1,n_pid_type)
1385 C--> write(7,234) (expvel_event(pid),pid = 1,n_pid_type)
1388 230 Format(/'*** Next Event: No. ',I7,'; Total # tracks = ',I10)
1389 2301 Format('* Reaction plane angle = ',G12.5,' (deg)')
1390 2302 Format('* Multiplicity Scaling Factor = ',G12.5)
1391 231 Format('* Multiplicity: ',10I7)
1392 232 Format('* Temperature: ',10F7.4)
1393 233 Format('* Rapidity Dist. sigma: ',10F7.4)
1394 234 Format('* Expansion Velocity: ',10F7.4)
1396 CCC Print out flow parameters for this event:
1397 C--> do pid = 1,n_pid_type
1398 C--> do i = 1,nflowterms
1399 C--> write(7,2341) pid,i,(Vn_event(i,k,pid),k=1,4)
1402 2341 Format('* Anisotropy Vn (pid=',I2,',n=',I1,'):',4G12.5)
1404 C--> write(7,235) ievent,total_mult,n_vertices
1405 235 Format('EVENT:',3x,3(1x,I6))
1408 236 Format('*** Tracks for this event ***')
1409 237 Format('* Geant PID # px py pz')
1410 CCC End Event Header Output:
1412 CCC Output track kinematics for ievent and pid:
1416 do pid = 1,n_pid_type
1417 do i = 1,mult_event(pid)
1418 track_counter = track_counter + 1
1419 C--> write(7,240) gpid(pid),(pout(pid,j,i),j=1,3),
1420 C--> 1 track_counter,start_v,stop_v,gpid(pid)
1421 C-OUT masstemp = pout(pid,4,i)
1422 C-OUT pxtemp = pout(pid,1,i)
1423 C-OUT pytemp = pout(pid,2,i)
1424 C-OUT pztemp = pout(pid,3,i)
1425 C-OUT Call kinematics2(masstemp,pxtemp,pytemp,pztemp,pttemp,
1426 C-OUT 1 etatemp,ytemp,phitemp)
1427 C-OUT write(9,270) gpid(pid),masstemp,pttemp,etatemp,ytemp,phitemp
1428 C-OUT270 Format(1x,I4,5E15.6)
1429 masstemp = pout(pid,4,i)
1430 pxtemp = pout(pid,1,i)
1431 pytemp = pout(pid,2,i)
1432 pztemp = pout(pid,3,i)
1433 Call kinematics2(masstemp,pxtemp,pytemp,pztemp,pttemp,
1434 1 etatemp,ytemp,phitemp)
1435 C--> write(9,270) gpid(pid),masstemp,pttemp,etatemp,ytemp,phitemp
1436 270 Format(1x,I4,5E15.6)
1437 C-OUT Compute the cos(n*phi) Fourier component projections of the
1438 C-OUT azimuthal distributions for each PID type:
1439 total_mult_inc(pid) = total_mult_inc(pid) + 1
1443 if(ytemp.ge.0.0) then
1445 1 cos(float(j)*(phitemp-PSIr_event)/rad)
1446 else if(ytemp.lt.0.0) then
1448 1 -cos(float(j)*(phitemp-PSIr_event)/rad)
1450 else if(jodd.eq.(-1)) then
1452 1 cos(float(j)*(phitemp-PSIr_event)/rad)
1455 Vn_sum(j,pid) = Vn_sum(j,pid) + cosinefac(j)
1457 C--> write(10,260) gpid(pid),(cosinefac(j),j=1,nflowterms)
1458 260 Format(1x,I3,6E12.4)
1463 240 Format('TRACK:',1x,I6,3(1x,G12.5),4(1x,I6))
1464 CCC End track kinematics output.
1467 C--> write(7,250) ievent, event_abort, status_abort
1468 C--> write(8,250) ievent, event_abort, status_abort
1469 250 Format(/'*** Event No. ',I7,' ABORTED: event_abort,',
1470 1 'status_abort = ',2I7)
1473 END DO ! End Event Loop
1475 CCC Output Anisotropic flow check sums to terminal:
1476 do pid = 1,n_pid_type
1477 C--> write(6,*) 'Total incl # part type (',gpid(pid),
1478 C--> 1 ') = ',total_mult_inc(pid)
1480 Vn_sum(j,pid) = Vn_sum(j,pid)/total_mult_inc(pid)
1481 C--> write(6,*) 'Flow term #',j,': Check sum = ',
1482 C--> 1 Vn_sum(j,pid)
1486 CCC Output File Termination:
1491 C--> write(7,235) ievent,total_mult,n_vertices
1492 241 Format(/'*** End of File ***')
1498 C-OUT Close(Unit=10)
1504 Subroutine track_gen(gpid,N,model_type,T,sigma,expvel,
1505 1 reac_plane_cntrl,PSIr,Vn,
1506 2 pt_cut_min,pt_cut_max,eta_cut_min,eta_cut_max,
1507 3 y_cut_min,y_cut_max,
1508 4 phi_cut_min,phi_cut_max,n_scan_pts,irand,rad,pid,status,
1511 Include 'common_facfac.inc'
1512 Include 'Parameter_values.inc'
1513 Common/track/ pout(npid,4,factorial_max)
1515 Common/Geant/geant_mass(200),geant_charge(200),
1516 1 geant_lifetime(200),geant_width(200)
1517 real*4 geant_mass,geant_charge,geant_lifetime,geant_width
1519 real*4 T,sigma,expvel,pt_cut_min,pt_cut_max,eta_cut_min
1520 real*4 eta_cut_max,phi_cut_min,phi_cut_max,mass
1521 real*4 dpt,deta,facmax,pt,eta,y,rapidity,dNdpty,dNdp
1522 real*4 pt_trial,eta_trial,y_trial,ran,rad,phi
1523 real*4 y_cut_min,y_cut_max,pseudorapidity
1524 real*4 PSIr,Vn(nflowterms,4),dphi,facmax_phi,dNdphi
1525 real*4 Vnptmax,Vnymax,Vn_pt_y,Vntmp(nflowterms)
1526 real*4 masstmp,Mass_function
1528 integer gpid,N,model_type,npt,neta,n_scan_pts,ipt,ieta
1529 integer Track_count,irand,i,j,pid,status
1530 integer reac_plane_cntrl,iphi
1535 do i = 1,factorial_max
1541 mass = geant_mass(gpid)
1545 CCC Determine maximum value of model distribution in (pt,eta) range:
1547 dpt = (pt_cut_max - pt_cut_min)/float(npt - 1)
1548 deta = (eta_cut_max - eta_cut_min)/float(neta - 1)
1551 pt = pt_cut_min + dpt*float(ipt - 1)
1553 eta = eta_cut_min + deta*float(ieta - 1)
1554 y = rapidity(mass,pt,eta)
1555 dNdp = dNdpty(1.0,pt,eta,y,mass,T,sigma,expvel,
1557 if(dNdp .gt. facmax) facmax = dNdp
1561 CCC If dNdp always underflows exp() range, then facmax will stay
1562 CCC equal to 0.0, thus causing a divide by 0.0 error below.
1563 CCC Check for this and Return if this is the case. This event will
1564 CCC be aborted in this instance.
1566 if(facmax .eq. 0.0) then
1573 CCC Determine the maximum values of the azimuthal model distribution
1574 CCC in phi, for case with reaction plane dependence and anisotropic flow
1575 CCC Find the absolute maximum possible value given the pt and y dependences
1576 CCC and assuming all Fourier components add with maximum coherence.
1578 if(reac_plane_cntrl .gt. 1) then
1581 if(i.eq.(2*(i/2))) then ! Select even Fourier components:
1583 1 abs(Vn(i,1)+Vn(i,4)*pt_cut_min
1584 3 +Vn(i,2)*pt_cut_min*pt_cut_min),
1585 2 abs(Vn(i,1)+Vn(i,4)*pt_cut_max
1586 4 +Vn(i,2)*pt_cut_max*pt_cut_max))
1588 1 exp(-Vn(i,3)*y_cut_min*y_cut_min),
1589 2 exp(-Vn(i,3)*y_cut_max*y_cut_max))
1590 if(y_cut_min.lt.0.0 .and. y_cut_max.gt.0.0) then
1591 Vnymax = max(Vnymax,1.0)
1593 else ! Select odd Fourier components
1595 1 abs(Vn(i,1)+Vn(i,2)*pt_cut_min),
1596 2 abs(Vn(i,1)+Vn(i,2)*pt_cut_max))
1598 1 abs(Vn(i,3)+Vn(i,4)*abs(y_cut_min**3)),
1599 2 abs(Vn(i,3)+Vn(i,4)*abs(y_cut_max**3)))
1600 if(y_cut_min.lt.0.0 .and. y_cut_max.gt.0.0) then
1601 Vnymax = max(Vnymax,abs(Vn(i,3)))
1604 facmax_phi = facmax_phi + 2.0*Vnptmax*Vnymax
1606 CCC Check facmax_phi; if 0, then event will be aborted.
1607 if(facmax_phi.eq.0.0) then
1615 CCC Start Random Track Selection:
1619 100 pt_trial = ran(irand)*(pt_cut_max - pt_cut_min)+pt_cut_min
1620 if(model_type.ge.1 .and. model_type.le.4) then
1621 y_trial = ran(irand)*(y_cut_max - y_cut_min)+y_cut_min
1622 eta_trial = pseudorapidity(mass,pt_trial,y_trial)
1623 if(eta_trial.lt.eta_cut_min .or. eta_trial.gt.eta_cut_max)
1625 else if (model_type.eq.5 .or. model_type.eq.6) then
1626 eta_trial=ran(irand)*(eta_cut_max-eta_cut_min)+eta_cut_min
1627 y_trial = rapidity(mass,pt_trial,eta_trial)
1629 dNdp = dNdpty(1.0,pt_trial,eta_trial,y_trial,mass,T,sigma,
1630 1 expvel,model_type,1,pid)/facmax
1631 if(ran(irand) .le. dNdp) then
1632 Track_count = Track_count + 1
1634 CCC Determine phi angle:
1635 if(reac_plane_cntrl .eq. 1) then
1636 phi = (ran(irand)*(phi_cut_max - phi_cut_min) +
1638 else if(reac_plane_cntrl .gt. 1) then
1640 Vntmp(i) = Vn_pt_y(i,Vn(i,1),Vn(i,2),Vn(i,3),Vn(i,4),
1643 101 phi = ran(irand)*(phi_cut_max - phi_cut_min)+phi_cut_min
1646 dNdphi=dNdphi+2.0*Vntmp(i)*cos(float(i)*(phi-PSIr)/rad)
1648 if(ran(irand).gt.(dNdphi/facmax_phi)) then
1655 masstmp = Mass_function(gpid,pid,n_integ_pts,irand)
1656 Call kinematics(masstmp,pt_trial,y_trial,phi,Track_count,pid)
1657 if(Track_count .lt. N) then
1659 else if(Track_count .ge. N) then
1669 Real*4 Function rapidity(m,pt,eta)
1671 real*4 m,pt,eta,theta,pz,E,pi,expR
1674 theta = 2.0*ATAN(expR(-eta))
1675 if(abs(theta - pi/2.0) .lt. 0.000001) then
1680 E = sqrt(pt*pt + pz*pz + m*m)
1681 rapidity = 0.5*log((E+pz)/(E-pz))
1685 Real*4 Function pseudorapidity(m,pt,y)
1688 CCC This Function computes the pseudorapidty for a given mass, pt, y:
1690 real*4 m,pt,y,mt,coshy,E,pzmag,pz,pmag,expR
1693 pseudorapidity = 0.0
1696 mt = sqrt(m*m + pt*pt)
1697 coshy = 0.5*(expR(y) + expR(-y))
1699 pzmag = sqrt(abs(E*E - mt*mt))
1703 pz = (y/abs(y))*pzmag
1705 pmag = sqrt(pt*pt + pz*pz)
1706 if( (pt.ne.0.0) .and. (pmag .ne.pz) .and. (pmag.ne.(-pz)) ) then
1708 pseudorapidity = 0.5*log((pmag+pz)/(pmag-pz))
1710 CCC if (pt.eq.0.0) then
1711 pseudorapidity = 86.0
1713 10 Format(10x,'Function pseudorapidity called with pt=0')
1718 Subroutine kinematics(m,pt,y,phi,index,pid)
1721 CCC This SUBR takes the input particle mass (m), pt, y and phi and
1722 CCC computes E, px, py, pz and loads the momenta into the index-th
1723 CCC row of array pout(,,) in Common/track/ .
1726 Include 'common_facfac.inc'
1727 Include 'Parameter_values.inc'
1728 Common/track/ pout(npid,4,factorial_max)
1731 real*4 m,pt,y,phi,mt,coshy,E,pzmag,px,py,pz,expR
1733 mt = sqrt(m*m + pt*pt)
1734 coshy = 0.5*(expR(y) + expR(-y))
1736 pzmag = sqrt(abs(E*E - mt*mt))
1740 pz = (y/abs(y))*pzmag
1745 pout(pid,1,index) = px
1746 pout(pid,2,index) = py
1747 pout(pid,3,index) = pz
1748 pout(pid,4,index) = m
1753 Subroutine kinematics2(m,px,py,pz,pt,eta,y,phi)
1756 CCC This SUBR takes the input particle mass (m), px,py,pz and
1757 CCC computes pt,eta,y,phi:
1759 real*4 m,px,py,pz,pt,eta,y,phi,pi,E,E0
1762 pt = sqrt(px*px + py*py)
1763 E = sqrt(m*m + pz*pz + pt*pt)
1764 y = 0.5*log((E + pz)/(E - pz))
1765 E0 = sqrt(pz*pz + pt*pt)
1769 eta = 0.5*log((E0 + pz)/(E0 - pz))
1771 if(px.eq.0.0 .and. py.eq.0.0) then
1776 phi = (180.0/pi)*phi
1777 if(phi .lt. 0.0) phi = phi + 360.0
1781 Real*4 Function dNdpty(A,pt,eta,y,m,T,sigma,vel,control,ktl,pid)
1784 real*4 A,pt,eta,y,m,T,sigma,vel
1785 real*4 pi,mt,coshy,E,ptot,FAC,gamma,yp,sinhyp,coshyp
1786 real*4 FAC2,FAC3,expR
1787 integer control, ktl,pid,pt_index,eta_index,index_locate
1788 Include 'Parameter_values.inc'
1789 Include 'common_dist_bin.inc'
1791 CCC Calculates dN/dp^3 using several models:
1793 CCC control = 1, Humanic factorized model
1794 CCC = 2, Pratt non-expanding spherical thermal source
1795 CCC = 3, Bertsch non-expanding spherical thermal source
1796 CCC = 4, Pratt spherical expanding thermally equilibrated
1798 CCC = 5, Factorized pt, eta bin-by-bin distribution.
1799 CCC = 6, Full 2D pt, eta bin-by-bin distribution.
1801 CCC ktl = 0, to return value of dN/dp^3
1802 CCC ktl = 1, to return value of dN/dpt*dy
1805 mt = sqrt(pt*pt + m*m)
1806 coshy = 0.5*(expR(y) + expR(-y))
1808 ptot = sqrt(E*E - m*m)
1811 else if(ktl .eq. 1) then
1815 if(control .eq. 1) then
1816 dNdpty = A*pt*expR(-mt/T)*expR(-y*y/(2.0*sigma*sigma))
1819 else if(control .eq. 2) then
1820 dNdpty = A*pt*E*expR(-E/T)
1823 else if(control .eq. 3) then
1824 dNdpty = A*pt*E/(expR(E/T) - 1.0)
1827 else if(control .eq. 4) then
1828 gamma = 1.0/sqrt(1.0 - vel*vel)
1829 yp = gamma*vel*ptot/T
1830 sinhyp = 0.5*(expR(yp) - expR(-yp))
1831 coshyp = 0.5*(expR(yp) + expR(-yp))
1832 if(yp .ne. 0.0) then
1837 FAC3 = FAC2+ (T/(gamma*E))*(FAC2 - coshyp)
1838 dNdpty = A*pt*E*expR(-gamma*E/T)*FAC3
1841 else if(control .eq. 5) then
1842 pt_index = index_locate(pid,pt,1)
1843 eta_index = index_locate(pid,eta,2)
1844 dNdpty = A*pt_bin(pid,pt_index)*eta_bin(pid,eta_index)
1847 else if(control .eq. 6) then
1848 pt_index = index_locate(pid,pt,1)
1849 eta_index = index_locate(pid,eta,2)
1850 dNdpty = A*pt_eta_bin(pid,pt_index,eta_index)
1861 Integer Function index_locate(pid,arg,kind)
1864 Include 'Parameter_values.inc'
1865 Include 'common_dist_bin.inc'
1867 integer pid,kind,ibin
1870 CCC This Function locates the pt or eta bin number corresponding to the
1871 CCC input bin mesh, the requested value of pt or eta, for the current
1872 CCC value of particle type.
1874 CCC If kind = 1, then pt bin number is located.
1875 CCC If kind = 2, then eta bin number is located.
1877 if(kind .eq. 1) then
1878 do ibin = 1,n_pt_bins(pid)
1879 if(arg.le.pt_bin_mesh(pid,ibin)) then
1884 index_locate = n_pt_bins(pid)
1885 C--> write(8,10) pid,arg
1886 10 Format(//10x,'In Function index_locate, for pid = ',I5,
1887 1 'pt =',E15.6,' is out of range - use last bin #')
1890 else if(kind .eq. 2) then
1892 do ibin = 1,n_eta_bins(pid)
1893 if(arg.le.eta_bin_mesh(pid,ibin)) then
1898 index_locate = n_eta_bins(pid)
1899 C--> write(8,11) pid,arg
1900 11 Format(//10x,'In Function index_locate, for pid = ',I5,
1901 1 'eta =',E15.6,' is out of range - use last bin #')
1907 Real*4 Function expR(x)
1910 if(x .gt. 69.0) then
1913 else if(x .lt. -69.0) then
1918 10 Format(///10x,'Func. expR(x) called with x = ',E15.6,
1919 1 ', gt 69.0 - STOP')
1923 SUBROUTINE LAGRNG (X,ARG,Y,VAL,NDIM,NFS,NPTS,MAXARG,MAXFS)
1924 IMPLICIT REAL*4(A-H,O-Z)
1926 C LAGRANGE INTERPOLATION,UNEQUALLY SPACED POINTS
1927 C ROUTINE OBTAINED FROM R. LANDAU, UNIV. OF OREGON.
1928 C ARG=VECTOR OF INDEPENDENT VARIABLE CONTAINING MAXARG VALUES.
1929 C VAL=MATRIX OF FUNCTION VALUES CORRESPONDING TO ARG. (MAXFS
1930 C FUNCTIONS AT MAXARG VALUES.)
1931 C X =VALUE OF INDEP. VARIABLE FOR WHICH INTERPOLATION IS DESIRED.
1932 C Y =VECTOR OF MAXFS FUNCTION VALUES RESULTING FROM SIMUL. INTERP.
1933 C NDIM=NUMBER OF ARG VALUES TO BE USED. (NDIM.LE.MAXARG)
1934 C NFS=NUMBER OF FUNCTIONS SIMUL. INTERP (NFS.LE.MAXFS)
1935 C NPTS=NUMBER OF POINTS USED IN INTERPOLATION. (NPTS=2,3,4,5,6)
1937 DIMENSION ARG(MAXARG), VAL(MAXFS,MAXARG), Y(MAXFS)
1939 C -----FIND X0, THE CLOSEST POINT TO X.
1943 10 IF ((X.LE.ARG(NI)).OR.(X.GE.ARG(NF))) GO TO 30
1944 IF ((NF-NI+1).EQ.2) GO TO 70
1946 IF (X.GT.ARG(NMID)) GO TO 20
1952 C ------ X IS ONE OF THE TABLULATED VALUES.
1954 30 IF (X.LE.ARG(NI)) GO TO 60
1963 C ------- 2 PTS LEFT, CHOOSE SMALLER ONE.
1967 GO TO (110,100,90,80), NN
1969 IF (((N0+3).GT.NDIM).OR.((N0-2).LT.1)) GO TO 90
1973 IF ((N0+2).GT.NDIM) GO TO 110
1974 IF ((N0-2).LT.1) GO TO 100
1978 IF (((N0+2).GT.NDIM).OR.((N0-1).LT.1)) GO TO 110
1981 110 IF ((N0+1).LT.NDIM) GO TO 120
1983 C ------N0=NDIM, SPECIAL CASE.
1988 IF ((N0-1).LT.1) NUSED=2
1991 C ------AT LEAST 2 PTS LEFT.
1998 IF (NUSED.EQ.2) GO TO 140
2000 C ------AT LEAST 3 PTS.
2005 CM1=-Y0*Y1/Y0M1/YM11
2008 IF (NUSED.EQ.3) GO TO 160
2010 C ------AT LEAST 4 PTS
2019 C2=-YM1*Y0*Y1/YM12/Y02/Y12
2020 IF (NUSED.EQ.4) GO TO 180
2022 C ------AT LEAST 5 PTS.
2029 CM2=YM1*Y0*Y1*Y2/YM2M1/YM20/YM21/YM22
2034 IF (NUSED.EQ.5) GO TO 200
2036 C ------AT LEAST 6 PTS.
2049 C3=YM2*YM1*Y0*Y1*Y2/YM23/YM13/Y03/Y13/Y23
2053 150 Y(N)=C0*VAL(N,N0)+C1*VAL(N,N0+1)
2057 170 Y(N)=CM1*VAL(N,N0-1)+C0*VAL(N,N0)+C1*VAL(N,N0+1)
2061 190 Y(N)=CM1*VAL(N,N0-1)+C0*VAL(N,N0)+C1*VAL(N,N0+1)+C2*VAL(N,N0+2)
2065 210 Y(N)=CM2*VAL(N,N0-2)+CM1*VAL(N,N0-1)+C0*VAL(N,N0)+C1*VAL(N,N0+1)+C
2070 230 Y(N)=CM2*VAL(N,N0-2)+CM1*VAL(N,N0-1)+C0*VAL(N,N0)+C1*VAL(N,N0+1)+C
2071 12*VAL(N,N0+2)+C3*VAL(N,N0+3)
2076 Subroutine FACTORIAL
2080 Include 'common_facfac.inc'
2083 CCC Computes the natural log of n! for n = 0,1,2...(factorial_max -1)
2084 CCC and puts the result in array FACLOG().
2086 CCC FACLOG(1) = log(0!) = 0.0
2087 CCC FACLOG(2) = log(1!) = 0.0
2088 CCC FACLOG(n+1) = log(n!)
2093 do n = 3,factorial_max
2095 FACLOG(n) = FACLOG(n-1) + log(FN)
2100 Subroutine MinMax(mean,stdev,n_stdev,min,max)
2103 CCC Computes range of integration for random number selections
2105 real*4 mean,stdev,n_stdev,min,max
2107 min = mean - n_stdev*stdev
2108 if(min .lt. 0.0) min = 0.0
2109 max = mean + n_stdev*stdev
2113 Subroutine Poisson(min,max,mean,nsteps,integ,xfunc,ndim)
2116 CCC Computes Poisson distribution from n = min to max;
2117 CCC Integrates this distribution and records result at each step in
2119 CCC Records the coordinates in array xfunc().
2121 integer min,max,mean,nsteps,ndim,i,n
2122 Include 'Parameter_values.inc'
2123 real*4 mean_real,mean_real_log,expR
2126 real*4 Poisson_dist(n_mult_max_steps)
2127 Include 'common_facfac.inc'
2129 CCC Initialize arrays to zero:
2134 Poisson_dist(i) = 0.0
2137 mean_real = float(mean)
2138 mean_real_log = log(mean_real)
2140 CCC Compute Poisson distribution from n = min to max:
2143 Poisson_dist(i) = expR(-mean_real + float(n)*mean_real_log
2147 CCC Integrate the Poisson distribution:
2150 integ(i) = 0.5*(Poisson_dist(i-1) + Poisson_dist(i)) + integ(i-1)
2153 CCC Normalize the integral to unity:
2155 integ(i) = integ(i)/integ(nsteps)
2158 CCC Fill xfunc array:
2160 xfunc(i) = float(i - 1 + min)
2163 CCC Extend integ() and xfunc() by one additional mesh point past the
2164 CCC end point in order to avoid a bug in the Lagrange interpolation
2165 CCC subroutine that gives erroneous interpolation results within the
2166 CCC the last mesh bin.
2168 integ(nsteps + 1) = integ(nsteps) + 0.01
2169 xfunc(nsteps + 1) = xfunc(nsteps)
2174 Subroutine Gaussian(min,max,mean,stdev,npts,integ,xfunc,ndim)
2177 CCC Compute Gaussian distribution from x = min to max at npts;
2178 CCC Integrate this distribution and record result at each mesh in
2180 CCC Record the coordinates in array xfunc().
2182 Include 'Parameter_values.inc'
2184 real*4 min,max,mean,stdev,integ(ndim),xfunc(ndim)
2185 real*4 dm,x,Gauss_dist(nmax_integ),FAC1,FAC2,pi,expR
2187 CCC Initialize arrays to zero:
2195 FAC1 = 1.0/(sqrt(2.0*pi)*stdev)
2196 FAC2 = 2.0*stdev*stdev
2197 dm = (max - min)/float(npts - 1)
2199 CCC Compute normalized Gaussian distribution:
2201 x = min + dm*float(i-1)
2203 Gauss_dist(i) = FAC1*expR(-((x - mean)**2)/FAC2)
2206 CCC Integrate Gaussian distribution over specified range
2209 integ(i) = 0.5*(Gauss_dist(i-1) + Gauss_dist(i))*dm + integ(i-1)
2212 CCC Normalize integral to unity:
2214 integ(i) = integ(i)/integ(npts)
2217 CCC Extend integ() and xfunc() by one mesh point to avoid Lagrange
2218 CCC interpolation subroutine bug:
2219 integ(npts + 1) = integ(npts) + 0.01
2220 xfunc(npts + 1) = xfunc(npts)
2225 Subroutine Particle_prop
2228 Common/Geant/geant_mass(200),geant_charge(200),
2229 1 geant_lifetime(200),geant_width(200)
2231 CCC Local Variable Type Declarations:
2233 real*4 geant_mass,geant_charge,geant_lifetime,geant_width
2235 Parameter(hbar = 6.5821220E-25) ! hbar in GeV*seconds
2237 CCC Fill arrays geant_mass(),geant_charge(),geant_lifetime(),
2238 CCC geant_width() with particle mass in GeV, charge in units of
2239 CCC |e|, mean lifetime in seconds, and width in GeV, where
2240 CCC width*lifetime = hbar. For lifetimes listed with values of
2241 CCC 1.0E+30 (i.e. stable particles) the width is set to 0.000.
2242 CCC Row # = Geant Particle ID # code (see Geant Manual 3.10,
2243 CCC User's Guide, CONS 300-1 and 300-2). Note, rows 151 and higher
2244 CCC are used for resonances. These assume the masses and widths
2245 CCC specific to the models used to represent the invariant mass
2246 CCC distributions and therefore may differ slightly from the Particle
2247 CCC Data Group's listing.
2249 CCC Initialize arrays to zero:
2252 geant_charge(i) = 0.0
2253 geant_lifetime(i) = 0.0
2254 geant_width(i) = 0.0
2257 CCC Set Particle Masses in GeV:
2258 geant_mass(1) = 0.0 ! Gamma
2259 geant_mass(2) = 0.000511 ! Positron
2260 geant_mass(3) = 0.000511 ! Electron
2261 geant_mass(4) = 0.0 ! Neutrino
2262 geant_mass(5) = 0.105659 ! Muon +
2263 geant_mass(6) = 0.105659 ! Muon -
2264 geant_mass(7) = 0.134693 ! Pion 0
2265 geant_mass(8) = 0.139567 ! Pion +
2266 geant_mass(9) = 0.139567 ! Pion -
2267 geant_mass(10) = 0.49767 ! Kaon 0 Long
2268 geant_mass(11) = 0.493667 ! Kaon +
2269 geant_mass(12) = 0.493667 ! Kaon -
2270 geant_mass(13) = 0.939573 ! Neutron
2271 geant_mass(14) = 0.93828 ! Proton
2272 geant_mass(15) = 0.93828 ! Antiproton
2273 geant_mass(16) = 0.49767 ! Kaon 0 Short
2274 geant_mass(17) = 0.5488 ! Eta
2275 geant_mass(18) = 1.11560 ! Lambda
2276 geant_mass(19) = 1.18936 ! Sigma +
2277 geant_mass(20) = 1.19246 ! Sigma 0
2278 geant_mass(21) = 1.19734 ! Sigma -
2279 geant_mass(22) = 1.31490 ! Xi 0
2280 geant_mass(23) = 1.32132 ! Xi -
2281 geant_mass(24) = 1.67245 ! Omega
2282 geant_mass(25) = 0.939573 ! Antineutron
2283 geant_mass(26) = 1.11560 ! Antilambda
2284 geant_mass(27) = 1.18936 ! Antisigma -
2285 geant_mass(28) = 1.19246 ! Antisigma 0
2286 geant_mass(29) = 1.19734 ! Antisigma +
2287 geant_mass(30) = 1.3149 ! Antixi 0
2288 geant_mass(31) = 1.32132 ! Antixi +
2289 geant_mass(32) = 1.67245 ! Antiomega +
2290 geant_mass(33) = 1.7842 ! Tau +
2291 geant_mass(34) = 1.7842 ! Tau -
2292 geant_mass(35) = 1.8694 ! D+
2293 geant_mass(36) = 1.8694 ! D-
2294 geant_mass(37) = 1.8647 ! D0
2295 geant_mass(38) = 1.8647 ! Anti D0
2296 geant_mass(39) = 1.9710 ! F+, now called Ds+
2297 geant_mass(40) = 1.9710 ! F-, now called Ds-
2298 geant_mass(41) = 2.2822 ! Lambda C+
2299 geant_mass(42) = 80.8000 ! W+
2300 geant_mass(43) = 80.8000 ! W-
2301 geant_mass(44) = 92.9000 ! Z0
2302 geant_mass(45) = 1.877 ! Deuteron
2303 geant_mass(46) = 2.817 ! Tritium
2304 geant_mass(47) = 3.755 ! Alpha
2305 geant_mass(48) = 0.0 ! Geantino
2306 geant_mass(49) = 2.80923 ! He3
2307 geant_mass(50) = 0.0 ! Cherenkov
2308 geant_mass(151) = 0.783 ! rho +
2309 geant_mass(152) = 0.783 ! rho -
2310 geant_mass(153) = 0.783 ! rho 0
2311 geant_mass(154) = 0.782 ! omega 0
2312 geant_mass(155) = 0.95750 ! eta'
2313 geant_mass(156) = 1.0194 ! phi
2314 geant_mass(157) = 3.09693 ! J/Psi
2315 geant_mass(158) = 1.232 ! Delta -
2316 geant_mass(159) = 1.232 ! Delta 0
2317 geant_mass(160) = 1.232 ! Delta +
2318 geant_mass(161) = 1.232 ! Delta ++
2319 geant_mass(162) = 0.89183 ! K* +
2320 geant_mass(163) = 0.89183 ! K* -
2321 geant_mass(164) = 0.89610 ! K* 0
2323 CCC Set Particle Charge in |e|:
2324 geant_charge( 1) = 0 ! Gamma
2325 geant_charge( 2) = 1 ! Positron
2326 geant_charge( 3) = -1 ! Electron
2327 geant_charge( 4) = 0 ! Neutrino
2328 geant_charge( 5) = 1 ! Muon+
2329 geant_charge( 6) = -1 ! Muon-
2330 geant_charge( 7) = 0 ! Pion0
2331 geant_charge( 8) = 1 ! Pion+
2332 geant_charge( 9) = -1 ! Pion-
2333 geant_charge(10) = 0 ! Kaon 0 long
2334 geant_charge(11) = 1 ! Kaon+
2335 geant_charge(12) = -1 ! Kaon-
2336 geant_charge(13) = 0 ! Neutron
2337 geant_charge(14) = 1 ! Proton
2338 geant_charge(15) = -1 ! Antiproton
2339 geant_charge(16) = 0 ! Kaon 0 short
2340 geant_charge(17) = 0 ! Eta
2341 geant_charge(18) = 0 ! Lambda
2342 geant_charge(19) = 1 ! Sigma+
2343 geant_charge(20) = 0 ! Sigma0
2344 geant_charge(21) = -1 ! Sigma-
2345 geant_charge(22) = 0 ! Xi 0
2346 geant_charge(23) = -1 ! Xi -
2347 geant_charge(24) = -1 ! Omega
2348 geant_charge(25) = 0 ! Antineutron
2349 geant_charge(26) = 0 ! Antilambda
2350 geant_charge(27) = -1 ! Anti-Sigma -
2351 geant_charge(28) = 0 ! Anti-Sigma 0
2352 geant_charge(29) = 1 ! Anti-Sigma +
2353 geant_charge(30) = 0 ! AntiXi 0
2354 geant_charge(31) = 1 ! AntiXi +
2355 geant_charge(32) = 1 ! Anti-Omega +
2356 geant_charge(33) = 1 ! Tau +
2357 geant_charge(34) = -1 ! Tau -
2358 geant_charge(35) = 1 ! D+
2359 geant_charge(36) = -1 ! D-
2360 geant_charge(37) = 0 ! D0
2361 geant_charge(38) = 0 ! Anti D0
2362 geant_charge(39) = 1 ! F+, now called Ds+
2363 geant_charge(40) = -1 ! F-, now called Ds-
2364 geant_charge(41) = 1 ! Lambda C+
2365 geant_charge(42) = 1 ! W+
2366 geant_charge(43) = -1 ! W-
2367 geant_charge(44) = 0 ! Z0
2368 geant_charge(45) = 1 ! Deuteron
2369 geant_charge(46) = 1 ! Triton
2370 geant_charge(47) = 2 ! Alpha
2371 geant_charge(48) = 0 ! Geantino (Fake particle)
2372 geant_charge(49) = 2 ! He3
2373 geant_charge(50) = 0 ! Cerenkov (Fake particle)
2374 geant_charge(151) = 1 ! rho+
2375 geant_charge(152) = -1 ! rho-
2376 geant_charge(153) = 0 ! rho 0
2377 geant_charge(154) = 0 ! omega 0
2378 geant_charge(155) = 0 ! eta'
2379 geant_charge(156) = 0 ! phi
2380 geant_charge(157) = 0 ! J/Psi
2381 geant_charge(158) = -1 ! Delta -
2382 geant_charge(159) = 0 ! Delta 0
2383 geant_charge(160) = 1 ! Delta +
2384 geant_charge(161) = 2 ! Delta ++
2385 geant_charge(162) = 1 ! K* +
2386 geant_charge(163) = -1 ! K* -
2387 geant_charge(164) = 0 ! K* 0
2389 CCC Set Particle Lifetimes in seconds:
2390 geant_lifetime( 1) = 1.0E+30 ! Gamma
2391 geant_lifetime( 2) = 1.0E+30 ! Positron
2392 geant_lifetime( 3) = 1.0E+30 ! Electron
2393 geant_lifetime( 4) = 1.0E+30 ! Neutrino
2394 geant_lifetime( 5) = 2.19703E-06 ! Muon+
2395 geant_lifetime( 6) = 2.19703E-06 ! Muon-
2396 geant_lifetime( 7) = 8.4E-17 ! Pion0
2397 geant_lifetime( 8) = 2.603E-08 ! Pion+
2398 geant_lifetime( 9) = 2.603E-08 ! Pion-
2399 geant_lifetime(10) = 5.16E-08 ! Kaon 0 long
2400 geant_lifetime(11) = 1.237E-08 ! Kaon+
2401 geant_lifetime(12) = 1.237E-08 ! Kaon-
2402 geant_lifetime(13) = 889.1 ! Neutron
2403 geant_lifetime(14) = 1.0E+30 ! Proton
2404 geant_lifetime(15) = 1.0E+30 ! Antiproton
2405 geant_lifetime(16) = 8.922E-11 ! Kaon 0 short
2406 geant_lifetime(17) = 5.53085E-19 ! Eta
2407 geant_lifetime(18) = 2.632E-10 ! Lambda
2408 geant_lifetime(19) = 7.99E-11 ! Sigma+
2409 geant_lifetime(20) = 7.40E-20 ! Sigma0
2410 geant_lifetime(21) = 1.479E-10 ! Sigma-
2411 geant_lifetime(22) = 2.90E-10 ! Xi 0
2412 geant_lifetime(23) = 1.639E-10 ! Xi -
2413 geant_lifetime(24) = 8.22E-11 ! Omega
2414 geant_lifetime(25) = 889.1 ! Antineutron
2415 geant_lifetime(26) = 2.632E-10 ! Antilambda
2416 geant_lifetime(27) = 7.99E-11 ! Anti-Sigma -
2417 geant_lifetime(28) = 7.40E-20 ! Anti-Sigma 0
2418 geant_lifetime(29) = 1.479E-10 ! Anti-Sigma +
2419 geant_lifetime(30) = 2.90E-10 ! AntiXi 0
2420 geant_lifetime(31) = 1.639E-10 ! AntiXi +
2421 geant_lifetime(32) = 8.22E-11 ! Anti-Omega +
2422 geant_lifetime(33) = 0.303E-12 ! Tau +
2423 geant_lifetime(34) = 0.303E-12 ! Tau -
2424 geant_lifetime(35) = 10.62E-13 ! D+
2425 geant_lifetime(36) = 10.62E-13 ! D-
2426 geant_lifetime(37) = 4.21E-13 ! D0
2427 geant_lifetime(38) = 4.21E-13 ! Anti D0
2428 geant_lifetime(39) = 4.45E-13 ! F+, now called Ds+
2429 geant_lifetime(40) = 4.45E-13 ! F-, now called Ds-
2430 geant_lifetime(41) = 1.91E-13 ! Lambda C+
2431 geant_lifetime(42) = 2.92E-25 ! W+
2432 geant_lifetime(43) = 2.92E-25 ! W-
2433 geant_lifetime(44) = 2.60E-25 ! Z0
2434 geant_lifetime(45) = 1.0E+30 ! Deuteron
2435 geant_lifetime(46) = 1.0E+30 ! Triton
2436 geant_lifetime(47) = 1.0E+30 ! Alpha
2437 geant_lifetime(48) = 1.0E+30 ! Geantino (Fake particle)
2438 geant_lifetime(49) = 1.0E+30 ! He3
2439 geant_lifetime(50) = 1.0E+30 ! Cerenkov (Fake particle)
2440 geant_lifetime(151) = 3.72E-24 ! rho +
2441 geant_lifetime(152) = 3.72E-24 ! rho -
2442 geant_lifetime(153) = 3.72E-24 ! rho 0
2443 geant_lifetime(154) = 7.84E-23 ! omega 0
2444 geant_lifetime(155) = 3.16E-21 ! eta'
2445 geant_lifetime(156) = 1.49E-22 ! phi
2446 geant_lifetime(157) = 9.68E-21 ! J/Psi
2447 geant_lifetime(158) = 9.27E-24 ! Delta -, Based on gamma = 71 MeV
2448 geant_lifetime(159) = 9.27E-24 ! Delta 0, -same-
2449 geant_lifetime(160) = 9.27E-24 ! Delta +, -same-
2450 geant_lifetime(161) = 9.27E-24 ! Delta ++,-same-
2451 geant_lifetime(162) = 1.322E-23 ! K* +
2452 geant_lifetime(163) = 1.322E-23 ! K* -
2453 geant_lifetime(164) = 1.303E-23 ! K* 0
2455 CCC Set Particle Widths in GeV:
2457 if(geant_lifetime(i) .le. 0.0) then
2458 geant_width(i) = 0.0
2459 else if(geant_lifetime(i) .ge. 1.0E+30) then
2460 geant_width(i) = 0.0
2462 geant_width(i) = hbar/geant_lifetime(i)
2469 Real*4 Function Vn_pt_y(n,V1,V2,V3,V4,pt,y)
2472 CCC Description: This function computes the pt,y dependent flow
2473 CCC parameters Vn(pt,y) for the requested Fourier
2474 CCC component, n = 1-6, pt (GeV/c) and y (rapidity).
2476 CCC Input: n = Fourier component, 1,2...6
2477 CCC V1 = Constant coefficient in pt dependent term
2478 CCC V2 = Coefficient of pt(pt^2) dependence for n odd (even).
2479 CCC V3 = Coefficient of y dependence; constant for n=odd,
2480 CCC and inverse range squared for Gaussian for n=even.
2481 CCC V4 = Coefficient of y^3 dependence for n=odd;
2482 CCC pt dependence for n = even.
2483 CCC pt = Transverse momentum (GeV/c)
2484 CCC y = Rapidity relative to y(C.M.)
2486 CCC Output: Vn_pt_y = Vn(pt,y) based on the model suggested by
2487 CCC Art Poskanzer (LBNL, Feb. 2000)
2488 CCC Vn_pt_y = (V1 + V4*pt + V2*pt*pt)*exp(-V3*y*y) ; n=even
2489 CCC Vn_pt_y = (V1 + V2*pt)*sign(y)*(V3 + V4*abs(y**3)); n=odd
2491 CCC Local Variable Type Declarations:
2494 real*4 V1,V2,V3,V4,pt,y,signy
2496 if(n .eq. (2*(n/2))) then
2497 Vn_pt_y = (V1 + V4*pt + V2*pt*pt)*exp(-V3*y*y)
2501 else if(y.lt.0.0) then
2504 Vn_pt_y = (V1 + V2*pt)*signy*(V3 + V4*abs(y**3))
2509 Subroutine Particle_mass(gpid,pid_index,npts)
2512 CCC Description: This subroutine computes the mass distributions for
2513 C included resonances at 'npts' number of mesh points in mass from the
2514 C lower mass limit to an upper mass limit (listed below), integrates
2515 C this mass distribution, normalizes the integral to 1.0, and saves
2516 C the mass steps and integral function in the arrays in Common/Mass/.
2517 C The mass distribution integral is then randomly sampled in a later
2518 C step in order to get the specific resonance mass instances.
2519 C For non-resonant particles (i.e. either stable or those with negligible
2520 C widths) this subroutine returns without doing anything, leaving the
2521 C arrays in Common/Mass/ set to zero. This subroutine is called for
2522 C a specific PID index, corresponding to the input list of particle
2525 C Input: gpid = Geant particle ID code number, see SUBR:
2526 C Particle_prop for listing.
2527 C pid_index = Particle type array index, determined by input
2529 C npts = n_integ_pts in calling program; is the number
2530 C of mass mesh points used to load the mass
2531 C distribution integral. Note that one extra
2532 C mesh point is added to handle the bug in the
2533 C Lagrange interpolator, LAGRNG.
2535 C Output: Mass_integ_save( , ) - mass distribution integral
2536 C Mass_xfunc_save( , ) - mass distribution mesh
2537 C These are in Common/Mass/.
2539 CCC Include files and common blocks:
2540 Include 'Parameter_values.inc'
2541 Common/Geant/geant_mass(200),geant_charge(200),
2542 1 geant_lifetime(200),geant_width(200)
2543 real*4 geant_mass,geant_charge,geant_lifetime,geant_width
2544 Common/Mass/ Mass_integ_save(npid,nmax_integ),
2545 1 Mass_xfunc_save(npid,nmax_integ)
2546 real*4 Mass_integ_save,Mass_xfunc_save
2548 CCC Local Variable Type Declarations:
2549 integer gpid,pid_index,npts,i
2550 real*4 dist(nmax_integ),dM,M0,Gamma,GammaS
2551 real*4 M,Mpi,MK,MN,R_Delta,Jinc,qR
2552 real*4 Mrho_low,Mrho_high,Momega_low,Momega_high
2553 real*4 Mphi_low,Mphi_high,MDelta_low,MDelta_high
2554 real*4 MKstar_low,MKstar_high
2555 real*4 kcm,k0cm,Ecm,E0cm,beta,beta0,Epicm,ENcm,redtotE
2557 CCC Set Fixed parameter values:
2558 Parameter(Mpi = 0.1395675) ! Charged pion mass (GeV)
2559 Parameter(MK = 0.493646) ! Charged kaon mass (GeV)
2560 Parameter(MN = 0.938919) ! Nucleon average mass (GeV)
2561 Parameter(R_Delta = 0.81) ! Delta resonance range parameter
2562 Parameter(Mrho_low = 0.28 ) ! Lower rho mass limit
2563 Parameter(Mrho_high = 1.200) ! Upper rho mass limit (GeV)
2564 Parameter(Momega_low = 0.75) ! Lower omega mass limit (GeV)
2565 Parameter(Momega_high = 0.81) ! Upper omega mass limit (GeV)
2566 Parameter(Mphi_low = 1.009) ! Lower phi mass limit (GeV)
2567 Parameter(Mphi_high = 1.029) ! Upper phi mass limit (GeV)
2568 Parameter(MDelta_low = 1.1 ) ! Lower Delta mass limit
2569 Parameter(MDelta_high = 1.400) ! Upper Delta mass limit (GeV)
2570 Parameter(MKstar_low = 0.74) ! Lower Kstar mass limit (GeV)
2571 Parameter(MKstar_high = 1.04) ! Upper Kstar mass limit (GeV)
2574 if(npts.le.1) Return
2576 CCC Load mass distribution for rho-meson:
2577 if(gpid.ge.151 .and. gpid.le.153) then
2581 M0 = geant_mass(gpid)
2582 Gamma = geant_width(gpid)
2583 dM = (Mrho_high - Mrho_low)/float(npts-1)
2585 M = Mrho_low + dM*float(i-1)
2586 Mass_xfunc_save(pid_index,i) = M
2587 kcm = sqrt(0.25*M*M - Mpi*Mpi)
2588 dist(i) = kcm/((M-M0)**2 + 0.25*Gamma*Gamma)
2591 CCC Load mass distribution for omega-meson:
2592 else if(gpid.eq.154) then
2596 M0 = geant_mass(gpid)
2597 Gamma = geant_width(gpid)
2598 dM = (Momega_high - Momega_low)/float(npts-1)
2600 M = Momega_low + dM*float(i-1)
2601 Mass_xfunc_save(pid_index,i) = M
2602 GammaS = Gamma*((M/M0)**3)
2603 dist(i) = M0*M0*Gamma/((M0*M0 - M*M)**2
2604 1 + M*M*GammaS*GammaS)
2607 CCC Load mass distribution for phi-meson:
2608 else if(gpid.eq.156) then
2612 M0 = geant_mass(gpid)
2613 Gamma = geant_width(gpid)
2614 dM = (Mphi_high - Mphi_low)/float(npts-1)
2615 k0cm = sqrt(0.25*M0*M0 - MK*MK)
2616 E0cm = sqrt(k0cm*k0cm + MK*MK)
2619 M = Mphi_low + dM*float(i-1)
2620 Mass_xfunc_save(pid_index,i) = M
2621 kcm = sqrt(0.25*M*M - MK*MK)
2622 Ecm = sqrt(kcm*kcm + MK*MK)
2624 dist(i) = 0.25*Gamma*Gamma*((beta/beta0)**3)/
2625 1 ((M - M0)**2 + 0.25*Gamma*Gamma)
2628 CCC Load mass distribution for Delta resonances:
2629 else if(gpid.ge.158 .and. gpid.le.161) then
2633 M0 = geant_mass(gpid)
2634 Gamma = geant_width(gpid)
2635 dM = (MDelta_high - MDelta_low)/float(npts-1)
2637 M = MDelta_low + dM*float(i-1)
2638 Mass_xfunc_save(pid_index,i) = M
2639 kcm = ((M*M + Mpi*Mpi - MN*MN)**2)/(4.0*M*M) - Mpi*Mpi
2640 kcm = sqrt(abs(kcm))
2641 Epicm = sqrt(kcm*kcm + Mpi*Mpi)
2642 ENcm = sqrt(kcm*kcm + MN*MN)
2643 redtotE = Epicm*ENcm/(Epicm + ENcm)
2645 qR = kcm*R_Delta/Mpi
2646 GammaS = 2.0*qR*qR*qR*Gamma/(1.0 + qR*qR)
2647 dist(i) = (Jinc/(kcm*kcm))*GammaS*GammaS/
2648 1 ((M - M0)**2 + 0.25*GammaS*GammaS)
2651 CCC Load mass distribution for K*(892) resonances:
2652 else if(gpid.ge.162 .and. gpid.le.164) then
2656 M0 = geant_mass(gpid)
2657 Gamma = geant_width(gpid)
2658 dM = (MKstar_high - MKstar_low)/float(npts-1)
2659 k0cm = ((M0*M0 + Mpi*Mpi - MK*MK)**2)/(4.0*M0*M0) - Mpi*Mpi
2662 M = MKstar_low + dM*float(i-1)
2663 Mass_xfunc_save(pid_index,i) = M
2664 kcm = ((M*M + Mpi*Mpi - MK*MK)**2)/(4.0*M*M) - Mpi*Mpi
2667 GammaS = 2.0*qR*qR*qR*Gamma/(1.0 + qR*qR)
2668 dist(i) = GammaS*GammaS*M0*M0/
2669 1 ((M*M - M0*M0)**2 + GammaS*GammaS*M0*M0)
2672 CCC Load additional resonance mass distributions here:
2675 Return ! Return for Geant PID types without mass distribution
2678 CCC Integrate mass distribution from mass_low to mass_high:
2680 Mass_integ_save(pid_index,1) = 0.0
2682 Mass_integ_save(pid_index,i) = 0.5*(dist(i-1) + dist(i))*dM
2683 1 + Mass_integ_save(pid_index,i-1)
2686 CCC Normalize this integral such that the last point is 1.00:
2687 if(Mass_integ_save(pid_index,npts) .ne. 0.0) then
2689 Mass_integ_save(pid_index,i) =
2690 1 Mass_integ_save(pid_index,i)/Mass_integ_save(pid_index,npts)
2694 CCC Extend integ() and xfunc() by one mesh point to avoid Lagrange
2695 CCC interpolation subroutine bug:
2696 Mass_integ_save(pid_index,npts+1) =
2697 1 Mass_integ_save(pid_index,npts) + 0.01
2698 Mass_xfunc_save(pid_index,npts+1) =
2699 1 Mass_xfunc_save(pid_index,npts)
2704 Real*4 Function Mass_function(gpid,pid_index,npts,irand)
2707 CCC Description: For resonance particles which have mass distributions
2708 C this function randomly samples the distributions in Common/Mass/
2709 C and returns a particle mass in GeV in 'Mass_function'.
2710 C For non-resonant particles this function returns the Geant mass
2711 C listed in SUBR: Particle_prop.
2713 C Input: gpid = Geant particle ID code number, see SUBR:
2714 C Particle_prop for listing.
2715 C pid_index = Particle type array index, determined by input
2717 C npts = n_integ_pts in calling program. Is the number
2718 C of mass mesh points for the arrays
2719 C in Common/Mass/ minus 1.
2720 C irand = random number generator argument/seed
2722 C Output: Mass_function = particle or resonance mass (GeV)
2724 CCC Include files and common blocks:
2725 Include 'Parameter_values.inc'
2726 Common/Geant/geant_mass(200),geant_charge(200),
2727 1 geant_lifetime(200),geant_width(200)
2728 real*4 geant_mass,geant_charge,geant_lifetime,geant_width
2729 Common/Mass/ Mass_integ_save(npid,nmax_integ),
2730 1 Mass_xfunc_save(npid,nmax_integ)
2731 real*4 Mass_integ_save,Mass_xfunc_save
2733 CCC Local Variable Type Declarations:
2734 integer gpid,pid_index,npts,irand,i
2735 real*4 integ(nmax_integ),xfunc(nmax_integ)
2738 if(Mass_integ_save(pid_index,npts) .ne. 0.0) then
2740 integ(i) = Mass_integ_save(pid_index,i)
2741 xfunc(i) = Mass_xfunc_save(pid_index,i)
2743 Call LAGRNG(ran(irand),integ,masstmp,xfunc,
2744 1 npts+1, 1, 5, npts+1, 1)
2745 Mass_function = masstmp
2747 Mass_function = geant_mass(gpid)
2753 * real*4 function ran(i)
2757 * Call ranlux2(r,1,i)
2762 * Include 'ranlux2.F'