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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#include <memory>
#include <iostream>
#include <TTree.h>
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "CommonTools/UtilAlgos/interface/TFileService.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
#include "DataFormats/FEDRawData/interface/FEDTrailer.h"
#include "DataFormats/GEMDigi/interface/GEMDigiCollection.h"
using namespace std;
class GEMPackingTester : public edm::one::EDAnalyzer<edm::one::SharedResources> {
public:
explicit GEMPackingTester(const edm::ParameterSet&);
~GEMPackingTester() override;
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
private:
void beginJob() override;
void analyze(const edm::Event&, const edm::EventSetup&) override;
void endJob() override;
edm::EDGetTokenT<FEDRawDataCollection> fedToken_;
edm::EDGetTokenT<GEMDigiCollection> gemDigiToken_;
edm::EDGetTokenT<GEMDigiCollection> gemSimDigiToken_;
bool readMultiBX_;
TTree* tree_;
int b_ge0, b_ge1, b_ge2;
};
GEMPackingTester::GEMPackingTester(const edm::ParameterSet& iConfig)
: fedToken_(consumes<FEDRawDataCollection>(iConfig.getParameter<edm::InputTag>("fed"))),
gemDigiToken_(consumes<GEMDigiCollection>(iConfig.getParameter<edm::InputTag>("gemDigi"))),
gemSimDigiToken_(consumes<GEMDigiCollection>(iConfig.getParameter<edm::InputTag>("gemSimDigi"))),
readMultiBX_(iConfig.getParameter<bool>("readMultiBX")) {
usesResource("TFileService");
edm::Service<TFileService> fs;
tree_ = fs->make<TTree>("fed", "fed");
tree_->Branch("ge0", &b_ge0, "ge0/I");
tree_->Branch("ge1", &b_ge1, "ge1/I");
tree_->Branch("ge2", &b_ge2, "ge2/I");
}
GEMPackingTester::~GEMPackingTester() {}
void GEMPackingTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
using namespace edm;
b_ge0 = 0;
b_ge1 = 0;
b_ge2 = 0;
auto const& fed_buffers = iEvent.get(fedToken_);
for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) {
const FEDRawData& fedData = fed_buffers.FEDData(fedId);
if (fedId == 1473 or fedId == 1474)
b_ge0 += fedData.size();
if (fedId == 1467 or fedId == 1468)
b_ge1 += fedData.size();
if (fedId == 1469 or fedId == 1470)
b_ge2 += fedData.size();
}
auto const& gemDigis = iEvent.get(gemDigiToken_);
auto const& gemSimDigis = iEvent.get(gemSimDigiToken_);
for (auto const& simDigi : gemSimDigis) {
const GEMDetId& gemId = simDigi.first;
const GEMDigiCollection::Range& sim = simDigi.second;
const GEMDigiCollection::Range& packed = gemDigis.get(gemId);
for (auto digi = sim.first; digi != sim.second; ++digi) {
if (!readMultiBX_ && digi->bx() != 0)
continue;
bool foundDigi = false;
for (auto unpackeddigi = packed.first; unpackeddigi != packed.second; ++unpackeddigi) {
if ((digi->strip() == unpackeddigi->strip()) && (digi->bx() == unpackeddigi->bx()))
foundDigi = true;
}
if (!foundDigi) {
edm::LogInfo("GEMPackingTester") << "simMuonGEMDigi NOT found " << gemId << " " << digi->strip() << " "
<< digi->bx();
for (auto unpackeddigi = packed.first; unpackeddigi != packed.second; ++unpackeddigi) {
edm::LogInfo("GEMPackingTester") << "rec " << unpackeddigi->strip() << " " << unpackeddigi->bx();
}
}
}
}
tree_->Fill();
}
void GEMPackingTester::beginJob() {}
void GEMPackingTester::endJob() {}
void GEMPackingTester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("fed", edm::InputTag("rawDataCollector"));
desc.add<edm::InputTag>("gemDigi", edm::InputTag("muonGEMDigis"));
desc.add<edm::InputTag>("gemSimDigi", edm::InputTag("simMuonGEMDigis"));
desc.add<bool>("readMultiBX", false);
descriptions.add("GEMPackingTester", desc);
}
DEFINE_FWK_MODULE(GEMPackingTester);
|