Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4MTcoutDestination Class Reference

#include <G4MTcoutDestination.hh>

+ Inheritance diagram for G4MTcoutDestination:

Public Member Functions

 G4MTcoutDestination (const G4int &threadId)
 
 ~G4MTcoutDestination () override
 
virtual void Reset ()
 
void SetDefaultOutput (G4bool addMasterDestination=true, G4bool formatAlsoMaster=true)
 
void SetCoutFileName (const G4String &fileN="G4cout.txt", G4bool ifAppend=true)
 
void AddCoutFileName (const G4String &fileN="G4cout.txt", G4bool ifAppend=true)
 
void SetCerrFileName (const G4String &fileN="G4cerr.txt", G4bool ifAppend=true)
 
void AddCerrFileName (const G4String &fileN="G4cerr.txt", G4bool ifAppend=true)
 
void EnableBuffering (G4bool flag=true)
 
void SetPrefixString (const G4String &wd="G4WT")
 
void SetIgnoreCout (G4int tid=0)
 
void SetIgnoreInit (G4bool val=true)
 
G4String GetPrefixString () const
 
G4String GetFullPrefixString () const
 
- Public Member Functions inherited from G4MulticoutDestination
 G4MulticoutDestination ()=default
 
 ~G4MulticoutDestination () override=default
 
G4int ReceiveG4cout (const G4String &msg) override
 
G4int ReceiveG4cerr (const G4String &msg) override
 
- Public Member Functions inherited from G4coutDestination
 G4coutDestination ()=default
 
virtual ~G4coutDestination ()=default
 
void AddCoutTransformer (const Transformer &t)
 
void AddCoutTransformer (Transformer &&t)
 
void AddCerrTransformer (const Transformer &t)
 
void AddCerrTransformer (Transformer &&t)
 
virtual void ResetTransformers ()
 
virtual G4int ReceiveG4cout (const G4String &msg)
 
virtual G4int ReceiveG4cerr (const G4String &msg)
 
G4int ReceiveG4cout_ (const G4String &msg)
 
G4int ReceiveG4cerr_ (const G4String &msg)
 

Protected Member Functions

void AddMasterOutput (G4bool formatAlsoMaster)
 
void HandleFileCout (const G4String &fileN, G4bool appendFlag, G4bool suppressDefault)
 
void HandleFileCerr (const G4String &fileN, G4bool appendFlag, G4bool suppressDefault)
 

Additional Inherited Members

- Public Types inherited from G4coutDestination
using Transformer = std::function< G4bool(G4String &)>
 
- Protected Attributes inherited from G4coutDestination
std::vector< TransformertransformersCout
 
std::vector< TransformertransformersCerr
 
- Static Protected Attributes inherited from G4coutDestination
static G4MTGLOB_DLL G4coutDestinationmasterG4coutDestination = nullptr
 

Detailed Description

Definition at line 45 of file G4MTcoutDestination.hh.

Constructor & Destructor Documentation

◆ G4MTcoutDestination()

G4MTcoutDestination::G4MTcoutDestination ( const G4int threadId)
explicit

Definition at line 49 of file G4MTcoutDestination.cc.

50 : id(threadId)
51{
52 // TODO: Move these two out of here and in the caller
55
57 SetDefaultOutput(masterDestinationFlag, masterDestinationFmtFlag);
58}
G4GLOB_DLL G4strstreambuf G4coutbuf
Definition: G4ios.cc:114
G4GLOB_DLL G4strstreambuf G4cerrbuf
Definition: G4ios.cc:115
void SetDefaultOutput(G4bool addMasterDestination=true, G4bool formatAlsoMaster=true)
static G4StateManager * GetStateManager()
void SetDestination(G4coutDestination *dest)

◆ ~G4MTcoutDestination()

G4MTcoutDestination::~G4MTcoutDestination ( )
override

Definition at line 131 of file G4MTcoutDestination.cc.

132{
133 if(useBuffer)
134 {
135 DumpBuffer();
136 }
137}

Member Function Documentation

◆ AddCerrFileName()

void G4MTcoutDestination::AddCerrFileName ( const G4String fileN = "G4cerr.txt",
G4bool  ifAppend = true 
)

Definition at line 259 of file G4MTcoutDestination.cc.

261{
262 HandleFileCerr(fileN, ifAppend, false);
263}
void HandleFileCerr(const G4String &fileN, G4bool appendFlag, G4bool suppressDefault)

◆ AddCoutFileName()

void G4MTcoutDestination::AddCoutFileName ( const G4String fileN = "G4cout.txt",
G4bool  ifAppend = true 
)

Definition at line 238 of file G4MTcoutDestination.cc.

240{
241 // This is like the equivalent SetCoutFileName, but in this case we do not
242 // remove or silence what is already exisiting
243 HandleFileCout(fileN, ifAppend, false);
244}
void HandleFileCout(const G4String &fileN, G4bool appendFlag, G4bool suppressDefault)

◆ AddMasterOutput()

void G4MTcoutDestination::AddMasterOutput ( G4bool  formatAlsoMaster)
protected

Definition at line 99 of file G4MTcoutDestination.cc.

100{
101 // Add a destination, that forwards the message to the master thread
103 ref_masterOut = forwarder.get();
104 const auto filter_out = [this](G4String&) -> G4bool {
105 return !(
106 this->ignoreCout ||
107 (this->ignoreInit && this->stateMgr->GetCurrentState() == G4State_Idle));
108 };
109 forwarder->AddCoutTransformer(filter_out);
110 if(formatAlsoMaster)
111 {
112 // Formatter: add prefix to each thread
113 const auto f = [this](G4String& msg) -> G4bool {
114 std::ostringstream str;
115 str << prefix;
117 {
118 str << id;
119 }
120 str << " > " << msg;
121 msg = str.str();
122 return true;
123 };
124 forwarder->AddCoutTransformer(f);
125 forwarder->AddCerrTransformer(f);
126 }
127 push_back(std::move(forwarder));
128}
@ G4State_Idle
std::unique_ptr< G4coutDestination > G4coutDestinationUPtr
bool G4bool
Definition: G4Types.hh:86
const G4ApplicationState & GetCurrentState() const
void AddCoutTransformer(const Transformer &t)

Referenced by SetDefaultOutput().

◆ EnableBuffering()

void G4MTcoutDestination::EnableBuffering ( G4bool  flag = true)

Definition at line 207 of file G4MTcoutDestination.cc.

208{
209 // I was using buffered output and now I want to turn it off, dump current
210 // buffer content and reset output
211 if(useBuffer && !flag)
212 {
213 DumpBuffer();
214 Reset();
215 }
216 else if(useBuffer && flag)
217 { /* do nothing: already using */
218 }
219 else if(!useBuffer && !flag)
220 { /* do nothing: not using */
221 }
222 else if(!useBuffer && flag)
223 {
224 // Remove everything, in this case also removing the forward to the master
225 // thread, we want everything to be dumpled to a file
226 clear();
227 const size_t infiniteSize = 0;
228 push_back(G4coutDestinationUPtr(new G4BuffercoutDestination(infiniteSize)));
229 }
230 else // Should never happen
231 {
232 assert(false);
233 }
234 useBuffer = flag;
235}

Referenced by G4UImanager::SetThreadUseBuffer().

◆ GetFullPrefixString()

G4String G4MTcoutDestination::GetFullPrefixString ( ) const
inline

Definition at line 73 of file G4MTcoutDestination.hh.

74 {
75 std::stringstream os;
76 os << prefix << id;
77 return os.str();
78 }

◆ GetPrefixString()

G4String G4MTcoutDestination::GetPrefixString ( ) const
inline

Definition at line 72 of file G4MTcoutDestination.hh.

72{ return prefix; }

◆ HandleFileCerr()

void G4MTcoutDestination::HandleFileCerr ( const G4String fileN,
G4bool  appendFlag,
G4bool  suppressDefault 
)
protected

Definition at line 174 of file G4MTcoutDestination.cc.

176{
177 // See HandleFileCout for explanation, switching cout with cerr
178
179 std::ios_base::openmode mode =
180 (ifAppend ? std::ios_base::app : std::ios_base::trunc);
181 auto output = G4coutDestinationUPtr(new G4FilecoutDestination(fileN, mode));
182 output->AddCoutTransformer([](G4String&) { return false; });
183 push_back(std::move(output));
184 if(suppressDefault)
185 {
186 ref_defaultOut->AddCerrTransformer([](G4String&) { return false; });
187 if(ref_masterOut != nullptr)
188 {
189 ref_masterOut->AddCerrTransformer([](G4String&) { return false; });
190 }
191 }
192}
void AddCerrTransformer(const Transformer &t)

Referenced by AddCerrFileName(), and SetCerrFileName().

◆ HandleFileCout()

void G4MTcoutDestination::HandleFileCout ( const G4String fileN,
G4bool  appendFlag,
G4bool  suppressDefault 
)
protected

Definition at line 147 of file G4MTcoutDestination.cc.

149{
150 // Logic: we create a file destination. We want this to get only the G4cout
151 // stream and should discard everything in G4cerr.
152 // First we create the destination with the appropriate open mode
153
154 std::ios_base::openmode mode =
155 (ifAppend ? std::ios_base::app : std::ios_base::trunc);
156 auto output = G4coutDestinationUPtr(new G4FilecoutDestination(fileN, mode));
157
158 // This reacts only to G4cout, so let's make a filter that removes everything
159 // from G4cerr
160 output->AddCerrTransformer([](G4String&) { return false; });
161 push_back(std::move(output));
162 // Silence G4cout from default formatter
163 if(suppressDefault)
164 {
165 ref_defaultOut->AddCoutTransformer([](G4String&) { return false; });
166 if(ref_masterOut != nullptr)
167 {
168 ref_masterOut->AddCoutTransformer([](G4String&) { return false; });
169 }
170 }
171}

Referenced by AddCoutFileName(), and SetCoutFileName().

◆ Reset()

void G4MTcoutDestination::Reset ( )
virtual

Definition at line 140 of file G4MTcoutDestination.cc.

141{
142 clear();
143 SetDefaultOutput(masterDestinationFlag, masterDestinationFmtFlag);
144}

Referenced by EnableBuffering(), SetCerrFileName(), and SetCoutFileName().

◆ SetCerrFileName()

void G4MTcoutDestination::SetCerrFileName ( const G4String fileN = "G4cerr.txt",
G4bool  ifAppend = true 
)

Definition at line 247 of file G4MTcoutDestination.cc.

249{
250 // See SetCoutFileName for explanation
251 Reset();
252 if(fileN != "**Screen**")
253 {
254 HandleFileCerr(fileN, ifAppend, true);
255 }
256}

Referenced by G4UImanager::SetCerrFileName().

◆ SetCoutFileName()

void G4MTcoutDestination::SetCoutFileName ( const G4String fileN = "G4cout.txt",
G4bool  ifAppend = true 
)

Definition at line 195 of file G4MTcoutDestination.cc.

197{
198 // First let's go back to the default
199 Reset();
200 if(fileN != "**Screen**")
201 {
202 HandleFileCout(fileN, ifAppend, true);
203 }
204}

Referenced by G4UImanager::SetCoutFileName().

◆ SetDefaultOutput()

void G4MTcoutDestination::SetDefaultOutput ( G4bool  addMasterDestination = true,
G4bool  formatAlsoMaster = true 
)

Definition at line 61 of file G4MTcoutDestination.cc.

63{
64 masterDestinationFlag = addmasterDestination;
65 masterDestinationFmtFlag = formatAlsoMaster;
66 // Formatter: add prefix to each thread
67 const auto f = [this](G4String& msg) -> G4bool {
68 std::ostringstream str;
69 str << prefix;
71 {
72 str << id;
73 }
74 str << " > " << msg;
75 msg = str.str();
76 return true;
77 };
78 // Block cout if not in correct state
79 const auto filter_out = [this](G4String&) -> G4bool {
80 return !(
81 this->ignoreCout ||
82 (this->ignoreInit && this->stateMgr->GetCurrentState() == G4State_Init));
83 };
84
85 // Default behavior, add a destination that uses cout and uses a mutex
87 ref_defaultOut = output.get();
88 output->AddCoutTransformer(filter_out);
89 output->AddCoutTransformer(f);
90 output->AddCerrTransformer(f);
91 push_back(std::move(output));
92 if(addmasterDestination)
93 {
94 AddMasterOutput(formatAlsoMaster);
95 }
96}
@ G4State_Init
void AddMasterOutput(G4bool formatAlsoMaster)

Referenced by G4MTcoutDestination(), and Reset().

◆ SetIgnoreCout()

void G4MTcoutDestination::SetIgnoreCout ( G4int  tid = 0)

Definition at line 266 of file G4MTcoutDestination.cc.

267{
268 if(tid < 0)
269 {
270 ignoreCout = false;
271 }
272 else
273 {
274 ignoreCout = (tid != id);
275 }
276}

Referenced by G4UImanager::SetThreadIgnore(), G4UImanager::SetUpForAThread(), and G4UImanager::SetUpForSpecialThread().

◆ SetIgnoreInit()

void G4MTcoutDestination::SetIgnoreInit ( G4bool  val = true)
inline

Definition at line 70 of file G4MTcoutDestination.hh.

70{ ignoreInit = val; }

Referenced by G4UImanager::SetThreadIgnoreInit().

◆ SetPrefixString()

void G4MTcoutDestination::SetPrefixString ( const G4String wd = "G4WT")
inline

The documentation for this class was generated from the following files: