![]() |
|
|
Generated: 24 Nov 2008 |
00001 // $Id: OutputFSRStream.cpp,v 1.1 2008/11/04 22:49:25 marcocle Exp $ 00002 #define GAUDISVC_PERSISTENCYSVC_OUTPUTFSRSTREAM_CPP 00003 00004 // Framework include files 00005 #include "GaudiKernel/AlgFactory.h" 00006 #include "GaudiKernel/IRegistry.h" 00007 #include "GaudiKernel/IDataManagerSvc.h" 00008 #include "GaudiKernel/IDataProviderSvc.h" 00009 #include "GaudiKernel/IOpaqueAddress.h" 00010 #include "GaudiKernel/DataStoreItem.h" 00011 #include "GaudiKernel/DataObject.h" 00012 #include "GaudiKernel/MsgStream.h" 00013 #include "OutputFSRStream.h" 00014 00015 // Define the algorithm factory for the standard output data writer 00016 DECLARE_ALGORITHM_FACTORY(OutputFSRStream) 00017 00018 // Standard Constructor 00019 OutputFSRStream::OutputFSRStream(const std::string& name, ISvcLocator* pSvcLocator) 00020 : OutputStream(name, pSvcLocator) 00021 { 00022 m_FSRItemNames.clear(); 00023 m_FSROptItemNames.clear(); 00024 00025 declareProperty( "FSRItemList", m_FSRItemNames, "Mandatory items to be written as FSRs" ); 00026 declareProperty( "FSROptItemList", m_FSROptItemNames, "Optional items to be written as FSRs" ); 00027 } 00028 00029 // Standard Destructor 00030 OutputFSRStream::~OutputFSRStream() { 00031 } 00032 00033 StatusCode OutputFSRStream::stop() { 00034 MsgStream log(msgSvc(), name()); 00035 log << MSG::INFO << "Set up File Summary Record" << endmsg; 00036 00037 // Clear last real event from TES, and prepare it to receive FSR objects 00038 StatusCode sc = m_pDataManager->setRoot ("/Event", new DataObject()); 00039 if( !sc.isSuccess() ) { 00040 log << MSG::WARNING << "Error declaring event root DataObject" << endmsg; 00041 } 00042 return OutputStream::stop(); 00043 } 00044 00045 StatusCode OutputFSRStream::finalize() { 00046 00047 MsgStream log(msgSvc(), name()); 00048 00049 // Clear any previously existing item list 00050 clearSelection(); 00051 00052 // Clear the list with optional items 00053 clearItems(m_optItemList); 00054 // Clear the item list 00055 clearItems(m_itemList); 00056 00057 ItemNames::iterator i; 00058 // Take the new item list from the FSRItemList properties 00059 for(i = m_FSRItemNames.begin(); i != m_FSRItemNames.end(); i++) { 00060 addItem( m_itemList, *i ); 00061 } 00062 for(i = m_FSROptItemNames.begin(); i != m_FSROptItemNames.end(); i++) { 00063 addItem( m_optItemList, *i ); 00064 } 00065 00066 // And write them out 00067 log << MSG::INFO << "Write File Summary Record" << endmsg; 00068 StatusCode sc = writeObjects(); 00069 if( sc.isFailure() ) { 00070 // Log the error, but don't fail finalize! 00071 log << MSG::ERROR << "Unable to write File Summary Record" << endmsg; 00072 } 00073 00074 return OutputStream::finalize(); 00075 }