source: trunk/source/processes/management/src/G4ProcessManagerMessenger.cc@ 1347

Last change on this file since 1347 was 1337, checked in by garnier, 15 years ago

tag geant4.9.4 beta 1 + modifs locales

File size: 8.2 KB
RevLine 
[819]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//
27// $Id: G4ProcessManagerMessenger.cc,v 1.10 2006/06/29 21:08:12 gunter Exp $
[1337]28// GEANT4 tag $Name: geant4-09-04-beta-01 $
[819]29//
30//
31//---------------------------------------------------------------
32//
33// G4ProcessManagerMessenger.cc
34//
35// Description:
36// This is a messenger class to interface to exchange information
37// between ProcessManagerand UI.
38//
39// History:
40// 13 June 1997, H. Kurashige : The 1st version created.
41// 10 Nov. 1997 H. Kurashige : fixed bugs
42// 08 jan. 1998 H. Kurashige : new UIcommnds
43// 02 June 2006 M. Maire : add physicsModified in activate/inactivate
44//
45//---------------------------------------------------------------
46
47
48#include "G4UImanager.hh"
49#include "G4UIdirectory.hh"
50#include "G4UIcmdWithoutParameter.hh"
51#include "G4UIcmdWithAnInteger.hh"
52
53#include "G4VProcess.hh"
54#include "G4ProcessManager.hh"
55#include "G4ParticleTable.hh"
56
57#include "G4ProcessManagerMessenger.hh"
58#include "G4ios.hh" // Include from 'system'
59#include <iomanip> // Include from 'system'
60
61#include <sstream>
62
63G4ProcessManagerMessenger::G4ProcessManagerMessenger(G4ParticleTable* pTable)
64 :theParticleTable(pTable),
65 currentParticle(0),
66 currentProcess(0),
67 theManager(0),
68 theProcessList(0)
69{
70 if ( theParticleTable == 0) theParticleTable = G4ParticleTable::GetParticleTable();
71
72 //Commnad /particle/process
73 thisDirectory = new G4UIdirectory("/particle/process/");
74 thisDirectory->SetGuidance("Process Manager control commands.");
75
76 //Commnad /particle/process/dump
77 dumpCmd = new G4UIcmdWithAnInteger("/particle/process/dump",this);
78 dumpCmd->SetGuidance("dump process manager or process information");
79 dumpCmd->SetGuidance(" dump [process index]");
80 dumpCmd->SetGuidance(" process index: -1 for process manager");
81 dumpCmd->SetParameterName("index", true);
82 dumpCmd->SetDefaultValue(-1);
83
84 //Commnad /particle/process/Verbose
85 verboseCmd = new G4UIcommand("/particle/process/verbose",this);
86 verboseCmd->SetGuidance("Set Verbose Level for Process or Process Manager");
87 verboseCmd->SetGuidance(" Verbose [Verbose] [process index]");
88 verboseCmd->SetGuidance(" process index: -1 for process manager");
89 G4UIparameter* param = new G4UIparameter("Verbose",'i',true);
90 param->SetDefaultValue(1);
91 verboseCmd->SetParameter(param);
92 param = new G4UIparameter("index",'i',true);
93 param->SetDefaultValue(-1);
94 verboseCmd->SetParameter(param);
95 verboseCmd->AvailableForStates(G4State_PreInit,G4State_Init,G4State_Idle,G4State_GeomClosed,G4State_EventProc);
96
97 //Commnad /particle/process/Activate
98 activateCmd = new G4UIcmdWithAnInteger("/particle/process/activate",this);
99 activateCmd->SetGuidance("Activate process ");
100 activateCmd->SetGuidance(" Activate [process index]");
101 activateCmd->SetParameterName("index", false);
102 activateCmd->SetDefaultValue(0);
103 activateCmd->SetRange("index >=0");
104 activateCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc);
105
106 //Commnad /particle/process/inactivate
107 inactivateCmd = new G4UIcmdWithAnInteger("/particle/process/inactivate",this);
108 inactivateCmd->SetGuidance("Inactivate process ");
109 inactivateCmd->SetGuidance(" inactivate [process index]");
110 inactivateCmd->SetParameterName("index", false);
111 inactivateCmd->SetDefaultValue(0);
112 inactivateCmd->SetRange("index >=0");
113 inactivateCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc);
114
115}
116
117G4ProcessManagerMessenger::~G4ProcessManagerMessenger()
118{
119 delete activateCmd;
120 delete inactivateCmd;
121 delete verboseCmd;
122 delete dumpCmd;
123 delete thisDirectory;
124}
125
126G4ParticleDefinition* G4ProcessManagerMessenger::SetCurrentParticle()
127{
128 // set currentParticle pointer
129 // get particle name by asking G4ParticleMessenger
130 G4String particleName = G4UImanager::GetUIpointer()->GetCurrentStringValue("/particle/select");
131
132 currentParticle = theParticleTable->FindParticle(particleName);
133 if (currentParticle == 0) {
134 theManager = 0;
135 G4cout << "G4ProcessManagerMessenger::SetCurrentParticle() ";
136 G4cout << particleName << " not found " << G4endl;
137 } else {
138 theManager = currentParticle->GetProcessManager();
139 theProcessList = theManager->GetProcessList();
140 }
141 return currentParticle;
142}
143
144void G4ProcessManagerMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
145{
146 if (SetCurrentParticle()==0) {
147 G4cout << "Particle is not selected yet !! Command ignored." << G4endl;
148 return;
149 }
150 if( command == dumpCmd ){
151 //Commnad /particle/process/dump
152 G4int index = dumpCmd->GetNewIntValue(newValue);
153 if (index <0) {
154 theManager->DumpInfo();
155 } else if ( index < theManager->GetProcessListLength()){
156 currentProcess = (*theProcessList)(index);
157 if (currentProcess == 0) {
158 G4cout << " no process at index of " << index;
159 G4cout << "in the Process Vector" << G4endl;
160 } else {
161 currentProcess->DumpInfo();
162 }
163 } else {
164 G4cout << " illegal index !!! " << G4endl;
165 currentProcess = 0;
166 }
167
168 } else if( command==activateCmd ) {
169 //Commnad /particle/process/activate
170 theManager->SetProcessActivation(activateCmd->GetNewIntValue(newValue), true);
171 G4UImanager::GetUIpointer()->ApplyCommand("/run/physicsModified");
172
173 } else if( command==inactivateCmd ) {
174 //Commnad /particle/process/inactivate
175 theManager->SetProcessActivation(inactivateCmd->GetNewIntValue(newValue), false);
176 G4UImanager::GetUIpointer()->ApplyCommand("/run/physicsModified");
177
178 } else if( command==verboseCmd ) {
179 //Commnad /particle/process/Verbose
180 // inputstream for newValues
181 const char* temp = (const char*)(newValue);
182 std::istringstream is((char*)temp);
183 G4int Verbose, index;
184 is >>Verbose >>index;
185 if (index <0) {
186 theManager->SetVerboseLevel(Verbose);
187
188 } else if ( index < theManager->GetProcessListLength()){
189 currentProcess = (*theProcessList)(index);
190 if (currentProcess == 0) {
191 G4cout << " no process at index of " << index;
192 G4cout << "in the Process Vector" << G4endl;
193 } else {
194 currentProcess->SetVerboseLevel(Verbose);
195 }
196 } else {
197 G4cout << " illegal index !!! " << G4endl;
198 currentProcess = 0;
199 }
200 }
201}
202
203
204G4String G4ProcessManagerMessenger::GetCurrentValue(G4UIcommand * command)
205{
206 G4String returnValue('\0');
207 if(SetCurrentParticle() == 0) {
208 // no particle is selected. return null strings
209 return returnValue;
210 }
211
212 std::ostringstream os;
213
214 if( command==verboseCmd ){
215 //Commnad /particle/process/Verbose
216 os << theManager->GetVerboseLevel();
217 returnValue = os.str();
218 }
219 return returnValue;
220}
221
222
223
224
225
Note: See TracBrowser for help on using the repository browser.