24 minEta_(pset.getParameter<double>(
"minEta")),
25 maxEta_(pset.getParameter<double>(
"maxEta")),
26 nintEta_(pset.getParameter<int>(
"nintEta")),
27 useFabsEta_(pset.getParameter<bool>(
"useFabsEta")),
30 minEne_(pset.getParameter<double>(
"minEne")),
31 maxEne_(pset.getParameter<double>(
"maxEne")),
32 nintEne_(pset.getParameter<int>(
"nintEne")),
35 minPt_(pset.getParameter<double>(
"minPt")),
36 maxPt_(pset.getParameter<double>(
"maxPt")),
37 nintPt_(pset.getParameter<int>(
"nintPt")),
40 minPhi_(pset.getParameter<double>(
"minPhi")),
41 maxPhi_(pset.getParameter<double>(
"maxPhi")),
42 nintPhi_(pset.getParameter<int>(
"nintPhi")),
45 minMixedHitsSimCluster_(pset.getParameter<double>(
"minMixedHitsSimCluster")),
46 maxMixedHitsSimCluster_(pset.getParameter<double>(
"maxMixedHitsSimCluster")),
47 nintMixedHitsSimCluster_(pset.getParameter<int>(
"nintMixedHitsSimCluster")),
50 minMixedHitsCluster_(pset.getParameter<double>(
"minMixedHitsCluster")),
51 maxMixedHitsCluster_(pset.getParameter<double>(
"maxMixedHitsCluster")),
52 nintMixedHitsCluster_(pset.getParameter<int>(
"nintMixedHitsCluster")),
55 minEneCl_(pset.getParameter<double>(
"minEneCl")),
56 maxEneCl_(pset.getParameter<double>(
"maxEneCl")),
57 nintEneCl_(pset.getParameter<int>(
"nintEneCl")),
60 minLongDepBary_(pset.getParameter<double>(
"minLongDepBary")),
61 maxLongDepBary_(pset.getParameter<double>(
"maxLongDepBary")),
62 nintLongDepBary_(pset.getParameter<int>(
"nintLongDepBary")),
65 minZpos_(pset.getParameter<double>(
"minZpos")),
66 maxZpos_(pset.getParameter<double>(
"maxZpos")),
67 nintZpos_(pset.getParameter<int>(
"nintZpos")),
70 minTotNsimClsperlay_(pset.getParameter<double>(
"minTotNsimClsperlay")),
71 maxTotNsimClsperlay_(pset.getParameter<double>(
"maxTotNsimClsperlay")),
72 nintTotNsimClsperlay_(pset.getParameter<int>(
"nintTotNsimClsperlay")),
75 minTotNClsperlay_(pset.getParameter<double>(
"minTotNClsperlay")),
76 maxTotNClsperlay_(pset.getParameter<double>(
"maxTotNClsperlay")),
77 nintTotNClsperlay_(pset.getParameter<int>(
"nintTotNClsperlay")),
80 minEneClperlay_(pset.getParameter<double>(
"minEneClperlay")),
81 maxEneClperlay_(pset.getParameter<double>(
"maxEneClperlay")),
82 nintEneClperlay_(pset.getParameter<int>(
"nintEneClperlay")),
87 minScore_(pset.getParameter<double>(
"minScore")),
88 maxScore_(pset.getParameter<double>(
"maxScore")),
89 nintScore_(pset.getParameter<int>(
"nintScore")),
96 minSharedEneFrac_(pset.getParameter<double>(
"minSharedEneFrac")),
97 maxSharedEneFrac_(pset.getParameter<double>(
"maxSharedEneFrac")),
98 nintSharedEneFrac_(pset.getParameter<int>(
"nintSharedEneFrac")),
99 minTSTSharedEneFracEfficiency_(pset.getParameter<double>(
"minTSTSharedEneFracEfficiency")),
102 minTSTSharedEneFrac_(pset.getParameter<double>(
"minTSTSharedEneFrac")),
103 maxTSTSharedEneFrac_(pset.getParameter<double>(
"maxTSTSharedEneFrac")),
104 nintTSTSharedEneFrac_(pset.getParameter<int>(
"nintTSTSharedEneFrac")),
107 minTotNsimClsperthick_(pset.getParameter<double>(
"minTotNsimClsperthick")),
108 maxTotNsimClsperthick_(pset.getParameter<double>(
"maxTotNsimClsperthick")),
109 nintTotNsimClsperthick_(pset.getParameter<int>(
"nintTotNsimClsperthick")),
112 minTotNClsperthick_(pset.getParameter<double>(
"minTotNClsperthick")),
113 maxTotNClsperthick_(pset.getParameter<double>(
"maxTotNClsperthick")),
114 nintTotNClsperthick_(pset.getParameter<int>(
"nintTotNClsperthick")),
117 minTotNcellsperthickperlayer_(pset.getParameter<double>(
"minTotNcellsperthickperlayer")),
118 maxTotNcellsperthickperlayer_(pset.getParameter<double>(
"maxTotNcellsperthickperlayer")),
119 nintTotNcellsperthickperlayer_(pset.getParameter<int>(
"nintTotNcellsperthickperlayer")),
122 minDisToSeedperthickperlayer_(pset.getParameter<double>(
"minDisToSeedperthickperlayer")),
123 maxDisToSeedperthickperlayer_(pset.getParameter<double>(
"maxDisToSeedperthickperlayer")),
124 nintDisToSeedperthickperlayer_(pset.getParameter<int>(
"nintDisToSeedperthickperlayer")),
127 minDisToSeedperthickperlayerenewei_(pset.getParameter<double>(
"minDisToSeedperthickperlayerenewei")),
128 maxDisToSeedperthickperlayerenewei_(pset.getParameter<double>(
"maxDisToSeedperthickperlayerenewei")),
129 nintDisToSeedperthickperlayerenewei_(pset.getParameter<int>(
"nintDisToSeedperthickperlayerenewei")),
132 minDisToMaxperthickperlayer_(pset.getParameter<double>(
"minDisToMaxperthickperlayer")),
133 maxDisToMaxperthickperlayer_(pset.getParameter<double>(
"maxDisToMaxperthickperlayer")),
134 nintDisToMaxperthickperlayer_(pset.getParameter<int>(
"nintDisToMaxperthickperlayer")),
137 minDisToMaxperthickperlayerenewei_(pset.getParameter<double>(
"minDisToMaxperthickperlayerenewei")),
138 maxDisToMaxperthickperlayerenewei_(pset.getParameter<double>(
"maxDisToMaxperthickperlayerenewei")),
139 nintDisToMaxperthickperlayerenewei_(pset.getParameter<int>(
"nintDisToMaxperthickperlayerenewei")),
142 minDisSeedToMaxperthickperlayer_(pset.getParameter<double>(
"minDisSeedToMaxperthickperlayer")),
143 maxDisSeedToMaxperthickperlayer_(pset.getParameter<double>(
"maxDisSeedToMaxperthickperlayer")),
144 nintDisSeedToMaxperthickperlayer_(pset.getParameter<int>(
"nintDisSeedToMaxperthickperlayer")),
147 minClEneperthickperlayer_(pset.getParameter<double>(
"minClEneperthickperlayer")),
148 maxClEneperthickperlayer_(pset.getParameter<double>(
"maxClEneperthickperlayer")),
149 nintClEneperthickperlayer_(pset.getParameter<int>(
"nintClEneperthickperlayer")),
152 minCellsEneDensperthick_(pset.getParameter<double>(
"minCellsEneDensperthick")),
153 maxCellsEneDensperthick_(pset.getParameter<double>(
"maxCellsEneDensperthick")),
154 nintCellsEneDensperthick_(pset.getParameter<int>(
"nintCellsEneDensperthick")),
158 minTotNTSTs_(pset.getParameter<double>(
"minTotNTSTs")),
159 maxTotNTSTs_(pset.getParameter<double>(
"maxTotNTSTs")),
160 nintTotNTSTs_(pset.getParameter<int>(
"nintTotNTSTs")),
163 minTotNClsinTSTs_(pset.getParameter<double>(
"minTotNClsinTSTs")),
164 maxTotNClsinTSTs_(pset.getParameter<double>(
"maxTotNClsinTSTs")),
165 nintTotNClsinTSTs_(pset.getParameter<int>(
"nintTotNClsinTSTs")),
168 minTotNClsinTSTsperlayer_(pset.getParameter<double>(
"minTotNClsinTSTsperlayer")),
169 maxTotNClsinTSTsperlayer_(pset.getParameter<double>(
"maxTotNClsinTSTsperlayer")),
170 nintTotNClsinTSTsperlayer_(pset.getParameter<int>(
"nintTotNClsinTSTsperlayer")),
173 minMplofLCs_(pset.getParameter<double>(
"minMplofLCs")),
174 maxMplofLCs_(pset.getParameter<double>(
"maxMplofLCs")),
175 nintMplofLCs_(pset.getParameter<int>(
"nintMplofLCs")),
178 minSizeCLsinTSTs_(pset.getParameter<double>(
"minSizeCLsinTSTs")),
179 maxSizeCLsinTSTs_(pset.getParameter<double>(
"maxSizeCLsinTSTs")),
180 nintSizeCLsinTSTs_(pset.getParameter<int>(
"nintSizeCLsinTSTs")),
183 minClEnepermultiplicity_(pset.getParameter<double>(
"minClEnepermultiplicity")),
184 maxClEnepermultiplicity_(pset.getParameter<double>(
"maxClEnepermultiplicity")),
185 nintClEnepermultiplicity_(pset.getParameter<int>(
"nintClEnepermultiplicity")),
188 minX_(pset.getParameter<double>(
"minX")),
189 maxX_(pset.getParameter<double>(
"maxX")),
190 nintX_(pset.getParameter<int>(
"nintX")),
193 minY_(pset.getParameter<double>(
"minY")),
194 maxY_(pset.getParameter<double>(
"maxY")),
195 nintY_(pset.getParameter<int>(
"nintY")),
198 minZ_(pset.getParameter<double>(
"minZ")),
199 maxZ_(pset.getParameter<double>(
"maxZ")),
200 nintZ_(pset.getParameter<int>(
"nintZ")) {}
229 ibook.
book1D(
"EnergyDifference",
"(Energy-SelfEnergy)/Energy", 300., -5., 1.);
232 ibook.
book1D(
"Num Sim Clusters",
"Num Sim Clusters in CaloParticles", 100, 0., 100.);
234 ibook.
book1D(
"Num Hits in Sim Clusters",
"Num Hits in Sim Clusters in CaloParticles", 1000, 0., 1000.);
236 "Num Rec-matched Hits in Sim Clusters",
"Num Hits in Sim Clusters (matched) in CaloParticles", 1000, 0., 1000.);
239 ibook.
book1D(
"Energy of Rec-matched Hits",
"Energy of Hits in Sim Clusters (matched)", 100, 0., 10.);
241 ibook.
book2D(
"Energy of Rec-matched Hits vs layer",
242 "Energy of Hits in Sim Clusters (matched) vs layer",
250 ibook.
book2D(
"Energy of Rec-matched Hits vs layer (1SC)",
251 "Energy of Hits only 1 Sim Clusters (matched) vs layer",
259 ibook.
book2D(
"Rec-matched Hits Sum Energy vs layer",
260 "Rescaled Sum Energy of Hits in Sim Clusters (matched) vs layer",
268 ibook.
book2D(
"HitFractions",
"Hit fractions;Hit fraction;E_{hit}^{2} fraction", 101, 0, 1.01, 100, 0, 1);
270 "HitFractions_weighted",
"Hit fractions weighted;Hit fraction;E_{hit}^{2} fraction", 101, 0, 1.01, 100, 0, 1);
273 ibook.
book1D(
"First Layer",
"First layer of the CaloParticles", 2 * layers, 0., (
float)2 * layers);
275 ibook.
book1D(
"Last Layer",
"Last layer of the CaloParticles", 2 * layers, 0., (
float)2 * layers);
277 ibook.
book1D(
"Number of Layers",
"Number of layers of the CaloParticles", 2 * layers, 0., (
float)2 * layers);
279 "First Layer (rec-matched hit)",
"First layer of the CaloParticles (matched)", 2 * layers, 0., (
float)2 * layers);
281 "Last Layer (rec-matched hit)",
"Last layer of the CaloParticles (matched)", 2 * layers, 0., (
float)2 * layers);
283 ibook.
book1D(
"Number of Layers (rec-matched hit)",
284 "Number of layers of the CaloParticles (matched)",
293 std::vector<int> thicknesses) {
295 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
297 while (istr1.size() < 2) {
298 istr1.insert(0,
"0");
303 if (ilayer < layers) {
309 "total number of SimClusters for layer " + istr2,
316 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
319 "total number of simclusters for thickness " + istr,
328 ibook.
book1D(
"mixedhitssimcluster_zminus",
329 "N of simclusters that contain hits of more than one kind in z-",
335 ibook.
book1D(
"mixedhitssimcluster_zplus",
336 "N of simclusters that contain hits of more than one kind in z+",
345 std::vector<int> thicknesses) {
346 std::unordered_map<int, dqm::reco::MonitorElement*> denom_layercl_in_simcl_eta_perlayer;
347 denom_layercl_in_simcl_eta_perlayer.clear();
348 std::unordered_map<int, dqm::reco::MonitorElement*> denom_layercl_in_simcl_phi_perlayer;
349 denom_layercl_in_simcl_phi_perlayer.clear();
350 std::unordered_map<int, dqm::reco::MonitorElement*> score_layercl2simcluster_perlayer;
351 score_layercl2simcluster_perlayer.clear();
352 std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_layercl2simcluster_perlayer;
353 sharedenergy_layercl2simcluster_perlayer.clear();
354 std::unordered_map<int, dqm::reco::MonitorElement*> energy_vs_score_layercl2simcluster_perlayer;
355 energy_vs_score_layercl2simcluster_perlayer.clear();
356 std::unordered_map<int, dqm::reco::MonitorElement*> num_layercl_in_simcl_eta_perlayer;
357 num_layercl_in_simcl_eta_perlayer.clear();
358 std::unordered_map<int, dqm::reco::MonitorElement*> num_layercl_in_simcl_phi_perlayer;
359 num_layercl_in_simcl_phi_perlayer.clear();
360 std::unordered_map<int, dqm::reco::MonitorElement*> numMerge_layercl_in_simcl_eta_perlayer;
361 numMerge_layercl_in_simcl_eta_perlayer.clear();
362 std::unordered_map<int, dqm::reco::MonitorElement*> numMerge_layercl_in_simcl_phi_perlayer;
363 numMerge_layercl_in_simcl_phi_perlayer.clear();
364 std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_layercl2simcluster_vs_eta_perlayer;
365 sharedenergy_layercl2simcluster_vs_eta_perlayer.clear();
366 std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_layercl2simcluster_vs_phi_perlayer;
367 sharedenergy_layercl2simcluster_vs_phi_perlayer.clear();
368 std::unordered_map<int, dqm::reco::MonitorElement*> denom_simcluster_eta_perlayer;
369 denom_simcluster_eta_perlayer.clear();
370 std::unordered_map<int, dqm::reco::MonitorElement*> denom_simcluster_phi_perlayer;
371 denom_simcluster_phi_perlayer.clear();
372 std::unordered_map<int, dqm::reco::MonitorElement*> score_simcluster2layercl_perlayer;
373 score_simcluster2layercl_perlayer.clear();
374 std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_simcluster2layercl_perlayer;
375 sharedenergy_simcluster2layercl_perlayer.clear();
376 std::unordered_map<int, dqm::reco::MonitorElement*> energy_vs_score_simcluster2layercl_perlayer;
377 energy_vs_score_simcluster2layercl_perlayer.clear();
378 std::unordered_map<int, dqm::reco::MonitorElement*> num_simcluster_eta_perlayer;
379 num_simcluster_eta_perlayer.clear();
380 std::unordered_map<int, dqm::reco::MonitorElement*> num_simcluster_phi_perlayer;
381 num_simcluster_phi_perlayer.clear();
382 std::unordered_map<int, dqm::reco::MonitorElement*> numDup_simcluster_eta_perlayer;
383 numDup_simcluster_eta_perlayer.clear();
384 std::unordered_map<int, dqm::reco::MonitorElement*> numDup_simcluster_phi_perlayer;
385 numDup_simcluster_phi_perlayer.clear();
386 std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_simcluster2layercl_vs_eta_perlayer;
387 sharedenergy_simcluster2layercl_vs_eta_perlayer.clear();
388 std::unordered_map<int, dqm::reco::MonitorElement*> sharedenergy_simcluster2layercl_vs_phi_perlayer;
389 sharedenergy_simcluster2layercl_vs_phi_perlayer.clear();
392 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
394 while (istr1.size() < 2) {
395 istr1.insert(0,
"0");
400 if (ilayer < layers) {
406 denom_layercl_in_simcl_eta_perlayer[ilayer] =
407 ibook.
book1D(
"Denom_LayerCluster_in_SimCluster_Eta_perlayer" + istr1,
408 "Denom LayerCluster in SimCluster Eta per Layer Cluster for layer " + istr2,
413 denom_layercl_in_simcl_phi_perlayer[ilayer] =
414 ibook.
book1D(
"Denom_LayerCluster_in_SimCluster_Phi_perlayer" + istr1,
415 "Denom LayerCluster in SimCluster Phi per Layer Cluster for layer " + istr2,
420 score_layercl2simcluster_perlayer[ilayer] = ibook.
book1D(
"Score_layercl2simcluster_perlayer" + istr1,
421 "Score of Layer Cluster per SimCluster for layer " + istr2,
426 score_simcluster2layercl_perlayer[ilayer] = ibook.
book1D(
"Score_simcluster2layercl_perlayer" + istr1,
427 "Score of SimCluster per Layer Cluster for layer " + istr2,
432 energy_vs_score_simcluster2layercl_perlayer[ilayer] =
433 ibook.
book2D(
"Energy_vs_Score_simcluster2layer_perlayer" + istr1,
434 "Energy vs Score of SimCluster per Layer Cluster for layer " + istr2,
442 energy_vs_score_layercl2simcluster_perlayer[ilayer] =
443 ibook.
book2D(
"Energy_vs_Score_layer2simcluster_perlayer" + istr1,
444 "Energy vs Score of Layer Cluster per SimCluster for layer " + istr2,
452 sharedenergy_simcluster2layercl_perlayer[ilayer] =
453 ibook.
book1D(
"SharedEnergy_simcluster2layercl_perlayer" + istr1,
454 "Shared Energy of SimCluster per Layer Cluster for layer " + istr2,
459 sharedenergy_simcluster2layercl_vs_eta_perlayer[ilayer] =
460 ibook.
bookProfile(
"SharedEnergy_simcluster2layercl_vs_eta_perlayer" + istr1,
461 "Shared Energy of SimCluster vs #eta per best Layer Cluster for layer " + istr2,
468 sharedenergy_simcluster2layercl_vs_phi_perlayer[ilayer] =
469 ibook.
bookProfile(
"SharedEnergy_simcluster2layercl_vs_phi_perlayer" + istr1,
470 "Shared Energy of SimCluster vs #phi per best Layer Cluster for layer " + istr2,
477 sharedenergy_layercl2simcluster_perlayer[ilayer] =
478 ibook.
book1D(
"SharedEnergy_layercluster2simcluster_perlayer" + istr1,
479 "Shared Energy of Layer Cluster per SimCluster for layer " + istr2,
484 sharedenergy_layercl2simcluster_vs_eta_perlayer[ilayer] =
485 ibook.
bookProfile(
"SharedEnergy_layercl2simcluster_vs_eta_perlayer" + istr1,
486 "Shared Energy of LayerCluster vs #eta per best SimCluster for layer " + istr2,
493 sharedenergy_layercl2simcluster_vs_phi_perlayer[ilayer] =
494 ibook.
bookProfile(
"SharedEnergy_layercl2simcluster_vs_phi_perlayer" + istr1,
495 "Shared Energy of LayerCluster vs #phi per best SimCluster for layer " + istr2,
502 num_simcluster_eta_perlayer[ilayer] = ibook.
book1D(
"Num_SimCluster_Eta_perlayer" + istr1,
503 "Num SimCluster Eta per Layer Cluster for layer " + istr2,
508 numDup_simcluster_eta_perlayer[ilayer] =
509 ibook.
book1D(
"NumDup_SimCluster_Eta_perlayer" + istr1,
510 "Num Duplicate SimCluster Eta per Layer Cluster for layer " + istr2,
515 denom_simcluster_eta_perlayer[ilayer] = ibook.
book1D(
"Denom_SimCluster_Eta_perlayer" + istr1,
516 "Denom SimCluster Eta per Layer Cluster for layer " + istr2,
521 num_simcluster_phi_perlayer[ilayer] = ibook.
book1D(
"Num_SimCluster_Phi_perlayer" + istr1,
522 "Num SimCluster Phi per Layer Cluster for layer " + istr2,
527 numDup_simcluster_phi_perlayer[ilayer] =
528 ibook.
book1D(
"NumDup_SimCluster_Phi_perlayer" + istr1,
529 "Num Duplicate SimCluster Phi per Layer Cluster for layer " + istr2,
534 denom_simcluster_phi_perlayer[ilayer] = ibook.
book1D(
"Denom_SimCluster_Phi_perlayer" + istr1,
535 "Denom SimCluster Phi per Layer Cluster for layer " + istr2,
540 num_layercl_in_simcl_eta_perlayer[ilayer] =
541 ibook.
book1D(
"Num_LayerCluster_in_SimCluster_Eta_perlayer" + istr1,
542 "Num LayerCluster Eta per Layer Cluster in SimCluster for layer " + istr2,
547 numMerge_layercl_in_simcl_eta_perlayer[ilayer] =
548 ibook.
book1D(
"NumMerge_LayerCluster_in_SimCluster_Eta_perlayer" + istr1,
549 "Num Merge LayerCluster Eta per Layer Cluster in SimCluster for layer " + istr2,
554 num_layercl_in_simcl_phi_perlayer[ilayer] =
555 ibook.
book1D(
"Num_LayerCluster_in_SimCluster_Phi_perlayer" + istr1,
556 "Num LayerCluster Phi per Layer Cluster in SimCluster for layer " + istr2,
561 numMerge_layercl_in_simcl_phi_perlayer[ilayer] =
562 ibook.
book1D(
"NumMerge_LayerCluster_in_SimCluster_Phi_perlayer" + istr1,
563 "Num Merge LayerCluster Phi per Layer Cluster in SimCluster for layer " + istr2,
575 std::move(energy_vs_score_layercl2simcluster_perlayer));
581 std::move(sharedenergy_layercl2simcluster_vs_eta_perlayer));
583 std::move(sharedenergy_layercl2simcluster_vs_phi_perlayer));
589 std::move(energy_vs_score_simcluster2layercl_perlayer));
595 std::move(sharedenergy_simcluster2layercl_vs_eta_perlayer));
597 std::move(sharedenergy_simcluster2layercl_vs_phi_perlayer));
602 std::vector<int> thicknesses,
611 ibook.
book1D(
"mixedhitscluster_zminus",
612 "N of reco clusters that contain hits of more than one kind in z-",
618 ibook.
book1D(
"mixedhitscluster_zplus",
619 "N of reco clusters that contain hits of more than one kind in z+",
627 ibook.
book1D(
"energyclustered_zminus",
628 "percent of total energy clustered by all layer clusters over CaloParticless energy in z-",
634 ibook.
book1D(
"energyclustered_zplus",
635 "percent of total energy clustered by all layer clusters over CaloParticless energy in z+",
642 std::string subpathtomat = pathtomatbudfile.substr(pathtomatbudfile.find(
"Validation"));
644 ibook.
book1D(
"longdepthbarycentre_zminus",
645 "The longitudinal depth barycentre in z- for " + subpathtomat,
651 ibook.
book1D(
"longdepthbarycentre_zplus",
652 "The longitudinal depth barycentre in z+ for " + subpathtomat,
658 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
660 while (istr1.size() < 2) {
661 istr1.insert(0,
"0");
666 if (ilayer < layers) {
672 "total number of layer clusters for layer " + istr2,
677 "energyclustered_perlayer" + istr1,
678 "percent of total energy clustered by layer clusters over CaloParticless energy for layer " + istr2,
685 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
688 "total number of layer clusters for thickness " + istr,
700 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
702 while (istr1.size() < 2) {
703 istr1.insert(0,
"0");
708 if (ilayer < layers) {
714 ibook.
book1D(
"Score_layercl2caloparticle_perlayer" + istr1,
715 "Score of Layer Cluster per CaloParticle for layer " + istr2,
720 ibook.
book1D(
"Score_caloparticle2layercl_perlayer" + istr1,
721 "Score of CaloParticle per Layer Cluster for layer " + istr2,
726 ibook.
book2D(
"Energy_vs_Score_caloparticle2layer_perlayer" + istr1,
727 "Energy vs Score of CaloParticle per Layer Cluster for layer " + istr2,
735 ibook.
book2D(
"Energy_vs_Score_layer2caloparticle_perlayer" + istr1,
736 "Energy vs Score of Layer Cluster per CaloParticle Layer for layer " + istr2,
744 ibook.
book1D(
"SharedEnergy_caloparticle2layercl_perlayer" + istr1,
745 "Shared Energy of CaloParticle per Layer Cluster for layer " + istr2,
750 ibook.
bookProfile(
"SharedEnergy_caloparticle2layercl_vs_eta_perlayer" + istr1,
751 "Shared Energy of CaloParticle vs #eta per best Layer Cluster for layer " + istr2,
758 ibook.
bookProfile(
"SharedEnergy_caloparticle2layercl_vs_phi_perlayer" + istr1,
759 "Shared Energy of CaloParticle vs #phi per best Layer Cluster for layer " + istr2,
766 ibook.
book1D(
"SharedEnergy_layercluster2caloparticle_perlayer" + istr1,
767 "Shared Energy of Layer Cluster per Layer Calo Particle for layer " + istr2,
772 ibook.
bookProfile(
"SharedEnergy_layercl2caloparticle_vs_eta_perlayer" + istr1,
773 "Shared Energy of LayerCluster vs #eta per best Calo Particle for layer " + istr2,
780 ibook.
bookProfile(
"SharedEnergy_layercl2caloparticle_vs_phi_perlayer" + istr1,
781 "Shared Energy of LayerCluster vs #phi per best Calo Particle for layer " + istr2,
788 ibook.
book1D(
"Num_CaloParticle_Eta_perlayer" + istr1,
789 "Num CaloParticle Eta per Layer Cluster for layer " + istr2,
794 ibook.
book1D(
"NumDup_CaloParticle_Eta_perlayer" + istr1,
795 "Num Duplicate CaloParticle Eta per Layer Cluster for layer " + istr2,
800 ibook.
book1D(
"Denom_CaloParticle_Eta_perlayer" + istr1,
801 "Denom CaloParticle Eta per Layer Cluster for layer " + istr2,
806 ibook.
book1D(
"Num_CaloParticle_Phi_perlayer" + istr1,
807 "Num CaloParticle Phi per Layer Cluster for layer " + istr2,
812 ibook.
book1D(
"NumDup_CaloParticle_Phi_perlayer" + istr1,
813 "Num Duplicate CaloParticle Phi per Layer Cluster for layer " + istr2,
818 ibook.
book1D(
"Denom_CaloParticle_Phi_perlayer" + istr1,
819 "Denom CaloParticle Phi per Layer Cluster for layer " + istr2,
824 ibook.
book1D(
"Num_LayerCluster_Eta_perlayer" + istr1,
825 "Num LayerCluster Eta per Layer Cluster for layer " + istr2,
830 ibook.
book1D(
"NumMerge_LayerCluster_Eta_perlayer" + istr1,
831 "Num Merge LayerCluster Eta per Layer Cluster for layer " + istr2,
836 ibook.
book1D(
"Denom_LayerCluster_Eta_perlayer" + istr1,
837 "Denom LayerCluster Eta per Layer Cluster for layer " + istr2,
842 ibook.
book1D(
"Num_LayerCluster_Phi_perlayer" + istr1,
843 "Num LayerCluster Phi per Layer Cluster for layer " + istr2,
848 ibook.
book1D(
"NumMerge_LayerCluster_Phi_perlayer" + istr1,
849 "Num Merge LayerCluster Phi per Layer Cluster for layer " + istr2,
854 ibook.
book1D(
"Denom_LayerCluster_Phi_perlayer" + istr1,
855 "Denom LayerCluster Phi per Layer Cluster for layer " + istr2,
866 std::vector<int> thicknesses) {
868 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
870 while (istr1.size() < 2) {
871 istr1.insert(0,
"0");
876 if (ilayer < layers) {
882 ibook.
book1D(
"cellAssociation_perlayer" + istr1,
"Cell Association for layer " + istr2, 5, -4., 1.);
889 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
892 "energy density of cluster cells for thickness " + istr,
899 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
900 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
903 while (istr2.size() < 2)
904 istr2.insert(0,
"0");
905 auto istr = istr1 +
"_" + istr2;
909 if (ilayer < layers) {
916 ibook.
book1D(
"cellsnum_perthick_perlayer_" + istr,
917 "total number of cells for layer " + istr3 +
" for thickness " + istr1,
923 ibook.
book1D(
"distancetoseedcell_perthickperlayer_" + istr,
924 "distance of cluster cells to seed cell for layer " + istr3 +
" for thickness " + istr1,
930 "distancetoseedcell_perthickperlayer_eneweighted_" + istr,
931 "energy weighted distance of cluster cells to seed cell for layer " + istr3 +
" for thickness " + istr1,
937 ibook.
book1D(
"distancetomaxcell_perthickperlayer_" + istr,
938 "distance of cluster cells to max cell for layer " + istr3 +
" for thickness " + istr1,
944 "distancetomaxcell_perthickperlayer_eneweighted_" + istr,
945 "energy weighted distance of cluster cells to max cell for layer " + istr3 +
" for thickness " + istr1,
951 ibook.
book1D(
"distancebetseedandmaxcell_perthickperlayer_" + istr,
952 "distance of seed cell to max cell for layer " + istr3 +
" for thickness " + istr1,
958 "distancebetseedandmaxcellvsclusterenergy_perthickperlayer_" + istr,
959 "distance of seed cell to max cell vs cluster energy for layer " + istr3 +
" for thickness " + istr1,
972 std::unordered_map<int, dqm::reco::MonitorElement*> clusternum_in_trackster_perlayer;
973 clusternum_in_trackster_perlayer.clear();
975 for (
unsigned ilayer = 0; ilayer < 2 *
layers; ++ilayer) {
977 while (istr1.size() < 2) {
978 istr1.insert(0,
"0");
983 if (ilayer < layers) {
989 clusternum_in_trackster_perlayer[ilayer] = ibook.
book1D(
"clusternum_in_trackster_perlayer" + istr1,
990 "Number of layer clusters in Trackster for layer " + istr2,
1005 "number of Tracksters without 3 contiguous layers",
1011 ibook.
book1D(
"clusternum_in_trackster",
1012 "total number of layer clusters in Trackster;# of LayerClusters",
1018 "clusternum_in_trackster_vs_layer",
1019 "Profile of 2d layer clusters in Trackster vs layer number;layer number;<2D LayerClusters in Trackster>",
1027 ibook.
book2D(
"multiplicityOfLCinTST",
1028 "Multiplicity vs Layer cluster size in Tracksters;LayerCluster multiplicity in Tracksters;Cluster "
1038 "multiplicity numberOfEventsHistogram",
1044 ibook.
book1D(
"multiplicity_zminus_numberOfEventsHistogram",
1045 "multiplicity numberOfEventsHistogram in z-",
1051 ibook.
book1D(
"multiplicity_zplus_numberOfEventsHistogram",
1052 "multiplicity numberOfEventsHistogram in z+",
1058 ibook.
book2D(
"multiplicityOfLCinTST_vs_layercluster_zminus",
1059 "Multiplicity vs Layer number in z-;LayerCluster multiplicity in Tracksters;layer number",
1068 ibook.
book2D(
"multiplicityOfLCinTST_vs_layercluster_zplus",
1069 "Multiplicity vs Layer number in z+;LayerCluster multiplicity in Tracksters;layer number",
1078 ibook.
book2D(
"multiplicityOfLCinTST_vs_layerclusterenergy",
1079 "Multiplicity vs Layer cluster energy;LayerCluster multiplicity in Tracksters;Cluster energy [GeV]",
1102 "trackster_firstlayer",
"First layer of the Trackster;Trackster First Layer", 2 * layers, 0., (
float)2 * layers));
1104 "trackster_lastlayer",
"Last layer of the Trackster;Trackster Last Layer", 2 * layers, 0., (
float)2 * layers));
1106 ibook.
book1D(
"trackster_layersnum",
1107 "Number of layers of the Trackster;Trackster Number of Layers",
1110 (
float)2 * layers));
1116 const string ref[] = {
"caloparticle",
"simtrackster",
"simtrackster_fromCP"};
1117 const string refT[] = {
"CaloParticle",
"SimTrackster",
"SimTrackster_fromCP"};
1119 const string val[] = {
"_Link",
"_PR"};
1121 const string rtos =
";score Reco-to-Sim";
1122 const string stor =
";score Sim-to-Reco";
1123 const string shREnFr =
";shared Reco energy fraction";
1124 const string shSEnFr =
";shared Sim energy fraction";
1127 ibook.
book1D(
"Score_trackster2" + ref[valType],
1128 "Score of Trackster per " + refT[valType] + rtos,
1133 ibook.
book1D(
"ScoreFake_trackster2" + ref[valType],
1134 "Score of Trackster per best " + refT[valType] + rtos,
1139 ibook.
book1D(
"ScoreMerge_trackster2" + ref[valType],
1140 "Score of Trackster per 2^{nd} best " + refT[valType] + rtos,
1145 ibook.
book1D(
"Score_" + ref[valType] +
"2trackster",
1146 "Score of " + refT[valType] +
" per Trackster" + stor,
1151 ibook.
book1D(
"ScorePur_" + ref[valType] +
"2trackster",
1152 "Score of " + refT[valType] +
" per best Trackster" + stor,
1157 ibook.
book1D(
"ScoreDupl_" + ref[valType] +
"2trackster",
1158 "Score of " + refT[valType] +
" per 2^{nd} best Trackster" + stor,
1163 ibook.
book2D(
"Energy_vs_Score_trackster2" + refT[valType],
1164 "Energy vs Score of Trackster per " + refT[valType] + rtos + shREnFr,
1172 ibook.
book2D(
"Energy_vs_Score_trackster2best" + refT[valType],
1173 "Energy vs Score of Trackster per best " + refT[valType] + rtos + shREnFr,
1181 ibook.
book2D(
"Energy_vs_Score_trackster2secBest" + refT[valType],
1182 "Energy vs Score of Trackster per 2^{nd} best " + refT[valType] + rtos + shREnFr,
1190 ibook.
book2D(
"Energy_vs_Score_" + ref[valType] +
"2Trackster",
1191 "Energy vs Score of " + refT[valType] +
" per Trackster" + stor + shSEnFr,
1199 ibook.
book2D(
"Energy_vs_Score_" + ref[valType] +
"2bestTrackster",
1200 "Energy vs Score of " + refT[valType] +
" per best Trackster" + stor + shSEnFr,
1208 ibook.
book2D(
"Energy_vs_Score_" + ref[valType] +
"2secBestTrackster",
1209 "Energy vs Score of " + refT[valType] +
" per 2^{nd} best Trackster" + stor + shSEnFr,
1220 "Num_Trackster_Eta" + val[valType],
"Num Trackster Eta per Trackster;#eta",
nintEta_,
minEta_,
maxEta_));
1222 "Num Merge Trackster Eta per Trackster;#eta",
1227 "Denom_Trackster_Eta" + val[valType],
"Denom Trackster Eta per Trackster;#eta",
nintEta_,
minEta_,
maxEta_));
1230 "Num_Trackster_Phi" + val[valType],
"Num Trackster Phi per Trackster;#phi",
nintPhi_,
minPhi_,
maxPhi_));
1232 "Num Merge Trackster Phi per Trackster;#phi",
1237 "Denom_Trackster_Phi" + val[valType],
"Denom Trackster Phi per Trackster;#phi",
nintPhi_,
minPhi_,
maxPhi_));
1240 "Num Trackster Energy per Trackster;energy [GeV]",
1245 ibook.
book1D(
"NumMerge_Trackster_Energy" + val[valType],
1246 "Num Merge Trackster Energy per Trackster;energy [GeV]",
1251 "Denom Trackster Energy per Trackster;energy [GeV]",
1257 "Num_Trackster_Pt" + val[valType],
"Num Trackster p_{T} per Trackster;p_{T} [GeV]",
nintPt_,
minPt_,
maxPt_));
1259 ibook.
book1D(
"NumMerge_Trackster_Pt" + val[valType],
1260 "Num Merge Trackster p_{T} per Trackster;p_{T} [GeV]",
1265 "Denom_Trackster_Pt" + val[valType],
"Denom Trackster p_{T} per Trackster;p_{T} [GeV]",
nintPt_,
minPt_,
maxPt_));
1268 ibook.
book1D(
"SharedEnergy_trackster2" + ref[valType],
1269 "Shared Energy of Trackster per " + refT[valType] + shREnFr,
1274 ibook.
book1D(
"SharedEnergy_trackster2" + ref[valType] +
"_assoc",
1275 "Shared Energy of Trackster per best " + refT[valType] + shREnFr,
1280 ibook.
bookProfile(
"SharedEnergy_trackster2" + ref[valType] +
"_assoc_vs_eta",
1281 "Shared Energy of Trackster vs #eta per best " + refT[valType] +
";Trackster #eta" + shREnFr,
1288 ibook.
bookProfile(
"SharedEnergy_trackster2" + ref[valType] +
"_assoc_vs_phi",
1289 "Shared Energy of Trackster vs #phi per best " + refT[valType] +
";Trackster #phi" + shREnFr,
1296 ibook.
book1D(
"SharedEnergy_trackster2" + ref[valType] +
"_assoc2",
1297 "Shared Energy of Trackster per 2^{nd} best " + refT[valType] + shREnFr,
1303 ibook.
book1D(
"SharedEnergy_" + ref[valType] +
"2trackster",
1304 "Shared Energy of " + refT[valType] +
" per Trackster" + shSEnFr,
1309 ibook.
book1D(
"SharedEnergy_" + ref[valType] +
"2trackster_assoc",
1310 "Shared Energy of " + refT[valType] +
" per best Trackster" + shSEnFr,
1315 "SharedEnergy_" + ref[valType] +
"2trackster_assoc_vs_eta",
1316 "Shared Energy of " + refT[valType] +
" vs #eta per best Trackster;" + refT[valType] +
" #eta" + shSEnFr,
1323 "SharedEnergy_" + ref[valType] +
"2trackster_assoc_vs_phi",
1324 "Shared Energy of " + refT[valType] +
" vs #phi per best Trackster;" + refT[valType] +
" #phi" + shSEnFr,
1331 ibook.
book1D(
"SharedEnergy_" + ref[valType] +
"2trackster_assoc2",
1332 "Shared Energy of " + refT[valType] +
" per 2^{nd} best Trackster;" + shSEnFr,
1339 ibook.
book1D(
"NumEff_" + refT[valType] +
"_Eta",
1340 "Num Efficiency " + refT[valType] +
" Eta per Trackster;#eta",
1345 ibook.
book1D(
"Num_" + refT[valType] +
"_Eta",
1346 "Num Purity " + refT[valType] +
" Eta per Trackster;#eta",
1351 "NumDup_Trackster_Eta" + val[valType],
"Num Duplicate Trackster vs Eta;#eta",
nintEta_,
minEta_,
maxEta_));
1353 ibook.
book1D(
"Denom_" + refT[valType] +
"_Eta",
1354 "Denom " + refT[valType] +
" Eta per Trackster;#eta",
1360 ibook.
book1D(
"NumEff_" + refT[valType] +
"_Phi",
1361 "Num Efficiency " + refT[valType] +
" Phi per Trackster;#phi",
1366 ibook.
book1D(
"Num_" + refT[valType] +
"_Phi",
1367 "Num Purity " + refT[valType] +
" Phi per Trackster;#phi",
1372 "NumDup_Trackster_Phi" + val[valType],
"Num Duplicate Trackster vs Phi;#phi",
nintPhi_,
minPhi_,
maxPhi_));
1374 ibook.
book1D(
"Denom_" + refT[valType] +
"_Phi",
1375 "Denom " + refT[valType] +
" Phi per Trackster;#phi",
1381 ibook.
book1D(
"NumEff_" + refT[valType] +
"_Energy",
1382 "Num Efficiency " + refT[valType] +
" Energy per Trackster;energy [GeV]",
1387 ibook.
book1D(
"Num_" + refT[valType] +
"_Energy",
1388 "Num Purity " + refT[valType] +
" Energy per Trackster;energy [GeV]",
1393 "Num Duplicate Trackster vs Energy;energy [GeV]",
1398 ibook.
book1D(
"Denom_" + refT[valType] +
"_Energy",
1399 "Denom " + refT[valType] +
" Energy per Trackster;energy [GeV]",
1405 ibook.
book1D(
"NumEff_" + refT[valType] +
"_Pt",
1406 "Num Efficiency " + refT[valType] +
" p_{T} per Trackster;p_{T} [GeV]",
1411 ibook.
book1D(
"Num_" + refT[valType] +
"_Pt",
1412 "Num Purity " + refT[valType] +
" p_{T} per Trackster;p_{T} [GeV]",
1417 "NumDup_Trackster_Pt" + val[valType],
"Num Duplicate Trackster vs p_{T};p_{T} [GeV]",
nintPt_,
minPt_,
maxPt_));
1419 ibook.
book1D(
"Denom_" + refT[valType] +
"_Pt",
1420 "Denom " + refT[valType] +
" p_{T} per Trackster;p_{T} [GeV]",
1442 std::vector<SimVertex>
const& simVertices,
1444 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap)
const {
1468 int minLayerId = 999;
1471 int simHits_matched = 0;
1472 int minLayerId_matched = 999;
1473 int maxLayerId_matched = 0;
1476 std::map<int, double> totenergy_layer;
1478 float hitEnergyWeight_invSum = 0;
1479 std::vector<std::pair<DetId, float>> haf_cp;
1480 for (
const auto& sc : caloParticle.
simClusters()) {
1481 LogDebug(
"HGCalValidator") <<
" This sim cluster has " << sc->hits_and_fractions().size() <<
" simHits and "
1482 << sc->energy() <<
" energy. " << std::endl;
1483 simHits += sc->hits_and_fractions().size();
1484 for (
auto const& h_and_f : sc->hits_and_fractions()) {
1485 const auto hitDetId = h_and_f.first;
1489 int layerId_matched_min = 999;
1490 int layerId_matched_max = 0;
1491 std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(hitDetId);
1492 if (itcheck != hitMap.end()) {
1493 layerId_matched_min = layerId;
1494 layerId_matched_max = layerId;
1497 const auto hitEn = itcheck->second->energy();
1498 hitEnergyWeight_invSum +=
pow(hitEn, 2);
1499 const auto hitFr = h_and_f.second;
1500 const auto hitEnFr = hitEn * hitFr;
1505 if (totenergy_layer.find(layerId) != totenergy_layer.end()) {
1506 totenergy_layer[layerId] = totenergy_layer.at(layerId) + hitEn;
1508 totenergy_layer.emplace(layerId, hitEn);
1515 [&hitDetId](
const std::pair<DetId, float>&
v) {
return v.first == hitDetId; });
1516 if (
found != haf_cp.end())
1517 found->second += hitFr;
1519 haf_cp.emplace_back(hitDetId, hitFr);
1522 LogDebug(
"HGCalValidator") <<
" matched to RecHit NOT found !" << std::endl;
1525 minLayerId =
std::min(minLayerId, layerId);
1526 maxLayerId =
std::max(maxLayerId, layerId);
1527 minLayerId_matched =
std::min(minLayerId_matched, layerId_matched_min);
1528 maxLayerId_matched =
std::max(maxLayerId_matched, layerId_matched_max);
1530 LogDebug(
"HGCalValidator") << std::endl;
1532 if (hitEnergyWeight_invSum)
1533 hitEnergyWeight_invSum = 1 / hitEnergyWeight_invSum;
1549 auto i = totenergy_layer.begin();
1550 double sum_energy = 0.0;
1551 while (
i != totenergy_layer.end()) {
1552 sum_energy +=
i->second;
1557 for (
auto const& haf : haf_cp) {
1558 const auto hitEn = hitMap.find(haf.first)->second->energy();
1566 void HGVHistoProducerAlgo::HGVHistoProducerAlgo::fill_simCluster_histos(
const Histograms&
histograms,
1567 std::vector<SimCluster>
const& simClusters,
1569 std::vector<int> thicknesses)
const {
1578 std::vector<int> tnscpl(1000, 0);
1581 std::map<std::string, int> tnscpthplus;
1582 tnscpthplus.clear();
1583 std::map<std::string, int> tnscpthminus;
1584 tnscpthminus.clear();
1586 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
1587 tnscpthplus.insert(std::pair<std::string, int>(
std::to_string(*it), 0));
1588 tnscpthminus.insert(std::pair<std::string, int>(
std::to_string(*it), 0));
1591 tnscpthplus.insert(std::pair<std::string, int>(
"mixed", 0));
1592 tnscpthminus.insert(std::pair<std::string, int>(
"mixed", 0));
1595 for (
const auto& sc : simClusters) {
1597 int nthhits120p = 0;
1598 int nthhits200p = 0;
1599 int nthhits300p = 0;
1600 int nthhitsscintp = 0;
1601 int nthhits120m = 0;
1602 int nthhits200m = 0;
1603 int nthhits300m = 0;
1604 int nthhitsscintm = 0;
1608 std::vector<int> occurenceSCinlayer(1000, 0);
1611 for (
const auto& hAndF : sc.hits_and_fractions()) {
1612 const DetId sh_detid = hAndF.first;
1616 recHitTools_->getLayerWithOffset(sh_detid) + layers * ((recHitTools_->zside(sh_detid) + 1) >> 1) - 1;
1618 int zside = recHitTools_->zside(sh_detid);
1621 if (occurenceSCinlayer[layerid] == 0) {
1624 occurenceSCinlayer[layerid]++;
1627 thickness = recHitTools_->getSiThickness(sh_detid);
1631 LogDebug(
"HGCalValidator") <<
"These are HGCal simClusters, you shouldn't be here !!! " << layerid <<
"\n";
1635 if ((thickness == 120.) && (zside > 0.)) {
1637 }
else if ((thickness == 120.) && (zside < 0.)) {
1639 }
else if ((thickness == 200.) && (zside > 0.)) {
1641 }
else if ((thickness == 200.) && (zside < 0.)) {
1643 }
else if ((thickness == 300.) && (zside > 0.)) {
1645 }
else if ((thickness == 300.) && (zside < 0.)) {
1647 }
else if ((thickness == -1) && (zside > 0.)) {
1649 }
else if ((thickness == -1) && (zside < 0.)) {
1653 <<
" You are running a geometry that contains thicknesses different than the normal ones. "
1660 if ((nthhits120p != 0 && nthhits200p != 0) || (nthhits120p != 0 && nthhits300p != 0) ||
1661 (nthhits120p != 0 && nthhitsscintp != 0) || (nthhits200p != 0 && nthhits300p != 0) ||
1662 (nthhits200p != 0 && nthhitsscintp != 0) || (nthhits300p != 0 && nthhitsscintp != 0)) {
1663 tnscpthplus[
"mixed"]++;
1664 }
else if ((nthhits120p != 0 || nthhits200p != 0 || nthhits300p != 0 || nthhitsscintp != 0)) {
1668 if ((nthhits120m != 0 && nthhits200m != 0) || (nthhits120m != 0 && nthhits300m != 0) ||
1669 (nthhits120m != 0 && nthhitsscintm != 0) || (nthhits200m != 0 && nthhits300m != 0) ||
1670 (nthhits200m != 0 && nthhitsscintm != 0) || (nthhits300m != 0 && nthhitsscintm != 0)) {
1671 tnscpthminus[
"mixed"]++;
1672 }
else if ((nthhits120m != 0 || nthhits200m != 0 || nthhits300m != 0 || nthhitsscintm != 0)) {
1680 for (
unsigned ilayer = 0; ilayer < layers * 2; ++ilayer)
1681 if (histograms.h_simclusternum_perlayer.count(ilayer))
1682 histograms.h_simclusternum_perlayer.at(ilayer)->
Fill(tnscpl[ilayer]);
1685 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
1686 if (histograms.h_simclusternum_perthick.count(*it)) {
1688 histograms.h_simclusternum_perthick.at(*it)->
Fill(tnscpthminus[
std::to_string(*it)]);
1692 histograms.h_mixedhitssimcluster_zplus->
Fill(tnscpthplus[
"mixed"]);
1693 histograms.h_mixedhitssimcluster_zminus->
Fill(tnscpthminus[
"mixed"]);
1696 void HGVHistoProducerAlgo::HGVHistoProducerAlgo::fill_simClusterAssociation_histos(
1701 edm::Handle<std::vector<SimCluster>> simClusterHandle,
1702 std::vector<SimCluster>
const& simClusters,
1703 std::vector<size_t>
const& sCIndices,
1704 const std::vector<float>& mask,
1705 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap,
1706 unsigned int layers,
1717 layerClusters_to_SimClusters(histograms,
1727 scsInLayerClusterMap,
1728 lcsInSimClusterMap);
1741 edm::Handle<std::vector<CaloParticle>> caloParticleHandle,
1742 std::vector<CaloParticle>
const& cP,
1743 std::vector<size_t>
const& cPIndices,
1744 std::vector<size_t>
const& cPSelectedIndices,
1745 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap,
1746 unsigned int layers,
1749 const auto nLayerClusters = clusters.size();
1751 std::unordered_map<DetId, std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>> detIdToCaloParticleId_Map;
1752 std::unordered_map<DetId, std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>> detIdToLayerClusterId_Map;
1756 for (
const auto& cpId : cPIndices) {
1757 for (
const auto& simCluster : cP[cpId].simClusters()) {
1758 for (
const auto& it_haf : simCluster->hits_and_fractions()) {
1759 const DetId hitid = (it_haf.first);
1760 if (hitMap.find(hitid) != hitMap.end()) {
1761 if (detIdToCaloParticleId_Map.find(hitid) == detIdToCaloParticleId_Map.end()) {
1762 detIdToCaloParticleId_Map[hitid] = std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>();
1763 detIdToCaloParticleId_Map[hitid].emplace_back(
1768 detIdToCaloParticleId_Map[hitid].
end(),
1771 if (findHitIt != detIdToCaloParticleId_Map[hitid].
end())
1772 findHitIt->fraction += it_haf.second;
1774 detIdToCaloParticleId_Map[hitid].emplace_back(
1782 for (
unsigned int lcId = 0; lcId < nLayerClusters; ++lcId) {
1783 const auto& hits_and_fractions = clusters[lcId].hitsAndFractions();
1784 const auto numberOfHitsInLC = hits_and_fractions.size();
1794 std::vector<int> hitsToCaloParticleId(numberOfHitsInLC);
1795 const auto firstHitDetId = hits_and_fractions[0].first;
1800 std::unordered_map<unsigned, float> CPEnergyInLC;
1802 for (
unsigned int iHit = 0; iHit < numberOfHitsInLC; iHit++) {
1803 const DetId rh_detid = hits_and_fractions[iHit].first;
1804 const auto rhFraction = hits_and_fractions[iHit].second;
1806 std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(rh_detid);
1809 if (detIdToLayerClusterId_Map.find(rh_detid) == detIdToLayerClusterId_Map.end()) {
1810 detIdToLayerClusterId_Map[rh_detid] = std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>();
1814 const auto& hit_find_in_CP = detIdToCaloParticleId_Map.find(rh_detid);
1822 if (rhFraction == 0.) {
1823 hitsToCaloParticleId[iHit] = -2;
1825 if (hit_find_in_CP == detIdToCaloParticleId_Map.end()) {
1826 hitsToCaloParticleId[iHit] -= 1;
1828 auto maxCPEnergyInLC = 0.f;
1830 for (
auto&
h : hit_find_in_CP->second) {
1831 const auto iCP =
h.clusterId;
1832 CPEnergyInLC[iCP] +=
h.fraction * hit->
energy();
1835 if (CPEnergyInLC[iCP] > maxCPEnergyInLC) {
1836 maxCPEnergyInLC = CPEnergyInLC[iCP];
1840 hitsToCaloParticleId[iHit] = maxCPId;
1843 hitsToCaloParticleId[iHit] > 0. ? 0. : hitsToCaloParticleId[iHit]);
1851 for (
unsigned int lcId = 0; lcId < nLayerClusters; ++lcId) {
1852 const auto firstHitDetId = (clusters[lcId].hitsAndFractions())[0].
first;
1853 const int lcLayerId =
1859 const auto& cpsIt = cpsInLayerClusterMap.
find(lcRef);
1860 if (cpsIt == cpsInLayerClusterMap.
end())
1863 const auto lc_en = clusters[lcId].energy();
1864 const auto& cps = cpsIt->
val;
1865 if (lc_en == 0. && !cps.empty()) {
1866 for (
const auto& cpPair : cps)
1870 for (
const auto& cpPair : cps) {
1871 LogDebug(
"HGCalValidator") <<
"layerCluster Id: \t" << lcId <<
"\t CP id: \t" << cpPair.first.index()
1872 <<
"\t score \t" << cpPair.second << std::endl;
1874 auto const& cp_linked =
1875 std::find_if(
std::begin(cPOnLayerMap[cpPair.first]),
1876 std::end(cPOnLayerMap[cpPair.first]),
1878 return p.first == lcRef;
1881 cPOnLayerMap[cpPair.first].
end())
1886 cp_linked->second.first / lc_en);
1897 const auto& best = std::min_element(
1898 std::begin(cps),
std::end(cps), [](
const auto& obj1,
const auto& obj2) {
return obj1.second < obj2.second; });
1899 const auto& best_cp_linked =
1900 std::find_if(
std::begin(cPOnLayerMap[best->first]),
1901 std::end(cPOnLayerMap[best->first]),
1903 return p.first == lcRef;
1905 if (best_cp_linked ==
1906 cPOnLayerMap[best->first].
end())
1909 clusters[lcId].
eta(), best_cp_linked->second.first / lc_en);
1911 clusters[lcId].
phi(), best_cp_linked->second.first / lc_en);
1918 for (
const auto& cpId : cPSelectedIndices) {
1920 const auto& lcsIt = cPOnLayerMap.find(cpRef);
1922 std::map<unsigned int, float> cPEnergyOnLayer;
1923 for (
unsigned int layerId = 0; layerId < layers * 2; ++layerId)
1924 cPEnergyOnLayer[layerId] = 0;
1926 for (
const auto& simCluster : cP[cpId].simClusters()) {
1927 for (
const auto& it_haf : simCluster->hits_and_fractions()) {
1928 const DetId hitid = (it_haf.first);
1929 const auto hitLayerId =
1930 recHitTools_->getLayerWithOffset(hitid) + layers * ((recHitTools_->zside(hitid) + 1) >> 1) - 1;
1931 std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(hitid);
1932 if (itcheck != hitMap.end()) {
1934 cPEnergyOnLayer[hitLayerId] += it_haf.second * hit->
energy();
1939 for (
unsigned int layerId = 0; layerId < layers * 2; ++layerId) {
1940 if (!cPEnergyOnLayer[layerId])
1943 histograms.h_denom_caloparticle_eta_perlayer.at(layerId)->
Fill(cP[cpId].g4Tracks()[0].momentum().
eta());
1944 histograms.h_denom_caloparticle_phi_perlayer.at(layerId)->
Fill(cP[cpId].g4Tracks()[0].momentum().
phi());
1946 if (lcsIt == cPOnLayerMap.end())
1948 const auto& lcs = lcsIt->val;
1950 auto getLCLayerId = [&](
const unsigned int lcId) {
1951 const auto firstHitDetId = (
clusters[lcId].hitsAndFractions())[0].
first;
1952 const auto lcLayerId = recHitTools_->getLayerWithOffset(firstHitDetId) +
1953 layers * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1;
1957 for (
const auto& lcPair : lcs) {
1958 if (getLCLayerId(lcPair.first.index()) != layerId)
1960 histograms.h_score_caloparticle2layercl_perlayer.at(layerId)->
Fill(lcPair.second.second);
1961 histograms.h_sharedenergy_caloparticle2layercl_perlayer.at(layerId)->
Fill(
1962 lcPair.second.first / cPEnergyOnLayer[layerId], cPEnergyOnLayer[layerId]);
1963 histograms.h_energy_vs_score_caloparticle2layercl_perlayer.at(layerId)->
Fill(
1964 lcPair.second.second, lcPair.second.first / cPEnergyOnLayer[layerId]);
1967 if (getLCLayerId(
obj.first.index()) != layerId)
1973 histograms.h_num_caloparticle_eta_perlayer.at(layerId)->
Fill(cP[cpId].g4Tracks()[0].momentum().
eta());
1974 histograms.h_num_caloparticle_phi_perlayer.at(layerId)->
Fill(cP[cpId].g4Tracks()[0].momentum().
phi());
1976 histograms.h_numDup_caloparticle_eta_perlayer.at(layerId)->
Fill(cP[cpId].g4Tracks()[0].momentum().
eta());
1977 histograms.h_numDup_caloparticle_phi_perlayer.at(layerId)->
Fill(cP[cpId].g4Tracks()[0].momentum().
phi());
1979 const auto best = std::min_element(
std::begin(lcs),
std::end(lcs), [&](
const auto& obj1,
const auto& obj2) {
1980 if (getLCLayerId(obj1.first.index()) != layerId)
1982 else if (getLCLayerId(obj2.first.index()) == layerId)
1983 return obj1.second.second < obj2.second.second;
1987 histograms.h_sharedenergy_caloparticle2layercl_vs_eta_perlayer.at(layerId)->
Fill(
1988 cP[cpId].g4Tracks()[0].momentum().
eta(), best->second.first / cPEnergyOnLayer[layerId]);
1989 histograms.h_sharedenergy_caloparticle2layercl_vs_phi_perlayer.at(layerId)->
Fill(
1990 cP[cpId].g4Tracks()[0].momentum().
phi(), best->second.first / cPEnergyOnLayer[layerId]);
2001 edm::Handle<std::vector<SimCluster>> simClusterHandle,
2002 std::vector<SimCluster>
const& sC,
2003 std::vector<size_t>
const& sCIndices,
2004 const std::vector<float>& mask,
2005 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap,
2006 unsigned int layers,
2012 for (
unsigned int lcId = 0; lcId < clusters.size(); ++lcId) {
2013 if (mask[lcId] != 0.) {
2014 LogDebug(
"HGCalValidator") <<
"Skipping layer cluster " << lcId <<
" not belonging to mask" << std::endl;
2017 const auto firstHitDetId = (clusters[lcId].hitsAndFractions())[0].
first;
2018 const auto lcLayerId =
2026 const auto& scsIt = scsInLayerClusterMap.
find(lcRef);
2027 if (scsIt == scsInLayerClusterMap.
end())
2030 const auto lc_en = clusters[lcId].energy();
2031 const auto& scs = scsIt->
val;
2034 if (lc_en == 0. && !scs.empty()) {
2035 for (
const auto& scPair : scs) {
2041 for (
const auto& scPair : scs) {
2042 LogDebug(
"HGCalValidator") <<
"layerCluster Id: \t" << lcId <<
"\t SC id: \t" << scPair.first.index()
2043 <<
"\t score \t" << scPair.second << std::endl;
2046 auto const& sc_linked =
2047 std::find_if(
std::begin(lcsInSimClusterMap[scPair.first]),
2048 std::end(lcsInSimClusterMap[scPair.first]),
2050 return p.first == lcRef;
2053 lcsInSimClusterMap[scPair.first].
end())
2058 scPair.second, sc_linked->second.first / lc_en);
2070 const auto& best = std::min_element(
2071 std::begin(scs),
std::end(scs), [](
const auto& obj1,
const auto& obj2) {
return obj1.second < obj2.second; });
2073 const auto& best_sc_linked =
2074 std::find_if(
std::begin(lcsInSimClusterMap[best->first]),
2075 std::end(lcsInSimClusterMap[best->first]),
2077 return p.first == lcRef;
2079 if (best_sc_linked ==
2080 lcsInSimClusterMap[best->first].
end())
2083 clusters[lcId].
eta(), best_sc_linked->second.first / lc_en);
2085 clusters[lcId].
phi(), best_sc_linked->second.first / lc_en);
2092 for (
const auto& scId : sCIndices) {
2094 const auto& lcsIt = lcsInSimClusterMap.find(scRef);
2096 std::map<unsigned int, float> sCEnergyOnLayer;
2097 for (
unsigned int layerId = 0; layerId < layers * 2; ++layerId)
2098 sCEnergyOnLayer[layerId] = 0;
2100 for (
const auto& it_haf : sC[scId].hits_and_fractions()) {
2101 const DetId hitid = (it_haf.first);
2102 const auto scLayerId =
2103 recHitTools_->getLayerWithOffset(hitid) + layers * ((recHitTools_->zside(hitid) + 1) >> 1) - 1;
2104 std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(hitid);
2105 if (itcheck != hitMap.end()) {
2107 sCEnergyOnLayer[scLayerId] += it_haf.second * hit->
energy();
2111 for (
unsigned int layerId = 0; layerId < layers * 2; ++layerId) {
2112 if (!sCEnergyOnLayer[layerId])
2115 histograms.h_denom_simcluster_eta_perlayer[
count].at(layerId)->
Fill(sC[scId].
eta());
2116 histograms.h_denom_simcluster_phi_perlayer[
count].at(layerId)->
Fill(sC[scId].
phi());
2118 if (lcsIt == lcsInSimClusterMap.end())
2120 const auto& lcs = lcsIt->val;
2122 auto getLCLayerId = [&](
const unsigned int lcId) {
2123 const auto firstHitDetId = (
clusters[lcId].hitsAndFractions())[0].
first;
2124 const unsigned int lcLayerId = recHitTools_->getLayerWithOffset(firstHitDetId) +
2125 layers * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1;
2130 for (
const auto& lcPair : lcs) {
2131 auto lcId = lcPair.first.index();
2132 if (mask[lcId] != 0.) {
2133 LogDebug(
"HGCalValidator") <<
"Skipping layer cluster " << lcId <<
" not belonging to mask" << std::endl;
2137 if (getLCLayerId(lcId) != layerId)
2139 histograms.h_score_simcluster2layercl_perlayer[
count].at(layerId)->
Fill(lcPair.second.second);
2140 histograms.h_sharedenergy_simcluster2layercl_perlayer[
count].at(layerId)->
Fill(
2141 lcPair.second.first / sCEnergyOnLayer[layerId], sCEnergyOnLayer[layerId]);
2142 histograms.h_energy_vs_score_simcluster2layercl_perlayer[
count].at(layerId)->
Fill(
2143 lcPair.second.second, lcPair.second.first / sCEnergyOnLayer[layerId]);
2146 if (getLCLayerId(
obj.first.index()) != layerId)
2152 histograms.h_num_simcluster_eta_perlayer[
count].at(layerId)->
Fill(sC[scId].
eta());
2153 histograms.h_num_simcluster_phi_perlayer[
count].at(layerId)->
Fill(sC[scId].
phi());
2155 histograms.h_numDup_simcluster_eta_perlayer[
count].at(layerId)->
Fill(sC[scId].
eta());
2156 histograms.h_numDup_simcluster_phi_perlayer[
count].at(layerId)->
Fill(sC[scId].
phi());
2158 const auto best = std::min_element(
std::begin(lcs),
std::end(lcs), [&](
const auto& obj1,
const auto& obj2) {
2159 if (getLCLayerId(obj1.first.index()) != layerId)
2161 else if (getLCLayerId(obj2.first.index()) == layerId)
2162 return obj1.second.second < obj2.second.second;
2166 histograms.h_sharedenergy_simcluster2layercl_vs_eta_perlayer[
count].at(layerId)->
Fill(
2167 sC[scId].
eta(), best->second.first / sCEnergyOnLayer[layerId]);
2168 histograms.h_sharedenergy_simcluster2layercl_vs_phi_perlayer[
count].at(layerId)->
Fill(
2169 sC[scId].
phi(), best->second.first / sCEnergyOnLayer[layerId]);
2180 edm::Handle<std::vector<CaloParticle>> caloParticleHandle,
2181 std::vector<CaloParticle>
const& cP,
2182 std::vector<size_t>
const& cPIndices,
2183 std::vector<size_t>
const& cPSelectedIndices,
2184 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap,
2185 std::map<double, double> cummatbudg,
2186 unsigned int layers,
2187 std::vector<int> thicknesses,
2198 std::vector<int> tnlcpl(1000, 0);
2201 std::map<std::string, int> tnlcpthplus;
2202 tnlcpthplus.clear();
2203 std::map<std::string, int> tnlcpthminus;
2204 tnlcpthminus.clear();
2206 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
2207 tnlcpthplus.insert(std::pair<std::string, int>(
std::to_string(*it), 0));
2208 tnlcpthminus.insert(std::pair<std::string, int>(
std::to_string(*it), 0));
2211 tnlcpthplus.insert(std::pair<std::string, int>(
"mixed", 0));
2212 tnlcpthminus.insert(std::pair<std::string, int>(
"mixed", 0));
2223 cpsInLayerClusterMap,
2228 std::vector<double> tecpl(1000, 0.0);
2230 std::vector<double> ldbar(1000, 0.0);
2233 double caloparteneplus = 0.;
2234 double caloparteneminus = 0.;
2235 for (
const auto& cpId : cPIndices) {
2236 if (cP[cpId].
eta() >= 0.) {
2237 caloparteneplus = caloparteneplus + cP[cpId].energy();
2238 }
else if (cP[cpId].
eta() < 0.) {
2239 caloparteneminus = caloparteneminus + cP[cpId].energy();
2244 for (
const auto& lcId : clusters) {
2245 const auto seedid = lcId.seed();
2246 const double seedx =
recHitTools_->getPosition(seedid).x();
2247 const double seedy =
recHitTools_->getPosition(seedid).y();
2255 int nthhits120p = 0;
2256 int nthhits200p = 0;
2257 int nthhits300p = 0;
2258 int nthhitsscintp = 0;
2259 int nthhits120m = 0;
2260 int nthhits200m = 0;
2261 int nthhits300m = 0;
2262 int nthhitsscintm = 0;
2264 double thickness = 0.;
2273 bool cluslay =
true;
2277 const auto& hits_and_fractions = lcId.hitsAndFractions();
2278 for (
std::vector<std::pair<DetId, float>>::const_iterator it_haf = hits_and_fractions.begin();
2279 it_haf != hits_and_fractions.end();
2281 const DetId rh_detid = it_haf->first;
2291 LogDebug(
"HGCalValidator") <<
"These are HGCal layer clusters, you shouldn't be here !!! " << layerid <<
"\n";
2298 while (lay_string.size() < 2)
2299 lay_string.insert(0,
"0");
2300 curistr +=
"_" + lay_string;
2307 if ((thickness == 120.) && (
recHitTools_->zside(rh_detid) > 0.)) {
2309 }
else if ((thickness == 120.) && (
recHitTools_->zside(rh_detid) < 0.)) {
2311 }
else if ((thickness == 200.) && (
recHitTools_->zside(rh_detid) > 0.)) {
2313 }
else if ((thickness == 200.) && (
recHitTools_->zside(rh_detid) < 0.)) {
2315 }
else if ((thickness == 300.) && (
recHitTools_->zside(rh_detid) > 0.)) {
2317 }
else if ((thickness == 300.) && (
recHitTools_->zside(rh_detid) < 0.)) {
2319 }
else if ((thickness == -1) && (
recHitTools_->zside(rh_detid) > 0.)) {
2321 }
else if ((thickness == -1) && (
recHitTools_->zside(rh_detid) < 0.)) {
2325 <<
" You are running a geometry that contains thicknesses different than the normal ones. "
2329 std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap.find(rh_detid);
2330 if (itcheck == hitMap.end()) {
2331 LogDebug(
"HGCalValidator") <<
" You shouldn't be here - Unable to find a hit " << rh_detid.
rawId() <<
" "
2340 const double hit_x =
recHitTools_->getPosition(rh_detid).x();
2341 const double hit_y =
recHitTools_->getPosition(rh_detid).y();
2342 double distancetoseed =
distance(seedx, seedy, hit_x, hit_y);
2343 double distancetomax =
distance(maxx, maxy, hit_x, hit_y);
2361 std::map<DetId, float>::const_iterator dit = densities.find(rh_detid);
2362 if (dit == densities.end()) {
2363 LogDebug(
"HGCalValidator") <<
" You shouldn't be here - Unable to find a density " << rh_detid.
rawId() <<
" "
2375 if ((nthhits120p != 0 && nthhits200p != 0) || (nthhits120p != 0 && nthhits300p != 0) ||
2376 (nthhits120p != 0 && nthhitsscintp != 0) || (nthhits200p != 0 && nthhits300p != 0) ||
2377 (nthhits200p != 0 && nthhitsscintp != 0) || (nthhits300p != 0 && nthhitsscintp != 0)) {
2378 tnlcpthplus[
"mixed"]++;
2379 }
else if ((nthhits120p != 0 || nthhits200p != 0 || nthhits300p != 0 || nthhitsscintp != 0)) {
2383 if ((nthhits120m != 0 && nthhits200m != 0) || (nthhits120m != 0 && nthhits300m != 0) ||
2384 (nthhits120m != 0 && nthhitsscintm != 0) || (nthhits200m != 0 && nthhits300m != 0) ||
2385 (nthhits200m != 0 && nthhitsscintm != 0) || (nthhits300m != 0 && nthhitsscintm != 0)) {
2386 tnlcpthminus[
"mixed"]++;
2387 }
else if ((nthhits120m != 0 || nthhits200m != 0 || nthhits300m != 0 || nthhitsscintm != 0)) {
2393 std::vector<int> bigamoth;
2396 bigamoth.push_back(nthhits120p);
2397 bigamoth.push_back(nthhits200p);
2398 bigamoth.push_back(nthhits300p);
2399 bigamoth.push_back(nthhitsscintp);
2400 }
else if (zside < 0) {
2401 bigamoth.push_back(nthhits120m);
2402 bigamoth.push_back(nthhits200m);
2403 bigamoth.push_back(nthhits300m);
2404 bigamoth.push_back(nthhitsscintm);
2406 auto bgth = std::max_element(bigamoth.begin(), bigamoth.end());
2409 while (lay_string.size() < 2)
2410 lay_string.insert(0,
"0");
2411 istr +=
"_" + lay_string;
2419 double distancebetseedandmax =
distance(seedx, seedy, maxx, maxy);
2422 seedstr +=
"_" + lay_string;
2426 const auto lc_en = lcId.energy();
2433 tecpl[layerid] = tecpl[layerid] + lc_en;
2434 ldbar[layerid] = ldbar[layerid] + lc_en * cummatbudg[(double)lay];
2439 double sumeneallcluspl = 0.;
2440 double sumeneallclusmi = 0.;
2442 double sumldbarpl = 0.;
2443 double sumldbarmi = 0.;
2445 for (
unsigned ilayer = 0; ilayer < layers * 2; ++ilayer) {
2451 if (ilayer < layers) {
2453 if (caloparteneminus != 0.) {
2458 sumeneallclusmi = sumeneallclusmi + tecpl[ilayer];
2460 sumldbarmi = sumldbarmi + ldbar[ilayer];
2463 if (caloparteneplus != 0.) {
2468 sumeneallcluspl = sumeneallcluspl + tecpl[ilayer];
2470 sumldbarpl = sumldbarpl + ldbar[ilayer];
2476 for (std::vector<int>::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) {
2487 if (caloparteneplus != 0.) {
2490 if (caloparteneminus != 0.) {
2507 const std::map<
unsigned int, std::vector<unsigned int>>& cpToSc_SimTrackstersMap,
2508 std::vector<SimCluster>
const& sC,
2510 std::vector<CaloParticle>
const& cP,
2511 std::vector<size_t>
const& cPIndices,
2512 std::vector<size_t>
const& cPSelectedIndices,
2513 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap,
2514 unsigned int layers)
const {
2515 const auto nTracksters = tracksters.size();
2516 const auto nSimTracksters = simTSs.size();
2518 std::unordered_map<DetId, std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>> detIdSimTSId_Map;
2519 std::unordered_map<DetId, std::vector<HGVHistoProducerAlgo::detIdInfoInTrackster>> detIdToTracksterId_Map;
2520 std::vector<int> tracksters_FakeMerge(nTracksters, 0);
2521 std::vector<int> tracksters_PurityDuplicate(nTracksters, 0);
2526 std::vector<std::vector<std::pair<unsigned int, float>>> stsInTrackster;
2527 stsInTrackster.resize(nTracksters);
2533 std::unordered_map<int, caloParticleOnLayer> cPOnLayer;
2534 std::unordered_map<int, std::vector<caloParticleOnLayer>> sCOnLayer;
2536 for (
const auto cpIndex : cPIndices) {
2537 cPOnLayer[cpIndex].caloParticleId = cpIndex;
2538 cPOnLayer[cpIndex].energy = 0.f;
2539 cPOnLayer[cpIndex].hits_and_fractions.clear();
2540 const auto nSC_inCP = sC.size();
2541 sCOnLayer[cpIndex].resize(nSC_inCP);
2542 for (
unsigned int iSC = 0; iSC < nSC_inCP; iSC++) {
2543 sCOnLayer[cpIndex][iSC].caloParticleId = cpIndex;
2544 sCOnLayer[cpIndex][iSC].energy = 0.f;
2545 sCOnLayer[cpIndex][iSC].hits_and_fractions.clear();
2550 const unsigned int iSTS,
2552 const std::map<unsigned int, std::vector<unsigned int>>& cpToSc_SimTrackstersMap,
2554 unsigned int cpId = -1;
2556 const auto productID = simTS.seedID();
2557 if (productID == cPHandle_id) {
2558 cpId = simTS.seedIndex();
2560 const auto findSimTSFromCP = std::find_if(
2563 [&](
const std::pair<
unsigned int, std::vector<unsigned int>>& cpToScs) {
2566 if (findSimTSFromCP !=
std::end(cpToSc_SimTrackstersMap)) {
2567 cpId = simTSs_fromCP[findSimTSFromCP->first].seedIndex();
2574 auto getLCId = [](
const std::vector<unsigned int>& tst_vertices,
2576 const DetId& hitid) {
2577 unsigned int lcId = -1;
2578 std::for_each(
std::begin(tst_vertices),
std::end(tst_vertices), [&](
unsigned int idx) {
2579 const auto& lc_haf = layerClusters[idx].hitsAndFractions();
2580 const auto& hitFound = std::find_if(
std::begin(lc_haf),
2582 [&hitid](
const std::pair<DetId, float>&
v) {
return v.first == hitid; });
2583 if (hitFound != lc_haf.end())
2589 for (
unsigned int iSTS = 0; iSTS < nSimTracksters; ++iSTS) {
2590 const auto cpId = getCPId(simTSs[iSTS], iSTS, cPHandle_id, cpToSc_SimTrackstersMap, simTSs_fromCP);
2591 if (
std::find(cPIndices.begin(), cPIndices.end(), cpId) == cPIndices.end())
2595 for (
const auto& simCluster : cP[cpId].simClusters()) {
2596 auto iSim = simTSs[iSTS].seedIndex();
2597 if (simTSs[iSTS].seedID() != cPHandle_id) {
2598 if (iSim != (&(*simCluster) - &(sC[0])))
2603 for (
const auto& it_haf : simCluster->hits_and_fractions()) {
2604 const auto hitid = (it_haf.first);
2605 const auto lcId = getLCId(simTSs[iSTS].
vertices(), layerClusters, hitid);
2608 const auto itcheck = hitMap.find(hitid);
2610 if ((valType == 0 && itcheck != hitMap.end()) || (valType > 0 &&
int(lcId) >= 0)) {
2611 const auto elemId = (valType == 0) ? hitid : lcId;
2613 const auto lcFraction =
2615 const auto elemFr = (valType == 0) ? it_haf.second : lcFraction;
2623 if (detIdSimTSId_Map.find(elemId) == detIdSimTSId_Map.end()) {
2624 detIdSimTSId_Map[elemId] = std::vector<HGVHistoProducerAlgo::detIdInfoInCluster>();
2629 detIdSimTSId_Map[elemId].
end(),
2632 if (findSTSIt != detIdSimTSId_Map[elemId].
end()) {
2634 findSTSIt->fraction += elemFr;
2639 const auto hitEn = itcheck->second->energy();
2643 cPOnLayer[cpId].energy += it_haf.second * hitEn;
2644 sCOnLayer[cpId][iSim].energy += lcFraction * hitEn;
2651 auto& haf = cPOnLayer[cpId].hits_and_fractions;
2652 auto found = std::find_if(
2653 std::begin(haf),
std::end(haf), [&hitid](
const std::pair<DetId, float>&
v) {
return v.first == hitid; });
2654 if (
found != haf.end())
2655 found->second += it_haf.second;
2657 haf.emplace_back(hitid, it_haf.second);
2659 auto& haf_sc = sCOnLayer[cpId][iSim].hits_and_fractions;
2660 auto found_sc = std::find_if(
std::begin(haf_sc),
2662 [&hitid](
const std::pair<DetId, float>& v) {
return v.first == hitid; });
2663 if (found_sc != haf_sc.end())
2664 found_sc->second += it_haf.second;
2666 haf_sc.emplace_back(hitid, it_haf.second);
2673 std::vector<std::pair<DetId, float>> hits_and_fractions_norm;
2675 std::for_each(
std::begin(trackster.vertices()),
std::end(trackster.vertices()), [&](
unsigned int idx) {
2676 const auto fraction = 1.f / trackster.vertex_multiplicity(lcInTst++);
2677 for (
const auto& cell : layerClusters[idx].hitsAndFractions()) {
2678 hits_and_fractions_norm.emplace_back(
2679 cell.first, cell.second *
fraction);
2682 return hits_and_fractions_norm;
2688 for (
unsigned int tstId = 0; tstId < nTracksters; ++tstId) {
2689 const auto& tst = tracksters[tstId];
2696 if (tst.vertices().empty())
2699 std::unordered_map<unsigned, float> CPEnergyInTS;
2700 int maxCPId_byNumberOfHits = -1;
2701 unsigned int maxCPNumberOfHitsInTS = 0;
2702 int maxCPId_byEnergy = -1;
2703 float maxEnergySharedTSandCP = 0.f;
2704 float energyFractionOfTSinCP = 0.f;
2705 float energyFractionOfCPinTS = 0.f;
2712 std::unordered_map<unsigned, unsigned> occurrencesCPinTS;
2713 unsigned int numberOfNoiseHitsInTS = 0;
2714 unsigned int numberOfHaloHitsInTS = 0;
2716 const auto tst_hitsAndFractions = apply_LCMultiplicity(tst, layerClusters);
2717 const auto numberOfHitsInTS = tst_hitsAndFractions.size();
2735 std::vector<int> hitsToCaloParticleId(numberOfHitsInTS);
2738 for (
unsigned int iHit = 0; iHit < numberOfHitsInTS; iHit++) {
2739 const auto rh_detid = tst_hitsAndFractions[iHit].first;
2740 const auto rhFraction = tst_hitsAndFractions[iHit].second;
2742 const auto lcId_r = getLCId(tst.vertices(), layerClusters, rh_detid);
2743 const auto iLC_r =
std::find(tst.vertices().begin(), tst.vertices().end(), lcId_r);
2753 if (detIdToTracksterId_Map.find(rh_detid) == detIdToTracksterId_Map.end()) {
2754 detIdToTracksterId_Map[rh_detid] = std::vector<HGVHistoProducerAlgo::detIdInfoInTrackster>();
2755 detIdToTracksterId_Map[rh_detid].emplace_back(
2760 detIdToTracksterId_Map[rh_detid].
end(),
2763 if (findTSIt != detIdToTracksterId_Map[rh_detid].
end()) {
2765 findTSIt->fraction += rhFraction;
2767 detIdToTracksterId_Map[rh_detid].emplace_back(
2777 if (rhFraction == 0.) {
2778 hitsToCaloParticleId[iHit] = -2;
2779 numberOfHaloHitsInTS++;
2783 const auto elemId = (valType == 0) ? rh_detid.rawId() : lcId_r;
2784 const auto recoFr = (valType == 0) ? rhFraction : lcFraction_r;
2785 const auto& hit_find_in_STS = detIdSimTSId_Map.find(elemId);
2786 if (hit_find_in_STS == detIdSimTSId_Map.end()) {
2787 hitsToCaloParticleId[iHit] -= 1;
2790 const auto hitEn = hitMap.find(rh_detid)->second->energy();
2795 auto maxCPEnergyInTS = 0.f;
2797 for (
const auto&
h : hit_find_in_STS->second) {
2798 const auto shared_fraction =
std::min(recoFr,
h.fraction);
2799 const auto iSTS =
h.clusterId;
2800 const auto& simTS = simTSs[iSTS];
2801 auto iSim = simTS.seedIndex();
2802 if (simTSs[iSTS].seedID() == cPHandle_id)
2809 const auto cpId = getCPId(simTS, iSTS, cPHandle_id, cpToSc_SimTrackstersMap, simTSs_fromCP);
2810 if (
std::find(cPIndices.begin(), cPIndices.end(), cpId) == cPIndices.end())
2813 CPEnergyInTS[cpId] += shared_fraction * hitEn;
2816 cPOnLayer[cpId].layerClusterIdToEnergyAndScore[tstId].first += shared_fraction * hitEn;
2817 sCOnLayer[cpId][iSim].layerClusterIdToEnergyAndScore[tstId].first += shared_fraction * hitEn;
2818 cPOnLayer[cpId].layerClusterIdToEnergyAndScore[tstId].second = FLT_MAX;
2819 sCOnLayer[cpId][iSim].layerClusterIdToEnergyAndScore[tstId].second = FLT_MAX;
2822 stsInTrackster[tstId].emplace_back(iSTS, FLT_MAX);
2825 if (shared_fraction > maxCPEnergyInTS) {
2827 maxCPEnergyInTS = CPEnergyInTS[cpId];
2832 hitsToCaloParticleId[iHit] = maxCPId;
2839 for (
auto c : hitsToCaloParticleId) {
2841 numberOfNoiseHitsInTS++;
2843 occurrencesCPinTS[
c]++;
2848 for (
auto&
c : occurrencesCPinTS) {
2849 if (
c.second > maxCPNumberOfHitsInTS) {
2850 maxCPId_byNumberOfHits =
c.first;
2851 maxCPNumberOfHitsInTS =
c.second;
2856 for (
auto&
c : CPEnergyInTS) {
2857 if (
c.second > maxEnergySharedTSandCP) {
2858 maxCPId_byEnergy =
c.first;
2859 maxEnergySharedTSandCP =
c.second;
2863 float totalCPEnergyFromLayerCP = 0.f;
2864 if (maxCPId_byEnergy >= 0) {
2865 totalCPEnergyFromLayerCP += cPOnLayer[maxCPId_byEnergy].energy;
2866 energyFractionOfCPinTS = maxEnergySharedTSandCP / totalCPEnergyFromLayerCP;
2867 if (tst.raw_energy() > 0.f) {
2868 energyFractionOfTSinCP = maxEnergySharedTSandCP / tst.raw_energy();
2872 LogDebug(
"HGCalValidator") << std::setw(12) <<
"Trackster\t" << std::setw(10) <<
"energy\t" << std::setw(5)
2873 <<
"nhits\t" << std::setw(12) <<
"noise hits\t" << std::setw(22)
2874 <<
"maxCPId_byNumberOfHits\t" << std::setw(8) <<
"nhitsCP\t" << std::setw(16)
2875 <<
"maxCPId_byEnergy\t" << std::setw(23) <<
"maxEnergySharedTSandCP\t" << std::setw(22)
2876 <<
"totalCPEnergyFromAllLayerCP\t" << std::setw(22) <<
"energyFractionOfTSinCP\t"
2877 << std::setw(25) <<
"energyFractionOfCPinTS\t" << std::endl;
2878 LogDebug(
"HGCalValidator") << std::setw(12) << tstId <<
"\t"
2879 << std::setw(10) << tst.raw_energy() <<
"\t" << std::setw(5) << numberOfHitsInTS <<
"\t"
2880 << std::setw(12) << numberOfNoiseHitsInTS <<
"\t" << std::setw(22)
2881 << maxCPId_byNumberOfHits <<
"\t" << std::setw(8) << maxCPNumberOfHitsInTS <<
"\t"
2882 << std::setw(16) << maxCPId_byEnergy <<
"\t" << std::setw(23) << maxEnergySharedTSandCP
2883 <<
"\t" << std::setw(22) << totalCPEnergyFromLayerCP <<
"\t" << std::setw(22)
2884 << energyFractionOfTSinCP <<
"\t" << std::setw(25) << energyFractionOfCPinTS
2890 for (
unsigned int tstId = 0; tstId < nTracksters; ++tstId) {
2891 const auto& tst = tracksters[tstId];
2892 if (tst.vertices().empty())
2897 std::sort(stsInTrackster[tstId].
begin(), stsInTrackster[tstId].
end());
2899 stsInTrackster[tstId].erase(
last, stsInTrackster[tstId].
end());
2901 if (tst.raw_energy() == 0. && !stsInTrackster[tstId].empty()) {
2903 for (
auto& stsPair : stsInTrackster[tstId]) {
2905 stsPair.second = 1.;
2906 LogDebug(
"HGCalValidator") <<
"Trackster Id:\t" << tstId <<
"\tSimTrackster id:\t" << stsPair.first
2907 <<
"\tscore\t" << stsPair.second << std::endl;
2913 const auto tst_hitsAndFractions = apply_LCMultiplicity(tst, layerClusters);
2916 float tracksterEnergy = 0.f, invTracksterEnergyWeight = 0.f;
2917 for (
const auto& haf : tst_hitsAndFractions) {
2922 const auto lcId = getLCId(tst.vertices(), layerClusters, haf.first);
2923 const auto iLC =
std::find(tst.vertices().begin(), tst.vertices().end(), lcId);
2926 tracksterEnergy += hitFr * hitMap.at(haf.first)->energy();
2927 invTracksterEnergyWeight +=
pow(hitFr * hitMap.at(haf.first)->energy(), 2);
2929 if (invTracksterEnergyWeight)
2930 invTracksterEnergyWeight = 1.f / invTracksterEnergyWeight;
2932 for (
const auto& haf : tst_hitsAndFractions) {
2933 const auto rh_detid = haf.first;
2934 unsigned int elemId = 0;
2935 float rhFraction = 0.f;
2937 elemId = rh_detid.rawId();
2938 rhFraction = haf.second;
2940 const auto lcId = getLCId(tst.vertices(), layerClusters, rh_detid);
2942 const auto iLC =
std::find(tst.vertices().begin(), tst.vertices().end(), lcId);
2946 bool hitWithNoSTS =
false;
2947 if (detIdSimTSId_Map.find(elemId) == detIdSimTSId_Map.end())
2948 hitWithNoSTS =
true;
2950 const auto hitEnergyWeight =
pow(hit->
energy(), 2);
2952 for (
auto& stsPair : stsInTrackster[tstId]) {
2953 float cpFraction = 0.f;
2954 if (!hitWithNoSTS) {
2956 detIdSimTSId_Map[elemId].
begin(),
2957 detIdSimTSId_Map[elemId].
end(),
2959 stsPair.first, 0.f});
2960 if (findSTSIt != detIdSimTSId_Map[elemId].
end())
2961 cpFraction = findSTSIt->fraction;
2963 if (stsPair.second == FLT_MAX) {
2964 stsPair.second = 0.f;
2967 min(
pow(rhFraction - cpFraction, 2),
pow(rhFraction, 2)) * hitEnergyWeight * invTracksterEnergyWeight;
2972 if (stsInTrackster[tstId].
empty())
2973 LogDebug(
"HGCalValidator") <<
"Trackster Id: " << tstId <<
"\tSimTrackster id: -1"
2976 tracksters_FakeMerge[tstId] =
2977 std::count_if(
std::begin(stsInTrackster[tstId]),
2979 [ScoreCutTStoSTSFakeMerge](
const auto&
obj) {
return obj.second < ScoreCutTStoSTSFakeMerge; });
2981 const auto score = std::min_element(
std::begin(stsInTrackster[tstId]),
2983 [](
const auto& obj1,
const auto& obj2) {
return obj1.second < obj2.second; });
2985 float sharedEneFrac2 = 0;
2986 for (
const auto& stsPair : stsInTrackster[tstId]) {
2987 const auto iSTS = stsPair.first;
2988 const auto iScore = stsPair.second;
2989 const auto cpId = getCPId(simTSs[iSTS], iSTS, cPHandle_id, cpToSc_SimTrackstersMap, simTSs_fromCP);
2990 auto iSim = simTSs[iSTS].seedIndex();
2991 if (simTSs[iSTS].seedID() == cPHandle_id)
2993 const auto& simOnLayer = (valType == 0) ? cPOnLayer[cpId] : sCOnLayer[cpId][iSim];
2995 float sharedeneCPallLayers = 0.;
2996 sharedeneCPallLayers += simOnLayer.layerClusterIdToEnergyAndScore.count(tstId)
2997 ? simOnLayer.layerClusterIdToEnergyAndScore.at(tstId).first
2999 if (tracksterEnergy == 0)
3001 const auto sharedEneFrac = sharedeneCPallLayers / tracksterEnergy;
3002 LogDebug(
"HGCalValidator") <<
"\nTrackster id: " << tstId <<
" (" << tst.vertices().size() <<
" vertices)"
3003 <<
"\tSimTrackster Id: " << iSTS <<
" (" << simTSs[iSTS].vertices().size()
3005 <<
" (CP id: " << cpId <<
")\tscore: " << iScore
3006 <<
"\tsharedeneCPallLayers: " << sharedeneCPallLayers << std::endl;
3011 if (iSTS == score->first) {
3019 }
else if (score2 < 0 || iScore < score2) {
3021 sharedEneFrac2 = sharedEneFrac;
3031 std::unordered_map<unsigned int, std::vector<float>> score3d;
3032 std::unordered_map<unsigned int, std::vector<float>> tstSharedEnergy;
3034 for (
unsigned int iSTS = 0; iSTS < nSimTracksters; ++iSTS) {
3035 score3d[iSTS].resize(nTracksters);
3036 tstSharedEnergy[iSTS].resize(nTracksters);
3037 for (
unsigned int j = 0;
j < nTracksters; ++
j) {
3038 score3d[iSTS][
j] = FLT_MAX;
3039 tstSharedEnergy[iSTS][
j] = 0.f;
3046 for (
unsigned int iSTS = 0; iSTS < nSimTracksters; ++iSTS) {
3047 const auto& sts = simTSs[iSTS];
3048 const auto& cpId = getCPId(sts, iSTS, cPHandle_id, cpToSc_SimTrackstersMap, simTSs_fromCP);
3049 if (valType == 0 &&
std::find(cPSelectedIndices.begin(), cPSelectedIndices.end(), cpId) == cPSelectedIndices.end())
3052 const auto& hafLC = apply_LCMultiplicity(sts, layerClusters);
3053 float SimEnergy_LC = 0.f;
3054 for (
const auto& haf : hafLC) {
3055 const auto lcId = getLCId(sts.vertices(), layerClusters, haf.first);
3056 const auto iLC =
std::find(sts.vertices().begin(), sts.vertices().end(), lcId);
3061 auto iSim = sts.seedIndex();
3062 if (sts.seedID() == cPHandle_id)
3064 auto& simOnLayer = (valType == 0) ? cPOnLayer[cpId] : sCOnLayer[cpId][iSim];
3068 std::set<unsigned int> stsId_tstId_related;
3069 auto& score3d_iSTS = score3d[iSTS];
3071 float SimEnergy = 0.f;
3072 float SimEnergyWeight = 0.f, hitsEnergyWeight = 0.f;
3074 const auto SimNumberOfHits = simOnLayer.hits_and_fractions.size();
3075 if (SimNumberOfHits == 0)
3077 SimEnergy += simOnLayer.energy;
3078 int tstWithMaxEnergyInCP = -1;
3080 float maxEnergyTSperlayerinSim = 0.f;
3081 float SimEnergyFractionInTSperlayer = 0.f;
3083 for (
const auto& tst : simOnLayer.layerClusterIdToEnergyAndScore) {
3084 if (tst.second.first > maxEnergyTSperlayerinSim) {
3085 maxEnergyTSperlayerinSim = tst.second.first;
3086 tstWithMaxEnergyInCP = tst.first;
3089 if (SimEnergy > 0.
f)
3090 SimEnergyFractionInTSperlayer = maxEnergyTSperlayerinSim / SimEnergy;
3092 LogDebug(
"HGCalValidator") << std::setw(12) <<
"caloparticle\t" << std::setw(15) <<
"cp total energy\t"
3093 << std::setw(15) <<
"cpEnergyOnLayer\t" << std::setw(14) <<
"CPNhitsOnLayer\t"
3094 << std::setw(18) <<
"tstWithMaxEnergyInCP\t" << std::setw(15) <<
"maxEnergyTSinCP\t"
3095 << std::setw(20) <<
"CPEnergyFractionInTS"
3097 LogDebug(
"HGCalValidator") << std::setw(12) << cpId <<
"\t" << std::setw(15) << sts.raw_energy() <<
"\t"
3098 << std::setw(15) << SimEnergy <<
"\t" << std::setw(14) << SimNumberOfHits <<
"\t"
3099 << std::setw(18) << tstWithMaxEnergyInCP <<
"\t" << std::setw(15)
3100 << maxEnergyTSperlayerinSim <<
"\t" << std::setw(20) << SimEnergyFractionInTSperlayer
3103 for (
const auto& haf : ((valType == 0) ? simOnLayer.hits_and_fractions : hafLC)) {
3104 const auto& hitDetId = haf.first;
3109 SimEnergyWeight +=
pow(haf.second * hitMap.at(hitDetId)->energy(), 2);
3111 const auto lcId = getLCId(sts.vertices(), layerClusters, hitDetId);
3112 float cpFraction = 0.f;
3114 cpFraction = haf.second;
3116 const auto iLC =
std::find(sts.vertices().begin(), sts.vertices().end(), lcId);
3119 if (cpFraction == 0.
f)
3122 bool hitWithNoTS =
false;
3123 if (detIdToTracksterId_Map.find(hitDetId) == detIdToTracksterId_Map.end())
3126 const auto hitEnergyWeight =
pow(hit->
energy(), 2);
3127 hitsEnergyWeight +=
pow(cpFraction, 2) * hitEnergyWeight;
3129 for (
auto& tsPair : simOnLayer.layerClusterIdToEnergyAndScore) {
3130 const auto tstId = tsPair.first;
3131 stsId_tstId_related.insert(tstId);
3133 float tstFraction = 0.f;
3135 const auto findTSIt =
3137 detIdToTracksterId_Map[hitDetId].
end(),
3140 if (findTSIt != detIdToTracksterId_Map[hitDetId].
end()) {
3142 tstFraction = findTSIt->fraction;
3147 tstFraction = 1.f / tracksters[tstId].vertex_multiplicity(
3155 if (tsPair.second.second == FLT_MAX) {
3156 tsPair.second.second = 0.f;
3158 tsPair.second.second +=
min(
pow(tstFraction - cpFraction, 2),
pow(cpFraction, 2)) * hitEnergyWeight;
3160 LogDebug(
"HGCalValidator") <<
"\nTracksterId:\t" << tstId <<
"\tSimTracksterId:\t" << iSTS <<
"\tcpId:\t"
3161 << cpId <<
"\ttstfraction, cpfraction:\t" << tstFraction <<
", " << cpFraction
3162 <<
"\thitEnergyWeight:\t" << hitEnergyWeight <<
"\tadded delta:\t"
3163 <<
pow((tstFraction - cpFraction), 2) * hitEnergyWeight
3164 <<
"\tcurrent Sim-score numerator:\t" << tsPair.second.second
3165 <<
"\tshared Sim energy:\t" << tsPair.second.first <<
'\n';
3169 if (simOnLayer.layerClusterIdToEnergyAndScore.empty())
3170 LogDebug(
"HGCalValidator") <<
"CP Id:\t" << cpId <<
"\tTS id:\t-1"
3171 <<
" Sub score in \t -1\n";
3173 for (
const auto& tsPair : simOnLayer.layerClusterIdToEnergyAndScore) {
3174 const auto tstId = tsPair.first;
3176 if (score3d_iSTS[tstId] == FLT_MAX) {
3177 score3d_iSTS[tstId] = 0.f;
3179 score3d_iSTS[tstId] += tsPair.second.second;
3180 tstSharedEnergy[iSTS][tstId] += tsPair.second.first;
3184 const auto scoreDenom = (valType == 0) ? SimEnergyWeight : hitsEnergyWeight;
3185 const auto energyDenom = (valType == 0) ? SimEnergy : SimEnergy_LC;
3187 const auto sts_eta = sts.barycenter().eta();
3188 const auto sts_phi = sts.barycenter().phi();
3189 const auto sts_en = sts.raw_energy();
3190 const auto sts_pt = sts.raw_pt();
3201 bool sts_considered_efficient =
false;
3202 bool sts_considered_pure =
false;
3203 for (
const auto tstId : stsId_tstId_related) {
3205 score3d_iSTS[tstId] /= scoreDenom;
3206 const auto tstSharedEnergyFrac = tstSharedEnergy[iSTS][tstId] / energyDenom;
3207 LogDebug(
"HGCalValidator") <<
"STS id: " << iSTS <<
"\t(CP id: " << cpId <<
")\tTS id: " << tstId
3208 <<
"\nSimEnergy: " << energyDenom <<
"\tSimEnergyWeight: " << SimEnergyWeight
3209 <<
"\tTrackste energy: " << tracksters[tstId].raw_energy()
3210 <<
"\nscore: " << score3d_iSTS[tstId]
3211 <<
"\tshared energy: " << tstSharedEnergy[iSTS][tstId]
3212 <<
"\tshared energy fraction: " << tstSharedEnergyFrac <<
"\n";
3217 tstSharedEnergyFrac);
3220 sts_considered_efficient =
true;
3227 if (score3d_iSTS[tstId] < ScoreCutSTStoTSPurDup) {
3228 if (tracksters_PurityDuplicate[tstId] < 1)
3229 tracksters_PurityDuplicate[tstId]++;
3230 if (sts_considered_pure)
3231 tracksters_PurityDuplicate[tstId]++;
3232 sts_considered_pure =
true;
3236 const auto best = std::min_element(
std::begin(score3d_iSTS),
std::end(score3d_iSTS));
3237 if (best != score3d_iSTS.end()) {
3239 const auto bestTstSharedEnergyFrac = tstSharedEnergy[iSTS][bestTstId] / energyDenom;
3243 bestTstSharedEnergyFrac);
3245 bestTstSharedEnergyFrac);
3247 LogDebug(
"HGCalValidator") << count <<
" " << sts_eta <<
" " << sts_phi <<
" "
3248 << tracksters[bestTstId].raw_energy() <<
" " << sts.raw_energy() <<
" "
3249 << bestTstSharedEnergyFrac <<
"\n";
3251 if (score3d_iSTS.size() > 1) {
3252 auto best2 = (best == score3d_iSTS.begin()) ?
std::next(best, 1) : score3d_iSTS.begin();
3253 for (
auto tstId = score3d_iSTS.begin(); tstId != score3d_iSTS.end() && tstId != best; tstId++)
3254 if (*tstId < *best2)
3257 const auto best2TstSharedEnergyFrac = tstSharedEnergy[iSTS][best2TstId] / energyDenom;
3261 best2TstSharedEnergyFrac);
3269 for (
unsigned int tstId = 0; tstId < nTracksters; ++tstId) {
3270 const auto& tst = tracksters[tstId];
3271 if (tst.vertices().empty())
3273 const auto iTS_eta = tst.barycenter().eta();
3274 const auto iTS_phi = tst.barycenter().phi();
3275 const auto iTS_en = tst.raw_energy();
3276 const auto iTS_pt = tst.raw_pt();
3282 if (tracksters_PurityDuplicate[tstId] > 0) {
3288 if (tracksters_PurityDuplicate[tstId] > 1) {
3296 if (tracksters_FakeMerge[tstId] > 0) {
3302 if (tracksters_FakeMerge[tstId] > 1) {
3319 const std::map<
unsigned int, std::vector<unsigned int>>& cpToSc_SimTrackstersMap,
3320 std::vector<SimCluster>
const& sC,
3322 std::vector<CaloParticle>
const& cP,
3323 std::vector<size_t>
const& cPIndices,
3324 std::vector<size_t>
const& cPSelectedIndices,
3325 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap,
3326 unsigned int layers)
const {
3334 int totNContTstZp = 0;
3335 int totNContTstZm = 0;
3337 int totNNotContTstZp = 0;
3338 int totNNotContTstZm = 0;
3340 std::vector<bool> contTracksters;
3341 contTracksters.clear();
3344 std::unordered_map<unsigned int, std::vector<unsigned int>> multiplicity;
3346 std::unordered_map<unsigned int, std::vector<unsigned int>> multiplicity_vs_layer;
3353 const auto nTracksters = tracksters.size();
3355 for (
unsigned int tstId = 0; tstId < nTracksters; ++tstId) {
3356 const auto& tst = tracksters[tstId];
3357 if (tst.vertices().empty())
3360 if (tst.barycenter().z() < 0.)
3362 else if (tst.barycenter().z() > 0.)
3370 std::vector<int> tnLcInTstperlay(1000, 0);
3374 std::set<unsigned int> trackster_layers;
3376 bool tracksterInZplus =
false;
3377 bool tracksterInZminus =
false;
3380 for (
const auto lcId : tst.vertices()) {
3382 const auto& hits_and_fractions = layerClusters[lcId].hitsAndFractions();
3385 multiplicity[tstId].emplace_back(hits_and_fractions.size());
3387 const auto firstHitDetId = hits_and_fractions[0].first;
3389 const auto layerid =
recHitTools_->getLayerWithOffset(firstHitDetId) +
3390 layers * ((
recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1;
3391 trackster_layers.insert(layerid);
3392 multiplicity_vs_layer[tstId].emplace_back(layerid);
3394 tnLcInTstperlay[layerid]++;
3398 tracksterInZplus =
true;
3400 tracksterInZminus =
true;
3404 for (
unsigned ilayer = 0; ilayer < layers * 2; ++ilayer) {
3409 if (tnLcInTstperlay[ilayer] != 0) {
3415 std::vector<int> trackster_layers_vec(trackster_layers.begin(), trackster_layers.end());
3417 bool contiTrackster =
false;
3419 if (trackster_layers_vec.size() >= 3) {
3420 for (
unsigned int iLayer = 1; iLayer < trackster_layers_vec.size() - 1; ++iLayer) {
3421 if ((trackster_layers_vec[iLayer - 1] + 1 == trackster_layers_vec[iLayer]) &&
3422 (trackster_layers_vec[iLayer + 1] - 1 == trackster_layers_vec[iLayer])) {
3424 if (tracksterInZplus)
3426 else if (tracksterInZminus)
3429 contiTrackster =
true;
3435 if (!contiTrackster) {
3436 if (tracksterInZplus)
3438 else if (tracksterInZminus)
3443 contTracksters.push_back(contiTrackster);
3447 for (
unsigned int lc = 0; lc < multiplicity[tstId].size(); ++lc) {
3458 if (multiplicity_vs_layer[tstId][lc] < layers) {
3463 mlp, multiplicity_vs_layer[tstId][lc] - layers);
3468 layerClusters[tst.vertices(lc)].energy());
3471 if (!trackster_layers.empty()) {
3500 cpToSc_SimTrackstersMap,
3517 cpToSc_SimTrackstersMap,
3530 const double y2)
const {
3531 const double dx = x1 - x2;
3532 const double dy = y1 - y2;
3533 return (dx * dx + dy * dy);
3538 const double y2)
const {
3547 std::unordered_map<DetId, const HGCRecHit*>
const& hitMap)
const {
3552 for (
std::vector<std::pair<DetId, float>>::const_iterator it_haf = hits_and_fractions.begin();
3553 it_haf != hits_and_fractions.end();
3555 const DetId rh_detid = it_haf->first;
3556 const auto hitEn = hitMap.find(rh_detid)->second->energy();
3558 if (maxene < hitEn) {
3560 themaxid = rh_detid;
constexpr float energy() const
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_numDup_simcluster_eta_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_numMerge_layercl_in_simcl_eta_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_sharedenergy_layercl2simcluster_vs_eta_perlayer
std::vector< dqm::reco::MonitorElement * > h_longdepthbarycentre_zplus
std::vector< dqm::reco::MonitorElement * > h_num_trackster_pt[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_firstlayer
std::vector< dqm::reco::MonitorElement * > h_score_trackster2bestCaloparticle2[2]
std::vector< dqm::reco::MonitorElement * > h_energyclustered_zminus
dqm::reco::MonitorElement * lastLayerEEzm
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_numDup_simcluster_phi_perlayer
std::vector< dqm::reco::MonitorElement * > h_num_trackster_en[2]
std::vector< dqm::reco::MonitorElement * > h_multiplicityOfLCinTST_vs_layerclusterenergy
std::unordered_map< int, dqm::reco::MonitorElement * > h_clusternum_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_sharedenergy_simcluster2layercl_vs_eta_perlayer
const edm::EventSetup & c
std::vector< dqm::reco::MonitorElement * > h_numEff_caloparticle_phi[2]
std::vector< dqm::reco::MonitorElement * > h_tracksternum
std::vector< dqm::reco::MonitorElement * > h_numMerge_trackster_pt[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_denom_caloparticle_eta_perlayer
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
double minTSTSharedEneFracEfficiency_
std::vector< dqm::reco::MonitorElement * > h_trackster_x
std::vector< dqm::reco::MonitorElement * > h_trackster_eta
std::vector< dqm::reco::MonitorElement * > h_numDup_trackster_en[2]
std::vector< dqm::reco::MonitorElement * > h_trackster_phi
const double ScoreCutSCtoLC_
double maxMixedHitsSimCluster_
double minDisToSeedperthickperlayerenewei_
const_iterator end() const
last iterator over the map (read only)
std::vector< dqm::reco::MonitorElement * > h_denom_caloparticle_phi[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_energy_vs_score_layercl2caloparticle_perlayer
std::vector< dqm::reco::MonitorElement * > h_scorePur_caloparticle2trackster[2]
double maxTotNsimClsperlay_
std::unordered_map< int, dqm::reco::MonitorElement * > h_simclusternum_perlayer
void bookTracksterHistos(DQMStore::IBooker &ibook, Histograms &histograms, unsigned int layers)
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_distancetomaxcell_perthickperlayer_eneweighted
int nintCellsEneDensperthick_
std::vector< dqm::reco::MonitorElement * > h_denom_trackster_en[2]
int nintClEneperthickperlayer_
std::vector< dqm::reco::MonitorElement * > h_multiplicity_zplus_numberOfEventsHistogram
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_energy
dqm::reco::MonitorElement * maxlayerzp
void setRecHitTools(std::shared_ptr< hgcal::RecHitTools > recHitTools)
std::vector< dqm::reco::MonitorElement * > h_multiplicity_numberOfEventsHistogram
std::vector< dqm::reco::MonitorElement * > h_clusternum_in_trackster
std::unordered_map< int, dqm::reco::MonitorElement * > h_denom_layercl_eta_perlayer
const_iterator find(const key_type &k) const
find element with specified reference key
std::vector< dqm::reco::MonitorElement * > h_mixedhitscluster_zplus
constexpr uint32_t rawId() const
get the raw id
std::unordered_map< int, dqm::reco::MonitorElement * > h_num_caloparticle_eta_perlayer
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_trackster2bestCaloparticle[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_sharedenergy_layercl2caloparticle_perlayer
std::vector< dqm::reco::MonitorElement * > h_denom_caloparticle_en[2]
std::vector< dqm::reco::MonitorElement * > h_multiplicity_zminus_numberOfEventsHistogram
double maxTotNClsinTSTsperlayer_
const double ScoreCutLCtoSC_
std::string to_string(const V &value)
std::unordered_map< int, dqm::reco::MonitorElement * > h_sharedenergy_layercl2caloparticle_vs_eta_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_energy_vs_score_caloparticle2layercl_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_denom_layercl_in_simcl_eta_perlayer
int nintDisToMaxperthickperlayerenewei_
std::vector< dqm::reco::MonitorElement * > h_multiplicityOfLCinTST
dqm::reco::MonitorElement * h_mixedhitssimcluster_zminus
void bookClusterHistos_LCtoCP_association(DQMStore::IBooker &ibook, Histograms &histograms, unsigned int layers)
std::vector< dqm::reco::MonitorElement * > h_energy_vs_score_trackster2bestCaloparticle2[2]
void layerClusters_to_SimClusters(const Histograms &histograms, const int count, edm::Handle< reco::CaloClusterCollection > clusterHandle, const reco::CaloClusterCollection &clusters, edm::Handle< std::vector< SimCluster >> simClusterHandle, std::vector< SimCluster > const &simClusters, std::vector< size_t > const &sCIndices, const std::vector< float > &mask, std::unordered_map< DetId, const HGCRecHit * > const &, unsigned int layers, const hgcal::RecoToSimCollectionWithSimClusters &recSimColl, const hgcal::SimToRecoCollectionWithSimClusters &simRecColl) const
void fill_cluster_histos(const Histograms &histograms, const int count, const reco::CaloCluster &cluster) const
std::unordered_map< int, dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2layercl_vs_phi_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_simclusternum_perthick
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_pt
const std::vector< SimTrack > & g4Tracks() const
float eta() const
Momentum pseudorapidity. Note this is taken from the simtrack before the calorimeter.
std::unordered_map< int, dqm::reco::MonitorElement * > h_numDup_caloparticle_eta_perlayer
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
std::unordered_map< int, dqm::reco::MonitorElement * > h_cellsenedens_perthick
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_nHits_matched_energy_layer_1SimCl
std::unordered_map< int, dqm::reco::MonitorElement * > h_sharedenergy_layercl2caloparticle_vs_phi_perlayer
dqm::reco::MonitorElement * h_mixedhitssimcluster_zplus
std::vector< dqm::reco::MonitorElement * > h_denom_caloparticle_pt[2]
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_score_simcluster2layercl_perlayer
int nintDisToMaxperthickperlayer_
std::vector< dqm::reco::MonitorElement * > h_cluster_eta
void bookInfo(DQMStore::IBooker &ibook, Histograms &histograms)
std::vector< dqm::reco::MonitorElement * > h_num_trackster_eta[2]
double eta() const
pseudorapidity of cluster centroid
std::vector< dqm::reco::MonitorElement * > h_energyclustered_zplus
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_denom_simcluster_eta_perlayer
std::vector< dqm::reco::MonitorElement * > h_score_caloparticle2trackster[2]
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_cellsnum_perthickperlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_nHits_matched_energy_layer
void fill_info_histos(const Histograms &histograms, unsigned int layers) const
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_fractions_weight
double distance(const double x1, const double y1, const double x2, const double y2) const
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_sharedenergy_layercl2simcluster_vs_phi_perlayer
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_distancebetseedandmaxcell_perthickperlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_lastlayer_matchedtoRecHit
std::vector< dqm::reco::MonitorElement * > h_nonconttracksternum
void bookSimClusterAssociationHistos(DQMStore::IBooker &ibook, Histograms &histograms, unsigned int layers, std::vector< int > thicknesses)
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
std::vector< dqm::reco::MonitorElement * > h_num_caloparticle_en[2]
std::vector< dqm::reco::MonitorElement * > h_denom_caloparticle_eta[2]
std::vector< dqm::reco::MonitorElement * > h_longdepthbarycentre_zminus
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_distancebetseedandmaxcellvsclusterenergy_perthickperlayer
void bookSimClusterHistos(DQMStore::IBooker &ibook, Histograms &histograms, unsigned int layers, std::vector< int > thicknesses)
std::unordered_map< int, dqm::reco::MonitorElement * > h_energyclustered_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_layersnum
std::vector< dqm::reco::MonitorElement * > h_mixedhitscluster_zminus
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_energy_vs_score_simcluster2layercl_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_energy_vs_score_layercl2simcluster_perlayer
const SimClusterRefVector & simClusters() const
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
std::unordered_map< int, dqm::reco::MonitorElement * > h_clusternum_perthick
std::unordered_map< int, dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2layercl_perlayer
double minClEnepermultiplicity_
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_num_layercl_in_simcl_phi_perlayer
double maxMixedHitsCluster_
double minTotNsimClsperlay_
if(conf_.getParameter< bool >("UseStripCablingDB"))
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_phi
float energy() const
Energy. Note this is taken from the first SimTrack only.
std::vector< dqm::reco::MonitorElement * > h_numEff_caloparticle_eta[2]
std::vector< dqm::reco::MonitorElement * > h_clusternum_in_trackster_vs_layer
double minDisSeedToMaxperthickperlayer_
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_num_layercl_in_simcl_eta_perlayer
int nintDisToSeedperthickperlayerenewei_
virtual void Fill(const reco::Particle::LorentzVector &p1, const reco::Particle::LorentzVector &p2)
dqm::reco::MonitorElement * maxlayerzm
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_denom_layercl_in_simcl_phi_perlayer
double minTSTSharedEneFrac_
std::vector< CaloCluster > CaloClusterCollection
collection of CaloCluster objects
double minDisToMaxperthickperlayer_
void bookCaloParticleHistos(DQMStore::IBooker &ibook, Histograms &histograms, int pdgid, unsigned int layers)
void tracksters_to_SimTracksters(const Histograms &histograms, const int count, const ticl::TracksterCollection &Tracksters, const reco::CaloClusterCollection &layerClusters, const ticl::TracksterCollection &simTS, const validationType valType, const ticl::TracksterCollection &simTS_fromCP, std::map< uint, std::vector< uint >> const &simTrackstersMap, std::vector< SimCluster > const &sC, const edm::ProductID &cPHandle_id, std::vector< CaloParticle > const &cP, std::vector< size_t > const &cPIndices, std::vector< size_t > const &cPSelectedIndices, std::unordered_map< DetId, const HGCRecHit * > const &, unsigned int layers) const
std::vector< dqm::reco::MonitorElement * > h_denom_trackster_phi[2]
void fill_caloparticle_histos(const Histograms &histograms, int pdgid, const CaloParticle &caloparticle, std::vector< SimVertex > const &simVertices, unsigned int layers, std::unordered_map< DetId, const HGCRecHit * > const &) const
std::vector< dqm::reco::MonitorElement * > h_numDup_trackster_eta[2]
double getEta(double eta) const
void fill_generic_cluster_histos(const Histograms &histograms, const int count, edm::Handle< reco::CaloClusterCollection > clusterHandle, const reco::CaloClusterCollection &clusters, const Density &densities, edm::Handle< std::vector< CaloParticle >> caloParticleHandle, std::vector< CaloParticle > const &cP, std::vector< size_t > const &cPIndices, std::vector< size_t > const &cPSelectedIndices, std::unordered_map< DetId, const HGCRecHit * > const &, std::map< double, double > cummatbudg, unsigned int layers, std::vector< int > thicknesses, const hgcal::RecoToSimCollection &recSimColl, const hgcal::SimToRecoCollection &simRecColl) const
int nintTotNClsinTSTsperlayer_
void bookTracksterSTSHistos(DQMStore::IBooker &ibook, Histograms &histograms, const validationType valType)
const double ScoreCutTStoSTSFakeMerge_[]
dqm::reco::MonitorElement * lastLayerEEzp
double maxDisToMaxperthickperlayer_
std::vector< dqm::reco::MonitorElement * > h_trackster_lastlayer
const double ScoreCutLCtoCP_
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_distancetomaxcell_perthickperlayer
double maxDisToSeedperthickperlayer_
std::unordered_map< int, dqm::reco::MonitorElement * > h_num_layercl_eta_perlayer
std::vector< dqm::reco::MonitorElement * > h_multiplicityOfLCinTST_vs_layercluster_zplus
std::vector< dqm::reco::MonitorElement * > h_denom_trackster_pt[2]
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2trackster_assoc[2]
double distance2(const double x1, const double y1, const double x2, const double y2) const
std::vector< dqm::reco::MonitorElement * > h_numMerge_trackster_phi[2]
std::vector< dqm::reco::MonitorElement * > h_multiplicityOfLCinTST_vs_layercluster_zminus
std::vector< dqm::reco::MonitorElement * > h_numMerge_trackster_en[2]
std::vector< dqm::reco::MonitorElement * > h_score_trackster2caloparticle[2]
std::vector< dqm::reco::MonitorElement * > h_numDup_trackster_pt[2]
std::vector< dqm::reco::MonitorElement * > h_trackster_z
double maxTotNcellsperthickperlayer_
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_energyDifference
double maxDisSeedToMaxperthickperlayer_
double minDisToSeedperthickperlayer_
std::unordered_map< int, dqm::reco::MonitorElement * > h_numDup_caloparticle_phi_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_denom_simcluster_phi_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_num_layercl_phi_perlayer
void layerClusters_to_CaloParticles(const Histograms &histograms, edm::Handle< reco::CaloClusterCollection > clusterHandle, const reco::CaloClusterCollection &clusters, edm::Handle< std::vector< CaloParticle >> caloParticleHandle, std::vector< CaloParticle > const &cP, std::vector< size_t > const &cPIndices, std::vector< size_t > const &cPSelectedIndices, std::unordered_map< DetId, const HGCRecHit * > const &, unsigned int layers, const hgcal::RecoToSimCollection &recSimColl, const hgcal::SimToRecoCollection &simRecColl) const
std::vector< dqm::reco::MonitorElement * > h_energy_vs_score_caloparticle2bestTrackster[2]
double minTotNClsinTSTsperlayer_
std::vector< dqm::reco::MonitorElement * > h_num_caloparticle_phi[2]
void fill_trackster_histos(const Histograms &histograms, const int count, const ticl::TracksterCollection &Tracksters, const reco::CaloClusterCollection &layerClusters, const ticl::TracksterCollection &simTS, const ticl::TracksterCollection &simTS_fromCP, std::map< uint, std::vector< uint >> const &simTrackstersMap, std::vector< SimCluster > const &sC, const edm::ProductID &cPHandle_id, std::vector< CaloParticle > const &cP, std::vector< size_t > const &cPIndices, std::vector< size_t > const &cPSelectedIndices, std::unordered_map< DetId, const HGCRecHit * > const &, unsigned int layers) const
double maxDisToSeedperthickperlayerenewei_
std::shared_ptr< hgcal::RecHitTools > recHitTools_
std::vector< dqm::reco::MonitorElement * > h_denom_trackster_eta[2]
std::vector< dqm::reco::MonitorElement * > h_energy_vs_score_caloparticle2trackster[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_num_caloparticle_phi_perlayer
double maxTotNsimClsperthick_
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2trackster_assoc_vs_phi[2]
double minTotNClsperthick_
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_nHitsInSimClusters_matchedtoRecHit
double minTotNsimClsperthick_
MonitorElement * bookInt(TString const &name, FUNC onbooking=NOOP())
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_eta_Zorigin
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_trackster2bestCaloparticle2[2]
std::vector< dqm::reco::MonitorElement * > h_num_trackster_phi[2]
std::vector< dqm::reco::MonitorElement * > h_conttracksternum
const double ScoreCutSTStoTSPurDup_[]
void bookClusterHistos_ClusterLevel(DQMStore::IBooker &ibook, Histograms &histograms, unsigned int layers, std::vector< int > thicknesses, std::string pathtomatbudfile)
float pt() const
Transverse momentum. Note this is taken from the first SimTrack only.
dqm::reco::MonitorElement * lastLayerFHzm
int nintTotNsimClsperlay_
dqm::reco::MonitorElement * lastLayerFHzp
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_firstlayer_matchedtoRecHit
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2trackster_assoc_vs_eta[2]
int nintMixedHitsSimCluster_
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_distancetoseedcell_perthickperlayer_eneweighted
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_selfenergy
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2trackster_assoc2[2]
float phi() const
Momentum azimuthal angle. Note this is taken from the first SimTrack only.
std::vector< dqm::reco::MonitorElement * > h_trackster_energy
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_numMerge_layercl_in_simcl_phi_perlayer
std::vector< dqm::reco::MonitorElement * > h_energy_vs_score_trackster2bestCaloparticle[2]
std::vector< dqm::reco::MonitorElement * > h_numDup_trackster_phi[2]
int nintDisSeedToMaxperthickperlayer_
std::unordered_map< int, dqm::reco::MonitorElement * > h_denom_caloparticle_phi_perlayer
std::vector< dqm::reco::MonitorElement * > h_numMerge_trackster_eta[2]
std::vector< dqm::reco::MonitorElement * > h_numEff_caloparticle_en[2]
double minTotNcellsperthickperlayer_
std::unordered_map< int, dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2layercl_vs_eta_perlayer
double minClEneperthickperlayer_
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_sharedenergy_simcluster2layercl_vs_phi_perlayer
std::vector< dqm::reco::MonitorElement * > h_num_caloparticle_eta[2]
std::vector< dqm::reco::MonitorElement * > h_trackster_firstlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_nSimClusters
static int position[264][3]
double minMixedHitsSimCluster_
std::vector< dqm::reco::MonitorElement * > h_trackster_layersnum
double minDisToMaxperthickperlayerenewei_
std::vector< dqm::reco::MonitorElement * > h_energy_vs_score_trackster2caloparticle[2]
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_trackster2bestCaloparticle_vs_eta[2]
int nintClEnepermultiplicity_
int nintTotNsimClsperthick_
std::vector< Trackster > TracksterCollection
std::vector< dqm::reco::MonitorElement * > h_numEff_caloparticle_pt[2]
size_type size() const
Size of the RefVector.
double maxTotNClsperthick_
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_lastlayer
double maxClEnepermultiplicity_
std::unordered_map< int, dqm::reco::MonitorElement * > h_cellAssociation_perlayer
std::vector< dqm::reco::MonitorElement * > h_energy_vs_score_caloparticle2bestTrackster2[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_nHitsInSimClusters
std::unordered_map< std::string, dqm::reco::MonitorElement * > h_distancetoseedcell_perthickperlayer
std::vector< dqm::reco::MonitorElement * > h_score_trackster2bestCaloparticle[2]
void bookClusterHistos_CellLevel(DQMStore::IBooker &ibook, Histograms &histograms, unsigned int layers, std::vector< int > thicknesses)
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_layersnum_matchedtoRecHit
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
std::vector< dqm::reco::MonitorElement * > h_trackster_y
std::unordered_map< int, dqm::reco::MonitorElement * > h_denom_layercl_phi_perlayer
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_caloparticle2trackster[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_eta
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_trackster2caloparticle[2]
double maxCellsEneDensperthick_
double maxDisToMaxperthickperlayerenewei_
hgcal_clustering::Density Density
const double ScoreCutCPtoLC_
int nintMixedHitsCluster_
double minMixedHitsCluster_
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_sum_energy_layer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_clusternum_in_trackster_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_nHits_matched_energy
double maxClEneperthickperlayer_
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_sharedenergy_simcluster2layercl_perlayer
DetId findmaxhit(const reco::CaloCluster &cluster, std::unordered_map< DetId, const HGCRecHit * > const &) const
int nintDisToSeedperthickperlayer_
std::unordered_map< int, dqm::reco::MonitorElement * > h_score_layercl2caloparticle_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_sharedenergy_layercl2simcluster_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_score_caloparticle2layercl_perlayer
int nintTotNcellsperthickperlayer_
std::vector< dqm::reco::MonitorElement * > h_num_caloparticle_pt[2]
Power< A, B >::type pow(const A &a, const B &b)
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_score_layercl2simcluster_perlayer
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_num_simcluster_eta_perlayer
HGVHistoProducerAlgo(const edm::ParameterSet &pset)
std::vector< std::unordered_map< int, dqm::reco::MonitorElement * > > h_num_simcluster_phi_perlayer
std::unordered_map< int, dqm::reco::MonitorElement * > h_numMerge_layercl_eta_perlayer
double maxTSTSharedEneFrac_
std::unordered_map< int, dqm::reco::MonitorElement * > h_caloparticle_fractions
std::vector< dqm::reco::MonitorElement * > h_scoreDupl_caloparticle2trackster[2]
std::unordered_map< int, dqm::reco::MonitorElement * > h_numMerge_layercl_phi_perlayer
constexpr Detector det() const
get the detector field from this detid
std::vector< dqm::reco::MonitorElement * > h_trackster_pt
std::vector< dqm::reco::MonitorElement * > h_sharedenergy_trackster2bestCaloparticle_vs_phi[2]
double minCellsEneDensperthick_