00001
00002 #include "LcioMcpMessenger.hh"
00003
00004
00005 #include "LcioManager.hh"
00006 #include "LcioMcpManager.hh"
00007 #include "TrajectoryManager.hh"
00008 #include "StringUtil.hh"
00009
00010
00011 #include "G4UIparameter.hh"
00012
00013 namespace slic
00014 {
00015
00016 LcioMcpMessenger::LcioMcpMessenger()
00017 {
00018 defineCommands();
00019 }
00020
00021 LcioMcpMessenger::~LcioMcpMessenger()
00022 {}
00023
00024 void LcioMcpMessenger::SetNewValue(G4UIcommand* cmd, G4String newVals)
00025 {
00026 std::istringstream is ( ( const char* ) newVals );
00027 std::string s;
00028 is >> s;
00029
00030 LcioMcpManager* mgr = LcioMcpManager::instance();
00031
00032
00033 if ( cmd == m_minTrackingDistanceCmd ) {
00034 mgr->setMinimumTrackingDistance( m_minTrackingDistanceCmd->GetNewDoubleValue( newVals ) );
00035 }
00036 else if ( cmd == m_printFinalCollection ) {
00037 mgr->enablePrintFinal( m_printFinalCollection->GetNewBoolValue( newVals.c_str() ) );
00038 }
00039 else if ( cmd == m_printInitialCollection ) {
00040 mgr->enablePrintInitial( m_printInitialCollection->GetNewBoolValue( newVals.c_str() ) );
00041 }
00042
00043 else if ( cmd == m_writeInitialCollection ) {
00044 mgr->setWriteInitialMCParticleCollection( m_writeInitialCollection->GetNewBoolValue(newVals.c_str() ) );
00045 }
00046 else {
00047 G4Exception( "LcioMessenger::setNewValue() - unknown command" );
00048 }
00049
00050 return;
00051 }
00052
00053 void LcioMcpMessenger::defineCommands()
00054 {
00055
00056 m_mcpDir = new G4UIdirectory( "/mcp/" );
00057 m_mcpDir->SetGuidance( "LCIO Monte Carlo Particle commands. [SLIC]" );
00058
00059
00060 m_minTrackingDistanceCmd = new G4UIcmdWithADoubleAndUnit( "/mcp/minimumTrackingDistance", this );
00061 m_minTrackingDistanceCmd->SetGuidance( "Set the minimum travel distance for an input particle to be tracked in Geant4." );
00062 m_minTrackingDistanceCmd->SetParameterName("minimumTrackingDistance", false, true);
00063 m_minTrackingDistanceCmd->SetDefaultUnit("mm");
00064 m_minTrackingDistanceCmd->SetDefaultValue(0.1);
00065 m_minTrackingDistanceCmd->SetRange("minimumTrackingDistance > 0.");
00066
00067
00068 m_printInitialCollection = new G4UIcmdWithABool( "/mcp/printInitialCollection", this );
00069 m_printInitialCollection->SetGuidance( "Enable printing of the initial MCParticle collection during event processing." );
00070 m_printInitialCollection->SetParameterName("enable", true);
00071 m_printInitialCollection->SetDefaultValue(true);
00072
00073
00074 m_printFinalCollection = new G4UIcmdWithABool( "/mcp/printFinalCollection", this );
00075 m_printFinalCollection->SetGuidance( "Enable printing of the final MCParticle collection during event processing." );
00076 m_printFinalCollection->SetParameterName("enable", true);
00077 m_printFinalCollection->SetDefaultValue(true);
00078
00079 m_writeInitialCollection = new G4UIcmdWithABool( "/mcp/writeInitialCollection", this );
00080 m_writeInitialCollection->SetGuidance( "Write the initial MCParticle collection from StdHep conversion to the LCEvent." );
00081 m_writeInitialCollection->SetParameterName( "enable", true );
00082 m_writeInitialCollection->SetDefaultValue(false);
00083 }
00084 }