File indexing completed on 2024-11-19 23:20:17
0001 #ifndef RecoLocalTracker_SiStripZeroSuppression_SiStripRawProcessingAlgorithms_h
0002 #define RecoLocalTracker_SiStripZeroSuppression_SiStripRawProcessingAlgorithms_h
0003
0004 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripPedestalsSubtractor.h"
0005 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripCommonModeNoiseSubtractor.h"
0006 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h"
0007 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripAPVRestorer.h"
0008
0009 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0010 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
0011
0012 #include "DataFormats/Common/interface/DetSet.h"
0013 #include "DataFormats/Common/interface/DetSetVector.h"
0014
0015 class SiStripRawProcessingAlgorithms {
0016 friend class SiStripRawProcessingFactory;
0017
0018 public:
0019 using digivector_t = SiStripAPVRestorer::digivector_t;
0020
0021 void initialize(const edm::EventSetup&);
0022 void initialize(const edm::EventSetup&, const edm::Event&);
0023
0024 uint16_t suppressHybridData(const uint16_t maxStrip,
0025 const edm::DetSet<SiStripDigi>& inDigis,
0026 edm::DetSet<SiStripDigi>& suppressedDigis,
0027 uint16_t firstAPV = 0);
0028
0029 uint16_t suppressVirginRawData(uint32_t detId,
0030 uint16_t firstAPV,
0031 digivector_t& procRawDigis,
0032 edm::DetSet<SiStripDigi>& output);
0033 uint16_t suppressVirginRawData(const edm::DetSet<SiStripRawDigi>& rawDigis, edm::DetSet<SiStripDigi>& output);
0034
0035 uint16_t suppressProcessedRawData(uint32_t detId,
0036 uint16_t firstAPV,
0037 digivector_t& procRawDigis,
0038 edm::DetSet<SiStripDigi>& output);
0039 uint16_t suppressProcessedRawData(const edm::DetSet<SiStripRawDigi>& rawDigis, edm::DetSet<SiStripDigi>& output);
0040
0041 uint16_t convertVirginRawToHybrid(uint32_t detId,
0042 uint16_t firstAPV,
0043 digivector_t& inDigis,
0044 edm::DetSet<SiStripDigi>& rawDigis);
0045 uint16_t convertVirginRawToHybrid(const edm::DetSet<SiStripRawDigi>& rawDigis,
0046 edm::DetSet<SiStripDigi>& suppressedDigis);
0047
0048 inline const std::vector<bool>& getAPVFlags() const { return restorer->getAPVFlags(); }
0049 inline const SiStripAPVRestorer::baselinemap_t& getBaselineMap() const { return restorer->getBaselineMap(); }
0050 inline const std::map<uint16_t, SiStripAPVRestorer::digimap_t>& getSmoothedPoints() const {
0051 return restorer->getSmoothedPoints();
0052 }
0053 inline const SiStripAPVRestorer::medians_t& getAPVsCM() const { return subtractorCMN->getAPVsCM(); }
0054
0055 const std::unique_ptr<SiStripPedestalsSubtractor> subtractorPed;
0056 const std::unique_ptr<SiStripCommonModeNoiseSubtractor> subtractorCMN;
0057 const std::unique_ptr<SiStripFedZeroSuppression> suppressor;
0058 const std::unique_ptr<SiStripAPVRestorer> restorer;
0059
0060 private:
0061 const bool doAPVRestore;
0062 const bool useCMMeanMap;
0063
0064 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken_;
0065 const TrackerGeometry* trGeo;
0066
0067 SiStripRawProcessingAlgorithms(edm::ConsumesCollector iC,
0068 std::unique_ptr<SiStripPedestalsSubtractor> ped,
0069 std::unique_ptr<SiStripCommonModeNoiseSubtractor> cmn,
0070 std::unique_ptr<SiStripFedZeroSuppression> zs,
0071 std::unique_ptr<SiStripAPVRestorer> res,
0072 bool doAPVRest,
0073 bool useCMMap);
0074 };
0075 #endif