Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 27 // Author: Ivana Hrivnacova, 18/06/2013 (ivan 28 29 #include "G4RootNtupleManager.hh" 30 #include "G4RootMainNtupleManager.hh" 31 #include "G4RootFileManager.hh" 32 #include "G4AnalysisManagerState.hh" 33 #include "G4AnalysisUtilities.hh" 34 35 #include "tools/wroot/file" 36 37 using namespace G4Analysis; 38 using std::to_string; 39 40 //____________________________________________ 41 G4RootNtupleManager::G4RootNtupleManager(const 42 const std::shared_ptr<G 43 G4int nofMainManagers, 44 G4bool rowWise, G4bool 45 : G4TNtupleManager<tools::wroot::ntuple, G4Ro 46 fRowWise(rowWise), 47 fRowMode(rowMode) 48 { 49 for ( G4int i=0; i<nofMainManagers; ++i) { 50 auto fileNumber = i; 51 if ( (i == 0) && (nofFiles == 0) ) { 52 // the main ntuple file will be merged i 53 fileNumber = -1; 54 } 55 fMainNtupleManagers.push_back( 56 std::make_shared<G4RootMainNtupleManager 57 this, bookingManger, rowWise, fileNumb 58 } 59 } 60 61 // 62 // private methods 63 // 64 65 //____________________________________________ 66 void G4RootNtupleManager::CreateTNtupleFromBoo 67 RootNtupleDescription* ntupleDescription) 68 { 69 if (fMainNtupleManagers.size() == 0u) { 70 // No merging 71 if (ntupleDescription->GetNtuple() != null 72 Warn("Cannot create ntuple. Ntuple alrea 73 fkClass, "CreateTNtupleFromBooking"); 74 return; 75 } 76 77 // Create ntuple file from ntuple descript 78 auto ntupleFile = fFileManager->CreateNtup 79 if ( ! ntupleFile ) { 80 Warn("Cannot create ntuple. Ntuple file 81 fkClass, "CreateTNtupleFromBooking"); 82 return; 83 } 84 85 auto directory = std::get<2>(*ntupleFile); 86 ntupleDescription->SetNtuple( 87 new tools::wroot::ntuple( 88 *directory, ntupleDescription->Get 89 90 auto basketSize = fFileManager->GetBasketS 91 ntupleDescription->GetNtuple()->set_basket 92 ntupleDescription->SetIsNtupleOwner(false) 93 // ntuple object is deleted automat 94 } 95 else { 96 // Merging activated 97 for ( const auto& manager : fMainNtupleMan 98 manager->SetFirstId(fFirstId); 99 manager->CreateNtuple(ntupleDescription) 100 } 101 } 102 } 103 104 //____________________________________________ 105 void G4RootNtupleManager::FinishTNtuple( 106 RootNtupleDescription* /*ntupleDescription*/ 107 { 108 // nothing to be done 109 } 110 111 //____________________________________________ 112 G4bool G4RootNtupleManager::Reset() 113 { 114 G4TNtupleManager<tools::wroot::ntuple, G4Roo 115 // this will clear ntuple vector 116 117 auto result = true; 118 119 for ( const auto& manager : fMainNtupleManag 120 result &= manager->Reset(); 121 } 122 123 return result; 124 } 125 126 //____________________________________________ 127 void G4RootNtupleManager::Clear() 128 { 129 G4TNtupleManager<tools::wroot::ntuple, G4Roo 130 // this will clear ntuple vector 131 132 for ( const auto& manager : fMainNtupleManag 133 manager->ClearData(); 134 } 135 } 136 137 //____________________________________________ 138 G4bool G4RootNtupleManager::Delete(G4int id) 139 { 140 auto result = G4TNtupleManager<tools::wroot: 141 142 for ( const auto& manager : fMainNtupleManag 143 result &= manager->Delete(id); 144 } 145 146 return result; 147 } 148 149 //____________________________________________ 150 G4bool G4RootNtupleManager::Merge() 151 { 152 auto result = true; 153 154 for ( const auto& manager : fMainNtupleManag 155 result &= manager->Merge(); 156 } 157 158 return result; 159 } 160 161 //____________________________________________ 162 void G4RootNtupleManager::SetFileManager( 163 const std::shared_ptr<G4RootFileManager>& fi 164 { 165 fFileManager = fileManager; 166 167 for ( const auto& manager : fMainNtupleManag 168 manager->SetFileManager(fileManager); 169 } 170 } 171 172 //____________________________________________ 173 void G4RootNtupleManager::SetNtupleRowWise(G4b 174 { 175 // Set rowWise mode and propagate it to main n 176 177 fRowWise = rowWise; 178 fRowMode = rowMode; 179 180 for (auto& mainNtupleManager : fMainNtupleMa 181 mainNtupleManager->SetRowWise(rowWise); 182 } 183 } 184 185 //____________________________________________ 186 void G4RootNtupleManager::SetNewCycle(G4bool v 187 { 188 G4TNtupleManager<tools::wroot::ntuple, G4Roo 189 190 for ( const auto& manager : fMainNtupleManag 191 manager->SetNewCycle(value); 192 } 193 } 194 195 //____________________________________________ 196 std::shared_ptr<G4RootMainNtupleManager> 197 G4RootNtupleManager::GetMainNtupleManager(G4in 198 { 199 if ( index < 0 || index >= G4int(fMainNtuple 200 Warn("main ntuple manager " + to_string(in 201 fkClass, "GetMainNtupleManager"); 202 return nullptr; 203 } 204 205 return fMainNtupleManagers[index]; 206 } 207 208 //____________________________________________ 209 unsigned int G4RootNtupleManager::GetBasketSiz 210 { 211 if ( ! fFileManager ) { 212 Warn("File manager must be defined first." 213 return 0; 214 } 215 216 return fFileManager->GetBasketSize(); 217 } 218 219 //____________________________________________ 220 unsigned int G4RootNtupleManager::GetBasketEnt 221 { 222 if ( ! fFileManager ) { 223 Warn("File manager must be defined first." 224 return 0; 225 } 226 227 return fFileManager->GetBasketEntries(); 228 } 229