Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 << 25 // 26 // 18-10-07, move definition of material index << 26 // >> 27 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 28 // >> 29 // 18-10-07, move definition of material index to InitialisePointers (V.Ivanchenko) 27 // 13-08-08, do not use fixed size arrays (V.I 30 // 13-08-08, do not use fixed size arrays (V.Ivanchenko) 28 // 26-10-11, new scheme for G4Exception (mma) 31 // 26-10-11, new scheme for G4Exception (mma) 29 // 13-04-12, map<G4Material*,G4double> fMatCom 32 // 13-04-12, map<G4Material*,G4double> fMatComponents, filled in AddMaterial() 30 // 21-04-12, fMassOfMolecule, computed for Ato 33 // 21-04-12, fMassOfMolecule, computed for AtomsCount (mma) >> 34 // >> 35 // >> 36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 37 32 #include "G4ExtendedMaterial.hh" 38 #include "G4ExtendedMaterial.hh" 33 << 34 #include "G4VMaterialExtension.hh" 39 #include "G4VMaterialExtension.hh" 35 40 36 // Constructor to create an extended material 41 // Constructor to create an extended material from the base-class G4Material 37 42 38 G4ExtendedMaterial::G4ExtendedMaterial(const G << 43 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, 39 : G4Material(name, baseMaterial->GetDensity( << 44 const G4Material* baseMaterial) 40 baseMaterial->GetTemperature(), baseMate << 45 : G4Material(name,baseMaterial->GetDensity(),baseMaterial, 41 {} << 46 baseMaterial->GetState(),baseMaterial->GetTemperature(), >> 47 baseMaterial->GetPressure()) >> 48 {;} 42 49 43 // Constructor to create an extended material 50 // Constructor to create an extended material from single element 44 51 45 G4ExtendedMaterial::G4ExtendedMaterial(const G << 52 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double z, 46 G4double density, G4State state, G4double te << 53 G4double a, G4double density, 47 : G4Material(name, z, a, density, state, tem << 54 G4State state, G4double temp, G4double pressure) 48 {} << 55 : G4Material(name,z,a,density,state,temp,pressure) >> 56 {;} >> 57 >> 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 49 59 50 // Constructor to create an extended material 60 // Constructor to create an extended material from a combination of elements 51 // (elements and/or materials) added with Add 61 // (elements and/or materials) added with AddElement or AddMaterial 52 62 53 G4ExtendedMaterial::G4ExtendedMaterial(const G << 63 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, 54 G4State state, G4double temp, G4double press << 64 G4int nComponents, 55 : G4Material(name, density, nComponents, sta << 65 G4State state, G4double temp, G4double pressure) 56 {} << 66 : G4Material(name,density,nComponents,state,temp,pressure) >> 67 {;} >> 68 >> 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 57 70 58 // Constructor to create an extended material 71 // Constructor to create an extended material from the base extended material 59 72 60 G4ExtendedMaterial::G4ExtendedMaterial(const G 73 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, 61 const G4ExtendedMaterial* bmat, G4State stat << 74 const G4ExtendedMaterial* bmat, 62 : G4Material(name, density, bmat, state, tem << 75 G4State state, G4double temp, G4double pressure) 63 {} << 76 : G4Material(name,density,bmat,state,temp,pressure) >> 77 {;} >> 78 >> 79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 80 64 81 65 // register G4VMaterialExtension 82 // register G4VMaterialExtension 66 83 67 void G4ExtendedMaterial::RegisterExtension(std 84 void G4ExtendedMaterial::RegisterExtension(std::unique_ptr<G4VMaterialExtension> extension) 68 { 85 { 69 auto iter = fExtensionMap.find(extension->Ge 86 auto iter = fExtensionMap.find(extension->GetName()); 70 if (iter != fExtensionMap.end()) { << 87 if(iter!=fExtensionMap.end()) 71 G4ExceptionDescription msg; << 88 { 72 msg << "G4ExtendedMaterial <" << GetName() << 89 G4ExceptionDescription msg; 73 << extension->GetName() << ". Extensio << 90 msg << "G4ExtendedMaterial <"<<GetName()<<"> already has extension for " 74 G4Exception("G4ExtendedMaterial::RegisterE << 91 << extension->GetName() >> 92 << ". Extension is replaced."; >> 93 G4Exception("G4ExtendedMaterial::RegisterExtension(...)","MatExt001",JustWarning,msg); 75 } 94 } 76 fExtensionMap.insert(std::make_pair(extensio << 95 fExtensionMap.insert(std::make_pair(extension->GetName(),std::move(extension))); 77 } 96 } 78 97 >> 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 99 79 // retrieve G4VMaterialExtension, null pointer 100 // retrieve G4VMaterialExtension, null pointer is returned if model is not available 80 101 81 G4VMaterialExtension* G4ExtendedMaterial::Retr 102 G4VMaterialExtension* G4ExtendedMaterial::RetrieveExtension(const G4String& name) 82 { 103 { 83 const auto iter = fExtensionMap.find(name); 104 const auto iter = fExtensionMap.find(name); 84 if (iter != fExtensionMap.end()) { << 105 if(iter!=fExtensionMap.end()) 85 return iter->second.get(); << 106 { return iter->second.get(); } >> 107 else >> 108 { >> 109 G4ExceptionDescription msg; >> 110 msg << "G4ExtendedMAterial <"<<GetName()<<"> cannot find extension for " >> 111 << name; >> 112 G4Exception("G4ExtendedMaterial::RetreiveExtension(...)","MatExt002",JustWarning,msg); >> 113 return nullptr; 86 } 114 } 87 << 88 G4ExceptionDescription msg; << 89 msg << "G4ExtendedMAterial <" << GetName() < << 90 G4Exception("G4ExtendedMaterial::RetreiveExt << 91 return nullptr; << 92 } 115 } 93 116 94 G4bool G4ExtendedMaterial::IsExtended() const << 117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 118 >> 119 G4bool G4ExtendedMaterial::IsExtended() const >> 120 { return true; } >> 121 >> 122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 95 123 96 void G4ExtendedMaterial::Print(std::ostream& f 124 void G4ExtendedMaterial::Print(std::ostream& flux) const 97 { << 125 { 98 flux << "\n Registered material extensions : 126 flux << "\n Registered material extensions :\n"; 99 auto iter = fExtensionMap.begin(); 127 auto iter = fExtensionMap.begin(); 100 for (; iter != fExtensionMap.end(); iter++) << 128 for(;iter!=fExtensionMap.end();iter++) 101 flux << " " << iter->first << "\n"; << 129 { flux << " " << iter->first << "\n"; } 102 } << 103 } 130 } >> 131 >> 132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 104 133