File indexing completed on 2024-04-06 12:25:01
0001 #ifndef EgammaElectronAlgos_EcalRegressionData_h
0002 #define EgammaElectronAlgos_EcalRegressionData_h
0003
0004 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0005 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0006 #include "DataFormats/VertexReco/interface/Vertex.h"
0007 #include <vector>
0008 #include <cmath>
0009
0010 class CaloGeometry;
0011 class CaloTopology;
0012
0013 namespace reco {
0014 class SuperCluster;
0015 }
0016
0017 class EcalRegressionData {
0018 public:
0019 EcalRegressionData() { clear(); }
0020
0021
0022
0023
0024 enum class SubClusNr { C1 = 0, C2 = 1, C3 = 2 };
0025
0026
0027 bool isEB() const { return isEB_; }
0028 float scRawEnergy() const { return scRawEnergy_; }
0029 float scCalibEnergy() const { return scCalibEnergy_; }
0030 float scPreShowerEnergy() const { return scPreShowerEnergy_; }
0031 float scEta() const { return scEta_; }
0032 float scPhi() const { return scPhi_; }
0033 float scEtaWidth() const { return scEtaWidth_; }
0034 float scPhiWidth() const { return scPhiWidth_; }
0035 int scNrAdditionalClusters() const { return scNrAdditionalClusters_; }
0036 float seedClusEnergy() const { return seedClusEnergy_; }
0037 float eMax() const { return eMax_; }
0038 float e2nd() const { return e2nd_; }
0039 float e3x3() const { return e3x3_; }
0040 float eTop() const { return eTop_; }
0041 float eBottom() const { return eBottom_; }
0042 float eLeft() const { return eLeft_; }
0043 float eRight() const { return eRight_; }
0044 float sigmaIEtaIEta() const { return sigmaIEtaIEta_; }
0045 float sigmaIEtaIPhi() const { return sigmaIEtaIPhi_; }
0046 float sigmaIPhiIPhi() const { return sigmaIPhiIPhi_; }
0047
0048 float seedCrysPhiOrY() const { return seedCrysPhiOrY_; }
0049 float seedCrysEtaOrX() const { return seedCrysEtaOrX_; }
0050 float seedCrysIEtaOrIX() const { return seedCrysIEtaOrIX_; }
0051 float seedCrysIPhiOrIY() const { return seedCrysIPhiOrIY_; }
0052 float maxSubClusDR() const { return std::sqrt(maxSubClusDR2_); }
0053 float maxSubClusDRDPhi() const { return maxSubClusDRDPhi_; }
0054 float maxSubClusDRDEta() const { return maxSubClusDRDEta_; }
0055 float maxSubClusDRRawEnergy() const { return maxSubClusDRRawEnergy_; }
0056 const std::vector<float>& subClusRawEnergy() const { return subClusRawEnergy_; }
0057 const std::vector<float>& subClusDPhi() const { return subClusDPhi_; }
0058 const std::vector<float>& subClusDEta() const { return subClusDEta_; }
0059 int nrVtx() const { return nrVtx_; }
0060
0061
0062 float scPreShowerEnergyOverSCRawEnergy() const { return divideBySCRawEnergy_(scPreShowerEnergy()); }
0063 float scSeedR9() const { return divideBySCRawEnergy_(e3x3()); }
0064 float seedClusEnergyOverSCRawEnergy() const { return divideBySCRawEnergy_(seedClusEnergy()); }
0065 float eMaxOverSCRawEnergy() const { return divideBySCRawEnergy_(eMax()); }
0066 float e2ndOverSCRawEnergy() const { return divideBySCRawEnergy_(e2nd()); }
0067 float seedLeftRightAsym() const;
0068 float seedTopBottomAsym() const;
0069 float maxSubClusDRRawEnergyOverSCRawEnergy() const { return divideBySCRawEnergy_(maxSubClusDRRawEnergy()); }
0070 float subClusRawEnergyOverSCRawEnergy(size_t clusNr) const { return divideBySCRawEnergy_(subClusRawEnergy(clusNr)); }
0071 float subClusRawEnergy(size_t clusNr) const;
0072 float subClusDPhi(size_t clusNr) const;
0073 float subClusDEta(size_t clusNr) const;
0074 float subClusRawEnergyOverSCRawEnergy(SubClusNr clusNr) const {
0075 return subClusRawEnergyOverSCRawEnergy(static_cast<int>(clusNr));
0076 }
0077 float subClusRawEnergy(SubClusNr clusNr) const { return subClusRawEnergy(static_cast<int>(clusNr)); }
0078 float subClusDPhi(SubClusNr clusNr) const { return subClusDPhi(static_cast<int>(clusNr)); }
0079 float subClusDEta(SubClusNr clusNr) const { return subClusDEta(static_cast<int>(clusNr)); }
0080
0081
0082 void fill(const reco::SuperCluster& superClus,
0083 const EcalRecHitCollection* ebRecHits,
0084 const EcalRecHitCollection* eeRecHits,
0085 const CaloGeometry* geom,
0086 const CaloTopology* topology,
0087 const reco::VertexCollection* vertices) {
0088 fill(superClus, ebRecHits, eeRecHits, geom, topology, vertices->size());
0089 }
0090 void fill(const reco::SuperCluster& superClus,
0091 const EcalRecHitCollection* ebRecHits,
0092 const EcalRecHitCollection* eeRecHits,
0093 const CaloGeometry* geom,
0094 const CaloTopology* topology,
0095 int nrVertices);
0096 void clear();
0097
0098
0099 void fillVec(std::vector<float>& inputVec) const;
0100
0101 private:
0102
0103 float divideBySCRawEnergy_(float numer) const { return scRawEnergy() != 0 ? numer / scRawEnergy() : 0.; }
0104 void fillVecEB_(std::vector<float>& inputVec) const;
0105 void fillVecEE_(std::vector<float>& inputVec) const;
0106
0107 private:
0108 bool isEB_;
0109
0110
0111 float scRawEnergy_;
0112 float scCalibEnergy_;
0113 float scPreShowerEnergy_;
0114 float scEta_;
0115 float scPhi_;
0116 float scEtaWidth_;
0117 float scPhiWidth_;
0118 int scNrAdditionalClusters_;
0119
0120
0121 float seedClusEnergy_;
0122 float eMax_;
0123 float e2nd_;
0124 float e3x3_;
0125 float eTop_;
0126 float eBottom_;
0127 float eLeft_;
0128 float eRight_;
0129 float sigmaIEtaIEta_;
0130 float sigmaIEtaIPhi_;
0131 float sigmaIPhiIPhi_;
0132
0133
0134 float seedCrysPhiOrY_;
0135 float seedCrysEtaOrX_;
0136 int seedCrysIEtaOrIX_;
0137 int seedCrysIPhiOrIY_;
0138
0139
0140 float maxSubClusDR2_;
0141 float maxSubClusDRDPhi_;
0142 float maxSubClusDRDEta_;
0143 float maxSubClusDRRawEnergy_;
0144 std::vector<float> subClusRawEnergy_;
0145 std::vector<float> subClusDPhi_;
0146 std::vector<float> subClusDEta_;
0147
0148
0149 int nrVtx_;
0150 };
0151
0152 #endif