Download - UI command Makoto Asai (SLAC) Geant4 Tutorial Course @ CERN May 25-27, 2005 May 2005, Geant4 v7.0p01
UI commandUI command
Makoto Asai (SLAC)Makoto Asai (SLAC)
Geant4 Tutorial Course @ CERNGeant4 Tutorial Course @ CERN
May 25-27, 2005May 25-27, 2005
May 2005, Geant4 v7.0p01
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 22
ContentsContents Alias and loopAlias and loop Mechanism of UI commandMechanism of UI command Messenger classMessenger class Defining a commandDefining a command Implementing a messengerImplementing a messenger
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 33
AliasAlias Alias can be defined byAlias can be defined by
/control/alias/control/alias [name] [value] [name] [value] It is also set with It is also set with /control/loop/control/loop and and /control/foreach/control/foreach
commandscommands Aliased value is always treated as a string even if it contains only Aliased value is always treated as a string even if it contains only
numbers.numbers. Alias is to be used with other UI command.Alias is to be used with other UI command.
Use curly brackets, Use curly brackets, {{ and and }}.. For example, frequently used lengthy command can be shortened For example, frequently used lengthy command can be shortened
by aliasing.by aliasing.
/control/alias trv1 /control/alias trv1 ""/tracking/verbose 1/tracking/verbose 1""
{trv1}{trv1} Aliases can be used recursively.Aliases can be used recursively.
/control/alias file1 /diskA/dirX/fileXX.dat/control/alias file1 /diskA/dirX/fileXX.dat
/control/alias file2 /diskB/dirY/fileYY.dat/control/alias file2 /diskB/dirY/fileYY.dat
/control/alias run 1/control/alias run 1
/myCmd/getFile /myCmd/getFile {file{run}}{file{run}}
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 44
LoopLoop /control/loop and /control/foreach commands execute a macro
file more than once. Aliased variable name can be used inside the macro file.
/control/loop [macroFile] [counterName]
[initialValue] [finalValue] [stepSize] counterName is aliased to the number as a loop counter
/control/foreach [macroFile] [counterName] [valueList] counterName is aliased to a value in valueList valueList must be enclosed by double quotes (" ")
on UI terminal or other macro file/control/loop myRun.mac Ekin 10. 20. 2.
in myRun.mac/control/foreach mySingleRun.mac pname “p pi- mu-”
in mySingleRun.mac/gun/particle {pname}
/gun/energy {Ekin} GeV
/run/beamOn 100
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 55
Mechanism of UI commandMechanism of UI command
(G)UI
G4UImanager
messenger(G4UImessenger)
command(G4UIcommand)
G4UIparameter
Target class
1. register command
2. apply
3. do it
4. invoke
Object shown in green must be instantiated by the user
Class shown in blue must be implemented and instantiated by the user
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 66
Messenger classMessenger class Each messenger class must be derived from Each messenger class must be derived from G4UImessengerG4UImessenger base base
class. A messenger class can handle more than one UI commands.class. A messenger class can handle more than one UI commands. A messenger class A messenger class should be instantiated byshould be instantiated by the constructor of the the constructor of the
target classtarget class to which commands should be delivered, and to which commands should be delivered, and should be should be deleteddeleted by the destructor of the target class. by the destructor of the target class.
Methods of messenger classMethods of messenger class ConstructorConstructor
Define (instantiate) commands / command directoriesDefine (instantiate) commands / command directories DestructorDestructor
Delete commands / command directoriesDelete commands / command directories void void SetNewValueSetNewValue(G4UIcommand* command,G4String newValue)(G4UIcommand* command,G4String newValue)
Convert "newValue" parameter string to appropriate value(s) Convert "newValue" parameter string to appropriate value(s) and invoke a method of the target classand invoke a method of the target class
This method is invoked when a command is issued.This method is invoked when a command is issued. G4String G4String GetCurrentValueGetCurrentValue(G4UIcommand* command)(G4UIcommand* command)
Access to a get-method of the target class and convert the Access to a get-method of the target class and convert the current values to a stringcurrent values to a string
This method is invoked when the current value(s) of This method is invoked when the current value(s) of parameter(s) of a command is asked by (G)UI.parameter(s) of a command is asked by (G)UI.
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 77
Definition (instantiation) of a Definition (instantiation) of a commandcommand To be implemented in the constructor of a messenger class.To be implemented in the constructor of a messenger class.
A01DetectorConstMessenger::A01DetectorConstMessengerA01DetectorConstMessenger::A01DetectorConstMessenger(A01DetectorConstruction* tgt)(A01DetectorConstruction* tgt):target(tgt):target(tgt){{ mydetDir = new mydetDir = new G4UIdirectoryG4UIdirectory("("/mydet//mydet/");"); mydetDir->mydetDir->SetGuidanceSetGuidance("A01 detector setup commands.");("A01 detector setup commands.");
armCmd = new armCmd = new G4UIcmdWithADoubleAndUnitG4UIcmdWithADoubleAndUnit("("/mydet/armAngle/mydet/armAngle",this);",this);
armCmd->armCmd->SetGuidanceSetGuidance("Rotation angle of the second arm.");("Rotation angle of the second arm."); armCmd->armCmd->SetParameterNameSetParameterName("angle",true);("angle",true); armCmd->armCmd->SetRangeSetRange("angle>=0. && angle<180.");("angle>=0. && angle<180."); armCmd->armCmd->SetDefaultValueSetDefaultValue(30.);(30.); armCmd->armCmd->SetDefaultUnitSetDefaultUnit("deg");("deg");}}
Guidance can (should) be more than one lines. The first line is Guidance can (should) be more than one lines. The first line is utilized as a short description of the command.utilized as a short description of the command.
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 88
G4UIcommand and its G4UIcommand and its derivativesderivatives
G4UIcommandG4UIcommand is a class which represent a UI command. is a class which represent a UI command.
G4UIparameter represents a parameter.G4UIparameter represents a parameter.
G4UIcommand can be directly used for a UI command. Geant4 G4UIcommand can be directly used for a UI command. Geant4
provides its derivatives according to the types of associated provides its derivatives according to the types of associated
parameters.parameters.
G4UIcmdWithoutParameterG4UIcmdWithoutParameter
G4UIcmdWithAStringG4UIcmdWithAString
G4UIcmdWithABool G4UIcmdWithABool
G4UIcmdWithAnIntegerG4UIcmdWithAnInteger
G4UIcmdWithADouble, G4UIcmdWithADoubleAndUnit G4UIcmdWithADouble, G4UIcmdWithADoubleAndUnit
G4UIcmdWith3Vector, G4UIcmdWith3VectorAndUnitG4UIcmdWith3Vector, G4UIcmdWith3VectorAndUnit
G4UIdirectoryG4UIdirectory
A UI command with other type of parameters must be defined by A UI command with other type of parameters must be defined by
G4UIcommand base class with G4UIparameter.G4UIcommand base class with G4UIparameter.
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 99
Parameter name(s)Parameter name(s)void SetParameterName(void SetParameterName(
const char*parName, const char*parName,
G4bool omittable, G4bool omittable,
G4bool currentAsDefault=false); G4bool currentAsDefault=false);
void SetParameterName(void SetParameterName(
const char*nam1, const char*nam2, const char*nam3, const char*nam1, const char*nam2, const char*nam3,
G4bool omittable, G4bool omittable,
G4bool currentAsDefault=false);G4bool currentAsDefault=false);
Parameter names are used in help, and also in the definition of parameter Parameter names are used in help, and also in the definition of parameter
range.range.
If "omittable" is true, the command can be issued without this particular If "omittable" is true, the command can be issued without this particular
parameter, and the default value will be used.parameter, and the default value will be used.
If "currentAsDefalult" is true, current value of the parameter is used as a If "currentAsDefalult" is true, current value of the parameter is used as a
default value, otherwise default value must be defined with default value, otherwise default value must be defined with
SetDefaultValue() method.SetDefaultValue() method.
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 1010
Range, unit and candidatesRange, unit and candidatesvoid void SetRangeSetRange(const char* rangeString)(const char* rangeString) Available for a command with numeric-type parameters.Available for a command with numeric-type parameters. Range of parameter(s) must be given in C++ syntax.Range of parameter(s) must be given in C++ syntax.
aCmd->SetRange("x>0. && y>z && z>(x+y)");aCmd->SetRange("x>0. && y>z && z>(x+y)"); Not only comparison with hard-coded number but also comparison Not only comparison with hard-coded number but also comparison
between variables and simple calculation are available.between variables and simple calculation are available. Names of variables must be defined by Names of variables must be defined by SetParameterNameSetParameterName() method.() method.
void void SetDefaultUnitSetDefaultUnit(const char* defUnit)(const char* defUnit) Available for a command which takes unit.Available for a command which takes unit. Once the default unit is defined, no other unit of different dimension Once the default unit is defined, no other unit of different dimension
will be accepted.will be accepted. Alternatively, you can define a dimension (unit category) without Alternatively, you can define a dimension (unit category) without
setting a default unit.setting a default unit.
void void SetUnitCategorySetUnitCategory(const char* unitCategory)(const char* unitCategory)
void void SetCandidatesSetCandidates(const char* candidateList)(const char* candidateList) Available for a command with string type parameterAvailable for a command with string type parameter Candidates must be delimited by a space.Candidates must be delimited by a space. Candidates can be dynamically updated.Candidates can be dynamically updated.
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 1111
Available stateAvailable statevoid void AvailableForStatesAvailableForStates(G4ApplicationState s1,…)(G4ApplicationState s1,…) Define command's applicability for Geant4 Define command's applicability for Geant4
application states.application states. Geant4 has six application states.Geant4 has six application states.
G4State_PreInitG4State_PreInit Material, Geometry, Particle and/or Material, Geometry, Particle and/or
Physics Process need to be initializedPhysics Process need to be initialized G4State_IdleG4State_Idle
Ready to start a runReady to start a run G4State_GeomClosedG4State_GeomClosed
Geometry is optimized and ready to Geometry is optimized and ready to process an eventprocess an event
G4State_EventProcG4State_EventProc An event is processingAn event is processing
G4State_Quit, G4State_AbortG4State_Quit, G4State_Abort UI command unavailableUI command unavailable
PreInit
Idle
EventProc
GeomClosed
Quit
Abort
initialize
beamOnexit
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 1212
Converting between string and Converting between string and valuesvalues
Derivatives of G4UIcommand with numeric and boolean parameters have Derivatives of G4UIcommand with numeric and boolean parameters have
corresponding conversion methods.corresponding conversion methods.
From a string to valueFrom a string to value
G4bool GetNewBoolValue(const char*)G4bool GetNewBoolValue(const char*)
G4int GetNewIntValue(const char*)G4int GetNewIntValue(const char*)
G4double GetNewDoubleValue(const char*)G4double GetNewDoubleValue(const char*)
G4ThreeVector GetNew3VectorValue(const char*)G4ThreeVector GetNew3VectorValue(const char*)
To be used inTo be used in SetNewValue SetNewValue() method in messenger.() method in messenger.
Unit is taken into account automaticallyUnit is taken into account automatically..
From value to stringFrom value to string
G4String ConvertToString(...)G4String ConvertToString(...)
G4String ConvertToString(...,const char* unit)G4String ConvertToString(...,const char* unit)
To be used inTo be used in GetCurrentValue GetCurrentValue() method in messenger.() method in messenger.
UI command - M.Asai (SLAC)UI command - M.Asai (SLAC) 1313
SetNewValue and SetNewValue and GetCurrentValueGetCurrentValuevoid A01DetectorConstMessengervoid A01DetectorConstMessenger
::::SetNewValue(G4UIcommand* command,G4String newValue)SetNewValue(G4UIcommand* command,G4String newValue)
{{
if( command==armCmd )if( command==armCmd )
{ target->SetArmAngle(armCmd->{ target->SetArmAngle(armCmd->GetNewDoubleValueGetNewDoubleValue(newValue)); }(newValue)); }
}}
G4String A01DetectorConstMessengerG4String A01DetectorConstMessenger
::::GetCurrentValue(G4UIcommand* command)GetCurrentValue(G4UIcommand* command)
{{
G4String cv;G4String cv;
if( command==armCmd )if( command==armCmd )
{ cv = armCmd->{ cv = armCmd->ConvertToStringConvertToString(target->GetArmAngle(),"deg"); }(target->GetArmAngle(),"deg"); }
return cv; return cv;
}}