00001 #ifndef RECOLOCALCALO_HFCLUSTERPRODUCER_HFCLUSTERALGO_H
00002 #define RECOLOCALCALO_HFCLUSTERPRODUCER_HFCLUSTERALGO_H 1
00003
00004 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00005 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00006 #include "DataFormats/EgammaReco/interface/HFEMClusterShape.h"
00007 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00008 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00009 #include "DataFormats/EgammaReco/interface/HFEMClusterShapeAssociation.h"
00010 #include "DataFormats/EgammaReco/interface/HFEMClusterShape.h"
00011 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00012 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00013 #include <map>
00014 #include <list>
00015
00020
00021
00022 class HFClusterAlgo {
00023 public:
00024 HFClusterAlgo();
00025
00026 void setup(double minTowerEnergy);
00027
00029 void clusterize(const HFRecHitCollection& hf,
00030 const CaloGeometry& geom,
00031 reco::HFEMClusterShapeCollection& clusters,
00032 reco::BasicClusterCollection& BasicClusters,
00033 reco::SuperClusterCollection& SuperClusters);
00034
00035
00036 private:
00037 friend class CompareHFCompleteHitET;
00038 friend class CompareHFCore;
00039 double m_minTowerEnergy;
00040 struct HFCompleteHit {
00041 HcalDetId id;
00042 double energy, et;
00043 };
00044
00045 void makeCluster(const HcalDetId& seedid,
00046 const HFRecHitCollection& hf,
00047 const CaloGeometry& geom,
00048 reco::HFEMClusterShape& clusShp,
00049 reco::BasicCluster& Bclus,
00050 reco::SuperCluster& SClus);
00051 };
00052
00053 #endif