Geant4_10
G4MonopolePhysicsMessenger.cc
Go to the documentation of this file.
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 //
28 //
29 // $Id: G4MonopolePhysicsMessenger.cc 68036 2013-03-13 14:13:45Z gcosmo $
30 //
31 // 12.07.10 S.Burdin (changed the magnetic and electric charge variables from integer to double)
32 //
33 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
34 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
35 
37 
38 #include "G4MonopolePhysics.hh"
39 #include "G4UIdirectory.hh"
40 #include "G4UIcommand.hh"
41 #include "G4UIcmdWithADouble.hh"
43 
44 #include <sstream>
45 
46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
47 
49  : G4UImessenger(),
50  fPhys(p),
51  fPhysicsDir(0),
52  fPhysicsCmd(0),
53  fMCmd(0),
54  fZCmd(0),
55  fMassCmd(0)
56 {
57  fPhysicsDir = new G4UIdirectory("/monopole/");
58  fPhysicsDir->SetGuidance("histograms control");
59 
60  fPhysicsCmd = new G4UIcommand("/monopole/setup",this);
61  fPhysicsCmd->SetGuidance("Setup monopole");
62  //
63  G4UIparameter* qmag = new G4UIparameter("qmag",'d',false);
64  qmag->SetGuidance("Magnetic charge");
65  qmag->SetDefaultValue("1");
66  fPhysicsCmd->SetParameter(qmag);
67 
68  G4UIparameter* q = new G4UIparameter("qelec",'d',false);
69  q->SetGuidance("Electric charge charge");
70  q->SetDefaultValue("0");
71  fPhysicsCmd->SetParameter(q);
72  //
73  G4UIparameter* mass = new G4UIparameter("mass",'d',false);
74  mass->SetGuidance("mass");
75  mass->SetParameterRange("mass>0.");
76  qmag->SetDefaultValue("100");
77  fPhysicsCmd->SetParameter(mass);
78  //
79  G4UIparameter* unit = new G4UIparameter("unit",'s',false);
80  fPhysicsCmd->SetParameter(unit);
81  qmag->SetDefaultValue("GeV");
82  fPhysicsCmd->AvailableForStates(G4State_PreInit);
83 
84  fMCmd = new G4UIcmdWithADouble("/monopole/magCharge",this);
85  fMCmd->SetGuidance("Set monopole magnetic charge number");
86  fMCmd->SetParameterName("Qmag",false);
88 
89  fZCmd = new G4UIcmdWithADouble("/monopole/elCharge",this);
90  fZCmd->SetGuidance("Set monopole electric charge number");
91  fZCmd->SetParameterName("Qel",false);
93 
94  fMassCmd = new G4UIcmdWithADoubleAndUnit("/monopole/Mass",this);
95  fMassCmd->SetGuidance("Set monopole fMass");
96  fMassCmd->SetParameterName("Mass",false);
97  fMassCmd->SetRange("Mass>0.");
98  fMassCmd->SetUnitCategory("Energy");
100 
101 }
102 
103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
104 
106 {
107  delete fPhysicsCmd;
108  delete fMCmd;
109  delete fZCmd;
110  delete fMassCmd;
111  delete fPhysicsDir;
112 }
113 
114 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
115 
117  G4String newValue)
118 {
119  if (command == fPhysicsCmd)
120  { G4double q, m; G4double mass;
121  G4String unts;
122  std::istringstream is(newValue);
123  is >> m >> q >> mass >> unts;
124  G4String unit = unts;
125  G4double vUnit = G4UIcommand::ValueOf(unit);
126  fPhys->SetMagneticCharge(m);
127  fPhys->SetElectricCharge(q);
128  fPhys->SetMonopoleMass(mass*vUnit);
129  }
130  if (command == fMCmd) {
131  fPhys->SetMagneticCharge(fMCmd->GetNewDoubleValue(newValue));
132  }
133  if (command == fZCmd) {
134  fPhys->SetElectricCharge(fZCmd->GetNewDoubleValue(newValue));
135  }
136  if (command == fMassCmd) {
137  fPhys->SetMonopoleMass(fMassCmd->GetNewDoubleValue(newValue));
138  }
139 }
140 
141 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:152
void SetElectricCharge(G4double)
void SetMonopoleMass(G4double)
void SetParameterRange(const char *theRange)
const char * p
Definition: xmltok.h:285
void SetDefaultValue(const char *theDefaultValue)
virtual void SetNewValue(G4UIcommand *, G4String)
void SetUnitCategory(const char *unitCategory)
void SetMagneticCharge(G4double)
static G4double GetNewDoubleValue(const char *paramString)
static G4double GetNewDoubleValue(const char *paramString)
void SetRange(const char *rs)
Definition: G4UIcommand.hh:125
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:161
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:225
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
Definition of the G4MonopolePhysicsMessenger class.
static G4double ValueOf(const char *unitName)
Definition: G4UIcommand.cc:294
Definition of the G4MonopolePhysics class.
G4MonopolePhysicsMessenger(G4MonopolePhysics *)
double G4double
Definition: G4Types.hh:76
void SetGuidance(const char *theGuidance)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)