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