CMS 3D CMS Logo

DCCEBSRPBlock.cc

Go to the documentation of this file.
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 

Generated on Tue Jun 9 17:34:37 2009 for CMSSW by  doxygen 1.5.4