| 1 | //
|
|---|
| 2 | // ********************************************************************
|
|---|
| 3 | // * License and Disclaimer *
|
|---|
| 4 | // * *
|
|---|
| 5 | // * The Geant4 software is copyright of the Copyright Holders of *
|
|---|
| 6 | // * the Geant4 Collaboration. It is provided under the terms and *
|
|---|
| 7 | // * conditions of the Geant4 Software License, included in the file *
|
|---|
| 8 | // * LICENSE and available at http://cern.ch/geant4/license . These *
|
|---|
| 9 | // * include a list of copyright holders. *
|
|---|
| 10 | // * *
|
|---|
| 11 | // * Neither the authors of this software system, nor their employing *
|
|---|
| 12 | // * institutes,nor the agencies providing financial support for this *
|
|---|
| 13 | // * work make any representation or warranty, express or implied, *
|
|---|
| 14 | // * regarding this software system or assume any liability for its *
|
|---|
| 15 | // * use. Please see the license in the file LICENSE and URL above *
|
|---|
| 16 | // * for the full disclaimer and the limitation of liability. *
|
|---|
| 17 | // * *
|
|---|
| 18 | // * This code implementation is the result of the scientific and *
|
|---|
| 19 | // * technical work of the GEANT4 collaboration. *
|
|---|
| 20 | // * By using, copying, modifying or distributing the software (or *
|
|---|
| 21 | // * any work based on the software) you agree to acknowledge its *
|
|---|
| 22 | // * use in resulting scientific publications, and indicate your *
|
|---|
| 23 | // * acceptance of all terms of the Geant4 Software license. *
|
|---|
| 24 | // ********************************************************************
|
|---|
| 25 | //
|
|---|
| 26 | //
|
|---|
| 27 | //
|
|---|
| 28 |
|
|---|
| 29 | #include "F04DetectorMessenger.hh"
|
|---|
| 30 |
|
|---|
| 31 | #include "G4UIdirectory.hh"
|
|---|
| 32 | #include "G4UIcmdWithAString.hh"
|
|---|
| 33 | #include "G4UIcmdWithAnInteger.hh"
|
|---|
| 34 | #include "G4UIcmdWithADoubleAndUnit.hh"
|
|---|
| 35 | #include "G4UIcmdWithoutParameter.hh"
|
|---|
| 36 |
|
|---|
| 37 | F04DetectorMessenger::F04DetectorMessenger(F04DetectorConstruction * Det)
|
|---|
| 38 | : Detector(Det)
|
|---|
| 39 | {
|
|---|
| 40 | detDir = new G4UIdirectory("/field04/");
|
|---|
| 41 | detDir->SetGuidance(" field04 Simulation ");
|
|---|
| 42 |
|
|---|
| 43 | WorldMaterCmd = new G4UIcmdWithAString("/field04/SetWorldMat",this);
|
|---|
| 44 | WorldMaterCmd->SetGuidance("Select Material of the World");
|
|---|
| 45 | WorldMaterCmd->SetParameterName("wchoice",true);
|
|---|
| 46 | WorldMaterCmd->SetDefaultValue("Air");
|
|---|
| 47 | WorldMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 48 |
|
|---|
| 49 | WorldRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetWorldR",this);
|
|---|
| 50 | WorldRCmd->SetGuidance("Set Radius of the World");
|
|---|
| 51 | WorldRCmd->SetParameterName("WSizeR",false,false);
|
|---|
| 52 | WorldRCmd->SetDefaultUnit("cm");
|
|---|
| 53 | WorldRCmd->SetRange("WSizeR>0.");
|
|---|
| 54 | WorldRCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 55 |
|
|---|
| 56 | WorldZCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetWorldZ",this);
|
|---|
| 57 | WorldZCmd->SetGuidance("Set Length of the World");
|
|---|
| 58 | WorldZCmd->SetParameterName("WSizeZ",false,false);
|
|---|
| 59 | WorldZCmd->SetDefaultUnit("cm");
|
|---|
| 60 | WorldZCmd->SetRange("WSizeZ>0.");
|
|---|
| 61 | WorldZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 62 |
|
|---|
| 63 | CaptureRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureR",this);
|
|---|
| 64 | CaptureRCmd->SetGuidance("Set Radius of the Capture Magnet");
|
|---|
| 65 | CaptureRCmd->SetParameterName("CSizeR",false,false);
|
|---|
| 66 | CaptureRCmd->SetDefaultUnit("cm");
|
|---|
| 67 | CaptureRCmd->SetRange("CSizeR>0.");
|
|---|
| 68 | CaptureRCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 69 |
|
|---|
| 70 | CaptureZCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureZ",this);
|
|---|
| 71 | CaptureZCmd->SetGuidance("Set Length of the Capture Magnet");
|
|---|
| 72 | CaptureZCmd->SetParameterName("CSizeZ",false,false);
|
|---|
| 73 | CaptureZCmd->SetDefaultUnit("cm");
|
|---|
| 74 | CaptureZCmd->SetRange("CSizeZ>0.");
|
|---|
| 75 | CaptureZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 76 |
|
|---|
| 77 | CaptureB1Cmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureB1",this);
|
|---|
| 78 | CaptureB1Cmd->SetGuidance("Set B1 of the Capture Magnet");
|
|---|
| 79 | CaptureB1Cmd->SetParameterName("CSizeB1",false,false);
|
|---|
| 80 | CaptureB1Cmd->SetDefaultUnit("tesla");
|
|---|
| 81 | CaptureB1Cmd->SetRange("CSizeB1>0.");
|
|---|
| 82 | CaptureB1Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 83 |
|
|---|
| 84 | CaptureB2Cmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureB2",this);
|
|---|
| 85 | CaptureB2Cmd->SetGuidance("Set B2 of the Capture Magnet");
|
|---|
| 86 | CaptureB2Cmd->SetParameterName("CSizeB2",false,false);
|
|---|
| 87 | CaptureB2Cmd->SetDefaultUnit("tesla");
|
|---|
| 88 | CaptureB2Cmd->SetRange("CSizeB2>0.");
|
|---|
| 89 | CaptureB2Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 90 |
|
|---|
| 91 | TransferRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferR",this);
|
|---|
| 92 | TransferRCmd->SetGuidance("Set Radius of the Transfer Magnet");
|
|---|
| 93 | TransferRCmd->SetParameterName("TSizeR",false,false);
|
|---|
| 94 | TransferRCmd->SetDefaultUnit("cm");
|
|---|
| 95 | TransferRCmd->SetRange("TSizeR>0.");
|
|---|
| 96 | TransferRCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 97 |
|
|---|
| 98 | TransferZCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferZ",this);
|
|---|
| 99 | TransferZCmd->SetGuidance("Set Length of the Transfer Magnet");
|
|---|
| 100 | TransferZCmd->SetParameterName("TSizeZ",false,false);
|
|---|
| 101 | TransferZCmd->SetDefaultUnit("cm");
|
|---|
| 102 | TransferZCmd->SetRange("TSizeZ>0.");
|
|---|
| 103 | TransferZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 104 |
|
|---|
| 105 | TransferBCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferB",this);
|
|---|
| 106 | TransferBCmd->SetGuidance("Set B of the Transfer Magnet");
|
|---|
| 107 | TransferBCmd->SetParameterName("TSizeB",false,false);
|
|---|
| 108 | TransferBCmd->SetDefaultUnit("tesla");
|
|---|
| 109 | TransferBCmd->SetRange("TSizeB>0.");
|
|---|
| 110 | TransferBCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 111 |
|
|---|
| 112 | TransferPCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferP",this);
|
|---|
| 113 | TransferPCmd->SetGuidance("Set Z pos of the T-Mgnt from end of C-Mgnt");
|
|---|
| 114 | TransferPCmd->SetParameterName("TSizeP",false,false);
|
|---|
| 115 | TransferPCmd->SetDefaultUnit("cm");
|
|---|
| 116 | TransferPCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 117 |
|
|---|
| 118 | TgtMaterCmd = new G4UIcmdWithAString("/field04/SetTgtMat",this);
|
|---|
| 119 | TgtMaterCmd->SetGuidance("Select Material of the Target");
|
|---|
| 120 | TgtMaterCmd->SetParameterName("tchoice",true);
|
|---|
| 121 | TgtMaterCmd->SetDefaultValue("Tungsten");
|
|---|
| 122 | TgtMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 123 |
|
|---|
| 124 | TgtRadCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTgtRad",this);
|
|---|
| 125 | TgtRadCmd->SetGuidance("Set Radius of the Target");
|
|---|
| 126 | TgtRadCmd->SetParameterName("TgtSizeR",false,false);
|
|---|
| 127 | TgtRadCmd->SetDefaultUnit("cm");
|
|---|
| 128 | TgtRadCmd->SetRange("TgtSizeR>0.");
|
|---|
| 129 | TgtRadCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 130 |
|
|---|
| 131 | TgtThickCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTgtThick",this);
|
|---|
| 132 | TgtThickCmd->SetGuidance("Set Thickness of the Target");
|
|---|
| 133 | TgtThickCmd->SetParameterName("TgtSizeZ",false,false);
|
|---|
| 134 | TgtThickCmd->SetDefaultUnit("cm");
|
|---|
| 135 | TgtThickCmd->SetRange("TgtSizeZ>0.");
|
|---|
| 136 | TgtThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 137 |
|
|---|
| 138 | TgtPosCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTgtPos",this);
|
|---|
| 139 | TgtPosCmd->SetGuidance("Set Z pos of the tgt relative to C-Mgnt centre");
|
|---|
| 140 | TgtPosCmd->SetParameterName("TgtSizeP",false,false);
|
|---|
| 141 | TgtPosCmd->SetDefaultUnit("cm");
|
|---|
| 142 | TgtPosCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 143 |
|
|---|
| 144 | TgtAngCmd = new G4UIcmdWithAnInteger("/field04/SetTgtAng",this);
|
|---|
| 145 | TgtAngCmd->SetGuidance("Set the angle [in deg] of the Tgt relative to C-Mgnt centre");
|
|---|
| 146 | TgtAngCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 147 |
|
|---|
| 148 | DgrMaterCmd = new G4UIcmdWithAString("/field04/SetDgrMat",this);
|
|---|
| 149 | DgrMaterCmd->SetGuidance("Select Material of the Degrader");
|
|---|
| 150 | DgrMaterCmd->SetParameterName("dchoice",true);
|
|---|
| 151 | DgrMaterCmd->SetDefaultValue("Lead");
|
|---|
| 152 | DgrMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 153 |
|
|---|
| 154 | DgrRadCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetDgrRad",this);
|
|---|
| 155 | DgrRadCmd->SetGuidance("Set Radius of the Degrader");
|
|---|
| 156 | DgrRadCmd->SetParameterName("DrgSizeR",false,false);
|
|---|
| 157 | DgrRadCmd->SetDefaultUnit("cm");
|
|---|
| 158 | DgrRadCmd->SetRange("DrgSizeR>0.");
|
|---|
| 159 | DgrRadCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 160 |
|
|---|
| 161 | DgrThickCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetDgrThick",this);
|
|---|
| 162 | DgrThickCmd->SetGuidance("Set Thickness of the Degrader");
|
|---|
| 163 | DgrThickCmd->SetParameterName("DgrSizeZ",false,false);
|
|---|
| 164 | DgrThickCmd->SetDefaultUnit("cm");
|
|---|
| 165 | DgrThickCmd->SetRange("DgrSizeZ>0.");
|
|---|
| 166 | DgrThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 167 |
|
|---|
| 168 | DgrPosCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetDgrPos",this);
|
|---|
| 169 | DgrPosCmd->SetGuidance("Set Z pos of the Dgr relative to T-Mgnt centre");
|
|---|
| 170 | DgrPosCmd->SetParameterName("DgrSizeP",false,false);
|
|---|
| 171 | DgrPosCmd->SetDefaultUnit("cm");
|
|---|
| 172 | DgrPosCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 173 |
|
|---|
| 174 | UpdateCmd = new G4UIcmdWithoutParameter("/field04/Update",this);
|
|---|
| 175 | UpdateCmd->SetGuidance("Update field04 geometry");
|
|---|
| 176 | UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
|
|---|
| 177 | UpdateCmd->SetGuidance("if you changed geometrical value(s).");
|
|---|
| 178 | UpdateCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
|---|
| 179 |
|
|---|
| 180 | }
|
|---|
| 181 |
|
|---|
| 182 | F04DetectorMessenger::~F04DetectorMessenger()
|
|---|
| 183 | {
|
|---|
| 184 | delete detDir;
|
|---|
| 185 |
|
|---|
| 186 | delete WorldMaterCmd;
|
|---|
| 187 | delete WorldRCmd;
|
|---|
| 188 | delete WorldZCmd;
|
|---|
| 189 |
|
|---|
| 190 | delete CaptureRCmd;
|
|---|
| 191 | delete CaptureZCmd;
|
|---|
| 192 | delete CaptureB1Cmd;
|
|---|
| 193 | delete CaptureB2Cmd;
|
|---|
| 194 |
|
|---|
| 195 | delete TransferRCmd;
|
|---|
| 196 | delete TransferZCmd;
|
|---|
| 197 | delete TransferBCmd;
|
|---|
| 198 | delete TransferPCmd;
|
|---|
| 199 |
|
|---|
| 200 | delete TgtMaterCmd;
|
|---|
| 201 | delete TgtRadCmd;
|
|---|
| 202 | delete TgtThickCmd;
|
|---|
| 203 | delete TgtPosCmd;
|
|---|
| 204 | delete TgtAngCmd;
|
|---|
| 205 |
|
|---|
| 206 | delete DgrMaterCmd;
|
|---|
| 207 | delete DgrRadCmd;
|
|---|
| 208 | delete DgrThickCmd;
|
|---|
| 209 | delete DgrPosCmd;
|
|---|
| 210 |
|
|---|
| 211 | delete UpdateCmd;
|
|---|
| 212 | }
|
|---|
| 213 |
|
|---|
| 214 | void F04DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
|
|---|
| 215 | {
|
|---|
| 216 | if( command == WorldMaterCmd )
|
|---|
| 217 | { Detector->SetWorldMaterial(newValue);}
|
|---|
| 218 |
|
|---|
| 219 | if( command == TgtMaterCmd )
|
|---|
| 220 | { Detector->SetTargetMaterial(newValue);}
|
|---|
| 221 |
|
|---|
| 222 | if( command == DgrMaterCmd )
|
|---|
| 223 | { Detector->SetDegraderMaterial(newValue);}
|
|---|
| 224 |
|
|---|
| 225 | if( command == WorldRCmd )
|
|---|
| 226 | { Detector->SetWorldSizeR(WorldRCmd->GetNewDoubleValue(newValue));}
|
|---|
| 227 |
|
|---|
| 228 | if( command == WorldZCmd )
|
|---|
| 229 | { Detector->SetWorldSizeZ(WorldZCmd->GetNewDoubleValue(newValue));}
|
|---|
| 230 |
|
|---|
| 231 | if( command == CaptureRCmd )
|
|---|
| 232 | { Detector->SetCaptureMgntRadius(CaptureRCmd->GetNewDoubleValue(newValue));}
|
|---|
| 233 |
|
|---|
| 234 | if( command == CaptureZCmd )
|
|---|
| 235 | { Detector->SetCaptureMgntLength(CaptureZCmd->GetNewDoubleValue(newValue));}
|
|---|
| 236 |
|
|---|
| 237 | if( command == CaptureB1Cmd )
|
|---|
| 238 | { Detector->SetCaptureMgntB1(CaptureB1Cmd->GetNewDoubleValue(newValue));}
|
|---|
| 239 |
|
|---|
| 240 | if( command == CaptureB2Cmd )
|
|---|
| 241 | { Detector->SetCaptureMgntB2(CaptureB2Cmd->GetNewDoubleValue(newValue));}
|
|---|
| 242 |
|
|---|
| 243 | if( command == TransferRCmd )
|
|---|
| 244 | { Detector->SetTransferMgntRadius(TransferRCmd->GetNewDoubleValue(newValue));}
|
|---|
| 245 |
|
|---|
| 246 | if( command == TransferZCmd )
|
|---|
| 247 | { Detector->SetTransferMgntLength(TransferZCmd->GetNewDoubleValue(newValue));}
|
|---|
| 248 |
|
|---|
| 249 | if( command == TransferBCmd )
|
|---|
| 250 | { Detector->SetTransferMgntB(TransferBCmd->GetNewDoubleValue(newValue));}
|
|---|
| 251 |
|
|---|
| 252 | if( command == TransferPCmd )
|
|---|
| 253 | { Detector->SetTransferMgntPos(TransferPCmd->GetNewDoubleValue(newValue));}
|
|---|
| 254 |
|
|---|
| 255 | if( command == TgtRadCmd )
|
|---|
| 256 | { Detector->SetTargetRadius(TgtRadCmd->GetNewDoubleValue(newValue));}
|
|---|
| 257 |
|
|---|
| 258 | if( command == TgtThickCmd )
|
|---|
| 259 | { Detector->SetTargetThickness(TgtThickCmd->GetNewDoubleValue(newValue));}
|
|---|
| 260 |
|
|---|
| 261 | if( command == TgtPosCmd )
|
|---|
| 262 | { Detector->SetTargetPos(TgtPosCmd->GetNewDoubleValue(newValue));}
|
|---|
| 263 |
|
|---|
| 264 | if( command == TgtAngCmd )
|
|---|
| 265 | { Detector->SetTargetAngle(TgtAngCmd->GetNewIntValue(newValue));}
|
|---|
| 266 |
|
|---|
| 267 | if( command == DgrRadCmd )
|
|---|
| 268 | { Detector->SetDegraderRadius(DgrRadCmd->GetNewDoubleValue(newValue));}
|
|---|
| 269 |
|
|---|
| 270 | if( command == DgrThickCmd )
|
|---|
| 271 | { Detector->SetDegraderThickness(DgrThickCmd->GetNewDoubleValue(newValue));}
|
|---|
| 272 |
|
|---|
| 273 | if( command == DgrPosCmd )
|
|---|
| 274 | { Detector->SetDegraderPos(DgrPosCmd->GetNewDoubleValue(newValue));}
|
|---|
| 275 |
|
|---|
| 276 | if( command == WorldZCmd )
|
|---|
| 277 | { Detector->SetWorldSizeZ(WorldZCmd->GetNewDoubleValue(newValue));}
|
|---|
| 278 |
|
|---|
| 279 | if( command == WorldRCmd )
|
|---|
| 280 | { Detector->SetWorldSizeR(WorldRCmd->GetNewDoubleValue(newValue));}
|
|---|
| 281 |
|
|---|
| 282 | if( command == UpdateCmd )
|
|---|
| 283 | { Detector->UpdateGeometry(); }
|
|---|
| 284 |
|
|---|
| 285 | }
|
|---|