File indexing completed on 2024-04-06 12:26:39
0001 #ifndef RECOMET_METALGORITHMS_ECALHALOALGO_H
0002 #define RECOMET_METALGORITHMS_ECALHALOALGO_H
0003
0004
0005
0006
0007
0008
0009 #include "DataFormats/METReco/interface/EcalHaloData.h"
0010
0011 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0012 #include "DataFormats/GeometrySurface/interface/BoundPlane.h"
0013 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0014 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
0015 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0016 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
0017 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0018
0019 #include "DataFormats/DetId/interface/DetId.h"
0020 #include "DataFormats/CaloRecHit/interface/CaloRecHit.h"
0021
0022 #include "Geometry/CaloTopology/interface/EcalBarrelTopology.h"
0023 #include "Geometry/CaloTopology/interface/EcalEndcapTopology.h"
0024 #include "DataFormats/CaloRecHit/interface/CaloID.h"
0025 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0026 #include "DataFormats/EcalDetId/interface/EEDetId.h"
0027 #include "DataFormats/EcalDetId/interface/ESDetId.h"
0028 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0029 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
0030 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
0031 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
0032
0033 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
0034 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
0035 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
0036 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
0037 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
0038 #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h"
0039 #include "DataFormats/EgammaCandidates/interface/Photon.h"
0040 #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h"
0041 #include "DataFormats/HcalRecHit/interface/HcalRecHitDefs.h"
0042 #include "DataFormats/METReco/interface/HaloClusterCandidateECAL.h"
0043
0044 class EcalHaloAlgo {
0045 public:
0046
0047 explicit EcalHaloAlgo(edm::ConsumesCollector iC);
0048
0049 ~EcalHaloAlgo() {}
0050
0051
0052 reco::EcalHaloData Calculate(const CaloGeometry& TheCaloGeometry,
0053 edm::Handle<reco::PhotonCollection>& ThePhotons,
0054 edm::Handle<reco::SuperClusterCollection>& TheSuperClusters,
0055 edm::Handle<EBRecHitCollection>& TheEBRecHits,
0056 edm::Handle<EERecHitCollection>& TheEERecHits,
0057 edm::Handle<ESRecHitCollection>& TheESRecHits,
0058 edm::Handle<HBHERecHitCollection>& TheHBHERecHits,
0059 const edm::EventSetup& TheSetup);
0060
0061 void SetRoundnessCut(float r = 100.) { RoundnessCut = r; }
0062
0063 void SetAngleCut(float a = 4.) { AngleCut = a; }
0064
0065
0066 void SetRecHitEnergyThresholds(float EB, float EE, float ES) {
0067 EBRecHitEnergyThreshold = EB;
0068 EERecHitEnergyThreshold = EE;
0069 ESRecHitEnergyThreshold = ES;
0070 }
0071
0072 void SetPhiWedgeEnergyThreshold(float SumE) { SumEnergyThreshold = SumE; }
0073 void SetPhiWedgeNHitsThreshold(int nhits) { NHitsThreshold = nhits; }
0074 void SetPhiWedgeThresholds(float SumE, int nhits) {
0075 SumEnergyThreshold = SumE;
0076 NHitsThreshold = nhits;
0077 }
0078
0079 std::vector<reco::HaloClusterCandidateECAL> GetHaloClusterCandidateEB(
0080 edm::Handle<EcalRecHitCollection>& ecalrechitcoll,
0081 edm::Handle<HBHERecHitCollection>& hbherechitcoll,
0082 float et_thresh_seedrh);
0083 std::vector<reco::HaloClusterCandidateECAL> GetHaloClusterCandidateEE(
0084 edm::Handle<EcalRecHitCollection>& ecalrechitcoll,
0085 edm::Handle<HBHERecHitCollection>& hbherechitcoll,
0086 float et_thresh_seedrh);
0087 bool EBClusterShapeandTimeStudy(reco::HaloClusterCandidateECAL hcand, bool ishlt);
0088 bool EEClusterShapeandTimeStudy_ITBH(reco::HaloClusterCandidateECAL hcand, bool ishlt);
0089 bool EEClusterShapeandTimeStudy_OTBH(reco::HaloClusterCandidateECAL hcand, bool ishlt);
0090
0091
0092 float GetRoundnessCut() { return RoundnessCut; }
0093
0094 float GetAngleCut() { return AngleCut; }
0095
0096
0097 float GetEBRecHitEnergyThreshold() { return EBRecHitEnergyThreshold; }
0098 float GetEERecHitEnergyThreshold() { return EERecHitEnergyThreshold; }
0099 float GetESRecHitEnergyThreshold() { return ESRecHitEnergyThreshold; }
0100
0101
0102 float GetPhiWedgeEnergyThreshold() { return SumEnergyThreshold; }
0103 int GetPhiWedgeNHitsThreshold() { return NHitsThreshold; }
0104
0105 private:
0106
0107 float RoundnessCut;
0108
0109 float AngleCut;
0110
0111
0112 float EBRecHitEnergyThreshold;
0113 float EERecHitEnergyThreshold;
0114 float ESRecHitEnergyThreshold;
0115
0116
0117 float SumEnergyThreshold;
0118 int NHitsThreshold;
0119
0120 edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geoToken_;
0121 const CaloGeometry* geo;
0122 math::XYZPoint getPosition(const DetId& id, reco::Vertex::Point vtx);
0123 };
0124
0125 #endif