00001 #ifndef PhotonVertexSelection_PhotonPointingTool_h
00002 #define PhotonVertexSelection_PhotonPointingTool_h
00003
00004
00005 #include "AsgTools/AsgTool.h"
00006
00007
00008 #include "PhotonVertexSelection/IPhotonPointingTool.h"
00009
00010
00011 class TH1F;
00012 namespace CP { class ShowerDepthTool; }
00013
00014 namespace CP {
00015
00023 class PhotonPointingTool : public virtual IPhotonPointingTool,
00024 public asg::AsgTool {
00025
00027 ASG_TOOL_CLASS(PhotonPointingTool, CP::IPhotonPointingTool)
00028
00029 private:
00031 CP::ShowerDepthTool *m_showerTool;
00032
00034 TH1F *m_zCorrection;
00035
00037 static SG::AuxElement::Decorator<float> zvertex;
00038 static SG::AuxElement::Decorator<float> errz;
00039 static SG::AuxElement::Decorator<float> HPV_zvertex;
00040 static SG::AuxElement::Decorator<float> HPV_errz;
00041
00042 private:
00044 float getCorrectedZ(float zPointing, float etas2) const;
00045 bool m_isMC;
00046 std::string m_zOscFileMC, m_zOscFileData;
00047
00048 public:
00049 PhotonPointingTool(const std::string &name);
00050 virtual ~PhotonPointingTool();
00051
00054
00056 virtual StatusCode initialize();
00057
00059
00062
00064 StatusCode updatePointingAuxdata(const xAOD::EgammaContainer &egammas) const ;
00065
00067 std::pair<float, float> getCaloPointing(const xAOD::Egamma *egamma) const ;
00068
00070 std::pair<float, float> getConvPointing(const xAOD::Photon *photon) const ;
00071
00073 float getCorrectedEta(const xAOD::CaloCluster &cluster, float PVz) const ;
00074
00076 StatusCode correctPrimaryVertex(xAOD::Egamma &egamma, float PVz) const ;
00077
00079 TLorentzVector getCorrectedLV(const xAOD::Egamma &egamma, float PVz) const ;
00080
00083 float getCorrectedMass(const xAOD::EgammaContainer &egammas, float PVz) const;
00084
00086
00087 };
00088
00089 }
00090
00091
00092 #endif // PhotonVertexSelection_PhotonPointingTool_H