00001 #ifndef DDMaterial_h 00002 #define DDMaterial_h 00003 00004 #include <iostream> 00005 #include <vector> 00006 #include <utility> 00007 #include "DetectorDescription/Core/interface/DDName.h" 00008 #include "DetectorDescription/Core/interface/DDBase.h" 00009 namespace DDI { class Material; } 00010 00011 class DDMaterial; 00012 00013 00014 std::ostream & operator<<(std::ostream &, const DDMaterial &); 00015 00017 00045 class DDMaterial : public DDBase<DDName,DDI::Material*> 00046 { 00047 //typedef std::vector< pair<DDMaterial,double> > Fractions; 00048 friend std::ostream & operator<<(std::ostream &, const DDMaterial &); 00049 00050 00052 00053 public: 00054 typedef std::vector<std::pair<DDMaterial,double> > FractionV; 00056 DDMaterial(); 00057 00059 DDMaterial(const DDName & name); 00060 00062 DDMaterial(const DDName & name, double z, double a, double d); 00063 00065 DDMaterial(const DDName & name, double density); 00066 00068 int noOfConstituents() const; 00069 00071 FractionV::value_type constituent(int i) const; 00072 00074 int addMaterial(const DDMaterial & m, double fm); 00075 00077 double a() const; 00078 00080 double z() const; 00081 00083 double density() const; 00084 00086 static void clear(); 00087 00088 private: 00089 //explicit DDMaterial(DDRedirect<DDMaterialImpl>* p, bool dummy); 00090 }; 00091 00092 #endif