00001 #include "EventFilter/EcalRawToDigiDev/interface/DCCEBSRPBlock.h" 00002 #include "EventFilter/EcalRawToDigiDev/interface/DCCDataBlockPrototype.h" 00003 #include "EventFilter/EcalRawToDigiDev/interface/DCCEventBlock.h" 00004 #include "EventFilter/EcalRawToDigiDev/interface/DCCDataUnpacker.h" 00005 #include "EventFilter/EcalRawToDigiDev/interface/EcalElectronicsMapper.h" 00006 00007 00008 00009 DCCEBSRPBlock::DCCEBSRPBlock( 00010 DCCDataUnpacker * u,EcalElectronicsMapper * m, DCCEventBlock * e, bool unpack 00011 ) : DCCSRPBlock(u,m,e,unpack) 00012 { 00013 00014 expNumbSrFlags_ = SRP_EB_NUMBFLAGS; 00015 00016 } 00017 00018 00019 void DCCEBSRPBlock::updateCollectors(){ 00020 // Set SR flag digis 00021 ebSrFlagsDigis_ = unpacker_->ebSrFlagsCollection(); 00022 } 00023 00024 00025 void DCCEBSRPBlock::addSRFlagToCollection(){ 00026 00027 // Point to SR flags 00028 data_++; 00029 uint16_t * my16Bitp_ = reinterpret_cast<uint16_t *> (data_); 00030 00031 uint towersInPhi = EcalElectronicsMapper::kTowersInPhi; 00032 00033 00034 for( uint n=0; n<expNumbSrFlags_ ; n++ ){ 00035 00036 if(n>0&&n%4==0) my16Bitp_++; 00037 00038 ushort srFlag = ( *my16Bitp_ >> ( (n-(n/4)*4) * 3 ) ) & SRP_SRFLAG_MASK ; 00039 srFlags_[n] = srFlag; 00040 00041 00042 if(unpackInternalData_){ 00043 00044 uint theSRPi = n ; 00045 00046 if(NUMB_SM_EB_PLU_MIN<= mapper_->getActiveSM() && mapper_->getActiveSM()<=NUMB_SM_EB_PLU_MAX){ 00047 uint u = n%towersInPhi; 00048 u = towersInPhi-u; 00049 theSRPi = ( n/towersInPhi )*towersInPhi + u - 1; 00050 } 00051 00052 EBSrFlag * sr = (EBSrFlag*) mapper_->getSrFlagPointer(theSRPi+1); 00053 sr->setValue(srFlag); 00054 (*ebSrFlagsDigis_)->push_back(*sr); 00055 00056 } 00057 } 00058 00059 00060 } 00061 00062 00063 00064 bool DCCEBSRPBlock::checkSrpIdAndNumbSRFlags(){ 00065 00066 //todo : check srp id based on sm... 00067 00068 // Check number of SR flags 00069 if( nSRFlags_ != expNumbSrFlags_ ){ 00070 if( ! DCCDataUnpacker::silentMode_ ){ 00071 edm::LogWarning("EcalRawToDigi@SUB=DCCSRPBlock::unpack") 00072 <<"\nUnable to unpack SRP block for event "<<event_->l1A()<<" in fed <<"<<mapper_->getActiveDCC() 00073 <<"\nNumber of flags "<<nSRFlags_<<" is different from expected "<<expNumbSrFlags_; 00074 } 00075 //Note : add to error collection ? 00076 return false; 00077 } 00078 return true; 00079 00080 } 00081