fastjet 2.4.5
Public Member Functions
fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet Class Reference
Inheritance diagram for fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet:
Inheritance graph
[legend]
Collaboration diagram for fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TemporaryJet (float seedET)
 TemporaryJet (float seedET, float y, float phi)
 ~TemporaryJet ()
float dist (TemporaryJet &jet) const
void midpoint (const TemporaryJet &jet, float &y, float &phi) const
bool is_stable (const std::list< const Item * > &itemlist, float radius, float min_ET, int max_iterations=50)

Detailed Description

template<class Item>
class fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet

Definition at line 200 of file ILConeAlgorithm.hpp.


Constructor & Destructor Documentation

template<class Item>
fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet::TemporaryJet ( float  seedET) [inline]

Definition at line 205 of file ILConeAlgorithm.hpp.

: ProtoJet<Item>(seedET) {;}
template<class Item>
fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet::TemporaryJet ( float  seedET,
float  y,
float  phi 
) [inline]

Definition at line 207 of file ILConeAlgorithm.hpp.

                                                 : 
      ProtoJet<Item>(seedET,y,phi) {;}
template<class Item>
fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet::~TemporaryJet ( ) [inline]

Definition at line 210 of file ILConeAlgorithm.hpp.

{;}

Member Function Documentation

template<class Item>
float fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet::dist ( TemporaryJet jet) const [inline]

Definition at line 212 of file ILConeAlgorithm.hpp.

References fastjet::d0::ProtoJet< Item >::phi(), fastjet::d0::RDelta(), and fastjet::d0::ProtoJet< Item >::y().

    {
      return RDelta(this->_y,this->_phi,jet.y(),jet.phi()); 
    }
template<class Item>
bool fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet::is_stable ( const std::list< const Item * > &  itemlist,
float  radius,
float  min_ET,
int  max_iterations = 50 
) [inline]

Definition at line 250 of file ILConeAlgorithm.hpp.

References fastjet::d0::inline_maths::phi(), and fastjet::d0::RD2().

    {
      float radius2 = radius*radius;
      float Rcut= 1.E-06;
      
      
      // ?? if(_Increase_Delta_R) Rcut= 1.E-04;
      bool stable= true;
      int trial= 0;
      float Yst;
      float PHIst;
      do {  
        trial++;
        //std::cout << "   trial " << trial << " " << _y << " " << _phi << std::endl; 
        Yst  = this->_y;
        PHIst= this->_phi;    
        //cout << "is_stable beginning do loop: this->_pT=" << this->_pT << " this->_y=" << this->_y << " this->_phi=" << this->_phi << endl;
        this->erase();
        
        this->setJet(Yst,PHIst,0.0);
        
        
#ifdef ILCA_USE_ORDERED_LIST      
        std::list<const Item*>::const_iterator lower = 
          lower_bound(itemlist.begin(),itemlist.end(),Yst-radius,
                      rapidity_order<Item>());
        std::list<const Item*>::const_iterator upper = 
          upper_bound(itemlist.begin(),itemlist.end(),Yst+radius,
                      rapidity_order<Item>());
        for(std::list<const Item*>::const_iterator tk = lower; tk != upper; ++tk)      {
          //std::cout << " is_stable: item y=" << (*tk)->y() << " phi=" << (*tk)->phi() << " RD2=" << RD2((*tk)->y(),(*tk)->phi(),Yst,PHIst) << " " << Yst-radius << " " << Yst+radius << endl;
          if(RD2((*tk)->y(),(*tk)->phi(),Yst,PHIst) <= radius2) 
            {
              addItem(*tk);
            }
        }       
#else
#ifdef ILCA_USE_MMAP      
        // need to loop only on the subset with   Yst-R < y < Yst+R
        for ( std::multimap<float,const Item*>::const_iterator 
                tk = items.lower_bound(Yst-radius);
              tk != items.upper_bound(Yst+radius); ++tk )
          {
            //std::cout << "     item " << (*tk)->y() << " " << (*tk)->phi() << " " << RD2((*tk)->y(),(*tk)->phi(),Yst,PHIst) << " " << Yst-radius << " " << Yst+radius << endl;
            if(RD2(((*tk).second)->y(),((*tk).second)->phi(),Yst,PHIst) <= radius2) 
              {
                addItem((*tk).second);
              }
          }
        
#else   

        //cout << " is_stable: itemlist.size()=" << itemlist.size() << endl;
        for(typename std::list<const Item*>::const_iterator tk = itemlist.begin(); tk != itemlist.end(); ++tk) 
          {
            //std::cout << "    is_stable: item (*tk)->y()=" << (*tk)->y() << " (*tk)->phi=" << (*tk)->phi() << " RD2=" << RD2((*tk)->y(),(*tk)->phi(),Yst,PHIst) << " Yst-rad=" << Yst-radius << " Yst+rad=" << Yst+radius << endl;
            if(RD2((*tk)->y(),(*tk)->phi(),Yst,PHIst) <= radius2) 
               {
                 //cout << "add item to *tk" << endl;
                this->addItem(*tk);
              }
          }
#endif
#endif      
      
        //std::cout << "is_stable, before update: jet this->_y=" << this->_y << " _phi=" << this->_phi << " _pT=" << this->_pT << " min_ET=" << min_ET << std::endl; 
        this->updateJet();
        //std::cout << "is_stable, after update: jet this->_y=" << this->_y << " _phi=" << this->_phi << " _pT=" << this->_pT << " min_ET=" << min_ET << std::endl; 
        
        if(this->_pT < min_ET ) 
          {
            stable= false;
            break;
          } 
        //cout << "is_stable end while loop: this->_pT=" << this->_pT << " this->_y=" << this->_y << " this->_phi=" << this->_phi << endl;
      } while(RD2(this->_y,this->_phi,Yst,PHIst) >= Rcut && trial <= max_iterations);
      //std::cout << "   trial stable " << trial << " " << stable << std::endl; 
      return stable;
    }
template<class Item>
void fastjet::d0::ILConeAlgorithm< Item >::TemporaryJet::midpoint ( const TemporaryJet jet,
float &  y,
float &  phi 
) const [inline]

Definition at line 217 of file ILConeAlgorithm.hpp.

References fastjet::d0::ProtoJet< Item >::phi(), fastjet::d0::inline_maths::PI, fastjet::d0::ProtoJet< Item >::pT(), fastjet::d0::inline_maths::TWOPI, and fastjet::d0::ProtoJet< Item >::y().

    {
      // Midpoint should probably be computed w/4-vectors but don't 
      // have that info.  Preserving Pt-weighted calculation - JPK
      float pTsum = this->_pT + jet.pT();
      y = (this->_y*this->_pT + jet.y()*jet.pT())/pTsum;

      phi = (this->_phi*this->_pT + jet.phi()*jet.pT())/pTsum;
      // careful with phi-wrap area: convert from [0,2pi] to [-pi,pi]
      //ls: original D0 code, as of 23/Mar/2007
      //if ( abs(phi-this->_phi)>2.0 ) { // assumes cones R=1.14 or smaller, merge within 2R only  
      //ls: abs bug fixed 26/Mar/2007 
      if ( fabs(phi-this->_phi)>2.0 ) { // assumes cones R=1.14 or smaller, merge within 2R only  
        phi = fmod( this->_phi+PI, TWOPI);
        if (phi < 0.0) phi += TWOPI;
        phi -= PI;

        float temp=fmod( jet.phi()+PI, TWOPI);
        if (temp < 0.0) temp += TWOPI;
        temp -= PI;

        phi = (phi*this->_pT + temp*jet.pT()) /pTsum;
      }

      if ( phi < 0. ) phi += TWOPI;
    }

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines