/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

ROBufferSvc.cc
Go to the documentation of this file.
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 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 10:15:11 for ROBufferSvc by doxygen 1.7.4