Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/underground_physics/src/DMXParticleSourceMessenger.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/underground_physics/src/DMXParticleSourceMessenger.cc (Version 11.3.0) and /examples/advanced/underground_physics/src/DMXParticleSourceMessenger.cc (Version 11.2.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 // -------------------------------------------     27 // --------------------------------------------------------------
 28 //   GEANT 4 - Underground Dark Matter Detecto     28 //   GEANT 4 - Underground Dark Matter Detector Advanced Example
 29 //                                                 29 //
 30 //      For information related to this code c     30 //      For information related to this code contact: Alex Howard
 31 //      e-mail: alexander.howard@cern.ch           31 //      e-mail: alexander.howard@cern.ch
 32 // -------------------------------------------     32 // --------------------------------------------------------------
 33 // Comments                                        33 // Comments
 34 //                                                 34 //
 35 //                  Underground Advanced           35 //                  Underground Advanced
 36 //               by A. Howard and H. Araujo        36 //               by A. Howard and H. Araujo 
 37 //                    (27th November 2001)         37 //                    (27th November 2001)
 38 //                                                 38 //
 39 // ParticleSourceMessenger program                 39 // ParticleSourceMessenger program
 40 // -------------------------------------------     40 // --------------------------------------------------------------
 41 //////////////////////////////////////////////     41 //////////////////////////////////////////////////////////////////////////////
 42 // This particle source is a shortened version     42 // This particle source is a shortened version of G4GeneralParticleSource by
 43 // C Ferguson, F Lei & P Truscott (University      43 // C Ferguson, F Lei & P Truscott (University of Southampton / DERA), with
 44 // some minor modifications.                       44 // some minor modifications.
 45 //////////////////////////////////////////////     45 //////////////////////////////////////////////////////////////////////////////
 46                                                    46 
 47 #include <fstream>                                 47 #include <fstream>
 48 #include <iomanip>                                 48 #include <iomanip>               
 49                                                    49 
 50 #include "DMXParticleSourceMessenger.hh"           50 #include "DMXParticleSourceMessenger.hh"
 51 #include "DMXParticleSource.hh"                    51 #include "DMXParticleSource.hh"
 52                                                    52 
 53 #include "G4SystemOfUnits.hh"                      53 #include "G4SystemOfUnits.hh"
 54 #include "G4Geantino.hh"                           54 #include "G4Geantino.hh"
 55 #include "G4ThreeVector.hh"                        55 #include "G4ThreeVector.hh"
 56 #include "G4ParticleTable.hh"                      56 #include "G4ParticleTable.hh"
 57 #include "G4IonTable.hh"                           57 #include "G4IonTable.hh"
 58 #include "G4UIdirectory.hh"                        58 #include "G4UIdirectory.hh"
 59 #include "G4UIcmdWithoutParameter.hh"              59 #include "G4UIcmdWithoutParameter.hh"
 60 #include "G4UIcmdWithAString.hh"                   60 #include "G4UIcmdWithAString.hh"
 61 #include "G4UIcmdWithADoubleAndUnit.hh"            61 #include "G4UIcmdWithADoubleAndUnit.hh"
 62 #include "G4UIcmdWith3Vector.hh"                   62 #include "G4UIcmdWith3Vector.hh"
 63 #include "G4UIcmdWith3VectorAndUnit.hh"            63 #include "G4UIcmdWith3VectorAndUnit.hh"
 64 #include "G4UIcmdWithAnInteger.hh"                 64 #include "G4UIcmdWithAnInteger.hh"
 65 #include "G4UIcmdWithADouble.hh"                   65 #include "G4UIcmdWithADouble.hh"
 66 #include "G4UIcmdWithABool.hh"                     66 #include "G4UIcmdWithABool.hh"
 67 #include "G4ios.hh"                                67 #include "G4ios.hh"
 68 #include "G4Tokenizer.hh"                          68 #include "G4Tokenizer.hh"
 69                                                    69 
 70 //////////////////////////////////////////////     70 ///////////////////////////////////////////////////////////////////////////////
 71 DMXParticleSourceMessenger::DMXParticleSourceM     71 DMXParticleSourceMessenger::DMXParticleSourceMessenger
 72 (DMXParticleSource *fPtclGun) : fParticleGun(f     72 (DMXParticleSource *fPtclGun) : fParticleGun(fPtclGun),fShootIon(false) {
 73                                                    73 
 74   particleTable = G4ParticleTable::GetParticle     74   particleTable = G4ParticleTable::GetParticleTable();
 75                                                    75 
 76   // create directory                              76   // create directory
 77   gunDirectory = new G4UIdirectory("/dmx/gun/"     77   gunDirectory = new G4UIdirectory("/dmx/gun/");
 78   gunDirectory->SetGuidance("Particle Source c     78   gunDirectory->SetGuidance("Particle Source control commands.");
 79                                                    79 
 80   // list available particles                      80   // list available particles
 81   listCmd = new G4UIcmdWithoutParameter("/dmx/     81   listCmd = new G4UIcmdWithoutParameter("/dmx/gun/List",this);
 82   listCmd->SetGuidance("List available particl     82   listCmd->SetGuidance("List available particles.");
 83   listCmd->SetGuidance(" Invoke G4ParticleTabl     83   listCmd->SetGuidance(" Invoke G4ParticleTable.");
 84                                                    84 
 85   // set particle                                  85   // set particle  
 86   particleCmd = new G4UIcmdWithAString("/dmx/g     86   particleCmd = new G4UIcmdWithAString("/dmx/gun/particle",this);
 87   particleCmd->SetGuidance("Set particle to be     87   particleCmd->SetGuidance("Set particle to be generated.");
 88   particleCmd->SetGuidance(" (geantino is defa     88   particleCmd->SetGuidance(" (geantino is default)");
 89   particleCmd->SetGuidance(" (ion can be speci     89   particleCmd->SetGuidance(" (ion can be specified for shooting ions)");
 90   particleCmd->SetParameterName("particleName"     90   particleCmd->SetParameterName("particleName",true);
 91   particleCmd->SetDefaultValue("geantino");        91   particleCmd->SetDefaultValue("geantino");
 92   G4String candidateList;                          92   G4String candidateList; 
 93   G4int nPtcl = particleTable->entries();          93   G4int nPtcl = particleTable->entries();
 94   for(G4int i=0;i<nPtcl;i++)                       94   for(G4int i=0;i<nPtcl;i++)
 95     {                                              95     {
 96       candidateList += particleTable->GetParti     96       candidateList += particleTable->GetParticleName(i);
 97       candidateList += " ";                        97       candidateList += " ";
 98     }                                              98     }
 99   candidateList += "ion ";                         99   candidateList += "ion ";
100   particleCmd->SetCandidates(candidateList);      100   particleCmd->SetCandidates(candidateList);
101                                                   101   
102                                                   102 
103   // particle direction                           103   // particle direction
104   directionCmd = new G4UIcmdWith3Vector("/dmx/    104   directionCmd = new G4UIcmdWith3Vector("/dmx/gun/direction",this);
105   directionCmd->SetGuidance("Set momentum dire    105   directionCmd->SetGuidance("Set momentum direction.");
106   directionCmd->SetGuidance("Direction needs n    106   directionCmd->SetGuidance("Direction needs not to be a unit vector.");
107   directionCmd->SetParameterName("Px","Py","Pz    107   directionCmd->SetParameterName("Px","Py","Pz",true,true); 
108   directionCmd->SetRange("Px != 0 || Py != 0 |    108   directionCmd->SetRange("Px != 0 || Py != 0 || Pz != 0");
109                                                   109   
110   // particle energy                              110   // particle energy
111   energyCmd = new G4UIcmdWithADoubleAndUnit("/    111   energyCmd = new G4UIcmdWithADoubleAndUnit("/dmx/gun/energy",this);
112   energyCmd->SetGuidance("Set kinetic energy."    112   energyCmd->SetGuidance("Set kinetic energy.");
113   energyCmd->SetParameterName("Energy",true,tr    113   energyCmd->SetParameterName("Energy",true,true);
114   energyCmd->SetDefaultUnit("GeV");               114   energyCmd->SetDefaultUnit("GeV");
115   //energyCmd->SetUnitCategory("Energy");         115   //energyCmd->SetUnitCategory("Energy");
116   //energyCmd->SetUnitCandidates("eV keV MeV G    116   //energyCmd->SetUnitCandidates("eV keV MeV GeV TeV");
117                                                   117 
118   positionCmd = new G4UIcmdWith3VectorAndUnit(    118   positionCmd = new G4UIcmdWith3VectorAndUnit("/dmx/gun/position",this);
119   positionCmd->SetGuidance("Set starting posit    119   positionCmd->SetGuidance("Set starting position of the particle.");
120   positionCmd->SetParameterName("X","Y","Z",tr    120   positionCmd->SetParameterName("X","Y","Z",true,true);
121   positionCmd->SetDefaultUnit("cm");              121   positionCmd->SetDefaultUnit("cm");
122   //positionCmd->SetUnitCategory("Length");       122   //positionCmd->SetUnitCategory("Length");
123   //positionCmd->SetUnitCandidates("microm mm     123   //positionCmd->SetUnitCandidates("microm mm cm m km");
124                                                   124 
125                                                   125  
126   // ion                                          126   // ion 
127   ionCmd = new G4UIcommand("/dmx/gun/ion",this    127   ionCmd = new G4UIcommand("/dmx/gun/ion",this);
128   ionCmd->SetGuidance("Set properties of ion t    128   ionCmd->SetGuidance("Set properties of ion to be generated.");
129   ionCmd->SetGuidance("[usage] /gun/ion Z A Q     129   ionCmd->SetGuidance("[usage] /gun/ion Z A Q E");
130   ionCmd->SetGuidance("        Z:(int) AtomicN    130   ionCmd->SetGuidance("        Z:(int) AtomicNumber");
131   ionCmd->SetGuidance("        A:(int) AtomicM    131   ionCmd->SetGuidance("        A:(int) AtomicMass");
132   ionCmd->SetGuidance("        Q:(int) Charge     132   ionCmd->SetGuidance("        Q:(int) Charge of Ion (in unit of e)");
133   ionCmd->SetGuidance("        E:(double) Exci    133   ionCmd->SetGuidance("        E:(double) Excitation energy (in keV)");
134                                                   134   
135   G4UIparameter* param;                           135   G4UIparameter* param;
136   param = new G4UIparameter("Z",'i',false);       136   param = new G4UIparameter("Z",'i',false);
137   param->SetDefaultValue("1");                    137   param->SetDefaultValue("1");
138   ionCmd->SetParameter(param);                    138   ionCmd->SetParameter(param);
139   param = new G4UIparameter("A",'i',false);       139   param = new G4UIparameter("A",'i',false);
140   param->SetDefaultValue("1");                    140   param->SetDefaultValue("1");
141   ionCmd->SetParameter(param);                    141   ionCmd->SetParameter(param);
142   param = new G4UIparameter("Q",'i',true);        142   param = new G4UIparameter("Q",'i',true);
143   param->SetDefaultValue("0");                    143   param->SetDefaultValue("0");
144   ionCmd->SetParameter(param);                    144   ionCmd->SetParameter(param);
145   param = new G4UIparameter("E",'d',true);        145   param = new G4UIparameter("E",'d',true);
146   param->SetDefaultValue("0.0");                  146   param->SetDefaultValue("0.0");
147   ionCmd->SetParameter(param);                    147   ionCmd->SetParameter(param);
148                                                   148   
149                                                   149 
150   // source distribution type                     150   // source distribution type
151   typeCmd = new G4UIcmdWithAString("/dmx/gun/t    151   typeCmd = new G4UIcmdWithAString("/dmx/gun/type",this);
152   typeCmd->SetGuidance("Sets source distributi    152   typeCmd->SetGuidance("Sets source distribution type.");
153   typeCmd->SetGuidance("Either Point or Volume    153   typeCmd->SetGuidance("Either Point or Volume");
154   typeCmd->SetParameterName("DisType",true,tru    154   typeCmd->SetParameterName("DisType",true,true);
155   typeCmd->SetDefaultValue("Point");              155   typeCmd->SetDefaultValue("Point");
156   typeCmd->SetCandidates("Point Volume");         156   typeCmd->SetCandidates("Point Volume");
157                                                   157   
158   // source shape                                 158   // source shape
159   shapeCmd = new G4UIcmdWithAString("/dmx/gun/    159   shapeCmd = new G4UIcmdWithAString("/dmx/gun/shape",this);
160   shapeCmd->SetGuidance("Sets source shape typ    160   shapeCmd->SetGuidance("Sets source shape type.");
161   shapeCmd->SetParameterName("Shape",true,true    161   shapeCmd->SetParameterName("Shape",true,true);
162   shapeCmd->SetDefaultValue("NULL");              162   shapeCmd->SetDefaultValue("NULL");
163   shapeCmd->SetCandidates("Sphere Cylinder");     163   shapeCmd->SetCandidates("Sphere Cylinder");
164                                                   164   
165   // centre coordinates                           165   // centre coordinates
166   centreCmd = new G4UIcmdWith3VectorAndUnit("/    166   centreCmd = new G4UIcmdWith3VectorAndUnit("/dmx/gun/centre",this);
167   centreCmd->SetGuidance("Set centre coordinat    167   centreCmd->SetGuidance("Set centre coordinates of source.");
168   centreCmd->SetParameterName("X","Y","Z",true    168   centreCmd->SetParameterName("X","Y","Z",true,true);
169   centreCmd->SetDefaultUnit("cm");                169   centreCmd->SetDefaultUnit("cm");
170   centreCmd->SetUnitCandidates("nm um mm cm m     170   centreCmd->SetUnitCandidates("nm um mm cm m km");
171                                                   171 
172   // half height of source                        172   // half height of source
173   halfzCmd = new G4UIcmdWithADoubleAndUnit("/d    173   halfzCmd = new G4UIcmdWithADoubleAndUnit("/dmx/gun/halfz",this);
174   halfzCmd->SetGuidance("Set z half length of     174   halfzCmd->SetGuidance("Set z half length of source.");
175   halfzCmd->SetParameterName("Halfz",true,true    175   halfzCmd->SetParameterName("Halfz",true,true);
176   halfzCmd->SetDefaultUnit("cm");                 176   halfzCmd->SetDefaultUnit("cm");
177   halfzCmd->SetUnitCandidates("nm um mm cm m k    177   halfzCmd->SetUnitCandidates("nm um mm cm m km");
178                                                   178 
179   // radius of source                             179   // radius of source  
180   radiusCmd = new G4UIcmdWithADoubleAndUnit("/    180   radiusCmd = new G4UIcmdWithADoubleAndUnit("/dmx/gun/radius",this);
181   radiusCmd->SetGuidance("Set radius of source    181   radiusCmd->SetGuidance("Set radius of source.");
182   radiusCmd->SetParameterName("Radius",true,tr    182   radiusCmd->SetParameterName("Radius",true,true);
183   radiusCmd->SetDefaultUnit("cm");                183   radiusCmd->SetDefaultUnit("cm");
184   radiusCmd->SetUnitCandidates("nm um mm cm m     184   radiusCmd->SetUnitCandidates("nm um mm cm m km");
185                                                   185   
186   // confine to volume                            186   // confine to volume
187   confineCmd = new G4UIcmdWithAString("/dmx/gu    187   confineCmd = new G4UIcmdWithAString("/dmx/gun/confine",this);
188   confineCmd->SetGuidance("Confine source to v    188   confineCmd->SetGuidance("Confine source to volume (NULL to unset).");
189   confineCmd->SetGuidance("usage: confine VolN    189   confineCmd->SetGuidance("usage: confine VolName");
190   confineCmd->SetParameterName("VolName",true,    190   confineCmd->SetParameterName("VolName",true,true);
191   confineCmd->SetDefaultValue("NULL");            191   confineCmd->SetDefaultValue("NULL");
192                                                   192   
193   // angular distribution                         193   // angular distribution
194   angtypeCmd = new G4UIcmdWithAString("/dmx/gu    194   angtypeCmd = new G4UIcmdWithAString("/dmx/gun/angtype",this);
195   angtypeCmd->SetGuidance("Sets angular source    195   angtypeCmd->SetGuidance("Sets angular source distribution type");
196   angtypeCmd->SetGuidance("Possible variables     196   angtypeCmd->SetGuidance("Possible variables are: iso direction");
197   angtypeCmd->SetParameterName("AngDis",true,t    197   angtypeCmd->SetParameterName("AngDis",true,true);
198   angtypeCmd->SetDefaultValue("iso");             198   angtypeCmd->SetDefaultValue("iso");
199   angtypeCmd->SetCandidates("iso direction");     199   angtypeCmd->SetCandidates("iso direction");
200                                                   200   
201   // energy distribution                          201   // energy distribution
202   energytypeCmd = new G4UIcmdWithAString("/dmx    202   energytypeCmd = new G4UIcmdWithAString("/dmx/gun/energytype",this);
203   energytypeCmd->SetGuidance("Sets energy dist    203   energytypeCmd->SetGuidance("Sets energy distribution type");
204   energytypeCmd->SetGuidance("Possible variabl    204   energytypeCmd->SetGuidance("Possible variables are: Mono");
205   energytypeCmd->SetParameterName("EnergyDis",    205   energytypeCmd->SetParameterName("EnergyDis",true,true);
206   energytypeCmd->SetDefaultValue("Mono");         206   energytypeCmd->SetDefaultValue("Mono");
207   energytypeCmd->SetCandidates("Mono");           207   energytypeCmd->SetCandidates("Mono");
208                                                   208 
209   // verbosity                                    209   // verbosity
210   verbosityCmd = new G4UIcmdWithAnInteger("/dm    210   verbosityCmd = new G4UIcmdWithAnInteger("/dmx/gun/verbose",this);
211   verbosityCmd->SetGuidance("Set Verbose level    211   verbosityCmd->SetGuidance("Set Verbose level for gun");
212   verbosityCmd->SetGuidance(" 0 : Silent");       212   verbosityCmd->SetGuidance(" 0 : Silent");
213   verbosityCmd->SetGuidance(" 1 : Limited info    213   verbosityCmd->SetGuidance(" 1 : Limited information");
214   verbosityCmd->SetGuidance(" 2 : Detailed inf    214   verbosityCmd->SetGuidance(" 2 : Detailed information");
215   verbosityCmd->SetParameterName("level",false    215   verbosityCmd->SetParameterName("level",false);
216   verbosityCmd->SetRange("level>=0 && level <=    216   verbosityCmd->SetRange("level>=0 && level <=2");
217                                                   217   
218 }                                                 218 }
219                                                   219 
220                                                   220 
221 DMXParticleSourceMessenger::~DMXParticleSource    221 DMXParticleSourceMessenger::~DMXParticleSourceMessenger() {
222                                                   222 
223   delete typeCmd;                                 223   delete typeCmd;
224   delete shapeCmd;                                224   delete shapeCmd;
225   delete centreCmd;                               225   delete centreCmd;
226   delete halfzCmd;                                226   delete halfzCmd;
227   delete radiusCmd;                               227   delete radiusCmd;
228   delete confineCmd;                              228   delete confineCmd;
229   delete angtypeCmd;                              229   delete angtypeCmd;
230   delete energytypeCmd;                           230   delete energytypeCmd;
231   delete verbosityCmd;                            231   delete verbosityCmd;
232   delete ionCmd;                                  232   delete ionCmd;
233   delete particleCmd;                             233   delete particleCmd;
234   delete positionCmd;                             234   delete positionCmd;
235   delete directionCmd;                            235   delete directionCmd;
236   delete energyCmd;                               236   delete energyCmd;
237   delete listCmd;                                 237   delete listCmd;
238                                                   238 
239   delete gunDirectory;                            239   delete gunDirectory;
240 }                                                 240 }
241                                                   241 
242 void DMXParticleSourceMessenger::SetNewValue      242 void DMXParticleSourceMessenger::SetNewValue
243    (G4UIcommand *command, G4String newValues)     243    (G4UIcommand *command, G4String newValues) {
244                                                   244 
245   if(command == typeCmd)                          245   if(command == typeCmd)
246     fParticleGun->SetPosDisType(newValues);       246     fParticleGun->SetPosDisType(newValues);
247                                                   247 
248   else if(command == shapeCmd)                    248   else if(command == shapeCmd)
249     fParticleGun->SetPosDisShape(newValues);      249     fParticleGun->SetPosDisShape(newValues);
250                                                   250 
251   else if(command == centreCmd)                   251   else if(command == centreCmd)
252     fParticleGun->SetCentreCoords(centreCmd->G    252     fParticleGun->SetCentreCoords(centreCmd->GetNew3VectorValue(newValues));
253                                                   253 
254   else if(command == halfzCmd)                    254   else if(command == halfzCmd)
255     fParticleGun->SetHalfZ(halfzCmd->GetNewDou    255     fParticleGun->SetHalfZ(halfzCmd->GetNewDoubleValue(newValues));
256                                                   256 
257   else if(command == radiusCmd)                   257   else if(command == radiusCmd)
258     fParticleGun->SetRadius(radiusCmd->GetNewD    258     fParticleGun->SetRadius(radiusCmd->GetNewDoubleValue(newValues));
259                                                   259 
260   else if(command == angtypeCmd)                  260   else if(command == angtypeCmd)
261       fParticleGun->SetAngDistType(newValues);    261       fParticleGun->SetAngDistType(newValues);
262                                                   262 
263   else if(command == confineCmd)                  263   else if(command == confineCmd)
264     fParticleGun->ConfineSourceToVolume(newVal    264     fParticleGun->ConfineSourceToVolume(newValues);
265                                                   265 
266   else if(command == energytypeCmd)               266   else if(command == energytypeCmd)
267     fParticleGun->SetEnergyDisType(newValues);    267     fParticleGun->SetEnergyDisType(newValues);
268                                                   268   
269   else if(command == verbosityCmd)                269   else if(command == verbosityCmd)
270     fParticleGun->SetVerbosity(verbosityCmd->G    270     fParticleGun->SetVerbosity(verbosityCmd->GetNewIntValue(newValues));
271                                                   271 
272   else if( command==particleCmd ) {               272   else if( command==particleCmd ) {
273     if (newValues =="ion") {                      273     if (newValues =="ion") {
274       fShootIon = true;                           274       fShootIon = true;
275     } else {                                      275     } else {
276       fShootIon = false;                          276       fShootIon = false;
277       G4ParticleDefinition* pd = particleTable    277       G4ParticleDefinition* pd = particleTable->FindParticle(newValues);
278       if(pd != NULL)                              278       if(pd != NULL)
279     { fParticleGun->SetParticleDefinition( pd     279     { fParticleGun->SetParticleDefinition( pd ); }
280     }                                             280     }
281   }                                               281   }
282                                                   282 
283   else if( command==ionCmd ) {                    283   else if( command==ionCmd ) {
284     if (fShootIon) {                              284     if (fShootIon) {
285       G4Tokenizer next( newValues );              285       G4Tokenizer next( newValues );
286       // check argument                           286       // check argument
287       fAtomicNumber = StoI(next());               287       fAtomicNumber = StoI(next());
288       fAtomicMass = StoI(next());                 288       fAtomicMass = StoI(next());
289       G4String sQ = next();                       289       G4String sQ = next();
290       if (sQ.empty()) {                           290       if (sQ.empty()) {
291   fIonCharge = fAtomicNumber;                     291   fIonCharge = fAtomicNumber;
292       } else {                                    292       } else {
293   fIonCharge = StoI(sQ);                          293   fIonCharge = StoI(sQ);
294   sQ = next();                                    294   sQ = next();
295   if (sQ.empty()) {                               295   if (sQ.empty()) {
296     fIonExciteEnergy = 0.0;                       296     fIonExciteEnergy = 0.0;
297   } else {                                        297   } else {
298     fIonExciteEnergy = StoD(sQ) * keV;            298     fIonExciteEnergy = StoD(sQ) * keV;
299   }                                               299   }
300       }                                           300       }
301                                                   301       
302       G4ParticleDefinition* ion;                  302       G4ParticleDefinition* ion;
303       ion =  G4IonTable::GetIonTable()->GetIon    303       ion =  G4IonTable::GetIonTable()->GetIon(fAtomicNumber,fAtomicMass,fIonExciteEnergy);
304       if (ion==0) {                               304       if (ion==0) {
305   G4cout << "Ion with Z=" << fAtomicNumber;       305   G4cout << "Ion with Z=" << fAtomicNumber;
306   G4cout << " A=" << fAtomicMass << "is not be    306   G4cout << " A=" << fAtomicMass << "is not be defined" << G4endl;    
307       } else {                                    307       } else {
308   fParticleGun->SetParticleDefinition(ion);       308   fParticleGun->SetParticleDefinition(ion);
309   fParticleGun->SetParticleCharge(fIonCharge*e    309   fParticleGun->SetParticleCharge(fIonCharge*eplus);
310       }                                           310       }
311     } else {                                      311     } else {
312       G4cout<<"Set /dmx/gun/particle to ion be    312       G4cout<<"Set /dmx/gun/particle to ion before using /dmx/gun/ion command";
313       G4cout<<G4endl;                             313       G4cout<<G4endl; 
314     }                                             314     }
315   }                                               315   }
316                                                   316 
317   else if( command==listCmd )                     317   else if( command==listCmd )
318     particleTable->DumpTable();                   318     particleTable->DumpTable();
319                                                   319 
320   else if( command==directionCmd ) {              320   else if( command==directionCmd ) { 
321     fParticleGun->SetAngDistType("direction");    321     fParticleGun->SetAngDistType("direction");
322     fParticleGun->SetParticleMomentumDirection    322     fParticleGun->SetParticleMomentumDirection
323       (directionCmd->GetNew3VectorValue(newVal    323       (directionCmd->GetNew3VectorValue(newValues));
324   }                                               324   }
325                                                   325 
326   else if( command==energyCmd ) {                 326   else if( command==energyCmd ) {
327     fParticleGun->SetEnergyDisType("Mono");       327     fParticleGun->SetEnergyDisType("Mono");
328     fParticleGun->SetMonoEnergy(energyCmd->Get    328     fParticleGun->SetMonoEnergy(energyCmd->GetNewDoubleValue(newValues));
329   }                                               329   }  
330                                                   330 
331   else if( command==positionCmd ) {               331   else if( command==positionCmd ) { 
332     fParticleGun->SetPosDisType("Point");         332     fParticleGun->SetPosDisType("Point");    
333     fParticleGun->SetCentreCoords(positionCmd-    333     fParticleGun->SetCentreCoords(positionCmd->GetNew3VectorValue(newValues));
334   }                                               334   }
335   else                                            335   else
336     G4cout << "Error entering command" << G4en    336     G4cout << "Error entering command" << G4endl;
337 }                                                 337 }
338                                                   338 
339                                                   339 
340                                                   340 
341                                                   341 
342                                                   342