Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:02

0001 
0002 #ifndef EventFilter_SiStripRawToDigi_SiStripDigiToRaw_H
0003 #define EventFilter_SiStripRawToDigi_SiStripDigiToRaw_H
0004 
0005 #include "DataFormats/Common/interface/Handle.h"
0006 #include "DataFormats/Common/interface/DetSetVector.h"
0007 #include "FWCore/Framework/interface/ESHandle.h"
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Utilities/interface/Visibility.h"
0010 #include <string>
0011 
0012 #include "EventFilter/SiStripRawToDigi/interface/SiStripFEDBufferGenerator.h"
0013 #include "WarningSummary.h"
0014 #include <cstdint>
0015 
0016 class SiStripFedCabling;
0017 class FEDRawDataCollection;
0018 class SiStripDigi;
0019 class SiStripRawDigi;
0020 
0021 namespace sistrip {
0022 
0023   /**
0024      @file EventFilter/SiStripRawToDigi/interface/SiStripDigiToRaw.h
0025      @class sistrip::DigiToRaw 
0026    
0027      @brief Input: edm::DetSetVector<SiStripDigi>. 
0028      Output: FEDRawDataCollection.
0029   */
0030   class dso_hidden DigiToRaw {
0031   public:  // ----- public interface -----
0032     DigiToRaw(FEDReadoutMode mode, uint8_t packetCode, bool use_fed_key);
0033     ~DigiToRaw();
0034 
0035     //digi to raw with default headers
0036     void createFedBuffers(edm::Event&,
0037                           edm::ESHandle<SiStripFedCabling>& cabling,
0038                           edm::Handle<edm::DetSetVector<SiStripDigi> >& digis,
0039                           std::unique_ptr<FEDRawDataCollection>& buffers);
0040     void createFedBuffers(edm::Event&,
0041                           edm::ESHandle<SiStripFedCabling>& cabling,
0042                           edm::Handle<edm::DetSetVector<SiStripRawDigi> >& digis,
0043                           std::unique_ptr<FEDRawDataCollection>& buffers);
0044 
0045     //with input raw data for copying header
0046     void createFedBuffers(edm::Event&,
0047                           edm::ESHandle<SiStripFedCabling>& cabling,
0048                           edm::Handle<FEDRawDataCollection>& rawbuffers,
0049                           edm::Handle<edm::DetSetVector<SiStripDigi> >& digis,
0050                           std::unique_ptr<FEDRawDataCollection>& buffers);
0051     void createFedBuffers(edm::Event&,
0052                           edm::ESHandle<SiStripFedCabling>& cabling,
0053                           edm::Handle<FEDRawDataCollection>& rawbuffers,
0054                           edm::Handle<edm::DetSetVector<SiStripRawDigi> >& digis,
0055                           std::unique_ptr<FEDRawDataCollection>& buffers);
0056 
0057     inline void fedReadoutMode(FEDReadoutMode mode) { mode_ = mode; }
0058 
0059     void printWarningSummary() const { warnings_.printSummary(); }
0060 
0061   private:  // ----- private data members -----
0062     template <class Digi_t>
0063     void createFedBuffers_(edm::Event&,
0064                            edm::ESHandle<SiStripFedCabling>& cabling,
0065                            edm::Handle<edm::DetSetVector<Digi_t> >& digis,
0066                            std::unique_ptr<FEDRawDataCollection>& buffers,
0067                            bool zeroSuppressed);
0068 
0069     template <class Digi_t>
0070     void createFedBuffers_(edm::Event&,
0071                            edm::ESHandle<SiStripFedCabling>& cabling,
0072                            edm::Handle<FEDRawDataCollection>& rawbuffers,
0073                            edm::Handle<edm::DetSetVector<Digi_t> >& digis,
0074                            std::unique_ptr<FEDRawDataCollection>& buffers,
0075                            bool zeroSuppressed);
0076 
0077     uint16_t STRIP(const edm::DetSet<SiStripDigi>::const_iterator& it,
0078                    const edm::DetSet<SiStripDigi>::const_iterator& begin) const;
0079     uint16_t STRIP(const edm::DetSet<SiStripRawDigi>::const_iterator& it,
0080                    const edm::DetSet<SiStripRawDigi>::const_iterator& begin) const;
0081 
0082     FEDReadoutMode mode_;
0083     uint8_t packetCode_;
0084     bool useFedKey_;
0085     FEDBufferGenerator bufferGenerator_;
0086 
0087     WarningSummary warnings_;
0088   };
0089 
0090 }  // namespace sistrip
0091 
0092 #endif  // EventFilter_SiStripRawToDigi_SiStripDigiToRaw_H