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 // INCL++ intra-nuclear cascade model 27 // Alain Boudard, CEA-Saclay, France 28 // Joseph Cugnon, University of Liege, Belgium 29 // Jean-Christophe David, CEA-Saclay, France 30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland 31 // Sylvie Leray, CEA-Saclay, France 32 // Davide Mancusi, CEA-Saclay, France 33 // 34 #define INCLXX_IN_GEANT4_MODE 1 35 36 #include "globals.hh" 37 38 /** \file G4INCLXXInterfaceStore.hh 39 * \brief Header file for the G4INCLXXInterfaceStore class 40 * 41 * \date 24 May 2012 42 * \author Davide Mancusi 43 */ 44 45 #ifndef G4INCLXXINTERFACESTORE_HH_ 46 #define G4INCLXXINTERFACESTORE_HH_ 47 48 #include "G4INCLXXInterface.hh" 49 #include "G4INCLCascade.hh" 50 #include "G4INCLVersion.hh" 51 #include "G4INCLConfig.hh" 52 #include <list> 53 #include <sstream> 54 55 class G4INCLXXInterfaceMessenger; 56 class G4INCLXXVInterfaceTally; 57 58 /** \class G4INCLXXInterfaceStore 59 * \brief Singleton class for configuring the INCL++ Geant4 interface. 60 * 61 * This class also contains a single cached instance of the INCL model 62 * (\see{G4INCL::INCL}). 63 */ 64 class G4INCLXXInterfaceStore { 65 public: 66 67 /// \brief Get the singleton instance 68 static G4INCLXXInterfaceStore *GetInstance(); 69 70 /// \brief Delete the singleton instance 71 static void DeleteInstance(); 72 73 /// \brief Get the cached INCL model engine 74 G4INCL::INCL *GetINCLModel(); 75 76 void constructINCLXXVersionName(); 77 78 const std::string &getINCLXXVersionName(); 79 80 81 82 /// \brief Setter for accurateProjectile 83 void SetAccurateProjectile(const G4bool b); 84 85 /// \brief Setter for the maximum cluster mass 86 void SetMaxClusterMass(const G4int aMass); 87 88 /// \brief Setter for cascadeMinEnergyPerNucleon 89 void SetCascadeMinEnergyPerNucleon(const G4double anEnergy); 90 91 /// \brief Setter for conservationTolerance 92 void SetConservationTolerance(const G4double aTolerance); 93 94 95 96 97 /** \brief Getter for accurateProjectile 98 * 99 * The \see{G4INCLXXInterfaceMessenger} class provides a UI command to set 100 * this parameter. 101 */ 102 G4bool GetAccurateProjectile() const; 103 104 /** \brief Getter for cascadeMinEnergyPerNucleon 105 * 106 * The \see{G4INCLXXInterfaceMessenger} class provides a UI command to set 107 * this parameter. 108 */ 109 G4double GetCascadeMinEnergyPerNucleon() const; 110 111 /// \brief Getter for theConfig 112 G4INCL::Config &GetINCLConfig(); 113 114 115 116 117 /// \brief Getter for theMaxProjMassINCL 118 G4int GetMaxProjMassINCL() const; 119 120 121 122 123 /// \brief Getter for conservationTolerance 124 G4double GetConservationTolerance() const; 125 126 127 128 129 /** \brief Emit a warning to G4cout 130 * 131 * The InterfaceStore will not emit more than maxWarnings warnings. 132 */ 133 void EmitWarning(const G4String &message); 134 135 /** \brief Emit a BIG warning to G4cout 136 * 137 * There is no limit on the number of BIG warnings emitted. 138 */ 139 void EmitBigWarning(const G4String &message) const; 140 141 /// \brief Getter for the interface tally 142 G4INCLXXVInterfaceTally *GetTally() const; 143 144 /// \brief Setter for the interface tally 145 void SetTally(G4INCLXXVInterfaceTally * const aTally); 146 147 /// \brief Set the INCL physics 148 void SetINCLPhysics(const G4String &option); 149 150 /// \brief Set ABLA V3 to be the de-excitation model to be used with INCL++ 151 void UseAblaDeExcitation(); 152 153 private: 154 155 /** \brief Private constructor 156 * 157 * This class is a singleton. It must be instantiated using the GetInstance 158 * static method. 159 */ 160 G4INCLXXInterfaceStore(); 161 162 /** \brief Private destructor 163 * 164 * This class is a singleton. Its instance must be deleted using the 165 * DeleteInstance static method. 166 */ 167 ~G4INCLXXInterfaceStore(); 168 169 /// \brief Delete the INCL model engine 170 void DeleteModel(); 171 172 static G4ThreadLocal G4INCLXXInterfaceStore *theInstance; 173 174 G4INCL::Config theConfig; 175 176 G4bool accurateProjectile; 177 const G4int theMaxProjMassINCL; 178 G4double cascadeMinEnergyPerNucleon; 179 G4double conservationTolerance; 180 181 G4INCLXXInterfaceMessenger *theINCLXXInterfaceMessenger; 182 183 G4INCL::INCL *theINCLModel; 184 185 G4INCLXXVInterfaceTally *theTally; 186 187 /// \brief Static warning counter 188 G4int nWarnings; 189 190 /// \brief Maximum number of warnings 191 const G4int maxWarnings; 192 193 std::string versionName; 194 }; 195 196 #endif // G4INCLXXINTERFACESTORE_HH_ 197