Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/analysis/management/src/G4AnalysisUtilities.cc

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/src/G4AnalysisUtilities.cc (Version 11.3.0) and /analysis/management/src/G4AnalysisUtilities.cc (Version 8.1)


  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, 22/08/2013  (ivan    
 28                                                   
 29 #include "G4AnalysisUtilities.hh"                 
 30 #include "G4BinScheme.hh"                         
 31 #include "G4Exception.hh"                         
 32 #include "G4UnitsTable.hh"                        
 33 #include "G4String.hh"                            
 34 #include "G4Threading.hh"                         
 35 #include "G4Filesystem.hh"                        
 36                                                   
 37 using std::to_string;                             
 38                                                   
 39 namespace {                                       
 40                                                   
 41 //____________________________________________    
 42 G4bool GetToken(const G4String& line, G4String    
 43                 std::string::size_type begIdx,    
 44 {                                                 
 45   while ( line[(G4int)begIdx] == ' ') ++begIdx    
 46   if ( line[(G4int)begIdx] == '"' ) {             
 47     endIdx = line.find('"', begIdx+1);            
 48     if ( endIdx == std::string::npos ) endIdx     
 49     token = line.substr(begIdx+1, (endIdx-1)-b    
 50     ++endIdx;                                     
 51   }                                               
 52   else {                                          
 53     endIdx = line.find(' ', begIdx);              
 54     if ( endIdx == std::string::npos ) endIdx     
 55     token = line.substr(begIdx, endIdx-begIdx)    
 56   }                                               
 57   return ( token.length() > 0 );                  
 58 }                                                 
 59                                                   
 60 }                                                 
 61                                                   
 62 namespace G4Analysis                              
 63 {                                                 
 64                                                   
 65 //____________________________________________    
 66 void Warn(const G4String& message,                
 67           const std::string_view inClass,         
 68           const std::string_view inFunction)      
 69 {                                                 
 70   auto source = std::string(inClass) + "::" +     
 71   G4Exception(source.data(), "Analysis_W001",     
 72 }                                                 
 73                                                   
 74 //____________________________________________    
 75 G4double GetUnitValue(const G4String& unit)       
 76 {                                                 
 77    G4double value = 1.;                           
 78    if ( unit != "none" ) {                        
 79      value = G4UnitDefinition::GetValueOf(unit    
 80      if ( value == 0. ) value = 1.;               
 81    }                                              
 82    return value;                                  
 83 }                                                 
 84                                                   
 85 //____________________________________________    
 86 void  Tokenize(const G4String& line, std::vect    
 87 {                                                 
 88   // Define start values                          
 89   std::string::size_type begIdx = 0;              
 90   std::string::size_type endIdx = 0;              
 91   G4String token;                                 
 92                                                   
 93   do {                                            
 94     if ( GetToken(line, token, begIdx, endIdx)    
 95       //G4cout << "got token: '" << token << "    
 96       //G4cout << "beg, end: " << begIdx << ",    
 97       tokens.push_back(token);                    
 98     }                                             
 99     begIdx = endIdx + 1;                          
100   }                                               
101   while ( endIdx < line.length() ); // Loop ch    
102 }                                                 
103                                                   
104 //____________________________________________    
105 G4AnalysisOutput GetOutput(const G4String& out    
106 {                                                 
107   if (outputName == "csv")  return G4AnalysisO    
108   if (outputName == "hdf5") return G4AnalysisO    
109   if (outputName == "root") return G4AnalysisO    
110   if (outputName == "xml")  return G4AnalysisO    
111   if (outputName == "none") return G4AnalysisO    
112                                                   
113   if (warn) {                                     
114     Warn("\"" + outputName + "\" output type i    
115   }                                               
116   return G4AnalysisOutput::kNone;                 
117 }                                                 
118                                                   
119 //____________________________________________    
120 G4String GetOutputName(G4AnalysisOutput output    
121 {                                                 
122   switch ( output ) {                             
123     case G4AnalysisOutput::kCsv:                  
124       return "csv";                               
125       break;                                      
126     case G4AnalysisOutput::kHdf5:                 
127       return "hdf5";                              
128       break;                                      
129     case G4AnalysisOutput::kRoot:                 
130       return "root";                              
131       break;                                      
132     case G4AnalysisOutput::kXml:                  
133       return "xml";                               
134       break;                                      
135     case G4AnalysisOutput::kNone:                 
136       return "none";                              
137       break;                                      
138   }                                               
139   // should never reach this line                 
140   Warn("\"" + to_string(static_cast<int>(outpu    
141        "\" output type is not supported.",        
142        kNamespaceName, "CheckOutputName");        
143   return "none";                                  
144 }                                                 
145                                                   
146 //____________________________________________    
147 G4String GetBaseName(const G4String& fileName)    
148 {                                                 
149 // Get file base name (without dot)               
150                                                   
151   G4fs::path filePath(fileName.data());           
152   if ( filePath.has_parent_path()) {              
153     return  filePath.parent_path().string() +     
154   }                                               
155                                                   
156   return filePath.stem().string();                
157 }                                                 
158                                                   
159 //____________________________________________    
160 G4String GetExtension(const G4String& fileName    
161                       const G4String& defaultE    
162 {                                                 
163 // Get file base extension (without dot)          
164 // If fileName is provided without extension,     
165                                                   
166   G4fs::path filePath(fileName.data());           
167   if ( filePath.has_extension() ) {               
168     auto extension = filePath.extension().stri    
169     // remove "."                                 
170     return extension.substr(1, extension.lengt    
171   }                                               
172                                                   
173   return defaultExtension;                        
174 }                                                 
175                                                   
176 //____________________________________________    
177 G4String GetHnFileName(                           
178             const G4String& fileName,             
179             const G4String& fileType,             
180             const G4String& hnType,               
181             const G4String& hnName)               
182 {                                                 
183 // Compose and return the histogram or profile    
184 // - add _hn_hnName suffix to the file base na    
185 // - add _vN  suffix if cycle > 0                 
186 // - add file extension if not present            
187                                                   
188   auto name = GetBaseName(fileName);              
189                                                   
190   // Add _hnType_hnName                           
191   name.append("_");                               
192   name.append(hnType);                            
193   name.append("_");                               
194   name.append(hnName);                            
195                                                   
196   // Add file extension                           
197   auto extension = GetExtension(fileName, file    
198   if (extension.size() != 0u) {                   
199     name.append(".");                             
200     name.append(extension);                       
201   }                                               
202                                                   
203   return name;                                    
204 }                                                 
205                                                   
206 //____________________________________________    
207 G4String GetHnFileName(                           
208             const G4String& fileName,             
209             const G4String& fileType,             
210             G4int cycle)                          
211 {                                                 
212 // Update Hn file name:                           
213 // - add _vN  suffix to the base namer if cycl    
214                                                   
215   auto name = GetBaseName(fileName);              
216                                                   
217   // Add cycle number                             
218   if (cycle > 0) {                                
219     name.append("_v");                            
220     name.append(std::to_string(cycle));           
221   }                                               
222                                                   
223   // Add file extension                           
224   auto extension = GetExtension(fileName, file    
225   if (extension.size() != 0u) {                   
226     name.append(".");                             
227     name.append(extension);                       
228   }                                               
229                                                   
230   return name;                                    
231 }                                                 
232                                                   
233 //____________________________________________    
234 G4String GetNtupleFileName(                       
235             const G4String& fileName,             
236             const G4String& fileType,             
237             const G4String& ntupleName,           
238             G4int cycle)                          
239 {                                                 
240 // Compose and return the ntuple specific file    
241 // - add _nt_ntupleName suffix to the file bas    
242 // - add _vN  suffix if cycle > 0                 
243 // - add _tN suffix if called on thread worker    
244 // - add file extension if not present            
245                                                   
246   auto name = GetBaseName(fileName);              
247                                                   
248   // Add ntupleName                               
249   name.append("_nt_");                            
250   name.append(ntupleName);                        
251                                                   
252   // Add cycle number                             
253   if (cycle > 0) {                                
254     name.append("_v");                            
255     name.append(std::to_string(cycle));           
256   }                                               
257                                                   
258   // Add thread Id to a file name if MT proces    
259   if ( ! G4Threading::IsMasterThread() ) {        
260     std::ostringstream os;                        
261     os << G4Threading::G4GetThreadId();           
262     name.append("_t");                            
263     name.append(os.str());                        
264   }                                               
265                                                   
266   // Add file extension                           
267   auto extension = GetExtension(fileName, file    
268   if (extension.size() != 0u) {                   
269     name.append(".");                             
270     name.append(extension);                       
271   }                                               
272                                                   
273   return name;                                    
274 }                                                 
275                                                   
276 //____________________________________________    
277 G4String GetNtupleFileName(                       
278             const G4String& fileName,             
279             const G4String& fileType,             
280             G4int ntupleFileNumber,               
281             G4int cycle)                          
282 {                                                 
283 // Compose and return the ntuple specific file    
284 // - add _mFN suffix to the file base name whe    
285 // - add _vN  suffix if cycle > 0                 
286 // - add file extension if not present            
287                                                   
288   auto name = GetBaseName(fileName);              
289                                                   
290   // Add _M followed by ntupleFileNumber          
291   std::ostringstream os;                          
292   os << ntupleFileNumber;                         
293   name.append("_m");                              
294   name.append(os.str());                          
295                                                   
296   // Add cycle number                             
297   if (cycle > 0) {                                
298     name.append("_v");                            
299     name.append(std::to_string(cycle));           
300   }                                               
301                                                   
302   // Add file extension                           
303   auto extension = GetExtension(fileName, file    
304   if (extension.size() != 0u) {                   
305     name.append(".");                             
306     name.append(extension);                       
307   }                                               
308                                                   
309   return name;                                    
310 }                                                 
311                                                   
312 //____________________________________________    
313 G4String GetTnFileName(                           
314             const G4String& fileName,             
315             const G4String& fileType,             
316             G4int cycle)                          
317 {                                                 
318 // Update file base name with the thread suffi    
319 // - add _tN suffix if called on thread worker    
320 // - add file extension if not present            
321                                                   
322   auto name = GetBaseName(fileName);              
323                                                   
324   // Add cycle number                             
325   if (cycle > 0) {                                
326     name.append("_v");                            
327     name.append(std::to_string(cycle));           
328   }                                               
329                                                   
330   // Add thread Id to a file name if MT proces    
331   if ( !  G4Threading::IsMasterThread() ) {       
332     std::ostringstream os;                        
333     os << G4Threading::G4GetThreadId();           
334     name.append("_t");                            
335     name.append(os.str());                        
336   }                                               
337                                                   
338   // Add file extension                           
339   auto extension = GetExtension(fileName, file    
340   if (extension.size() != 0u) {                   
341     name.append(".");                             
342     name.append(extension);                       
343   }                                               
344                                                   
345   return name;                                    
346 }                                                 
347                                                   
348 //____________________________________________    
349 G4String GetPlotFileName(const G4String& fileN    
350 {                                                 
351 // Generate plot file name for an output file     
352                                                   
353   auto name = GetBaseName(fileName);              
354                                                   
355   // Add .ps extension                            
356   name.append(".ps");                             
357                                                   
358   return name;                                    
359 }                                                 
360                                                   
361 }                                                 
362