BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
G4Svc.h
Go to the documentation of this file.
1#ifndef G4SIM_G4SVC_H
2#define G4SIM_G4SVC_H
3
4#include "G4Svc/IG4Svc.h"
5#include "GaudiKernel/NTuple.h"
6#include "GaudiKernel/Service.h"
7
8// G4 includes
9#include "G4UImanager.hh"
10
11#ifdef G4VIS_USE
12# include "G4VisManager.hh"
13#endif
14
15#include "RealizationSvc/IRealizationSvc.h"
16#include <string>
17#include <vector>
18
19// Forward declarations
20template <class TYPE> class SvcFactory;
21
22class G4VUserPhysicsList;
23class G4RunManager;
24class G4SvcRunManager;
25class G4VUserActionInitialization;
26
27// ClassName: G4Svc
28// Description: This service provides access to Geant 4
29//
30
31class G4Svc : public extends<Service, IG4Svc> {
32public:
33 G4Svc( const std::string& name, ISvcLocator* svc );
34
35 // Destructor.
36 virtual ~G4Svc();
37
38 virtual StatusCode initialize();
39 virtual StatusCode finalize();
40
41 // Query the interfaces.
42 // virtual StatusCode queryInterface( const InterfaceID& riid, void** ppvInterface );
43
44 G4RunManager* runMgr();
45
46 // Detector init
47 void SetUserInitialization( G4VUserDetectorConstruction* userInit );
48
49 // Physics init
50 void SetUserInitialization( G4VUserPhysicsList* physInit );
51
52 void SetUserInitialization( G4VUserActionInitialization* actionInit );
53
54 // User Action
55 /*void SetUserAction(G4UserRunAction *);
56 void SetUserAction(G4UserEventAction *);
57 void SetUserAction(G4VUserPrimaryGeneratorAction*);
58 void SetUserAction(G4UserStackingAction*);
59 void SetUserAction(G4UserTrackingAction*);
60 void SetUserAction(G4UserSteppingAction*);*/
61
62 // G4Event
63 const G4Event* GetCurrentEvent() const;
64 const G4Run* GetCurrentRun() const;
65
66#ifdef G4VIS_USE
67 G4VisManager* visMgr() { return p_visMgr; }
68#endif
69 G4UImanager* uiMgr();
70 void StartUISession();
71
72 // for vertex parameters
73 double GetBeamPosX() { return m_beamPosX; }
74 double GetBeamPosY() { return m_beamPosY; }
75 double GetBeamPosZ() { return m_beamPosZ; }
76
77 double GetBeamSizeX() { return m_beamSizeX; }
78 double GetBeamSizeY() { return m_beamSizeY; }
79 double GetBeamSizeZ() { return m_beamSizeZ; }
80
81 double GetBeamShiftPx() { return m_beamShiftPx; }
82 double GetBeamShiftPy() { return m_beamShiftPy; }
83 double GetBeamShiftPz() { return m_beamShiftPz; }
84
85 double GetBeamStartTime() { return m_beamStartTime; }
86 double GetBeamDeltaTime() { return m_beamDeltaTime; }
87 double GetNBunch() { return m_nBunch; }
88 double GetBunchTimeSigma() { return m_bunchTimeSigma; }
89
90 double GetBeamTime() { return m_beamTime; }
91 void SetBeamTime( double value ) { m_beamTime = value; }
92 std::string GetMdcNoiseFile() { return m_mdcNoiseFile; }
93
94 double GetBeamAngle() { return m_beamAngle; }
95 bool GetBoostLab() { return m_boostLab; }
96 bool GetSetBeamShift() { return m_setBeamShift; }
97
98 int GetMdcDataInput() { return m_mdcDataInput; }
99 int GetMdcDedxFlag() { return m_mdcDedxFlag; }
100 int GetMdcNewSimOpt() { return m_mdcNewSimOpt; }
101
102 NTuple::Tuple* GetTupleMdc() { return m_tupleMdc; }
103 void SetTupleMdc( NTuple::Tuple* tuple ) { m_tupleMdc = tuple; }
104
105 NTuple::Tuple* GetTupleTof1() { return m_tupleTof1; }
106 void SetTupleTof1( NTuple::Tuple* tuple ) { m_tupleTof1 = tuple; }
107
108 NTuple::Tuple* GetTupleTof2() { return m_tupleTof2; }
109 void SetTupleTof2( NTuple::Tuple* tuple ) { m_tupleTof2 = tuple; }
110
111 NTuple::Tuple* GetTupleTof3() { return m_tupleTof3; }
112 void SetTupleTof3( NTuple::Tuple* tuple ) { m_tupleTof3 = tuple; }
113
114 NTuple::Tuple* GetTupleEmc1() { return m_tupleEmc1; }
115 void SetTupleEmc1( NTuple::Tuple* tuple ) { m_tupleEmc1 = tuple; }
116
117 NTuple::Tuple* GetTupleEmc2() { return m_tupleEmc2; }
118 void SetTupleEmc2( NTuple::Tuple* tuple ) { m_tupleEmc2 = tuple; }
119
120 NTuple::Tuple* GetTupleMuc() { return m_tupleMuc; }
121 void SetTupleMuc( NTuple::Tuple* tuple ) { m_tupleMuc = tuple; }
122
123 bool MdcRootFlag() { return m_mdcRootFlag; }
124 bool TofRootFlag() { return m_tofRootFlag; }
125 bool EmcRootFlag() { return m_emcRootFlag; }
126 bool MucRootFlag() { return m_mucRootFlag; }
127
128 bool TofSaturationFlag() { return m_tofSaturationFlag; } // Tof Q Saturation in bhabha events
129
130 bool EmcLightOutput() { return m_emcLightOutput; }
131 double EmcIncoherentNoise() { return m_emcIncoherentNoise; }
132 double EmcCoherentNoise() { return m_emcCoherentNoise; }
133 double EmcNoiseMean() { return m_emcNoiseMean; }
134 double EmcNoiseSigma() { return m_emcNoiseSigma; }
135 double EmcNoiseThreshold() { return m_emcNoiseThreshold; }
136 int EmcNoiseLevel() { return m_emcNoiseLevel; }
137 int EmcTime() { return m_emcTime; }
138 int EmcElecSaturation() { return m_emcELecSaturation; }
139 int EmcElecSatuDead() { return m_emcELecSatuDead; }
140
141 int MucNoiseMode() { return m_mucNoiseMode; }
142
143 int LogLevel() { return m_logLevel; }
144
145public:
146 void G4Init();
147
148 // Run initialization, termination and single event generation for G4SimAlg
149 void RunInitialize();
150 void RunTerminate();
151 void SimulateEvents( int );
152
153private:
154 // Allow SvcFactory to instantiate the service.
155 friend class SvcFactory<G4Svc>;
156
157 G4SvcRunManager* p_runMgr;
158 G4UImanager* p_uiMgr;
159
160 // std::string m_PhysicsList;
161 // double m_PhysicsCut;
162
163 // Visualization
164 bool m_vis;
165 // std::string m_visType;
166
167 // Initialization macro file
168
169 std::string m_macroName;
170 std::string m_mdcNoiseFile;
171
172#ifdef G4VIS_USE
173 G4VisManager* p_visMgr;
174#endif
175
176 // Save Hits and Tracks in StoreGate
177 // bool m_saveHits;
178 // bool m_saveTracks;
179 int m_logLevel;
180
181 // Verbosity
182 int m_runVerb;
183 int m_eventVerb;
184 int m_trackVerb;
185
186 bool _init;
187
188 bool m_interactiveG4;
189
190 bool m_besGenAction;
191
192 int m_runID;
193
194 int m_mdcDataInput;
195 int m_mdcDedxFlag;
196 int m_mdcNewSimOpt; // (0:Old MdcSim, 1:New) liaoyp -- 2023.10.30
197
198 // vertex parameters
199 double m_beamPosX;
200 double m_beamPosY;
201 double m_beamPosZ;
202
203 double m_beamSizeX;
204 double m_beamSizeY;
205 double m_beamSizeZ;
206
207 double m_beamStartTime;
208 double m_beamDeltaTime;
209 double m_nBunch;
210
211 double m_bunchTimeSigma;
212 double m_beamTime;
213
214 double m_beamShiftPx;
215 double m_beamShiftPy;
216 double m_beamShiftPz;
217
218 bool m_boostLab;
219 bool m_setBeamShift;
220 double m_beamAngle;
221
222 // MC Monitor
223 NTuple::Tuple* m_tupleMdc;
224 bool m_mdcRootFlag;
225
226 NTuple::Tuple* m_tupleTof1;
227 NTuple::Tuple* m_tupleTof2;
228 NTuple::Tuple* m_tupleTof3;
229 bool m_tofRootFlag;
230 bool m_tofSaturationFlag;
231
232 NTuple::Tuple* m_tupleEmc1; // digi level
233 NTuple::Tuple* m_tupleEmc2; // event level
234 bool m_emcRootFlag;
235
236 // Emc Crystal Light Output
237 bool m_emcLightOutput;
238 // Incoherent Noise
239 double m_emcIncoherentNoise;
240 // Coherent Noise
241 double m_emcCoherentNoise;
242 // Noise for fast simulation
243 double m_emcNoiseMean;
244 double m_emcNoiseSigma;
245 // Only energy above noise threshold will be recorded
246 double m_emcNoiseThreshold;
247 // Noise Level:
248 // 0: No noise, 1: Only singal crystals have noise,
249 // 2: Only 5x5 matrix has noise, 3: All noise.
250 int m_emcNoiseLevel;
251 // Time
252 int m_emcTime;
253 // MC electronics saturation of crystal:
254 // 0:using Bhabha calibration constants;
255 // 1:using EmaxData from data;
256 int m_emcELecSaturation;
257
258 // MC Special dead channel of electronics saturation of crystal:
259 // 0:without the simulation Special dead channel in MC ;
260 // 1:with the simulation Special dead channel in MC ;
261 int m_emcELecSatuDead;
262
263 // Muc noise mode
264 int m_mucNoiseMode;
265
266 NTuple::Tuple* m_tupleMuc;
267 bool m_mucRootFlag;
268
269 IRealizationSvc* m_RealizationSvc;
270};
271
272#endif
bool EmcLightOutput()
Definition G4Svc.h:130
bool MdcRootFlag()
Definition G4Svc.h:123
virtual StatusCode initialize()
Definition G4Svc.cpp:145
std::string GetMdcNoiseFile()
Definition G4Svc.h:92
const G4Event * GetCurrentEvent() const
Definition G4Svc.cpp:194
NTuple::Tuple * GetTupleMdc()
Definition G4Svc.h:102
void SetTupleTof3(NTuple::Tuple *tuple)
Definition G4Svc.h:112
void SetTupleMdc(NTuple::Tuple *tuple)
Definition G4Svc.h:103
double GetBeamSizeZ()
Definition G4Svc.h:79
void RunTerminate()
Definition G4Svc.cpp:366
double GetBeamPosX()
Definition G4Svc.h:73
double EmcNoiseSigma()
Definition G4Svc.h:134
double EmcNoiseThreshold()
Definition G4Svc.h:135
double GetBeamPosZ()
Definition G4Svc.h:75
bool EmcRootFlag()
Definition G4Svc.h:125
G4UImanager * uiMgr()
Definition G4Svc.cpp:211
virtual ~G4Svc()
Definition G4Svc.cpp:115
double GetBeamShiftPz()
Definition G4Svc.h:83
void RunInitialize()
Definition G4Svc.cpp:356
G4Svc(const std::string &name, ISvcLocator *svc)
Definition G4Svc.cpp:36
int EmcElecSaturation()
Definition G4Svc.h:138
double EmcNoiseMean()
Definition G4Svc.h:133
bool GetBoostLab()
Definition G4Svc.h:95
void StartUISession()
Definition G4Svc.cpp:278
NTuple::Tuple * GetTupleTof3()
Definition G4Svc.h:111
G4RunManager * runMgr()
Definition G4Svc.cpp:128
int EmcElecSatuDead()
Definition G4Svc.h:139
double EmcIncoherentNoise()
Definition G4Svc.h:131
int MucNoiseMode()
Definition G4Svc.h:141
double GetNBunch()
Definition G4Svc.h:87
double GetBeamAngle()
Definition G4Svc.h:94
double GetBeamShiftPx()
Definition G4Svc.h:81
double GetBeamTime()
Definition G4Svc.h:90
void G4Init()
Definition G4Svc.cpp:291
void SetTupleMuc(NTuple::Tuple *tuple)
Definition G4Svc.h:121
double GetBeamDeltaTime()
Definition G4Svc.h:86
int GetMdcDedxFlag()
Definition G4Svc.h:99
void SetTupleEmc1(NTuple::Tuple *tuple)
Definition G4Svc.h:115
double GetBunchTimeSigma()
Definition G4Svc.h:88
double GetBeamShiftPy()
Definition G4Svc.h:82
void SetTupleEmc2(NTuple::Tuple *tuple)
Definition G4Svc.h:118
double GetBeamStartTime()
Definition G4Svc.h:85
bool GetSetBeamShift()
Definition G4Svc.h:96
bool TofRootFlag()
Definition G4Svc.h:124
double EmcCoherentNoise()
Definition G4Svc.h:132
void SimulateEvents(int)
Definition G4Svc.cpp:368
NTuple::Tuple * GetTupleEmc2()
Definition G4Svc.h:117
int GetMdcDataInput()
Definition G4Svc.h:98
void SetTupleTof2(NTuple::Tuple *tuple)
Definition G4Svc.h:109
void SetBeamTime(double value)
Definition G4Svc.h:91
void SetUserInitialization(G4VUserDetectorConstruction *userInit)
Definition G4Svc.cpp:218
double GetBeamSizeX()
Definition G4Svc.h:77
int LogLevel()
Definition G4Svc.h:143
int GetMdcNewSimOpt()
Definition G4Svc.h:100
NTuple::Tuple * GetTupleTof2()
Definition G4Svc.h:108
int EmcNoiseLevel()
Definition G4Svc.h:136
void SetTupleTof1(NTuple::Tuple *tuple)
Definition G4Svc.h:106
bool MucRootFlag()
Definition G4Svc.h:126
virtual StatusCode finalize()
Definition G4Svc.cpp:169
bool TofSaturationFlag()
Definition G4Svc.h:128
double GetBeamPosY()
Definition G4Svc.h:74
const G4Run * GetCurrentRun() const
Definition G4Svc.cpp:208
double GetBeamSizeY()
Definition G4Svc.h:78
NTuple::Tuple * GetTupleMuc()
Definition G4Svc.h:120
NTuple::Tuple * GetTupleEmc1()
Definition G4Svc.h:114
int EmcTime()
Definition G4Svc.h:137
NTuple::Tuple * GetTupleTof1()
Definition G4Svc.h:105
Forward and external declarations.