Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:10:31

0001 //-------------------------------------------------
0002 //
0003 /**  \class DTuROSRawToDigi
0004  *
0005  *   L1 DT uROS Raw-to-Digi
0006  *
0007  *
0008  *
0009  *   C. Heidemann - RWTH Aachen
0010  *   J. Troconiz  - UAM Madrid
0011  */
0012 //
0013 //--------------------------------------------------
0014 #ifndef DTRawToDigi_DTuROSRawToDigi_h
0015 #define DTRawToDigi_DTuROSRawToDigi_h
0016 
0017 #include "FWCore/Framework/interface/ConsumesCollector.h"
0018 #include "DataFormats/Common/interface/Handle.h"
0019 #include "FWCore/Framework/interface/ESHandle.h"
0020 #include "FWCore/Utilities/interface/ESGetToken.h"
0021 #include "FWCore/Framework/interface/Event.h"
0022 #include "FWCore/Framework/interface/EventSetup.h"
0023 #include "DataFormats/DTDigi/interface/DTDigiCollection.h"
0024 #include "DataFormats/MuonDetId/interface/DTLayerId.h"
0025 #include "CondFormats/DTObjects/interface/DTReadOutMapping.h"
0026 #include "CondFormats/DataRecord/interface/DTReadOutMappingRcd.h"
0027 
0028 #include <DataFormats/FEDRawData/interface/FEDRawDataCollection.h>
0029 #include <DataFormats/FEDRawData/interface/FEDNumbering.h>
0030 #include <FWCore/Framework/interface/stream/EDProducer.h>
0031 #include <FWCore/ParameterSet/interface/ParameterSet.h>
0032 #include <FWCore/Utilities/interface/InputTag.h>
0033 
0034 #include <string>
0035 
0036 class DTReadOutMapping;
0037 class DTuROSFEDData;
0038 
0039 class DTuROSRawToDigi : public edm::stream::EDProducer<> {
0040 public:
0041   /// Constructor
0042   DTuROSRawToDigi(const edm::ParameterSet& pset);
0043 
0044   /// Destructor
0045   ~DTuROSRawToDigi() override;
0046 
0047   /// Produce digis out of raw data
0048   void produce(edm::Event& e, const edm::EventSetup& c) override;
0049 
0050   /// Generate and fill FED raw data for a full event
0051   bool fillRawData(edm::Event& e, const edm::EventSetup& c, DTDigiCollection& digis, std::vector<DTuROSFEDData>& words);
0052 
0053 private:
0054   edm::InputTag DTuROSInputTag_;
0055 
0056   bool debug_;
0057 
0058   int nfeds_;
0059 
0060   std::vector<int> feds_;
0061 
0062   unsigned char* lineFED;
0063 
0064   // Operations
0065 
0066   //process data
0067 
0068   void process(int DTuROSFED,
0069                edm::Handle<FEDRawDataCollection> data,
0070                edm::ESHandle<DTReadOutMapping> mapping,
0071                DTDigiCollection& digis,
0072                DTuROSFEDData& fwords);
0073 
0074   // utilities
0075   inline void readline(int& lines, long& dataWord) {
0076     dataWord = *((long*)lineFED);
0077     lineFED += 8;
0078     ++lines;
0079   }
0080 
0081   int theDDU(int crate, int slot, int link, bool tenDDU);
0082 
0083   int theROS(int slot, int link);
0084 
0085   int theROB(int slot, int link);
0086 
0087   edm::InputTag getDTuROSInputTag() { return DTuROSInputTag_; }
0088 
0089   edm::EDGetTokenT<FEDRawDataCollection> Raw_token;
0090   edm::ESGetToken<DTReadOutMapping, DTReadOutMappingRcd> mapping_token_;
0091 };
0092 #endif