File indexing completed on 2026-05-02 07:43:20
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 fSizeXYCmd(0),
0047 fSizeZCmd(0),
0048 fUpdateCmd(0)
0049 {
0050 fTestemDir = new G4UIdirectory("/testem/");
0051 fTestemDir->SetGuidance("commands specific to this example");
0052
0053 fDetDir = new G4UIdirectory("/testem/det/");
0054 fDetDir->SetGuidance("detector construction");
0055
0056 fMaterCmd = new G4UIcmdWithAString("/testem/det/setMat", this);
0057 fMaterCmd->SetGuidance("Select material of the box.");
0058 fMaterCmd->SetParameterName("choice", false);
0059 fMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0060
0061 fSizeXYCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setSizeXY", this);
0062 fSizeXYCmd->SetGuidance("Set sizeXY of the box");
0063 fSizeXYCmd->SetParameterName("Size", false);
0064 fSizeXYCmd->SetRange("Size>0.");
0065 fSizeXYCmd->SetUnitCategory("Length");
0066 fSizeXYCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0067
0068 fSizeZCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setSizeZ", this);
0069 fSizeZCmd->SetGuidance("Set sizeZ of the box");
0070 fSizeZCmd->SetParameterName("SizeZ", false);
0071 fSizeZCmd->SetRange("SizeZ>0.");
0072 fSizeZCmd->SetUnitCategory("Length");
0073 fSizeZCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0074
0075 fUpdateCmd = new G4UIcmdWithoutParameter("/testem/det/update", this);
0076 fUpdateCmd->SetGuidance("Update calorimeter geometry.");
0077 fUpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
0078 fUpdateCmd->SetGuidance("if you changed geometrical value(s).");
0079 fUpdateCmd->AvailableForStates(G4State_Idle);
0080 }
0081
0082
0083
0084 DetectorMessenger::~DetectorMessenger()
0085 {
0086 delete fMaterCmd;
0087 delete fSizeXYCmd;
0088 delete fSizeZCmd;
0089 delete fUpdateCmd;
0090 delete fDetDir;
0091 delete fTestemDir;
0092 }
0093
0094
0095
0096 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0097 {
0098 if (command == fMaterCmd) {
0099 fDetector->SetTargetMaterial(newValue);
0100 }
0101
0102 if (command == fSizeXYCmd) {
0103 fDetector->SetSizeXY(fSizeXYCmd->GetNewDoubleValue(newValue));
0104 }
0105
0106 if (command == fSizeZCmd) {
0107 fDetector->SetSizeZ(fSizeZCmd->GetNewDoubleValue(newValue));
0108 }
0109
0110 if (command == fUpdateCmd) {
0111 fDetector->UpdateGeometry();
0112 }
0113 }
0114
0115