ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HadrontherapyModulatorMessenger.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file HadrontherapyModulatorMessenger.cc
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 // This is the *BASIC* version of Hadrontherapy, a Geant4-based application
27 // See more at: http://g4advancedexamples.lngs.infn.it/Examples/hadrontherapy
28 //
29 // Visit the Hadrontherapy web site (http://www.lns.infn.it/link/Hadrontherapy) to request
30 // the *COMPLETE* version of this program, together with its documentation;
31 // Hadrontherapy (both basic and full version) are supported by the Italian INFN
32 // Institute in the framework of the MC-INFN Group
33 //
34 
35 
38 #include "G4UIdirectory.hh"
40 #include "G4UIcmdWithAString.hh"
42 
43 
45 :Modulator(Mod)
46 
47 {
48  modulatorDir = new G4UIdirectory("/modulator/");
49  modulatorDir -> SetGuidance("Command to change the modulator wheel proprties");
50 
51  modulatorMatCmd = new G4UIcmdWithAString("/modulator/RMWMat",this);
52  modulatorMatCmd -> SetGuidance("Set material of modulatorWheel");
53  modulatorMatCmd -> SetParameterName("Material",false);
54  modulatorMatCmd -> AvailableForStates(G4State_Idle);
55 
56  modulatorExternalFile=new G4UIcmdWithAString("/modulator/ReadData",this);
57  modulatorExternalFile -> SetGuidance("set properties of modulator steps via a external file");
58  modulatorExternalFile -> SetParameterName("FileName",true,false);
59  modulatorExternalFile -> SetDefaultValue ("default");
60  modulatorExternalFile -> AvailableForStates(G4State_Idle);
61 
62  modulatorPositionCmd = new G4UIcmdWith3VectorAndUnit("/modulator/position",this);
63  modulatorPositionCmd -> SetGuidance("Set position of modulato");
64  modulatorPositionCmd -> SetParameterName("PositionAlongX",
65  "PositionAlongY",
66  "PositionAlongZ",false);
67  modulatorPositionCmd -> SetDefaultUnit("mm");
68  modulatorPositionCmd -> SetUnitCandidates("mm cm m");
69  modulatorPositionCmd -> AvailableForStates(G4State_Idle);
70 
71 
72  modulatorOuterRadiusCmd = new G4UIcmdWithADoubleAndUnit("/modulator/outRadius",this);
73  modulatorOuterRadiusCmd -> SetGuidance("Set size of outer radius");
74  modulatorOuterRadiusCmd-> SetParameterName("Size",false);
75  modulatorOuterRadiusCmd -> SetDefaultUnit("mm");
76  modulatorOuterRadiusCmd-> SetUnitCandidates("mm cm m");
77  modulatorOuterRadiusCmd-> AvailableForStates(G4State_Idle);
78 
79  modulatorInnerRadiusCmd = new G4UIcmdWithADoubleAndUnit("/modulator/innerRadius",this);
80  modulatorInnerRadiusCmd -> SetGuidance("Set size of inner radius");
81  modulatorInnerRadiusCmd-> SetParameterName("Size",false);
82  modulatorInnerRadiusCmd -> SetDefaultUnit("mm");
83  modulatorInnerRadiusCmd-> SetUnitCandidates("mm cm m");
84  modulatorInnerRadiusCmd-> AvailableForStates(G4State_Idle);
85 
86  modulatorAngleCmd = new G4UIcmdWithADoubleAndUnit("/modulator/angle",this);
87  modulatorAngleCmd -> SetGuidance("Set Modulator Angle");
88  modulatorAngleCmd -> SetParameterName("Size",false);
89  modulatorAngleCmd -> SetRange("Size>=0.");
90  modulatorAngleCmd -> SetUnitCategory("Angle");
91  modulatorAngleCmd -> AvailableForStates(G4State_Idle);
92 }
93 
95 {
96  delete modulatorAngleCmd;
97  delete modulatorMatCmd;
98  delete modulatorPositionCmd;
101  delete modulatorDir;
102 }
103 
104 
105 
106 
108 {
109  if( command == modulatorAngleCmd )
110  {Modulator -> SetModulatorAngle
111  (modulatorAngleCmd -> GetNewDoubleValue(newValue));}
112 
113  else if( command == modulatorMatCmd )
114  {Modulator -> SetModulatorMaterial(newValue);}
115 
116  else if (command== modulatorExternalFile)
117  {Modulator->GetDataFromFile(newValue);}
118 
119  else if( command == modulatorPositionCmd )
120  { G4ThreeVector size = modulatorPositionCmd-> GetNew3VectorValue(newValue);
121  Modulator -> SetModulatorPosition(size);}
122 
123  else if( command == modulatorOuterRadiusCmd )
124  { Modulator -> SetModulatorOuterRadius(
125  modulatorOuterRadiusCmd -> GetNewDoubleValue(newValue));}
126 
127  else if( command == modulatorInnerRadiusCmd )
128  { Modulator -> SetModulatorInnerRadius(
129  modulatorInnerRadiusCmd -> GetNewDoubleValue(newValue));}
130 }
131