Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/persistency/mctruth/src/G4PersistencyCenter.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 
 31 #include "G4PersistencyCenter.hh"
 32 #include "G4PersistencyCenterMessenger.hh"
 33 
 34 #include "G4UImanager.hh"
 35 #include "G4PersistencyManager.hh"
 36 #include "G4VHCIOentry.hh"
 37 #include "G4VDCIOentry.hh"
 38 
 39 G4ThreadLocal G4PersistencyCenter* G4PersistencyCenter::f_thePointer = nullptr;
 40 
 41 // --------------------------------------------------------------------
 42 G4PersistencyCenter::G4PersistencyCenter()
 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 
 70   f_theMessenger   = new G4PersistencyCenterMessenger(this);
 71   f_currentManager = new G4PersistencyManager(this, "Default");
 72 }
 73 
 74 // --------------------------------------------------------------------
 75 G4PersistencyCenter::~G4PersistencyCenter()
 76 {
 77   delete f_theMessenger;
 78   delete f_currentManager;
 79 }
 80 
 81 // --------------------------------------------------------------------
 82 G4PersistencyCenter* G4PersistencyCenter::GetPersistencyCenter()
 83 {
 84   if(f_thePointer == nullptr)
 85     f_thePointer = new G4PersistencyCenter;
 86   return f_thePointer;
 87 }
 88 
 89 // --------------------------------------------------------------------
 90 void G4PersistencyCenter::SelectSystem(const G4String& systemName)
 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)
132       f_currentManager->SetVerboseLevel(m_verbose);
133     f_currentSystemName = systemName;
134   }
135 }
136 
137 // --------------------------------------------------------------------
138 void G4PersistencyCenter::SetHepMCObjyReaderFile(const G4String& file)
139 {
140   if(SetReadFile("HepMC", file))
141   {
142     SetRetrieveMode("HepMC", true);
143   }
144 }
145 
146 // --------------------------------------------------------------------
147 G4String G4PersistencyCenter::CurrentHepMCObjyReaderFile()
148 {
149   if(CurrentRetrieveMode("HepMC"))
150   {
151     return CurrentReadFile("HepMC");
152   }
153   else
154   {
155     return "";
156   }
157 }
158 
159 // --------------------------------------------------------------------
160 void G4PersistencyCenter::SetStoreMode(const G4String& objName, StoreMode mode)
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 // --------------------------------------------------------------------
173 void G4PersistencyCenter::SetRetrieveMode(const G4String& objName, G4bool mode)
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 // --------------------------------------------------------------------
186 StoreMode G4PersistencyCenter::CurrentStoreMode(const G4String& objName)
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 // --------------------------------------------------------------------
199 G4bool G4PersistencyCenter::CurrentRetrieveMode(const G4String& objName)
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 // --------------------------------------------------------------------
212 G4bool G4PersistencyCenter::SetWriteFile(const G4String& objName,
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 // --------------------------------------------------------------------
228 G4bool G4PersistencyCenter::SetReadFile(const G4String& objName,
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 // --------------------------------------------------------------------
246 G4String G4PersistencyCenter::CurrentWriteFile(const G4String& objName)
247 {
248   if((*(f_writeFileName.find(objName))).second != "")
249   {
250     return f_writeFileName[objName];
251   }
252   else
253   {
254     return "?????";
255   }
256 }
257 
258 // --------------------------------------------------------------------
259 G4String G4PersistencyCenter::CurrentReadFile(const G4String& objName)
260 {
261   if((*(f_readFileName.find(objName))).second != "")
262   {
263     return f_readFileName[objName];
264   }
265   else
266   {
267     return "?????";
268   }
269 }
270 
271 // --------------------------------------------------------------------
272 G4String G4PersistencyCenter::CurrentObject(const G4String& file)
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 // --------------------------------------------------------------------
288 void G4PersistencyCenter::AddHCIOmanager(const G4String& detName,
289                                          const G4String& colName)
290 {
291   G4HCIOcatalog* ioc = G4HCIOcatalog::GetHCIOcatalog();
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 // --------------------------------------------------------------------
306 G4String G4PersistencyCenter::CurrentHCIOmanager()
307 {
308   G4HCIOcatalog* ioc = G4HCIOcatalog::GetHCIOcatalog();
309   return ioc->CurrentHCIOmanager();
310 }
311 
312 // --------------------------------------------------------------------
313 void G4PersistencyCenter::AddDCIOmanager(const G4String& detName)
314 {
315   G4DCIOcatalog* ioc = G4DCIOcatalog::GetDCIOcatalog();
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 // --------------------------------------------------------------------
331 G4String G4PersistencyCenter::CurrentDCIOmanager()
332 {
333   G4DCIOcatalog* ioc = G4DCIOcatalog::GetDCIOcatalog();
334   return ioc->CurrentDCIOmanager();
335 }
336 
337 // --------------------------------------------------------------------
338 void G4PersistencyCenter::PrintAll()
339 {
340   G4cout << "Persistency Package: " << CurrentSystem() << G4endl;
341   G4cout << G4endl;
342 
343   G4String name, file;
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       }
367       file = CurrentWriteFile(name);
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);
383       if(CurrentRetrieveMode(name))
384       {
385         G4cout << " <on>    ";
386       }
387       else
388       {
389         G4cout << " <off>   ";
390       }
391       file = CurrentReadFile(name);
392       if(file == "")
393         file = "   <N/A>";
394       G4cout << " File: " << CurrentReadFile(name) << G4endl;
395     }
396   }
397   G4cout << G4endl;
398 
399   G4HCIOcatalog* hioc = G4HCIOcatalog::GetHCIOcatalog();
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 
412   G4DCIOcatalog* dioc = G4DCIOcatalog::GetDCIOcatalog();
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 // --------------------------------------------------------------------
427 void G4PersistencyCenter::SetPersistencyManager(G4PersistencyManager* pm,
428                                                 const G4String& name)
429 {
430   f_currentManager    = pm;
431   f_currentSystemName = name;
432 }
433 
434 // --------------------------------------------------------------------
435 G4PersistencyManager*
436 G4PersistencyCenter::GetPersistencyManager(const G4String& nam)
437 {
438   if(f_theCatalog.find(nam) != f_theCatalog.cend())
439     return f_theCatalog[nam];
440   return nullptr;
441 }
442 
443 // --------------------------------------------------------------------
444 void G4PersistencyCenter::RegisterPersistencyManager(G4PersistencyManager* pm)
445 {
446   f_theCatalog[pm->GetName()] = pm;
447 }
448 
449 // --------------------------------------------------------------------
450 void G4PersistencyCenter::DeletePersistencyManager()
451 {
452   if(f_currentManager != nullptr)
453     delete f_currentManager;
454   f_currentManager = nullptr;
455 }
456 
457 // --------------------------------------------------------------------
458 void G4PersistencyCenter::SetVerboseLevel(G4int v)
459 {
460   m_verbose = v;
461   if(f_currentManager != nullptr)
462     f_currentManager->SetVerboseLevel(m_verbose);
463 }
464 
465 // --------------------------------------------------------------------
466 G4String G4PersistencyCenter::PadString(const G4String& name,
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 }
481