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