File indexing completed on 2025-02-23 09:20:42
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 #include "DetectorMessenger.hh"
0033
0034 #include "DetectorConstruction.hh"
0035
0036 #include "G4UIcmdWithADoubleAndUnit.hh"
0037 #include "G4UIcmdWithAString.hh"
0038 #include "G4UIcmdWithAnInteger.hh"
0039 #include "G4UIcmdWithoutParameter.hh"
0040 #include "G4UIdirectory.hh"
0041
0042
0043
0044 DetectorMessenger::DetectorMessenger(DetectorConstruction* Det) : fDetector(Det)
0045 {
0046 G4bool broadcast = false;
0047 fDetDir = new G4UIdirectory("/det/", broadcast);
0048 fDetDir->SetGuidance("Detector control");
0049
0050 fAbsMaterCmd = new G4UIcmdWithAString("/det/setAbsMat", this);
0051 fAbsMaterCmd->SetGuidance("Select Material of the Absorber.");
0052 fAbsMaterCmd->SetParameterName("AbsMat", false);
0053 fAbsMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0054
0055 fGapMaterCmd = new G4UIcmdWithAString("/det/setGapMat", this);
0056 fGapMaterCmd->SetGuidance("Select Material of the Gap.");
0057 fGapMaterCmd->SetParameterName("GapMat", false);
0058 fGapMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0059
0060 fAbsThickCmd = new G4UIcmdWithADoubleAndUnit("/det/setAbsThick", this);
0061 fAbsThickCmd->SetGuidance("Set Thickness of the Absorber");
0062 fAbsThickCmd->SetParameterName("AbsThick", false);
0063 fAbsThickCmd->SetRange("AbsThick>=0.");
0064 fAbsThickCmd->SetUnitCategory("Length");
0065 fAbsThickCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0066
0067 fGapThickCmd = new G4UIcmdWithADoubleAndUnit("/det/setGapThick", this);
0068 fGapThickCmd->SetGuidance("Set Thickness of the Gap");
0069 fGapThickCmd->SetParameterName("GapThick", false);
0070 fGapThickCmd->SetRange("GapThick>=0.");
0071 fGapThickCmd->SetUnitCategory("Length");
0072 fGapThickCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0073
0074 fSizeYZCmd = new G4UIcmdWithADoubleAndUnit("/det/setSizeYZ", this);
0075 fSizeYZCmd->SetGuidance("Set tranverse size of the calorimeter");
0076 fSizeYZCmd->SetParameterName("SizeYZ", false);
0077 fSizeYZCmd->SetRange("SizeYZ>0.");
0078 fSizeYZCmd->SetUnitCategory("Length");
0079 fSizeYZCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0080
0081 fNbLayersCmd = new G4UIcmdWithAnInteger("/det/setNbOfLayers", this);
0082 fNbLayersCmd->SetGuidance("Set number of layers.");
0083 fNbLayersCmd->SetParameterName("NbLayers", false);
0084 fNbLayersCmd->SetRange("NbLayers>0 && NbLayers<500");
0085 fNbLayersCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
0086 }
0087
0088
0089
0090 DetectorMessenger::~DetectorMessenger()
0091 {
0092 delete fNbLayersCmd;
0093 delete fAbsMaterCmd;
0094 delete fGapMaterCmd;
0095 delete fAbsThickCmd;
0096 delete fGapThickCmd;
0097 delete fSizeYZCmd;
0098 delete fDetDir;
0099 }
0100
0101
0102
0103 void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0104 {
0105 if (command == fAbsMaterCmd) {
0106 fDetector->SetAbsorberMaterial(newValue);
0107 return;
0108 }
0109
0110 if (command == fGapMaterCmd) {
0111 fDetector->SetGapMaterial(newValue);
0112 return;
0113 }
0114
0115 if (command == fAbsThickCmd) {
0116 fDetector->SetAbsorberThickness(fAbsThickCmd->GetNewDoubleValue(newValue));
0117 return;
0118 }
0119
0120 if (command == fGapThickCmd) {
0121 fDetector->SetGapThickness(fGapThickCmd->GetNewDoubleValue(newValue));
0122 return;
0123 }
0124
0125 if (command == fSizeYZCmd) {
0126 fDetector->SetCalorSizeYZ(fSizeYZCmd->GetNewDoubleValue(newValue));
0127 return;
0128 }
0129
0130 if (command == fNbLayersCmd) {
0131 fDetector->SetNbOfLayers(fNbLayersCmd->GetNewIntValue(newValue));
0132 return;
0133 }
0134 }
0135
0136