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

Last change on this file since 1346 was 1337, checked in by garnier, 14 years ago

tag geant4.9.4 beta 1 + modifs locales

File size: 8.2 KB
Line 
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 $
28// GEANT4 tag $Name: geant4-09-04-beta-01 $
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.