File indexing completed on 2026-09-18 08:31:28
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) : fDetector(Det)
0041 {
0042 fTestemDir = new G4UIdirectory("/testem/");
0043 fTestemDir->SetGuidance("commands specific to this example");
0044
0045 fDetDir = new G4UIdirectory("/testem/det/");
0046 fDetDir->SetGuidance("detector construction");
0047
0048 fMaterCmd = new G4UIcmdWithAString("/testem/det/setMat", this);
0049 fMaterCmd->SetGuidance("Select material of the box.");
0050 fMaterCmd->SetParameterName("choice", false);
0051 fMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0052
0053 fSizeCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setSize", this);
0054 fSizeCmd->SetGuidance("Set size of the box");
0055 fSizeCmd->SetParameterName("Size", false);
0056 fSizeCmd->SetRange("Size>0.");
0057 fSizeCmd->SetUnitCategory("Length");
0058 fSizeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0059
0060 fUpdateCmd = new G4UIcmdWithoutParameter("/testem/det/update", this);
0061 fUpdateCmd->SetGuidance("Update calorimeter geometry.");
0062 fUpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
0063 fUpdateCmd->SetGuidance("if you changed geometrical value(s).");
0064 fUpdateCmd->AvailableForStates(G4State_Idle);
0065 }
0066
0067
0068
0069 DetectorMessenger::~DetectorMessenger()
0070 {
0071 delete fMaterCmd;
0072 delete fSizeCmd;
0073 delete fUpdateCmd;
0074 delete fDetDir;
0075 delete fTestemDir;
0076 }
0077
0078
0079
0080 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0081 {
0082 if (command == fMaterCmd) {
0083 fDetector->SetMaterial(newValue);
0084 }
0085
0086 if (command == fSizeCmd) {
0087 fDetector->SetSize(fSizeCmd->GetNewDoubleValue(newValue));
0088 }
0089
0090 if (command == fUpdateCmd) {
0091 fDetector->UpdateGeometry();
0092 }
0093 }
0094
0095