Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-09 23:34:07

0001 #ifndef Validation_HGCalValidation_HGVHistoProducerAlgo_h
0002 #define Validation_HGCalValidation_HGVHistoProducerAlgo_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 
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   //Info
0038   //To be able to spot any issues both in -z and +z a layer id was introduced
0039   //that spans from 0 to 103 for hgcal_v9 geometry. The mapping for hgcal_v9 is:
0040   //-z: 0->51
0041   //+z: 52->103
0042   //We will pick the numbers below from RecHitTools just to avoid future problems
0043   dqm::reco::MonitorElement* lastLayerEEzm;  // last layer of EE -z
0044   dqm::reco::MonitorElement* lastLayerFHzm;  // last layer of FH -z
0045   dqm::reco::MonitorElement* maxlayerzm;     // last layer of BH -z
0046   dqm::reco::MonitorElement* lastLayerEEzp;  // last layer of EE +z
0047   dqm::reco::MonitorElement* lastLayerFHzp;  // last layer of FH +z
0048   dqm::reco::MonitorElement* maxlayerzp;     // last layer of BH +z
0049 
0050   //1D
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   //For SimClusters
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   // For Tracksters
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   // Generic histograms
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   // Must be in sync with labels in PostProcessorHGCAL_cfi.py
0417   std::array<std::string, numberOfValidationTypes_> valSuffix_ = {{"_byHits_CP", "_byLCs", "_byLCs_CP", "_byHits"}};
0418 
0419   //private data members
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