00001
00002 #ifndef XAOD_ANALYSIS
00003
00004 #ifndef JETMOMENTTOOLS_JETBADCHANCORRTOOL_H
00005 #define JETMOMENTTOOLS_JETBADCHANCORRTOOL_H
00006
00030 #include "JetRec/JetModifierBase.h"
00031
00032 #include "JetRecCalo/MissingCellListTool.h"
00033
00034 #include "CaloIdentifier/CaloCell_ID.h"
00035
00036 #include "TH1D.h"
00037
00038
00039 class Identifier;
00040 class CaloDetDescrManager;
00041
00042 class ITileBadChanTool;
00043 class ILArBadChanTool;
00044 class ITHistSvc;
00045
00046 class JetBadChanCorrTool: public JetModifierBase
00047 {
00048 ASG_TOOL_CLASS0(JetBadChanCorrTool)
00049 public:
00050 JetBadChanCorrTool(const std::string& name);
00051
00052 virtual ~JetBadChanCorrTool();
00053
00054 virtual StatusCode initialize();
00055
00056 virtual int modifyJet( xAOD::Jet& pJet) const ;
00057
00058 virtual StatusCode setupEvent();
00059
00060
00061 protected:
00062 int correctionFromCellsInJet( xAOD::Jet* j, const jet::CaloCellFastMap * badCellMap) const;
00063 int correctionFromCellsInCone( xAOD::Jet* j, const jet::CaloCellFastMap * badCellMap) const;
00064
00065 int correctionFromClustersBadCells( xAOD::Jet* j) const;
00066
00067 private:
00068
00069 ServiceHandle<ITHistSvc> m_thistSvc;
00070
00071
00072
00073
00074
00075 int m_nBadCellLimit;
00076
00077
00078
00079
00080
00081
00082 std::string m_streamName;
00083 std::string m_profileName;
00084 std::string m_profileTag;
00085
00086 bool m_useCone;
00087
00088
00089
00090 bool m_useCalibScale;
00091
00092
00093
00094
00095 std::string m_missingCellMapName;
00096
00097 bool m_forceMissingCellCheck;
00098
00099 bool m_useClusters;
00100
00101
00102 class ProfileData {
00103 public:
00104 ProfileData(TH1D* th, int sample,
00105 double ptMin=0, double ptMax=9999,
00106 double etaMin=0, double etaMax=5.0,
00107 double phiMin=-M_PI, double phiMax=M_PI):
00108 m_th(th), m_sample(sample),
00109 m_ptMin(ptMin), m_ptMax(ptMax),
00110 m_etaMin(etaMin), m_etaMax(etaMax),
00111 m_phiMin(phiMin), m_phiMax(phiMax) {}
00112
00113 virtual ~ProfileData(){}
00114
00115 bool match(double pt, int sample, double eta, double phi) const {
00116 return ( pt>=m_ptMin && pt<m_ptMax
00117 && sample==m_sample
00118 && fabs(eta)>=m_etaMin && fabs(eta)<m_etaMax
00119 && phi>=m_phiMin && phi<m_phiMax);
00120 }
00121
00122 double frac(double dr) const {
00123 int idr = m_th->FindBin(dr);
00124 return m_th->GetBinContent(idr);
00125 }
00126 private:
00127 TH1D* m_th;
00128 int m_sample;
00129 double m_ptMin;
00130 double m_ptMax;
00131 double m_etaMin;
00132 double m_etaMax;
00133 double m_phiMin;
00134 double m_phiMax;
00135 };
00136 std::vector<ProfileData> m_profileDatas[CaloCell_ID::Unknown];
00137
00138 double getProfile(double pt, double dr, int sample, double eta, double phi) const;
00139
00140 };
00141 #endif
00142
00143 #endif
00144
00145