00001 #include "GaudiKernel/PropertyMgr.h"
00002 #include "GaudiKernel/IMessageSvc.h"
00003 #include "GaudiKernel/StatusCode.h"
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/DataObject.h"
00006
00007 #include "RawDataIO/IRawDataInputSvc.h"
00008 #include "RawDataEvent.h"
00009 #include "RawDataAddress.h"
00010 #include "RawDataEvtSelector.h"
00011
00012 using namespace std;
00013
00014 RawDataEvtSelector::RawDataEvtSelector(const string& name, ISvcLocator* svcloc)
00015 : Service(name, svcloc),
00016 m_rawSvc(0)
00017 {
00018 }
00019
00020 RawDataEvtSelector::~RawDataEvtSelector()
00021 {
00022 MsgStream log(msgSvc(), name());
00023 log << MSG::INFO << "RawDataEvtSelector::~RawDataEvtSelector()" << endreq;
00024 }
00025
00026 StatusCode RawDataEvtSelector::initialize()
00027 {
00028 MsgStream log(msgSvc(), name());
00029 log << MSG::INFO << "initialize() ... in name " << name() << endreq;
00030
00031 StatusCode sc = Service::initialize();
00032 if (sc.isFailure()) return sc;
00033
00034 sc = service("RawDataInputSvc", m_rawSvc, true);
00035 if (sc.isFailure()) {
00036 log << MSG::ERROR << "Cannot get RawDataInputSvc" << endreq;
00037 }
00038
00039 return sc;
00040 }
00041
00042 StatusCode RawDataEvtSelector::finalize()
00043 {
00044 return Service::finalize();
00045 }
00046
00047
00048 StatusCode RawDataEvtSelector::createContext(IEvtSelector::Context*& it) const
00049 {
00050
00051 it = new RawDataEvtSelector::Context(this);
00052 return StatusCode::SUCCESS;
00053 }
00054
00055 StatusCode RawDataEvtSelector::next(IEvtSelector::Context& it) const
00056 {
00057 MsgStream log(msgSvc(), name());
00058 log << MSG::DEBUG << "next" << endreq;
00059 return next(it, 1);
00060 }
00061
00062 StatusCode RawDataEvtSelector::next(IEvtSelector::Context& ctxt, int jump) const
00063 {
00064 MsgStream log(msgSvc(), name());
00065 log << MSG::DEBUG << "next(" << jump << ")" << endreq;
00066 StatusCode sc = m_rawSvc->nextEvent();
00067 if (!sc.isSuccess()) {
00068 log << MSG::WARNING << "call to RawDataInputSvc->nextEvent() failed!!!" << endreq;
00069 return sc;
00070 }
00071 RawDataEvtSelector::Context* rc = dynamic_cast<RawDataEvtSelector::Context*>(&ctxt);
00072 if (!rc)
00073 return StatusCode::FAILURE;
00074 return setEntry(*rc, rc->m_entry + jump);
00075 }
00076
00077 StatusCode RawDataEvtSelector::previous(IEvtSelector::Context& it) const
00078 {
00079 return previous(it, 1);
00080 }
00081
00082 StatusCode RawDataEvtSelector::previous(IEvtSelector::Context& it, int jump) const
00083 {
00084 RawDataEvtSelector::Context* rc = dynamic_cast<RawDataEvtSelector::Context*>(&it);
00085 if (!rc) return StatusCode::FAILURE;
00086 rc->m_entry -= jump;
00087 return setEntry(*rc, rc->m_entry - jump);
00088 }
00089
00090 StatusCode RawDataEvtSelector::last(IEvtSelector::Context&)const
00091 {
00092 MsgStream log(msgSvc(), name());
00093 log << MSG::ERROR << "last() not currently supported" << endreq;
00094 return StatusCode::FAILURE;
00095 }
00096
00097 StatusCode RawDataEvtSelector::resetCriteria(const string& cr, IEvtSelector::Context& c) const
00098 {
00099 MsgStream log(msgSvc(), name());
00100 log << MSG::INFO << "resetCriteria(" << cr << ")" << endreq;
00101
00102 RawDataEvtSelector::Context* rc = dynamic_cast<RawDataEvtSelector::Context*>(&c);
00103 if (!rc) return StatusCode::FAILURE;
00104 return StatusCode::SUCCESS;
00105 }
00106
00107 StatusCode RawDataEvtSelector::rewind(IEvtSelector::Context&) const
00108 {
00109 MsgStream log(msgSvc(), name());
00110 log << MSG::ERROR << "rewind() not implemented" << endreq;
00111 return StatusCode::FAILURE;
00112 }
00113
00114 StatusCode RawDataEvtSelector::createAddress(const IEvtSelector::Context& c, IOpaqueAddress*& iop) const
00115 {
00116 MsgStream log(msgSvc(), name());
00117 log << MSG::DEBUG << "createAddress" << endreq;
00118 const RawDataEvtSelector::Context* rc = dynamic_cast<const RawDataEvtSelector::Context*>(&c);
00119 if (!rc) {
00120 log << MSG::ERROR << "Failed to get Context" << endreq;
00121 return StatusCode::FAILURE;
00122 }
00123
00124 iop = new RawDataAddress(DataObject::classID(), "Event", "Event");
00125 log << MSG::DEBUG << "createAddress for /Event" << endreq;
00126 return StatusCode::SUCCESS;
00127 }
00128
00129 StatusCode RawDataEvtSelector::releaseContext(IEvtSelector::Context*& it) const
00130 {
00131 RawDataEvtSelector::Context* rc = dynamic_cast<RawDataEvtSelector::Context*>(it);
00132 if (!rc) return StatusCode::FAILURE;
00133
00134 delete rc;
00135 it = 0;
00136 return StatusCode::SUCCESS;
00137 }
00138
00139 StatusCode RawDataEvtSelector::queryInterface(const InterfaceID& riid, void** ppvInterface)
00140 {
00141 MsgStream log(msgSvc(), name());
00142 if (riid == IID_IEvtSelector) {
00143 *ppvInterface = (IEvtSelector*)this;
00144 addRef();
00145 log << MSG::DEBUG << "queryInterface(IID_IEvtSelector)" << endreq;
00146 return StatusCode::SUCCESS;
00147 } else if (riid == IID_IProperty) {
00148 *ppvInterface = (IProperty*)this;
00149 } else {
00150 log << MSG::DEBUG << "queryInterface(" << riid << ")" << endreq;
00151 return Service::queryInterface(riid, ppvInterface);
00152 }
00153 addRef();
00154 return StatusCode::SUCCESS;
00155 }
00156
00157 StatusCode RawDataEvtSelector::setEntry(RawDataEvtSelector::Context& rc, int entry) const
00158 {
00159 MsgStream log(msgSvc(), name());
00160 log << MSG::DEBUG << "setEntry(" << entry << ")" << endreq;
00161
00162 rc.m_entry = entry;
00163 return StatusCode::SUCCESS;
00164 }