File indexing completed on 2025-07-09 05:00:38
0001 #ifndef Validation_HGCalValidation_BarrelVHistoProducerAlgo_h
0002 #define Validation_HGCalValidation_BarrelVHistoProducerAlgo_h
0003
0004
0005
0006
0007 #include <iostream>
0008 #include <fstream>
0009 #include <vector>
0010 #include <unordered_map>
0011
0012 #include "FWCore/Framework/interface/ConsumesCollector.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015
0016 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
0017 #include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h"
0018 #include "DataFormats/ForwardDetId/interface/HFNoseDetId.h"
0019 #include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h"
0020 #include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h"
0021 #include "DataFormats/HGCRecHit/interface/HGCRecHit.h"
0022 #include "DataFormats/HGCalReco/interface/Trackster.h"
0023 #include "DataFormats/ParticleFlowReco/interface/PFRecHit.h"
0024
0025 #include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h"
0026 #include "CommonTools/RecoAlgos/interface/MultiVectorManager.h"
0027
0028 #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
0029 #include "SimDataFormats/Vertex/interface/SimVertex.h"
0030 #include "RecoLocalCalo/HGCalRecProducers/interface/HGCalClusteringAlgoBase.h"
0031 #include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociatorBaseImpl.h"
0032 #include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h"
0033 #include "DQMServices/Core/interface/DQMStore.h"
0034
0035 #include "SimDataFormats/Associations/interface/TICLAssociationMap.h"
0036
0037 struct BarrelVHistoProducerAlgoHistograms {
0038 dqm::reco::MonitorElement* lastLayerEB;
0039 dqm::reco::MonitorElement* lastLayerHB;
0040
0041 std::vector<dqm::reco::MonitorElement*> h_cluster_eta;
0042 std::vector<dqm::reco::MonitorElement*> h_energyclustered;
0043
0044 std::unordered_map<int, dqm::reco::MonitorElement*> h_clusternum_perlayer;
0045 std::unordered_map<int, dqm::reco::MonitorElement*> h_energyclustered_perlayer;
0046 std::unordered_map<int, dqm::reco::MonitorElement*> h_score_layercl2caloparticle_perlayer;
0047 std::unordered_map<int, dqm::reco::MonitorElement*> h_score_caloparticle2layercl_perlayer;
0048 std::unordered_map<int, dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2layercl_perlayer;
0049 std::unordered_map<int, dqm::reco::MonitorElement*> h_energy_vs_score_layercl2caloparticle_perlayer;
0050 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2layercl_perlayer;
0051 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2layercl_vs_eta_perlayer;
0052 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2layercl_vs_phi_perlayer;
0053 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_layercl2caloparticle_perlayer;
0054 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_layercl2caloparticle_vs_eta_perlayer;
0055 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_layercl2caloparticle_vs_phi_perlayer;
0056 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_caloparticle_eta_perlayer;
0057 std::unordered_map<int, dqm::reco::MonitorElement*> h_numDup_caloparticle_eta_perlayer;
0058 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_caloparticle_eta_perlayer;
0059 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_caloparticle_phi_perlayer;
0060 std::unordered_map<int, dqm::reco::MonitorElement*> h_numDup_caloparticle_phi_perlayer;
0061 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_caloparticle_phi_perlayer;
0062 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_layercl_eta_perlayer;
0063 std::unordered_map<int, dqm::reco::MonitorElement*> h_numMerge_layercl_eta_perlayer;
0064 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_layercl_eta_perlayer;
0065 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_layercl_phi_perlayer;
0066 std::unordered_map<int, dqm::reco::MonitorElement*> h_numMerge_layercl_phi_perlayer;
0067 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_layercl_phi_perlayer;
0068 std::unordered_map<int, dqm::reco::MonitorElement*> h_cellAssociation_perlayer;
0069
0070 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_eta;
0071 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_eta_Zorigin;
0072 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_energy;
0073 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_selfenergy;
0074 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_energyDifference;
0075 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_pt;
0076 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_phi;
0077 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nSimClusters;
0078 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHitsInSimClusters;
0079 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_firstlayer;
0080 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_lastlayer;
0081 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_layersnum;
0082 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHitsInSimClusters_matchedtoRecHit;
0083 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHits_matched_energy;
0084 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHits_matched_energy_layer;
0085 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHits_matched_energy_layer_1SimCl;
0086 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_sum_energy_layer;
0087 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_firstlayer_matchedtoRecHit;
0088 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_lastlayer_matchedtoRecHit;
0089 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_layersnum_matchedtoRecHit;
0090 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_fractions, h_caloparticle_fractions_weight;
0091
0092
0093 std::unordered_map<int, dqm::reco::MonitorElement*> h_simclusternum_perlayer;
0094
0095 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_layercl_in_simcl_eta_perlayer;
0096 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_layercl_in_simcl_phi_perlayer;
0097 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_score_layercl2simcluster_perlayer;
0098 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_layercl2simcluster_perlayer;
0099 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_energy_vs_score_layercl2simcluster_perlayer;
0100 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_layercl_in_simcl_eta_perlayer;
0101 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_layercl_in_simcl_phi_perlayer;
0102 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numMerge_layercl_in_simcl_eta_perlayer;
0103 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numMerge_layercl_in_simcl_phi_perlayer;
0104 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_layercl2simcluster_vs_eta_perlayer;
0105 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_layercl2simcluster_vs_phi_perlayer;
0106 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_simcluster_eta_perlayer;
0107 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_simcluster_phi_perlayer;
0108 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_score_simcluster2layercl_perlayer;
0109 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_simcluster2layercl_perlayer;
0110 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_energy_vs_score_simcluster2layercl_perlayer;
0111 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_simcluster_eta_perlayer;
0112 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_simcluster_phi_perlayer;
0113 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numDup_simcluster_eta_perlayer;
0114 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numDup_simcluster_phi_perlayer;
0115 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_simcluster2layercl_vs_eta_perlayer;
0116 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_simcluster2layercl_vs_phi_perlayer;
0117
0118
0119 constexpr static int numberOfValidationTypes_ = 4;
0120
0121 std::vector<dqm::reco::MonitorElement*> h_score_trackster2caloparticle[numberOfValidationTypes_];
0122 std::vector<dqm::reco::MonitorElement*> h_score_trackster2bestCaloparticle[numberOfValidationTypes_];
0123 std::vector<dqm::reco::MonitorElement*> h_score_trackster2bestCaloparticle2[numberOfValidationTypes_];
0124 std::vector<dqm::reco::MonitorElement*> h_score_caloparticle2trackster[numberOfValidationTypes_];
0125 std::vector<dqm::reco::MonitorElement*> h_scorePur_caloparticle2trackster[numberOfValidationTypes_];
0126 std::vector<dqm::reco::MonitorElement*> h_scoreDupl_caloparticle2trackster[numberOfValidationTypes_];
0127 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_trackster2caloparticle[numberOfValidationTypes_];
0128 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_trackster2bestCaloparticle[numberOfValidationTypes_];
0129 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_trackster2bestCaloparticle2[numberOfValidationTypes_];
0130 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2trackster[numberOfValidationTypes_];
0131 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2bestTrackster[numberOfValidationTypes_];
0132 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2bestTrackster2[numberOfValidationTypes_];
0133 std::vector<dqm::reco::MonitorElement*> h_num_trackster_eta[numberOfValidationTypes_];
0134 std::vector<dqm::reco::MonitorElement*> h_num_trackster_phi[numberOfValidationTypes_];
0135 std::vector<dqm::reco::MonitorElement*> h_num_trackster_en[numberOfValidationTypes_];
0136 std::vector<dqm::reco::MonitorElement*> h_num_trackster_pt[numberOfValidationTypes_];
0137 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_eta[numberOfValidationTypes_];
0138 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_phi[numberOfValidationTypes_];
0139 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_en[numberOfValidationTypes_];
0140 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_pt[numberOfValidationTypes_];
0141 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2caloparticle[numberOfValidationTypes_];
0142 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle[numberOfValidationTypes_];
0143 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle2[numberOfValidationTypes_];
0144 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster[numberOfValidationTypes_];
0145 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc[numberOfValidationTypes_];
0146 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc2[numberOfValidationTypes_];
0147 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle_vs_eta[numberOfValidationTypes_];
0148 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle_vs_phi[numberOfValidationTypes_];
0149 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc_vs_eta[numberOfValidationTypes_];
0150 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc_vs_phi[numberOfValidationTypes_];
0151 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_eta[numberOfValidationTypes_];
0152 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_phi[numberOfValidationTypes_];
0153 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_en[numberOfValidationTypes_];
0154 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_pt[numberOfValidationTypes_];
0155 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_eta[numberOfValidationTypes_];
0156 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_phi[numberOfValidationTypes_];
0157 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_en[numberOfValidationTypes_];
0158 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_pt[numberOfValidationTypes_];
0159 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_eta[numberOfValidationTypes_];
0160 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_phi[numberOfValidationTypes_];
0161 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_en[numberOfValidationTypes_];
0162 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_pt[numberOfValidationTypes_];
0163 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_eta[numberOfValidationTypes_];
0164 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_phi[numberOfValidationTypes_];
0165 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_en[numberOfValidationTypes_];
0166 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_pt[numberOfValidationTypes_];
0167 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_eta[numberOfValidationTypes_];
0168 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_phi[numberOfValidationTypes_];
0169 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_en[numberOfValidationTypes_];
0170 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_pt[numberOfValidationTypes_];
0171
0172 std::vector<dqm::reco::MonitorElement*> h_tracksternum;
0173 std::vector<dqm::reco::MonitorElement*> h_conttracksternum;
0174 std::vector<dqm::reco::MonitorElement*> h_nonconttracksternum;
0175 std::vector<dqm::reco::MonitorElement*> h_clusternum_in_trackster;
0176 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_clusternum_in_trackster_perlayer;
0177 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST;
0178 std::vector<dqm::reco::MonitorElement*> h_multiplicity_numberOfEventsHistogram;
0179 std::vector<dqm::reco::MonitorElement*> h_multiplicity_zminus_numberOfEventsHistogram;
0180 std::vector<dqm::reco::MonitorElement*> h_multiplicity_zplus_numberOfEventsHistogram;
0181 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST_vs_layercluster;
0182 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST_vs_layerclusterenergy;
0183 std::vector<dqm::reco::MonitorElement*> h_clusternum_in_trackster_vs_layer;
0184 std::vector<dqm::reco::MonitorElement*> h_trackster_pt;
0185 std::vector<dqm::reco::MonitorElement*> h_trackster_eta;
0186 std::vector<dqm::reco::MonitorElement*> h_trackster_phi;
0187 std::vector<dqm::reco::MonitorElement*> h_trackster_energy;
0188 std::vector<dqm::reco::MonitorElement*> h_trackster_x;
0189 std::vector<dqm::reco::MonitorElement*> h_trackster_y;
0190 std::vector<dqm::reco::MonitorElement*> h_trackster_z;
0191 std::vector<dqm::reco::MonitorElement*> h_trackster_firstlayer;
0192 std::vector<dqm::reco::MonitorElement*> h_trackster_lastlayer;
0193 std::vector<dqm::reco::MonitorElement*> h_trackster_layersnum;
0194 };
0195
0196 using Density = hgcal_clustering::Density;
0197
0198 class BarrelVHistoProducerAlgo {
0199 public:
0200 typedef dqm::legacy::DQMStore DQMStore;
0201 typedef dqm::legacy::MonitorElement MonitorElement;
0202 using TracksterToTracksterMap =
0203 ticl::AssociationMap<ticl::mapWithSharedEnergyAndScore, std::vector<ticl::Trackster>, std::vector<ticl::Trackster>>;
0204 using SimClusterToCaloParticleMap =
0205 ticl::AssociationMap<ticl::oneToOneMapWithFraction, std::vector<SimCluster>, std::vector<CaloParticle>>;
0206 enum validationType { byHits_CP = 0, byLCs, byLCs_CP, byHits };
0207
0208 BarrelVHistoProducerAlgo(const edm::ParameterSet& pset);
0209 ~BarrelVHistoProducerAlgo();
0210
0211 using Histograms = BarrelVHistoProducerAlgoHistograms;
0212
0213 void bookInfo(DQMStore::IBooker& ibook, Histograms& histograms);
0214 void bookCaloParticleHistos(DQMStore::IBooker& ibook, Histograms& histograms, int pdgid, unsigned int layers);
0215
0216 void bookSimClusterHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0217
0218 void bookSimClusterAssociationHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0219
0220 void bookClusterHistos_ClusterLevel(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0221
0222 void bookClusterHistos_LCtoCP_association(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0223
0224 void bookClusterHistos_CellLevel(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0225
0226 void bookTracksterHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0227
0228 void bookTracksterSTSHistos(DQMStore::IBooker& ibook, Histograms& histograms, const validationType valType);
0229
0230 void layerClusters_to_CaloParticles(const Histograms& histograms,
0231 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0232 const reco::CaloClusterCollection& clusters,
0233 edm::Handle<std::vector<CaloParticle>> caloParticleHandle,
0234 std::vector<CaloParticle> const& cP,
0235 std::vector<size_t> const& cPIndices,
0236 std::vector<size_t> const& cPSelectedIndices,
0237 std::unordered_map<DetId, const unsigned int> const&,
0238 unsigned int layers,
0239 const ticl::RecoToSimCollection& recSimColl,
0240 const ticl::SimToRecoCollection& simRecColl,
0241 MultiVectorManager<reco::PFRecHit> const& barrelHits) const;
0242 void layerClusters_to_SimClusters(const Histograms& histograms,
0243 const int count,
0244 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0245 const reco::CaloClusterCollection& clusters,
0246 edm::Handle<std::vector<SimCluster>> simClusterHandle,
0247 std::vector<SimCluster> const& simClusters,
0248 std::vector<size_t> const& sCIndices,
0249 const std::vector<float>& mask,
0250 std::unordered_map<DetId, const unsigned int> const&,
0251 unsigned int layers,
0252 const ticl::RecoToSimCollectionWithSimClusters& recSimColl,
0253 const ticl::SimToRecoCollectionWithSimClusters& simRecColl,
0254 MultiVectorManager<reco::PFRecHit> const& barrelHits) const;
0255
0256 void tracksters_to_SimTracksters_fp(const Histograms& histograms,
0257 const int count,
0258 const TracksterToTracksterMap& trackstersToSimTrackstersMap,
0259 const TracksterToTracksterMap& simTrackstersToTrackstersMap,
0260 const validationType valType,
0261 const SimClusterToCaloParticleMap& scToCpMap,
0262 const std::vector<size_t>& cPIndices,
0263 const std::vector<size_t>& cPSelectedIndices,
0264 const edm::ProductID& cPHandle_id) const;
0265
0266 void fill_info_histos(const Histograms& histograms, unsigned int layers) const;
0267 void fill_caloparticle_histos(const Histograms& histograms,
0268 int pdgid,
0269 const CaloParticle& caloparticle,
0270 std::vector<SimVertex> const& simVertices,
0271 unsigned int layers,
0272 std::unordered_map<DetId, const unsigned int> const&,
0273 MultiVectorManager<reco::PFRecHit> const& barrelHits) const;
0274 void fill_generic_cluster_histos(const Histograms& histograms,
0275 const int count,
0276 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0277 const reco::CaloClusterCollection& clusters,
0278 edm::Handle<std::vector<CaloParticle>> caloParticleHandle,
0279 std::vector<CaloParticle> const& cP,
0280 std::vector<size_t> const& cPIndices,
0281 std::vector<size_t> const& cPSelectedIndices,
0282 std::unordered_map<DetId, const unsigned int> const&,
0283 unsigned int layers,
0284 const ticl::RecoToSimCollection& recSimColl,
0285 const ticl::SimToRecoCollection& simRecColl,
0286 MultiVectorManager<reco::PFRecHit> const& barrelHits) const;
0287 void fill_simCluster_histos(const Histograms& histograms,
0288 std::vector<SimCluster> const& simClusters,
0289 unsigned int layers) const;
0290 void fill_simClusterAssociation_histos(const Histograms& histograms,
0291 const int count,
0292 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0293 const reco::CaloClusterCollection& clusters,
0294 edm::Handle<std::vector<SimCluster>> simClusterHandle,
0295 std::vector<SimCluster> const& simClusters,
0296 std::vector<size_t> const& sCIndices,
0297 const std::vector<float>& mask,
0298 std::unordered_map<DetId, const unsigned int> const& barrelHitMap,
0299 unsigned int layers,
0300 const ticl::RecoToSimCollectionWithSimClusters& recSimColl,
0301 const ticl::SimToRecoCollectionWithSimClusters& simRecColl,
0302 MultiVectorManager<reco::PFRecHit> const& barrelHits) const;
0303 void fill_cluster_histos(const Histograms& histograms, const int count, const reco::CaloCluster& cluster) const;
0304
0305 double distance2(const double x1, const double y1, const double x2, const double y2) const;
0306 double distance(const double x1, const double y1, const double x2, const double y2) const;
0307
0308 void setRecHitTools(std::shared_ptr<hgcal::RecHitTools> recHitTools);
0309
0310 DetId findmaxhit(const reco::CaloCluster& cluster,
0311 std::unordered_map<DetId, const unsigned int> const&,
0312 MultiVectorManager<reco::PFRecHit> const& hits) const;
0313
0314 struct detIdInfoInCluster {
0315 bool operator==(const detIdInfoInCluster& o) const { return clusterId == o.clusterId; };
0316 long unsigned int clusterId;
0317 float fraction;
0318 };
0319
0320 struct detIdInfoInTrackster {
0321 bool operator==(const detIdInfoInTrackster& o) const { return tracksterId == o.tracksterId; };
0322 unsigned int tracksterId;
0323 long unsigned int clusterId;
0324 float fraction;
0325 };
0326
0327 struct caloParticleOnLayer {
0328 unsigned int caloParticleId;
0329 float energy = 0;
0330 std::vector<std::pair<DetId, float>> hits_and_fractions;
0331 std::unordered_map<unsigned int, std::pair<float, float>> layerClusterIdToEnergyAndScore;
0332 };
0333
0334 private:
0335 double getEta(double eta) const;
0336
0337 std::shared_ptr<hgcal::RecHitTools> recHitTools_;
0338 constexpr static int numberOfValidationTypes_ = 4;
0339 std::array<std::string, numberOfValidationTypes_> ref_ = {
0340 {"SimTrackster_fromCP_byHits", "SimTrackster_byLCs", "SimTrackster_fromCP_byLCs", "SimTrackster_byHits"}};
0341 std::array<std::string, numberOfValidationTypes_> refText_ = {{"SimTrackster from CP Associated by Hits",
0342 "SimTrackster Associated by LCs",
0343 "SimTrackster from CP Associated by LCs",
0344 "SimTrackster Associated by Hits"}};
0345
0346 std::array<std::string, numberOfValidationTypes_> valSuffix_ = {{"_byHits_CP", "_byLCs", "_byLCs_CP", "_byHits"}};
0347
0348 int barrelLayersOffset_ = 5;
0349
0350
0351 double minEta_, maxEta_;
0352 int nintEta_;
0353 bool useFabsEta_;
0354 double minEne_, maxEne_;
0355 int nintEne_;
0356 double minPt_, maxPt_;
0357 int nintPt_;
0358 double minPhi_, maxPhi_;
0359 int nintPhi_;
0360 double minMixedHitsSimCluster_, maxMixedHitsSimCluster_;
0361 int nintMixedHitsSimCluster_;
0362 double minMixedHitsCluster_, maxMixedHitsCluster_;
0363 int nintMixedHitsCluster_;
0364 double minEneCl_, maxEneCl_;
0365 int nintEneCl_;
0366 double minLongDepBary_, maxLongDepBary_;
0367 int nintLongDepBary_;
0368 double minZpos_, maxZpos_;
0369 int nintZpos_;
0370 double minTotNsimClsperlay_, maxTotNsimClsperlay_;
0371 int nintTotNsimClsperlay_;
0372 double minTotNClsperlay_, maxTotNClsperlay_;
0373 int nintTotNClsperlay_;
0374 double minEneClperlay_, maxEneClperlay_;
0375 int nintEneClperlay_;
0376 double minScore_, maxScore_;
0377 int nintScore_;
0378 double minSharedEneFrac_, maxSharedEneFrac_;
0379 int nintSharedEneFrac_;
0380 double minTSTSharedEneFracEfficiency_;
0381 double minTSTSharedEneFrac_, maxTSTSharedEneFrac_;
0382 int nintTSTSharedEneFrac_;
0383 double minTotNTSTs_, maxTotNTSTs_;
0384 int nintTotNTSTs_;
0385 double minTotNClsinTSTs_, maxTotNClsinTSTs_;
0386 int nintTotNClsinTSTs_;
0387 double minTotNClsinTSTsperlayer_, maxTotNClsinTSTsperlayer_;
0388 int nintTotNClsinTSTsperlayer_;
0389 double minMplofLCs_, maxMplofLCs_;
0390 int nintMplofLCs_;
0391 double minSizeCLsinTSTs_, maxSizeCLsinTSTs_;
0392 int nintSizeCLsinTSTs_;
0393 double minClEnepermultiplicity_, maxClEnepermultiplicity_;
0394 int nintClEnepermultiplicity_;
0395 double minX_, maxX_;
0396 int nintX_;
0397 double minY_, maxY_;
0398 int nintY_;
0399 double minZ_, maxZ_;
0400 int nintZ_;
0401 };
0402
0403 #endif