72 #ifndef __ConstantValues_h 106 m_min_HU_value(aMinHUValue),
107 m_max_HU_value(aMaxHUValue)
110 if (m_max_HU_value < m_min_HU_value)
112 throw Exception(__FILE__, __FUNCTION__, __LINE__,
"The min HU value is greater than the max HU value. This is not possible.");
115 std::map<int, double> weight_set;
120 weight_set[
Z_Na] = Na;
121 weight_set[
Z_Mg] = Mg;
124 weight_set[
Z_Cl] = Cl;
125 weight_set[
Z_Ar] = Ar;
127 weight_set[
Z_Ca] = Ca;
128 weight_set[
Z_Ti] = Ti;
129 weight_set[
Z_Cu] = Cu;
130 weight_set[
Z_Zn] = Zn;
131 weight_set[
Z_Ag] = Ag;
132 weight_set[
Z_Sn] = Sn;
133 weight_set[
Z_Fe] = Fe;
143 m_min_HU_value(aMaterial.m_min_HU_value),
144 m_max_HU_value(aMaterial.m_max_HU_value),
145 m_mixture(aMaterial.m_mixture)
174 return (m_min_HU_value);
182 return (m_max_HU_value);
206 return (m_mixture.getMassAttenuationTotal(anEnergy));
212 double anEnergy)
const 215 return (m_mixture.getMassAttenuationTotal(anEnergy) *
216 (getDensity(aHounsfieldValue)));
222 double anEnergy)
const 225 return (getLinearAttenuationTotal(aHounsfieldValue, anEnergy));
234 double density(m_mixture.getDensity());
238 throw Exception(__FILE__, __FUNCTION__, __LINE__,
"The density of the mixture has not been initialised. It is therefore impossible to compute the linear attenuation coefficient.");
241 return (m_mixture.getMassAttenuationTotal(anEnergy) * density);
249 return (getLinearAttenuationTotal(anEnergy));
257 throw Exception(__FILE__, __FUNCTION__, __LINE__,
"Not implemented.");
266 if (
this != &aMaterial)
268 m_min_HU_value = aMaterial.m_min_HU_value;
269 m_max_HU_value = aMaterial.m_max_HU_value;
270 m_mixture = aMaterial.m_mixture;
281 if (m_min_HU_value != aMaterial.m_min_HU_value)
return false;
282 if (m_max_HU_value != aMaterial.m_max_HU_value)
return false;
283 if (m_mixture != aMaterial.m_mixture)
return false;
293 return (!(
operator==(aMaterial)));
302 anOutputSream << aTissueMaterial.m_min_HU_value <<
"\t";
303 anOutputSream << aTissueMaterial.m_max_HU_value <<
"\t";
305 for (std::map<int, double>::const_iterator ite = aTissueMaterial.
getWeightSet().begin();
309 anOutputSream << ite->second <<
"\t";
312 return (anOutputSream);
321 std::map<int, double> weight_set;
323 anInputSream >> aTissueMaterial.m_min_HU_value;
324 anInputSream >> aTissueMaterial.m_max_HU_value;
325 anInputSream >> weight_set[
Z_H];
326 anInputSream >> weight_set[
Z_C];
327 anInputSream >> weight_set[
Z_N];
328 anInputSream >> weight_set[
Z_O];
329 anInputSream >> weight_set[
Z_Na];
330 anInputSream >> weight_set[
Z_Mg];
331 anInputSream >> weight_set[
Z_P];
332 anInputSream >> weight_set[
Z_S];
333 anInputSream >> weight_set[
Z_Cl];
334 anInputSream >> weight_set[
Z_Ar];
335 anInputSream >> weight_set[
Z_K];
336 anInputSream >> weight_set[
Z_Ca];
337 anInputSream >> weight_set[
Z_Ti];
338 anInputSream >> weight_set[
Z_Cu];
339 anInputSream >> weight_set[
Z_Zn];
340 anInputSream >> weight_set[
Z_Ag];
341 anInputSream >> weight_set[
Z_Sn];
342 anInputSream >> weight_set[
Z_Fe];
343 anInputSream >> weight_set[
Z_I];
347 return (anInputSream);
const unsigned short Z_S
Sulfur atomic number.
const unsigned short Z_H
Hydrogen atomic number.
double getMu(short aHounsfieldValue, double anEnergy) const
const unsigned short Z_Cl
Chlorine atomic number.
TissueMaterial(short aMinHUValue=0, short aMaxHUValue=0, double H=0, double C=0, double N=0, double O=0, double Na=0, double Mg=0, double P=0, double S=0, double Cl=0, double Ar=0, double K=0, double Ca=0, double Ti=0, double Cu=0, double Zn=0, double Ag=0, double Sn=0, double Fe=0, double I=0)
Default Constructor.
short getMinHUValue() const
Accessor on the minimum HU.
const unsigned short Z_Zn
Zinc atomic number.
double getMolarMass() const
Accessor on the molar mass of the material.
double getS(double x) const
double getMolarMass() const
Accessor on the molar mass of the material.
double getLinearAttenuationTotal(short aHounsfieldValue, double anEnergy) const
short getMaxHUValue() const
Accessor on the maximum HU.
Exception is a class to handle exceptions.
const unsigned short Z_N
Nitrogen atomic number.
void clear()
Remove all the atomic elements from the material.
std::istream & operator>>(std::istream &anInputSream, gVirtualXRay::AtomicElement &anElement)
operator >>
TissueMaterial & operator=(const TissueMaterial &aMaterial)
Copy operator.
const unsigned short Z_Sn
Tin atomic number.
const std::map< int, double > & getWeightSet() const
Accessor on the weight of each atomic element.
bool operator!=(const TissueMaterial &aMaterial) const
Operator !=.
const unsigned short Z_Cu
Copper atomic number.
const unsigned short Z_Ti
Titanium atomic number.
void setMixture(const std::map< int, double > &aWeightSet)
const unsigned short Z_P
Phosphorus atomic number.
void setDensity(double aDensity)
Set the density for the mixture regardless of the HU value.
const unsigned short Z_I
Iodine atomic number.
double getMassAttenuationTotal(double anEnergy) const
const unsigned short Z_Mg
Magnesium atomic number.
TissueMaterial is a class to manage a material.
const unsigned short Z_Ar
Argon atomic number.
std::ostream & operator<<(std::ostream &anOutputSream, const gVirtualXRay::AtomicElement &anElement)
operator <<
const unsigned short Z_Ca
Calcium atomic number.
void setMixture(const std::map< int, double > &aWeightSet)
const unsigned short Z_Fe
Iron atomic number.
const unsigned short Z_O
Oxygen atomic number.
const unsigned short Z_K
Potassium atomic number.
bool operator==(const TissueMaterial &aMaterial) const
Operator ==.
Constant values, such as the Z number of different atoms, etc.
const std::map< int, double > & getWeightSet() const
const unsigned short Z_C
Carbon atomic number.
const unsigned short Z_Ag
Silver atomic number.
void setDensity(double aDensity)
const unsigned short Z_Na
Sodium atomic number.