ATLAS Offline Software
Loading...
Searching...
No Matches
PFClusterWidthCalculator.cxx
Go to the documentation of this file.
2
4
5#include <cmath>
6
8
9
10
11std::pair<double,double> PFClusterWidthCalculator::getPFClusterCoordinateWidth(const std::vector<double>& eta, const std::vector<double>& phi, const double& clusterEta, const double& clusterPhi, unsigned int nCells){
12
13 if (nCells <= 1) {
14 m_etaMean = clusterEta;
15 m_phiMean = clusterPhi;
16 return std::make_pair(m_etaPhiLowerLimit,m_etaPhiLowerLimit);
17 }
18
19 double etaSum(0.0);
20 double etaSum2(0.0);
21 double phiSum(0.0);
22 double phiSum2(0.0);
23
24 for(unsigned int iCell=0; iCell<nCells; ++iCell){
25 etaSum += eta[iCell];
26 etaSum2 += eta[iCell]*eta[iCell];
27 double thisCellPhi = eflowAzimuth(phi[iCell]).cycle(clusterPhi);
28 phiSum += thisCellPhi;
29 phiSum2 += thisCellPhi*thisCellPhi;
30
31 }
32
33 m_etaMean = etaSum/static_cast<double>(nCells);
34 m_phiMean = phiSum/static_cast<double>(nCells);
35
36 double varianceCorrection = (double)nCells / (double)(nCells-1);
37 double etaVariance = std::max(m_etaPhiLowerLimit,varianceCorrection * (etaSum2/static_cast<double>(nCells) - m_etaMean*m_etaMean));
38 double phiVariance = std::max(m_etaPhiLowerLimit,varianceCorrection * (phiSum2/static_cast<double>(nCells) - m_phiMean*m_phiMean));
39
40 return std::make_pair(etaVariance,phiVariance);
41}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
std::pair< double, double > getPFClusterCoordinateWidth(const std::vector< double > &eta, const std::vector< double > &phi, const double &clusterEta, const double &clusterPhi, unsigned int nCells)
eflowAzimuth represents phi and has kinematic functions which correctly deal with phi wraparound etc.
Definition eflowUtil.h:21
double cycle(const eflowAzimuth &other)
Definition eflowUtil.h:51