00001 #ifndef RecoEcal_EgammaClusterProducers_EgammaHLTIslandClusterProducer_h_ 00002 #define RecoEcal_EgammaClusterProducers_EgammaHLTIslandClusterProducer_h_ 00003 00004 #include <memory> 00005 #include <time.h> 00006 00007 #include "FWCore/Framework/interface/Frameworkfwd.h" 00008 #include "FWCore/Framework/interface/EDProducer.h" 00009 #include "FWCore/Framework/interface/Event.h" 00010 #include "FWCore/Framework/interface/EventSetup.h" 00011 00012 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00013 00014 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" 00015 #include "RecoEcal/EgammaClusterAlgos/interface/IslandClusterAlgo.h" 00016 #include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h" 00017 #include "RecoEcal/EgammaCoreTools/interface/ClusterShapeAlgo.h" 00018 00019 #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h" 00020 00021 // 00022 00023 00024 class EgammaHLTIslandClusterProducer : public edm::EDProducer 00025 { 00026 public: 00027 00028 EgammaHLTIslandClusterProducer(const edm::ParameterSet& ps); 00029 00030 ~EgammaHLTIslandClusterProducer(); 00031 00032 virtual void produce(edm::Event&, const edm::EventSetup&); 00033 00034 private: 00035 00036 int nMaxPrintout_; // max # of printouts 00037 int nEvt_; // internal counter of events 00038 00039 IslandClusterAlgo::VerbosityLevel verbosity; 00040 00041 bool doBarrel_; 00042 bool doEndcaps_; 00043 bool doIsolated_; 00044 00045 edm::InputTag barrelHitProducer_; 00046 edm::InputTag endcapHitProducer_; 00047 std::string barrelHitCollection_; 00048 std::string endcapHitCollection_; 00049 00050 std::string barrelClusterCollection_; 00051 std::string endcapClusterCollection_; 00052 00053 edm::InputTag l1TagIsolated_; 00054 edm::InputTag l1TagNonIsolated_; 00055 double l1LowerThr_; 00056 double l1UpperThr_; 00057 double l1LowerThrIgnoreIsolation_; 00058 00059 double regionEtaMargin_; 00060 double regionPhiMargin_; 00061 00062 PositionCalc posCalculator_; // position calculation algorithm 00063 IslandClusterAlgo * island_p; 00064 00065 bool counterExceeded() const { return ((nEvt_ > nMaxPrintout_) || (nMaxPrintout_ < 0)); } 00066 00067 const EcalRecHitCollection * getCollection(edm::Event& evt, 00068 const std::string& hitProducer_, 00069 const std::string& hitCollection_); 00070 00071 00072 void clusterizeECALPart(edm::Event &evt, const edm::EventSetup &es, 00073 const std::string& hitProducer, 00074 const std::string& hitCollection, 00075 const std::string& clusterCollection, 00076 const std::vector<EcalEtaPhiRegion>& regions, 00077 const IslandClusterAlgo::EcalPart& ecalPart); 00078 00079 }; 00080 00081 00082 #endif