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