CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends
ThreeThresholdAlgorithm Class Referencefinal

#include <ThreeThresholdAlgorithm.h>

Inheritance diagram for ThreeThresholdAlgorithm:
StripClusterizerAlgorithm

Public Types

using Det = StripClusterizerAlgorithm::Det
 
using State = StripClusterizerAlgorithm::State
 
- Public Types inherited from StripClusterizerAlgorithm
typedef edmNew::DetSetVector< SiStripClusteroutput_t
 

Public Member Functions

void addFed (State &state, sistrip::FEDZSChannelUnpacker &unpacker, uint16_t ipair, std::vector< SiStripCluster > &out) const
 
void addFed (State &state, sistrip::FEDZSChannelUnpacker &unpacker, uint16_t ipair, output_t::TSFastFiller &out) const override
 
void clusterizeDetUnit (const edm::DetSet< SiStripDigi > &, output_t::TSFastFiller &) const override
 
void clusterizeDetUnit (const edmNew::DetSet< SiStripDigi > &, output_t::TSFastFiller &) const override
 
template<class digiDetSet >
void clusterizeDetUnit_ (const digiDetSet &digis, output_t::TSFastFiller &output) const
 
void stripByStripAdd (State &state, uint16_t strip, uint8_t adc, std::vector< SiStripCluster > &out) const override
 
void stripByStripAdd (State &state, uint16_t strip, uint8_t adc, output_t::TSFastFiller &out) const override
 
Det stripByStripBegin (uint32_t id) const override
 
void stripByStripEnd (State &state, std::vector< SiStripCluster > &out) const override
 
void stripByStripEnd (State &state, output_t::TSFastFiller &out) const override
 
- Public Member Functions inherited from StripClusterizerAlgorithm
virtual void addFed (Det const &det, sistrip::FEDZSChannelUnpacker &unpacker, uint16_t ipair, std::vector< SiStripCluster > &out) const
 
std::vector< uint32_t > const & allDetIds () const
 
SiStripDetCabling const * cabling () const
 
void clusterize (const edm::DetSetVector< SiStripDigi > &, output_t &) const
 
void clusterize (const edmNew::DetSetVector< SiStripDigi > &, output_t &) const
 
std::vector< const FedChannelConnection * > const & currentConnection (const Det &det) const
 
virtual void initialize (const edm::EventSetup &)
 
virtual ~StripClusterizerAlgorithm ()
 

Private Member Functions

void addToCandidate (State &state, const SiStripDigi &digi) const
 
void addToCandidate (State &state, uint16_t strip, uint8_t adc) const
 
void appendBadNeighbors (State &state) const
 
void applyGains (State &state) const
 
bool candidateAccepted (State const &state) const
 
bool candidateEnded (State const &state, const uint16_t &) const
 
void clearCandidate (State &state) const
 
template<class T >
void clusterizeDetUnit_ (const T &, output_t::TSFastFiller &) const
 
template<class T >
void endCandidate (State &state, T &) const
 
uint16_t firstStrip (State const &state) const
 
 ThreeThresholdAlgorithm (float, float, float, unsigned, unsigned, unsigned, std::string qualityLabel, bool removeApvShots, float minGoodCharge)
 

Private Attributes

float ChannelThreshold
 
float ClusterThresholdSquared
 
uint8_t MaxAdjacentBad
 
uint8_t MaxSequentialBad
 
uint8_t MaxSequentialHoles
 
float minGoodCharge
 
bool RemoveApvShots
 
float SeedThreshold
 

Friends

class StripClusterizerAlgorithmFactory
 

Additional Inherited Members

- Static Public Attributes inherited from StripClusterizerAlgorithm
static unsigned short invalidI = std::numeric_limits<unsigned short>::max()
 
- Protected Member Functions inherited from StripClusterizerAlgorithm
Det findDetId (const uint32_t) const
 
bool isModuleBad (const uint32_t &id) const
 
bool isModuleUsable (const uint32_t &id) const
 
 StripClusterizerAlgorithm ()
 
- Protected Attributes inherited from StripClusterizerAlgorithm
std::string qualityLabel
 

Detailed Description

Definition at line 6 of file ThreeThresholdAlgorithm.h.

Member Typedef Documentation

Definition at line 11 of file ThreeThresholdAlgorithm.h.

Definition at line 10 of file ThreeThresholdAlgorithm.h.

Constructor & Destructor Documentation

ThreeThresholdAlgorithm::ThreeThresholdAlgorithm ( float  chan,
float  seed,
float  cluster,
unsigned  holes,
unsigned  bad,
unsigned  adj,
std::string  qualityLabel,
bool  removeApvShots,
float  minGoodCharge 
)
private

Definition at line 10 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::qualityLabel.

Referenced by stripByStripEnd().

21  ClusterThresholdSquared(cluster * cluster),
22  MaxSequentialHoles(holes),
23  MaxSequentialBad(bad),
24  MaxAdjacentBad(adj),
25  RemoveApvShots(removeApvShots),
27  qualityLabel = (qL);
28 }
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi...

Member Function Documentation

void ThreeThresholdAlgorithm::addFed ( State state,
sistrip::FEDZSChannelUnpacker unpacker,
uint16_t  ipair,
std::vector< SiStripCluster > &  out 
) const
inline

Definition at line 21 of file ThreeThresholdAlgorithm.h.

References sistrip::FEDZSChannelUnpacker::adc(), StripClusterizerAlgorithm::addFed(), sistrip::FEDZSChannelUnpacker::hasData(), MillePedeFileConverter_cfg::out, sistrip::FEDZSChannelUnpacker::sampleNumber(), and stripByStripAdd().

24  {
25  while (unpacker.hasData()) {
26  stripByStripAdd(state, unpacker.sampleNumber() + ipair * 256, unpacker.adc(), out);
27  unpacker++;
28  }
29  }
void stripByStripAdd(State &state, uint16_t strip, uint8_t adc, std::vector< SiStripCluster > &out) const override
void ThreeThresholdAlgorithm::addFed ( State state,
sistrip::FEDZSChannelUnpacker unpacker,
uint16_t  ipair,
output_t::TSFastFiller out 
) const
inlineoverridevirtual

Reimplemented from StripClusterizerAlgorithm.

Definition at line 32 of file ThreeThresholdAlgorithm.h.

References sistrip::FEDZSChannelUnpacker::adc(), sistrip::FEDZSChannelUnpacker::hasData(), MillePedeFileConverter_cfg::out, sistrip::FEDZSChannelUnpacker::sampleNumber(), and stripByStripAdd().

35  {
36  while (unpacker.hasData()) {
37  stripByStripAdd(state, unpacker.sampleNumber() + ipair * 256, unpacker.adc(), out);
38  unpacker++;
39  }
40  }
void stripByStripAdd(State &state, uint16_t strip, uint8_t adc, std::vector< SiStripCluster > &out) const override
void ThreeThresholdAlgorithm::addToCandidate ( State state,
const SiStripDigi digi 
) const
inlineprivate

Definition at line 77 of file ThreeThresholdAlgorithm.h.

References ecalMGPA::adc(), SiStripDigi::adc(), addToCandidate(), appendBadNeighbors(), applyGains(), SiStripDigi::strip(), and digitizers_cfi::strip.

Referenced by addToCandidate(), clusterizeDetUnit_(), and stripByStripAdd().

77 { addToCandidate(state, digi.strip(), digi.adc()); }
const uint16_t & strip() const
Definition: SiStripDigi.h:33
void addToCandidate(State &state, const SiStripDigi &digi) const
const uint16_t & adc() const
Definition: SiStripDigi.h:34
void ThreeThresholdAlgorithm::addToCandidate ( State state,
uint16_t  strip,
uint8_t  adc 
) const
inlineprivate

Definition at line 69 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::State::ADCs, StripClusterizerAlgorithm::Det::bad(), StripClusterizerAlgorithm::State::candidateLacksSeed, ChannelThreshold, StripClusterizerAlgorithm::State::det(), StripClusterizerAlgorithm::State::lastStrip, StripClusterizerAlgorithm::Det::noise(), DigiDM_cff::Noise, StripClusterizerAlgorithm::State::noiseSquared, and SeedThreshold.

69  {
70  float Noise = state.det().noise(strip);
71  if (adc < static_cast<uint8_t>(Noise * ChannelThreshold) || state.det().bad(strip))
72  return;
73 
74  if (state.candidateLacksSeed)
75  state.candidateLacksSeed = adc < static_cast<uint8_t>(Noise * SeedThreshold);
76  if (state.ADCs.empty())
77  state.lastStrip = strip - 1; // begin candidate
78  while (++state.lastStrip < strip)
79  state.ADCs.push_back(0); // pad holes
80 
81  state.ADCs.push_back(adc);
82  state.noiseSquared += Noise * Noise;
83 }
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
void ThreeThresholdAlgorithm::appendBadNeighbors ( State state) const
inlineprivate

Definition at line 115 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::State::ADCs, StripClusterizerAlgorithm::Det::bad(), StripClusterizerAlgorithm::State::det(), firstStrip(), StripClusterizerAlgorithm::State::lastStrip, SiStripPI::max, and MaxAdjacentBad.

Referenced by addToCandidate(), and endCandidate().

115  {
116  uint8_t max = MaxAdjacentBad;
117  while (0 < max--) {
118  if (state.det().bad(firstStrip(state) - 1)) {
119  state.ADCs.insert(state.ADCs.begin(), 0);
120  }
121  if (state.det().bad(state.lastStrip + 1)) {
122  state.ADCs.push_back(0);
123  state.lastStrip++;
124  }
125  }
126 }
uint16_t firstStrip(State const &state) const
void ThreeThresholdAlgorithm::applyGains ( State state) const
inlineprivate

Definition at line 102 of file ThreeThresholdAlgorithm.cc.

References ecalMGPA::adc(), StripClusterizerAlgorithm::State::ADCs, ALCARECOTkAlJpsiMuMu_cff::charge, StripClusterizerAlgorithm::State::det(), firstStrip(), StripClusterizerAlgorithm::Det::gain(), createfilelist::int, and digitizers_cfi::strip.

Referenced by addToCandidate(), and endCandidate().

102  {
103  uint16_t strip = firstStrip(state);
104  for (auto& adc : state.ADCs) {
105 #ifdef EDM_ML_DEBUG
106  // if(adc > 255) throw InvalidChargeException( SiStripDigi(strip,adc) );
107 #endif
108  // if(adc > 253) continue; //saturated, do not scale
109  auto charge = int(float(adc) / state.det().gain(strip++) + 0.5f); //adding 0.5 turns truncation into rounding
110  if (adc < 254)
111  adc = (charge > 1022 ? 255 : (charge > 253 ? 254 : charge));
112  }
113 }
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
uint16_t firstStrip(State const &state) const
bool ThreeThresholdAlgorithm::candidateAccepted ( State const &  state) const
inlineprivate

Definition at line 96 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::State::ADCs, StripClusterizerAlgorithm::State::candidateLacksSeed, ClusterThresholdSquared, createfilelist::int, StripClusterizerAlgorithm::State::noiseSquared, and funct::pow().

Referenced by endCandidate(), and firstStrip().

96  {
97  return (!state.candidateLacksSeed &&
98  state.noiseSquared * ClusterThresholdSquared <=
99  std::pow(float(std::accumulate(state.ADCs.begin(), state.ADCs.end(), int(0))), 2.f));
100 }
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
bool ThreeThresholdAlgorithm::candidateEnded ( State const &  state,
const uint16_t &  testStrip 
) const
inlineprivate

Definition at line 59 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::State::ADCs, StripClusterizerAlgorithm::Det::allBadBetween(), StripClusterizerAlgorithm::State::det(), StripClusterizerAlgorithm::State::lastStrip, MaxSequentialBad, and MaxSequentialHoles.

Referenced by clusterizeDetUnit_(), firstStrip(), and stripByStripAdd().

59  {
60  uint16_t holes = testStrip - state.lastStrip - 1;
61  return (((!state.ADCs.empty()) & // a candidate exists, and
62  (holes > MaxSequentialHoles) // too many holes if not all are bad strips, and
63  ) &&
64  (holes > MaxSequentialBad || // (too many bad strips anyway, or
65  !state.det().allBadBetween(state.lastStrip, testStrip) // not all holes are bad strips)
66  ));
67 }
void ThreeThresholdAlgorithm::clearCandidate ( State state) const
inlineprivate

Definition at line 72 of file ThreeThresholdAlgorithm.h.

References StripClusterizerAlgorithm::State::ADCs, StripClusterizerAlgorithm::State::candidateLacksSeed, and StripClusterizerAlgorithm::State::noiseSquared.

Referenced by endCandidate().

72  {
73  state.candidateLacksSeed = true;
74  state.noiseSquared = 0;
75  state.ADCs.clear();
76  }
void ThreeThresholdAlgorithm::clusterizeDetUnit ( const edm::DetSet< SiStripDigi > &  digis,
output_t::TSFastFiller output 
) const
overridevirtual

Implements StripClusterizerAlgorithm.

Definition at line 128 of file ThreeThresholdAlgorithm.cc.

References clusterizeDetUnit_().

129  {
130  clusterizeDetUnit_(digis, output);
131 }
void clusterizeDetUnit_(const T &, output_t::TSFastFiller &) const
void ThreeThresholdAlgorithm::clusterizeDetUnit ( const edmNew::DetSet< SiStripDigi > &  digis,
output_t::TSFastFiller output 
) const
overridevirtual

Implements StripClusterizerAlgorithm.

Definition at line 132 of file ThreeThresholdAlgorithm.cc.

References clusterizeDetUnit_().

133  {
134  clusterizeDetUnit_(digis, output);
135 }
void clusterizeDetUnit_(const T &, output_t::TSFastFiller &) const
template<class digiDetSet >
void ThreeThresholdAlgorithm::clusterizeDetUnit_ ( const digiDetSet &  digis,
output_t::TSFastFiller output 
) const
inline

Definition at line 31 of file ThreeThresholdAlgorithm.cc.

References addToCandidate(), candidateEnded(), SiStripApvShotCleaner::clean(), end, endCandidate(), StripClusterizerAlgorithm::findDetId(), StripClusterizerAlgorithm::isModuleBad(), StripClusterizerAlgorithm::isModuleUsable(), and RemoveApvShots.

31  {
32  if (isModuleBad(digis.detId()))
33  return;
34 
35  auto const& det = findDetId(digis.detId());
36  if (!det.valid())
37  return;
38 
39 #ifdef EDM_ML_DEBUG
40  if (!isModuleUsable(digis.detId()))
41  edm::LogWarning("ThreeThresholdAlgorithm") << " id " << digis.detId() << " not usable???" << std::endl;
42 #endif
43 
44  typename digiDetSet::const_iterator scan(digis.begin()), end(digis.end());
45 
46  SiStripApvShotCleaner ApvCleaner;
47  if (RemoveApvShots) {
48  ApvCleaner.clean(digis, scan, end);
49  }
50 
51  State state(det);
52  while (scan != end) {
53  while (scan != end && !candidateEnded(state, scan->strip()))
54  addToCandidate(state, *scan++);
55  endCandidate(state, output);
56  }
57 }
bool isModuleBad(const uint32_t &id) const
void endCandidate(State &state, T &) const
#define end
Definition: vmac.h:39
bool candidateEnded(State const &state, const uint16_t &) const
void addToCandidate(State &state, const SiStripDigi &digi) const
bool isModuleUsable(const uint32_t &id) const
Det findDetId(const uint32_t) const
bool clean(const edmNew::DetSet< SiStripDigi > &in, edmNew::DetSet< SiStripDigi >::const_iterator &scan, edmNew::DetSet< SiStripDigi >::const_iterator &end)
template<class T >
void ThreeThresholdAlgorithm::clusterizeDetUnit_ ( const T ,
output_t::TSFastFiller  
) const
private
template<class T >
void ThreeThresholdAlgorithm::endCandidate ( State state,
T out 
) const
inlineprivate

Definition at line 86 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::State::ADCs, appendBadNeighbors(), applyGains(), candidateAccepted(), siStripClusterTools::chargePerCM(), clearCandidate(), StripClusterizerAlgorithm::State::det(), StripClusterizerAlgorithm::Det::detId, firstStrip(), and minGoodCharge.

Referenced by clusterizeDetUnit_(), firstStrip(), stripByStripAdd(), and stripByStripEnd().

86  {
87  if (candidateAccepted(state)) {
88  applyGains(state);
89  appendBadNeighbors(state);
90  if (siStripClusterTools::chargePerCM(state.det().detId, state.ADCs.begin(), state.ADCs.end()) > minGoodCharge)
91  out.push_back(SiStripCluster(firstStrip(state), state.ADCs.begin(), state.ADCs.end()));
92  }
93  clearCandidate(state);
94 }
float chargePerCM(DetId detid, Iter a, Iter b)
bool candidateAccepted(State const &state) const
void clearCandidate(State &state) const
void appendBadNeighbors(State &state) const
void applyGains(State &state) const
uint16_t firstStrip(State const &state) const
uint16_t ThreeThresholdAlgorithm::firstStrip ( State const &  state) const
inlineprivate

Definition at line 65 of file ThreeThresholdAlgorithm.h.

References StripClusterizerAlgorithm::State::ADCs, candidateAccepted(), candidateEnded(), endCandidate(), and StripClusterizerAlgorithm::State::lastStrip.

Referenced by appendBadNeighbors(), applyGains(), and endCandidate().

65 { return state.lastStrip - state.ADCs.size() + 1; }
void ThreeThresholdAlgorithm::stripByStripAdd ( State state,
uint16_t  strip,
uint8_t  adc,
std::vector< SiStripCluster > &  out 
) const
overridevirtual

Reimplemented from StripClusterizerAlgorithm.

Definition at line 139 of file ThreeThresholdAlgorithm.cc.

References addToCandidate(), candidateEnded(), and endCandidate().

Referenced by addFed().

142  {
143  if (candidateEnded(state, strip))
144  endCandidate(state, out);
146 }
void endCandidate(State &state, T &) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
A Digi for the silicon strip detector, containing both strip and adc information, and suitable for st...
Definition: SiStripDigi.h:12
bool candidateEnded(State const &state, const uint16_t &) const
void addToCandidate(State &state, const SiStripDigi &digi) const
void ThreeThresholdAlgorithm::stripByStripAdd ( State state,
uint16_t  strip,
uint8_t  adc,
output_t::TSFastFiller out 
) const
inlineoverridevirtual

Reimplemented from StripClusterizerAlgorithm.

Definition at line 42 of file ThreeThresholdAlgorithm.h.

References addToCandidate(), candidateEnded(), and endCandidate().

42  {
43  if (candidateEnded(state, strip))
44  endCandidate(state, out);
45  addToCandidate(state, strip, adc);
46  }
void endCandidate(State &state, T &) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
bool candidateEnded(State const &state, const uint16_t &) const
void addToCandidate(State &state, const SiStripDigi &digi) const
StripClusterizerAlgorithm::Det ThreeThresholdAlgorithm::stripByStripBegin ( uint32_t  id) const
overridevirtual

Implements StripClusterizerAlgorithm.

Definition at line 137 of file ThreeThresholdAlgorithm.cc.

References StripClusterizerAlgorithm::findDetId().

137 { return findDetId(id); }
Det findDetId(const uint32_t) const
void ThreeThresholdAlgorithm::stripByStripEnd ( State state,
std::vector< SiStripCluster > &  out 
) const
overridevirtual

Reimplemented from StripClusterizerAlgorithm.

Definition at line 148 of file ThreeThresholdAlgorithm.cc.

References endCandidate().

148  {
149  endCandidate(state, out);
150 }
void endCandidate(State &state, T &) const
void ThreeThresholdAlgorithm::stripByStripEnd ( State state,
output_t::TSFastFiller out 
) const
inlineoverridevirtual

Friends And Related Function Documentation

friend class StripClusterizerAlgorithmFactory
friend

Definition at line 7 of file ThreeThresholdAlgorithm.h.

Member Data Documentation

float ThreeThresholdAlgorithm::ChannelThreshold
private

Definition at line 82 of file ThreeThresholdAlgorithm.h.

Referenced by addToCandidate().

float ThreeThresholdAlgorithm::ClusterThresholdSquared
private

Definition at line 82 of file ThreeThresholdAlgorithm.h.

Referenced by candidateAccepted().

uint8_t ThreeThresholdAlgorithm::MaxAdjacentBad
private

Definition at line 83 of file ThreeThresholdAlgorithm.h.

Referenced by appendBadNeighbors().

uint8_t ThreeThresholdAlgorithm::MaxSequentialBad
private

Definition at line 83 of file ThreeThresholdAlgorithm.h.

Referenced by candidateEnded().

uint8_t ThreeThresholdAlgorithm::MaxSequentialHoles
private

Definition at line 83 of file ThreeThresholdAlgorithm.h.

Referenced by candidateEnded().

float ThreeThresholdAlgorithm::minGoodCharge
private

Definition at line 85 of file ThreeThresholdAlgorithm.h.

Referenced by endCandidate(), and stripByStripEnd().

bool ThreeThresholdAlgorithm::RemoveApvShots
private

Definition at line 84 of file ThreeThresholdAlgorithm.h.

Referenced by clusterizeDetUnit_().

float ThreeThresholdAlgorithm::SeedThreshold
private

Definition at line 82 of file ThreeThresholdAlgorithm.h.

Referenced by addToCandidate().