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