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