25 template <
typename T,
size_t N>
27 const double minLog10 = std::log10(
min);
28 const double maxLog10 = std::log10(
max);
29 const double width = (maxLog10 - minLog10) /
N;
30 std::array<T, N + 1>
ret;
33 for (
size_t i = 1;
i <=
N; ++
i) {
44 : verbose_(iConfig.getUntrackedParameter<
bool>(
"verbose",
false)),
45 use_only_charged_tracks_(iConfig.getUntrackedParameter<
bool>(
"use_only_charged_tracks",
true)),
46 do_generic_sim_plots_(iConfig.getUntrackedParameter<
bool>(
"do_generic_sim_plots")),
47 root_folder_(iConfig.getUntrackedParameter<
std::
string>(
"root_folder",
"Validation/Vertices")),
50 iConfig.getUntrackedParameter<
edm::
InputTag>(
"trackingParticleCollection"))),
51 trackingVertexCollectionToken_(
53 simToRecoAssociationToken_(
55 recoToSimAssociationToken_(
57 vertexAssociatorToken_(consumes<
reco::VertexToTrackingVertexAssociator>(
58 iConfig.getUntrackedParameter<
edm::
InputTag>(
"vertexAssociator"))) {
78 float log_bins[31] = {0.0, 0.0002, 0.0004, 0.0006, 0.0008, 0.001, 0.002, 0.004, 0.006, 0.008, 0.01,
79 0.02, 0.04, 0.06, 0.08, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0, 2.0,
80 4.0, 6.0, 8.0, 10.0, 20.0, 40.0, 60.0, 80.0, 100.0};
81 auto const log_mergez_bins = makeLogBins<float, 16>(1
e-4, 1);
83 auto const log_pt_bins = makeLogBins<float, 100>(0.1, 1
e4);
84 float log_pt2_bins[16] = {
85 0.0, 0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0, 500.0, 1000.0, 2000.0, 5000.0, 10000.0};
86 float log_ntrk_bins[25] = {0., 2.0, 4.0, 6.0, 8.0, 10., 12.0, 14.0, 16.0, 18.0, 22.0, 26.0, 30.0,
87 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 70.0, 80.0, 90.0, 100.0, 150.0, 200.0};
93 double log_pt2_bins_double[16] = {
94 0.0, 0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0, 500.0, 1000.0, 2000.0, 5000.0, 10000.0};
98 mes_[
"root_folder"][
"GenVtx_vs_BX"] =
i.book2D(
"GenVtx_vs_BX",
"GenVtx_vs_BX", 16, -12.5, 3.5, 200, 0., 200.);
100 mes_[
"root_folder"][
"GenPV_X"] =
i.book1D(
"GenPV_X",
"GeneratedPV_X", 120, -0.6, 0.6);
101 mes_[
"root_folder"][
"GenPV_Y"] =
i.book1D(
"GenPV_Y",
"GeneratedPV_Y", 120, -0.6, 0.6);
102 mes_[
"root_folder"][
"GenPV_Z"] =
i.book1D(
"GenPV_Z",
"GeneratedPV_Z", 120, -60., 60.);
103 mes_[
"root_folder"][
"GenPV_R"] =
i.book1D(
"GenPV_R",
"GeneratedPV_R", 120, 0, 0.6);
104 mes_[
"root_folder"][
"GenPV_Pt2"] =
i.book1D(
"GenPV_Pt2",
"GeneratedPV_Sum-pt2", 15, &log_pt2_bins[0]);
105 mes_[
"root_folder"][
"GenPV_NumTracks"] =
106 i.book1D(
"GenPV_NumTracks",
"GeneratedPV_NumTracks", 24, &log_ntrk_bins[0]);
107 mes_[
"root_folder"][
"GenPV_ClosestDistanceZ"] =
108 i.book1D(
"GenPV_ClosestDistanceZ",
"GeneratedPV_ClosestDistanceZ", 30, &log_bins[0]);
111 mes_[
"root_folder"][
"GenAllV_NumVertices"] =
112 i.book1D(
"GenAllV_NumVertices",
"GeneratedAllV_NumVertices", 100, 0., 200.);
113 mes_[
"root_folder"][
"GenAllV_X"] =
i.book1D(
"GenAllV_X",
"GeneratedAllV_X", 120, -0.6, 0.6);
114 mes_[
"root_folder"][
"GenAllV_Y"] =
i.book1D(
"GenAllV_Y",
"GeneratedAllV_Y", 120, -0.6, 0.6);
115 mes_[
"root_folder"][
"GenAllV_Z"] =
i.book1D(
"GenAllV_Z",
"GeneratedAllV_Z", 120, -60, 60);
116 mes_[
"root_folder"][
"GenAllV_R"] =
i.book1D(
"GenAllV_R",
"GeneratedAllV_R", 120, 0, 0.6);
117 mes_[
"root_folder"][
"GenAllV_Pt2"] =
i.book1D(
"GenAllV_Pt2",
"GeneratedAllV_Sum-pt2", 15, &log_pt2_bins[0]);
118 mes_[
"root_folder"][
"GenAllV_NumTracks"] =
119 i.book1D(
"GenAllV_NumTracks",
"GeneratedAllV_NumTracks", 24, &log_ntrk_bins[0]);
120 mes_[
"root_folder"][
"GenAllV_ClosestDistanceZ"] =
121 i.book1D(
"GenAllV_ClosestDistanceZ",
"GeneratedAllV_ClosestDistanceZ", 30, &log_bins[0]);
122 mes_[
"root_folder"][
"GenAllV_PairDistanceZ"] =
123 i.book1D(
"GenAllV_PairDistanceZ",
"GeneratedAllV_PairDistanceZ", 1000, 0, 20);
124 mes_[
"root_folder"][
"SignalIsHighestPt2"] =
i.book1D(
"SignalIsHighestPt2",
"SignalIsHighestPt2", 2, -0.5, 1.5);
130 i.setCurrentFolder(current_folder);
132 auto book1d = [&](
const char*
name,
int bins,
double min,
double max) {
135 auto book1dlogx = [&](
const char*
name,
int bins,
const float* xbinedges) {
141 auto book2dlogx = [&](
const char*
name,
int xbins,
const float* xbinedges,
int ybins,
double ymin,
double ymax) {
143 me->getTH2F()->GetXaxis()->Set(
xbins, xbinedges);
148 i.bookProfile(
"RecoVtx_vs_GenVtx",
"RecoVtx_vs_GenVtx", 125, 0., 250., 250, 0., 250.);
149 mes_[
label][
"MatchedRecoVtx_vs_GenVtx"] =
150 i.bookProfile(
"MatchedRecoVtx_vs_GenVtx",
"MatchedRecoVtx_vs_GenVtx", 125, 0., 250., 250, 0., 250.);
151 mes_[
label][
"KindOfSignalPV"] =
i.book1D(
"KindOfSignalPV",
"KindOfSignalPV", 9, -0.5, 8.5);
152 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(1,
"!Highest!Assoc2Any");
153 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(2,
"Highest!Assoc2Any");
154 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(3,
"!HighestAssoc2First");
155 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(4,
"HighestAssoc2First");
156 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(5,
"!HighestAssoc2!First");
157 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(6,
"HighestAssoc2!First");
158 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(7,
"!HighestAssoc2First");
159 mes_[
label][
"KindOfSignalPV"]->getTH1()->GetXaxis()->SetBinLabel(8,
"HighestAssoc2First");
160 mes_[
label][
"MisTagRate"] =
i.book1D(
"MisTagRate",
"MisTagRate", 2, -0.5, 1.5);
161 mes_[
label][
"MisTagRate_vs_PU"] =
i.bookProfile(
"MisTagRate_vs_PU",
"MisTagRate_vs_PU", 125, 0., 250., 2, 0., 1.);
163 i.bookProfile(
"MisTagRate_vs_sum-pt2",
"MisTagRate_vs_sum-pt2", 15, &log_pt2_bins_double[0], 2, 0., 1.);
164 mes_[
label][
"MisTagRate_vs_Z"] =
i.bookProfile(
"MisTagRate_vs_Z",
"MisTagRate_vs_Z", 120, -60., 60., 2, 0., 1.);
165 mes_[
label][
"MisTagRate_vs_R"] =
i.bookProfile(
"MisTagRate_vs_R",
"MisTagRate_vs_R", 120, 0., 0.6, 2, 0., 1.);
167 i.bookProfile(
"MisTagRate_vs_NumTracks",
"MisTagRate_vs_NumTracks", 100, 0., 200, 2, 0., 1.);
168 mes_[
label][
"MisTagRateSignalIsHighest"] =
169 i.book1D(
"MisTagRateSignalIsHighest",
"MisTagRateSignalIsHighest", 2, -0.5, 1.5);
170 mes_[
label][
"MisTagRateSignalIsHighest_vs_PU"] =
171 i.bookProfile(
"MisTagRateSignalIsHighest_vs_PU",
"MisTagRateSignalIsHighest_vs_PU", 125, 0., 250., 2, 0., 1.);
172 mes_[
label][
"MisTagRateSignalIsHighest_vs_sum-pt2"] =
i.bookProfile(
"MisTagRateSignalIsHighest_vs_sum-pt2",
173 "MisTagRateSignalIsHighest_vs_sum-pt2",
175 &log_pt2_bins_double[0],
179 mes_[
label][
"MisTagRateSignalIsHighest_vs_Z"] =
180 i.bookProfile(
"MisTagRateSignalIsHighest_vs_Z",
"MisTagRateSignalIsHighest_vs_Z", 120, -60., 60., 2, 0., 1.);
181 mes_[
label][
"MisTagRateSignalIsHighest_vs_R"] =
182 i.bookProfile(
"MisTagRateSignalIsHighest_vs_R",
"MisTagRateSignalIsHighest_vs_R", 120, 0., 0.6, 2, 0., 1.);
183 mes_[
label][
"MisTagRateSignalIsHighest_vs_NumTracks"] =
i.bookProfile(
184 "MisTagRateSignalIsHighest_vs_NumTracks",
"MisTagRateSignalIsHighest_vs_NumTracks", 100, 0., 200, 2, 0., 1.);
185 mes_[
label][
"MisTagRateSignalIsNotHighest"] =
186 i.book1D(
"MisTagRateSignalIsNotHighest",
"MisTagRateSignalIsNotHighest", 2, -0.5, 1.5);
187 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_PU"] =
i.bookProfile(
188 "MisTagRateSignalIsNotHighest_vs_PU",
"MisTagRateSignalIsNotHighest_vs_PU", 125, 0., 250., 2, 0., 1.);
189 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_sum-pt2"] =
i.bookProfile(
"MisTagRateSignalIsNotHighest_vs_sum-pt2",
190 "MisTagRateSignalIsNotHighest_vs_sum-pt2",
192 &log_pt2_bins_double[0],
196 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_Z"] =
i.bookProfile(
197 "MisTagRateSignalIsNotHighest_vs_Z",
"MisTagRateSignalIsNotHighest_vs_Z", 120, -60., 60., 2, 0., 1.);
198 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_R"] =
i.bookProfile(
199 "MisTagRateSignalIsNotHighest_vs_R",
"MisTagRateSignalIsNotHighest_vs_R", 120, 0., 0.6, 2, 0., 1.);
200 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_NumTracks"] =
201 i.bookProfile(
"MisTagRateSignalIsNotHighest_vs_NumTracks",
202 "MisTagRateSignalIsNotHighest_vs_NumTracks",
210 i.book1D(
"TruePVLocationIndex",
"TruePVLocationIndexInRecoVertexCollection", 12, -1.5, 10.5);
211 mes_[
label][
"TruePVLocationIndexCumulative"] =
212 i.book1D(
"TruePVLocationIndexCumulative",
"TruePVLocationIndexInRecoVertexCollectionCumulative", 3, -1.5, 1.5);
213 mes_[
label][
"TruePVLocationIndexSignalIsHighest"] =
214 i.book1D(
"TruePVLocationIndexSignalIsHighest",
215 "TruePVLocationIndexSignalIsHighestInRecoVertexCollection",
219 mes_[
label][
"TruePVLocationIndexSignalIsNotHighest"] =
220 i.book1D(
"TruePVLocationIndexSignalIsNotHighest",
221 "TruePVLocationIndexSignalIsNotHighestInRecoVertexCollection",
228 mes_[
label][
"GenAllAssoc2Reco_NumVertices"] =
229 i.book1D(
"GenAllAssoc2Reco_NumVertices",
"GeneratedAllAssoc2Reco_NumVertices", 100, 0., 200.);
230 mes_[
label][
"GenAllAssoc2Reco_X"] =
i.book1D(
"GenAllAssoc2Reco_X",
"GeneratedAllAssoc2Reco_X", 120, -0.6, 0.6);
231 mes_[
label][
"GenAllAssoc2Reco_Y"] =
i.book1D(
"GenAllAssoc2Reco_Y",
"GeneratedAllAssoc2Reco_Y", 120, -0.6, 0.6);
232 mes_[
label][
"GenAllAssoc2Reco_Z"] =
i.book1D(
"GenAllAssoc2Reco_Z",
"GeneratedAllAssoc2Reco_Z", 120, -60, 60);
233 mes_[
label][
"GenAllAssoc2Reco_R"] =
i.book1D(
"GenAllAssoc2Reco_R",
"GeneratedAllAssoc2Reco_R", 120, 0, 0.6);
235 i.book1D(
"GenAllAssoc2Reco_Pt2",
"GeneratedAllAssoc2Reco_Sum-pt2", 15, &log_pt2_bins[0]);
236 mes_[
label][
"GenAllAssoc2Reco_NumTracks"] =
237 i.book1D(
"GenAllAssoc2Reco_NumTracks",
"GeneratedAllAssoc2Reco_NumTracks", 24, &log_ntrk_bins[0]);
238 mes_[
label][
"GenAllAssoc2Reco_ClosestDistanceZ"] =
239 i.book1D(
"GenAllAssoc2Reco_ClosestDistanceZ",
"GeneratedAllAssoc2Reco_ClosestDistanceZ", 30, &log_bins[0]);
240 book1d(
"GenPVAssoc2RecoPV_X", 120, -0.6, 0.6);
241 book1d(
"GenPVAssoc2RecoPV_Y", 120, -0.6, 0.6);
242 book1d(
"GenPVAssoc2RecoPV_Z", 120, -60, 60);
246 mes_[
label][
"GenAllAssoc2RecoMatched_NumVertices"] =
247 i.book1D(
"GenAllAssoc2RecoMatched_NumVertices",
"GeneratedAllAssoc2RecoMatched_NumVertices", 100, 0., 200.);
248 mes_[
label][
"GenAllAssoc2RecoMatched_X"] =
249 i.book1D(
"GenAllAssoc2RecoMatched_X",
"GeneratedAllAssoc2RecoMatched_X", 120, -0.6, 0.6);
250 mes_[
label][
"GenAllAssoc2RecoMatched_Y"] =
251 i.book1D(
"GenAllAssoc2RecoMatched_Y",
"GeneratedAllAssoc2RecoMatched_Y", 120, -0.6, 0.6);
252 mes_[
label][
"GenAllAssoc2RecoMatched_Z"] =
253 i.book1D(
"GenAllAssoc2RecoMatched_Z",
"GeneratedAllAssoc2RecoMatched_Z", 120, -60, 60);
254 mes_[
label][
"GenAllAssoc2RecoMatched_R"] =
255 i.book1D(
"GenAllAssoc2RecoMatched_R",
"GeneratedAllAssoc2RecoMatched_R", 120, 0, 0.6);
256 mes_[
label][
"GenAllAssoc2RecoMatched_Pt2"] =
257 i.book1D(
"GenAllAssoc2RecoMatched_Pt2",
"GeneratedAllAssoc2RecoMatched_Sum-pt2", 15, &log_pt2_bins[0]);
258 mes_[
label][
"GenAllAssoc2RecoMatched_NumTracks"] =
259 i.book1D(
"GenAllAssoc2RecoMatched_NumTracks",
"GeneratedAllAssoc2RecoMatched_NumTracks", 24, &log_ntrk_bins[0]);
260 mes_[
label][
"GenAllAssoc2RecoMatched_ClosestDistanceZ"] =
i.book1D(
261 "GenAllAssoc2RecoMatched_ClosestDistanceZ",
"GeneratedAllAssoc2RecoMatched_ClosestDistanceZ", 30, &log_bins[0]);
262 book1d(
"GenPVAssoc2RecoPVMatched_X", 120, -0.6, 0.6);
263 book1d(
"GenPVAssoc2RecoPVMatched_Y", 120, -0.6, 0.6);
264 book1d(
"GenPVAssoc2RecoPVMatched_Z", 120, -60, 60);
268 mes_[
label][
"GenAllAssoc2RecoMultiMatched_NumVertices"] =
i.book1D(
269 "GenAllAssoc2RecoMultiMatched_NumVertices",
"GeneratedAllAssoc2RecoMultiMatched_NumVertices", 100, 0., 200.);
270 mes_[
label][
"GenAllAssoc2RecoMultiMatched_X"] =
271 i.book1D(
"GenAllAssoc2RecoMultiMatched_X",
"GeneratedAllAssoc2RecoMultiMatched_X", 120, -0.6, 0.6);
272 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Y"] =
273 i.book1D(
"GenAllAssoc2RecoMultiMatched_Y",
"GeneratedAllAssoc2RecoMultiMatched_Y", 120, -0.6, 0.6);
274 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Z"] =
275 i.book1D(
"GenAllAssoc2RecoMultiMatched_Z",
"GeneratedAllAssoc2RecoMultiMatched_Z", 120, -60, 60);
276 mes_[
label][
"GenAllAssoc2RecoMultiMatched_R"] =
277 i.book1D(
"GenAllAssoc2RecoMultiMatched_R",
"GeneratedAllAssoc2RecoMultiMatched_R", 120, 0, 0.6);
278 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Pt2"] =
i.book1D(
279 "GenAllAssoc2RecoMultiMatched_Pt2",
"GeneratedAllAssoc2RecoMultiMatched_Sum-pt2", 15, &log_pt2_bins[0]);
280 mes_[
label][
"GenAllAssoc2RecoMultiMatched_NumTracks"] =
i.book1D(
"GenAllAssoc2RecoMultiMatched_NumTracks",
281 "GeneratedAllAssoc2RecoMultiMatched_NumTracks",
284 mes_[
label][
"GenAllAssoc2RecoMultiMatched_ClosestDistanceZ"] =
285 i.book1D(
"GenAllAssoc2RecoMultiMatched_ClosestDistanceZ",
286 "GeneratedAllAssoc2RecoMultiMatched_ClosestDistanceZ",
291 mes_[
label][
"RecoAllAssoc2Gen_NumVertices"] =
292 i.book1D(
"RecoAllAssoc2Gen_NumVertices",
"ReconstructedAllAssoc2Gen_NumVertices", 100, 0., 200.);
293 mes_[
label][
"RecoAllAssoc2Gen_X"] =
i.book1D(
"RecoAllAssoc2Gen_X",
"ReconstructedAllAssoc2Gen_X", 120, -0.6, 0.6);
294 mes_[
label][
"RecoAllAssoc2Gen_Y"] =
i.book1D(
"RecoAllAssoc2Gen_Y",
"ReconstructedAllAssoc2Gen_Y", 120, -0.6, 0.6);
295 mes_[
label][
"RecoAllAssoc2Gen_Z"] =
i.book1D(
"RecoAllAssoc2Gen_Z",
"ReconstructedAllAssoc2Gen_Z", 120, -60, 60);
296 mes_[
label][
"RecoAllAssoc2Gen_R"] =
i.book1D(
"RecoAllAssoc2Gen_R",
"ReconstructedAllAssoc2Gen_R", 120, 0, 0.6);
298 i.book1D(
"RecoAllAssoc2Gen_Pt2",
"ReconstructedAllAssoc2Gen_Sum-pt2", 15, &log_pt2_bins[0]);
300 i.book1D(
"RecoAllAssoc2Gen_Ndof",
"ReconstructedAllAssoc2Gen_Ndof", 120, 0., 240.);
301 mes_[
label][
"RecoAllAssoc2Gen_NumTracks"] =
302 i.book1D(
"RecoAllAssoc2Gen_NumTracks",
"ReconstructedAllAssoc2Gen_NumTracks", 24, &log_ntrk_bins[0]);
303 mes_[
label][
"RecoAllAssoc2Gen_PU"] =
i.book1D(
"RecoAllAssoc2Gen_PU",
"ReconstructedAllAssoc2Gen_PU", 125, 0., 250.);
304 mes_[
label][
"RecoAllAssoc2Gen_ClosestDistanceZ"] =
305 i.book1D(
"RecoAllAssoc2Gen_ClosestDistanceZ",
"ReconstructedAllAssoc2Gen_ClosestDistanceZ", 30, &log_bins[0]);
306 mes_[
label][
"RecoAllAssoc2GenProperties"] =
307 i.book1D(
"RecoAllAssoc2GenProperties",
"ReconstructedAllAssoc2Gen_Properties", 8, -0.5, 7.5);
308 mes_[
label][
"RecoAllAssoc2Gen_PairDistanceZ"] =
309 i.book1D(
"RecoAllAssoc2Gen_PairDistanceZ",
"RecoAllAssoc2Gen_PairDistanceZ", 1000, 0, 20);
313 mes_[
label][
"RecoAllAssoc2GenMatched_NumVertices"] =
314 i.book1D(
"RecoAllAssoc2GenMatched_NumVertices",
"ReconstructedAllAssoc2GenMatched_NumVertices", 100, 0., 200.);
315 mes_[
label][
"RecoAllAssoc2GenMatched_X"] =
316 i.book1D(
"RecoAllAssoc2GenMatched_X",
"ReconstructedAllAssoc2GenMatched_X", 120, -0.6, 0.6);
317 mes_[
label][
"RecoAllAssoc2GenMatched_Y"] =
318 i.book1D(
"RecoAllAssoc2GenMatched_Y",
"ReconstructedAllAssoc2GenMatched_Y", 120, -0.6, 0.6);
319 mes_[
label][
"RecoAllAssoc2GenMatched_Z"] =
320 i.book1D(
"RecoAllAssoc2GenMatched_Z",
"ReconstructedAllAssoc2GenMatched_Z", 120, -60, 60);
321 mes_[
label][
"RecoAllAssoc2GenMatched_R"] =
322 i.book1D(
"RecoAllAssoc2GenMatched_R",
"ReconstructedAllAssoc2GenMatched_R", 120, 0, 0.6);
323 mes_[
label][
"RecoAllAssoc2GenMatched_Pt2"] =
324 i.book1D(
"RecoAllAssoc2GenMatched_Pt2",
"ReconstructedAllAssoc2GenMatched_Sum-pt2", 15, &log_pt2_bins[0]);
325 mes_[
label][
"RecoAllAssoc2GenMatched_Ndof"] =
326 i.book1D(
"RecoAllAssoc2GenMatched_Ndof",
"ReconstructedAllAssoc2GenMatched_Ndof", 120, 0., 240.);
327 mes_[
label][
"RecoAllAssoc2GenMatched_NumTracks"] =
i.book1D(
328 "RecoAllAssoc2GenMatched_NumTracks",
"ReconstructedAllAssoc2GenMatched_NumTracks", 24, &log_ntrk_bins[0]);
329 mes_[
label][
"RecoAllAssoc2GenMatched_PU"] =
330 i.book1D(
"RecoAllAssoc2GenMatched_PU",
"ReconstructedAllAssoc2GenMatched_PU", 125, 0., 250.);
331 mes_[
label][
"RecoAllAssoc2GenMatched_ClosestDistanceZ"] =
332 i.book1D(
"RecoAllAssoc2GenMatched_ClosestDistanceZ",
333 "ReconstructedAllAssoc2GenMatched_ClosestDistanceZ",
339 mes_[
label][
"RecoAllAssoc2GenMultiMatched_NumVertices"] =
i.book1D(
340 "RecoAllAssoc2GenMultiMatched_NumVertices",
"ReconstructedAllAssoc2GenMultiMatched_NumVertices", 100, 0., 200.);
341 mes_[
label][
"RecoAllAssoc2GenMultiMatched_X"] =
342 i.book1D(
"RecoAllAssoc2GenMultiMatched_X",
"ReconstructedAllAssoc2GenMultiMatched_X", 120, -0.6, 0.6);
343 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Y"] =
344 i.book1D(
"RecoAllAssoc2GenMultiMatched_Y",
"ReconstructedAllAssoc2GenMultiMatched_Y", 120, -0.6, 0.6);
345 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Z"] =
346 i.book1D(
"RecoAllAssoc2GenMultiMatched_Z",
"ReconstructedAllAssoc2GenMultiMatched_Z", 120, -60, 60);
347 mes_[
label][
"RecoAllAssoc2GenMultiMatched_R"] =
348 i.book1D(
"RecoAllAssoc2GenMultiMatched_R",
"ReconstructedAllAssoc2GenMultiMatched_R", 120, 0, 0.6);
349 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Pt2"] =
i.book1D(
350 "RecoAllAssoc2GenMultiMatched_Pt2",
"ReconstructedAllAssoc2GenMultiMatched_Sum-pt2", 15, &log_pt2_bins[0]);
351 mes_[
label][
"RecoAllAssoc2GenMultiMatched_NumTracks"] =
i.book1D(
"RecoAllAssoc2GenMultiMatched_NumTracks",
352 "ReconstructedAllAssoc2GenMultiMatched_NumTracks",
355 mes_[
label][
"RecoAllAssoc2GenMultiMatched_PU"] =
356 i.book1D(
"RecoAllAssoc2GenMultiMatched_PU",
"ReconstructedAllAssoc2GenMultiMatched_PU", 125, 0., 250.);
357 mes_[
label][
"RecoAllAssoc2GenMultiMatched_ClosestDistanceZ"] =
358 i.book1D(
"RecoAllAssoc2GenMultiMatched_ClosestDistanceZ",
359 "ReconstructedAllAssoc2GenMultiMatched_ClosestDistanceZ",
360 log_mergez_bins.size() - 1,
361 &log_mergez_bins[0]);
369 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_NumVertices"] =
370 i.book1D(
"RecoAllAssoc2MultiMatchedGen_NumVertices",
"RecoAllAssoc2MultiMatchedGen_NumVertices", 100, 0., 200.);
371 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_X"] =
372 i.book1D(
"RecoAllAssoc2MultiMatchedGen_X",
"RecoAllAssoc2MultiMatchedGen_X", 120, -0.6, 0.6);
373 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Y"] =
374 i.book1D(
"RecoAllAssoc2MultiMatchedGen_Y",
"RecoAllAssoc2MultiMatchedGen_Y", 120, -0.6, 0.6);
375 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Z"] =
376 i.book1D(
"RecoAllAssoc2MultiMatchedGen_Z",
"RecoAllAssoc2MultiMatchedGen_Z", 120, -60, 60);
377 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_R"] =
378 i.book1D(
"RecoAllAssoc2MultiMatchedGen_R",
"RecoAllAssoc2MultiMatchedGen_R", 120, 0, 0.6);
379 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Pt2"] =
380 i.book1D(
"RecoAllAssoc2MultiMatchedGen_Pt2",
"RecoAllAssoc2MultiMatchedGen_Sum-pt2", 15, &log_pt2_bins[0]);
381 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_NumTracks"] =
i.book1D(
382 "RecoAllAssoc2MultiMatchedGen_NumTracks",
"RecoAllAssoc2MultiMatchedGen_NumTracks", 24, &log_ntrk_bins[0]);
383 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_PU"] =
384 i.book1D(
"RecoAllAssoc2MultiMatchedGen_PU",
"RecoAllAssoc2MultiMatchedGen_PU", 125, 0., 250.);
385 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ"] =
386 i.book1D(
"RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ",
387 "RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ",
390 mes_[
label][
"RecoAllAssoc2GenSimForMerge_ClosestDistanceZ"] =
391 i.book1D(
"RecoAllAssoc2GenSimForMerge_ClosestDistanceZ",
392 "RecoAllAssoc2GenSimForMerge_ClosestDistanceZ",
393 log_mergez_bins.size() - 1,
394 &log_mergez_bins[0]);
397 const double resolpt2 = 10;
399 const double minPull = -10;
400 const double maxPull = 10;
401 const double nPull = 100;
403 auto bookResolPull = [&](
const std::string&
prefix,
const double resolx,
const double resoly,
const double resolz) {
404 book1d((
prefix +
"_ResolX").c_str(), 100, -resolx, resolx);
405 book1d((
prefix +
"_ResolY").c_str(), 100, -resoly, resoly);
406 book1d((
prefix +
"_ResolZ").c_str(), 100, -resolz, resolz);
407 book1d((
prefix +
"_ResolPt2").c_str(), 100, -resolpt2, resolpt2);
408 book1d((
prefix +
"_PullX").c_str(), 250, -25, 25);
409 book1d((
prefix +
"_PullY").c_str(), 250, -25, 25);
410 book1d((
prefix +
"_PullZ").c_str(), 250, -25, 25);
412 book2d((
prefix +
"_ResolX_vs_PU").c_str(), 125, 0., 250., 100, -resolx, resolx);
413 book2d((
prefix +
"_ResolY_vs_PU").c_str(), 125, 0., 250., 100, -resoly, resoly);
414 book2d((
prefix +
"_ResolZ_vs_PU").c_str(), 125, 0., 250., 100, -resolz, resolz);
415 book2d((
prefix +
"_ResolPt2_vs_PU").c_str(), 125, 0., 250., 100, -resolpt2, resolpt2);
416 book2d((
prefix +
"_PullX_vs_PU").c_str(), 125, 0., 250., nPull, minPull, maxPull);
417 book2d((
prefix +
"_PullY_vs_PU").c_str(), 125, 0., 250., nPull, minPull, maxPull);
418 book2d((
prefix +
"_PullZ_vs_PU").c_str(), 125, 0., 250., nPull, minPull, maxPull);
420 book2dlogx((
prefix +
"_ResolX_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], 100, -resolx, resolx);
421 book2dlogx((
prefix +
"_ResolY_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], 100, -resoly, resoly);
422 book2dlogx((
prefix +
"_ResolZ_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], 100, -resolz, resolz);
423 book2dlogx((
prefix +
"_ResolPt2_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], 100, -resolpt2, resolpt2);
424 book2dlogx((
prefix +
"_PullX_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], nPull, minPull, maxPull);
425 book2dlogx((
prefix +
"_PullY_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], nPull, minPull, maxPull);
426 book2dlogx((
prefix +
"_PullZ_vs_NumTracks").c_str(), 24, &log_ntrk_bins[0], nPull, minPull, maxPull);
428 book2d((
prefix +
"_ResolX_vs_Z").c_str(), 120, -60, 60, 100, -resolx, resolx);
429 book2d((
prefix +
"_ResolY_vs_Z").c_str(), 120, -60, 60, 100, -resoly, resoly);
430 book2d((
prefix +
"_ResolZ_vs_Z").c_str(), 120, -60, 60, 100, -resolz, resolz);
431 book2d((
prefix +
"_ResolPt2_vs_Z").c_str(), 120, -60, 60, 100, -resolpt2, resolpt2);
432 book2d((
prefix +
"_PullX_vs_Z").c_str(), 120, -60, 60, nPull, minPull, maxPull);
433 book2d((
prefix +
"_PullY_vs_Z").c_str(), 120, -60, 60, nPull, minPull, maxPull);
434 book2d((
prefix +
"_PullZ_vs_Z").c_str(), 120, -60, 60, nPull, minPull, maxPull);
436 book2dlogx((
prefix +
"_ResolX_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], 100, -resolx, resolx);
437 book2dlogx((
prefix +
"_ResolY_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], 100, -resoly, resoly);
438 book2dlogx((
prefix +
"_ResolZ_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], 100, -resolz, resolz);
440 (
prefix +
"_ResolPt2_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], 100, -resolpt2, resolpt2);
441 book2dlogx((
prefix +
"_PullX_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], nPull, minPull, maxPull);
442 book2dlogx((
prefix +
"_PullY_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], nPull, minPull, maxPull);
443 book2dlogx((
prefix +
"_PullZ_vs_Pt").c_str(), log_pt_bins.size() - 1, &log_pt_bins[0], nPull, minPull, maxPull);
446 bookResolPull(
"RecoAllAssoc2GenMatched", 0.1, 0.1, 0.1);
447 bookResolPull(
"RecoAllAssoc2GenMatchedMerged", 0.1, 0.1, 0.1);
449 "RecoPVAssoc2GenPVMatched", 0.01, 0.01, 0.01);
453 book1d(
"RecoPVAssoc2GenPVMatched_Purity", 50, 0, 1);
454 book1d(
"RecoPVAssoc2GenPVMatched_Missing", 50, 0, 1);
455 book2d(
"RecoPVAssoc2GenPVMatched_Purity_vs_Index", 100, 0, 100, 50, 0, 1);
458 book1d(
"RecoPVAssoc2GenPVNotMatched_Purity", 50, 0, 1);
459 book1d(
"RecoPVAssoc2GenPVNotMatched_Missing", 50, 0, 1);
460 book2d(
"RecoPVAssoc2GenPVNotMatched_Purity_vs_Index", 100, 0, 100, 50, 0, 1);
463 book1d(
"RecoAllAssoc2Gen_Purity", 50, 0, 1);
464 book1d(
"RecoAllAssoc2GenMatched_Purity", 50, 0, 1);
468 book1dlogx(
"RecoAssoc2GenPVMatched_Pt2", 15, &log_pt2_bins[0]);
469 book1dlogx(
"RecoAssoc2GenPVNotMatched_Pt2", 15, &log_pt2_bins[0]);
471 book1dlogx(
"RecoAssoc2GenPVMatchedNotHighest_Pt2", 15, &log_pt2_bins[0]);
472 book1dlogx(
"RecoAssoc2GenPVNotMatched_GenPVTracksRemoved_Pt2", 15, &log_pt2_bins[0]);
475 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionReco", 50, 0, 1);
476 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionReco", 50, 0, 1);
477 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionRecoMatched", 50, 0, 1);
478 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionRecoMatched", 50, 0, 1);
480 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionSim", 50, 0, 1);
481 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionSim", 50, 0, 1);
482 book1d(
"RecoAllAssoc2GenSingleMatched_SharedTrackFractionSimMatched", 50, 0, 1);
483 book1d(
"RecoAllAssoc2GenMultiMatched_SharedTrackFractionSimMatched", 50, 0, 1);
488 if (
v.eventId.event() == 0) {
489 mes_[
"root_folder"][
"GenPV_X"]->Fill(
v.x);
490 mes_[
"root_folder"][
"GenPV_Y"]->Fill(
v.y);
491 mes_[
"root_folder"][
"GenPV_Z"]->Fill(
v.z);
492 mes_[
"root_folder"][
"GenPV_R"]->Fill(
v.r);
493 mes_[
"root_folder"][
"GenPV_Pt2"]->Fill(
v.ptsq);
494 mes_[
"root_folder"][
"GenPV_NumTracks"]->Fill(
v.nGenTrk);
495 if (
v.closest_vertex_distance_z > 0.)
496 mes_[
"root_folder"][
"GenPV_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
498 mes_[
"root_folder"][
"GenAllV_X"]->Fill(
v.x);
499 mes_[
"root_folder"][
"GenAllV_Y"]->Fill(
v.y);
500 mes_[
"root_folder"][
"GenAllV_Z"]->Fill(
v.z);
501 mes_[
"root_folder"][
"GenAllV_R"]->Fill(
v.r);
502 mes_[
"root_folder"][
"GenAllV_Pt2"]->Fill(
v.ptsq);
503 mes_[
"root_folder"][
"GenAllV_NumTracks"]->Fill(
v.nGenTrk);
504 if (
v.closest_vertex_distance_z > 0.)
505 mes_[
"root_folder"][
"GenAllV_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
514 mes_[
label][
"GenAllAssoc2Reco_Pt2"]->Fill(
v.ptsq);
515 mes_[
label][
"GenAllAssoc2Reco_NumTracks"]->Fill(
v.nGenTrk);
516 if (
v.closest_vertex_distance_z > 0.)
517 mes_[
label][
"GenAllAssoc2Reco_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
518 if (!
v.rec_vertices.empty()) {
519 mes_[
label][
"GenAllAssoc2RecoMatched_X"]->Fill(
v.x);
520 mes_[
label][
"GenAllAssoc2RecoMatched_Y"]->Fill(
v.y);
521 mes_[
label][
"GenAllAssoc2RecoMatched_Z"]->Fill(
v.z);
522 mes_[
label][
"GenAllAssoc2RecoMatched_R"]->Fill(
v.r);
523 mes_[
label][
"GenAllAssoc2RecoMatched_Pt2"]->Fill(
v.ptsq);
524 mes_[
label][
"GenAllAssoc2RecoMatched_NumTracks"]->Fill(
v.nGenTrk);
525 if (
v.closest_vertex_distance_z > 0.)
526 mes_[
label][
"GenAllAssoc2RecoMatched_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
528 if (
v.rec_vertices.size() > 1) {
529 mes_[
label][
"GenAllAssoc2RecoMultiMatched_X"]->Fill(
v.x);
530 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Y"]->Fill(
v.y);
531 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Z"]->Fill(
v.z);
532 mes_[
label][
"GenAllAssoc2RecoMultiMatched_R"]->Fill(
v.r);
533 mes_[
label][
"GenAllAssoc2RecoMultiMatched_Pt2"]->Fill(
v.ptsq);
534 mes_[
label][
"GenAllAssoc2RecoMultiMatched_NumTracks"]->Fill(
v.nGenTrk);
535 if (
v.closest_vertex_distance_z > 0.)
536 mes_[
label][
"GenAllAssoc2RecoMultiMatched_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
542 mes_[
label][
"GenPVAssoc2RecoPV_X"]->Fill(
v.x);
543 mes_[
label][
"GenPVAssoc2RecoPV_Y"]->Fill(
v.y);
544 mes_[
label][
"GenPVAssoc2RecoPV_Z"]->Fill(
v.z);
545 if (genPVMatchedToRecoPV) {
546 mes_[
label][
"GenPVAssoc2RecoPVMatched_X"]->Fill(
v.x);
547 mes_[
label][
"GenPVAssoc2RecoPVMatched_Y"]->Fill(
v.y);
548 mes_[
label][
"GenPVAssoc2RecoPVMatched_Z"]->Fill(
v.z);
558 mes_[
label][
"RecoAllAssoc2Gen_Pt2"]->Fill(
v.ptsq);
559 mes_[
label][
"RecoAllAssoc2Gen_Ndof"]->Fill(
v.recVtx->ndof());
560 mes_[
label][
"RecoAllAssoc2Gen_NumTracks"]->Fill(
v.nRecoTrk);
561 mes_[
label][
"RecoAllAssoc2Gen_PU"]->Fill(num_pileup_vertices);
562 mes_[
label][
"RecoAllAssoc2Gen_Purity"]->Fill(
v.purity);
563 if (
v.closest_vertex_distance_z > 0.)
564 mes_[
label][
"RecoAllAssoc2Gen_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
565 if (!
v.sim_vertices.empty()) {
567 mes_[
label][
"RecoAllAssoc2GenMatched_X"]->Fill(
v.x);
568 mes_[
label][
"RecoAllAssoc2GenMatched_Y"]->Fill(
v.y);
569 mes_[
label][
"RecoAllAssoc2GenMatched_Z"]->Fill(
v.z);
570 mes_[
label][
"RecoAllAssoc2GenMatched_R"]->Fill(
v.r);
571 mes_[
label][
"RecoAllAssoc2GenMatched_Pt2"]->Fill(
v.ptsq);
572 mes_[
label][
"RecoAllAssoc2GenMatched_Ndof"]->Fill(
v.recVtx->ndof());
573 mes_[
label][
"RecoAllAssoc2GenMatched_NumTracks"]->Fill(
v.nRecoTrk);
574 mes_[
label][
"RecoAllAssoc2GenMatched_PU"]->Fill(num_pileup_vertices);
575 mes_[
label][
"RecoAllAssoc2GenMatched_Purity"]->Fill(
v.purity);
576 if (
v.closest_vertex_distance_z > 0.)
577 mes_[
label][
"RecoAllAssoc2GenMatched_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
585 if (
v.sim_vertices_internal[0]->rec_vertices.size() > 1) {
587 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_X"]->Fill(
v.x);
588 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Y"]->Fill(
v.y);
589 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Z"]->Fill(
v.z);
590 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_R"]->Fill(
v.r);
591 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_Pt2"]->Fill(
v.ptsq);
592 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_NumTracks"]->Fill(
v.nRecoTrk);
593 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_PU"]->Fill(num_pileup_vertices);
594 if (
v.closest_vertex_distance_z > 0.)
595 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_ClosestDistanceZ"]->Fill(
v.closest_vertex_distance_z);
603 if (
v.sim_vertices_internal[0]->closest_vertex_distance_z > 0.)
604 mes_[
label][
"RecoAllAssoc2GenSimForMerge_ClosestDistanceZ"]->Fill(
605 v.sim_vertices_internal[0]->closest_vertex_distance_z);
608 if (
v.sim_vertices.size() > 1) {
610 mes_[
label][
"RecoAllAssoc2GenMultiMatched_X"]->Fill(
v.x);
611 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Y"]->Fill(
v.y);
612 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Z"]->Fill(
v.z);
613 mes_[
label][
"RecoAllAssoc2GenMultiMatched_R"]->Fill(
v.r);
614 mes_[
label][
"RecoAllAssoc2GenMultiMatched_Pt2"]->Fill(
v.ptsq);
615 mes_[
label][
"RecoAllAssoc2GenMultiMatched_NumTracks"]->Fill(
v.nRecoTrk);
616 mes_[
label][
"RecoAllAssoc2GenMultiMatched_PU"]->Fill(num_pileup_vertices);
617 if (
v.sim_vertices_internal[0]->closest_vertex_distance_z > 0.)
618 mes_[
label][
"RecoAllAssoc2GenMultiMatched_ClosestDistanceZ"]->Fill(
619 v.sim_vertices_internal[0]->closest_vertex_distance_z);
621 mes_[
label][
"RecoAllAssoc2GenProperties"]->Fill(
v.kind_of_vertex);
624 if (
v.sim_vertices.size() == 1) {
625 prefix =
"RecoAllAssoc2GenSingleMatched_SharedTrackFraction";
626 }
else if (
v.sim_vertices.size() > 1) {
627 prefix =
"RecoAllAssoc2GenMultiMatched_SharedTrackFraction";
630 for (
size_t i = 0;
i <
v.sim_vertices.size(); ++
i) {
631 const double sharedTracks =
v.sim_vertices_num_shared_tracks[
i];
634 mes_[
label][
prefix +
"RecoMatched"]->Fill(sharedTracks /
v.num_matched_sim_tracks);
642 int num_pileup_vertices,
646 if (
v.sim_vertices_internal.size() > 1) {
650 prefix =
"RecoPVAssoc2GenPVMatched";
659 const double pt2res =
v.ptsq -
bestMatch.ptsq;
661 const double xresol = xres;
662 const double yresol = yres;
663 const double zresol = zres;
664 const double pt2resol = pt2res /
v.ptsq;
665 const double xpull = xres /
v.recVtx->xError();
666 const double ypull = yres /
v.recVtx->yError();
667 const double zpull = zres /
v.recVtx->zError();
677 mes_[
label][
prefix +
"_ResolX_vs_PU"]->Fill(num_pileup_vertices, xresol);
678 mes_[
label][
prefix +
"_ResolY_vs_PU"]->Fill(num_pileup_vertices, yresol);
679 mes_[
label][
prefix +
"_ResolZ_vs_PU"]->Fill(num_pileup_vertices, zresol);
680 mes_[
label][
prefix +
"_ResolPt2_vs_PU"]->Fill(num_pileup_vertices, pt2resol);
681 mes_[
label][
prefix +
"_PullX_vs_PU"]->Fill(num_pileup_vertices, xpull);
682 mes_[
label][
prefix +
"_PullY_vs_PU"]->Fill(num_pileup_vertices, ypull);
683 mes_[
label][
prefix +
"_PullZ_vs_PU"]->Fill(num_pileup_vertices, zpull);
718 for (
const auto&
tp :
found->val) {
719 if (
tp.first->eventId().bunchCrossing() == 0 &&
tp.first->eventId().event() == 0)
728 std::vector<recoPrimaryVertex>& recopvs,
729 int genpv_position_in_reco_collection,
730 bool signal_is_highest_pt) {
734 std::vector<double> vtx_sumpt_sigmatched;
735 std::vector<double> vtx_sumpt2_sigmatched;
737 vtx_sumpt_sigmatched.reserve(recopvs.size());
738 vtx_sumpt2_sigmatched.reserve(recopvs.size());
741 for (
auto&
v : recopvs) {
742 double sumpt_all = 0;
743 double sumpt_sigmatched = 0;
744 double sumpt2_sigmatched = 0;
746 for (
auto iTrack =
vertex->tracks_begin(); iTrack !=
vertex->tracks_end(); ++iTrack) {
747 double pt = (*iTrack)->pt();
750 sumpt_sigmatched +=
pt;
751 sumpt2_sigmatched +=
pt *
pt;
754 v.purity = sumpt_sigmatched / sumpt_all;
756 vtx_sumpt_sigmatched.push_back(sumpt_sigmatched);
757 vtx_sumpt2_sigmatched.push_back(sumpt2_sigmatched);
760 const double vtxAll_sumpt_sigmatched = std::accumulate(vtx_sumpt_sigmatched.begin(), vtx_sumpt_sigmatched.end(), 0.0);
761 const double vtxNot0_sumpt_sigmatched = vtxAll_sumpt_sigmatched - vtx_sumpt_sigmatched[0];
762 const double missing = vtxNot0_sumpt_sigmatched / vtxAll_sumpt_sigmatched;
766 if (genpv_position_in_reco_collection == 0)
767 prefix =
"RecoPVAssoc2GenPVMatched_";
772 for (
size_t i = 0;
i < recopvs.size(); ++
i) {
773 hpurity->Fill(
i, recopvs[
i].purity);
777 for (
size_t i = 0;
i < recopvs.size(); ++
i) {
778 if (static_cast<int>(
i) == genpv_position_in_reco_collection) {
779 mes_[
label][
"RecoAssoc2GenPVMatched_Pt2"]->Fill(recopvs[
i].ptsq);
781 double pt2 = recopvs[
i].ptsq;
782 mes_[
label][
"RecoAssoc2GenPVNotMatched_Pt2"]->Fill(
pt2);
784 double pt2_pu =
pt2 - vtx_sumpt2_sigmatched[
i];
785 mes_[
label][
"RecoAssoc2GenPVNotMatched_GenPVTracksRemoved_Pt2"]->Fill(pt2_pu);
788 if (!signal_is_highest_pt && genpv_position_in_reco_collection >= 0)
789 mes_[
label][
"RecoAssoc2GenPVMatchedNotHighest_Pt2"]->Fill(recopvs[genpv_position_in_reco_collection].ptsq);
797 std::vector<PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex> simpv;
798 int current_event = -1;
801 std::cout <<
"getSimPVs TrackingVertexCollection " << std::endl;
804 for (TrackingVertexCollection::const_iterator
v = tVC->begin();
v != tVC->end(); ++
v) {
806 std::cout <<
"BunchX.EventId: " <<
v->eventId().bunchCrossing() <<
"." << (
v->eventId()).
event()
807 <<
" Position: " <<
v->position() <<
" G4/HepMC Vertices: " <<
v->g4Vertices().size() <<
"/" 808 <<
v->genVertices().size() <<
" t = " <<
v->position().t() * 1.e12
809 <<
" == 0:" << (
v->position().t() > 0) << std::endl;
820 if (
v->eventId().bunchCrossing() != 0)
822 if (
v->eventId().event() != current_event) {
823 current_event =
v->eventId().event();
828 if (fabs(
v->position().z()) > 1000)
834 sv.eventId =
v->eventId();
842 assert((**iTrack).eventId().bunchCrossing() == 0);
847 for (std::vector<simPrimaryVertex>::iterator
v0 = simpv.begin();
v0 != simpv.end();
v0++) {
848 if ((
sv.eventId ==
v0->eventId) && (fabs(
sv.x -
v0->x) < 1
e-5) && (fabs(
sv.y -
v0->y) < 1
e-5) &&
849 (fabs(
sv.z -
v0->z) < 1
e-5)) {
859 std::cout <<
"this is a new vertex " <<
sv.eventId.event() <<
" " <<
sv.x <<
" " <<
sv.y <<
" " <<
sv.z
864 std::cout <<
"this is not a new vertex" <<
sv.x <<
" " <<
sv.y <<
" " <<
sv.z << std::endl;
870 auto momentum = (*(*iTP)).momentum();
871 const reco::Track* matched_best_reco_track =
nullptr;
872 double match_quality = -1;
876 matched_best_reco_track = (*s2r_)[*iTP][0].first.get();
877 match_quality = (*s2r_)[*iTP][0].second;
880 std::cout <<
" Daughter momentum: " << momentum;
882 std::cout <<
" matched: " << (matched_best_reco_track !=
nullptr);
883 std::cout <<
" match-quality: " << match_quality;
886 vp->
ptot.setPx(vp->
ptot.x() + momentum.x());
887 vp->
ptot.setPy(vp->
ptot.y() + momentum.y());
888 vp->
ptot.setPz(vp->
ptot.z() + momentum.z());
889 vp->
ptot.setE(vp->
ptot.e() + (**iTP).energy());
890 vp->
ptsq += ((**iTP).pt() * (**iTP).pt());
893 if (matched_best_reco_track) {
901 if (((**iTP).pt() > 0.2) && (fabs((**iTP).eta()) < 2.5) && (**iTP).charge() != 0) {
908 std::cout <<
"average number of associated tracks: " 915 std::cout <<
"------- PrimaryVertexAnalyzer4PUSlimmed simPVs from " 919 for (std::vector<simPrimaryVertex>::iterator
v0 = simpv.begin();
v0 != simpv.end();
v0++) {
920 std::cout <<
"z=" <<
v0->z <<
" event=" <<
v0->eventId.event() << std::endl;
922 std::cout <<
"-----------------------------------------------" << std::endl;
931 auto prev_z = simpv.back().z;
933 vsim.closest_vertex_distance_z =
std::abs(vsim.z - prev_z);
937 for (std::vector<simPrimaryVertex>::iterator vsim = simpv.begin(); vsim != simpv.end(); vsim++) {
938 std::vector<simPrimaryVertex>::iterator vsim2 = vsim;
940 for (; vsim2 != simpv.end(); vsim2++) {
943 vsim->closest_vertex_distance_z =
std::min(vsim->closest_vertex_distance_z,
distance);
944 vsim2->closest_vertex_distance_z =
std::min(vsim2->closest_vertex_distance_z,
distance);
954 std::vector<PrimaryVertexAnalyzer4PUSlimmed::recoPrimaryVertex> recopv;
957 std::cout <<
"getRecoPVs TrackingVertexCollection " << std::endl;
960 for (
auto v = tVC->begin();
v != tVC->end(); ++
v) {
962 std::cout <<
" Position: " <<
v->position() << std::endl;
966 if (fabs(
v->z()) > 1000)
968 if (
v->isFake() || !
v->isValid())
975 recopv.push_back(
sv);
979 for (
auto iTrack =
v->tracks_begin(); iTrack !=
v->tracks_end(); ++iTrack) {
980 auto momentum = (*(*iTrack)).innerMomentum();
984 if (momentum.mag2() == 0)
985 momentum = (*(*iTrack)).momentum();
987 std::cout <<
" Daughter momentum: " << momentum;
991 vp->
ptsq += (momentum.perp2());
1003 std::cout <<
"------- PrimaryVertexAnalyzer4PUSlimmed recoPVs from " 1007 for (std::vector<recoPrimaryVertex>::iterator
v0 = recopv.begin();
v0 != recopv.end();
v0++) {
1010 std::cout <<
"-----------------------------------------------" << std::endl;
1019 auto prev_z = recopv.back().z;
1021 vreco.closest_vertex_distance_z =
std::abs(vreco.z - prev_z);
1024 for (std::vector<recoPrimaryVertex>::iterator vreco = recopv.begin(); vreco != recopv.end(); vreco++) {
1025 std::vector<recoPrimaryVertex>::iterator vreco2 = vreco;
1027 for (; vreco2 != recopv.end(); vreco2++) {
1030 vreco->closest_vertex_distance_z =
std::min(vreco->closest_vertex_distance_z,
distance);
1031 vreco2->closest_vertex_distance_z =
std::min(vreco2->closest_vertex_distance_z,
distance);
1038 for (
auto&
v : simpv) {
1039 v.rec_vertices.clear();
1047 std::cout <<
"PrimaryVertexAnalyzer4PUSlimmed::matchSim2RecoVertices " << std::endl;
1049 for (std::vector<simPrimaryVertex>::iterator vsim = simpv.begin(); vsim != simpv.end(); vsim++) {
1052 for (
const auto& vertexRefQuality :
matched->val) {
1053 vsim->rec_vertices.push_back(&(*(vertexRefQuality.first)));
1058 if (!vsim->rec_vertices.empty()) {
1059 for (
auto const&
v : vsim->rec_vertices) {
1060 std::cout <<
"Found a matching vertex for genVtx " << vsim->z <<
" at " <<
v->z()
1061 <<
" with sign: " << fabs(
v->z() - vsim->z) /
v->zError() << std::endl;
1064 std::cout <<
"No matching vertex for " << vsim->z << std::endl;
1069 std::cout <<
"Done with matching sim vertices" << std::endl;
1075 const std::vector<simPrimaryVertex>& simpv) {
1076 for (std::vector<recoPrimaryVertex>::iterator vrec = recopv.begin(); vrec != recopv.end(); vrec++) {
1079 for (
const auto& vertexRefQuality :
matched->val) {
1080 const auto tvPtr = &(*(vertexRefQuality.first));
1081 vrec->sim_vertices.push_back(tvPtr);
1086 for (
const auto& vv : simpv) {
1087 if (&(*(vv.sim_vertex)) == tv) {
1088 vrec->sim_vertices_internal.push_back(&vv);
1099 for (
auto v : vrec->sim_vertices) {
1100 std::cout <<
"Found a matching vertex for reco: " << vrec->z <<
" at gen:" <<
v->position().z()
1101 <<
" with sign: " << fabs(vrec->z -
v->position().z()) / vrec->recVtx->zError() << std::endl;
1113 using namespace reco;
1115 std::vector<float> pileUpInfo_z;
1120 for (
auto const& pu_info : *puinfoH.
product()) {
1122 mes_[
"root_folder"][
"GenVtx_vs_BX"]->Fill(pu_info.getBunchCrossing(), pu_info.getPU_NumInteractions());
1124 if (pu_info.getBunchCrossing() == 0) {
1125 pileUpInfo_z = pu_info.getPU_zpositions();
1127 for (
auto const&
p : pileUpInfo_z) {
1128 std::cout <<
"PileUpInfo on Z vertex: " <<
p << std::endl;
1139 edm::LogWarning(
"PrimaryVertexAnalyzer4PUSlimmed") <<
"TPCollectionH is not valid";
1144 edm::LogWarning(
"PrimaryVertexAnalyzer4PUSlimmed") <<
"TVCollectionH is not valid";
1156 edm::LogWarning(
"PrimaryVertexAnalyzer4PUSlimmed") <<
"simToRecoH is not valid";
1163 edm::LogWarning(
"PrimaryVertexAnalyzer4PUSlimmed") <<
"recoToSimH is not valid";
1168 if (!vertexAssociatorH.
isValid()) {
1169 edm::LogWarning(
"PrimaryVertexAnalyzer4PUSlimmed") <<
"vertexAssociatorH is not valid";
1174 std::vector<simPrimaryVertex> simpv;
1180 int kind_of_signal_vertex = 0;
1181 int num_pileup_vertices = simpv.size();
1183 mes_[
"root_folder"][
"GenAllV_NumVertices"]->Fill(simpv.size());
1184 bool signal_is_highest_pt =
1186 return lhs.
ptsq < rhs.ptsq;
1187 }) == simpv.begin();
1188 kind_of_signal_vertex |= (signal_is_highest_pt <<
HIGHEST_PT);
1190 mes_[
"root_folder"][
"SignalIsHighestPt2"]->Fill(signal_is_highest_pt ? 1. : 0.);
1194 int label_index = -1;
1197 std::vector<recoPrimaryVertex> recopv;
1201 if (!
iEvent.getByToken(vertex_token, recVtxs)) {
1204 <<
"Skipping vertex collection: " <<
label <<
" since it is missing.";
1213 for (
const auto&
v : *recVtxs) {
1214 if (
v.tracksSize() > 0) {
1215 const auto& ref =
v.trackRefAt(0);
1216 if (ref.isNull() || !ref.isAvailable()) {
1219 <<
"Skipping vertex collection: " <<
label 1220 <<
" since likely the track collection the vertex has refs pointing to is missing (at least the " 1221 "first TrackBaseRef is null or not available)";
1241 int num_total_gen_vertices_assoc2reco = 0;
1242 int num_total_reco_vertices_assoc2gen = 0;
1243 int num_total_gen_vertices_multiassoc2reco = 0;
1244 int num_total_reco_vertices_multiassoc2gen = 0;
1245 int num_total_reco_vertices_duplicate = 0;
1246 int genpv_position_in_reco_collection = -1;
1247 for (
auto const&
v : simpv) {
1250 if (
v.eventId.event() == 0) {
1251 if (!recVtxs->empty() &&
std::find(
v.rec_vertices.begin(),
v.rec_vertices.end(), &((*recVtxs.
product())[0])) !=
1252 v.rec_vertices.end()) {
1256 if (!
v.rec_vertices.empty()) {
1260 mes_[
label][
"KindOfSignalPV"]->Fill(kind_of_signal_vertex);
1261 mes_[
label][
"MisTagRate"]->Fill(mistag);
1262 mes_[
label][
"MisTagRate_vs_PU"]->Fill(simpv.size(), mistag);
1263 mes_[
label][
"MisTagRate_vs_sum-pt2"]->Fill(
v.ptsq, mistag);
1264 mes_[
label][
"MisTagRate_vs_Z"]->Fill(
v.z, mistag);
1265 mes_[
label][
"MisTagRate_vs_R"]->Fill(
v.r, mistag);
1266 mes_[
label][
"MisTagRate_vs_NumTracks"]->Fill(
v.nGenTrk, mistag);
1267 if (signal_is_highest_pt) {
1268 mes_[
label][
"MisTagRateSignalIsHighest"]->Fill(mistag);
1269 mes_[
label][
"MisTagRateSignalIsHighest_vs_PU"]->Fill(simpv.size(), mistag);
1270 mes_[
label][
"MisTagRateSignalIsHighest_vs_sum-pt2"]->Fill(
v.ptsq, mistag);
1271 mes_[
label][
"MisTagRateSignalIsHighest_vs_Z"]->Fill(
v.z, mistag);
1272 mes_[
label][
"MisTagRateSignalIsHighest_vs_R"]->Fill(
v.r, mistag);
1273 mes_[
label][
"MisTagRateSignalIsHighest_vs_NumTracks"]->Fill(
v.nGenTrk, mistag);
1275 mes_[
label][
"MisTagRateSignalIsNotHighest"]->Fill(mistag);
1276 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_PU"]->Fill(simpv.size(), mistag);
1277 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_sum-pt2"]->Fill(
v.ptsq, mistag);
1278 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_Z"]->Fill(
v.z, mistag);
1279 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_R"]->Fill(
v.r, mistag);
1280 mes_[
label][
"MisTagRateSignalIsNotHighest_vs_NumTracks"]->Fill(
v.nGenTrk, mistag);
1288 for (
int pv_position_in_reco_collection = 0;
iv != (*recVtxs.
product()).
end();
1289 ++pv_position_in_reco_collection, ++
iv) {
1290 if (
std::find(
v.rec_vertices.begin(),
v.rec_vertices.end(), &(*iv)) !=
v.rec_vertices.end()) {
1291 mes_[
label][
"TruePVLocationIndex"]->Fill(pv_position_in_reco_collection);
1292 const bool genPVMatchedToRecoPV = (pv_position_in_reco_collection == 0);
1293 mes_[
label][
"TruePVLocationIndexCumulative"]->Fill(genPVMatchedToRecoPV ? 0 : 1);
1295 if (signal_is_highest_pt) {
1296 mes_[
label][
"TruePVLocationIndexSignalIsHighest"]->Fill(pv_position_in_reco_collection);
1298 mes_[
label][
"TruePVLocationIndexSignalIsNotHighest"]->Fill(pv_position_in_reco_collection);
1302 if (genPVMatchedToRecoPV) {
1303 auto pv = recopv[0];
1307 genpv_position_in_reco_collection = pv_position_in_reco_collection;
1317 mes_[
label][
"TruePVLocationIndex"]->Fill(-1.);
1318 mes_[
label][
"TruePVLocationIndexCumulative"]->Fill(-1.);
1319 if (signal_is_highest_pt)
1320 mes_[
label][
"TruePVLocationIndexSignalIsHighest"]->Fill(-1.);
1322 mes_[
label][
"TruePVLocationIndexSignalIsNotHighest"]->Fill(-1.);
1326 if (!
v.rec_vertices.empty())
1327 num_total_gen_vertices_assoc2reco++;
1328 if (
v.rec_vertices.size() > 1)
1329 num_total_gen_vertices_multiassoc2reco++;
1338 mes_[
label][
"GenAllAssoc2Reco_NumVertices"]->Fill(simpv.size(), simpv.size());
1339 mes_[
label][
"GenAllAssoc2RecoMatched_NumVertices"]->Fill(simpv.size(), num_total_gen_vertices_assoc2reco);
1340 mes_[
label][
"GenAllAssoc2RecoMultiMatched_NumVertices"]->Fill(simpv.size(), num_total_gen_vertices_multiassoc2reco);
1341 for (
auto&
v : recopv) {
1343 if (!
v.sim_vertices.empty()) {
1344 num_total_reco_vertices_assoc2gen++;
1345 if (
v.sim_vertices_internal[0]->rec_vertices.size() > 1) {
1346 num_total_reco_vertices_duplicate++;
1349 if (
v.sim_vertices.size() > 1)
1350 num_total_reco_vertices_multiassoc2gen++;
1352 mes_[
label][
"RecoAllAssoc2Gen_NumVertices"]->Fill(recopv.size(), recopv.size());
1353 mes_[
label][
"RecoAllAssoc2GenMatched_NumVertices"]->Fill(recopv.size(), num_total_reco_vertices_assoc2gen);
1354 mes_[
label][
"RecoAllAssoc2GenMultiMatched_NumVertices"]->Fill(recopv.size(),
1355 num_total_reco_vertices_multiassoc2gen);
1356 mes_[
label][
"RecoAllAssoc2MultiMatchedGen_NumVertices"]->Fill(recopv.size(), num_total_reco_vertices_duplicate);
1357 mes_[
label][
"RecoVtx_vs_GenVtx"]->Fill(simpv.size(), recopv.size());
1358 mes_[
label][
"MatchedRecoVtx_vs_GenVtx"]->Fill(simpv.size(), num_total_reco_vertices_assoc2gen);
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 >> &)
T getParameter(std::string const &) const
bool matchRecoTrack2SimSignal(const reco::TrackBaseRef &)
void resetSimPVAssociation(std::vector< simPrimaryVertex > &)
edm::EDGetTokenT< reco::SimToRecoCollection > simToRecoAssociationToken_
void fillRecoAssociatedGenPVHistograms(const std::string &label, const PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex &v, bool genPVMatchedToRecoPV)
void computePairDistance(const T &collection, MonitorElement *me)
std::vector< SimVertex >::const_iterator g4v_iterator
ret
prodAgent to be discontinued
bool use_only_charged_tracks_
edm::RefToBase< reco::Vertex > VertexBaseRef
persistent reference to a Vertex, using views
T const * product() const
void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
int num_matched_sim_tracks
PrimaryVertexAnalyzer4PUSlimmed(const edm::ParameterSet &)
edm::AssociationMap< edm::OneToManyWithQualityGeneric< CaloParticleCollection, reco::CaloClusterCollection, std::pair< float, float > > > SimToRecoCollection
edm::EDGetTokenT< TrackingVertexCollection > trackingVertexCollectionToken_
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > vecPileupSummaryInfoToken_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
const bool do_generic_sim_plots_
const_iterator find(const key_type &k) const
find element with specified reference key
const_iterator end() const
last iterator over the map (read only)
void analyze(const edm::Event &, const edm::EventSetup &) override
std::vector< PrimaryVertexAnalyzer4PUSlimmed::simPrimaryVertex > getSimPVs(const edm::Handle< TrackingVertexCollection > &)
std::vector< edm::InputTag > reco_vertex_collections_
void fillResolutionAndPullHistograms(const std::string &, int, recoPrimaryVertex &v, bool)
Abs< T >::type abs(const T &t)
std::vector< bool > errorPrintedForColl_
void calculatePurityAndFillHistograms(const std::string &, std::vector< recoPrimaryVertex > &, int, bool)
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
def bestMatch(object, matchCollection)
std::vector< TrackingVertex > TrackingVertexCollection
std::array< T, N+1 > makeLogBins(const T &min, const T &max)
std::map< std::string, std::map< std::string, MonitorElement * > > mes_
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_
unsigned int calculateVertexSharedTracks(const reco::Vertex &recoV, const TrackingVertex &simV, const reco::RecoToSimCollection &trackRecoToSimAssociation)
float average_match_quality
std::vector< TrackingParticle > TrackingParticleCollection
Log< level::Warning, false > LogWarning
int num_matched_reco_tracks
Power< A, B >::type pow(const A &a, const B &b)
const reco::RecoToSimCollection * r2s_
edm::AssociationMap< edm::OneToManyWithQualityGeneric< reco::CaloClusterCollection, CaloParticleCollection, float > > RecoToSimCollection
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleCollectionToken_
~PrimaryVertexAnalyzer4PUSlimmed() override