Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PhysicsModelCatalog.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// G4PhysicsModelCatalog
27//
28// Class description:
29//
30// Singleton, collection of physics models, to be used by models and G4Track.
31
32// Author: M.Asai (SLAC), 26 September 2013
33
34// Revised in August 2021 by A.Ribon (CERN).
35// --------------------------------------------------------------------
36#ifndef G4PhysicsModelCatalog_hh
37#define G4PhysicsModelCatalog_hh
38
39#include <vector>
40
41#include "G4String.hh"
42#include "globals.hh"
43
44
46 public:
47 static void Initialize();
51
52 static const G4String GetModelNameFromID( const G4int modelID );
53 static const G4String GetModelNameFromIndex( const G4int modelIndex );
54 static G4int GetModelID( const G4int modelIndex );
55 static G4int GetModelID( const G4String& modelName );
56 static G4int GetModelIndex( const G4int modelID );
57 static G4int GetModelIndex( const G4String& modelName );
58 // There are two integer values: the model ID and the model Index.
59 // The model ID is a unique integer which identifies not only the model
60 // but also the category to which it belongs to; future models should
61 // be given an model ID consistent with their category.
62 // In the Geant4 code, it should always be the model ID, not the model Index,
63 // which is used.
64 // The model Index is the index of the vector of either model IDs, or
65 // model names (these two vectors have the same size).
66 // The model Index for a model does not have meaning in itself:
67 // it depends only on the order in which the vectors are filled.
68 // The model Index is useful for plotting because the index of the vector
69 // has contiguous, small non-negative integer values, whereas the modelID
70 // has non-contiguous, large, positive integer values (unconvenient for plotting).
71 // The idea is that, starting from Geant4 version 11.0, all the three
72 // identifiers (modelID, index, name) remain the same regardless of the
73 // physics list, application, and version of Geant4.
74
75 static G4int Entries();
76 // The size of the two vectors (of model IDs and model names) are required to be the same.
77
78 static void PrintAllInformation();
79 // Print all information of this class about the models, i.e. each entry
80 // of the two vectors - the one of model-IDs and the one of model-names.
81
84 // Returns the two limits, min and max respectively, that the modelID value can have.
85
86 private:
87 G4PhysicsModelCatalog() = default;
88
89 static void SanityCheck();
90 // Check that the two vectors (of model IDs and model names) have the same size,
91 // the model IDs have the expected values (i.e. within the allowed interval), and
92 // there are no duplication of either model IDs or model names.
93
94 inline static void InsertModel( G4int modelID, G4String modelName );
95
96 static G4bool isInitialized;
97 static const G4int theMinAllowedModelIDValue = 10000;
98 static const G4int theMaxAllowedModelIDValue = 39999;
99
100 static std::vector< G4int >* theVectorOfModelIDs; // Non-contiguous large, positive integers
101 static std::vector< G4String >* theVectorOfModelNames;
102};
103
104
106 return theMinAllowedModelIDValue;
107}
108
110 return theMaxAllowedModelIDValue;
111}
112
113inline void G4PhysicsModelCatalog::InsertModel( G4int modelID, G4String modelName ) {
114 theVectorOfModelIDs->push_back( modelID );
115 theVectorOfModelNames->push_back( modelName );
116}
117
118#endif
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4PhysicsModelCatalog(const G4PhysicsModelCatalog &)=delete
static const G4String GetModelNameFromIndex(const G4int modelIndex)
static G4int GetMaxAllowedModelIDValue()
static G4int GetMinAllowedModelIDValue()
~G4PhysicsModelCatalog()=default
G4PhysicsModelCatalog & operator=(const G4PhysicsModelCatalog &)=delete
static G4int GetModelIndex(const G4int modelID)
static const G4String GetModelNameFromID(const G4int modelID)
static G4int GetModelID(const G4int modelIndex)