LCOV - code coverage report
Current view: top level - include/crpropa/massDistribution - Massdistribution.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 2 2 100.0 %
Date: 2024-04-29 14:43:01 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef CRPROPA_MASSDISTRIBUTION_H
       2             : #define CRPROPA_MASSDISTRIBUTION_H
       3             : 
       4             : #include "crpropa/massDistribution/Density.h"
       5             : #include "crpropa/Vector3.h"
       6             : #include "crpropa/Grid.h"
       7             : 
       8             : #include "kiss/logger.h"
       9             : 
      10             : #include <vector>
      11             : 
      12             : namespace crpropa {
      13             : 
      14             : /**
      15             :  @class DensityList
      16             :  @brief Superposition of density models.
      17             :  The addDensity function adds a new density to the list.
      18             :  The getDensity function handles the activated types in loaded densities, whereas get(type)Density disregards the activation state.
      19             : */
      20           2 : class DensityList: public Density {
      21             : private:
      22             :         std::vector<ref_ptr<Density> > DensityList ;
      23             : 
      24             : public:
      25             :         /** Add new density to list.
      26             :          @param density density to add
      27             :         */
      28             :         void addDensity(ref_ptr<Density> density);
      29             : 
      30             :         /** Get density at a given position.
      31             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      32             :          @returns Density in particles/m^3, sum up densities from added densities 
      33             :         */
      34             :         double getDensity(const Vector3d &position) const;
      35             :         /** Get HI density at a given position.
      36             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      37             :          @returns Density of HI at given position in particles/m^3, sum up all HI densities from added densities
      38             :          */
      39             :         double getHIDensity(const Vector3d &position) const;
      40             :         /** Get HII density at a given position.
      41             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      42             :          @returns Density of HII at given position in particles/m^3, sum up all HII densities from added densities 
      43             :          */
      44             :         double getHIIDensity(const Vector3d &position) const;
      45             :         /** Get H2 density at a given position.
      46             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      47             :          @returns Density of H2 at given position in particles/m^3, sum up all H2 densities from added densities 
      48             :          */
      49             :         double getH2Density(const Vector3d &position) const;
      50             :         /** Get the density of nucleons.
      51             :          This is the number of nucleons per volume, summed up all activated density and weight molecular hydrogyen twice
      52             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      53             :          @returns Density of nucleons at given position in particles/m^3, sum up all nucleon densities from added densities 
      54             :          */
      55             :         double getNucleonDensity(const Vector3d &position) const;
      56             : 
      57             :         std::string getDescription();
      58             : };
      59             : 
      60             : /**
      61             :  @class DensityGrid
      62             :  @brief Wrapper to use a Grid1f for a density
      63             : 
      64             :  The DensityGrid uses a given grid for the chosen density type. More than one type can be chosen to follow the same distribution.
      65             :  If no type is chosen a warning will be raised and all densities are 0.
      66             : */
      67           4 : class DensityGrid: public Density {
      68             : private: 
      69             :         ref_ptr<Grid1f> grid; //< Grid with data
      70             :         bool isForHI, isForHII, isForH2; 
      71             :         void checkAndWarn(); //< raise a warning if all density types are deactivated.
      72             : 
      73             : public:
      74             :         DensityGrid(ref_ptr<Grid1f> grid, bool isForHI = false, bool isForHII = false, bool isForH2 = false);
      75             :         
      76             :         /** Get HI density at a given position.
      77             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      78             :          @returns Density of HI at given position in particles/m^3, sum up all HI densities from added densities
      79             :          */
      80             :         double getHIDensity(const Vector3d &position) const;
      81             :         
      82             :         /** Get HII density at a given position.
      83             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      84             :          @returns Density of HII at given position in particles/m^3, sum up all HII densities from added densities 
      85             :          */
      86             :         double getHIIDensity(const Vector3d &position) const;
      87             :         
      88             :         /** Get H2 density at a given position.
      89             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      90             :          @returns Density of H2 at given position in particles/m^3, sum up all H2 densities from added densities 
      91             :          */
      92             :         double getH2Density(const Vector3d &position) const;
      93             : 
      94             :         /** Get density at a given position.
      95             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
      96             :          @returns Density in particles/m^3, sum up densities from added densities 
      97             :         */
      98             :         double getDensity(const Vector3d &position) const;
      99             :         
     100             :         /** Get the density of nucleons.
     101             :          This is the number of nucleons per volume, summed up all activated density and weight molecular hydrogyen twice
     102             :          @param position position in Galactic coordinates with Earth at (-8.5 kpc, 0, 0)
     103             :          @returns Density of nucleons at given position in particles/m^3, sum up all nucleon densities from added densities 
     104             :          */
     105             :         double getNucleonDensity(const Vector3d &position) const;
     106             : 
     107             :         bool getIsForHI();
     108             :         bool getIsForHII();
     109             :         bool getIsForH2();
     110             : 
     111             :         /* set if the density is for HI type. 
     112             :          @param b if True the density is used for HI
     113             :         */
     114             :         void setIsForHI(bool b);
     115             : 
     116             :         /* set if the density is for HII type. 
     117             :          @param b if True the density is used for HII
     118             :         */
     119             :         void setIsForHII(bool b);
     120             : 
     121             :         /* set if the density is for H2 type. 
     122             :          @param b if True the density is used for H2
     123             :         */
     124             :         void setIsForH2(bool b);
     125             :         
     126             :         /* Change the grid for the density
     127             :          @param grid (Grid1f) new grid for the density. 
     128             :         */
     129             :         void setGrid(ref_ptr<Grid1f> grid);
     130             : 
     131             :         std::string getDescription();
     132             : };
     133             : 
     134             : }  // namespace crpropa
     135             : 
     136             : #endif  // CRPROPA_MASSDISTRIBUTION_H

Generated by: LCOV version 1.14