00001 
00002 
00003 #ifndef DITAUMASSTOOLS_MISSINGMASSTOOL_H
00004 #define DITAUMASSTOOLS_MISSINGMASSTOOL_H
00005 
00006 
00007 #include "AsgTools/AsgTool.h"
00008 
00009 
00010 #include "DiTauMassTools/IMissingMassTool.h"
00011 #include "DiTauMassTools/MissingMassCalculator.h"
00012 
00013 
00014 class MissingMassTool : virtual public IMissingMassTool, virtual public asg::AsgTool
00015 {
00016 
00018   ASG_TOOL_CLASS(MissingMassTool, IMissingMassTool)
00019 
00020  public:
00021   
00023   MissingMassTool(const std::string& name);
00025   MissingMassTool(const MissingMassTool& other);
00026 
00028   virtual ~MissingMassTool() { };
00029 
00031   virtual StatusCode initialize();
00032 
00034   virtual StatusCode finalize();
00035 
00036 
00037   
00038   virtual CP::CorrectionCode apply (const xAOD::EventInfo& ei,
00039                     const xAOD::IParticle* part1,
00040                     const xAOD::IParticle* part2,
00041                     const xAOD::MissingET* met,
00042                     const int & njets);
00043 
00044   
00045   
00046   
00047   virtual void calculate(const xAOD::EventInfo & ei, 
00048              const TLorentzVector & vis_tau1,
00049              const TLorentzVector & vis_tau2,
00050              const int & tau1_decay_type,
00051              const int & tau2_decay_type,
00052              const xAOD::MissingET & met,
00053              const int & njets);
00054 
00055 
00056   virtual MissingMassCalculator* get() {return m_MMC;}
00057   virtual double GetFitStatus(const int & method) {(void) method; return m_MMC->GetFitStatus();}
00058   virtual double GetFittedMass(const int& method) {return m_MMC->GetFittedMass(method);}
00059   virtual TLorentzVector GetResonanceVec(const int& method) {return m_MMC->GetResonanceVec(method);}
00060   virtual TVector2 GetFittedMetVec(const int& method) {return m_MMC->GetFittedMetVec(method);}
00061   virtual TLorentzVector GetNeutrino4vec(const int& method, const int & index) {return m_MMC->GetNeutrino4vec(method, index);}
00062   virtual TLorentzVector GetTau4vec(const int& method, const int & index) {return m_MMC->GetTau4vec(method, index);}
00063 
00064   int mmcType(const xAOD::IParticle* part) const; 
00065   CP::CorrectionCode setLFVMode(const xAOD::IParticle* p1, const xAOD::IParticle* p2, int mmcType1=-1, int mmcType2=-1);
00066 
00067  private:
00068 
00069   
00070 
00071   MissingMassCalculator* m_MMC;
00072   int m_alg_version;
00073   double m_n_sigma_met;
00074   int m_tail_cleanup;
00075   int m_use_verbose;
00076   int m_use_tau_probability;
00077   int m_niter_fit_2;
00078   int m_niter_fit_3;
00079   int m_use_defaults;
00080   int m_use_efficiency_recovery;
00081   std::string m_calib_set;
00082   std::string m_lfv_mode;
00083   bool m_decorate;
00084   bool m_use_met_param_dphiLL;
00085 
00086 };
00087   
00088 
00089 #endif