JetConeFinderTool.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <iostream>
00017
00018 #include "JetConeFinderTool.hh"
00019 #include "Jet.hh"
00020 #include "JetDistances.hh"
00021 #include "CommonUtils.hh"
00022
00023 #include <vector>
00024 #include <math.h>
00025
00026 #include <fastjet/internal/base.hh>
00027
00028 FASTJET_BEGIN_NAMESPACE
00029
00030 namespace atlas {
00031
00032
00033 double GeV = 1.0;
00034
00035 JetConeFinderTool::JetConeFinderTool() :m_coneR(0.7)
00036 , m_ptcut(0.0*GeV)
00037 , m_eps(0.05)
00038 , m_seedPt(2.0*GeV)
00039 , m_etaMax(5.0)
00040 {}
00041
00042 JetConeFinderTool::~JetConeFinderTool()
00043 {}
00044
00046
00048 int JetConeFinderTool::execute(jetcollection_t & theJets)
00049 {
00050 sort_jet_list<JetSorter_Et>(theJets);
00051
00052 m_pjetV = &theJets;
00053
00054 if(theJets.size()==0) return 0;
00055
00056
00057 m_ctr = 0;
00058 m_dctr = 0;
00059
00061
00063 this->reconstruct();
00064
00066
00068 clear_list(theJets);
00069 jetcollection_t::iterator it = m_jetOV->begin();
00070 jetcollection_t::iterator itE = m_jetOV->end();
00071 for(; it!=itE; ++it){
00072 theJets.push_back(*it);
00073 }
00074
00075
00076 delete m_jetOV;
00077 return 1;
00078 }
00079
00081
00083
00084 void
00085 JetConeFinderTool::reconstruct()
00086 {
00087 m_jetOV = new jetcollection_t();
00088
00089 jetcollection_t::iterator tItr;
00090 jetcollection_t::iterator tItr_begin = m_pjetV->begin();
00091 jetcollection_t::iterator tItr_end = m_pjetV->end();
00092
00093
00094
00095 for ( tItr=tItr_begin; tItr!=tItr_end; ++tItr ) {
00096
00097
00098 double tEt = (*tItr)->et();
00099 if ( tEt < m_seedPt ) break;
00100
00101
00102 double etaT = (*tItr)->eta();
00103 double phiT = (*tItr)->phi();
00104
00105
00106 bool stable = false;
00107 bool inGeom = true;
00108
00109 Jet* preJet;
00110
00111 int count = 1;
00112 do {
00113
00114
00115 preJet = calc_cone(etaT,phiT);
00116 double etaC = preJet->eta();
00117 double phiC = preJet->phi();
00118
00119 double deta = fabs(etaT - etaC);
00120 double dphi = fabs(JetDistances::deltaPhi(phiT,phiC));
00121
00122
00123 if ( deta < m_eps && dphi < m_eps )
00124 stable = true;
00125
00126
00127 if ( fabs(etaC) > m_etaMax )
00128 inGeom = false;
00129
00130 etaT = etaC;
00131 phiT = phiC;
00132
00133 if ( !stable && inGeom ) {
00134 delete preJet;
00135 m_dctr +=1;
00136 }
00137 ++count;
00138
00139 }while ( !stable && inGeom && count < 10 );
00140
00141 if ( count > 9 && (!stable && inGeom) ) continue;
00142
00143
00144
00145
00146 if ( stable && inGeom ) {
00147 jetcollection_t::iterator pItr = m_jetOV->begin();
00148 jetcollection_t::iterator pItrE = m_jetOV->end();
00149
00150 bool newJet = true;
00151 double etaT = preJet->eta();
00152 double phiT = preJet->phi();
00153
00154 for ( ; pItr != pItrE ; ++pItr ) {
00155 double etaC = (*pItr)->eta();
00156 double phiC = (*pItr)->phi();
00157
00158 double deta = fabs(etaT - etaC);
00159 double dphi = fabs(JetDistances::deltaPhi(phiT,phiC));
00160
00161 if ( deta < 0.05 && dphi < 0.05 ) {
00162 newJet = false;
00163 break;
00164 }
00165 }
00166 if ( newJet ) {
00167 m_jetOV->push_back( preJet );
00168 }
00169 else {
00170 delete preJet;
00171 m_dctr +=1;
00172 }
00173 }
00174 else {
00175 delete preJet;
00176 m_dctr +=1;
00177 }
00178 }
00179 }
00180
00181 Jet* JetConeFinderTool::calc_cone(double eta, double phi)
00182 {
00183
00184 Jet* j = new Jet();
00185 m_ctr +=1;
00186
00187
00188 jetcollection_t::iterator itr = m_pjetV->begin();
00189 jetcollection_t::iterator itrE = m_pjetV->end();
00190
00191 for ( ; itr!=itrE; ++itr ) {
00192 double dR = JetDistances::deltaR(eta,phi,(*itr)->eta(),(*itr)->phi());
00193 if ( dR < m_coneR ) {
00194 j->addJet( (*itr) );
00195 }
00196 }
00197
00198 return j;
00199 }
00200
00201
00202
00203 }
00204
00205 FASTJET_END_NAMESPACE