![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
11 #ifndef FOURMOMUTILS_P4HELPERS_H
12 #define FOURMOMUTILS_P4HELPERS_H
58 const double mom1 = p1.
p();
const double pz1 = p1.
pz();
59 const double mom2 = p2.
p();
const double pz2 = p2.
pz();
60 if ( ( mom1 + pz1 ) * ( mom2 - pz2 ) > 0 )
62 * ( mom2 + pz2 ) / ( mom2 - pz2 ) );
66 const double mom1 = p1.
p();
const double pz1 = p1.
pz();
72 const double mom2 = p2.
p();
const double pz2 = p2.
pz();
90 const double mom1 = p1.
p();
const double pz1 = p1.
pz();
91 const double mom2 = p2.
p();
const double pz2 = p2.
pz();
92 if ( ( mom1 + pz1 ) * ( mom2 - pz2 ) > 0 )
94 dEtaSq =
std::log( ( mom1 - pz1 ) / ( mom1 + pz1 )
95 * ( mom2 + pz2 ) / ( mom2 - pz2 ) );
96 dEtaSq = 0.25 * dEtaSq * dEtaSq;
101 const double mom1 = p1.
p();
const double pz1 = p1.
pz();
102 if ( mom1 + pz1 > 0 )
104 dEtaSq = - 0.5 *
std::log( ( mom1 - pz1 ) / ( mom1 + pz1 ) ) - p2.
eta();
105 dEtaSq = dEtaSq * dEtaSq;
110 const double mom2 = p2.
p();
const double pz2 = p2.
pz();
111 if ( mom2 - pz2 > 0 )
113 dEtaSq = p1.
eta() - 0.5 *
std::log( ( mom2 + pz2 ) / ( mom2 - pz2 ) );
114 dEtaSq = dEtaSq * dEtaSq;
119 dEtaSq = p1.
eta() - p2.
eta();
120 dEtaSq = dEtaSq * dEtaSq;
146 double xp = pA.
px() * pB.
px() ;
150 xyp1 = 1.0 + pA.
py() * pB.
py() / xp ;
156 if ( pA.
py() / pA.
px() > 0 )
177 double cosPhi = ( pA.
px() * pB.
px() + pA.
py() * pB.
py() ) / pA.
pt() / pB.
pt();
178 double phi = acos(cosPhi);
184 dPhiSq = dPhiSq * dPhiSq;
211 return sqrt( dEtaSq + dPhiSq );
229 if (
dPhi > dR )
return false;
231 if (
dEta > dR )
return false;
233 if (
deltaR2 > dR*dR )
return false;
240 {
return (pA.
hlv()+pB.
hlv()).m(); }
245 {
return invMass( *pA, *pB ); }
257 {
return invMass( *pA, *pB, *pC, *pD ); }
264 template<
class Iterator_t,
class Predicate_t>
266 void sort( Iterator_t itr, Iterator_t itrEnd, Predicate_t
p )
271 return sort( itr, itrEnd,
p );
275 template<
class Container_t,
class Predicate_t>
277 void sort( Container_t& container, Predicate_t
p )
290 template <
class Container_t>
293 Container_t& coll, std::size_t&
index,
double&
deltaR )
296 bool l_return =
false;
297 std::size_t l_idx = 0;
298 typename Container_t::const_iterator
it = coll.begin();
299 typename Container_t::const_iterator
itE = coll.end();
300 for (;
it !=
itE; ++
it,++l_idx) {
315 template <
class Container_t>
318 Container_t& coll, std::size_t&
index,
double&
deltaR )
329 template <
class Container_t>
332 Container_t& coll, std::size_t&
index,
333 double &
deltaR,
double &deltaE )
337 bool l_return =
false;
338 std::size_t l_idx = 0;
339 typename Container_t::const_iterator
it = coll.begin();
340 typename Container_t::const_iterator
itE = coll.end();
341 for (;
it !=
itE; ++
it,++l_idx) {
342 const double dE = abs( ene - (*it)->e() );
361 template <
class Container_t>
364 Container_t& coll, std::size_t&
index,
365 double &
deltaR,
double &deltaE )
376 #endif // FOURMOMUTILS_P4HELPERS_H
virtual double py() const =0
y component of momentum
double deltaEtaSq(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
bool closestDeltaR(const double eta, const double phi, Container_t &coll, std::size_t &index, double &deltaR)
Find the closest element in a collection to an I4Momentum.
double invMass(const I4Momentum &pA, const I4Momentum &pB)
invariant mass from two I4momentum references
Scalar phi() const
phi method
Scalar eta() const
pseudorapidity method
virtual double p() const =0
momentum magnitude
P4Helpers provides static helper functions for kinematic calculation on objects deriving from I4Momen...
double deltaR2(double rapidity1, double phi1, double rapidity2, double phi2)
from bare rapidity,phi
bool isInDeltaR(const I4Momentum &p1, const I4Momentum &p2, double dR)
Check if 2 I4Momentum are in a cone.
virtual double pt() const =0
transverse momentum
virtual CLHEP::HepLorentzVector hlv() const =0
CLHEP HepLorentzVector.
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
virtual double pz() const =0
z component of momentum
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
virtual double e() const =0
energy
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Workaround x86 precision issues for FP inequality comparisons.
virtual double eta() const =0
pseudo rapidity
double deltaR(const I4Momentum &p4, double eta, double phi)
from 1 I4Momentum
virtual double phi() const =0
phi in [-pi,pi[
virtual Kind kind() const =0
tells what kind of P4XYZT this is
double deltaPhiSq(const I4Momentum &pA, const I4Momentum &pB)
delta Phi squared in range ([-pi,pi[)^2 from two I4momentum references
std::vector< std::string > remainder(const std::vector< std::string > &v1, const std::vector< std::string > &v2)
list of entries in a vector that are not in another
bool less(double a, double b)
Compare two FP numbers, working around x87 precision issues.
void sort(Iterator_t itr, Iterator_t itrEnd, Predicate_t p)
sort a container according to the given predicate
void sort(Container_t &container, Predicate_t p)
sort a container according to the given predicate
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
virtual double px() const =0
x component of momentum