Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4MaterialPropertiesTable.hh
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//
28// class G4MaterialPropertiesTable
29//
30// Class description:
31//
32// A Material properties table is a hash table, with
33// key = property name, and value either G4double or
34// G4MaterialPropertyVector
35//
36// File: G4MaterialPropertiesTable.hh
37// Version: 1.0
38// Created: 1996-02-08
39// Author: Juliet Armstrong
40// Updated: 2005-05-12 add SetGROUPVEL() by P. Gumplinger
41// 2002-11-05 add named material constants by P. Gumplinger
42// 1999-11-05 Migration from G4RWTPtrHashDictionary to STL
43// by John Allison
44// 1999-10-29 add method and class descriptors
45// 1997-03-25 by Peter Gumplinger
46// > cosmetics (only)
47//
48////////////////////////////////////////////////////////////////////////
49
50#ifndef G4MaterialPropertiesTable_h
51#define G4MaterialPropertiesTable_h 1
52
55#include "globals.hh"
56
57#include <vector>
58
60{
61 public:
64
65 // Add a new property to the table by giving a key-name and value
66 void AddConstProperty(const G4String& key, G4double propertyValue, G4bool createNewKey = false);
67 void AddConstProperty(const char* key, G4double propertyValue, G4bool createNewKey = false);
68
69 // Add a new property to the table by giving a key-name and
70 // vectors of values
72 const std::vector<G4double>& photonEnergies, const std::vector<G4double>& propertyValues,
73 G4bool createNewKey = false, G4bool spline = false);
74
75 // Add a new property to the table by giving a key-name and the
76 // arrays x and y of size NumEntries.
77 G4MaterialPropertyVector* AddProperty(const char* key, G4double* photonEnergies,
78 G4double* propertyValues, G4int numEntries, G4bool createNewKey = false, G4bool spline = false);
79
80 // Add a new property to the table by giving a key-name and an
81 // already constructed G4MaterialPropertyVector.
82 void AddProperty(const G4String& key, G4MaterialPropertyVector* opv, G4bool createNewKey = false);
83 void AddProperty(const char* key, G4MaterialPropertyVector* opv, G4bool createNewKey = false);
84
85 // Add a new property to the table by giving a key name and a material
86 // name. Properties are in namespace G4OpticalMaterialProperties
87 // Not possible to create a new key with this method.
88 void AddProperty(const G4String& key, const G4String& mat);
89
90 // Remove a constant property from the table.
91 void RemoveConstProperty(const G4String& key);
92 void RemoveConstProperty(const char* key);
93
94 // Remove a property from the table.
95 void RemoveProperty(const G4String& key);
96 void RemoveProperty(const char* key);
97
98 // Get a constant property from the table
99 // It is an error to ask for a const property that the user has not defined.
100 // Check if it has been defined with ConstPropertyExists() first.
101 G4double GetConstProperty(const G4String& key) const;
102 G4double GetConstProperty(const char* key) const;
103 G4double GetConstProperty(const G4int index) const;
104
105 // Return true if a const property has been defined by the user.
106 // Despite the name, this returns false for a const property in
107 // GetMaterialConstPropertyNames() but not defined by user.
108 // Use this method before calling GetConstProperty().
109 G4bool ConstPropertyExists(const G4String& key) const;
110 G4bool ConstPropertyExists(const char* key) const;
111 G4bool ConstPropertyExists(const G4int index) const;
112
113 // Get the property from the table corresponding to the key-index or index.
114 // nullptr is returned if the property has not been defined by the user.
115 G4MaterialPropertyVector* GetProperty(const char* key) const;
117 G4MaterialPropertyVector* GetProperty(const G4int index) const;
118
119 // Add a new entry (pair of numbers) to the table for a given key.
120 void AddEntry(const G4String& key, G4double aPhotonEnergy, G4double aPropertyValue);
121 void AddEntry(const char* key, G4double aPhotonEnergy, G4double aPropertyValue);
122
123 // Get the constant property index from the key-name
124 // It is an error to request the index of a non-existent key (key not
125 // present in fMaterialConstPropertyNames()).
126 G4int GetConstPropertyIndex(const G4String& key) const;
127
128 // Get the property index by the key-name.
129 // It is an error to request the index of a non-existent key (key not
130 // present in GetMaterialPropertyNames()).
131 G4int GetPropertyIndex(const G4String& key) const;
132
133 // print the material properties and material constant properties
134 void DumpTable() const;
135
136 // the next four methods are used in persistency/GDML:
137 const std::vector<G4String>& GetMaterialPropertyNames() const { return fMatPropNames; }
138 const std::vector<G4String>& GetMaterialConstPropertyNames() const { return fMatConstPropNames; }
139 // return references to the vectors of material (constant) properties.
140 const std::vector<G4MaterialPropertyVector*>& GetProperties() const { return fMP; }
141 const std::vector<std::pair<G4double, G4bool>>& GetConstProperties() const { return fMCP; }
142
143 private:
144 // Calculate the group velocity based on RINDEX
145 G4MaterialPropertyVector* CalculateGROUPVEL();
146
147 // Vector of pointer to material property vectors.
148 // All entries are initialized to nullptr. Pointer is not null when mat.prop. vector defined.
149 // Order of entries in MP defined by enum in G4MaterialPropertiesIndex.
150 std::vector<G4MaterialPropertyVector*> fMP;
151
152 // Vector of energy-independent (i.e., "constant") material properties. We
153 // need to keep track if a property is defined or not: the bool in the pair
154 // is 'true' if the property is defined.
155 // Order of entries in MCP defined by enum in G4MaterialPropertiesIndex.
156 std::vector<std::pair<G4double, G4bool>> fMCP;
157
158 std::vector<G4String> fMatPropNames; // vector of strings of property names
159 std::vector<G4String> fMatConstPropNames; // vector of strings of property names
160};
161
162#endif /* G4MaterialPropertiesTable_h */
G4PhysicsFreeVector G4MaterialPropertyVector
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4int GetConstPropertyIndex(const G4String &key) const
void AddConstProperty(const G4String &key, G4double propertyValue, G4bool createNewKey=false)
const std::vector< G4String > & GetMaterialConstPropertyNames() const
G4bool ConstPropertyExists(const G4String &key) const
void RemoveProperty(const G4String &key)
G4int GetPropertyIndex(const G4String &key) const
const std::vector< std::pair< G4double, G4bool > > & GetConstProperties() const
const std::vector< G4MaterialPropertyVector * > & GetProperties() const
const std::vector< G4String > & GetMaterialPropertyNames() const
G4double GetConstProperty(const G4String &key) const
void AddEntry(const G4String &key, G4double aPhotonEnergy, G4double aPropertyValue)
G4MaterialPropertyVector * AddProperty(const G4String &key, const std::vector< G4double > &photonEnergies, const std::vector< G4double > &propertyValues, G4bool createNewKey=false, G4bool spline=false)
G4MaterialPropertyVector * GetProperty(const char *key) const
void RemoveConstProperty(const G4String &key)