Geant4 10.7.0
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)
 
virtual ~G4MTcoutDestination ()
 
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
 
virtual ~G4MulticoutDestination ()
 
virtual G4int ReceiveG4cout (const G4String &msg) override
 
virtual G4int ReceiveG4cerr (const G4String &msg) override
 
- Public Member Functions inherited from G4coutDestination
 G4coutDestination ()=default
 
virtual ~G4coutDestination ()
 
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 (G4String fileN, G4bool appendFlag, G4bool suppressDefault)
 
void HandleFileCerr (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 48 of file G4MTcoutDestination.cc.

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

◆ ~G4MTcoutDestination()

G4MTcoutDestination::~G4MTcoutDestination ( )
virtual

Definition at line 132 of file G4MTcoutDestination.cc.

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

Member Function Documentation

◆ AddCerrFileName()

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

Definition at line 254 of file G4MTcoutDestination.cc.

256{
257 HandleFileCerr(fileN, ifAppend, false);
258}
void HandleFileCerr(G4String fileN, G4bool appendFlag, G4bool suppressDefault)

◆ AddCoutFileName()

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

Definition at line 233 of file G4MTcoutDestination.cc.

235{
236 // This is like the equivalent SetCoutFileName, but in this case we do not
237 // remove or silence what is already exisiting
238 HandleFileCout(fileN, ifAppend, false);
239}
void HandleFileCout(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 if(this->ignoreCout ||
106 (this->ignoreInit && this->stateMgr->GetCurrentState() == G4State_Idle))
107 {
108 return false;
109 }
110 return true;
111 };
112 forwarder->AddCoutTransformer(filter_out);
113 if(formatAlsoMaster)
114 {
115 // Formatter: add prefix to each thread
116 const auto f = [this](G4String& msg) -> G4bool {
117 std::ostringstream str;
118 str << prefix;
120 str << id;
121 str << " > " << msg;
122 msg = str.str();
123 return true;
124 };
125 forwarder->AddCoutTransformer(f);
126 forwarder->AddCerrTransformer(f);
127 }
128 push_back(std::move(forwarder));
129}
@ 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 202 of file G4MTcoutDestination.cc.

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

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 ( G4String  fileN,
G4bool  appendFlag,
G4bool  suppressDefault 
)
protected

Definition at line 171 of file G4MTcoutDestination.cc.

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

Referenced by AddCerrFileName(), and SetCerrFileName().

◆ HandleFileCout()

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

Definition at line 146 of file G4MTcoutDestination.cc.

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

Referenced by AddCoutFileName(), and SetCoutFileName().

◆ Reset()

void G4MTcoutDestination::Reset ( )
virtual

Definition at line 139 of file G4MTcoutDestination.cc.

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

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

◆ SetCerrFileName()

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

Definition at line 242 of file G4MTcoutDestination.cc.

244{
245 // See SetCoutFileName for explanation
246 Reset();
247 if(fileN != "**Screen**")
248 {
249 HandleFileCerr(fileN, ifAppend, true);
250 }
251}

Referenced by G4UImanager::SetCerrFileName().

◆ SetCoutFileName()

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

Definition at line 190 of file G4MTcoutDestination.cc.

192{
193 // First let's go back to the default
194 Reset();
195 if(fileN != "**Screen**")
196 {
197 HandleFileCout(fileN, ifAppend, true);
198 }
199}

Referenced by G4UImanager::SetCoutFileName().

◆ SetDefaultOutput()

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

Definition at line 60 of file G4MTcoutDestination.cc.

62{
63 masterDestinationFlag = addmasterDestination;
64 masterDestinationFmtFlag = formatAlsoMaster;
65 // Formatter: add prefix to each thread
66 const auto f = [this](G4String& msg) -> G4bool {
67 std::ostringstream str;
68 str << prefix;
70 str << id;
71 str << " > " << msg;
72 msg = str.str();
73 return true;
74 };
75 // Block cout if not in correct state
76 const auto filter_out = [this](G4String&) -> G4bool {
77 if(this->ignoreCout ||
78 (this->ignoreInit && this->stateMgr->GetCurrentState() == G4State_Init))
79 {
80 return false;
81 }
82 return true;
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 261 of file G4MTcoutDestination.cc.

262{
263 if(tid < 0)
264 {
265 ignoreCout = false;
266 }
267 else
268 {
269 ignoreCout = (tid != id);
270 }
271}

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: