Program Listing for File ConstantDensity.cpp

Return to documentation for file (src/massDistribution/ConstantDensity.cpp)

#include "crpropa/massDistribution/ConstantDensity.h"

#include "kiss/logger.h"

#include <sstream>

namespace crpropa{

ConstantDensity::ConstantDensity(double HI, double HII, double H2) {
        // set all types active which are not equal 0 and change number density
        if(HI!=0)
                setHI(true, HI);
        if(HII!=0)
                setHII(true, HII);
        if(H2!=0)
                setH2(true, H2);
}

double ConstantDensity::getDensity(const Vector3d &position) const {
        double n = 0;

        if(isHI)
                n += HIdensitynumber;
        if(isHII)
                n += HIIdensitynumber;
        if(isH2)
                n += H2densitynumber;

        // check if all densities are deactivated and raise warning if so
        if((isHI || isHII || isH2) == false){
                KISS_LOG_WARNING
                        << "\nCalled getNucleonDensity on fully deactivated ConstantDensity "
                        << "gas density model. In this case the density is allways set to 0. \n";
        }

        return n;
}

double ConstantDensity::getNucleonDensity(const Vector3d &position) const {
        double n = 0;

        if(isHI)
                n += HIdensitynumber;
        if(isHII)
                n += HIIdensitynumber;
        if(isH2)
                n += 2*H2densitynumber;

        // check if all densities are deactivated and raise warning if so
        if((isHI || isHII || isH2) == false){
                KISS_LOG_WARNING
                        << "\nCalled getNucleonDensity on fully deactivated ConstantDensity "
                        << "gas density model. In this case the density is allways set to 0. \n";
        }
        return n;
}

double ConstantDensity::getHIDensity(const Vector3d &position) const {
        return HIdensitynumber;
}

double ConstantDensity::getHIIDensity(const Vector3d &position) const{
        return HIIdensitynumber;
}

double ConstantDensity::getH2Density(const Vector3d &position) const{
        return H2densitynumber;
}

bool ConstantDensity::getIsForHI() {
        return isHI;
}

bool ConstantDensity::getIsForHII() {
        return isHII;
}

bool ConstantDensity::getIsForH2() {
        return isH2;
}

void ConstantDensity::setHI(bool activate, double densitynumber) {
        isHI = activate;
        HIdensitynumber = densitynumber;
}

void ConstantDensity::setHI(bool activate) {
        setHI(activate, HIdensitynumber);
}

void ConstantDensity::setHI(double densitynumber) {
        setHI(isHI, densitynumber);
}

void ConstantDensity::setHII(bool activate, double densitynumber) {
        isHII = activate;
        HIIdensitynumber = densitynumber;
}

void ConstantDensity::setHII(bool activate) {
        setHII(activate, HIIdensitynumber);
}

void ConstantDensity::setHII(double densitynumber) {
        setHII(isHII, densitynumber);
}

void ConstantDensity::setH2(bool activate, double densitynumber) {
        isH2 = activate;
        H2densitynumber = densitynumber;
}

void ConstantDensity::setH2(bool activate) {
        setH2(activate, H2densitynumber);
}

void ConstantDensity::setH2(double densitynumber) {
        setH2(isH2, densitynumber);
}

std::string ConstantDensity::getDescription() {
        std::stringstream s;
        s << "ConstantDensity:\n";
        s<< "HI component is ";
        if(!isHI)
                s<< "not ";
        s<< "active and has a density of " << HIdensitynumber/ccm << " cm^-3" << "\nHII component is ";
        if(!isHII)
                s<< "not ";
        s<<"active and has a density of " << HIIdensitynumber/ccm<<" cm^-3" <<  "\nH2 component is ";
        if(!isH2)
                s<<"not ";
        s<<"active and has a density of " << H2densitynumber/ccm << " cm^-3";
        return s.str();
}

}  // namespace crpropa