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 // G4ProcessTableMessenger class implementatio << 27 // 26 // 28 // Author: H.Kurashige, 15 August 1998 << 27 // $Id: G4ProcessTableMessenger.cc 92125 2015-08-18 14:35:23Z gcosmo $ 29 // ------------------------------------------- << 28 // >> 29 // >> 30 //--------------------------------------------------------------- >> 31 // >> 32 // G4ProcessTableMessenger.cc >> 33 // >> 34 // Description: >> 35 // This is a messenger class to interface to exchange information >> 36 // between ProcessTable and UI. >> 37 // >> 38 // >> 39 // History: >> 40 // 15 Aug. 1998, H. Kurashige >> 41 // Use STL vector instead of RW vector 1. Mar 00 H.Kurashige >> 42 // 02 June 2006, add physicsModified in activate/inactivate (mma) >> 43 // >> 44 //--------------------------------------------------------------- 30 45 31 #include "G4ProcessTableMessenger.hh" 46 #include "G4ProcessTableMessenger.hh" 32 47 33 #include "G4UImanager.hh" 48 #include "G4UImanager.hh" 34 #include "G4UIdirectory.hh" 49 #include "G4UIdirectory.hh" 35 #include "G4UIcmdWithoutParameter.hh" 50 #include "G4UIcmdWithoutParameter.hh" 36 #include "G4UIcmdWithAnInteger.hh" 51 #include "G4UIcmdWithAnInteger.hh" 37 #include "G4UIcmdWithAString.hh" 52 #include "G4UIcmdWithAString.hh" 38 53 39 #include "G4VProcess.hh" 54 #include "G4VProcess.hh" 40 #include "G4ProcessManager.hh" 55 #include "G4ProcessManager.hh" 41 #include "G4ProcessTable.hh" 56 #include "G4ProcessTable.hh" 42 #include "G4ParticleTable.hh" 57 #include "G4ParticleTable.hh" 43 58 44 #include "G4ios.hh" 59 #include "G4ios.hh" 45 #include "G4Tokenizer.hh" 60 #include "G4Tokenizer.hh" 46 #include <iomanip> 61 #include <iomanip> 47 #include <sstream> 62 #include <sstream> 48 63 >> 64 ///////////////////////////////////////// 49 G4ThreadLocal G4int G4ProcessTableMessenger::N 65 G4ThreadLocal G4int G4ProcessTableMessenger::NumberOfProcessType = 10; 50 66 51 // ------------------------------------------- << 67 ////////////////////////// 52 G4ProcessTableMessenger::G4ProcessTableMesseng 68 G4ProcessTableMessenger::G4ProcessTableMessenger(G4ProcessTable* pTable) 53 : theProcessTable(pTable) << 69 :theProcessTable(pTable), >> 70 currentProcessTypeName("all"), >> 71 currentProcessName("all"), >> 72 currentParticleName("all") 54 { 73 { 55 // Command /particle/process << 74 //Commnad /particle/process 56 thisDirectory = new G4UIdirectory("/process/ 75 thisDirectory = new G4UIdirectory("/process/"); 57 thisDirectory->SetGuidance("Process Table co 76 thisDirectory->SetGuidance("Process Table control commands."); 58 77 59 // Command /particle/process/list << 78 >> 79 //Commnad /particle/process/list 60 listCmd = new G4UIcmdWithAString("/process/l 80 listCmd = new G4UIcmdWithAString("/process/list",this); 61 listCmd->SetGuidance("List up process names" 81 listCmd->SetGuidance("List up process names"); 62 listCmd->SetGuidance(" list [type] "); 82 listCmd->SetGuidance(" list [type] "); 63 listCmd->SetGuidance(" type: process type << 83 listCmd->SetGuidance(" type: process type [all:for all proceeses]"); 64 listCmd->SetParameterName("type", true); 84 listCmd->SetParameterName("type", true); 65 listCmd->SetDefaultValue("all"); 85 listCmd->SetDefaultValue("all"); 66 SetNumberOfProcessType(); 86 SetNumberOfProcessType(); 67 87 68 G4String candidates("all"); 88 G4String candidates("all"); 69 for (G4int idx = 0; idx < NumberOfProcessTyp << 89 for (G4int idx = 0; idx < NumberOfProcessType ; idx ++ ) { 70 { << 90 candidates += " " + 71 candidates += " " + G4VProcess::GetProcess << 91 G4VProcess::GetProcessTypeName(G4ProcessType(idx)); 72 } 92 } 73 listCmd->SetCandidates((const char*)(candida 93 listCmd->SetCandidates((const char*)(candidates)); 74 94 75 // Command /particle/process/verbose << 95 //Commnad /particle/process/verbose 76 verboseCmd = new G4UIcmdWithAnInteger("/proc 96 verboseCmd = new G4UIcmdWithAnInteger("/process/verbose",this); 77 verboseCmd->SetGuidance("Set Verbose Level f 97 verboseCmd->SetGuidance("Set Verbose Level for Process Table"); 78 verboseCmd->SetGuidance(" verbose [level]") 98 verboseCmd->SetGuidance(" verbose [level]"); 79 verboseCmd->SetGuidance(" level: verbose l 99 verboseCmd->SetGuidance(" level: verbose level"); 80 verboseCmd->SetParameterName("verbose", true 100 verboseCmd->SetParameterName("verbose", true); 81 verboseCmd->SetDefaultValue(1); 101 verboseCmd->SetDefaultValue(1); 82 verboseCmd->SetRange("verbose >=0"); 102 verboseCmd->SetRange("verbose >=0"); 83 verboseCmd->AvailableForStates(G4State_PreIn 103 verboseCmd->AvailableForStates(G4State_PreInit,G4State_Init,G4State_Idle,G4State_GeomClosed,G4State_EventProc); 84 104 85 // Command /particle/process/setVerbose << 105 //Commnad /particle/process/setVerbose 86 procVerboseCmd = new G4UIcommand("/process/s 106 procVerboseCmd = new G4UIcommand("/process/setVerbose",this); 87 procVerboseCmd->SetGuidance("Set verbose lev 107 procVerboseCmd->SetGuidance("Set verbose level for processes"); 88 procVerboseCmd->SetGuidance(" setVerbose le 108 procVerboseCmd->SetGuidance(" setVerbose level [type or name] "); 89 procVerboseCmd->SetGuidance(" level: verb 109 procVerboseCmd->SetGuidance(" level: verbose level "); 90 procVerboseCmd->SetGuidance(" name : proc 110 procVerboseCmd->SetGuidance(" name : process name "); 91 procVerboseCmd->SetGuidance(" type : proc 111 procVerboseCmd->SetGuidance(" type : process type "); 92 procVerboseCmd->SetGuidance(" [all] fo << 112 procVerboseCmd->SetGuidance(" [all] for all proceeses "); 93 G4UIparameter* param = new G4UIparameter("ve 113 G4UIparameter* param = new G4UIparameter("verbose",'i',false); 94 procVerboseCmd->SetParameter(param); 114 procVerboseCmd->SetParameter(param); 95 param = new G4UIparameter("type",'s',true); 115 param = new G4UIparameter("type",'s',true); 96 param->SetDefaultValue("all"); 116 param->SetDefaultValue("all"); 97 procVerboseCmd->SetParameter(param); 117 procVerboseCmd->SetParameter(param); 98 procVerboseCmd->AvailableForStates(G4State_I 118 procVerboseCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc); 99 119 100 // Command /particle/process/dump << 120 //Commnad /particle/process/dump 101 dumpCmd = new G4UIcommand("/process/dump",th 121 dumpCmd = new G4UIcommand("/process/dump",this); 102 dumpCmd->SetGuidance("Dump process informati 122 dumpCmd->SetGuidance("Dump process information"); 103 dumpCmd->SetGuidance(" dump name [particle]" 123 dumpCmd->SetGuidance(" dump name [particle]"); 104 dumpCmd->SetGuidance(" name: process n 124 dumpCmd->SetGuidance(" name: process name or type name"); 105 dumpCmd->SetGuidance(" particle: particle 125 dumpCmd->SetGuidance(" particle: particle name [all: for all particles]"); 106 param = new G4UIparameter("procName",'s',fal 126 param = new G4UIparameter("procName",'s',false); 107 dumpCmd->SetParameter(param); 127 dumpCmd->SetParameter(param); 108 param = new G4UIparameter("particle",'s',tru 128 param = new G4UIparameter("particle",'s',true); 109 param->SetDefaultValue("all"); 129 param->SetDefaultValue("all"); 110 dumpCmd->SetParameter(param); 130 dumpCmd->SetParameter(param); 111 dumpCmd->AvailableForStates(G4State_Init,G4S 131 dumpCmd->AvailableForStates(G4State_Init,G4State_Idle,G4State_GeomClosed,G4State_EventProc); 112 132 113 // Command /process/activate << 133 //Commnad /particle/process/activate 114 activateCmd = new G4UIcommand("/process/acti 134 activateCmd = new G4UIcommand("/process/activate",this); 115 activateCmd->SetGuidance("Activate processes 135 activateCmd->SetGuidance("Activate processes "); 116 activateCmd->SetGuidance(" Activate name [p 136 activateCmd->SetGuidance(" Activate name [particle]"); 117 activateCmd->SetGuidance(" name: proce 137 activateCmd->SetGuidance(" name: process name or type name"); 118 activateCmd->SetGuidance(" particle: parti 138 activateCmd->SetGuidance(" particle: particle name [all: for all particles]"); 119 param = new G4UIparameter("procName",'s',fal 139 param = new G4UIparameter("procName",'s',false); 120 activateCmd->SetParameter(param); 140 activateCmd->SetParameter(param); 121 param = new G4UIparameter("particle",'s',tru 141 param = new G4UIparameter("particle",'s',true); 122 param->SetDefaultValue("all"); 142 param->SetDefaultValue("all"); 123 activateCmd->SetParameter(param); 143 activateCmd->SetParameter(param); 124 activateCmd->AvailableForStates(G4State_Idle << 144 activateCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc); 125 145 126 // Command /process/inactivate << 146 //Commnad /particle/process/inactivate 127 inactivateCmd = new G4UIcommand("/process/in 147 inactivateCmd = new G4UIcommand("/process/inactivate",this); 128 inactivateCmd->SetGuidance("Inactivate proce 148 inactivateCmd->SetGuidance("Inactivate process "); 129 inactivateCmd->SetGuidance("Inactivate proce 149 inactivateCmd->SetGuidance("Inactivate processes "); 130 inactivateCmd->SetGuidance(" Inactivate nam 150 inactivateCmd->SetGuidance(" Inactivate name [particle]"); 131 inactivateCmd->SetGuidance(" name: pro 151 inactivateCmd->SetGuidance(" name: process name or type name"); 132 inactivateCmd->SetGuidance(" particle: par 152 inactivateCmd->SetGuidance(" particle: particle name [all: for all particles]"); 133 param = new G4UIparameter("procName",'s',fal 153 param = new G4UIparameter("procName",'s',false); 134 inactivateCmd->SetParameter(param); 154 inactivateCmd->SetParameter(param); 135 param = new G4UIparameter("particle",'s',tru 155 param = new G4UIparameter("particle",'s',true); 136 param->SetDefaultValue("all"); 156 param->SetDefaultValue("all"); 137 inactivateCmd->SetParameter(param); 157 inactivateCmd->SetParameter(param); 138 inactivateCmd->AvailableForStates(G4State_Id << 158 inactivateCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc); 139 } 159 } 140 160 141 // ------------------------------------------- << 161 ////////////////// 142 G4ProcessTableMessenger::~G4ProcessTableMessen 162 G4ProcessTableMessenger::~G4ProcessTableMessenger() 143 { 163 { 144 delete activateCmd; 164 delete activateCmd; 145 delete inactivateCmd; 165 delete inactivateCmd; 146 delete verboseCmd; 166 delete verboseCmd; 147 delete dumpCmd; 167 delete dumpCmd; 148 delete listCmd; 168 delete listCmd; 149 delete procVerboseCmd; 169 delete procVerboseCmd; 150 delete thisDirectory; 170 delete thisDirectory; 151 } 171 } 152 172 153 // ------------------------------------------- << 173 /////////////// 154 void << 174 void G4ProcessTableMessenger::SetNewValue(G4UIcommand * command,G4String newValue) 155 G4ProcessTableMessenger::SetNewValue(G4UIcomma << 156 { 175 { 157 G4ProcessTable::G4ProcNameVector* procNameVe 176 G4ProcessTable::G4ProcNameVector* procNameVector 158 = theProcessTable->Ge 177 = theProcessTable->GetNameList(); >> 178 G4int idx; >> 179 159 G4int type = -1; 180 G4int type = -1; 160 G4ExceptionDescription ed; << 161 181 162 if( command == listCmd ) << 182 if( command == listCmd ){ 163 { << 183 //Commnad /process/list 164 // Command /process/list << 165 type = -1; 184 type = -1; 166 if (newValue == "all") << 185 if (newValue == "all") { 167 { << 186 currentProcessTypeName = newValue; 168 currentProcessTypeName = std::move(newVa << 187 } else { 169 } << 170 else << 171 { << 172 type = GetProcessType(newValue); 188 type = GetProcessType(newValue); 173 if (type <0) << 189 if (type <0) { 174 { << 190 G4cout << " illegal type !!! " << G4endl; 175 G4cout << " illegal type !!! " << G4en << 191 } else { 176 } << 192 currentProcessTypeName = newValue; 177 else << 178 { << 179 currentProcessTypeName = std::move(new << 180 } 193 } 181 } 194 } 182 G4int counter = 0; 195 G4int counter = 0; 183 for (auto itr=procNameVector->cbegin(); it << 196 idx =0; 184 { << 197 G4ProcessTable::G4ProcNameVector::iterator itr; >> 198 for (itr=procNameVector->begin(); itr!=procNameVector->end(); ++itr) { >> 199 idx +=1; 185 G4ProcessVector* tmpVector = theProcessT 200 G4ProcessVector* tmpVector = theProcessTable->FindProcesses(*itr); 186 if ( (type <0) || ( ((*tmpVector)(0)->Ge << 201 if ( (type <0) || ( ((*tmpVector)(0)->GetProcessType()) == type) ) { 187 { << 188 if ( counter%4 != 0) G4cout << ","; 202 if ( counter%4 != 0) G4cout << ","; 189 G4cout << std::setw(19) << *itr; << 203 G4cout << std::setw(19) <<*itr; 190 if ((counter++)%4 == 3) << 204 if ((counter++)%4 == 3) { 191 { << 192 G4cout << G4endl; 205 G4cout << G4endl; 193 } 206 } 194 } 207 } 195 delete tmpVector; 208 delete tmpVector; 196 } 209 } 197 G4cout << G4endl; 210 G4cout << G4endl; 198 } << 211 //Commnad /process/list 199 else if( command==procVerboseCmd ) << 212 200 { << 213 } else if( command==procVerboseCmd ) { 201 // Command /process/setVerbose << 214 //Commnad /process/setVerbose 202 G4Tokenizer next( newValue ); 215 G4Tokenizer next( newValue ); 203 216 204 // check 1st argument 217 // check 1st argument 205 G4String tmpS = G4String(next()); 218 G4String tmpS = G4String(next()); 206 // inputstream for newValues 219 // inputstream for newValues 207 const char* temp = (const char*)(tmpS); 220 const char* temp = (const char*)(tmpS); 208 std::istringstream is((char*)temp); 221 std::istringstream is((char*)temp); 209 G4int level; 222 G4int level; 210 is >>level; 223 is >>level; 211 224 212 // check 2nd argument 225 // check 2nd argument 213 currentProcessTypeName = G4String(next()); 226 currentProcessTypeName = G4String(next()); 214 if (currentProcessTypeName.empty()) curren << 227 if (currentProcessTypeName.isNull()) currentProcessTypeName = "all"; 215 G4bool isProcName = false; 228 G4bool isProcName = false; 216 G4bool isAll = false; 229 G4bool isAll = false; 217 type = -1; 230 type = -1; 218 231 219 if (currentProcessTypeName == "all") << 232 if (currentProcessTypeName == "all") { 220 { << 221 isAll = true; 233 isAll = true; 222 } << 234 } else { 223 else << 224 { << 225 type = GetProcessType(currentProcessTyp 235 type = GetProcessType(currentProcessTypeName); 226 if (type<0) << 236 if (type<0) { 227 { << 237 isProcName = true; 228 isProcName = true; << 238 currentProcessName = currentProcessTypeName; 229 currentProcessName = currentProcessTyp << 239 currentProcessTypeName = ""; 230 currentProcessTypeName = ""; << 231 } 240 } 232 } 241 } 233 for (auto itr=procNameVector->cbegin(); it << 242 idx =0; 234 { << 243 G4ProcessTable::G4ProcNameVector::iterator itr; >> 244 for (itr=procNameVector->begin(); itr!=procNameVector->end(); ++itr) { >> 245 idx +=1; 235 G4ProcessVector* tmpVector = theProcessT 246 G4ProcessVector* tmpVector = theProcessTable->FindProcesses(*itr); 236 G4VProcess* p = (*tmpVector)(0); 247 G4VProcess* p = (*tmpVector)(0); 237 if ( isAll || 248 if ( isAll || 238 (!isProcName && ( p->GetProcessType << 249 (!isProcName && ( p->GetProcessType() == type) ) || 239 ( isProcName && ( p->GetProcessName << 250 ( isProcName && ( p->GetProcessName()== currentProcessName) ) ){ 240 { << 251 p->SetVerboseLevel(level); 241 p->SetVerboseLevel(level); << 242 } 252 } 243 delete tmpVector; 253 delete tmpVector; 244 } 254 } 245 } << 255 //Commnad /process/setVerbose 246 else if( command==verboseCmd ) << 256 247 { << 257 } else if( command==verboseCmd ) { 248 // Command /process/verbose << 258 //Commnad /process/verbose 249 theProcessTable->SetVerboseLevel(verboseCm << 259 theProcessTable->SetVerboseLevel(verboseCmd->GetNewIntValue(newValue)); 250 } << 260 //Commnad /process/verbose 251 else << 261 252 { << 262 } else { 253 G4Tokenizer next( newValue ); 263 G4Tokenizer next( newValue ); 254 264 255 // check 1st argument 265 // check 1st argument 256 currentProcessName = G4String(next()); 266 currentProcessName = G4String(next()); 257 G4bool isProcName = false; 267 G4bool isProcName = false; 258 for (auto itr=procNameVector->cbegin(); it << 268 G4ProcessTable::G4ProcNameVector::iterator itr; 259 { << 269 for (itr=procNameVector->begin(); itr!=procNameVector->end(); ++itr) { 260 if ( (*itr) == currentProcessName ) << 270 if ( (*itr) == currentProcessName ) { 261 { << 271 isProcName = true; 262 isProcName = true; << 272 break; 263 break; << 264 } 273 } 265 } 274 } 266 if (!isProcName) << 275 if (!isProcName) { 267 { << 268 type = GetProcessType(currentProcessNam 276 type = GetProcessType(currentProcessName); 269 if (type <0 ) << 277 if (type <0 ) { 270 { << 278 // no processes with specifed name 271 // no processes with specified name << 279 G4cout << " illegal process (or type) name " << G4endl; 272 ed << " illegal process (or type) name << 280 currentProcessName = ""; 273 << currentProcessName << "]"; << 281 return; 274 command->CommandFailed(ed); << 275 currentProcessName = ""; << 276 return; << 277 } 282 } 278 } 283 } 279 284 280 // check 2nd argument 285 // check 2nd argument 281 currentParticleName = G4String(next()); 286 currentParticleName = G4String(next()); 282 G4bool isParticleFound = false; 287 G4bool isParticleFound = false; 283 G4ParticleDefinition* currentParticle = nu << 288 G4ParticleDefinition* currentParticle = 0; 284 if ( currentParticleName == "all" ) << 289 if ( currentParticleName == "all" ) { 285 { << 286 isParticleFound = true; 290 isParticleFound = true; 287 } << 291 288 else << 292 } else { 289 { << 293 isParticleFound = G4ParticleTable::GetParticleTable()->contains(currentParticleName); 290 isParticleFound = G4ParticleTable::GetPa << 294 if (isParticleFound) { 291 ->contains(currentPartic << 295 currentParticle = G4ParticleTable::GetParticleTable()->FindParticle(currentParticleName); 292 if (isParticleFound) << 293 { << 294 currentParticle = G4ParticleTable::Get << 295 ->FindParticle(current << 296 } 296 } >> 297 297 } 298 } 298 299 299 if ( !isParticleFound ) << 300 if ( !isParticleFound ) { 300 { << 301 // no particle with specifed name 301 // no particle with specified name << 302 G4cout << " illegal particle name " << G4endl; 302 ed << " illegal particle name [" << curr << 303 command->CommandFailed(ed); << 304 currentParticleName = ""; 303 currentParticleName = ""; 305 return; 304 return; 306 } 305 } 307 306 308 if( command==dumpCmd ) << 307 if( command==dumpCmd ) { 309 { << 310 // process/dump 308 // process/dump 311 G4ProcessVector* tmpVector; 309 G4ProcessVector* tmpVector; 312 if (isProcName) << 310 if (isProcName) { 313 { << 311 tmpVector = theProcessTable->FindProcesses(currentProcessName); 314 tmpVector = theProcessTable->FindProce << 312 } else { 315 } << 313 tmpVector = theProcessTable->FindProcesses(G4ProcessType(type)); 316 else << 317 { << 318 tmpVector = theProcessTable->FindProce << 319 } 314 } 320 for (G4int i=0; i<(G4int)tmpVector->leng << 315 for (G4int i=0; i<tmpVector->length(); i++) { 321 { << 316 theProcessTable->DumpInfo( (*tmpVector)(i), currentParticle ); 322 theProcessTable->DumpInfo( (*tmpVector << 323 } 317 } 324 delete tmpVector; 318 delete tmpVector; 325 } << 319 // process/dump 326 else if ( (command==activateCmd) || (comma << 320 327 { << 321 } else if ( (command==activateCmd) || (command==inactivateCmd)) { 328 // process/activate , inactivate 322 // process/activate , inactivate 329 G4bool fActive = (command==activateCmd); 323 G4bool fActive = (command==activateCmd); 330 if (isProcName) << 324 if (isProcName) { 331 { << 325 if ( currentParticle == 0 ) { 332 if ( currentParticle == nullptr ) << 326 theProcessTable->SetProcessActivation(currentProcessName, 333 { << 327 fActive); 334 theProcessTable->SetProcessActivatio << 328 } else { 335 << 329 theProcessTable->SetProcessActivation(currentProcessName, 336 } << 330 currentParticle, 337 else << 331 fActive); 338 { << 332 } 339 theProcessTable->SetProcessActivatio << 333 } else { 340 << 334 if ( currentParticle == 0 ) { 341 << 335 theProcessTable->SetProcessActivation(G4ProcessType(type), 342 } << 336 fActive); 343 } << 337 } else { 344 else << 338 theProcessTable->SetProcessActivation(G4ProcessType(type), 345 { << 339 currentParticle, 346 if ( currentParticle == nullptr ) << 340 fActive); 347 { << 341 } 348 theProcessTable->SetProcessActivatio << 349 << 350 } << 351 else << 352 { << 353 theProcessTable->SetProcessActivatio << 354 << 355 << 356 } << 357 } 342 } 358 G4UImanager::GetUIpointer()->ApplyComman 343 G4UImanager::GetUIpointer()->ApplyCommand("/run/physicsModified"); >> 344 // process/activate , inactivate 359 } 345 } 360 } 346 } 361 } 347 } 362 348 363 // ------------------------------------------- << 349 364 G4String G4ProcessTableMessenger::GetCurrentVa << 350 ////////////////// >> 351 G4String G4ProcessTableMessenger::GetCurrentValue(G4UIcommand * command) 365 { 352 { 366 if( command==verboseCmd ) << 353 if( command==verboseCmd ){ 367 { << 354 //Commnad /process/verbose 368 // Command /process/verbose << 369 return verboseCmd->ConvertToString(theProc 355 return verboseCmd->ConvertToString(theProcessTable->GetVerboseLevel()); 370 } << 356 371 else if ( command==listCmd ) << 357 } else if ( command==listCmd ){ 372 { << 358 //Commnad /process/list 373 // Command /process/list << 374 return currentProcessTypeName; 359 return currentProcessTypeName; 375 } << 360 376 else << 361 } else { 377 { << 362 //Commnad /process/dump, activate, inactivate 378 // Command /process/dump, activate, inac << 379 return (currentProcessName + " " + curre 363 return (currentProcessName + " " + currentParticleName); >> 364 380 } 365 } 381 366 382 return ""; 367 return ""; 383 } 368 } 384 369 385 // ------------------------------------------- << 370 ///////////////// 386 G4String G4ProcessTableMessenger::GetProcessTy 371 G4String G4ProcessTableMessenger::GetProcessTypeName(G4ProcessType aType) const 387 { 372 { 388 return G4VProcess::GetProcessTypeName(aType) 373 return G4VProcess::GetProcessTypeName(aType); 389 } 374 } 390 375 391 // ------------------------------------------- << 376 ///////////////// 392 G4int G4ProcessTableMessenger::GetProcessType( 377 G4int G4ProcessTableMessenger::GetProcessType(const G4String& aTypeName) const 393 { 378 { 394 G4int type = -1; 379 G4int type = -1; 395 for (G4int idx = 0; idx < NumberOfProcessTyp << 380 for (G4int idx = 0; idx < NumberOfProcessType ; idx ++ ) { 396 { << 381 if (aTypeName == G4VProcess::GetProcessTypeName(G4ProcessType(idx)) ) { 397 if (aTypeName == G4VProcess::GetProcessTyp << 398 { << 399 type = idx; 382 type = idx; 400 break; 383 break; 401 } 384 } 402 } 385 } 403 return type; 386 return type; 404 } 387 } 405 388 406 // ------------------------------------------- << 389 >> 390 ///////////////// 407 void G4ProcessTableMessenger::SetNumberOfProce 391 void G4ProcessTableMessenger::SetNumberOfProcessType() 408 { 392 { 409 G4bool isFoundEndMark = false; 393 G4bool isFoundEndMark = false; 410 G4int idx; 394 G4int idx; 411 for (idx = 0; idx < 1000 ; ++idx ) << 395 for (idx = 0; idx < 1000 ; idx ++ ) { 412 { << 413 G4String typeName = G4VProcess::GetProcess 396 G4String typeName = G4VProcess::GetProcessTypeName(G4ProcessType(idx)); 414 isFoundEndMark = G4StrUtil::contains(typeN << 397 isFoundEndMark = typeName.contains("---"); 415 if ( isFoundEndMark ) break; 398 if ( isFoundEndMark ) break; 416 } 399 } 417 if ( isFoundEndMark ) << 400 if ( isFoundEndMark ) { 418 { << 419 NumberOfProcessType = idx; 401 NumberOfProcessType = idx; 420 } << 402 } else { 421 else << 403 G4Exception("G4ProcessTableMessenger::SetNumberOfProcessType()","ProcMan014", 422 { << 404 FatalException,"No End Mark"); 423 G4Exception("G4ProcessTableMessenger::SetN << 424 "ProcMan014", FatalException, << 425 } 405 } 426 } 406 } >> 407 >> 408 >> 409 >> 410 427 411