Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLINuclearPotential.cc
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// 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
39/** \file G4INCLINuclearPotential.cc
40 * \brief Abstract interface to the nuclear potential.
41 *
42 * NuclearPotential-like classes should provide access to the value of the
43 * potential of a particle in a particular context. For example, an instance of
44 * a NuclearPotential class should be associated to every nucleus.
45 *
46 * \date 31 March 2011
47 * \author Davide Mancusi
48 */
49
55
56namespace G4INCL {
57
58 namespace NuclearPotential {
59
60 const G4double INuclearPotential::vPionDefault = 30.6; // MeV
61 const G4double INuclearPotential::vKPlusDefault = -25.; // MeV (repulsive)
62 const G4double INuclearPotential::vKMinusDefault = 60.; // MeV
63
64 namespace {
65
66 G4ThreadLocal std::map<long,INuclearPotential const *> *nuclearPotentialCache = NULL;
67
68 }
69
70 INuclearPotential const *createPotential(const PotentialType type, const G4int theA, const G4int theZ, const G4bool pionPotential) {
71 if(!nuclearPotentialCache)
72 nuclearPotentialCache = new std::map<long,INuclearPotential const *>;
73
74 const long nuclideID = (pionPotential ? 1 : -1) * (1000*theZ + theA + 1000000*type); // MCNP-style nuclide IDs
75 const std::map<long,INuclearPotential const *>::const_iterator mapEntry = nuclearPotentialCache->find(nuclideID);
76 if(mapEntry == nuclearPotentialCache->end()) {
77 INuclearPotential const *thePotential = NULL;
78 switch(type) {
80 thePotential = new NuclearPotentialEnergyIsospinSmooth(theA, theZ, pionPotential);
81 break;
83 thePotential = new NuclearPotentialEnergyIsospin(theA, theZ, pionPotential);
84 break;
86 thePotential = new NuclearPotentialIsospin(theA, theZ, pionPotential);
87 break;
89 thePotential = new NuclearPotentialConstant(theA, theZ, pionPotential);
90 break;
91 default:
92 INCL_FATAL("Unrecognized potential type at Nucleus creation." << '\n');
93 break;
94 }
95 (*nuclearPotentialCache)[nuclideID] = thePotential;
96 return thePotential;
97 } else {
98 return mapEntry->second;
99 }
100 }
101
102 void clearCache() {
103 if(nuclearPotentialCache) {
104 for(std::map<long,INuclearPotential const *>::const_iterator i = nuclearPotentialCache->begin(), e=nuclearPotentialCache->end(); i!=e; ++i)
105 delete i->second;
106 nuclearPotentialCache->clear();
107 delete nuclearPotentialCache;
108 nuclearPotentialCache = NULL;
109 }
110 }
111
112 } // namespace NuclearPotential
113
114} // namespace G4INCL
115
Abstract interface to the nuclear potential.
#define INCL_FATAL(x)
Isospin- and energy-independent nuclear potential.
Isospin- and energy-dependent nuclear potential.
Isospin- and energy-dependent nuclear potential.
Isospin-dependent nuclear potential.
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void clearCache()
Clear the INuclearPotential cache.
INuclearPotential const * createPotential(const PotentialType type, const G4int theA, const G4int theZ, const G4bool pionPotential)
Create an INuclearPotential object.
@ IsospinEnergySmoothPotential
@ IsospinEnergyPotential
#define G4ThreadLocal
Definition: tls.hh:77