Geant4 Cross Reference |
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 27 // 28 // Class Description: 29 // 30 // Manager base class to handle event store and retrieve operation. 31 // Actual persistency implementation should be handled with derived classes. 32 // 33 // Each persistency package should implement derived classes of 34 // G4VHepMCIO, G4VMCTruthIO, G4VPHitIO, G4VPDigitIO, G4VPEventIO. 35 // Concreate G4PersistencyManager should implement the methods 36 // HepMCIO(), MCTruthIO(), HitIO(), DigitIO() and EventIO() to 37 // return the pointers of the above classes. 38 // G4PersistencyManager handles the sequence of the storing and 39 // retrieving of the persistent object of each type, along with 40 // the transaction handling. 41 // 42 // Retrieving a HepMC event: 43 // 44 // G4PersistencyManager::Retrieve( HepMC::GenEvent*& ) 45 // | 46 // | ... StartRead() ... 47 // | 48 // | ... Commit() ... 49 // V 50 // 51 // Storing a Geant4 event: 52 // 53 // G4PersistencyManager::Store( G4Pevent* ) 54 // | 55 // | ... StartUpdate() ... 56 // | 57 // | ... MCTruthIO()->Store( MCTruth event ) ... 58 // | 59 // | ... HitIO()->Store( hit_collection_of_event ) ... 60 // | 61 // | ... DigitIO()->Store( digit_collection_of_event ) ... 62 // | 63 // | ... EventIO()->Store( event with hits and digits ) ... 64 // | 65 // | ... Commit() ... 66 // V 67 // 68 // Retrieving a Geant4 event: 69 // 70 // G4PersistencyManager::Retrieve( event ) 71 // | 72 // | ... StartRead() ... 73 // | 74 // | ... EventIO()->Retrieve( event ) ... 75 // | 76 // | ... Commit() ... 77 // V 78 // 79 // Hit collection and digit collection of each detector component 80 // should be handled by detector specific I/O manager, which 81 // should be registered to the G4PersistencyCenter with 82 // AddHCIOmanager() and AddDCIOmanager(). Usually this is done 83 // through a command 84 // 85 // /Persistency/Store/Using/HitIO <detector_io_manager_name> 86 // 87 // which is handled by G4PersistencyCenterMessenger. 88 // 89 // A static template declaration of G4HCIOentryT<class> must be 90 // implementated for each I/O manager. 91 92 // Author: Youhei Morita, 17.07.2001 93 // -------------------------------------------------------------------- 94 #ifndef G4PERSISTENCYMANAGER_HH 95 #define G4PERSISTENCYMANAGER_HH 1 96 97 #include "G4Event.hh" 98 99 #include "G4VMCTruthIO.hh" 100 #include "G4HCIOcatalog.hh" 101 #include "G4DCIOcatalog.hh" 102 #include "G4VPEventIO.hh" 103 #include "G4VPHitIO.hh" 104 #include "G4VPDigitIO.hh" 105 #include "G4VTransactionManager.hh" 106 #include "G4VPersistencyManager.hh" 107 108 class G4PersistencyCenter; 109 110 class G4PersistencyManager : public G4VPersistencyManager 111 { 112 friend class G4PersistencyCenter; 113 114 public: 115 116 G4PersistencyManager(G4PersistencyCenter* pc, const G4String& n); 117 // Constructor 118 119 virtual ~G4PersistencyManager(); 120 // Destructor 121 122 virtual G4PersistencyManager* Create() { return nullptr; } 123 // Create a new persistency manager. 124 // To be used by G4PersistencyManagerT<> 125 126 const G4String& GetName() { return nameMgr; } 127 // Get the name of persistency manager 128 129 virtual G4VPEventIO* EventIO() { return nullptr; } 130 // Returns the current event I/O handling manager 131 // Each derived class should return the pointer of actual manager 132 133 virtual G4VPHitIO* HitIO() { return nullptr; } 134 // Returns the current hit I/O handling manager 135 // Each derived class should return the pointer of actual manager 136 137 virtual G4VPDigitIO* DigitIO() { return nullptr; } 138 // Returns the current digit I/O handling manager 139 // Each derived class should return the pointer of actual manager 140 141 virtual G4VMCTruthIO* MCTruthIO() { return nullptr; } 142 // Returns the current MCTruth I/O handling manager 143 // Each derived class should return the pointer of actual manager 144 145 virtual G4VTransactionManager* TransactionManager() { return nullptr; } 146 // Returns the current transaction manager 147 // Each derived class should return the pointer of actual manager 148 149 virtual void Initialize() {} 150 // Initialize the persistency package. 151 // Each derived class should implement the acutal initialization sequence 152 153 void SetVerboseLevel(G4int v); 154 // Set verbose level 155 156 G4bool Store(const G4Event* evt); 157 // Store the G4Event and its associated objects 158 159 G4bool Retrieve(G4Event*& evt); 160 // Retrieve the G4Event and its associated objects 161 162 G4bool Store(const G4Run*) { return false; } 163 // Not used 164 165 G4bool Retrieve(G4Run*&) { return false; } 166 // Not used 167 168 G4bool Store(const G4VPhysicalVolume*) { return false; } 169 // Not used 170 171 G4bool Retrieve(G4VPhysicalVolume*&) { return false; } 172 // Not used 173 174 protected: 175 176 static G4PersistencyManager* GetPersistencyManager(); 177 // Get the instance of persistency manager 178 179 protected: 180 181 G4PersistencyCenter* f_pc = nullptr; 182 G4int m_verbose = 0; 183 184 private: 185 186 G4String nameMgr; 187 G4bool f_is_initialized = false; 188 }; 189 190 #endif 191