1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
//-------------------------------------------------
//
/** \class DTuROSRawToDigi
*
* L1 DT uROS Raw-to-Digi
*
*
*
* C. Heidemann - RWTH Aachen
* J. Troconiz - UAM Madrid
*/
//
//--------------------------------------------------
#ifndef DTRawToDigi_DTuROSRawToDigi_h
#define DTRawToDigi_DTuROSRawToDigi_h
#include "CondFormats/DTObjects/interface/DTReadOutMapping.h"
#include "CondFormats/DataRecord/interface/DTReadOutMappingRcd.h"
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/DTDigi/interface/DTDigiCollection.h"
#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
#include "DataFormats/MuonDetId/interface/DTLayerId.h"
#include "FWCore/Framework/interface/ConsumesCollector.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/stream/EDProducer.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Utilities/interface/ESGetToken.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include <string>
class DTReadOutMapping;
class DTuROSFEDData;
class DTuROSRawToDigi : public edm::stream::EDProducer<> {
public:
/// Constructor
DTuROSRawToDigi(const edm::ParameterSet& pset);
/// Destructor
~DTuROSRawToDigi() override = default;
/// Produce digis out of raw data
void produce(edm::Event& e, const edm::EventSetup& c) override;
/// Generate and fill FED raw data for a full event
bool fillRawData(edm::Event& e, const edm::EventSetup& c, DTDigiCollection& digis, std::vector<DTuROSFEDData>& words);
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
private:
edm::InputTag DTuROSInputTag_;
bool debug_;
int nfeds_;
std::vector<int> feds_;
unsigned char* lineFED;
// Operations
//process data
void process(int DTuROSFED,
edm::Handle<FEDRawDataCollection> data,
edm::ESHandle<DTReadOutMapping> mapping,
DTDigiCollection& digis,
DTuROSFEDData& fwords);
// utilities
inline void readline(int& lines, long& dataWord) {
dataWord = *((long*)lineFED);
lineFED += 8;
++lines;
}
int theDDU(int crate, int slot, int link, bool tenDDU);
int theROS(int slot, int link);
int theROB(int slot, int link);
edm::InputTag getDTuROSInputTag() { return DTuROSInputTag_; }
edm::EDGetTokenT<FEDRawDataCollection> Raw_token;
edm::ESGetToken<DTReadOutMapping, DTReadOutMappingRcd> mapping_token_;
};
#endif
|