LCOV - code coverage report
Current view: top level - include/crpropa - ParticleState.h (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 100.0 % 1 1
Test Date: 2026-06-18 09:49:19 Functions: - 0 0

            Line data    Source code
       1              : #ifndef CRPROPA_PARTICLE_STATE_H
       2              : #define CRPROPA_PARTICLE_STATE_H
       3              : 
       4              : #include "crpropa/Vector3.h"
       5              : 
       6              : namespace crpropa {
       7              : /**
       8              :  * \addtogroup Core
       9              :  * @{
      10              :  */
      11              : 
      12              : /**
      13              :  @class ParticleState
      14              :  @brief State of the particle: ID, energy, position, direction
      15              : 
      16              :  The ParticleState defines the state of an ultra-high energy cosmic ray, which
      17              :  is assumed to be traveling at the exact speed of light.
      18              :  The cosmic ray state is defined by particle ID, energy and position and
      19              :  direction vector.
      20              :  For faster lookup mass and charge of the particle are stored as members.
      21              :  */
      22      7199622 : class ParticleState {
      23              : private:
      24              :         int id; ///< particle ID (Particle Data Group numbering scheme)
      25              :         double energy; ///< total energy
      26              :         Vector3d position; ///< position vector in comoving coordinates
      27              :         Vector3d direction; ///< unit vector of velocity or momentum
      28              :         double pmass; ///< particle rest mass
      29              :         double charge; ///< particle charge
      30              : 
      31              : public:
      32              :         /** Constructor for a particle state.
      33              :          @param id                      id of the particle following the PDG numbering scheme
      34              :          @param energy          energy of the particle [in Joules]
      35              :          @param position        vector containing the coordinates of the particle [in meters]
      36              :          @param direction       vector containing the direction of motion of the particle
      37              :          */
      38              :         ParticleState(int id = 0, double energy = 0,
      39              :                         Vector3d position = Vector3d(0, 0, 0),
      40              :                         Vector3d direction = Vector3d(-1, 0, 0));
      41              : 
      42              :         /** Set particle position.
      43              :          In simulations including cosmological effects, the position is given in comoving coordinates.
      44              :          @param pos             vector containing the coordinates of the particle [in meters]
      45              :         */
      46              :         void setPosition(const Vector3d &pos);
      47              :         /** Get position of particle.
      48              :          @returns Position vector of particle. If cosmological effects are included, the coordinates are comoving.
      49              :          */
      50              :         const Vector3d &getPosition() const;
      51              : 
      52              :         /** Set direction unit vector, non unit-vectors are normalized
      53              :          @param dir     vector containing the direction of motion of the particle
      54              :          */
      55              :         void setDirection(const Vector3d &dir);
      56              :         /** Get direction unit vector
      57              :          @returns Normalized vector containing direction of motion of particle.
      58              :          */
      59              :         const Vector3d &getDirection() const;
      60              : 
      61              :         /** Set energy of particle.
      62              :          @param newEnergy       energy to be assigned to particle [in Joules]
      63              :          */
      64              :         void setEnergy(double newEnergy);
      65              :         /** Get energy of particle.
      66              :          @returns Energy of particle [in Joules]
      67              :          */
      68              :         double getEnergy() const;
      69              :         /** Get rigidity of particle, defined as E/(Z*e).
      70              :          @returns Rigidity of the particle [in Volts]
      71              :          */
      72              :         double getRigidity() const;
      73              : 
      74              :         /** Set particle ID.
      75              :          This follows the PDG numbering scheme:
      76              :           https://pdg.lbl.gov/2019/reviews/rpp2019-rev-monte-carlo-numbering.pdf
      77              :          @param newId           id to be assigned to the particle 
      78              :          */
      79              :         void setId(int newId);
      80              :         /** Get particle ID
      81              :          @returns Particle ID (in PDG format).
      82              :          */
      83              :         int getId() const;
      84              : 
      85              :         std::string getDescription() const;
      86              : 
      87              :         // ======== Helper methods ========
      88              : 
      89              :         /** Get electrical charge of the particle.
      90              :          @returns Charge of the particle [in Coulombs]
      91              :          */
      92              :         double getCharge() const;
      93              :         /** Get mass of the particle.
      94              :          @returns Mass of the particle [kg]
      95              :          */
      96              :         double getMass() const;
      97              : 
      98              :         /** Set Lorentz factor and modify the particle's energy accordingly.
      99              :          @param gamma           Lorentz factor
     100              :          */
     101              :         void setLorentzFactor(double gamma);
     102              :         /** Get Lorentz factor
     103              :          @returns Lorentz factor of particle
     104              :          */
     105              :         double getLorentzFactor() const;
     106              : 
     107              :         /** Get velocity: direction times the speed of light.
     108              :          @returns Velocity of particle [m/s]
     109              :          */
     110              :         Vector3d getVelocity() const;
     111              :         /** Get momentum: direction times energy divided by the speed of light 
     112              :          @returns The momentum [kg m/s]
     113              :         */
     114              :         Vector3d getMomentum() const;
     115              : };
     116              : /** @}*/
     117              : 
     118              : } // namespace crpropa
     119              : 
     120              : #endif // CRPROPA_PARTICLE_STATE_H
        

Generated by: LCOV version 2.0-1