remage
Simulation framework for HPGe-based experiments
 
Loading...
Searching...
No Matches
RMGMasterGenerator.hh
1// Copyright (C) 2022 Luigi Pertoldi <https://orcid.org/0000-0002-0467-2571>
2//
3// This program is free software: you can redistribute it and/or modify it under
4// the terms of the GNU Lesser General Public License as published by the Free
5// Software Foundation, either version 3 of the License, or (at your option) any
6// later version.
7//
8// This program is distributed in the hope that it will be useful, but WITHOUT
9// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11// details.
12//
13// You should have received a copy of the GNU Lesser General Public License
14// along with this program. If not, see <https://www.gnu.org/licenses/>.
15
16#ifndef _RMG_MASTER_GENERATOR_HH_
17#define _RMG_MASTER_GENERATOR_HH_
18
19#include <memory>
20
21#include "G4VUserPrimaryGeneratorAction.hh"
22
23#include "RMGVGenerator.hh"
24#include "RMGVVertexGenerator.hh"
25
26class G4Event;
28class RMGMasterGenerator : public G4VUserPrimaryGeneratorAction {
29
30 public:
31
41
56
58 ~RMGMasterGenerator() = default;
59
61 RMGMasterGenerator& operator=(RMGMasterGenerator const&) = delete;
63 RMGMasterGenerator& operator=(RMGMasterGenerator&&) = delete;
64
74 void GeneratePrimaries(G4Event* event) override;
75
81 RMGVGenerator* GetGenerator() { return fGeneratorObj.get(); }
87 RMGVVertexGenerator* GetVertexGenerator() { return fVertexGeneratorObj.get(); }
94 [[nodiscard]] Confinement GetConfinement() const { return fConfinement; }
95
112 void SetConfinementString(std::string code);
131 void SetGenerator(Generator gen);
140 void SetGeneratorString(std::string gen);
141
142 private:
143
145 std::unique_ptr<RMGVVertexGenerator> fVertexGeneratorObj;
146
148 std::unique_ptr<RMGVGenerator> fGeneratorObj;
149
150 std::unique_ptr<G4GenericMessenger> fMessenger;
151 void DefineCommands();
152};
153
154#endif
155
156// vim: tabstop=2 shiftwidth=2 expandtab
Definition RMGMasterGenerator.hh:28
void GeneratePrimaries(G4Event *event) override
Generate primary vertices for the event.
Definition RMGMasterGenerator.cc:45
Generator
Enumeration for selecting the primary generator mode.
Definition RMGMasterGenerator.hh:45
@ kG4gun
The standard Geant4 particle gun.
Definition RMGMasterGenerator.hh:46
@ kGeomBench
The benchmark generator.
Definition RMGMasterGenerator.hh:53
@ kUserDefined
A user-specified custom generator.
Definition RMGMasterGenerator.hh:52
@ kCosmicMuons
A simple cosmic muon generator.
Definition RMGMasterGenerator.hh:50
@ kUndefined
Undefined generator mode.
Definition RMGMasterGenerator.hh:54
@ kGPS
The Geant4 General Particle Source.
Definition RMGMasterGenerator.hh:47
@ kMUSUNCosmicMuons
The MUSUN-based cosmic muon generator.
Definition RMGMasterGenerator.hh:51
@ kBxDecay0
The BxDecay0 generator for double beta decay processes.
Definition RMGMasterGenerator.hh:48
void SetConfinement(Confinement code)
Set the primary vertex confinement strategy.
Definition RMGMasterGenerator.cc:78
void SetGenerator(Generator gen)
Select one of the built-in primary generator modes.
Definition RMGMasterGenerator.cc:108
RMGVGenerator * GetGenerator()
Get the current primary generator.
Definition RMGMasterGenerator.hh:81
Confinement GetConfinement() const
Retrieve the current vertex confinement strategy.
Definition RMGMasterGenerator.hh:94
void SetGeneratorString(std::string gen)
Set the primary generator mode using a string.
Definition RMGMasterGenerator.cc:156
RMGVVertexGenerator * GetVertexGenerator()
Get the current vertex generator.
Definition RMGMasterGenerator.hh:87
Confinement
Enumeration for specifying the primary vertex confinement strategy.
Definition RMGMasterGenerator.hh:35
@ kUnConfined
No confinement is applied here; the generator has the duty to sample a primary vertex.
Definition RMGMasterGenerator.hh:36
@ kFromFile
The primary vertex is read from an external file.
Definition RMGMasterGenerator.hh:38
@ kVolume
The primary vertex is confined to a specific detector volume.
Definition RMGMasterGenerator.hh:37
@ kFromPoint
The primary vertex is always at a fixed position.
Definition RMGMasterGenerator.hh:39
void SetConfinementString(std::string code)
Set the vertex confinement strategy using a string.
Definition RMGMasterGenerator.cc:150
void SetUserGenerator(RMGVGenerator *gen)
Set a user-defined primary generator.
Definition RMGMasterGenerator.cc:162
Abstract base class for primary generators.
Definition RMGVGenerator.hh:33
Abstract base class for vertex generators.
Definition RMGVVertexGenerator.hh:40