#include <MdcRawDataProvider.h>
Inheritance diagram for MdcRawDataProvider:
Public Types | |
i_maxMdcDigi = 0x1FFF | |
b_keepUnmatch = 0x2000 | |
b_dropHot = 0x4000 | |
b_keepSkipped = 0x8000 | |
b_keepBadTdc = 0x10000 | |
b_unRedo = 0x20000 | |
b_keepAllChannel = 0x40000 | |
enum | MdcControlMode { i_maxMdcDigi = 0x1FFF, b_keepUnmatch = 0x2000, b_dropHot = 0x4000, b_keepSkipped = 0x8000, b_keepBadTdc = 0x10000, b_unRedo = 0x20000, b_keepAllChannel = 0x40000 } |
Public Member Functions | |
MdcRawDataProvider () | |
MdcRawDataProvider (const char *name) | |
~MdcRawDataProvider () | |
StatusCode | initialize (ISvcLocator *svcLoc=0, IMessageSvc *pMsg=0) |
void | handle (const Incident &) |
void | setSkipLayers (const std::vector< int > &skipLayers) |
void | setEffThreshold (float effThreshold) |
MdcDigiVec & | getMdcDigiVec (uint32_t control=0) |
void | setSvcLocator (ISvcLocator *svcLoc) |
void | setMsgSvc (IMessageSvc *svc) |
void | setMsgName (const char *name) |
Protected Attributes | |
ISvcLocator * | m_svcLocator |
IMessageSvc * | m_msgSvc |
std::string | m_name |
Private Attributes | |
MdcDigiVec | digiRef |
std::vector< int > | m_skipLayers |
float | m_effThreshold |
IMdcCalibFunSvc * | m_mdcCalibFunSvc |
Definition at line 14 of file MdcRawDataProvider.h.
i_maxMdcDigi | |
b_keepUnmatch | |
b_dropHot | |
b_keepSkipped | |
b_keepBadTdc | |
b_unRedo | |
b_keepAllChannel |
Definition at line 32 of file MdcRawDataProvider.h.
00032 { 00033 i_maxMdcDigi = 0x1FFF, 00034 b_keepUnmatch = 0x2000, 00035 b_dropHot = 0x4000, 00036 b_keepSkipped = 0x8000, 00037 b_keepBadTdc = 0x10000, 00038 b_unRedo = 0x20000, 00039 b_keepAllChannel = 0x40000 00040 };
MdcRawDataProvider::MdcRawDataProvider | ( | ) |
Definition at line 28 of file MdcRawDataProvider.cxx.
00028 : 00029 RawDataProviderBase(), 00030 digiRef(0), 00031 m_mdcCalibFunSvc(0) 00032 {}
MdcRawDataProvider::MdcRawDataProvider | ( | const char * | name | ) |
Definition at line 35 of file MdcRawDataProvider.cxx.
00035 : 00036 RawDataProviderBase( name ), 00037 digiRef(0), 00038 m_mdcCalibFunSvc(0) 00039 {}
MdcRawDataProvider::~MdcRawDataProvider | ( | ) |
MdcDigiVec & MdcRawDataProvider::getMdcDigiVec | ( | uint32_t | control = 0 |
) |
Definition at line 58 of file MdcRawDataProvider.cxx.
References b_dropHot, b_keepAllChannel, b_keepBadTdc, b_keepSkipped, b_keepUnmatch, b_unRedo, digiRef, Bes_Common::FATAL, IMdcCalibFunSvc::getT0(), IMdcCalibFunSvc::getTimeWalk(), IMdcCalibFunSvc::getWireEff(), genRecEmupikp::i, i_maxMdcDigi, Bes_Common::INFO, iter(), ganga-rec::j, MdcID::layer(), m_effThreshold, m_mdcCalibFunSvc, RawDataProviderBase::m_msgSvc, RawDataProviderBase::m_name, m_skipLayers, RawDataProviderBase::m_svcLocator, RawDataUtil::MdcTime(), deljobs::string, and MdcID::wire().
Referenced by RawDataProviderSvc::getMdcDigiVec().
00058 { 00059 MsgStream log(m_msgSvc, m_name); 00060 StatusCode sc; 00061 bool unRedo = ((control&b_unRedo)==b_unRedo); 00062 if(!unRedo) digiRef.clear(); 00063 else if(digiRef.size()>0) return digiRef; 00064 //---- get event service 00065 IDataProviderSvc* evtSvc; 00066 // tianhl for mt 00067 std::string evtDataSvc_name("EventDataSvc"); 00068 if(isGaudiThreaded(m_name)){ 00069 evtDataSvc_name += getGaudiThreadIDfromName(m_name); 00070 } 00071 // tianhl for mt 00072 sc = m_svcLocator->service(evtDataSvc_name.c_str(),evtSvc,true); 00073 if (!sc.isSuccess()){ 00074 log << MSG::FATAL << "Could not load EventDataSvc" << endreq; 00075 return digiRef; 00076 } 00077 00078 //---- get max MdcDigi 00079 int maxMdcDigi = control&i_maxMdcDigi; 00080 00081 //---- prepare for drop Bad TDC 00082 bool keepBadTdc = ((control&b_keepBadTdc)!=0x10000); 00083 double t0 = 0.; 00084 if (keepBadTdc){ 00085 //get MdcCalibFunSvc 00086 sc = m_svcLocator->service("MdcCalibFunSvc", m_mdcCalibFunSvc); 00087 if ( sc.isFailure() ){ 00088 log << MSG::FATAL << "Could not load MdcCalibFunSvc!" << endreq; 00089 return digiRef; 00090 } 00091 00092 //get event start time t0 00093 SmartDataPtr<RecEsTimeCol> esTimeCol(evtSvc,"/Event/Recon/RecEsTimeCol"); 00094 if (!esTimeCol){ 00095 log << MSG::INFO<< " Could not retrieve RecEsTimeCol"<< endreq; 00096 keepBadTdc = false; 00097 }else if( (esTimeCol->size()==0)) { 00098 log << MSG::INFO<< " Could not retrieve RecEsTimeCol"<< endreq; 00099 keepBadTdc = false; 00100 }else{ 00101 RecEsTimeCol::iterator iter= esTimeCol->begin(); 00102 for(; iter!=esTimeCol->end(); iter++){ 00103 t0 = (*iter)->getTest(); 00104 } 00105 }//end esTimeCol 00106 } 00107 00108 //----- mark hit on track 00109 bool m_hitInUse[43][288]; 00110 for (int i=0; i<43; i++){ 00111 for (int j=0; j<288; j++) m_hitInUse[i][j]=false; 00112 } 00113 bool dropHot = ((control&b_dropHot)==0x4000); 00114 if (dropHot){ 00115 SmartDataPtr<RecMdcHitCol> recHitCol(evtSvc, "/Event/Recon/RecMdcHitCol"); 00116 if (!recHitCol) { 00117 log << MSG::INFO << "Could not retrieve RecMdcHitCol" << endreq; 00118 dropHot = false; 00119 }else{ 00120 RecMdcHitCol::iterator iter = recHitCol->begin(); 00121 for ( ; iter != recHitCol->end(); iter++) { 00122 Identifier id = (*iter)->getMdcId(); 00123 m_hitInUse[MdcID::layer(id)][MdcID::wire(id)] = true; 00124 } 00125 } 00126 } 00127 00128 //----- mark skipped layers 00129 bool isSkipLayers = ((control&b_keepSkipped)!=0x8000) && (m_skipLayers.size()>0); 00130 00131 bool skipLayer[43]; 00132 for (int i=0; i<43; i++){skipLayer[i]= false;} 00133 for(unsigned iSkip =0; iSkip < m_skipLayers.size(); iSkip++){ 00134 skipLayer[m_skipLayers[iSkip]]=true; 00135 } 00136 00137 //----- loop MdcDigiCol to select------------------ 00138 int iDigi=0; 00139 int nMatchedDigi=0; 00140 00141 SmartDataPtr<MdcDigiCol> mdcDigiCol(evtSvc,"/Event/Digi/MdcDigiCol"); 00142 if (sc!=StatusCode::SUCCESS) { 00143 log << MSG::FATAL << "Could not find MdcDigiCol!" << endreq; 00144 return digiRef; 00145 } 00146 MdcDigiCol::iterator iter = mdcDigiCol->begin(); 00147 for (;iter != mdcDigiCol->end(); iter++,iDigi++ ) { 00148 MdcDigi *aDigi = (*iter); 00149 Identifier id = aDigi->identify(); 00150 int layer = MdcID::layer(id); 00151 int wire = MdcID::wire(id); 00152 unsigned tdc = aDigi->getTimeChannel(); 00153 unsigned adc = aDigi->getChargeChannel(); 00154 unsigned overflow = aDigi->getOverflow(); 00155 00156 //--0. skip dead channel 00157 if ( ((control&b_keepAllChannel)!=0x40000) && m_mdcCalibFunSvc 00158 && m_mdcCalibFunSvc->getWireEff(layer,wire) < m_effThreshold) continue; 00159 00160 //--1. drop Mdc layer hits 00161 if ( isSkipLayers && skipLayer[layer] ) continue; 00162 00163 //--2. drop hit on track 00164 if ( dropHot && m_hitInUse[layer][wire]) continue; 00165 00166 //--3. drop unmatched, overflow and multi TDC 00167 //overflow : 00168 // 1, T overflow 00169 // 2, Q overflow 00170 // 4, multi TDC 00171 // 8, multi TDC, earliest 00172 if ( ((control&b_keepUnmatch)!=0x2000) && 00173 (((overflow & 1)>0) || 00174 (((overflow&12)!=12)&&((overflow&12)!=0)) || 00175 (tdc==0x7FFFFFFF) || (adc== 0x7FFFFFFF) ) ) { continue; } 00176 00177 00178 00179 //--4. drop bad hit(Tdc - t0 < -10 ns) 00180 if (keepBadTdc) { 00181 // Get T0 00182 double T0Walk = 0.; 00183 if (m_mdcCalibFunSvc) { T0Walk = m_mdcCalibFunSvc->getT0(layer,wire) 00184 + m_mdcCalibFunSvc->getTimeWalk(layer,adc); } 00185 if((RawDataUtil::MdcTime(tdc) - T0Walk - t0)<-10.) continue; 00186 } 00187 00188 //--5. skip by max limit of digi number 00189 nMatchedDigi++; 00190 if ((maxMdcDigi>0) && (nMatchedDigi > maxMdcDigi)){ 00191 digiRef.clear(); 00192 return digiRef; 00193 } 00194 00195 digiRef.push_back(aDigi); 00196 }//end loop of MdcDigiCol 00197 return digiRef; 00198 }
void MdcRawDataProvider::handle | ( | const Incident & | ) |
Definition at line 49 of file MdcRawDataProvider.cxx.
References Bes_Common::DEBUG, digiRef, RawDataProviderBase::m_msgSvc, and RawDataProviderBase::m_name.
Referenced by RawDataProviderSvc::handle().
00049 { 00050 MsgStream log( m_msgSvc, m_name ); 00051 log << MSG::DEBUG << "handle: " << inc.type() << endreq; 00052 if ( inc.type() == "BeginEvent" ){ 00053 digiRef.clear(); 00054 } 00055 return; 00056 }
StatusCode MdcRawDataProvider::initialize | ( | ISvcLocator * | svcLoc = 0 , |
|
IMessageSvc * | pMsg = 0 | |||
) |
Reimplemented from RawDataProviderBase.
Definition at line 44 of file MdcRawDataProvider.cxx.
References RawDataProviderBase::initialize().
Referenced by RawDataProviderSvc::initialize().
00044 { 00045 RawDataProviderBase::initialize( pSvcLoc,pMsg ); 00046 return StatusCode::SUCCESS; 00047 }
void MdcRawDataProvider::setEffThreshold | ( | float | effThreshold | ) | [inline] |
Definition at line 27 of file MdcRawDataProvider.h.
References m_effThreshold.
Referenced by RawDataProviderSvc::initialize().
00027 {m_effThreshold=effThreshold;}
void RawDataProviderBase::setMsgName | ( | const char * | name | ) | [inline, inherited] |
Definition at line 29 of file RawDataProviderBase.h.
References RawDataProviderBase::m_name, and deljobs::string.
00029 { m_name = std::string(name); };
void RawDataProviderBase::setMsgSvc | ( | IMessageSvc * | svc | ) | [inline, inherited] |
Definition at line 28 of file RawDataProviderBase.h.
References RawDataProviderBase::m_msgSvc.
00028 { m_msgSvc=svc; };
void MdcRawDataProvider::setSkipLayers | ( | const std::vector< int > & | skipLayers | ) | [inline] |
Definition at line 26 of file MdcRawDataProvider.h.
References m_skipLayers.
Referenced by RawDataProviderSvc::initialize().
00026 {m_skipLayers=skipLayers;}
void RawDataProviderBase::setSvcLocator | ( | ISvcLocator * | svcLoc | ) | [inline, inherited] |
Definition at line 27 of file RawDataProviderBase.h.
References RawDataProviderBase::m_svcLocator.
00027 { m_svcLocator=svcLoc; };
MdcDigiVec MdcRawDataProvider::digiRef [private] |
float MdcRawDataProvider::m_effThreshold [private] |
Definition at line 45 of file MdcRawDataProvider.h.
Referenced by getMdcDigiVec(), and setEffThreshold().
IMessageSvc* RawDataProviderBase::m_msgSvc [protected, inherited] |
Definition at line 36 of file RawDataProviderBase.h.
Referenced by EmcRawDataProvider::getEmcDigiVec(), getMdcDigiVec(), TofRawDataProvider::handle(), handle(), EmcRawDataProvider::handle(), TofRawDataProvider::initialize(), RawDataProviderBase::initialize(), EmcRawDataProvider::initialize(), RawDataProviderBase::setMsgSvc(), TofRawDataProvider::tofDataMapFull(), TofRawDataProvider::tofDataMapOnlineMode(), and TofRawDataProvider::tofDataVectorOnlineMode().
std::string RawDataProviderBase::m_name [protected, inherited] |
Definition at line 37 of file RawDataProviderBase.h.
Referenced by EmcRawDataProvider::getEmcDigiVec(), getMdcDigiVec(), TofRawDataProvider::handle(), handle(), EmcRawDataProvider::handle(), TofRawDataProvider::initialize(), RawDataProviderBase::initialize(), EmcRawDataProvider::initialize(), RawDataProviderBase::setMsgName(), TofRawDataProvider::tofDataMapFull(), TofRawDataProvider::tofDataMapOnlineMode(), and TofRawDataProvider::tofDataVectorOnlineMode().
std::vector<int> MdcRawDataProvider::m_skipLayers [private] |
Definition at line 44 of file MdcRawDataProvider.h.
Referenced by getMdcDigiVec(), and setSkipLayers().
ISvcLocator* RawDataProviderBase::m_svcLocator [protected, inherited] |
Definition at line 35 of file RawDataProviderBase.h.
Referenced by EmcRawDataProvider::getEmcDigiVec(), getMdcDigiVec(), TofRawDataProvider::initialize(), RawDataProviderBase::initialize(), EmcRawDataProvider::initialize(), RawDataProviderBase::setSvcLocator(), TofRawDataProvider::tofDataMapFull(), and TofRawDataProvider::tofDataMapOnlineMode().