Geant4 Cross Reference |
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 45 class G4PhysicsModelCatalog { 46 public: 47 static void Initialize(); 48 ~G4PhysicsModelCatalog() = default; 49 G4PhysicsModelCatalog( const G4PhysicsModelCatalog& ) = delete; 50 G4PhysicsModelCatalog& operator=( const G4PhysicsModelCatalog& ) = delete; 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 82 static G4int GetMinAllowedModelIDValue(); 83 static G4int GetMaxAllowedModelIDValue(); 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 105 inline G4int G4PhysicsModelCatalog::GetMinAllowedModelIDValue() { 106 return theMinAllowedModelIDValue; 107 } 108 109 inline G4int G4PhysicsModelCatalog::GetMaxAllowedModelIDValue() { 110 return theMaxAllowedModelIDValue; 111 } 112 113 inline void G4PhysicsModelCatalog::InsertModel( G4int modelID, G4String modelName ) { 114 theVectorOfModelIDs->push_back( modelID ); 115 theVectorOfModelNames->push_back( modelName ); 116 } 117 118 #endif 119