CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/RecoEcal/EgammaClusterAlgos/interface/Multi5x5BremRecoveryClusterAlgo.h

Go to the documentation of this file.
00001 #ifndef RecoEcal_EgammaClusterAlgos_Multi5x5BremRecoveryClusterAlgo_h_
00002 #define RecoEcal_EgammaClusterAlgos_Multi5x5BremRecoveryClusterAlgo_h_
00003 
00004 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00005 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00006 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00007 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00008 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00009 #include "RecoEcal/EgammaCoreTools/interface/BremRecoveryPhiRoadAlgo.h"
00010 
00011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00012 
00013 #include <vector>
00014 
00015 
00016 /*
00017   The Multi5x5BremRecoveryClusterAlgo class encapsulates the functionality needed
00018   to perform the SuperClustering.
00019   
00020   WARNING: This code assumes that the BasicClusters 
00021   from the event are sorted by energy
00022 */
00023 
00024 class Multi5x5BremRecoveryClusterAlgo
00025 {
00026  public:
00027   
00028   enum VerbosityLevel { pDEBUG = 0, pWARNING = 1, pINFO = 2, pERROR = 3 }; 
00029 
00030   Multi5x5BremRecoveryClusterAlgo(const edm::ParameterSet &bremRecoveryPset,
00031                           double eb_sc_road_etasize = 0.06, // Search window in eta - Barrel
00032                           double eb_sc_road_phisize = 0.80, // Search window in phi - Barrel
00033                           double ec_sc_road_etasize = 0.14, // Search window in eta - Endcap
00034                           double ec_sc_road_phisize = 0.40, // Search window in eta - Endcap
00035                           bool dynamicPhiRoad = true,
00036                           double theSeedTransverseEnergyThreshold = 0.40,
00037                           VerbosityLevel the_verbosity = pERROR
00038                           )
00039     {
00040       // e*_rdeta_ and e*_rdphi_ are half the total window 
00041       // because they correspond to one direction (positive or negative)
00042       eb_rdeta_ = eb_sc_road_etasize / 2;
00043       eb_rdphi_ = eb_sc_road_phisize / 2;
00044       ec_rdeta_ = ec_sc_road_etasize / 2;
00045       ec_rdphi_ = ec_sc_road_phisize / 2;
00046 
00047       seedTransverseEnergyThreshold = theSeedTransverseEnergyThreshold;
00048       dynamicPhiRoad_ = dynamicPhiRoad;
00049       if (dynamicPhiRoad_) phiRoadAlgo_ = new BremRecoveryPhiRoadAlgo(bremRecoveryPset);
00050 
00051       verbosity = the_verbosity;
00052     }
00053 
00054   // destructor
00055   ~Multi5x5BremRecoveryClusterAlgo() 
00056   {
00057      if (dynamicPhiRoad_) delete phiRoadAlgo_;
00058   } 
00059 
00060   void setVerbosity(VerbosityLevel the_verbosity)
00061     {
00062       verbosity = the_verbosity;
00063     }
00064   
00065   // the method called from outside to do the SuperClustering - returns a vector of SCs:
00066   reco::SuperClusterCollection makeSuperClusters(reco::CaloClusterPtrVector & clusters);
00067   
00068  private:
00069   
00070   // make superclusters out of clusters produced by the Island algorithm:
00071   void makeIslandSuperClusters(reco::CaloClusterPtrVector &clusters_v, 
00072                                double etaRoad, double phiRoad);
00073   
00074   // return true if the cluster is within the search phi-eta window of the seed
00075   bool match(reco::CaloClusterPtr seed_p, 
00076              reco::CaloClusterPtr cluster_p,
00077              double etaRoad, double phiRoad);
00078   
00079   //
00080 
00081   VerbosityLevel verbosity;
00082 
00083   double eb_rdeta_;
00084   double eb_rdphi_;
00085   double ec_rdeta_;
00086   double ec_rdphi_;
00087   
00088   double seedTransverseEnergyThreshold;
00089   bool dynamicPhiRoad_;  
00090   BremRecoveryPhiRoadAlgo *phiRoadAlgo_;
00091 
00092   reco::SuperClusterCollection superclusters_v;
00093   
00094 };
00095 
00096 #endif