26 template <
typename T,
size_t N>
27 std::array<T, N+1> makeLogBins(
const double min,
const double max) {
28 const double minLog10 = std::log10(min);
29 const double maxLog10 = std::log10(max);
30 const double width = (maxLog10-minLog10)/
N;
31 std::array<T, N+1>
ret;
32 for(
size_t i=0;
i<=
N; ++
i) {
44 : verbose_(iConfig.getUntrackedParameter<bool>(
"verbose",
false)),
45 use_only_charged_tracks_(iConfig.getUntrackedParameter<bool>(
46 "use_only_charged_tracks",
true)),
47 do_generic_sim_plots_(iConfig.getUntrackedParameter<bool>(
"do_generic_sim_plots")),
49 iConfig.getUntrackedParameter<std::
string>(
"root_folder",
50 "Validation/Vertices")),
54 iConfig.getUntrackedParameter<edm::
InputTag>(
"trackingParticleCollection"))),
56 iConfig.getUntrackedParameter<edm::
InputTag>(
"trackingVertexCollection"))),
58 iConfig.getUntrackedParameter<edm::
InputTag>(
"trackAssociatorMap"))),
60 iConfig.getUntrackedParameter<edm::
InputTag>(
"trackAssociatorMap"))),
61 vertexAssociatorToken_(consumes<
reco::VertexToTrackingVertexAssociator>(
62 iConfig.getUntrackedParameter<edm::
InputTag>(
"vertexAssociator"))) {
64 "vertexRecoCollections");
82 float log_bins[31] = {
83 0.0, 0.0002, 0.0004, 0.0006, 0.0008, 0.001, 0.002,
84 0.004, 0.006, 0.008, 0.01, 0.02,
85 0.04, 0.06, 0.08, 0.1, 0.2,
86 0.4, 0.6, 0.8, 1.0, 2.0,
87 4.0, 6.0, 8.0, 10.0, 20.0,
88 40.0, 60.0, 80.0, 100.0
90 float log_mergez_bins[18] = {
91 0.0, 0.0025, 0.005, 0.0075, 0.01, 0.025, 0.05, 0.075, 0.1,
92 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
95 auto const log_pt_bins = makeLogBins<float, 100>(0.1, 1e4);
96 float log_pt2_bins[16] = {
101 1000.0, 2000.0, 5000.0,10000.0
103 float log_ntrk_bins[25] = {
104 0., 2.0, 4.0, 6.0, 8.0, 10.,
105 12.0, 14.0, 16.0, 18.0, 22.0,
106 26.0, 30.0, 35.0, 40.0,
107 45.0, 50.0, 55.0, 60.0, 70.0,
108 80.0, 90.0, 100.0, 150.0, 200.0
115 double log_pt2_bins_double[16] = {
120 1000.0, 2000.0, 5000.0,10000.0
125 mes_[
"root_folder"][
"GenVtx_vs_BX"] =
126 i.
book2D(
"GenVtx_vs_BX",
"GenVtx_vs_BX", 16, -12.5, 3.5, 200, 0., 200.);
128 mes_[
"root_folder"][
"GenPV_X"] =
129 i.
book1D(
"GenPV_X",
"GeneratedPV_X", 120, -0.6, 0.6);
130 mes_[
"root_folder"][
"GenPV_Y"] =
131 i.
book1D(
"GenPV_Y",
"GeneratedPV_Y", 120, -0.6, 0.6);
132 mes_[
"root_folder"][
"GenPV_Z"] =
133 i.
book1D(
"GenPV_Z",
"GeneratedPV_Z", 120, -60., 60.);
134 mes_[
"root_folder"][
"GenPV_R"] =
135 i.
book1D(
"GenPV_R",
"GeneratedPV_R", 120, 0, 0.6);
136 mes_[
"root_folder"][
"GenPV_Pt2"] =
137 i.
book1D(
"GenPV_Pt2",
"GeneratedPV_Sum-pt2", 15, &log_pt2_bins[0]);
138 mes_[
"root_folder"][
"GenPV_NumTracks"] =
139 i.
book1D(
"GenPV_NumTracks",
"GeneratedPV_NumTracks", 24, &log_ntrk_bins[0]);
140 mes_[
"root_folder"][
"GenPV_ClosestDistanceZ"] =
141 i.
book1D(
"GenPV_ClosestDistanceZ",
"GeneratedPV_ClosestDistanceZ", 30,
145 mes_[
"root_folder"][
"GenAllV_NumVertices"] = i.
book1D(
146 "GenAllV_NumVertices",
"GeneratedAllV_NumVertices", 100, 0., 200.);
147 mes_[
"root_folder"][
"GenAllV_X"] =
148 i.
book1D(
"GenAllV_X",
"GeneratedAllV_X", 120, -0.6, 0.6);
149 mes_[
"root_folder"][
"GenAllV_Y"] =
150 i.
book1D(
"GenAllV_Y",
"GeneratedAllV_Y", 120, -0.6, 0.6);
151 mes_[
"root_folder"][
"GenAllV_Z"] =
152 i.
book1D(
"GenAllV_Z",
"GeneratedAllV_Z", 120, -60, 60);
153 mes_[
"root_folder"][
"GenAllV_R"] =
154 i.
book1D(
"GenAllV_R",
"GeneratedAllV_R", 120, 0, 0.6);
155 mes_[
"root_folder"][
"GenAllV_Pt2"] =
156 i.
book1D(
"GenAllV_Pt2",
"GeneratedAllV_Sum-pt2", 15, &log_pt2_bins[0]);
157 mes_[
"root_folder"][
"GenAllV_NumTracks"] =
158 i.
book1D(
"GenAllV_NumTracks",
"GeneratedAllV_NumTracks", 24, &log_ntrk_bins[0]);
159 mes_[
"root_folder"][
"GenAllV_ClosestDistanceZ"] =
160 i.
book1D(
"GenAllV_ClosestDistanceZ",
"GeneratedAllV_ClosestDistanceZ", 30,
162 mes_[
"root_folder"][
"GenAllV_PairDistanceZ"] =
163 i.
book1D(
"GenAllV_PairDistanceZ",
"GeneratedAllV_PairDistanceZ",
165 mes_[
"root_folder"][
"SignalIsHighestPt2"] =
166 i.
book1D(
"SignalIsHighestPt2",
"SignalIsHighestPt2", 2, -0.5, 1.5);
174 auto book1d = [&](
const char *
name,
int bins,
double min,
double max) {
177 auto book1dlogx = [&](
const char *
name,
int bins,
const float *xbinedges) {
180 auto book2d = [&](
const char *
name,
182 int ybins,
double ymin,
double ymax) {
185 auto book2dlogx = [&](
const char *
name,
186 int xbins,
const float *xbinedges,
187 int ybins,
double ymin,
double ymax) {
188 auto me = i.
book2D(name, name, xbins,xbinedges[0],xbinedges[xbins], ybins,ymin,
ymax);
189 me->getTH2F()->GetXaxis()->Set(xbins, xbinedges);
195 "RecoVtx_vs_GenVtx",
"RecoVtx_vs_GenVtx", 125, 0., 250., 250, 0., 250.);
196 mes_[
label][
"MatchedRecoVtx_vs_GenVtx"] =
197 i.
bookProfile(
"MatchedRecoVtx_vs_GenVtx",
"MatchedRecoVtx_vs_GenVtx",
198 125, 0., 250., 250, 0., 250.);
200 i.
book1D(
"KindOfSignalPV",
"KindOfSignalPV", 9, -0.5, 8.5);
201 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(1,
"!Highest!Assoc2Any");
202 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(2,
"Highest!Assoc2Any");
203 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(3,
"!HighestAssoc2First");
204 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(4,
"HighestAssoc2First");
205 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(5,
"!HighestAssoc2!First");
206 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(6,
"HighestAssoc2!First");
207 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(7,
"!HighestAssoc2First");
208 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(8,
"HighestAssoc2First");
210 i.
book1D(
"MisTagRate",
"MisTagRate", 2, -0.5, 1.5);
212 i.
bookProfile(
"MisTagRate_vs_PU",
"MisTagRate_vs_PU", 125, 0., 250.,
215 i.
bookProfile(
"MisTagRate_vs_sum-pt2",
"MisTagRate_vs_sum-pt2",
216 15, &log_pt2_bins_double[0], 2, 0., 1.);
218 i.
bookProfile(
"MisTagRate_vs_Z",
"MisTagRate_vs_Z",
219 120, -60., 60., 2, 0., 1.);
221 i.
bookProfile(
"MisTagRate_vs_R",
"MisTagRate_vs_R",
222 120, 0., 0.6, 2, 0., 1.);
224 i.
bookProfile(
"MisTagRate_vs_NumTracks",
"MisTagRate_vs_NumTracks",
225 100, 0., 200, 2, 0., 1.);
226 mes_[
label][
"MisTagRateSignalIsHighest"] =
227 i.
book1D(
"MisTagRateSignalIsHighest",
228 "MisTagRateSignalIsHighest", 2, -0.5, 1.5);
229 mes_[
label][
"MisTagRateSignalIsHighest_vs_PU"] =
231 "MisTagRateSignalIsHighest_vs_PU", 125, 0., 250.,
233 mes_[
label][
"MisTagRateSignalIsHighest_vs_sum-pt2"] =
234 i.
bookProfile(
"MisTagRateSignalIsHighest_vs_sum-pt2",
235 "MisTagRateSignalIsHighest_vs_sum-pt2",
236 15, &log_pt2_bins_double[0], 2, 0., 1.);
237 mes_[
label][
"MisTagRateSignalIsHighest_vs_Z"] =
239 "MisTagRateSignalIsHighest_vs_Z",
240 120, -60., 60., 2, 0., 1.);
241 mes_[
label][
"MisTagRateSignalIsHighest_vs_R"] =
243 "MisTagRateSignalIsHighest_vs_R",
244 120, 0., 0.6, 2, 0., 1.);
245 mes_[
label][
"MisTagRateSignalIsHighest_vs_NumTracks"] =
246 i.
bookProfile(
"MisTagRateSignalIsHighest_vs_NumTracks",
247 "MisTagRateSignalIsHighest_vs_NumTracks",
248 100, 0., 200, 2, 0., 1.);
249 mes_[
label][
"MisTagRateSignalIsNotHighest"] =
250 i.
book1D(
"MisTagRateSignalIsNotHighest",
251 "MisTagRateSignalIsNotHighest", 2, -0.5, 1.5);
252 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_PU"] =
253 i.
bookProfile(
"MisTagRateSignalIsNotHighest_vs_PU",
254 "MisTagRateSignalIsNotHighest_vs_PU", 125, 0., 250.,
256 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_sum-pt2"] =
257 i.
bookProfile(
"MisTagRateSignalIsNotHighest_vs_sum-pt2",
258 "MisTagRateSignalIsNotHighest_vs_sum-pt2",
259 15, &log_pt2_bins_double[0], 2, 0., 1.);
260 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_Z"] =
262 "MisTagRateSignalIsNotHighest_vs_Z",
263 120, -60., 60., 2, 0., 1.);
264 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_R"] =
266 "MisTagRateSignalIsNotHighest_vs_R",
267 120, 0., 0.6, 2, 0., 1.);
268 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_NumTracks"] =
269 i.
bookProfile(
"MisTagRateSignalIsNotHighest_vs_NumTracks",
270 "MisTagRateSignalIsNotHighest_vs_NumTracks",
271 100, 0., 200, 2, 0., 1.);
273 i.
book1D(
"TruePVLocationIndex",
274 "TruePVLocationIndexInRecoVertexCollection", 12, -1.5, 10.5);
275 mes_[
label][
"TruePVLocationIndexCumulative"] =
276 i.
book1D(
"TruePVLocationIndexCumulative",
277 "TruePVLocationIndexInRecoVertexCollectionCumulative",
279 mes_[
label][
"TruePVLocationIndexSignalIsHighest"] =
280 i.
book1D(
"TruePVLocationIndexSignalIsHighest",
281 "TruePVLocationIndexSignalIsHighestInRecoVertexCollection",
283 mes_[
label][
"TruePVLocationIndexSignalIsNotHighest"] =
284 i.
book1D(
"TruePVLocationIndexSignalIsNotHighest",
285 "TruePVLocationIndexSignalIsNotHighestInRecoVertexCollection",
290 mes_[
label][
"GenAllAssoc2Reco_NumVertices"] =
291 i.
book1D(
"GenAllAssoc2Reco_NumVertices",
292 "GeneratedAllAssoc2Reco_NumVertices", 100, 0., 200.);
294 "GenAllAssoc2Reco_X",
"GeneratedAllAssoc2Reco_X", 120, -0.6, 0.6);
296 "GenAllAssoc2Reco_Y",
"GeneratedAllAssoc2Reco_Y", 120, -0.6, 0.6);
298 "GenAllAssoc2Reco_Z",
"GeneratedAllAssoc2Reco_Z", 120, -60, 60);
300 i.
book1D(
"GenAllAssoc2Reco_R",
"GeneratedAllAssoc2Reco_R", 120, 0, 0.6);
302 i.
book1D(
"GenAllAssoc2Reco_Pt2",
"GeneratedAllAssoc2Reco_Sum-pt2", 15,
304 mes_[
label][
"GenAllAssoc2Reco_NumTracks"] =
305 i.
book1D(
"GenAllAssoc2Reco_NumTracks",
306 "GeneratedAllAssoc2Reco_NumTracks", 24, &log_ntrk_bins[0]);
307 mes_[
label][
"GenAllAssoc2Reco_ClosestDistanceZ"] =
308 i.
book1D(
"GenAllAssoc2Reco_ClosestDistanceZ",
309 "GeneratedAllAssoc2Reco_ClosestDistanceZ", 30, &log_bins[0]);
310 book1d(
"GenPVAssoc2RecoPV_X", 120, -0.6, 0.6);
311 book1d(
"GenPVAssoc2RecoPV_Y", 120, -0.6, 0.6);
312 book1d(
"GenPVAssoc2RecoPV_Z", 120, -60, 60);
316 mes_[
label][
"GenAllAssoc2RecoMatched_NumVertices"] =
317 i.
book1D(
"GenAllAssoc2RecoMatched_NumVertices",
318 "GeneratedAllAssoc2RecoMatched_NumVertices", 100, 0., 200.);
319 mes_[
label][
"GenAllAssoc2RecoMatched_X"] =
320 i.
book1D(
"GenAllAssoc2RecoMatched_X",
"GeneratedAllAssoc2RecoMatched_X",
322 mes_[
label][
"GenAllAssoc2RecoMatched_Y"] =
323 i.
book1D(
"GenAllAssoc2RecoMatched_Y",
"GeneratedAllAssoc2RecoMatched_Y",
325 mes_[
label][
"GenAllAssoc2RecoMatched_Z"] =
326 i.
book1D(
"GenAllAssoc2RecoMatched_Z",
"GeneratedAllAssoc2RecoMatched_Z",
328 mes_[
label][
"GenAllAssoc2RecoMatched_R"] =
329 i.
book1D(
"GenAllAssoc2RecoMatched_R",
"GeneratedAllAssoc2RecoMatched_R",
331 mes_[
label][
"GenAllAssoc2RecoMatched_Pt2"] =
332 i.
book1D(
"GenAllAssoc2RecoMatched_Pt2",
333 "GeneratedAllAssoc2RecoMatched_Sum-pt2", 15, &log_pt2_bins[0]);
334 mes_[
label][
"GenAllAssoc2RecoMatched_NumTracks"] =
335 i.
book1D(
"GenAllAssoc2RecoMatched_NumTracks",
336 "GeneratedAllAssoc2RecoMatched_NumTracks", 24, &log_ntrk_bins[0]);
338 "GenAllAssoc2RecoMatched_ClosestDistanceZ",
339 "GeneratedAllAssoc2RecoMatched_ClosestDistanceZ", 30, &log_bins[0]);
340 book1d(
"GenPVAssoc2RecoPVMatched_X", 120, -0.6, 0.6);
341 book1d(
"GenPVAssoc2RecoPVMatched_Y", 120, -0.6, 0.6);
342 book1d(
"GenPVAssoc2RecoPVMatched_Z", 120, -60, 60);
347 "GenAllAssoc2RecoMultiMatched_NumVertices",
348 "GeneratedAllAssoc2RecoMultiMatched_NumVertices", 100, 0., 200.);
349 mes_[
label][
"GenAllAssoc2RecoMultiMatched_X"] =
350 i.
book1D(
"GenAllAssoc2RecoMultiMatched_X",
351 "GeneratedAllAssoc2RecoMultiMatched_X", 120, -0.6, 0.6);
352 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Y"] =
353 i.
book1D(
"GenAllAssoc2RecoMultiMatched_Y",
354 "GeneratedAllAssoc2RecoMultiMatched_Y", 120, -0.6, 0.6);
355 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Z"] =
356 i.
book1D(
"GenAllAssoc2RecoMultiMatched_Z",
357 "GeneratedAllAssoc2RecoMultiMatched_Z", 120, -60, 60);
358 mes_[
label][
"GenAllAssoc2RecoMultiMatched_R"] =
359 i.
book1D(
"GenAllAssoc2RecoMultiMatched_R",
360 "GeneratedAllAssoc2RecoMultiMatched_R", 120, 0, 0.6);
361 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Pt2"] =
362 i.
book1D(
"GenAllAssoc2RecoMultiMatched_Pt2",
363 "GeneratedAllAssoc2RecoMultiMatched_Sum-pt2",
364 15, &log_pt2_bins[0]);
365 mes_[
label][
"GenAllAssoc2RecoMultiMatched_NumTracks"] =
366 i.
book1D(
"GenAllAssoc2RecoMultiMatched_NumTracks",
367 "GeneratedAllAssoc2RecoMultiMatched_NumTracks", 24, &log_ntrk_bins[0]);
368 mes_[
label][
"GenAllAssoc2RecoMultiMatched_ClosestDistanceZ"] = i.
book1D(
369 "GenAllAssoc2RecoMultiMatched_ClosestDistanceZ",
370 "GeneratedAllAssoc2RecoMultiMatched_ClosestDistanceZ",
374 mes_[
label][
"RecoAllAssoc2Gen_NumVertices"] =
375 i.
book1D(
"RecoAllAssoc2Gen_NumVertices",
376 "ReconstructedAllAssoc2Gen_NumVertices", 100, 0., 200.);
378 "RecoAllAssoc2Gen_X",
"ReconstructedAllAssoc2Gen_X", 120, -0.6, 0.6);
380 "RecoAllAssoc2Gen_Y",
"ReconstructedAllAssoc2Gen_Y", 120, -0.6, 0.6);
382 "RecoAllAssoc2Gen_Z",
"ReconstructedAllAssoc2Gen_Z", 120, -60, 60);
384 "RecoAllAssoc2Gen_R",
"ReconstructedAllAssoc2Gen_R", 120, 0, 0.6);
386 i.
book1D(
"RecoAllAssoc2Gen_Pt2",
"ReconstructedAllAssoc2Gen_Sum-pt2",
387 15, &log_pt2_bins[0]);
389 i.
book1D(
"RecoAllAssoc2Gen_Ndof",
390 "ReconstructedAllAssoc2Gen_Ndof", 120, 0., 240.);
391 mes_[
label][
"RecoAllAssoc2Gen_NumTracks"] =
392 i.
book1D(
"RecoAllAssoc2Gen_NumTracks",
393 "ReconstructedAllAssoc2Gen_NumTracks", 24, &log_ntrk_bins[0]);
395 i.
book1D(
"RecoAllAssoc2Gen_PU",
396 "ReconstructedAllAssoc2Gen_PU", 125, 0., 250.);
397 mes_[
label][
"RecoAllAssoc2Gen_ClosestDistanceZ"] =
398 i.
book1D(
"RecoAllAssoc2Gen_ClosestDistanceZ",
399 "ReconstructedAllAssoc2Gen_ClosestDistanceZ",
401 mes_[
label][
"RecoAllAssoc2GenProperties"] =
402 i.
book1D(
"RecoAllAssoc2GenProperties",
403 "ReconstructedAllAssoc2Gen_Properties", 8, -0.5, 7.5);
404 mes_[
label][
"RecoAllAssoc2Gen_PairDistanceZ"] =
405 i.
book1D(
"RecoAllAssoc2Gen_PairDistanceZ",
406 "RecoAllAssoc2Gen_PairDistanceZ", 1000, 0, 20);
410 mes_[
label][
"RecoAllAssoc2GenMatched_NumVertices"] =
411 i.
book1D(
"RecoAllAssoc2GenMatched_NumVertices",
412 "ReconstructedAllAssoc2GenMatched_NumVertices", 100, 0., 200.);
413 mes_[
label][
"RecoAllAssoc2GenMatched_X"] =
414 i.
book1D(
"RecoAllAssoc2GenMatched_X",
415 "ReconstructedAllAssoc2GenMatched_X", 120, -0.6, 0.6);
416 mes_[
label][
"RecoAllAssoc2GenMatched_Y"] =
417 i.
book1D(
"RecoAllAssoc2GenMatched_Y",
418 "ReconstructedAllAssoc2GenMatched_Y", 120, -0.6, 0.6);
419 mes_[
label][
"RecoAllAssoc2GenMatched_Z"] =
420 i.
book1D(
"RecoAllAssoc2GenMatched_Z",
421 "ReconstructedAllAssoc2GenMatched_Z", 120, -60, 60);
422 mes_[
label][
"RecoAllAssoc2GenMatched_R"] =
423 i.
book1D(
"RecoAllAssoc2GenMatched_R",
424 "ReconstructedAllAssoc2GenMatched_R", 120, 0, 0.6);
425 mes_[
label][
"RecoAllAssoc2GenMatched_Pt2"] =
426 i.
book1D(
"RecoAllAssoc2GenMatched_Pt2",
427 "ReconstructedAllAssoc2GenMatched_Sum-pt2",
428 15, &log_pt2_bins[0]);
429 mes_[
label][
"RecoAllAssoc2GenMatched_Ndof"] =
430 i.
book1D(
"RecoAllAssoc2GenMatched_Ndof",
431 "ReconstructedAllAssoc2GenMatched_Ndof", 120, 0., 240.);
432 mes_[
label][
"RecoAllAssoc2GenMatched_NumTracks"] =
433 i.
book1D(
"RecoAllAssoc2GenMatched_NumTracks",
434 "ReconstructedAllAssoc2GenMatched_NumTracks", 24, &log_ntrk_bins[0]);
435 mes_[
label][
"RecoAllAssoc2GenMatched_PU"] =
436 i.
book1D(
"RecoAllAssoc2GenMatched_PU",
437 "ReconstructedAllAssoc2GenMatched_PU", 125, 0., 250.);
439 "RecoAllAssoc2GenMatched_ClosestDistanceZ",
440 "ReconstructedAllAssoc2GenMatched_ClosestDistanceZ", 30, &log_bins[0]);
445 "RecoAllAssoc2GenMultiMatched_NumVertices",
446 "ReconstructedAllAssoc2GenMultiMatched_NumVertices", 100, 0., 200.);
447 mes_[
label][
"RecoAllAssoc2GenMultiMatched_X"] =
448 i.
book1D(
"RecoAllAssoc2GenMultiMatched_X",
449 "ReconstructedAllAssoc2GenMultiMatched_X", 120, -0.6, 0.6);
450 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Y"] =
451 i.
book1D(
"RecoAllAssoc2GenMultiMatched_Y",
452 "ReconstructedAllAssoc2GenMultiMatched_Y", 120, -0.6, 0.6);
453 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Z"] =
454 i.
book1D(
"RecoAllAssoc2GenMultiMatched_Z",
455 "ReconstructedAllAssoc2GenMultiMatched_Z", 120, -60, 60);
456 mes_[
label][
"RecoAllAssoc2GenMultiMatched_R"] =
457 i.
book1D(
"RecoAllAssoc2GenMultiMatched_R",
458 "ReconstructedAllAssoc2GenMultiMatched_R", 120, 0, 0.6);
460 "RecoAllAssoc2GenMultiMatched_Pt2",
461 "ReconstructedAllAssoc2GenMultiMatched_Sum-pt2", 15, &log_pt2_bins[0]);
463 "RecoAllAssoc2GenMultiMatched_NumTracks",
464 "ReconstructedAllAssoc2GenMultiMatched_NumTracks", 24, &log_ntrk_bins[0]);
465 mes_[
label][
"RecoAllAssoc2GenMultiMatched_PU"] =
466 i.
book1D(
"RecoAllAssoc2GenMultiMatched_PU",
467 "ReconstructedAllAssoc2GenMultiMatched_PU", 125, 0., 250.);
468 mes_[
label][
"RecoAllAssoc2GenMultiMatched_ClosestDistanceZ"] =
469 i.
book1D(
"RecoAllAssoc2GenMultiMatched_ClosestDistanceZ",
470 "ReconstructedAllAssoc2GenMultiMatched_ClosestDistanceZ",
471 17, &log_mergez_bins[0]);
480 "RecoAllAssoc2MultiMatchedGen_NumVertices",
481 "RecoAllAssoc2MultiMatchedGen_NumVertices", 100, 0., 200.);
482 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_X"] =
483 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_X",
484 "RecoAllAssoc2MultiMatchedGen_X", 120, -0.6, 0.6);
485 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Y"] =
486 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_Y",
487 "RecoAllAssoc2MultiMatchedGen_Y", 120, -0.6, 0.6);
488 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Z"] =
489 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_Z",
490 "RecoAllAssoc2MultiMatchedGen_Z", 120, -60, 60);
491 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_R"] =
492 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_R",
493 "RecoAllAssoc2MultiMatchedGen_R", 120, 0, 0.6);
494 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Pt2"] =
495 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_Pt2",
496 "RecoAllAssoc2MultiMatchedGen_Sum-pt2", 15, &log_pt2_bins[0]);
497 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_NumTracks"] =
498 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_NumTracks",
499 "RecoAllAssoc2MultiMatchedGen_NumTracks", 24, &log_ntrk_bins[0]);
500 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_PU"] =
501 i.
book1D(
"RecoAllAssoc2MultiMatchedGen_PU",
502 "RecoAllAssoc2MultiMatchedGen_PU", 125, 0., 250.);
503 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ"] = i.
book1D(
504 "RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ",
505 "RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ", 30, &log_bins[0]);
506 mes_[
label][
"RecoAllAssoc2GenSimForMerge_ClosestDistanceZ"] = i.
book1D(
507 "RecoAllAssoc2GenSimForMerge_ClosestDistanceZ",
508 "RecoAllAssoc2GenSimForMerge_ClosestDistanceZ",
509 17, &log_mergez_bins[0]);
513 const double resolx = 0.1;
514 const double resoly = 0.1;
515 const double resolz = 0.1;
516 const double resolpt2 = 10;
519 book1d(
"RecoAllAssoc2GenMatched_ResolX", 100,-resolx,resolx);
520 book1d(
"RecoAllAssoc2GenMatched_ResolY", 100,-resoly,resoly);
521 book1d(
"RecoAllAssoc2GenMatched_ResolZ", 100,-resolz,resolz);
522 book1d(
"RecoAllAssoc2GenMatched_ResolPt2", 100,-resolpt2,resolpt2);
524 book2d(
"RecoAllAssoc2GenMatched_ResolX_vs_PU", 125,0.,250., 100,-resolx,resolx);
525 book2d(
"RecoAllAssoc2GenMatched_ResolY_vs_PU", 125,0.,250., 100,-resoly,resoly);
526 book2d(
"RecoAllAssoc2GenMatched_ResolZ_vs_PU", 125,0.,250., 100,-resolz,resolz);
527 book2d(
"RecoAllAssoc2GenMatched_ResolPt2_vs_PU", 125,0.,250., 100,-resolpt2,resolpt2);
529 book2dlogx(
"RecoAllAssoc2GenMatched_ResolX_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resolx,resolx);
530 book2dlogx(
"RecoAllAssoc2GenMatched_ResolY_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resoly,resoly);
531 book2dlogx(
"RecoAllAssoc2GenMatched_ResolZ_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resolz,resolz);
532 book2dlogx(
"RecoAllAssoc2GenMatched_ResolPt2_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resolpt2,resolpt2);
534 book2d(
"RecoAllAssoc2GenMatched_ResolX_vs_Z", 120,-60,60, 100,-resolx,resolx);
535 book2d(
"RecoAllAssoc2GenMatched_ResolY_vs_Z", 120,-60,60, 100,-resoly,resoly);
536 book2d(
"RecoAllAssoc2GenMatched_ResolZ_vs_Z", 120,-60,60, 100,-resolz,resolz);
537 book2d(
"RecoAllAssoc2GenMatched_ResolPt2_vs_Z", 120,-60,60, 100,-resolpt2,resolpt2);
539 book2dlogx(
"RecoAllAssoc2GenMatched_ResolX_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resolx,resolx);
540 book2dlogx(
"RecoAllAssoc2GenMatched_ResolY_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resoly,resoly);
541 book2dlogx(
"RecoAllAssoc2GenMatched_ResolZ_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resolz,resolz);
542 book2dlogx(
"RecoAllAssoc2GenMatched_ResolPt2_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resolpt2,resolpt2);
544 book1d(
"RecoAllAssoc2GenMatched_PullX", 250,-25,25);
545 book1d(
"RecoAllAssoc2GenMatched_PullY", 250,-25,25);
546 book1d(
"RecoAllAssoc2GenMatched_PullZ", 250,-25,25);
549 book1d(
"RecoAllAssoc2GenMatchedMerged_ResolX", 100,-resolx,resolx);
550 book1d(
"RecoAllAssoc2GenMatchedMerged_ResolY", 100,-resoly,resoly);
551 book1d(
"RecoAllAssoc2GenMatchedMerged_ResolZ", 100,-resolz,resolz);
552 book1d(
"RecoAllAssoc2GenMatchedMerged_ResolPt2", 100,-resolpt2,resolpt2);
554 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolX_vs_PU", 125,0.,250., 100,-resolx,resolx);
555 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolY_vs_PU", 125,0.,250., 100,-resoly,resoly);
556 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolZ_vs_PU", 125,0.,250., 100,-resolz,resolz);
557 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolPt2_vs_PU", 125,0.,250., 100,-resolpt2,resolpt2);
559 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolX_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resolx,resolx);
560 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolY_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resoly,resoly);
561 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolZ_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resolz,resolz);
562 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolPt2_vs_NumTracks", 24,&log_ntrk_bins[0], 100,-resolpt2,resolpt2);
564 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolX_vs_Z", 120,-60,60, 100,-resolx,resolx);
565 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolY_vs_Z", 120,-60,60, 100,-resoly,resoly);
566 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolZ_vs_Z", 120,-60,60, 100,-resolz,resolz);
567 book2d(
"RecoAllAssoc2GenMatchedMerged_ResolPt2_vs_Z", 120,-60,60, 100,-resolpt2,resolpt2);
569 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolX_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resolx,resolx);
570 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolY_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resoly,resoly);
571 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolZ_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resolz,resolz);
572 book2dlogx(
"RecoAllAssoc2GenMatchedMerged_ResolPt2_vs_Pt", log_pt_bins.size()-1,&log_pt_bins[0], 100,-resolpt2,resolpt2);
574 book1d(
"RecoAllAssoc2GenMatchedMerged_PullX", 250,-25,25);
575 book1d(
"RecoAllAssoc2GenMatchedMerged_PullY", 250,-25,25);
576 book1d(
"RecoAllAssoc2GenMatchedMerged_PullZ", 250,-25,25);
581 book1d(
"RecoPVAssoc2GenPVMatched_Purity", 50, 0, 1);
582 book1d(
"RecoPVAssoc2GenPVMatched_Missing", 50, 0, 1);
583 book2d(
"RecoPVAssoc2GenPVMatched_Purity_vs_Index", 100,0,100, 50,0,1);
586 book1d(
"RecoPVAssoc2GenPVNotMatched_Purity", 50, 0, 1);
587 book1d(
"RecoPVAssoc2GenPVNotMatched_Missing", 50, 0, 1);
588 book2d(
"RecoPVAssoc2GenPVNotMatched_Purity_vs_Index", 100,0,100, 50,0,1);
591 book1d(
"RecoAllAssoc2Gen_Purity", 50, 0, 1);
592 book1d(
"RecoAllAssoc2GenMatched_Purity", 50, 0, 1);
596 book1dlogx(
"RecoAssoc2GenPVMatched_Pt2", 15, &log_pt2_bins[0]);
597 book1dlogx(
"RecoAssoc2GenPVNotMatched_Pt2", 15, &log_pt2_bins[0]);
599 book1dlogx(
"RecoAssoc2GenPVMatchedNotHighest_Pt2", 15, &log_pt2_bins[0]);
600 book1dlogx(
"RecoAssoc2GenPVNotMatched_GenPVTracksRemoved_Pt2", 15, &log_pt2_bins[0]);
603 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionReco", 50, 0, 1);
604 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionReco", 50, 0, 1);
605 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionRecoMatched", 50, 0, 1);
606 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionRecoMatched", 50, 0, 1);
608 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionSim", 50, 0, 1);
609 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionSim", 50, 0, 1);
610 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionSimMatched", 50, 0, 1);
611 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionSimMatched", 50, 0, 1);
618 mes_[
"root_folder"][
"GenPV_X"]->Fill(v.
x);
619 mes_[
"root_folder"][
"GenPV_Y"]->Fill(v.
y);
620 mes_[
"root_folder"][
"GenPV_Z"]->Fill(v.
z);
621 mes_[
"root_folder"][
"GenPV_R"]->Fill(v.
r);
622 mes_[
"root_folder"][
"GenPV_Pt2"]->Fill(v.
ptsq);
623 mes_[
"root_folder"][
"GenPV_NumTracks"]->Fill(v.
nGenTrk);
625 mes_[
"root_folder"][
"GenPV_ClosestDistanceZ"]
628 mes_[
"root_folder"][
"GenAllV_X"]->Fill(v.
x);
629 mes_[
"root_folder"][
"GenAllV_Y"]->Fill(v.
y);
630 mes_[
"root_folder"][
"GenAllV_Z"]->Fill(v.
z);
631 mes_[
"root_folder"][
"GenAllV_R"]->Fill(v.
r);
632 mes_[
"root_folder"][
"GenAllV_Pt2"]->Fill(v.
ptsq);
633 mes_[
"root_folder"][
"GenAllV_NumTracks"]->Fill(v.
nGenTrk);
635 mes_[
"root_folder"][
"GenAllV_ClosestDistanceZ"]
649 mes_[
label][
"GenAllAssoc2Reco_ClosestDistanceZ"]
652 mes_[
label][
"GenAllAssoc2RecoMatched_X"]->Fill(v.
x);
653 mes_[
label][
"GenAllAssoc2RecoMatched_Y"]->Fill(v.
y);
654 mes_[
label][
"GenAllAssoc2RecoMatched_Z"]->Fill(v.
z);
655 mes_[
label][
"GenAllAssoc2RecoMatched_R"]->Fill(v.
r);
659 mes_[
label][
"GenAllAssoc2RecoMatched_ClosestDistanceZ"]
663 mes_[
label][
"GenAllAssoc2RecoMultiMatched_X"]->Fill(v.
x);
664 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Y"]->Fill(v.
y);
665 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Z"]->Fill(v.
z);
666 mes_[
label][
"GenAllAssoc2RecoMultiMatched_R"]->Fill(v.
r);
667 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Pt2"]->Fill(v.
ptsq);
670 mes_[
label][
"GenAllAssoc2RecoMultiMatched_ClosestDistanceZ"]
678 bool genPVMatchedToRecoPV) {
679 mes_[
label][
"GenPVAssoc2RecoPV_X"]->Fill(v.
x);
680 mes_[
label][
"GenPVAssoc2RecoPV_Y"]->Fill(v.
y);
681 mes_[
label][
"GenPVAssoc2RecoPV_Z"]->Fill(v.
z);
682 if (genPVMatchedToRecoPV) {
683 mes_[
label][
"GenPVAssoc2RecoPVMatched_X"]->Fill(v.
x);
684 mes_[
label][
"GenPVAssoc2RecoPVMatched_Y"]->Fill(v.
y);
685 mes_[
label][
"GenPVAssoc2RecoPVMatched_Z"]->Fill(v.
z);
691 int num_pileup_vertices,
700 mes_[
label][
"RecoAllAssoc2Gen_PU"]->Fill(num_pileup_vertices);
703 mes_[
label][
"RecoAllAssoc2Gen_ClosestDistanceZ"]
707 mes_[
label][
"RecoAllAssoc2GenMatched_X"]->Fill(v.
x);
708 mes_[
label][
"RecoAllAssoc2GenMatched_Y"]->Fill(v.
y);
709 mes_[
label][
"RecoAllAssoc2GenMatched_Z"]->Fill(v.
z);
710 mes_[
label][
"RecoAllAssoc2GenMatched_R"]->Fill(v.
r);
714 mes_[
label][
"RecoAllAssoc2GenMatched_PU"]->Fill(num_pileup_vertices);
717 mes_[
label][
"RecoAllAssoc2GenMatched_ClosestDistanceZ"]
728 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_X"]->Fill(v.
x);
729 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Y"]->Fill(v.
y);
730 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Z"]->Fill(v.
z);
731 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_R"]->Fill(v.
r);
732 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Pt2"]->Fill(v.
ptsq);
734 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_PU"]->Fill(num_pileup_vertices);
736 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ"]
746 mes_[
label][
"RecoAllAssoc2GenSimForMerge_ClosestDistanceZ"]
752 mes_[
label][
"RecoAllAssoc2GenMultiMatched_X"]->Fill(v.
x);
753 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Y"]->Fill(v.
y);
754 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Z"]->Fill(v.
z);
755 mes_[
label][
"RecoAllAssoc2GenMultiMatched_R"]->Fill(v.
r);
756 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Pt2"]->Fill(v.
ptsq);
758 mes_[
label][
"RecoAllAssoc2GenMultiMatched_PU"]->Fill(num_pileup_vertices);
760 mes_[
label][
"RecoAllAssoc2GenMultiMatched_ClosestDistanceZ"]
768 prefix =
"RecoAllAssoc2GenSingleMatched_SharedTrackFraction";
771 prefix =
"RecoAllAssoc2GenMultiMatched_SharedTrackFraction";
786 int num_pileup_vertices,
797 const double xres = v.
x - bestMatch.
x;
798 const double yres = v.
y - bestMatch.
y;
799 const double zres = v.
z - bestMatch.
z;
800 const double pt2res = v.
ptsq - bestMatch.
ptsq;
802 const double xresol = xres;
803 const double yresol = yres;
804 const double zresol = zres;
805 const double pt2resol = pt2res/v.
ptsq;
807 mes_[
label][prefix+
"_ResolX"]->Fill(xresol);
808 mes_[
label][prefix+
"_ResolY"]->Fill(yresol);
809 mes_[
label][prefix+
"_ResolZ"]->Fill(zresol);
810 mes_[
label][prefix+
"_ResolPt2"]->Fill(pt2resol);
812 mes_[
label][prefix+
"_ResolX_vs_PU"]->Fill(num_pileup_vertices, xresol);
813 mes_[
label][prefix+
"_ResolY_vs_PU"]->Fill(num_pileup_vertices, yresol);
814 mes_[
label][prefix+
"_ResolZ_vs_PU"]->Fill(num_pileup_vertices, zresol);
815 mes_[
label][prefix+
"_ResolPt2_vs_PU"]->Fill(num_pileup_vertices, pt2resol);
822 mes_[
label][prefix+
"_ResolX_vs_Z"]->Fill(v.
z, xresol);
823 mes_[
label][prefix+
"_ResolY_vs_Z"]->Fill(v.
z, yresol);
824 mes_[
label][prefix+
"_ResolZ_vs_Z"]->Fill(v.
z, zresol);
825 mes_[
label][prefix+
"_ResolPt2_vs_Z"]->Fill(v.
z, pt2resol);
827 mes_[
label][prefix+
"_ResolX_vs_Pt"]->Fill(v.
pt, xresol);
828 mes_[
label][prefix+
"_ResolY_vs_Pt"]->Fill(v.
pt, yresol);
829 mes_[
label][prefix+
"_ResolZ_vs_Pt"]->Fill(v.
pt, zresol);
830 mes_[
label][prefix+
"_ResolPt2_vs_Pt"]->Fill(v.
pt, pt2resol);
845 for(
const auto& tp:
found->val) {
846 if(tp.first->eventId().bunchCrossing() == 0 && tp.first->eventId().event() == 0)
856 std::vector<recoPrimaryVertex>& recopvs,
857 int genpv_position_in_reco_collection,
858 bool signal_is_highest_pt) {
859 if(recopvs.empty())
return;
861 std::vector<double> vtx_sumpt_sigmatched;
862 std::vector<double> vtx_sumpt2_sigmatched;
864 vtx_sumpt_sigmatched.reserve(recopvs.size());
865 vtx_sumpt2_sigmatched.reserve(recopvs.size());
868 for(
auto&
v: recopvs) {
869 double sumpt_all = 0;
870 double sumpt_sigmatched = 0;
871 double sumpt2_sigmatched = 0;
874 double pt = (*iTrack)->pt();
877 sumpt_sigmatched +=
pt;
878 sumpt2_sigmatched += pt*
pt;
881 v.purity = sumpt_sigmatched / sumpt_all;
883 vtx_sumpt_sigmatched.push_back(sumpt_sigmatched);
884 vtx_sumpt2_sigmatched.push_back(sumpt2_sigmatched);
887 const double vtxAll_sumpt_sigmatched = std::accumulate(vtx_sumpt_sigmatched.begin(), vtx_sumpt_sigmatched.end(), 0.0);
888 const double vtxNot0_sumpt_sigmatched = vtxAll_sumpt_sigmatched - vtx_sumpt_sigmatched[0];
889 const double missing = vtxNot0_sumpt_sigmatched / vtxAll_sumpt_sigmatched;
892 std::string prefix =
"RecoPVAssoc2GenPVNotMatched_";
893 if(genpv_position_in_reco_collection == 0)
894 prefix =
"RecoPVAssoc2GenPVMatched_";
896 mes_[
label][prefix+
"Purity"]->Fill(recopvs[0].purity);
897 mes_[
label][prefix+
"Missing"]->Fill(missing);
898 auto hpurity =
mes_[
label][prefix+
"Purity_vs_Index"];
899 for(
size_t i=0;
i<recopvs.size(); ++
i) {
900 hpurity->Fill(
i, recopvs[
i].purity);
904 for(
size_t i=0;
i<recopvs.size(); ++
i) {
905 if(static_cast<int>(
i) == genpv_position_in_reco_collection) {
906 mes_[
label][
"RecoAssoc2GenPVMatched_Pt2"]->Fill(recopvs[
i].ptsq);
909 double pt2 = recopvs[
i].ptsq;
910 mes_[
label][
"RecoAssoc2GenPVNotMatched_Pt2"]->Fill(pt2);
912 double pt2_pu = pt2-vtx_sumpt2_sigmatched[
i];
913 mes_[
label][
"RecoAssoc2GenPVNotMatched_GenPVTracksRemoved_Pt2"]->Fill(pt2_pu);
916 if(!signal_is_highest_pt && genpv_position_in_reco_collection >= 0)
917 mes_[
label][
"RecoAssoc2GenPVMatchedNotHighest_Pt2"]->Fill(recopvs[genpv_position_in_reco_collection].ptsq);
923 std::vector<PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex>
926 std::vector<PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex> simpv;
927 int current_event = -1;
930 std::cout <<
"getSimPVs TrackingVertexCollection " << std::endl;
933 for (TrackingVertexCollection::const_iterator
v = tVC->begin();
934 v != tVC->end(); ++
v) {
936 std::cout <<
"BunchX.EventId: " <<
v->eventId().bunchCrossing() <<
"."
937 << (
v->eventId()).
event() <<
" Position: " <<
v->position()
938 <<
" G4/HepMC Vertices: " <<
v->g4Vertices().size() <<
"/"
939 <<
v->genVertices().size()
940 <<
" t = " <<
v->position().t() * 1.e12
941 <<
" == 0:" << (
v->position().t() > 0) << std::endl;
943 gv !=
v->g4Vertices_end(); gv++) {
953 if (
v->eventId().bunchCrossing() != 0)
continue;
954 if (
v->eventId().event() != current_event) {
955 current_event =
v->eventId().event();
960 if (fabs(
v->position().z()) > 1000)
continue;
970 iTrack !=
v->daughterTracks_end(); ++iTrack) {
974 assert((**iTrack).eventId().bunchCrossing() == 0);
979 for (std::vector<simPrimaryVertex>::iterator v0 = simpv.begin();
980 v0 != simpv.end(); v0++) {
981 if ((sv.eventId == v0->eventId) && (fabs(sv.x - v0->x) < 1
e-5) &&
982 (fabs(sv.y - v0->y) < 1
e-5) && (fabs(sv.z - v0->z) < 1
e-5)) {
992 std::cout <<
"this is a new vertex " << sv.eventId.event() <<
" "
993 << sv.x <<
" " << sv.y <<
" " << sv.z << std::endl;
997 std::cout <<
"this is not a new vertex" << sv.x <<
" " << sv.y <<
" "
998 << sv.z << std::endl;
1004 iTP !=
v->daughterTracks_end(); ++iTP) {
1005 auto momentum = (*(*iTP)).momentum();
1006 const reco::Track* matched_best_reco_track =
nullptr;
1007 double match_quality = -1;
1011 matched_best_reco_track = (*s2r_)[*iTP][0].first.get();
1012 match_quality = (*s2r_)[*iTP][0].second;
1015 std::cout <<
" Daughter momentum: " << momentum;
1017 std::cout <<
" matched: " << (matched_best_reco_track !=
nullptr);
1018 std::cout <<
" match-quality: " << match_quality;
1021 vp->
ptot.setPx(vp->
ptot.x() + momentum.x());
1022 vp->
ptot.setPy(vp->
ptot.y() + momentum.y());
1023 vp->
ptot.setPz(vp->
ptot.z() + momentum.z());
1024 vp->
ptot.setE(vp->
ptot.e() + (**iTP).energy());
1025 vp->
ptsq += ((**iTP).pt() * (**iTP).pt());
1028 if (matched_best_reco_track) {
1036 if (((**iTP).pt() > 0.2) && (fabs((**iTP).eta()) < 2.5) &&
1037 (**iTP).charge() != 0) {
1045 std::cout <<
"average number of associated tracks: "
1053 std::cout <<
"------- PrimaryVertexAnalyzer4PUSlimmed simPVs from "
1055 "-------" << std::endl;
1056 for (std::vector<simPrimaryVertex>::iterator v0 = simpv.begin();
1057 v0 != simpv.end(); v0++) {
1058 std::cout <<
"z=" << v0->z <<
" event=" << v0->eventId.event()
1061 std::cout <<
"-----------------------------------------------" << std::endl;
1070 auto prev_z = simpv.back().z;
1072 vsim.closest_vertex_distance_z =
std::abs(vsim.z - prev_z);
1076 for (std::vector<simPrimaryVertex>::iterator vsim = simpv.begin();
1077 vsim != simpv.end(); vsim++) {
1078 std::vector<simPrimaryVertex>::iterator vsim2 = vsim;
1080 for (; vsim2 != simpv.end(); vsim2++) {
1083 vsim->closest_vertex_distance_z =
std::min(vsim->closest_vertex_distance_z, distance);
1084 vsim2->closest_vertex_distance_z =
std::min(vsim2->closest_vertex_distance_z, distance);
1092 std::vector<PrimaryVertexAnalyzer4PUSlimmed::recoPrimaryVertex>
1095 std::vector<PrimaryVertexAnalyzer4PUSlimmed::recoPrimaryVertex> recopv;
1098 std::cout <<
"getRecoPVs TrackingVertexCollection " << std::endl;
1101 for (
auto v = tVC->begin();
v != tVC->end(); ++
v) {
1103 std::cout <<
" Position: " <<
v->position() << std::endl;
1107 if (fabs(
v->z()) > 1000)
continue;
1108 if (
v->isFake() || !
v->isValid())
continue;
1115 recopv.push_back(sv);
1119 for (
auto iTrack =
v->tracks_begin(); iTrack !=
v->tracks_end(); ++iTrack) {
1120 auto momentum = (*(*iTrack)).innerMomentum();
1124 if (momentum.mag2() == 0)
1125 momentum = (*(*iTrack)).momentum();
1127 std::cout <<
" Daughter momentum: " << momentum;
1131 vp->
ptsq += (momentum.perp2());
1134 auto matched =
r2s_->
find(*iTrack);
1143 std::cout <<
"------- PrimaryVertexAnalyzer4PUSlimmed recoPVs from "
1145 "-------" << std::endl;
1146 for (std::vector<recoPrimaryVertex>::iterator v0 = recopv.begin();
1147 v0 != recopv.end(); v0++) {
1148 std::cout <<
"z=" << v0->z << std::endl;
1150 std::cout <<
"-----------------------------------------------" << std::endl;
1159 auto prev_z = recopv.back().z;
1161 vreco.closest_vertex_distance_z =
std::abs(vreco.z - prev_z);
1164 for (std::vector<recoPrimaryVertex>::iterator vreco = recopv.begin();
1165 vreco != recopv.end(); vreco++) {
1166 std::vector<recoPrimaryVertex>::iterator vreco2 = vreco;
1168 for (; vreco2 != recopv.end(); vreco2++) {
1171 vreco->closest_vertex_distance_z =
std::min(vreco->closest_vertex_distance_z, distance);
1172 vreco2->closest_vertex_distance_z =
std::min(vreco2->closest_vertex_distance_z, distance);
1179 std::vector<simPrimaryVertex> & simpv) {
1180 for (
auto &
v : simpv) {
1181 v.rec_vertices.clear();
1187 std::vector<simPrimaryVertex>& simpv,
1190 std::cout <<
"PrimaryVertexAnalyzer4PUSlimmed::matchSim2RecoVertices " << std::endl;
1192 for (std::vector<simPrimaryVertex>::iterator vsim = simpv.begin();
1193 vsim != simpv.end(); vsim++) {
1195 auto matched = vertex_s2r.
find(vsim->sim_vertex);
1196 if(matched != vertex_s2r.
end()) {
1197 for(
const auto vertexRefQuality: matched->val) {
1198 vsim->rec_vertices.push_back(&(*(vertexRefQuality.first)));
1203 if (vsim->rec_vertices.size()) {
1204 for (
auto const&
v : vsim->rec_vertices) {
1205 std::cout <<
"Found a matching vertex for genVtx "
1206 << vsim->z <<
" at " <<
v->z()
1207 <<
" with sign: " << fabs(
v->z() - vsim->z) /
v->zError()
1211 std::cout <<
"No matching vertex for " << vsim->z << std::endl;
1216 std::cout <<
"Done with matching sim vertices" << std::endl;
1221 std::vector<recoPrimaryVertex>& recopv,
1223 const std::vector<simPrimaryVertex>& simpv) {
1224 for (std::vector<recoPrimaryVertex>::iterator vrec = recopv.begin();
1225 vrec != recopv.end(); vrec++) {
1227 auto matched = vertex_r2s.
find(vrec->recVtxRef);
1228 if(matched != vertex_r2s.
end()) {
1229 for(
const auto vertexRefQuality: matched->val) {
1230 const auto tvPtr = &(*(vertexRefQuality.first));
1231 vrec->sim_vertices.push_back(tvPtr);
1236 for(
const auto& vv: simpv) {
1237 if (&(*(vv.sim_vertex)) == tv) {
1238 vrec->sim_vertices_internal.push_back(&vv);
1249 for (
auto v : vrec->sim_vertices) {
1250 std::cout <<
"Found a matching vertex for reco: " << vrec->z
1251 <<
" at gen:" <<
v->position().z() <<
" with sign: "
1252 << fabs(vrec->z -
v->position().z()) / vrec->recVtx->zError()
1267 using namespace reco;
1269 std::vector<float> pileUpInfo_z;
1274 for (
auto const& pu_info : *puinfoH.product()) {
1276 mes_[
"root_folder"][
"GenVtx_vs_BX"]
1277 ->Fill(pu_info.getBunchCrossing(), pu_info.getPU_NumInteractions());
1279 if (pu_info.getBunchCrossing() == 0) {
1280 pileUpInfo_z = pu_info.getPU_zpositions();
1282 for (
auto const&
p : pileUpInfo_z) {
1283 std::cout <<
"PileUpInfo on Z vertex: " <<
p << std::endl;
1308 s2r_ = simToRecoH.product();
1309 r2s_ = recoToSimH.product();
1316 std::vector<simPrimaryVertex> simpv;
1322 int kind_of_signal_vertex = 0;
1323 int num_pileup_vertices = simpv.size();
1325 bool signal_is_highest_pt = std::max_element(simpv.begin(), simpv.end(),
1328 return lhs.ptsq < rhs.ptsq;
1329 }) == simpv.begin();
1330 kind_of_signal_vertex |= (signal_is_highest_pt <<
HIGHEST_PT);
1332 mes_[
"root_folder"][
"SignalIsHighestPt2"]->Fill(signal_is_highest_pt ? 1. : 0.);
1336 int label_index = -1;
1338 std::vector<recoPrimaryVertex> recopv;
1342 if (!iEvent.
getByToken(vertex_token, recVtxs)) {
1343 LogInfo(
"PrimaryVertexAnalyzer4PUSlimmed")
1344 <<
"Skipping vertex collection: " << label <<
" since it is missing."
1356 mes_[label][
"RecoAllAssoc2Gen_PairDistanceZ"]);
1359 int num_total_gen_vertices_assoc2reco = 0;
1360 int num_total_reco_vertices_assoc2gen = 0;
1361 int num_total_gen_vertices_multiassoc2reco = 0;
1362 int num_total_reco_vertices_multiassoc2gen = 0;
1363 int num_total_reco_vertices_duplicate = 0;
1364 int genpv_position_in_reco_collection = -1;
1365 for (
auto const&
v : simpv) {
1368 if (
v.eventId.event() == 0) {
1369 if (!recVtxs->empty() &&
1370 std::find(
v.rec_vertices.begin(),
v.rec_vertices.end(),
1371 &((*recVtxs.
product())[0])) !=
v.rec_vertices.end()) {
1375 if (
v.rec_vertices.size()) {
1379 mes_[
label][
"KindOfSignalPV"]->Fill(kind_of_signal_vertex);
1380 mes_[
label][
"MisTagRate"]->Fill(mistag);
1381 mes_[
label][
"MisTagRate_vs_PU"]->Fill(simpv.size(), mistag);
1382 mes_[
label][
"MisTagRate_vs_sum-pt2"]->Fill(
v.ptsq, mistag);
1383 mes_[
label][
"MisTagRate_vs_Z"]->Fill(
v.z, mistag);
1384 mes_[
label][
"MisTagRate_vs_R"]->Fill(
v.r, mistag);
1385 mes_[
label][
"MisTagRate_vs_NumTracks"]->Fill(
v.nGenTrk, mistag);
1386 if (signal_is_highest_pt) {
1387 mes_[
label][
"MisTagRateSignalIsHighest"]->Fill(mistag);
1388 mes_[
label][
"MisTagRateSignalIsHighest_vs_PU"]->Fill(simpv.size(),
1390 mes_[
label][
"MisTagRateSignalIsHighest_vs_sum-pt2"]->Fill(
v.ptsq,
1392 mes_[
label][
"MisTagRateSignalIsHighest_vs_Z"]->Fill(
v.z, mistag);
1393 mes_[
label][
"MisTagRateSignalIsHighest_vs_R"]->Fill(
v.r, mistag);
1394 mes_[
label][
"MisTagRateSignalIsHighest_vs_NumTracks"]->Fill(
v.nGenTrk,
1397 mes_[
label][
"MisTagRateSignalIsNotHighest"]->Fill(mistag);
1398 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_PU"]->Fill(simpv.size(),
1400 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_sum-pt2"]->Fill(
v.ptsq,
1402 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_Z"]->Fill(
v.z, mistag);
1403 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_R"]->Fill(
v.r, mistag);
1404 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_NumTracks"]->
1405 Fill(
v.nGenTrk, mistag);
1413 for (
int pv_position_in_reco_collection = 0;
1415 ++pv_position_in_reco_collection, ++iv) {
1416 if (
std::find(
v.rec_vertices.begin(),
v.rec_vertices.end(),
1417 &(*iv)) !=
v.rec_vertices.end()) {
1419 ->Fill(pv_position_in_reco_collection);
1420 const bool genPVMatchedToRecoPV = (pv_position_in_reco_collection == 0);
1421 mes_[
label][
"TruePVLocationIndexCumulative"]
1422 ->Fill(genPVMatchedToRecoPV ? 0 : 1);
1424 if (signal_is_highest_pt) {
1425 mes_[
label][
"TruePVLocationIndexSignalIsHighest"]
1426 ->Fill(pv_position_in_reco_collection);
1428 mes_[
label][
"TruePVLocationIndexSignalIsNotHighest"]
1429 ->Fill(pv_position_in_reco_collection);
1433 genpv_position_in_reco_collection = pv_position_in_reco_collection;
1443 mes_[
label][
"TruePVLocationIndex"]->Fill(-1.);
1444 mes_[
label][
"TruePVLocationIndexCumulative"]->Fill(-1.);
1445 if (signal_is_highest_pt)
1446 mes_[
label][
"TruePVLocationIndexSignalIsHighest"]->Fill(-1.);
1448 mes_[
label][
"TruePVLocationIndexSignalIsNotHighest"]->Fill(-1.);
1452 if (
v.rec_vertices.size()) num_total_gen_vertices_assoc2reco++;
1453 if (
v.rec_vertices.size() > 1) num_total_gen_vertices_multiassoc2reco++;
1461 mes_[
label][
"GenAllAssoc2Reco_NumVertices"]
1462 ->Fill(simpv.size(), simpv.size());
1463 mes_[
label][
"GenAllAssoc2RecoMatched_NumVertices"]
1464 ->Fill(simpv.size(), num_total_gen_vertices_assoc2reco);
1465 mes_[
label][
"GenAllAssoc2RecoMultiMatched_NumVertices"]
1466 ->Fill(simpv.size(), num_total_gen_vertices_multiassoc2reco);
1467 for (
auto &
v : recopv) {
1469 if (
v.sim_vertices.size()) {
1470 num_total_reco_vertices_assoc2gen++;
1471 if (
v.sim_vertices_internal[0]->rec_vertices.size() > 1) {
1472 num_total_reco_vertices_duplicate++;
1475 if (
v.sim_vertices.size() > 1) num_total_reco_vertices_multiassoc2gen++;
1477 mes_[
label][
"RecoAllAssoc2Gen_NumVertices"]
1478 ->Fill(recopv.size(), recopv.size());
1479 mes_[
label][
"RecoAllAssoc2GenMatched_NumVertices"]
1480 ->Fill(recopv.size(), num_total_reco_vertices_assoc2gen);
1481 mes_[
label][
"RecoAllAssoc2GenMultiMatched_NumVertices"]
1482 ->Fill(recopv.size(), num_total_reco_vertices_multiassoc2gen);
1483 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_NumVertices"]
1484 ->Fill(recopv.size(), num_total_reco_vertices_duplicate);
1485 mes_[
label][
"RecoVtx_vs_GenVtx"]->Fill(simpv.size(), recopv.size());
1487 ->Fill(simpv.size(), num_total_reco_vertices_assoc2gen);
1495 for (
unsigned int i = 0;
i < collection.size(); ++
i) {
1496 for (
unsigned int j =
i+1;
j < collection.size(); ++
j) {
T getParameter(std::string const &) const
void matchSim2RecoVertices(std::vector< simPrimaryVertex > &, const reco::VertexSimToRecoCollection &)
void fillGenAssociatedRecoVertexHistograms(const std::string &, int, recoPrimaryVertex &v)
std::vector< PrimaryVertexAnalyzer4PUSlimmed::recoPrimaryVertex > getRecoPVs(const edm::Handle< edm::View< reco::Vertex >> &)
tuple ret
prodAgent to be discontinued
double closest_vertex_distance_z
int event() const
get the contents of the subdetector field (should be protected?)
bool matchRecoTrack2SimSignal(const reco::TrackBaseRef &)
void resetSimPVAssociation(std::vector< simPrimaryVertex > &)
std::vector< const simPrimaryVertex * > sim_vertices_internal
edm::EDGetTokenT< reco::SimToRecoCollection > simToRecoAssociationToken_
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > vecPileupSummaryInfoToken_
std::vector< TrackingParticle > TrackingParticleCollection
void fillRecoAssociatedGenPVHistograms(const std::string &label, const PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex &v, bool genPVMatchedToRecoPV)
trackRef_iterator tracks_end() const
last iterator over tracks
void computePairDistance(const T &collection, MonitorElement *me)
const_iterator end() const
last iterator over the map (read only)
MonitorElement * bookProfile(Args &&...args)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double zError() const
error on z
std::vector< SimVertex >::const_iterator g4v_iterator
std::vector< const TrackingVertex * > sim_vertices
bool use_only_charged_tracks_
edm::RefToBase< reco::Vertex > VertexBaseRef
persistent reference to a Vertex, using views
const_iterator find(const key_type &k) const
find element with specified reference key
virtual void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
int num_matched_sim_tracks
PrimaryVertexAnalyzer4PUSlimmed(const edm::ParameterSet &)
edm::EDGetTokenT< TrackingVertexCollection > trackingVertexCollectionToken_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
const bool do_generic_sim_plots_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
std::vector< PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex > getSimPVs(const edm::Handle< TrackingVertexCollection > &)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * book1D(Args &&...args)
Abs< T >::type abs(const T &t)
void calculatePurityAndFillHistograms(const std::string &, std::vector< recoPrimaryVertex > &, int, bool)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
double closest_vertex_distance_z
const reco::SimToRecoCollection * s2r_
std::vector< edm::EDGetTokenT< edm::View< reco::Vertex > > > reco_vertex_collection_tokens_
void fillGenericGenVertexHistograms(const simPrimaryVertex &v)
edm::Ref< TrackingVertexCollection > TrackingVertexRef
double xError() const
error on x
void setCurrentFolder(const std::string &fullpath)
T const * product() const
MonitorElement * book2D(Args &&...args)
std::vector< TrackingVertex > TrackingVertexCollection
~PrimaryVertexAnalyzer4PUSlimmed()
edm::AssociationMap< edm::OneToManyWithQualityGeneric< edm::View< reco::Track >, TrackingParticleCollection, double > > RecoToSimCollection
void fillRecoAssociatedGenVertexHistograms(const std::string &, const simPrimaryVertex &v)
void matchReco2SimVertices(std::vector< recoPrimaryVertex > &, const reco::VertexRecoToSimCollection &, const std::vector< simPrimaryVertex > &)
edm::EDGetTokenT< reco::VertexToTrackingVertexAssociator > vertexAssociatorToken_
edm::EDGetTokenT< reco::RecoToSimCollection > recoToSimAssociationToken_
std::vector< edm::InputTag > reco_vertex_collections_
std::map< std::string, std::map< std::string, MonitorElement * > > mes_
const reco::Vertex * recVtx
edm::AssociationMap< edm::OneToManyWithQualityGeneric< TrackingParticleCollection, edm::View< reco::Track >, double > > SimToRecoCollection
unsigned int calculateVertexSharedTracks(const reco::Vertex &recoV, const TrackingVertex &simV, const reco::RecoToSimCollection &trackRecoToSimAssociation)
float average_match_quality
volatile std::atomic< bool > shutdown_flag false
trackRef_iterator tracks_begin() const
first iterator over tracks
int num_matched_reco_tracks
std::vector< const reco::Vertex * > rec_vertices
std::vector< unsigned int > sim_vertices_num_shared_tracks
Power< A, B >::type pow(const A &a, const B &b)
double yError() const
error on y
const reco::RecoToSimCollection * r2s_
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleCollectionToken_
void fillResolutionAndPullHistograms(const std::string &, int, recoPrimaryVertex &v)