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

//
// Author: Thomas Kintscher <mailto:kintscher@physik.hu-berlin.de>
// Copyright: 2010 (C) Thomas Kintscher
//
#ifndef ATLAS_AtlD0Finder
#include <AtlD0Finder.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(AtlD0Finder);
#endif

//____________________________________________________________________

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

//____________________________________________________________________

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

//____________________________________________________________________

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

//____________________________________________________________________

void AtlD0Finder::BookHistograms() {
    //
    // Book histograms
    //
    if ( IsDebugRun() ) fDebugStream.open("DebugOutputD0.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, 0.6, 1.6);
    } else if ( fMode == kKinFit ) {
      fHistLambdareco_m_PPi   = new TH1F("h_Lambda_m_PPi", "Invariant Lambda mass (Lambda->PPi)", 1000, 0.6, 2.5);
      fHistD0reco_m_kaon_pi   = new TH1F("h_D0_m_kaon_pi", "Invariant mass (something->K pi", 1000, 0.0, 2.5);
      fHistD0reco_m_kaon_pi->SetXTitle("m_{Something} (GeV)"); fHistD0reco_m_kaon_pi->SetYTitle("Number of Entries");
    }
    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, 2.5);
    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, 2.5);
    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, 0.05);
    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, 0.2);
    fHistLambdareco_R_vtx->SetXTitle("r_{#perp} (cm)");   fHistLambdareco_R_vtx->SetYTitle("Number of Entrs");
    fHistLambdareco_tdcy_len = new TH1F("h_Lambda_tdcy_len", "Transverse #Lambda decay length", 400, 0.0, 0.001);
    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, 2.5);
    }
    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, 0.05);
    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, 0.2);
    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, 0.001);
    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)", 1000, 0.6, 2.5);
    }
    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, 2.5);
    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, 6.0);
    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, 6.0);
    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, 2.5);
    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, 6.0);
    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, 6.0);
    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)", 320, 0, 60);
    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, 0.05);
    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, 0.012);
    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, 0.2);
    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, 0.001);
    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_coangle = new TH1F("h_Lambda_MC_coangle", "Opening angle of p/pi (MC bkg)", 256, -1.0, 1.0);
    fHistLambdareco_MC_coangle->SetXTitle("cos(#alpha)");     fHistLambdareco_MC_coangle->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");
    fHistLambdareco_MC_m_dangle = new TH2F("h_lambda_m_dangle", "M vs. Decay Angle", 40, -1.0, 1.0, 500, 1.85, 1.88);
    fHistLambdareco_MC_m_dangle->SetXTitle("cos #alpha");     fHistLambdareco_MC_m_dangle->SetYTitle("m (GeV)");
    fHistLambdareco_MC_d0_K = new TH1F("h_Lambda_MC_d0_K",  "D0 of Kaon", 200, -1.0, 1.0);
    fHistLambdareco_MC_d0_K->SetXTitle("d0 (cm)");            fHistLambdareco_MC_d0_K->SetYTitle("Number of Entries");
    fHistLambdareco_MC_d0_Pi = new TH1F("h_Lambda_MC_d0_Pi","D0 of Pion", 200, -1.0, 1.0);
    fHistLambdareco_MC_d0_Pi->SetXTitle("d0 (cm)");           fHistLambdareco_MC_d0_Pi->SetYTitle("Number of Entries");
    fHistLambdareco_MC_d0ovE_K = new TH1F("h_Lambda_MC_d0ovE_K",   "D0/err of Kaon", 400, -40.0, 40.0);
    fHistLambdareco_MC_d0ovE_K->SetXTitle("d0 (cm)");         fHistLambdareco_MC_d0ovE_K->SetYTitle("Number of Entries");
    fHistLambdareco_MC_d0ovE_Pi = new TH1F("h_Lambda_MC_d0ovE_Pi", "D0/err of Pion", 400, -40.0, 40.0);
    fHistLambdareco_MC_d0ovE_Pi->SetXTitle("d0 (cm)");        fHistLambdareco_MC_d0ovE_Pi->SetYTitle("Number of Entries");
    fHistLambdareco_MC_z0_Pi = new TH1F("h_Lambda_MC_z0_Pi", "Z0 of #pi", 200, -3.0, 3.0);
    fHistLambdareco_MC_z0_Pi->SetXTitle("d0 (cm)");           fHistLambdareco_MC_z0_Pi->SetYTitle("Number of Entries");
    fHistLambdareco_MC_z0_K = new TH1F("h_Lambda_MC_z0_K", "Z0 of K", 200, -3.0, 3.0);
    fHistLambdareco_MC_z0_K->SetXTitle("z0 (cm)");            fHistLambdareco_MC_z0_K->SetYTitle("Number of Entries");
    fHistLambdareco_MC_pi_tchi2 = new TH1F("h_Lambda_MC_pi_tchi2", "#Chi^{2}/ndf of #pi tracks", 50, 0.0, 5.0);
    fHistLambdareco_MC_pi_tchi2->SetXTitle("#Chi^{2}/ndf");   fHistLambdareco_MC_pi_tchi2->SetYTitle("Number of Entries");
    fHistLambdareco_MC_k_tchi2 = new TH1F("h_Lambda_MC_k_tchi2", "#Chi^{2}/ndf of K tracks", 50, 0.0, 5.0);
    fHistLambdareco_MC_k_tchi2->SetXTitle("#Chi^{2}/ndf");    fHistLambdareco_MC_k_tchi2->SetYTitle("Number of Entries");
    fHistLambdareco_MC_z0_diff = new TH1F("h_Lambda_MC_z0_diff", "Z0 of K", 100, 0.0, 1.0);
    fHistLambdareco_MC_z0_diff->SetXTitle("#Delta z0 (cm)");  fHistLambdareco_MC_z0_diff->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)", 1000, 0.6, 2.5);
    }
    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, 2.5);
    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, 6.0);
    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, 6.0);
    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, 2.5);
    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, 6.0);
    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, 6.0);
    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)", 320, 0, 60);
    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, 0.05);
    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, 0.012);
    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, 0.2);
    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, 0.001);
    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_coangle_bkg = new TH1F("h_Lambda_MC_coangle_bkg", "Opening angle of p/pi (MC bkg)", 256, -1.0, 1.0);
    fHistLambdareco_MC_coangle_bkg->SetXTitle("cos(#alpha)");  fHistLambdareco_MC_coangle_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");
    fHistLambdareco_MC_m_dangle_bkg = new TH2F("h_lambda_m_dangle_bkg", "M vs. Decay Angle", 40, -1.0, 1.0, 500, 1.85, 1.88);
    fHistLambdareco_MC_m_dangle_bkg->SetXTitle("cos #alpha");  fHistLambdareco_MC_m_dangle_bkg->SetYTitle("m (GeV)");
    fHistLambdareco_MC_d0_K_bkg = new TH1F("h_Lambda_MC_d0_K_bkg",   "D0 of Kaon", 200, -1.0, 1.0);
    fHistLambdareco_MC_d0_K_bkg->SetXTitle("d0 (cm)");         fHistLambdareco_MC_d0_K_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_d0_Pi_bkg = new TH1F("h_Lambda_MC_d0_Pi_bkg", "D0 of Pion", 200, -1.0, 1.0);
    fHistLambdareco_MC_d0_Pi_bkg->SetXTitle("d0 (cm)");        fHistLambdareco_MC_d0_Pi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_d0ovE_K_bkg = new TH1F("h_Lambda_MC_d0ovE_K_bkg",   "D0/err of Kaon", 400, -40.0, 40.0);
    fHistLambdareco_MC_d0ovE_K_bkg->SetXTitle("d0 (cm)");      fHistLambdareco_MC_d0ovE_K_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_d0ovE_Pi_bkg = new TH1F("h_Lambda_MC_d0ovE_Pi_bkg", "D0/err of Pion", 400, -40.0, 40.0);
    fHistLambdareco_MC_d0ovE_Pi_bkg->SetXTitle("d0 (cm)");     fHistLambdareco_MC_d0ovE_Pi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_z0_Pi_bkg = new TH1F("h_Lambda_MC_z0_Pi_bkg", "Z0 of #pi", 200, -3.0, 3.0);
    fHistLambdareco_MC_z0_Pi_bkg->SetXTitle("d0 (cm)");           fHistLambdareco_MC_z0_Pi_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_z0_K_bkg = new TH1F("h_Lambda_MC_z0_K_bkg", "Z0 of K", 200, -3.0, 3.0);
    fHistLambdareco_MC_z0_K_bkg->SetXTitle("z0 (cm)");            fHistLambdareco_MC_z0_K_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_pi_tchi2_bkg = new TH1F("h_Lambda_MC_pi_tchi2_bkg", "#Chi^{2}/ndf of #pi tracks", 50, 0.0, 5.0);
    fHistLambdareco_MC_pi_tchi2_bkg->SetXTitle("#Chi^{2}/ndf");   fHistLambdareco_MC_pi_tchi2_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_k_tchi2_bkg = new TH1F("h_Lambda_MC_k_tchi2_bkg", "#Chi^{2}/ndf of K tracks", 50, 0.0, 5.0);
    fHistLambdareco_MC_k_tchi2_bkg->SetXTitle("#Chi^{2}/ndf");    fHistLambdareco_MC_k_tchi2_bkg->SetYTitle("Number of Entries");
    fHistLambdareco_MC_z0_diff_bkg = new TH1F("h_Lambda_MC_z0_diff_bkg", "Z0 of K", 200, 0.0, 1.0);
    fHistLambdareco_MC_z0_diff_bkg->SetXTitle("#Delta z0 (cm)");  fHistLambdareco_MC_z0_diff_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");

    fHist_MC_KPi_vtx = new TH1F("h_MC_KPi_vtx", "Vertices of Kaon/Pion", 12, 0.0, 12.0);
    fHist_MC_KPi_vtx->SetYTitle("Number of Entries");
}


//____________________________________________________________________

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

    // Clean-up bkg list from previous event
    for (Int_t i = 0; i < fBkgLambdaDecays->GetEntries(); i++) {
	AtlD0DecayKPi*obj = (AtlD0DecayKPi*)fBkgLambdaDecays->At(i);
	delete obj;
    }
    fBkgLambdaDecays->Clear("C");


    if (fEvent->IsMC()) {
	// Count all d0 decays in MC events to allow computation of the efficiency.
	Int_t ND0True = 0;
	for (Int_t i = 0; i < fEvent->GetN_IDTracks(); i++) {
	    for (Int_t j = i+1; j < fEvent->GetN_IDTracks(); j++) {
		AtlIDTrack *trk1 = (AtlIDTrack*)fEvent->GetIDTracks()->At(i);
		AtlIDTrack *trk2 = (AtlIDTrack*)fEvent->GetIDTracks()->At(j);
		if( (trk1->HasValidTruthMatch(fMatchingProb_min)
		     && trk2->HasValidTruthMatch(fMatchingProb_min))
		    &&( (trk1->GetMCParticle()->GetMother() != NULL)
			&&(trk2->GetMCParticle()->GetMother() != NULL) )  ) {
		    HepMCParticle *MCMom = trk1->GetMCParticle()->GetMother();
		    if ( (MCMom->GetN_Daughters() == 2)
			 && (TMath::Abs(trk1->GetMCParticle()->GetMother()->GetPdgCode()) == 421)
			 && (trk1->GetMCParticle()->GetMother() == trk2->GetMCParticle()->GetMother())
			 && (((TMath::Abs(trk1->GetMCParticle()->GetPdgCode()) == 211)
			      && (TMath::Abs(trk2->GetMCParticle()->GetPdgCode()) == 321) )
			     || ((TMath::Abs(trk1->GetMCParticle()->GetPdgCode()) == 321)
				  && (TMath::Abs(trk2->GetMCParticle()->GetPdgCode()) == 211) )) ) {
			ND0True++;
		    }
		}
	    }
	}
	AddAbundanceTrue(ND0True);
    }
    
    if (fEvent->IsMC()) {
	HepVertex *PrimVtx = fEvent->GetPrimaryVtx();
	if (PrimVtx == NULL) return kFALSE;
	
	TList *mc = fEvent->FindMCParticlesByName("D0");
	TList *mc2 = fEvent->FindMCParticlesByName("D0_bar");
	for (Int_t i = 0; i < mc->GetEntries() + mc2->GetEntries(); i++) {
	    HepMCParticle *prt;
	    if (i < mc->GetEntries())
		prt = (HepMCParticle*)mc->At(i);
	    else
		prt = (HepMCParticle*)mc2->At(i-mc->GetEntries());
	    if (prt->GetN_Daughters() != 2) continue;

	    HepMCParticle *d1, *d2;
	    if ( TMath::Abs(((HepMCParticle*)prt->GetDaughters()->At(0))->GetPdgCode()) == 321 ) {
		d1 = (HepMCParticle*)prt->GetDaughters()->At(0);
		d2 = (HepMCParticle*)prt->GetDaughters()->At(1);
	    } else {
		d1 = (HepMCParticle*)prt->GetDaughters()->At(1);
		d2 = (HepMCParticle*)prt->GetDaughters()->At(0);
	    }
	    if (!( (TMath::Abs(d1->GetPdgCode()) == 321) && (TMath::Abs(d2->GetPdgCode()) == 211) ) ) continue;
	    
	    AtlIDTrack *t1 = fEvent->GetAssociatedIDTrack(d1);
	    AtlIDTrack *t2 = fEvent->GetAssociatedIDTrack(d2);
	    if ((t1 == NULL) && (t2 == NULL)) {
		fHist_MC_KPi_vtx->Fill("KPi invisible", GetPreTagEvtWeight());
	    } else if (t1 == NULL) {
		fHist_MC_KPi_vtx->Fill("K invisible", GetPreTagEvtWeight());
	    } else if (t2 == NULL) {
		fHist_MC_KPi_vtx->Fill("Pi invisible", GetPreTagEvtWeight());
	    } else if (t1->GetVertex() == NULL) {
		if (t2->GetVertex() == NULL) {
		    fHist_MC_KPi_vtx->Fill("No vtx/no vtx", GetPreTagEvtWeight());
		} else if (t2->GetVertex() == PrimVtx) {
		    fHist_MC_KPi_vtx->Fill("K no vtx/Pi prim vtx", GetPreTagEvtWeight());
		} else {
		    fHist_MC_KPi_vtx->Fill("K no vtx/Pi sec vtx", GetPreTagEvtWeight());
		}
	    } else if (t1->GetVertex() == PrimVtx) {
		if (t2->GetVertex() == NULL) {
		    fHist_MC_KPi_vtx->Fill("K prim vtx/no vtx", GetPreTagEvtWeight());
		} else if (t2->GetVertex() == PrimVtx) {
		    fHist_MC_KPi_vtx->Fill("K prim vtx/Pi prim vtx", GetPreTagEvtWeight());
		} else {
		    fHist_MC_KPi_vtx->Fill("K prim vtx/Pi sec vtx", GetPreTagEvtWeight());
		}
	    } else {
		if (t2->GetVertex() == NULL) {
		    fHist_MC_KPi_vtx->Fill("K sec vtx/no vtx", GetPreTagEvtWeight());
		} else if (t2->GetVertex() == PrimVtx) {
		    fHist_MC_KPi_vtx->Fill("K sec vtx/Pi prim vtx", GetPreTagEvtWeight());
		} else {
		    fHist_MC_KPi_vtx->Fill("K sec vtx/Pi sec vtx", GetPreTagEvtWeight());
		}
	    }

	}
	delete mc;
	delete mc2;
    }

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

//____________________________________________________________________


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

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

    return;

    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_proton);
      p_trk2.SetVectM(trk2->P(), fm_pi);
      p_Lambda = p_trk1 + p_trk2;
      m_Lambda = p_Lambda.M();

      // Selection constraints
      // -------------------------
    
      if( (m_Lambda > fD0_M_min) && (m_Lambda < fD0_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 AtlD0DecayKPi(BkgCount++, p_Lambda.Px(), p_Lambda.Py(), p_Lambda.Pz(),
						      p_Lambda.E(), trk1, trk2, Vtx, PrimaryVtx, 
						      Fit_Daughter1, Fit_Daughter2));
        }
      }
    }
}


//____________________________________________________________________

Bool_t AtlD0Finder::IsKaon(AtlIDTrack *trk1, AtlIDTrack *trk2) {
    //
    // 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).
    //

    AtlK0sDecayPiPi *decay = 0;
    TClonesArray *k0s = fEvent->GetK0sDecaysPiPi();
    for (Int_t i = 0; i < fEvent->GetN_K0sDecaysPiPi(); i++) {
	decay = (AtlK0sDecayPiPi*)k0s->At(i);
	if ((decay->GetPiPlus() == trk1)  || (decay->GetPiPlus() == trk2) ||
	    (decay->GetPiMinus() == trk1) || (decay->GetPiMinus() == trk2))
	    return kTRUE;
    }
    
    TLorentzVector p1, p2, p;
    p1.SetVectM(trk1->P(), fm_pi);
    p2.SetVectM(trk2->P(), fm_pi);
    p = p1 + p2;
    if ((p.M() > 0.492) && (p.M() < 0.503))
	return kTRUE;
    return kFALSE;
}

//____________________________________________________________________

Bool_t AtlD0Finder::IsLambda(AtlIDTrack *trk1, AtlIDTrack *trk2) {
    //
    // 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_LambdaDecaysPiPi() < 1) {
	return kFALSE;
    }

    AtlLambdaDecayPPi *decay;
    TClonesArray *lambda = fEvent->GetLambdaDecaysPiPi();
    for (Int_t i = 0; i < fEvent->GetN_LambdaDecaysPiPi(); i++) {
	decay = (AtlLambdaDecayPPi*)lambda->At(i);
	if ((decay->GetProton() == trk1) || (decay->GetProton() == trk2) ||
	    (decay->GetPion()   == trk1) || (decay->GetPion()   == trk2))
	    return kTRUE;
    }

    TLorentzVector p1, p2, p_ppi, p_pip;
    p1.SetVectM(trk1->P(), fm_proton);
    p2.SetVectM(trk2->P(), fm_pi);
    p_ppi = p1 + p2;
    if ((p_ppi.M() > 1.11) && (p_ppi.M() < 1.12))
	return kTRUE;
    p1.SetVectM(trk1->P(), fm_pi);
    p2.SetVectM(trk2->P(), fm_proton);
    p_pip = p1 + p2;
    if ((p_pip.M() > 1.11) && (p_pip.M() < 1.12))
	return kTRUE;
    return kFALSE;
}

//____________________________________________________________________

Bool_t AtlD0Finder::IsConversion(AtlIDTrack *trk1, AtlIDTrack *trk2) {
    //
    // 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.
    //
   
    TLorentzVector p_e1, p_e2, p_g;
    p_e1.SetVectM(trk1->P(), fm_lambda);
    p_e2.SetVectM(trk2->P(), fm_e);
    p_g = p_e1 + p_e2;
    return (p_g.M() < fPhotonMass_max);
}


//____________________________________________________________________

void AtlD0Finder::ReconstructLambdaKinFit() {
  //
  // Lambda reconstruction from track-pairs assuming being pions using KinFitter
  //
  HepVertex  *PrimVtx = 0;
  AtlIDTrack *trk1 = 0;  
  AtlIDTrack *trk2 = 0;
    
  TLorentzVector p_D0;
    
  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();
  if (PrimVtx == NULL) return;

  // Vertex-Loop
  for ( Int_t i = 0; i < fEvent->GetN_IDTracks(); i++){
    
    trk1 = (AtlIDTrack*)fEvent->GetIDTracks()->At(i);
    if ( trk1->Chi2ovNDoF() > fTrackChi2ovNDoF_max ) continue;
    if ( ! trk1->HasValidTruthMatch(fMatchingProb_min) ) continue;
    /*if ( ! (trk1->GetVertex() == PrimVtx) ) continue;*/

    for ( Int_t j = i+1; j < fEvent->GetN_IDTracks(); j++) {
	trk2 = (AtlIDTrack*)fEvent->GetIDTracks()->At(j);
	/*if ( ! (trk2->GetVertex() == PrimVtx) ) continue;*/
	if ( trk2->Chi2ovNDoF() > fTrackChi2ovNDoF_max ) continue;
	SetCutFlow("Trk #chi^{2}");

	if ( ! trk2->HasValidTruthMatch(fMatchingProb_min) ) continue;
	SetCutFlow("MC exists");

	if ( (trk1->GetD0() < fD0_K_min) || (trk1->GetD0() > fD0_K_max) )
	    continue;
	SetCutFlow("Kaon D0");
	
	if ( (trk2->GetD0() < fD0_Pi_min) || (trk2->GetD0() > fD0_Pi_max) )
	    continue;
	SetCutFlow("Pion D0");

	if ( TMath::Abs(trk1->GetZ0()-trk2->GetZ0()) >= fZDiff_max ) continue;
	SetCutFlow("Z0_Diff");
	
	if (IsConversion(trk1, trk2))
	    continue;
	SetCutFlow("No #gamma");
	
	// reject event, if it was also found by the K0s finder
	if (IsKaon(trk1, trk2))
	    continue;
	SetCutFlow("No K0s");
	
	if (IsLambda(trk1, trk2))
	    continue;
	SetCutFlow("No Lambdas");

	TLorentzVector p1, p2, p12, p21;
	if (trk1->Pt() > trk2->Pt()) {
	    p1.SetVectM(trk1->P(), fm_pi);
	    p2.SetVectM(trk2->P(), fm_kaon);
	    p12 = p1 + p2;
	    fHistD0reco_m_kaon_pi->Fill(p12.M(), GetPreTagEvtWeight());
	} else {
	    p1.SetVectM(trk2->P(), fm_kaon);
	    p2.SetVectM(trk1->P(), fm_pi);
	    p21 = p1 + p2;
	    fHistD0reco_m_kaon_pi->Fill(p21.M(), GetPreTagEvtWeight());
	}

	if ( ((p12.M() < fD0_M_min) || (p12.M() > fD0_M_max)) &&
	     ((p21.M() < fD0_M_min) || (p21.M() > fD0_M_max)) ) continue;
	SetCutFlow("D0 mass wnd");

	// 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_trk1k;
	TLorentzVector FitP_trk2pi;
	TKinFitter fitterKPi = PerformFit(trk1, trk2, FitP_trk1k, FitP_trk2pi, &cov_trk1, &cov_trk2);
	
	TLorentzVector FitP_trk1pi;
	TLorentzVector FitP_trk2k;
	TKinFitter fitterPiK = PerformFit(trk2, trk1, FitP_trk1pi, FitP_trk2k, &cov_trk2, &cov_trk1);
          
	// abort, if a fit failed severely (chi2 < 0)
	if ( (fitterKPi.getS() < 0.) || (fitterPiK.getS() < 0.) ) {
	    Error("ReconstructLambdaKinFit", "fitter.getS()<0. Abort!");
	    gSystem->Abort(0);
	}
	// skip event, if neither fit converged
	Bool_t convKPi = (fitterKPi.getStatus() == 0);
	Bool_t convPiK = (fitterPiK.getStatus() == 0);
	if ( (!convKPi) && (!convPiK) ) 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_KPi = fitterKPi.getS()/fitterKPi.getNDF();
	Float_t Chi2overNDoF_PiK = fitterPiK.getS()/fitterPiK.getNDF();
	HepParticle Fit_Daughter1; // save momenta from the better fit
	HepParticle Fit_Daughter2; // is filled in the following if-condition
	if ( convKPi && ( (!convPiK) || ( Chi2overNDoF_KPi <= Chi2overNDoF_PiK ) ) ) {
	    p_D0 = FitP_trk1k + FitP_trk2pi;
	    fChi2 = fitterKPi.getS();
	    fNDoF = fitterKPi.getNDF();
	    HepParticle FitDaughter1(1, FitP_trk1k.Px(), FitP_trk1k.Py(), FitP_trk1k.Pz(), 
				     FitP_trk1k.E(),  (trk1->GetQovP() < 0.) ? -321 : 321);
	    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_D0 = FitP_trk1pi + FitP_trk2k;
	    fChi2 = fitterPiK.getS();
	    fNDoF = fitterPiK.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_trk2k.Px(), FitP_trk2k.Py(), FitP_trk2k.Pz(), 
				     FitP_trk2k.E(),  (trk2->GetQovP() < 0.) ? -321 : 321);
	    Fit_Daughter1 = FitDaughter1;
	    Fit_Daughter2 = FitDaughter2;
	    // save Kaon track as first track always
	    AtlIDTrack *tmp = trk2;
	    trk2 = trk1;
	    trk1 = tmp;
	}
	PvalueKinFit = TMath::Prob(fChi2, fNDoF);

	if ((p_D0.Eta() < fSignal_Eta_min) || (p_D0.Eta() > fSignal_Eta_max))
	    continue;
	SetCutFlow("D0 eta");

	if ( TMath::Abs(Fit_Daughter1.P().Angle(Fit_Daughter2.P3())) > fOAngle_max )
	    continue;
	SetCutFlow("OAngle");

	if ((p_D0.Pt() < fSignal_Pt_min) || (p_D0.Pt() > fSignal_Pt_max))
	    continue;
	SetCutFlow("D0 Pt");
	
	// Add Lambda to event
	if (PvalueKinFit >= fKinFitPvalue_min) {
	    SetCutFlow("KinFit P-value");
	    
	    AtlD0DecayKPi *decay;
	    if ( trk1->Charge()*trk2->Charge() < 0. ) { // require opposite sign
		SetCutFlow("Charge ok");

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

		if ( IsDebugRun() ) {
		    fDebugStream  << endl << "=========================================="
				  << endl << "Entry: " << fTree->GetReadEvent() << " 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() << ")";
		}
	    } else {
		// Add equally charged or mc-failed combinations to the bkg list
		decay = new AtlD0DecayKPi(BkgCount++, p_D0.Px(), p_D0.Py(), p_D0.Pz(), p_D0.E(),
					  trk1, trk2, PrimVtx, PrimVtx, 
					  Fit_Daughter1, Fit_Daughter2);
		decay->SetChi2NDoF(fChi2, fNDoF);
		fBkgLambdaDecays->Add(decay);
	    }
	}
    }
  } //end of vertex loop

  FindSharedTracks();
}

//____________________________________________________________________    

void AtlD0Finder::FindSharedTracks() {

    AtlD0DecayKPi *decay, *decay2;
    
    for ( Int_t i = 0; i < fEvent->GetN_D0DecaysKPi(); i++ ) {
      decay = (AtlD0DecayKPi*)fEvent->GetD0DecaysKPi()->At(i);

      for (Int_t j = i+1; j < fEvent->GetN_D0DecaysKPi(); j++) {
	  decay2 = (AtlD0DecayKPi*)fEvent->GetD0DecaysKPi()->At(j);
	  if (  (decay->GetKaon() == decay2->GetKaon()) ||
		(decay->GetKaon() == decay2->GetPion()) ||
		(decay->GetPion() == decay2->GetKaon()) ||
		(decay->GetPion() == decay2->GetPion()) ) {
	      decay->SetSharedTracks(kTRUE);
	      decay2->SetSharedTracks(kTRUE);
	  }
      }

/*      for (Int_t j = 0; j < fBkgLambdaDecays->GetEntries(); j++) {
	  decay2 = (AtlD0DecayKPi*)fBkgLambdaDecays->At(j);
	  if (  (decay->GetKaon() == decay2->GetKaon()) ||
		(decay->GetKaon() == decay2->GetPion()) ||
		(decay->GetPion() == decay2->GetKaon()) ||
		(decay->GetPion() == decay2->GetPion()) ) {
	      decay->SetSharedTracks(kTRUE);
	      decay2->SetSharedTracks(kTRUE);
	  }
	  } */
      
    }
}

//____________________________________________________________________    

TKinFitter AtlD0Finder::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 D0Fit", &dummy1, fm_kaon, cov_trk1);
  TVector3 dummy2 = trk2->P(); // instead of const cast
  TFitParticlePtEtaPhi FitExec_trk2("FitExec_trk2", "FitExec_trk2 for D0Fit", &dummy2, fm_pi, cov_trk2);
  
  // Definition of Lambda mass constraint
  TFitConstraintM MD0Cons("D0MassConstraint","D0MassConstraintGaus", 0, 0, fm_D0);
  MD0Cons.addParticles1(&FitExec_trk1, &FitExec_trk2);
    
  // fitting characteristics
  TKinFitter fitter;
  fitter.addMeasParticle(&FitExec_trk1);
  fitter.addMeasParticle(&FitExec_trk2);
  fitter.addConstraint(&MD0Cons);
    
  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 AtlD0Finder::FillMCHistograms(AtlD0DecayKPi *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_kpi, p_pipi, p_ee_o, p_kpi_o, p_pipi_o;
    p_trk1.SetVectM(decay->GetReFitKaon().P().Vect(), fm_lambda);
    p_trk2.SetVectM(decay->GetReFitPion().P().Vect(), fm_e);
    p_ee = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetReFitKaon().P().Vect(), fm_lambda);
    p_trk2.SetVectM(decay->GetReFitPion().P().Vect(), fm_pi);
    p_pipi = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetReFitKaon().P().Vect(), fm_kaon);
    p_kpi = p_trk1 + p_trk2;

    p_trk1.SetVectM(decay->GetKaon()->P(), fm_lambda);
    p_trk2.SetVectM(decay->GetPion()->P(), fm_e);
    p_ee_o = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetKaon()->P(), fm_lambda);
    p_trk2.SetVectM(decay->GetPion()->P(), fm_pi);
    p_pipi_o = p_trk1 + p_trk2;
    p_trk1.SetVectM(decay->GetKaon()->P(), fm_kaon);
    p_kpi_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_kpi.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_kpi_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_coangle ->Fill(TMath::Cos(decay->GetOpeningAngle()), GetPreTagEvtWeight());
	fHistLambdareco_MC_dangle  ->Fill(TMath::Cos(decay->GetDecayAngle()),   GetPreTagEvtWeight());
	fHistLambdareco_MC_m_dangle->Fill(TMath::Cos(decay->GetDecayAngle()), decay->M("Reco"), GetPreTagEvtWeight());
	
 	fHistLambdareco_MC_d0_K    ->Fill(decay->GetKaon()->GetD0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_d0_Pi   ->Fill(decay->GetPion()->GetD0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_z0_K    ->Fill(decay->GetKaon()->GetZ0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_z0_Pi   ->Fill(decay->GetPion()->GetZ0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_z0_diff ->Fill(TMath::Abs(decay->GetKaon()->GetZ0() - decay->GetPion()->GetZ0()), GetPreTagEvtWeight());
	fHistLambdareco_MC_k_tchi2 ->Fill(decay->GetKaon()->GetChi2() / decay->GetKaon()->GetNDoF(), GetPreTagEvtWeight());
	fHistLambdareco_MC_pi_tchi2->Fill(decay->GetPion()->GetChi2() / decay->GetPion()->GetNDoF(), GetPreTagEvtWeight());
 	fHistLambdareco_MC_d0ovE_K ->Fill(decay->GetKaon()->GetD0() / TMath::Sqrt(decay->GetKaon()->GetCovMatrix()[0]), GetPreTagEvtWeight());
	fHistLambdareco_MC_d0ovE_Pi->Fill(decay->GetPion()->GetD0() / TMath::Sqrt(decay->GetPion()->GetCovMatrix()[0]), 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.M(),             GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_pipi_bkg  ->Fill(p_pipi.M(),           GetPreTagEvtWeight());
   	fHistLambdareco_MC_m_ppi_bkg   ->Fill(p_kpi.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_kpi_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_coangle_bkg ->Fill(TMath::Cos(decay->GetOpeningAngle()), GetPreTagEvtWeight());
	fHistLambdareco_MC_dangle_bkg  ->Fill(TMath::Cos(decay->GetDecayAngle()),   GetPreTagEvtWeight());
	fHistLambdareco_MC_m_dangle_bkg->Fill(TMath::Cos(decay->GetDecayAngle()), decay->M("Reco"), GetPreTagEvtWeight());

     	fHistLambdareco_MC_d0_K_bkg    ->Fill(decay->GetKaon()->GetD0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_d0_Pi_bkg   ->Fill(decay->GetPion()->GetD0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_z0_K_bkg    ->Fill(decay->GetKaon()->GetZ0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_z0_Pi_bkg   ->Fill(decay->GetPion()->GetZ0(), GetPreTagEvtWeight());
	fHistLambdareco_MC_z0_diff_bkg ->Fill(TMath::Abs(decay->GetKaon()->GetZ0() - decay->GetPion()->GetZ0()), GetPreTagEvtWeight());
	fHistLambdareco_MC_k_tchi2_bkg ->Fill(decay->GetKaon()->GetChi2() / decay->GetKaon()->GetNDoF(), GetPreTagEvtWeight());
	fHistLambdareco_MC_pi_tchi2_bkg->Fill(decay->GetPion()->GetChi2() / decay->GetPion()->GetNDoF(), GetPreTagEvtWeight());
 	fHistLambdareco_MC_d0ovE_K_bkg ->Fill(decay->GetKaon()->GetD0() / TMath::Sqrt(decay->GetKaon()->GetCovMatrix()[0]), GetPreTagEvtWeight());
	fHistLambdareco_MC_d0ovE_Pi_bkg->Fill(decay->GetPion()->GetD0() / TMath::Sqrt(decay->GetPion()->GetCovMatrix()[0]), GetPreTagEvtWeight());
    }    
}


//____________________________________________________________________    


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

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

    // Signal (opposite charged)
    // ________________________________________

/*    Int_t shareSig;
      Int_t shareBkg;*/
    for ( Int_t i = 0; i < fEvent->GetN_D0DecaysKPi(); i++ ) {
      Lambda = (AtlD0DecayKPi*)fEvent->GetD0DecaysKPi()->At(i);

      if (Lambda->HasSharedTracks())
	  continue;
      SetCutFlow("Shared tracks");

      // Hitbased TruthMatching
      SetChi2( Lambda->GetChi2() );
      SetNDoF( Lambda->GetNDoF() );
      if (fEvent->IsMC()) {
	  switch ( DoTruthMatch(Lambda->GetKaon(), Lambda->GetPion(), NULL) ) {
	      case 1:   fTrueReco = kTRUE;  FillMCHistograms(Lambda, kTRUE);  AtlKinFitterTool::FillHistograms("Signal"); break;
	      case -1:  fTrueReco = kFALSE; FillMCHistograms(Lambda, kFALSE); AtlKinFitterTool::FillHistograms("Signal"); break;
	  }
      } else {
	  AtlKinFitterTool::FillHistograms("Signal");
      }
		
/*
      DEBUG_OUTPUT

      shareSig = 0;
      shareBkg = 0;
      for (Int_t j = 0; j < fEvent->GetN_D0DecaysKPi(); j++)
	  if (i != j) {
	      Lambda2 = (AtlD0DecayKPi*)fEvent->GetD0DecaysKPi()->At(j);
	      if (Lambda->GetKaon() == Lambda2->GetKaon()) if (Lambda2->GetMCDecay() != NULL) shareSig++; else shareBkg++;
	      if (Lambda->GetKaon() == Lambda2->GetPion()) if (Lambda2->GetMCDecay() != NULL) shareSig++; else shareBkg++;
	      if (Lambda->GetPion() == Lambda2->GetKaon()) if (Lambda2->GetMCDecay() != NULL) shareSig++; else shareBkg++;
	      if (Lambda->GetPion() == Lambda2->GetPion()) if (Lambda2->GetMCDecay() != NULL) shareSig++; else shareBkg++;
	  }
      if (shareSig > 0)
	  cout << endl << "MC " << (Lambda->GetMCDecay() != NULL ? "Signal" : "Background") << " decay shares a track with " << shareSig << " other signal decays!";
      if (shareBkg > 0)
	  cout << endl << "MC " << (Lambda->GetMCDecay() != NULL ? "Signal" : "Background") << " decay shares a track with " << shareBkg << " other background decays!";
*/
      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(TMath::Cos(Lambda->GetDecayAngle()), GetPreTagEvtWeight());

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

      // test pi/pi hypothesis
      p_trk1.SetVectM(Proton->P(), fm_kaon);
      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_D0DecaysKPi(), GetPreTagEvtWeight());
    

    // Combinatorial Background (same charged)
    // ____________________________________________

    TIter next_bkg(fBkgLambdaDecays);
    while ( ( Lambda = (AtlD0DecayKPi*)next_bkg() ) ) {
      if (Lambda->HasSharedTracks())
	  continue;
      SetChi2( Lambda->GetChi2() );
      SetNDoF( Lambda->GetNDoF() );
      AtlKinFitterTool::FillHistograms("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(TMath::Cos(Lambda->GetDecayAngle()), GetPreTagEvtWeight());

      Proton = Lambda->GetKaon();
      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 AtlD0Finder::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
    
    fm_lambda            = 1.115683;       // Lambda mass hypothesis
    fm_pi                = 0.13957;        // Pion mass hypothesis
    fm_proton            = 0.935;          // Proton mass hypothesis
    fm_e                 = 0.000510998910; // Electron mass hypothesis
    fm_kaon              = 0.493667;
    fm_D0                = 1.86484;
    fm_Dstar             = 2.01027;
}

//____________________________________________________________________


void AtlD0Finder::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 << " " << fD0_M_min << " < M(Lbd) < " << fD0_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 AtlD0Finder::Terminate() {

  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 AtlD0Finder!";
  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 AtlD0Finder::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
	AtlD0DecayKPi *decay = (AtlD0DecayKPi*)fEvent->GetD0DecaysKPi()->Last();
	Float_t prob = decay->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;
    }
      
}

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