#ifndef ATLAS_AtlD0Finder
#define ATLAS_AtlD0Finder
#ifndef ATLAS_AtlKinFitterTool
#include <AtlKinFitterTool.h>
#include <TH1F.h>
#include <TH2F.h>
#endif
#include <fstream>
class TH1F;
class TH2F;
class AtlEvent;
class TTree;
class TString;
class TROOT;
class TFile;
class AtlD0Finder : public AtlKinFitterTool {
public:
enum EMode { kCutBased, kKinFit };
EMode fMode;
Bool_t fDebug;
private:
ofstream fDebugStream;
TH1F *fHistD0reco_m_kaon_pi;
TH1F *fHistLambdareco_m_PPi;
TH1F *fHistLambdareco_m_PiPi;
TH1F *fHistLambdareco_m_ee;
TH1F *fHistLambdareco_pt_PPi;
TH1F *fHistLambdareco_phi_PPi;
TH1F *fHistLambdareco_eta_PPi;
TH1F *fHistLambdareco_N_PPi;
TH1F *fHistLambdareco_tau_PPi;
TH2F *fHistLambdareco_truth_PPi;
TH1F *fHistLambdareco_R_vtx;
TH1F *fHistLambdareco_src_div;
TH1F *fHistLambdareco_tdcy_len;
TH1F *fHistLambdareco_oangle;
TH1F *fHistLambdareco_dangle;
TH1F *fHistLambdareco_Proton_pt;
TH1F *fHistLambdareco_Pion_pt;
TH1F *fHistLambdareco_Proton_eta;
TH1F *fHistLambdareco_Pion_eta;
TH1F *fHistLambdareco_Proton_phi;
TH1F *fHistLambdareco_Pion_phi;
TH1F *fHistLambdareco_Piplus_pt;
TH1F *fHistLambdareco_Piplus_eta;
TH1F *fHistLambdareco_Piplus_phi;
TH1F *fHistLambdareco_Piminus_pt;
TH1F *fHistLambdareco_Piminus_eta;
TH1F *fHistLambdareco_Piminus_phi;
TH1F *fHistLambdareco_Prplus_pt;
TH1F *fHistLambdareco_Prplus_eta;
TH1F *fHistLambdareco_Prplus_phi;
TH1F *fHistLambdareco_Prminus_pt;
TH1F *fHistLambdareco_Prminus_eta;
TH1F *fHistLambdareco_Prminus_phi;
TList *fBkgLambdaDecays;
TH1F *fHistLambdareco_m_PPi_bkg;
TH1F *fHistLambdareco_pt_PPi_bkg;
TH1F *fHistLambdareco_phi_PPi_bkg;
TH1F *fHistLambdareco_eta_PPi_bkg;
TH1F *fHistLambdareco_N_PPi_bkg;
TH1F *fHistLambdareco_tau_PPi_bkg;
TH1F *fHistLambdareco_truth_PPi_bkg;
TH1F *fHistLambdareco_R_vtx_bkg;
TH1F *fHistLambdareco_src_div_bkg;
TH1F *fHistLambdareco_tdcy_len_bkg;
TH1F *fHistLambdareco_oangle_bkg;
TH1F *fHistLambdareco_dangle_bkg;
TH1F *fHistLambdareco_Proton_pt_bkg;
TH1F *fHistLambdareco_Pion_pt_bkg;
TH1F *fHistLambdareco_Proton_eta_bkg;
TH1F *fHistLambdareco_Pion_eta_bkg;
TH1F *fHistLambdareco_Proton_phi_bkg;
TH1F *fHistLambdareco_Pion_phi_bkg;
TH1F *fHistLambdareco_Piplus_pt_bkg;
TH1F *fHistLambdareco_Piplus_eta_bkg;
TH1F *fHistLambdareco_Piplus_phi_bkg;
TH1F *fHistLambdareco_Piminus_pt_bkg;
TH1F *fHistLambdareco_Piminus_eta_bkg;
TH1F *fHistLambdareco_Piminus_phi_bkg;
TH1F *fHistLambdareco_Prplus_pt_bkg;
TH1F *fHistLambdareco_Prplus_eta_bkg;
TH1F *fHistLambdareco_Prplus_phi_bkg;
TH1F *fHistLambdareco_Prminus_pt_bkg;
TH1F *fHistLambdareco_Prminus_eta_bkg;
TH1F *fHistLambdareco_Prminus_phi_bkg;
TH1F *fHistLambdareco_MC_m;
TH1F *fHistLambdareco_MC_m_bkg;
TH1F *fHistLambdareco_MC_m_pipi;
TH1F *fHistLambdareco_MC_m_pipi_bkg;
TH1F *fHistLambdareco_MC_m_ppi;
TH1F *fHistLambdareco_MC_m_ppi_bkg;
TH1F *fHistLambdareco_MC_m_ee;
TH1F *fHistLambdareco_MC_m_ee_bkg;
TH1F *fHistLambdareco_MC_m_pipi_o;
TH1F *fHistLambdareco_MC_m_pipi_o_bkg;
TH1F *fHistLambdareco_MC_m_ppi_o;
TH1F *fHistLambdareco_MC_m_ppi_o_bkg;
TH1F *fHistLambdareco_MC_m_ee_o;
TH1F *fHistLambdareco_MC_m_ee_o_bkg;
TH1F *fHistLambdareco_MC_pt;
TH1F *fHistLambdareco_MC_pt_bkg;
TH1F *fHistLambdareco_MC_phi;
TH1F *fHistLambdareco_MC_phi_bkg;
TH1F *fHistLambdareco_MC_eta;
TH1F *fHistLambdareco_MC_eta_bkg;
TH1F *fHistLambdareco_MC_R_vtx;
TH1F *fHistLambdareco_MC_R_vtx_bkg;
TH1F *fHistLambdareco_MC_tdcy_len;
TH1F *fHistLambdareco_MC_tdcy_len_bkg;
TH1F *fHistLambdareco_MC_tau;
TH1F *fHistLambdareco_MC_tau_bkg;
TH1F *fHistLambdareco_MC_src_div;
TH1F *fHistLambdareco_MC_src_div_bkg;
TH1F *fHistLambdareco_MC_dangle;
TH1F *fHistLambdareco_MC_dangle_bkg;
TH1F *fHistLambdareco_MC_oangle;
TH1F *fHistLambdareco_MC_oangle_bkg;
TH1F *fHistLambdareco_MC_coangle;
TH1F *fHistLambdareco_MC_coangle_bkg;
TH1F *fHistLambdareco_MC_d0_K;
TH1F *fHistLambdareco_MC_d0_K_bkg;
TH1F *fHistLambdareco_MC_d0_Pi;
TH1F *fHistLambdareco_MC_d0_Pi_bkg;
TH1F *fHistLambdareco_MC_d0ovE_K;
TH1F *fHistLambdareco_MC_d0ovE_K_bkg;
TH1F *fHistLambdareco_MC_d0ovE_Pi;
TH1F *fHistLambdareco_MC_d0ovE_Pi_bkg;
TH1F *fHistLambdareco_MC_z0_Pi;
TH1F *fHistLambdareco_MC_z0_Pi_bkg;
TH1F *fHistLambdareco_MC_z0_K;
TH1F *fHistLambdareco_MC_z0_K_bkg;
TH1F *fHistLambdareco_MC_pi_tchi2;
TH1F *fHistLambdareco_MC_pi_tchi2_bkg;
TH1F *fHistLambdareco_MC_k_tchi2;
TH1F *fHistLambdareco_MC_k_tchi2_bkg;
TH1F *fHistLambdareco_MC_z0_diff;
TH1F *fHistLambdareco_MC_z0_diff_bkg;
TH2F *fHistLambdareco_MC_m_dangle;
TH2F *fHistLambdareco_MC_m_dangle_bkg;
TH1F *fHistLambdareco_chi2_vtx;
TH1F *fHistLambdareco_chi2_trk;
TH1F *fHistLambdareco_prob_mc;
TH1F *fHistLambdareco_eff;
Int_t fN_MCFail;
Int_t fN_Fits;
Int_t fN_MCProbMiss;
Int_t fN_SameOriginMiss;
TH1F *fHist_MC_KPi_vtx;
public:
Float_t fSignal_Pt_min;
Float_t fSignal_Pt_max;
Float_t fSignal_Eta_min;
Float_t fSignal_Eta_max;
Float_t fD0_M_min;
Float_t fD0_M_max;
Float_t fm_e;
Float_t fm_lambda;
Float_t fm_pi;
Float_t fm_proton;
Float_t fm_kaon;
Float_t fm_D0;
Float_t fm_Dstar;
Float_t fAngleToPrimary_max;
Float_t fVertexChi2ovNDoF_max;
Float_t fTrackChi2ovNDoF_max;
Float_t fKinFitPvalue_min;
Float_t fMatchingProb_min;
Float_t fPhotonMass_max;
Float_t fOAngle_max;
Float_t fD0_K_max;
Float_t fD0_K_min;
Float_t fD0_Pi_max;
Float_t fD0_Pi_min;
Float_t fZDiff_max;
TKinFitter PerformFit(AtlIDTrack *trk1, AtlIDTrack *trk2, TLorentzVector &FitP_trk1, TLorentzVector &FitP_trk2,
TMatrixD *cov_trk1, TMatrixD *cov_trk2);
Int_t DoTruthMatch(AtlIDTrack *trk1, AtlIDTrack *trk2, HepVertex *Vtx);
void FillMCHistograms(AtlD0DecayKPi *decay, Bool_t signal);
Bool_t IsConversion(AtlIDTrack *trk1, AtlIDTrack *trk2);
Bool_t IsKaon(AtlIDTrack *trk1, AtlIDTrack *trk2);
Bool_t IsLambda(AtlIDTrack *trk1, AtlIDTrack *trk2);
void FindSharedTracks();
public:
AtlD0Finder(const char* name, const char* title);
virtual ~AtlD0Finder();
virtual void SetBranchStatus();
virtual void BookHistograms();
virtual void FillHistograms();
virtual void SetCutDefaults();
virtual Bool_t AnalyzeEvent();
void ReconstructLambdaCutBased(void);
void ReconstructLambdaKinFit(void);
void PrintCutValues(void);
void Terminate();
inline void SetMode(EMode mode = kKinFit) { fMode = mode; }
void SetDebugOutput(Bool_t mode = kFALSE) { fDebug = mode; }
inline Bool_t IsDebugRun() { return fDebug; }
ClassDef(AtlD0Finder,0)
};
#endif