78   gunDirectory->SetGuidance(
"Particle Source control commands.");
 
   82   listCmd->SetGuidance(
"List available particles.");
 
   83   listCmd->SetGuidance(
" Invoke G4ParticleTable.");
 
   87   particleCmd->SetGuidance(
"Set particle to be generated.");
 
   88   particleCmd->SetGuidance(
" (geantino is default)");
 
   89   particleCmd->SetGuidance(
" (ion can be specified for shooting ions)");
 
   90   particleCmd->SetParameterName(
"particleName",
true);
 
   91   particleCmd->SetDefaultValue(
"geantino");
 
   93   G4int nPtcl = particleTable->entries();
 
   94   for(
G4int i=0;i<nPtcl;i++)
 
   96       candidateList += particleTable->GetParticleName(i);
 
   99   candidateList += 
"ion ";
 
  100   particleCmd->SetCandidates(candidateList);
 
  105   directionCmd->SetGuidance(
"Set momentum direction.");
 
  106   directionCmd->SetGuidance(
"Direction needs not to be a unit vector.");
 
  107   directionCmd->SetParameterName(
"Px",
"Py",
"Pz",
true,
true); 
 
  108   directionCmd->SetRange(
"Px != 0 || Py != 0 || Pz != 0");
 
  112   energyCmd->SetGuidance(
"Set kinetic energy.");
 
  113   energyCmd->SetParameterName(
"Energy",
true,
true);
 
  114   energyCmd->SetDefaultUnit(
"GeV");
 
  119   positionCmd->SetGuidance(
"Set starting position of the particle.");
 
  120   positionCmd->SetParameterName(
"X",
"Y",
"Z",
true,
true);
 
  121   positionCmd->SetDefaultUnit(
"cm");
 
  128   ionCmd->SetGuidance(
"Set properties of ion to be generated.");
 
  129   ionCmd->SetGuidance(
"[usage] /gun/ion Z A Q E");
 
  130   ionCmd->SetGuidance(
"        Z:(int) AtomicNumber");
 
  131   ionCmd->SetGuidance(
"        A:(int) AtomicMass");
 
  132   ionCmd->SetGuidance(
"        Q:(int) Charge of Ion (in unit of e)");
 
  133   ionCmd->SetGuidance(
"        E:(double) Excitation energy (in keV)");
 
  138   ionCmd->SetParameter(param);
 
  141   ionCmd->SetParameter(param);
 
  144   ionCmd->SetParameter(param);
 
  147   ionCmd->SetParameter(param);
 
  152   typeCmd->SetGuidance(
"Sets source distribution type.");
 
  153   typeCmd->SetGuidance(
"Either Point or Volume");
 
  154   typeCmd->SetParameterName(
"DisType",
true,
true);
 
  155   typeCmd->SetDefaultValue(
"Point");
 
  156   typeCmd->SetCandidates(
"Point Volume");
 
  160   shapeCmd->SetGuidance(
"Sets source shape type.");
 
  161   shapeCmd->SetParameterName(
"Shape",
true,
true);
 
  162   shapeCmd->SetDefaultValue(
"NULL");
 
  163   shapeCmd->SetCandidates(
"Sphere Cylinder");
 
  167   centreCmd->SetGuidance(
"Set centre coordinates of source.");
 
  168   centreCmd->SetParameterName(
"X",
"Y",
"Z",
true,
true);
 
  169   centreCmd->SetDefaultUnit(
"cm");
 
  170   centreCmd->SetUnitCandidates(
"nm um mm cm m km");
 
  174   halfzCmd->SetGuidance(
"Set z half length of source.");
 
  175   halfzCmd->SetParameterName(
"Halfz",
true,
true);
 
  176   halfzCmd->SetDefaultUnit(
"cm");
 
  177   halfzCmd->SetUnitCandidates(
"nm um mm cm m km");
 
  181   radiusCmd->SetGuidance(
"Set radius of source.");
 
  182   radiusCmd->SetParameterName(
"Radius",
true,
true);
 
  183   radiusCmd->SetDefaultUnit(
"cm");
 
  184   radiusCmd->SetUnitCandidates(
"nm um mm cm m km");
 
  188   confineCmd->SetGuidance(
"Confine source to volume (NULL to unset).");
 
  189   confineCmd->SetGuidance(
"usage: confine VolName");
 
  190   confineCmd->SetParameterName(
"VolName",
true,
true);
 
  191   confineCmd->SetDefaultValue(
"NULL");
 
  195   angtypeCmd->SetGuidance(
"Sets angular source distribution type");
 
  196   angtypeCmd->SetGuidance(
"Possible variables are: iso direction");
 
  197   angtypeCmd->SetParameterName(
"AngDis",
true,
true);
 
  198   angtypeCmd->SetDefaultValue(
"iso");
 
  199   angtypeCmd->SetCandidates(
"iso direction");
 
  203   energytypeCmd->SetGuidance(
"Sets energy distribution type");
 
  204   energytypeCmd->SetGuidance(
"Possible variables are: Mono");
 
  205   energytypeCmd->SetParameterName(
"EnergyDis",
true,
true);
 
  206   energytypeCmd->SetDefaultValue(
"Mono");
 
  207   energytypeCmd->SetCandidates(
"Mono");
 
  211   verbosityCmd->SetGuidance(
"Set Verbose level for gun");
 
  212   verbosityCmd->SetGuidance(
" 0 : Silent");
 
  213   verbosityCmd->SetGuidance(
" 1 : Limited information");
 
  214   verbosityCmd->SetGuidance(
" 2 : Detailed information");
 
  215   verbosityCmd->SetParameterName(
"level",
false);
 
  216   verbosityCmd->SetRange(
"level>=0 && level <=2");
 
  230   delete energytypeCmd;
 
  245   if(command == typeCmd)
 
  246     fParticleGun->SetPosDisType(newValues);
 
  248   else if(command == shapeCmd)
 
  249     fParticleGun->SetPosDisShape(newValues);
 
  251   else if(command == centreCmd)
 
  252     fParticleGun->SetCentreCoords(centreCmd->GetNew3VectorValue(newValues));
 
  254   else if(command == halfzCmd)
 
  255     fParticleGun->SetHalfZ(halfzCmd->GetNewDoubleValue(newValues));
 
  257   else if(command == radiusCmd)
 
  258     fParticleGun->SetRadius(radiusCmd->GetNewDoubleValue(newValues));
 
  260   else if(command == angtypeCmd)
 
  261       fParticleGun->SetAngDistType(newValues);
 
  263   else if(command == confineCmd)
 
  264     fParticleGun->ConfineSourceToVolume(newValues);
 
  266   else if(command == energytypeCmd)
 
  267     fParticleGun->SetEnergyDisType(newValues);
 
  269   else if(command == verbosityCmd)
 
  270     fParticleGun->SetVerbosity(verbosityCmd->GetNewIntValue(newValues));
 
  272   else if( command==particleCmd ) {
 
  273     if (newValues ==
"ion") {
 
  279     { fParticleGun->SetParticleDefinition( pd ); }
 
  283   else if( command==ionCmd ) {
 
  287       fAtomicNumber = StoI(next());
 
  288       fAtomicMass = StoI(next());
 
  291     fIonCharge = fAtomicNumber;
 
  293     fIonCharge = StoI(sQ);
 
  296       fIonExciteEnergy = 0.0;
 
  298       fIonExciteEnergy = StoD(sQ) * 
keV;
 
  305     G4cout << 
"Ion with Z=" << fAtomicNumber;
 
  306     G4cout << 
" A=" << fAtomicMass << 
"is not be defined" << 
G4endl;    
 
  308     fParticleGun->SetParticleDefinition(ion);
 
  309     fParticleGun->SetParticleCharge(fIonCharge*
eplus);
 
  312       G4cout<<
"Set /dmx/gun/particle to ion before using /dmx/gun/ion command";
 
  317   else if( command==listCmd )
 
  318     particleTable->DumpTable();
 
  320   else if( command==directionCmd ) { 
 
  321     fParticleGun->SetAngDistType(
"direction");
 
  322     fParticleGun->SetParticleMomentumDirection
 
  323       (directionCmd->GetNew3VectorValue(newValues));
 
  326   else if( command==energyCmd ) {
 
  327     fParticleGun->SetEnergyDisType(
"Mono");
 
  328     fParticleGun->SetMonoEnergy(energyCmd->GetNewDoubleValue(newValues));
 
  331   else if( command==positionCmd ) { 
 
  332     fParticleGun->SetPosDisType(
"Point");    
 
  333     fParticleGun->SetCentreCoords(positionCmd->GetNew3VectorValue(newValues));
 
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
 
void SetDefaultValue(const char *theDefaultValue)
 
void SetNewValue(G4UIcommand *command, G4String newValues)
 
DMXParticleSourceMessenger(DMXParticleSource *fPtclGun)
 
G4GLOB_DLL std::ostream G4cout
 
static constexpr double eplus
 
static G4IonTable * GetIonTable()
 
~DMXParticleSourceMessenger()
 
static G4ParticleTable * GetParticleTable()
 
static constexpr double keV