File indexing completed on 2025-01-09 23:34:07
0001 #ifndef Validation_HGCalValidation_HGVHistoProducerAlgo_h
0002 #define Validation_HGCalValidation_HGVHistoProducerAlgo_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
0024 #include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h"
0025 #include "CommonTools/RecoAlgos/interface/MultiVectorManager.h"
0026
0027 #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
0028 #include "SimDataFormats/Vertex/interface/SimVertex.h"
0029 #include "RecoLocalCalo/HGCalRecProducers/interface/HGCalClusteringAlgoBase.h"
0030 #include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociatorBaseImpl.h"
0031 #include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociatorBaseImpl.h"
0032 #include "DQMServices/Core/interface/DQMStore.h"
0033
0034 #include "SimDataFormats/Associations/interface/TICLAssociationMap.h"
0035
0036 struct HGVHistoProducerAlgoHistograms {
0037
0038
0039
0040
0041
0042
0043 dqm::reco::MonitorElement* lastLayerEEzm;
0044 dqm::reco::MonitorElement* lastLayerFHzm;
0045 dqm::reco::MonitorElement* maxlayerzm;
0046 dqm::reco::MonitorElement* lastLayerEEzp;
0047 dqm::reco::MonitorElement* lastLayerFHzp;
0048 dqm::reco::MonitorElement* maxlayerzp;
0049
0050
0051 std::vector<dqm::reco::MonitorElement*> h_cluster_eta;
0052 std::vector<dqm::reco::MonitorElement*> h_mixedhitscluster_zminus;
0053 std::vector<dqm::reco::MonitorElement*> h_mixedhitscluster_zplus;
0054 std::vector<dqm::reco::MonitorElement*> h_energyclustered_zminus;
0055 std::vector<dqm::reco::MonitorElement*> h_energyclustered_zplus;
0056 std::vector<dqm::reco::MonitorElement*> h_longdepthbarycentre_zminus;
0057 std::vector<dqm::reco::MonitorElement*> h_longdepthbarycentre_zplus;
0058
0059 std::unordered_map<int, dqm::reco::MonitorElement*> h_clusternum_perlayer;
0060 std::unordered_map<int, dqm::reco::MonitorElement*> h_energyclustered_perlayer;
0061 std::unordered_map<int, dqm::reco::MonitorElement*> h_score_layercl2caloparticle_perlayer;
0062 std::unordered_map<int, dqm::reco::MonitorElement*> h_score_caloparticle2layercl_perlayer;
0063 std::unordered_map<int, dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2layercl_perlayer;
0064 std::unordered_map<int, dqm::reco::MonitorElement*> h_energy_vs_score_layercl2caloparticle_perlayer;
0065 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2layercl_perlayer;
0066 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2layercl_vs_eta_perlayer;
0067 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2layercl_vs_phi_perlayer;
0068 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_layercl2caloparticle_perlayer;
0069 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_layercl2caloparticle_vs_eta_perlayer;
0070 std::unordered_map<int, dqm::reco::MonitorElement*> h_sharedenergy_layercl2caloparticle_vs_phi_perlayer;
0071 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_caloparticle_eta_perlayer;
0072 std::unordered_map<int, dqm::reco::MonitorElement*> h_numDup_caloparticle_eta_perlayer;
0073 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_caloparticle_eta_perlayer;
0074 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_caloparticle_phi_perlayer;
0075 std::unordered_map<int, dqm::reco::MonitorElement*> h_numDup_caloparticle_phi_perlayer;
0076 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_caloparticle_phi_perlayer;
0077 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_layercl_eta_perlayer;
0078 std::unordered_map<int, dqm::reco::MonitorElement*> h_numMerge_layercl_eta_perlayer;
0079 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_layercl_eta_perlayer;
0080 std::unordered_map<int, dqm::reco::MonitorElement*> h_num_layercl_phi_perlayer;
0081 std::unordered_map<int, dqm::reco::MonitorElement*> h_numMerge_layercl_phi_perlayer;
0082 std::unordered_map<int, dqm::reco::MonitorElement*> h_denom_layercl_phi_perlayer;
0083 std::unordered_map<int, dqm::reco::MonitorElement*> h_cellAssociation_perlayer;
0084 std::unordered_map<int, dqm::reco::MonitorElement*> h_clusternum_perthick;
0085 std::unordered_map<int, dqm::reco::MonitorElement*> h_cellsenedens_perthick;
0086
0087 std::unordered_map<std::string, dqm::reco::MonitorElement*> h_cellsnum_perthickperlayer;
0088 std::unordered_map<std::string, dqm::reco::MonitorElement*> h_distancetoseedcell_perthickperlayer;
0089 std::unordered_map<std::string, dqm::reco::MonitorElement*> h_distancetoseedcell_perthickperlayer_eneweighted;
0090 std::unordered_map<std::string, dqm::reco::MonitorElement*> h_distancetomaxcell_perthickperlayer;
0091 std::unordered_map<std::string, dqm::reco::MonitorElement*> h_distancetomaxcell_perthickperlayer_eneweighted;
0092 std::unordered_map<std::string, dqm::reco::MonitorElement*> h_distancebetseedandmaxcell_perthickperlayer;
0093 std::unordered_map<std::string, dqm::reco::MonitorElement*>
0094 h_distancebetseedandmaxcellvsclusterenergy_perthickperlayer;
0095
0096 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_eta;
0097 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_eta_Zorigin;
0098 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_energy;
0099 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_selfenergy;
0100 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_energyDifference;
0101 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_pt;
0102 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_phi;
0103 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nSimClusters;
0104 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHitsInSimClusters;
0105 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_firstlayer;
0106 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_lastlayer;
0107 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_layersnum;
0108 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHitsInSimClusters_matchedtoRecHit;
0109 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHits_matched_energy;
0110 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHits_matched_energy_layer;
0111 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_nHits_matched_energy_layer_1SimCl;
0112 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_sum_energy_layer;
0113 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_firstlayer_matchedtoRecHit;
0114 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_lastlayer_matchedtoRecHit;
0115 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_layersnum_matchedtoRecHit;
0116 std::unordered_map<int, dqm::reco::MonitorElement*> h_caloparticle_fractions, h_caloparticle_fractions_weight;
0117
0118
0119 std::unordered_map<int, dqm::reco::MonitorElement*> h_simclusternum_perlayer;
0120 std::unordered_map<int, dqm::reco::MonitorElement*> h_simclusternum_perthick;
0121 dqm::reco::MonitorElement* h_mixedhitssimcluster_zminus;
0122 dqm::reco::MonitorElement* h_mixedhitssimcluster_zplus;
0123
0124 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_layercl_in_simcl_eta_perlayer;
0125 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_layercl_in_simcl_phi_perlayer;
0126 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_score_layercl2simcluster_perlayer;
0127 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_layercl2simcluster_perlayer;
0128 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_energy_vs_score_layercl2simcluster_perlayer;
0129 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_layercl_in_simcl_eta_perlayer;
0130 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_layercl_in_simcl_phi_perlayer;
0131 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numMerge_layercl_in_simcl_eta_perlayer;
0132 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numMerge_layercl_in_simcl_phi_perlayer;
0133 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_layercl2simcluster_vs_eta_perlayer;
0134 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_layercl2simcluster_vs_phi_perlayer;
0135 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_simcluster_eta_perlayer;
0136 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_denom_simcluster_phi_perlayer;
0137 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_score_simcluster2layercl_perlayer;
0138 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_simcluster2layercl_perlayer;
0139 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_energy_vs_score_simcluster2layercl_perlayer;
0140 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_simcluster_eta_perlayer;
0141 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_num_simcluster_phi_perlayer;
0142 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numDup_simcluster_eta_perlayer;
0143 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_numDup_simcluster_phi_perlayer;
0144 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_simcluster2layercl_vs_eta_perlayer;
0145 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_sharedenergy_simcluster2layercl_vs_phi_perlayer;
0146
0147
0148 constexpr static int numberOfValidationTypes_ = 4;
0149
0150 std::vector<dqm::reco::MonitorElement*> h_score_trackster2caloparticle[numberOfValidationTypes_];
0151 std::vector<dqm::reco::MonitorElement*> h_score_trackster2bestCaloparticle[numberOfValidationTypes_];
0152 std::vector<dqm::reco::MonitorElement*> h_score_trackster2bestCaloparticle2[numberOfValidationTypes_];
0153 std::vector<dqm::reco::MonitorElement*> h_score_caloparticle2trackster[numberOfValidationTypes_];
0154 std::vector<dqm::reco::MonitorElement*> h_scorePur_caloparticle2trackster[numberOfValidationTypes_];
0155 std::vector<dqm::reco::MonitorElement*> h_scoreDupl_caloparticle2trackster[numberOfValidationTypes_];
0156 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_trackster2caloparticle[numberOfValidationTypes_];
0157 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_trackster2bestCaloparticle[numberOfValidationTypes_];
0158 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_trackster2bestCaloparticle2[numberOfValidationTypes_];
0159 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2trackster[numberOfValidationTypes_];
0160 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2bestTrackster[numberOfValidationTypes_];
0161 std::vector<dqm::reco::MonitorElement*> h_energy_vs_score_caloparticle2bestTrackster2[numberOfValidationTypes_];
0162 std::vector<dqm::reco::MonitorElement*> h_num_trackster_eta[numberOfValidationTypes_];
0163 std::vector<dqm::reco::MonitorElement*> h_num_trackster_phi[numberOfValidationTypes_];
0164 std::vector<dqm::reco::MonitorElement*> h_num_trackster_en[numberOfValidationTypes_];
0165 std::vector<dqm::reco::MonitorElement*> h_num_trackster_pt[numberOfValidationTypes_];
0166 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_eta[numberOfValidationTypes_];
0167 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_phi[numberOfValidationTypes_];
0168 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_en[numberOfValidationTypes_];
0169 std::vector<dqm::reco::MonitorElement*> h_numMerge_trackster_pt[numberOfValidationTypes_];
0170 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2caloparticle[numberOfValidationTypes_];
0171 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle[numberOfValidationTypes_];
0172 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle2[numberOfValidationTypes_];
0173 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster[numberOfValidationTypes_];
0174 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc[numberOfValidationTypes_];
0175 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc2[numberOfValidationTypes_];
0176 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle_vs_eta[numberOfValidationTypes_];
0177 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_trackster2bestCaloparticle_vs_phi[numberOfValidationTypes_];
0178 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc_vs_eta[numberOfValidationTypes_];
0179 std::vector<dqm::reco::MonitorElement*> h_sharedenergy_caloparticle2trackster_assoc_vs_phi[numberOfValidationTypes_];
0180 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_eta[numberOfValidationTypes_];
0181 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_phi[numberOfValidationTypes_];
0182 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_en[numberOfValidationTypes_];
0183 std::vector<dqm::reco::MonitorElement*> h_denom_trackster_pt[numberOfValidationTypes_];
0184 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_eta[numberOfValidationTypes_];
0185 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_phi[numberOfValidationTypes_];
0186 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_en[numberOfValidationTypes_];
0187 std::vector<dqm::reco::MonitorElement*> h_numEff_caloparticle_pt[numberOfValidationTypes_];
0188 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_eta[numberOfValidationTypes_];
0189 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_phi[numberOfValidationTypes_];
0190 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_en[numberOfValidationTypes_];
0191 std::vector<dqm::reco::MonitorElement*> h_num_caloparticle_pt[numberOfValidationTypes_];
0192 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_eta[numberOfValidationTypes_];
0193 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_phi[numberOfValidationTypes_];
0194 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_en[numberOfValidationTypes_];
0195 std::vector<dqm::reco::MonitorElement*> h_numDup_trackster_pt[numberOfValidationTypes_];
0196 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_eta[numberOfValidationTypes_];
0197 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_phi[numberOfValidationTypes_];
0198 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_en[numberOfValidationTypes_];
0199 std::vector<dqm::reco::MonitorElement*> h_denom_caloparticle_pt[numberOfValidationTypes_];
0200
0201 std::vector<dqm::reco::MonitorElement*> h_tracksternum;
0202 std::vector<dqm::reco::MonitorElement*> h_conttracksternum;
0203 std::vector<dqm::reco::MonitorElement*> h_nonconttracksternum;
0204 std::vector<dqm::reco::MonitorElement*> h_clusternum_in_trackster;
0205 std::vector<std::unordered_map<int, dqm::reco::MonitorElement*>> h_clusternum_in_trackster_perlayer;
0206 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST;
0207 std::vector<dqm::reco::MonitorElement*> h_multiplicity_numberOfEventsHistogram;
0208 std::vector<dqm::reco::MonitorElement*> h_multiplicity_zminus_numberOfEventsHistogram;
0209 std::vector<dqm::reco::MonitorElement*> h_multiplicity_zplus_numberOfEventsHistogram;
0210 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST_vs_layercluster;
0211 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST_vs_layercluster_zminus;
0212 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST_vs_layercluster_zplus;
0213 std::vector<dqm::reco::MonitorElement*> h_multiplicityOfLCinTST_vs_layerclusterenergy;
0214 std::vector<dqm::reco::MonitorElement*> h_clusternum_in_trackster_vs_layer;
0215 std::vector<dqm::reco::MonitorElement*> h_trackster_pt;
0216 std::vector<dqm::reco::MonitorElement*> h_trackster_eta;
0217 std::vector<dqm::reco::MonitorElement*> h_trackster_phi;
0218 std::vector<dqm::reco::MonitorElement*> h_trackster_energy;
0219 std::vector<dqm::reco::MonitorElement*> h_trackster_x;
0220 std::vector<dqm::reco::MonitorElement*> h_trackster_y;
0221 std::vector<dqm::reco::MonitorElement*> h_trackster_z;
0222 std::vector<dqm::reco::MonitorElement*> h_trackster_firstlayer;
0223 std::vector<dqm::reco::MonitorElement*> h_trackster_lastlayer;
0224 std::vector<dqm::reco::MonitorElement*> h_trackster_layersnum;
0225 };
0226
0227 using Density = hgcal_clustering::Density;
0228
0229 class HGVHistoProducerAlgo {
0230 public:
0231 typedef dqm::legacy::DQMStore DQMStore;
0232 typedef dqm::legacy::MonitorElement MonitorElement;
0233 using TracksterToTracksterMap =
0234 ticl::AssociationMap<ticl::mapWithSharedEnergyAndScore, std::vector<ticl::Trackster>, std::vector<ticl::Trackster>>;
0235 using SimClusterToCaloParticleMap =
0236 ticl::AssociationMap<ticl::oneToOneMapWithFraction, std::vector<SimCluster>, std::vector<CaloParticle>>;
0237 enum validationType { byHits_CP = 0, byLCs, byLCs_CP, byHits };
0238
0239 HGVHistoProducerAlgo(const edm::ParameterSet& pset);
0240 ~HGVHistoProducerAlgo();
0241
0242 using Histograms = HGVHistoProducerAlgoHistograms;
0243
0244 void bookInfo(DQMStore::IBooker& ibook, Histograms& histograms);
0245 void bookCaloParticleHistos(DQMStore::IBooker& ibook, Histograms& histograms, int pdgid, unsigned int layers);
0246
0247 void bookSimClusterHistos(DQMStore::IBooker& ibook,
0248 Histograms& histograms,
0249 unsigned int layers,
0250 std::vector<int> thicknesses);
0251
0252 void bookSimClusterAssociationHistos(DQMStore::IBooker& ibook,
0253 Histograms& histograms,
0254 unsigned int layers,
0255 std::vector<int> thicknesses);
0256
0257 void bookClusterHistos_ClusterLevel(DQMStore::IBooker& ibook,
0258 Histograms& histograms,
0259 unsigned int layers,
0260 std::vector<int> thicknesses,
0261 std::string pathtomatbudfile);
0262
0263 void bookClusterHistos_LCtoCP_association(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0264
0265 void bookClusterHistos_CellLevel(DQMStore::IBooker& ibook,
0266 Histograms& histograms,
0267 unsigned int layers,
0268 std::vector<int> thicknesses);
0269
0270 void bookTracksterHistos(DQMStore::IBooker& ibook, Histograms& histograms, unsigned int layers);
0271
0272 void bookTracksterSTSHistos(DQMStore::IBooker& ibook, Histograms& histograms, const validationType valType);
0273
0274 void layerClusters_to_CaloParticles(const Histograms& histograms,
0275 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0276 const reco::CaloClusterCollection& clusters,
0277 edm::Handle<std::vector<CaloParticle>> caloParticleHandle,
0278 std::vector<CaloParticle> const& cP,
0279 std::vector<size_t> const& cPIndices,
0280 std::vector<size_t> const& cPSelectedIndices,
0281 std::unordered_map<DetId, const unsigned int> const&,
0282 unsigned int layers,
0283 const ticl::RecoToSimCollection& recSimColl,
0284 const ticl::SimToRecoCollection& simRecColl,
0285 MultiVectorManager<HGCRecHit> const& hits) const;
0286 void layerClusters_to_SimClusters(const Histograms& histograms,
0287 const int count,
0288 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0289 const reco::CaloClusterCollection& clusters,
0290 edm::Handle<std::vector<SimCluster>> simClusterHandle,
0291 std::vector<SimCluster> const& simClusters,
0292 std::vector<size_t> const& sCIndices,
0293 const std::vector<float>& mask,
0294 std::unordered_map<DetId, const unsigned int> const&,
0295 unsigned int layers,
0296 const ticl::RecoToSimCollectionWithSimClusters& recSimColl,
0297 const ticl::SimToRecoCollectionWithSimClusters& simRecColl,
0298 MultiVectorManager<HGCRecHit> const& hits) const;
0299
0300 void tracksters_to_SimTracksters_fp(const Histograms& histograms,
0301 const int count,
0302 const TracksterToTracksterMap& trackstersToSimTrackstersMap,
0303 const TracksterToTracksterMap& simTrackstersToTrackstersMap,
0304 const validationType valType,
0305 const SimClusterToCaloParticleMap& scToCpMap,
0306 const std::vector<size_t>& cPIndices,
0307 const std::vector<size_t>& cPSelectedIndices,
0308 const edm::ProductID& cPHandle_id) const;
0309
0310 void fill_info_histos(const Histograms& histograms, unsigned int layers) const;
0311 void fill_caloparticle_histos(const Histograms& histograms,
0312 int pdgid,
0313 const CaloParticle& caloparticle,
0314 std::vector<SimVertex> const& simVertices,
0315 unsigned int layers,
0316 std::unordered_map<DetId, const unsigned int> const&,
0317 MultiVectorManager<HGCRecHit> const& hits) const;
0318 void fill_generic_cluster_histos(const Histograms& histograms,
0319 const int count,
0320 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0321 const reco::CaloClusterCollection& clusters,
0322 edm::Handle<std::vector<CaloParticle>> caloParticleHandle,
0323 std::vector<CaloParticle> const& cP,
0324 std::vector<size_t> const& cPIndices,
0325 std::vector<size_t> const& cPSelectedIndices,
0326 std::unordered_map<DetId, const unsigned int> const&,
0327 std::map<double, double> cummatbudg,
0328 unsigned int layers,
0329 std::vector<int> thicknesses,
0330 const ticl::RecoToSimCollection& recSimColl,
0331 const ticl::SimToRecoCollection& simRecColl,
0332 MultiVectorManager<HGCRecHit> const& hits) const;
0333 void fill_simCluster_histos(const Histograms& histograms,
0334 std::vector<SimCluster> const& simClusters,
0335 unsigned int layers,
0336 std::vector<int> thicknesses) const;
0337 void fill_simClusterAssociation_histos(const Histograms& histograms,
0338 const int count,
0339 edm::Handle<reco::CaloClusterCollection> clusterHandle,
0340 const reco::CaloClusterCollection& clusters,
0341 edm::Handle<std::vector<SimCluster>> simClusterHandle,
0342 std::vector<SimCluster> const& simClusters,
0343 std::vector<size_t> const& sCIndices,
0344 const std::vector<float>& mask,
0345 std::unordered_map<DetId, const unsigned int> const& hitMap,
0346 unsigned int layers,
0347 const ticl::RecoToSimCollectionWithSimClusters& recSimColl,
0348 const ticl::SimToRecoCollectionWithSimClusters& simRecColl,
0349 MultiVectorManager<HGCRecHit> const& hits) const;
0350 void fill_cluster_histos(const Histograms& histograms, const int count, const reco::CaloCluster& cluster) const;
0351 void fill_trackster_histos(const Histograms& histograms,
0352 const int count,
0353 const ticl::TracksterCollection& tracksters,
0354 const reco::CaloClusterCollection& layerClusters,
0355 const ticl::TracksterCollection& simTSs,
0356 const ticl::TracksterCollection& simTSs_fromCP,
0357 const std::map<unsigned int, std::vector<unsigned int>>& cpToSc_SimTrackstersMap,
0358 std::vector<SimCluster> const& sC,
0359 const edm::ProductID& cPHandle_id,
0360 std::vector<CaloParticle> const& cP,
0361 std::vector<size_t> const& cPIndices,
0362 std::vector<size_t> const& cPSelectedIndices,
0363 std::unordered_map<DetId, const unsigned int> const& hitMap,
0364 unsigned int layers,
0365 MultiVectorManager<HGCRecHit> const& hits,
0366 bool mapsFound,
0367 const edm::Handle<TracksterToTracksterMap>& trackstersToSimTrackstersByLCsMapH,
0368 const edm::Handle<TracksterToTracksterMap>& simTrackstersToTrackstersByLCsMapH,
0369 const edm::Handle<TracksterToTracksterMap>& trackstersToSimTrackstersFromCPsByLCsMapH,
0370 const edm::Handle<TracksterToTracksterMap>& simTrackstersFromCPsToTrackstersByLCsMapH,
0371 const edm::Handle<TracksterToTracksterMap>& trackstersToSimTrackstersByHitsMapH,
0372 const edm::Handle<TracksterToTracksterMap>& simTrackstersToTrackstersByHitsMapH,
0373 const edm::Handle<TracksterToTracksterMap>& trackstersToSimTrackstersFromCPsByHitsMapH,
0374 const edm::Handle<TracksterToTracksterMap>& simTrackstersFromCPsToTrackstersByHitsMapH,
0375 const SimClusterToCaloParticleMap& scToCpMap) const;
0376 double distance2(const double x1, const double y1, const double x2, const double y2) const;
0377 double distance(const double x1, const double y1, const double x2, const double y2) const;
0378
0379 void setRecHitTools(std::shared_ptr<hgcal::RecHitTools> recHitTools);
0380
0381 DetId findmaxhit(const reco::CaloCluster& cluster,
0382 std::unordered_map<DetId, const unsigned int> const&,
0383 MultiVectorManager<HGCRecHit> const& hits) const;
0384
0385 struct detIdInfoInCluster {
0386 bool operator==(const detIdInfoInCluster& o) const { return clusterId == o.clusterId; };
0387 long unsigned int clusterId;
0388 float fraction;
0389 };
0390
0391 struct detIdInfoInTrackster {
0392 bool operator==(const detIdInfoInTrackster& o) const { return tracksterId == o.tracksterId; };
0393 unsigned int tracksterId;
0394 long unsigned int clusterId;
0395 float fraction;
0396 };
0397
0398 struct caloParticleOnLayer {
0399 unsigned int caloParticleId;
0400 float energy = 0;
0401 std::vector<std::pair<DetId, float>> hits_and_fractions;
0402 std::unordered_map<unsigned int, std::pair<float, float>> layerClusterIdToEnergyAndScore;
0403 };
0404
0405 private:
0406 double getEta(double eta) const;
0407
0408 std::shared_ptr<hgcal::RecHitTools> recHitTools_;
0409 constexpr static int numberOfValidationTypes_ = 4;
0410 std::array<std::string, numberOfValidationTypes_> ref_ = {
0411 {"SimTrackster_fromCP_byHits", "SimTrackster_byLCs", "SimTrackster_fromCP_byLCs", "SimTrackster_byHits"}};
0412 std::array<std::string, numberOfValidationTypes_> refText_ = {{"SimTrackster from CP Associated by Hits",
0413 "SimTrackster Associated by LCs",
0414 "SimTrackster from CP Associated by LCs",
0415 "SimTrackster Associated by Hits"}};
0416
0417 std::array<std::string, numberOfValidationTypes_> valSuffix_ = {{"_byHits_CP", "_byLCs", "_byLCs_CP", "_byHits"}};
0418
0419
0420 double minEta_, maxEta_;
0421 int nintEta_;
0422 bool useFabsEta_;
0423 double minEne_, maxEne_;
0424 int nintEne_;
0425 double minPt_, maxPt_;
0426 int nintPt_;
0427 double minPhi_, maxPhi_;
0428 int nintPhi_;
0429 double minMixedHitsSimCluster_, maxMixedHitsSimCluster_;
0430 int nintMixedHitsSimCluster_;
0431 double minMixedHitsCluster_, maxMixedHitsCluster_;
0432 int nintMixedHitsCluster_;
0433 double minEneCl_, maxEneCl_;
0434 int nintEneCl_;
0435 double minLongDepBary_, maxLongDepBary_;
0436 int nintLongDepBary_;
0437 double minZpos_, maxZpos_;
0438 int nintZpos_;
0439 double minTotNsimClsperlay_, maxTotNsimClsperlay_;
0440 int nintTotNsimClsperlay_;
0441 double minTotNClsperlay_, maxTotNClsperlay_;
0442 int nintTotNClsperlay_;
0443 double minEneClperlay_, maxEneClperlay_;
0444 int nintEneClperlay_;
0445 double minScore_, maxScore_;
0446 int nintScore_;
0447 double minSharedEneFrac_, maxSharedEneFrac_;
0448 int nintSharedEneFrac_;
0449 double minTSTSharedEneFracEfficiency_;
0450 double minTSTSharedEneFrac_, maxTSTSharedEneFrac_;
0451 int nintTSTSharedEneFrac_;
0452 double minTotNsimClsperthick_, maxTotNsimClsperthick_;
0453 int nintTotNsimClsperthick_;
0454 double minTotNClsperthick_, maxTotNClsperthick_;
0455 int nintTotNClsperthick_;
0456 double minTotNcellsperthickperlayer_, maxTotNcellsperthickperlayer_;
0457 int nintTotNcellsperthickperlayer_;
0458 double minDisToSeedperthickperlayer_, maxDisToSeedperthickperlayer_;
0459 int nintDisToSeedperthickperlayer_;
0460 double minDisToSeedperthickperlayerenewei_, maxDisToSeedperthickperlayerenewei_;
0461 int nintDisToSeedperthickperlayerenewei_;
0462 double minDisToMaxperthickperlayer_, maxDisToMaxperthickperlayer_;
0463 int nintDisToMaxperthickperlayer_;
0464 double minDisToMaxperthickperlayerenewei_, maxDisToMaxperthickperlayerenewei_;
0465 int nintDisToMaxperthickperlayerenewei_;
0466 double minDisSeedToMaxperthickperlayer_, maxDisSeedToMaxperthickperlayer_;
0467 int nintDisSeedToMaxperthickperlayer_;
0468 double minClEneperthickperlayer_, maxClEneperthickperlayer_;
0469 int nintClEneperthickperlayer_;
0470 double minCellsEneDensperthick_, maxCellsEneDensperthick_;
0471 int nintCellsEneDensperthick_;
0472 double minTotNTSTs_, maxTotNTSTs_;
0473 int nintTotNTSTs_;
0474 double minTotNClsinTSTs_, maxTotNClsinTSTs_;
0475 int nintTotNClsinTSTs_;
0476 double minTotNClsinTSTsperlayer_, maxTotNClsinTSTsperlayer_;
0477 int nintTotNClsinTSTsperlayer_;
0478 double minMplofLCs_, maxMplofLCs_;
0479 int nintMplofLCs_;
0480 double minSizeCLsinTSTs_, maxSizeCLsinTSTs_;
0481 int nintSizeCLsinTSTs_;
0482 double minClEnepermultiplicity_, maxClEnepermultiplicity_;
0483 int nintClEnepermultiplicity_;
0484 double minX_, maxX_;
0485 int nintX_;
0486 double minY_, maxY_;
0487 int nintY_;
0488 double minZ_, maxZ_;
0489 int nintZ_;
0490 };
0491
0492 #endif