/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RawDataCnv/RawDataCnv-00-04-35/src/Util/EmcConverter.cxx

Go to the documentation of this file.
00001 #include "GaudiKernel/MsgStream.h"
00002 #include "GaudiKernel/Bootstrap.h"
00003 
00004 #include "RawDataProviderSvc/IRawDataProviderSvc.h"
00005 #include "RawDataCnv/Util/EmcConverter.h"
00006 
00007 EmcConverter* EmcConverter::s_instance = 0;
00008 
00009 EmcConverter* EmcConverter::instance(int runMode)
00010 {
00011    if ( s_instance == 0 ) {
00012       s_instance = new EmcConverter(runMode);
00013    }
00014 
00015    return s_instance;
00016 }
00017 
00018 void EmcConverter::destroy()
00019 {
00020    if ( s_instance != 0 ) {
00021       delete s_instance;
00022       s_instance = 0;
00023    }
00024 }
00025 
00026 StatusCode EmcConverter::convert(const BufferHolder& src, EmcDigiCol* des)
00027 {
00028    uint32_t REId, TEId, TETDC, TEADC, measure;
00029    uint32_t nbuf = src.nBuf();
00030 
00031    for (uint32_t i = 0; i < nbuf; ++i) {  //loop the buffer
00032       uint32_t* buf = src(i);
00033       uint32_t* bufend = buf + src.bufSize(i);
00034       for (; buf < bufend; ++buf) {  //loop the digit
00035 
00036          m_builder.unPack(*buf, REId, TETDC, TEADC, measure);
00037 
00038          TEId = m_builder.getTEID(REId);
00039          if ( TEId == 0xFFFFFFFF ) continue;
00040 
00041          if ( m_EmcProvider ) {
00042             // by fucd: if not good digi, reject. Only for online mode now
00043             if(!m_EmcProvider->isGoodEmcDigi(EmcRawDataProvider::DropLow|EmcRawDataProvider::CutTime
00044                      |EmcRawDataProvider::DropHot,TEId,measure,TEADC,TETDC)) continue;
00045             Identifier id(TEId);
00046             m_EmcProvider->doCalib(id, measure, TEADC);
00047          }
00048 
00049          // create and set the DataObject
00050          EmcDigi* emcDigi = new EmcDigi(Identifier(TEId), TETDC, TEADC);
00051          emcDigi->setMeasure(measure);
00052          des->push_back(emcDigi);
00053       }
00054    }
00055 
00056    return StatusCode::SUCCESS;
00057 }
00058 
00059 StatusCode EmcConverter::convert(EmcDigiCol* src, WriteRawEvent*& des)
00060 {
00061    return m_builder.pack(src, des);
00062 }
00063 
00064 EmcConverter::EmcConverter(int runMode)
00065    : m_runMode(runMode),
00066      m_EmcProvider(0)
00067 {
00068    if ( m_runMode == 1 ) {
00069       // by fucd: only when online mode, use raw data provider here 
00070       IService* svc ;
00071       StatusCode sc = Gaudi::svcLocator()->getService("RawDataProviderSvc", svc);
00072       //if ( sc.isFailure() ) {
00073       //   log << MSG::ERROR << "Cannot get Raw Data Provider Service!" << endreq;
00074       //}
00075       IRawDataProviderSvc* rawSvc = dynamic_cast<IRawDataProviderSvc*> (svc);
00076       if ( rawSvc != 0 ) {
00077          m_EmcProvider = rawSvc->getEmcProvider();
00078       }
00079       else {
00080          std::cerr << "Failed to get the RawDataProviderSvc" << std::endl;
00081       }
00082    }
00083 }
00084 
00085 EmcConverter::~EmcConverter()
00086 {
00087 }

Generated on Tue Nov 29 22:58:32 2016 for BOSS_7.0.2 by  doxygen 1.4.7