54 std::shared_ptr<PhysicalConstants::Atom>
atom;
56 FormulaUnit(std::shared_ptr<PhysicalConstants::Atom> atom,
const double multiplicity);
62 static ChemicalFormula parseChemicalFormula(
const std::string &chemicalSymbol);
71 const double packingFraction = 1,
const double temperature = 300,
74 const double packingFraction = 1,
const double temperature = 300,
85 const std::string &
name()
const;
91 double numberDensity()
const;
93 double numberDensityEffective()
const;
95 double packingFraction()
const;
97 double totalAtoms()
const;
99 double temperature()
const;
101 double pressure()
const;
103 double cohScatterXSection()
const;
105 double incohScatterXSection()
const;
107 double totalScatterXSection()
const;
109 double absorbXSection(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
110 double attenuationCoefficient(
const double lambda)
const;
112 double attenuation(
const double distance,
113 const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
115 double xRayAttenuation(
const double distance,
const double energy)
const;
122 double linearAbsorpCoef(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
129 std::vector<double> linearAbsorpCoef(std::vector<double>::const_iterator lambdaBegin,
130 std::vector<double>::const_iterator lambdaEnd)
const;
133 double cohScatterLength(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
135 double incohScatterLength(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
137 double totalScatterLength(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
140 double cohScatterLengthReal(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
142 double cohScatterLengthImg(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
144 double incohScatterLengthReal(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
146 double incohScatterLengthImg(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
153 double cohScatterLengthSqrd(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
159 double incohScatterLengthSqrd(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
166 double totalScatterLengthSqrd(
const double lambda = PhysicalConstants::NeutronAtom::ReferenceLambda)
const;
169 void saveNexus(Nexus::File *file,
const std::string &
group)
const;
170 void loadNexus(Nexus::File *file,
const std::string &
group);
172 bool hasValidXRayAttenuationProfile();
178 void calculateLinearAbsorpXSectionByWL();
180 void calculateTotalScatterXSection();