|
fastjet 2.4.3
|
#include <JetSplitMergeTool.hh>
Public Types | |
| typedef Jet::jet_list_t | jetcollection_t |
Public Member Functions | |
| JetSplitMergeTool () | |
| virtual | ~JetSplitMergeTool () |
| virtual int | execute (jetcollection_t *theJets) |
| double | etaTrue (Jet::constit_vect_t::iterator pj) |
| double | phiTrue (Jet::constit_vect_t::iterator pj) |
| void | split_merge () |
Public Attributes | |
| double | m_f |
| jetcollection_t | m_preJet |
| jetcollection_t | m_jet |
| jetcollection_t * | m_jetVec |
| int | m_ctr |
| int | m_dctr |
Definition at line 52 of file JetSplitMergeTool.hh.
Definition at line 55 of file JetSplitMergeTool.hh.
| atlas::JetSplitMergeTool::JetSplitMergeTool | ( | ) |
Definition at line 27 of file JetSplitMergeTool.cc.
: m_f( 0.5 ) {}
| atlas::JetSplitMergeTool::~JetSplitMergeTool | ( | ) | [virtual] |
Definition at line 31 of file JetSplitMergeTool.cc.
{}
| double atlas::JetSplitMergeTool::etaTrue | ( | Jet::constit_vect_t::iterator | pj | ) |
Definition at line 181 of file JetSplitMergeTool.cc.
{
double s = ((*pj)->e() > 0) ? +1.0 : -1.0;
double px = (*pj)->px;
double py = (*pj)->py;
double pz = (*pj)->pz;
double theta = acos(pz*s/sqrt(px*px+py*py+pz*pz));
return -log(tan(theta/2.0));
}
| int atlas::JetSplitMergeTool::execute | ( | jetcollection_t * | theJets | ) | [virtual] |
Definition at line 37 of file JetSplitMergeTool.cc.
References atlas::Jet::addJet(), atlas::clear_list(), atlas::LorentzVector::e(), m_ctr, m_dctr, m_jet, m_preJet, and split_merge().
Referenced by ATLASConePlugin::run_clustering().
{
m_ctr = 0;
m_dctr = 0;
// From the input, collection create a list of Jet//
m_preJet.clear();
m_jet.clear();
jetcollection_t::iterator itrB = theJets->begin();
jetcollection_t::iterator itrE = theJets->end();
double etot =0.;
for (;itrB!=itrE;itrB++) {
Jet* j = new Jet(); j->addJet(*itrB);
m_ctr +=1;
m_preJet.push_back(j);
etot += j->e();
}
// Split Merge Jets//
this->split_merge();
// Empty and re-fill input jetcollection_t //
clear_list(*theJets);
jetcollection_t::iterator it = m_jet.begin();
jetcollection_t::iterator itE = m_jet.end();
for(; it!=itE; ++it){
theJets->push_back(*it);
}
return 1;
}
| double atlas::JetSplitMergeTool::phiTrue | ( | Jet::constit_vect_t::iterator | pj | ) |
Definition at line 191 of file JetSplitMergeTool.cc.
{
double s = ((*pj)->e() > 0) ? +1.0 : -1.0;
double px = (*pj)->px;
double py = (*pj)->py;
return atan2(py*s,px*s);
}
| void atlas::JetSplitMergeTool::split_merge | ( | ) |
Definition at line 82 of file JetSplitMergeTool.cc.
References atlas::JetDistances::deltaPhi(), atlas::Jet::firstConstituent(), atlas::Jet::getConstituentNum(), atlas::jet_from_overlap(), atlas::Jet::lastConstituent(), m_ctr, m_dctr, m_f, m_jet, m_preJet, atlas::LorentzVector::px, atlas::LorentzVector::py, atlas::Jet::removeConstituent(), and atlas::sort_list_et().
Referenced by execute().
{
if ( m_preJet.size() >= 2 ) {
do {
sort_list_et(m_preJet);
jetcollection_t::iterator itr;
jetcollection_t::iterator first = m_preJet.begin();
jetcollection_t::iterator last = m_preJet.end();
itr=first;
++itr;
bool overlap = false;
for (;itr != last;++itr) {
double etaF = (*first)->eta();
double phiF = (*first)->phi();
double etaS = (*itr)->eta();
double phiS = (*itr)->phi();
Jet* oJet = jet_from_overlap( (*first),*itr);
m_ctr +=1;
Jet::constit_vect_t::iterator itro = oJet->firstConstituent();
Jet::constit_vect_t::iterator itroE = oJet->lastConstituent();
if ( oJet->getConstituentNum() != 0 ) {
overlap = true;
// fraction
double f = sqrt(pow(oJet->px,2)+pow(oJet->py,2))/
sqrt(pow((*itr)->px,2)+pow((*itr)->py,2));
// merge
if ( f > m_f) {
// we need to remove constituents !
Jet *j = (*first);
for ( ;itro != itroE; ++itro ) j->removeConstituent(*itro);
(*first)->addJet(*itr);
//m_preJet.remove(*itr);
delete *itr;
m_preJet.erase(itr);
m_dctr +=1;
}
// split
if ( f <= m_f) {
for ( ;itro != itroE; ++itro ) {
// Distance of first jet from ProtoJet
double deta1 = etaF - (*itro)->eta();
double dphi1 = fabs(JetDistances::deltaPhi(phiF,(*itro)->phi()));
double dist1 = pow( deta1 , 2 ) + pow( dphi1 , 2 );
// Distance of second jet from ProtoJet
double deta2 = etaS - (*itro)->eta();
double dphi2 = fabs(JetDistances::deltaPhi(phiS,(*itro)->phi()));
double dist2 = pow( deta2 , 2 ) + pow( dphi2 , 2 );
// Remove protojet from farther Jet
if ( dist1 > dist2 ) (*first)->removeConstituent(*itro);
if ( dist1 <= dist2 ) (*itr)->removeConstituent(*itro);
}
}
// Delete overlap jet
delete oJet;
m_dctr +=1;
break;
}
else {
// Delete overlap jet
delete oJet;
m_dctr +=1;
}
}
if ( overlap == false ) {
m_jet.push_back(*first);
//m_preJet.remove(*first);
m_preJet.erase(first);
}
} while ( m_preJet.size() != 0 );
}
else if ( m_preJet.size() == 1) {
m_jet.push_back( *(m_preJet.begin()) );
}
}
Definition at line 75 of file JetSplitMergeTool.hh.
Referenced by execute(), and split_merge().
Definition at line 76 of file JetSplitMergeTool.hh.
Referenced by execute(), and split_merge().
Definition at line 70 of file JetSplitMergeTool.hh.
Referenced by ATLASConePlugin::run_clustering(), and split_merge().
Definition at line 72 of file JetSplitMergeTool.hh.
Referenced by execute(), and split_merge().
Definition at line 73 of file JetSplitMergeTool.hh.
Definition at line 71 of file JetSplitMergeTool.hh.
Referenced by execute(), and split_merge().
1.7.3