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 "G4XmlFileManager.hh" 30 #include "G4XmlHnFileManager.hh" 31 #include "G4AnalysisManagerState.hh" 32 #include "G4AnalysisUtilities.hh" 33 34 #include "tools/waxml/begend" 35 36 using namespace G4Analysis; 37 using namespace tools; 38 39 //____________________________________________ 40 G4XmlFileManager::G4XmlFileManager(const G4Ana 41 : G4VTFileManager<std::ofstream>(state) 42 { 43 // Create helpers defined in the base class 44 fH1FileManager = std::make_shared<G4XmlHnFil 45 fH2FileManager = std::make_shared<G4XmlHnFil 46 fH3FileManager = std::make_shared<G4XmlHnFil 47 fP1FileManager = std::make_shared<G4XmlHnFil 48 fP2FileManager = std::make_shared<G4XmlHnFil 49 } 50 51 // 52 // private methods 53 // 54 55 //____________________________________________ 56 G4String G4XmlFileManager::GetNtupleFileName(X 57 { 58 // get ntuple file name 59 auto ntupleFileName = ntupleDescription->Get 60 if (ntupleFileName.size() != 0u) { 61 // update filename per object per thread 62 ntupleFileName = 63 GetTnFileName(ntupleFileName, GetFileTyp 64 } 65 else { 66 // compose ntuple file name from the defau 67 ntupleFileName = GetNtupleFileName( 68 ntupleDescription->GetNtupleBooking().na 69 } 70 71 return ntupleFileName; 72 } 73 74 // 75 // protected methods 76 // 77 78 //____________________________________________ 79 std::shared_ptr<std::ofstream> G4XmlFileManage 80 { 81 std::shared_ptr<std::ofstream> file = std::m 82 if ( file->fail() ) { 83 Warn(G4String("Cannot create file ") + fil 84 return nullptr; 85 } 86 87 waxml::begin(*file); 88 return file; 89 } 90 91 //____________________________________________ 92 G4bool G4XmlFileManager::WriteFileImpl(std::sh 93 { 94 // Nothing to be done here 95 return true; 96 } 97 98 //____________________________________________ 99 G4bool G4XmlFileManager::CloseFileImpl(std::sh 100 { 101 if ( ! file ) return false; 102 103 // close file 104 waxml::end(*file); 105 file->close(); 106 107 return true; 108 } 109 110 // 111 // public methods 112 // 113 114 //____________________________________________ 115 G4bool G4XmlFileManager::OpenFile(const G4Stri 116 { 117 // Keep and locks file name 118 fFileName = fileName; 119 auto name = GetFullFileName(fFileName); 120 121 if ( fFile ) { 122 Warn(G4String("File ") + fileName + " alre 123 fFile.reset(); 124 } 125 126 // Create histograms file (on master) 127 if ( fState.GetIsMaster() ) { 128 // Create file (and save in in the file ma 129 fFile = CreateTFile(name); 130 if ( ! fFile) { 131 Warn(G4String("Failed to create file") + 132 return false; 133 } 134 } 135 136 fIsOpenFile = true; 137 138 return true; 139 } 140 141 //____________________________________________ 142 G4bool G4XmlFileManager::CreateNtupleFile( 143 XmlNtupleDescription* ntupleDescription) 144 { 145 // Get ntuple file name per object (if defin 146 auto ntupleFileName = GetNtupleFileName(ntup 147 148 // Create ntuple file name if it does not ye 149 auto ntupleFile = GetTFile(ntupleFileName, f 150 if ( ntupleFile == nullptr) { 151 ntupleFile = CreateTFile(ntupleFileName); 152 } 153 154 ntupleDescription->SetFile(std::move(ntupleF 155 156 return (ntupleDescription->GetFile() != null 157 } 158 159 //____________________________________________ 160 G4bool G4XmlFileManager::CloseNtupleFile( 161 XmlNtupleDescription* ntupleDescription) 162 { 163 // Notify not empty file 164 auto ntupleFileName = GetNtupleFileName(ntup 165 auto result = SetIsEmpty(ntupleFileName, ! n 166 167 // Ntuple files are registered in file manag 168 // they will be closed with CloseFiles() cal 169 ntupleDescription->GetFile().reset(); 170 171 return result; 172 } 173