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
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)