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
|
#include "EventFilter/ESRawToDigi/interface/ESRawToDigi.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "DataFormats/FEDRawData/interface/FEDRawData.h"
#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
#include "DataFormats/EcalRawData/interface/ESDCCHeaderBlock.h"
#include "DataFormats/EcalRawData/interface/ESKCHIPBlock.h"
#include <iostream>
ESRawToDigi::ESRawToDigi(edm::ParameterSet const& ps) {
edm::InputTag sourceTag = ps.getParameter<edm::InputTag>("sourceTag");
ESdigiCollection_ = ps.getParameter<std::string>("ESdigiCollection");
regional_ = ps.getUntrackedParameter<bool>("DoRegional", false);
edm::InputTag fedsListLabel =
ps.getUntrackedParameter<edm::InputTag>("ESFedsListLabel", edm::InputTag(":esfedslist"));
debug_ = ps.getUntrackedParameter<bool>("debugMode", false);
ESUnpacker_ = new ESUnpacker(ps);
produces<ESRawDataCollection>();
produces<ESLocalRawDataCollection>();
produces<ESDigiCollection>();
dataToken_ = consumes<FEDRawDataCollection>(sourceTag);
if (regional_) {
fedsToken_ = consumes<ESListOfFEDS>(fedsListLabel);
}
}
ESRawToDigi::~ESRawToDigi() { delete ESUnpacker_; }
void ESRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("sourceTag", edm::InputTag("rawDataCollector"));
desc.addUntracked<bool>("debugMode", false);
desc.add<std::string>("InstanceES", "");
desc.add<edm::FileInPath>("LookupTable", edm::FileInPath("EventFilter/ESDigiToRaw/data/ES_lookup_table.dat"));
desc.add<std::string>("ESdigiCollection", "");
descriptions.add("esRawToDigi", desc);
}
void ESRawToDigi::produce(edm::Event& e, const edm::EventSetup& es) {
// Input
edm::Handle<FEDRawDataCollection> rawdata;
e.getByToken(dataToken_, rawdata);
if (!rawdata.isValid()) {
LogDebug("") << "ESRawToDigi : Error! can't get rawdata!" << std::endl;
}
std::vector<int> esFeds_to_unpack;
if (regional_) {
edm::Handle<ESListOfFEDS> fedslist;
e.getByToken(fedsToken_, fedslist);
esFeds_to_unpack = fedslist->GetList();
}
// Output
auto productDCC = std::make_unique<ESRawDataCollection>();
auto productKCHIP = std::make_unique<ESLocalRawDataCollection>();
auto productDigis = std::make_unique<ESDigiCollection>();
ESDigiCollection digis;
if (regional_) {
for (unsigned int i = 0; i < esFeds_to_unpack.size(); ++i) {
const FEDRawData& fedRawData = rawdata->FEDData(esFeds_to_unpack[i]);
ESUnpacker_->interpretRawData(esFeds_to_unpack[i], fedRawData, *productDCC, *productKCHIP, *productDigis);
if (debug_)
std::cout << "FED : " << esFeds_to_unpack[i] << " Data size : " << fedRawData.size() << " (Bytes)" << std::endl;
}
} else {
for (int fedId = FEDNumbering::MINPreShowerFEDID; fedId <= FEDNumbering::MAXPreShowerFEDID; ++fedId) {
const FEDRawData& fedRawData = rawdata->FEDData(fedId);
ESUnpacker_->interpretRawData(fedId, fedRawData, *productDCC, *productKCHIP, *productDigis);
if (debug_)
std::cout << "FED : " << fedId << " Data size : " << fedRawData.size() << " (Bytes)" << std::endl;
}
}
e.put(std::move(productDCC));
e.put(std::move(productKCHIP));
e.put(std::move(productDigis), ESdigiCollection_);
}
|