CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/RecoTauTag/HLTProducers/src/L2TauSimpleClustering.cc

Go to the documentation of this file.
00001 #include "RecoTauTag/HLTProducers/interface/L2TauSimpleClustering.h"
00002 #include "Math/GenVector/VectorUtil.h"
00003 
00004 
00005 L2TauSimpleClustering::L2TauSimpleClustering()
00006 {
00007   m_clusterRadius=0.08;
00008 }
00009 
00010 L2TauSimpleClustering::L2TauSimpleClustering(double radius)
00011 {
00012   m_clusterRadius=radius;
00013 }
00014 
00015 L2TauSimpleClustering::~L2TauSimpleClustering()
00016 {}
00017 
00018 
00019 math::PtEtaPhiELorentzVectorCollection 
00020 L2TauSimpleClustering::clusterize(const math::PtEtaPhiELorentzVectorCollection& myRecHits)
00021 {
00022 
00023   math::PtEtaPhiELorentzVectorCollection m_clusters;
00024 
00025    //If we have Hits do Clustering
00026    if(myRecHits.size()>0)
00027      {
00028        //Create the first Cluster by maximum Crystal
00029        m_clusters.push_back(myRecHits[0]);
00030 
00031        //Loop on The Clusters if there are at least two hits
00032        if(myRecHits.size()>=2)
00033        for(math::PtEtaPhiELorentzVectorCollection::const_iterator h = myRecHits.begin()+1;h!=myRecHits.end();++h)
00034        {
00035           //These vars are used to find the nearest clusters to this hits
00036           double dR_min=100;  
00037           int ptr=0;
00038           int ptr_min=-1;
00039          
00040           for(math::PtEtaPhiELorentzVectorCollection::iterator j=m_clusters.begin()+1;j!=m_clusters.end();j++)
00041           {
00042              if(ROOT::Math::VectorUtil::DeltaR(*h,*j)<m_clusterRadius)
00043                 {
00044                   if(ROOT::Math::VectorUtil::DeltaR(*h,*j)<dR_min)
00045                     {
00046                       dR_min=ROOT::Math::VectorUtil::DeltaR(*h,*j);
00047                       ptr_min=ptr;
00048                     }
00049                 }
00050                   ptr++;
00051           }
00052              
00053           //If it does not belong to cluster add a new one else add the Crystal to the Cluster
00054           if(ptr_min==-1)
00055             m_clusters.push_back(*h);
00056           else
00057             m_clusters[ptr_min]+=*h;
00058        }
00059               
00060      }
00061    return m_clusters;
00062 }
00063