File indexing completed on 2025-02-23 09:21:17
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
0033
0034
0035 #include "F03DetectorMessenger.hh"
0036
0037 #include "F03DetectorConstruction.hh"
0038
0039 #include "G4UIcmdWithADoubleAndUnit.hh"
0040 #include "G4UIcmdWithAString.hh"
0041 #include "G4UIcmdWith3VectorAndUnit.hh"
0042 #include "G4UIcmdWithoutParameter.hh"
0043
0044
0045
0046 F03DetectorMessenger::F03DetectorMessenger(F03DetectorConstruction* det) : fDetector(det)
0047 {
0048 fDetDir = new G4UIdirectory("/calor/");
0049 fDetDir->SetGuidance("F03 detector control.");
0050
0051 fAbsMaterCmd = new G4UIcmdWithAString("/calor/setAbsMat", this);
0052 fAbsMaterCmd->SetGuidance("Select Material of the Absorber.");
0053 fAbsMaterCmd->SetParameterName("choice", true);
0054 fAbsMaterCmd->SetDefaultValue("Lead");
0055 fAbsMaterCmd->AvailableForStates(G4State_Idle);
0056 fAbsMaterCmd->SetToBeBroadcasted(false);
0057
0058 fWorldMaterCmd = new G4UIcmdWithAString("/calor/setWorldMat", this);
0059 fWorldMaterCmd->SetGuidance("Select Material of the World.");
0060 fWorldMaterCmd->SetParameterName("wchoice", true);
0061 fWorldMaterCmd->SetDefaultValue("Air");
0062 fWorldMaterCmd->AvailableForStates(G4State_Idle);
0063 fWorldMaterCmd->SetToBeBroadcasted(false);
0064
0065 fAbsThickCmd = new G4UIcmdWithADoubleAndUnit("/calor/setAbsThick", this);
0066 fAbsThickCmd->SetGuidance("Set Thickness of the Absorber");
0067 fAbsThickCmd->SetParameterName("SizeZ", false, false);
0068 fAbsThickCmd->SetDefaultUnit("mm");
0069 fAbsThickCmd->SetRange("SizeZ>0.");
0070 fAbsThickCmd->AvailableForStates(G4State_Idle);
0071 fAbsThickCmd->SetToBeBroadcasted(false);
0072
0073 fAbsRadCmd = new G4UIcmdWithADoubleAndUnit("/calor/setAbsRad", this);
0074 fAbsRadCmd->SetGuidance("Set radius of the Absorber");
0075 fAbsRadCmd->SetParameterName("SizeR", false, false);
0076 fAbsRadCmd->SetDefaultUnit("mm");
0077 fAbsRadCmd->SetRange("SizeR>0.");
0078 fAbsRadCmd->AvailableForStates(G4State_Idle);
0079 fAbsRadCmd->SetToBeBroadcasted(false);
0080
0081 fAbsZposCmd = new G4UIcmdWithADoubleAndUnit("/calor/setAbsZpos", this);
0082 fAbsZposCmd->SetGuidance("Set Z pos. of the Absorber");
0083 fAbsZposCmd->SetParameterName("Zpos", false, false);
0084 fAbsZposCmd->SetDefaultUnit("mm");
0085 fAbsZposCmd->AvailableForStates(G4State_Idle);
0086 fAbsZposCmd->SetToBeBroadcasted(false);
0087
0088 fWorldZCmd = new G4UIcmdWithADoubleAndUnit("/calor/setWorldZ", this);
0089 fWorldZCmd->SetGuidance("Set Z size of the World");
0090 fWorldZCmd->SetParameterName("WSizeZ", false, false);
0091 fWorldZCmd->SetDefaultUnit("mm");
0092 fWorldZCmd->SetRange("WSizeZ>0.");
0093 fWorldZCmd->AvailableForStates(G4State_Idle);
0094 fWorldZCmd->SetToBeBroadcasted(false);
0095
0096 fWorldRCmd = new G4UIcmdWithADoubleAndUnit("/calor/setWorldR", this);
0097 fWorldRCmd->SetGuidance("Set R size of the World");
0098 fWorldRCmd->SetParameterName("WSizeR", false, false);
0099 fWorldRCmd->SetDefaultUnit("mm");
0100 fWorldRCmd->SetRange("WSizeR>0.");
0101 fWorldRCmd->AvailableForStates(G4State_Idle);
0102 fWorldRCmd->SetToBeBroadcasted(false);
0103
0104
0105 fFieldDir = new G4UIdirectory("/field03/");
0106 fFieldDir->SetGuidance("F03 field control.");
0107
0108 fMagFieldCmd = new G4UIcmdWith3VectorAndUnit("/field03/setField",this);
0109 fMagFieldCmd->SetGuidance("Define magnetic field.");
0110 fMagFieldCmd->SetParameterName("Bx", "By", "Bz" ,false,false);
0111 fMagFieldCmd->SetDefaultUnit("tesla");
0112 fMagFieldCmd->AvailableForStates(G4State_Idle);
0113
0114 fLocalMagFieldCmd = new G4UIcmdWith3VectorAndUnit("/field03/setLocalField",this);
0115 fLocalMagFieldCmd->SetGuidance("Define magnetic field.");
0116 fLocalMagFieldCmd->SetParameterName("Bx", "By", "Bz" ,false,false);
0117 fLocalMagFieldCmd->SetDefaultUnit("tesla");
0118 fLocalMagFieldCmd->AvailableForStates(G4State_Idle);
0119 }
0120
0121
0122
0123 F03DetectorMessenger::~F03DetectorMessenger()
0124 {
0125 delete fAbsMaterCmd;
0126 delete fAbsThickCmd;
0127 delete fAbsRadCmd;
0128 delete fAbsZposCmd;
0129 delete fWorldMaterCmd;
0130 delete fWorldZCmd;
0131 delete fWorldRCmd;
0132 delete fDetDir;
0133 delete fLocalMagFieldCmd;
0134 delete fMagFieldCmd;
0135 delete fFieldDir;
0136 }
0137
0138
0139
0140 void F03DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
0141 {
0142 if (command == fAbsMaterCmd) {
0143 fDetector->SetAbsorberMaterial(newValue);
0144 }
0145
0146 if (command == fWorldMaterCmd) {
0147 fDetector->SetWorldMaterial(newValue);
0148 }
0149
0150 if (command == fAbsThickCmd) {
0151 fDetector->SetAbsorberThickness(fAbsThickCmd->GetNewDoubleValue(newValue));
0152 }
0153
0154 if (command == fAbsRadCmd) {
0155 fDetector->SetAbsorberRadius(fAbsRadCmd->GetNewDoubleValue(newValue));
0156 }
0157
0158 if (command == fAbsZposCmd) {
0159 fDetector->SetAbsorberZpos(fAbsZposCmd->GetNewDoubleValue(newValue));
0160 }
0161
0162 if (command == fWorldZCmd) {
0163 fDetector->SetWorldSizeZ(fWorldZCmd->GetNewDoubleValue(newValue));
0164 }
0165
0166 if (command == fWorldRCmd) {
0167 fDetector->SetWorldSizeR(fWorldRCmd->GetNewDoubleValue(newValue));
0168 }
0169
0170 if( command == fMagFieldCmd ) {
0171 fDetector->SetFieldValue(fMagFieldCmd->GetNew3VectorValue(newValue));
0172 }
0173
0174 if( command == fLocalMagFieldCmd ) {
0175 fDetector->SetLocalFieldValue(fLocalMagFieldCmd->GetNew3VectorValue(newValue));
0176 }
0177 }
0178
0179