Files

\page Examplebasic Example basic

This molecule counter basic example is provided by the Geant4-DNA collaboration (http://geant4-dna.org).

The custom (spatially-aware) molecule counter used here is further described in:

  • Radiat. Phys. Chem. 212 (2023) 111194
    doi:10.1016/j.radphyschem.2023.111194

    Any report or published results obtained using the Geant4-DNA software shall cite the following Geant4-DNA collaboration publications:\n Med. Phys. 51 (2024) 58735889\n Med. Phys. 45 (2018) e722-e739\n Phys. Med. 31 (2015) 861-874\n Med. Phys. 37 (2010) 4692-4708\n Int. J. Model. Simul. Sci. Comput. 1 (2010) 157178\n

\Description:

Geometry

A box of liquid water with a 8 µm (radius) spherical cell placed at its center. The cell contains a 4 µm (radius) nucleus and 100 mitochondria.

Particles

Electrons with 1 keV energy, which can be changed in the simple_sbs.ini macro file. They are shot from the center of the box (inside the nucleus).

Physics

The default Geant4-DNA physics constructor 2 is used in the PhysicsList class with chemistry constructor 3.

Counters

Counters are defined and registered in the ActionInitialization class for master & workers using the BuildMoleculeCounters(), and BuildMultipleAndCustomMoleculeCounters() methods. To switch between either of these methods, change the boolean value of fBuildMultipleAndCustomMoleculeCounters in ActionInitialization.hh.

By default, the molecule counter manager will accumulate counts from worker instances into the master instance. To facilitate this the user must create a UserEventAction and UserRunAction and override the (Begin|End)Of(Event|Run)Action methods and call the corresponding method on the G4DNAChemistryManager::Instance(). See the example's EventAction.hh and RunAction.(hh|cc) on how to do this.

__Default Method: `BuildMoleculeCounters()`:__
* Reset counters before each run but not keep counter values between events
* Register a default `G4MoleculeCounter` instance called "Molecules"
* Register a default `G4MoleculeReactionCounter` instance called "Reactions"


__Alternative Method: `BuildMultipleAndCustomMoleculeCounters()`:__
* Reset counters before each run but not keep counter values between events
* Register a `G4MoleculeCounter` instance called "BasicCounter":
    * set its time precision to 25 ps
* Register a `G4MoleculeCounter` instance called "BasicCounter_Restricted":
    * set its time precision to 25 ps
    * activate the counter for global times in [500 ps, 10 ns]
* Register a `G4MoleculeCounter` instance called "BasicCounter_VariablePrecision":
    * set its time precision to vary with global time:
    ```
        <= 10 ps: 5 ps
        <= 100 ps: 50 ps
        <= 1 ns: 0.5 ns
        <= 1 µs: 50 ns
    ```
    * activate the counter for global times in [500 ps, 10 ns]
* Register a custom `MoleculeCounter` instance called "MoleculeCounter"
    * set its time precision to vary with global time:
    ```
        <= 10 ps: 5 ps
        <= 100 ps: 50 ps
        <= 1 ns: 0.5 ns
        <= 1 µs: 50 ns
    ```
    * __(important)__ `SetSensitiveToStepping(true)` to change molecule count when traversing geometry boundaries
    * `SetIgnoreMoleculePosition(false)` if set to `true` the counter behaves like `G4MoleculeCounter`
    * `SetNegativeCountsAreFatal(true)` to throw a FatalException if any molecule count drops below 0 through misregistration
* Register a `G4MoleculeReactionCounter` instance called "Reactions":
    * set its time precision to 50 ps
    * activate the counter for global times in [0 ps, 1 µs]

Execute the code by running:

./molcounters_basic [simple_sbs.in,simple_irt_syn_react.in]

The simple_sbs.in macro only includes molecule transport (diffusion)!

Contents of the molecule counters are dumped to stdout at the end of each run by the RunAction::EndOfRunAction()