Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ExtDEDXTable.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 // $Id: G4ExtDEDXTable.hh 96794 2016-05-09 10:09:30Z gcosmo $
27 //
28 // ===========================================================================
29 // GEANT4 class header file
30 //
31 // Class: G4ExtDEDXTable
32 //
33 // Base class: G4VIonDEDXTable
34 //
35 // Author: Anton Lechner (Anton.Lechner@cern.ch)
36 //
37 // First implementation: 29. 02. 2009
38 //
39 // Modifications:
40 // 03.11.2009 A. Lechner: Added new methods BuildPhysicsVector according
41 // to interface changes in base class G4VIonDEDXTable.
42 //
43 //
44 // Class description:
45 // Utility class for users to add their own electronic stopping powers
46 // for ions. This class is dedicated for use with G4IonParametrisedLossModel
47 // of the low-energy electromagnetic package.
48 //
49 // Comments:
50 //
51 // ===========================================================================
52 //
53 
54 #ifndef G4EXTDEDXTABLE_HH
55 #define G4EXTDEDXTABLE_HH
56 
57 #include "globals.hh"
58 #include "G4VIonDEDXTable.hh"
59 #include <utility>
60 #include <vector>
61 #include <map>
62 
63 
65 
66  public:
67  explicit G4ExtDEDXTable();
68  virtual ~G4ExtDEDXTable();
69 
70  virtual G4bool BuildPhysicsVector(G4int ionZ,
71  const G4String& matName);
72 
73  virtual G4bool BuildPhysicsVector(G4int ionZ,
74  G4int matZ);
75 
76  // Function for checking the availability of stopping power tables
77  // for a given ion-material couple, where the material consists of
78  // a single element only.
79  virtual G4bool IsApplicable(
80  G4int atomicNumberIon, // Atomic number of ion
81  G4int atomicNumberElem // Atomic number of elemental material
82  );
83 
84  // Function for checking the availability of stopping power tables
85  // for given ion-material couples.
86  virtual G4bool IsApplicable(
87  G4int atomicNumberIon, // Atomic number of ion
88  const G4String& matIdentifier // Name or chemical formula of material
89  );
90 
91  // Function returning the stopping power vector for given ion-material
92  // couples, where the material consists of a single element only.
94  G4int atomicNumberIon, // Atomic number of ion
95  G4int atomicNumberElem // Atomic number of elemental material
96  );
97 
98  // Function returning the stopping power vector for given ion-material
99  // couples.
101  G4int atomicNumberIon, // Atomic number of ion
102  const G4String& matIdenfier // Name or chemical formula of material
103  );
104 
105  // Function returning the stopping power value for given ion-material
106  // couples, where the material consists of a single element only, and
107  // given energy.
109  G4double kinEnergyPerNucleon, // Kinetic energy per nucleon
110  G4int atomicNumberIon, // Atomic number of ion
111  G4int atomicNumberElem // Atomic number of elemental material
112  );
113 
114  // Function returning the stopping power value for given ion-material
115  // couples and given energy.
117  G4double kinEnergyPerNucleon, // Kinetic energy per nucleon
118  G4int atomicNumberIon, // Atomic number of ion
119  const G4String& matIdenfier // Name or chemical formula of material
120  );
121 
122  // Function for adding dE/dx vector for an elemental materials. The last
123  // argument only applies to elemental materials.
125  G4PhysicsVector* physicsVector, // Physics vector
126  G4int atomicNumberIon, // Atomic number of ion
127  const G4String& matIdenfier, // Name or chemical formula of material
128  G4int atomicNumberElem = 0 // Atomic number of elemental material
129  );
130 
131  // Function for removing dE/dx vector for a compound materials
133  G4int atomicNumberIon, // Atomic number of ion
134  const G4String& matIdentifier // Name or chemical formula of material
135  );
136 
137  // Function writing all stopping power vectors to file
139  const G4String& fileName // File name
140  );
141 
142  // Function retrieving all stopping power vectors from file
144  const G4String& fileName // File name
145  );
146 
147  // Function deleting all physics vectors and clearing the maps
148  void ClearTable();
149 
150  // Function printing the ion-material pairs of available vectors to stdout
151  void DumpMap();
152 
153  private:
154 
155  G4ExtDEDXTable(G4ExtDEDXTable&) = delete;
156  const G4ExtDEDXTable & operator=(const G4ExtDEDXTable&) = delete;
157 
158  G4PhysicsVector* CreatePhysicsVector(G4int vectorType);
159 
160  G4int FindAtomicNumberElement(G4PhysicsVector* physicsVector);
161 
162  typedef std::pair<G4int, G4int> G4IonDEDXKeyElem;
163  typedef std::pair<G4int, G4String> G4IonDEDXKeyMat;
164 
165  typedef std::map<G4IonDEDXKeyElem, G4PhysicsVector*> G4IonDEDXMapElem;
166  typedef std::map<G4IonDEDXKeyMat, G4PhysicsVector*> G4IonDEDXMapMat;
167 
168  G4IonDEDXMapElem dedxMapElements;
169  G4IonDEDXMapMat dedxMapMaterials;
170 };
171 
172 #endif // G4EXTDEDXTABLE_HH
G4double GetDEDX(G4double kinEnergyPerNucleon, G4int atomicNumberIon, G4int atomicNumberElem)
G4bool RetrievePhysicsTable(const G4String &fileName)
G4bool RemovePhysicsVector(G4int atomicNumberIon, const G4String &matIdentifier)
int G4int
Definition: G4Types.hh:78
bool G4bool
Definition: G4Types.hh:79
G4bool AddPhysicsVector(G4PhysicsVector *physicsVector, G4int atomicNumberIon, const G4String &matIdenfier, G4int atomicNumberElem=0)
virtual G4PhysicsVector * GetPhysicsVector(G4int atomicNumberIon, G4int atomicNumberElem)
G4bool StorePhysicsTable(const G4String &fileName)
virtual G4bool BuildPhysicsVector(G4int ionZ, const G4String &matName)
virtual ~G4ExtDEDXTable()
double G4double
Definition: G4Types.hh:76
virtual G4bool IsApplicable(G4int atomicNumberIon, G4int atomicNumberElem)