In the DPMJETIII _cross_section function the following check is done (after checking if cs should be calculated with glauber):
|
if (kin.p1.is_nucleus and kin.p1.A > 1) or (kin.p2.is_nucleus and kin.p2.A > 1): |
|
glxs = self._lib.dtglxs |
|
|
|
return CrossSectionData( |
|
prod=glxs.xspro[0, 0, 0], |
|
) |
|
if kin.p1 == 22 and kin.p2.A == 1: |
|
stot, sine, _ = self._lib.dt_siggp(photon_x, kin.virt_p1, kin.ecm, 0) |
|
return CrossSectionData(total=stot, inelastic=sine, elastic=stot - sine) |
|
stot, sela = self._lib.dt_xshn( |
|
self._lib.idt_icihad(kin.p1), self._lib.idt_icihad(kin.p2), 0.0, kin.ecm |
|
) |
|
return CrossSectionData(total=stot, elastic=sela, inelastic=stot - sela) |
So for a proton-Oxygen kinematic the first if is reached but no calculation is done, this only accesses the xspro entry in the dtglxs fortran common block.
I think the last there lines here are what we actually want to run inside this condition.
But in this case there is no prod cross section, since only tot and elastic are returned.
Maybe max_info should just default to True for DPMJET, so Glauber is always run for nuclei target or projectiles?
In the DPMJETIII
_cross_sectionfunction the following check is done (after checking if cs should be calculated with glauber):chromo/src/chromo/models/dpmjetIII.py
Lines 221 to 233 in e9310e8
So for a proton-Oxygen kinematic the first if is reached but no calculation is done, this only accesses the
xsproentry in thedtglxsfortran common block.I think the last there lines here are what we actually want to run inside this condition.
But in this case there is no prod cross section, since only tot and elastic are returned.
Maybe
max_infoshould just default toTruefor DPMJET, so Glauber is always run for nuclei target or projectiles?