Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 26 27 #include "G4HnInformation.hh" 27 #include "G4HnInformation.hh" 28 28 29 //____________________________________________ 29 //_____________________________________________________________________________ 30 inline G4String G4GenericFileManager::GetDefau 30 inline G4String G4GenericFileManager::GetDefaultFileType() const 31 { 31 { 32 return fDefaultFileType; 32 return fDefaultFileType; 33 } 33 } 34 34 35 //____________________________________________ 35 //_____________________________________________________________________________ 36 template <typename HT> << 36 template <typename T> 37 inline << 37 inline >> 38 G4bool G4GenericFileManager::WriteT(const std::vector<T*>& htVector, >> 39 const std::vector<G4HnInformation*>& hnVector) >> 40 { >> 41 auto finalResult = true; >> 42 >> 43 for ( G4int i=0; i<G4int(htVector.size()); ++i ) { >> 44 auto info = hnVector[i]; >> 45 auto activation = info->GetActivation(); >> 46 // skip writing if activation is enabled and H1 is inactivated >> 47 if ( fState.GetIsActivation() && ( ! activation ) ) continue; >> 48 >> 49 auto name = info->GetName(); >> 50 auto ht = htVector[i]; >> 51 >> 52 auto fileName = info->GetFileName(); >> 53 >> 54 auto fileManager = fDefaultFileManager; >> 55 auto fileKind = "default"; >> 56 if ( fileName == "" ) { >> 57 fileName = fileManager->GetFileName(); >> 58 } else { >> 59 fileManager = GetFileManager(fileName); >> 60 fileKind = "extra"; >> 61 // skip writing if cannot get file manager (wrong file extension) >> 62 if ( ! fileManager ) { >> 63 if ( G4Analysis::GetExtension(fileName) != "hdf5" || fHdf5Warn ) { >> 64 G4ExceptionDescription description; >> 65 description >> 66 << "Cannot get file manager for " << fileKind << " file " << fileName << "." << G4endl >> 67 << "Writing " << G4Analysis::GetHnType<T>() << " " << name >> 68 << " will be skipped."; >> 69 G4Exception("G4GenericFileManager::WriteT", >> 70 "Analysis_W022", JustWarning, description); >> 71 } >> 72 #ifdef G4VERBOSE >> 73 if ( fState.GetVerboseL3() ) { >> 74 G4ExceptionDescription description; >> 75 description << " " << name << " in the " << fileKind << " file " << fileName; >> 76 fState.GetVerboseL3() >> 77 ->Message("write", G4Analysis::GetHnType<T>(), description, false); >> 78 } >> 79 #endif >> 80 continue; >> 81 } >> 82 } >> 83 >> 84 #ifdef G4VERBOSE >> 85 if ( fState.GetVerboseL4() ) { >> 86 G4ExceptionDescription description; >> 87 description << " " << name << " in the " << fileKind << " file " << fileName; >> 88 fState.GetVerboseL3() >> 89 ->Message("write", G4Analysis::GetHnType<T>(), description); >> 90 } >> 91 #endif >> 92 >> 93 auto result = fileManager->GetHnFileManager<T>()->Write(ht, name, fileName); >> 94 if ( ! result ) { >> 95 G4ExceptionDescription description; >> 96 description >> 97 << "Writing " << G4Analysis::GetHnType<T>() << " " << name >> 98 << " to file " << fileName << " failed."; >> 99 G4Exception("G4GenericManager::WriteT()", >> 100 "Analysis_W022", JustWarning, description); >> 101 } >> 102 finalResult = result && finalResult; >> 103 >> 104 // notify that file has a written object >> 105 fileManager->SetIsEmpty(fileName, false); >> 106 >> 107 #ifdef G4VERBOSE >> 108 if ( fState.GetVerboseL3() ) { >> 109 G4ExceptionDescription description; >> 110 description << " " << name << " in the " << fileKind << " file " << fileName; >> 111 fState.GetVerboseL3() >> 112 ->Message("write", G4Analysis::GetHnType<T>(), description, finalResult); >> 113 } >> 114 #endif >> 115 } >> 116 >> 117 return finalResult; >> 118 } >> 119 >> 120 //_____________________________________________________________________________ >> 121 template <typename T> >> 122 inline 38 G4bool G4GenericFileManager::WriteTExtra( 123 G4bool G4GenericFileManager::WriteTExtra( 39 const G4String& fileName, HT* ht, const G4St << 124 const G4String& fileName, T* ht, const G4String& htName) 40 { 125 { 41 Message(G4Analysis::kVL4, "write", "extra fi << 126 if ( fState.GetVerboseL4() ) { 42 fileName + " with " + G4Analysis::GetHnTyp << 127 G4ExceptionDescription description; >> 128 description >> 129 << fileName << " with " << G4Analysis::GetHnType<T>() << " " << htName; >> 130 fState.GetVerboseL4()->Message("write", "extra file", description); >> 131 } 43 132 44 std::shared_ptr<G4VFileManager> fileManager 133 std::shared_ptr<G4VFileManager> fileManager = GetFileManager(fileName); 45 if ( ! fileManager ) { 134 if ( ! fileManager ) { 46 G4Analysis::Warn( << 135 G4ExceptionDescription description; 47 "Cannot get file manager for " + fileNam << 136 description 48 "Writing " + G4Analysis::GetHnType<HT>() << 137 << "Cannot get file manager for file " << fileName << "." << G4endl 49 fkClass, "WriteTExtra"); << 138 << "Writing " << G4Analysis::GetHnType<T>() << " " << htName >> 139 << " failed."; >> 140 G4Exception("G4GenericFileManager::WriteTExtra", >> 141 "Analysis_W022", JustWarning, description); 50 return false; 142 return false; 51 } 143 } 52 144 53 auto result = fileManager->GetHnFileManager< << 145 auto result = fileManager->GetHnFileManager<T>()->WriteExtra(ht, htName, fileName); 54 146 55 Message(G4Analysis::kVL1, "write", "extra fi << 147 #ifdef G4VERBOSE >> 148 if ( fState.GetVerboseL1() ) { >> 149 fState.GetVerboseL1()->Message("write", "extra file", fileName, result); >> 150 } >> 151 #endif 56 152 57 return result; << 153 return result; 58 } 154 } 59 155