Line data Source code
1 : #include "crpropa/massDistribution/Massdistribution.h" 2 : #include <sstream> 3 : namespace crpropa { 4 : 5 2 : void DensityList::addDensity(ref_ptr<Density> dens) { 6 2 : DensityList.push_back(dens); 7 2 : } 8 : 9 1 : double DensityList::getDensity(const Vector3d &position) const { 10 : double n = 0.; 11 3 : for (int i = 0; i < DensityList.size(); i++) 12 2 : n += DensityList[i]->getDensity(position); 13 1 : return n; 14 : } 15 : 16 1 : double DensityList::getHIDensity(const Vector3d &position) const { 17 : double n = 0.; 18 3 : for (int i = 0; i < DensityList.size(); i++) 19 2 : n += DensityList[i]->getHIDensity(position); 20 1 : return n; 21 : } 22 : 23 1 : double DensityList::getHIIDensity(const Vector3d &position) const { 24 : double n = 0.; 25 3 : for (int i = 0; i < DensityList.size(); i++) 26 2 : n += DensityList[i]->getHIIDensity(position); 27 1 : return n; 28 : } 29 : 30 1 : double DensityList::getH2Density(const Vector3d &position) const { 31 : double n = 0.; 32 3 : for (int i = 0; i < DensityList.size(); i++) 33 2 : n += DensityList[i]->getH2Density(position); 34 1 : return n; 35 : } 36 : 37 1 : double DensityList::getNucleonDensity(const Vector3d &position) const { 38 : double n = 0.; 39 3 : for (int i = 0; i < DensityList.size(); i++) 40 2 : n += DensityList[i]->getNucleonDensity(position); 41 1 : return n; 42 : } 43 : 44 0 : std::string DensityList::getDescription() { 45 0 : std::stringstream ss; 46 0 : ss << "DensityList with " << DensityList.size() << " modules: \n"; 47 0 : for (int i = 0; i < DensityList.size(); i++) { 48 0 : ss << "density " << i + 1 << ": " << DensityList[i] -> getDescription(); 49 : } 50 : 51 0 : return ss.str(); 52 0 : } 53 : 54 : // ----------- DensityGrid ----------------------------------------------------------------- 55 : 56 2 : DensityGrid::DensityGrid(ref_ptr<Grid1f> grid, bool isForHI, bool isForHII, bool isForH2) : 57 2 : grid(grid), isForHI(isForHI), isForHII(isForHII), isForH2(isForH2) { 58 2 : checkAndWarn(); 59 2 : } 60 : 61 5 : void DensityGrid::checkAndWarn() { 62 5 : bool allDeactivated = (isForHI == false) && (isForHII == false) && (isForH2 == false); 63 : if (allDeactivated) { 64 0 : KISS_LOG_WARNING << "DensityGrid has all types deactivated." 65 0 : << "In this case all output will be n = 0. \n" 66 0 : << "Please activate the intended particle type. \n"; 67 : } 68 5 : } 69 : 70 3 : double DensityGrid::getHIDensity(const Vector3d &position) const { 71 3 : if (isForHI) 72 3 : return grid -> interpolate(position); 73 : else 74 : return 0.; 75 : } 76 : 77 3 : double DensityGrid::getHIIDensity(const Vector3d &position) const { 78 3 : if (isForHII) 79 0 : return grid -> interpolate(position); 80 : else 81 : return 0.; 82 : } 83 : 84 3 : double DensityGrid::getH2Density(const Vector3d &position) const { 85 3 : if (isForH2) 86 0 : return grid -> interpolate(position); 87 : else 88 : return 0.; 89 : } 90 : 91 1 : double DensityGrid::getDensity(const Vector3d &position) const { 92 : double n = 0; 93 1 : n += getHIDensity(position); 94 1 : n += getHIIDensity(position); 95 1 : n += getH2Density(position); 96 : 97 1 : return n; 98 : } 99 : 100 1 : double DensityGrid::getNucleonDensity(const Vector3d &position) const { 101 : double n = 0; 102 1 : n += getHIDensity(position); 103 1 : n += getHIIDensity(position); 104 1 : n += 2 * getH2Density(position); 105 : 106 1 : return n; 107 : } 108 : 109 2 : bool DensityGrid::getIsForHI() { 110 2 : return isForHI; 111 : } 112 : 113 2 : bool DensityGrid::getIsForHII() { 114 2 : return isForHII; 115 : } 116 : 117 2 : bool DensityGrid::getIsForH2() { 118 2 : return isForH2; 119 : } 120 : 121 1 : void DensityGrid::setIsForHI(bool b) { 122 1 : isForHI = b; 123 1 : checkAndWarn(); 124 1 : } 125 : 126 1 : void DensityGrid::setIsForHII(bool b) { 127 1 : isForHII = b; 128 1 : checkAndWarn(); 129 1 : } 130 : 131 1 : void DensityGrid::setIsForH2(bool b) { 132 1 : isForH2 = b; 133 1 : checkAndWarn(); 134 1 : } 135 : 136 0 : void DensityGrid::setGrid(ref_ptr<Grid1f> grid) { 137 0 : this->grid = grid; 138 0 : } 139 : 140 0 : std::string DensityGrid::getDescription() { 141 0 : std::stringstream ss; 142 0 : ss << "Density in a given grid \n"; 143 0 : return ss.str(); 144 0 : } 145 : 146 : } //namespace crpropa