| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

MixRootEvtSelector.cc

Go to the documentation of this file.
00001 #include "GaudiKernel/MsgStream.h"
00002 #include "GaudiKernel/DataObject.h"
00003 #include "Event/RegistrationSequence.h"
00004 #include "RootIOSvc/IRootIOSvc.h"
00005 #include "RootIOSvc/RootIOAddress.h"
00006 #include "Mixing/IMixingSvc.h"
00007 #include "RootIOSvc/RootInputStream.h"
00008 #include "Event/ReadoutHeader.h"
00009 #include "Mixing/MixRootEvtSelector.h"
00010 
00011 using namespace std;
00012 
00013 MixRootEvtSelector::MixRootEvtSelector(const std::string& name, ISvcLocator* svcloc) 
00014                    :Service(name,svcloc)
00015                    ,RootIOEvtSelector(name,svcloc)
00016                    ,m_reqSeqName(""), m_controlStream(0)
00017 {
00018   m_reqSeqName = DayaBay::RegistrationSequenceLocation::Default;
00019   declareProperty("ReqSeq",m_reqSeqName,
00020                   "TES/TFile path where to find the RegistrationSequence");
00021 }
00022  
00023 MixRootEvtSelector::~MixRootEvtSelector()
00024 {
00025   MsgStream log(msgSvc(), "MixRootEvtSelector");
00026   log << MSG::INFO << "MixRootEvtSelector::~MixIOEvtSelector()" << endreq;
00027 }
00028 
00029 StatusCode MixRootEvtSelector::initialize() 
00030 {
00031   MsgStream log(msgSvc(), "MixRootEvtSelector");
00032   log << MSG::INFO << "initializing @" << (void*)this << endreq;
00033   log << MSG::DEBUG << "called " << this->name() << endreq;
00034   StatusCode sc = this->Service::initialize();
00035   if(sc.isFailure()) return sc;
00036 
00037   IService* isvc=0;
00038   sc = serviceLocator()->service("MixRootIOCnvSvc", "RootIOCnvSvc", isvc, false);
00039   if(sc.isFailure()) 
00040   {
00041     log << MSG::ERROR << "Conversion service MixRootIOCnvSvc"
00042         << " could not be retrieved" << endreq;
00043     return sc;
00044   }
00045   isvc->addRef();
00046 
00047   sc = isvc->queryInterface(IRootIOSvc::interfaceID(), (void**)&m_rioSvc);
00048   if(sc.isFailure()) 
00049   {
00050     log << MSG::ERROR << "Conversion service RootIOCnvSvc"
00051         << " does not implement IRootIOCnvSvc" << endreq;
00052     return sc;
00053   }
00054 
00055   log << MSG::INFO << "initialized @" << (void*)this
00056       << " got RootIOCnvSvc @" << (void*)m_rioSvc
00057       << endreq;
00058 
00059   sc = isvc->queryInterface(IMixingSvc::interfaceID(), (void**)&m_mixSvc);
00060   if(sc.isFailure()) 
00061   {
00062     log << MSG::ERROR << "Conversion service RootIOCnvSvc"
00063         << " does not implement IMixingSvc" << endreq;
00064     return sc;
00065   }
00066 
00067   log << MSG::INFO << "initialized @" << (void*)this
00068       << " got RootIOCnvSvc @" << (void*)m_mixSvc
00069       << endreq;
00070 
00071   return StatusCode::SUCCESS;
00072 }
00073 
00074 StatusCode MixRootEvtSelector::setEntry(MixRootEvtSelector::Context& rc, int entry) const
00075 {
00076   MsgStream log(msgSvc(), "MixRootEvtSelector");
00077   log << MSG::DEBUG << "SetEntry(" << entry << ")" << endreq;
00078   log << MSG::DEBUG << "Mix Context: "<< rc.m_entry << endreq;
00079 
00080   long entries  = m_mixSvc->entries();
00081   StatusCode sc = m_mixSvc->buildStream();
00082   if(entry > entries || sc.isFailure())
00083   {
00084     log<< MSG::DEBUG<< "Now the entry is: "<< entries<< endreq;
00085     return StatusCode::FAILURE;
00086   }
00087 
00088   log << MSG::DEBUG << "Now ,read in other headers" << endreq;
00089   IRootIOSvc::InputStreamMap& ism = m_rioSvc->inputStreams();
00090   m_controlStream = ism[m_reqSeqName];
00091   if(!m_controlStream) 
00092   {
00093     log << MSG::ERROR << "failed to get control stream at " << m_reqSeqName << endreq;
00094     return StatusCode::FAILURE;
00095   }
00096   rc.m_entry = entry;
00097   return StatusCode::SUCCESS;
00098 }
00099 
00100 StatusCode MixRootEvtSelector::createAddress(const IEvtSelector::Context& c, IOpaqueAddress*& iop) const
00101 {
00102   MsgStream log(msgSvc(), "MixRootEvtSelector");
00103   log << MSG::DEBUG << "createAddress" << endreq;
00104   const MixRootEvtSelector::Context* rc = dynamic_cast<const MixRootEvtSelector::Context*>(&c);
00105   if(!rc) 
00106   {
00107     log << MSG::ERROR << "Failed to get MixRootIOEvtSelector::Context" << endreq;
00108     return StatusCode::FAILURE;
00109   }
00110 
00111   RootInputAddress* ria = new RootInputAddress(DataObject::classID(),"/Event");
00112   MixHeader mh = m_mixSvc->fetchMixHeader();
00113   ria->setEntry(mh.entry);
00114   iop = ria;
00115   log << MSG::DEBUG << "createAddress for /Event" << endreq;
00116   return StatusCode::SUCCESS;
00117 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:45:52 2011 for Mixing by doxygen 1.4.7