41 #include "JetSplitMergeTool.hh"
43 #include "JetDistances.hh"
44 #include "CommonUtils.hh"
46 #include <fastjet/internal/base.hh>
48 FASTJET_BEGIN_NAMESPACE
52 JetSplitMergeTool::JetSplitMergeTool()
56 JetSplitMergeTool::~JetSplitMergeTool()
62 int JetSplitMergeTool::execute( jetcollection_t* theJets )
73 jetcollection_t::iterator itrB = theJets->begin();
74 jetcollection_t::iterator itrE = theJets->end();
77 for (;itrB!=itrE;itrB++) {
78 Jet* j =
new Jet(); j->addJet(*itrB);
80 m_preJet.push_back(j);
94 jetcollection_t::iterator it = m_jet.begin();
95 jetcollection_t::iterator itE = m_jet.end();
97 theJets->push_back(*it);
107 void JetSplitMergeTool::split_merge()
109 if ( m_preJet.size() >= 2 ) {
111 sort_list_et(m_preJet);
113 jetcollection_t::iterator itr;
114 jetcollection_t::iterator first = m_preJet.begin();
115 jetcollection_t::iterator last = m_preJet.end();
119 bool overlap =
false;
121 for (;itr != last;++itr) {
122 double etaF = (*first)->eta();
123 double phiF = (*first)->phi();
124 double etaS = (*itr)->eta();
125 double phiS = (*itr)->phi();
127 Jet* oJet = jet_from_overlap( (*first),*itr);
130 Jet::constit_vect_t::iterator itro = oJet->firstConstituent();
131 Jet::constit_vect_t::iterator itroE = oJet->lastConstituent();
133 if ( oJet->getConstituentNum() != 0 ) {
137 double f = sqrt(pow(oJet->px,2)+pow(oJet->py,2))/
138 sqrt(pow((*itr)->px,2)+pow((*itr)->py,2));
144 for ( ;itro != itroE; ++itro ) j->removeConstituent(*itro);
145 (*first)->addJet(*itr);
154 for ( ;itro != itroE; ++itro ) {
156 double deta1 = etaF - (*itro)->eta();
157 double dphi1 = fabs(JetDistances::deltaPhi(phiF,(*itro)->phi()));
158 double dist1 = pow( deta1 , 2 ) + pow( dphi1 , 2 );
161 double deta2 = etaS - (*itro)->eta();
162 double dphi2 = fabs(JetDistances::deltaPhi(phiS,(*itro)->phi()));
163 double dist2 = pow( deta2 , 2 ) + pow( dphi2 , 2 );
166 if ( dist1 > dist2 ) (*first)->removeConstituent(*itro);
167 if ( dist1 <= dist2 ) (*itr)->removeConstituent(*itro);
182 if ( overlap ==
false ) {
183 m_jet.push_back(*first);
185 m_preJet.erase(first);
188 }
while ( m_preJet.size() != 0 );
190 else if ( m_preJet.size() == 1) {
191 m_jet.push_back( *(m_preJet.begin()) );
206 double JetSplitMergeTool::etaTrue(Jet::constit_vect_t::iterator pj)
208 double s = ((*pj)->e() > 0) ? +1.0 : -1.0;
209 double px = (*pj)->px;
210 double py = (*pj)->py;
211 double pz = (*pj)->pz;
212 double theta = acos(pz*s/sqrt(px*px+py*py+pz*pz));
213 return -log(tan(theta/2.0));
216 double JetSplitMergeTool::phiTrue(Jet::constit_vect_t::iterator pj)
218 double s = ((*pj)->e() > 0) ? +1.0 : -1.0;
219 double px = (*pj)->px;
220 double py = (*pj)->py;
221 return atan2(py*s,px*s);
226 FASTJET_END_NAMESPACE