00001 #ifndef L1GCTHARDWAREJETFINDER_H_ 00002 #define L1GCTHARDWAREJETFINDER_H_ 00003 00004 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctJetFinderBase.h" 00005 00006 #include <boost/cstdint.hpp> //for uint16_t 00007 #include <vector> 00008 00014 /* 00015 * \author Greg Heath 00016 * \date June 2006 00017 */ 00018 00019 00020 00021 class L1GctHardwareJetFinder : public L1GctJetFinderBase 00022 { 00023 public: 00024 00026 L1GctHardwareJetFinder(int id); 00027 00028 ~L1GctHardwareJetFinder(); 00029 00031 friend std::ostream& operator << (std::ostream& os, const L1GctHardwareJetFinder& algo); 00032 00034 virtual void reset(); 00035 00037 virtual void fetchInput(); 00038 00040 virtual void process(); 00041 00042 protected: 00043 00044 // Each jetFinder must define the constants as private and copy the 00045 // function definitions below. 00046 virtual unsigned maxRegionsIn() const { return MAX_REGIONS_IN; } 00047 virtual unsigned centralCol0() const { return CENTRAL_COL0; } 00048 virtual unsigned nCols() const { return N_COLS; } 00049 00050 private: 00051 00053 static const unsigned int MAX_REGIONS_IN; 00054 static const unsigned int N_COLS; 00055 static const unsigned int CENTRAL_COL0; 00056 00058 RegionsVector m_localMaxima; 00060 RegionsVector m_clusters; 00061 00063 unsigned m_numberOfClusters; 00064 00065 // Additional clusters to avoid double counting of jets across eta=0 00066 RegionsVector m_localMax00; 00067 RegionsVector m_cluster00; 00068 00070 void findProtoJets(); 00071 L1GctRegion makeProtoJet(L1GctRegion localMax); 00073 void findJets(); 00074 00076 void findLocalMaxima(); 00078 void findProtoClusters(); 00080 void findFinalClusters(); 00081 00083 void convertClustersToProtoJets(); 00085 void convertClustersToOutputJets(); 00086 00087 }; 00088 00089 std::ostream& operator << (std::ostream& os, const L1GctHardwareJetFinder& algo); 00090 00091 #endif /*L1GCTHARDWAREJETFINDER_H_*/