00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef ATLFAST_FUNCTIONOBJECTS_H
00037 #define ATLFAST_FUNCTIONOBJECTS_H
00038
00039 #include "AtlfastEvent/IKinematic.h"
00040 #include "AtlfastEvent/Phi.h"
00041
00042 #include <cmath>
00043
00044
00045
00046
00047
00048
00049
00050 namespace SortAttribute {
00051 using std::abs;
00052
00053
00054
00055
00062 class AscendingPhi {
00063 public:
00064 bool operator()
00065 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const {
00066 return( a->phi() < b->phi() ) ; }
00067
00068 bool operator()
00069 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00070 { return this->operator() ( &a, &b ) ; }
00071 };
00078 class DescendingPhi {
00079 public:
00080 bool operator()
00081 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00082 { return( a->phi() > b->phi() ) ; }
00083 bool operator()
00084 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00085 { return( a.phi() > b.phi() ) ; }
00086 };
00087
00088
00089
00096 class AscendingEta {
00097 public:
00098 bool operator()
00099 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00100 { return( a->eta() < b->eta() ) ; }
00101 bool operator()
00102 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00103 { return( a.eta() < b.eta() ) ; }
00104 };
00111 class DescendingEta {
00112 public:
00113 bool operator()
00114 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00115 { return( a->eta() > b->eta() ) ; }
00116 bool operator()
00117 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00118 { return( a.eta() > b.eta() ) ; }
00119 };
00120
00121
00122
00123
00130 class AscendingET {
00131 public:
00132
00133
00134 bool operator()
00135 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00136 { return( a->eT() < b->eT() ) ; }
00137 bool operator()
00138 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00139 { return( a.eT() < b.eT() ) ; }
00140
00141
00142 bool operator()
00143 ( const double boundary , const Atlfast::IKinematic* a ) const
00144 { return (boundary < a->eT()) ; }
00145 bool operator()
00146 ( const double boundary , const Atlfast::IKinematic& a ) const
00147 { return (boundary < a.eT()) ; }
00148
00149 };
00156 class DescendingET {
00157 public:
00158 bool operator()
00159 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00160 { return( a->eT() > b->eT() ) ; }
00161 bool operator()
00162 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00163 { return( a.eT() > b.eT() ) ; }
00164 };
00165
00166
00167
00174 class AscendingPT {
00175 public:
00176 bool operator()
00177 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00178 { return( a->pT() < b->pT() ) ; }
00179 bool operator()
00180 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00181 { return( a.pT() < b.pT() ) ; }
00182 };
00189 class DescendingPT {
00190 public:
00191 bool operator()
00192 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00193 { return( a->pT() > b->pT() ) ; }
00194 bool operator()
00195 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00196 { return( a.pT() > b.pT() ) ; }
00197 };
00198
00199
00200
00207 class AscendingMT {
00208 public:
00209 bool operator()
00210 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00211 { return( a->mT() < b->mT() ) ; }
00212 bool operator()
00213 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00214 { return( a.mT() < b.mT() ) ; }
00215 };
00222 class DescendingMT {
00223 public:
00224 bool operator()
00225 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00226 { return( a->mT() > b->mT() ) ; }
00227 bool operator()
00228 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00229 { return( a.mT() > b.mT() ) ; }
00230 };
00231
00232
00239 class DeltaPhi {
00240
00241 private:
00242 Atlfast::IKinematic* ref ;
00243
00244 public:
00245
00246
00247 DeltaPhi( Atlfast::IKinematic* reference ) : ref(reference) {}
00248 DeltaPhi( Atlfast::IKinematic& reference ) : ref(&reference) {}
00249
00250
00251 bool operator()
00252 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const
00253 {
00254 Phi a_dPhi( a->phi() - ref->phi() ) ;
00255 Phi b_dPhi( b->phi() - ref->phi() ) ;
00256
00257 return ( abs(a_dPhi) < abs(b_dPhi) ) ;
00258 }
00259
00260
00261 bool operator()
00262 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00263 { return this->operator() ( &a, &b ) ; }
00264
00265 };
00266
00267
00274 class DeltaEta {
00275
00276 private:
00277 Atlfast::IKinematic* ref ;
00278
00279 public:
00280
00282 DeltaEta( Atlfast::IKinematic* reference ) : ref(reference) {}
00284 DeltaEta( Atlfast::IKinematic& reference ) : ref(&reference) {}
00285
00287 bool operator()
00288 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const {
00289 return(
00290 abs(a->eta() - ref->eta())
00291 <
00292 abs(b->eta() - ref->eta())
00293 );
00294 }
00295
00297 bool operator()
00298 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00299 { return this->operator() ( &a, &b ) ; }
00300
00301 };
00302
00303
00304
00311 class DeltaR {
00312
00313 private:
00314 Atlfast::IKinematic* ref ;
00315
00316 public:
00317
00319 DeltaR( Atlfast::IKinematic* reference ) : ref(reference) {}
00321 DeltaR( Atlfast::IKinematic& reference ) : ref(&reference) {}
00322
00324 bool operator()
00325 ( const Atlfast::IKinematic* a, const Atlfast::IKinematic* b ) const {
00326
00327 Phi a_dPhi( a->phi() - ref->phi() ) ;
00328 Phi b_dPhi( b->phi() - ref->phi() ) ;
00329
00330 double dista =
00331 sqrt(
00332 (a_dPhi*a_dPhi) +
00333 (a->eta() - ref->eta())*(a->eta() - ref->eta())
00334 );
00335
00336 double distb =
00337 sqrt(
00338 (b_dPhi*b_dPhi) +
00339 (b->eta() - ref->eta())*(b->eta() - ref->eta())
00340 );
00341
00342 return ( dista < distb ) ;
00343 }
00344
00345
00347 bool operator()
00348 ( const Atlfast::IKinematic& a, const Atlfast::IKinematic& b ) const
00349 { return this->operator() ( &a, &b ) ; }
00350
00351 };
00352
00353
00354
00355 }
00356
00357
00358
00359
00360
00361
00362
00363 namespace PartitionCondition {
00364
00365
00366
00372 class AboveThresholdET {
00373
00374 public:
00375
00376 AboveThresholdET( double boundary ) : m_boundary(boundary) {}
00378 bool operator() ( const Atlfast::IKinematic* a ) const
00379 { return (m_boundary < a->eT()) ; }
00381 bool operator() ( const Atlfast::IKinematic& a ) const
00382 { return (m_boundary < a.eT()) ; }
00383
00384 private:
00386 double m_boundary ;
00387
00388 };
00394 class BelowThresholdET {
00395
00396 public:
00397
00398 BelowThresholdET( double boundary ) : m_boundary(boundary) {}
00400 bool operator() ( const Atlfast::IKinematic* a ) const
00401 { return (m_boundary > a->eT()) ; }
00403 bool operator() ( const Atlfast::IKinematic& a ) const
00404 { return (m_boundary > a.eT()) ; }
00405
00406 private:
00408 double m_boundary ;
00409
00410 };
00411
00412
00413
00423 class BelowThresholdDeltaR {
00424
00425 public:
00427 BelowThresholdDeltaR( const Atlfast::IKinematic* ref, double barreldRLimit,
00428 double forwarddRLimit = 0, double etaBoundary = 0) :
00429 m_barreldRLimit(barreldRLimit), m_forwarddRLimit(forwarddRLimit),
00430 m_etaBoundary(etaBoundary), m_ref(ref) {}
00431
00432 BelowThresholdDeltaR( const Atlfast::IKinematic& ref, double barreldRLimit,
00433 double forwarddRLimit = 0, double etaBoundary = 0) :
00434 m_barreldRLimit(barreldRLimit), m_forwarddRLimit(forwarddRLimit),
00435 m_etaBoundary(etaBoundary), m_ref(&ref) {}
00436
00437 bool operator() ( const Atlfast::IKinematic* a ) const {
00438 Phi dphi( a->phi() - m_ref->phi() ) ;
00439
00440 double dist =
00441 sqrt(
00442 (dphi*dphi) +
00443 (a->eta() - m_ref->eta())*(a->eta() - m_ref->eta())
00444 );
00445
00446 if (!m_forwarddRLimit){
00447
00448 return (dist < m_barreldRLimit);
00449 }else{
00450
00451 return ( (a->eta()*a->eta() <= m_etaBoundary*m_etaBoundary &&
00452 dist < m_barreldRLimit) ||
00453 ( a->eta()*a->eta() > m_etaBoundary*m_etaBoundary &&
00454 dist < m_forwarddRLimit ) );
00455 }
00456 }
00457
00458 bool operator()
00459 ( const Atlfast::IKinematic& a ) const
00460 { return this->operator()( &a ) ; }
00461
00462 private:
00463 double m_barreldRLimit;
00464 double m_forwarddRLimit;
00465 double m_etaBoundary;
00466 const Atlfast::IKinematic* m_ref ;
00467
00468 };
00469
00470 }
00471
00472
00473
00474
00475 #endif
00476
00477
00478
00479
00480