CMS 3D CMS Logo

SiStripFedZeroSuppression Class Reference

#include <CommonTools/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h>

List of all members.

Public Member Functions

void init (const edm::EventSetup &es)
bool IsAValidDigi ()
 SiStripFedZeroSuppression (uint16_t fedalgo)
void suppress (const std::vector< int16_t > &, edm::DetSet< SiStripDigi > &)
void suppress (const edm::DetSet< SiStripRawDigi > &, edm::DetSet< SiStripDigi > &)
void suppress (const std::vector< SiStripDigi > &, std::vector< SiStripDigi > &, const uint32_t &)
void suppress (const std::vector< SiStripDigi > &, std::vector< SiStripDigi > &, const uint32_t &, edm::ESHandle< SiStripNoises > &, edm::ESHandle< SiStripThreshold > &)
 ~SiStripFedZeroSuppression ()

Private Member Functions

void fillThresholds_ (const uint32_t detID, size_t size)
uint16_t truncate (int16_t adc) const

Private Attributes

int16_t adc
int16_t adcMaxNeigh
int16_t adcNext
int16_t adcNext2
int16_t adcPrev
int16_t adcPrev2
std::vector< int16_t > highThr_
std::vector< float > highThrSN_
std::vector< int16_t > lowThr_
std::vector< float > lowThrSN_
edm::ESHandle< SiStripNoisesnoiseHandle
std::vector< float > noises_
uint16_t theFEDalgorithm
int16_t theFEDhighThresh
int16_t theFEDlowThresh
int16_t theNeighFEDhighThresh
int16_t theNeighFEDlowThresh
int16_t theNext2FEDlowThresh
int16_t theNextFEDhighThresh
int16_t theNextFEDlowThresh
int16_t thePrev2FEDlowThresh
int16_t thePrevFEDhighThresh
int16_t thePrevFEDlowThresh
edm::ESHandle< SiStripThresholdthresholdHandle


Detailed Description

Definition at line 17 of file SiStripFedZeroSuppression.h.


Constructor & Destructor Documentation

SiStripFedZeroSuppression::SiStripFedZeroSuppression ( uint16_t  fedalgo  )  [inline]

Definition at line 20 of file SiStripFedZeroSuppression.h.

00020                                              :
00021     theFEDalgorithm(fedalgo){};
  ~SiStripFedZeroSuppression(){};

SiStripFedZeroSuppression::~SiStripFedZeroSuppression (  )  [inline]

Definition at line 22 of file SiStripFedZeroSuppression.h.

00022 {};


Member Function Documentation

void SiStripFedZeroSuppression::fillThresholds_ ( const uint32_t  detID,
size_t  size 
) [private]

Definition at line 211 of file SiStripFedZeroSuppression.cc.

References e, highThr_, highThrSN_, lowThr_, lowThrSN_, noiseHandle, noises_, strip(), and thresholdHandle.

Referenced by suppress().

00211                                                                                  {
00212   SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID);
00213   SiStripThreshold::Range detThRange = thresholdHandle->getRange(detID);
00214 
00215   if (highThr_.size() != size) { 
00216     highThr_.resize(size); 
00217     lowThr_.resize(size);
00218     noises_.resize(size);
00219     highThrSN_.resize(size);
00220     lowThrSN_.resize(size);
00221   }
00222 
00223   noiseHandle->allNoises(noises_, detNoiseRange);
00224   thresholdHandle->allThresholds(lowThrSN_, highThrSN_, detThRange); // thresholds as S/N
00225   for (size_t strip = 0; strip < size; ++strip) {
00226     float noise     = noises_[strip];
00227     //  uncomment line below to check bluk noise decoding
00228     //assert( noise == noiseHandle->getNoise(strip,detNoiseRange) ); 
00229     highThr_[strip] = static_cast<int16_t>(highThrSN_[strip]*noise+0.5+1e-6);
00230     lowThr_[strip]  = static_cast<int16_t>( lowThrSN_[strip]*noise+0.5+1e-6);
00231     // Note: it's a bit wierd, but there are some cases for which 'highThrSN_[strip]*noise' is an exact integer
00232     //   but due to roundoffs it gets rounded to the integer below if. 
00233     //   Apparently the optimized code inlines differently and this changes the roundoff.
00234     //   The +1e-6 fixes the problem.   [GPetruc]
00235   } 
00236 }

void SiStripFedZeroSuppression::init ( const edm::EventSetup es  ) 

Definition at line 12 of file SiStripFedZeroSuppression.cc.

References edm::EventSetup::get(), noiseHandle, and thresholdHandle.

Referenced by SiStripZeroSuppressionAlgorithm::run().

00012                                                            {
00013   // Get ESObject 
00014   es.get<SiStripNoisesRcd>().get(noiseHandle);
00015   es.get<SiStripThresholdRcd>().get(thresholdHandle);
00016 }

bool SiStripFedZeroSuppression::IsAValidDigi (  ) 

Definition at line 341 of file SiStripFedZeroSuppression.cc.

References adc, adcMaxNeigh, adcNext, adcNext2, adcPrev, adcPrev2, lat::endl(), edm::isDebugEnabled(), LogTrace, theFEDalgorithm, theFEDhighThresh, theFEDlowThresh, theNeighFEDhighThresh, theNeighFEDlowThresh, theNext2FEDlowThresh, theNextFEDhighThresh, theNextFEDlowThresh, thePrev2FEDlowThresh, thePrevFEDhighThresh, and thePrevFEDlowThresh.

Referenced by suppress().

00342 {
00343 
00344 #ifdef DEBUG_SiStripZeroSuppression_
00345 
00346 
00347   if (edm::isDebugEnabled()){
00348 
00349     LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress] "
00350                                        << "\n\t adc " << adc 
00351                                        << "\n\t adcPrev " << adcPrev
00352                                        << "\n\t adcNext " << adcNext 
00353                                        << "\n\t adcMaxNeigh " << adcMaxNeigh 
00354                                        << "\n\t adcPrev2 " << adcPrev2 
00355                                        << "\n\t adcNext2 " << adcNext2 
00356                                        <<std::endl;
00357   
00358     LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress] "
00359                                        << "\n\t theFEDlowThresh " <<  theFEDlowThresh 
00360                                        << "\n\t theFEDhighThresh " << theFEDhighThresh 
00361                                        << "\n\t thePrevFEDlowThresh " <<  thePrevFEDlowThresh 
00362                                        << "\n\t thePrevFEDhighThresh " << thePrevFEDhighThresh 
00363                                        << "\n\t theNextFEDlowThresh " <<  theNextFEDlowThresh 
00364                                        << "\n\t theNextFEDhighThresh " << theNextFEDhighThresh 
00365                                        << "\n\t theNeighFEDlowThresh " <<  theNeighFEDlowThresh 
00366                                        << "\n\t theNeighFEDhighThresh " << theNeighFEDhighThresh 
00367                                        << "\n\t thePrev2FEDlowThresh " <<  thePrev2FEDlowThresh 
00368                                        << "\n\t theNext2FEDlowThresh " <<  theNext2FEDlowThresh
00369                                        <<std::endl;
00370   }
00371 #endif  
00372   // Decide if this strip should be accepted.
00373   bool accept = false;
00374   switch (theFEDalgorithm) {
00375   case 1:
00376     accept = (adc >= theFEDlowThresh);
00377     break;
00378   case 2:
00379     accept = (adc >= theFEDhighThresh || (adc >= theFEDlowThresh &&
00380                                           adcMaxNeigh >= theNeighFEDlowThresh));
00381     break;
00382   case 3:
00383     accept = (adc >= theFEDhighThresh || (adc >= theFEDlowThresh &&
00384                                           adcMaxNeigh >= theNeighFEDhighThresh));
00385     break;
00386   case 4:
00387     accept = (
00388               (adc >= theFEDhighThresh)            //Test for adc>highThresh (same as algorithm 2)
00389               ||
00390               (
00391                (adc >= theFEDlowThresh)            //Test for adc>lowThresh, with neighbour adc>lowThresh (same as algorithm 2)
00392                &&
00393                (adcMaxNeigh >= theNeighFEDlowThresh)
00394                ) 
00395               ||
00396               (
00397                (adc < theFEDlowThresh)        //Test for adc<lowThresh
00398                &&     
00399                (
00400                 (
00401                  (adcPrev  >= thePrevFEDhighThresh)    //with both neighbours>highThresh
00402                  &&
00403                  (adcNext  >= theNextFEDhighThresh)
00404                  ) 
00405                 ||
00406                 (
00407                  (adcPrev  >= thePrevFEDhighThresh)    //OR with previous neighbour>highThresh and
00408                  &&
00409                  (adcNext  >= theNextFEDlowThresh)     //both the next neighbours>lowThresh
00410                  &&
00411                  (adcNext2 >= theNext2FEDlowThresh)
00412                  )  
00413                 ||
00414                 (
00415                  (adcNext  >= theNextFEDhighThresh)    //OR with next neighbour>highThresh and
00416                  &&
00417                  (adcPrev  >= thePrevFEDlowThresh)     //both the previous neighbours>lowThresh
00418                  &&
00419                  (adcPrev2 >= thePrev2FEDlowThresh)
00420                  )  
00421                 ||
00422                 (
00423                  (adcNext  >= theNextFEDlowThresh)     //OR with both next neighbours>lowThresh and
00424                  &&
00425                  (adcNext2 >= theNext2FEDlowThresh)   //both the previous neighbours>lowThresh
00426                  &&
00427                  (adcPrev  >= thePrevFEDlowThresh)  
00428                  &&
00429                  (adcPrev2 >= thePrev2FEDlowThresh)
00430                  )
00431                 )
00432                )
00433               );
00434     break;
00435   }
00436   return accept;
00437 }

void SiStripFedZeroSuppression::suppress ( const std::vector< int16_t > &  in,
edm::DetSet< SiStripDigi > &  out 
)

Definition at line 238 of file SiStripFedZeroSuppression.cc.

References adc, adcMaxNeigh, adcNext, adcNext2, adcPrev, adcPrev2, edm::DetSet< T >::data, fillThresholds_(), highThr_, edm::DetSet< T >::id, IsAValidDigi(), edm::isDebugEnabled(), LogTrace, lowThr_, edm::DetSet< T >::push_back(), size, strip(), theFEDhighThresh, theFEDlowThresh, theNeighFEDhighThresh, theNeighFEDlowThresh, theNext2FEDlowThresh, theNextFEDhighThresh, theNextFEDlowThresh, thePrev2FEDlowThresh, thePrevFEDhighThresh, thePrevFEDlowThresh, and truncate().

00238                                                                                                  {
00239 
00240   const uint32_t detID = out.id;
00241   size_t size = in.size();
00242 #ifdef DEBUG_SiStripZeroSuppression_
00243   if (edm::isDebugEnabled())
00244     LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress] Zero suppression on std::vector<int16_t>: detID " << detID << " size = " << in.size();
00245 #endif
00246 
00247    fillThresholds_(detID, size); // want to decouple this from the other cost
00248 
00249   std::vector<int16_t>::const_iterator in_iter=in.begin();
00250   for (size_t strip = 0; strip < size; ++strip, ++in_iter){
00251 
00252     size_t strip_mod_128 = strip & 127;
00253 #ifdef DEBUG_SiStripZeroSuppression_
00254     if (edm::isDebugEnabled())
00255       LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress]  detID= " << detID << " strip= " <<  strip << "  adc= " << *in_iter;
00256 #endif    
00257     adc   = *in_iter;
00258 
00259     theFEDlowThresh  = lowThr_[strip];
00260     theFEDhighThresh = highThr_[strip];
00261 
00262     //Find adc values for neighbouring strips
00263 
00264      /*
00265       If a strip is the last one on the chip
00266       set its next neighbor's thresholds to infinity
00267       because the FED does not merge clusters across
00268       chip boundaries right now
00269     */
00270 
00271     //adcPrev = -9999;  // useless, they are set
00272     //adcNext = -9999;  // in the next lines in any case
00273     if ( strip_mod_128 == 127 ) {
00274       adcNext = 0;      
00275       theNextFEDlowThresh  = 9999;
00276       theNextFEDhighThresh = 9999;
00277     } else {
00278       adcNext = *(in_iter+1);
00279       theNextFEDlowThresh  = lowThr_[strip+1];
00280       theNextFEDhighThresh = highThr_[strip+1];
00281     }
00282     
00283     /*
00284       Similarily, for the first strip 
00285       on a chip
00286     */
00287     if ( strip_mod_128 == 0 ) {
00288       adcPrev = 0;
00289       thePrevFEDlowThresh  = 9999;
00290       thePrevFEDhighThresh = 9999;   
00291     } else {
00292       adcPrev = *(in_iter-1);
00293       thePrevFEDlowThresh  = lowThr_[strip-1];
00294       thePrevFEDhighThresh = highThr_[strip-1];
00295     }
00296 
00297     if ( adcNext < adcPrev){
00298       adcMaxNeigh = adcPrev;
00299       theNeighFEDlowThresh  = thePrevFEDlowThresh;
00300       theNeighFEDhighThresh = thePrevFEDhighThresh;
00301     } else {
00302       adcMaxNeigh = adcNext;
00303       theNeighFEDlowThresh  = theNextFEDlowThresh;
00304       theNeighFEDhighThresh = theNextFEDhighThresh;
00305     }
00306     
00307     //Find adc values for next neighbouring strips
00308     //adcPrev2 = -9999;           //
00309     //adcNext2 = -9999;           // useless to set them here
00310     //thePrev2FEDlowThresh  = 1;  // they are overwritten always in the next 8 lines
00311     //theNext2FEDlowThresh  = 1;  //
00312     if ( strip_mod_128 >=126 ) {
00313       adcNext2 = 0;
00314       theNext2FEDlowThresh  = 9999;
00315     //} else if ( strip_mod_128 < 126 ) { // if it's not >= then is <, no need to "if" again
00316     } else {
00317       adcNext2 = *(in_iter+2);
00318       theNext2FEDlowThresh  = lowThr_[strip+2];
00319     }
00320     if ( strip_mod_128 <= 1 ) {
00321       adcPrev2 = 0; 
00322       thePrev2FEDlowThresh  = 9999;
00323     //} else if ( strip_mod_128 > 1 ) { // same as above
00324     } else {
00325       adcPrev2 = *(in_iter-2);
00326       thePrev2FEDlowThresh  = lowThr_[strip-2];;
00327     }
00328     
00329     if (IsAValidDigi()){
00330 #ifdef DEBUG_SiStripZeroSuppression_
00331       if (edm::isDebugEnabled())
00332         LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress] DetId " << out.id << " strip " << strip << " adc " << *in_iter << " digiCollection size " << out.data.size() ;
00333 #endif            
00334       //GB 23/6/08: truncation should be done at the very beginning
00335       out.push_back(SiStripDigi(strip, (*in_iter<0 ? 0 : truncate( *in_iter ) )));
00336     }
00337   }
00338 }

void SiStripFedZeroSuppression::suppress ( const edm::DetSet< SiStripRawDigi > &  in,
edm::DetSet< SiStripDigi > &  out 
)

Definition at line 116 of file SiStripFedZeroSuppression.cc.

References adc, adcMaxNeigh, adcNext, adcNext2, adcPrev, adcPrev2, edm::DetSet< T >::data, SiStripThreshold::Data::getHth(), SiStripThreshold::Data::getLth(), edm::DetSet< T >::id, IsAValidDigi(), edm::isDebugEnabled(), LogTrace, noiseHandle, strip(), theFEDhighThresh, theFEDlowThresh, theNeighFEDhighThresh, theNeighFEDlowThresh, theNext2FEDlowThresh, theNextFEDhighThresh, theNextFEDlowThresh, thePrev2FEDlowThresh, thePrevFEDhighThresh, thePrevFEDlowThresh, thresholdHandle, and truncate().

00117 {
00118   const uint32_t detID = out.id;
00119   SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID);
00120   SiStripThreshold::Range detThRange = thresholdHandle->getRange(detID);
00121 #ifdef DEBUG_SiStripZeroSuppression_
00122   if (edm::isDebugEnabled())
00123     LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress] Zero suppression on edm::DetSet<SiStripRawDigi>: detID " << detID << " size = " << in.data.size();
00124 #endif
00125   edm::DetSet<SiStripRawDigi>::const_iterator in_iter=in.data.begin();
00126   for (;in_iter!=in.data.end();in_iter++){
00127 
00128     const uint32_t strip = (uint32_t) (in_iter-in.data.begin());
00129 
00130 #ifdef DEBUG_SiStripZeroSuppression_
00131     if (edm::isDebugEnabled())
00132       LogTrace("SiStripZeroSuppression") << "[SiStripFedZeroSuppression::suppress] detID= " << detID << " strip= " <<  strip << "  adc= " << in_iter->adc();
00133 #endif    
00134     adc   = in_iter->adc();
00135 
00136     SiStripThreshold::Data thresholds=thresholdHandle->getData(strip,detThRange);
00137     theFEDlowThresh  = static_cast<int16_t>(thresholds.getLth()*noiseHandle->getNoise(strip,detNoiseRange)+0.5);
00138     theFEDhighThresh = static_cast<int16_t>(thresholds.getHth()*noiseHandle->getNoise(strip,detNoiseRange)+0.5);
00139 
00140     adcPrev = -9999;
00141     adcNext = -9999;
00142     /*
00143       If a strip is the last one on the chip
00144       set its next neighbor's thresholds to infinity
00145       because the FED does not merge clusters across
00146       chip boundaries right now
00147     */
00148     if ( strip%128 == 127 ) { 
00149       adcNext = 0;      
00150       theNextFEDlowThresh  = 9999;
00151       theNextFEDhighThresh = 9999;
00152     }
00153     else {
00154       adcNext = (in_iter+1)->adc();
00155       SiStripThreshold::Data thresholds_1=thresholdHandle->getData(strip+1,detThRange);
00156       theNextFEDlowThresh  = static_cast<int16_t>(thresholds_1.getLth()*noiseHandle->getNoise(strip+1,detNoiseRange)+0.5);
00157       theNextFEDhighThresh = static_cast<int16_t>(thresholds_1.getHth()*noiseHandle->getNoise(strip+1,detNoiseRange)+0.5);
00158     }
00159     /*
00160       Similarily, for the first strip 
00161       on a chip
00162     */
00163     if ( strip%128 == 0 ) {
00164       adcPrev = 0;
00165       thePrevFEDlowThresh  = 9999;
00166       thePrevFEDhighThresh = 9999;   
00167     }
00168     else {
00169       adcPrev = (in_iter-1)->adc();
00170       SiStripThreshold::Data thresholds_1=thresholdHandle->getData(strip-1,detThRange);
00171       thePrevFEDlowThresh  = static_cast<int16_t>(thresholds_1.getLth()*noiseHandle->getNoise(strip-1,detNoiseRange)+0.5);
00172       thePrevFEDhighThresh = static_cast<int16_t>(thresholds_1.getHth()*noiseHandle->getNoise(strip-1,detNoiseRange)+0.5);
00173     }
00174     if ( adcNext < adcPrev){
00175       adcMaxNeigh = adcPrev;
00176       theNeighFEDlowThresh  = thePrevFEDlowThresh;
00177       theNeighFEDhighThresh = thePrevFEDhighThresh;
00178     } else {
00179       adcMaxNeigh = adcNext;
00180       theNeighFEDlowThresh  = theNextFEDlowThresh;
00181       theNeighFEDhighThresh = theNextFEDhighThresh;
00182     }
00183     
00184     //Find adc values for next neighbouring strips
00185     adcPrev2 = -9999;
00186     adcNext2 = -9999;
00187     thePrev2FEDlowThresh  = 1;
00188     theNext2FEDlowThresh  = 1;
00189     if ( strip%128 >= 126 ) {
00190       adcNext2 = 0;
00191       theNext2FEDlowThresh  = 9999;
00192     }
00193     else if ( strip%128 < 126 ) {
00194       adcNext2 = (in_iter+2)->adc();
00195      theNext2FEDlowThresh  = static_cast<int16_t>(thresholdHandle->getData(strip+2,detThRange).getLth()*noiseHandle->getNoise(strip+2,detNoiseRange)+0.5);
00196     }
00197     if ( strip%128 <= 1 ) {
00198       adcPrev2 = 0; 
00199       thePrev2FEDlowThresh  = 9999;
00200     }
00201     else if ( strip%128 > 1 ) {
00202       adcPrev2 = (in_iter-2)->adc();
00203      thePrev2FEDlowThresh  = static_cast<int16_t>(thresholdHandle->getData(strip-2,detThRange).getLth()*noiseHandle->getNoise(strip-2,detNoiseRange)+0.5);
00204     }
00205     //GB 23/6/08: truncation should be done at the very beginning
00206     if (IsAValidDigi())
00207       out.data.push_back(SiStripDigi(strip, truncate(in_iter->adc())));
00208   }
00209 }

void SiStripFedZeroSuppression::suppress ( const std::vector< SiStripDigi > &  in,
std::vector< SiStripDigi > &  selectedSignal,
const uint32_t &  detID 
)

Definition at line 18 of file SiStripFedZeroSuppression.cc.

References noiseHandle, suppress(), and thresholdHandle.

00018                                                                                                                                       {
00019   suppress(in, selectedSignal, detID, noiseHandle, thresholdHandle);
00020 }

void SiStripFedZeroSuppression::suppress ( const std::vector< SiStripDigi > &  in,
std::vector< SiStripDigi > &  selectedSignal,
const uint32_t &  detID,
edm::ESHandle< SiStripNoises > &  noiseHandle,
edm::ESHandle< SiStripThreshold > &  thresholdHandle 
)

Definition at line 22 of file SiStripFedZeroSuppression.cc.

References adc, adcMaxNeigh, adcNext, adcNext2, adcPrev, adcPrev2, SiStripThreshold::Data::getHth(), SiStripThreshold::Data::getLth(), i, IsAValidDigi(), strip(), theFEDhighThresh, theFEDlowThresh, theNeighFEDhighThresh, theNeighFEDlowThresh, theNext2FEDlowThresh, theNextFEDhighThresh, theNextFEDlowThresh, thePrev2FEDlowThresh, thePrevFEDhighThresh, and thePrevFEDlowThresh.

Referenced by SiStripDigitizerAlgorithm::run(), SiStripZeroSuppressionAlgorithm::run(), and suppress().

00023                                                                                                                                                  {
00024 
00025   int i;  
00026   int inSize = in.size();
00027   SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID);
00028   SiStripThreshold::Range detThRange = thresholdHandle->getRange(detID);
00029 
00030   // reserving more than needed, but quicker than one at a time
00031   selectedSignal.clear();
00032   selectedSignal.reserve(inSize);
00033   for (i = 0; i < inSize; i++) {
00034     //Find adc values for neighbouring strips
00035     const uint32_t strip = (uint32_t) in[i].strip();
00036     
00037     adc   = in[i].adc();
00038 
00039     SiStripThreshold::Data thresholds=thresholdHandle->getData(strip,detThRange);
00040     theFEDlowThresh  = static_cast<int16_t>(thresholds.getLth()*noiseHandle->getNoise(strip,detNoiseRange)+0.5);
00041     theFEDhighThresh = static_cast<int16_t>(thresholds.getHth()*noiseHandle->getNoise(strip,detNoiseRange)+0.5);
00042 
00043     adcPrev  = -9999;
00044     adcNext  = -9999;
00045     adcPrev2 = -9999;
00046     adcNext2 = -9999;
00047     
00048     /*
00049       Since we are not running on 
00050       Raw data we need to initialize
00051       all the FED threshold
00052     */
00053     
00054     theNextFEDlowThresh  = theFEDlowThresh;
00055     theNext2FEDlowThresh = theFEDlowThresh;
00056     thePrevFEDlowThresh  = theFEDlowThresh;
00057     thePrev2FEDlowThresh = theFEDlowThresh;
00058     theNeighFEDlowThresh = theFEDlowThresh;
00059 
00060     theNextFEDhighThresh  = theFEDhighThresh;
00061     thePrevFEDhighThresh  = theFEDhighThresh;
00062     theNeighFEDhighThresh = theFEDhighThresh;
00063 
00064     if ( ((strip)%128) == 127){ 
00065       adcNext = 0;
00066       theNextFEDlowThresh  = 9999;
00067       theNextFEDhighThresh = 9999;
00068     }else if (i + 1 < inSize && in[i+1].strip() == strip + 1) {
00069       adcNext = in[i+1].adc();
00070       SiStripThreshold::Data thresholds_1=thresholdHandle->getData(strip+1,detThRange);
00071       theNextFEDlowThresh  = static_cast<int16_t>(thresholds_1.getLth()*noiseHandle->getNoise(strip+1,detNoiseRange)+0.5);
00072       theNextFEDhighThresh = static_cast<int16_t>(thresholds_1.getHth()*noiseHandle->getNoise(strip+1,detNoiseRange)+0.5);
00073       if ( ((strip)%128) == 126){ 
00074         adcNext2 = 0;
00075         theNext2FEDlowThresh  = 9999;
00076       }else if (i + 2 < inSize && in[i+2].strip() == strip + 2) {
00077         adcNext2 = in[i+2].adc();
00078         theNext2FEDlowThresh  = static_cast<int16_t>(thresholdHandle->getData(strip+2,detThRange).getLth()*noiseHandle->getNoise(strip+2,detNoiseRange)+0.5);
00079       }
00080     }
00081 
00082     if ( ((strip)%128) == 0){   
00083       adcPrev = 0;
00084       thePrevFEDlowThresh  = 9999;
00085       thePrevFEDhighThresh = 9999;
00086     }else if (i - 1 >= 0 && in[i-1].strip() == strip - 1) {
00087       adcPrev = in[i-1].adc();
00088       SiStripThreshold::Data thresholds_1=thresholdHandle->getData(strip-1,detThRange);
00089       thePrevFEDlowThresh  = static_cast<int16_t>(thresholds_1.getLth()*noiseHandle->getNoise(strip-1,detNoiseRange)+0.5);
00090       thePrevFEDhighThresh = static_cast<int16_t>(thresholds_1.getHth()*noiseHandle->getNoise(strip-1,detNoiseRange)+0.5);
00091       if ( ((strip)%128) == 1){
00092         adcPrev2 = 0; 
00093         thePrev2FEDlowThresh  = 99999;
00094       }else if (i - 2 >= 0 && in[i-2].strip() == strip - 2) {
00095         adcPrev2 = in[i-2].adc();
00096         thePrev2FEDlowThresh  = static_cast<int16_t>(thresholdHandle->getData(strip-2,detThRange).getLth()*noiseHandle->getNoise(strip-2,detNoiseRange)+0.5);
00097       }
00098     }
00099 
00100     if ( adcNext <= adcPrev){
00101       adcMaxNeigh = adcPrev;
00102       theNeighFEDlowThresh  = thePrevFEDlowThresh;
00103       theNeighFEDhighThresh = thePrevFEDhighThresh;
00104     } else {
00105       adcMaxNeigh = adcNext;
00106       theNeighFEDlowThresh  = theNextFEDlowThresh;
00107       theNeighFEDhighThresh = theNextFEDhighThresh;
00108     }
00109     
00110     if (IsAValidDigi()){
00111       selectedSignal.push_back(SiStripDigi(strip, adc));
00112     }
00113   }
00114 }

uint16_t SiStripFedZeroSuppression::truncate ( int16_t  adc  )  const [inline, private]

Definition at line 40 of file SiStripFedZeroSuppression.h.

Referenced by suppress().

00040                                              {
00041     if(adc>253) return ((adc>511) ? 255 : 254);
00042     return adc;
00043   };


Member Data Documentation

int16_t SiStripFedZeroSuppression::adc [private]

Definition at line 53 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::adcMaxNeigh [private]

Definition at line 56 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::adcNext [private]

Definition at line 55 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::adcNext2 [private]

Definition at line 58 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::adcPrev [private]

Definition at line 54 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::adcPrev2 [private]

Definition at line 57 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

std::vector<int16_t> SiStripFedZeroSuppression::highThr_ [private]

Definition at line 72 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_(), and suppress().

std::vector<float> SiStripFedZeroSuppression::highThrSN_ [private]

Definition at line 73 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_().

std::vector<int16_t> SiStripFedZeroSuppression::lowThr_ [private]

Definition at line 72 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_(), and suppress().

std::vector<float> SiStripFedZeroSuppression::lowThrSN_ [private]

Definition at line 73 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_().

edm::ESHandle<SiStripNoises> SiStripFedZeroSuppression::noiseHandle [private]

Definition at line 43 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_(), init(), and suppress().

std::vector<float> SiStripFedZeroSuppression::noises_ [private]

Definition at line 74 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_().

uint16_t SiStripFedZeroSuppression::theFEDalgorithm [private]

Definition at line 49 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi().

int16_t SiStripFedZeroSuppression::theFEDhighThresh [private]

Definition at line 51 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::theFEDlowThresh [private]

Definition at line 50 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::theNeighFEDhighThresh [private]

Definition at line 66 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::theNeighFEDlowThresh [private]

Definition at line 65 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::theNext2FEDlowThresh [private]

Definition at line 69 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::theNextFEDhighThresh [private]

Definition at line 63 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::theNextFEDlowThresh [private]

Definition at line 62 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::thePrev2FEDlowThresh [private]

Definition at line 68 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::thePrevFEDhighThresh [private]

Definition at line 61 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

int16_t SiStripFedZeroSuppression::thePrevFEDlowThresh [private]

Definition at line 60 of file SiStripFedZeroSuppression.h.

Referenced by IsAValidDigi(), and suppress().

edm::ESHandle<SiStripThreshold> SiStripFedZeroSuppression::thresholdHandle [private]

Definition at line 47 of file SiStripFedZeroSuppression.h.

Referenced by fillThresholds_(), init(), and suppress().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:32:23 2009 for CMSSW by  doxygen 1.5.4