CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiStripCorrelateBadStripAndNoise Class Reference

#include <SiStripCorrelateBadStripAndNoise.h>

Inheritance diagram for SiStripCorrelateBadStripAndNoise:
edm::one::EDAnalyzer< edm::one::WatchRuns > edm::one::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

 SiStripCorrelateBadStripAndNoise (const edm::ParameterSet &)
 
 ~SiStripCorrelateBadStripAndNoise () override=default
 
- Public Member Functions inherited from edm::one::EDAnalyzer< edm::one::WatchRuns >
 EDAnalyzer ()=default
 
 EDAnalyzer (const EDAnalyzer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
const EDAnalyzeroperator= (const EDAnalyzer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDAnalyzerBase () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void beginRun (const edm::Run &run, const edm::EventSetup &es) override
 
void correlateWithNoise (const uint32_t &detid, const TrackerTopology &tTopo, const uint32_t &firstStrip, const uint32_t &range)
 
void DoAnalysis (const edm::EventSetup &)
 
void endJob () override
 
void endRun (const edm::Run &run, const edm::EventSetup &es) override
 
TH2F * getHisto (const long unsigned int &index)
 
void getHistos (const uint32_t &detid, const TrackerTopology &tTopo, std::vector< TH2F *> &histos)
 
float getMeanNoise (const SiStripNoises::Range &noiseRange, const uint32_t &first, const uint32_t &range)
 
void iterateOnBadStrips (const uint32_t &detid, const TrackerTopology &tTopo, const TrackerGeometry &tGeom, SiStripQuality::Range &sqrange)
 
void iterateOnDets (const TrackerTopology &tTopo, const TrackerGeometry &tGeom)
 

Private Attributes

TFile * file
 
const SiStripNoisesnoises_
 
edm::ESGetToken< SiStripNoises, SiStripNoisesRcdnoiseToken_
 
edm::ESWatcher< SiStripNoisesRcdnoiseWatcher_
 
const SiStripQualityquality_
 
edm::ESGetToken< SiStripQuality, SiStripQualityRcdqualityToken_
 
edm::ESWatcher< SiStripQualityRcdqualityWatcher_
 
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtkGeomToken_
 
TrackerMaptkmap
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtTopoToken_
 
std::vector< TH2F * > vTH2
 

Additional Inherited Members

- Public Types inherited from edm::one::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

DQM/SiStripMonitorSummary/plugins/SiStripCorrelateBadStripAndNoise.cc

Description: <one line="" class="" summary>="">

Implementation: <Notes on="" implementation>="">

Definition at line 46 of file SiStripCorrelateBadStripAndNoise.h.

Constructor & Destructor Documentation

◆ SiStripCorrelateBadStripAndNoise()

SiStripCorrelateBadStripAndNoise::SiStripCorrelateBadStripAndNoise ( const edm::ParameterSet iConfig)
explicit

Definition at line 8 of file SiStripCorrelateBadStripAndNoise.cc.

9  : qualityToken_{esConsumes<edm::Transition::BeginRun>()},
10  noiseToken_{esConsumes<edm::Transition::BeginRun>()},
11  tTopoToken_{esConsumes<edm::Transition::BeginRun>()},
12  tkGeomToken_{esConsumes<edm::Transition::BeginRun>()} {
13  // now do what ever initialization is needed
14  file = new TFile("correlTest.root", "RECREATE");
15  tkmap = new TrackerMap();
16 }
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
edm::ESGetToken< SiStripNoises, SiStripNoisesRcd > noiseToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
edm::ESGetToken< SiStripQuality, SiStripQualityRcd > qualityToken_

◆ ~SiStripCorrelateBadStripAndNoise()

SiStripCorrelateBadStripAndNoise::~SiStripCorrelateBadStripAndNoise ( )
overridedefault

Member Function Documentation

◆ analyze()

void SiStripCorrelateBadStripAndNoise::analyze ( const edm::Event ,
const edm::EventSetup  
)
inlineoverrideprivatevirtual

Implements edm::one::EDAnalyzerBase.

Definition at line 53 of file SiStripCorrelateBadStripAndNoise.h.

53 {};

◆ beginRun()

void SiStripCorrelateBadStripAndNoise::beginRun ( const edm::Run run,
const edm::EventSetup es 
)
overrideprivate

Definition at line 18 of file SiStripCorrelateBadStripAndNoise.cc.

References edm::ESWatcher< T >::check(), DoAnalysis(), edm::EventSetup::getData(), HLT_2023v12_cff::newQuality, noises_, noiseToken_, noiseWatcher_, quality_, qualityToken_, and qualityWatcher_.

18  {
19  auto newNoise = noiseWatcher_.check(es);
20  auto newQuality = qualityWatcher_.check(es);
21  if (newNoise || newQuality) {
22  edm::LogInfo("") << "[SiStripCorrelateBadStripAndNoise::beginRun]" << std::endl;
23 
26 
27  DoAnalysis(es);
28  }
29 }
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::ESWatcher< SiStripQualityRcd > qualityWatcher_
edm::ESGetToken< SiStripNoises, SiStripNoisesRcd > noiseToken_
Log< level::Info, false > LogInfo
edm::ESWatcher< SiStripNoisesRcd > noiseWatcher_
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
edm::ESGetToken< SiStripQuality, SiStripQualityRcd > qualityToken_

◆ correlateWithNoise()

void SiStripCorrelateBadStripAndNoise::correlateWithNoise ( const uint32_t &  detid,
const TrackerTopology tTopo,
const uint32_t &  firstStrip,
const uint32_t &  range 
)
private

Definition at line 80 of file SiStripCorrelateBadStripAndNoise.cc.

References HcalObjRepresent::Fill(), TrackerMap::fillc(), getHistos(), getMeanNoise(), SiStripNoises::getRange(), combine::histos, mps_fire::i, noises_, FastTimerService_cff::range, and tkmap.

Referenced by iterateOnBadStrips().

83  {
84  std::vector<TH2F *> histos;
85 
86  SiStripNoises::Range noiseRange = noises_->getRange(detid);
87  edm::LogInfo("Domenico") << "detid " << detid << " first " << firstStrip << " range " << range;
88  float meanAPVNoise = getMeanNoise(noiseRange, firstStrip / 128, 128);
89 
90  // float meanNoiseHotStrips=getMeanNoise(noiseRange,firstStrip,range);
91  for (size_t theStrip = firstStrip; theStrip < firstStrip + range; theStrip++) {
92  float meanNoiseHotStrips = getMeanNoise(noiseRange, theStrip, 1);
93 
94  // Get the histogram for this detid
95  getHistos(detid, tTopo, histos);
96  float yvalue = range < 21 ? 1. * range : 21;
97 
98  for (size_t i = 0; i < histos.size(); ++i)
99  histos[i]->Fill(meanNoiseHotStrips / meanAPVNoise - 1., yvalue);
100 
101  if (meanNoiseHotStrips / meanAPVNoise - 1. < -0.3)
102  tkmap->fillc(detid, 0xFF0000);
103  else
104  tkmap->fillc(detid, 0x0000FF);
105  }
106 }
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
void fillc(int idmod, int RGBcode)
Definition: TrackerMap.h:135
float getMeanNoise(const SiStripNoises::Range &noiseRange, const uint32_t &first, const uint32_t &range)
Log< level::Info, false > LogInfo
const Range getRange(const uint32_t detID) const
histos
Definition: combine.py:4
void getHistos(const uint32_t &detid, const TrackerTopology &tTopo, std::vector< TH2F *> &histos)
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:47

◆ DoAnalysis()

void SiStripCorrelateBadStripAndNoise::DoAnalysis ( const edm::EventSetup es)
private

Definition at line 31 of file SiStripCorrelateBadStripAndNoise.cc.

References edm::EventSetup::getData(), iterateOnDets(), tkGeomToken_, and tTopoToken_.

Referenced by beginRun().

31  {
32  // Loop on quality bad stirps
33  // for each strip, look at the noise
34  // evalaute the mean apv noise and the ratio among strip noise and
35  // meanApvNoise put the value in the histo in terms of ratio Vs percentage of
36  // badStrips per APV
37 
38  // Fill an histo per subdet and layer (and plus && minus for TEC/TID)
39  edm::LogInfo("") << "[Doanalysis]";
41 }
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
Log< level::Info, false > LogInfo
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
void iterateOnDets(const TrackerTopology &tTopo, const TrackerGeometry &tGeom)

◆ endJob()

void SiStripCorrelateBadStripAndNoise::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::one::EDAnalyzerBase.

Definition at line 160 of file SiStripCorrelateBadStripAndNoise.cc.

References file, mps_fire::i, TrackerMap::save(), tkmap, and vTH2.

160  {
161  for (size_t i = 0; i < vTH2.size(); i++)
162  if (vTH2[i] != nullptr)
163  vTH2[i]->Write();
164 
165  file->Write();
166  file->Close();
167 
168  tkmap->save(true, 0, 0, "testTkMap.png");
169 }
void save(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:844

◆ endRun()

void SiStripCorrelateBadStripAndNoise::endRun ( const edm::Run run,
const edm::EventSetup es 
)
inlineoverrideprivate

Definition at line 54 of file SiStripCorrelateBadStripAndNoise.h.

54 {};

◆ getHisto()

TH2F * SiStripCorrelateBadStripAndNoise::getHisto ( const long unsigned int &  index)
private

Definition at line 146 of file SiStripCorrelateBadStripAndNoise.cc.

References Skims_PA_cff::name, and vTH2.

Referenced by getHistos().

146  {
147  if (vTH2.size() < index + 1)
148  vTH2.resize(index + 1, nullptr);
149 
150  if (vTH2[index] == nullptr) {
151  char name[128];
152  sprintf(name, "%lu", index);
153  edm::LogInfo("") << "[getHisto] creating index " << index << std::endl;
154  vTH2[index] = new TH2F(name, name, 50, -2., 2., 21, 0.5, 21.5);
155  }
156 
157  return vTH2[index];
158 }
Log< level::Info, false > LogInfo

◆ getHistos()

void SiStripCorrelateBadStripAndNoise::getHistos ( const uint32_t &  detid,
const TrackerTopology tTopo,
std::vector< TH2F *> &  histos 
)
private

Definition at line 118 of file SiStripCorrelateBadStripAndNoise.cc.

References a, getHisto(), combine::histos, TrackerTopology::tecSide(), TrackerTopology::tecWheel(), TrackerTopology::tibLayer(), TrackerTopology::tidSide(), TrackerTopology::tidWheel(), and TrackerTopology::tobLayer().

Referenced by correlateWithNoise().

120  {
121  histos.clear();
122 
123  int subdet = -999;
124  int component = -999;
125  SiStripDetId a(detid);
126  if (a.subdetId() == 3) {
127  subdet = 0;
128  component = tTopo.tibLayer(detid);
129  } else if (a.subdetId() == 4) {
130  subdet = 1;
131  component = tTopo.tidSide(detid) == 2 ? tTopo.tidWheel(detid) : tTopo.tidWheel(detid) + 3;
132  } else if (a.subdetId() == 5) {
133  subdet = 2;
134  component = tTopo.tobLayer(detid);
135  } else if (a.subdetId() == 6) {
136  subdet = 3;
137  component = tTopo.tecSide(detid) == 2 ? tTopo.tecWheel(detid) : tTopo.tecWheel(detid) + 9;
138  }
139 
140  int index = 100 + subdet * 100 + component;
141 
142  histos.push_back(getHisto(subdet));
143  histos.push_back(getHisto(index));
144 }
unsigned int tobLayer(const DetId &id) const
TH2F * getHisto(const long unsigned int &index)
unsigned int tidSide(const DetId &id) const
unsigned int tidWheel(const DetId &id) const
unsigned int tecWheel(const DetId &id) const
unsigned int tecSide(const DetId &id) const
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:18
histos
Definition: combine.py:4
double a
Definition: hdecay.h:121
unsigned int tibLayer(const DetId &id) const

◆ getMeanNoise()

float SiStripCorrelateBadStripAndNoise::getMeanNoise ( const SiStripNoises::Range noiseRange,
const uint32_t &  first,
const uint32_t &  range 
)
private

Definition at line 108 of file SiStripCorrelateBadStripAndNoise.cc.

References SiStripNoises::getNoise(), SiStripPI::mean, noises_, and FastTimerService_cff::range.

Referenced by correlateWithNoise().

110  {
111  float mean = 0;
112  for (size_t istrip = firstStrip; istrip < firstStrip + range; istrip++) {
113  mean += noises_->getNoise(istrip, noiseRange);
114  }
115  return mean / (1. * range);
116 }
static float getNoise(uint16_t strip, const Range &range)
Definition: SiStripNoises.h:73

◆ iterateOnBadStrips()

void SiStripCorrelateBadStripAndNoise::iterateOnBadStrips ( const uint32_t &  detid,
const TrackerTopology tTopo,
const TrackerGeometry tGeom,
SiStripQuality::Range sqrange 
)
private

Definition at line 55 of file SiStripCorrelateBadStripAndNoise.cc.

References correlateWithNoise(), SiStripBadStrip::decode(), SiStripBadStrip::data::firstStrip, TrackerGeometry::idToDet(), quality_, SiStripBadStrip::data::range, and FastTimerService_cff::range.

Referenced by iterateOnDets().

58  {
59  float percentage = 0;
60  for (int it = 0; it < sqrange.second - sqrange.first; it++) {
61  unsigned int firstStrip = quality_->decode(*(sqrange.first + it)).firstStrip;
62  unsigned int range = quality_->decode(*(sqrange.first + it)).range;
63 
64  correlateWithNoise(detid, tTopo, firstStrip, range);
65 
66  edm::LogInfo("range") << range;
67  percentage += range;
68  }
69  if (percentage != 0)
70  percentage /= dynamic_cast<const StripGeomDetUnit *>(tGeom.idToDet(detid))->specificTopology().nstrips();
71  if (percentage > 1)
72  edm::LogError("SiStripQualityStatistics") << "PROBLEM detid " << detid << " value " << percentage << std::endl;
73 
74  //------- Global Statistics on percentage of bad components along the IOVs
75  //------//
76  if (percentage != 0)
77  edm::LogInfo("") << "percentage " << detid << " " << percentage;
78 }
unsigned short range
Log< level::Error, false > LogError
void correlateWithNoise(const uint32_t &detid, const TrackerTopology &tTopo, const uint32_t &firstStrip, const uint32_t &range)
const TrackerGeomDet * idToDet(DetId) const override
Log< level::Info, false > LogInfo
unsigned short firstStrip
data decode(const unsigned int &value) const

◆ iterateOnDets()

void SiStripCorrelateBadStripAndNoise::iterateOnDets ( const TrackerTopology tTopo,
const TrackerGeometry tGeom 
)
private

Definition at line 43 of file SiStripCorrelateBadStripAndNoise.cc.

References SiStripBadStrip::getDataVectorBegin(), SiStripBadStrip::getRegistryVectorBegin(), SiStripBadStrip::getRegistryVectorEnd(), iterateOnBadStrips(), and quality_.

Referenced by DoAnalysis().

43  {
44  const auto rbegin = quality_->getRegistryVectorBegin();
45  const auto rend = quality_->getRegistryVectorEnd();
46  for (auto rp = rbegin; rp != rend; ++rp) {
47  const uint32_t detid = rp->detid;
48 
49  auto sqrange =
51  iterateOnBadStrips(detid, tTopo, tGeom, sqrange);
52  }
53 }
ContainerIterator getDataVectorBegin() const
void iterateOnBadStrips(const uint32_t &detid, const TrackerTopology &tTopo, const TrackerGeometry &tGeom, SiStripQuality::Range &sqrange)
RegistryIterator getRegistryVectorEnd() const
std::pair< ContainerIterator, ContainerIterator > Range
RegistryIterator getRegistryVectorBegin() const

Member Data Documentation

◆ file

TFile* SiStripCorrelateBadStripAndNoise::file
private

◆ noises_

const SiStripNoises* SiStripCorrelateBadStripAndNoise::noises_
private

Definition at line 81 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by beginRun(), correlateWithNoise(), and getMeanNoise().

◆ noiseToken_

edm::ESGetToken<SiStripNoises, SiStripNoisesRcd> SiStripCorrelateBadStripAndNoise::noiseToken_
private

Definition at line 77 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by beginRun().

◆ noiseWatcher_

edm::ESWatcher<SiStripNoisesRcd> SiStripCorrelateBadStripAndNoise::noiseWatcher_
private

Definition at line 75 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by beginRun().

◆ quality_

const SiStripQuality* SiStripCorrelateBadStripAndNoise::quality_
private

Definition at line 80 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by beginRun(), iterateOnBadStrips(), and iterateOnDets().

◆ qualityToken_

edm::ESGetToken<SiStripQuality, SiStripQualityRcd> SiStripCorrelateBadStripAndNoise::qualityToken_
private

Definition at line 76 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by beginRun().

◆ qualityWatcher_

edm::ESWatcher<SiStripQualityRcd> SiStripCorrelateBadStripAndNoise::qualityWatcher_
private

Definition at line 74 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by beginRun().

◆ tkGeomToken_

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> SiStripCorrelateBadStripAndNoise::tkGeomToken_
private

Definition at line 79 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by DoAnalysis().

◆ tkmap

TrackerMap* SiStripCorrelateBadStripAndNoise::tkmap
private

Definition at line 86 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by correlateWithNoise(), and endJob().

◆ tTopoToken_

edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> SiStripCorrelateBadStripAndNoise::tTopoToken_
private

Definition at line 78 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by DoAnalysis().

◆ vTH2

std::vector<TH2F *> SiStripCorrelateBadStripAndNoise::vTH2
private

Definition at line 84 of file SiStripCorrelateBadStripAndNoise.h.

Referenced by endJob(), and getHisto().