CMS 3D CMS Logo

NoiseTask.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <ostream>
3 
17 
19 
20 using namespace sistrip;
21 
22 std::ostream &operator<<(std::ostream &rOut, ApvAnalysis::PedestalType &rPEDS) {
23  for (ApvAnalysis::PedestalType::const_iterator pedsIter = rPEDS.begin(); pedsIter != rPEDS.end(); ++pedsIter) {
24  rOut << ' ' << *pedsIter;
25  }
26 
27  return rOut;
28 }
29 
30 // -----------------------------------------------------------------------------
31 //
36  : CommissioningTask(dqm, conn, "NoiseTask"), pedestalToken_(pedestalToken), noiseToken_(noiseToken) {
37  //@@ NOT GUARANTEED TO BE THREAD SAFE!
38  pApvFactory_ = edm::Service<ApvFactoryService>().operator->()->getApvFactory();
39 
40  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "]"
41  << " Constructing object...";
42 }
43 
44 // -----------------------------------------------------------------------------
45 //
47  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "]"
48  << " Destructing object...";
49 
50  // Have to delete pApvFactory_ manually even though we didn't create it
51  // ourself. :(
52  if (pApvFactory_) {
53  delete pApvFactory_;
54  }
55 }
56 
57 // -----------------------------------------------------------------------------
58 //
60  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "]";
61 
62  // CACHING
63  static std::unique_ptr<SiStripPedestals> pDBPedestals;
64  static std::unique_ptr<SiStripNoises> pDBNoises;
65 
66  const uint16_t nBINS = 256;
67 
68  {
69  // Pedestals
73  fedKey(),
75  connection().lldChannel(),
77  .title();
78 
79  HistoSet oHSet;
80  oHSet.isProfile_ = true;
81 
82  oHSet.vNumOfEntries_.resize(nBINS, 0);
83  oHSet.vSumOfContents_.resize(nBINS, 0);
84  oHSet.vSumOfSquares_.resize(nBINS, 0);
85 
86  oHSet.histo(dqm()->bookProfile(title, title, nBINS, -0.5, nBINS * 1. - 0.5, 1025, 0., 1025.));
87 
88  peds_.push_back(oHSet);
89  }
90 
91  {
92  // Corrected Noise
96  fedKey(),
98  connection().lldChannel(),
100  .title();
101 
102  HistoSet oHSet;
103  oHSet.isProfile_ = true;
104 
105  oHSet.vNumOfEntries_.resize(nBINS, 0);
106  oHSet.vSumOfContents_.resize(nBINS, 0);
107  oHSet.vSumOfSquares_.resize(nBINS, 0);
108 
109  oHSet.histo(dqm()->bookProfile(title, title, nBINS, -0.5, nBINS * 1. - 0.5, 1025, 0., 1025.));
110 
111  peds_.push_back(oHSet);
112  }
113 
114  const uint16_t nCM_BINS = 1024;
115  for (uint16_t nApv = 0; 2 > nApv; ++nApv) {
119  fedKey(),
120  sistrip::APV,
121  connection().i2cAddr(nApv),
123  .title();
124 
125  HistoSet oHSet;
126 
127  oHSet.isProfile_ = false;
128 
129  oHSet.vNumOfEntries_.resize(nCM_BINS, 0);
130 
131  oHSet.histo(dqm()->book1D(title, title, nCM_BINS, nCM_BINS / 2 * -1. - 0.5, nCM_BINS / 2 * 1. - 0.5));
132 
133  cm_.push_back(oHSet);
134  }
135 
136  // Initialize Apv
137  pApvFactory_->instantiateApvs(connection().detId(), connection().nApvs());
138 
139  // --[ RETRIEVE PEDESTALS FROM DB ]--
140  // Operation should be performed only once
141  if (!pDBPedestals.get()) {
142  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] "
143  << "Retrieving Pedestals from DB";
144 
145  // Directly retrieve Pedestals from EventSetup, and cache
146  pDBPedestals = std::make_unique<SiStripPedestals>(eventSetup()->getData(pedestalToken_));
147 
148  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] "
149  << "Done Retrieving Pedestals from DB";
150  } // End retrieve Pedestals from DB
151 
152  // --[ RETRIEVE NOISES FROM DB ]--
153  // Operation should be performed only once
154  if (!pDBNoises.get()) {
155  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] "
156  << "Retrieving Noises from DB";
157 
158  // Directly retrieve Noises from EventSetup, and cache
159  pDBNoises = std::make_unique<SiStripNoises>(eventSetup()->getData(noiseToken_));
160 
161  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] "
162  << "Done Retrieving Noises from DB";
163  } // End retrieve Noises from DB
164 
165  // Get ApvAnalysis associated with given DetId
167 
168  SiStripPedestals::Range pedestalsRange(pDBPedestals->getRange(connection().detId()));
169  SiStripNoises::Range noisesRange(pDBNoises->getRange(connection().detId()));
170 
171  // Cache Apv Pair #
172  const uint16_t nAPV_PAIR = connection().apvPairNumber();
173 
174  for (uint16_t nLclApv = 0; 2 > nLclApv; ++nLclApv) {
175  // Retrieve pedestals and noises associated with given DetId/Apv
176  ApvAnalysis::PedestalType pedestals;
178  for (uint16_t nStrip = nAPV_PAIR * 256 + nLclApv * 128, nMaxStrip = nStrip + 128; nMaxStrip > nStrip; ++nStrip) {
179  pedestals.push_back(pDBPedestals->getPed(nStrip, pedestalsRange));
180  noises.push_back(pDBNoises->getNoise(nStrip, noisesRange));
181  }
182 
183  try {
184  // Checked access
185  ApvAnalysisFactory::ApvAnalysisVector::reference rApvAnalysis = apvAnalysisVector.at(nAPV_PAIR * 2 + nLclApv);
186 
187  rApvAnalysis->pedestalCalculator().setPedestals(pedestals);
188  rApvAnalysis->pedestalCalculator().setNoise(noises);
189 
190  /*
191  std::stringstream out;
192  LogTrace( mlDqmSource_)
193  << "[NoiseTask::" << __func__ << "] "
194  << "DetId|Apv# -> "
195  << connection().detId() << '|' << ( nAPV_PAIR * 2 + nLclApv)
196  << " Pedestals: "
197  << ( out << pedestals
198  << " Noises: " << noises, out.str());
199  */
200  } catch (std::out_of_range const &) {
201  // Hmm, didn't find appropriate Apv :((( -> VERY, VERY BAD
202  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] "
203  << "Could not set Pedestals/Noises for DetId|Apv# -> " << connection().detId() << '|'
204  << (nAPV_PAIR * 2 + nLclApv) << ". !!! POSSIBLE BUG !!!";
205  } // End Try block
206  } // End Local Apvs loop
207 }
208 
209 // -----------------------------------------------------------------------------
210 //
212  pApvFactory_->updatePair(connection().detId(), connection().apvPairNumber(), rDigis);
213 }
214 
215 // -----------------------------------------------------------------------------
216 //
218  static UpdateTProfile updateTProfile;
219 
220  TProfile *pedsProf = ExtractTObject<TProfile>().extract(peds_[0].histo());
221  TProfile *noiseProf = ExtractTObject<TProfile>().extract(peds_[1].histo());
222 
223  for (uint16_t nLclApv = 2 * connection().apvPairNumber(), nMaxLclApv = nLclApv + 2, nApv = 0; nMaxLclApv > nLclApv;
224  ++nLclApv, ++nApv) {
225  ApvAnalysis::PedestalType lclPedestals;
226  ApvAnalysis::PedestalType lclNoises;
227  ApvAnalysis::PedestalType lclCommonMode(pApvFactory_->getCommonMode(connection().detId(), nLclApv));
228 
229  pApvFactory_->getPedestal(connection().detId(), nLclApv, lclPedestals);
230  pApvFactory_->getNoise(connection().detId(), nLclApv, lclNoises);
231 
232  const uint16_t nSTART_BIN = 128 * (nLclApv % 2);
233 
234  for (uint16_t nBin = 0, nAbsBin = nSTART_BIN + nBin + 1; 128 > nBin; ++nBin, ++nAbsBin) {
235  updateTProfile.setBinContent(pedsProf, nAbsBin, 5, lclPedestals[nBin], lclNoises[nBin]);
236  updateTProfile.setBinContent(noiseProf, nAbsBin, 5, lclNoises[nBin], 0);
237  } // End loop over BINs
238 
239  // Samvel: Assume Once CM value is calculated per chip.
240  // In principle Chip can be divided into a several ranges. Then CM
241  // will be calculated per range. !!! UPDATE CODE THEN !!!
242  for (ApvAnalysis::PedestalType::const_iterator cmIterator = lclCommonMode.begin();
243  cmIterator != lclCommonMode.end();
244  ++cmIterator) {
245  //uint32_t nCM = static_cast<uint32_t>( *cmIterator);
246  //if( nCM >= 1024) nCM = 1023;
247  //updateHistoSet( cm_[nApv], nCM);
248  float nCM = static_cast<float>(*cmIterator);
249  updateHistoSet(cm_[nApv], nCM);
250  }
251 
252  std::stringstream out;
253  LogTrace(mlDqmSource_) << "[NoiseTask::" << __func__ << "] "
254  << "DET ID [" << connection().detId() << "] has Common Mode size " << lclCommonMode.size()
255  << " : " << (out << lclCommonMode, out.str());
256  } // End loop over Local Apvs
257 
258  updateHistoSet(cm_[0]);
259  updateHistoSet(cm_[1]);
260 }
CommissioningTask::HistoSet::vSumOfSquares_
std::vector< double > vSumOfSquares_
Definition: CommissioningTask.h:46
sistrip::mlDqmSource_
static const char mlDqmSource_[]
Definition: ConstantsForLogger.h:20
sistrip::extrainfo::commonMode_
static const char commonMode_[]
Definition: ConstantsForDqm.h:48
ApvAnalysisFactory::getNoise
void getNoise(uint32_t det_id, int apvNumber, ApvAnalysis::PedestalType &noise)
Definition: ApvAnalysisFactory.cc:230
runGCPTkAlMap.title
string title
Definition: runGCPTkAlMap.py:94
sistrip::extrainfo::noise_
static const char noise_[]
Definition: ConstantsForDqm.h:47
UpdateTProfile
Definition: UpdateTProfile.h:8
MessageLogger.h
CommissioningTask::HistoSet::vSumOfContents_
std::vector< float > vSumOfContents_
Definition: CommissioningTask.h:45
NoiseTask::pedestalToken_
edm::ESGetToken< SiStripPedestals, SiStripPedestalsRcd > pedestalToken_
Definition: NoiseTask.h:40
NoiseTask::pApvFactory_
ApvAnalysisFactory * pApvFactory_
Definition: NoiseTask.h:39
SiStripPedestals::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripPedestals.h:51
edm::DetSet
Definition: DetSet.h:23
CommissioningTask::connection
const FedChannelConnection & connection() const
Definition: CommissioningTask.h:189
sistrip::operator<<
std::ostream & operator<<(std::ostream &os, const FEDBufferFormat &value)
Definition: SiStripFEDBufferComponents.cc:79
NoiseTask.h
SiStripCommissioningClient_cfg.conn
conn
Definition: SiStripCommissioningClient_cfg.py:5
timingPdfMaker.histo
histo
Definition: timingPdfMaker.py:279
DQMStore.h
ExtractTObject.h
printContent_cfi.getData
getData
Definition: printContent_cfi.py:16
SiStripNoises.h
CommissioningTask
Definition: CommissioningTask.h:24
ApvAnalysisFactory::getPedestal
void getPedestal(uint32_t det_id, int apvNumber, ApvAnalysis::PedestalType &peds)
Definition: ApvAnalysisFactory.cc:198
ExtractTObject
Definition: ExtractTObject.h:9
PFElectronDQMAnalyzer_cfi.nBin
nBin
Definition: PFElectronDQMAnalyzer_cfi.py:25
CommissioningTask::HistoSet
Definition: CommissioningTask.h:38
CommissioningTask::HistoSet::vNumOfEntries_
std::vector< float > vNumOfEntries_
Definition: CommissioningTask.h:44
CommissioningTask::fedKey
const uint32_t & fedKey() const
Definition: CommissioningTask.h:192
ApvAnalysisFactory::updatePair
void updatePair(uint32_t det_id, size_t apvPair, const edm::DetSet< SiStripRawDigi > &in)
Definition: ApvAnalysisFactory.cc:136
ApvAnalysisFactory::instantiateApvs
bool instantiateApvs(uint32_t det_id, int numberOfApvs)
Definition: ApvAnalysisFactory.cc:57
dqm::legacy::DQMStore
Definition: DQMStore.h:727
Service.h
SiStripNoises::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:47
sistrip::EXPERT_HISTO
Definition: ConstantsForHistoType.h:29
SiStripPedestalsRcd.h
sistrip::extrainfo::pedestals_
static const char pedestals_[]
Definition: ConstantsForDqm.h:45
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
ApvAnalysisFactory::getApvAnalysis
ApvAnalysisVector getApvAnalysis(const uint32_t nDET_ID)
Definition: ApvAnalysisFactory.cc:75
CommissioningTask::HistoSet::isProfile_
bool isProfile_
Definition: CommissioningTask.h:47
ApvAnalysisFactory.h
FedChannelConnection
Class containning control, module, detector and connection information, at the level of a FED channel...
Definition: FedChannelConnection.h:26
SiStripConstants.h
FedChannelConnection::detId
const uint32_t & detId() const
Definition: FedChannelConnection.h:213
CommissioningTask::HistoSet::histo
void histo(MonitorElement *)
Definition: CommissioningTask.cc:89
NoiseTask::fill
void fill(const SiStripEventSummary &, const edm::DetSet< SiStripRawDigi > &) override
Definition: NoiseTask.cc:211
sistrip::PEDESTALS
Definition: ConstantsForRunType.h:72
CommissioningTask::eventSetup
const edm::EventSetup *const eventSetup() const
Definition: CommissioningTask.h:195
sistrip::APV
Definition: ConstantsForGranularity.h:79
RecoTauValidation_cfi.reference
reference
Definition: RecoTauValidation_cfi.py:234
edm::Service
Definition: Service.h:30
CommissioningTask::updateHistoSet
void updateHistoSet(HistoSet &, const uint32_t &bin, const float &value)
Definition: CommissioningTask.cc:274
NoiseTask::update
void update() override
Definition: NoiseTask.cc:217
UpdateTProfile.h
ExtractTObject::extract
static T * extract(MonitorElement *me)
Definition: ExtractTObject.cc:21
NoiseTask::noiseToken_
edm::ESGetToken< SiStripNoises, SiStripNoisesRcd > noiseToken_
Definition: NoiseTask.h:41
edm::ESGetToken< SiStripPedestals, SiStripPedestalsRcd >
NoiseTask::~NoiseTask
~NoiseTask() override
Definition: NoiseTask.cc:46
CommissioningTask::dqm
DQMStore *const dqm() const
Definition: CommissioningTask.h:188
NoiseTask::peds_
std::vector< HistoSet > peds_
Definition: NoiseTask.h:36
NoiseTask::NoiseTask
NoiseTask(DQMStore *, const FedChannelConnection &, edm::ESGetToken< SiStripPedestals, SiStripPedestalsRcd > pedestalToken, edm::ESGetToken< SiStripNoises, SiStripNoisesRcd > noiseToken)
Definition: NoiseTask.cc:32
SiStripHistoTitle.h
ApvFactoryService.h
SiStripPedestals.h
sistrip::NOISE
Definition: ConstantsForRunType.h:91
SiStripHistoTitle::title
const std::string & title() const
Definition: SiStripHistoTitle.h:109
SiStripHistoTitle
Utility class that holds histogram title.
Definition: SiStripHistoTitle.h:20
ApvAnalysisFactory::getCommonMode
void getCommonMode(uint32_t det_id, ApvAnalysis::PedestalType &tmp)
Definition: ApvAnalysisFactory.cc:311
ApvAnalysisFactory::ApvAnalysisVector
std::vector< ApvAnalysis * > ApvAnalysisVector
Definition: ApvAnalysisFactory.h:24
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
FedChannelConnection::apvPairNumber
uint16_t apvPairNumber() const
Definition: FedChannelConnection.h:230
SiStripNoisesRcd.h
dqm
Definition: DQMStore.h:18
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
sistrip::FED_KEY
Definition: ConstantsForKeyType.h:30
sistrip
sistrip classes
Definition: SiStripQualityHelpers.h:14
ApvAnalysis::PedestalType
std::vector< float > PedestalType
Definition: ApvAnalysis.h:44
SiStripEventSummary
Definition: SiStripEventSummary.h:22
UpdateTProfile::setBinContent
static void setBinContent(TProfile *const profile, const uint32_t &bin, const double &entries, const double &mean, const double &spread)
Definition: UpdateTProfile.cc:80
sistrip::LLD_CHAN
Definition: ConstantsForGranularity.h:78
HLTEgPhaseIITestSequence_cff.noises
noises
Definition: HLTEgPhaseIITestSequence_cff.py:1348
NoiseTask::book
void book() override
Definition: NoiseTask.cc:59
NoiseTask::cm_
std::vector< HistoSet > cm_
Definition: NoiseTask.h:37