Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/analysis/management/include/G4TFileManager.icc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /analysis/management/include/G4TFileManager.icc (Version 11.3.0) and /analysis/management/include/G4TFileManager.icc (Version 11.0.p4)


  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 // Author: Ivana Hrivnacova, 18/06/2013  (ivan     27 // Author: Ivana Hrivnacova, 18/06/2013  (ivana@ipno.in2p3.fr)
 28                                                    28 
 29 #include "G4AnalysisUtilities.hh"                  29 #include "G4AnalysisUtilities.hh"
 30                                                    30 
 31 //____________________________________________     31 //_____________________________________________________________________________
 32 template <typename FT>                             32 template <typename FT>
 33 inline                                             33 inline
 34 G4TFileManager<FT>::G4TFileManager(const G4Ana     34 G4TFileManager<FT>::G4TFileManager(const G4AnalysisManagerState& state)
 35  : fAMState(state)                                 35  : fAMState(state)
 36 {}                                                 36 {}
 37                                                    37 
 38 //____________________________________________     38 //_____________________________________________________________________________
 39 template <typename FT>                             39 template <typename FT>
 40 inline                                             40 inline
 41 G4TFileManager<FT>::~G4TFileManager()              41 G4TFileManager<FT>::~G4TFileManager()
 42 {                                                  42 {
 43   for ( const auto& mapElement : fFileMap ) {      43   for ( const auto& mapElement : fFileMap ) {
 44     delete mapElement.second;                      44     delete mapElement.second;
 45   }                                                45   }
 46 }                                                  46 }
 47                                                    47 
 48 //                                                 48 //
 49 // private functions                               49 // private functions
 50 //                                                 50 //
 51                                                    51 
 52 //____________________________________________     52 //_____________________________________________________________________________
 53 template <typename FT>                             53 template <typename FT>
 54 inline                                             54 inline
 55 void                                               55 void
 56 G4TFileManager<FT>::FileNotFoundWarning(const      56 G4TFileManager<FT>::FileNotFoundWarning(const G4String& fileName,
 57                       std::string_view functio     57                       std::string_view functionName) const
 58 {                                                  58 {
 59   G4Analysis::Warn("Failed to get file " + fil     59   G4Analysis::Warn("Failed to get file " + fileName, fkClass, functionName);
 60 }                                                  60 }
 61                                                    61 
 62 //____________________________________________     62 //_____________________________________________________________________________
 63 template <typename FT>                             63 template <typename FT>
 64 inline                                             64 inline
 65 G4TFileInformation<FT>*                            65 G4TFileInformation<FT>*
 66 G4TFileManager<FT>::GetFileInfoInFunction(cons     66 G4TFileManager<FT>::GetFileInfoInFunction(const G4String& fileName,
 67                       std::string_view functio     67                       std::string_view functionName, G4bool warn ) const
 68 {                                                  68 {
 69   // Find the file information in the map          69   // Find the file information in the map
 70   auto it = fFileMap.find(fileName);               70   auto it = fFileMap.find(fileName);
 71   if ( it == fFileMap.end() ) {                    71   if ( it == fFileMap.end() ) {
 72     if (warn) {                                    72     if (warn) {
 73       FileNotFoundWarning(fileName, functionNa     73       FileNotFoundWarning(fileName, functionName);
 74     }                                              74     }
 75     return nullptr;                                75     return nullptr;
 76   }                                                76   }
 77                                                    77 
 78   return it->second;                               78   return it->second;
 79 }                                                  79 }
 80                                                    80 
 81 //____________________________________________     81 //_____________________________________________________________________________
 82 template <typename FT>                             82 template <typename FT>
 83 inline                                             83 inline
 84 std::shared_ptr<FT>                                84 std::shared_ptr<FT>
 85 G4TFileManager<FT>::GetFileInFunction(const G4     85 G4TFileManager<FT>::GetFileInFunction(const G4String& fileName,
 86                       std::string_view functio     86                       std::string_view functionName, G4bool warn) const
 87 {                                                  87 {
 88   // Find the file information in the map          88   // Find the file information in the map
 89   auto fileInfo = GetFileInfoInFunction(fileNa     89   auto fileInfo = GetFileInfoInFunction(fileName, functionName, warn);
 90   if (! fileInfo) return nullptr;                  90   if (! fileInfo) return nullptr;
 91                                                    91 
 92   // Check if the file is open                     92   // Check if the file is open
 93   if ( ! fileInfo->fFile ) {                       93   if ( ! fileInfo->fFile ) {
 94     if (warn) {                                    94     if (warn) {
 95       FileNotFoundWarning(fileName, functionNa     95       FileNotFoundWarning(fileName, functionName);
 96     }                                              96     }
 97     return nullptr;                                97     return nullptr;
 98   }                                                98   }
 99                                                    99 
100   return fileInfo->fFile;                         100   return fileInfo->fFile;
101 }                                                 101 }
102                                                   102 
103 //____________________________________________    103 //_____________________________________________________________________________
104 template <typename FT>                            104 template <typename FT>
105 inline                                            105 inline
106 G4bool G4TFileManager<FT>::WriteTFile(std::sha    106 G4bool G4TFileManager<FT>::WriteTFile(std::shared_ptr<FT> file,
107                                       [[maybe_    107                                       [[maybe_unused]] const G4String& fileName)
108 {                                                 108 {
109   fAMState.Message(G4Analysis::kVL4, "write",     109   fAMState.Message(G4Analysis::kVL4, "write", "file", fileName);
110                                                   110 
111   // Write the found file                         111   // Write the found file
112   auto result = WriteFileImpl(file);              112   auto result = WriteFileImpl(file);
113                                                   113 
114   fAMState.Message(G4Analysis::kVL1, "write",     114   fAMState.Message(G4Analysis::kVL1, "write", "file", fileName, result);
115                                                   115 
116   return result;                                  116   return result;
117 }                                                 117 }
118                                                   118 
119 //____________________________________________    119 //_____________________________________________________________________________
120 template <typename FT>                            120 template <typename FT>
121 inline                                            121 inline
122 G4bool G4TFileManager<FT>::CloseTFile(std::sha    122 G4bool G4TFileManager<FT>::CloseTFile(std::shared_ptr<FT> file,
123                                       [[maybe_    123                                       [[maybe_unused]] const G4String& fileName)
124 {                                                 124 {
125   fAMState.Message(G4Analysis::kVL4, "close",     125   fAMState.Message(G4Analysis::kVL4, "close", "file", fileName);
126                                                   126 
127   // Close the found file                         127   // Close the found file
128   auto result = CloseFileImpl(file);              128   auto result = CloseFileImpl(file);
129                                                   129 
130   fAMState.Message(G4Analysis::kVL1, "close",     130   fAMState.Message(G4Analysis::kVL1, "close", "file", fileName, result);
131                                                   131 
132   return result;                                  132   return result;
133 }                                                 133 }
134                                                   134 
135 //____________________________________________    135 //_____________________________________________________________________________
136 template <typename FT>                            136 template <typename FT>
137 inline                                            137 inline
138 G4bool G4TFileManager<FT>::DeleteEmptyFile(con    138 G4bool G4TFileManager<FT>::DeleteEmptyFile(const G4String& fileName)
139 {                                                 139 {
140   fAMState.Message(G4Analysis::kVL4, "delete",    140   fAMState.Message(G4Analysis::kVL4, "delete", "empty file", fileName);
141                                                   141 
142   auto result = ! std::remove(fileName);          142   auto result = ! std::remove(fileName);
143                                                   143 
144   fAMState.Message(G4Analysis::kVL1, "delete",    144   fAMState.Message(G4Analysis::kVL1, "delete", "empty file", fileName, result);
145                                                   145 
146   return result;                                  146   return result;
147 }                                                 147 }
148                                                   148 
149 //____________________________________________    149 //_____________________________________________________________________________
150 template <typename FT>                            150 template <typename FT>
151 inline                                            151 inline
152 void G4TFileManager<FT>::ClearData()              152 void G4TFileManager<FT>::ClearData()
153 {                                                 153 {
154   for ( const auto& mapElement : fFileMap ) {     154   for ( const auto& mapElement : fFileMap ) {
155     delete mapElement.second;                     155     delete mapElement.second;
156   }                                               156   }
157   fFileMap.clear();                               157   fFileMap.clear();
158                                                   158 
159   fAMState.Message(G4Analysis::kVL2, "clear",     159   fAMState.Message(G4Analysis::kVL2, "clear", "files");
160 }                                                 160 }
161                                                   161 
162 //                                                162 //
163 // public functions                               163 // public functions
164 //                                                164 //
165                                                   165 
166 //____________________________________________    166 //_____________________________________________________________________________
167 template <typename FT>                            167 template <typename FT>
168 inline                                            168 inline
169 std::shared_ptr<FT> G4TFileManager<FT>::Create    169 std::shared_ptr<FT> G4TFileManager<FT>::CreateTFile(const G4String& fileName)
170 {                                                 170 {
171   // Just return the file if it already exists << 171   // Check if file already exists
172   if ( auto file = GetFileInFunction(fileName, << 172   if ( GetFileInFunction(fileName, "CreateTFile", false) ) {
173       file != nullptr ) {                      << 173     G4Analysis::Warn("File " + fileName + " already exists.",
174     return file;                               << 174       fkClass, "CreateTFile");
175     // should we also update fileInformation ? << 175     return nullptr;
176   }                                               176   }
177                                                   177 
178   auto fileInformation = GetFileInfoInFunction    178   auto fileInformation = GetFileInfoInFunction(fileName, "CreateTFile", false);
179   if ( ! fileInformation ) {                      179   if ( ! fileInformation ) {
180     fAMState.Message(G4Analysis::kVL4, "create    180     fAMState.Message(G4Analysis::kVL4, "create", "fileInformation", fileName);
181                                                   181 
182     // Create file information and save it in     182     // Create file information and save it in the map
183     fileInformation = new G4TFileInformation<F    183     fileInformation = new G4TFileInformation<FT>(fileName);
184     fFileMap[fileName] = fileInformation;         184     fFileMap[fileName] = fileInformation;
185   }                                               185   }
186                                                   186 
187   // Create file and save it in fileInformatio    187   // Create file and save it in fileInformation
188   fAMState.Message(G4Analysis::kVL4, "create",    188   fAMState.Message(G4Analysis::kVL4, "create", "file", fileName);
189                                                   189 
190   // Let concrete class create a file             190   // Let concrete class create a file
191   auto file = CreateFileImpl(fileName);           191   auto file = CreateFileImpl(fileName);
192   if ( ! file ) {                                 192   if ( ! file ) {
193     G4Analysis::Warn("Failed to create file "     193     G4Analysis::Warn("Failed to create file " + fileName, fkClass, "CreateTFile");
194     return nullptr;                               194     return nullptr;
195   }                                               195   }
196   // Save file in fileInformation                 196   // Save file in fileInformation
197   fileInformation->fFile = file;                  197   fileInformation->fFile = file;
198   fileInformation->fIsOpen = true;                198   fileInformation->fIsOpen = true;
199   fileInformation->fIsEmpty = true;               199   fileInformation->fIsEmpty = true;
200   fileInformation->fIsDeleted = false;            200   fileInformation->fIsDeleted = false;
201                                                   201 
202   fAMState.Message(G4Analysis::kVL1, "create",    202   fAMState.Message(G4Analysis::kVL1, "create", "file", fileName);
203                                                   203 
204   // Return created file                          204   // Return created file
205   return file;                                    205   return file;
206 }                                                 206 }
207                                                   207 
208 //____________________________________________    208 //_____________________________________________________________________________
209 template <typename FT>                            209 template <typename FT>
210 inline                                            210 inline
211 G4bool G4TFileManager<FT>::WriteTFile(const G4    211 G4bool G4TFileManager<FT>::WriteTFile(const G4String& fileName)
212 {                                                 212 {
213   // Find the file in the map                     213   // Find the file in the map
214   auto file = GetFileInFunction(fileName, "Wri    214   auto file = GetFileInFunction(fileName, "WriteTFile");
215   // Warning is issued in GetFileInfoFunction     215   // Warning is issued in GetFileInfoFunction
216   if (! file) return false;                       216   if (! file) return false;
217                                                   217 
218   return WriteTFile(file, fileName);              218   return WriteTFile(file, fileName);
219 }                                                 219 }
220                                                   220 
221 //____________________________________________    221 //_____________________________________________________________________________
222 template <typename FT>                            222 template <typename FT>
223 inline                                            223 inline
224 G4bool G4TFileManager<FT>::CloseTFile(const G4    224 G4bool G4TFileManager<FT>::CloseTFile(const G4String& fileName)
225 {                                                 225 {
226   // Find the file information in the map         226   // Find the file information in the map
227   auto fileInfo = GetFileInfoInFunction(fileNa    227   auto fileInfo = GetFileInfoInFunction(fileName, "CloseTFile");
228   // Warning is issued in GetFileInfoFunction     228   // Warning is issued in GetFileInfoFunction
229   if ( ! fileInfo ) return false;                 229   if ( ! fileInfo ) return false;
230                                                   230 
231   // Do nothing if file is not open               231   // Do nothing if file is not open
232   if ( ! fileInfo->fIsOpen ) return false;        232   if ( ! fileInfo->fIsOpen ) return false;
233                                                   233 
234   // Get file from the file information           234   // Get file from the file information
235   auto file = fileInfo->fFile;                    235   auto file = fileInfo->fFile;
236   if ( ! file ) {                                 236   if ( ! file ) {
237     FileNotFoundWarning(fileName, "CloseTFile"    237     FileNotFoundWarning(fileName, "CloseTFile");
238     return false;                                 238     return false;
239   }                                               239   }
240                                                   240 
241   auto result = CloseTFile(file, fileName);       241   auto result = CloseTFile(file, fileName);
242                                                   242 
243   // Update the file information                  243   // Update the file information
244   fileInfo->fFile.reset();                        244   fileInfo->fFile.reset();
245   fileInfo->fIsOpen = false;                      245   fileInfo->fIsOpen = false;
246                                                   246 
247   return result;                                  247   return result;
248 }                                                 248 }
249                                                   249 
250 //____________________________________________    250 //_____________________________________________________________________________
251 template <typename FT>                            251 template <typename FT>
252 inline                                            252 inline
253 G4bool G4TFileManager<FT>::SetIsEmpty(const G4    253 G4bool G4TFileManager<FT>::SetIsEmpty(const G4String& fileName, G4bool isEmpty)
254 {                                                 254 {
255   // Find the file information in the map         255   // Find the file information in the map
256   auto fileInfo = GetFileInfoInFunction(fileNa    256   auto fileInfo = GetFileInfoInFunction(fileName, "SetIsEmpty");
257                                                   257 
258   // Warning is issued in GetFileFunction         258   // Warning is issued in GetFileFunction
259   if ( ! fileInfo ) return false;                 259   if ( ! fileInfo ) return false;
260                                                   260 
261   fAMState.Message(G4Analysis::kVL4, "notify n    261   fAMState.Message(G4Analysis::kVL4, "notify not empty", "file", fileName);
262                                                   262 
263   // Set notification to file information         263   // Set notification to file information
264   if ( fileInfo->fIsEmpty ) {                     264   if ( fileInfo->fIsEmpty ) {
265     // do not revert information if file is no    265     // do not revert information if file is not empty
266     fileInfo->fIsEmpty = isEmpty;                 266     fileInfo->fIsEmpty = isEmpty;
267                                                   267 
268     if ( ! isEmpty ) {                            268     if ( ! isEmpty ) {
269       fAMState.Message(G4Analysis::kVL3, "noti    269       fAMState.Message(G4Analysis::kVL3, "notify not empty", "file", fileName);
270     }                                             270     }
271   }                                               271   }
272                                                   272 
273   return true;                                    273   return true;
274 }                                                 274 }
275                                                   275 
276 //____________________________________________    276 //_____________________________________________________________________________
277 template <typename FT>                            277 template <typename FT>
278 inline                                            278 inline
279 std::shared_ptr<FT> G4TFileManager<FT>::GetTFi    279 std::shared_ptr<FT> G4TFileManager<FT>::GetTFile(
280   const G4String& fileName, G4bool warn) const    280   const G4String& fileName, G4bool warn) const
281 {                                                 281 {
282   // Find the file information in the map         282   // Find the file information in the map
283   return GetFileInFunction(fileName, "GetTFile    283   return GetFileInFunction(fileName, "GetTFile", warn);
284 }                                                 284 }
285                                                   285 
286 //____________________________________________    286 //_____________________________________________________________________________
287 template <typename FT>                            287 template <typename FT>
288 inline                                            288 inline
289 G4bool G4TFileManager<FT>::OpenFiles()            289 G4bool G4TFileManager<FT>::OpenFiles()
290 {                                                 290 {
291   auto result = true;                             291   auto result = true;
292   for ( const auto& mapElement : fFileMap ) {     292   for ( const auto& mapElement : fFileMap ) {
293      auto fileInformation = mapElement.second;    293      auto fileInformation = mapElement.second;
294      // Do nothing if file was open by user ex    294      // Do nothing if file was open by user explicitly
295      if ( fileInformation->fFile ) {              295      if ( fileInformation->fFile ) {
296        // G4cout << "... skipping open file fo    296        // G4cout << "... skipping open file for " << fileInformation->fFileName << G4endl;
297        continue;                                  297        continue;
298      }                                            298      }
299                                                   299 
300      result &= (CreateTFile(fileInformation->f    300      result &= (CreateTFile(fileInformation->fFileName) != nullptr);
301   }                                               301   }
302   return result;                                  302   return result;
303 }                                                 303 }
304                                                   304 
305 //____________________________________________    305 //_____________________________________________________________________________
306 template <typename FT>                            306 template <typename FT>
307 inline                                            307 inline
308 G4bool G4TFileManager<FT>::WriteFiles()           308 G4bool G4TFileManager<FT>::WriteFiles()
309 {                                                 309 {
310   auto result = true;                             310   auto result = true;
311   for ( const auto& mapElement : fFileMap ) {     311   for ( const auto& mapElement : fFileMap ) {
312      auto fileInformation = mapElement.second;    312      auto fileInformation = mapElement.second;
313      if ( ! fileInformation->fIsOpen ) {          313      if ( ! fileInformation->fIsOpen ) {
314        // G4cout << "skipping write for file "    314        // G4cout << "skipping write for file " << fileInformation->fFileName << G4endl;
315        continue;                                  315        continue;
316      }                                            316      }
317      result &= WriteTFile(fileInformation->fFi    317      result &= WriteTFile(fileInformation->fFile, fileInformation->fFileName);
318   }                                               318   }
319   return result;                                  319   return result;
320 }                                                 320 }
321                                                   321 
322 //____________________________________________    322 //_____________________________________________________________________________
323 template <typename FT>                            323 template <typename FT>
324 inline                                            324 inline
325 G4bool G4TFileManager<FT>::CloseFiles()           325 G4bool G4TFileManager<FT>::CloseFiles()
326 {                                                 326 {
327   auto result = true;                             327   auto result = true;
328   for ( const auto& mapElement : fFileMap ) {     328   for ( const auto& mapElement : fFileMap ) {
329      auto fileInformation = mapElement.second;    329      auto fileInformation = mapElement.second;
330      if ( ! fileInformation->fIsOpen ) {          330      if ( ! fileInformation->fIsOpen ) {
331        // G4cout << "skipping close for file "    331        // G4cout << "skipping close for file " << fileInformation->fFileName << G4endl;
332        continue;                                  332        continue;
333      }                                            333      }
334      result &= CloseTFile(fileInformation->fFi    334      result &= CloseTFile(fileInformation->fFile, fileInformation->fFileName);
335                                                   335 
336      // Update file information                   336      // Update file information
337      fileInformation->fFile.reset();              337      fileInformation->fFile.reset();
338      fileInformation->fIsOpen = false;            338      fileInformation->fIsOpen = false;
339   }                                               339   }
340                                                   340 
341   // As the files were set to nullptr, clear s    341   // As the files were set to nullptr, clear should not be needed
342   // fFileMap.clear();                            342   // fFileMap.clear();
343                                                   343 
344   return result;                                  344   return result;
345 }                                                 345 }
346                                                   346 
347 //____________________________________________    347 //_____________________________________________________________________________
348 template <typename FT>                            348 template <typename FT>
349 inline                                            349 inline
350 G4bool G4TFileManager<FT>::DeleteEmptyFiles()     350 G4bool G4TFileManager<FT>::DeleteEmptyFiles()
351 {                                                 351 {
352   auto result = true;                             352   auto result = true;
353   for ( const auto& mapElement : fFileMap ) {     353   for ( const auto& mapElement : fFileMap ) {
354     auto fileInformation = mapElement.second;     354     auto fileInformation = mapElement.second;
355     if ( (! fileInformation->fIsEmpty) || file    355     if ( (! fileInformation->fIsEmpty) || fileInformation->fIsDeleted ) {
356       // G4cout << "skipping delete for file "    356       // G4cout << "skipping delete for file " << fileInformation->fFileName << G4endl;
357       continue;                                   357       continue;
358     }                                             358     }
359                                                   359 
360     result &= DeleteEmptyFile(fileInformation-    360     result &= DeleteEmptyFile(fileInformation->fFileName);
361                                                   361 
362     // Update file information                    362     // Update file information
363     fileInformation->fIsDeleted = true;           363     fileInformation->fIsDeleted = true;
364   }                                               364   }
365                                                   365 
366   return result;                                  366   return result;
367 }                                                 367 }
368                                                   368