//____________________________________________________________________
//
// Phi decay finder class
//
// Phi will be reconstructed while looping over all two track combinations
// which are leaving the primary vertex. For the signal the leaving Kaon tracks
// have to be oppositely charged (added to Phi-List in AtlEvent), same
// charged tracks will be put in a TList called fBkgPhiDecays for the
// background.
// The selection can be done by a cut based method or a kinemativ fitter.
// Switching is possible by a Flag EMode (kCutBased, kKinFit) that can
// be set in the constructor via SetMode(EMode).
// Some Cut Values have to be set external, look at SetCutDefaults.
// You can also run in a Debug mode to get more information about your
// analysis.
//

//
// Author: Sophia Schade <mailto:schade@physik.hu-berlin.de>
// Copyright: 2010 (C) Sophia Schade
//
#ifndef ATLAS_AtlPhiFinder
#include <AtlPhiFinder.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(AtlPhiFinder);
#endif

//____________________________________________________________________

AtlPhiFinder::AtlPhiFinder(const char* name, const char* title) :
    AtlKinFitterTool(name, title) {
    //
    // Default constructor
    //
    SetMode(kKinFit);           // kCutBased or kKinFit
    SetDebugOutput(kFALSE);     // Debug output
    fUseKaonPurity = kFALSE;
    fBkgPhiDecays = new TList;  // Bkg List
}

//____________________________________________________________________

AtlPhiFinder::~AtlPhiFinder() {
    //
    // Default destructor
    //
    fBkgPhiDecays->Delete(); delete fBkgPhiDecays;
    delete fBetheBloch;
    
    if (IsDebugRun() ) fDebugOutput.close();
}

//____________________________________________________________________

void AtlPhiFinder::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 AtlPhiFinder::BookHistograms() {
    //
    // Book histograms
    //
    
    // Debugging
    if ( IsDebugRun() ) fDebugOutput.open("DebugOutput.dat");
    
    // Book KinFitter Histograms
    AtlKinFitterTool::BookHistograms();
    AtlKinFitterTool::SetTruthMatchXTitle("M_{#Phi}");
    AtlKinFitterTool::SetTruthMatchBinning(30, 1, 30);
    
    PrintCutValues();
    
    // ======================
    // Book signal histograms
    // ======================
    gDirectory->mkdir("Signal", "Oppositely charged candidates");
    gDirectory->cd("Signal");

    // general tuning histograms
    fHistKaonMatchingProb = new TH1F("h_Kaon_MatchingProb",
				     "Matching probability (hitbased TruthMatching) of particles matching kaons",
				     50, 0, 1);
    fHistKaonMatchingProb->SetXTitle("MatchingProb");
    fHistKaonMatchingProb->SetYTitle("Number of Entries");
    
    fHistTrkChi2ovNDoF  = new TH1F("h_Trk_Chi2overNDoF",
				   "Chi2/NDoF of track fit",
				   50, 0, 5);
    fHistTrkChi2ovNDoF->SetXTitle("Chi2ovNDoF");
    fHistTrkChi2ovNDoF->SetYTitle("Number of Entries");
    fHistVtxChi2ovNDoF  = new TH1F("h_Vertex_Chi2overNDoF",
				   "Chi2/NDoF of vertex fit",
				   50, 0, 5);
    fHistVtxChi2ovNDoF->SetXTitle("Chi2ovNDoF");
    fHistVtxChi2ovNDoF->SetYTitle("Number of Entries");

    // Phi -> KK
    // ----------

    gDirectory->mkdir("KK", "Phi -> K+ + K-");
    gDirectory->cd("KK");

    if ( fMode == kKinFit ) {
	fHistPhireco_m_KK   = new TH1F("h_Phi_m_KK", "Invariant #Phi mass (#Phi->KK)",
				       1000, 1.018, 1.021);
    }else if (fMode == kCutBased){
	fHistPhireco_m_KK   = new TH1F("h_Phi_m_KK", "Invariant #Phi mass (#Phi->KK)",
				       100, 0.95, 1.1);
    }
    fHistPhireco_m_KK->SetXTitle("m_{#Phi} (GeV)");
    fHistPhireco_m_KK->SetYTitle("Number of Entries");
    fHistPhireco_pt_KK  = new TH1F("h_Phi_pt_KK", "#Phi-p_{#perp} (#Phi->KK)",
				   200, 0, 30);
    fHistPhireco_pt_KK->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_pt_KK->SetYTitle("Number of Entries");
    fHistPhireco_phi_KK = new TH1F("h_Phi_phi_KK", "#Phi #phi distribution (#Phi->KK)",
				   128, -3.2, 3.2);
    fHistPhireco_phi_KK->SetXTitle("#phi (rad)");
    fHistPhireco_phi_KK->SetYTitle("Number of Entries");
    fHistPhireco_eta_KK = new TH1F("h_Phi_eta_KK", "#Phi #eta distribution (#Phi->KK)",
				   50, -3, 3);
    fHistPhireco_eta_KK->SetXTitle("#eta");
    fHistPhireco_eta_KK->SetYTitle("Number of Entries");
    fHistPhireco_N_KK   = new TH1F("h_Phi_N_KK", "Reconstructed #Phi 's per event (#Phi->KK)",
				   10, 0, 10);
    fHistPhireco_N_KK->SetXTitle("N_{Phi}/evt");
    fHistPhireco_N_KK->SetYTitle("Number of Entries");

    // trks and their particle
    fHistPhireco_TRK   = new TH1F("h_Phi_TRK", "Particle of Signal Trks",
				   100, 0, 100);
    fHistPhireco_TRK->SetXTitle("Particle");
    fHistPhireco_TRK->SetYTitle("Number of Entries");

    // Kaon (K+) histograms in sub-folder
    gDirectory->mkdir("Kplus", "K+ from Phi -> KK");
    gDirectory->cd("Kplus");
    
    fHistPhireco_KPlus_pt = new TH1F("h_Phi_KPlus_pt", "K^{+}-p_{#perp} (#Phi->KK)",
				     200, 0, 20);
    fHistPhireco_KPlus_pt->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_KPlus_pt->SetYTitle("Number of Entries");
    fHistPhireco_KPlus_eta = new TH1F("h_Phi_KPlus_eta", "K^{+}:  #eta distribution (#Phi->KK)",
				      50, -3, 3);
    fHistPhireco_KPlus_eta->SetXTitle("#eta");
    fHistPhireco_KPlus_eta->SetYTitle("Number of Entries");
    fHistPhireco_KPlus_phi = new TH1F("h_Phi_KPlus_phi", "K^{+}:  #phi distribution (#Phi->KK)",
				      50, -3.14, 3.14);
    fHistPhireco_KPlus_phi->SetXTitle("#phi");
    fHistPhireco_KPlus_phi->SetYTitle("Number of Entries");
    
    gDirectory->cd("../"); 
    
    // Kaon (K-) histograms in sub-folder
    gDirectory->mkdir("KMinus", "K- from Phi -> KK");
    gDirectory->cd("KMinus");
    
    fHistPhireco_KMinus_pt = new TH1F("h_Phi_KMinus_pt", "K^{-}-p_{#perp} (#Phi->KK)",
				      200, 0, 20);
    fHistPhireco_KMinus_pt->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_KMinus_pt->SetYTitle("Number of Entries");
    fHistPhireco_KMinus_eta = new TH1F("h_Phi_KMinus_eta", "K^{-}:  #eta distribution (#Phi->KK)",
				       50, -5, 5);
    fHistPhireco_KMinus_eta->SetXTitle("#eta");
    fHistPhireco_KMinus_eta->SetYTitle("Number of Entries");
    fHistPhireco_KMinus_phi = new TH1F("h_Phi_KMinus_phi", "K^{-}:  #phi distribution (#Phi->KK)",
				       50, -3.14, 3.14);
    fHistPhireco_KMinus_phi->SetXTitle("#phi");
    fHistPhireco_KMinus_phi->SetYTitle("Number of Entries");

    // Angle between Kaon tracks in KK folder
    gDirectory->cd("../");

    fHistPhireco_KK_OpeningAngle = new TH1F("h_Phi_KK_opneingangle", "#alpha between  KK",
				     50, 0, 3.14);
    fHistPhireco_KK_OpeningAngle->SetXTitle("#alpha (rad)");
    fHistPhireco_KK_OpeningAngle->SetYTitle("Number of Entries");
    
    fHistPhireco_DecayAngle_KK = new TH1F("h_Phi_KK_decayangle", "#alpha between  KK",
				     50, 0, 3.14);
    fHistPhireco_DecayAngle_KK->SetXTitle("#alpha (rad)");
    fHistPhireco_DecayAngle_KK->SetYTitle("Number of Entries");

    // Difference between fore- and background
    fHistPhireco_m_KK_diff = new TH1F("h_Phi_M_diff", "Phi mass (fg-bg)", 100, 0.95, 1.1);
    fHistPhireco_m_KK_diff->SetXTitle("m_{#Phi} (GeV)");
    fHistPhireco_m_KK_diff->SetYTitle("Number of Entries");

    // dE/dx
    fHistdEdx_pmag_sig = new TH2F("h_dEdx_sig", "dE/dx as a function of momentum (sig)", 1000, GetLogBins(1000, -1.0, 3.0), 100, 0.0, 5.0);
    fHistdEdx_pmag_sig->SetXTitle("p (GeV)");
    fHistdEdx_pmag_sig->SetYTitle("dE/dx");

    fHistdEdx_diff_sig = new TH1F("h_dEdx_diff_sig", "difference between measured and calculated dEdx for signal", 1000, 0.0, 5.0);
    fHistdEdx_diff_sig->SetXTitle("#Delta dE/dx");
    fHistdEdx_diff_sig->SetYTitle("Number of Entries");
    
    gDirectory->cd("../../");

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

    // Phi -> KK 
    // ----------

    gDirectory->mkdir("KK", "Phi -> K+K+ / K-K-");
    gDirectory->cd("KK");

    if ( fMode == kKinFit ) {
	fHistPhireco_m_KK_bkg   = new TH1F("h_Phi_m_KK_bkg", "Invariant #Phi mass (#Phi->KK)",
					   1000, 1.018, 1.021);
    }else if (fMode == kCutBased){
	fHistPhireco_m_KK_bkg   = new TH1F("h_Phi_m_KK_bkg", "Invariant #Phi mass (#Phi->KK)",
					   100, 0.95, 1.1);
    }
    fHistPhireco_m_KK_bkg->SetXTitle("m_{#Phi} (GeV)");
    fHistPhireco_m_KK_bkg->SetYTitle("Number of Entries");
    fHistPhireco_pt_KK_bkg  = new TH1F("h_Phi_pt_KK_bkg", "#Phi-p_{#perp} (#Phi->KK)",
				       200, 0, 30);
    fHistPhireco_pt_KK_bkg->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_pt_KK_bkg->SetYTitle("Number of Entries");
    fHistPhireco_phi_KK_bkg = new TH1F("h_Phi_phi_KK_bkg", "#Phi #phi distribution (#Phi->KK)",
				       128, -3.2, 3.2);
    fHistPhireco_phi_KK_bkg->SetXTitle("#phi (rad)");
    fHistPhireco_phi_KK_bkg->SetYTitle("Number of Entries");
    fHistPhireco_eta_KK_bkg = new TH1F("h_Phi_eta_KK_bkg", "#Phi #eta distribution (#Phi->KK)",
				       50, -3, 3);
    fHistPhireco_eta_KK_bkg->SetXTitle("#eta");
    fHistPhireco_eta_KK_bkg->SetYTitle("Number of Entries");
    fHistPhireco_N_KK_bkg   = new TH1F("h_Phi_N_KK_bkg", "Reconstructed #Phi' per event (Phi->KK)",
				       10, 0, 10);
    fHistPhireco_N_KK_bkg->SetXTitle("N_{#Phi}/evt");
    fHistPhireco_N_KK_bkg->SetYTitle("Number of Entries");
    
    // Kaon (K+) histograms in sub-folder
    gDirectory->mkdir("Kplus", "K+ from Phi -> K+K+");
    gDirectory->cd("Kplus");
    
    fHistPhireco_KPlus_pt_bkg = new TH1F("h_Phi_KPlus_pt_bkg", "K^{+}-p_{#perp} (#Phi->KK)",
					 100, 0, 30);
    fHistPhireco_KPlus_pt_bkg->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_KPlus_pt_bkg->SetYTitle("Number of Entries");
    fHistPhireco_KPlus_eta_bkg = new TH1F("h_Phi_KPlus_eta_bkg", "K^{+}:  #eta distribution (#Phi->KK)",
					  50, -3, 3);
    fHistPhireco_KPlus_eta_bkg->SetXTitle("#eta");
    fHistPhireco_KPlus_eta_bkg->SetYTitle("Number of Entries");
    fHistPhireco_KPlus_phi_bkg = new TH1F("h_Phi_KPlus_phi_bkg", "K^{+}:  #phi distribution (#Phi->KK)",
					  50, -3.14, 3.14);
    fHistPhireco_KPlus_phi_bkg->SetXTitle("#phi");
    fHistPhireco_KPlus_phi_bkg->SetYTitle("Number of Entries");
    
    gDirectory->cd("../"); 
    
    // Kaon (K-) histograms in sub-folder
    gDirectory->mkdir("KMinus", "K- from Phi0 -> K-K-");
    gDirectory->cd("KMinus");
    
    fHistPhireco_KMinus_pt_bkg = new TH1F("h_Phi_KMinus_pt_bkg", "K^{-}-p_{#perp} (#Phi->KK)",
					  100, 0, 30);
    fHistPhireco_KMinus_pt_bkg->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_KMinus_pt_bkg->SetYTitle("Number of Entries");
    fHistPhireco_KMinus_eta_bkg = new TH1F("h_Phi_KMinus_eta_bkg", "K^{-}:  #eta distribution (#Phi->KK)",
					   50, -5, 5);
    fHistPhireco_KMinus_eta_bkg->SetXTitle("#eta");
    fHistPhireco_KMinus_eta_bkg->SetYTitle("Number of Entries");
    fHistPhireco_KMinus_phi_bkg = new TH1F("h_Phi_KMinus_phi_bkg", "K^{-}:  #phi distribution (#Phi->KK)",
					   50, -3.14, 3.14);
    fHistPhireco_KMinus_phi_bkg->SetXTitle("#phi");
    fHistPhireco_KMinus_phi_bkg->SetYTitle("Number of Entries");

    // Angle between Kaon tracks
    gDirectory->cd("../");

    fHistPhireco_KK_OpeningAngle_bkg = new TH1F("h_Phi_KK_OpeningAngle_bkg", "#alpha between KK Bkg",
					 50, 0, 3.14);
    fHistPhireco_KK_OpeningAngle_bkg->SetXTitle("#alpha (rad)");
    fHistPhireco_KK_OpeningAngle_bkg->SetYTitle("Number of Entries");
    
    fHistPhireco_KK_DecayAngle_bkg = new TH1F("h_Phi_KK_DecayAngle_bkg", "#alpha between K and Phi Bkg in Phis restframe",
					 50, 0, 3.14);
    fHistPhireco_KK_DecayAngle_bkg->SetXTitle("#alpha (rad)");
    fHistPhireco_KK_DecayAngle_bkg->SetYTitle("Number of Entries");

    fHistdEdx_pmag_bkg = new TH2F("h_dEdx_bkg", "dE/dx as a function of momentum (bkg)", 1000, GetLogBins(1000, -1.0, 3.0), 100, 0.0, 5.0);
    fHistdEdx_pmag_bkg->SetXTitle("p (GeV)");
    fHistdEdx_pmag_bkg->SetYTitle("dE/dx");

    fHistdEdx_diff_bkg = new TH1F("h_dEdx_diff_bkg", "difference between measured and calculated dEdx for bkg", 1000, 0.0, 5.0);
    fHistdEdx_diff_bkg->SetXTitle("#Delta dE/dx");
    fHistdEdx_diff_bkg->SetYTitle("Number of Entries");

    gDirectory->cd("../../");
    
    // Chi^2 from Track and Vertex with Track Fit
    fHistPhireco_Chi_TrkFit = new TH1F("h_Phi_TrkFit", "Chi^2 of Track Fit",
				       100, 0.0, 6.0);
    fHistPhireco_Chi_TrkFit->SetXTitle("Chi^2/NDoF");
    fHistPhireco_Chi_TrkFit->SetYTitle("Number of Entries");
    fHistPhireco_Chi_VtxFit = new TH1F("h_Phi_VtxTrkFit", "Chi^2 from Vtx with Trk Fit",
				       100, 0.0, 6.0);
    fHistPhireco_Chi_VtxFit->SetXTitle("Chi^2/NDoF");
    fHistPhireco_Chi_VtxFit->SetYTitle("Number of Entries");

    // ========================
    //     MC TRUTH STUDY
    // ========================

    gDirectory->mkdir("MCTruthStudy", "Small Truth Study with hitbased Truth-matching");
    gDirectory->cd("MCTruthStudy");

    // MC Truth Matching
    // only for KinFitter (later also for Cutbased)
    fHistPhi_MC_KKsame = new TH1F("h_Phi_KKsame", "MC-TM 2 Kaons same Mother", 2000, -1000, 1000);
    fHistPhi_MC_KKsame->SetXTitle("pdg code");
    fHistPhi_MC_KKsame->SetYTitle("Number of Entries");
    fHistPhi_MC_same = new TH1F("h_Phi_same", "MC-TM same Mother", 2000, -1000, 1000);
    fHistPhi_MC_same->SetXTitle("pdg code");
    fHistPhi_MC_same->SetYTitle("Number of Entries");
   
    fHistPhireco_MCParticle_Prob = new TH1F("h_Phi_MCProb", "MC Particle Prob",
					    200, 0.0, 1.0);
    fHistPhireco_MCParticle_Prob->SetXTitle("Prob");
    fHistPhireco_MCParticle_Prob->SetYTitle("Number of Entries");

    // =============================================================================
    // Book signal histograms for K0s-candidates that fulfill the MC Truth Matching
    // =============================================================================
     
    gDirectory->mkdir("Signal_MC", "Phi-candidates that fulfill the MC Truth Matching");
    gDirectory->cd("Signal_MC");

    if ( fMode == kKinFit ) {
	fHistPhireco_m_MCsignal   = new TH1F("h_Phi_m_MCsignal", "Invariant Phi mass (equaly signed kaons)",
					     50, 1.0, 1.05);
    }else if (fMode == kCutBased){
	fHistPhireco_m_MCsignal   = new TH1F("h_Phi_m_PiPi", "Invariant Phi mass (equaly signed kaons)",
					     50, 1.0, 1.6);
    }
    fHistPhireco_m_MCsignal->SetXTitle("m_{#Phi} (GeV)");
    fHistPhireco_m_MCsignal->SetYTitle("Number of Entries");
    fHistPhireco_pt_MCsignal  = new TH1F("h_Phi_pt_MCsignal", "Phi-p_{#perp} (equaly signed kaons)",
					 100, 0, 600);
    fHistPhireco_pt_MCsignal->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_pt_MCsignal->SetYTitle("Number of Entries");
    fHistPhireco_phi_MCsignal = new TH1F("h_Phi_phi_MCsignal", "Phi #phi distribution (equaly signed kaons)",
					 128, -3.2, 3.2);
    fHistPhireco_phi_MCsignal->SetXTitle("#phi (rad)");
    fHistPhireco_phi_MCsignal->SetYTitle("Number of Entries");
    fHistPhireco_eta_MCsignal = new TH1F("h_Phi_eta_MCsignal", "Phi #eta distribution (equaly signed kaons)",
					 50, -3, 3);
    fHistPhireco_eta_MCsignal->SetXTitle("#eta");
    fHistPhireco_eta_MCsignal->SetYTitle("Number of Entries");
    fHistPhireco_N_MCsignal   = new TH1F("h_Phi_N_MCsignal", "Reconstructed Phi' per event (equaly signed kaons)",
					 11,-0.5,10.5);
    fHistPhireco_N_MCsignal->SetXTitle("N_{Phi}/evt");
    fHistPhireco_N_MCsignal->SetYTitle("Number of Entries");
    fHistPhireco_OpeningAngle_MCsignal = new TH1F("h_Phi_OpeningAngle_MCsignal",
						  "opening angle between kaon tracks",
						  128, 0, 3.2);
    fHistPhireco_OpeningAngle_MCsignal->SetXTitle("#alpha (rad)");
    fHistPhireco_OpeningAngle_MCsignal->SetYTitle("Number of Entries");
    fHistPhireco_DecayAngle_MCsignal = new TH1F("h_Phi_DecayAngle_MCsignal",
						"decay angle between Phi and K+ in Phi' restframe",
						50, 0, 1);
    fHistPhireco_DecayAngle_MCsignal->SetXTitle("cos(#beta) (rad)");
    fHistPhireco_DecayAngle_MCsignal->SetYTitle("Number of Entries");

    fHistdEdx_pmag_MCsig = new TH2F("h_dEdx_MCsig", "dE/dx as a function of momentum (MC sig)", 1000, GetLogBins(1000, -1.0, 3.0), 100, 0.0, 5.0);
    fHistdEdx_pmag_MCsig->SetXTitle("p (GeV)");
    fHistdEdx_pmag_MCsig->SetYTitle("dE/dx");

    fHistdEdx_diff_MCsig = new TH1F("h_dEdx_diff_MCsig", "difference between measured and calculated dEdx for MC signal", 1000, 0.0, 5.0);
    fHistdEdx_diff_MCsig->SetXTitle("#Delta dE/dx");
    fHistdEdx_diff_MCsig->SetYTitle("Number of Entries");

    fHistPhireco_Number_Hits_MCsignal = new TH1F("h_Number_Hits_MCsignal", "Number of Hits in Detector of signal Tracks", 1000, 0.0, 1000);
    fHistPhireco_Number_Hits_MCsignal->SetXTitle("# Hits");
    fHistPhireco_Number_Hits_MCsignal->SetYTitle("Number of Entries");
    
    fHistPhireco_ChiNDoF_Trks_MCsignal = new TH1F("h_ChiNDoF_MCsignal", "Chi²over NDoF of signal Tracks", 1000, 0.0, 100);
    fHistPhireco_ChiNDoF_Trks_MCsignal->SetXTitle("Chi²over NDoF");
    fHistPhireco_ChiNDoF_Trks_MCsignal->SetYTitle("Number of Entries");
    
    gDirectory->cd("../");
    
    // ==========================================================================
    // Book bkg histograms for K0s-candidates that fail the MC Truth Matching
    // ==========================================================================

    gDirectory->mkdir("Bkg_MC", "Phi-candidates that fail the MC Truth Matching");
    gDirectory->cd("Bkg_MC");

    if ( fMode == kKinFit ) {
	fHistPhireco_m_MCbkg   = new TH1F("h_Phi_m_MCbkg", "Invariant Phi mass (equaly signed kaons)",
					  50, 1.0, 1.05);
    }else if (fMode == kCutBased){
	fHistPhireco_m_MCbkg   = new TH1F("h_Phi_m_PiPi", "Invariant Phi mass (equaly signed kaons)",
					  50, 1.0, 1.6);
    }
    fHistPhireco_m_MCbkg->SetXTitle("m_{#Phi} (GeV)");
    fHistPhireco_m_MCbkg->SetYTitle("Number of Entries");
    fHistPhireco_pt_MCbkg  = new TH1F("h_Phi_pt_MCbkg", "Phi-p_{#perp} (equaly signed kaons)",
				      100, 0, 600);
    fHistPhireco_pt_MCbkg->SetXTitle("p_{#perp} (GeV)");
    fHistPhireco_pt_MCbkg->SetYTitle("Number of Entries");
    fHistPhireco_phi_MCbkg = new TH1F("h_Phi_phi_MCbkg", "Phi #phi distribution (equaly signed kaons)",
				      128, -3.2, 3.2);
    fHistPhireco_phi_MCbkg->SetXTitle("#phi (rad)");
    fHistPhireco_phi_MCbkg->SetYTitle("Number of Entries");
    fHistPhireco_eta_MCbkg = new TH1F("h_Phi_eta_MCbkg", "Phi #eta distribution (equaly signed kaons)",
				      50, -3, 3);
    fHistPhireco_eta_MCbkg->SetXTitle("#eta");
    fHistPhireco_eta_MCbkg->SetYTitle("Number of Entries");
    fHistPhireco_N_MCbkg   = new TH1F("h_Phi_N_MCbkg", "Reconstructed Phi' per event (equaly signed kaons)",
				      11,-0.5,10.5);
    fHistPhireco_N_MCbkg->SetXTitle("N_{Phi}/evt");
    fHistPhireco_N_MCbkg->SetYTitle("Number of Entries");
    fHistPhireco_OpeningAngle_MCbkg = new TH1F("h_Phi_OpeningAngle_MCbkg",
					       "opening angle between kaon tracks",
					       128, 0, 3.2);
    fHistPhireco_OpeningAngle_MCbkg->SetXTitle("#alpha (rad)");
    fHistPhireco_OpeningAngle_MCbkg->SetYTitle("Number of Entries");
    fHistPhireco_DecayAngle_MCbkg = new TH1F("h_Phi_DecayAngle_MCbkg",
					     "decay angle between Phi and K+ in Phi's restframe",
					     50, 0, 1);
    fHistPhireco_DecayAngle_MCbkg->SetXTitle("cos(#beta) (rad)");
    fHistPhireco_DecayAngle_MCbkg->SetYTitle("Number of Entries");

    fHistdEdx_pmag_MCbkg = new TH2F("h_dEdx_MCbkg", "dE/dx as a function of momentum (MC bkg)", 1000, GetLogBins(1000, -1.0, 3.0), 100, 0.0, 5.0);
    fHistdEdx_pmag_MCbkg->SetXTitle("p (GeV)");
    fHistdEdx_pmag_MCbkg->SetYTitle("dE/dx");

    fHistdEdx_diff_MCbkg = new TH1F("h_dEdx_diff_MCbkg", "difference between measured and calculated dEdx for MC bkg", 1000, 0.0, 5.0);
    fHistdEdx_diff_MCbkg->SetXTitle("#Delta dE/dx");
    fHistdEdx_diff_MCbkg->SetYTitle("Number of Entries");

    fHistPhireco_Number_Hits_MCbkg = new TH1F("h_Number_Hits_MCbkg", "Number of Hits in Detector of bkg Tracks", 1000, 0.0, 1000);
    fHistPhireco_Number_Hits_MCbkg->SetXTitle("# Hits");
    fHistPhireco_Number_Hits_MCbkg->SetYTitle("Number of Entries");
    
    fHistPhireco_ChiNDoF_Trks_MCbkg = new TH1F("h_ChiNDoF_MCbkg", "Chi²over NDoF of bkg Tracks", 1000, 0.0, 100);
    fHistPhireco_ChiNDoF_Trks_MCbkg->SetXTitle("Chi²over NDoF");
    fHistPhireco_ChiNDoF_Trks_MCbkg->SetYTitle("Number of Entries");

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

    // dE/dx Histograms
    fHistdEdx_pmag = new TH2F("h_dEdx", "dE/dx as a function of momentum", 1000, GetLogBins(1000, -1.0, 3.0), 100, 0.0, 5.0);
    fHistdEdx_pmag->SetXTitle("p (GeV)");
    fHistdEdx_pmag->SetYTitle("dE/dx");

    fHistdEdx_betagamma = new TH2F("h_dEdx_betagamma", "dE/dx as a function of #beta#gamma", 500, GetLogBins(500, -1.0, log10(300)), 100, 0.0, 5.0);
    fHistdEdx_betagamma->SetXTitle("#beta#gamma");
    fHistdEdx_betagamma->SetYTitle("dE/dx");
    
    gDirectory->cd("../");
}

//____________________________________________________________________

Double_t* AtlPhiFinder::GetLogBins(Int_t BinCount, Double_t MinBinExpo, Double_t MaxBinExpo) {
    // Logarithmic binning algorithm
    Double_t *bins = new Double_t[BinCount+1];
    for (Int_t i = 0; i < BinCount+1; i++)
	bins[i] = pow(10, (MaxBinExpo - MinBinExpo)/(BinCount+1) * i + MinBinExpo);
    return bins;
}
 
//____________________________________________________________________

Bool_t AtlPhiFinder::AnalyzeEvent() {
    //
    // Event analysis
    //
    
    // Clean-up bkg list from previous event
    for (Int_t i = 0; i < fBkgPhiDecays->GetEntries(); i++) {
	AtlPhiDecayKK *obj = (AtlPhiDecayKK*)fBkgPhiDecays->At(i);
	delete obj;
    }
    fBkgPhiDecays->GetEntries(); 
    fBkgPhiDecays->Clear("C");

    // GetPreTagEvtWeight() *= GetModifiedEventWeight();
    // Reconstruct Phi decays
    if ( fMode == kKinFit ) {
	ReconstructPhiKinFit();
    } else if ( fMode == kCutBased ) {
	ReconstructPhiCutBased();
    } else {
	Error("AnalyzeEvent",
	      "Invalid mode given. Abort!");
	gSystem->Abort(0);
    }

    if ( ! fUseKaonPurity && fEvent->IsMC() ) {
	// Count all phi decays in MC events to allow computation of the efficiency.
	Int_t NPhiTrue = 0;
	HepVertex *vtx = (HepVertex*)fEvent->GetPrimaryVtx();
	if (vtx == NULL) return kFALSE;
	for (Int_t i = 0; i < vtx->GetNDaughters(); i++) {
	    for (Int_t j = i+1; j < vtx->GetNDaughters(); j++) { 
		AtlIDTrack *trk1 = (AtlIDTrack*)vtx->GetDaughters()->At(i);
		AtlIDTrack *trk2 = (AtlIDTrack*)vtx->GetDaughters()->At(j);
		if(  trk1->HasValidTruthMatch(fMatchingProb_min)
		     && trk2->HasValidTruthMatch(fMatchingProb_min)) {
		    if( (trk1->GetMCParticle()->GetMother() == NULL) || (trk2->GetMCParticle()->GetMother() == NULL) ) {
			continue;}
		    if( (TMath::Abs(trk1->GetMCParticle()->GetPdgCode())== 321)
			&& (TMath::Abs(trk2->GetMCParticle()->GetPdgCode())== 321)
			&& (TMath::Abs(trk1->GetMCParticle()->GetMother()->GetPdgCode())== 333)
			&& (trk1->GetMCParticle()->GetMother() == trk2->GetMCParticle()->GetMother()) ) {
			NPhiTrue++;
		    }
		}
	    }
	}
	AddAbundanceTrue(NPhiTrue);
    } else if ( fUseKaonPurity && fEvent->IsMC() ) {
	// Kaon purity
	// Count all phi decays in MC events to allow computation of the efficiency.
	Int_t NPhiTrue = 0;
	HepVertex *vtx = (HepVertex*)fEvent->GetPrimaryVtx();
	if (vtx == NULL) return kFALSE;
	for (Int_t i = 0; i < vtx->GetNDaughters(); i++) {
	    AtlIDTrack *trk1 = (AtlIDTrack*)vtx->GetDaughters()->At(i);
	    if(  trk1->HasValidTruthMatch(fMatchingProb_min) ) {
		if (TMath::Abs(trk1->GetMCParticle()->GetPdgCode())== 321) {
		    NPhiTrue++;
		}
	    }
	}
	AddAbundanceTrue(NPhiTrue);
    }
    return kTRUE;
}

//____________________________________________________________________

void AtlPhiFinder::ReconstructPhiCutBased(){
    //
    // Cut Based Phi reconstruction
    // some cut criteria have to be set external
    // have a look at SetCutDefaults()
    // others can be changed in SetCutDefaults()
    // 
       
    // Looping over all trk-combinations at primary vertex for Phi reconstruction
    
    AtlIDTrack *trk1 = 0;
    AtlIDTrack *trk2 = 0;                    // compared trks
    TList  *Vtx1trk;                         // List of tracks from primary vertex
    HepVertex *PrimVtx;                      // associated primary Vertex
    
    Int_t i, j;                              // Vertex Loop iterators
    Int_t BgkCount = 1;                      // gives ID of background Phi (from same charged Kaons)
    
    TLorentzVector p_trk1, p_trk2, p_Phi;    // 4 Momentum
    Float_t m_Phi = 0;                       // Reconstructed Phi-mass

    // Get the primary vertex
    PrimVtx = fEvent->GetPrimaryVtx();
    // security request
    if (PrimVtx == NULL) return;
    
    // Get the primary vertex trk list
    Vtx1trk = fEvent->GetPrimVtxTracks();
    // security request
    if (Vtx1trk == NULL) return;
         
    // Track-Loop over all possible trk- combinations at primary Vertex for Phi reconstruction
    for(i=0; i < Vtx1trk->GetEntries() ; i++){
	for(j= i+1; j < Vtx1trk->GetEntries() ; j++ ){
	    trk1 = (AtlIDTrack*)(Vtx1trk->At(i));
	    trk2 = (AtlIDTrack*)(Vtx1trk->At(j));
	    
	    // Discard all tracks without reference to a truth particle for all
	    // MC-Runs to compute the purity correctly
	    if( fEvent->IsMC() ){
		if( !( trk1->HasValidTruthMatch(0.0001) &&
		       trk2->HasValidTruthMatch(0.0001)) )  continue;
	    }
	    
	    // Get 4 Momentum and compute inv. mass of Phi candidate
	    p_trk1.SetVectM(trk1->P(), fm_K);
	    p_trk2.SetVectM(trk2->P(), fm_K);
	    p_Phi = p_trk1 + p_trk2;
	    m_Phi = p_Phi.M();

            // Selection constraints
            // -------------------------
	    if( (m_Phi>fPhi_M_min) && (m_Phi<fPhi_M_max) ) {     // mass peak:
		
		//Quality of Track-Fit
		if (  ((trk1->GetChi2_Vtx())/(trk1->GetNDoF_Vtx()) > fTrackChi2ovNDoF_max) ||
		      ((trk2->GetChi2_Vtx())/(trk2->GetNDoF_Vtx()) > fTrackChi2ovNDoF_max)  ) continue;
		SetCutFlow("Quality Trk Fit");
		// Momenta of outgoing Kaon tracks
		if (  (p_trk1.Pt() > fSignalKaon_Pt_max) ||
		      (p_trk1.Pt() < fSignalKaon_Pt_min)  ) continue;
		if (  (p_trk2.Pt() > fSignalKaon_Pt_max) ||
		      (p_trk2.Pt() < fSignalKaon_Pt_min)  ) continue;
		SetCutFlow("Pt");
		fHistPhireco_KK_OpeningAngle->Fill(trk1->P().Angle(trk2->P()), GetPreTagEvtWeight());

		// Angle criterion (between the two Kaon (or what ever) tracks)
		if (trk1->P().Angle(trk2->P()) > fAngle_max) continue;
		SetCutFlow("oangle");
		
		if ((trk1->Pmag() < fPmag_min) || (trk1->Pmag() > fPmag_max) ||
		    (trk2->Pmag() < fPmag_min) || (trk2->Pmag() > fPmag_max)) continue;
		SetCutFlow("Pmag");
		
		if (Delta_dEdx(trk1) > fdEdx_Delta_max) continue;
		SetCutFlow("dEdx 1");
	    
		if (Delta_dEdx(trk2) > fdEdx_Delta_max) continue;
		SetCutFlow("dEdx 2");
		
		if ( trk1->GetQovP()*trk2->QovP() < 0.) {       // request opposite sign for signal
		SetCutFlow("opposite charge");    
		AtlPhiDecayKK *decay = 0;
		
		// Add PhiDecay to fEvents Decay-list
		// look for right order
		TLorentzVector P1,P2;
		P1.SetVectM(trk1->P(),fm_K);
		P2.SetVectM(trk2->P(),fm_K);
		
		if(trk1->GetQovP_Vtx()>0.){
		    HepParticle Fit_Daughter1(1,P1.Px(),P1.Py(),P2.Pz(),P1.E(),321);
		    HepParticle Fit_Daughter2(2,P2.Px(),P2.Py(),P2.Pz(),P2.E(),-321);
		    decay = fEvent->AddPhiDecayKK(p_Phi.Px(),p_Phi.Py(),p_Phi.Pz(),p_Phi.E(),
						  trk1,trk2,PrimVtx,
						  Fit_Daughter1,Fit_Daughter2);
		} else {
		    HepParticle Fit_Daughter1(1,P2.Px(),P2.Py(),P2.Pz(),P2.E(),321);
		    HepParticle Fit_Daughter2(2,P1.Px(),P1.Py(),P1.Pz(),P1.E(),-321);
		    decay = fEvent->AddPhiDecayKK(p_Phi.Px(),p_Phi.Py(),p_Phi.Pz(),p_Phi.E(),
						  trk2,trk1,PrimVtx,
					      Fit_Daughter1, Fit_Daughter2);
		}
		decay->SetChi2NDoF(0.0, 1);
		// DebugOutput
		if ( IsDebugRun() ) {
		    if( trk1->HasValidTruthMatch(0.0001) && trk2->HasValidTruthMatch(0.0001) ){
			fDebugOutput << endl
				     << "Event Nr. :" << fTree->GetReadEntry() << endl
				     << "Trk1: " << trk1->GetMCParticle()->GetPdgName() << " Mother: "
				     << trk1->GetMCParticle()->GetMother()->GetPdgName() << endl
				     << "Trk2: " << trk2->GetMCParticle()->GetPdgName() << " Mother: "
				     << trk2->GetMCParticle()->GetMother()->GetPdgName() << endl
				     << endl;
		    }
		}
		} else {
		    
		    // Add same charged combinations to the bkg list
		    TLorentzVector P1,P2;
		    P1.SetVectM(trk1->P(),fm_K);
		    P2.SetVectM(trk2->P(),fm_K);

		    Int_t pdgCode = 0;
		    if (trk1->QovP()>0.) pdgCode = 321;
		    else pdgCode = -321;

		    HepParticle Fit_Daughter1(1,P1.Px(),P1.Py(),P2.Pz(),P1.E(),pdgCode);
		    HepParticle Fit_Daughter2(2,P2.Px(),P2.Py(),P2.Pz(),P2.E(),pdgCode);
		    /* fEvent->AddPhiDecayKK(p_Phi.Px(),p_Phi.Py(),p_Phi.Pz(),p_Phi.E(),
					  trk1,trk2,
					  PrimVtx,PrimVtx,
					  Fit_Daughter1,Fit_Daughter2);*/
		    fBkgPhiDecays->Add(new AtlPhiDecayKK(BgkCount++, p_Phi.Px(), p_Phi.Py(),
							 p_Phi.Pz(), p_Phi.E(),
							 trk1,trk2,
							 PrimVtx,PrimVtx,
							 Fit_Daughter1,Fit_Daughter2));
		}
	    }
	}
    }
    delete Vtx1trk;
}

//____________________________________________________________________


void AtlPhiFinder::ReconstructPhiKinFit(){
    //
    // Phi reconstruction from track-pairs assuming being Kaons using KinFitter
    //

    //TList      *Vtx1trk;
    HepVertex  *PrimVtx;
    AtlIDTrack *trk1 = 0;  
    AtlIDTrack *trk2 = 0;
    Int_t j ;

    TLorentzVector p_trk1, p_trk2, p_Phi;    // 4 Momentum
    Float_t m_Phi = 0;                       // Reconstructed Phi-mas
    
    TMatrixD cov_trk1(3,3);
    TMatrixD cov_trk2(3,3);
   
    Int_t BgkCount = 1;                      // gives ID of background Phi (from same charged Kaons)
    Float_t PvalueKinFit = 0.0;

    // Get the primary vertex
    PrimVtx = fEvent->GetPrimaryVtx();
    // security request
    if (PrimVtx == NULL) return;
    
    /* Get the primary vertex trk list
    Vtx1trk = fEvent->GetPrimVtxTracks();
    // security request
    if (Vtx1trk == NULL) return;*/
        
    // Loop over all trk combination
    for(Int_t i = 0; i < PrimVtx->GetNDaughters(); i++) {
	trk1 = (AtlIDTrack*)PrimVtx->GetDaughters()->At(i);
 	if (trk1->GetPixeldEdx() < 0.1) continue;
	
	fHistdEdx_pmag->Fill(trk1->Pmag(), trk1->GetPixeldEdx(), GetPreTagEvtWeight());
	// MC Studies
        if (trk1->HasValidTruthMatch(0.9)) {
	    HepMCParticle *mcprt = trk1->GetMCParticle();
	    fHistdEdx_betagamma->Fill(mcprt->P().Beta()*mcprt->P().Gamma(), trk1->GetPixeldEdx(), GetPreTagEvtWeight());
	    
            if ((TMath::Abs(trk1->GetMCParticle()->GetPdgCode()) == 321) && (TMath::Abs(trk1->GetMCParticle()->GetMother()->GetPdgCode()) == 333)) {
	        fHistdEdx_pmag_MCsig->Fill(trk1->Pmag(), trk1->GetPixeldEdx(), GetPreTagEvtWeight());
		if ((trk1->Pmag() >= fPmag_min) && (trk1->Pmag() < fPmag_max))
		    fHistdEdx_diff_MCsig->Fill(Delta_dEdx(trk1), GetPreTagEvtWeight());
	    }
           else {
	        fHistdEdx_pmag_MCbkg->Fill(trk1->Pmag(), trk1->GetPixeldEdx(), GetPreTagEvtWeight());
		if ((trk1->Pmag() >= fPmag_min) && (trk1->Pmag() < fPmag_max))
		    fHistdEdx_diff_MCbkg->Fill(Delta_dEdx(trk1), GetPreTagEvtWeight());
	    }
        }
	
	for(j = i+1; j < PrimVtx->GetNDaughters(); j++) {

            trk2 = (AtlIDTrack*)PrimVtx->GetDaughters()->At(j);
	    if (trk2->GetPixeldEdx() < 0.1) continue;
	   
	    // Discard all tracks without reference to a truth particle for all
	    // MC-Runs to compute the purity correctly
	    if( fEvent->IsMC() ){
		if( !( trk1->HasValidTruthMatch(0.0001) &&
		       trk2->HasValidTruthMatch(0.0001)) ) {
		    continue;
		}
		SetCutFlow("MC exists");
	    }
	    
	    if ( (trk1->Chi2ovNDoF() > fTrackChi2ovNDoF_max) || (trk2->Chi2ovNDoF() > fTrackChi2ovNDoF_max)) continue;
	    SetCutFlow("Chi2ovNDoF cut");

            if ((trk1->Pmag() < fPmag_min) || (trk1->Pmag() > fPmag_max) ||
		(trk2->Pmag() < fPmag_min) || (trk2->Pmag() > fPmag_max)) continue;
	    SetCutFlow("Pmag");
	    
            if (Delta_dEdx(trk1) > fdEdx_Delta_max) continue;
            SetCutFlow("dEdx 1");
	    
	    if (Delta_dEdx(trk2) > fdEdx_Delta_max) continue;
	    SetCutFlow("dEdx 2");
	    
	    // Get 4 Momentum and compute inv. mass of Phi candidate
	    p_trk1.SetVectM(trk1->P(), fm_K);
	    p_trk2.SetVectM(trk2->P(), fm_K);
	    p_Phi = p_trk1 + p_trk2;
	    m_Phi = p_Phi.M();

	    // Selection constraints, regarding only interesting trk combinations
	    // -------------------------
	    if (! ((m_Phi > fPhi_M_min) && (m_Phi < fPhi_M_max)) ) continue;
	    SetCutFlow("mass cut");
	    /*
	    if ( trk1->P().Angle(trk2->P()) > fAngle_max ) continue; // improves purity in MC-TM, fAngle_max is set external
	    SetCutFlow("angle cut");
	    */

	    // cov matrices
	    trk1->GetCovMatrixPtEtaPhi(cov_trk1);
	    trk2->GetCovMatrixPtEtaPhi(cov_trk2);
	    
	    // define momentum used as output of the fit
	    TLorentzVector FitP_trk1;
	    TLorentzVector FitP_trk2;
	    
	    // define particels necessary for execution of the fit
	    // using 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 PhiFit",
					      &dummy1,fm_K,&cov_trk1);
	    TVector3 dummy2 = trk2->P(); // instead of const cast
	    TFitParticlePtEtaPhi FitExec_trk2("FitExec_trk2","FitExec_trk2 for PhiFit",
					      &dummy2,fm_K,&cov_trk2);
	       
	    // definition of Phi mass constraint
	    TFitConstraintM MPhiCons("PhiMassConstraint","PhiMassConstraintGaus",0,0,fm_Phi);
	    MPhiCons.addParticles1(&FitExec_trk1,&FitExec_trk2);
	       
	    // fitting characteristics
	    TKinFitter fitter;
	    fitter.addMeasParticle(&FitExec_trk1);
	    fitter.addMeasParticle(&FitExec_trk2);
	    fitter.addConstraint(&MPhiCons);
 						   
	    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();

	    // Fill Histogram IF(!) the fit converged (fitter.getStatus==0)
	    if ( fitter.getS()<0. ) {
		Error("ReconstructPhiKinFit",
		      "fitter.getS()<0. Abort!");
		gSystem->Abort(0);
	    }
	    if( ! fitter.getStatus() ) {
		SetCutFlow("fit converged");
		
		// Copy fittet Vectors
		FitP_trk1=(*FitExec_trk1.getCurr4Vec());
		FitP_trk2=(*FitExec_trk2.getCurr4Vec());
		   
		// Reconstruct Phi 4-momentum
		p_Phi = FitP_trk1 + FitP_trk2;
				   
		//setting Chi2,NDoF,PvalueKinFit
		SetChi2(fitter.getS());
		SetNDoF(fitter.getNDF());
		PvalueKinFit = TMath::Prob(fChi2, fNDoF);

		// eta-cut from MC info
		if ( (p_Phi.Eta() < fPhi_Eta_min) || (p_Phi.Eta() > fPhi_Eta_max) ) continue;
		SetCutFlow("Eta");
				
		// Adding Phi to event
		if (PvalueKinFit >= fKinFitPvalue_min) {
		    AtlPhiDecayKK *decay;
		    SetCutFlow("Pvalue Cut");
		    if ( trk1->Charge()*trk2->Charge() < 0. ) { //require opposite sign
			SetCutFlow("opposite charge");

			AtlPhiDecayKK *decay;
			// look for right order
			if(trk1->GetQovP_Vtx()>0.){
			    HepParticle Fit_Daughter1(1, FitP_trk1.Px(), FitP_trk1.Py(),
						      FitP_trk1.Pz(), FitP_trk1.E(), 321);
			    HepParticle Fit_Daughter2(2, FitP_trk2.Px(), FitP_trk2.Py(),
						      FitP_trk2.Pz(), FitP_trk2.E(),-321);
			    decay = fEvent->AddPhiDecayKK(p_Phi.Px(),p_Phi.Py(),p_Phi.Pz(),p_Phi.E(),
							  trk1,trk2,PrimVtx,
							  Fit_Daughter1, Fit_Daughter2);
			}else{
			    HepParticle Fit_Daughter1(1,FitP_trk2.Px(),FitP_trk2.Py(),
						      FitP_trk2.Pz(), FitP_trk2.E(),321);
			    HepParticle Fit_Daughter2(2,FitP_trk1.Px(),FitP_trk1.Py(),
						      FitP_trk1.Pz(), FitP_trk1.E(),-321);
			    decay = fEvent->AddPhiDecayKK(p_Phi.Px(),p_Phi.Py(),p_Phi.Pz(),p_Phi.E(),
							  trk2,trk1,PrimVtx,
							  Fit_Daughter1, Fit_Daughter2);
			}
			decay->SetChi2NDoF(fChi2, fNDoF);
			
                        // DebugOuput
			if ( IsDebugRun() ) {
			    fDebugOutput
				<< "-------------------------"                                << endl
				<< "PDG trk1      : " << trk1->GetMCParticle()->GetPdgName()  << endl
				<< "PDG trk2      : " << trk2->GetMCParticle()->GetPdgName()  << endl;
			    if( trk1->GetMCParticle()->GetMother() != NULL ) {
				fDebugOutput << "Mother of trk1: " << trk1->GetMCParticle()->GetMother()->GetPdgName() << endl;
			    }
			    if( trk2->GetMCParticle()->GetMother() != NULL ) {
				fDebugOutput << "Mother of trk2: " << trk2->GetMCParticle()->GetMother()->GetPdgName() << endl;
			    }
			    fDebugOutput << "-------------------------"                       << endl;
			}
			
		    }
		    else {
			// Add same charged combinations to bkg list
			Int_t pdgCode = 0;
			if (trk1->QovP()>0.) pdgCode = 321;
			else pdgCode = -321;
			HepParticle Fit_Daughter1(1,FitP_trk1.Px(),FitP_trk1.Py(),
						  FitP_trk1.Pz(), FitP_trk1.E(),pdgCode);
			HepParticle Fit_Daughter2(2,FitP_trk2.Px(),FitP_trk2.Py(),
						  FitP_trk2.Pz(), FitP_trk2.E(),pdgCode);
			decay = new AtlPhiDecayKK(BgkCount++,
						  p_Phi.Px(), p_Phi.Py(),
						  p_Phi.Pz(), p_Phi.E(),
						  trk1,trk2,
						  PrimVtx,PrimVtx,
						  Fit_Daughter1,Fit_Daughter2);
			decay->SetChi2NDoF(fChi2, fNDoF);
			fBkgPhiDecays->Add(decay);
			

		    }
		}// End of Prob(Chi2ovNDoF) > x  request
	    }
	} // end of trk loop
    }
      FindSharedTracks();
}

//____________________________________________________________________    

void AtlPhiFinder::FindSharedTracks() {

    AtlPhiDecayKK *decay, *decay2;
    
    for ( Int_t i = 0; i < fEvent->GetN_PhiDecaysKK(); i++ ) {
      decay = (AtlPhiDecayKK*)fEvent->GetPhiDecaysKK()->At(i);

      for (Int_t j = i+1; j < fEvent->GetN_PhiDecaysKK(); j++) {
	  decay2 = (AtlPhiDecayKK*)fEvent->GetPhiDecaysKK()->At(j);
	  if (  (decay->GetKPlus() == decay2->GetKPlus()) ||
		(decay->GetKPlus() == decay2->GetKMinus()) ||
		(decay->GetKMinus() == decay2->GetKPlus()) ||
		(decay->GetKMinus() == decay2->GetKMinus()) ) {
	      decay->SetSharedTracks(kTRUE);
	      decay2->SetSharedTracks(kTRUE);
	  }
      }

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

//____________________________________________________________________   

void AtlPhiFinder::FillHistograms() {
    //
    // Fill histograms (not all, some are filled in Reconstruct)
    //
    
    // Phi variables
    AtlPhiDecayKK *Decay   = 0 ;
    TLorentzVector P_Phi, P_KPlus, P_KMinus;
      
    // Kaon variables
    AtlIDTrack *Daughter1  = 0 ;
    AtlIDTrack *Daughter2  = 0 ;
    Float_t Daughter1_Pt   = 0.;
    Float_t Daughter2_Pt   = 0.;
    Float_t Daughter1_Eta  = 0.;
    Float_t Daughter2_Eta  = 0.;
    Float_t Daughter1_Phi  = 0.;
    Float_t Daughter2_Phi  = 0.;

    // Signal (opposite charged)
    // ________________________________________
    
    for ( Int_t i = 0; i < fEvent->GetN_PhiDecaysKK(); i++ ) {

	Decay = (AtlPhiDecayKK*)fEvent->GetPhiDecaysKK()->At(i);
	if (Decay->HasSharedTracks()) continue;
	
	SetChi2(Decay->GetChi2());
	SetNDoF(Decay->GetNDoF());
	
	// Hitbased TruthMatching
	if ( fEvent->IsMC() && fUseKaonPurity ) {
	    // K purity
	    switch ( DoTruthMatch(Decay->GetKPlus(), Decay->GetKMinus()) ) {
		case  1:
		    FillHistograms_MCTruthStudy(Decay,'s');
		    fTrueReco = kTRUE;
		    AtlKinFitterTool::FillHistograms("Signal");
		    fTrueReco = kFALSE;
		    AtlKinFitterTool::FillHistograms("Signal");
		    break;
		case  2:
		    FillHistograms_MCTruthStudy(Decay,'s');
		    fTrueReco = kTRUE;
		    AtlKinFitterTool::FillHistograms("Signal");
		    AtlKinFitterTool::FillHistograms("Signal");
		    break;
		case -1:
		    FillHistograms_MCTruthStudy(Decay,'b');
		    fTrueReco = kFALSE;
		    AtlKinFitterTool::FillHistograms("Signal");
		    AtlKinFitterTool::FillHistograms("Signal");
		    break;
	    }
	} else if ( fEvent->IsMC() && !fUseKaonPurity ) {
	    // Phi purity
	    switch ( DoTruthMatch(Decay->GetKPlus(), Decay->GetKMinus()) ) {
		case 1:
		    fTrueReco = kTRUE;
		    AtlKinFitterTool::FillHistograms("Signal");
		    FillHistograms_MCTruthStudy(Decay,'s');
		    break;
		case -1:
		    fTrueReco = kFALSE;
		    AtlKinFitterTool::FillHistograms("Signal");
		    AtlKinFitterTool::FillHistograms("Bkg");
		    FillHistograms_MCTruthStudy(Decay,'b');
		    break;
	    }
	} else {
	    AtlKinFitterTool::FillHistograms("Signal");
	}
	
	P_Phi    = Decay->P();
	P_KPlus  = Decay->GetReFitKPlus().P();
	P_KMinus = Decay->GetReFitKMinus().P();
	
	fHistPhireco_m_KK     ->Fill(Decay->M("Reco"),    GetPreTagEvtWeight());
	fHistPhireco_pt_KK    ->Fill(Decay->Pt(),         GetPreTagEvtWeight());  
	fHistPhireco_phi_KK   ->Fill(Decay->Phi(),        GetPreTagEvtWeight()); 
	fHistPhireco_eta_KK   ->Fill(Decay->Eta(),        GetPreTagEvtWeight());


	if ( fEvent->IsMC() ) {
	    if ( Decay->GetKPlus()->HasValidTruthMatch(fMatchingProb_min) ) {
		fHistPhireco_TRK->Fill(Decay->GetKPlus()->GetMCParticle()->GetPdgName(), GetPreTagEvtWeight());
	    }
	    if ( Decay->GetKMinus()->HasValidTruthMatch(fMatchingProb_min) ) {
		fHistPhireco_TRK->Fill(Decay->GetKMinus()->GetMCParticle()->GetPdgName(), GetPreTagEvtWeight());
	    }
	}
	
	// Opening Angle
	fHistPhireco_KK_OpeningAngle->Fill(Decay->GetOpeningAngle(), GetPreTagEvtWeight());

	// Decay Angle is the angle between Phis momentum and the momentum of the K+
	// in Phis restframe
	fHistPhireco_DecayAngle_KK    ->Fill(Decay->GetDecayAngle(),   GetPreTagEvtWeight());
	
	// Get Daughters: for Signal, first daughter is allways positive, second is negative
	// (see Reconstruct Phi cutbased/kinfit)
	Daughter1      = Decay->GetKPlus();
	Daughter2      = Decay->GetKMinus();
	Daughter1_Pt   = Daughter1->Pt();
	Daughter2_Pt   = Daughter2->Pt();
	Daughter1_Eta  = Daughter1->Eta();
	Daughter2_Eta  = Daughter2->Eta();
	Daughter1_Phi  = Daughter1->Phi();
	Daughter2_Phi  = Daughter2->Phi();
	
	fHistPhireco_KPlus_pt     ->Fill(Daughter1_Pt,    GetPreTagEvtWeight());
	fHistPhireco_KMinus_pt    ->Fill(Daughter2_Pt,    GetPreTagEvtWeight());
	fHistPhireco_KPlus_eta    ->Fill(Daughter1_Eta,   GetPreTagEvtWeight());
	fHistPhireco_KMinus_eta   ->Fill(Daughter2_Eta,   GetPreTagEvtWeight());
	fHistPhireco_KPlus_phi    ->Fill(Daughter1_Phi,   GetPreTagEvtWeight());
	fHistPhireco_KMinus_phi   ->Fill(Daughter2_Phi,   GetPreTagEvtWeight());

	// general tuning histograms:
	
	// Fill Histo of Vtx Fit
	fHistPhireco_Chi_VtxFit->Fill(Decay->GetVtx()->GetChi2overNDoF(), GetPreTagEvtWeight());

        // Fill Histo of Trk Fit   
	fHistPhireco_Chi_TrkFit->Fill(Daughter1->Chi2ovNDoF(), GetPreTagEvtWeight());
	fHistPhireco_Chi_TrkFit->Fill(Daughter2->Chi2ovNDoF(), GetPreTagEvtWeight());

        // dE/dx
	fHistdEdx_pmag_sig->Fill(Daughter1->Pmag(), Daughter1->GetPixeldEdx(), GetPreTagEvtWeight());
	fHistdEdx_pmag_sig->Fill(Daughter2->Pmag(), Daughter2->GetPixeldEdx(), GetPreTagEvtWeight());
	fHistdEdx_diff_sig->Fill(Delta_dEdx(Daughter1), GetPreTagEvtWeight());
	fHistdEdx_diff_sig->Fill(Delta_dEdx(Daughter2), GetPreTagEvtWeight());
    }
    fHistPhireco_N_KK ->Fill(fEvent->GetN_PhiDecaysKK(), GetPreTagEvtWeight());

    // Combinatorial Background (same charged)
    // ____________________________________________
    
    TIter next_bkg(fBkgPhiDecays);
    while ( (Decay = (AtlPhiDecayKK*)next_bkg()) ) {
	if (Decay->HasSharedTracks()) continue;
	
	TLorentzVector P_K1 = Decay->GetReFitKPlus().P();
	TLorentzVector P_K2 = Decay->GetReFitKMinus().P();

         // fill Chi2 and NDoF
	SetChi2(Decay->GetChi2());
	SetNDoF(Decay->GetNDoF());
//	AtlKinFitterTool::FillHistograms("Bkg");
	
	P_Phi = Decay->P();
	P_K1  = Decay->GetReFitKPlus().P();
	P_K2  = Decay->GetReFitKMinus().P();

	//filling the standard histograms
	//----------------------------------
	fHistPhireco_m_KK_bkg     ->Fill(Decay->M("REC"),    GetPreTagEvtWeight());
	fHistPhireco_pt_KK_bkg    ->Fill(Decay->Pt(),        GetPreTagEvtWeight());  
	fHistPhireco_phi_KK_bkg   ->Fill(Decay->Phi(),       GetPreTagEvtWeight()); 
	fHistPhireco_eta_KK_bkg   ->Fill(Decay->Eta(),       GetPreTagEvtWeight());

	// Opening Angle (bkg)
	fHistPhireco_KK_OpeningAngle_bkg  ->Fill(Decay->GetOpeningAngle(), GetPreTagEvtWeight());

	// Decay Angle is the angle between Phis momentum and the momentum of the K+
	// in Phis restframe (bkg)
	fHistPhireco_KK_DecayAngle_bkg->Fill(Decay->GetDecayAngle(),   GetPreTagEvtWeight());

        // Get Daughters: both are same charged -> fill either positive or
        // negative daughter histograms
	Daughter1     = Decay->GetKPlus();
	Daughter2     = Decay->GetKMinus();
	
	Daughter1_Pt  = Daughter1->Pt();
	Daughter2_Pt  = Daughter2->Pt();
	Daughter1_Eta = Daughter1->Eta();
	Daughter2_Eta = Daughter2->Eta();
	Daughter1_Phi = Daughter1->Phi();
	Daughter2_Phi = Daughter2->Phi();
	
	// dE/dx
	fHistdEdx_pmag_bkg->Fill(Daughter1->Pmag(), Daughter1->GetPixeldEdx(), GetPreTagEvtWeight());
	fHistdEdx_pmag_bkg->Fill(Daughter2->Pmag(), Daughter2->GetPixeldEdx(), GetPreTagEvtWeight());
	fHistdEdx_diff_bkg->Fill(Delta_dEdx(Daughter1), GetPreTagEvtWeight());
	fHistdEdx_diff_bkg->Fill(Delta_dEdx(Daughter2), GetPreTagEvtWeight());
    
	//Check if positive or negative charged daughters
	if( Daughter1->IsPositive() ) {
	    fHistPhireco_KPlus_pt_bkg     ->Fill(Daughter1_Pt,   GetPreTagEvtWeight());
	    fHistPhireco_KPlus_eta_bkg    ->Fill(Daughter1_Eta,  GetPreTagEvtWeight());
	    fHistPhireco_KPlus_phi_bkg    ->Fill(Daughter1_Phi,  GetPreTagEvtWeight());
	}else{
	    fHistPhireco_KMinus_pt_bkg    ->Fill(Daughter2_Pt,   GetPreTagEvtWeight());
	    fHistPhireco_KMinus_eta_bkg   ->Fill(Daughter2_Eta,  GetPreTagEvtWeight());
	    fHistPhireco_KMinus_phi_bkg   ->Fill(Daughter2_Phi,  GetPreTagEvtWeight());
	}
    }
    fHistPhireco_N_KK_bkg ->Fill(fBkgPhiDecays->GetEntries(), GetPreTagEvtWeight());
}

//____________________________________________________________________

void AtlPhiFinder::SetCutDefaults() {
    //
    // Selection cut defaults and Constraint parameters
    // -----------------------------------------------------------------
    // external cuts:
    // fPhi_M_min, fPhi_M_max:
    //                     e.g.:  for Cutbased: 0.950..1.250
    //                            for KinFit  : 1.015..1.025
    // Quality of VtxFit: fVertexChi2ovNDoF_max:
    //                     e.g.:  normal:   1.5
    //                            DebugRun: 5.0
    // Quality of TrkFit: fTrackChi2ovNDoF_max:
    //                     e.g.:  normal:   1.5
    //                            DebugRun: 3.8
    // Angle between Trks (only for KinFit): fAngle_max: e.g.: 0.3 (rad) (seems to less nice for purity)
    // Quality of kinematic Fit: fKinFitPvalue_min: e.g:   0.10
    // Quality of Truth Matching: fMatchingProb_min: e.g.: 0.95
    // -----------------------------------------------------------------
    //

    // Cuts for Tracks
    fSignalKaon_Pt_min       =  0.5;         // Min. Pt of signal electrons 
    fSignalKaon_Pt_max       =  1.e10;       // Max. Pt of signal electrons
    fSignalKaon_Eta_min      = -2.5;         // Min. eta of signal electrons
    fSignalKaon_Eta_max      =  2.5;         // Max. eta of signal electrons
    
    // mass hypotheses
    fm_K                     = 0.493677;     // Kaon mass hypothesis
    fm_Phi                   = 1.019455;     // Phi mass from PDG

    // Angle citerion
    if ( fMode == kCutBased ) {              // Angle criterion only for cutbased
	fAngle_max = 8.5 ;                   // for KinFit cut value is set external
    }

    // dEdx Fit values
    fdEdx_p0 = -2.375e-1;
    fdEdx_p1 = -3.09;
    fdEdx_p2 = 5.0e-1;
    fdEdx_p3 = 1.1389;
    fdEdx_p4 = -1.323e-1;

    // Bethe Bloch
    fBetheBloch = new TF1("Bethe-Bloch-like-Fkt","[0]/pow(x*x/(x*x + 1),[3]) * ([1] - pow(x*x/(x*x + 1),[3]) - log([2] + pow(1/x, [4])))", 0.0, 1e6);
    fBetheBloch->SetParameter(0, fdEdx_p0);
    fBetheBloch->SetParameter(1, fdEdx_p1);
    fBetheBloch->SetParameter(2, fdEdx_p2);
    fBetheBloch->SetParameter(3, fdEdx_p3);
    fBetheBloch->SetParameter(4, fdEdx_p4);
    
}

//____________________________________________________________________

void AtlPhiFinder::PrintCutValues(){

    cout << "----------------------------------------------" << endl;
    cout << "----------------------------------------------" << endl;
    if ( fMode == kKinFit ){
	cout << endl << " Used mode: kKinFit " << endl;
	cout << " ----------------------" << endl << endl
	     << " Prob. of MC Truth Matching Cut =  " << fMatchingProb_min << endl;
	cout << "-----------------------------------------------------" << endl;
	cout <<  " " << fPhi_M_min << " < M(Phi)(GeV)    < " << fPhi_M_max << endl;
	cout << "-----------------------------------------------------" << endl;
	cout << " max. Angle between Kaon Tracks (deg) : " << (fAngle_max * 180)/TMath::Pi() << endl;
	cout << "-----------------------------------------------------" << endl;
	cout << " maximum Chi2/NDoF of Vertex Fit: " << endl
	     << "  Chi2/NDoF_Vtx = "
	     << fVertexChi2ovNDoF_max << endl;
	cout << "------------------------------------------------------" << endl;
	cout << " maximum Chi2/NDoF of Track (to primary Vertex) Fit: " << endl
	     << "  Chi2_Vtx/NDoF_Vtx = "
	     << fTrackChi2ovNDoF_max << endl;
	cout << "------------------------------------------------------" << endl;
	cout << "fKinFitPvalue (Quality of kinematic fit): " << fKinFitPvalue_min << endl;
	cout << "------------------------------------------------------" << endl;
	cout << "Eta between " << fPhi_Eta_min << " and " << fPhi_Eta_max << endl;
	cout << "------------------------------------------------------" << endl;
	cout << "Pmag: " << fPmag_min << " < Pmag <  " << fPmag_max << endl;
	cout << "------------------------------------------------------" << endl;
	cout << "dEdx cut, max. Diff between measured and calculated dEdx: " << fdEdx_Delta_max << endl;
	cout << "------------------------------------------------------" << endl;
	cout << "------------------------------------------------------" << endl;
    }
    else if (fMode == kCutBased)  {
	cout << endl << " Used mode: kCutBased " << endl;  
	cout << " ----------------------------------------------" << endl;
	cout << " Used CutDefaults:" <<endl;
	cout << " ----------------------------------------------" << endl;
	
    	cout << scientific << setprecision(3) << " " << fSignalKaon_Pt_min <<
	    " < Pt(Pion)(GeV)  < " << fSignalKaon_Pt_max << endl;
	cout << scientific << fSignalKaon_Eta_min << " < Eta(Kaon)      < "
	     << fSignalKaon_Eta_max << endl;
	cout << scientific << " " << fPhi_M_min << " < M(Phi)(GeV)    < " << fPhi_M_max << endl;
	cout << "----------------------------------------------" << endl;
	cout << scientific << " Kaon mass hypothesis: " << endl
	     << "           M_K (GeV)  = " << fm_K << endl;
	cout << "----------------------------------------------" << endl;
	cout << " max. Angle between Kaon Tracks (deg) : " << (fAngle_max * 180)/TMath::Pi() << endl;
	cout << "----------------------------------------------" << endl;
	cout << scientific << " maximum Chi2/NDoF of Vertex Fit: " << endl
	     << "  Chi2/NDoF_Vtx = "
	     << fVertexChi2ovNDoF_max << endl;
	cout << "----------------------------------------------" << endl;
	cout << scientific << " maximum Chi2/NDoF of Track (to primary Vertex) Fit: " << endl
	     << "  Chi2_Vtx/NDoF_Vtx = "
	     << fTrackChi2ovNDoF_max << endl;
	cout << "----------------------------------------------" << endl;
	cout << "Pmag: " << fPmag_min << " < Pmag <  " << fPmag_max << endl;
	cout << "------------------------------------------------------" << endl;
	cout << "dEdx cut, max. Diff between measured and calculated dEdx: " << fdEdx_Delta_max << endl;
	cout << "----------------------------------------------" << endl;
	cout << "----------------------------------------------" << endl;
    }
}

//____________________________________________________________________

void AtlPhiFinder::Terminate() {
    cout << "Terminate begins" << endl;
    
    AtlKinFitterTool::Terminate();
    
    if ( fMode == kCutBased ) {
	// subtract back- from foreground (for phi mass histo) to see a mass peak
	fHistPhireco_m_KK_diff->Add(fHistPhireco_m_KK, 1.0);
	fHistPhireco_m_KK_diff->Add(fHistPhireco_m_KK_bkg, -1.0);
    } else {
	fHistdEdx_betagamma->ProfileX("h_dEdx_betagamma_pfx", 1, fHistdEdx_betagamma->GetXaxis()->GetLast());
    }
    
    // make nice Labels for pdg histos (in MC TM)
    fHistPhi_MC_same->LabelsDeflate("X");
    fHistPhi_MC_same->LabelsOption("v");
    fHistPhi_MC_KKsame->LabelsDeflate("X");
    fHistPhireco_TRK->LabelsDeflate("X");

    cout << endl << " ----------------------------------------" << endl;
    cout << endl << "INFO: Terminating AtlPhiFinder!" << endl;
}

//____________________________________________________________________


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

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

    // remove "_bar" from particle name to collect antiparticle and particle in the same bin
    if (trk1->GetMCParticle()->GetMother() == NULL)
	return 0;
    const char* fullPdgName = trk1->GetMCParticle()->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';
    }
    
    // Hitbased TruthMatching

    if ( ! fUseKaonPurity ) {
	// Phi Purity
	if(  trk1->HasValidTruthMatch(fMatchingProb_min)
	     && trk2->HasValidTruthMatch(fMatchingProb_min)) {
	    if( (trk1->GetMCParticle()->GetMother() == NULL) || (trk2->GetMCParticle()->GetMother() == NULL) ) {
		return 0;}
	    if( (TMath::Abs(trk1->GetMCParticle()->GetPdgCode())== 321)
		&& (TMath::Abs(trk2->GetMCParticle()->GetPdgCode())== 321)
		&& (TMath::Abs(trk1->GetMCParticle()->GetMother()->GetPdgCode())== 333)
		&& (trk1->GetMCParticle()->GetMother() == trk2->GetMCParticle()->GetMother()) ) {
		fHistPhi_MC_same->Fill(pdgName, GetPreTagEvtWeight());
		fHistPhi_MC_KKsame->Fill(pdgName, GetPreTagEvtWeight());
		return 1;
	    } else {
		if ( (trk1->GetMCParticle()->GetMother() == trk2->GetMCParticle()->GetMother()) ) {
		    fHistPhi_MC_same->Fill(pdgName, GetPreTagEvtWeight());
		    if ( (TMath::Abs(trk1->GetMCParticle()->GetPdgCode()) == 321) && (TMath::Abs(trk2->GetMCParticle()->GetPdgCode()) == 321) ) {
			fHistPhi_MC_KKsame->Fill(pdgName, GetPreTagEvtWeight());
		    }
		}
		else {
		    fHistPhi_MC_same->Fill("Comb", GetPreTagEvtWeight());
		    if ( (TMath::Abs(trk1->GetMCParticle()->GetPdgCode()) == 321) && (TMath::Abs(trk2->GetMCParticle()->GetPdgCode()) == 321) ) {
			fHistPhi_MC_KKsame->Fill("Comb", GetPreTagEvtWeight());
		    }
		}
		return -1;
	    }  
	} else {
	    return 0;
	}
    } else if ( fUseKaonPurity ) {
	// Kaon Purity
	if( trk1->HasValidTruthMatch(fMatchingProb_min)
	    && trk2->HasValidTruthMatch(fMatchingProb_min) ) {
	    if( (TMath::Abs(trk1->GetMCParticle()->GetPdgCode())== 321)
		&& (TMath::Abs(trk2->GetMCParticle()->GetPdgCode())== 321) ){
		return 2;
	    }
	    if( (TMath::Abs(trk1->GetMCParticle()->GetPdgCode())== 321)
		|| (TMath::Abs(trk2->GetMCParticle()->GetPdgCode())== 321) ) {
		return 1;
	    } else {
		return -1;
	    }  
	} else {
	    return 0;
	}
    }
    return 0;
}

//____________________________________________________________________

void AtlPhiFinder::FillHistograms_MCTruthStudy(AtlPhiDecayKK *PhiCandidate, char type) {
    // !!! key 'type' must be "s" for signal or "b" for background !!!
    // !!! routine could only be processed in case of a mc sample  !!!
    //
    // fills several histograms like pointing angle, invariant mass,
    // decay angle, ... separately for bkg and signal (Phi candiates that fulfill
    // the monte-carlo truth-matching as well as those that fail)
    
    // filling histograms
    switch (type) {
	case 's':
	    fHistPhireco_m_MCsignal     ->Fill(PhiCandidate->M("REC")      ,GetPreTagEvtWeight());
	    fHistPhireco_pt_MCsignal    ->Fill(PhiCandidate->Pt()          ,GetPreTagEvtWeight());  
	    fHistPhireco_phi_MCsignal   ->Fill(PhiCandidate->Phi()         ,GetPreTagEvtWeight()); 
	    fHistPhireco_eta_MCsignal   ->Fill(PhiCandidate->Eta()         ,GetPreTagEvtWeight());
	    fHistPhireco_OpeningAngle_MCsignal  ->Fill(PhiCandidate->GetOpeningAngle() ,GetPreTagEvtWeight());
	    fHistPhireco_DecayAngle_MCsignal    ->Fill(PhiCandidate->GetDecayAngle()   ,GetPreTagEvtWeight());
	    fHistPhireco_Number_Hits_MCsignal->Fill(PhiCandidate->GetKPlus()->GetN_PixelHits() + PhiCandidate->GetKPlus()->GetN_SCTHits() + PhiCandidate->GetKPlus()->GetN_TRTHits(), GetPreTagEvtWeight());
	    fHistPhireco_Number_Hits_MCsignal->Fill(PhiCandidate->GetKMinus()->GetN_PixelHits() + PhiCandidate->GetKMinus()->GetN_SCTHits() + PhiCandidate->GetKMinus()->GetN_TRTHits(), GetPreTagEvtWeight());  
	    fHistPhireco_ChiNDoF_Trks_MCsignal->Fill(PhiCandidate->GetKPlus()->GetChi2()/PhiCandidate->GetKPlus()->GetNDoF(), GetPreTagEvtWeight());
	    fHistPhireco_ChiNDoF_Trks_MCsignal->Fill(PhiCandidate->GetKMinus()->GetChi2()/PhiCandidate->GetKMinus()->GetNDoF(), GetPreTagEvtWeight());
	    break;
	case 'b':
	    fHistPhireco_m_MCbkg     ->Fill(PhiCandidate->M("REC")      ,GetPreTagEvtWeight());
	    fHistPhireco_pt_MCbkg    ->Fill(PhiCandidate->Pt()          ,GetPreTagEvtWeight());  
	    fHistPhireco_phi_MCbkg   ->Fill(PhiCandidate->Phi()         ,GetPreTagEvtWeight()); 
	    fHistPhireco_eta_MCbkg   ->Fill(PhiCandidate->Eta()         ,GetPreTagEvtWeight());
	    fHistPhireco_OpeningAngle_MCbkg->Fill(PhiCandidate->GetOpeningAngle() ,GetPreTagEvtWeight());
	    fHistPhireco_DecayAngle_MCbkg->Fill(PhiCandidate->GetDecayAngle()     ,GetPreTagEvtWeight());
	    fHistPhireco_Number_Hits_MCbkg->Fill(PhiCandidate->GetKPlus()->GetN_PixelHits() + PhiCandidate->GetKPlus()->GetN_SCTHits() + PhiCandidate->GetKPlus()->GetN_TRTHits(), GetPreTagEvtWeight());
	    fHistPhireco_Number_Hits_MCbkg->Fill(PhiCandidate->GetKMinus()->GetN_PixelHits() + PhiCandidate->GetKMinus()->GetN_SCTHits() + PhiCandidate->GetKMinus()->GetN_TRTHits(), GetPreTagEvtWeight());  
	    fHistPhireco_ChiNDoF_Trks_MCbkg->Fill(PhiCandidate->GetKPlus()->GetChi2()/PhiCandidate->GetKPlus()->GetNDoF(), GetPreTagEvtWeight());
	    fHistPhireco_ChiNDoF_Trks_MCbkg->Fill(PhiCandidate->GetKMinus()->GetChi2()/PhiCandidate->GetKMinus()->GetNDoF(), GetPreTagEvtWeight());
	    break;
	default:
	    cout << endl << endl
		 <<"!!! Error using FillHistograms_MCTruthStudy(AtlPhiDecayKK*,char) in AtlPhiFinder"
		 << endl << "Select either 's' or 'b' as key !!!"
		 << endl << endl;
	    break;
    }
}

// ____________________________________________________________________

Float_t AtlPhiFinder::Delta_dEdx(AtlIDTrack *trk1) {

/*    TLorentzVector p_trk;
    p_trk.SetVectM(trk1->P(), fm_K);
    return TMath::Abs(fBetheBloch->Eval(p_trk.Beta()*p_trk.Gamma()) - trk1->GetPixeldEdx()) / trk1->GetPixeldEdx();
*/
    Float_t predict = fBetheBloch->Eval(trk1->Pmag()/fm_K);
    return TMath::Abs( (predict - trk1->GetPixeldEdx()) / predict );
}

// ____________________________________________________________________

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