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" >> 40 #include "G4PhysicsModelCatalog.hh" 35 41 36 // Constructor to create an extended material 42 // Constructor to create an extended material from the base-class G4Material 37 43 38 G4ExtendedMaterial::G4ExtendedMaterial(const G << 44 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, 39 : G4Material(name, baseMaterial->GetDensity( << 45 const G4Material* baseMaterial) 40 baseMaterial->GetTemperature(), baseMate << 46 : G4Material(name,baseMaterial->GetDensity(),baseMaterial, 41 {} << 47 baseMaterial->GetState(),baseMaterial->GetTemperature(), >> 48 baseMaterial->GetPressure()) >> 49 {;} 42 50 43 // Constructor to create an extended material 51 // Constructor to create an extended material from single element 44 52 45 G4ExtendedMaterial::G4ExtendedMaterial(const G << 53 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double z, 46 G4double density, G4State state, G4double te << 54 G4double a, G4double density, 47 : G4Material(name, z, a, density, state, tem << 55 G4State state, G4double temp, G4double pressure) 48 {} << 56 : G4Material(name,z,a,density,state,temp,pressure) >> 57 {;} >> 58 >> 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 49 60 50 // Constructor to create an extended material 61 // Constructor to create an extended material from a combination of elements 51 // (elements and/or materials) added with Add 62 // (elements and/or materials) added with AddElement or AddMaterial 52 63 53 G4ExtendedMaterial::G4ExtendedMaterial(const G << 64 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, 54 G4State state, G4double temp, G4double press << 65 G4int nComponents, 55 : G4Material(name, density, nComponents, sta << 66 G4State state, G4double temp, G4double pressure) 56 {} << 67 : G4Material(name,density,nComponents,state,temp,pressure) >> 68 {;} >> 69 >> 70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 57 71 58 // Constructor to create an extended material 72 // Constructor to create an extended material from the base extended material 59 73 60 G4ExtendedMaterial::G4ExtendedMaterial(const G 74 G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, 61 const G4ExtendedMaterial* bmat, G4State stat << 75 const G4ExtendedMaterial* bmat, 62 : G4Material(name, density, bmat, state, tem << 76 G4State state, G4double temp, G4double pressure) 63 {} << 77 : G4Material(name,density,bmat,state,temp,pressure) >> 78 {;} >> 79 >> 80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 81 64 82 65 // register G4VMaterialExtension 83 // register G4VMaterialExtension 66 84 67 void G4ExtendedMaterial::RegisterExtension(std 85 void G4ExtendedMaterial::RegisterExtension(std::unique_ptr<G4VMaterialExtension> extension) 68 { 86 { 69 auto iter = fExtensionMap.find(extension->Ge 87 auto iter = fExtensionMap.find(extension->GetName()); 70 if (iter != fExtensionMap.end()) { << 88 if(iter!=fExtensionMap.end()) 71 G4ExceptionDescription msg; << 89 { 72 msg << "G4ExtendedMaterial <" << GetName() << 90 G4ExceptionDescription msg; 73 << extension->GetName() << ". Extensio << 91 msg << "G4ExtendedMaterial <"<<GetName()<<"> already has extension for " 74 G4Exception("G4ExtendedMaterial::RegisterE << 92 << extension->GetName() >> 93 << ". Extension is replaced."; >> 94 G4Exception("G4ExtendedMaterial::RegisterExtension(...)","MatExt001",JustWarning,msg); 75 } 95 } 76 fExtensionMap.insert(std::make_pair(extensio << 96 fExtensionMap.insert(std::make_pair(extension->GetName(),std::move(extension))); 77 } 97 } 78 98 >> 99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 100 79 // retrieve G4VMaterialExtension, null pointer 101 // retrieve G4VMaterialExtension, null pointer is returned if model is not available 80 102 81 G4VMaterialExtension* G4ExtendedMaterial::Retr 103 G4VMaterialExtension* G4ExtendedMaterial::RetrieveExtension(const G4String& name) 82 { 104 { 83 const auto iter = fExtensionMap.find(name); 105 const auto iter = fExtensionMap.find(name); 84 if (iter != fExtensionMap.end()) { << 106 if(iter!=fExtensionMap.end()) 85 return iter->second.get(); << 107 { return iter->second.get(); } >> 108 else >> 109 { >> 110 G4ExceptionDescription msg; >> 111 msg << "G4ExtendedMAterial <"<<GetName()<<"> cannot find extension for " >> 112 << name; >> 113 G4Exception("G4ExtendedMaterial::RetreiveExtension(...)","MatExt002",JustWarning,msg); >> 114 return nullptr; 86 } 115 } 87 << 88 G4ExceptionDescription msg; << 89 msg << "G4ExtendedMAterial <" << GetName() < << 90 G4Exception("G4ExtendedMaterial::RetreiveExt << 91 return nullptr; << 92 } 116 } 93 117 94 G4bool G4ExtendedMaterial::IsExtended() const << 118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 119 >> 120 G4bool G4ExtendedMaterial::IsExtended() const >> 121 { return true; } >> 122 >> 123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 95 124 96 void G4ExtendedMaterial::Print(std::ostream& f 125 void G4ExtendedMaterial::Print(std::ostream& flux) const 97 { << 126 { 98 flux << "\n Registered material extensions : 127 flux << "\n Registered material extensions :\n"; 99 auto iter = fExtensionMap.begin(); 128 auto iter = fExtensionMap.begin(); 100 for (; iter != fExtensionMap.end(); iter++) << 129 for(;iter!=fExtensionMap.end();iter++) 101 flux << " " << iter->first << "\n"; << 130 { flux << " " << iter->first << "\n"; } 102 } << 103 } 131 } >> 132 >> 133 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 104 134