File indexing completed on 2024-04-06 12:25:05
0001 #include "RecoEgamma/EgammaTools/interface/HGCalClusterTools.h"
0002
0003 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
0004 #include "DataFormats/Math/interface/deltaR.h"
0005 #include "DataFormats/Math/interface/deltaPhi.h"
0006
0007 float HGCalClusterTools::energyInCone(const float eta,
0008 const float phi,
0009 const std::vector<reco::CaloCluster>& layerClusters,
0010 const float minDR,
0011 const float maxDR,
0012 const float minEt,
0013 const float minEnergy,
0014 const std::vector<DetId::Detector>& subDets,
0015 const HGCalClusterTools::EType& eType) {
0016 float hadValue = 0.;
0017
0018 const float minDR2 = minDR * minDR;
0019 const float maxDR2 = maxDR * maxDR;
0020
0021 for (auto& clus : layerClusters) {
0022 if (clus.energy() < minEnergy) {
0023 continue;
0024 }
0025
0026 if (std::find(subDets.begin(), subDets.end(), clus.seed().det()) == subDets.end()) {
0027 continue;
0028 }
0029
0030 float clusEt = clus.energy() * std::sin(clus.position().theta());
0031 if (clusEt < minEt) {
0032 continue;
0033 }
0034
0035
0036
0037 float dPhi = reco::deltaPhi(phi, clus.phi());
0038 if (dPhi > maxDR) {
0039 continue;
0040 }
0041
0042 float dR2 = reco::deltaR2(eta, phi, clus.eta(), clus.phi());
0043 if (dR2 < minDR2 || dR2 > maxDR2) {
0044 continue;
0045 }
0046 switch (eType) {
0047 case EType::ET:
0048 hadValue += clusEt;
0049 break;
0050 case EType::ENERGY:
0051 hadValue += clus.energy();
0052 break;
0053 }
0054 }
0055 return hadValue;
0056 }