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