Program Listing for File Massdistribution.h
↰ Return to documentation for file (include/crpropa/massDistribution/Massdistribution.h
)
#ifndef CRPROPA_MASSDISTRIBUTION_H
#define CRPROPA_MASSDISTRIBUTION_H
#include "crpropa/massDistribution/Density.h"
#include "crpropa/Vector3.h"
#include "crpropa/Grid.h"
#include "kiss/logger.h"
#include <vector>
namespace crpropa {
class DensityList: public Density {
private:
std::vector<ref_ptr<Density> > DensityList ;
public:
void addDensity(ref_ptr<Density> density);
double getDensity(const Vector3d &position) const;
double getHIDensity(const Vector3d &position) const;
double getHIIDensity(const Vector3d &position) const;
double getH2Density(const Vector3d &position) const;
double getNucleonDensity(const Vector3d &position) const;
std::string getDescription();
};
class DensityGrid: public Density {
private:
ref_ptr<Grid1f> grid; //< Grid with data
bool isForHI, isForHII, isForH2;
void checkAndWarn(); //< raise a warning if all density types are deactivated.
public:
DensityGrid(ref_ptr<Grid1f> grid, bool isForHI = false, bool isForHII = false, bool isForH2 = false);
double getHIDensity(const Vector3d &position) const;
double getHIIDensity(const Vector3d &position) const;
double getH2Density(const Vector3d &position) const;
double getDensity(const Vector3d &position) const;
double getNucleonDensity(const Vector3d &position) const;
bool getIsForHI();
bool getIsForHII();
bool getIsForH2();
/* set if the density is for HI type.
@param b if True the density is used for HI
*/
void setIsForHI(bool b);
/* set if the density is for HII type.
@param b if True the density is used for HII
*/
void setIsForHII(bool b);
/* set if the density is for H2 type.
@param b if True the density is used for H2
*/
void setIsForH2(bool b);
/* Change the grid for the density
@param grid (Grid1f) new grid for the density.
*/
void setGrid(ref_ptr<Grid1f> grid);
std::string getDescription();
};
} // namespace crpropa
#endif // CRPROPA_MASSDISTRIBUTION_H