Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:26:27

0001 #ifndef RecoLocalTracker_SiStripClusterizer_ThreeThresholdAlgorithm_h
0002 #define RecoLocalTracker_SiStripClusterizer_ThreeThresholdAlgorithm_h
0003 #include "RecoLocalTracker/SiStripClusterizer/interface/StripClusterizerAlgorithm.h"
0004 #include "RecoLocalTracker/SiStripClusterizer/interface/SiStripApvShotCleaner.h"
0005 
0006 class ThreeThresholdAlgorithm final : public StripClusterizerAlgorithm {
0007   friend class StripClusterizerAlgorithmFactory;
0008 
0009 public:
0010   using State = StripClusterizerAlgorithm::State;
0011   using Det = StripClusterizerAlgorithm::Det;
0012   void clusterizeDetUnit(const edm::DetSet<SiStripDigi>&, output_t::TSFastFiller&) const override;
0013   void clusterizeDetUnit(const edmNew::DetSet<SiStripDigi>&, output_t::TSFastFiller&) const override;
0014 
0015   // LazyGetter interface
0016   void stripByStripAdd(State& state, uint16_t strip, uint8_t adc, std::vector<SiStripCluster>& out) const override;
0017   void stripByStripEnd(State& state, std::vector<SiStripCluster>& out) const override;
0018 
0019   void stripByStripAdd(State& state, uint16_t strip, uint8_t adc, output_t::TSFastFiller& out) const override {
0020     if (candidateEnded(state, strip))
0021       endCandidate(state, out);
0022     addToCandidate(state, strip, adc);
0023   }
0024 
0025   void stripByStripEnd(State& state, output_t::TSFastFiller& out) const override { endCandidate(state, out); }
0026 
0027 private:
0028   template <class T>
0029   void clusterizeDetUnit_(const T&, output_t::TSFastFiller&) const;
0030 
0031   ThreeThresholdAlgorithm(const edm::ESGetToken<SiStripClusterizerConditions, SiStripClusterizerConditionsRcd>&,
0032                           float,
0033                           float,
0034                           float,
0035                           unsigned,
0036                           unsigned,
0037                           unsigned,
0038                           unsigned,
0039                           bool removeApvShots,
0040                           float minGoodCharge);
0041 
0042   //constant methods with state information
0043   uint16_t firstStrip(State const& state) const { return state.lastStrip - state.ADCs.size() + 1; }
0044   bool candidateEnded(State const& state, const uint16_t&) const;
0045   bool candidateAccepted(State const& state) const;
0046 
0047   //state modification methods
0048   template <class T>
0049   void endCandidate(State& state, T&) const;
0050   void clearCandidate(State& state) const {
0051     state.candidateLacksSeed = true;
0052     state.noiseSquared = 0;
0053     state.ADCs.clear();
0054   }
0055   void addToCandidate(State& state, const SiStripDigi& digi) const { addToCandidate(state, digi.strip(), digi.adc()); }
0056   void addToCandidate(State& state, uint16_t strip, uint8_t adc) const;
0057   void appendBadNeighbors(State& state) const;
0058   void applyGains(State& state) const;
0059 
0060   float ChannelThreshold, SeedThreshold, ClusterThresholdSquared;
0061   uint8_t MaxSequentialHoles, MaxSequentialBad, MaxAdjacentBad;
0062   unsigned MaxClusterSize;
0063   bool RemoveApvShots;
0064   float minGoodCharge;
0065 };
0066 
0067 #endif