Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4BaseFileManager.cc
Go to the documentation of this file.
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, 10/09/2014 (ivana@ipno.in2p3.fr)
28
29#include "G4BaseFileManager.hh"
31
32#include "G4Threading.hh"
33
34//_____________________________________________________________________________
36 : fState(state)
37{}
38
39//
40// public methods
41//
42
43//_____________________________________________________________________________
45{
46 // G4cout << "registering " << fileName << " in manager of " << GetFileType() << G4endl;
47
48 // Do nothing in file name is already present
49 for ( const auto& name : fFileNames ) {
50 if ( name == fileName ) return;
51 }
52
53 fFileNames.push_back(fileName);
54}
55
56//_____________________________________________________________________________
58{
60}
61
62//_____________________________________________________________________________
64 G4bool isPerThread) const
65{
66 G4String fileName(baseFileName);
67 if ( fileName == "" ) fileName = fFileName;
68
69 // Take out file extension
70 auto name = G4Analysis::GetBaseName(fileName);
71
72 // Add thread Id to a file name if MT processing
73 if ( isPerThread && ! fState.GetIsMaster() ) {
74 std::ostringstream os;
76 name.append("_t");
77 name.append(os.str());
78 }
79
80 // Add (back if it was present or is defined) file extension
81 auto extension = G4Analysis::GetExtension(fileName, GetFileType());
82 if (extension.size() != 0u) {
83 name.append(".");
84 name.append(extension);
85 }
86
87 return name;
89
90//_____________________________________________________________________________
92 const G4String& hnName) const
93{
94 return G4Analysis::GetHnFileName(fFileName, GetFileType(), hnType, hnName);
95}
96
97//_____________________________________________________________________________
99 G4int cycle) const
100{
101 // Do nothing if cycle is supported by the output type
102 if (HasCycles()) return fileName;
103
104 return G4Analysis::GetHnFileName(fileName, GetFileType(), cycle);
105}
106
107//_____________________________________________________________________________
109 G4int cycle) const
110{
111 // Do not pass cycle if supported by the output type
112 auto cycleToPass = (HasCycles()) ? 0 : cycle;
113
114 return G4Analysis::GetNtupleFileName(fFileName, GetFileType(), ntupleName, cycleToPass);
115}
116
117//_____________________________________________________________________________
119 G4int cycle) const
120{
121 // Do not pass cycle if supported by the output type
122 auto cycleToPass = (HasCycles()) ? 0 : cycle;
123
124 return G4Analysis::GetNtupleFileName(fFileName, GetFileType(), ntupleFileNumber, cycleToPass);
125}
126
127//_____________________________________________________________________________
129{
131}
132
133
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
std::vector< G4String > fFileNames
G4String GetFullFileName(const G4String &baseFileName="", G4bool isPerThread=true) const
G4String GetPlotFileName() const
virtual G4String GetFileType() const
G4String GetHnFileName(const G4String &hnType, const G4String &hnName) const
virtual G4bool HasCycles() const
const G4AnalysisManagerState & fState
G4BaseFileManager()=delete
G4String GetNtupleFileName(const G4String &ntupleName, G4int cycle=0) const
void AddFileName(const G4String &fileName)
G4String GetExtension(const G4String &fileName, const G4String &defaultExtension="")
G4String GetPlotFileName(const G4String &fileName)
G4String GetNtupleFileName(const G4String &fileName, const G4String &fileType, const G4String &ntupleName, G4int cycle=0)
G4String GetHnFileName(const G4String &fileName, const G4String &fileType, const G4String &hnType, const G4String &hnName)
G4String GetBaseName(const G4String &fileName)
G4String to_lower_copy(G4String str)
Return lowercased copy of string.
G4int G4GetThreadId()
Definition: G4Threading.cc:122