Geant4-11
G4PersistencyCenter.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// G4PersistencyCenter implementation
27//
28// Author: Youhei Morita, 10.08.2001
29// --------------------------------------------------------------------
30
33
34#include "G4UImanager.hh"
36#include "G4VHCIOentry.hh"
37#include "G4VDCIOentry.hh"
38
40
41// --------------------------------------------------------------------
43{
44 f_wrObj[0] = "HepMC";
45 f_wrObj[1] = "MCTruth";
46 f_wrObj[2] = "Hits";
47 f_wrObj[3] = "Digits";
48
49 f_rdObj[0] = "Hits";
50 f_rdObj[1] = "HitsBG";
51
52 for(auto itr = f_wrObj.cbegin(); itr != f_wrObj.cend(); ++itr)
53 {
54 f_writeFileName[(*itr).second] = "G4defaultOutput";
55 }
56
57 for(auto itr = f_rdObj.cbegin(); itr != f_rdObj.cend(); ++itr)
58 {
59 f_readFileName[(*itr).second] = "G4defaultInput";
60 }
61
62 f_writeFileMode["HepMC"] = kRecycle;
63 f_writeFileMode["MCTruth"] = kOn;
64 f_writeFileMode["Hits"] = kOn;
65 f_writeFileMode["Digits"] = kOff;
66
67 f_readFileMode["Hits"] = false;
68 f_readFileMode["HitsBG"] = false;
69
71 f_currentManager = new G4PersistencyManager(this, "Default");
72}
73
74// --------------------------------------------------------------------
76{
77 delete f_theMessenger;
78 delete f_currentManager;
79}
80
81// --------------------------------------------------------------------
83{
84 if(f_thePointer == nullptr)
86 return f_thePointer;
87}
88
89// --------------------------------------------------------------------
91{
92 G4int st = 0;
93
94 if(f_currentManager != nullptr)
95 delete f_currentManager;
96
97 G4PersistencyManager* pm = nullptr;
98
99 if(systemName == "ROOT")
100 {
101 G4cout << " G4PersistencyCenter: \"ROOT\" Persistency Package is selected."
102 << G4endl;
103 // G4UImanager *man=G4UImanager::GetUIpointer();
104 // std::string libs="Cint:Core:Tree:Rint:Matrix:Physics:fadsROOT";
105 // st = man->ApplyCommand("/load "+libs);
106 if(st == 0)
107 {
108 pm = GetPersistencyManager("ROOT");
109 }
110 }
111 else if(systemName == "ODBMS")
112 {
113 G4cout << " G4PersistencyCenter: \"ODBMS\" package is selected." << G4endl;
114 // G4UImanager *man=G4UImanager::GetUIpointer();
115 // std::string libs="fadsODBMS";
116 // st = man->ApplyCommand("/load "+libs);
117 if(st == 0)
118 {
119 pm = GetPersistencyManager("ODBMS");
120 }
121 }
122 else
123 {
124 G4cout << " G4PersistencyCenter: Default is selected." << G4endl;
125 pm = new G4PersistencyManager(this, "Default");
126 }
127
128 if(st == 0)
129 {
130 f_currentManager = pm->Create();
131 if(f_currentManager != nullptr)
133 f_currentSystemName = systemName;
134 }
135}
136
137// --------------------------------------------------------------------
139{
140 if(SetReadFile("HepMC", file))
141 {
142 SetRetrieveMode("HepMC", true);
143 }
144}
145
146// --------------------------------------------------------------------
148{
149 if(CurrentRetrieveMode("HepMC"))
150 {
151 return CurrentReadFile("HepMC");
152 }
153 else
154 {
155 return "";
156 }
157}
158
159// --------------------------------------------------------------------
161{
162 if((*(f_writeFileName.find(objName))).second != "")
163 {
164 f_writeFileMode[objName] = mode;
165 }
166 else
167 {
168 G4cerr << "!! unknown object type " << objName << " for output." << G4endl;
169 }
170}
171
172// --------------------------------------------------------------------
174{
175 if((*(f_readFileName.find(objName))).second != "")
176 {
177 f_readFileMode[objName] = mode;
178 }
179 else
180 {
181 G4cerr << "!! unknown object type " << objName << " for input." << G4endl;
182 }
183}
184
185// --------------------------------------------------------------------
187{
188 if((*(f_writeFileName.find(objName))).second != "")
189 {
190 return f_writeFileMode[objName];
191 }
192 else
193 {
194 return kOff;
195 }
196}
197
198// --------------------------------------------------------------------
200{
201 if((*(f_readFileName.find(objName))).second != "")
202 {
203 return f_readFileMode[objName];
204 }
205 else
206 {
207 return false;
208 }
209}
210
211// --------------------------------------------------------------------
213 const G4String& writeFileName)
214{
215 if((*(f_writeFileName.find(objName))).second != "")
216 {
217 f_writeFileName[objName] = writeFileName;
218 }
219 else
220 {
221 G4cerr << "!! unknown object type " << objName << " for output." << G4endl;
222 return false;
223 }
224 return true;
225}
226
227// --------------------------------------------------------------------
229 const G4String& readFileName)
230{
231#ifndef WIN32
232 if(f_ut.FileExists(readFileName))
233 {
234 f_readFileName[objName] = readFileName;
235 }
236 else
237 {
238 G4cerr << "!! File \"" << objName << "\" does not exist." << G4endl;
239 return false;
240 }
241#endif
242 return true;
243}
244
245// --------------------------------------------------------------------
247{
248 if((*(f_writeFileName.find(objName))).second != "")
249 {
250 return f_writeFileName[objName];
251 }
252 else
253 {
254 return "?????";
255 }
256}
257
258// --------------------------------------------------------------------
260{
261 if((*(f_readFileName.find(objName))).second != "")
262 {
263 return f_readFileName[objName];
264 }
265 else
266 {
267 return "?????";
268 }
269}
270
271// --------------------------------------------------------------------
273{
274 for(auto itr = f_readFileName.cbegin(); itr != f_readFileName.cend(); ++itr)
275 {
276 if(file == (*itr).second)
277 return (*itr).first;
278 }
279 for(auto itr = f_writeFileName.cbegin(); itr != f_writeFileName.cend(); ++itr)
280 {
281 if(file == (*itr).second)
282 return (*itr).first;
283 }
284 return "?????";
285}
286
287// --------------------------------------------------------------------
289 const G4String& colName)
290{
292
293 G4VHCIOentry* ioe = ioc->GetEntry(detName);
294 if(ioe != nullptr)
295 {
296 ioe->CreateHCIOmanager(detName, colName);
297 }
298 else
299 {
300 G4cerr << "Error! -- HCIO assignment failed for detector " << detName
301 << ", collection " << colName << G4endl;
302 }
303}
304
305// --------------------------------------------------------------------
307{
309 return ioc->CurrentHCIOmanager();
310}
311
312// --------------------------------------------------------------------
314{
316
317 G4String colName = "";
318 G4VDCIOentry* ioe = ioc->GetEntry(detName);
319 if(ioe != nullptr)
320 {
321 ioe->CreateDCIOmanager(detName, colName);
322 }
323 else
324 {
325 G4cerr << "Error! -- DCIO assignment failed for detector " << detName
326 << ", collection " << colName << G4endl;
327 }
328}
329
330// --------------------------------------------------------------------
332{
334 return ioc->CurrentDCIOmanager();
335}
336
337// --------------------------------------------------------------------
339{
340 G4cout << "Persistency Package: " << CurrentSystem() << G4endl;
341 G4cout << G4endl;
342
344 StoreMode mode;
345
346 G4cout << "Output object types and file names:" << G4endl;
347 for(auto itr = f_wrObj.cbegin(); itr != f_wrObj.cend(); ++itr)
348 {
349 name = (*itr).second;
350 // disabled HepMC and MCTruth for now
351 if(name != "HepMC" && name != "MCTruth")
352 {
353 G4cout << " Object: " << PadString(name, 9);
354 mode = CurrentStoreMode(name);
355 if(mode == kOn)
356 {
357 G4cout << " <on> ";
358 }
359 else if(mode == kOff)
360 {
361 G4cout << " <off> ";
362 }
363 else if(mode == kRecycle)
364 {
365 G4cout << "<recycle>";
366 }
368 if(file == "")
369 file = " <N/A>";
370 G4cout << " File: " << file << G4endl;
371 }
372 }
373 G4cout << G4endl;
374
375 G4cout << "Input object types and file names:" << G4endl;
376 for(auto itr = f_rdObj.cbegin(); itr != f_rdObj.cend(); ++itr)
377 {
378 name = (*itr).second;
379 // disabled HepMC and MCTruth for now
380 if(name != "HepMC" && name != "MCTruth")
381 {
382 G4cout << " Object: " << PadString(name, 9);
384 {
385 G4cout << " <on> ";
386 }
387 else
388 {
389 G4cout << " <off> ";
390 }
392 if(file == "")
393 file = " <N/A>";
394 G4cout << " File: " << CurrentReadFile(name) << G4endl;
395 }
396 }
397 G4cout << G4endl;
398
400 if(hioc != nullptr)
401 {
402 G4cout << "Hit IO Managers:" << G4endl;
403 hioc->PrintEntries();
404 hioc->PrintHCIOmanager();
405 G4cout << G4endl;
406 }
407 else
408 {
409 G4cout << "Hit IO Manager catalog is not registered." << G4endl;
410 }
411
413 if(dioc != nullptr)
414 {
415 G4cout << "Digit IO Managers:" << G4endl;
416 dioc->PrintEntries();
417 dioc->PrintDCIOmanager();
418 G4cout << G4endl;
419 }
420 else
421 {
422 G4cout << "Digit IO Manager catalog is not registered." << G4endl;
423 }
424}
425
426// --------------------------------------------------------------------
428 const G4String& name)
429{
430 f_currentManager = pm;
432}
433
434// --------------------------------------------------------------------
437{
438 if(f_theCatalog.find(nam) != f_theCatalog.cend())
439 return f_theCatalog[nam];
440 return nullptr;
441}
442
443// --------------------------------------------------------------------
445{
446 f_theCatalog[pm->GetName()] = pm;
447}
448
449// --------------------------------------------------------------------
451{
452 if(f_currentManager != nullptr)
453 delete f_currentManager;
454 f_currentManager = nullptr;
455}
456
457// --------------------------------------------------------------------
459{
460 m_verbose = v;
461 if(f_currentManager != nullptr)
463}
464
465// --------------------------------------------------------------------
467 unsigned int width)
468{
469 if(name.length() > width)
470 {
471 return name.substr(0, width - 1) + "#";
472 }
473 else
474 {
475 G4String wname = name;
476 for(unsigned int i = 0; i < width - name.length(); ++i)
477 wname = wname + " ";
478 return wname;
479 }
480}
@ kRecycle
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 PrintDCIOmanager()
G4VDCIOentry * GetEntry(const G4String &name)
G4String CurrentDCIOmanager()
static G4DCIOcatalog * GetDCIOcatalog()
G4bool FileExists(const G4String &file)
void PrintHCIOmanager()
G4VHCIOentry * GetEntry(const G4String &name)
static G4HCIOcatalog * GetHCIOcatalog()
G4String CurrentHCIOmanager()
G4String CurrentObject(const G4String &file)
G4bool SetWriteFile(const G4String &objName, const G4String &writeFileName)
G4bool CurrentRetrieveMode(const G4String &objName)
void SetRetrieveMode(const G4String &objName, G4bool mode)
G4PersistencyCenterMessenger * f_theMessenger
void AddDCIOmanager(const G4String &detName)
static G4PersistencyCenter * GetPersistencyCenter()
G4bool SetReadFile(const G4String &objName, const G4String &readFileName)
static G4ThreadLocal G4PersistencyCenter * f_thePointer
void SetStoreMode(const G4String &objName, StoreMode mode)
void SetPersistencyManager(G4PersistencyManager *pm, const G4String &name)
G4String CurrentReadFile(const G4String &objName)
G4PersistencyManager * GetPersistencyManager(const G4String &nam)
void AddHCIOmanager(const G4String &detName, const G4String &colName)
StoreMode CurrentStoreMode(const G4String &objName)
G4PersistencyManager * f_currentManager
G4String CurrentHepMCObjyReaderFile()
G4String PadString(const G4String &name, unsigned int width)
void RegisterPersistencyManager(G4PersistencyManager *pm)
void SetHepMCObjyReaderFile(const G4String &file)
const G4String & CurrentSystem()
G4String CurrentWriteFile(const G4String &objName)
void SelectSystem(const G4String &systemName)
virtual G4PersistencyManager * Create()
const G4String & GetName()
virtual void CreateDCIOmanager(const G4String &, const G4String &)
Definition: G4VDCIOentry.hh:56
virtual void CreateHCIOmanager(const G4String &, const G4String &)
Definition: G4VHCIOentry.hh:56
const char * name(G4int ptype)
#define G4ThreadLocal
Definition: tls.hh:77