24 static const double depth;
25 static const double R_BARREL;
26 static const double R_BARREL2;
27 static const double Z_ENDCAP;
28 static const double R_FORWARD;
29 static const double R_FORWARD2;
30 static const double Z_FORWARD;
31 static const double Z_BIG;
34 const double CaloPoint::depth = 0.1;
35 const double CaloPoint::R_BARREL = (1.-depth)*143.+depth*407.;
36 const double CaloPoint::R_BARREL2 = R_BARREL * R_BARREL;
37 const double CaloPoint::Z_ENDCAP = (1.-depth)*320.+depth*568.;
38 const double CaloPoint::R_FORWARD = Z_ENDCAP /
std::sqrt (std::cosh(3.)*std::cosh(3.) -1.);
39 const double CaloPoint::R_FORWARD2 = R_FORWARD * R_FORWARD;
40 const double CaloPoint::Z_FORWARD = 1100.+depth*165.;
41 const double CaloPoint::Z_BIG = 1.e5;
46 CaloPointZ (
double fZ,
double fEta){
48 static const double ETA_MAX = 5.2;
50 if (fZ > Z_ENDCAP) fZ = Z_ENDCAP-1.;
51 if (fZ < -Z_ENDCAP) fZ = -Z_ENDCAP+1;
53 double tanThetaAbs =
std::sqrt (std::cosh(fEta)*std::cosh(fEta) - 1.);
54 double tanTheta = fEta >= 0 ? tanThetaAbs : -tanThetaAbs;
56 double rEndcap = tanTheta == 0 ? 1.e10 :
57 fEta > 0 ? (Z_ENDCAP - fZ) / tanTheta : (-Z_ENDCAP - fZ) / tanTheta;
58 if (rEndcap > R_BARREL) {
60 mZ = fZ + R_BARREL * tanTheta;
64 if (rEndcap > R_FORWARD) zRef = Z_ENDCAP;
65 else if (std::fabs (fEta) <
ETA_MAX) zRef = Z_FORWARD;
67 mZ = fEta > 0 ? zRef : -zRef;
68 mR = std::fabs ((mZ - fZ) / tanTheta);
71 double etaReference (
double fZ) {
76 double thetaReference (
double fZ) {
81 double z()
const {
return mZ;}
82 double r()
const {
return mR;}
91 template<
typename Po
int>
94 template<
typename Vector,
typename Po
int2>
95 CaloPoint3D(
const Point2 &vertex,
const Vector &
dir)
100 int side = dir.z() < -1
e-9 ? -1 : dir.z() > 1
e-9 ? +1 : 0;
102 double dirR = dir.Rho();
105 double dirUnit[2] = { dir.x() / dirR, dir.y() / dirR };
110 double vtxLong = dirUnit[0] * vertex.x() + dirUnit[1] * vertex.y();
113 double tIP = dirUnit[0] * vertex.y() - dirUnit[1] * vertex.x();
119 double slope = dirR / dir.z();
122 r = vtxLong + slope * (side * Z_ENDCAP - vertex.z());
125 if (r2 < R_FORWARD2) {
127 r = vtxLong + slope * (side * Z_FORWARD - vertex.z());
128 z = side * Z_FORWARD;
129 }
else if (r2 < R_BARREL2) {
140 double slope = dir.z() / dirR;
142 z = vertex.z() + slope * (r - vtxLong);
146 point =
Point(dirUnit[0] * r - dirUnit[1] * tIP,
147 dirUnit[1] * r + dirUnit[0] * tIP,
151 const Point &caloPoint()
const {
return point; }
163 const Point& fVertex,
170 for (
unsigned i = 0;
i < fConstituents.size ();
i++) {
176 const Point& fVertex)
186 double phiRef =
phi();
192 double sumEtaPhi = 0;
193 int i = towers.size();
195 double eta = towers[
i]->eta();
197 double weight = towers[
i]->et();
200 sumEta2 += eta * eta *
weight;
202 sumPhi2 += phi * phi *
weight;
203 sumEtaPhi += eta * phi *
weight;
207 result.
etaMean = sumEta / sumw;
209 result.
etaEtaMoment = (sumEta2 - sumEta * sumEta / sumw) / sumw;
210 result.
phiPhiMoment = (sumPhi2 - sumPhi * sumPhi / sumw) / sumw;
211 result.
etaPhiMoment = (sumEtaPhi - sumEta * sumPhi / sumw) / sumw;
229 int i = towers.size();
231 double value = towers[
i]->eta();
232 double weight = towers[
i]->et();
235 sum2 += value * value *
weight;
237 return sumw > 0 ? (sum2 - sum*sum/sumw ) / sumw : 0;
242 double phiRef =
phi();
247 int i = towers.size();
250 double weight = towers[
i]->et();
253 sum2 += value * value *
weight;
255 return sumw > 0 ? (sum2 - sum*sum/sumw ) / sumw : 0;
260 double phiRef =
phi();
266 int i = towers.size();
268 double valueA = towers[
i]->eta();
269 double valueB =
deltaPhi (towers[i]->
phi(), phiRef);
270 double weight = towers[
i]->et();
274 sumAB += valueA * valueB *
weight;
276 return sumw > 0 ? (sumAB - sumA*sumB/sumw ) / sumw : 0;
283 int i = towers.size ();
285 double r =
deltaR (*
this, *(towers[i]));
286 if (r >= fRmin && r < fRmax) result += towers[
i]->et ();
294 if (fFraction >= 1)
return towers.size();
296 for (
unsigned i = 0;
i < towers.size(); ++
i) totalEt += towers[
i]->
et();
297 double fractionEnergy = totalEt * fFraction;
299 for (; result < towers.size(); ++
result) {
300 fractionEnergy -= towers[
result]->et();
301 if (fractionEnergy <= 0)
return result+1;
310 for (
unsigned i = 0;
i < towers.size(); ++
i) {
312 if (dR > result) result =
dR;
320 CaloPointZ refPoint (0., fDetectorEta);
321 return refPoint.etaReference (fZVertex);
327 CaloPointZ refPoint (fZVertex, fPhysicsEta);
328 return refPoint.etaReference (0.);
332 CaloPoint3D<Point> caloPoint(oldVertex,inParticle.
momentum());
333 Vector physicsDir = caloPoint.caloPoint() - newVertex;
341 CaloPoint3D<Point> caloPoint(vertex,inParticle.
momentum());
343 Vector detectorDir = caloPoint.caloPoint() -
np;
360 std::vector<const Candidate*>
result;
362 for (
int i = 0;
i < nDaughters; ++
i) {
377 for(
unsigned iConst=0; iConst<constituents.size(); ++iConst ) {
379 float pt = constituents[iConst]->p4().Pt();
387 float ptD_value = (sum_pt>0.) ?
sqrt( sum_pt2 / (sum_pt*sum_pt) ) : 0.;
401 float sum_pt2deltaR2 = 0.;
403 for(
unsigned iConst=0; iConst<constituents.size(); ++iConst ) {
407 float pt = thisConstituent.Pt();
409 double dR =
deltaR (*
this, *(constituents[iConst]));
410 float pt2deltaR2 = pt*pt*dR*
dR;
413 sum_pt2deltaR2 += pt2deltaR2;
417 float rmsCand_value = (sum_pt2>0.) ? sum_pt2deltaR2/sum_pt2 : 0.;
419 return rmsCand_value;
426 std::ostringstream
out;
427 out <<
"Jet p/px/py/pz/pt: " <<
p() <<
'/' <<
px () <<
'/' <<
py() <<
'/' <<
pz() <<
'/' <<
pt() << std::endl
428 <<
" eta/phi: " <<
eta () <<
'/' <<
phi () << std::endl
430 out <<
" Constituents:" << std::endl;
434 out <<
" #" <<
index <<
" p/pt/eta/phi: "
435 << constituent->p() <<
'/' << constituent->pt() <<
'/' << constituent->eta() <<
'/' << constituent->phi()
436 <<
" productId/index: " << constituent.
id() <<
'/' << constituent.
key() << std::endl;
439 out <<
" #" <<
index <<
" constituent is not available in the event" << std::endl;
virtual double p() const
magnitude of momentum vector
float etInAnnulus(float fRmin, float fRmax) const
ET in annulus between rmin and rmax around jet direction.
virtual double energy() const =0
energy
math::XYZVector Vector
point in the space
static float detectorEta(float fZVertex, float fPhysicsEta)
static function to convert physics eta to detector eta
virtual double et() const
transverse energy
CandidatePtr daughterPtr(size_type i) const
reference to daughter at given position
static const double slope[3]
int nCarrying(float fFraction) const
return # of constituent carrying fraction of energy
virtual void setP4(const LorentzVector &p4)
set 4-momentum
std::vector< Constituent > Constituents
virtual void scaleEnergy(double fScale)
scale energy of the jet
EtaPhiMoments etaPhiStatistics() const
eta-phi statistics, ET weighted
virtual double eta() const
momentum pseudorapidity
double deltaR(double eta1, double phi1, double eta2, double phi2)
float etaphiMoment() const
eta-phi second moment, ET weighted
float maxDistance() const
maximum distance from jet to constituent
bool isNonnull() const
Checks for non-null.
virtual Vector momentum() const =0
spatial momentum vector
virtual size_t numberOfDaughters() const
number of daughters
record to store eta-phi first and second moments
ProductID id() const
Accessor for product ID.
float constituentEtaPhiSpread() const
double deltaPhi(double phi1, double phi2)
float etaetaMoment() const
eta-eta second moment, ET weighted
unsigned int index
index type
float constituentPtDistribution() const
virtual double px() const
x coordinate of momentum vector
virtual double pt() const
transverse momentum
virtual std::vector< const reco::Candidate * > getJetConstituentsQuick() const
quick list of constituents
float phiphiMoment() const
phi-phi second moment, ET weighted
virtual double pz() const
z coordinate of momentum vector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
static Candidate::LorentzVector detectorP4(const Candidate::Point &vertex, const Candidate &inParticle)
static Candidate::LorentzVector physicsP4(const Candidate::Point &newVertex, const Candidate &inParticle, const Candidate::Point &oldVertex=Candidate::Point(0, 0, 0))
virtual int nConstituents() const
of constituents
Square< F >::type sqr(const F &f)
void addDaughter(const CandidatePtr &)
add a daughter via a reference
Jet()
Default constructor.
math::XYZPoint Point
point in the space
virtual std::string print() const
Print object.
virtual double phi() const
momentum azimuthal angle
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
static float physicsEta(float fZVertex, float fDetectorEta)
static function to convert detector eta to physics eta
virtual double py() const
y coordinate of momentum vector
virtual const Candidate * daughter(size_type) const
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
math::XYZPoint Point
point in the space
virtual Constituents getJetConstituents() const
list of constituents