Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // G4LocalThreadCoutMessenger 26 // G4LocalThreadCoutMessenger 27 // 27 // 28 // Author: M.Asai, 2013 28 // Author: M.Asai, 2013 29 // ------------------------------------------- 29 // -------------------------------------------------------------------- 30 30 31 #include "G4LocalThreadCoutMessenger.hh" 31 #include "G4LocalThreadCoutMessenger.hh" 32 32 33 #include "G4Tokenizer.hh" << 33 #include "G4UImanager.hh" >> 34 >> 35 #include "G4UIdirectory.hh" >> 36 #include "G4UIcommand.hh" 34 #include "G4UIcmdWithABool.hh" 37 #include "G4UIcmdWithABool.hh" 35 #include "G4UIcmdWithAString.hh" 38 #include "G4UIcmdWithAString.hh" 36 #include "G4UIcmdWithAnInteger.hh" 39 #include "G4UIcmdWithAnInteger.hh" 37 #include "G4UIcommand.hh" << 38 #include "G4UIdirectory.hh" << 39 #include "G4UImanager.hh" << 40 #include "G4UIparameter.hh" 40 #include "G4UIparameter.hh" >> 41 #include "G4Tokenizer.hh" 41 42 42 // ------------------------------------------- 43 // -------------------------------------------------------------------- 43 G4LocalThreadCoutMessenger::G4LocalThreadCoutM 44 G4LocalThreadCoutMessenger::G4LocalThreadCoutMessenger() 44 { 45 { 45 coutDir = new G4UIdirectory("/control/cout/" 46 coutDir = new G4UIdirectory("/control/cout/"); 46 coutDir->SetGuidance("Control cout/cerr for 47 coutDir->SetGuidance("Control cout/cerr for local thread."); 47 48 48 coutFileNameCmd = new G4UIcommand("/control/ 49 coutFileNameCmd = new G4UIcommand("/control/cout/setCoutFile", this); 49 coutFileNameCmd->SetGuidance("Send G4cout st << 50 coutFileNameCmd->SetGuidance( 50 coutFileNameCmd->SetGuidance("To have a disp << 51 "Send G4cout stream to a file dedicated to a thread. "); 51 coutFileNameCmd->SetGuidance("If append flag << 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,"); 52 coutFileNameCmd->SetGuidance("otherwise file 56 coutFileNameCmd->SetGuidance("otherwise file output is overwritten."); 53 coutFileNameCmd->AvailableForStates(G4State_ 57 coutFileNameCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 54 auto* pp = new G4UIparameter("fileName", 's' 58 auto* pp = new G4UIparameter("fileName", 's', true); 55 pp->SetDefaultValue("**Screen**"); 59 pp->SetDefaultValue("**Screen**"); 56 coutFileNameCmd->SetParameter(pp); 60 coutFileNameCmd->SetParameter(pp); 57 pp = new G4UIparameter("append", 'b', true); 61 pp = new G4UIparameter("append", 'b', true); 58 pp->SetDefaultValue(1); 62 pp->SetDefaultValue(1); 59 coutFileNameCmd->SetParameter(pp); 63 coutFileNameCmd->SetParameter(pp); 60 64 61 cerrFileNameCmd = new G4UIcommand("/control/ 65 cerrFileNameCmd = new G4UIcommand("/control/cout/setCerrFile", this); 62 cerrFileNameCmd->SetGuidance("Send G4cerr st << 66 cerrFileNameCmd->SetGuidance( 63 cerrFileNameCmd->SetGuidance("To have a disp << 67 "Send G4cerr stream to a file dedicated to a thread. "); 64 cerrFileNameCmd->SetGuidance("If append flag << 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,"); 65 cerrFileNameCmd->SetGuidance("otherwise file 72 cerrFileNameCmd->SetGuidance("otherwise file output is overwritten."); 66 cerrFileNameCmd->AvailableForStates(G4State_ 73 cerrFileNameCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 67 pp = new G4UIparameter("fileName", 's', true 74 pp = new G4UIparameter("fileName", 's', true); 68 pp->SetDefaultValue("**Screen**"); 75 pp->SetDefaultValue("**Screen**"); 69 cerrFileNameCmd->SetParameter(pp); 76 cerrFileNameCmd->SetParameter(pp); 70 pp = new G4UIparameter("append", 'b', true); 77 pp = new G4UIparameter("append", 'b', true); 71 pp->SetDefaultValue(1); 78 pp->SetDefaultValue(1); 72 cerrFileNameCmd->SetParameter(pp); 79 cerrFileNameCmd->SetParameter(pp); 73 80 74 bufferCoutCmd = new G4UIcmdWithABool("/contr 81 bufferCoutCmd = new G4UIcmdWithABool("/control/cout/useBuffer", this); 75 bufferCoutCmd->SetGuidance("Send cout and/or 82 bufferCoutCmd->SetGuidance("Send cout and/or cerr stream to a buffer."); 76 bufferCoutCmd->SetGuidance("The buffered tex << 83 bufferCoutCmd->SetGuidance( >> 84 "The buffered text will be printed at the end of the job"); 77 bufferCoutCmd->SetGuidance( 85 bufferCoutCmd->SetGuidance( 78 "for each thread at a time, so that output 86 "for each thread at a time, so that output of each thread is grouped."); 79 bufferCoutCmd->SetGuidance("This command has << 87 bufferCoutCmd->SetGuidance( >> 88 "This command has no effect if output goes to a file."); 80 bufferCoutCmd->SetParameterName("flag", true 89 bufferCoutCmd->SetParameterName("flag", true); 81 bufferCoutCmd->SetDefaultValue(true); 90 bufferCoutCmd->SetDefaultValue(true); 82 bufferCoutCmd->AvailableForStates(G4State_Pr 91 bufferCoutCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 83 92 84 prefixCmd = new G4UIcmdWithAString("/control 93 prefixCmd = new G4UIcmdWithAString("/control/cout/prefixString", this); 85 prefixCmd->SetGuidance("Set the prefix strin << 94 prefixCmd->SetGuidance( >> 95 "Set the prefix string for each cout/cerr line from a thread."); 86 prefixCmd->SetParameterName("prefix", true); 96 prefixCmd->SetParameterName("prefix", true); 87 prefixCmd->SetDefaultValue("G4WT"); 97 prefixCmd->SetDefaultValue("G4WT"); 88 prefixCmd->AvailableForStates(G4State_PreIni 98 prefixCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 89 99 90 ignoreCmd = new G4UIcmdWithAnInteger("/contr << 100 ignoreCmd = >> 101 new G4UIcmdWithAnInteger("/control/cout/ignoreThreadsExcept", this); 91 ignoreCmd->SetGuidance("Omit cout from threa 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,"); 92 ignoreCmd->SetGuidance( 107 ignoreCmd->SetGuidance( 93 "This command takes effect only if cout de << 108 "no cout is displayed from worker threads. -1 to reset."); 94 "is screen without buffering."); << 95 ignoreCmd->SetGuidance("If specified thread << 96 ignoreCmd->SetGuidance("no cout is displayed << 97 ignoreCmd->SetGuidance("This command does no 109 ignoreCmd->SetGuidance("This command does not affect to cerr."); 98 ignoreCmd->SetParameterName("threadID", true 110 ignoreCmd->SetParameterName("threadID", true); 99 ignoreCmd->SetDefaultValue(0); 111 ignoreCmd->SetDefaultValue(0); 100 ignoreCmd->AvailableForStates(G4State_PreIni 112 ignoreCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 101 113 102 ignoreInitCmd = new G4UIcmdWithABool("/contr << 114 ignoreInitCmd = 103 ignoreInitCmd->SetGuidance( << 115 new G4UIcmdWithABool("/control/cout/ignoreInitializationCout", this); 104 "Omit cout from threads during initializat << 116 ignoreInitCmd->SetGuidance("Omit cout from threads during initialization, as " 105 "they should be identical to the master th << 117 "they should be identical to the master thread."); 106 ignoreInitCmd->SetGuidance( << 118 ignoreInitCmd->SetGuidance("This command takes effect only if cout " 107 "This command takes effect only if cout " << 119 "destination is screen without buffering."); 108 "destination is screen without buffering." << 109 ignoreInitCmd->SetGuidance("This command doe 120 ignoreInitCmd->SetGuidance("This command does not affect to cerr."); 110 ignoreInitCmd->SetParameterName("IgnoreInit" 121 ignoreInitCmd->SetParameterName("IgnoreInit", true); 111 ignoreInitCmd->SetDefaultValue(true); 122 ignoreInitCmd->SetDefaultValue(true); 112 ignoreInitCmd->AvailableForStates(G4State_Pr 123 ignoreInitCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 113 } 124 } 114 125 115 // ------------------------------------------- 126 // -------------------------------------------------------------------- 116 G4LocalThreadCoutMessenger::~G4LocalThreadCout 127 G4LocalThreadCoutMessenger::~G4LocalThreadCoutMessenger() 117 { 128 { 118 delete coutFileNameCmd; 129 delete coutFileNameCmd; 119 delete cerrFileNameCmd; 130 delete cerrFileNameCmd; 120 delete bufferCoutCmd; 131 delete bufferCoutCmd; 121 delete prefixCmd; 132 delete prefixCmd; 122 delete ignoreCmd; 133 delete ignoreCmd; 123 delete ignoreInitCmd; 134 delete ignoreInitCmd; 124 delete coutDir; 135 delete coutDir; 125 } 136 } 126 137 127 // ------------------------------------------- 138 // -------------------------------------------------------------------- 128 void G4LocalThreadCoutMessenger::SetNewValue(G << 139 void G4LocalThreadCoutMessenger::SetNewValue(G4UIcommand* command, >> 140 G4String newVal) 129 { 141 { 130 G4UImanager* UI = G4UImanager::GetUIpointer( 142 G4UImanager* UI = G4UImanager::GetUIpointer(); 131 if (command == coutFileNameCmd) { << 143 if(command == coutFileNameCmd) >> 144 { 132 G4Tokenizer next(newVal); 145 G4Tokenizer next(newVal); 133 G4String fn = next(); 146 G4String fn = next(); 134 G4bool af = StoB(next()); << 147 G4bool af = StoB(next()); 135 UI->SetCoutFileName(fn, af); 148 UI->SetCoutFileName(fn, af); 136 } 149 } 137 else if (command == cerrFileNameCmd) { << 150 else if(command == cerrFileNameCmd) >> 151 { 138 G4Tokenizer next(newVal); 152 G4Tokenizer next(newVal); 139 G4String fn = next(); 153 G4String fn = next(); 140 G4bool af = StoB(next()); << 154 G4bool af = StoB(next()); 141 UI->SetCerrFileName(fn, af); 155 UI->SetCerrFileName(fn, af); 142 } 156 } 143 else if (command == bufferCoutCmd) { << 157 else if(command == bufferCoutCmd) >> 158 { 144 UI->SetThreadUseBuffer(StoB(newVal)); 159 UI->SetThreadUseBuffer(StoB(newVal)); 145 } 160 } 146 else if (command == prefixCmd) { << 161 else if(command == prefixCmd) >> 162 { 147 UI->SetThreadPrefixString(newVal); 163 UI->SetThreadPrefixString(newVal); 148 } 164 } 149 else if (command == ignoreCmd) { << 165 else if(command == ignoreCmd) >> 166 { 150 UI->SetThreadIgnore(StoI(newVal)); 167 UI->SetThreadIgnore(StoI(newVal)); 151 } 168 } 152 else if (command == ignoreInitCmd) { << 169 else if(command == ignoreInitCmd) >> 170 { 153 UI->SetThreadIgnoreInit(StoB(newVal)); 171 UI->SetThreadIgnoreInit(StoB(newVal)); 154 } 172 } 155 } 173 } 156 174