#ifndef ATLAS_AtlKaonFinder
#define ATLAS_AtlKaonFinder
#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 AtlKaonHistos : public AtlKinFitterTool {
public:
enum EMode { kCutBased, kKinFit };
EMode fMode;
Bool_t fDebug;
private:
ofstream fDebugStream;
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_chi2_vtx;
TH1F *fHistLambdareco_chi2_trk;
TH1F *fHistLambdareco_prob_mc;
TH1F *fHistLambdareco_eff;
TH1F *fHistPrimKaon_Mother;
TH1F *fHistSecKaon_Mother;
TH1F *fHistSecKaon_Mother2Body;
Int_t fN_MCFail;
Int_t fN_Fits;
Int_t fN_MCProbMiss;
Int_t fN_SameOriginMiss;
public:
Float_t fSignal_Pt_min;
Float_t fSignal_Pt_max;
Float_t fSignal_Eta_min;
Float_t fSignal_Eta_max;
Float_t fLambda_M_min;
Float_t fLambda_M_max;
Float_t fm_e;
Float_t fm_lambda;
Float_t fm_pi;
Float_t fm_proton;
Float_t fm_k;
Float_t fm_d0;
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 fK0s_M_min;
Float_t fK0s_M_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(AtlLambdaDecayPPi *decay, Bool_t signal);
Bool_t IsConversionVertex(HepVertex *vtx);
Bool_t IsKaonVertex(HepVertex *vtx);
public:
AtlKaonHistos(const char* name, const char* title);
virtual ~AtlKaonHistos();
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(AtlKaonHistos, 0)
};
#endif