00001 #ifndef TAUREC_TAUPI0CLUSTERSCALER_H
00002 #define TAUREC_TAUPI0CLUSTERSCALER_H
00003
00004 #include <string>
00005 #include "tauRecTools/TauRecToolBase.h"
00006 #include "GaudiKernel/ToolHandle.h"
00007 #include "xAODPFlow/PFO.h"
00008 #include "xAODPFlow/PFOAuxContainer.h"
00009
00018 namespace Trk {
00019 class IParticleCaloExtensionTool;
00020 }
00021 class TauPi0ClusterScaler : virtual public TauRecToolBase {
00022 public:
00023 TauPi0ClusterScaler(const std::string& name);
00024 ASG_TOOL_CLASS2(TauPi0ClusterScaler, TauRecToolBase, ITauToolBase);
00025 virtual ~TauPi0ClusterScaler();
00026
00027 virtual StatusCode initialize();
00028 virtual StatusCode eventInitialize();
00029 virtual StatusCode finalize();
00030 virtual StatusCode execute(xAOD::TauJet& pTau);
00031 virtual StatusCode eventFinalize() { return StatusCode::SUCCESS; }
00032
00033 virtual void print() const { }
00034
00035 private:
00036
00038 ToolHandle<Trk::IParticleCaloExtensionTool> m_caloExtensionTool;
00039
00041 void resetNeutralPFOs(xAOD::TauJet& pTau);
00042
00044 void createChargedPFOs(xAOD::TauJet& pTau);
00045
00047 void extrapolateChargedPFOs(xAOD::TauJet& pTau);
00048
00050 void associateHadronicToChargedPFOs(xAOD::TauJet& pTau);
00051
00053 void associateChargedToNeutralPFOs(xAOD::TauJet& pTau);
00054
00056 void subtractChargedEnergyFromNeutralPFOs(xAOD::TauJet& pTau);
00057
00059 xAOD::PFOContainer* m_chargedPFOContainer;
00060 std::string m_chargedPFOContainerName;
00061 xAOD::PFOAuxContainer* m_chargedPFOAuxStore;
00062
00064 bool m_AODmode;
00065
00067 std::set<CaloSampling::CaloSample> m_EMSamplings;
00068 std::set<CaloSampling::CaloSample> m_HadSamplings;
00069
00071 xAOD::PFODetails::PFOAttributes ETAECAL;
00072 xAOD::PFODetails::PFOAttributes PHIECAL;
00073 xAOD::PFODetails::PFOAttributes ETAHCAL;
00074 xAOD::PFODetails::PFOAttributes PHIHCAL;
00075
00076 };
00077
00078 #endif
00079