PhysicsList.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 /// \file PhysicsList.h
3 /// \brief Create the physics lists to be used by Geant4.
4 ///
5 ////////////////////////////////////////////////////////////////////////
6 ///
7 /// Without a physics list, Geant4 won't do anything. G4 comes with a
8 /// number of pre-constructed lists, and for now I plan to use
9 /// "QGSP_BERT". It has the following properties:
10 ///
11 /// - Standard EM physics processes.
12 /// - Quark-gluon string model for high energies (> 20GeV)
13 /// - Low Energy Parameterized (LEP) for medium energies (10<E<20GeV)
14 /// - Gertini-style cascade for low energies (< 10GeV)
15 /// - LEP, HEP for all anti-baryons (LEP,HEP = low/high energy parameterized, from GHEISHA)
16 /// - Gamma-nuclear model added for E<3.5 GeV
17 /// (comments from "Guided Tour of Geant4 Physics List II",
18 /// talk given at JPL by Dennis Wright)
19 ///
20 /// IMPORTANT: For now, I'm just copying this physics list from the
21 /// work I did for NuSOnG, which in turn I copied from ATLAS. More
22 /// thought is needed for the physics list for MicroBooNE.
23 ///
24 /// If you decide to replace QGSP_BERT with another of G4's
25 /// pre-supplied physics lists, you can just do a global replace on
26 /// that name in this header; nothing else need change (except the
27 /// comments, of course!).
28 ///
29 /// Things become more complex when you're using parallel geometries.
30 /// The physics processes have to be duplicated in the parallel world.
31 /// There's a G4 facility for doing this, but it's not part of the
32 /// pre-supplied physics lists.
33 ///
34 /// Hence this class. It takes the physics from QGSP_BERT, but it
35 /// extends one of the methods to include recognition of physics
36 /// processes in the parallel world.
37 
38 #ifndef GARG4PhysicsList_h
39 #define GARG4PhysicsList_h
40 
41 #include "Geant4/G4VUserPhysicsList.hh"
42 #include "Geant4/G4VModularPhysicsList.hh"
43 #include "Geant4/G4VPhysicsConstructor.hh"
44 #include "Geant4/G4String.hh"
45 #include "Geant4/globals.hh"
46 #include "Geant4/QGSP_BIC.hh"
48 
49 namespace gar {
50  namespace garg4 {
51 
52  // Under normal circumstances, there is no need to inherit a class
53  // from G4VModularPhysicsList. It's necessary here because we have
54  // to modify one of its routines.
55  class ModularPhysicsList : public G4VModularPhysicsList
56  {
57  public:
58  // Constructor.
59  explicit ModularPhysicsList();
60  virtual ~ModularPhysicsList();
61 
62  // This is the one method we're overridding to include the code
63  // for the parallel geometry.
64  virtual void ConstructProcess();
65 
66  // Non-virtual methods in G4VModularPhysicsList. Just call the
67  // method with the same name in G4VModularPhysicsList.
68  void RegisterPhysics(G4VPhysicsConstructor* g)
69  {
70  G4VModularPhysicsList::RegisterPhysics(g);
71  }
72  const G4VPhysicsConstructor* GetPhysics(G4int index) const
73  {
74  return G4VModularPhysicsList::GetPhysics(index);
75  }
76  const G4VPhysicsConstructor* GetPhysics(const G4String& name) const
77  {
78  return G4VModularPhysicsList::GetPhysics(name);
79  }
80 
81  };
82 
83  /// This typedef is what defines the name "garg4::PhysicsList" in
84  /// any class that includes this header. Compare this with the
85  /// contents of $G4INSTALL/include/QGSP_BERT.hh.
87 
88  } // namespace garg4
89 
90 } // namespace gar
91 
92 #endif // GARG4PhysicsList_h
static QCString name
Definition: declinfo.cpp:673
static constexpr double g
Definition: Units.h:144
TConfigurablePhysicsList< ModularPhysicsList > PhysicsList
Definition: PhysicsList.h:86
const G4VPhysicsConstructor * GetPhysics(G4int index) const
Definition: PhysicsList.h:72
void RegisterPhysics(G4VPhysicsConstructor *g)
Definition: PhysicsList.h:68
const G4VPhysicsConstructor * GetPhysics(const G4String &name) const
Definition: PhysicsList.h:76
General GArSoft Utilities.