Collision tape

What is a collision tape and what is its purpose

A “collision tape” is a file where quantities describing selected events are recorded in the course of a FLUKA run.

This file is the standard output​ of the MGDRAW​ user routine, that can be customised by the user to get different and/or more complete output (see description of user routine MGDRAW in MGDRAW: general event interface)

Note that “event”​ would be a more appropriate word than “collision”, and “file” better than “tape”. For historical reasons, however, the expression “collision tape” is used in Monte Carlo jargon rather than “event file”. It is true that most interesting events are generally collision events (but also boundary crossings, decays, etc.), and that the large size of the file may require the use of a magnetic tape (or at least, that was often the case in the past). Recently, the expression “phase space file” has also been used.

There are several reasons for which the user might decide to write a collision tape. Some examples are:

  1. to perform a non-standard analysis or scoring. In general, this is not recommended because the available FLUKA scoring facilities are reliable, efficient and well tested. However, there may be special cases where a user-written scoring​ is necessary.

  2. to save details of transport for a new independent analysis. In this case, however, the user must make sure that no phase-space region of interest be undersampled because of biasing options in the corresponding run. As a general rule, writing of a collision file is not recommended in non-analogue (biased) calculations​.

  3. to connect FLUKA to other radiation transport codes (now less likely than in the past, since FLUKA covers most energy ranges and transports most particles which can be of interest).

  4. to split the transport problem into two​ or more sequential phases. A technique used in deep penetration​ calculations, which can be considered as an extension of splitting, consists in recording all particles crossing a given boundary (with their energy, weight, coordinates and direction cosines at the point of crossing), and to sample repeatedly source particles from that set in a successive run [Fas87]. A special subroutine SOURCE​ must be written for this purpose. The user must make sure that the final normalisation​ is done with respect to the total particle weight used in the first step of the procedure, and not to that of the second step. It is also recommended to assign blackhole to all materials immediately beyond the recording boundary, to avoid that backscattered particles be considered twice.

  5. to perform some manipulation in an intermediate phase of Monte Carlo transport. An example is a variation of Note 4), in which a user program interpolates some smooth analytical distribution through the recorded quantities, from which source particles are sampled in the next FLUKA run.

  6. to trace suspected errors in transport

  7. to connect to a graphical display program

FLUKA allows to write a complete dump​ of each source particle​, of each trajectory​ and of each energy deposition event​, possibly under event-driven conditions specified by the user (see description of user routine MGDRAW in MGDRAW: general event interface).

How to write a collision tape

To obtain a collision tape, option USERDUMP must be input with WHAT(1)≥ 100.0.

The user can choose to dump all data concerning

  1. particle trajectories,

  2. data concerning continuous energy deposition

  3. data concerning local (point) energy deposition

  4. any combination of the three above

By default, data are written on the collision tape in single precision and unformatted, but it is also possible for the user to modify the MGDRAW​ subroutine and to obtain a more customised output file (see MGDRAW: general event interface).

The variables written by the default version of MGDRAW, and their number, differ in the three cases. The sign of the first (integer) variable dumped at an event indicates how to interpret the following ones:

Case 1

(First variable

> 0):

continuous energy deposition

Case 2

(First variable

= 0):

point energy deposition

Case 2

(First variable

< 0):

source particles

In Case 1, the following variables are written:
First record:

NTRACK, MTRACK, JTRACK, ETRACK, WTRACK (three integers and two real variables)

Next record:
(XTRACK(I), YTRACK(I), ZTRACK(I), I = 0, NTRACK), (DTRACK(J), J = 1, MTRACK), CTRACK
(that is, NTRACK + MTRACK + 1 real variables)

where:

NTRACK

=

number of trajectory segments​

MTRACK

=

number of energy deposition events​ along the trajectory

JTRACK

=

particle type (see Particles transported by FLUKA)

ETRACK

=

total energy of the particle (rest \(+\) kinetic)

WTRACK

=

particle weight

XTRACK(I), YTRACK(I), ZTRACK(I) = coordinates defining the upstream end of the (I+1)th segment;

for I = NTRACK, the end of the trajectory

DTRACK(J)

=

energy deposition in the Jth deposition event along the trajectory

CTRACK

=

total curved path​

In Case 2, the following variables are written:
First record:

0, ICODE, JTRACK, ETRACK, WTRACK (three integers and two real variables)

Next record:

XSCO, YSCO, ZSCO, RULL (4 real variables)

where:

JTRACK, ETRACK, WTRACK have the meaning explained above,

XSCO, YSCO, ZSCO = coordinates of the energy deposition point

RULL = amount of energy deposited

ICODE indicates the type of point event giving rise to energy deposition, as explained below:

ICODE

= 1\(x\): call from subroutine KASKAD​ (hadronic part of FLUKA);

= 10: elastic interaction recoil​

= 11: inelastic interaction recoil​

= 12: stopping particle​

= 14: escape​

ICODE

= 2\(x\): call from subroutine EMFSCO​ (electromagnetic part of FLUKA);

= 20: local energy deposition​ (i.e. photoelectric)

= 21: below user-defined transport cutoff​ (but larger than EMF production cutoff)

= 22: below both user-defined transport cutoff and EMF production cutoff​

= 23: escape

ICODE

= 3\(x\): call from subroutine KASNEU​ (low-energy neutron part of FLUKA)

= 30: target recoil​

= 31: neutron below threshold​

= 32: escape

ICODE

= 4\(x\): call from subroutine KASHEA​ (heavy ion part of FLUKA)

= 40: escape

ICODE

= 5\(x\): call from subroutine KASOPH​ (optical photon part of FLUKA)

= 50: optical photon absorption​

= 51: escape

In Case 3, the following variables are written:
First record:

-NCASE, NPFLKA, NSTMAX, TKESUM, WEIPRI, (three integers and two real variables)

Next record:

(ILOFLK(I), ETOT(I), WTFLK(I), XFLK(I), YFLK(I), ZFLK(I), TXFLK(I), TYFLK(I), TZFLK(I), I = 1, NPFLKA) (NPFLKA times (that is, one integer \(+\) 8 real variables))

where:

NCASE

= number of primaries treated so far (including the current one)

NPFLKA

= number of particles in the stack​

NSTMAX

= maximum number of particles in stack so far

TKESUM

= total kinetic energy of the primaries of a user written SOURCE​

WEIPRI

= total weight of the primaries handled so far

ILOFLK(I) = type of the Ith stack particle (see Particles transported by FLUKA)

ETOT(I)

= total energy of Ith stack particle

XFLK(I), YFLK(I), ZFLK(I) = source coordinates​ for the Ith stack particle

TXFLK(I), TYFLK(I), TZFLK(I) = direction cosines​ of the Ith stack particle