CMS 3D CMS Logo

SiStripNoisesFromDBMiscalibrator.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: CondTools/SiStrip
4 // Class: SiStripNoisesFromDBMiscalibrator
5 //
14 //
15 // Original Author: Marco Musich
16 // Created: Tue, 03 Oct 2017 12:57:34 GMT
17 //
18 //
19 
20 // system include files
21 #include <memory>
22 #include <iostream>
23 #include <fstream>
24 
25 // user include files
26 #include "CLHEP/Random/RandGauss.h"
46 
47 //
48 // class declaration
49 //
50 
52 public:
55 
56  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
57 
58 private:
59  void beginJob() override;
60  void analyze(const edm::Event&, const edm::EventSetup&) override;
61  std::unique_ptr<SiStripNoises> getNewObject(const std::map<std::pair<uint32_t, int>, float>& theMap);
62  std::unique_ptr<SiStripNoises> getNewObject_withDefaults(const std::map<std::pair<uint32_t, int>, float>& theMap,
63  const float theDefault);
64  void endJob() override;
65 
66  // ----------member data ---------------------------
67  const bool m_fillDefaults;
68  const bool m_saveMaps;
69  const std::vector<edm::ParameterSet> m_parameters;
71 
72  std::unique_ptr<TrackerMap> scale_map;
73  std::unique_ptr<TrackerMap> smear_map;
74  std::unique_ptr<TrackerMap> ratio_map;
75  std::unique_ptr<TrackerMap> old_payload_map;
76  std::unique_ptr<TrackerMap> new_payload_map;
77  std::unique_ptr<TrackerMap> missing_map;
78 };
79 
80 //
81 // constructors and destructor
82 //
84  : m_fillDefaults{iConfig.getUntrackedParameter<bool>("fillDefaults", false)},
85  m_saveMaps{iConfig.getUntrackedParameter<bool>("saveMaps", true)},
86  m_parameters{iConfig.getParameter<std::vector<edm::ParameterSet> >("params")},
87  fp_{iConfig.getUntrackedParameter<edm::FileInPath>(
88  "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))} {
89  //now do what ever initialization is needed
90 
91  scale_map = std::unique_ptr<TrackerMap>(new TrackerMap("scale"));
92  scale_map->setTitle("Tracker Map of Scale factor averaged by module");
93  scale_map->setPalette(1);
94 
95  smear_map = std::unique_ptr<TrackerMap>(new TrackerMap("smear"));
96  smear_map->setTitle("Tracker Map of Smear factor averaged by module");
97  smear_map->setPalette(1);
98 
99  old_payload_map = std::unique_ptr<TrackerMap>(new TrackerMap("old_payload"));
100  old_payload_map->setTitle("Tracker Map of Starting Noise Payload averaged by module");
101  old_payload_map->setPalette(1);
102 
103  new_payload_map = std::unique_ptr<TrackerMap>(new TrackerMap("new_payload"));
104  new_payload_map->setTitle("Tracker Map of Modified Noise Payload averaged by module");
105  new_payload_map->setPalette(1);
106 
107  ratio_map = std::unique_ptr<TrackerMap>(new TrackerMap("ratio"));
108  ratio_map->setTitle("Tracker Map of Average by module of the payload ratio (new/old)");
109  ratio_map->setPalette(1);
110 
111  if (m_fillDefaults) {
112  missing_map = std::unique_ptr<TrackerMap>(new TrackerMap("uncabled"));
113  missing_map->setTitle("Tracker Map of uncabled modules");
114  missing_map->setPalette(1);
115  }
116 }
117 
119 
120 //
121 // member functions
122 //
123 
124 // ------------ method called for each event ------------
126  using namespace edm;
127 
128  edm::ESHandle<TrackerTopology> tTopoHandle;
129  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
130  const auto* const tTopo = tTopoHandle.product();
131 
132  std::vector<std::string> partitions;
133 
134  // fill the list of partitions
135  for (auto& thePSet : m_parameters) {
136  const std::string partition(thePSet.getParameter<std::string>("partition"));
137  // only if it is not yet in the list
138  if (std::find(partitions.begin(), partitions.end(), partition) == partitions.end()) {
139  partitions.push_back(partition);
140  }
141  }
142 
143  std::map<sistripsummary::TrackerRegion, SiStripMiscalibrate::Smearings> mapOfSmearings;
144 
145  for (auto& thePSet : m_parameters) {
146  const std::string partition(thePSet.getParameter<std::string>("partition"));
148 
149  bool m_doScale(thePSet.getParameter<bool>("doScale"));
150  bool m_doSmear(thePSet.getParameter<bool>("doSmear"));
151  double m_scaleFactor(thePSet.getParameter<double>("scaleFactor"));
152  double m_smearFactor(thePSet.getParameter<double>("smearFactor"));
153 
155  params.setSmearing(m_doScale, m_doSmear, m_scaleFactor, m_smearFactor);
156  mapOfSmearings[region] = params;
157  }
158 
159  edm::ESHandle<SiStripNoises> SiStripNoise_;
160  iSetup.get<SiStripNoisesRcd>().get(SiStripNoise_);
161 
162  std::map<std::pair<uint32_t, int>, float> theMap, oldPayloadMap;
163 
164  std::vector<uint32_t> detid;
165  SiStripNoise_->getDetIds(detid);
166  for (const auto& d : detid) {
167  SiStripNoises::Range range = SiStripNoise_->getRange(d);
168 
170 
171  // sort by largest to smallest
172  std::sort(regions.rbegin(), regions.rend());
173 
175 
176  for (unsigned int j = 0; j < regions.size(); j++) {
177  bool checkRegion = (mapOfSmearings.count(regions[j]) != 0);
178 
179  if (!checkRegion) {
180  // if the subdetector is not in the list and there's no indication for the whole tracker, just use the default
181  // i.e. no change
182  continue;
183  } else {
184  params = mapOfSmearings[regions[j]];
185  break;
186  }
187  }
188 
189  scale_map->fill(d, params.m_scaleFactor);
190  smear_map->fill(d, params.m_smearFactor);
191 
192  int nStrips = 0;
193  for (int it = 0; it < (range.second - range.first) * 8 / 9; ++it) {
194  auto noise = SiStripNoise_->getNoise(it, range);
195  std::pair<uint32_t, int> index = std::make_pair(d, nStrips);
196 
197  oldPayloadMap[index] = noise;
198 
199  if (params.m_doScale) {
200  noise *= params.m_scaleFactor;
201  }
202 
203  if (params.m_doSmear) {
204  float smearedNoise = CLHEP::RandGauss::shoot(noise, params.m_smearFactor);
205  noise = smearedNoise;
206  }
207 
208  theMap[index] = noise;
209 
210  nStrips += 1;
211 
212  } // loop over APVs
213  } // loop over DetIds
214 
215  std::unique_ptr<SiStripNoises> theSiStripNoises;
216  if (!m_fillDefaults) {
217  theSiStripNoises = this->getNewObject(theMap);
218  } else {
219  theSiStripNoises = this->getNewObject_withDefaults(theMap, -1.);
220  }
221 
222  // make the payload ratio map
223  uint32_t cachedId(0);
224  SiStripMiscalibrate::Entry noise_ratio;
227  for (const auto& element : theMap) {
228  uint32_t DetId = element.first.first;
229  int nstrip = element.first.second;
230  float new_noise = element.second;
231  float old_noise = oldPayloadMap[std::make_pair(DetId, nstrip)];
232 
233  // flush the counters
234  if (cachedId != 0 && DetId != cachedId) {
235  ratio_map->fill(cachedId, noise_ratio.mean());
236  old_payload_map->fill(cachedId, o_noise.mean());
237  new_payload_map->fill(cachedId, n_noise.mean());
238 
239  //auto test = new_payload_map.get()->smoduleMap;
240 
241  noise_ratio.reset();
242  o_noise.reset();
243  n_noise.reset();
244  }
245 
246  cachedId = DetId;
247  noise_ratio.add(new_noise / old_noise);
248  o_noise.add(old_noise);
249  n_noise.add(new_noise);
250  }
251 
252  // write out the SiStripNoises record
254 
255  if (poolDbService.isAvailable())
256  poolDbService->writeOne(theSiStripNoises.get(), poolDbService->currentTime(), "SiStripNoisesRcd");
257  else
258  throw std::runtime_error("PoolDBService required.");
259 }
260 
261 // ------------ method called once each job just before starting event loop ------------
263 
264 // ------------ method called once each job just after ending the event loop ------------
266  if (m_saveMaps) {
267  scale_map->save(true, 0, 0, "noise_scale_map.pdf");
268  scale_map->save(true, 0, 0, "noise_scale_map.png");
269 
270  smear_map->save(true, 0, 0, "noise_smear_map.pdf");
271  smear_map->save(true, 0, 0, "noise_smear_map.png");
272 
273  ratio_map->save(true, 0, 0, "noise_ratio_map.pdf");
274  ratio_map->save(true, 0, 0, "noise_ratio_map.png");
275 
277 
278  old_payload_map->save(true, range.first, range.second, "starting_noise_payload_map.pdf");
279  old_payload_map->save(true, range.first, range.second, "starting_noise_payload_map.png");
280 
282 
283  new_payload_map->save(true, range.first, range.second, "new_noise_payload_map.pdf");
284  new_payload_map->save(true, range.first, range.second, "new_noise_payload_map.png");
285 
286  if (m_fillDefaults) {
287  missing_map->save(true, 0, 0, "missing_map.pdf");
288  missing_map->save(true, 0, 0, "missing_map.png");
289  }
290  }
291 }
292 
293 //********************************************************************************//
295  const std::map<std::pair<uint32_t, int>, float>& theMap, const float theDefault) {
296  std::unique_ptr<SiStripNoises> obj = std::unique_ptr<SiStripNoises>(new SiStripNoises());
297 
299  const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>& DetInfos = reader.getAllData();
300 
301  std::vector<uint32_t> missingDetIds;
302 
303  for (std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>::const_iterator it = DetInfos.begin();
304  it != DetInfos.end();
305  it++) {
306  //Generate Noise for det detid
307  bool isMissing(false);
308  SiStripNoises::InputVector theSiStripVector;
309  for (int t_strip = 0; t_strip < 128 * it->second.nApvs; ++t_strip) {
310  std::pair<uint32_t, int> index = std::make_pair(it->first, t_strip);
311 
312  if (theMap.find(index) == theMap.end()) {
313  LogDebug("SiStripNoisesFromDBMiscalibrator") << "detid " << it->first << " \t"
314  << " strip " << t_strip << " \t"
315  << " not found" << std::endl;
316 
317  isMissing = true;
318  obj->setData(theDefault, theSiStripVector);
319 
320  } else {
321  float noise = theMap.at(index);
322  obj->setData(noise, theSiStripVector);
323  }
324  }
325 
326  if (isMissing)
327  missingDetIds.push_back(it->first);
328 
329  if (!obj->put(it->first, theSiStripVector)) {
330  edm::LogError("SiStripNoisesFromDBMiscalibrator")
331  << "[SiStripNoisesFromDBMiscalibrator::analyze] detid already exists" << std::endl;
332  }
333  }
334 
335  if (!missingDetIds.empty()) {
336  // open output file
337  std::stringstream name;
338  name << "missing_modules.txt";
339  std::ofstream* ofile = new std::ofstream(name.str(), std::ofstream::trunc);
340  if (!ofile->is_open())
341  throw "cannot open output file!";
342  for (const auto& missing : missingDetIds) {
343  edm::LogVerbatim("SiStripNoisesFromDBMiscalibrator") << missing << " " << 1 << std::endl;
344  (*ofile) << missing << " " << 1 << std::endl;
345  missing_map->fill(missing, 1);
346  }
347 
348  ofile->close();
349  delete ofile;
350  }
351 
352  return obj;
353 }
354 
355 //********************************************************************************//
356 std::unique_ptr<SiStripNoises> SiStripNoisesFromDBMiscalibrator::getNewObject(
357  const std::map<std::pair<uint32_t, int>, float>& theMap) {
358  std::unique_ptr<SiStripNoises> obj = std::unique_ptr<SiStripNoises>(new SiStripNoises());
359 
360  uint32_t PreviousDetId = 0;
361  SiStripNoises::InputVector theSiStripVector;
362  for (const auto& element : theMap) {
363  uint32_t DetId = element.first.first;
364  float noise = element.second;
365 
366  if (DetId != PreviousDetId) {
367  if (!theSiStripVector.empty()) {
368  if (!obj->put(PreviousDetId, theSiStripVector)) {
369  edm::LogError("SiStripNoisesFromDBMiscalibrator")
370  << "[SiStripNoisesFromDBMiscalibrator::analyze] detid already exists" << std::endl;
371  }
372  }
373 
374  theSiStripVector.clear();
375  PreviousDetId = DetId;
376  }
377  obj->setData(noise, theSiStripVector);
378  }
379  return obj;
380 }
381 
382 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
385 
386  desc.setComment(
387  "Creates rescaled / smeared SiStrip Noise payload."
388  "PoolDBOutputService must be set up for 'SiSiStripNoisesRcd'.");
389 
390  edm::ParameterSetDescription descScaler;
391  descScaler.setComment(
392  "ParameterSet specifying the Strip tracker partition to be scaled / smeared "
393  "by a given factor.");
394 
395  descScaler.add<std::string>("partition", "Tracker");
396  descScaler.add<bool>("doScale", true);
397  descScaler.add<bool>("doSmear", true);
398  descScaler.add<double>("scaleFactor", 1.0);
399  descScaler.add<double>("smearFactor", 1.0);
400  desc.addVPSet("params", descScaler, std::vector<edm::ParameterSet>(1));
401 
402  desc.addUntracked<bool>("fillDefaults", false);
403  desc.addUntracked<bool>("saveMaps", true);
404 
405  descriptions.add("scaleAndSmearSiStripNoises", desc);
406 }
407 
408 //define this as a plug-in
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
EDAnalyzer.h
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
ESHandle.h
SiStripNoises
Definition: SiStripNoises.h:25
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
indexGen.ofile
ofile
Definition: indexGen.py:102
edm
HLT enums.
Definition: AlignableModifier.h:19
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
SiStripMiscalibrate::Smearings
Definition: SiStripMiscalibrateHelper.h:45
SiStripNoisesFromDBMiscalibrator::smear_map
std::unique_ptr< TrackerMap > smear_map
Definition: SiStripNoisesFromDBMiscalibrator.cc:73
SiStripNoisesFromDBMiscalibrator
Definition: SiStripNoisesFromDBMiscalibrator.cc:51
SiStripDetId.h
SiStripMiscalibrate::Entry::add
void add(double val)
Definition: SiStripMiscalibrateHelper.h:25
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
SiStripNoises.h
AlignmentPI::partitions
partitions
Definition: AlignmentPayloadInspectorHelper.h:48
SiStripNoisesFromDBMiscalibrator::fp_
edm::FileInPath fp_
Definition: SiStripNoisesFromDBMiscalibrator.cc:70
edm::one::EDAnalyzer
Definition: EDAnalyzer.h:30
SiStripNoises::getRange
const Range getRange(const uint32_t detID) const
Definition: SiStripNoises.cc:34
SiStripNoises::getDetIds
void getDetIds(std::vector< uint32_t > &DetIds_) const
Definition: SiStripNoises.cc:58
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
SiStripDetInfoFileReader
Definition: SiStripDetInfoFileReader.h:30
edm::Service::isAvailable
bool isAvailable() const
Definition: Service.h:40
SiStripNoisesFromDBMiscalibrator::endJob
void endJob() override
Definition: SiStripNoisesFromDBMiscalibrator.cc:265
SiStripNoisesRcd
Definition: SiStripCondDataRecords.h:40
SiStripNoisesFromDBMiscalibrator::missing_map
std::unique_ptr< TrackerMap > missing_map
Definition: SiStripNoisesFromDBMiscalibrator.cc:77
DetId
Definition: DetId.h:17
edm::FileInPath
Definition: FileInPath.h:64
MakerMacros.h
TrackerTopology.h
PoolDBOutputService.h
TrackerTopologyRcd.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
DQM.reader
reader
Definition: DQM.py:105
sistripsummary::TrackerRegion
TrackerRegion
Definition: SiStripSummary.h:19
Service.h
SiStripNoises::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:47
edm::ESHandle< TrackerTopology >
SiStripDetInfoFileReader.h
TrackerMap
Definition: TrackerMap.h:76
SiStripNoisesFromDBMiscalibrator::getNewObject
std::unique_ptr< SiStripNoises > getNewObject(const std::map< std::pair< uint32_t, int >, float > &theMap)
Definition: SiStripNoisesFromDBMiscalibrator.cc:356
getGTfromDQMFile.obj
obj
Definition: getGTfromDQMFile.py:32
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
SiStripNoisesFromDBMiscalibrator::new_payload_map
std::unique_ptr< TrackerMap > new_payload_map
Definition: SiStripNoisesFromDBMiscalibrator.cc:76
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ParameterSetDescription::addUntracked
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:100
SiStripNoisesFromDBMiscalibrator::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: SiStripNoisesFromDBMiscalibrator.cc:383
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
edm::ParameterSetDescription::setComment
void setComment(std::string const &value)
Definition: ParameterSetDescription.cc:33
SiStripNoisesFromDBMiscalibrator::m_fillDefaults
const bool m_fillDefaults
Definition: SiStripNoisesFromDBMiscalibrator.cc:67
edm::LogError
Definition: MessageLogger.h:183
SiStripNoisesFromDBMiscalibrator::m_saveMaps
const bool m_saveMaps
Definition: SiStripNoisesFromDBMiscalibrator.cc:68
Event.h
edm::ParameterSetDescription::addVPSet
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
Definition: ParameterSetDescription.h:149
SiStripMiscalibrate::getTruncatedRange
std::pair< float, float > getTruncatedRange(const TrackerMap *theMap)
Definition: SiStripMiscalibrateHelper.cc:87
hgcalDigitizer_cfi.noise
noise
Definition: hgcalDigitizer_cfi.py:150
SiStripSummary.h
SiStripNoisesFromDBMiscalibrator::scale_map
std::unique_ptr< TrackerMap > scale_map
Definition: SiStripNoisesFromDBMiscalibrator.cc:72
SiStripNoisesFromDBMiscalibrator::ratio_map
std::unique_ptr< TrackerMap > ratio_map
Definition: SiStripNoisesFromDBMiscalibrator.cc:74
edm::Service< cond::service::PoolDBOutputService >
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::LogVerbatim
Definition: MessageLogger.h:297
SiStripNoisesFromDBMiscalibrator::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: SiStripNoisesFromDBMiscalibrator.cc:125
edm::EventSetup
Definition: EventSetup.h:57
SiStripMiscalibrate::Entry::reset
void reset()
Definition: SiStripMiscalibrateHelper.h:31
SiStripMiscalibrateHelper.h
get
#define get
TrackerMap.h
me0TriggerPseudoDigis_cff.nStrips
nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
Definition: me0TriggerPseudoDigis_cff.py:26
SiStripNoisesFromDBMiscalibrator::beginJob
void beginJob() override
Definition: SiStripNoisesFromDBMiscalibrator.cc:262
SiStripNoisesFromDBMiscalibrator::getNewObject_withDefaults
std::unique_ptr< SiStripNoises > getNewObject_withDefaults(const std::map< std::pair< uint32_t, int >, float > &theMap, const float theDefault)
Definition: SiStripNoisesFromDBMiscalibrator.cc:294
Frameworkfwd.h
cond::service::PoolDBOutputService::writeOne
Hash writeOne(const T *payload, Time_t time, const std::string &recordName)
Definition: PoolDBOutputService.h:57
HLT_2018_cff.region
region
Definition: HLT_2018_cff.py:81479
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
ztail.d
d
Definition: ztail.py:151
AlignmentPI::regions
regions
Definition: AlignmentPayloadInspectorHelper.h:76
SiStripNoisesRcd.h
SiStripMiscalibrate::getRegionFromString
sistripsummary::TrackerRegion getRegionFromString(std::string region)
Definition: SiStripMiscalibrateHelper.cc:8
SiStripNoises::InputVector
std::vector< uint16_t > InputVector
Definition: SiStripNoises.h:50
genParticles_cff.map
map
Definition: genParticles_cff.py:11
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
ParameterSet.h
SiStripMiscalibrate::Entry::mean
double mean()
Definition: SiStripMiscalibrateHelper.h:18
combine.missing
missing
Definition: combine.py:5
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
SiStripNoises::getNoise
static float getNoise(uint16_t strip, const Range &range)
Definition: SiStripNoises.h:71
SiStripNoisesFromDBMiscalibrator::m_parameters
const std::vector< edm::ParameterSet > m_parameters
Definition: SiStripNoisesFromDBMiscalibrator.cc:69
SiStripNoisesFromDBMiscalibrator::old_payload_map
std::unique_ptr< TrackerMap > old_payload_map
Definition: SiStripNoisesFromDBMiscalibrator.cc:75
edm::Event
Definition: Event.h:73
pileupReCalc_HLTpaths.trunc
trunc
Definition: pileupReCalc_HLTpaths.py:144
StripSubdetector.h
SiStripNoisesFromDBMiscalibrator::SiStripNoisesFromDBMiscalibrator
SiStripNoisesFromDBMiscalibrator(const edm::ParameterSet &)
Definition: SiStripNoisesFromDBMiscalibrator.cc:83
cond::service::PoolDBOutputService::currentTime
cond::Time_t currentTime() const
Definition: PoolDBOutputService.cc:189
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
SiStripMiscalibrate::Entry
Definition: SiStripMiscalibrateHelper.h:14
SiStripMiscalibrate::getRegionsFromDetId
std::vector< sistripsummary::TrackerRegion > getRegionsFromDetId(const TrackerTopology *m_trackerTopo, DetId detid)
Definition: SiStripMiscalibrateHelper.cc:38
SiStripNoisesFromDBMiscalibrator::~SiStripNoisesFromDBMiscalibrator
~SiStripNoisesFromDBMiscalibrator() override
Definition: SiStripNoisesFromDBMiscalibrator.cc:118