//____________________________________________________________________
//
// Lambda decay finder class
//

//
// Author: Thomas Kintscher <mailto:kintscher@physik.hu-berlin.de>
// Copyright: 2010 (C) Thomas Kintscher
//
#ifndef ATLAS_AtlKaonHistos
#include <AtlKaonHistos.h>
#endif
#include <TH1F.h>
#include <AtlEvent.h>
#include <TTree.h>
#include <TString.h>
#include <iostream>
#include <TROOT.h>
#include <TFile.h>
#include <vector>
#include <iomanip>


using namespace std;

#ifndef __CINT__
ClassImp(AtlKaonHistos);
#endif

//____________________________________________________________________

AtlKaonHistos::AtlKaonHistos(const char* name, const char* title) :
    AtlKinFitterTool(name, title) {
    //
    // Default constructor
    //
    SetMode(kKinFit);
    SetDebugOutput(kFALSE);
    fBkgLambdaDecays = new TList;
}

//____________________________________________________________________

AtlKaonHistos::~AtlKaonHistos() {
    //
    // Default destructor
    //
    fBkgLambdaDecays->Delete(); delete fBkgLambdaDecays;
    if (IsDebugRun() ) fDebugStream.close();
}

//____________________________________________________________________

void AtlKaonHistos::SetBranchStatus() {
    //
    // Switch on needed branches
    //
    fTree->SetBranchStatus("fN_IDTracks*",         kTRUE);  
    fTree->SetBranchStatus("fIDTracks*",           kTRUE);
    fTree->SetBranchStatus("fN_Vertices*",         kTRUE);
    fTree->SetBranchStatus("fVertices*",           kTRUE);
}

//____________________________________________________________________

void AtlKaonHistos::BookHistograms() {
    //
    // Book histograms
    //
    if ( IsDebugRun() ) fDebugStream.open("DebugOutput.dat");
    fN_Fits = 0;
    fN_MCFail = 0;
    fN_MCProbMiss = 0;
    fN_SameOriginMiss = 0;

    // Book KinFitter Histograms
    AtlKinFitterTool::BookHistograms();
    SetTruthMatchBinning(30, 1, 30);
    PrintCutValues();

    // ======================
    // Book signal histograms
    // ======================
    gDirectory->mkdir("Signal", "Oppositely charged candidates");
    gDirectory->cd("Signal");
    

    // Lambda -> PPi
    // ----------
    gDirectory->mkdir("PPi", "Lambda -> proton+pion");
    gDirectory->cd("PPi");
    
    if ( fMode == kCutBased ) {
      fHistLambdareco_m_PPi   = new TH1F("h_Lambda_m_PPi", "Invariant Lambda mass (Lambda->PPi)", 100, 1.0, 1.2);
    } else if ( fMode == kKinFit ) {
      fHistLambdareco_m_PPi   = new TH1F("h_Lambda_m_PPi", "Invariant Lambda mass (Lambda->PPi)", 1800, 0.0, 1.81571);
    }
    fHistLambdareco_m_PPi->SetXTitle("m_{Lambda} (GeV)"); fHistLambdareco_m_PPi->SetYTitle("Number of Entries");
    fHistLambdareco_m_PiPi  = new TH1F("h_Lambda_m_PiPi", "Invariant mass (* #rightarrow #pi#pi)", 480, 0.0, 1.2);
    fHistLambdareco_m_PiPi->SetXTitle("m (Gev)");         fHistLambdareco_m_PiPi->SetYTitle("Number of Entries");
    fHistLambdareco_m_ee  = new TH1F("h_Lambda_m_ee", "Invariant mass (* #rightarrow e e)", 480, 0.0, 1.2);
    fHistLambdareco_m_ee->SetXTitle("m (Gev)");         fHistLambdareco_m_ee->SetYTitle("Number of Entries");
    fHistLambdareco_pt_PPi  = new TH1F("h_Lambda_pt_PPi", "Lambda-p_{#perp} (Lambda->PPi)", 60, 0, 30);
    fHistLambdareco_pt_PPi->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_pt_PPi->SetYTitle("Number of Entries");
    fHistLambdareco_phi_PPi = new TH1F("h_Lambda_phi_PPi", "Lambda #phi distribution (Lambda->PPi)", 128, -3.2, 3.2);
    fHistLambdareco_phi_PPi->SetXTitle("#phi (rad)");     fHistLambdareco_phi_PPi->SetYTitle("Number of Entries");
    fHistLambdareco_eta_PPi = new TH1F("h_Lambda_eta_PPi", "Lambda #eta distribution (Lambda->PPi)", 100, -3, 3);
    fHistLambdareco_eta_PPi->SetXTitle("#eta");           fHistLambdareco_eta_PPi->SetYTitle("Number of Entries");
    fHistLambdareco_N_PPi   = new TH1F("h_Lambda_N_PPi", "Reconstructed Lambdas per event (Lambda->PPi)", 10, 0, 10);
    fHistLambdareco_N_PPi->SetXTitle("N_{Lambda}/evt");   fHistLambdareco_N_PPi->SetYTitle("Number of Entries");
    fHistLambdareco_tau_PPi = new TH1F("h_Lambda_tau_PPi", "Reconstructed Lambda lifetime (Lambda->PPi)", 100, 0, 300);
    fHistLambdareco_tau_PPi->SetXTitle("#tau (ps)");      fHistLambdareco_tau_PPi->SetYTitle("Number of Entries");
    fHistLambdareco_truth_PPi = new TH2F("h_Lambda_truth_PPi", "Pdg Code of truth-matched, reconstructed particles", 6260, -3130, 3130, 50, 0.0, 1.0);
    fHistLambdareco_truth_PPi->SetXTitle("Pdg Code");     fHistLambdareco_truth_PPi->SetYTitle("#Chi^{2} Probability");
    fHistLambdareco_truth_PPi->SetZTitle("Number of Entries");
    fHistLambdareco_R_vtx = new TH1F("h_Lambda_r_vtx", "Radial distance of secondary vertices", 400, 0.0, 100.0);
    fHistLambdareco_R_vtx->SetXTitle("r_{#perp} (cm)");   fHistLambdareco_R_vtx->SetYTitle("Number of Entries");
    fHistLambdareco_tdcy_len = new TH1F("h_Lambda_tdcy_len", "Transverse #Lambda decay length", 400, 0.0, 100.0);
    fHistLambdareco_tdcy_len->SetXTitle("s_{#perp} (cm)");fHistLambdareco_tdcy_len->SetYTitle("Number of Entries");
    fHistLambdareco_oangle = new TH1F("h_Lambda_oangle", "Opening angle of p/pi", 256, 0.0, 3.2);
    fHistLambdareco_oangle->SetXTitle("#alpha (rad)");    fHistLambdareco_oangle->SetYTitle("Number of Entries");
    fHistLambdareco_dangle = new TH1F("h_Lambda_dangle", "Decay angle of p/pi", 256, -1.0, 1.0);
    fHistLambdareco_dangle->SetXTitle("cos(#alpha)");     fHistLambdareco_dangle->SetYTitle("Number of Entries");
    
    // Pion histograms in sub-folder
    gDirectory->mkdir("Pion", "Pi from Lambda -> PPi");
    gDirectory->cd("Pion");
    fHistLambdareco_Pion_pt = new TH1F("h_Lambda_Pion_pt",   "#pi:  p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Pion_pt->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Pion_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Pion_eta = new TH1F("h_Lambda_Pion_eta", "#pi:  #eta distribution (Lambda->P#Pi)", 100, -3, 3);
    fHistLambdareco_Pion_eta->SetXTitle("#eta");           fHistLambdareco_Pion_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Pion_phi = new TH1F("h_Lambda_Pion_phi", "#pi:  #phi distribution (Lambda->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Pion_phi->SetXTitle("#phi");           fHistLambdareco_Pion_phi->SetYTitle("Number of Entries");

    // Fine grained statistics about +/- charged pions
    gDirectory->mkdir("Pi_Plus", "Pion(+) from Lambda -> PPi");
    gDirectory->cd("Pi_Plus");
    fHistLambdareco_Piplus_pt = new TH1F("h_Lambda_Piplus_pt",   "#pi^{+}: p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Piplus_pt->SetXTitle("p_{#perp} (GeV)");  fHistLambdareco_Piplus_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Piplus_eta = new TH1F("h_Lambda_Piplus_eta", "#pi^{+}: #eta distribution (Lambda->P#Pi)",100, -3, 3);
    fHistLambdareco_Piplus_eta->SetXTitle("#eta");            fHistLambdareco_Piplus_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Piplus_phi = new TH1F("h_Lambda_Piplus_phi", "#pi^{+}: #phi distribution (Lambda->P#Pi)",50, -3.14, 3.14);
    fHistLambdareco_Piplus_phi->SetXTitle("#phi");            fHistLambdareco_Piplus_phi->SetYTitle("Number of Entries");

    gDirectory->cd("../");
    gDirectory->mkdir("Pi_Minus", "Pion(-) from Lambda -> PPi");
    gDirectory->cd("Pi_Minus");
    fHistLambdareco_Piminus_pt = new TH1F("h_Lambda_Piminus_pt",   "#pi^{-}: p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Piminus_pt->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Piminus_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Piminus_eta = new TH1F("h_Lambda_Piminus_eta", "#pi^{-}: #eta distribution (Lambda->P#Pi)", 100, -3, 3);
    fHistLambdareco_Piminus_eta->SetXTitle("#eta");           fHistLambdareco_Piminus_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Piminus_phi = new TH1F("h_Lambda_Piminus_phi", "#pi^{-}: #phi distribution (Lambda->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Piminus_phi->SetXTitle("#phi");           fHistLambdareco_Piminus_phi->SetYTitle("Number of Entries");    
    
    gDirectory->cd("../../"); 

    // Proton histograms in sub-folder
    gDirectory->mkdir("Proton", "Proton from Lambda -> PPi");
    gDirectory->cd("Proton");
    fHistLambdareco_Proton_pt = new TH1F("h_Lambda_Proton_pt",   "Proton:  p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Proton_pt->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Proton_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Proton_eta = new TH1F("h_Lambda_Proton_eta", "Proton:  #eta distribution (Lambda->P#Pi)", 100, -5, 5);
    fHistLambdareco_Proton_eta->SetXTitle("#eta");           fHistLambdareco_Proton_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Proton_phi = new TH1F("h_Lambda_Proton_phi", "Proton:  #phi distribution (Lambda->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Proton_phi->SetXTitle("#phi");           fHistLambdareco_Proton_phi->SetYTitle("Number of Entries");

    // fine grained statistics about proton/antiproton
    gDirectory->mkdir("Proton_Plus", "Proton(+) from Lambda -> PPi");
    gDirectory->cd("Proton_Plus");
    fHistLambdareco_Prplus_pt = new TH1F("h_Lambda_Prplus_pt",   "Pr^{+}   p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Prplus_pt->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Prplus_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Prplus_eta = new TH1F("h_Lambda_Prplus_eta", "Pr^{+}:  #eta distribution (Lambda->P#Pi)", 100, -5, 5);
    fHistLambdareco_Prplus_eta->SetXTitle("#eta");           fHistLambdareco_Prplus_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Prplus_phi = new TH1F("h_Lambda_Prplus_phi", "Pr^{+}:  #phi distribution (Lambda->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Prplus_phi->SetXTitle("#phi");           fHistLambdareco_Prplus_phi->SetYTitle("Number of Entries");

    gDirectory->cd("../");
    gDirectory->mkdir("Proton_Minus", "Antiproton from Lambda -> PPi");
    gDirectory->cd("Proton_Minus");
    fHistLambdareco_Prminus_pt = new TH1F("h_Lambda_Prminus_pt",   "Pr^{-}   p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Prminus_pt->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Prminus_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Prminus_eta = new TH1F("h_Lambda_Prminus_eta", "Pr^{-}:  #eta distribution (Lambda->P#Pi)", 100, -5, 5);
    fHistLambdareco_Prminus_eta->SetXTitle("#eta");           fHistLambdareco_Prminus_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Prminus_phi = new TH1F("h_Lambda_Prminus_phi", "Pr^{-}:  #phi distribution (Lambda->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Prminus_phi->SetXTitle("#phi");           fHistLambdareco_Prminus_phi->SetYTitle("Number of Entries");

    gDirectory->cd("../../../../");

    
    // ===================
    // Book bkg histograms
    // ===================
 
    gDirectory->mkdir("Background", "Same charged candidates");
    gDirectory->cd("Background");
    

    // Lambda -> PPi
    // ----------

    gDirectory->mkdir("PPi", "Lambda' -> proton pion");
    gDirectory->cd("PPi");

    // wide inv mass window to see the Lambda resonance for the cutbased reconstruction
    if ( fMode == kCutBased ) {
      fHistLambdareco_m_PPi_bkg   = new TH1F("h_Lambda_m_PPi_bkg", "Invariant Lambda' mass (Lambda->PPi)", 2400, 0.0, 1.2);
    } else {
      fHistLambdareco_m_PPi_bkg   = new TH1F("h_Lambda_m_PPi_bkg", "Invariant Lambda' mass (Lambda->PPi)", 50, 1.1, 1.14);
    }
    fHistLambdareco_m_PPi_bkg->SetXTitle("m_{Lambda} (GeV)"); fHistLambdareco_m_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_pt_PPi_bkg  = new TH1F("h_Lambda_pt_PPi_bkg", "Lambda'-p_{#perp} (Lambda->PPi)", 60, 0, 30);
    fHistLambdareco_pt_PPi_bkg->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_pt_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_phi_PPi_bkg = new TH1F("h_Lambda_phi_PPi_bkg", "Lambda' #phi distribution (Lambda->PPi)", 128, -3.2, 3.2);
    fHistLambdareco_phi_PPi_bkg->SetXTitle("#phi (rad)");     fHistLambdareco_phi_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_eta_PPi_bkg = new TH1F("h_Lambda_eta_PPi_bkg", "Lambda' #eta distribution (Lambda->PPi)", 100, -3, 3);
    fHistLambdareco_eta_PPi_bkg->SetXTitle("#eta");           fHistLambdareco_eta_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_N_PPi_bkg   = new TH1F("h_Lambda_N_PPi_bkg", "Reconstructed Lambda' per event (Lambda->PPi)", 10, 0, 10);
    fHistLambdareco_N_PPi_bkg->SetXTitle("N_{Lambda}/evt");   fHistLambdareco_N_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_tau_PPi_bkg = new TH1F("h_Lambda_tau_PPi_bkg", "Reconstructed Lambda' lifetime (Lambda->PPi)", 100, 0, 300);
    fHistLambdareco_tau_PPi_bkg->SetXTitle("#tau (ps)");      fHistLambdareco_tau_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_truth_PPi_bkg = new TH1F("h_Lambda_truth_PPi_bkg", "Pdg Code of truth-matched, reconstructed particles", 6260, -3130, 3130);
    fHistLambdareco_truth_PPi_bkg->SetXTitle("Pdg Code");     fHistLambdareco_truth_PPi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_R_vtx_bkg = new TH1F("h_Lambda_r_vtx_bkg", "Radial distance of secondary vertices", 400, 0.0, 100.0);
    fHistLambdareco_R_vtx_bkg->SetXTitle("r_{#perp} (cm)");   fHistLambdareco_R_vtx_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_tdcy_len_bkg = new TH1F("h_Lambda_tdcy_len_bkg", "Transverse #Lambda decay length", 400, 0.0, 100.0);
    fHistLambdareco_tdcy_len_bkg->SetXTitle("s_{#perp} (cm)");fHistLambdareco_tdcy_len_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_oangle_bkg = new TH1F("h_Lambda_oangle_bkg ", "Opening angle of p/pi", 256, 0.0, 3.2);
    fHistLambdareco_oangle_bkg ->SetXTitle("#alpha (rad)");   fHistLambdareco_oangle_bkg ->SetYTitle("Number of Entries");
    fHistLambdareco_dangle_bkg  = new TH1F("h_Lambda_dangle_bkg ", "Decay angle of p/pi", 256, -1.0, 1.0);
    fHistLambdareco_dangle_bkg ->SetXTitle("cos(#alpha)");    fHistLambdareco_dangle_bkg ->SetYTitle("Number of Entries");

    // Pion histograms in sub-folder
    gDirectory->mkdir("Pion", "Pion from Lambda' -> PPi");
    gDirectory->cd("Pion");
    fHistLambdareco_Pion_pt_bkg = new TH1F("h_Lambda_Pion_pt_bkg",   "#pi:  p_{#perp} (Lambda->P#Pi)", 60, 0, 30);
    fHistLambdareco_Pion_pt_bkg->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Pion_pt_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Pion_eta_bkg = new TH1F("h_Lambda_Pion_eta_bkg", "#pi:  #eta distribution (Lambda->P#Pi)", 100, -3, 3);
    fHistLambdareco_Pion_eta_bkg->SetXTitle("#eta");           fHistLambdareco_Pion_eta_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Pion_phi_bkg = new TH1F("h_Lambda_Pion_phi_bkg", "#pi:  #phi distribution (Lambda->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Pion_phi_bkg->SetXTitle("#phi");           fHistLambdareco_Pion_phi_bkg->SetYTitle("Number of Entries");
    
    gDirectory->mkdir("Pi_Plus", "Pion(+) from Lambda' -> PPi");
    gDirectory->cd("Pi_Plus");
    fHistLambdareco_Piplus_pt_bkg = new TH1F("h_Lambda_Piplus_pt",   "#pi^{+}:  p_{#perp} (Lambda'->P#Pi)", 60, 0, 30);
    fHistLambdareco_Piplus_pt_bkg->SetXTitle("p_{#perp} (GeV)");  fHistLambdareco_Piplus_pt_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Piplus_eta_bkg = new TH1F("h_Lambda_Piplus_eta", "#pi^{+}:  #eta distribution (Lambda'->P#Pi)", 100, -3, 3);
    fHistLambdareco_Piplus_eta_bkg->SetXTitle("#eta");            fHistLambdareco_Piplus_eta_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Piplus_phi_bkg = new TH1F("h_Lambda_Piplus_phi", "#pi^{+}:  #phi distribution (Lambda'->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Piplus_phi_bkg->SetXTitle("#phi");            fHistLambdareco_Piplus_phi_bkg->SetYTitle("Number of Entries");

    gDirectory->cd("../");
    gDirectory->mkdir("Pi_Minus", "Pion(-) from Lambda' -> PPi");
    gDirectory->cd("Pi_Minus");
    fHistLambdareco_Piminus_pt_bkg = new TH1F("h_Lambda_Piminus_pt",   "#pi^{-}:  p_{#perp} (Lambda'->P#Pi)", 60, 0, 30);
    fHistLambdareco_Piminus_pt_bkg->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Piminus_pt_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Piminus_eta_bkg = new TH1F("h_Lambda_Piminus_eta", "#pi^{-}:  #eta distribution (Lambda'->P#Pi)", 100, -3, 3);
    fHistLambdareco_Piminus_eta_bkg->SetXTitle("#eta");           fHistLambdareco_Piminus_eta_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Piminus_phi_bkg = new TH1F("h_Lambda_Piminus_phi", "#pi^{-}:  #phi distribution (Lambda'->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Piminus_phi_bkg->SetXTitle("#phi");           fHistLambdareco_Piminus_phi_bkg->SetYTitle("Number of Entries");

    gDirectory->cd("../../"); 
    
    // Proton histograms in sub-folder
    gDirectory->mkdir("Proton", "Proton from Lambda' -> PPi");
    gDirectory->cd("Proton");
    fHistLambdareco_Proton_pt_bkg = new TH1F("h_Lambda_Proton_pt_bkg",   "Proton:  p_{#perp} (Lambda'->#Pi#Pi)", 60, 0, 30);
    fHistLambdareco_Proton_pt_bkg->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Proton_pt_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Proton_eta_bkg = new TH1F("h_Lambda_Proton_eta_bkg", "Proton:  #eta distribution (Lambda'->#Pi#Pi)", 100, -5, 5);
    fHistLambdareco_Proton_eta_bkg->SetXTitle("#eta");           fHistLambdareco_Proton_eta_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Proton_phi_bkg = new TH1F("h_Lambda_Proton_phi_bkg", "Proton:  #phi distribution (Lambda'->#Pi#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Proton_phi_bkg->SetXTitle("#phi");           fHistLambdareco_Proton_phi_bkg->SetYTitle("Number of Entries");

    gDirectory->mkdir("Proton_Plus", "Proton(+) from Lambda' -> PPi");
    gDirectory->cd("Proton_Plus");

    fHistLambdareco_Prplus_pt_bkg = new TH1F("h_Lambda_Prplus_pt",   "Pr^{+}:  p_{#perp} (Lambda'->P#Pi)", 60, 0, 30);
    fHistLambdareco_Prplus_pt_bkg->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Prplus_pt->SetYTitle("Number of Entries");
    fHistLambdareco_Prplus_eta_bkg = new TH1F("h_Lambda_Prplus_eta", "Pr^{+}:  #eta distribution (Lambda'->P#Pi)", 100, -5, 5);
    fHistLambdareco_Prplus_eta_bkg->SetXTitle("#eta");           fHistLambdareco_Prplus_eta->SetYTitle("Number of Entries");
    fHistLambdareco_Prplus_phi_bkg = new TH1F("h_Lambda_Prplus_phi", "Pr^{+}:  #phi distribution (Lambda'->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Prplus_phi_bkg->SetXTitle("#phi");           fHistLambdareco_Prplus_phi_bkg->SetYTitle("Number of Entries");

    gDirectory->cd("../");
    gDirectory->mkdir("Proton_Minus", "Antiproton from Lambda' -> PPi");
    gDirectory->cd("Proton_Minus");
    fHistLambdareco_Prminus_pt_bkg = new TH1F("h_Lambda_Prminus_pt",   "Pr^{-}:  p_{#perp} (Lambda'->P#Pi)", 60, 0, 30);
    fHistLambdareco_Prminus_pt_bkg->SetXTitle("p_{#perp} (GeV)"); fHistLambdareco_Prminus_pt_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Prminus_eta_bkg = new TH1F("h_Lambda_Prminus_eta", "Pr^{-}:  #eta distribution (Lambda'->P#Pi)", 100, -5, 5);
    fHistLambdareco_Prminus_eta_bkg->SetXTitle("#eta");           fHistLambdareco_Prminus_eta_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_Prminus_phi_bkg = new TH1F("h_Lambda_Prminus_phi", "Pr^{-}:  #phi distribution (Lambda'->P#Pi)", 50, -3.14, 3.14);
    fHistLambdareco_Prminus_phi_bkg->SetXTitle("#phi");           fHistLambdareco_Prminus_phi_bkg->SetYTitle("Number of Entries");

    gDirectory->cd("../../../..");

    //
    // Histograms for MC truth matching (signal and background)
    gDirectory->mkdir("MC_Signal");
    gDirectory->cd("MC_Signal");
    if ( fMode == kCutBased ) {
      fHistLambdareco_MC_m   = new TH1F("h_Lambda_MC_m", "Invariant #Lambda mass (MC signal)", 2400, 0.0, 1.2);
    } else {
      fHistLambdareco_MC_m   = new TH1F("h_Lambda_MC_m", "Invariant #Lambda mass (MC signal)", 50, 1.1, 1.14);
    }
    fHistLambdareco_MC_m->SetXTitle("m_{#Lambda} (GeV)");     fHistLambdareco_MC_m->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ppi = new TH1F("h_Lambda_MC_m_ppi", "Invariant mass w/ proton/pion hypothesis (MC signal)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ppi->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_ppi->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_pipi = new TH1F("h_Lambda_MC_m_pipi", "Invariant mass w/ pion/pion hypothesis (MC signal)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_pipi->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_pipi->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ee = new TH1F("h_Lambda_MC_m_ee", "Invariant mass w/ ee hypothesis (MC signal)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ee->SetXTitle("m_{#Lambda} (GeV)");  fHistLambdareco_MC_m_ee->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ppi_o = new TH1F("h_Lambda_MC_m_ppi_o", "Invariant mass w/ proton/pion hypothesis (MC signal)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ppi_o->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_ppi_o->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_pipi_o = new TH1F("h_Lambda_MC_m_pipi_o", "Invariant mass w/ pion/pion hypothesis (MC signal)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_pipi_o->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_pipi_o->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ee_o = new TH1F("h_Lambda_MC_m_ee_o", "Invariant mass w/ ee hypothesis (MC signal)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ee_o->SetXTitle("m_{#Lambda} (GeV)");  fHistLambdareco_MC_m_ee_o->SetYTitle("Number of Entries");
    fHistLambdareco_MC_pt  = new TH1F("h_Lambda_MC_pt", "Lambda-p_{#perp} (MC signal)", 60, 0, 30);
    fHistLambdareco_MC_pt->SetXTitle("p_{#perp} (GeV)");      fHistLambdareco_MC_pt->SetYTitle("Number of Entries");
    fHistLambdareco_MC_phi = new TH1F("h_Lambda_MC_phi", "Lambda #phi distribution (MC signal)", 128, -3.2, 3.2);
    fHistLambdareco_MC_phi->SetXTitle("#phi (rad)");          fHistLambdareco_MC_phi->SetYTitle("Number of Entries");
    fHistLambdareco_MC_eta = new TH1F("h_Lambda_MC_eta", "Lambda #eta distribution (MC signal)", 100, -3, 3);
    fHistLambdareco_MC_eta->SetXTitle("#eta");                fHistLambdareco_MC_eta->SetYTitle("Number of Entries");
    fHistLambdareco_MC_tau = new TH1F("h_Lambda_MC_tau", "Reconstructed Lambda lifetime (MC signal)", 100, 0, 300);
    fHistLambdareco_MC_tau->SetXTitle("#tau (ps)");           fHistLambdareco_MC_tau->SetYTitle("Number of Entries");
    fHistLambdareco_MC_src_div = new TH1F("h_Lambda_MC_src_div", "Angular distance of #Lambda origin and primary vertex", 300, 0.0, 3.2);
    fHistLambdareco_MC_src_div->SetXTitle("#alpha (rad)");    fHistLambdareco_MC_src_div->SetYTitle("Number of Entries");
    fHistLambdareco_MC_R_vtx = new TH1F("h_Lambda_MC_r_vtx", "Radial distance of secondary vertices", 400, 0.0, 100.0);
    fHistLambdareco_MC_R_vtx->SetXTitle("r_{#perp} (cm)");    fHistLambdareco_MC_R_vtx->SetYTitle("Number of Entries");
    fHistLambdareco_MC_tdcy_len = new TH1F("h_Lambda_MC_tdcy_len", "Transverse decay length (MC signal)", 400, 0.0, 100.0);
    fHistLambdareco_MC_tdcy_len->SetXTitle("s_{#perp} (cm)"); fHistLambdareco_MC_tdcy_len->SetYTitle("Number of Entries");
    fHistLambdareco_MC_oangle = new TH1F("h_Lambda_MC_oangle", "Opening angle of p/pi (MC signal)", 256, 0.0, 3.2);
    fHistLambdareco_MC_oangle->SetXTitle("#alpha (rad)");     fHistLambdareco_MC_oangle->SetYTitle("Number of Entries");
    fHistLambdareco_MC_dangle = new TH1F("h_Lambda_MC_dangle", "Decay angle of p/pi (MC signal)", 256, -1.0, 1.0);
    fHistLambdareco_MC_dangle->SetXTitle("cos(#alpha)");      fHistLambdareco_MC_dangle->SetYTitle("Number of Entries");
    
    gDirectory->cd("..");
    gDirectory->mkdir("MC_Background");
    gDirectory->cd("MC_Background");
    if ( fMode == kCutBased ) {
      fHistLambdareco_MC_m_bkg   = new TH1F("h_Lambda_MC_m_bkg", "Invariant #Lambda mass (MC background)", 2400, 0.0, 1.2);
    } else {
      fHistLambdareco_MC_m_bkg   = new TH1F("h_Lambda_MC_m_bkg", "Invariant #Lambda mass (MC background)", 50, 1.1, 1.14);
    }
    fHistLambdareco_MC_m_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ppi_bkg = new TH1F("h_Lambda_MC_m_ppi_bkg", "Invariant mass w/ p#pi hypothesis (MC bkg)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ppi_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_ppi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_pipi_bkg = new TH1F("h_Lambda_MC_m_pipi_bkg", "Invariant mass w/ #pi#pi hypothesis (MC bkg)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_pipi_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_pipi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ee_bkg = new TH1F("h_Lambda_MC_m_ee_bkg", "Invariant mass w/ ee hypothesis (MC bkg)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ee_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_ee_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ppi_o_bkg = new TH1F("h_Lambda_MC_m_ppi_o_bkg", "Invariant mass w/ p#pi hypothesis (MC bkg)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ppi_o_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_ppi_o_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_pipi_o_bkg = new TH1F("h_Lambda_MC_m_pipi_o_bkg", "Invariant mass w/ #pi#pi hypothesis (MC bkg)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_pipi_o_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_pipi_o_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_m_ee_o_bkg = new TH1F("h_Lambda_MC_m_ee_o_bkg", "Invariant mass w/ ee hypothesis (MC bkg)", 480, 0.0, 1.2);
    fHistLambdareco_MC_m_ee_o_bkg->SetXTitle("m_{#Lambda} (GeV)"); fHistLambdareco_MC_m_ee_o_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_pt_bkg  = new TH1F("h_Lambda_MC_pt_bkg", "Lambda-p_{#perp} (MC background)", 60, 0, 30);
    fHistLambdareco_MC_pt_bkg->SetXTitle("p_{#perp} (GeV)");   fHistLambdareco_MC_pt_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_phi_bkg = new TH1F("h_Lambda_MC_phi_bkg", "Lambda #phi distribution (MC background)", 128, -3.2, 3.2);
    fHistLambdareco_MC_phi_bkg->SetXTitle("#phi (rad)");       fHistLambdareco_MC_phi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_eta_bkg = new TH1F("h_Lambda_MC_eta_bkg", "Lambda #eta distribution (MC background)", 100, -3, 3);
    fHistLambdareco_MC_eta_bkg->SetXTitle("#eta");             fHistLambdareco_MC_eta_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_tau_bkg = new TH1F("h_Lambda_MC_tau_bkg", "Reconstructed Lambda lifetime (MC background)", 100, 0, 300);
    fHistLambdareco_MC_tau_bkg->SetXTitle("#tau (ps)");        fHistLambdareco_MC_tau_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_src_div_bkg = new TH1F("h_Lambda_MC_src_div_bkg", "Angular distance of #Lambda origin and primary vertex", 300, 0.0, 3.2);
    fHistLambdareco_MC_src_div_bkg->SetXTitle("#alpha (rad)"); fHistLambdareco_MC_src_div_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_R_vtx_bkg = new TH1F("h_Lambda_MC_r_vtx_bkg", "Radial distance of secondary vertices", 400, 0.0, 100.0);
    fHistLambdareco_MC_R_vtx_bkg->SetXTitle("r_{#perp} (cm)"); fHistLambdareco_MC_R_vtx_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_tdcy_len_bkg = new TH1F("h_Lambda_MC_tdcy_len_bkg", "Transverse decay length (MC bkg)", 400, 0.0, 100.0);
    fHistLambdareco_MC_tdcy_len_bkg->SetXTitle("s_{#perp} (cm)"); fHistLambdareco_MC_tdcy_len_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_oangle_bkg = new TH1F("h_Lambda_MC_oangle_bkg", "Opening angle of p/pi (MC bkg)", 256, 0.0, 3.2);
    fHistLambdareco_MC_oangle_bkg->SetXTitle("#alpha (rad)");  fHistLambdareco_MC_oangle_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_dangle_bkg = new TH1F("h_Lambda_MC_dangle_bkg", "Decay angle of p/pi (MC bkg)", 256, -1.0, 1.0);
    fHistLambdareco_MC_dangle_bkg->SetXTitle("cos(#alpha)");   fHistLambdareco_MC_dangle_bkg->SetYTitle("Number of Entries");

    gDirectory->cd("../Signal");

    //  Misc stuff
    // --------------
    // chi2 over ndof plots
    fHistLambdareco_chi2_vtx = new TH1F("h_Lambda_chi2_vtx", "Quality of vertex fits", 50, 0.0, 5.0);
    fHistLambdareco_chi2_vtx->SetXTitle("Chi^{2} of vertex fits"); fHistLambdareco_chi2_vtx->SetYTitle("Number of Entries");
    fHistLambdareco_chi2_vtx->GetXaxis()->SetLabelSize(0.03);
    fHistLambdareco_chi2_trk = new TH1F("h_Lambda_chi2_trk", "Quality of track fits", 50, 0.0, 5.0);
    fHistLambdareco_chi2_trk->SetXTitle("Chi^{2} of track fits");  fHistLambdareco_chi2_trk->SetYTitle("Number of Entries");
    fHistLambdareco_chi2_trk->GetXaxis()->SetLabelSize(0.03);
    fHistLambdareco_prob_mc = new TH1F("h_Lambda_prob_mc", "Quality of truth matching", 50, 0.0, 1.0);
    fHistLambdareco_prob_mc->SetXTitle("Truth matching performance"); fHistLambdareco_prob_mc->SetYTitle("Number of Entries");

    gDirectory->cd("/");
    fHistPrimKaon_Mother = new TH1F("h_PrimVtx_K_Mother", "Kaon mothers (at primary vtx)", 1000, 0.0, 1000.0);
    fHistPrimKaon_Mother->SetXTitle(""); fHistPrimKaon_Mother->SetYTitle("");
    fHistSecKaon_Mother  = new TH1F("h_SecVtx_K_Mother",  "Kaon mothers (at secondary vtx)", 1000, 0.0, 1000.0);
    fHistSecKaon_Mother->SetXTitle("");  fHistSecKaon_Mother->SetYTitle("");
    fHistSecKaon_Mother2Body  = new TH1F("h_SecVtx_K_Mother2Body",  "Kaon mothers (at secondary vtx)", 1000, 0.0, 1000.0);
    fHistSecKaon_Mother2Body->SetXTitle(""); fHistSecKaon_Mother2Body->SetYTitle("");
    
}


//____________________________________________________________________

Bool_t AtlKaonHistos::AnalyzeEvent() {
    //
    // Event analysis
    //

    if (fEvent->IsMC()) {

	HepVertex *vtx;
	AtlIDTrack *trk, *trk1, *trk2;
	HepMCParticle *m, *t1, *t2, *d;
	TLorentzVector v, v1, v2;
	
	for (Int_t i = 0; i < fEvent->GetN_Vertices(); i++) {
	    vtx = (HepVertex*)fEvent->GetVertices()->At(i);
	    if (!vtx->IsSecondary()) continue;

	    for (Int_t j = 0; j < vtx->GetNDaughters(); j++) {
		trk = (AtlIDTrack*)vtx->GetDaughters()->At(j);
		if ( trk->HasValidTruthMatch(0.9) && (trk->GetMCParticle()->GetMother() != NULL) &&
		     (TMath::Abs(trk->GetMCParticle()->GetPdgCode()) == 321)) {
		    fHistSecKaon_Mother->Fill(trk->GetMCParticle()->GetMother()->GetPdgName(), GetPreTagEvtWeight());
		}
	    }
	}

	for (Int_t i = 0; i < fEvent->GetN_Vertices(); i++) {
	    vtx = (HepVertex*)fEvent->GetVertices()->At(i);
	    if (!vtx->IsSecondary() || (vtx->GetNDaughters() != 2)) continue;
	    
	    trk1 = (AtlIDTrack*)vtx->GetDaughters()->At(0);
	    trk2 = (AtlIDTrack*)vtx->GetDaughters()->At(1);

	    if (! (trk1->HasValidTruthMatch(0.9) && trk2->HasValidTruthMatch(0.9)) ) continue;
	    if ((trk1->GetMCParticle()->GetMother() == NULL) || (trk2->GetMCParticle()->GetMother() == NULL)) continue;
	    if (trk1->GetMCParticle()->GetMother() != trk2->GetMCParticle()->GetMother()) continue;

	    t1  = trk1->GetMCParticle();
	    t2  = trk2->GetMCParticle();
	    m  = t1->GetMother();
	    
	    if ((TMath::Abs(t1->GetPdgCode()) == 321) || (TMath::Abs(t2->GetPdgCode()) == 321)) {
		if ( (TMath::Abs(t1->GetPdgCode()) == 321)) {
		    v1.SetVectM(trk1->P(),fm_k);
		    v2.SetVectM(trk2->P(),fm_pi);
		    v = v1 + v2;
		    fHistLambdareco_m_PPi->Fill(v.M(), GetPreTagEvtWeight());
		}
		else {
		    v1.SetVectM(trk2->P(),fm_k);
		    v2.SetVectM(trk1->P(),fm_pi);
		    v = v1 + v2;
		    fHistLambdareco_m_PPi->Fill(v.M(), GetPreTagEvtWeight());
		}
		fHistSecKaon_Mother2Body->Fill(m->GetPdgName(), GetPreTagEvtWeight());
		fDebugStream << endl << "---------------------------------------" << endl;
		fDebugStream << "Evt:    " << fTree->GetReadEvent() << " Prt: " << m->GetId() << " Vtx: " << vtx->GetId() << endl;
		if (m->GetMother() != NULL)
		    fDebugStream << "Mother²:" << m->GetMother()->GetPdgName() << endl;
		fDebugStream << "Mother: " << m->GetPdgName() << endl;
		fDebugStream << "Track1: " << t1->GetPdgName() << endl;
		fDebugStream << "Track2: " << t2->GetPdgName() << endl;
		for (Int_t j = 0; j < m->GetN_Daughters(); j++) {
		    d = (HepMCParticle*)m->GetDaughters()->At(j);
		    fDebugStream << "Daughter " << j << ": " << d->GetPdgName() << endl;
		}
	    }
	}

	

	vtx = fEvent->GetPrimaryVtx();
	if (vtx == NULL) return kFALSE;
	for (Int_t j = 0; j < vtx->GetNDaughters(); j++) {
	    trk = (AtlIDTrack*)vtx->GetDaughters()->At(j);
	    if ( trk->HasValidTruthMatch(0.9) && (trk->GetMCParticle()->GetMother() != NULL) &&
		 (TMath::Abs(trk->GetMCParticle()->GetPdgCode()) == 321)) {
		fHistPrimKaon_Mother->Fill(trk->GetMCParticle()->GetMother()->GetPdgName(), GetPreTagEvtWeight());
	    }
	}
    }
    
    /*
    fBkgLambdaDecays->Clear("C");

    // count true Lambda decays to compute efficiency
    if (fEvent->IsMC()) {
	Int_t NLambdaTrue = 0;
	for (Int_t i = 0; i < fEvent->GetN_Vertices(); i++) {
	    HepVertex *vtx = (HepVertex*)fEvent->GetVertices()->At(i);
	    if ( !( (vtx->IsSecondary()) && (vtx->GetNDaughters()==2) ))  continue;
	    AtlIDTrack *trk1 = (AtlIDTrack*)vtx->GetDaughters()->At(0);
	    AtlIDTrack *trk2 = (AtlIDTrack*)vtx->GetDaughters()->At(1);

	    if ((trk1->HasValidTruthMatch(0.0001) && (trk1->GetMCParticle()->GetMother() == NULL)) ||
		(trk2->HasValidTruthMatch(0.0001) && (trk2->GetMCParticle()->GetMother() == NULL)) ) {
		cout << endl << "In Event " << fTree->GetReadEvent() << " at vtx " << i << ": "
		     << "A daughter has an MC Particle, but no MC Mother!";
	    }

	    if (trk1->HasValidTruthMatch(0.0001) && (trk1->GetMCParticle()->GetMother() != NULL) &&
		(TMath::Abs(trk1->GetMCParticle()->GetMother()->GetPdgCode()) == 421)) {
		NLambdaTrue++;
	    } else if (trk2->HasValidTruthMatch(0.0001) && (trk2->GetMCParticle()->GetMother() != NULL) &&
		       (TMath::Abs(trk2->GetMCParticle()->GetMother()->GetPdgCode()) == 421)) {
		NLambdaTrue++;
	    }
	}
	AddAbundanceTrue(NLambdaTrue);
    }

    // Do analysis
    if ( fMode == kCutBased ) {
      ReconstructLambdaCutBased();
    } else if ( fMode == kKinFit ) {
      ReconstructLambdaKinFit();
    } else {
      Error("AnalyzeEvent", "Invalid mode given. Abort!");
      gSystem->Abort(0);
    }
    */
    return kTRUE;
}

//____________________________________________________________________


void AtlKaonHistos::ReconstructLambdaCutBased(){
    //
    // Cut Based Lambda reconstruction  
    //

    // Looping over all trk-combinations at a sec Vertex for Lambda reconstruction

    AtlIDTrack *trk1 = 0;
    AtlIDTrack *trk2 = 0;                    // Compared trks
    HepVertex *Vtx;                          // Associated secondary vertex
    HepVertex *PrimaryVtx;                   // Primary vertex

    Int_t i;                                 // Vertex Loop iterator
    Int_t BkgCount = 0;                      // Background events counter

    TLorentzVector p_trk1, p_trk2, p_Lambda; // 4 Momentum
    Float_t m_Lambda = 0;                    // Reconstructed Lambda-mass

    PrimaryVtx = fEvent->GetPrimaryVtx();

    // Vertex-Loop
    for (i = 0; i < fEvent->GetN_Vertices(); i++) {

      Vtx = (HepVertex*)fEvent->GetVertices()->At(i);
      // regard only high-quality secondary vertices containing 2 outgoing tracks
      if ( !( (Vtx->IsSecondary()) && (Vtx->GetNDaughters()==2) ))  continue;
      if ( Vtx->GetChi2overNDoF() > fVertexChi2ovNDoF_max )  continue;

      // get outgoing tracks and test their quality
      trk1 = (AtlIDTrack*)Vtx->GetDaughters()->At(0);
      trk2 = (AtlIDTrack*)Vtx->GetDaughters()->At(1);
      if ( trk1->GetChi2_Vtx() / trk1->GetNDoF_Vtx() > fTrackChi2ovNDoF_max ) continue;
      if ( trk2->GetChi2_Vtx() / trk2->GetNDoF_Vtx() > fTrackChi2ovNDoF_max ) continue;

      // Get 4 Momentum and compute inv. mass of Lambda candidate
      p_trk1.SetVectM(trk1->P(), fm_k);
      p_trk2.SetVectM(trk2->P(), fm_pi);
      p_Lambda = p_trk1 + p_trk2;
      m_Lambda = p_Lambda.M();

      // Selection constraints
      // -------------------------
    
      if( (m_Lambda > fLambda_M_min) && (m_Lambda < fLambda_M_max) ) { // cut: invariant mass
        if (trk1->GetQovP() * trk2->QovP() < 0.)    {                  // cut: opposite sign for signal

	  if ( (p_trk1.Pt()  > fSignal_Pt_max)  || (p_trk1.Pt()  < fSignal_Pt_min)  ) continue;
	  if ( (p_trk2.Pt()  > fSignal_Pt_max)  || (p_trk2.Pt()  < fSignal_Pt_min)  ) continue;
	  if ( (p_trk1.Eta() > fSignal_Eta_max) || (p_trk1.Eta() < fSignal_Eta_min) ) continue;
	  if ( (p_trk2.Eta() > fSignal_Eta_max) || (p_trk2.Eta() < fSignal_Eta_min) ) continue;

	  // guess which one is the proton (the one with the larger momentum?)
	  // and add LambdaDecay to fEvents Decay-list
	  if ( p_trk1.P() > p_trk2.P() ) {
	    // fitted daughter tracks are just clones, because fitting only happens in the kinfitter method
	    HepParticle Fit_Daughter1(1, p_trk1.Px(), p_trk1.Py(), p_trk1.Pz(), p_trk1.E(),  
				      (trk1->GetQovP() < 0.) ? -2212 : 2212);
	    HepParticle Fit_Daughter2(2, p_trk2.Px(), p_trk2.Py(), p_trk2.Pz(), p_trk2.E(), 
				      (trk2->GetQovP() < 0.) ?  -211 :  211);
	    fEvent->AddLambdaDecayPiPi(p_Lambda.Px(), p_Lambda.Py(), p_Lambda.Pz(), p_Lambda.E(),
				       trk1, trk2, Vtx, PrimaryVtx, Fit_Daughter1, Fit_Daughter2);
	  } else {
	    HepParticle Fit_Daughter1(1, p_trk1.Px(), p_trk1.Py(), p_trk1.Pz(), p_trk1.E(), 
				      (trk1->GetQovP() < 0.) ?  -211 :  211);
	    HepParticle Fit_Daughter2(2, p_trk2.Px(), p_trk2.Py(), p_trk2.Pz(), p_trk2.E(), 
				      (trk2->GetQovP() < 0.) ? -2212 : 2212);
	    fEvent->AddLambdaDecayPiPi(p_Lambda.Px(), p_Lambda.Py(), p_Lambda.Pz(), p_Lambda.E(),
				       trk2, trk1, Vtx, PrimaryVtx, Fit_Daughter1, Fit_Daughter2);
	  }
        } else {
	  // both particles have same charge; add to background list
	  HepParticle Fit_Daughter1(1, p_trk1.Px(), p_trk1.Py(), p_trk1.Pz(), p_trk1.E(),
				    (trk1->GetQovP() < 0.) ? -2212 : 2212);
	  HepParticle Fit_Daughter2(2, p_trk2.Px(), p_trk2.Py(), p_trk2.Pz(), p_trk2.E(),
				    (trk2->GetQovP() < 0.) ?  -211 :  211);
	  fBkgLambdaDecays->Add(new AtlLambdaDecayPPi(BkgCount++, p_Lambda.Px(), p_Lambda.Py(), p_Lambda.Pz(),
						      p_Lambda.E(), trk1, trk2, Vtx, PrimaryVtx, 
						      Fit_Daughter1, Fit_Daughter2));
        }
      }
    }
}


//____________________________________________________________________

Bool_t AtlKaonHistos::IsKaonVertex(HepVertex *vtx) {
    //
    // Return true, if the given vertex is already assigned
    // to a kaon decay. Return false otherwise or if
    // there are no kaon decays (eg. the K0s finder didn't run).
    //

    /*
    if (fEvent->GetN_K0sDecaysPiPi() < 1) {
	return kFALSE;
    }

    TClonesArray *k0s = fEvent->GetK0sDecaysPiPi();
    for (Int_t i = 0; i < fEvent->GetN_K0sDecaysPiPi(); i++) {
	if (((AtlK0sDecayPiPi*)k0s->At(i))->GetVtx() == vtx)
	    return kTRUE;
    }
    return kFALSE;
    */
    
    AtlIDTrack *trk1 = (AtlIDTrack*)vtx->GetDaughters()->At(0);
    AtlIDTrack *trk2 = (AtlIDTrack*)vtx->GetDaughters()->At(1);
    TLorentzVector p_e1, p_e2, p_k;
    p_e1.SetVectM(trk1->P(), fm_e);
    p_e2.SetVectM(trk2->P(), fm_e);
    p_k = p_e1 + p_e2;
    return ((p_k.M() >= fK0s_M_min) && (p_k.M() < fK0s_M_max));
}


//____________________________________________________________________

Bool_t AtlKaonHistos::IsConversionVertex(HepVertex *vtx) {
    //
    // Return true, if the given vertex was already being tagged
    // as a photo conversion vertex. Return false otherwise or if
    // there are no conversion vertices.
    //
   
    AtlIDTrack *trk1 = (AtlIDTrack*)vtx->GetDaughters()->At(0);
    AtlIDTrack *trk2 = (AtlIDTrack*)vtx->GetDaughters()->At(1);
    TLorentzVector p_e1, p_e2, p_g;
    p_e1.SetVectM(trk1->P(), fm_e);
    p_e2.SetVectM(trk2->P(), fm_e);
    p_g = p_e1 + p_e2;
    return (p_g.M() < fPhotonMass_max);
}


//____________________________________________________________________

void AtlKaonHistos::ReconstructLambdaKinFit() {
  //
  // Lambda reconstruction from track-pairs assuming being pions using KinFitter
  //
  HepVertex  *Vtx = 0;
  HepVertex  *PrimVtx = 0;
  AtlIDTrack *trk1 = 0;  
  AtlIDTrack *trk2 = 0;
    
  TLorentzVector p_Lambda;
    
  TMatrixD cov_trk1(3,3);
  TMatrixD cov_trk2(3,3);
  
  Double_t fChi2;
  Int_t fNDoF;

  Int_t BkgCount = 1;  // Counts background lambdas (with equally charged decay products)
  Float_t PvalueKinFit = 0.0;

  // Get primary vertex
  PrimVtx = fEvent->GetPrimaryVtx();

  // Vertex-Loop
  for ( Int_t i = 0; i < fEvent->GetN_Vertices(); i++){
    
    Vtx = (HepVertex*)fEvent->GetVertices()->At(i);

    // Analyse only secondary vertices containing 2 outgoing tracks
    if ( !( (Vtx->IsSecondary()) && (Vtx->GetNDaughters() == 2) )) continue;
    SetCutFlow("Sec. Vtx w/ 2 Dght.");
    // cut vertex fit's chi2/ndof
    if ( Vtx->GetChi2overNDoF() > fVertexChi2ovNDoF_max ) continue;
    SetCutFlow("Vtx #chi^{2}");

    trk1 = (AtlIDTrack*)Vtx->GetDaughters()->At(0);
    trk2 = (AtlIDTrack*)Vtx->GetDaughters()->At(1);
    // cut track fit's chi2/ndof
    if (  (trk1->Chi2ovNDoF() > fTrackChi2ovNDoF_max) ||
	 (trk2->Chi2ovNDoF() > fTrackChi2ovNDoF_max) ) continue;
    SetCutFlow("Trk #chi^{2}");
    
    // Discard all tracks without reference to a truth particle for all
    // MC-Runs to compute the purity correctly
    if( fEvent->IsMC() ) {
	if( !( trk1->HasValidTruthMatch(0.0001) &&
	       trk2->HasValidTruthMatch(0.0001)) )  continue;
    }
    SetCutFlow("MC exists");

    // Definition of covariance matrices, taken from track fit
    trk1->GetCovMatrixPtEtaPhi(cov_trk1);
    trk2->GetCovMatrixPtEtaPhi(cov_trk2);

    // Define momentum used as output of the fit
    TLorentzVector FitP_trk1pr;
    TLorentzVector FitP_trk2pi;
    TKinFitter fitterPPi = PerformFit(trk1, trk2, FitP_trk1pr, FitP_trk2pi, &cov_trk1, &cov_trk2);

    TLorentzVector FitP_trk1pi;
    TLorentzVector FitP_trk2pr;
    TKinFitter fitterPiP = PerformFit(trk2, trk1, FitP_trk1pi, FitP_trk2pr, &cov_trk2, &cov_trk1);
          
    // abort, if a fit failed severely (chi2 < 0)
    if ( (fitterPPi.getS() < 0.) || (fitterPiP.getS() < 0.) ) {
      Error("ReconstructLambdaKinFit", "fitter.getS()<0. Abort!");
      gSystem->Abort(0);
    }
    // skip event, if neither fit converged
    Bool_t convPPi = (fitterPPi.getStatus() == 0);
    Bool_t convPiP = (fitterPiP.getStatus() == 0);
    if ( (!convPPi) && (!convPiP) ) continue;
    SetCutFlow("#geq 1 Fit ok");
    fN_Fits++;

    // Reconstruct Lambda 4-momentum
    // and set Chi2 and NDoF from the converged fit.
    // If both fits converged, prefer the lower chi2/ndof.
    Float_t Chi2overNDoF_PPi = fitterPPi.getS()/fitterPPi.getNDF();
    Float_t Chi2overNDoF_PiP = fitterPiP.getS()/fitterPiP.getNDF();
    HepParticle Fit_Daughter1; // save momenta from the better fit
    HepParticle Fit_Daughter2; // is filled in the following if-condition
    if ( convPPi && ( (!convPiP) || ( Chi2overNDoF_PPi <= Chi2overNDoF_PiP ) ) ) {
      p_Lambda = FitP_trk1pr + FitP_trk2pi;
      fChi2 = fitterPPi.getS();
      fNDoF = fitterPPi.getNDF();
      HepParticle FitDaughter1(1, FitP_trk1pr.Px(), FitP_trk1pr.Py(), FitP_trk1pr.Pz(), 
			       FitP_trk1pr.E(), (trk1->GetQovP() < 0.) ? -2212 : 2212);
      HepParticle FitDaughter2(2, FitP_trk2pi.Px(), FitP_trk2pi.Py(), FitP_trk2pi.Pz(), 
			       FitP_trk2pi.E(), (trk2->GetQovP() < 0.) ?  -211 :  211);  
      Fit_Daughter1 = FitDaughter1;
      Fit_Daughter2 = FitDaughter2;
    } else {
      p_Lambda = FitP_trk1pi + FitP_trk2pr;
      fChi2 = fitterPiP.getS();
      fNDoF = fitterPiP.getNDF();
      HepParticle FitDaughter1(1,FitP_trk1pi.Px(), FitP_trk1pi.Py(), FitP_trk1pi.Pz(), 
			       FitP_trk1pi.E(), (trk1->GetQovP() < 0.) ?  -211 :  211);
      HepParticle FitDaughter2(2, FitP_trk2pr.Px(), FitP_trk2pr.Py(), FitP_trk2pr.Pz(), 
			       FitP_trk2pr.E(), (trk2->GetQovP() < 0.) ? -2212 : 2212);
      Fit_Daughter1 = FitDaughter1;
      Fit_Daughter2 = FitDaughter2;
      // save proton track as first track always
      AtlIDTrack *tmp = trk2;
      trk2 = trk1;
      trk1 = tmp;
    }
    SetChi2(fChi2);
    SetNDoF(fNDoF);
    PvalueKinFit = TMath::Prob(fChi2, fNDoF);

    // calculate angular divergence to primary vertex
    TLorentzVector p_Refit = Fit_Daughter1.P() + Fit_Daughter2.P();
    if (p_Refit.Angle( Vtx->GetPos() - PrimVtx->GetPos() ) > fAngleToPrimary_max)
        continue;
    SetCutFlow("Prim vtx origin");

    // reject event, if it was also found by the K0s finder
    if (IsKaonVertex(Vtx))
	continue;
    SetCutFlow("No K0s");

    // reject event, if it was generated by photo conversion
    if (IsConversionVertex(Vtx))
        continue;
    SetCutFlow("No #gamma conv");

    // Add Lambda to event
    if (PvalueKinFit >= fKinFitPvalue_min) {
	SetCutFlow("KinFit P-value");

	AtlLambdaDecayPPi *decay;    
	if ( trk1->Charge()*trk2->Charge() < 0. ) { // require opposite sign

	    SetCutFlow("Charge ok");

	    decay = fEvent->AddLambdaDecayPiPi(p_Lambda.Px(), p_Lambda.Py(), p_Lambda.Pz(), p_Lambda.E(),
					       trk1, trk2, Vtx, PrimVtx, Fit_Daughter1, Fit_Daughter2);
	    decay->SetChi2NDoF(fChi2, fNDoF);

	    // Hitbased TruthMatching
	    if (fEvent->IsMC()) {
		switch ( DoTruthMatch(trk1, trk2, Vtx) ){
		    case 1:   fTrueReco = kTRUE;  FillMCHistograms(decay, kTRUE);  break;
		    case -1:  fTrueReco = kFALSE; FillMCHistograms(decay, kFALSE); break;
		    case 0:   continue;
		}
	    }

	    if ( IsDebugRun() ) {
		fDebugStream  << endl << "=========================================="
                                << endl << "Entry: " << fTree->GetReadEvent() << " Vtx: " << Vtx->GetId() << " Prob: " << PvalueKinFit;
		if (trk1->GetMCParticle()->GetMother() != NULL)
		    fDebugStream << endl << "Mother1: " << trk1->GetMCParticle()->GetMother()->GetPdgName()
		                         << " (" << trk1->GetMCParticle()->GetMother()->GetPdgCode() << ")";
		if (trk2->GetMCParticle()->GetMother() != NULL)
		    fDebugStream << endl << "Mother2: " << trk2->GetMCParticle()->GetMother()->GetPdgName()
                                           << " (" << trk2->GetMCParticle()->GetMother()->GetPdgCode() << ") ";
		if ((trk1->GetMCParticle()->GetMother() != NULL) && (trk2->GetMCParticle()->GetMother() != NULL))
		    fDebugStream << ((trk1->GetMCParticle()->GetMother() == trk2->GetMCParticle()->GetMother()) ? "SAME" : "DIFF");
                  fDebugStream  << endl << "Track1: " << trk1->GetMCParticle()->GetPdgName() << " (" << trk1->GetMCParticle()->GetPdgCode() << ")"
			     << endl << "Track2: " << trk2->GetMCParticle()->GetPdgName() << " (" << trk2->GetMCParticle()->GetPdgCode() << ")";
	    }
	    
	    AtlKinFitterTool::FillHistograms("Signal");
	} else {
	    // Add equally charged or mc-failed combinations to the bkg list
	    decay = new AtlLambdaDecayPPi(BkgCount++, p_Lambda.Px(), p_Lambda.Py(), p_Lambda.Pz(), 
					  p_Lambda .E(),trk1, trk2,Vtx, PrimVtx, 
					  Fit_Daughter1, Fit_Daughter2);
	    decay->SetChi2NDoF(fChi2, fNDoF);
	    fBkgLambdaDecays->Add(decay);
	    AtlKinFitterTool::FillHistograms("Bkg");
	}
    }

  } //end of vertex loop
}

//____________________________________________________________________    

TKinFitter AtlKaonHistos::PerformFit(AtlIDTrack *trk1, AtlIDTrack *trk2, TLorentzVector& FitP_trk1, TLorentzVector& FitP_trk2,
				       TMatrixD *cov_trk1, TMatrixD *cov_trk2) {
  //
  // Perform a kinematic fit with the given tracks to test the lambda mass hyptothesis
  // assuming that track1 is the proton and track2 is the pion.
  //

  // Define particles necessary for execution of the fit
  // Using proton/pion mass hypothesis; fit variables are pt, eta, phi
  TVector3 dummy1 = trk1->P(); // instead of const cast
  TFitParticlePtEtaPhi FitExec_trk1("FitExec_trk1", "FitExec_trk1 for LambdaFit", &dummy1, fm_k, cov_trk1);
  TVector3 dummy2 = trk2->P(); // instead of const cast
  TFitParticlePtEtaPhi FitExec_trk2("FitExec_trk2", "FitExec_trk2 for LambdaFit", &dummy2, fm_pi, cov_trk2);
  
  // Definition of Lambda mass constraint
  TFitConstraintM MLambdaCons("LambdaMassConstraint","LambdaMassConstraintGaus", 0, 0, fm_d0);
  MLambdaCons.addParticles1(&FitExec_trk1, &FitExec_trk2);
    
  // fitting characteristics
  TKinFitter fitter;
  fitter.addMeasParticle(&FitExec_trk1);
  fitter.addMeasParticle(&FitExec_trk2);
  fitter.addConstraint(&MLambdaCons);
    
  fitter.setMaxNbIter(50);   // maximum number of iterations
  fitter.setMaxDeltaS(5e-5); // maximum deviation of the minimum function within two iterations
  fitter.setMaxF(1e-4);      // maximum value of constraints
  fitter.setVerbosity(0);    // verbosity level
    
  // Kinematic Fitting
  fitter.fit();

  // Copy fitted 4-vectors (circumvent const cast)
  FitP_trk1 = *FitExec_trk1.getCurr4Vec();
  FitP_trk2 = *FitExec_trk2.getCurr4Vec();

  return fitter;
}


//____________________________________________________________________    

void AtlKaonHistos::FillMCHistograms(AtlLambdaDecayPPi *decay, Bool_t signal) {
    //
    // Fill histograms for MC signal/background comparison.
    // Set signal to false to fill background histograms.
    //

    TLorentzVector p_trk1, p_trk2, p_ee, p_ppi, p_pipi, p_ee_o, p_ppi_o, p_pipi_o;
    p_trk1.SetVectM(decay->GetReFitProton().P().Vect(), fm_e);
    p_trk2.SetVectM(decay->GetReFitPion().P().Vect(),   fm_e);
    p_ee = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetReFitProton().P().Vect(), fm_pi);
    p_trk2.SetVectM(decay->GetReFitPion().P().Vect(),   fm_pi);
    p_pipi = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetReFitProton().P().Vect(), fm_k);
    p_ppi = p_trk1 + p_trk2;

    p_trk1.SetVectM(decay->GetProton()->P(), fm_e);
    p_trk2.SetVectM(decay->GetPion()->P(), fm_e);
    p_ee_o = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetProton()->P(), fm_pi);
    p_trk2.SetVectM(decay->GetPion()->P(),   fm_pi);
    p_pipi_o = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetProton()->P(), fm_k);
    p_ppi_o = p_trk1 + p_trk2;

    if (signal) {
	fHistLambdareco_MC_m       ->Fill(decay->M("Reco"),     GetPreTagEvtWeight());
	fHistLambdareco_MC_pt      ->Fill(decay->Pt(),          GetPreTagEvtWeight());
	fHistLambdareco_MC_phi     ->Fill(decay->Phi(),         GetPreTagEvtWeight());
	fHistLambdareco_MC_eta     ->Fill(decay->Eta(),         GetPreTagEvtWeight());
	fHistLambdareco_MC_tau     ->Fill(decay->GetLifeTime(), GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ee    ->Fill(p_ee.M(),             GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_pipi  ->Fill(p_pipi.M(),           GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ppi   ->Fill(p_ppi.M(),            GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ee_o  ->Fill(p_ee_o.M(),           GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_pipi_o->Fill(p_pipi_o.M(),         GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ppi_o ->Fill(p_ppi_o.M(),          GetPreTagEvtWeight());
	fHistLambdareco_MC_R_vtx   ->Fill(decay->GetVtx()->GetPos().Perp(), GetPreTagEvtWeight());
	fHistLambdareco_MC_src_div ->Fill(decay->GetAngleToPrimary(),       GetPreTagEvtWeight());
	fHistLambdareco_MC_tdcy_len->Fill(decay->GetTransvDecayLength(),    GetPreTagEvtWeight());
	fHistLambdareco_MC_oangle  ->Fill(decay->GetOpeningAngle(),         GetPreTagEvtWeight());
	fHistLambdareco_MC_dangle  ->Fill(TMath::Cos(decay->GetDecayAngle()),GetPreTagEvtWeight());
    } else {
	fHistLambdareco_MC_m_bkg       ->Fill(decay->M("Reco"),     GetPreTagEvtWeight());
	fHistLambdareco_MC_pt_bkg      ->Fill(decay->Pt(),          GetPreTagEvtWeight());
	fHistLambdareco_MC_phi_bkg     ->Fill(decay->Phi(),         GetPreTagEvtWeight());
	fHistLambdareco_MC_eta_bkg     ->Fill(decay->Eta(),         GetPreTagEvtWeight());
	fHistLambdareco_MC_tau_bkg     ->Fill(decay->GetLifeTime(), GetPreTagEvtWeight());
        fHistLambdareco_MC_m_ee_bkg    ->Fill(p_ee_o.M(),           GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_pipi_bkg  ->Fill(p_pipi_o.M(),         GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ppi_bkg   ->Fill(p_ppi_o.M(),          GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ee_o_bkg  ->Fill(p_ee_o.M(),           GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_pipi_o_bkg->Fill(p_pipi_o.M(),         GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ppi_o_bkg ->Fill(p_ppi_o.M(),          GetPreTagEvtWeight());
	fHistLambdareco_MC_R_vtx_bkg   ->Fill(decay->GetVtx()->GetPos().Perp(), GetPreTagEvtWeight());
	fHistLambdareco_MC_src_div_bkg ->Fill(decay->GetAngleToPrimary(),       GetPreTagEvtWeight());
	fHistLambdareco_MC_tdcy_len_bkg->Fill(decay->GetTransvDecayLength(),    GetPreTagEvtWeight());
	fHistLambdareco_MC_oangle_bkg  ->Fill(decay->GetOpeningAngle(),         GetPreTagEvtWeight());
	fHistLambdareco_MC_dangle_bkg  ->Fill(TMath::Cos(decay->GetDecayAngle()),GetPreTagEvtWeight());
    }    
}


//____________________________________________________________________    


void AtlKaonHistos::FillHistograms() {
    //
    // Fill histograms
    //

    return;

    AtlLambdaDecayPPi *Lambda = 0;
    
    // Proton/Pion variables
    AtlIDTrack *Proton =0;
    AtlIDTrack *Pion   =0;
    TLorentzVector p_trk1, p_trk2, p_Lambda;

    // Signal (opposite charged)
    // ________________________________________
    
    for ( Int_t i = 0; i < fEvent->GetN_LambdaDecaysPiPi(); i++ ) {
      Lambda = (AtlLambdaDecayPPi*)fEvent->GetLambdaDecaysPiPi()->At(i);

      fHistLambdareco_m_PPi     ->Fill(Lambda->M("Reco"),    GetPreTagEvtWeight());
      fHistLambdareco_pt_PPi    ->Fill(Lambda->Pt(),         GetPreTagEvtWeight());
      fHistLambdareco_phi_PPi   ->Fill(Lambda->Phi(),        GetPreTagEvtWeight());
      fHistLambdareco_eta_PPi   ->Fill(Lambda->Eta(),        GetPreTagEvtWeight());
      fHistLambdareco_tau_PPi   ->Fill(Lambda->GetLifeTime(),             GetPreTagEvtWeight());
      fHistLambdareco_R_vtx     ->Fill(Lambda->GetVtx()->GetPos().Perp(), GetPreTagEvtWeight());
      fHistLambdareco_tdcy_len  ->Fill(Lambda->GetTransvDecayLength(), GetPreTagEvtWeight());
      fHistLambdareco_oangle    ->Fill(Lambda->GetOpeningAngle(),      GetPreTagEvtWeight());
      fHistLambdareco_dangle    ->Fill(Lambda->GetDecayAngle(),        GetPreTagEvtWeight());

      Proton = Lambda->GetProton();
      Pion  =  Lambda->GetPion();

      // test pi/pi hypothesis
      p_trk1.SetVectM(Proton->P(), fm_pi);
      p_trk2.SetVectM(Pion->P(),   fm_pi);
      p_Lambda = p_trk1 + p_trk2;
      fHistLambdareco_m_PiPi->Fill(p_Lambda.M(), GetPreTagEvtWeight());

      // test e/e hypothesis
      p_trk1.SetVectM(Proton->P(), fm_e);
      p_trk2.SetVectM(Pion->P(),   fm_e);
      p_Lambda = p_trk1 + p_trk2;
      fHistLambdareco_m_ee->Fill(p_Lambda.M(), GetPreTagEvtWeight());

      fHistLambdareco_chi2_vtx->Fill(Lambda->GetVtx()->GetChi2overNDoF(), GetPreTagEvtWeight());
      fHistLambdareco_chi2_trk->Fill(Proton->Chi2ovNDoF(), GetPreTagEvtWeight());
      fHistLambdareco_chi2_trk->Fill(Pion->Chi2ovNDoF(), GetPreTagEvtWeight());

      fHistLambdareco_Pion_pt     ->Fill(Proton->Pt(),  GetPreTagEvtWeight());
      fHistLambdareco_Proton_pt   ->Fill(Pion->Pt(),    GetPreTagEvtWeight());
      fHistLambdareco_Pion_eta    ->Fill(Proton->Eta(), GetPreTagEvtWeight());
      fHistLambdareco_Proton_eta  ->Fill(Pion->Eta(),   GetPreTagEvtWeight());
      fHistLambdareco_Pion_phi    ->Fill(Proton->Phi(), GetPreTagEvtWeight());
      fHistLambdareco_Proton_phi  ->Fill(Pion->Phi(),   GetPreTagEvtWeight());
      // charge separated histograms
      if (Pion->QovP() < 0.) {
        fHistLambdareco_Piminus_pt  ->Fill(Pion->Pt(),    GetPreTagEvtWeight());
        fHistLambdareco_Piminus_eta ->Fill(Pion->Eta(),   GetPreTagEvtWeight());
        fHistLambdareco_Piminus_phi ->Fill(Pion->Phi(),   GetPreTagEvtWeight());
        fHistLambdareco_Prplus_pt   ->Fill(Proton->Pt(),  GetPreTagEvtWeight());
        fHistLambdareco_Prplus_eta  ->Fill(Proton->Eta(), GetPreTagEvtWeight());
        fHistLambdareco_Prplus_phi  ->Fill(Proton->Phi(), GetPreTagEvtWeight());
      } else {
        fHistLambdareco_Piplus_pt   ->Fill(Pion->Pt(),    GetPreTagEvtWeight());
        fHistLambdareco_Piplus_eta  ->Fill(Pion->Eta(),   GetPreTagEvtWeight());
        fHistLambdareco_Piplus_phi  ->Fill(Pion->Phi(),   GetPreTagEvtWeight());
        fHistLambdareco_Prminus_pt  ->Fill(Proton->Pt(),  GetPreTagEvtWeight());
        fHistLambdareco_Prminus_eta ->Fill(Proton->Eta(), GetPreTagEvtWeight());
        fHistLambdareco_Prminus_phi ->Fill(Proton->Phi(), GetPreTagEvtWeight());
      }
    }

    fHistLambdareco_N_PPi ->Fill(fEvent->GetN_LambdaDecaysPiPi(), GetPreTagEvtWeight());
    

    // Combinatorial Background (same charged)
    // ____________________________________________

    TIter next_bkg(fBkgLambdaDecays);
    while ( ( Lambda = (AtlLambdaDecayPPi*)next_bkg() ) ) {
      fHistLambdareco_m_PPi_bkg     ->Fill(Lambda->M("Reco"),      GetPreTagEvtWeight());
      fHistLambdareco_pt_PPi_bkg    ->Fill(Lambda->Pt(),           GetPreTagEvtWeight());
      fHistLambdareco_phi_PPi_bkg   ->Fill(Lambda->Phi(),          GetPreTagEvtWeight());
      fHistLambdareco_eta_PPi_bkg   ->Fill(Lambda->Eta(),          GetPreTagEvtWeight());
      fHistLambdareco_tau_PPi_bkg   ->Fill(Lambda->GetLifeTime(),  GetPreTagEvtWeight());
      fHistLambdareco_R_vtx_bkg     ->Fill(Lambda->GetVtx()->GetPos().Perp(), GetPreTagEvtWeight());
      fHistLambdareco_tdcy_len_bkg  ->Fill(Lambda->GetTransvDecayLength(),    GetPreTagEvtWeight());
      fHistLambdareco_oangle_bkg    ->Fill(Lambda->GetOpeningAngle(),         GetPreTagEvtWeight());
      fHistLambdareco_dangle_bkg    ->Fill(Lambda->GetDecayAngle(),           GetPreTagEvtWeight());

      Proton = Lambda->GetProton();
      Pion  =  Lambda->GetPion();
      
      fHistLambdareco_Pion_pt_bkg     ->Fill(Proton->Pt(),  GetPreTagEvtWeight());
      fHistLambdareco_Proton_pt_bkg   ->Fill(Pion->Pt(),    GetPreTagEvtWeight());
      fHistLambdareco_Pion_eta_bkg    ->Fill(Proton->Eta(), GetPreTagEvtWeight());
      fHistLambdareco_Proton_eta_bkg  ->Fill(Pion->Eta(),   GetPreTagEvtWeight());
      fHistLambdareco_Pion_phi_bkg    ->Fill(Proton->Phi(), GetPreTagEvtWeight());
      fHistLambdareco_Proton_phi_bkg  ->Fill(Pion->Phi(),   GetPreTagEvtWeight());
      // charge separated histograms
      if (Pion->QovP() < 0.) {
        fHistLambdareco_Piminus_pt_bkg  ->Fill(Pion->Pt(),    GetPreTagEvtWeight());
        fHistLambdareco_Piminus_eta_bkg ->Fill(Pion->Eta(),   GetPreTagEvtWeight());
        fHistLambdareco_Piminus_phi_bkg ->Fill(Pion->Phi(),   GetPreTagEvtWeight());
        fHistLambdareco_Prminus_pt_bkg  ->Fill(Proton->Pt(),  GetPreTagEvtWeight());
        fHistLambdareco_Prminus_eta_bkg ->Fill(Proton->Eta(), GetPreTagEvtWeight());
        fHistLambdareco_Prminus_phi_bkg ->Fill(Proton->Phi(), GetPreTagEvtWeight());
      } else {
        fHistLambdareco_Piplus_pt_bkg   ->Fill(Pion->Pt(),    GetPreTagEvtWeight());
        fHistLambdareco_Piplus_eta_bkg  ->Fill(Pion->Eta(),   GetPreTagEvtWeight());
        fHistLambdareco_Piplus_phi_bkg  ->Fill(Pion->Phi(),   GetPreTagEvtWeight());
        fHistLambdareco_Prplus_pt_bkg   ->Fill(Proton->Pt(),  GetPreTagEvtWeight());
        fHistLambdareco_Prplus_eta_bkg  ->Fill(Proton->Eta(), GetPreTagEvtWeight());
        fHistLambdareco_Prplus_phi_bkg  ->Fill(Proton->Phi(), GetPreTagEvtWeight());
      }
    }

    fHistLambdareco_N_PPi_bkg ->Fill(fBkgLambdaDecays->GetEntries(), GetPreTagEvtWeight());

}

//____________________________________________________________________

void AtlKaonHistos::SetCutDefaults() {
    //
    // Selection cut defaults and Constraint parameters
    //

    fSignal_Pt_min       =  0.5;     // Min. Pt of signal pion/proton
    fSignal_Pt_max       =  1.e10;   // Max. Pt of signal pion/proton
    fSignal_Eta_min      = -2.5;     // Min. eta of signal pion/proton
    fSignal_Eta_max      =  2.5;     // Max. eta of signal pion/proton
    
    fm_lambda            = 1.115683;       // Lambda mass hypothesis
    fm_d0                = 1.86484;        // D0 mass hypothesis
    fm_k                 = 0.493667;       // Kaon mass hypothesis
    fm_pi                = 0.13957;        // Pion mass hypothesis
    fm_proton            = 0.938272013;    // Proton mass hypothesis
    fm_e                 = 0.000510998910; // Electron mass hypothesis
}

//____________________________________________________________________


void AtlKaonHistos::PrintCutValues() {
        
  if ( fMode == kKinFit ){
    cout << endl 
         << " Used mode: kKinFit " << endl
         << " ----------------------" << endl;
    cout << " Maximum inv. mass of e+/e- test:            " << fPhotonMass_max << endl;
    cout << " Minimum probability value of kinematic fit: " << fKinFitPvalue_min << endl;
    cout << " Minimum truth matching probability:         " << fMatchingProb_min << endl;
    cout << scientific << " maximum Chi2/NDoF of Vertex Fit: " << endl
         << "  Chi2/NDoF_Vtx = " << fVertexChi2ovNDoF_max << endl;
    cout << scientific << " maximum Chi2/NDoF of Track Fit: " << endl
         << "  Chi2/NDoF_Trk =" << fTrackChi2ovNDoF_max << endl;
    cout << " ----------------------" << endl << endl;
  } else if (fMode == kCutBased)  {
    cout << endl 
         << " Used mode: kCutBased " << endl;  
    cout << " ----------------------------------------------" << endl;
    cout << " Used CutDefaults:" <<endl;
    cout << " ----------------------------------------------" << endl;
    
    cout << scientific << setprecision(3) << " " << fSignal_Pt_min << " <   Pt   < " << fSignal_Pt_max << endl;
    cout << scientific << fSignal_Eta_min << " <   Eta  < " << fSignal_Eta_max << endl;
    cout << scientific << " " << fLambda_M_min << " < M(Lbd) < " << fLambda_M_max << endl;
    cout << scientific << " Pion mass hypothesis: " << endl
         << "           M_Pi = " << fm_pi << endl;
    cout << scientific << " Proton mass hypothesis: " << endl
         << "       M_Proton = " << fm_proton << endl;
    cout << scientific << " maximum Chi2/NDoF of Vertex Fit: " << endl
         << "  Chi2/NDoF_Vtx = " << fVertexChi2ovNDoF_max << endl;
    cout << "----------------------------------------------" << endl;
  }
}


//____________________________________________________________________


void AtlKaonHistos::Terminate() {
    fHistPrimKaon_Mother->SetStats(kFALSE);
    fHistPrimKaon_Mother->LabelsDeflate("x");
    fHistSecKaon_Mother->SetStats(kFALSE);
    fHistSecKaon_Mother->LabelsDeflate("x");
    fHistSecKaon_Mother2Body->SetStats(kFALSE);
    fHistSecKaon_Mother2Body->LabelsDeflate("x");
/*
  AtlKinFitterTool::Terminate();

  // print truth matching statistics
  fHistLambdareco_truth_PPi->LabelsDeflate("X");
  fHistLambdareco_truth_PPi->SetStats(kFALSE);
  fHistLambdareco_truth_PPi->GetXaxis()->SetLabelSize(0.03);
  fHistLambdareco_truth_PPi->GetXaxis()->LabelsOption("v");

  cout << endl << " ----------------------------------------" << endl;
  for (int i = 1; i < fHistLambdareco_truth_PPi->GetNbinsX(); i++) {
      Double_t binContent = 0;
      for (int j = 1; j < fHistLambdareco_truth_PPi->GetNbinsY(); j++)
	  binContent += fHistLambdareco_truth_PPi->GetBinContent(i, j);
      if ((binContent > 0) && (fHistLambdareco_truth_PPi->GetXaxis()->GetBinLabel(i) != "")) {
          cout.width(15);
          cout << fHistLambdareco_truth_PPi->GetXaxis()->GetBinLabel(i);
          cout << ": " << TMath::Nint(binContent) << endl;
      }
  }

  cout << endl << "INFO: Terminating AtlKaonHistos!";
  cout << endl << "        # Successful fits: " << fN_Fits;
  cout << endl << "        # Truth match bad: " << fN_MCProbMiss;
  cout << endl << "   # TM with diff. origin: " << fN_SameOriginMiss;
  cout << endl << "     # TM => wrong tracks: " << fN_MCFail;
  cout << endl << " # Possible Lambdas found: " << TMath::Nint(fHistLambdareco_m_PPi->GetEntries());
*/  
}

//____________________________________________________________________

Int_t AtlKaonHistos::DoTruthMatch(AtlIDTrack *trk1, AtlIDTrack *trk2, HepVertex *Vtx) {
    //
    // retuns 1 in case of true Lambdas, -1 if not
    // returns 0 if no decision possible (see fMatchingProb_min)
    //

    fHistLambdareco_prob_mc->Fill(trk1->GetMCParticleProb(), GetPreTagEvtWeight());
    fHistLambdareco_prob_mc->Fill(trk2->GetMCParticleProb(), GetPreTagEvtWeight());

    // perform truth matching when analyzing MC samples
    if ( trk1->HasValidTruthMatch(fMatchingProb_min) && trk2->HasValidTruthMatch(fMatchingProb_min)) {
	
	HepMCParticle *MC1 = trk1->GetMCParticle();
	HepMCParticle *MC2 = trk2->GetMCParticle();

	// Perform null pointer check on mother particle. Yes, there are events with MC particles without a mother!
	if ((MC1->GetMother() == NULL) || (MC2->GetMother() == NULL)) {
	    return 0;
	}

	// remove "_bar" from particle name to collect antiparticle and particle in the same bin
	const char* fullPdgName = MC1->GetMother()->GetPdgName();
	char pdgName[strlen(fullPdgName)];
	if (strstr(fullPdgName, "_bar") == NULL) {
	    strcpy(pdgName, fullPdgName);
	} else {
	    strncpy(pdgName, fullPdgName, strlen(fullPdgName)-4);
	    pdgName[strlen(fullPdgName)-4] = '\0';
	}

	// decide truth match
	Float_t prob = ((AtlLambdaDecayPPi*)fEvent->GetLambdaDecaysPiPi()->Last())->GetProb();
	if ( (TMath::Abs(MC1->GetMother()->GetPdgCode()) == 421) &&
	     (MC1->GetMother() == MC2->GetMother()) &&
	     (TMath::Abs(MC1->GetPdgCode()) == 321) &&
	     (TMath::Abs(MC2->GetPdgCode()) == 211) ) {

	    fHistLambdareco_truth_PPi->Fill(pdgName, prob, GetPreTagEvtWeight());
	    return 1;
	} else {
	    
	    if (MC1->GetMother() != MC2->GetMother()) {
		fHistLambdareco_truth_PPi->Fill("Comb", prob, GetPreTagEvtWeight());
		fN_SameOriginMiss++;
	    } else {
		fHistLambdareco_truth_PPi->Fill(pdgName, prob, GetPreTagEvtWeight());
		fN_MCFail++;
	    }

	    return -1;
	}
    } else {
	return 0;
    }
      
}

//____________________________________________________________________
 AtlKaonHistos.cxx:1
 AtlKaonHistos.cxx:2
 AtlKaonHistos.cxx:3
 AtlKaonHistos.cxx:4
 AtlKaonHistos.cxx:5
 AtlKaonHistos.cxx:6
 AtlKaonHistos.cxx:7
 AtlKaonHistos.cxx:8
 AtlKaonHistos.cxx:9
 AtlKaonHistos.cxx:10
 AtlKaonHistos.cxx:11
 AtlKaonHistos.cxx:12
 AtlKaonHistos.cxx:13
 AtlKaonHistos.cxx:14
 AtlKaonHistos.cxx:15
 AtlKaonHistos.cxx:16
 AtlKaonHistos.cxx:17
 AtlKaonHistos.cxx:18
 AtlKaonHistos.cxx:19
 AtlKaonHistos.cxx:20
 AtlKaonHistos.cxx:21
 AtlKaonHistos.cxx:22
 AtlKaonHistos.cxx:23
 AtlKaonHistos.cxx:24
 AtlKaonHistos.cxx:25
 AtlKaonHistos.cxx:26
 AtlKaonHistos.cxx:27
 AtlKaonHistos.cxx:28
 AtlKaonHistos.cxx:29
 AtlKaonHistos.cxx:30
 AtlKaonHistos.cxx:31
 AtlKaonHistos.cxx:32
 AtlKaonHistos.cxx:33
 AtlKaonHistos.cxx:34
 AtlKaonHistos.cxx:35
 AtlKaonHistos.cxx:36
 AtlKaonHistos.cxx:37
 AtlKaonHistos.cxx:38
 AtlKaonHistos.cxx:39
 AtlKaonHistos.cxx:40
 AtlKaonHistos.cxx:41
 AtlKaonHistos.cxx:42
 AtlKaonHistos.cxx:43
 AtlKaonHistos.cxx:44
 AtlKaonHistos.cxx:45
 AtlKaonHistos.cxx:46
 AtlKaonHistos.cxx:47
 AtlKaonHistos.cxx:48
 AtlKaonHistos.cxx:49
 AtlKaonHistos.cxx:50
 AtlKaonHistos.cxx:51
 AtlKaonHistos.cxx:52
 AtlKaonHistos.cxx:53
 AtlKaonHistos.cxx:54
 AtlKaonHistos.cxx:55
 AtlKaonHistos.cxx:56
 AtlKaonHistos.cxx:57
 AtlKaonHistos.cxx:58
 AtlKaonHistos.cxx:59
 AtlKaonHistos.cxx:60
 AtlKaonHistos.cxx:61
 AtlKaonHistos.cxx:62
 AtlKaonHistos.cxx:63
 AtlKaonHistos.cxx:64
 AtlKaonHistos.cxx:65
 AtlKaonHistos.cxx:66
 AtlKaonHistos.cxx:67
 AtlKaonHistos.cxx:68
 AtlKaonHistos.cxx:69
 AtlKaonHistos.cxx:70
 AtlKaonHistos.cxx:71
 AtlKaonHistos.cxx:72
 AtlKaonHistos.cxx:73
 AtlKaonHistos.cxx:74
 AtlKaonHistos.cxx:75
 AtlKaonHistos.cxx:76
 AtlKaonHistos.cxx:77
 AtlKaonHistos.cxx:78
 AtlKaonHistos.cxx:79
 AtlKaonHistos.cxx:80
 AtlKaonHistos.cxx:81
 AtlKaonHistos.cxx:82
 AtlKaonHistos.cxx:83
 AtlKaonHistos.cxx:84
 AtlKaonHistos.cxx:85
 AtlKaonHistos.cxx:86
 AtlKaonHistos.cxx:87
 AtlKaonHistos.cxx:88
 AtlKaonHistos.cxx:89
 AtlKaonHistos.cxx:90
 AtlKaonHistos.cxx:91
 AtlKaonHistos.cxx:92
 AtlKaonHistos.cxx:93
 AtlKaonHistos.cxx:94
 AtlKaonHistos.cxx:95
 AtlKaonHistos.cxx:96
 AtlKaonHistos.cxx:97
 AtlKaonHistos.cxx:98
 AtlKaonHistos.cxx:99
 AtlKaonHistos.cxx:100
 AtlKaonHistos.cxx:101
 AtlKaonHistos.cxx:102
 AtlKaonHistos.cxx:103
 AtlKaonHistos.cxx:104
 AtlKaonHistos.cxx:105
 AtlKaonHistos.cxx:106
 AtlKaonHistos.cxx:107
 AtlKaonHistos.cxx:108
 AtlKaonHistos.cxx:109
 AtlKaonHistos.cxx:110
 AtlKaonHistos.cxx:111
 AtlKaonHistos.cxx:112
 AtlKaonHistos.cxx:113
 AtlKaonHistos.cxx:114
 AtlKaonHistos.cxx:115
 AtlKaonHistos.cxx:116
 AtlKaonHistos.cxx:117
 AtlKaonHistos.cxx:118
 AtlKaonHistos.cxx:119
 AtlKaonHistos.cxx:120
 AtlKaonHistos.cxx:121
 AtlKaonHistos.cxx:122
 AtlKaonHistos.cxx:123
 AtlKaonHistos.cxx:124
 AtlKaonHistos.cxx:125
 AtlKaonHistos.cxx:126
 AtlKaonHistos.cxx:127
 AtlKaonHistos.cxx:128
 AtlKaonHistos.cxx:129
 AtlKaonHistos.cxx:130
 AtlKaonHistos.cxx:131
 AtlKaonHistos.cxx:132
 AtlKaonHistos.cxx:133
 AtlKaonHistos.cxx:134
 AtlKaonHistos.cxx:135
 AtlKaonHistos.cxx:136
 AtlKaonHistos.cxx:137
 AtlKaonHistos.cxx:138
 AtlKaonHistos.cxx:139
 AtlKaonHistos.cxx:140
 AtlKaonHistos.cxx:141
 AtlKaonHistos.cxx:142
 AtlKaonHistos.cxx:143
 AtlKaonHistos.cxx:144
 AtlKaonHistos.cxx:145
 AtlKaonHistos.cxx:146
 AtlKaonHistos.cxx:147
 AtlKaonHistos.cxx:148
 AtlKaonHistos.cxx:149
 AtlKaonHistos.cxx:150
 AtlKaonHistos.cxx:151
 AtlKaonHistos.cxx:152
 AtlKaonHistos.cxx:153
 AtlKaonHistos.cxx:154
 AtlKaonHistos.cxx:155
 AtlKaonHistos.cxx:156
 AtlKaonHistos.cxx:157
 AtlKaonHistos.cxx:158
 AtlKaonHistos.cxx:159
 AtlKaonHistos.cxx:160
 AtlKaonHistos.cxx:161
 AtlKaonHistos.cxx:162
 AtlKaonHistos.cxx:163
 AtlKaonHistos.cxx:164
 AtlKaonHistos.cxx:165
 AtlKaonHistos.cxx:166
 AtlKaonHistos.cxx:167
 AtlKaonHistos.cxx:168
 AtlKaonHistos.cxx:169
 AtlKaonHistos.cxx:170
 AtlKaonHistos.cxx:171
 AtlKaonHistos.cxx:172
 AtlKaonHistos.cxx:173
 AtlKaonHistos.cxx:174
 AtlKaonHistos.cxx:175
 AtlKaonHistos.cxx:176
 AtlKaonHistos.cxx:177
 AtlKaonHistos.cxx:178
 AtlKaonHistos.cxx:179
 AtlKaonHistos.cxx:180
 AtlKaonHistos.cxx:181
 AtlKaonHistos.cxx:182
 AtlKaonHistos.cxx:183
 AtlKaonHistos.cxx:184
 AtlKaonHistos.cxx:185
 AtlKaonHistos.cxx:186
 AtlKaonHistos.cxx:187
 AtlKaonHistos.cxx:188
 AtlKaonHistos.cxx:189
 AtlKaonHistos.cxx:190
 AtlKaonHistos.cxx:191
 AtlKaonHistos.cxx:192
 AtlKaonHistos.cxx:193
 AtlKaonHistos.cxx:194
 AtlKaonHistos.cxx:195
 AtlKaonHistos.cxx:196
 AtlKaonHistos.cxx:197
 AtlKaonHistos.cxx:198
 AtlKaonHistos.cxx:199
 AtlKaonHistos.cxx:200
 AtlKaonHistos.cxx:201
 AtlKaonHistos.cxx:202
 AtlKaonHistos.cxx:203
 AtlKaonHistos.cxx:204
 AtlKaonHistos.cxx:205
 AtlKaonHistos.cxx:206
 AtlKaonHistos.cxx:207
 AtlKaonHistos.cxx:208
 AtlKaonHistos.cxx:209
 AtlKaonHistos.cxx:210
 AtlKaonHistos.cxx:211
 AtlKaonHistos.cxx:212
 AtlKaonHistos.cxx:213
 AtlKaonHistos.cxx:214
 AtlKaonHistos.cxx:215
 AtlKaonHistos.cxx:216
 AtlKaonHistos.cxx:217
 AtlKaonHistos.cxx:218
 AtlKaonHistos.cxx:219
 AtlKaonHistos.cxx:220
 AtlKaonHistos.cxx:221
 AtlKaonHistos.cxx:222
 AtlKaonHistos.cxx:223
 AtlKaonHistos.cxx:224
 AtlKaonHistos.cxx:225
 AtlKaonHistos.cxx:226
 AtlKaonHistos.cxx:227
 AtlKaonHistos.cxx:228
 AtlKaonHistos.cxx:229
 AtlKaonHistos.cxx:230
 AtlKaonHistos.cxx:231
 AtlKaonHistos.cxx:232
 AtlKaonHistos.cxx:233
 AtlKaonHistos.cxx:234
 AtlKaonHistos.cxx:235
 AtlKaonHistos.cxx:236
 AtlKaonHistos.cxx:237
 AtlKaonHistos.cxx:238
 AtlKaonHistos.cxx:239
 AtlKaonHistos.cxx:240
 AtlKaonHistos.cxx:241
 AtlKaonHistos.cxx:242
 AtlKaonHistos.cxx:243
 AtlKaonHistos.cxx:244
 AtlKaonHistos.cxx:245
 AtlKaonHistos.cxx:246
 AtlKaonHistos.cxx:247
 AtlKaonHistos.cxx:248
 AtlKaonHistos.cxx:249
 AtlKaonHistos.cxx:250
 AtlKaonHistos.cxx:251
 AtlKaonHistos.cxx:252
 AtlKaonHistos.cxx:253
 AtlKaonHistos.cxx:254
 AtlKaonHistos.cxx:255
 AtlKaonHistos.cxx:256
 AtlKaonHistos.cxx:257
 AtlKaonHistos.cxx:258
 AtlKaonHistos.cxx:259
 AtlKaonHistos.cxx:260
 AtlKaonHistos.cxx:261
 AtlKaonHistos.cxx:262
 AtlKaonHistos.cxx:263
 AtlKaonHistos.cxx:264
 AtlKaonHistos.cxx:265
 AtlKaonHistos.cxx:266
 AtlKaonHistos.cxx:267
 AtlKaonHistos.cxx:268
 AtlKaonHistos.cxx:269
 AtlKaonHistos.cxx:270
 AtlKaonHistos.cxx:271
 AtlKaonHistos.cxx:272
 AtlKaonHistos.cxx:273
 AtlKaonHistos.cxx:274
 AtlKaonHistos.cxx:275
 AtlKaonHistos.cxx:276
 AtlKaonHistos.cxx:277
 AtlKaonHistos.cxx:278
 AtlKaonHistos.cxx:279
 AtlKaonHistos.cxx:280
 AtlKaonHistos.cxx:281
 AtlKaonHistos.cxx:282
 AtlKaonHistos.cxx:283
 AtlKaonHistos.cxx:284
 AtlKaonHistos.cxx:285
 AtlKaonHistos.cxx:286
 AtlKaonHistos.cxx:287
 AtlKaonHistos.cxx:288
 AtlKaonHistos.cxx:289
 AtlKaonHistos.cxx:290
 AtlKaonHistos.cxx:291
 AtlKaonHistos.cxx:292
 AtlKaonHistos.cxx:293
 AtlKaonHistos.cxx:294
 AtlKaonHistos.cxx:295
 AtlKaonHistos.cxx:296
 AtlKaonHistos.cxx:297
 AtlKaonHistos.cxx:298
 AtlKaonHistos.cxx:299
 AtlKaonHistos.cxx:300
 AtlKaonHistos.cxx:301
 AtlKaonHistos.cxx:302
 AtlKaonHistos.cxx:303
 AtlKaonHistos.cxx:304
 AtlKaonHistos.cxx:305
 AtlKaonHistos.cxx:306
 AtlKaonHistos.cxx:307
 AtlKaonHistos.cxx:308
 AtlKaonHistos.cxx:309
 AtlKaonHistos.cxx:310
 AtlKaonHistos.cxx:311
 AtlKaonHistos.cxx:312
 AtlKaonHistos.cxx:313
 AtlKaonHistos.cxx:314
 AtlKaonHistos.cxx:315
 AtlKaonHistos.cxx:316
 AtlKaonHistos.cxx:317
 AtlKaonHistos.cxx:318
 AtlKaonHistos.cxx:319
 AtlKaonHistos.cxx:320
 AtlKaonHistos.cxx:321
 AtlKaonHistos.cxx:322
 AtlKaonHistos.cxx:323
 AtlKaonHistos.cxx:324
 AtlKaonHistos.cxx:325
 AtlKaonHistos.cxx:326
 AtlKaonHistos.cxx:327
 AtlKaonHistos.cxx:328
 AtlKaonHistos.cxx:329
 AtlKaonHistos.cxx:330
 AtlKaonHistos.cxx:331
 AtlKaonHistos.cxx:332
 AtlKaonHistos.cxx:333
 AtlKaonHistos.cxx:334
 AtlKaonHistos.cxx:335
 AtlKaonHistos.cxx:336
 AtlKaonHistos.cxx:337
 AtlKaonHistos.cxx:338
 AtlKaonHistos.cxx:339
 AtlKaonHistos.cxx:340
 AtlKaonHistos.cxx:341
 AtlKaonHistos.cxx:342
 AtlKaonHistos.cxx:343
 AtlKaonHistos.cxx:344
 AtlKaonHistos.cxx:345
 AtlKaonHistos.cxx:346
 AtlKaonHistos.cxx:347
 AtlKaonHistos.cxx:348
 AtlKaonHistos.cxx:349
 AtlKaonHistos.cxx:350
 AtlKaonHistos.cxx:351
 AtlKaonHistos.cxx:352
 AtlKaonHistos.cxx:353
 AtlKaonHistos.cxx:354
 AtlKaonHistos.cxx:355
 AtlKaonHistos.cxx:356
 AtlKaonHistos.cxx:357
 AtlKaonHistos.cxx:358
 AtlKaonHistos.cxx:359
 AtlKaonHistos.cxx:360
 AtlKaonHistos.cxx:361
 AtlKaonHistos.cxx:362
 AtlKaonHistos.cxx:363
 AtlKaonHistos.cxx:364
 AtlKaonHistos.cxx:365
 AtlKaonHistos.cxx:366
 AtlKaonHistos.cxx:367
 AtlKaonHistos.cxx:368
 AtlKaonHistos.cxx:369
 AtlKaonHistos.cxx:370
 AtlKaonHistos.cxx:371
 AtlKaonHistos.cxx:372
 AtlKaonHistos.cxx:373
 AtlKaonHistos.cxx:374
 AtlKaonHistos.cxx:375
 AtlKaonHistos.cxx:376
 AtlKaonHistos.cxx:377
 AtlKaonHistos.cxx:378
 AtlKaonHistos.cxx:379
 AtlKaonHistos.cxx:380
 AtlKaonHistos.cxx:381
 AtlKaonHistos.cxx:382
 AtlKaonHistos.cxx:383
 AtlKaonHistos.cxx:384
 AtlKaonHistos.cxx:385
 AtlKaonHistos.cxx:386
 AtlKaonHistos.cxx:387
 AtlKaonHistos.cxx:388
 AtlKaonHistos.cxx:389
 AtlKaonHistos.cxx:390
 AtlKaonHistos.cxx:391
 AtlKaonHistos.cxx:392
 AtlKaonHistos.cxx:393
 AtlKaonHistos.cxx:394
 AtlKaonHistos.cxx:395
 AtlKaonHistos.cxx:396
 AtlKaonHistos.cxx:397
 AtlKaonHistos.cxx:398
 AtlKaonHistos.cxx:399
 AtlKaonHistos.cxx:400
 AtlKaonHistos.cxx:401
 AtlKaonHistos.cxx:402
 AtlKaonHistos.cxx:403
 AtlKaonHistos.cxx:404
 AtlKaonHistos.cxx:405
 AtlKaonHistos.cxx:406
 AtlKaonHistos.cxx:407
 AtlKaonHistos.cxx:408
 AtlKaonHistos.cxx:409
 AtlKaonHistos.cxx:410
 AtlKaonHistos.cxx:411
 AtlKaonHistos.cxx:412
 AtlKaonHistos.cxx:413
 AtlKaonHistos.cxx:414
 AtlKaonHistos.cxx:415
 AtlKaonHistos.cxx:416
 AtlKaonHistos.cxx:417
 AtlKaonHistos.cxx:418
 AtlKaonHistos.cxx:419
 AtlKaonHistos.cxx:420
 AtlKaonHistos.cxx:421
 AtlKaonHistos.cxx:422
 AtlKaonHistos.cxx:423
 AtlKaonHistos.cxx:424
 AtlKaonHistos.cxx:425
 AtlKaonHistos.cxx:426
 AtlKaonHistos.cxx:427
 AtlKaonHistos.cxx:428
 AtlKaonHistos.cxx:429
 AtlKaonHistos.cxx:430
 AtlKaonHistos.cxx:431
 AtlKaonHistos.cxx:432
 AtlKaonHistos.cxx:433
 AtlKaonHistos.cxx:434
 AtlKaonHistos.cxx:435
 AtlKaonHistos.cxx:436
 AtlKaonHistos.cxx:437
 AtlKaonHistos.cxx:438
 AtlKaonHistos.cxx:439
 AtlKaonHistos.cxx:440
 AtlKaonHistos.cxx:441
 AtlKaonHistos.cxx:442
 AtlKaonHistos.cxx:443
 AtlKaonHistos.cxx:444
 AtlKaonHistos.cxx:445
 AtlKaonHistos.cxx:446
 AtlKaonHistos.cxx:447
 AtlKaonHistos.cxx:448
 AtlKaonHistos.cxx:449
 AtlKaonHistos.cxx:450
 AtlKaonHistos.cxx:451
 AtlKaonHistos.cxx:452
 AtlKaonHistos.cxx:453
 AtlKaonHistos.cxx:454
 AtlKaonHistos.cxx:455
 AtlKaonHistos.cxx:456
 AtlKaonHistos.cxx:457
 AtlKaonHistos.cxx:458
 AtlKaonHistos.cxx:459
 AtlKaonHistos.cxx:460
 AtlKaonHistos.cxx:461
 AtlKaonHistos.cxx:462
 AtlKaonHistos.cxx:463
 AtlKaonHistos.cxx:464
 AtlKaonHistos.cxx:465
 AtlKaonHistos.cxx:466
 AtlKaonHistos.cxx:467
 AtlKaonHistos.cxx:468
 AtlKaonHistos.cxx:469
 AtlKaonHistos.cxx:470
 AtlKaonHistos.cxx:471
 AtlKaonHistos.cxx:472
 AtlKaonHistos.cxx:473
 AtlKaonHistos.cxx:474
 AtlKaonHistos.cxx:475
 AtlKaonHistos.cxx:476
 AtlKaonHistos.cxx:477
 AtlKaonHistos.cxx:478
 AtlKaonHistos.cxx:479
 AtlKaonHistos.cxx:480
 AtlKaonHistos.cxx:481
 AtlKaonHistos.cxx:482
 AtlKaonHistos.cxx:483
 AtlKaonHistos.cxx:484
 AtlKaonHistos.cxx:485
 AtlKaonHistos.cxx:486
 AtlKaonHistos.cxx:487
 AtlKaonHistos.cxx:488
 AtlKaonHistos.cxx:489
 AtlKaonHistos.cxx:490
 AtlKaonHistos.cxx:491
 AtlKaonHistos.cxx:492
 AtlKaonHistos.cxx:493
 AtlKaonHistos.cxx:494
 AtlKaonHistos.cxx:495
 AtlKaonHistos.cxx:496
 AtlKaonHistos.cxx:497
 AtlKaonHistos.cxx:498
 AtlKaonHistos.cxx:499
 AtlKaonHistos.cxx:500
 AtlKaonHistos.cxx:501
 AtlKaonHistos.cxx:502
 AtlKaonHistos.cxx:503
 AtlKaonHistos.cxx:504
 AtlKaonHistos.cxx:505
 AtlKaonHistos.cxx:506
 AtlKaonHistos.cxx:507
 AtlKaonHistos.cxx:508
 AtlKaonHistos.cxx:509
 AtlKaonHistos.cxx:510
 AtlKaonHistos.cxx:511
 AtlKaonHistos.cxx:512
 AtlKaonHistos.cxx:513
 AtlKaonHistos.cxx:514
 AtlKaonHistos.cxx:515
 AtlKaonHistos.cxx:516
 AtlKaonHistos.cxx:517
 AtlKaonHistos.cxx:518
 AtlKaonHistos.cxx:519
 AtlKaonHistos.cxx:520
 AtlKaonHistos.cxx:521
 AtlKaonHistos.cxx:522
 AtlKaonHistos.cxx:523
 AtlKaonHistos.cxx:524
 AtlKaonHistos.cxx:525
 AtlKaonHistos.cxx:526
 AtlKaonHistos.cxx:527
 AtlKaonHistos.cxx:528
 AtlKaonHistos.cxx:529
 AtlKaonHistos.cxx:530
 AtlKaonHistos.cxx:531
 AtlKaonHistos.cxx:532
 AtlKaonHistos.cxx:533
 AtlKaonHistos.cxx:534
 AtlKaonHistos.cxx:535
 AtlKaonHistos.cxx:536
 AtlKaonHistos.cxx:537
 AtlKaonHistos.cxx:538
 AtlKaonHistos.cxx:539
 AtlKaonHistos.cxx:540
 AtlKaonHistos.cxx:541
 AtlKaonHistos.cxx:542
 AtlKaonHistos.cxx:543
 AtlKaonHistos.cxx:544
 AtlKaonHistos.cxx:545
 AtlKaonHistos.cxx:546
 AtlKaonHistos.cxx:547
 AtlKaonHistos.cxx:548
 AtlKaonHistos.cxx:549
 AtlKaonHistos.cxx:550
 AtlKaonHistos.cxx:551
 AtlKaonHistos.cxx:552
 AtlKaonHistos.cxx:553
 AtlKaonHistos.cxx:554
 AtlKaonHistos.cxx:555
 AtlKaonHistos.cxx:556
 AtlKaonHistos.cxx:557
 AtlKaonHistos.cxx:558
 AtlKaonHistos.cxx:559
 AtlKaonHistos.cxx:560
 AtlKaonHistos.cxx:561
 AtlKaonHistos.cxx:562
 AtlKaonHistos.cxx:563
 AtlKaonHistos.cxx:564
 AtlKaonHistos.cxx:565
 AtlKaonHistos.cxx:566
 AtlKaonHistos.cxx:567
 AtlKaonHistos.cxx:568
 AtlKaonHistos.cxx:569
 AtlKaonHistos.cxx:570
 AtlKaonHistos.cxx:571
 AtlKaonHistos.cxx:572
 AtlKaonHistos.cxx:573
 AtlKaonHistos.cxx:574
 AtlKaonHistos.cxx:575
 AtlKaonHistos.cxx:576
 AtlKaonHistos.cxx:577
 AtlKaonHistos.cxx:578
 AtlKaonHistos.cxx:579
 AtlKaonHistos.cxx:580
 AtlKaonHistos.cxx:581
 AtlKaonHistos.cxx:582
 AtlKaonHistos.cxx:583
 AtlKaonHistos.cxx:584
 AtlKaonHistos.cxx:585
 AtlKaonHistos.cxx:586
 AtlKaonHistos.cxx:587
 AtlKaonHistos.cxx:588
 AtlKaonHistos.cxx:589
 AtlKaonHistos.cxx:590
 AtlKaonHistos.cxx:591
 AtlKaonHistos.cxx:592
 AtlKaonHistos.cxx:593
 AtlKaonHistos.cxx:594
 AtlKaonHistos.cxx:595
 AtlKaonHistos.cxx:596
 AtlKaonHistos.cxx:597
 AtlKaonHistos.cxx:598
 AtlKaonHistos.cxx:599
 AtlKaonHistos.cxx:600
 AtlKaonHistos.cxx:601
 AtlKaonHistos.cxx:602
 AtlKaonHistos.cxx:603
 AtlKaonHistos.cxx:604
 AtlKaonHistos.cxx:605
 AtlKaonHistos.cxx:606
 AtlKaonHistos.cxx:607
 AtlKaonHistos.cxx:608
 AtlKaonHistos.cxx:609
 AtlKaonHistos.cxx:610
 AtlKaonHistos.cxx:611
 AtlKaonHistos.cxx:612
 AtlKaonHistos.cxx:613
 AtlKaonHistos.cxx:614
 AtlKaonHistos.cxx:615
 AtlKaonHistos.cxx:616
 AtlKaonHistos.cxx:617
 AtlKaonHistos.cxx:618
 AtlKaonHistos.cxx:619
 AtlKaonHistos.cxx:620
 AtlKaonHistos.cxx:621
 AtlKaonHistos.cxx:622
 AtlKaonHistos.cxx:623
 AtlKaonHistos.cxx:624
 AtlKaonHistos.cxx:625
 AtlKaonHistos.cxx:626
 AtlKaonHistos.cxx:627
 AtlKaonHistos.cxx:628
 AtlKaonHistos.cxx:629
 AtlKaonHistos.cxx:630
 AtlKaonHistos.cxx:631
 AtlKaonHistos.cxx:632
 AtlKaonHistos.cxx:633
 AtlKaonHistos.cxx:634
 AtlKaonHistos.cxx:635
 AtlKaonHistos.cxx:636
 AtlKaonHistos.cxx:637
 AtlKaonHistos.cxx:638
 AtlKaonHistos.cxx:639
 AtlKaonHistos.cxx:640
 AtlKaonHistos.cxx:641
 AtlKaonHistos.cxx:642
 AtlKaonHistos.cxx:643
 AtlKaonHistos.cxx:644
 AtlKaonHistos.cxx:645
 AtlKaonHistos.cxx:646
 AtlKaonHistos.cxx:647
 AtlKaonHistos.cxx:648
 AtlKaonHistos.cxx:649
 AtlKaonHistos.cxx:650
 AtlKaonHistos.cxx:651
 AtlKaonHistos.cxx:652
 AtlKaonHistos.cxx:653
 AtlKaonHistos.cxx:654
 AtlKaonHistos.cxx:655
 AtlKaonHistos.cxx:656
 AtlKaonHistos.cxx:657
 AtlKaonHistos.cxx:658
 AtlKaonHistos.cxx:659
 AtlKaonHistos.cxx:660
 AtlKaonHistos.cxx:661
 AtlKaonHistos.cxx:662
 AtlKaonHistos.cxx:663
 AtlKaonHistos.cxx:664
 AtlKaonHistos.cxx:665
 AtlKaonHistos.cxx:666
 AtlKaonHistos.cxx:667
 AtlKaonHistos.cxx:668
 AtlKaonHistos.cxx:669
 AtlKaonHistos.cxx:670
 AtlKaonHistos.cxx:671
 AtlKaonHistos.cxx:672
 AtlKaonHistos.cxx:673
 AtlKaonHistos.cxx:674
 AtlKaonHistos.cxx:675
 AtlKaonHistos.cxx:676
 AtlKaonHistos.cxx:677
 AtlKaonHistos.cxx:678
 AtlKaonHistos.cxx:679
 AtlKaonHistos.cxx:680
 AtlKaonHistos.cxx:681
 AtlKaonHistos.cxx:682
 AtlKaonHistos.cxx:683
 AtlKaonHistos.cxx:684
 AtlKaonHistos.cxx:685
 AtlKaonHistos.cxx:686
 AtlKaonHistos.cxx:687
 AtlKaonHistos.cxx:688
 AtlKaonHistos.cxx:689
 AtlKaonHistos.cxx:690
 AtlKaonHistos.cxx:691
 AtlKaonHistos.cxx:692
 AtlKaonHistos.cxx:693
 AtlKaonHistos.cxx:694
 AtlKaonHistos.cxx:695
 AtlKaonHistos.cxx:696
 AtlKaonHistos.cxx:697
 AtlKaonHistos.cxx:698
 AtlKaonHistos.cxx:699
 AtlKaonHistos.cxx:700
 AtlKaonHistos.cxx:701
 AtlKaonHistos.cxx:702
 AtlKaonHistos.cxx:703
 AtlKaonHistos.cxx:704
 AtlKaonHistos.cxx:705
 AtlKaonHistos.cxx:706
 AtlKaonHistos.cxx:707
 AtlKaonHistos.cxx:708
 AtlKaonHistos.cxx:709
 AtlKaonHistos.cxx:710
 AtlKaonHistos.cxx:711
 AtlKaonHistos.cxx:712
 AtlKaonHistos.cxx:713
 AtlKaonHistos.cxx:714
 AtlKaonHistos.cxx:715
 AtlKaonHistos.cxx:716
 AtlKaonHistos.cxx:717
 AtlKaonHistos.cxx:718
 AtlKaonHistos.cxx:719
 AtlKaonHistos.cxx:720
 AtlKaonHistos.cxx:721
 AtlKaonHistos.cxx:722
 AtlKaonHistos.cxx:723
 AtlKaonHistos.cxx:724
 AtlKaonHistos.cxx:725
 AtlKaonHistos.cxx:726
 AtlKaonHistos.cxx:727
 AtlKaonHistos.cxx:728
 AtlKaonHistos.cxx:729
 AtlKaonHistos.cxx:730
 AtlKaonHistos.cxx:731
 AtlKaonHistos.cxx:732
 AtlKaonHistos.cxx:733
 AtlKaonHistos.cxx:734
 AtlKaonHistos.cxx:735
 AtlKaonHistos.cxx:736
 AtlKaonHistos.cxx:737
 AtlKaonHistos.cxx:738
 AtlKaonHistos.cxx:739
 AtlKaonHistos.cxx:740
 AtlKaonHistos.cxx:741
 AtlKaonHistos.cxx:742
 AtlKaonHistos.cxx:743
 AtlKaonHistos.cxx:744
 AtlKaonHistos.cxx:745
 AtlKaonHistos.cxx:746
 AtlKaonHistos.cxx:747
 AtlKaonHistos.cxx:748
 AtlKaonHistos.cxx:749
 AtlKaonHistos.cxx:750
 AtlKaonHistos.cxx:751
 AtlKaonHistos.cxx:752
 AtlKaonHistos.cxx:753
 AtlKaonHistos.cxx:754
 AtlKaonHistos.cxx:755
 AtlKaonHistos.cxx:756
 AtlKaonHistos.cxx:757
 AtlKaonHistos.cxx:758
 AtlKaonHistos.cxx:759
 AtlKaonHistos.cxx:760
 AtlKaonHistos.cxx:761
 AtlKaonHistos.cxx:762
 AtlKaonHistos.cxx:763
 AtlKaonHistos.cxx:764
 AtlKaonHistos.cxx:765
 AtlKaonHistos.cxx:766
 AtlKaonHistos.cxx:767
 AtlKaonHistos.cxx:768
 AtlKaonHistos.cxx:769
 AtlKaonHistos.cxx:770
 AtlKaonHistos.cxx:771
 AtlKaonHistos.cxx:772
 AtlKaonHistos.cxx:773
 AtlKaonHistos.cxx:774
 AtlKaonHistos.cxx:775
 AtlKaonHistos.cxx:776
 AtlKaonHistos.cxx:777
 AtlKaonHistos.cxx:778
 AtlKaonHistos.cxx:779
 AtlKaonHistos.cxx:780
 AtlKaonHistos.cxx:781
 AtlKaonHistos.cxx:782
 AtlKaonHistos.cxx:783
 AtlKaonHistos.cxx:784
 AtlKaonHistos.cxx:785
 AtlKaonHistos.cxx:786
 AtlKaonHistos.cxx:787
 AtlKaonHistos.cxx:788
 AtlKaonHistos.cxx:789
 AtlKaonHistos.cxx:790
 AtlKaonHistos.cxx:791
 AtlKaonHistos.cxx:792
 AtlKaonHistos.cxx:793
 AtlKaonHistos.cxx:794
 AtlKaonHistos.cxx:795
 AtlKaonHistos.cxx:796
 AtlKaonHistos.cxx:797
 AtlKaonHistos.cxx:798
 AtlKaonHistos.cxx:799
 AtlKaonHistos.cxx:800
 AtlKaonHistos.cxx:801
 AtlKaonHistos.cxx:802
 AtlKaonHistos.cxx:803
 AtlKaonHistos.cxx:804
 AtlKaonHistos.cxx:805
 AtlKaonHistos.cxx:806
 AtlKaonHistos.cxx:807
 AtlKaonHistos.cxx:808
 AtlKaonHistos.cxx:809
 AtlKaonHistos.cxx:810
 AtlKaonHistos.cxx:811
 AtlKaonHistos.cxx:812
 AtlKaonHistos.cxx:813
 AtlKaonHistos.cxx:814
 AtlKaonHistos.cxx:815
 AtlKaonHistos.cxx:816
 AtlKaonHistos.cxx:817
 AtlKaonHistos.cxx:818
 AtlKaonHistos.cxx:819
 AtlKaonHistos.cxx:820
 AtlKaonHistos.cxx:821
 AtlKaonHistos.cxx:822
 AtlKaonHistos.cxx:823
 AtlKaonHistos.cxx:824
 AtlKaonHistos.cxx:825
 AtlKaonHistos.cxx:826
 AtlKaonHistos.cxx:827
 AtlKaonHistos.cxx:828
 AtlKaonHistos.cxx:829
 AtlKaonHistos.cxx:830
 AtlKaonHistos.cxx:831
 AtlKaonHistos.cxx:832
 AtlKaonHistos.cxx:833
 AtlKaonHistos.cxx:834
 AtlKaonHistos.cxx:835
 AtlKaonHistos.cxx:836
 AtlKaonHistos.cxx:837
 AtlKaonHistos.cxx:838
 AtlKaonHistos.cxx:839
 AtlKaonHistos.cxx:840
 AtlKaonHistos.cxx:841
 AtlKaonHistos.cxx:842
 AtlKaonHistos.cxx:843
 AtlKaonHistos.cxx:844
 AtlKaonHistos.cxx:845
 AtlKaonHistos.cxx:846
 AtlKaonHistos.cxx:847
 AtlKaonHistos.cxx:848
 AtlKaonHistos.cxx:849
 AtlKaonHistos.cxx:850
 AtlKaonHistos.cxx:851
 AtlKaonHistos.cxx:852
 AtlKaonHistos.cxx:853
 AtlKaonHistos.cxx:854
 AtlKaonHistos.cxx:855
 AtlKaonHistos.cxx:856
 AtlKaonHistos.cxx:857
 AtlKaonHistos.cxx:858
 AtlKaonHistos.cxx:859
 AtlKaonHistos.cxx:860
 AtlKaonHistos.cxx:861
 AtlKaonHistos.cxx:862
 AtlKaonHistos.cxx:863
 AtlKaonHistos.cxx:864
 AtlKaonHistos.cxx:865
 AtlKaonHistos.cxx:866
 AtlKaonHistos.cxx:867
 AtlKaonHistos.cxx:868
 AtlKaonHistos.cxx:869
 AtlKaonHistos.cxx:870
 AtlKaonHistos.cxx:871
 AtlKaonHistos.cxx:872
 AtlKaonHistos.cxx:873
 AtlKaonHistos.cxx:874
 AtlKaonHistos.cxx:875
 AtlKaonHistos.cxx:876
 AtlKaonHistos.cxx:877
 AtlKaonHistos.cxx:878
 AtlKaonHistos.cxx:879
 AtlKaonHistos.cxx:880
 AtlKaonHistos.cxx:881
 AtlKaonHistos.cxx:882
 AtlKaonHistos.cxx:883
 AtlKaonHistos.cxx:884
 AtlKaonHistos.cxx:885
 AtlKaonHistos.cxx:886
 AtlKaonHistos.cxx:887
 AtlKaonHistos.cxx:888
 AtlKaonHistos.cxx:889
 AtlKaonHistos.cxx:890
 AtlKaonHistos.cxx:891
 AtlKaonHistos.cxx:892
 AtlKaonHistos.cxx:893
 AtlKaonHistos.cxx:894
 AtlKaonHistos.cxx:895
 AtlKaonHistos.cxx:896
 AtlKaonHistos.cxx:897
 AtlKaonHistos.cxx:898
 AtlKaonHistos.cxx:899
 AtlKaonHistos.cxx:900
 AtlKaonHistos.cxx:901
 AtlKaonHistos.cxx:902
 AtlKaonHistos.cxx:903
 AtlKaonHistos.cxx:904
 AtlKaonHistos.cxx:905
 AtlKaonHistos.cxx:906
 AtlKaonHistos.cxx:907
 AtlKaonHistos.cxx:908
 AtlKaonHistos.cxx:909
 AtlKaonHistos.cxx:910
 AtlKaonHistos.cxx:911
 AtlKaonHistos.cxx:912
 AtlKaonHistos.cxx:913
 AtlKaonHistos.cxx:914
 AtlKaonHistos.cxx:915
 AtlKaonHistos.cxx:916
 AtlKaonHistos.cxx:917
 AtlKaonHistos.cxx:918
 AtlKaonHistos.cxx:919
 AtlKaonHistos.cxx:920
 AtlKaonHistos.cxx:921
 AtlKaonHistos.cxx:922
 AtlKaonHistos.cxx:923
 AtlKaonHistos.cxx:924
 AtlKaonHistos.cxx:925
 AtlKaonHistos.cxx:926
 AtlKaonHistos.cxx:927
 AtlKaonHistos.cxx:928
 AtlKaonHistos.cxx:929
 AtlKaonHistos.cxx:930
 AtlKaonHistos.cxx:931
 AtlKaonHistos.cxx:932
 AtlKaonHistos.cxx:933
 AtlKaonHistos.cxx:934
 AtlKaonHistos.cxx:935
 AtlKaonHistos.cxx:936
 AtlKaonHistos.cxx:937
 AtlKaonHistos.cxx:938
 AtlKaonHistos.cxx:939
 AtlKaonHistos.cxx:940
 AtlKaonHistos.cxx:941
 AtlKaonHistos.cxx:942
 AtlKaonHistos.cxx:943
 AtlKaonHistos.cxx:944
 AtlKaonHistos.cxx:945
 AtlKaonHistos.cxx:946
 AtlKaonHistos.cxx:947
 AtlKaonHistos.cxx:948
 AtlKaonHistos.cxx:949
 AtlKaonHistos.cxx:950
 AtlKaonHistos.cxx:951
 AtlKaonHistos.cxx:952
 AtlKaonHistos.cxx:953
 AtlKaonHistos.cxx:954
 AtlKaonHistos.cxx:955
 AtlKaonHistos.cxx:956
 AtlKaonHistos.cxx:957
 AtlKaonHistos.cxx:958
 AtlKaonHistos.cxx:959
 AtlKaonHistos.cxx:960
 AtlKaonHistos.cxx:961
 AtlKaonHistos.cxx:962
 AtlKaonHistos.cxx:963
 AtlKaonHistos.cxx:964
 AtlKaonHistos.cxx:965
 AtlKaonHistos.cxx:966
 AtlKaonHistos.cxx:967
 AtlKaonHistos.cxx:968
 AtlKaonHistos.cxx:969
 AtlKaonHistos.cxx:970
 AtlKaonHistos.cxx:971
 AtlKaonHistos.cxx:972
 AtlKaonHistos.cxx:973
 AtlKaonHistos.cxx:974
 AtlKaonHistos.cxx:975
 AtlKaonHistos.cxx:976
 AtlKaonHistos.cxx:977
 AtlKaonHistos.cxx:978
 AtlKaonHistos.cxx:979
 AtlKaonHistos.cxx:980
 AtlKaonHistos.cxx:981
 AtlKaonHistos.cxx:982
 AtlKaonHistos.cxx:983
 AtlKaonHistos.cxx:984
 AtlKaonHistos.cxx:985
 AtlKaonHistos.cxx:986
 AtlKaonHistos.cxx:987
 AtlKaonHistos.cxx:988
 AtlKaonHistos.cxx:989
 AtlKaonHistos.cxx:990
 AtlKaonHistos.cxx:991
 AtlKaonHistos.cxx:992
 AtlKaonHistos.cxx:993
 AtlKaonHistos.cxx:994
 AtlKaonHistos.cxx:995
 AtlKaonHistos.cxx:996
 AtlKaonHistos.cxx:997
 AtlKaonHistos.cxx:998
 AtlKaonHistos.cxx:999
 AtlKaonHistos.cxx:1000
 AtlKaonHistos.cxx:1001
 AtlKaonHistos.cxx:1002
 AtlKaonHistos.cxx:1003
 AtlKaonHistos.cxx:1004
 AtlKaonHistos.cxx:1005
 AtlKaonHistos.cxx:1006
 AtlKaonHistos.cxx:1007
 AtlKaonHistos.cxx:1008
 AtlKaonHistos.cxx:1009
 AtlKaonHistos.cxx:1010
 AtlKaonHistos.cxx:1011
 AtlKaonHistos.cxx:1012
 AtlKaonHistos.cxx:1013
 AtlKaonHistos.cxx:1014
 AtlKaonHistos.cxx:1015
 AtlKaonHistos.cxx:1016
 AtlKaonHistos.cxx:1017
 AtlKaonHistos.cxx:1018
 AtlKaonHistos.cxx:1019
 AtlKaonHistos.cxx:1020
 AtlKaonHistos.cxx:1021
 AtlKaonHistos.cxx:1022
 AtlKaonHistos.cxx:1023
 AtlKaonHistos.cxx:1024
 AtlKaonHistos.cxx:1025
 AtlKaonHistos.cxx:1026
 AtlKaonHistos.cxx:1027
 AtlKaonHistos.cxx:1028
 AtlKaonHistos.cxx:1029
 AtlKaonHistos.cxx:1030
 AtlKaonHistos.cxx:1031
 AtlKaonHistos.cxx:1032
 AtlKaonHistos.cxx:1033
 AtlKaonHistos.cxx:1034
 AtlKaonHistos.cxx:1035
 AtlKaonHistos.cxx:1036
 AtlKaonHistos.cxx:1037
 AtlKaonHistos.cxx:1038
 AtlKaonHistos.cxx:1039
 AtlKaonHistos.cxx:1040
 AtlKaonHistos.cxx:1041
 AtlKaonHistos.cxx:1042
 AtlKaonHistos.cxx:1043
 AtlKaonHistos.cxx:1044
 AtlKaonHistos.cxx:1045
 AtlKaonHistos.cxx:1046
 AtlKaonHistos.cxx:1047
 AtlKaonHistos.cxx:1048
 AtlKaonHistos.cxx:1049
 AtlKaonHistos.cxx:1050
 AtlKaonHistos.cxx:1051
 AtlKaonHistos.cxx:1052
 AtlKaonHistos.cxx:1053
 AtlKaonHistos.cxx:1054
 AtlKaonHistos.cxx:1055
 AtlKaonHistos.cxx:1056
 AtlKaonHistos.cxx:1057
 AtlKaonHistos.cxx:1058
 AtlKaonHistos.cxx:1059
 AtlKaonHistos.cxx:1060
 AtlKaonHistos.cxx:1061
 AtlKaonHistos.cxx:1062
 AtlKaonHistos.cxx:1063
 AtlKaonHistos.cxx:1064
 AtlKaonHistos.cxx:1065
 AtlKaonHistos.cxx:1066
 AtlKaonHistos.cxx:1067
 AtlKaonHistos.cxx:1068
 AtlKaonHistos.cxx:1069
 AtlKaonHistos.cxx:1070
 AtlKaonHistos.cxx:1071
 AtlKaonHistos.cxx:1072
 AtlKaonHistos.cxx:1073
 AtlKaonHistos.cxx:1074
 AtlKaonHistos.cxx:1075
 AtlKaonHistos.cxx:1076
 AtlKaonHistos.cxx:1077
 AtlKaonHistos.cxx:1078
 AtlKaonHistos.cxx:1079
 AtlKaonHistos.cxx:1080
 AtlKaonHistos.cxx:1081
 AtlKaonHistos.cxx:1082
 AtlKaonHistos.cxx:1083
 AtlKaonHistos.cxx:1084
 AtlKaonHistos.cxx:1085
 AtlKaonHistos.cxx:1086
 AtlKaonHistos.cxx:1087
 AtlKaonHistos.cxx:1088
 AtlKaonHistos.cxx:1089
 AtlKaonHistos.cxx:1090
 AtlKaonHistos.cxx:1091
 AtlKaonHistos.cxx:1092
 AtlKaonHistos.cxx:1093
 AtlKaonHistos.cxx:1094
 AtlKaonHistos.cxx:1095
 AtlKaonHistos.cxx:1096
 AtlKaonHistos.cxx:1097
 AtlKaonHistos.cxx:1098
 AtlKaonHistos.cxx:1099
 AtlKaonHistos.cxx:1100
 AtlKaonHistos.cxx:1101
 AtlKaonHistos.cxx:1102
 AtlKaonHistos.cxx:1103
 AtlKaonHistos.cxx:1104
 AtlKaonHistos.cxx:1105
 AtlKaonHistos.cxx:1106
 AtlKaonHistos.cxx:1107
 AtlKaonHistos.cxx:1108
 AtlKaonHistos.cxx:1109
 AtlKaonHistos.cxx:1110
 AtlKaonHistos.cxx:1111
 AtlKaonHistos.cxx:1112
 AtlKaonHistos.cxx:1113
 AtlKaonHistos.cxx:1114
 AtlKaonHistos.cxx:1115
 AtlKaonHistos.cxx:1116
 AtlKaonHistos.cxx:1117
 AtlKaonHistos.cxx:1118
 AtlKaonHistos.cxx:1119
 AtlKaonHistos.cxx:1120
 AtlKaonHistos.cxx:1121
 AtlKaonHistos.cxx:1122
 AtlKaonHistos.cxx:1123
 AtlKaonHistos.cxx:1124
 AtlKaonHistos.cxx:1125
 AtlKaonHistos.cxx:1126
 AtlKaonHistos.cxx:1127
 AtlKaonHistos.cxx:1128
 AtlKaonHistos.cxx:1129
 AtlKaonHistos.cxx:1130
 AtlKaonHistos.cxx:1131
 AtlKaonHistos.cxx:1132
 AtlKaonHistos.cxx:1133
 AtlKaonHistos.cxx:1134
 AtlKaonHistos.cxx:1135
 AtlKaonHistos.cxx:1136
 AtlKaonHistos.cxx:1137
 AtlKaonHistos.cxx:1138
 AtlKaonHistos.cxx:1139
 AtlKaonHistos.cxx:1140
 AtlKaonHistos.cxx:1141
 AtlKaonHistos.cxx:1142
 AtlKaonHistos.cxx:1143
 AtlKaonHistos.cxx:1144
 AtlKaonHistos.cxx:1145
 AtlKaonHistos.cxx:1146
 AtlKaonHistos.cxx:1147
 AtlKaonHistos.cxx:1148
 AtlKaonHistos.cxx:1149
 AtlKaonHistos.cxx:1150
 AtlKaonHistos.cxx:1151
 AtlKaonHistos.cxx:1152
 AtlKaonHistos.cxx:1153
 AtlKaonHistos.cxx:1154
 AtlKaonHistos.cxx:1155
 AtlKaonHistos.cxx:1156
 AtlKaonHistos.cxx:1157
 AtlKaonHistos.cxx:1158
 AtlKaonHistos.cxx:1159
 AtlKaonHistos.cxx:1160
 AtlKaonHistos.cxx:1161
 AtlKaonHistos.cxx:1162
 AtlKaonHistos.cxx:1163
 AtlKaonHistos.cxx:1164
 AtlKaonHistos.cxx:1165
 AtlKaonHistos.cxx:1166
 AtlKaonHistos.cxx:1167
 AtlKaonHistos.cxx:1168
 AtlKaonHistos.cxx:1169
 AtlKaonHistos.cxx:1170
 AtlKaonHistos.cxx:1171
 AtlKaonHistos.cxx:1172
 AtlKaonHistos.cxx:1173
 AtlKaonHistos.cxx:1174
 AtlKaonHistos.cxx:1175
 AtlKaonHistos.cxx:1176
 AtlKaonHistos.cxx:1177
 AtlKaonHistos.cxx:1178
 AtlKaonHistos.cxx:1179
 AtlKaonHistos.cxx:1180
 AtlKaonHistos.cxx:1181
 AtlKaonHistos.cxx:1182
 AtlKaonHistos.cxx:1183
 AtlKaonHistos.cxx:1184
 AtlKaonHistos.cxx:1185
 AtlKaonHistos.cxx:1186
 AtlKaonHistos.cxx:1187
 AtlKaonHistos.cxx:1188
 AtlKaonHistos.cxx:1189
 AtlKaonHistos.cxx:1190
 AtlKaonHistos.cxx:1191
 AtlKaonHistos.cxx:1192
 AtlKaonHistos.cxx:1193
 AtlKaonHistos.cxx:1194
 AtlKaonHistos.cxx:1195
 AtlKaonHistos.cxx:1196
 AtlKaonHistos.cxx:1197
 AtlKaonHistos.cxx:1198
 AtlKaonHistos.cxx:1199
 AtlKaonHistos.cxx:1200
 AtlKaonHistos.cxx:1201
 AtlKaonHistos.cxx:1202
 AtlKaonHistos.cxx:1203
 AtlKaonHistos.cxx:1204
 AtlKaonHistos.cxx:1205
 AtlKaonHistos.cxx:1206
 AtlKaonHistos.cxx:1207
 AtlKaonHistos.cxx:1208
 AtlKaonHistos.cxx:1209
 AtlKaonHistos.cxx:1210
 AtlKaonHistos.cxx:1211
 AtlKaonHistos.cxx:1212
 AtlKaonHistos.cxx:1213
 AtlKaonHistos.cxx:1214
 AtlKaonHistos.cxx:1215
 AtlKaonHistos.cxx:1216
 AtlKaonHistos.cxx:1217
 AtlKaonHistos.cxx:1218
 AtlKaonHistos.cxx:1219
 AtlKaonHistos.cxx:1220
 AtlKaonHistos.cxx:1221
 AtlKaonHistos.cxx:1222
 AtlKaonHistos.cxx:1223
 AtlKaonHistos.cxx:1224
 AtlKaonHistos.cxx:1225
 AtlKaonHistos.cxx:1226
 AtlKaonHistos.cxx:1227
 AtlKaonHistos.cxx:1228
 AtlKaonHistos.cxx:1229
 AtlKaonHistos.cxx:1230
 AtlKaonHistos.cxx:1231
 AtlKaonHistos.cxx:1232
 AtlKaonHistos.cxx:1233
 AtlKaonHistos.cxx:1234