.. _io_collision_track:

===========================
Collision Track File Format
===========================

When collision tracking is enabled with ``mcpl=false`` (the default), OpenMC
writes binary data to an HDF5 file named ``collision_track.h5``. The same data
may also be written after each batch when multiple files are requested
(``collision_track.N.h5``) or when the run is performed in parallel. The file
contains the information needed to reconstruct each recorded collision.

The current revision of the collision track file format is 1.2.

**/**

:Attributes:
            - **filetype** (*char[]*) -- String indicating the type of file.
              For collision-track files the value is ``"collision_track"``.

:Datasets:

          - **collision_track_bank** (Compound type) -- Collision information
            for each stored event. Each entry in the dataset corresponds to one
            collision and contains the following fields:

              - ``r`` (*double[3]*) -- Position of the collision in [cm].
              - ``u`` (*double[3]*) -- Direction unit vector immediately after the collision.
              - ``E`` (*double*) -- Incident particle energy before the collision in [eV].
              - ``dE`` (*double*) -- Energy loss over the collision (:math:`E_\text{before} - E_\text{after}`) in [eV].
              - ``time`` (*double*) -- Time of the collision in [s].
              - ``wgt`` (*double*) -- Particle weight at the collision.
              - ``event_mt`` (*int*) -- ENDF MT number identifying the reaction.
              - ``delayed_group`` (*int*) -- Delayed neutron group index (non-zero for delayed events).
              - ``cell_id`` (*int*) -- ID of the cell in which the collision occurred.
              - ``nuclide_id`` (*int*) -- PDG number of the nuclide (100ZZZAAAM).
              - ``material_id`` (*int*) -- ID of the material containing the collision site.
              - ``universe_id`` (*int*) -- ID of the universe containing the collision site.
              - ``n_collision`` (*int*) -- Collision counter for the particle history.
              - ``particle`` (*int32_t*) -- Particle type (PDG number).
              - ``parent_id`` (*int64_t*) -- Unique ID of the parent particle.
              - ``progeny_id`` (*int64_t*) -- Progeny ID of the particle.

In an MPI run, OpenMC writes the combined dataset by gathering collision-track
entries from all ranks before flushing them to disk, so the final file appears
as though it were produced serially.
