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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
// -*-C++-*-
#ifndef L1TCOMPARE_H
#define L1TCOMPARE_H
/*
* \file L1TCompare.h
*
* \author P. Wittich
*
* Revision 1.2 2007/06/08 08:37:42 wittich
* Add ECAL TP - RCT comparisons. Lingering problems with
* mismatches right now - still needs work.
*
*
*
*
*/
// system include files
#include <memory>
#include <unistd.h>
#include <iostream>
#include <fstream>
#include <vector>
// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
// GCT and RCT data formats
#include "DataFormats/L1GlobalCaloTrigger/interface/L1GctCollections.h"
#include "DataFormats/L1CaloTrigger/interface/L1CaloCollections.h"
#include "DataFormats/L1CaloTrigger/interface/L1CaloRegionDetId.h"
// L1Extra
#include "DataFormats/L1Trigger/interface/L1EmParticleFwd.h"
#include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h"
#include "DataFormats/L1Trigger/interface/L1EtMissParticleFwd.h"
// Ecal
#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
// DQM
#include "DQMServices/Core/interface/DQMStore.h"
#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
// Trigger Headers
//
// class declaration
//
class L1TCompare : public DQMEDAnalyzer {
public:
// Constructor
L1TCompare(const edm::ParameterSet& ps);
// Destructor
~L1TCompare() override;
protected:
// Analyze
void analyze(const edm::Event& e, const edm::EventSetup& c) override;
// BeginRun
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override;
void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override;
private:
// ----------member data ---------------------------
// ++ RCT-GCT
// - iso
MonitorElement* rctGctLeadingIsoEmEta_;
MonitorElement* rctGctLeadingIsoEmPhi_;
MonitorElement* rctGctLeadingIsoEmRank_;
// - non-iso
MonitorElement* rctGctLeadingNonIsoEmEta_;
MonitorElement* rctGctLeadingNonIsoEmPhi_;
MonitorElement* rctGctLeadingNonIsoEmRank_;
// ++ ECAL TPG - RCT
MonitorElement* ecalTpgRctLeadingEmEta_;
MonitorElement* ecalTpgRctLeadingEmEta2_;
MonitorElement* ecalTpgRctLeadingEmPhi_;
MonitorElement* ecalTpgRctLeadingEmRank_;
int nev_; // Number of events processed
std::string outputFile_; //file name for ROOT ouput
bool verbose_;
bool verbose() const { return verbose_; };
bool monitorDaemon_;
std::ofstream logFile_;
edm::EDGetTokenT<L1CaloEmCollection> rctSourceEm_token_;
edm::EDGetTokenT<L1CaloRegionCollection> rctSourceRctEmRgn_token_;
edm::InputTag rctSource_;
edm::InputTag gctSource_;
edm::InputTag ecalTpgSource_;
edm::EDGetTokenT<EcalTrigPrimDigiCollection> ecalTpgSource_token_;
//define Token(-s)
edm::EDGetTokenT<L1GctJetCandCollection> gctCenJetsToken_;
edm::EDGetTokenT<L1GctEmCandCollection> gctIsoEmCandsToken_;
edm::EDGetTokenT<L1GctEmCandCollection> gctNonIsoEmCandsToken_;
class RctObject {
public:
RctObject(int eta, int phi, int rank) : eta_(eta), phi_(phi), rank_(rank) {}
virtual ~RctObject() {}
int eta_, phi_;
int rank_;
};
typedef std::vector<L1TCompare::RctObject> RctObjectCollection;
// function for sorting the above collection based on rank.
// note it's then reverse-sorted (low to high) so you have to use
// the rbegin() and rend() and reverse_iterators.
static bool rctObjectComp(const RctObject& a, const RctObject& b) {
// for equal rank I don't know what the appropriate sorting is.
if (a.rank_ == b.rank_) {
if (a.eta_ == b.eta_) {
return a.phi_ < b.phi_;
} else {
return a.eta_ < b.eta_;
}
} else {
return a.rank_ < b.rank_;
}
}
};
#endif // L1TCOMPARE_H
|