File indexing completed on 2025-01-12 23:42:06
0001 #ifndef RecoLocalTracker_SiStripZeroSuppression_SiStripZeroSuppression_h
0002 #define RecoLocalTracker_SiStripZeroSuppression_SiStripZeroSuppression_h
0003
0004 #include "FWCore/Framework/interface/stream/EDProducer.h"
0005 #include "FWCore/Framework/interface/Frameworkfwd.h"
0006 #include "FWCore/Framework/interface/Frameworkfwd.h"
0007 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009 #include "FWCore/Utilities/interface/InputTag.h"
0010 #include "DataFormats/Common/interface/DetSet.h"
0011 #include "DataFormats/Common/interface/DetSetVector.h"
0012 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripRawProcessingAlgorithms.h"
0013 #include "DataFormats/SiStripDigi/interface/SiStripProcessedRawDigi.h"
0014
0015 class SiStripDigi;
0016 class SiStripRawDigi;
0017
0018 class SiStripZeroSuppression : public edm::stream::EDProducer<> {
0019 public:
0020 explicit SiStripZeroSuppression(const edm::ParameterSet&);
0021 void produce(edm::Event&, const edm::EventSetup&) override;
0022
0023 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0024
0025 private:
0026 enum class RawType { Unknown, VirginRaw, ProcessedRaw, ScopeMode };
0027
0028 void clearOutputs();
0029 void putOutputs(edm::Event& evt, const std::string& tagName);
0030
0031 void processRaw(const edm::DetSetVector<SiStripRawDigi>& input, RawType inType);
0032 void processHybrid(const edm::DetSetVector<SiStripDigi>& input);
0033 void storeExtraOutput(uint32_t, int16_t);
0034 edm::DetSet<SiStripRawDigi> formatRawDigis(const edm::DetSet<SiStripRawDigi>& rawDigis);
0035 edm::DetSet<SiStripRawDigi> formatRawDigis(uint32_t detId, const std::vector<int16_t>& rawDigis);
0036 using medians_t = std::vector<std::pair<short, float>>;
0037 void storeCMN(uint32_t, const medians_t&);
0038 void storeBaseline(uint32_t, const medians_t&);
0039 void storeBaselinePoints(uint32_t);
0040
0041 std::unique_ptr<SiStripRawProcessingAlgorithms> algorithms;
0042
0043 const bool produceRawDigis;
0044 const bool storeCM;
0045 const bool fixCM;
0046 const bool produceCalculatedBaseline;
0047 const bool produceBaselinePoints;
0048 const bool storeInZScollBadAPV;
0049 const bool produceHybridFormat;
0050
0051 using rawtoken_t = edm::EDGetTokenT<edm::DetSetVector<SiStripRawDigi>>;
0052 using zstoken_t = edm::EDGetTokenT<edm::DetSetVector<SiStripDigi>>;
0053 std::vector<std::tuple<std::string, RawType, rawtoken_t>> rawInputs;
0054 std::vector<std::tuple<std::string, zstoken_t>> hybridInputs;
0055
0056 std::vector<edm::DetSet<SiStripDigi>> output_base;
0057 std::vector<edm::DetSet<SiStripRawDigi>> output_base_raw;
0058 std::vector<edm::DetSet<SiStripProcessedRawDigi>> output_apvcm;
0059 std::vector<edm::DetSet<SiStripProcessedRawDigi>> output_baseline;
0060 std::vector<edm::DetSet<SiStripDigi>> output_baseline_points;
0061 };
0062 #endif