SLIC  6.1.1
Simulation for the Linear Collider (SLIC) - Geant4 simulation application
GeneratorMessenger.cc
Go to the documentation of this file.
1 #include "GeneratorMessenger.hh"
2 
3 // SLIC
4 #include "EventSourceManager.hh"
5 
6 // LCDD
7 #include "lcdd/util/StringUtil.hh"
8 
9 // Geant4
10 #include "G4UIcommand.hh"
11 #include "G4UIdirectory.hh"
12 #include "G4UIcmdWithAnInteger.hh"
13 #include "G4UIcmdWithADoubleAndUnit.hh"
14 #include "G4UIcmdWithADouble.hh"
15 
16 // CLHEP
17 #include "CLHEP/Random/Random.h"
18 #include "CLHEP/Random/Randomize.h"
19 
20 #include <ctime>
21 
22 namespace CLHEP {
23 }
24 using namespace CLHEP;
25 
26 namespace slic {
27 
28 GeneratorMessenger::GeneratorMessenger() {
29  defineCommands();
30 }
31 
32 GeneratorMessenger::~GeneratorMessenger() {
33 }
34 
35 void GeneratorMessenger::SetNewValue(G4UIcommand* cmd, G4String newVals) {
36  std::istringstream is((const char*) newVals);
37 
38  std::string s;
39  is >> s;
40 
41  EventSourceManager* mgr = EventSourceManager::instance();
42 
43  // select
44  if (cmd == m_selectCmd) {
45  mgr->setupEventSource(s);
46  }
47  // reset
48  else if (cmd == m_resetCmd) {
50  }
51  // skipEvents
52  else if (cmd == m_skipEventsCmd) {
53  mgr->setSkipEvents(StringUtil::toInt(s));
54  }
55  // filename
56  else if (cmd == m_filenameCmd) {
57  mgr->setFilename(s);
58  }
59  // dumpCurrentEvent
60  else if (cmd == m_enablePrintEventCmd) {
61  G4bool enablePrintEvent = StringUtil::toBool(s);
62  mgr->enablePrintEvent(enablePrintEvent);
63  }
64  // printNumEventsGenerated
65  else if (cmd == m_printNumEventsGeneratedCmd) {
67  }
68  // set random seed
69  else if (cmd == m_randomSeedCmd) {
70  G4int seed = 0;
71 
72  // seed from user arg
73  if (s != std::string("")) {
74  seed = StringUtil::toInt(s);
75  }
76  // seed from time
77  // @todo Get MS instead of just seconds, which is not very good quality for a seed.
78  else {
79  seed = ((unsigned) time(NULL));
80  }
81 
82  // seed it
83  HepRandom::setTheSeed(seed);
84 
85  mgr->log() << LOG::okay << "set random seed: " << seed << LOG::done;
86  }
87  // Lorentz transformation angle
88  else if (cmd == m_setLorentzTransformationAngleCmd) {
89  EventSourceManager::instance()->setLorentzTransformationAngle(G4UIcmdWithADoubleAndUnit::GetNewDoubleValue(newVals));
90  } else if (cmd == m_setZSmearingParameterCmd) {
91  EventSourceManager::instance()->setZSmearing(G4UIcmdWithADouble::GetNewDoubleValue(newVals));
92  } else {
93  G4Exception("", "", JustWarning, "Unknown command.");
94  }
95 }
96 
97 void GeneratorMessenger::defineCommands() {
98  G4UIparameter *p;
99 
100  // generator dir
101  m_generatorDir = new G4UIdirectory("/generator/");
102  m_generatorDir->SetGuidance("Event generation commands.");
103 
104  // select
105  m_selectCmd = new G4UIcommand("/generator/select", this);
106  m_selectCmd->SetGuidance("Set Generator to use: lcio, stdhep, gps or gun.");
107  p = new G4UIparameter("generator", 's', false);
108  m_selectCmd->SetParameter(p);
109 
110  // reset
111  m_resetCmd = new G4UIcommand("/generator/reset", this);
112  m_resetCmd->SetGuidance("Reset the generator using the current info.");
113 
114  // skipEvents
115  m_skipEventsCmd = new G4UIcmdWithAnInteger("/generator/skipEvents", this);
116  m_skipEventsCmd->SetGuidance("Skip n events of current generator.");
117  m_skipEventsCmd->SetParameterName("NumEvents", false);
118 
119  // filename
120  m_filenameCmd = new G4UIcommand("/generator/filename", this);
121  m_filenameCmd->SetGuidance("Set generator input filename.");
122  p = new G4UIparameter("filename", 's', false);
123  m_filenameCmd->SetParameter(p);
124 
125  // dumpCurrentEvent
126  m_enablePrintEventCmd = new G4UIcommand("/generator/printEvent", this);
127  m_enablePrintEventCmd->SetGuidance("Dump information about the current generator event.");
128 
129  // printNumEventsGenerated
130  m_printNumEventsGeneratedCmd = new G4UIcommand("/generator/printNumEventsGenerated", this);
131  m_printNumEventsGeneratedCmd->SetGuidance("Print out number of events generated with current generator.");
132 
133  // random seed cmd
134  m_randomSeedCmd = new G4UIcommand("/random/seed", this);
135  m_randomSeedCmd->SetGuidance("Set random seed; no argument seeds with current time.");
136  p = new G4UIparameter("seedValue", 'i', true);
137  m_randomSeedCmd->SetParameter(p);
138 
139  // Lorentz transformation
140  m_setLorentzTransformationAngleCmd = new G4UIcmdWithADoubleAndUnit("/generator/setLorentzTransformationAngle", this);
141  m_setLorentzTransformationAngleCmd->SetGuidance("Set the Lorentz transformation angle to boost generated events.");
142 
143  // Z smearing parameter.
144  m_setZSmearingParameterCmd = new G4UIcmdWithADouble("/generator/setZSmearingParameter", this);
145  m_setZSmearingParameterCmd->SetGuidance("Set the parameter for smearing vertex Z positions.");
146 }
147 }
This singleton is responsible for managing physics event sources.
void setFilename(const std::string &fileName)
void enablePrintEvent(G4bool enable)
void setSkipEvents(unsigned int n)
LogStream & log()
Definition: Module.hh:99
@ okay
Definition: LogStream.hh:33
@ time
Definition: LogStream.hh:26
@ done
Definition: LogStream.hh:26