00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef L2TAUISOLATIONALGS_H
00010 #define L2TAUISOLATIONALGS_H
00011
00012 #include "DataFormats/Math/interface/LorentzVector.h"
00013 #include "DataFormats/Math/interface/LorentzVectorFwd.h"
00014 #include <vector>
00015 #include "DataFormats/TauReco/interface/L2TauIsolationInfo.h"
00016 #include "DataFormats/JetReco/interface/CaloJet.h"
00017
00018 using namespace reco;
00019
00022
00023
00024
00025 class L2TauECALCluster
00026 {
00027 public:
00028
00029 L2TauECALCluster();
00030 L2TauECALCluster(const math::PtEtaPhiELorentzVector&);
00031 ~L2TauECALCluster();
00032
00033
00034
00035 math::PtEtaPhiELorentzVector p4() const;
00036 int nCrystals() const;
00037
00038
00039 void addCrystal(const math::PtEtaPhiELorentzVector&);
00040
00041 private:
00042
00043 math::PtEtaPhiELorentzVector p4_;
00044
00045
00046 int m_ncrystals;
00047
00048 };
00049
00050 typedef std::vector<L2TauECALCluster> L2TauECALClusterCollection;
00051 typedef std::vector<L2TauECALCluster>::const_iterator L2TauECALClusterIt;
00052
00053
00054
00057
00058
00059 class L2TauECALClustering
00060 {
00061 public:
00062
00063 L2TauECALClustering();
00064 L2TauECALClustering(double);
00065
00066
00067 ~L2TauECALClustering();
00068
00069
00070
00071 void run(const math::PtEtaPhiELorentzVectorCollection&,const CaloJet&,L2TauIsolationInfo&);
00072
00073 private:
00074
00075 double m_clusterRadius;
00076
00077
00078 L2TauECALClusterCollection m_clusters;
00079
00080
00081 void clusterize(const math::PtEtaPhiELorentzVectorCollection&);
00082 std::vector<double> clusterSeperation(const CaloJet&) const;
00083
00084 };
00085
00088
00089 class L2TauECALIsolation
00090 {
00091 public:
00092 L2TauECALIsolation();
00093 L2TauECALIsolation(double,double);
00094
00095 ~L2TauECALIsolation();
00096
00097
00098 void run(const math::PtEtaPhiELorentzVectorCollection&,const CaloJet& ,L2TauIsolationInfo&);
00099
00100
00101 private:
00102
00103 double isolatedEt( const math::PtEtaPhiELorentzVectorCollection& ,const CaloJet&) const;
00104
00105
00106
00107 double m_innerCone;
00108 double m_outerCone;
00109
00110 };
00111
00112
00115
00116
00117 class L2TauTowerIsolation
00118 {
00119 public:
00120 L2TauTowerIsolation();
00121 L2TauTowerIsolation(double,double);
00122
00123 ~L2TauTowerIsolation();
00124
00125
00126 void run(const CaloJet&, const math::PtEtaPhiELorentzVectorCollection&, L2TauIsolationInfo&);
00127
00128
00129 private:
00130
00131 double isolatedEt(const CaloJet&,const math::PtEtaPhiELorentzVectorCollection&) const;
00132 double seedTowerEt(const math::PtEtaPhiELorentzVectorCollection&) const;
00133
00134
00135 double m_innerCone;
00136 double m_outerCone;
00137
00138
00139 };
00140
00141 #endif