///////////////////////////////////////////////////////////////////////////////
/// \class RAT::Optics
///
/// \brief Constructs the Optics
///
/// \author Phil G Jones
/// \author I Coulter -- contact person
///
/// REVISION HISTORY:\n
/// 2013-07-30 : P G Jones - Refactor.\n
/// 09-12-2015 : I Coulter - Fix so it reads in the SCINTMOD for alphas
/// and neutrons
///
/// \details Loads material properties from ratdb and builds the geant4 optical
/// material properties.
///
///////////////////////////////////////////////////////////////////////////////
#ifndef __RAT_Optics__
#define __RAT_Optics__
#include
#include
#include
#include
class G4MaterialPropertiesTable;
namespace RAT
{
class Optics
{
public:
/// Load and construct optics
static void LoadOptics();
/// Load a single wavelength dependent property vector (useful outside of this class)
///
/// @param[in] propertyName db field name for the property
/// @param[in] dbTable that defines the property
/// @return the material property vector
static G4MaterialPropertyVector* LoadWavelengthPropertyVector( const std::string& propertyName,
DBLinkPtr dbTable );
/// Load a property vector (useful outside of this class)
///
/// @param[in] propertyName db field name for the property
/// @param[in] dbTable that defines the property
/// @return the material property vector
static G4MaterialPropertyVector* LoadPropertyVector( const std::string& propertyName,
DBLinkPtr dbTable );
private:
/// Load the optical properties for the material name
///
/// @param[in] name db field name for the property
/// @param[in] dbTable that defines the property
static void LoadOpticalProperties( const std::string& name,
DBLinkPtr dbTable );
/// Sum and rescale a property i.e. the optical attenuation lengths
///
/// @param[in] dbTable that defines the material
/// @param[in] propertiesTable for the material
/// @param[in] property name
static void RescaleProperty( DBLinkPtr dbTable,
G4MaterialPropertiesTable* propertiesTable,
const std::string& property );
};
} // namespace RAT
#endif