Warning, file /geant4/examples/extended/electromagnetic/TestEm6/src/DetectorMessenger.cc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "DetectorMessenger.hh"
0030
0031 #include "DetectorConstruction.hh"
0032
0033 #include "G4UIcmdWithADoubleAndUnit.hh"
0034 #include "G4UIcmdWithAString.hh"
0035 #include "G4UIcmdWithoutParameter.hh"
0036 #include "G4UIdirectory.hh"
0037
0038
0039
0040 DetectorMessenger::DetectorMessenger(DetectorConstruction* Det)
0041 : G4UImessenger(),
0042 fDetector(Det),
0043 fTestemDir(0),
0044 fDetDir(0),
0045 fMaterCmd(0),
0046 fSizeCmd(0),
0047 fMagFieldCmd(0),
0048 fMaxStepCmd(0),
0049 fUpdateCmd(0)
0050 {
0051 fTestemDir = new G4UIdirectory("/testem/");
0052 fTestemDir->SetGuidance(" detector control.");
0053
0054 fDetDir = new G4UIdirectory("/testem/det/");
0055 fDetDir->SetGuidance("detector construction commands");
0056
0057 fMaterCmd = new G4UIcmdWithAString("/testem/det/setMat", this);
0058 fMaterCmd->SetGuidance("Select material of the box.");
0059 fMaterCmd->SetParameterName("choice", false);
0060 fMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0061
0062 fSizeCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setSize", this);
0063 fSizeCmd->SetGuidance("Set size of the box");
0064 fSizeCmd->SetParameterName("Size", false);
0065 fSizeCmd->SetRange("Size>0.");
0066 fSizeCmd->SetUnitCategory("Length");
0067 fSizeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0068
0069 fMagFieldCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setField", this);
0070 fMagFieldCmd->SetGuidance("Define magnetic field.");
0071 fMagFieldCmd->SetGuidance("Magnetic field will be in Z direction.");
0072 fMagFieldCmd->SetParameterName("Bz", false);
0073 fMagFieldCmd->SetUnitCategory("Magnetic flux density");
0074 fMagFieldCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0075
0076 fUpdateCmd = new G4UIcmdWithoutParameter("/testem/det/update", this);
0077 fUpdateCmd->SetGuidance("Update calorimeter geometry.");
0078 fUpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
0079 fUpdateCmd->SetGuidance("if you changed geometrical value(s).");
0080 fUpdateCmd->AvailableForStates(G4State_Idle);
0081
0082 fMaxStepCmd = new G4UIcmdWithADoubleAndUnit("/testem/tracking/stepMax", this);
0083 fMaxStepCmd->SetGuidance("Set max allowed step size");
0084 fMaxStepCmd->SetParameterName("Size", false);
0085 fMaxStepCmd->SetRange("Size>0.");
0086 fMaxStepCmd->SetUnitCategory("Length");
0087 fMaxStepCmd->AvailableForStates(G4State_Idle);
0088 }
0089
0090
0091
0092 DetectorMessenger::~DetectorMessenger()
0093 {
0094 delete fMaterCmd;
0095 delete fSizeCmd;
0096 delete fMagFieldCmd;
0097 delete fUpdateCmd;
0098 delete fMaxStepCmd;
0099 delete fDetDir;
0100 delete fTestemDir;
0101 }
0102
0103
0104
0105 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0106 {
0107 if (command == fMaterCmd) {
0108 fDetector->SetMaterial(newValue);
0109 }
0110
0111 if (command == fSizeCmd) {
0112 fDetector->SetSize(fSizeCmd->GetNewDoubleValue(newValue));
0113 }
0114
0115 if (command == fMagFieldCmd) {
0116 fDetector->SetMagField(fMagFieldCmd->GetNewDoubleValue(newValue));
0117 }
0118
0119 if (command == fUpdateCmd) {
0120 fDetector->UpdateGeometry();
0121 }
0122
0123 if (command == fMaxStepCmd) {
0124 fDetector->SetMaxStepSize(fMaxStepCmd->GetNewDoubleValue(newValue));
0125 }
0126 }
0127
0128