00001
00002 #ifndef TAURECTOOLS_DITAUIDVARCALCULATOR_H
00003 #define TAURECTOOLS_DITAUIDVARCALCULATOR_H
00004
00013
00014 #include "AsgTools/AsgTool.h"
00015
00016
00017
00018 #include "fastjet/PseudoJet.hh"
00019 #include "fastjet/ClusterSequenceArea.hh"
00020
00021
00022 #include "xAODTau/TauxAODHelpers.h"
00023
00024 #include "xAODTau/DiTauJetContainer.h"
00025
00026
00027 #include "tauRecTools/IDiTauIDVarCalculator.h"
00028
00029
00030 namespace tauRecTools
00031 {
00032
00033
00034 class DiTauIDVarCalculator
00035 : public tauRecTools::IDiTauIDVarCalculator
00036 , public asg::AsgTool
00037 {
00039 ASG_TOOL_CLASS( DiTauIDVarCalculator,
00040 tauRecTools::IDiTauIDVarCalculator )
00041
00042 public:
00043
00044 DiTauIDVarCalculator( const std::string& name );
00045
00046 virtual ~DiTauIDVarCalculator();
00047
00048
00049 virtual StatusCode initialize();
00050
00051
00052 virtual StatusCode initializeEvent();
00053
00054
00055 virtual StatusCode calculateIDVariables(const xAOD::DiTauJet& xDiTau);
00056
00057 private:
00058 double n_subjets(const xAOD::DiTauJet& xDiTau) const;
00059 double ditau_pt(const xAOD::DiTauJet& xDiTau) const;
00060 double f_core(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00061 double f_subjet(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00062 double f_subjets(const xAOD::DiTauJet& xDiTau) const;
00063 double f_track(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00064 double R_max(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00065 int n_track(const xAOD::DiTauJet& xDiTau) const;
00066 int n_tracks(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00067 int n_isotrack(const xAOD::DiTauJet& xDiTau) const;
00068 int n_othertrack(const xAOD::DiTauJet& xDiTau) const;
00069 double R_track(const xAOD::DiTauJet& xDiTau) const;
00070 double R_track_all(const xAOD::DiTauJet& xDiTau) const;
00071 double R_track_core(const xAOD::DiTauJet& xDiTau) const;
00072 double R_isotrack(const xAOD::DiTauJet& xDiTau) const;
00073 double R_core(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00074 double R_tracks(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00075 double m_track(const xAOD::DiTauJet& xDiTau) const;
00076 double m_track_core(const xAOD::DiTauJet& xDiTau) const;
00077 double m_core(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00078 double m_track_all(const xAOD::DiTauJet& xDiTau) const;
00079 double m_tracks(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00080 double E_frac(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00081 double R_subjets(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00082 double d0_leadtrack(const xAOD::DiTauJet& xDiTau, int iSubjet) const;
00083 double f_isotracks(const xAOD::DiTauJet& xDiTau) const;
00084 int n_iso_ellipse(const xAOD::DiTauJet& xDiTau) const;
00085 std::vector<fastjet::PseudoJet> getClusters(const xAOD::DiTauJet& xDiTau) const;
00086 int n_antikt_subjets(std::vector<fastjet::PseudoJet> vClusters);
00087 int n_ca_subjets(std::vector<fastjet::PseudoJet> vClusters);
00088 void mass_drop(const xAOD::DiTauJet& xDiTau, std::vector<fastjet::PseudoJet> vClusters) const;
00089 double f_clusters(const xAOD::DiTauJet& xDiTau, std::vector<fastjet::PseudoJet> vClusters) const;
00090
00091
00092 double m_dMaxDeltaR;
00093 std::string m_sDiTauContainerName;
00094 std::string m_DiTauContainerNameAux;
00095 bool m_bCalcCluserVariables;
00096 std::string m_sTruthTauContainerName;
00097
00098 double m_dDefault;
00099
00100 StatusCode decorNtracks (const xAOD::DiTauJet& xDiTau);
00101
00102 };
00103
00104 }
00105 #endif // TAURECTOOLS_DITAUIDVARCALCULATOR_H