diff --git a/Core/StandardSamples/MaterialBySLDBuilder.cpp b/Core/StandardSamples/MaterialBySLDBuilder.cpp index b7f72fec9b74de3a0a371259c6c4160518d4e83e..9c74bc05146c3de38169cd94332a28851072d80e 100644 --- a/Core/StandardSamples/MaterialBySLDBuilder.cpp +++ b/Core/StandardSamples/MaterialBySLDBuilder.cpp @@ -2,12 +2,13 @@ #include "MaterialFactoryFuncs.h" #include "Layer.h" #include "MultiLayer.h" +#include "Units.h" MaterialBySLDBuilder::MaterialBySLDBuilder() : m_number_of_layers(10) - , m_si {4.1491e-6, 4.99e+1} // [nm, nm^{-3}] - , m_ti {-3.438e-6, 5.67e+1} // [nm, nm^{-3}] - , m_ni {1.3e-5, 9.15e+1} // [nm, nm^{-3}] + , m_si {4.1491e-6, 4.99e+1, 0.171 * Units::barn} // [nm, nm^{-3}, nm^2] + , m_ti {-3.438e-6, 5.67e+1, 6.09 * Units::barn * 1e+4} // [nm, nm^{-3}, nm^2] + , m_ni {1.3e-5, 9.15e+1, 4.49 * Units::barn} // [nm, nm^{-3}, nm^2] , m_thick_ti(3.0) // nm , m_thick_ni(7.0) //nm {} @@ -17,9 +18,9 @@ MultiLayer* MaterialBySLDBuilder::buildSample() const std::unique_ptr<MultiLayer> multi_layer(new MultiLayer()); Material vacuum_material = MaterialBySLD(); - Material substrate_material = MaterialBySLD("Si_substrate", m_si.product(), 0.0); - Material ni_material = MaterialBySLD("Ni", m_ni.product(), 0.0); - Material ti_material = MaterialBySLD("Ti", m_ti.product(), 0.0); + Material substrate_material = MaterialByAbsCX("Si_substrate", m_si.sld(), m_si.abs_term()); + Material ni_material = MaterialByAbsCX("Ni", m_ni.sld(), m_ni.abs_term()); + Material ti_material = MaterialByAbsCX("Ti", m_ti.sld(), m_ti.abs_term()); Layer vacuum_layer(vacuum_material, 0); Layer ni_layer(ni_material, m_thick_ni); diff --git a/Core/StandardSamples/MaterialBySLDBuilder.h b/Core/StandardSamples/MaterialBySLDBuilder.h index 2df290969ad12243ca52b82ef7b8b8b06d1d3958..4c2e438d36e5de20d12a913f7f354061fbfa40c0 100644 --- a/Core/StandardSamples/MaterialBySLDBuilder.h +++ b/Core/StandardSamples/MaterialBySLDBuilder.h @@ -20,7 +20,7 @@ //! Builds a sample with 10 interchanging homogeneous layers of Ti and Ni on silicone substrate. //! Ti is 70 angstroms thick, Ni is 30 angstroms thick. -//! As opposed to HomogeneousMultilayerBuilder, uses MaterialBySLD. No absorption, no roughness. +//! Titanium absorption coefficient is exaggerated 10^4 times for its effect to be noticeable //! @ingroup standard_samples class BA_CORE_API_ MaterialBySLDBuilder : public IMultiLayerBuilder @@ -31,12 +31,20 @@ public: protected: struct MaterialData { - double product() const + double sld() const { return density * scat_length; } + + //! Returns macroscopic cross-section for 2200 m/s neutrons + double abs_term() const + { + return density * abs_cx; + } + double scat_length; //!< bound coherent scattering length double density; //!< number density + double abs_cx; //!< absorption cross-section for 2200 m/s neutrons }; size_t m_number_of_layers; MaterialData m_si;