00001
00002 #include "GeneratorMessenger.hh"
00003
00004
00005 #include "EventSourceManager.hh"
00006
00007
00008 #include "StringUtil.hh"
00009
00010
00011 #include "G4UIcommand.hh"
00012 #include "G4UIdirectory.hh"
00013 #include "G4UIcmdWithAnInteger.hh"
00014
00015
00016 #include "CLHEP/Random/Random.h"
00017 #include "CLHEP/Random/Randomize.h"
00018
00019 namespace CLHEP {}
00020 using namespace CLHEP;
00021
00022 namespace slic
00023 {
00024
00025 GeneratorMessenger::GeneratorMessenger()
00026 {
00027 defineCommands();
00028 }
00029
00030 GeneratorMessenger::~GeneratorMessenger()
00031 {}
00032
00033 void GeneratorMessenger::SetNewValue(G4UIcommand* cmd, G4String newVals)
00034 {
00035 std::istringstream is ( ( const char* ) newVals );
00036
00037 std::string s;
00038 is >> s;
00039
00040 EventSourceManager* mgr = EventSourceManager::instance();
00041
00042
00043 if ( cmd == m_selectCmd ) {
00044 mgr->setupEventSource( s );
00045 }
00046
00047 else if ( cmd == m_resetCmd ) {
00048 mgr->resetCurrentEventSource();
00049 }
00050
00051 else if ( cmd == m_skipEventsCmd ) {
00052 mgr->setSkipEvents( StringUtil::toInt( s ) );
00053 }
00054
00055 else if ( cmd == m_filenameCmd ) {
00056 mgr->setFilename( s );
00057 }
00058
00059 else if ( cmd == m_dumpCurrentEventCmd ) {
00060 mgr->dumpCurrentEvent();
00061 }
00062
00063 else if ( cmd == m_printNumEventsGeneratedCmd ) {
00064 mgr->printNumEventsGenerated();
00065 }
00066
00067 else if ( cmd == m_randomSeedCmd ) {
00068
00069 G4int seed = 0;
00070
00071
00072 if ( s != std::string("") ) {
00073 seed = StringUtil::toInt( s );
00074 }
00075
00076
00077 else {
00078 seed = ((unsigned)time(NULL));
00079 }
00080
00081
00082 HepRandom::setTheSeed( seed );
00083
00084 mgr->log() << LOG::okay << "set random seed: " << seed << LOG::done;
00085 }
00086 else {
00087 G4Exception("Unknown cmd for this messenger.");
00088 }
00089 }
00090
00091 void GeneratorMessenger::defineCommands()
00092 {
00093 G4UIparameter *p;
00094
00095
00096 m_generatorDir = new G4UIdirectory( "/generator/" );
00097 m_generatorDir->SetGuidance( "Event generation commands. [SLIC]" );
00098
00099
00100 m_selectCmd = new G4UIcommand( "/generator/select", this );
00101 m_selectCmd->SetGuidance( "Set Generator to use: lcio, stdhep, gps or gun." );
00102 p = new G4UIparameter( "generator", 's', false );
00103 m_selectCmd->SetParameter(p);
00104
00105
00106 m_resetCmd = new G4UIcommand( "/generator/reset", this);
00107 m_resetCmd->SetGuidance( "Reset the generator using the current info." );
00108
00109
00110 m_skipEventsCmd = new G4UIcmdWithAnInteger( "/generator/skipEvents", this);
00111 m_skipEventsCmd->SetGuidance( "Skip n events of current generator." );
00112 m_skipEventsCmd->SetParameterName( "NumEvents", false);
00113
00114
00115 m_filenameCmd = new G4UIcommand( "/generator/filename", this);
00116 m_filenameCmd->SetGuidance( "Set generator input filename.");
00117 p = new G4UIparameter( "filename", 's', false);
00118 m_filenameCmd->SetParameter(p);
00119
00120
00121 m_dumpCurrentEventCmd = new G4UIcommand( "/generator/dumpEvent", this);
00122 m_dumpCurrentEventCmd->SetGuidance( "Dump information about the current generator event." );
00123
00124
00125 m_printNumEventsGeneratedCmd = new G4UIcommand( "/generator/printNumEventsGenerated", this);
00126 m_printNumEventsGeneratedCmd->SetGuidance( "Print out number of events generated with current generator.");
00127
00128
00129 m_randomSeedCmd = new G4UIcommand( "/random/seed", this );
00130 m_randomSeedCmd->SetGuidance( "Set random seed; no argument seeds with current time. [SLIC]" );
00131 p = new G4UIparameter( "seedValue", 'i', true );
00132 m_randomSeedCmd->SetParameter( p );
00133 }
00134 }