File indexing completed on 2026-09-21 08:28:55
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) : G4UImessenger(), fDetector(Det)
0041 {
0042 fTestemDir = new G4UIdirectory("/testem/");
0043 fTestemDir->SetGuidance(" detector control.");
0044
0045 fDetDir = new G4UIdirectory("/testem/det/");
0046 fDetDir->SetGuidance("detector construction commands");
0047
0048 fMaterCmd = new G4UIcmdWithAString("/testem/det/setMat", this);
0049 fMaterCmd->SetGuidance("Select material of the box.");
0050 fMaterCmd->SetParameterName("choice", false);
0051 fMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0052
0053 fSizeCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setSize", this);
0054 fSizeCmd->SetGuidance("Set size of the box");
0055 fSizeCmd->SetParameterName("Size", false);
0056 fSizeCmd->SetRange("Size>0.");
0057 fSizeCmd->SetUnitCategory("Length");
0058 fSizeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0059
0060 fGeomFileCmd = new G4UIcmdWithAString("/testem/det/GeomFile", this);
0061 fGeomFileCmd->SetGuidance("Give sgml input file name like Box.gdml");
0062 fGeomFileCmd->SetParameterName("choice", false);
0063 fGeomFileCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0064
0065 fMaxStepCmd = new G4UIcmdWithADoubleAndUnit("/testem/tracking/stepMax", this);
0066 fMaxStepCmd->SetGuidance("Set max allowed step size");
0067 fMaxStepCmd->SetParameterName("Size", false);
0068 fMaxStepCmd->SetRange("Size>0.");
0069 fMaxStepCmd->SetUnitCategory("Length");
0070 fMaxStepCmd->AvailableForStates(G4State_Idle);
0071
0072 fTrackdir = new G4UIdirectory("/testem/tracking/");
0073 fTrackdir->SetGuidance("step length");
0074 fMaxStepLength = new G4UIcmdWithADoubleAndUnit("/testem/tracking/setMaxStepLength", this);
0075 fMaxStepLength->SetGuidance("Set the maximum length of tracking step");
0076 fMaxStepLength->SetGuidance("when integrating magnetic field line.");
0077 fMaxStepLength->SetParameterName("Size", false);
0078 fMaxStepLength->SetRange("Size>0.");
0079 fMaxStepLength->SetUnitCategory("Length");
0080 fMaxStepLength->AvailableForStates(G4State_Idle);
0081 }
0082
0083
0084
0085 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0086 {
0087 if (command == fMaterCmd) {
0088 fDetector->SetMaterial(newValue);
0089 }
0090
0091 if (command == fSizeCmd) {
0092 fDetector->SetSize(fSizeCmd->GetNewDoubleValue(newValue));
0093 }
0094
0095 if (command == fMaxStepCmd) {
0096 fDetector->SetMaxStepSize(fMaxStepCmd->GetNewDoubleValue(newValue));
0097 }
0098
0099 if (command == fMaxStepLength) {
0100 fDetector->SetMaxStepLength(fMaxStepLength->GetNewDoubleValue(newValue));
0101 }
0102
0103 if (command == fGeomFileCmd) {
0104 fDetector->SetGeomFileName(newValue);
0105 }
0106 }
0107
0108