CMS 3D CMS Logo

L1TStage2uGMT.cc
Go to the documentation of this file.
2 
3 
5  : ugmtMuonToken(consumes<l1t::MuonBxCollection>(ps.getParameter<edm::InputTag>("muonProducer"))),
6  monitorDir(ps.getUntrackedParameter<std::string>("monitorDir")),
7  emul(ps.getUntrackedParameter<bool>("emulator")),
8  verbose(ps.getUntrackedParameter<bool>("verbose")),
9  etaScale_(0.010875), // eta scale (CMS DN-2015/017)
10  phiScale_(0.010908) // phi scale (2*pi/576 HW values)
11 {
12  if (!emul) {
13  ugmtBMTFToken = consumes<l1t::RegionalMuonCandBxCollection>(ps.getParameter<edm::InputTag>("bmtfProducer"));
14  ugmtOMTFToken = consumes<l1t::RegionalMuonCandBxCollection>(ps.getParameter<edm::InputTag>("omtfProducer"));
15  ugmtEMTFToken = consumes<l1t::RegionalMuonCandBxCollection>(ps.getParameter<edm::InputTag>("emtfProducer"));
16  }
17 }
18 
20 
23  desc.add<edm::InputTag>("muonProducer")->setComment("uGMT output muons.");;
24  desc.add<edm::InputTag>("bmtfProducer")->setComment("RegionalMuonCands from BMTF.");
25  desc.add<edm::InputTag>("omtfProducer")->setComment("RegionalMuonCands from OMTF.");
26  desc.add<edm::InputTag>("emtfProducer")->setComment("RegionalMuonCands from EMTF.");
27  desc.addUntracked<std::string>("monitorDir", "")->setComment("Target directory in the DQM file. Will be created if not existing.");
28  desc.addUntracked<bool>("emulator", false)->setComment("Create histograms for muonProducer input only. xmtfProducer inputs are ignored.");
29  desc.addUntracked<bool>("verbose", false);
30  descriptions.add("l1tStage2uGMT", desc);
31 }
32 
34 
35 
37 
38  if (!emul) {
39  // BMTF Input
40  ibooker.setCurrentFolder(monitorDir + "/BMTFInput");
41 
42  ugmtBMTFBX = ibooker.book1D("ugmtBMTFBX", "uGMT BMTF Input BX", 7, -3.5, 3.5);
43  ugmtBMTFBX->setAxisTitle("BX", 1);
44 
45  ugmtBMTFnMuons = ibooker.book1D("ugmtBMTFnMuons", "uGMT BMTF Input Muon Multiplicity", 37, -0.5, 36.5);
46  ugmtBMTFnMuons->setAxisTitle("Muon Multiplicity (BX == 0)", 1);
47 
48  ugmtBMTFhwPt = ibooker.book1D("ugmtBMTFhwPt", "uGMT BMTF Input HW p_{T}", 512, -0.5, 511.5);
49  ugmtBMTFhwPt->setAxisTitle("Hardware p_{T}", 1);
50 
51  ugmtBMTFhwEta = ibooker.book1D("ugmtBMTFhwEta", "uGMT BMTF Input HW #eta", 201, -100.5, 100.5);
52  ugmtBMTFhwEta->setAxisTitle("Hardware #eta", 1);
53 
54  ugmtBMTFhwPhi = ibooker.book1D("ugmtBMTFhwPhi", "uGMT BMTF Input HW #phi", 71, -10.5, 60.5);
55  ugmtBMTFhwPhi->setAxisTitle("Hardware #phi", 1);
56 
57  ugmtBMTFglbPhi = ibooker.book1D("ugmtBMTFglbhwPhi", "uGMT BMTF Input HW #phi", 577, -1.5, 575.5);
58  ugmtBMTFglbPhi->setAxisTitle("Global Hardware #phi", 1);
59 
60  ugmtBMTFProcvshwPhi = ibooker.book2D("ugmtBMTFProcvshwPhi", "uGMT BMTF Processor vs HW #phi", 71, -10.5, 60.5, 12, 0, 12);
61  ugmtBMTFProcvshwPhi->setAxisTitle("Hardware #phi", 1);
62  ugmtBMTFProcvshwPhi->setAxisTitle("Wedge", 2);
63  for (int bin = 1; bin <= 12; ++bin) {
64  ugmtBMTFProcvshwPhi->setBinLabel(bin, std::to_string(bin), 2);
65  }
66 
67  ugmtBMTFhwSign = ibooker.book1D("ugmtBMTFhwSign", "uGMT BMTF Input HW Sign", 4, -1.5, 2.5);
68  ugmtBMTFhwSign->setAxisTitle("Hardware Sign", 1);
69 
70  ugmtBMTFhwSignValid = ibooker.book1D("ugmtBMTFhwSignValid", "uGMT BMTF Input SignValid", 2, -0.5, 1.5);
71  ugmtBMTFhwSignValid->setAxisTitle("SignValid", 1);
72 
73  ugmtBMTFhwQual = ibooker.book1D("ugmtBMTFhwQual", "uGMT BMTF Input Quality", 16, -0.5, 15.5);
74  ugmtBMTFhwQual->setAxisTitle("Quality", 1);
75 
76  ugmtBMTFlink = ibooker.book1D("ugmtBMTFlink", "uGMT BMTF Input Link", 12, 47.5, 59.5);
77  ugmtBMTFlink->setAxisTitle("Link", 1);
78 
79  ugmtBMTFMuMuDEta = ibooker.book1D("ugmtBMTFMuMuDEta", "uGMT BMTF input muons #Delta#eta between wedges", 100, -0.5, 0.5);
80  ugmtBMTFMuMuDEta->setAxisTitle("#Delta#eta", 1);
81 
82  ugmtBMTFMuMuDPhi = ibooker.book1D("ugmtBMTFMuMuDPhi", "uGMT BMTF input muons #Delta#phi between wedges", 100, -0.5, 0.5);
83  ugmtBMTFMuMuDPhi->setAxisTitle("#Delta#phi", 1);
84 
85  ugmtBMTFMuMuDR = ibooker.book1D("ugmtBMTFMuMuDR", "uGMT BMTF input muons #DeltaR between wedges", 50, 0., 0.5);
86  ugmtBMTFMuMuDR->setAxisTitle("#DeltaR", 1);
87 
88  // OMTF Input
89  ibooker.setCurrentFolder(monitorDir + "/OMTFInput");
90 
91  ugmtOMTFBX = ibooker.book1D("ugmtOMTFBX", "uGMT OMTF Input BX", 7, -3.5, 3.5);
92  ugmtOMTFBX->setAxisTitle("BX", 1);
93 
94  ugmtOMTFnMuons = ibooker.book1D("ugmtOMTFnMuons", "uGMT OMTF Input Muon Multiplicity", 37, -0.5, 36.5);
95  ugmtOMTFnMuons->setAxisTitle("Muon Multiplicity (BX == 0)", 1);
96 
97  ugmtOMTFhwPt = ibooker.book1D("ugmtOMTFhwPt", "uGMT OMTF Input HW p_{T}", 512, -0.5, 511.5);
98  ugmtOMTFhwPt->setAxisTitle("Hardware p_{T}", 1);
99 
100  ugmtOMTFhwEta = ibooker.book1D("ugmtOMTFhwEta", "uGMT OMTF Input HW #eta", 231, -115.5, 115.5);
101  ugmtOMTFhwEta->setAxisTitle("Hardware #eta", 1);
102 
103  ugmtOMTFhwPhiPos = ibooker.book1D("ugmtOMTFhwPhiPos", "uGMT OMTF Input HW #phi, Positive Side", 122, -16.5, 105.5);
104  ugmtOMTFhwPhiPos->setAxisTitle("Hardware #phi", 1);
105 
106  ugmtOMTFhwPhiNeg = ibooker.book1D("ugmtOMTFhwPhiNeg", "uGMT OMTF Input HW #phi, Negative Side", 122, -16.5, 105.5);
107  ugmtOMTFhwPhiNeg->setAxisTitle("Hardware #phi", 1);
108 
109  ugmtOMTFglbPhiPos = ibooker.book1D("ugmtOMTFglbhwPhiPos", "uGMT OMTF Input HW #phi, Positive Side", 577, -1.5, 575.5);
110  ugmtOMTFglbPhiPos->setAxisTitle("Global Hardware #phi", 1);
111 
112  ugmtOMTFglbPhiNeg = ibooker.book1D("ugmtOMTFglbhwPhiNeg", "uGMT OMTF Input HW #phi, Negative Side", 577, -1.5, 575.5);
113  ugmtOMTFglbPhiNeg->setAxisTitle("Global Hardware #phi", 1);
114 
115  ugmtOMTFProcvshwPhiPos = ibooker.book2D("ugmtOMTFProcvshwPhiPos", "uGMT OMTF Processor vs HW #phi", 122, -16.5, 105.5, 6, 0, 6);
116  ugmtOMTFProcvshwPhiPos->setAxisTitle("Hardware #phi", 1);
117  ugmtOMTFProcvshwPhiPos->setAxisTitle("Sector (Positive Side)", 2);
118 
119  ugmtOMTFProcvshwPhiNeg = ibooker.book2D("ugmtOMTFProcvshwPhiNeg", "uGMT OMTF Processor vs HW #phi", 122, -16.5, 105.5, 6, 0, 6);
120  ugmtOMTFProcvshwPhiNeg->setAxisTitle("Hardware #phi", 1);
121  ugmtOMTFProcvshwPhiNeg->setAxisTitle("Sector (Negative Side)", 2);
122 
123  for (int bin = 1; bin <= 6; ++bin) {
124  ugmtOMTFProcvshwPhiPos->setBinLabel(bin, std::to_string(bin), 2);
125  ugmtOMTFProcvshwPhiNeg->setBinLabel(bin, std::to_string(bin), 2);
126  }
127 
128  ugmtOMTFhwSign = ibooker.book1D("ugmtOMTFhwSign", "uGMT OMTF Input HW Sign", 4, -1.5, 2.5);
129  ugmtOMTFhwSign->setAxisTitle("Hardware Sign", 1);
130 
131  ugmtOMTFhwSignValid = ibooker.book1D("ugmtOMTFhwSignValid", "uGMT OMTF Input SignValid", 2, -0.5, 1.5);
132  ugmtOMTFhwSignValid->setAxisTitle("SignValid", 1);
133 
134  ugmtOMTFhwQual = ibooker.book1D("ugmtOMTFhwQual", "uGMT OMTF Input Quality", 16, -0.5, 15.5);
135  ugmtOMTFhwQual->setAxisTitle("Quality", 1);
136 
137  ugmtOMTFlink = ibooker.book1D("ugmtOMTFlink", "uGMT OMTF Input Link", 24, 41.5, 65.5);
138  ugmtOMTFlink->setAxisTitle("Link", 1);
139 
140  ugmtOMTFMuMuDEta = ibooker.book1D("ugmtOMTFMuMuDEta", "uGMT OMTF input muons #Delta#eta between sectors", 100, -0.5, 0.5);
141  ugmtOMTFMuMuDEta->setAxisTitle("#Delta#eta", 1);
142 
143  ugmtOMTFMuMuDPhi = ibooker.book1D("ugmtOMTFMuMuDPhi", "uGMT OMTF input muons #Delta#phi between sectors", 100, -0.5, 0.5);
144  ugmtOMTFMuMuDPhi->setAxisTitle("#Delta#phi", 1);
145 
146  ugmtOMTFMuMuDR = ibooker.book1D("ugmtOMTFMuMuDR", "uGMT OMTF input muons #DeltaR between sectors", 50, 0., 0.5);
147  ugmtOMTFMuMuDR->setAxisTitle("#DeltaR", 1);
148 
149  // EMTF Input
150  ibooker.setCurrentFolder(monitorDir + "/EMTFInput");
151 
152  ugmtEMTFBX = ibooker.book1D("ugmtEMTFBX", "uGMT EMTF Input BX", 7, -3.5, 3.5);
153  ugmtEMTFBX->setAxisTitle("BX", 1);
154 
155  ugmtEMTFnMuons = ibooker.book1D("ugmtEMTFnMuons", "uGMT EMTF Input Muon Multiplicity", 37, -0.5, 36.5);
156  ugmtEMTFnMuons->setAxisTitle("Muon Multiplicity (BX == 0)", 1);
157 
158  ugmtEMTFhwPt = ibooker.book1D("ugmtEMTFhwPt", "uGMT EMTF HW p_{T}", 512, -0.5, 511.5);
159  ugmtEMTFhwPt->setAxisTitle("Hardware p_{T}", 1);
160 
161  ugmtEMTFhwEta = ibooker.book1D("ugmtEMTFhwEta", "uGMT EMTF HW #eta", 461, -230.5, 230.5);
162  ugmtEMTFhwEta->setAxisTitle("Hardware #eta", 1);
163 
164  ugmtEMTFhwPhiPos = ibooker.book1D("ugmtEMTFhwPhiPos", "uGMT EMTF HW #phi, Positive Side", 146, -40.5, 105.5);
165  ugmtEMTFhwPhiPos->setAxisTitle("Hardware #phi", 1);
166 
167  ugmtEMTFhwPhiNeg = ibooker.book1D("ugmtEMTFhwPhiNeg", "uGMT EMTF HW #phi, Negative Side", 146, -40.5, 105.5);
168  ugmtEMTFhwPhiNeg->setAxisTitle("Hardware #phi", 1);
169 
170  ugmtEMTFglbPhiPos = ibooker.book1D("ugmtEMTFglbhwPhiPos", "uGMT EMTF Input Global HW #phi, Positive Side", 577, -1.5, 575.5);
171  ugmtEMTFglbPhiPos->setAxisTitle("Global Hardware #phi", 1);
172 
173  ugmtEMTFglbPhiNeg = ibooker.book1D("ugmtEMTFglbhwPhiNeg", "uGMT EMTF Input Global HW #phi, Negative Side", 577, -1.5, 575.5);
174  ugmtEMTFglbPhiNeg->setAxisTitle("Global Hardware #phi", 1);
175 
176  ugmtEMTFProcvshwPhiPos = ibooker.book2D("ugmtEMTFProcvshwPhiPos", "uGMT EMTF Processor vs HW #phi", 146, -40.5, 105.5, 6, 0, 6);
177  ugmtEMTFProcvshwPhiPos->setAxisTitle("Hardware #phi", 1);
178  ugmtEMTFProcvshwPhiPos->setAxisTitle("Sector (Positive Side)", 2);
179 
180  ugmtEMTFProcvshwPhiNeg = ibooker.book2D("ugmtEMTFProcvshwPhiNeg", "uGMT EMTF Processor vs HW #phi", 146, -40.5, 105.5, 6, 0, 6);
181  ugmtEMTFProcvshwPhiNeg->setAxisTitle("Hardware #phi", 1);
182  ugmtEMTFProcvshwPhiNeg->setAxisTitle("Sector (Negative Side)", 2);
183 
184  for (int bin = 1; bin <= 6; ++bin) {
185  ugmtEMTFProcvshwPhiPos->setBinLabel(bin, std::to_string(bin), 2);
186  ugmtEMTFProcvshwPhiNeg->setBinLabel(bin, std::to_string(bin), 2);
187  }
188 
189  ugmtEMTFhwSign = ibooker.book1D("ugmtEMTFhwSign", "uGMT EMTF HW Sign", 4, -1.5, 2.5);
190  ugmtEMTFhwSign->setAxisTitle("Hardware Sign", 1);
191 
192  ugmtEMTFhwSignValid = ibooker.book1D("ugmtEMTFhwSignValid", "uGMT EMTF SignValid", 2, -0.5, 1.5);
193  ugmtEMTFhwSignValid->setAxisTitle("SignValid", 1);
194 
195  ugmtEMTFhwQual = ibooker.book1D("ugmtEMTFhwQual", "uGMT EMTF Quality", 16, -0.5, 15.5);
196  ugmtEMTFhwQual->setAxisTitle("Quality", 1);
197 
198  ugmtEMTFlink = ibooker.book1D("ugmtEMTFlink", "uGMT EMTF Link", 36, 35.5, 71.5);
199  ugmtEMTFlink->setAxisTitle("Link", 1);
200 
201  ugmtEMTFMuMuDEta = ibooker.book1D("ugmtEMTFMuMuDEta", "uGMT EMTF input muons #Delta#eta between sectors", 100, -0.5, 0.5);
202  ugmtEMTFMuMuDEta->setAxisTitle("#Delta#eta", 1);
203 
204  ugmtEMTFMuMuDPhi = ibooker.book1D("ugmtEMTFMuMuDPhi", "uGMT EMTF input muons #Delta#phi between sectors", 100, -0.5, 0.5);
205  ugmtEMTFMuMuDPhi->setAxisTitle("#Delta#phi", 1);
206 
207  ugmtEMTFMuMuDR = ibooker.book1D("ugmtEMTFMuMuDR", "uGMT EMTF input muons #DeltaR between sectors", 50, 0., 0.5);
208  ugmtEMTFMuMuDR->setAxisTitle("#DeltaR", 1);
209 
210  // inter-TF muon correlations
211  ibooker.setCurrentFolder(monitorDir + "/muon_correlations");
212 
213  ugmtBOMTFposMuMuDEta = ibooker.book1D("ugmtBOMTFposMuMuDEta", "uGMT input muons #Delta#eta between BMTF and OMTF+", 100, -0.5, 0.5);
214  ugmtBOMTFposMuMuDEta->setAxisTitle("#Delta#eta", 1);
215 
216  ugmtBOMTFposMuMuDPhi = ibooker.book1D("ugmtBOMTFposMuMuDPhi", "uGMT input muons #Delta#phi between BMTF and OMTF+", 100, -0.5, 0.5);
217  ugmtBOMTFposMuMuDPhi->setAxisTitle("#Delta#phi", 1);
218 
219  ugmtBOMTFposMuMuDR = ibooker.book1D("ugmtBOMTFposMuMuDR", "uGMT input muons #DeltaR between BMTF and OMTF+", 50, 0., 0.5);
220  ugmtBOMTFposMuMuDR->setAxisTitle("#DeltaR", 1);
221 
222  ugmtBOMTFnegMuMuDEta = ibooker.book1D("ugmtBOMTFnegMuMuDEta", "uGMT input muons #Delta#eta between BMTF and OMTF-", 100, -0.5, 0.5);
223  ugmtBOMTFnegMuMuDEta->setAxisTitle("#Delta#eta", 1);
224 
225  ugmtBOMTFnegMuMuDPhi = ibooker.book1D("ugmtBOMTFnegMuMuDPhi", "uGMT input muons #Delta#phi between BMTF and OMTF-", 100, -0.5, 0.5);
226  ugmtBOMTFnegMuMuDPhi->setAxisTitle("#Delta#phi", 1);
227 
228  ugmtBOMTFnegMuMuDR = ibooker.book1D("ugmtBOMTFnegMuMuDR", "uGMT input muons #DeltaR between BMTF and OMTF-", 50, 0., 0.5);
229  ugmtBOMTFnegMuMuDR->setAxisTitle("#DeltaR", 1);
230 
231  ugmtEOMTFposMuMuDEta = ibooker.book1D("ugmtEOMTFposMuMuDEta", "uGMT input muons #Delta#eta between EMTF+ and OMTF+", 100, -0.5, 0.5);
232  ugmtEOMTFposMuMuDEta->setAxisTitle("#Delta#eta", 1);
233 
234  ugmtEOMTFposMuMuDPhi = ibooker.book1D("ugmtEOMTFposMuMuDPhi", "uGMT input muons #Delta#phi between EMTF+ and OMTF+", 100, -0.5, 0.5);
235  ugmtEOMTFposMuMuDPhi->setAxisTitle("#Delta#phi", 1);
236 
237  ugmtEOMTFposMuMuDR = ibooker.book1D("ugmtEOMTFposMuMuDR", "uGMT input muons #DeltaR between EMTF+ and OMTF+", 50, 0., 0.5);
238  ugmtEOMTFposMuMuDR->setAxisTitle("#DeltaR", 1);
239 
240  ugmtEOMTFnegMuMuDEta = ibooker.book1D("ugmtEOMTFnegMuMuDEta", "uGMT input muons #Delta#eta between EMTF- and OMTF-", 100, -0.5, 0.5);
241  ugmtEOMTFnegMuMuDEta->setAxisTitle("#Delta#eta", 1);
242 
243  ugmtEOMTFnegMuMuDPhi = ibooker.book1D("ugmtEOMTFnegMuMuDPhi", "uGMT input muons #Delta#phi between EMTF- and OMTF-", 100, -0.5, 0.5);
244  ugmtEOMTFnegMuMuDPhi->setAxisTitle("#Delta#phi", 1);
245 
246  ugmtEOMTFnegMuMuDR = ibooker.book1D("ugmtEOMTFnegMuMuDR", "uGMT input muons #DeltaR between EMTF- and OMTF-", 50, 0., 0.5);
247  ugmtEOMTFnegMuMuDR->setAxisTitle("#DeltaR", 1);
248 
249  }
250 
251  // Subsystem Monitoring and Muon Output
252  ibooker.setCurrentFolder(monitorDir);
253 
254  if (!emul) {
255  ugmtBMTFBXvsProcessor = ibooker.book2D("ugmtBXvsProcessorBMTF", "uGMT BMTF Input BX vs Processor", 12, -0.5, 11.5, 5, -2.5, 2.5);
256  ugmtBMTFBXvsProcessor->setAxisTitle("Wedge", 1);
257  for (int bin = 1; bin <= 12; ++bin) {
258  ugmtBMTFBXvsProcessor->setBinLabel(bin, std::to_string(bin), 1);
259  }
261 
262  ugmtOMTFBXvsProcessor = ibooker.book2D("ugmtBXvsProcessorOMTF", "uGMT OMTF Input BX vs Processor", 12, -0.5, 11.5, 5, -2.5, 2.5);
263  ugmtOMTFBXvsProcessor->setAxisTitle("Sector (Detector Side)", 1);
264  for (int bin = 1; bin <= 6; ++bin) {
265  ugmtOMTFBXvsProcessor->setBinLabel(bin, std::to_string(7 - bin) + " (-)", 1);
266  ugmtOMTFBXvsProcessor->setBinLabel(bin + 6, std::to_string(bin) + " (+)", 1);
267  }
269 
270  ugmtEMTFBXvsProcessor = ibooker.book2D("ugmtBXvsProcessorEMTF", "uGMT EMTF Input BX vs Processor", 12, -0.5, 11.5, 5, -2.5, 2.5);
271  ugmtEMTFBXvsProcessor->setAxisTitle("Sector (Detector Side)", 1);
272  for (int bin = 1; bin <= 6; ++bin) {
273  ugmtEMTFBXvsProcessor->setBinLabel(bin, std::to_string(7 - bin) + " (-)", 1);
274  ugmtEMTFBXvsProcessor->setBinLabel(bin + 6, std::to_string(bin) + " (+)", 1);
275  }
277 
278  ugmtBXvsLink = ibooker.book2D("ugmtBXvsLink", "uGMT BX vs Input Links", 36, 35.5, 71.5, 5, -2.5, 2.5);
279  ugmtBXvsLink->setAxisTitle("Link", 1);
280  for (int bin = 1; bin <= 6; ++bin) {
281  ugmtBXvsLink->setBinLabel(bin , Form("E+%d", bin ), 1);
282  ugmtBXvsLink->setBinLabel(bin+6 , Form("O+%d", bin ), 1);
283  ugmtBXvsLink->setBinLabel(bin+12, Form("B%d", bin ), 1);
284  ugmtBXvsLink->setBinLabel(bin+18, Form("B%d", bin+6), 1);
285  ugmtBXvsLink->setBinLabel(bin+24, Form("O-%d", bin ), 1);
286  ugmtBXvsLink->setBinLabel(bin+30, Form("E-%d", bin ), 1);
287  }
288  ugmtBXvsLink->setAxisTitle("BX", 2);
289  }
290 
291  ugmtMuonBX = ibooker.book1D("ugmtMuonBX", "uGMT Muon BX", 7, -3.5, 3.5);
292  ugmtMuonBX->setAxisTitle("BX", 1);
293 
294  ugmtnMuons = ibooker.book1D("ugmtnMuons", "uGMT Muon Multiplicity", 9, -0.5, 8.5);
295  ugmtnMuons->setAxisTitle("Muon Multiplicity (BX == 0)", 1);
296 
297  ugmtMuonIndex = ibooker.book1D("ugmtMuonIndex", "uGMT Input Muon Index", 108, -0.5, 107.5);
298  ugmtMuonIndex->setAxisTitle("Index", 1);
299 
300  ugmtMuonhwPt = ibooker.book1D("ugmtMuonhwPt", "uGMT Muon HW p_{T}", 512, -0.5, 511.5);
301  ugmtMuonhwPt->setAxisTitle("Hardware p_{T}", 1);
302 
303  ugmtMuonhwEta = ibooker.book1D("ugmtMuonhwEta", "uGMT Muon HW #eta", 461, -230.5, 230.5);
304  ugmtMuonhwEta->setAxisTitle("Hardware Eta", 1);
305 
306  ugmtMuonhwPhi = ibooker.book1D("ugmtMuonhwPhi", "uGMT Muon HW #phi", 577, -1.5, 575.5);
307  ugmtMuonhwPhi->setAxisTitle("Hardware Phi", 1);
308 
309  ugmtMuonhwEtaAtVtx = ibooker.book1D("ugmtMuonhwEtaAtVtx", "uGMT Muon HW #eta at vertex", 461, -230.5, 230.5);
310  ugmtMuonhwEtaAtVtx->setAxisTitle("Hardware Eta at Vertex", 1);
311 
312  ugmtMuonhwPhiAtVtx = ibooker.book1D("ugmtMuonhwPhiAtVtx", "uGMT Muon HW #phi at vertex", 577, -1.5, 575.5);
313  ugmtMuonhwPhiAtVtx->setAxisTitle("Hardware Phi at Vertex", 1);
314 
315  ugmtMuonhwCharge = ibooker.book1D("ugmtMuonhwCharge", "uGMT Muon HW Charge", 4, -1.5, 2.5);
316  ugmtMuonhwCharge->setAxisTitle("Hardware Charge", 1);
317 
318  ugmtMuonhwChargeValid = ibooker.book1D("ugmtMuonhwChargeValid", "uGMT Muon ChargeValid", 2, -0.5, 1.5);
319  ugmtMuonhwChargeValid->setAxisTitle("ChargeValid", 1);
320 
321  ugmtMuonhwQual = ibooker.book1D("ugmtMuonhwQual", "uGMT Muon Quality", 16, -0.5, 15.5);
322  ugmtMuonhwQual->setAxisTitle("Quality", 1);
323 
324  ugmtMuonhwIso = ibooker.book1D("ugmtMuonhwIso", "uGMT Muon Isolation", 4, -0.5, 3.5);
325  ugmtMuonhwIso->setAxisTitle("Isolation", 1);
326 
327  ugmtMuonPt = ibooker.book1D("ugmtMuonPt", "uGMT Muon p_{T}", 128, -0.5, 255.5);
328  ugmtMuonPt->setAxisTitle("p_{T} [GeV]", 1);
329 
330  ugmtMuonEta = ibooker.book1D("ugmtMuonEta", "uGMT Muon #eta", 52, -2.6, 2.6);
331  ugmtMuonEta->setAxisTitle("#eta", 1);
332 
333  ugmtMuonPhi = ibooker.book1D("ugmtMuonPhi", "uGMT Muon #phi", 66, -3.3, 3.3);
334  ugmtMuonPhi->setAxisTitle("#phi", 1);
335 
336  ugmtMuonEtaAtVtx = ibooker.book1D("ugmtMuonEtaAtVtx", "uGMT Muon #eta at vertex", 52, -2.6, 2.6);
337  ugmtMuonEtaAtVtx->setAxisTitle("#eta at vertex", 1);
338 
339  ugmtMuonPhiAtVtx = ibooker.book1D("ugmtMuonPhiAtVtx", "uGMT Muon #phi at vertex", 66, -3.3, 3.3);
340  ugmtMuonPhiAtVtx->setAxisTitle("#phi at vertex", 1);
341 
342  ugmtMuonCharge = ibooker.book1D("ugmtMuonCharge", "uGMT Muon Charge", 3, -1.5, 1.5);
343  ugmtMuonCharge->setAxisTitle("Charge", 1);
344 
345  ugmtMuonPhiBmtf = ibooker.book1D("ugmtMuonPhiBmtf", "uGMT Muon #phi for BMTF Inputs", 66, -3.3, 3.3);
346  ugmtMuonPhiBmtf->setAxisTitle("#phi", 1);
347 
348  ugmtMuonPhiOmtf = ibooker.book1D("ugmtMuonPhiOmtf", "uGMT Muon #phi for OMTF Inputs", 66, -3.3, 3.3);
349  ugmtMuonPhiOmtf->setAxisTitle("#phi", 1);
350 
351  ugmtMuonPhiEmtf = ibooker.book1D("ugmtMuonPhiEmtf", "uGMT Muon #phi for EMTF Inputs", 66, -3.3, 3.3);
352  ugmtMuonPhiEmtf->setAxisTitle("#phi", 1);
353 
354  const float dPhiScale = 4*phiScale_;
355  const float dEtaScale = etaScale_;
356  ugmtMuonDEtavsPtBmtf = ibooker.book2D("ugmtMuonDEtavsPtBmtf", "uGMT Muon from BMTF #eta_{at vertex} - #eta_{at muon system} vs p_{T}", 32, 0, 64, 31, -15.5*dEtaScale, 15.5*dEtaScale);
357  ugmtMuonDEtavsPtBmtf->setAxisTitle("p_{T} [GeV]", 1);
358  ugmtMuonDEtavsPtBmtf->setAxisTitle("#eta_{at vertex} - #eta", 2);
359 
360  ugmtMuonDPhivsPtBmtf = ibooker.book2D("ugmtMuonDPhivsPtBmtf", "uGMT Muon from BMTF #phi_{at vertex} - #phi_{at muon system} vs p_{T}", 32, 0, 64, 31, -15.5*dPhiScale, 15.5*dPhiScale);
361  ugmtMuonDPhivsPtBmtf->setAxisTitle("p_{T} [GeV]", 1);
362  ugmtMuonDPhivsPtBmtf->setAxisTitle("#phi_{at vertex} - #phi", 2);
363 
364  ugmtMuonDEtavsPtOmtf = ibooker.book2D("ugmtMuonDEtavsPtOmtf", "uGMT Muon from OMTF #eta_{at vertex} - #eta_{at muon system} vs p_{T}", 32, 0, 64, 31, -15.5*dEtaScale, 15.5*dEtaScale);
365  ugmtMuonDEtavsPtOmtf->setAxisTitle("p_{T} [GeV]", 1);
366  ugmtMuonDEtavsPtOmtf->setAxisTitle("#eta_{at vertex} - #eta", 2);
367 
368  ugmtMuonDPhivsPtOmtf = ibooker.book2D("ugmtMuonDPhivsPtOmtf", "uGMT Muon from OMTF #phi_{at vertex} - #phi_{at muon system} vs p_{T}", 32, 0, 64, 31, -15.5*dPhiScale, 15.5*dPhiScale);
369  ugmtMuonDPhivsPtOmtf->setAxisTitle("p_{T} [GeV]", 1);
370  ugmtMuonDPhivsPtOmtf->setAxisTitle("#phi_{at vertex} - #phi", 2);
371 
372  ugmtMuonDEtavsPtEmtf = ibooker.book2D("ugmtMuonDEtavsPtEmtf", "uGMT Muon from EMTF #eta_{at vertex} - #eta_{at muon system} vs p_{T}", 32, 0, 64, 31, -15.5*dEtaScale, 15.5*dEtaScale);
373  ugmtMuonDEtavsPtEmtf->setAxisTitle("p_{T} [GeV]", 1);
374  ugmtMuonDEtavsPtEmtf->setAxisTitle("#eta_{at vertex} - #eta", 2);
375 
376  ugmtMuonDPhivsPtEmtf = ibooker.book2D("ugmtMuonDPhivsPtEmtf", "uGMT Muon from EMTF #phi_{at vertex} - #phi_{at muon system} vs p_{T}", 32, 0, 64, 31, -15.5*dPhiScale, 15.5*dPhiScale);
377  ugmtMuonDPhivsPtEmtf->setAxisTitle("p_{T} [GeV]", 1);
378  ugmtMuonDPhivsPtEmtf->setAxisTitle("#phi_{at vertex} - #phi", 2);
379 
380  ugmtMuonPtvsEta = ibooker.book2D("ugmtMuonPtvsEta", "uGMT Muon p_{T} vs #eta", 100, -2.5, 2.5, 128, -0.5, 255.5);
381  ugmtMuonPtvsEta->setAxisTitle("#eta", 1);
382  ugmtMuonPtvsEta->setAxisTitle("p_{T} [GeV]", 2);
383 
384  ugmtMuonPtvsPhi = ibooker.book2D("ugmtMuonPtvsPhi", "uGMT Muon p_{T} vs #phi", 64, -3.2, 3.2, 128, -0.5, 255.5);
385  ugmtMuonPtvsPhi->setAxisTitle("#phi", 1);
386  ugmtMuonPtvsPhi->setAxisTitle("p_{T} [GeV]", 2);
387 
388  ugmtMuonPhivsEta = ibooker.book2D("ugmtMuonPhivsEta", "uGMT Muon #phi vs #eta", 100, -2.5, 2.5, 64, -3.2, 3.2);
389  ugmtMuonPhivsEta->setAxisTitle("#eta", 1);
390  ugmtMuonPhivsEta->setAxisTitle("#phi", 2);
391 
392  ugmtMuonPhiAtVtxvsEtaAtVtx = ibooker.book2D("ugmtMuonPhiAtVtxvsEtaAtVtx", "uGMT Muon #phi at vertex vs #eta at vertex", 100, -2.5, 2.5, 64, -3.2, 3.2);
393  ugmtMuonPhiAtVtxvsEtaAtVtx->setAxisTitle("#eta at vertex", 1);
394  ugmtMuonPhiAtVtxvsEtaAtVtx->setAxisTitle("#phi at vertex", 2);
395 
396  ugmtMuonBXvsLink = ibooker.book2D("ugmtMuonBXvsLink", "uGMT Muon BX vs Input Links", 36, 35.5, 71.5, 5, -2.5, 2.5);
397  ugmtMuonBXvsLink->setAxisTitle("Muon Input Links", 1);
398  for (int bin = 1; bin <= 6; ++bin) {
399  ugmtMuonBXvsLink->setBinLabel(bin , Form("E+%d", bin ), 1);
400  ugmtMuonBXvsLink->setBinLabel(bin+6 , Form("O+%d", bin ), 1);
401  ugmtMuonBXvsLink->setBinLabel(bin+12, Form("B%d", bin ), 1);
402  ugmtMuonBXvsLink->setBinLabel(bin+18, Form("B%d", bin+6), 1);
403  ugmtMuonBXvsLink->setBinLabel(bin+24, Form("O-%d", bin ), 1);
404  ugmtMuonBXvsLink->setBinLabel(bin+30, Form("E-%d", bin ), 1);
405  }
406  ugmtMuonBXvsLink->setAxisTitle("BX", 2);
407 
408  ugmtMuonChargevsLink = ibooker.book2D("ugmtMuonChargevsLink", "uGMT Muon Charge vs Input Links", 36, 35.5, 71.5, 3, -1.5, 1.5);
409  ugmtMuonChargevsLink->setAxisTitle("Muon Input Links", 1);
410  for (int bin = 1; bin <= 6; ++bin) {
411  ugmtMuonChargevsLink->setBinLabel(bin , Form("E+%d", bin ), 1);
412  ugmtMuonChargevsLink->setBinLabel(bin+6 , Form("O+%d", bin ), 1);
413  ugmtMuonChargevsLink->setBinLabel(bin+12, Form("B%d", bin ), 1);
414  ugmtMuonChargevsLink->setBinLabel(bin+18, Form("B%d", bin+6), 1);
415  ugmtMuonChargevsLink->setBinLabel(bin+24, Form("O-%d", bin ), 1);
416  ugmtMuonChargevsLink->setBinLabel(bin+30, Form("E-%d", bin ), 1);
417  }
418  ugmtMuonChargevsLink->setAxisTitle("Charge", 2);
419 
420  ugmtMuonBXvshwPt = ibooker.book2D("ugmtMuonBXvshwPt", "uGMT Muon BX vs HW p_{T}", 128, -0.5, 511.5, 5, -2.5, 2.5);
421  ugmtMuonBXvshwPt->setAxisTitle("Hardware p_{T}", 1);
422  ugmtMuonBXvshwPt->setAxisTitle("BX", 2);
423 
424  ugmtMuonBXvshwEta = ibooker.book2D("ugmtMuonBXvshwEta", "uGMT Muon BX vs HW #eta", 93, -232.5, 232.5, 5, -2.5, 2.5);
425  ugmtMuonBXvshwEta->setAxisTitle("Hardware #eta", 1);
427 
428  ugmtMuonBXvshwPhi = ibooker.book2D("ugmtMuonBXvshwPhi", "uGMT Muon BX vs HW #phi", 116, -2.5, 577.5, 5, -2.5, 2.5);
429  ugmtMuonBXvshwPhi->setAxisTitle("Hardware #phi", 1);
431 
432  ugmtMuonBXvshwCharge = ibooker.book2D("ugmtMuonBXvshwCharge", "uGMT Muon BX vs HW Charge", 2, -0.5, 1.5, 5, -2.5, 2.5);
433  ugmtMuonBXvshwCharge->setAxisTitle("Hardware Charge", 1);
435 
436  ugmtMuonBXvshwChargeValid = ibooker.book2D("ugmtMuonBXvshwChargeValid", "uGMT Muon BX vs ChargeValid", 2, -0.5, 1.5, 5, -2.5, 2.5);
437  ugmtMuonBXvshwChargeValid->setAxisTitle("ChargeValid", 1);
439 
440  ugmtMuonBXvshwQual = ibooker.book2D("ugmtMuonBXvshwQual", "uGMT Muon BX vs Quality", 16, -0.5, 15.5, 5, -2.5, 2.5);
441  ugmtMuonBXvshwQual->setAxisTitle("Quality", 1);
443 
444  ugmtMuonBXvshwIso = ibooker.book2D("ugmtMuonBXvshwIso", "uGMT Muon BX vs Isolation", 4, -0.5, 3.5, 5, -2.5, 2.5);
445  ugmtMuonBXvshwIso->setAxisTitle("Isolation", 1);
447 
448  // muon correlations
449  ibooker.setCurrentFolder(monitorDir + "/muon_correlations");
450 
451  ugmtMuMuInvMass = ibooker.book1D("ugmtMuMuInvMass", "uGMT dimuon invariant mass", 200, 0., 200.);
452  ugmtMuMuInvMass->setAxisTitle("m(#mu#mu) [GeV]", 1);
453 
454  ugmtMuMuInvMassAtVtx = ibooker.book1D("ugmtMuMuInvMassAtVtx", "uGMT dimuon invariant mass with coordinates at vertex", 200, 0., 200.);
455  ugmtMuMuInvMassAtVtx->setAxisTitle("m(#mu#mu) [GeV]", 1);
456 
457  ugmtMuMuDEta = ibooker.book1D("ugmtMuMuDEta", "uGMT Muons #Delta#eta", 100, -1., 1.);
458  ugmtMuMuDEta->setAxisTitle("#Delta#eta", 1);
459 
460  ugmtMuMuDPhi = ibooker.book1D("ugmtMuMuDPhi", "uGMT Muons #Delta#phi", 100, -1., 1.);
461  ugmtMuMuDPhi->setAxisTitle("#Delta#phi", 1);
462 
463  ugmtMuMuDR = ibooker.book1D("ugmtMuMuDR", "uGMT Muons #DeltaR", 50, 0., 1.);
464  ugmtMuMuDR->setAxisTitle("#DeltaR", 1);
465 
466  // barrel - overlap
467  ugmtMuMuDEtaBOpos = ibooker.book1D("ugmtMuMuDEtaBOpos", "uGMT Muons #Delta#eta barrel-overlap positive side", 100, -1., 1.);
468  ugmtMuMuDEtaBOpos->setAxisTitle("#Delta#eta", 1);
469 
470  ugmtMuMuDPhiBOpos = ibooker.book1D("ugmtMuMuDPhiBOpos", "uGMT Muons #Delta#phi barrel-overlap positive side", 100, -1., 1.);
471  ugmtMuMuDPhiBOpos->setAxisTitle("#Delta#phi", 1);
472 
473  ugmtMuMuDRBOpos = ibooker.book1D("ugmtMuMuDRBOpos", "uGMT Muons #DeltaR barrel-overlap positive side", 50, 0., 1.);
474  ugmtMuMuDRBOpos->setAxisTitle("#DeltaR", 1);
475 
476  ugmtMuMuDEtaBOneg = ibooker.book1D("ugmtMuMuDEtaBOneg", "uGMT Muons #Delta#eta barrel-overlap negative side", 100, -1., 1.);
477  ugmtMuMuDEtaBOneg->setAxisTitle("#Delta#eta", 1);
478 
479  ugmtMuMuDPhiBOneg = ibooker.book1D("ugmtMuMuDPhiBOneg", "uGMT Muons #Delta#phi barrel-overlap negative side", 100, -1., 1.);
480  ugmtMuMuDPhiBOneg->setAxisTitle("#Delta#phi", 1);
481 
482  ugmtMuMuDRBOneg = ibooker.book1D("ugmtMuMuDRBOneg", "uGMT Muons #DeltaR barrel-overlap negative side", 50, 0., 1.);
483  ugmtMuMuDRBOneg->setAxisTitle("#DeltaR", 1);
484 
485  // endcap - overlap
486  ugmtMuMuDEtaEOpos = ibooker.book1D("ugmtMuMuDEtaEOpos", "uGMT Muons #Delta#eta endcap-overlap positive side", 100, -1., 1.);
487  ugmtMuMuDEtaEOpos->setAxisTitle("#Delta#eta", 1);
488 
489  ugmtMuMuDPhiEOpos = ibooker.book1D("ugmtMuMuDPhiEOpos", "uGMT Muons #Delta#phi endcap-overlap positive side", 100, -1., 1.);
490  ugmtMuMuDPhiEOpos->setAxisTitle("#Delta#phi", 1);
491 
492  ugmtMuMuDREOpos = ibooker.book1D("ugmtMuMuDREOpos", "uGMT Muons #DeltaR endcap-overlap positive side", 50, 0., 1.);
493  ugmtMuMuDREOpos->setAxisTitle("#DeltaR", 1);
494 
495  ugmtMuMuDEtaEOneg = ibooker.book1D("ugmtMuMuDEtaEOneg", "uGMT Muons #Delta#eta endcap-overlap negative side", 100, -1., 1.);
496  ugmtMuMuDEtaEOneg->setAxisTitle("#Delta#eta", 1);
497 
498  ugmtMuMuDPhiEOneg = ibooker.book1D("ugmtMuMuDPhiEOneg", "uGMT Muons #Delta#phi endcap-overlap negative side", 100, -1., 1.);
499  ugmtMuMuDPhiEOneg->setAxisTitle("#Delta#phi", 1);
500 
501  ugmtMuMuDREOneg = ibooker.book1D("ugmtMuMuDREOneg", "uGMT Muons #DeltaR endcap-overlap negative side", 50, 0., 1.);
502  ugmtMuMuDREOneg->setAxisTitle("#DeltaR", 1);
503 
504  // barrel wedges
505  ugmtMuMuDEtaB = ibooker.book1D("ugmtMuMuDEtaB", "uGMT Muons #Delta#eta between barrel wedges", 100, -1., 1.);
506  ugmtMuMuDEtaB->setAxisTitle("#Delta#eta", 1);
507 
508  ugmtMuMuDPhiB = ibooker.book1D("ugmtMuMuDPhiB", "uGMT Muons #Delta#phi between barrel wedges", 100, -1., 1.);
509  ugmtMuMuDPhiB->setAxisTitle("#Delta#phi", 1);
510 
511  ugmtMuMuDRB = ibooker.book1D("ugmtMuMuDRB", "uGMT Muons #DeltaR between barrel wedges", 50, 0., 1.);
512  ugmtMuMuDRB->setAxisTitle("#DeltaR", 1);
513 
514  // overlap sectors
515  ugmtMuMuDEtaOpos = ibooker.book1D("ugmtMuMuDEtaOpos", "uGMT Muons #Delta#eta between overlap positive side sectors", 100, -1., 1.);
516  ugmtMuMuDEtaOpos->setAxisTitle("#Delta#eta", 1);
517 
518  ugmtMuMuDPhiOpos = ibooker.book1D("ugmtMuMuDPhiOpos", "uGMT Muons #Delta#phi between overlap positive side sectors", 100, -1., 1.);
519  ugmtMuMuDPhiOpos->setAxisTitle("#Delta#phi", 1);
520 
521  ugmtMuMuDROpos = ibooker.book1D("ugmtMuMuDROpos", "uGMT Muons #DeltaR between overlap positive side sectors", 50, 0., 1.);
522  ugmtMuMuDROpos->setAxisTitle("#DeltaR", 1);
523 
524  ugmtMuMuDEtaOneg = ibooker.book1D("ugmtMuMuDEtaOneg", "uGMT Muons #Delta#eta between overlap negative side sectors", 100, -1., 1.);
525  ugmtMuMuDEtaOneg->setAxisTitle("#Delta#eta", 1);
526 
527  ugmtMuMuDPhiOneg = ibooker.book1D("ugmtMuMuDPhiOneg", "uGMT Muons #Delta#phi between overlap negative side sectors", 100, -1., 1.);
528  ugmtMuMuDPhiOneg->setAxisTitle("#Delta#phi", 1);
529 
530  ugmtMuMuDROneg = ibooker.book1D("ugmtMuMuDROneg", "uGMT Muons #DeltaR between overlap negative side sectors", 50, 0., 1.);
531  ugmtMuMuDROneg->setAxisTitle("#DeltaR", 1);
532 
533  // endcap sectors
534  ugmtMuMuDEtaEpos = ibooker.book1D("ugmtMuMuDEtaEpos", "uGMT Muons #Delta#eta between endcap positive side sectors", 100, -1., 1.);
535  ugmtMuMuDEtaEpos->setAxisTitle("#Delta#eta", 1);
536 
537  ugmtMuMuDPhiEpos = ibooker.book1D("ugmtMuMuDPhiEpos", "uGMT Muons #Delta#phi between endcap positive side sectors", 100, -1., 1.);
538  ugmtMuMuDPhiEpos->setAxisTitle("#Delta#phi", 1);
539 
540  ugmtMuMuDREpos = ibooker.book1D("ugmtMuMuDREpos", "uGMT Muons #DeltaR between endcap positive side sectors", 50, 0., 1.);
541  ugmtMuMuDREpos->setAxisTitle("#DeltaR", 1);
542 
543  ugmtMuMuDEtaEneg = ibooker.book1D("ugmtMuMuDEtaEneg", "uGMT Muons #Delta#eta between endcap negative side sectors", 100, -1., 1.);
544  ugmtMuMuDEtaEneg->setAxisTitle("#Delta#eta", 1);
545 
546  ugmtMuMuDPhiEneg = ibooker.book1D("ugmtMuMuDPhiEneg", "uGMT Muons #Delta#phi between endcap negative side sectors", 100, -1., 1.);
547  ugmtMuMuDPhiEneg->setAxisTitle("#Delta#phi", 1);
548 
549  ugmtMuMuDREneg = ibooker.book1D("ugmtMuMuDREneg", "uGMT Muons #DeltaR between endcap negative side sectors", 50, 0., 1.);
550  ugmtMuMuDREneg->setAxisTitle("#DeltaR", 1);
551 }
552 
554 
555  if (verbose) edm::LogInfo("L1TStage2uGMT") << "L1TStage2uGMT: analyze..." << std::endl;
556 
557  if (!emul) {
559  e.getByToken(ugmtBMTFToken, BMTFBxCollection);
560 
561  ugmtBMTFnMuons->Fill(BMTFBxCollection->size(0));
562 
563  for (int itBX = BMTFBxCollection->getFirstBX(); itBX <= BMTFBxCollection->getLastBX(); ++itBX) {
564  for (l1t::RegionalMuonCandBxCollection::const_iterator BMTF = BMTFBxCollection->begin(itBX); BMTF != BMTFBxCollection->end(itBX); ++BMTF) {
565  ugmtBMTFBX->Fill(itBX);
566  ugmtBMTFhwPt->Fill(BMTF->hwPt());
567  ugmtBMTFhwEta->Fill(BMTF->hwEta());
568  ugmtBMTFhwPhi->Fill(BMTF->hwPhi());
569  ugmtBMTFhwSign->Fill(BMTF->hwSign());
570  ugmtBMTFhwSignValid->Fill(BMTF->hwSignValid());
571  ugmtBMTFhwQual->Fill(BMTF->hwQual());
572  ugmtBMTFlink->Fill(BMTF->link());
573 
574  int global_hw_phi = l1t::MicroGMTConfiguration::calcGlobalPhi(BMTF->hwPhi(), BMTF->trackFinderType(), BMTF->processor());
575  ugmtBMTFglbPhi->Fill(global_hw_phi);
576 
577  ugmtBMTFBXvsProcessor->Fill(BMTF->processor(), itBX);
578  ugmtBMTFProcvshwPhi->Fill(BMTF->hwPhi(), BMTF->processor());
579  ugmtBXvsLink->Fill(BMTF->link(), itBX);
580 
581  // Analyse muon correlations
582  for (l1t::RegionalMuonCandBxCollection::const_iterator BMTF2 = BMTF+1; BMTF2 != BMTFBxCollection->end(itBX); ++BMTF2) {
583  int global_hw_phi2 = l1t::MicroGMTConfiguration::calcGlobalPhi(BMTF2->hwPhi(), BMTF2->trackFinderType(), BMTF2->processor());
584  float dEta = (BMTF->hwEta() - BMTF2->hwEta()) * etaScale_;
585  float dPhi = (global_hw_phi - global_hw_phi2) * phiScale_;
586  float dR = sqrt(dEta*dEta + dPhi*dPhi);
587 
588  int dLink = std::abs(BMTF->link() - BMTF2->link());
589  if (dLink == 1 || dLink == 11) { // two adjacent wedges and wrap around
590  ugmtBMTFMuMuDEta->Fill(dEta);
591  ugmtBMTFMuMuDPhi->Fill(dPhi);
592  ugmtBMTFMuMuDR->Fill(dR);
593  }
594  }
595  }
596  }
597 
599  e.getByToken(ugmtOMTFToken, OMTFBxCollection);
600 
601  ugmtOMTFnMuons->Fill(OMTFBxCollection->size(0));
602 
603  for (int itBX = OMTFBxCollection->getFirstBX(); itBX <= OMTFBxCollection->getLastBX(); ++itBX) {
604  for (l1t::RegionalMuonCandBxCollection::const_iterator OMTF = OMTFBxCollection->begin(itBX); OMTF != OMTFBxCollection->end(itBX); ++OMTF) {
605  ugmtOMTFBX->Fill(itBX);
606  ugmtOMTFhwPt->Fill(OMTF->hwPt());
607  ugmtOMTFhwEta->Fill(OMTF->hwEta());
608  ugmtOMTFhwSign->Fill(OMTF->hwSign());
609  ugmtOMTFhwSignValid->Fill(OMTF->hwSignValid());
610  ugmtOMTFhwQual->Fill(OMTF->hwQual());
611  ugmtOMTFlink->Fill(OMTF->link());
612 
613  int global_hw_phi = l1t::MicroGMTConfiguration::calcGlobalPhi(OMTF->hwPhi(), OMTF->trackFinderType(), OMTF->processor());
614 
615  l1t::tftype trackFinderType = OMTF->trackFinderType();
616 
617  if (trackFinderType == l1t::omtf_neg) {
618  ugmtOMTFBXvsProcessor->Fill(5 - OMTF->processor(), itBX);
619  ugmtOMTFhwPhiNeg->Fill(OMTF->hwPhi());
620  ugmtOMTFglbPhiNeg->Fill(global_hw_phi);
621  ugmtOMTFProcvshwPhiNeg->Fill(OMTF->hwPhi(), OMTF->processor());
622  } else {
623  ugmtOMTFBXvsProcessor->Fill(OMTF->processor() + 6, itBX);
624  ugmtOMTFhwPhiPos->Fill(OMTF->hwPhi());
625  ugmtOMTFglbPhiPos->Fill(global_hw_phi);
626  ugmtOMTFProcvshwPhiPos->Fill(OMTF->hwPhi(), OMTF->processor());
627  }
628 
629  ugmtBXvsLink->Fill(OMTF->link(), itBX);
630 
631  // Analyse muon correlations
632  for (l1t::RegionalMuonCandBxCollection::const_iterator OMTF2 = OMTF+1; OMTF2 != OMTFBxCollection->end(itBX); ++OMTF2) {
633  int global_hw_phi2 = l1t::MicroGMTConfiguration::calcGlobalPhi(OMTF2->hwPhi(), OMTF2->trackFinderType(), OMTF2->processor());
634  float dEta = (OMTF->hwEta() - OMTF2->hwEta()) * etaScale_;
635  float dPhi = (global_hw_phi - global_hw_phi2) * phiScale_;
636  float dR = sqrt(dEta*dEta + dPhi*dPhi);
637 
638  int dLink = std::abs(OMTF->link() - OMTF2->link());
639  if (dLink == 1 || dLink == 5) { // two adjacent sectors and wrap around
640  ugmtOMTFMuMuDEta->Fill(dEta);
641  ugmtOMTFMuMuDPhi->Fill(dPhi);
642  ugmtOMTFMuMuDR->Fill(dR);
643  }
644  }
645  }
646  }
647 
649  e.getByToken(ugmtEMTFToken, EMTFBxCollection);
650 
651  ugmtEMTFnMuons->Fill(EMTFBxCollection->size(0));
652 
653  for (int itBX = EMTFBxCollection->getFirstBX(); itBX <= EMTFBxCollection->getLastBX(); ++itBX) {
654  for (l1t::RegionalMuonCandBxCollection::const_iterator EMTF = EMTFBxCollection->begin(itBX); EMTF != EMTFBxCollection->end(itBX); ++EMTF) {
655  ugmtEMTFBX->Fill(itBX);
656  ugmtEMTFhwPt->Fill(EMTF->hwPt());
657  ugmtEMTFhwEta->Fill(EMTF->hwEta());
658  ugmtEMTFhwSign->Fill(EMTF->hwSign());
659  ugmtEMTFhwSignValid->Fill(EMTF->hwSignValid());
660  ugmtEMTFhwQual->Fill(EMTF->hwQual());
661  ugmtEMTFlink->Fill(EMTF->link());
662 
663  int global_hw_phi = l1t::MicroGMTConfiguration::calcGlobalPhi(EMTF->hwPhi(), EMTF->trackFinderType(), EMTF->processor());
664 
665  l1t::tftype trackFinderType = EMTF->trackFinderType();
666 
667  if (trackFinderType == l1t::emtf_neg) {
668  ugmtEMTFBXvsProcessor->Fill(5 - EMTF->processor(), itBX);
669  ugmtEMTFhwPhiNeg->Fill(EMTF->hwPhi());
670  ugmtEMTFglbPhiNeg->Fill(global_hw_phi);
671  ugmtEMTFProcvshwPhiNeg->Fill(EMTF->hwPhi(), EMTF->processor());
672  } else {
673  ugmtEMTFBXvsProcessor->Fill(EMTF->processor() + 6, itBX);
674  ugmtEMTFhwPhiPos->Fill(EMTF->hwPhi());
675  ugmtEMTFglbPhiPos->Fill(global_hw_phi);
676  ugmtEMTFProcvshwPhiPos->Fill(EMTF->hwPhi(), EMTF->processor());
677  }
678 
679  ugmtBXvsLink->Fill(EMTF->link(), itBX);
680 
681  // Analyse muon correlations
682  for (l1t::RegionalMuonCandBxCollection::const_iterator EMTF2 = EMTF+1; EMTF2 != EMTFBxCollection->end(itBX); ++EMTF2) {
683  int global_hw_phi2 = l1t::MicroGMTConfiguration::calcGlobalPhi(EMTF2->hwPhi(), EMTF2->trackFinderType(), EMTF2->processor());
684  float dEta = (EMTF->hwEta() - EMTF2->hwEta()) * etaScale_;
685  float dPhi = (global_hw_phi - global_hw_phi2) * phiScale_;
686  float dR = sqrt(dEta*dEta + dPhi*dPhi);
687 
688  int dLink = std::abs(EMTF->link() - EMTF2->link());
689  if (dLink == 1 || dLink == 5) { // two adjacent sectors and wrap around
690  ugmtEMTFMuMuDEta->Fill(dEta);
691  ugmtEMTFMuMuDPhi->Fill(dPhi);
692  ugmtEMTFMuMuDR->Fill(dR);
693  }
694  }
695  }
696  }
697 
698  // barrel-overlap muon correlations
699  int firstBxBO = (BMTFBxCollection->getFirstBX() < OMTFBxCollection->getFirstBX()) ? OMTFBxCollection->getFirstBX() : BMTFBxCollection->getFirstBX();
700  int lastBxBO = (BMTFBxCollection->getLastBX() > OMTFBxCollection->getLastBX()) ? OMTFBxCollection->getLastBX() : BMTFBxCollection->getLastBX();
701  for (int itBX = firstBxBO; itBX <= lastBxBO; ++itBX) {
702  if (BMTFBxCollection->size(itBX) < 1 || OMTFBxCollection->size(itBX) < 1) {
703  continue;
704  }
705  for (l1t::RegionalMuonCandBxCollection::const_iterator BMTF = BMTFBxCollection->begin(itBX); BMTF != BMTFBxCollection->end(itBX); ++BMTF) {
706  int global_hw_phi_bmtf = l1t::MicroGMTConfiguration::calcGlobalPhi(BMTF->hwPhi(), BMTF->trackFinderType(), BMTF->processor());
707 
708  for (l1t::RegionalMuonCandBxCollection::const_iterator OMTF = OMTFBxCollection->begin(itBX); OMTF != OMTFBxCollection->end(itBX); ++OMTF) {
709  int global_hw_phi_omtf = l1t::MicroGMTConfiguration::calcGlobalPhi(OMTF->hwPhi(), OMTF->trackFinderType(), OMTF->processor());
710  float dEta = (BMTF->hwEta() - OMTF->hwEta()) * etaScale_;
711  float dPhi = (global_hw_phi_bmtf - global_hw_phi_omtf) * phiScale_;
712  float dR = sqrt(dEta*dEta + dPhi*dPhi);
713  if (OMTF->trackFinderType() == l1t::omtf_neg) {
714  ugmtBOMTFnegMuMuDEta->Fill(dEta);
715  ugmtBOMTFnegMuMuDPhi->Fill(dPhi);
717  } else {
718  ugmtBOMTFposMuMuDEta->Fill(dEta);
719  ugmtBOMTFposMuMuDPhi->Fill(dPhi);
721  }
722  }
723  }
724  }
725 
726  // endcap-overlap muon correlations
727  int firstBxEO = (EMTFBxCollection->getFirstBX() < OMTFBxCollection->getFirstBX()) ? OMTFBxCollection->getFirstBX() : EMTFBxCollection->getFirstBX();
728  int lastBxEO = (EMTFBxCollection->getLastBX() > OMTFBxCollection->getLastBX()) ? OMTFBxCollection->getLastBX() : EMTFBxCollection->getLastBX();
729  for (int itBX = firstBxEO; itBX <= lastBxEO; ++itBX) {
730  if (EMTFBxCollection->size(itBX) < 1 || OMTFBxCollection->size(itBX) < 1) {
731  continue;
732  }
733  for (l1t::RegionalMuonCandBxCollection::const_iterator EMTF = EMTFBxCollection->begin(itBX); EMTF != EMTFBxCollection->end(itBX); ++EMTF) {
734  int global_hw_phi_emtf = l1t::MicroGMTConfiguration::calcGlobalPhi(EMTF->hwPhi(), EMTF->trackFinderType(), EMTF->processor());
735 
736  for (l1t::RegionalMuonCandBxCollection::const_iterator OMTF = OMTFBxCollection->begin(itBX); OMTF != OMTFBxCollection->end(itBX); ++OMTF) {
737  int global_hw_phi_omtf = l1t::MicroGMTConfiguration::calcGlobalPhi(OMTF->hwPhi(), OMTF->trackFinderType(), OMTF->processor());
738  float dEta = (EMTF->hwEta() - OMTF->hwEta()) * etaScale_;
739  float dPhi = (global_hw_phi_emtf - global_hw_phi_omtf) * phiScale_;
740  float dR = sqrt(dEta*dEta + dPhi*dPhi);
741  if (EMTF->trackFinderType() == l1t::emtf_neg && OMTF->trackFinderType() == l1t::omtf_neg) {
742  ugmtEOMTFnegMuMuDEta->Fill(dEta);
743  ugmtEOMTFnegMuMuDPhi->Fill(dPhi);
745  } else if (EMTF->trackFinderType() == l1t::emtf_pos && OMTF->trackFinderType() == l1t::omtf_pos) {
746  ugmtEOMTFposMuMuDEta->Fill(dEta);
747  ugmtEOMTFposMuMuDPhi->Fill(dPhi);
749  }
750  }
751  }
752  }
753  }
754 
756  e.getByToken(ugmtMuonToken, MuonBxCollection);
757 
758  ugmtnMuons->Fill(MuonBxCollection->size(0));
759 
760  for (int itBX = MuonBxCollection->getFirstBX(); itBX <= MuonBxCollection->getLastBX(); ++itBX) {
761  for (l1t::MuonBxCollection::const_iterator Muon = MuonBxCollection->begin(itBX); Muon != MuonBxCollection->end(itBX); ++Muon) {
762 
763  int tfMuonIndex = Muon->tfMuonIndex();
764 
765  ugmtMuonBX->Fill(itBX);
766  ugmtMuonIndex->Fill(tfMuonIndex);
767  ugmtMuonhwPt->Fill(Muon->hwPt());
768  ugmtMuonhwEta->Fill(Muon->hwEta());
769  ugmtMuonhwPhi->Fill(Muon->hwPhi());
770  ugmtMuonhwEtaAtVtx->Fill(Muon->hwEtaAtVtx());
771  ugmtMuonhwPhiAtVtx->Fill(Muon->hwPhiAtVtx());
772  ugmtMuonhwCharge->Fill(Muon->hwCharge());
773  ugmtMuonhwChargeValid->Fill(Muon->hwChargeValid());
774  ugmtMuonhwQual->Fill(Muon->hwQual());
775  ugmtMuonhwIso->Fill(Muon->hwIso());
776 
777  ugmtMuonPt->Fill(Muon->pt());
778  ugmtMuonEta->Fill(Muon->eta());
779  ugmtMuonPhi->Fill(Muon->phi());
780  ugmtMuonEtaAtVtx->Fill(Muon->etaAtVtx());
781  ugmtMuonPhiAtVtx->Fill(Muon->phiAtVtx());
782  ugmtMuonCharge->Fill(Muon->charge());
783 
784  l1t::tftype tfType{getTfOrigin(tfMuonIndex)};
785  if (tfType == l1t::emtf_pos || tfType == l1t::emtf_neg) {
786  ugmtMuonPhiEmtf->Fill(Muon->phi());
787  ugmtMuonDEtavsPtEmtf->Fill(Muon->pt(), Muon->hwDEtaExtra()*etaScale_);
788  ugmtMuonDPhivsPtEmtf->Fill(Muon->pt(), Muon->hwDPhiExtra()*phiScale_);
789  } else if (tfType == l1t::omtf_pos || tfType == l1t::omtf_neg) {
790  ugmtMuonPhiOmtf->Fill(Muon->phi());
791  ugmtMuonDEtavsPtOmtf->Fill(Muon->pt(), Muon->hwDEtaExtra()*etaScale_);
792  ugmtMuonDPhivsPtOmtf->Fill(Muon->pt(), Muon->hwDPhiExtra()*phiScale_);
793  } else if (tfType == l1t::bmtf) {
794  ugmtMuonPhiBmtf->Fill(Muon->phi());
795  ugmtMuonDEtavsPtBmtf->Fill(Muon->pt(), Muon->hwDEtaExtra()*etaScale_);
796  ugmtMuonDPhivsPtBmtf->Fill(Muon->pt(), Muon->hwDPhiExtra()*phiScale_);
797  }
798 
799  ugmtMuonPtvsEta->Fill(Muon->eta(), Muon->pt());
800  ugmtMuonPtvsPhi->Fill(Muon->phi(), Muon->pt());
801  ugmtMuonPhivsEta->Fill(Muon->eta(), Muon->phi());
802 
803  ugmtMuonPhiAtVtxvsEtaAtVtx->Fill(Muon->etaAtVtx(), Muon->phiAtVtx());
804 
805  ugmtMuonBXvsLink->Fill(int(Muon->tfMuonIndex()/3.) + 36, itBX);
806  ugmtMuonBXvshwPt->Fill(Muon->hwPt(), itBX);
807  ugmtMuonBXvshwEta->Fill(Muon->hwEta(), itBX);
808  ugmtMuonBXvshwPhi->Fill(Muon->hwPhi(), itBX);
809  ugmtMuonBXvshwCharge->Fill(Muon->hwCharge(), itBX);
810  ugmtMuonBXvshwChargeValid->Fill(Muon->hwChargeValid(), itBX);
811  ugmtMuonBXvshwQual->Fill(Muon->hwQual(), itBX);
812  ugmtMuonBXvshwIso->Fill(Muon->hwIso(), itBX);
813  ugmtMuonChargevsLink->Fill(int(Muon->tfMuonIndex()/3.) + 36, Muon->charge());
814 
815  int link = (int)std::floor(tfMuonIndex / 3.);
816  reco::Candidate::PolarLorentzVector mu1{Muon->pt(), Muon->eta(), Muon->phi(), 0.106};
817  reco::Candidate::PolarLorentzVector muAtVtx1{Muon->pt(), Muon->etaAtVtx(), Muon->phiAtVtx(), 0.106};
818 
819  // Analyse multi muon events
820  for (l1t::MuonBxCollection::const_iterator Muon2 = Muon+1; Muon2 != MuonBxCollection->end(itBX); ++Muon2) {
821  reco::Candidate::PolarLorentzVector mu2{Muon2->pt(), Muon2->eta(), Muon2->phi(), 0.106};
822  reco::Candidate::PolarLorentzVector muAtVtx2{Muon2->pt(), Muon2->etaAtVtx(), Muon2->phiAtVtx(), 0.106};
823  ugmtMuMuInvMass->Fill((mu1 + mu2).M());
824  ugmtMuMuInvMassAtVtx->Fill((muAtVtx1 + muAtVtx2).M());
825 
826  float dEta = Muon->eta() - Muon2->eta();
827  float dPhi = Muon->phi() - Muon2->phi();
828  float dR = sqrt(dEta*dEta + dPhi*dPhi);
829  ugmtMuMuDEta->Fill(dEta);
830  ugmtMuMuDPhi->Fill(dPhi);
831  ugmtMuMuDR->Fill(dR);
832 
833  // muon distances between muons from different TFs and from different wedges/sectors of one TF
834  int link2 = (int)std::floor(Muon2->tfMuonIndex() / 3.);
835  l1t::tftype tfType2{getTfOrigin(Muon2->tfMuonIndex())};
836  if ((tfType == l1t::bmtf && tfType2 == l1t::omtf_pos) || (tfType == l1t::omtf_pos && tfType2 == l1t::bmtf)) {
837  ugmtMuMuDEtaBOpos->Fill(dEta);
838  ugmtMuMuDPhiBOpos->Fill(dPhi);
839  ugmtMuMuDRBOpos->Fill(dR);
840  } else if ((tfType == l1t::bmtf && tfType2 == l1t::omtf_neg) || (tfType == l1t::omtf_neg && tfType2 == l1t::bmtf)) {
841  ugmtMuMuDEtaBOneg->Fill(dEta);
842  ugmtMuMuDPhiBOneg->Fill(dPhi);
843  ugmtMuMuDRBOneg->Fill(dR);
844  } else if ((tfType == l1t::emtf_pos && tfType2 == l1t::omtf_pos) || (tfType == l1t::omtf_pos && tfType2 == l1t::emtf_pos)) {
845  ugmtMuMuDEtaEOpos->Fill(dEta);
846  ugmtMuMuDPhiEOpos->Fill(dPhi);
847  ugmtMuMuDREOpos->Fill(dR);
848  } else if ((tfType == l1t::emtf_neg && tfType2 == l1t::omtf_neg) || (tfType == l1t::omtf_neg && tfType2 == l1t::emtf_neg)) {
849  ugmtMuMuDEtaEOneg->Fill(dEta);
850  ugmtMuMuDPhiEOneg->Fill(dPhi);
851  ugmtMuMuDREOneg->Fill(dR);
852  } else if (tfType == l1t::bmtf && tfType2 == l1t::bmtf) {
853  if (std::abs(link - link2) == 1 || (std::abs(link - link2) == 11)) { // two adjacent wedges and wrap around
854  ugmtMuMuDEtaB->Fill(dEta);
855  ugmtMuMuDPhiB->Fill(dPhi);
856  ugmtMuMuDRB->Fill(dR);
857  }
858  } else if (tfType == l1t::omtf_pos && tfType2 == l1t::omtf_pos) {
859  if (std::abs(link - link2) == 1 || (std::abs(link - link2) == 5)) { // two adjacent sectors and wrap around
860  ugmtMuMuDEtaOpos->Fill(dEta);
861  ugmtMuMuDPhiOpos->Fill(dPhi);
862  ugmtMuMuDROpos->Fill(dR);
863  }
864  } else if (tfType == l1t::omtf_neg && tfType2 == l1t::omtf_neg) {
865  if (std::abs(link - link2) == 1 || (std::abs(link - link2) == 5)) { // two adjacent sectors and wrap around
866  ugmtMuMuDEtaOneg->Fill(dEta);
867  ugmtMuMuDPhiOneg->Fill(dPhi);
868  ugmtMuMuDROneg->Fill(dR);
869  }
870  } else if (tfType == l1t::emtf_pos && tfType2 == l1t::emtf_pos) {
871  if (std::abs(link - link2) == 1 || (std::abs(link - link2) == 5)) { // two adjacent sectors and wrap around
872  ugmtMuMuDEtaEpos->Fill(dEta);
873  ugmtMuMuDPhiEpos->Fill(dPhi);
874  ugmtMuMuDREpos->Fill(dR);
875  }
876  } else if (tfType == l1t::emtf_neg && tfType2 == l1t::emtf_neg) {
877  if (std::abs(link - link2) == 1 || (std::abs(link - link2) == 5)) { // two adjacent sectors and wrap around
878  ugmtMuMuDEtaEneg->Fill(dEta);
879  ugmtMuMuDPhiEneg->Fill(dPhi);
880  ugmtMuMuDREneg->Fill(dR);
881  }
882  }
883  }
884  }
885  }
886 }
887 
889 {
890  if (tfMuonIndex >= 0 && tfMuonIndex <=17) {
891  return l1t::emtf_pos;
892  } else if (tfMuonIndex >= 90 && tfMuonIndex <=107) {
893  return l1t::emtf_neg;
894  } else if (tfMuonIndex >= 18 && tfMuonIndex <=35) {
895  return l1t::omtf_pos;
896  } else if (tfMuonIndex >= 72 && tfMuonIndex <=89) {
897  return l1t::omtf_neg;
898  } else {
899  return l1t::bmtf;
900  }
901 }
902 
MonitorElement * ugmtMuMuDEtaEpos
MonitorElement * ugmtMuonhwIso
MonitorElement * ugmtMuonPhi
const_iterator end(int bx) const
MonitorElement * ugmtOMTFhwPhiPos
Definition: L1TStage2uGMT.h:67
MonitorElement * ugmtMuonPhiOmtf
MonitorElement * ugmtBMTFProcvshwPhi
Definition: L1TStage2uGMT.h:54
T getParameter(std::string const &) const
MonitorElement * ugmtMuonBX
const float etaScale_
Definition: L1TStage2uGMT.h:45
MonitorElement * ugmtOMTFMuMuDR
Definition: L1TStage2uGMT.h:79
MonitorElement * ugmtMuonEta
MonitorElement * ugmtEOMTFnegMuMuDR
MonitorElement * ugmtMuMuDREneg
MonitorElement * ugmtBMTFnMuons
Definition: L1TStage2uGMT.h:49
MonitorElement * ugmtBMTFMuMuDR
Definition: L1TStage2uGMT.h:61
MonitorElement * ugmtMuonBXvshwCharge
unsigned size(int bx) const
MonitorElement * ugmtOMTFBX
Definition: L1TStage2uGMT.h:63
MonitorElement * ugmtEMTFnMuons
Definition: L1TStage2uGMT.h:82
MonitorElement * ugmtOMTFhwSignValid
Definition: L1TStage2uGMT.h:74
MonitorElement * ugmtMuonhwCharge
MonitorElement * ugmtMuMuDEtaBOneg
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
MonitorElement * ugmtEOMTFposMuMuDEta
MonitorElement * ugmtEMTFhwPhiNeg
Definition: L1TStage2uGMT.h:86
void bookHistograms(DQMStore::IBooker &, const edm::Run &, const edm::EventSetup &) override
MonitorElement * ugmtBMTFhwEta
Definition: L1TStage2uGMT.h:51
MonitorElement * ugmtBMTFMuMuDPhi
Definition: L1TStage2uGMT.h:60
MonitorElement * ugmtEMTFhwPt
Definition: L1TStage2uGMT.h:83
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
MonitorElement * ugmtBMTFlink
Definition: L1TStage2uGMT.h:58
MonitorElement * ugmtMuMuDROpos
MonitorElement * ugmtMuonPhiEmtf
MonitorElement * ugmtEOMTFposMuMuDR
MonitorElement * ugmtMuMuDEtaBOpos
const float phiScale_
Definition: L1TStage2uGMT.h:46
MonitorElement * ugmtEMTFProcvshwPhiPos
Definition: L1TStage2uGMT.h:89
MonitorElement * ugmtMuonhwPhiAtVtx
MonitorElement * ugmtMuMuDPhiBOneg
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
MonitorElement * ugmtEMTFMuMuDR
Definition: L1TStage2uGMT.h:97
MonitorElement * ugmtEMTFProcvshwPhiNeg
Definition: L1TStage2uGMT.h:90
MonitorElement * ugmtMuMuDPhiOneg
MonitorElement * ugmtEOMTFnegMuMuDEta
MonitorElement * ugmtBMTFglbPhi
Definition: L1TStage2uGMT.h:53
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
MonitorElement * ugmtMuonhwQual
MonitorElement * ugmtMuMuDRBOpos
MonitorElement * ugmtMuonBXvsLink
MonitorElement * ugmtMuonPt
MonitorElement * ugmtBOMTFposMuMuDR
MonitorElement * ugmtMuMuDPhiEpos
delete x;
Definition: CaloConfig.h:22
MonitorElement * ugmtBOMTFnegMuMuDPhi
MonitorElement * ugmtBOMTFnegMuMuDEta
MonitorElement * ugmtOMTFBXvsProcessor
MonitorElement * ugmtEMTFBX
Definition: L1TStage2uGMT.h:81
std::string monitorDir
Definition: L1TStage2uGMT.h:41
MonitorElement * ugmtMuonDPhivsPtOmtf
MonitorElement * ugmtMuonPtvsPhi
MonitorElement * ugmtMuonBXvshwPt
MonitorElement * ugmtMuonPhiBmtf
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * ugmtMuonhwChargeValid
MonitorElement * ugmtMuMuDROneg
MonitorElement * ugmtBMTFBX
Definition: L1TStage2uGMT.h:48
MonitorElement * ugmtEMTFglbPhiPos
Definition: L1TStage2uGMT.h:87
MonitorElement * ugmtOMTFglbPhiNeg
Definition: L1TStage2uGMT.h:70
MonitorElement * ugmtOMTFMuMuDPhi
Definition: L1TStage2uGMT.h:78
~L1TStage2uGMT() override
MonitorElement * ugmtMuMuDEtaEOpos
MonitorElement * ugmtMuMuDREOneg
void Fill(long long x)
MonitorElement * ugmtEMTFMuMuDPhi
Definition: L1TStage2uGMT.h:96
MonitorElement * ugmtMuonDPhivsPtEmtf
MonitorElement * ugmtEOMTFnegMuMuDPhi
MonitorElement * ugmtMuMuDEtaB
MonitorElement * ugmtnMuons
MonitorElement * ugmtEOMTFposMuMuDPhi
MonitorElement * ugmtBMTFhwSignValid
Definition: L1TStage2uGMT.h:56
MonitorElement * ugmtMuonCharge
MonitorElement * ugmtMuMuDR
MonitorElement * ugmtOMTFhwPhiNeg
Definition: L1TStage2uGMT.h:68
MonitorElement * ugmtBOMTFnegMuMuDR
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
MonitorElement * ugmtMuonChargevsLink
MonitorElement * ugmtMuMuInvMassAtVtx
MonitorElement * ugmtEMTFBXvsProcessor
Definition: Muon.py:1
MonitorElement * ugmtMuonPtvsEta
MonitorElement * ugmtMuMuDPhiEOneg
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * ugmtMuMuDEtaOpos
MonitorElement * ugmtMuonPhiAtVtx
MonitorElement * ugmtMuonEtaAtVtx
MonitorElement * ugmtEMTFhwPhiPos
Definition: L1TStage2uGMT.h:85
MonitorElement * ugmtMuMuDEtaEOneg
edm::EDGetTokenT< l1t::RegionalMuonCandBxCollection > ugmtEMTFToken
Definition: L1TStage2uGMT.h:39
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
MonitorElement * ugmtMuMuDEta
MonitorElement * ugmtMuMuDPhiOpos
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
MonitorElement * ugmtMuonIndex
MonitorElement * ugmtMuMuInvMass
MonitorElement * ugmtMuonBXvshwPhi
MonitorElement * ugmtMuonhwEta
MonitorElement * ugmtMuMuDEtaEneg
ParameterDescriptionBase * add(U const &iLabel, T const &value)
L1TStage2uGMT(const edm::ParameterSet &ps)
Definition: L1TStage2uGMT.cc:4
MonitorElement * ugmtMuonDPhivsPtBmtf
MonitorElement * ugmtMuMuDPhiEOpos
MonitorElement * ugmtBOMTFposMuMuDPhi
MonitorElement * ugmtMuonhwPt
MonitorElement * ugmtEMTFglbPhiNeg
Definition: L1TStage2uGMT.h:88
MonitorElement * ugmtOMTFProcvshwPhiNeg
Definition: L1TStage2uGMT.h:72
bin
set the eta bin as selection string.
MonitorElement * ugmtBMTFhwPhi
Definition: L1TStage2uGMT.h:52
MonitorElement * ugmtMuonDEtavsPtOmtf
MonitorElement * ugmtOMTFMuMuDEta
Definition: L1TStage2uGMT.h:77
MonitorElement * ugmtMuMuDPhiBOpos
MonitorElement * ugmtBMTFhwPt
Definition: L1TStage2uGMT.h:50
BXVector< Muon > MuonBxCollection
Definition: Muon.h:11
edm::EDGetTokenT< l1t::RegionalMuonCandBxCollection > ugmtBMTFToken
Definition: L1TStage2uGMT.h:37
static int calcGlobalPhi(int locPhi, tftype t, int proc)
edm::EDGetTokenT< l1t::MuonBxCollection > ugmtMuonToken
Definition: L1TStage2uGMT.h:40
MonitorElement * ugmtMuMuDPhiB
int getFirstBX() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
MonitorElement * ugmtMuonDEtavsPtBmtf
MonitorElement * ugmtOMTFglbPhiPos
Definition: L1TStage2uGMT.h:69
MonitorElement * ugmtMuMuDRBOneg
MonitorElement * ugmtMuonhwPhi
MonitorElement * ugmtMuMuDREpos
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
MonitorElement * ugmtBMTFhwQual
Definition: L1TStage2uGMT.h:57
MonitorElement * ugmtMuMuDEtaOneg
MonitorElement * ugmtMuonBXvshwIso
MonitorElement * ugmtBXvsLink
MonitorElement * ugmtOMTFnMuons
Definition: L1TStage2uGMT.h:64
MonitorElement * ugmtBMTFMuMuDEta
Definition: L1TStage2uGMT.h:59
void add(std::string const &label, ParameterSetDescription const &psetDescription)
MonitorElement * ugmtMuonhwEtaAtVtx
MonitorElement * ugmtEMTFMuMuDEta
Definition: L1TStage2uGMT.h:95
MonitorElement * ugmtOMTFProcvshwPhiPos
Definition: L1TStage2uGMT.h:71
MonitorElement * ugmtMuonBXvshwEta
MonitorElement * ugmtEMTFhwSign
Definition: L1TStage2uGMT.h:91
HLT enums.
MonitorElement * ugmtEMTFhwSignValid
Definition: L1TStage2uGMT.h:92
MonitorElement * ugmtBMTFhwSign
Definition: L1TStage2uGMT.h:55
MonitorElement * ugmtEMTFlink
Definition: L1TStage2uGMT.h:94
edm::EDGetTokenT< l1t::RegionalMuonCandBxCollection > ugmtOMTFToken
Definition: L1TStage2uGMT.h:38
MonitorElement * ugmtMuMuDREOpos
int getLastBX() const
MonitorElement * ugmtMuonBXvshwQual
MonitorElement * ugmtEMTFhwQual
Definition: L1TStage2uGMT.h:93
MonitorElement * ugmtOMTFhwEta
Definition: L1TStage2uGMT.h:66
MonitorElement * ugmtMuonDEtavsPtEmtf
MonitorElement * ugmtMuMuDPhiEneg
MonitorElement * ugmtMuonPhiAtVtxvsEtaAtVtx
MonitorElement * ugmtEMTFhwEta
Definition: L1TStage2uGMT.h:84
l1t::tftype getTfOrigin(const int tfMuonIndex)
MonitorElement * ugmtMuonBXvshwChargeValid
MonitorElement * ugmtBOMTFposMuMuDEta
Definition: L1TStage2uGMT.h:99
MonitorElement * ugmtMuMuDPhi
MonitorElement * ugmtOMTFlink
Definition: L1TStage2uGMT.h:76
MonitorElement * ugmtOMTFhwQual
Definition: L1TStage2uGMT.h:75
const_iterator begin(int bx) const
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * ugmtOMTFhwSign
Definition: L1TStage2uGMT.h:73
MonitorElement * ugmtBMTFBXvsProcessor
Definition: Run.h:45
std::vector< RegionalMuonCand >::const_iterator const_iterator
Definition: BXVector.h:20
MonitorElement * ugmtOMTFhwPt
Definition: L1TStage2uGMT.h:65
MonitorElement * ugmtMuMuDRB
MonitorElement * ugmtMuonPhivsEta
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:39