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
G4LocalThreadCoutMessenger.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// G4LocalThreadCoutMessenger
27//
28// Author: M.Asai, 2013
29// --------------------------------------------------------------------
30
32
33#include "G4UImanager.hh"
34
35#include "G4UIdirectory.hh"
36#include "G4UIcommand.hh"
37#include "G4UIcmdWithABool.hh"
38#include "G4UIcmdWithAString.hh"
40#include "G4UIparameter.hh"
41#include "G4Tokenizer.hh"
42
43// --------------------------------------------------------------------
45{
46 coutDir = new G4UIdirectory("/control/cout/");
47 coutDir->SetGuidance("Control cout/cerr for local thread.");
48
49 coutFileNameCmd = new G4UIcommand("/control/cout/setCoutFile", this);
50 coutFileNameCmd->SetGuidance(
51 "Send G4cout stream to a file dedicated to a thread. ");
52 coutFileNameCmd->SetGuidance(
53 "To have a display output, use special keyword \"**Screen**\".");
54 coutFileNameCmd->SetGuidance(
55 "If append flag is true output is appended to file,");
56 coutFileNameCmd->SetGuidance("otherwise file output is overwritten.");
58 auto* pp = new G4UIparameter("fileName", 's', true);
59 pp->SetDefaultValue("**Screen**");
60 coutFileNameCmd->SetParameter(pp);
61 pp = new G4UIparameter("append", 'b', true);
62 pp->SetDefaultValue(1);
63 coutFileNameCmd->SetParameter(pp);
64
65 cerrFileNameCmd = new G4UIcommand("/control/cout/setCerrFile", this);
66 cerrFileNameCmd->SetGuidance(
67 "Send G4cerr stream to a file dedicated to a thread. ");
68 cerrFileNameCmd->SetGuidance(
69 "To have a display output, use special keyword \"**Screen**\".");
70 cerrFileNameCmd->SetGuidance(
71 "If append flag is true output is appended to file,");
72 cerrFileNameCmd->SetGuidance("otherwise file output is overwritten.");
74 pp = new G4UIparameter("fileName", 's', true);
75 pp->SetDefaultValue("**Screen**");
76 cerrFileNameCmd->SetParameter(pp);
77 pp = new G4UIparameter("append", 'b', true);
78 pp->SetDefaultValue(1);
79 cerrFileNameCmd->SetParameter(pp);
80
81 bufferCoutCmd = new G4UIcmdWithABool("/control/cout/useBuffer", this);
82 bufferCoutCmd->SetGuidance("Send cout and/or cerr stream to a buffer.");
83 bufferCoutCmd->SetGuidance(
84 "The buffered text will be printed at the end of the job");
85 bufferCoutCmd->SetGuidance(
86 "for each thread at a time, so that output of each thread is grouped.");
87 bufferCoutCmd->SetGuidance(
88 "This command has no effect if output goes to a file.");
89 bufferCoutCmd->SetParameterName("flag", true);
90 bufferCoutCmd->SetDefaultValue(true);
92
93 prefixCmd = new G4UIcmdWithAString("/control/cout/prefixString", this);
94 prefixCmd->SetGuidance(
95 "Set the prefix string for each cout/cerr line from a thread.");
96 prefixCmd->SetParameterName("prefix", true);
97 prefixCmd->SetDefaultValue("G4WT");
99
100 ignoreCmd =
101 new G4UIcmdWithAnInteger("/control/cout/ignoreThreadsExcept", this);
102 ignoreCmd->SetGuidance("Omit cout from threads except the specified one.");
103 ignoreCmd->SetGuidance("This command takes effect only if cout destination "
104 "is screen without buffering.");
105 ignoreCmd->SetGuidance(
106 "If specified thread ID is greater than the number of threads,");
107 ignoreCmd->SetGuidance(
108 "no cout is displayed from worker threads. -1 to reset.");
109 ignoreCmd->SetGuidance("This command does not affect to cerr.");
110 ignoreCmd->SetParameterName("threadID", true);
111 ignoreCmd->SetDefaultValue(0);
113
114 ignoreInitCmd =
115 new G4UIcmdWithABool("/control/cout/ignoreInitializationCout", this);
116 ignoreInitCmd->SetGuidance("Omit cout from threads during initialization, as "
117 "they should be identical to the master thread.");
118 ignoreInitCmd->SetGuidance("This command takes effect only if cout "
119 "destination is screen without buffering.");
120 ignoreInitCmd->SetGuidance("This command does not affect to cerr.");
121 ignoreInitCmd->SetParameterName("IgnoreInit", true);
122 ignoreInitCmd->SetDefaultValue(true);
124}
125
126// --------------------------------------------------------------------
128{
129 delete coutFileNameCmd;
130 delete cerrFileNameCmd;
131 delete bufferCoutCmd;
132 delete prefixCmd;
133 delete ignoreCmd;
134 delete ignoreInitCmd;
135 delete coutDir;
136}
137
138// --------------------------------------------------------------------
140 G4String newVal)
141{
143 if(command == coutFileNameCmd)
144 {
145 G4Tokenizer next(newVal);
146 G4String fn = next();
147 G4bool af = StoB(next());
148 UI->SetCoutFileName(fn, af);
149 }
150 else if(command == cerrFileNameCmd)
151 {
152 G4Tokenizer next(newVal);
153 G4String fn = next();
154 G4bool af = StoB(next());
155 UI->SetCerrFileName(fn, af);
156 }
157 else if(command == bufferCoutCmd)
158 {
159 UI->SetThreadUseBuffer(StoB(newVal));
160 }
161 else if(command == prefixCmd)
162 {
163 UI->SetThreadPrefixString(newVal);
164 }
165 else if(command == ignoreCmd)
166 {
167 UI->SetThreadIgnore(StoI(newVal));
168 }
169 else if(command == ignoreInitCmd)
170 {
171 UI->SetThreadIgnoreInit(StoB(newVal));
172 }
173}
@ G4State_Idle
@ G4State_PreInit
bool G4bool
Definition: G4Types.hh:86
void SetNewValue(G4UIcommand *, G4String) override
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(G4bool defVal)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(const char *defVal)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(G4int defVal)
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:147
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:157
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:287
void SetCerrFileName(const G4String &fileN="G4cerr.txt", G4bool ifAppend=true)
Definition: G4UImanager.cc:925
void SetThreadIgnoreInit(G4bool flg=true)
Definition: G4UImanager.cc:980
void SetThreadPrefixString(const G4String &prefix="W")
Definition: G4UImanager.cc:946
void SetCoutFileName(const G4String &fileN="G4cout.txt", G4bool ifAppend=true)
Definition: G4UImanager.cc:904
void SetThreadIgnore(G4int tid=0)
Definition: G4UImanager.cc:968
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:77
void SetThreadUseBuffer(G4bool flg=true)
Definition: G4UImanager.cc:957
G4bool StoB(G4String s)
G4int StoI(const G4String &s)