1 #include "FlukaMaterial.hh"
2 #include "FlukaLowMat.hh"
3 #include "WrapUtils.hh"
6 FlukaMaterialsTable FlukaMaterial::fFlukaMaterials;
7 FlukaMaterialsIndexTable FlukaMaterial::fFlukaIndexMaterials;
9 FlukaMaterial::FlukaMaterial(const G4String& name,
20 G4String testname(name);
22 while (fFlukaMaterials[testname] && matrep < 100) {
25 sprintf(smatrep,"%.2d",matrep);
28 if (testname.length() <= 6)
31 testname.replace(6,testname.length()-6, smatrep, 2);
33 #ifdef G4GEOMETRY_DEBUG
34 G4cout << "INFO: We found material \'" << name << " previously defined."
36 G4cout << " Checking if \'" << testname << "\' exists." << G4endl;
41 G4cerr << "ERROR: Too many materials with the same name. Exiting!"
46 fFlukaMaterials[testname] = this;
49 fIndex = fFlukaMaterials.size() + 2;
50 fFlukaIndexMaterials[fIndex] = this;
53 FlukaMaterial::~FlukaMaterial() {
57 void FlukaMaterial::AddLowMat(const G4String& name) {
58 fFlukaLowMat = new FlukaLowMat(name, this);
62 G4String FlukaMaterial::GetRealName() const {
64 return fFlukaLowMat->GetName();
68 G4std::ostream& FlukaMaterial::PrintMaterialsByName(G4std::ostream& os) {
69 PrintHeader(os, "MATERIALS");
70 for (FlukaMaterialsIterator i = fFlukaMaterials.begin();
71 i != fFlukaMaterials.end();
73 FlukaMaterial* flumat = (*i).second;
75 //if (flumat->GetZ()) //Skip materials that describe only compounds
81 G4std::ostream& FlukaMaterial::PrintMaterialsByIndex(G4std::ostream& os) {
82 PrintHeader(os, "MATERIALS");
83 for (FlukaMaterialsIndexIterator i = fFlukaIndexMaterials.begin();
84 i != fFlukaIndexMaterials.end();
86 FlukaMaterial* flumat = (*i).second;
88 //if (flumat->GetZ()) //Skip materials that describe only compounds
94 G4std::ostream& operator<<(G4std::ostream& os, const FlukaMaterial& material){
95 os << setw10 << "MATERIAL ";
97 os.setf(static_cast<G4std::ios::fmtflags>(0),G4std::ios::floatfield);
98 G4double Z = G4double(material.GetZ());
104 << G4std::setprecision(1)
107 G4double A = material.GetA();
111 os << setw10 << G4std::setprecision(3)
114 G4double density = material.GetDensity();
117 os.setf(static_cast<G4std::ios::fmtflags>(0),G4std::ios::floatfield);
120 << G4std::setprecision(3)
123 os.setf(static_cast<G4std::ios::fmtflags>(0),G4std::ios::floatfield);
126 << G4std::setprecision(1)
127 << G4double(material.GetIndex());
131 os << setw10 << G4double(material.GetN());
136 os << material.GetRealName().substr(0,8) << G4endl;
138 if (material.GetLowMat() && material.GetZ() != 0)
139 os << *(material.GetLowMat());