Back to home page

Project CMSSW displayed by LXR

 
 

    


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