1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
#ifndef _CENTROID_HH_
#define _CENTROID_HH_
//----------------------------------------------------------------------
// This file distributed with FastJet has been obtained from
// http://www.pa.msu.edu/~huston/Les_Houches_2005/JetClu+Midpoint-StandAlone.tgz
//
// Permission to distribute it with FastJet has been granted by Joey
// Huston (see the COPYING file in the main FastJet directory for
// details).
// Changes from the original file are listed below.
//----------------------------------------------------------------------
// History of changes compared to the original Centroid.hh file
//
// 2009-01-17 Gregory Soyez <soyez@fastjet.fr>
//
// * put the code in the fastjet::cdf namespace
//
// 2008-01-15 Gregory Soyez <soyez@fastjet.fr>
//
// * fixed issues with compilation under VC (definition of M_PI)
//
// 2006-09-24 Gavin Salam <salam@lpthe.jussieu.fr>
//
// * added JetClu+MidPoint to FastJet
#include <cmath>
#ifndef M_PI
#define M_PI 3.141592653589793238462643383279502884197
#endif
#include <fastjet/internal/base.hh>
FASTJET_BEGIN_NAMESPACE
namespace cdf{
class Centroid
{
public:
double Et,eta,phi;
Centroid(): Et(0), eta(0), phi(0) {}
Centroid(double centroidEt, double centroidEta, double centroidPhi): Et(centroidEt), eta(centroidEta), phi(centroidPhi) {}
Centroid(const Centroid& c): Et(c.Et), eta(c.eta), phi(c.phi) {}
void add(Centroid c)
{
double newEt = Et + c.Et;
eta = (Et*eta + c.Et*c.eta)/newEt;
double dPhi = c.phi - phi;
if(dPhi > M_PI)
dPhi -= 2*M_PI;
else if(dPhi < -M_PI)
dPhi += 2*M_PI;
phi += dPhi*c.Et/newEt;
while(phi < 0)
phi += 2*M_PI;
while(phi >= 2*M_PI)
phi -= 2*M_PI;
Et = newEt;
}
void subtract(Centroid c)
{
double newEt = Et - c.Et;
eta = (Et*eta - c.Et*c.eta)/newEt;
double dPhi = c.phi - phi;
if(dPhi > M_PI)
dPhi -= 2*M_PI;
else if(dPhi < -M_PI)
dPhi += 2*M_PI;
phi -= dPhi*c.Et/newEt;
while(phi < 0)
phi += 2*M_PI;
while(phi >= 2*M_PI)
phi -= 2*M_PI;
Et = newEt;
}
bool isEqual(Centroid c)
{
return Et == c.Et && eta == c.eta && phi == c.phi;
}
};
} // namespace cdf
FASTJET_END_NAMESPACE
#endif
|