/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #include "ROBufferSvc/ROBufferSvc.h" 00002 00003 #include <algorithm> 00004 00005 #include "GaudiKernel/IDataManagerSvc.h" 00006 00007 #include "Event/ReadoutPmtCrate.h" 00008 #include "Event/ReadoutRpcCrate.h" 00009 00010 ROBufferSvc::ROBufferSvc(const string& name, ISvcLocator* pSvcLocator) 00011 :Service(name, pSvcLocator), m_log(msgSvc(), "ROBufferSvc") 00012 { 00013 m_log<< MSG::INFO<< "Construct:ROBufferSvc()!"<< endreq; 00014 } 00015 00016 StatusCode ROBufferSvc::initialize() 00017 { 00018 StatusCode sc= this->Service::initialize(); 00019 if(sc.isFailure()) 00020 { 00021 m_log<< MSG::ERROR<< "Error when initializing Service."<< endreq; 00022 return sc; 00023 } 00024 00025 m_log<< MSG::INFO<< "ROBufferSvc ininalize()"<< endreq; 00026 00027 return StatusCode::SUCCESS; 00028 } 00029 00030 StatusCode ROBufferSvc::queryInterface(const InterfaceID& riid, void** ppint) 00031 { 00032 if(IID_IROBufferSvc.versionMatch(riid)) 00033 { 00034 m_log<< MSG::DEBUG<< "queryInterface("<< riid 00035 << ")-->(IROBufferSvc*)"<< (void*)this<< endreq; 00036 *ppint = (IROBufferSvc*)this; 00037 } 00038 else 00039 { 00040 return Service::queryInterface(riid, ppint); 00041 } 00042 addRef(); 00043 return StatusCode::SUCCESS; 00044 } 00045 00046 StatusCode ROBufferSvc::setROHeaders(SimReadoutHeader* sroh) 00047 { 00048 m_log<< MSG::INFO<< "Set ReadoutHeaders from SimReadoutHeader!"<< endreq; 00049 m_log<< MSG::INFO<< "The deque<MixHeader> m_mhBuffer size: "<< m_mhBuffer.size()<< endreq; 00050 00051 //Deal with the SimReadoutHeader 00052 vector<SimReadout*> sros = sroh->readouts(); 00053 m_log<< MSG::INFO<< "Size of vector<SimReadout*>: "<< sros.size()<< endreq; 00054 00055 vector<SimReadout*>::iterator simit; 00056 for(simit = sros.begin(); simit != sros.end(); simit++) 00057 { 00058 SimReadout* sro = (*simit); 00059 const Readout* ro = sro->readout(); 00060 00061 Context context = sroh->context(); 00062 00063 Detector det(sro->readout()->detector()); 00064 context.SetSite(det.site()); 00065 context.SetDetId(det.detectorId()); 00066 00067 if(det.detectorId() == DetectorId::kAD1 00068 || det.detectorId() == DetectorId::kAD2 00069 || det.detectorId() == DetectorId::kAD3 00070 || det.detectorId() == DetectorId::kAD4 00071 || det.detectorId() == DetectorId::kIWS 00072 || det.detectorId() == DetectorId::kOWS) 00073 { 00074 const ReadoutPmtCrate* ropmtc = 0; 00075 ropmtc = dynamic_cast<const ReadoutPmtCrate*>(ro); 00076 if(!ropmtc) 00077 { 00078 m_log<< MSG::ERROR<< "Failed to get ReadoutPmtCrate!"<< endreq; 00079 return StatusCode::FAILURE; 00080 } 00081 ReadoutPmtCrate* ropc = new ReadoutPmtCrate(*ropmtc); 00082 00083 //Prepare a new ReadoutHeader 00084 ReadoutHeader* roh = new ReadoutHeader(); 00085 ropc->setHeader(roh); 00086 roh->setReadout(dynamic_cast<Readout*>(ropc)); 00087 00088 roh->setContext(context); 00089 roh->setEarliest(sroh->earliest()); 00090 roh->setLatest(sroh->latest()); 00091 00092 //Prepare the MBuffer 00093 MixHeader mh; 00094 mh.roh = roh; 00095 m_mhBuffer.push_back(mh); 00096 } 00097 else if(det.detectorId() == DetectorId::kRPC) 00098 { 00099 const ReadoutRpcCrate *rorpcc = 0; 00100 rorpcc = dynamic_cast<const ReadoutRpcCrate*>(ro); 00101 if(!rorpcc) 00102 { 00103 m_log<< MSG::ERROR<< "Failed to get ReadoutRpcCrate!"<< endreq; 00104 return StatusCode::FAILURE; 00105 } 00106 ReadoutRpcCrate* rorc = new ReadoutRpcCrate(*rorpcc); 00107 00108 //Prepare a new ReadoutHeader 00109 ReadoutHeader* roh = new ReadoutHeader(); 00110 rorc->setHeader(roh); 00111 roh->setReadout(dynamic_cast<Readout*>(rorc)); 00112 00113 roh->setContext(context); 00114 roh->setEarliest(sroh->earliest()); 00115 roh->setLatest(sroh->latest()); 00116 00117 //Prepare the MBuffer 00118 MixHeader mh; 00119 mh.roh = roh; 00120 m_mhBuffer.push_back(mh); 00121 } 00122 else if(det.detectorId() == DetectorId::kUnknown) 00123 { 00124 Readout* nro = new Readout(*ro); 00125 00126 //Prepare a new ReadoutHeader 00127 ReadoutHeader* roh = new ReadoutHeader(); 00128 nro->setHeader(roh); 00129 roh->setReadout(nro); 00130 00131 roh->setContext(context); 00132 roh->setEarliest(sroh->earliest()); 00133 roh->setLatest(sroh->latest()); 00134 00135 //Prepare the MBuffer 00136 MixHeader mh; 00137 mh.roh = roh; 00138 m_mhBuffer.push_back(mh); 00139 } 00140 } 00141 00142 //Sort the MBuffer 00143 sort(m_mhBuffer.begin(), m_mhBuffer.end()); 00144 00145 m_log<< MSG::INFO<< "ROBufferSvc MixHeader buffer filled!" << endreq; 00146 00147 delete sroh; 00148 return StatusCode::SUCCESS; 00149 } 00150 00151 ReadoutHeader* ROBufferSvc::getROHeader() 00152 { 00153 m_log<< MSG::INFO<< "get one Readout from MixHeader buffer...."<< endreq; 00154 00155 ReadoutHeader* roh = m_mhBuffer[0].roh; 00156 m_mhBuffer.pop_front(); 00157 00158 return roh; 00159 } 00160 00161 deque<MixHeader>::size_type ROBufferSvc::getMBufferSize() 00162 { 00163 m_log<< MSG::INFO<< "The deque<MixHeader> m_mhBuffer size is " 00164 << m_mhBuffer.size()<< endreq; 00165 00166 return m_mhBuffer.size(); 00167 } 00168 00169 ROBufferSvc::~ROBufferSvc() 00170 { 00171 m_log<< MSG::INFO<< "MixHeader buffer size: "<< m_mhBuffer.size()<< endreq; 00172 m_log<< MSG::INFO<< "Destruct:~ROBufferSvc()!"<< endreq; 00173 }