Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4PersistencyManager.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// G4PersistencyManager implementation
27//
28// Author: Youhei Morita, 17.07.2001
29// --------------------------------------------------------------------
30
32
33#include <iomanip>
35
36// --------------------------------------------------------------------
38 const G4String& n)
39 : f_pc(ptc)
40 , nameMgr(n)
41{
43}
44
45// --------------------------------------------------------------------
47{
48}
49
50// --------------------------------------------------------------------
52{
55}
56
57// --------------------------------------------------------------------
59{
60 m_verbose = v;
61 if(m_verbose > 2)
62 {
63 G4cout << "G4PersistencyManager[\"" << nameMgr << "\"," << this
64 << "]: verbose level is set to " << m_verbose << "." << G4endl;
65 }
66 if(EventIO() != nullptr)
68 if(MCTruthIO() != nullptr)
70 if(HitIO() != nullptr)
72 if(DigitIO() != nullptr)
74 if(TransactionManager() != nullptr)
76
77 G4int i;
78
80 if(hcio != nullptr)
81 {
83 for(i = 0; i < (G4int)hcio->NumberOfHCIOmanager(); ++i)
84 {
86 }
87 }
89 if(dcio != nullptr)
90 {
92 for(i = 0; i < (G4int)dcio->NumberOfDCIOmanager(); ++i)
93 {
95 }
96 }
97}
98
99// --------------------------------------------------------------------
101{
102 if(m_verbose > 2)
103 {
104 G4cout << "G4PersistencyManager::Store() is called for event# "
105 << evt->GetEventID() << "." << G4endl;
106 }
107
108 if(TransactionManager() == nullptr)
109 return true;
110
111 G4bool is_store = f_pc->CurrentStoreMode("MCTruth") != kOff ||
112 f_pc->CurrentStoreMode("Hits") != kOff ||
113 f_pc->CurrentStoreMode("Digits") != kOff;
114
115 if(!is_store)
116 return true;
117
118 // Call package dependent Initialize()
119 //
120 if(!f_is_initialized)
121 {
122 f_is_initialized = true;
123 if(m_verbose > 1)
124 {
125 G4cout << "G4PersistencyManager:: Initializing Transaction ... "
126 << G4endl;
127 }
128 Initialize();
129 }
130
131 G4bool st1 = true, st2 = true;
132
133 // Start event IO transaction
134 //
135 if(TransactionManager()->StartUpdate())
136 {
137 if(m_verbose > 2)
138 {
139 G4cout << "G4PersistencyManager: Update transaction started for event#"
140 << evt->GetEventID() << "." << G4endl;
141 }
142 }
143 else
144 {
145 G4cerr << "TransactionManager::Store(G4Event) - StartUpdate() failed."
146 << G4endl;
147 return false;
148 }
149
150 G4String file;
151 G4String obj;
152
153 G4bool stmct = true, st3 = true;
154
155 // Store MCTruth event
156 //
157 obj = "MCTruth";
158 G4MCTEvent* mctevt = nullptr;
159 if(f_pc->CurrentStoreMode(obj) == kOn)
160 {
161 // Note: This part of code will not be activated until a method
162 // to obtain the current pointer of G4MCTEvent* become available.
163
164 // if ( (mctevt = f_MCTman->GetCurrentEvent()) != 0 ) {
165 if(mctevt != nullptr)
166 {
167 file = f_pc->CurrentWriteFile(obj);
168 if(TransactionManager()->SelectWriteFile(obj, file))
169 {
170 stmct = MCTruthIO()->Store(mctevt);
171 if(stmct && m_verbose > 1)
172 {
173 G4cout << " -- File : " << file << " -- Event# " << evt->GetEventID()
174 << " -- G4MCTEvent Stored." << G4endl;
175 }
176 }
177 else
178 {
179 stmct = false;
180 }
181 } // end of if ( mctevt != nullptr )
182 }
183
184 // Store hits collection
185 //
186 obj = "Hits";
187 if(f_pc->CurrentStoreMode(obj) == kOn)
188 {
189 if(G4HCofThisEvent* hc = evt->GetHCofThisEvent())
190 {
191 file = f_pc->CurrentWriteFile(obj);
192 if(TransactionManager()->SelectWriteFile(obj, file))
193 {
194 st1 = HitIO()->Store(hc);
195 if(st1 && m_verbose > 1)
196 {
197 G4cout << " -- File : " << file << " -- Event# " << evt->GetEventID()
198 << " -- Hit Collections Stored." << G4endl;
199 }
200 }
201 else
202 {
203 st1 = false;
204 }
205 }
206 }
207
208 // Store digits collection
209 //
210 obj = "Digits";
211 if(f_pc->CurrentStoreMode(obj) == kOn)
212 {
213 if(G4DCofThisEvent* dc = evt->GetDCofThisEvent())
214 {
215 file = f_pc->CurrentWriteFile(obj);
216 if(TransactionManager()->SelectWriteFile(obj, file))
217 {
218 st2 = DigitIO()->Store(dc);
219 if(st2 && m_verbose > 1)
220 {
221 G4cout << " -- File : " << file << " -- Event# " << evt->GetEventID()
222 << " -- Digit Collections Stored." << G4endl;
223 }
224 }
225 else
226 {
227 st2 = false;
228 }
229 }
230 }
231
232 // Store this G4EVENT
233 //
234 if(mctevt != 0 || evt != 0)
235 {
236 obj = "Hits";
237 file = f_pc->CurrentWriteFile(obj);
238 if(TransactionManager()->SelectWriteFile(obj, file))
239 {
240 st3 = EventIO()->Store(evt);
241 if(st3 && m_verbose > 1)
242 {
243 G4cout << " -- File name: " << f_pc->CurrentWriteFile("Hits")
244 << " -- Event# " << evt->GetEventID()
245 << " -- G4Pevent is Stored." << G4endl;
246 }
247 }
248 else
249 {
250 st3 = false;
251 }
252 }
253
254 G4bool st = stmct && st1 && st2 && st3;
255
256 if(st)
257 {
259 if(m_verbose > 0)
260 G4cout << "G4PersistencyManager: event# " << evt->GetEventID()
261 << " is stored." << G4endl;
262 }
263 else
264 {
265 G4cerr << "G4PersistencyManager::Store(G4Event) - Transaction aborted."
266 << G4endl;
268 }
269
270 return st;
271}
272
273// --------------------------------------------------------------------
275{
276 if(m_verbose > 2)
277 {
278 G4cout << "G4PersistencyManager::Retrieve(G4Event*&) is called." << G4endl;
279 }
280
281 if(TransactionManager() == nullptr)
282 return true;
283
284 if(f_pc->CurrentRetrieveMode("MCTruth") == false &&
285 f_pc->CurrentRetrieveMode("Hits") == false &&
286 f_pc->CurrentRetrieveMode("Digits") == false)
287 {
288 return true;
289 }
290
291 // Call package dependent Initialize()
292 //
293 if(!f_is_initialized)
294 {
295 f_is_initialized = true;
296 if(m_verbose > 1)
297 {
298 G4cout << "G4PersistencyManager:: Initializing Transaction ... "
299 << G4endl;
300 }
301 Initialize();
302 }
303
304 // Start event IO transaction
305 //
306 if(TransactionManager()->StartRead())
307 {
308 if(m_verbose > 2)
309 {
310 G4cout << "G4PersistencyManager: Read transaction started." << G4endl;
311 }
312 }
313 else
314 {
315 G4cerr << "TransactionManager::Retrieve(G4Event) - StartRead() failed."
316 << G4endl;
317 return false;
318 }
319
320 G4bool st = false;
321 G4String file;
322
323 // Retrieve a G4EVENT
324 //
325 G4String obj = "Hits";
326 if(f_pc->CurrentRetrieveMode(obj) == true)
327 {
328 file = f_pc->CurrentReadFile(obj);
329 if(TransactionManager()->SelectReadFile(obj, file))
330 {
331 st = EventIO()->Retrieve(evt);
332 if(st && m_verbose > 1)
333 {
334 G4cout << " -- File : " << file << " -- Event# " << evt->GetEventID()
335 << " -- G4Event is Retrieved." << G4endl;
336 }
337 }
338 else
339 {
340 st = false;
341 }
342 }
343
344 if(st)
345 {
347 }
348 else
349 {
350 G4cerr << "G4PersistencyManager::Retrieve() - Transaction aborted."
351 << G4endl;
353 }
354
355 return st;
356}
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
void SetVerboseLevel(int v)
static G4DCIOcatalog * GetDCIOcatalog()
G4VPDigitsCollectionIO * GetDCIOmanager(const G4String &name)
std::size_t NumberOfDCIOmanager()
G4HCofThisEvent * GetHCofThisEvent() const
Definition: G4Event.hh:156
G4DCofThisEvent * GetDCofThisEvent() const
Definition: G4Event.hh:158
G4int GetEventID() const
Definition: G4Event.hh:118
G4VPHitsCollectionIO * GetHCIOmanager(const G4String &name)
void SetVerboseLevel(G4int v)
static G4HCIOcatalog * GetHCIOcatalog()
std::size_t NumberOfHCIOmanager()
G4bool CurrentRetrieveMode(const G4String &objName)
static G4PersistencyCenter * GetPersistencyCenter()
G4String CurrentReadFile(const G4String &objName)
G4PersistencyManager * CurrentPersistencyManager()
StoreMode CurrentStoreMode(const G4String &objName)
G4String CurrentWriteFile(const G4String &objName)
G4PersistencyCenter * f_pc
virtual G4VPEventIO * EventIO()
G4PersistencyManager(G4PersistencyCenter *pc, const G4String &n)
G4bool Retrieve(G4Event *&evt)
virtual G4VMCTruthIO * MCTruthIO()
static G4PersistencyManager * GetPersistencyManager()
virtual G4VPHitIO * HitIO()
virtual G4VPDigitIO * DigitIO()
G4bool Store(const G4Event *evt)
virtual G4VTransactionManager * TransactionManager()
void SetVerboseLevel(G4int v)
Definition: G4VMCTruthIO.hh:59
virtual G4bool Store(G4MCTEvent *)=0
virtual G4bool Store(const G4DCofThisEvent *)=0
void SetVerboseLevel(G4int v)
Definition: G4VPDigitIO.cc:42
void SetVerboseLevel(G4int v)
Definition: G4VPEventIO.hh:50
virtual G4bool Store(const G4Event *anEvent)=0
virtual G4bool Retrieve(G4Pevent *&anEvent)=0
void SetVerboseLevel(G4int v)
Definition: G4VPHitIO.cc:42
virtual G4bool Store(const G4HCofThisEvent *)=0
virtual void Abort()=0
virtual void Commit()=0