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 27 // Author: Ivana Hrivnacova, 15/09/2020 (ivana@ipno.in2p3.fr) 28 29 #include "G4AnalysisUtilities.hh" 30 31 #include "tools/wroot/to" 32 #include "tools/wroot/file" 33 #include "toolx/zlib" 34 35 //_____________________________________________________________________________ 36 template <typename HT> 37 G4bool G4RootHnFileManager<HT>::Write( 38 tools::wroot::directory* directory, HT* ht, const G4String& htName) 39 { 40 // write histogram 41 return to(*directory, *ht, htName); 42 } 43 44 //_____________________________________________________________________________ 45 template <typename HT> 46 G4bool G4RootHnFileManager<HT>::WriteExtra( 47 HT* ht, const G4String& htName, const G4String& fileName) 48 { 49 auto result = true; 50 51 // create a new file 52 auto rfile = new tools::wroot::file(G4cout, fileName); 53 54 // return if creating file failed 55 if (rfile == nullptr) return false; 56 57 // add compression 58 rfile->add_ziper('Z', toolx::compress_buffer); 59 rfile->set_compression(fFileManager->GetCompressionLevel()); 60 61 // no directory supported in this mode 62 auto hdirectory = &(rfile->dir()); 63 if (hdirectory == nullptr) return false; 64 65 // write histo 66 result &= Write(hdirectory, ht, htName); 67 68 // write file 69 unsigned int n; 70 result &= rfile->write(n); 71 if ( ! result) { 72 G4Analysis::Warn( 73 "Saving " + G4Analysis::GetHnType<HT>() + " " + htName + " failed", 74 fkClass, "WriteExtra"); 75 return false; 76 } 77 78 // close file 79 rfile->close(); 80 return true; 81 } 82 83 //_____________________________________________________________________________ 84 template <typename HT> 85 G4bool G4RootHnFileManager<HT>::Write( 86 HT* ht, const G4String& htName, G4String& fileName) 87 { 88 if ( fileName.empty()) { 89 // should not happen 90 G4cerr << "!!! Root file name not defined." << G4endl; 91 G4cerr << "!!! Write " << htName << " failed." << G4endl; 92 return false; 93 } 94 95 auto hdirectory = std::get<1>(*fFileManager->GetTFile(fileName)); 96 if ( hdirectory == nullptr ) { 97 G4Analysis::Warn( 98 "Failed to get Root file " + fileName + " histo directory.", 99 fkClass, "Write"); 100 return false; 101 } 102 103 auto result = Write(hdirectory, ht, htName); 104 fFileManager->LockDirectoryNames(); 105 return result; 106 } 107