00001 // $Id: Material.h,v 1.13 2008/10/28 12:04:37 cattanem Exp $ 00002 #ifndef DETDESC_MATERIAL_H 00003 #define DETDESC_MATERIAL_H 00005 #include <string> 00006 #include <vector> 00008 #include "GaudiKernel/DataObject.h" 00009 #include "GaudiKernel/SmartRefVector.h" 00010 #include "GaudiKernel/PhysicalConstants.h" 00012 class TabulatedProperty; 00013 class MsgStream; 00014 00015 // Material states, by default is stateUndefined 00016 typedef enum { 00017 stateUndefined = 0, 00018 stateSolid, 00019 stateLiquid, 00020 stateGas 00021 } eState; 00022 00033 class Material : public DataObject 00034 { 00035 public: 00037 typedef SmartRefVector<TabulatedProperty> Tables; 00039 public: 00040 00042 virtual std::ostream& fillStream ( std::ostream& s ) const ; 00044 virtual MsgStream& fillStream ( MsgStream& s ) const ; 00046 00048 bool operator==( const Material* right ) const; 00049 bool operator!=( const Material* right ) const; 00050 00052 virtual const std::string& name() const; 00053 virtual void setName( const std::string& value ); 00054 00056 virtual double density() const; 00057 virtual void setDensity( const double value ); 00058 00060 virtual double temperature() const; 00061 virtual void setTemperature( const double value ); 00062 00064 virtual double pressure() const; 00065 virtual void setPressure( const double value ); 00066 00068 virtual eState state() const; 00069 virtual void setState( const eState value ); 00070 00072 virtual double radiationLength() const; 00073 virtual void setRadiationLength( const double value ); 00074 00076 virtual double absorptionLength() const; 00077 virtual void setAbsorptionLength( const double value ); 00078 00080 virtual double A() const = 0; 00081 virtual void setA( const double value ) = 0; 00082 00084 virtual double Z() const = 0; 00085 virtual void setZ( const double value ) = 0; 00086 00088 virtual double I() const = 0; 00089 virtual void setI( const double value ) = 0; 00090 00092 virtual double C() const = 0; 00093 virtual void setC( const double value ) = 0; 00094 virtual double a() const = 0; 00095 virtual void seta( const double value ) = 0; 00096 virtual double m() const = 0; 00097 virtual void setm( const double value ) = 0; 00098 virtual double X1() const = 0; 00099 virtual void setX1( const double value ) = 0; 00100 virtual double X0() const = 0; 00101 virtual void setX0( const double value ) = 0; 00102 00104 virtual double N() const = 0; 00105 00107 inline Tables& tabulatedProperties() ; 00108 inline const Tables& tabulatedProperties() const ; 00110 00111 protected: 00112 00114 Material( const std::string& name = "", 00115 const double dens = 0 , 00116 const double rl = 0 , 00117 const double al = 0 , 00118 const double temp = Gaudi::Units::STP_Temperature, 00119 const double press = Gaudi::Units::STP_Pressure, 00120 const eState s = stateUndefined ); 00121 00123 virtual ~Material(); 00124 00125 private: 00126 00127 // Material name 00128 std::string m_name; 00129 00130 // Material density 00131 double m_density; 00132 00133 // Material radiation length 00134 double m_radiationLength; 00135 00136 // Material absorption length 00137 double m_absorptionLength; 00138 00139 // Material temperature, by default is STP [K] 00140 double m_temperature; 00141 00142 // Material pressure, by default is STP [atm] 00143 double m_pressure; 00144 00145 // Material state, by default is stateUndefined 00146 eState m_state; 00147 00148 // Tabulated properties of material 00149 Tables m_props; 00150 00151 }; 00153 #include "DetDesc/Material.icpp" 00155 00156 #endif // DETDESC_MATERIAL_MATERIAL_H