00001
00002
00003
00004
00006 #ifndef FOURMOMUTILS_P4DESCENDINGSORTERS_H
00007 #define FOURMOMUTILS_P4DESCENDINGSORTERS_H
00008
00009
00010 #ifndef XAOD_ANALYSIS
00011
00012
00013 #include <functional>
00014 #include <cmath>
00015
00016
00017
00018
00019 #include "CxxUtils/fpcompare.h"
00020
00021
00022 #include "EventKernel/I4Momentum.h"
00023
00024
00025
00026 namespace P4Sorters {
00027 typedef std::binary_function< const I4Momentum*,
00028 const I4Momentum*,
00029 bool
00030 >
00031 I4MomPredicate_t;
00032
00033 namespace Descending {
00034
00035 class Px : public I4MomPredicate_t
00036 {
00037 public:
00038 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00039 return CxxUtils::fpcompare::greater( a->px(), b->px() );
00040 }
00041 };
00042
00043 class Py : public I4MomPredicate_t
00044 {
00045 public:
00046 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00047 return CxxUtils::fpcompare::greater( a->py(), b->py() );
00048 }
00049 };
00050
00051 class Pz : public I4MomPredicate_t
00052 {
00053 public:
00054 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00055 return CxxUtils::fpcompare::greater( a->pz(), b->pz() );
00056 }
00057 };
00058
00059
00060 class Mass : public I4MomPredicate_t
00061 {
00062 public:
00063 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00064 return CxxUtils::fpcompare::greater( a->m(), b->m() );
00065 }
00066 };
00067
00068 class MassSquared : public I4MomPredicate_t
00069 {
00070 public:
00071 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00072 return CxxUtils::fpcompare::greater( a->m2(), b->m2() );
00073 }
00074 };
00075
00076 class Momentum : public I4MomPredicate_t
00077 {
00078 public:
00079 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00080 return CxxUtils::fpcompare::greater( a->p(), b->p() );
00081 }
00082 };
00083
00084 class MomentumSquared : public I4MomPredicate_t
00085 {
00086 public:
00087 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00088 return CxxUtils::fpcompare::greater( a->p2(), b->p2() );
00089 }
00090 };
00091
00092 class Eta : public I4MomPredicate_t
00093 {
00094 public:
00095 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00096 return CxxUtils::fpcompare::greater( a->eta(), b->eta() );
00097 }
00098 };
00099
00100 class AbsEta : public I4MomPredicate_t
00101 {
00102 public:
00103 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00104 using std::abs;
00105 return CxxUtils::fpcompare::greater( abs(a->eta()), abs(b->eta()) );
00106 }
00107 };
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 class Ene : public I4MomPredicate_t
00119 {
00120 public:
00121 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00122 return CxxUtils::fpcompare::greater( a->e(), b->e() );
00123 }
00124 };
00125
00126 class Et : public I4MomPredicate_t
00127 {
00128 public:
00129 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00130 return CxxUtils::fpcompare::greater( a->et(), b->et() );
00131 }
00132 };
00133
00134 class Pt : public I4MomPredicate_t
00135 {
00136 public:
00137 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00138 return CxxUtils::fpcompare::greater( a->pt(), b->pt() );
00139 }
00140 };
00141
00142 class InvPt : public I4MomPredicate_t
00143 {
00144 public:
00145 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00146 return CxxUtils::fpcompare::greater( a->iPt(), b->iPt() );
00147 }
00148 };
00149
00150
00151 class CosTh : public I4MomPredicate_t
00152 {
00153 public:
00154 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00155 return CxxUtils::fpcompare::greater( a->cosTh(), b->cosTh() );
00156 }
00157 };
00158
00159 class SinTh : public I4MomPredicate_t
00160 {
00161 public:
00162 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00163 return CxxUtils::fpcompare::greater( a->sinTh(), b->sinTh() );
00164 }
00165 };
00166
00167 class CotTh : public I4MomPredicate_t
00168 {
00169 public:
00170 bool operator()( const I4Momentum* a, const I4Momentum* b ) {
00171 return CxxUtils::fpcompare::greater( a->cotTh(), b->cotTh() );
00172 }
00173 };
00174
00175 }
00176 }
00177
00178 #endif
00179
00180 #endif //> FOURMOMUTILS_P4DESCENDINGSORTERS_H