File indexing completed on 2026-05-25 07:39:52
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 "G4UIcmdWithAnInteger.hh"
0036 #include "G4UIdirectory.hh"
0037
0038
0039
0040 DetectorMessenger::DetectorMessenger(DetectorConstruction* Det) : 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 fMaterCmd->SetToBeBroadcasted(false);
0053
0054 fRadiusCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setRadius", this);
0055 fRadiusCmd->SetGuidance("Set radius of the absorber");
0056 fRadiusCmd->SetParameterName("Radius", false);
0057 fRadiusCmd->SetRange("Radius>0.");
0058 fRadiusCmd->SetUnitCategory("Length");
0059 fRadiusCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0060 fRadiusCmd->SetToBeBroadcasted(false);
0061
0062 fNbLayersCmd = new G4UIcmdWithAnInteger("/testem/det/setNbOfLayers", this);
0063 fNbLayersCmd->SetGuidance("Set number of layers");
0064 fNbLayersCmd->SetParameterName("NbLayers", false);
0065 fNbLayersCmd->SetRange("NbLayers>0");
0066 fNbLayersCmd->AvailableForStates(G4State_PreInit);
0067 fNbLayersCmd->SetToBeBroadcasted(false);
0068 }
0069
0070
0071
0072 DetectorMessenger::~DetectorMessenger()
0073 {
0074 delete fMaterCmd;
0075 delete fRadiusCmd;
0076 delete fNbLayersCmd;
0077 delete fDetDir;
0078 delete fTestemDir;
0079 }
0080
0081
0082
0083 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0084 {
0085 if (command == fMaterCmd) {
0086 fDetector->SetMaterial(newValue);
0087 }
0088
0089 if (command == fRadiusCmd) {
0090 fDetector->SetRadius(fRadiusCmd->GetNewDoubleValue(newValue));
0091 }
0092
0093 if (command == fNbLayersCmd) {
0094 fDetector->SetNbOfLayers(fNbLayersCmd->GetNewIntValue(newValue));
0095 }
0096 }
0097
0098