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