GeneratorMessenger.cc

Go to the documentation of this file.
00001 // $Header: /cvs/lcd/slic/src/GeneratorMessenger.cc,v 1.9 2007/04/27 01:54:34 jeremy Exp $
00002 #include "GeneratorMessenger.hh"
00003 
00004 // slic
00005 #include "EventSourceManager.hh"
00006 
00007 // lcdd
00008 #include "StringUtil.hh"
00009 
00010 // geant4
00011 #include "G4UIcommand.hh"
00012 #include "G4UIdirectory.hh"
00013 #include "G4UIcmdWithAnInteger.hh"
00014 
00015 // clhep
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     // select
00043     if ( cmd == m_selectCmd ) {
00044       mgr->setupEventSource( s );
00045     }
00046     // reset
00047     else if ( cmd == m_resetCmd ) {
00048       mgr->resetCurrentEventSource();
00049     }
00050     // skipEvents
00051     else if ( cmd == m_skipEventsCmd ) {
00052       mgr->setSkipEvents( StringUtil::toInt( s ) );
00053     }
00054     // filename
00055     else if ( cmd == m_filenameCmd ) {
00056       mgr->setFilename( s );
00057     }
00058     // dumpCurrentEvent
00059     else if ( cmd == m_dumpCurrentEventCmd ) {
00060       mgr->dumpCurrentEvent();
00061     }
00062     // printNumEventsGenerated
00063     else if ( cmd == m_printNumEventsGeneratedCmd ) {
00064       mgr->printNumEventsGenerated();
00065     }
00066     // set random seed
00067     else if ( cmd == m_randomSeedCmd ) {
00068 
00069       G4int seed = 0;
00070 
00071       // seed from user arg
00072       if ( s != std::string("") ) {
00073         seed = StringUtil::toInt( s );
00074       }
00075       // seed from time
00076       // @todo Get MS instead of just seconds, which is not very good quality for a seed.
00077       else {
00078         seed = ((unsigned)time(NULL));
00079       }
00080 
00081       // seed it
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     // generator dir
00096     m_generatorDir = new G4UIdirectory( "/generator/" );
00097     m_generatorDir->SetGuidance( "Event generation commands. [SLIC]" );
00098 
00099     // select
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     // reset
00106     m_resetCmd = new G4UIcommand( "/generator/reset", this);
00107     m_resetCmd->SetGuidance( "Reset the generator using the current info." );
00108 
00109     // skipEvents
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     // filename
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     // dumpCurrentEvent
00121     m_dumpCurrentEventCmd = new G4UIcommand( "/generator/dumpEvent", this);
00122     m_dumpCurrentEventCmd->SetGuidance( "Dump information about the current generator event." );
00123 
00124     // printNumEventsGenerated
00125     m_printNumEventsGeneratedCmd = new G4UIcommand( "/generator/printNumEventsGenerated", this);
00126     m_printNumEventsGeneratedCmd->SetGuidance( "Print out number of events generated with current generator.");
00127 
00128     // random seed cmd
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 }

Generated on Thu Nov 15 15:24:16 2007 for Simulator for the Linear Collider by  doxygen 1.5.4