Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-09 05:00:38

0001 #ifndef Validation_HGCalValidation_BarrelVHistoProducerAlgo_h
0002 #define Validation_HGCalValidation_BarrelVHistoProducerAlgo_h
0003 
0004 /* \author HGCal
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   //1D
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   //For SimClusters
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   // For Tracksters
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   // Generic histograms
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   // Must be in sync with labels in PostProcessorHGCAL_cfi.py
0346   std::array<std::string, numberOfValidationTypes_> valSuffix_ = {{"_byHits_CP", "_byLCs", "_byLCs_CP", "_byHits"}};
0347 
0348   int barrelLayersOffset_ = 5;
0349 
0350   //private data members
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