CMS 3D CMS Logo

SiStripPedestalsSubtractor.cc

Go to the documentation of this file.
00001 #include "CommonTools/SiStripZeroSuppression/interface/SiStripPedestalsSubtractor.h"
00002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00003 #include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h"
00004 #include "FWCore/Utilities/interface/Exception.h"
00005 
00006 void SiStripPedestalsSubtractor::init(const edm::EventSetup& es){
00007   es.get<SiStripPedestalsRcd>().get(pedestalsHandle);
00008 }
00009 
00010 
00011 void SiStripPedestalsSubtractor::subtract(const edm::DetSet<SiStripRawDigi>& input,std::vector<int16_t>& ssrd){
00012 
00013   edm::DetSet<SiStripRawDigi>::const_iterator iter=input.begin();
00014   std::vector<int16_t>::iterator              iout=ssrd.begin();
00015   SiStripPedestals::Range detPedRange = pedestalsHandle->getRange(input.id);
00016   
00017   peds_.resize(input.size());
00018   try{
00019       pedestalsHandle->allPeds(peds_, detPedRange);
00020   } catch(cms::Exception& e){
00021     //throw cms::Exception("CorruptedData")
00022     edm::LogError("SiStripPedestalsSubtractor")  
00023       << "[SiStripPedestalsSubtractor::subtract] DetId " << input.id << " propagating error from SiStripPedestal" << e.what();
00024     ssrd.clear();
00025   }
00026 
00027   std::vector<int>::const_iterator it_ped = peds_.begin();  
00028   for (;iter!=input.end(); ++iter, ++iout, ++it_ped) {
00029 
00030     int ped = *it_ped;
00031     //  uncomment to check bulk pedestal decoding
00032     //assert( ped == static_cast<int>(pedestalsHandle->getPed(it_ped - peds_.begin(), detPedRange)) );
00033     
00034     if(ped>895) ped -= 1024;
00035     *iout = iter->adc() - ped;
00036 
00037 #ifdef DEBUG_SiStripZeroSuppression_
00038     if (edm::isDebugEnabled())
00039       LogDebug("SiStripPedestalsSubtractor") 
00040         <<"[SiStripPedestalsSubtractor::subtract]: DetID " << input.id << " strip " << (it_ped - peds.begin()) << " adc before sub= " 
00041         << iter->adc() 
00042         << "\t pedval= " << pedestalsHandle->getPed(it_ped - peds.begin(),detPedRange)
00043         << "\t adc pedsub = " << ssrd[it_ped - peds.begin()]
00044         << std::endl;
00045 #endif
00046   }
00047 }

Generated on Tue Jun 9 17:26:02 2009 for CMSSW by  doxygen 1.5.4