Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-12-15 05:17:28

0001 // Author: Felice Pantaleo - felice.pantaleo@cern.ch
0002 // Date: 11/2018
0003 
0004 #ifndef __RecoHGCal_TICL_HGCGraph_H__
0005 #define __RecoHGCal_TICL_HGCGraph_H__
0006 
0007 #include <vector>
0008 
0009 #include "DataFormats/HGCalReco/interface/Common.h"
0010 #include "DataFormats/HGCalReco/interface/TICLLayerTile.h"
0011 #include "DataFormats/HGCalReco/interface/TICLSeedingRegion.h"
0012 #include "HGCDoublet.h"
0013 
0014 template <typename TILES>
0015 class HGCGraphT {
0016 public:
0017   void makeAndConnectDoublets(const TILES &h,
0018                               const std::vector<TICLSeedingRegion> &regions,
0019                               int nEtaBins,
0020                               int nPhiBins,
0021                               const std::vector<reco::CaloCluster> &layerClusters,
0022                               const std::vector<float> &mask,
0023                               const edm::ValueMap<std::pair<float, float>> &layerClustersTime,
0024                               int deltaIEta,
0025                               int deltaIPhi,
0026                               float minCosThetai,
0027                               float maxCosPointing,
0028                               float root_doublet_max_distance_from_seed_squared,
0029                               float etaLimitIncreaseWindow,
0030                               int skip_layers,
0031                               int maxNumberOfLayers,
0032                               float maxDeltaTime,
0033                               int lastLayerEE,
0034                               int lastLayerFH,
0035                               const std::vector<double> &siblings_maxRSquared);
0036 
0037   bool areTimeCompatible(int innerIdx,
0038                          int outerIdx,
0039                          const edm::ValueMap<std::pair<float, float>> &layerClustersTime,
0040                          float maxDeltaTime);
0041 
0042   bool areOverlappingOnSiblingLayers(int innerIdx,
0043                                      int outerIdx,
0044                                      const std::vector<reco::CaloCluster> &layerClusters,
0045                                      float maxRSquared);
0046 
0047   std::vector<HGCDoublet> &getAllDoublets() { return allDoublets_; }
0048   void findNtuplets(std::vector<HGCDoublet::HGCntuplet> &foundNtuplets,
0049                     std::vector<int> &seedIndices,
0050                     const unsigned int minClustersPerNtuplet,
0051                     const bool outInDFS,
0052                     const unsigned int maxOutInHops);
0053   void clear() {
0054     allDoublets_.clear();
0055     theRootDoublets_.clear();
0056     isOuterClusterOfDoublets_.clear();
0057     allDoublets_.shrink_to_fit();
0058     theRootDoublets_.shrink_to_fit();
0059     isOuterClusterOfDoublets_.shrink_to_fit();
0060   }
0061   void setVerbosity(int level) { verbosity_ = level; }
0062   enum VerbosityLevel { None = 0, Basic, Advanced, Expert, Guru };
0063 
0064 private:
0065   std::vector<HGCDoublet> allDoublets_;
0066   std::vector<unsigned int> theRootDoublets_;
0067   std::vector<std::vector<int>> isOuterClusterOfDoublets_;
0068   int verbosity_;
0069 };
0070 
0071 #endif