#ifndef __CMS_ITERATIVE_CONE__SORT_BY_ET_H__
#define __CMS_ITERATIVE_CONE__SORT_BY_ET_H__
//STARTHEADER
// $Id$
//
// Copyright (c) ????-????, CMS collaboration
// Copyright (c) 2009-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez [for the changes listed below]
//
//----------------------------------------------------------------------
// This file distributed with FastJet has been obtained from the CMS
// collaboration, revision 1.2 of the EtComparator.h file in CMSSW,
// see
// http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/PhysicsTools/Utilities/interface/EtComparator.h?hideattic=0&revision=1.2&view=markup
//
// Permission has been granted by the CMS collaboration to release it
// in FastJet under the terms of the GNU Public License(v2) (see the
// COPYING file in the main FastJet directory for details).
// Changes from the original file are listed below.
//
// FastJet is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// The algorithms that underlie FastJet have required considerable
// development and are described in hep-ph/0512210. If you use
// FastJet as part of work towards a scientific publication, please
// include a citation to the FastJet paper.
//
// FastJet is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with FastJet. If not, see .
//----------------------------------------------------------------------
//ENDHEADER
// List of changes compared to the original CMS code (revision 1.2 of
// EtComparator.h)
//
// 2009-01-06 Gregory Soyez
//
// * Extracted (only) NumericSafeGreaterByEt from the CMS code
// and adapted it to act on PseudoJet rather than CMS types
// for 4-momenta
// * Put the code in a fastjet::cms namespace
#include
#include
FASTJET_BEGIN_NAMESPACE
namespace cms{
template
struct NumericSafeGreaterByEt {
typedef T first_argument_type;
typedef T second_argument_type;
bool operator()(const T& a1, const T& a2) {
// FastJet::PseudoJet does not provide a direct access to Et2
// Plus, we want it to be computed in the same way as in the CMS
// code (actually the Root code that is used by CMS)
double et1 = a1.Et();
double et2 = a2.Et();
// now we can come back to the CMS code
return
fabs (et1-et2) > std::numeric_limits::epsilon() ? et1 > et2 :
fabs (a1.px()-a2.px()) > std::numeric_limits::epsilon() ? a1.px() > a2.px() :
a1.pz() > a2.pz();
}
};
} // namespace cms
FASTJET_END_NAMESPACE
#endif // __CMS_ITERATIVE_CONE__SORT_BY_ET_H__