slic/src
diff -u -r1.69 -r1.70
--- LcioManager.cc 27 Jun 2006 21:46:10 -0000 1.69
+++ LcioManager.cc 4 Aug 2006 23:10:51 -0000 1.70
@@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/LcioManager.cc,v 1.69 2006/06/27 21:46:10 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/LcioManager.cc,v 1.70 2006/08/04 23:10:51 jeremy Exp $
#include "LcioManager.hh"
// slic
@@ -65,23 +65,25 @@
m_writerIsOpen(false),
m_usingAutoname(false)
{
- // messenger
+ // Initialize the Geant4 UI messenger for the LCIO.
m_messenger = new LcioMessenger(this);
- // generator
+ // Initialize the LCIO-based event generator.
m_eventGenerator = new LcioPrimaryGenerator(this);
- // Mcp manager instance
+ // Initialize the LCIO MCParticle manager.
m_mcpManager = LcioMcpManager::instance();
- // HC builder
+ // Initialize the LCIO HitsCollectionBuilder.
m_HCBuilder = new LcioHitsCollectionBuilder();
- // create LCWriter
+ // Create the LCIO writer.
createWriter();
+ // Create the LCIO file namer.
m_namer = new LcioFileNamer();
+ // Set the default output file name.
m_filename = m_defaultFileName;
}
@@ -116,24 +118,24 @@
void LcioManager::openLcioFile()
{
- // get full output path with extension to check its existence
+ // Get full output path with extension to check its existence.
string fullFilename = getFullOutputPath( true );
- // default to writing a new file
+ // Default to writing a new file.
int writeMode = LCIO::WRITE_NEW;
- // file exists?
+ // File exists?
if ( FileUtil::fileExists( fullFilename ) ) {
- // failure mode is on so die
+ // Failure mode is on, so kill the current run.
if ( m_fileExistsAction == eFail ) {
- std::cerr << "LCIO file <" << fullFilename << "> already exists and FileExistsAction = fail." << std::endl;
- G4Exception("LCIO file already exists.");
+ std::cerr << "ERROR: LCIO file <" << fullFilename << "> already exists and FileExistsAction is fail." << std::endl;
+ m_abortCurrentRun = true;
}
- // or try to delete it
+ // Deletion mode is on, so try to remove the current file.
else if ( m_fileExistsAction == eDelete ) {
if ( FileUtil::removeFile( fullFilename ) != 0 ) {
- // could not remove it!
+ // Fatal error. File could not be removed.
std::cerr << "Unable to delete old LCIO file <" << fullFilename << ">" << std::endl;
G4Exception("Unable to delete old LCIO file.");
}
@@ -141,18 +143,18 @@
std::cout << "Deleted old LCIO file <" << fullFilename << ">" << std::endl;
}
}
- // or append to it
+ // Append mod is on.
else if ( m_fileExistsAction == eAppend ) {
std::cout << "Appending to existing LCIO file <" << fullFilename << ">" << std::endl;
writeMode = LCIO::WRITE_APPEND;
}
}
- // create a new file
+ // Create a new file if doesn't exist.
else {
std::cout << "Creating new Lcio file <" << fullFilename << ">" << std::endl;
}
- // open the file using the writer with the full path and no extension
+ // Open the file using the writer with the full path.
if( m_writer ) {
m_writer->open( getFullOutputPath(), writeMode );
m_writerIsOpen = true;
@@ -183,9 +185,6 @@
{
m_runNumber = rnt;
- // set G4Run # start
- G4RunManager::GetRunManager()->SetRunIDCounter( m_runNumber );
-
#ifdef SLIC_VERBOSE
if ( verbose() > 0 ) {
std::cout << "Set starting run number <" << m_runNumber << ">" << std::endl;
@@ -232,40 +231,51 @@
void LcioManager::beginRun(const G4Run* aRun)
{
- // create new LCRunHeader
- createRunHeader( aRun );
+ // Reset the abort run flag.
+ m_abortCurrentRun = false;
- /*
- * Make autoname from stored fields.
- * Needs to be delayed until this point
- * so that run and event IDs are correct.
- */
+ // Automatically create LCIO output file name if option was selected.
if ( m_usingAutoname ) {
makeAutoname();
}
- // open the Lcio output file for writing
+ // Set the G4Run counter.
+ G4RunManager::GetRunManager()->SetRunIDCounter(m_runNumber);
+
+ // Open the LCIO output file for writing.
openLcioFile();
- // write the run header
- m_writer->writeRunHeader( m_runHdr );
+ // Run aborted, because LCIO output file already exists.
+ if (m_abortCurrentRun) {
+ G4RunManager::GetRunManager()->AbortRun();
+ }
+ // Setup the run header.
+ else {
+ // create new LCRunHeader
+ createRunHeader( aRun );
+
+ // write the run header
+ m_writer->writeRunHeader( m_runHdr );
- // incr run number
- ++m_runNumber;
+ // Incr run number.
+ ++m_runNumber;
+ }
}
void LcioManager::endRun()
{
- // delete the run header
+ // Delete the LCIO run header object.
deleteRunHeader();
- // close the writer to flush it (may reopen)
+ // Close the writer to flush it (could be reopened).
m_writer->close();
m_writerIsOpen = false;
- // set append for subsequent writes if interactive mode
- if ( G4Application::instance()->getMode() == G4Application::eInteractive ) {
- m_fileExistsAction = eAppend;
+ // Set append mode for subsequent writes if interactive mode and the run was not aborted.
+ if (!m_abortCurrentRun) {
+ if ( G4Application::instance()->getMode() == G4Application::eInteractive ) {
+ m_fileExistsAction = eAppend;
+ }
}
}
@@ -278,7 +288,7 @@
m_runHdr->parameters().setValue( "APP_STRING", PackageInfo::getFullApplicationString() );
// set run number
- m_runHdr->setRunNumber( m_runNumber );
+ m_runHdr->setRunNumber(m_runNumber);
// set detector name in LCIO header
setDetectorName();
@@ -381,9 +391,9 @@
assert( anEvent );
LCEventImpl* lcevt = new LCEventImpl();
- lcevt->setEventNumber( anEvent->GetEventID() );
- lcevt->setRunNumber( m_runHdr->getRunNumber() );
- lcevt->setDetectorName( m_runHdr->getDetectorName() );
+ lcevt->setEventNumber(anEvent->GetEventID() );
+ lcevt->setRunNumber(m_runHdr->getRunNumber() );
+ lcevt->setDetectorName(m_runHdr->getDetectorName() );
setCurrentLCEvent( lcevt );
return lcevt;
}
@@ -396,34 +406,37 @@
void LcioManager::endEvent(const G4Event*)
{
- // create LCEvent
- createLCEvent();
+ if (!m_abortCurrentRun) {
- // create Mcp coll in LcioMcpManager
- m_mcpManager->endEvent( G4EventManager::GetEventManager()->GetNonconstCurrentEvent() );
+ // create LCEvent
+ createLCEvent();
- // create mcp collection from input event
- createFinalMcpCollection();
+ // create Mcp coll in LcioMcpManager
+ m_mcpManager->endEvent( G4EventManager::GetEventManager()->GetNonconstCurrentEvent() );
- // create HC in current LCEvent from current G4Event using builder
- createHitsCollections();
+ // create mcp collection from input event
+ createFinalMcpCollection();
- // dump event stats to cout
- if ( m_enableDumpEvent ) {
- LCTOOLS::dumpEvent( m_currentLCEvent );
- }
+ // create HC in current LCEvent from current G4Event using builder
+ createHitsCollections();
- // set timestamp
- setEventTimeStamp();
+ // dump event stats to cout
+ if ( m_enableDumpEvent ) {
+ LCTOOLS::dumpEvent( m_currentLCEvent );
+ }
- // write event
- m_writer->writeEvent( m_currentLCEvent );
+ // set timestamp
+ setEventTimeStamp();
- // flush writer
- m_writer->flush();
+ // write event
+ m_writer->writeEvent( m_currentLCEvent );
- // delete event's transient objects, including current LCEvent
- reset();
+ // flush writer
+ m_writer->flush();
+
+ // delete event's transient objects, including current LCEvent
+ reset();
+ }
}
void LcioManager::setEventTimeStamp()