CMS 3D CMS Logo

TT6CMNSubtractor.cc
Go to the documentation of this file.
2 
7 #include <cmath>
8 
10  uint32_t n_cache_id = es.get<SiStripNoisesRcd>().cacheIdentifier();
11  uint32_t q_cache_id = es.get<SiStripQualityRcd>().cacheIdentifier();
12 
13  if (n_cache_id != noise_cache_id) {
15  noise_cache_id = n_cache_id;
16  }
17  if (q_cache_id != quality_cache_id) {
19  quality_cache_id = q_cache_id;
20  }
21 }
22 
23 void TT6CMNSubtractor::subtract(uint32_t detId, uint16_t firstAPV, std::vector<int16_t>& digis) {
24  subtract_(detId, firstAPV, digis);
25 }
26 void TT6CMNSubtractor::subtract(uint32_t detId, uint16_t firstAPV, std::vector<float>& digis) {
27  subtract_(detId, firstAPV, digis);
28 }
29 
30 template <typename T>
31 inline void TT6CMNSubtractor::subtract_(uint32_t detId, uint16_t firstAPV, std::vector<T>& digis) {
32  short FixedBias = 128;
33  SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detId);
34  SiStripQuality::Range detQualityRange = qualityHandle->getRange(detId);
35 
36  typename std::vector<T>::iterator fs, ls;
37  double sumVal = 0.0;
38  double sumWt = 0.0;
39 
40  for (uint16_t istrip = 0; istrip < digis.size(); ++istrip) {
41  if (!qualityHandle->IsStripBad(detQualityRange, istrip + firstAPV * 128)) {
42  float stripNoise = noiseHandle->getNoiseFast(istrip + firstAPV * 128, detNoiseRange);
43 
44  if (std::abs(digis[istrip] - FixedBias) < cut_to_avoid_signal_ * stripNoise) {
45  double nWeight = 1 / (stripNoise * stripNoise);
46  sumVal += (digis[istrip] - FixedBias) * nWeight;
47  sumWt += nWeight;
48  }
49  }
50 
51  if (istrip % 128 == 127) {
52  double CM = (sumWt) ? sumVal / sumWt : 0.0;
53 
54  fs = digis.begin() + istrip - 127;
55  ls = digis.begin() + istrip + 1;
56 
57  while (fs < ls) {
58  *fs = static_cast<T>(*fs - FixedBias - CM);
59  fs++;
60  }
61 
62  sumVal = 0.0;
63  sumWt = 0.0;
64  }
65  }
66 }
eostools.ls
def ls(path, rec=False)
Definition: eostools.py:349
SiStripNoises::getNoiseFast
static float getNoiseFast(const uint16_t &strip, const Range &range)
Definition: SiStripNoises.h:66
SiStripBadStrip::getRange
const Range getRange(const uint32_t detID) const
Definition: SiStripBadStrip.cc:27
TT6CMNSubtractor::init
void init(const edm::EventSetup &es) override
Definition: TT6CMNSubtractor.cc:9
TT6CMNSubtractor.h
SiStripNoises.h
SiStripNoises::getRange
const Range getRange(const uint32_t detID) const
Definition: SiStripNoises.cc:34
SiStripNoisesRcd
Definition: SiStripCondDataRecords.h:40
TT6CMNSubtractor::quality_cache_id
uint32_t quality_cache_id
Definition: TT6CMNSubtractor.h:25
SiStripBadStrip::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripBadStrip.h:53
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
SiStripNoises::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:47
SiStripQualityRcd
Definition: SiStripDependentRecords.h:56
SiStripQuality::IsStripBad
bool IsStripBad(const uint32_t &detid, const short &strip) const
Definition: SiStripQuality.cc:628
TT6CMNSubtractor::cut_to_avoid_signal_
double cut_to_avoid_signal_
Definition: TT6CMNSubtractor.h:21
TT6CMNSubtractor::subtract_
void subtract_(uint32_t detId, uint16_t firstAPV, std::vector< T > &digis)
Definition: TT6CMNSubtractor.cc:31
edm::EventSetup
Definition: EventSetup.h:57
get
#define get
TT6CMNSubtractor::noiseHandle
edm::ESHandle< SiStripNoises > noiseHandle
Definition: TT6CMNSubtractor.h:23
TT6CMNSubtractor::noise_cache_id
uint32_t noise_cache_id
Definition: TT6CMNSubtractor.h:25
SiStripQuality.h
SiStripQualityRcd.h
TT6CMNSubtractor::subtract
void subtract(uint32_t detId, uint16_t firstAPV, std::vector< int16_t > &digis) override
Definition: TT6CMNSubtractor.cc:23
SiStripNoisesRcd.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TT6CMNSubtractor::qualityHandle
edm::ESHandle< SiStripQuality > qualityHandle
Definition: TT6CMNSubtractor.h:24