File indexing completed on 2026-03-29 07:51:15
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 "G4UIcmdWith3VectorAndUnit.hh"
0034 #include "G4UIcmdWithADoubleAndUnit.hh"
0035 #include "G4UIcmdWithAString.hh"
0036 #include "G4UIcmdWithoutParameter.hh"
0037 #include "G4UIdirectory.hh"
0038
0039
0040
0041 DetectorMessenger::DetectorMessenger(DetectorConstruction* det) : G4UImessenger(), fDetector(det)
0042 {
0043 fDetD = new G4UIdirectory("/testex/");
0044 fDetD->SetGuidance("dmparticle example commands");
0045
0046 fDetDir = new G4UIdirectory("/testex/det/");
0047 fDetDir->SetGuidance("detector construction commands");
0048
0049 fMaterCmd = new G4UIcmdWithAString("/testex/det/setMat", this);
0050 fMaterCmd->SetGuidance("Select material of the box.");
0051 fMaterCmd->SetParameterName("choice", false);
0052 fMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0053
0054 fSizeZCmd = new G4UIcmdWithADoubleAndUnit("/testex/det/setSizeZ", this);
0055 fSizeZCmd->SetGuidance("Set sizeX of the absorber");
0056 fSizeZCmd->SetParameterName("SizeZ", false);
0057 fSizeZCmd->SetRange("SizeZ>0.");
0058 fSizeZCmd->SetUnitCategory("Length");
0059 fSizeZCmd->AvailableForStates(G4State_PreInit);
0060
0061 fSizeXYCmd = new G4UIcmdWithADoubleAndUnit("/testex/det/setSizeXY", this);
0062 fSizeXYCmd->SetGuidance("Set sizeYZ of the absorber");
0063 fSizeXYCmd->SetParameterName("SizeXY", false);
0064 fSizeXYCmd->SetRange("SizeXY>0.");
0065 fSizeXYCmd->SetUnitCategory("Length");
0066 fSizeXYCmd->AvailableForStates(G4State_PreInit);
0067 }
0068
0069
0070
0071 DetectorMessenger::~DetectorMessenger()
0072 {
0073 delete fMaterCmd;
0074 delete fSizeZCmd;
0075 delete fSizeXYCmd;
0076 delete fDetDir;
0077 delete fDetD;
0078 }
0079
0080
0081
0082 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0083 {
0084 if (command == fMaterCmd) {
0085 fDetector->SetMaterial(newValue);
0086 }
0087
0088 if (command == fSizeZCmd) {
0089 fDetector->SetSizeZ(fSizeZCmd->GetNewDoubleValue(newValue));
0090 }
0091
0092 if (command == fSizeXYCmd) {
0093 fDetector->SetSizeXY(fSizeXYCmd->GetNewDoubleValue(newValue));
0094 }
0095 }
0096
0097