//____________________________________________________________________
//
// Example Z->ll analysis (in preparation for an tZ analysis)
//
//  
// Author: Sebastian Mergelmeyer <mailto: mergelm@physik.hu-berlin.de>
// Update: $Id: AtlZllAnalysisDemo.cxx,v 1.10 2015/12/02 22:14:46 kind Exp $
//
// Copyright: 2015 (C) Sebastian Mergelmeyer
//
#ifndef SINGLETOP_AtlZllAnalysisDemo
#include <AtlZllAnalysisDemo.h>
#endif

#include <TH1.h>
#include <TLorentzVector.h>
#include <TList.h>
#include <TVector2.h>
#include <TVector3.h>
#include <AtlEvtWriterD3PDSgTopThinned.h>

using namespace std;

#ifndef __CINT__
ClassImp(AtlZllAnalysisDemo);
#endif

//____________________________________________________________________

AtlZllAnalysisDemo::AtlZllAnalysisDemo(const char* OutputFileName) :
    AtlSelector(OutputFileName) {
    //
    // Default constructor
    //
    fLeptons     = 0;
    fElectrons   = 0;
    fMuons       = 0;
    fJets        = 0;
    fBJets       = 0;
    fObjTool     = 0;
    fSFTool      = 0;
    SetCutDefaults();
}

//____________________________________________________________________

void AtlZllAnalysisDemo::SetCutDefaults() {
    //
    // Selection cut defaults
    //
    fChgCombination = kChgOpposite;
    fNLeptons_min = 2;
    fNBTags_min   = 0;
    fNBTags_max   = 9999;
    fPt_Lep1_min  = 0.;
    fMZ_min       = 0.;
    fMZ_max       = 1e9;
    fMET_min      = 0.;
    fMET_max      = 1e9;
    fMtW_min      = 0.;
    fMtW_max      = 1e9;
}

//____________________________________________________________________

AtlZllAnalysisDemo::~AtlZllAnalysisDemo() {
    //
    // Default destructor
    //
}

//____________________________________________________________________

void AtlZllAnalysisDemo::SetBranchStatus() {
    //
    // Switch on/off branches in order to gain speed
    //
    fTree->SetBranchStatus("*", kTRUE);
}

//____________________________________________________________________

void AtlZllAnalysisDemo::Clear(Option_t * option) {
    //
    // Clear variables and lists
    // (or be very careful to define them before use for each event!)
    //
}

//____________________________________________________________________

void AtlZllAnalysisDemo::Begin(TTree * tree) {
    //
    // Begin analysis job
    //
    fEvtWriter = new AtlEvtWriterD3PDSgTopThinned();
    AtlSelector::Begin(tree);
}

//____________________________________________________________________

void AtlZllAnalysisDemo::SlaveBegin(TTree * tree) {
    //
    // Initialise before the first event.
    //
    AtlSelector::SlaveBegin(tree);

    // Get ObjectSelectionTool + pointers to analysis objects
    fObjTool = (AtlObjectsToolD3PDSgTop*)
	GetTool("AtlObjectsToolD3PDSgTop", "", kTRUE);
    fElectrons = fObjTool->GetElectrons();
    fMuons     = fObjTool->GetMuons();
    fLeptons   = fObjTool->GetLeptons();
    fJets      = fObjTool->GetJets();
    fBJets     = fObjTool->GetBJets();

    // Get ScaleFactorTool
    fSFTool = (AtlObjRecoScaleFactorTool*)
	GetTool("AtlObjRecoScaleFactorTool", "", kTRUE);
    // Provide SF tool with pointers to analysis objects
    if ( fSFTool ) {
	fSFTool->SetObjDefinitionTool(fObjTool);
        fSFTool->SetLeptons(fLeptons);
        fSFTool->SetJets(fJets);
    }

    // Initialise event writer
    if ( AtlEvtWriterD3PDSgTopThinned *evtWriter
	 = dynamic_cast<AtlEvtWriterD3PDSgTopThinned*>(fEvtWriter) ) {
        evtWriter->SetLeptons(fLeptons);
        evtWriter->SetJets(fJets);
    }
}

//____________________________________________________________________

void AtlZllAnalysisDemo::InitEvent() {
    //
    // Prepare event analysis
    //
}

//____________________________________________________________________

void AtlZllAnalysisDemo::Print(Option_t *option) const {
    //
    // Print user analysis configuration
    //
    cout << "\n"
	 << "========================================================\n"
	 << "  Atlas Z->ll Analysis Demo Selector                    \n"
	 << "========================================================\n"
	 << "\n";
    AtlSelector::Print();
    cout << "Final event selection:" << endl
	 << "  fChgCombination = ";
    switch ( fChgCombination ) {
	case kChgOpposite:
	    cout << "opposite charge" << endl;
	    break;
	case kChgSame:
	    cout << "same charge" << endl;
	    break;
	case kChgAny:
	    cout << "any" << endl;
	    break;
	default:
	    cout << "undef" << endl;
    }
    cout << "  fNLeptons_min   = " << fNLeptons_min << endl
	 << "  fNBTags_min     = " << fNBTags_min << endl
	 << "  fNBTags_max     = " << fNBTags_max << endl
	 << "  fPt_Lep1_min    = " << fPt_Lep1_min << " GeV" << endl
	 << "  fMZ_min         = " << fMZ_min << " GeV" << endl
	 << "  fMZ_max         = " << fMZ_max << " GeV" << endl
	 << "  fMET_min        = " << fMET_min << " GeV" << endl
	 << "  fMET_max        = " << fMET_max << " GeV" << endl
	 << "  fMtW_min        = " << fMtW_min << " GeV" << endl
	 << "  fMtW_max        = " << fMtW_max << " GeV" << endl
	 << endl
	 << "========================================================" << endl
	 << endl;
}

//____________________________________________________________________

void AtlZllAnalysisDemo::Terminate() {
    //
    // Terminate routine called at the end of event loop
    //    
    AtlSelector::Terminate();
}

//____________________________________________________________________

Bool_t AtlZllAnalysisDemo::ProcessPreCut() {
    //
    // Event pre-selection
    //
    // While generally not needed, one might want to reject events
    // early to save computing time. Some information (e.g. the event
    // weight) cannot be used here.
    //

    // Check whether "trigger" fired
    return (fEvent->GetEventHeader()
	    ->TestPreselectionFlagsAny(AtlEventHeader::kLeptonic));
}

//____________________________________________________________________

Bool_t AtlZllAnalysisDemo::ProcessCut() {
    //
    // Event selection
    //

    // Minimum no. of leptons (default = 2)
    if ( fLeptons->GetEntries() < fNLeptons_min ) return kFALSE;

    // Leading lepton Pt
    HepParticle *lep1 = (HepParticle*)fLeptons->At(0);
    HepParticle *lep2 = (HepParticle*)fLeptons->At(1);
    if ( lep1->Pt() < fPt_Lep1_min ) return kFALSE;

    // Charge combination
    switch ( fChgCombination ) {
	case kChgOpposite:
	    if ( lep1->Charge()*lep2->Charge() != -1 ) return kFALSE;
	    break;
	case kChgSame:
	    if ( lep1->Charge()*lep2->Charge() != 1 ) return kFALSE;
	    break;
	case kChgAny:
	    break;
	default:
	    ;
    }
    
    // Missing Et
    fMET = fEvent->GetEnergySum()->MissingEt_Mag();
    if ( fMET < fMET_min || fMET > fMET_max ) return kFALSE;
    
    // Transverse W mass
    fMtW = fEvent->W_Mperp((HepParticle*)fLeptons->At(0));
    if ( fMtW < fMtW_min || fMtW > fMtW_max ) return kFALSE;

    // Compute dilepton invariant mass
    TLorentzVector p_dilep = lep1->P() + lep2->P();
    fDileptonM = p_dilep.M();

    // Fill all pre-tagged histograms
    FillHistogramsCommon(kPreTag);
    // Count no. of pre-tagged events
    fPreTaggedEvents++;
    fPreTaggedEventsW += fEvent->GetPreTagEvtWeight();
    
    // B-tagging requirement
    if ( fBJets->GetEntries() < fNBTags_min
	 || fBJets->GetEntries() > fNBTags_max) return kFALSE;

    // Fill all b-tagged histograms
    FillHistogramsCommon(kBTag);

    // Z mass requirement
    if ( fDileptonM < fMZ_min || fDileptonM > fMZ_max ) return kFALSE;
    
    return kTRUE;
}

//____________________________________________________________________

void AtlZllAnalysisDemo::BookHistograms() {
    //
    // Book histograms
    //    

    // Pre-tag histograms
    gDirectory->mkdir("PreTag");
    gDirectory->cd("PreTag");
    BookHistogramsCommon(kPreTag);
    gDirectory->cd("..");
    
    // B-tag histograms
    gDirectory->mkdir("BTag");
    gDirectory->cd("BTag");
    BookHistogramsCommon(kBTag);
    gDirectory->cd("..");

    // Z peak histograms
    gDirectory->mkdir("Zpeak");
    gDirectory->cd("Zpeak");
    BookHistogramsCommon(kZPeak);
    gDirectory->cd("..");
}

//____________________________________________________________________

void AtlZllAnalysisDemo::BookHistogramsCommon(EHistDir HistDir) {
    //
    // Book common histograms
    //    
    gDirectory->mkdir("Common");
    gDirectory->cd("Common");

    // =======
    // Leptons
    // =======
    gDirectory->mkdir("Leptons");
    gDirectory->cd("Leptons");

    // Leading lepton Pt
    fHist_Lep1_Pt[HistDir] = new TH1D("h_Lep1_Pt", "Leading Lepton Pt",
				      40, 0., 200.);
    fHist_Lep1_Pt[HistDir]->SetXTitle("Leading lepton p_{T} [GeV]");
    fHist_Lep1_Pt[HistDir]->SetYTitle("Events");
    
    // Leading lepton eta
    fHist_Lep1_Eta[HistDir] = new TH1D("h_Lep1_Eta", "Leading Lepton Eta",
				       50, -2.5, 2.5);
    fHist_Lep1_Eta[HistDir]->SetXTitle("Leading lepton #eta");
    fHist_Lep1_Eta[HistDir]->SetYTitle("Events");

    // Leading lepton phi
    fHist_Lep1_Phi[HistDir] = new TH1D("h_Lep1_Phi", "Leading Lepton Azimuth",
				       20, -M_PI, M_PI);
    fHist_Lep1_Phi[HistDir]->SetXTitle("Leading lepton #phi [rad]");
    fHist_Lep1_Phi[HistDir]->SetYTitle("Events");

    // Sub-leading lepton Pt
    fHist_Lep2_Pt[HistDir] = new TH1D("h_Lep2_Pt", "Sub-leading Lepton Pt",
				      40, 0., 100.);
    fHist_Lep2_Pt[HistDir]->SetXTitle("Sub-leading lepton p_{T} [GeV]");
    fHist_Lep2_Pt[HistDir]->SetYTitle("Events");
    
    // Sub-leading lepton eta
    fHist_Lep2_Eta[HistDir] = new TH1D("h_Lep2_Eta", "Sub-leading Lepton Eta",
				       50, -2.5, 2.5);
    fHist_Lep2_Eta[HistDir]->SetXTitle("Sub-leading lepton #eta");
    fHist_Lep2_Eta[HistDir]->SetYTitle("Events");
    
    // Sub-leading lepton phi
    fHist_Lep2_Phi[HistDir] = new TH1D("h_Lep2_Phi", "Sub-leading Lepton Azimuth",
				       20, -M_PI, M_PI);
    fHist_Lep2_Phi[HistDir]->SetXTitle("Sub-leading lepton #phi [rad]");
    fHist_Lep2_Phi[HistDir]->SetYTitle("Events");

    // Lepton charge
    fHist_Lep_Chg[HistDir] = new TH1D("h_Lep_Chg", "Lepton Charge",
				      3, -1.5, 1.5);
    fHist_Lep_Chg[HistDir]->SetXTitle("Lepton charge");
    fHist_Lep_Chg[HistDir]->SetYTitle("Entries");

    // No. of leptons per event
    fHist_Lep_N[HistDir] = new TH1D("h_Lep_N", "No. of Leptons per Event",
				    5, -0.5, 4.5);
    fHist_Lep_N[HistDir]->SetXTitle("Number of leptons / event");
    fHist_Lep_N[HistDir]->SetYTitle("Events");

    // Loose/tightness of identification for electrons and muons
    fHist_Lep_ID[HistDir] = new TH1D("h_Lep_ID", "Lepton Identification Quality",
				     4, 0, 4);
    fHist_Lep_ID[HistDir]->GetXaxis()->SetBinLabel(1, "Loose e");
    fHist_Lep_ID[HistDir]->GetXaxis()->SetBinLabel(2, "Tight e");
    fHist_Lep_ID[HistDir]->GetXaxis()->SetBinLabel(3, "Loose #mu");
    fHist_Lep_ID[HistDir]->GetXaxis()->SetBinLabel(4, "Tight #mu");
    fHist_Lep_ID[HistDir]->SetYTitle("Entries");
    
    gDirectory->cd("..");
    
    // ====
    // Jets
    // ====
    gDirectory->mkdir("Jets");
    gDirectory->cd("Jets");

    // Leading jet Pt
    fHist_Jet1_Pt[HistDir] = new TH1D("h_Jet1_Pt", "Leading Jet Pt",
				       40, 0., 200.);
    fHist_Jet1_Pt[HistDir]->SetXTitle("Leading jet p_{T} [GeV]");
    fHist_Jet1_Pt[HistDir]->SetYTitle("Events");
    
    // Leading jet eta
    fHist_Jet1_Eta[HistDir] = new TH1D("h_Jet1_Eta", "Leading Jet Eta",
				       100, -5., 5.);
    fHist_Jet1_Eta[HistDir]->SetXTitle("Leading jet #eta");
    fHist_Jet1_Eta[HistDir]->SetYTitle("Events");
    
    // Leading jet phi
    fHist_Jet1_Phi[HistDir] = new TH1D("h_Jet1_Phi", "Leading Jet Azimuth",
				       20, -M_PI, M_PI);
    fHist_Jet1_Phi[HistDir]->SetXTitle("Leading jet #phi [rad]");
    fHist_Jet1_Phi[HistDir]->SetYTitle("Events");

    // No. of jets per event
    fHist_Jet_N[HistDir] = new TH1D("h_Jet_N", "", 6, -0.5, 5.5);
    fHist_Jet_N[HistDir]->SetXTitle("Number of jets / event");
    fHist_Jet_N[HistDir]->SetYTitle("Events");
    
    gDirectory->cd("..");
    
    // ==============
    // Missing energy
    // ==============
    gDirectory->mkdir("MET");
    gDirectory->cd("MET");

    // MET magnitude
    fHist_MET_mag[HistDir] = new TH1D("h_MET_mag", "Missing Transverse Momentum",
				      40, 0., 100.);
    fHist_MET_mag[HistDir]->SetXTitle("E_{T}^{miss} [GeV]");
    fHist_MET_mag[HistDir]->SetYTitle("Events");

    // MET azimuth
    fHist_MET_phi[HistDir] = new TH1D("h_MET_phi", "Missing Transverse Momentum",
				      20, -M_PI, M_PI);
    fHist_MET_phi[HistDir]->SetXTitle("E_{T}^{miss} #phi [rad]");
    fHist_MET_phi[HistDir]->SetYTitle("Events");
    
    // Transverse W mass
    fHist_MtW[HistDir] = new TH1D("h_MtW", "Transverse W Boson Mass",
				  40, 0., 200);
    fHist_MtW[HistDir]->SetXTitle("M_{T, W} [GeV]");
    fHist_MtW[HistDir]->SetYTitle("Events");
    
    gDirectory->cd("..");

    // ========
    // DiLepton
    // ========
    gDirectory->mkdir("DiLepton");
    gDirectory->cd("DiLepton");

    // Delta Phi
    fHist_Dilepton_DeltaPhi[HistDir] = new TH1D("h_Dilepton_DeltaPhi",
						"Dilepton Azimuth Difference",
						100, -M_PI, M_PI);
    fHist_Dilepton_DeltaPhi[HistDir]->SetXTitle("#Delta#phi(lep,lep) [rad]"); 
    fHist_Dilepton_DeltaPhi[HistDir]->SetYTitle("Events");

    // Invariant mass
    fHist_Dilepton_Mass[HistDir] = new TH1D("h_Dilepton_Mass",
					    "Dilepton Invariant Mass",
					    200, 0., 200.);
    fHist_Dilepton_Mass[HistDir]->SetXTitle("M(lep,lep) [GeV]");
    fHist_Dilepton_Mass[HistDir]->SetYTitle("Events");
    
    // Dilepton charge
    fHist_Dilepton_Chg[HistDir] = new TH1D("h_Dilepton_Chg", "Dilepton Charge",
					   3, -1.5, 1.5);
    fHist_Dilepton_Chg[HistDir]->SetXTitle("chg(lep1)*chg(lep2)");
    fHist_Dilepton_Chg[HistDir]->SetYTitle("Entries");

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

//____________________________________________________________________

void AtlZllAnalysisDemo::FillHistograms() {
    //
    // Fill histograms
    //
    // This method will be called only for events surviving the
    // ProcessCut() routine
    //

    // Fill Z peak histograms (b-tagged)
    FillHistogramsCommon(kZPeak);
}
    
//____________________________________________________________________

void AtlZllAnalysisDemo::FillHistogramsCommon(EHistDir HistDir) {
    //
    // Fill common histograms
    //
	  
    // Fill every histogram with the proper weight
    // (do not use the b-tagging SFs for the pre-tagged histograms)
    Double_t w = 1.;
    if ( HistDir == kPreTag ) {
	w = fEvent->GetPreTagEvtWeight();
    } else {
	w = fEvent->GetTagEvtWeight();
    }
    
    // =======
    // Leptons
    // =======
    HepParticle *lep1 = (HepParticle*)fLeptons->At(0);
    HepParticle *lep2 = (HepParticle*)fLeptons->At(1);
    fHist_Lep1_Pt[HistDir]->Fill(lep1->Pt(), w);
    fHist_Lep2_Pt[HistDir]->Fill(lep2->Pt(), w);
    fHist_Lep1_Eta[HistDir]->Fill(lep1->Eta(), w);
    fHist_Lep2_Eta[HistDir]->Fill(lep2->Eta(), w);
    fHist_Lep1_Phi[HistDir]->Fill(lep1->Phi(), w);
    fHist_Lep2_Phi[HistDir]->Fill(lep2->Phi(), w);
    fHist_Lep_Chg[HistDir]->Fill(lep1->Charge(), w);
    fHist_Lep_Chg[HistDir]->Fill(lep2->Charge(), w);
    fHist_Lep_N[HistDir]->Fill(fLeptons->GetEntries(), w);

    // Lepton identification quality
    if ( lep1->IsElectron() ) {
	if ( ((AtlElectron*)lep1)->IsLoose() ) {
	    fHist_Lep_ID[HistDir]->Fill(0.5);
	} else if ( ((AtlElectron*)lep1)->IsTight() )
	    fHist_Lep_ID[HistDir]->Fill(1.5);
    } else if ( lep1->IsMuon() ) {
	if ( ((AtlMuon*)lep1)->IsLoose() ) {
	    fHist_Lep_ID[HistDir]->Fill(2.5);
	} else if ( ((AtlMuon*)lep1)->IsTight() )
	    fHist_Lep_ID[HistDir]->Fill(3.5);
    }
    
    // ====
    // Jets
    // ====
    AtlJet *jet1 = (AtlJet*)fJets->At(0);
    fHist_Jet1_Pt[HistDir]->Fill(jet1->Pt(), w);
    fHist_Jet1_Eta[HistDir]->Fill(jet1->Eta(), w);
    fHist_Jet1_Phi[HistDir]->Fill(jet1->Phi(), w);
    fHist_Jet_N[HistDir]->Fill(fJets->GetEntries(), w);

    // ==============
    // Missing energy
    // ==============
    fHist_MET_mag[HistDir]->Fill(fMET, w);
    fHist_MET_phi[HistDir]->Fill(fEvent->GetEnergySum()
				 ->MissingEt_Phi(), w);
    fHist_MtW[HistDir]->Fill(fMtW, w);
    
    // ========
    // DiLepton
    // ========
    fHist_Dilepton_DeltaPhi[HistDir]->Fill(lep1->DeltaPhi(lep2), w);
    fHist_Dilepton_Mass[HistDir]->Fill(fDileptonM, w);
    fHist_Dilepton_Chg[HistDir]->Fill(lep1->Charge()*lep2->Charge(), w);
}

 AtlZllAnalysisDemo.cxx:1
 AtlZllAnalysisDemo.cxx:2
 AtlZllAnalysisDemo.cxx:3
 AtlZllAnalysisDemo.cxx:4
 AtlZllAnalysisDemo.cxx:5
 AtlZllAnalysisDemo.cxx:6
 AtlZllAnalysisDemo.cxx:7
 AtlZllAnalysisDemo.cxx:8
 AtlZllAnalysisDemo.cxx:9
 AtlZllAnalysisDemo.cxx:10
 AtlZllAnalysisDemo.cxx:11
 AtlZllAnalysisDemo.cxx:12
 AtlZllAnalysisDemo.cxx:13
 AtlZllAnalysisDemo.cxx:14
 AtlZllAnalysisDemo.cxx:15
 AtlZllAnalysisDemo.cxx:16
 AtlZllAnalysisDemo.cxx:17
 AtlZllAnalysisDemo.cxx:18
 AtlZllAnalysisDemo.cxx:19
 AtlZllAnalysisDemo.cxx:20
 AtlZllAnalysisDemo.cxx:21
 AtlZllAnalysisDemo.cxx:22
 AtlZllAnalysisDemo.cxx:23
 AtlZllAnalysisDemo.cxx:24
 AtlZllAnalysisDemo.cxx:25
 AtlZllAnalysisDemo.cxx:26
 AtlZllAnalysisDemo.cxx:27
 AtlZllAnalysisDemo.cxx:28
 AtlZllAnalysisDemo.cxx:29
 AtlZllAnalysisDemo.cxx:30
 AtlZllAnalysisDemo.cxx:31
 AtlZllAnalysisDemo.cxx:32
 AtlZllAnalysisDemo.cxx:33
 AtlZllAnalysisDemo.cxx:34
 AtlZllAnalysisDemo.cxx:35
 AtlZllAnalysisDemo.cxx:36
 AtlZllAnalysisDemo.cxx:37
 AtlZllAnalysisDemo.cxx:38
 AtlZllAnalysisDemo.cxx:39
 AtlZllAnalysisDemo.cxx:40
 AtlZllAnalysisDemo.cxx:41
 AtlZllAnalysisDemo.cxx:42
 AtlZllAnalysisDemo.cxx:43
 AtlZllAnalysisDemo.cxx:44
 AtlZllAnalysisDemo.cxx:45
 AtlZllAnalysisDemo.cxx:46
 AtlZllAnalysisDemo.cxx:47
 AtlZllAnalysisDemo.cxx:48
 AtlZllAnalysisDemo.cxx:49
 AtlZllAnalysisDemo.cxx:50
 AtlZllAnalysisDemo.cxx:51
 AtlZllAnalysisDemo.cxx:52
 AtlZllAnalysisDemo.cxx:53
 AtlZllAnalysisDemo.cxx:54
 AtlZllAnalysisDemo.cxx:55
 AtlZllAnalysisDemo.cxx:56
 AtlZllAnalysisDemo.cxx:57
 AtlZllAnalysisDemo.cxx:58
 AtlZllAnalysisDemo.cxx:59
 AtlZllAnalysisDemo.cxx:60
 AtlZllAnalysisDemo.cxx:61
 AtlZllAnalysisDemo.cxx:62
 AtlZllAnalysisDemo.cxx:63
 AtlZllAnalysisDemo.cxx:64
 AtlZllAnalysisDemo.cxx:65
 AtlZllAnalysisDemo.cxx:66
 AtlZllAnalysisDemo.cxx:67
 AtlZllAnalysisDemo.cxx:68
 AtlZllAnalysisDemo.cxx:69
 AtlZllAnalysisDemo.cxx:70
 AtlZllAnalysisDemo.cxx:71
 AtlZllAnalysisDemo.cxx:72
 AtlZllAnalysisDemo.cxx:73
 AtlZllAnalysisDemo.cxx:74
 AtlZllAnalysisDemo.cxx:75
 AtlZllAnalysisDemo.cxx:76
 AtlZllAnalysisDemo.cxx:77
 AtlZllAnalysisDemo.cxx:78
 AtlZllAnalysisDemo.cxx:79
 AtlZllAnalysisDemo.cxx:80
 AtlZllAnalysisDemo.cxx:81
 AtlZllAnalysisDemo.cxx:82
 AtlZllAnalysisDemo.cxx:83
 AtlZllAnalysisDemo.cxx:84
 AtlZllAnalysisDemo.cxx:85
 AtlZllAnalysisDemo.cxx:86
 AtlZllAnalysisDemo.cxx:87
 AtlZllAnalysisDemo.cxx:88
 AtlZllAnalysisDemo.cxx:89
 AtlZllAnalysisDemo.cxx:90
 AtlZllAnalysisDemo.cxx:91
 AtlZllAnalysisDemo.cxx:92
 AtlZllAnalysisDemo.cxx:93
 AtlZllAnalysisDemo.cxx:94
 AtlZllAnalysisDemo.cxx:95
 AtlZllAnalysisDemo.cxx:96
 AtlZllAnalysisDemo.cxx:97
 AtlZllAnalysisDemo.cxx:98
 AtlZllAnalysisDemo.cxx:99
 AtlZllAnalysisDemo.cxx:100
 AtlZllAnalysisDemo.cxx:101
 AtlZllAnalysisDemo.cxx:102
 AtlZllAnalysisDemo.cxx:103
 AtlZllAnalysisDemo.cxx:104
 AtlZllAnalysisDemo.cxx:105
 AtlZllAnalysisDemo.cxx:106
 AtlZllAnalysisDemo.cxx:107
 AtlZllAnalysisDemo.cxx:108
 AtlZllAnalysisDemo.cxx:109
 AtlZllAnalysisDemo.cxx:110
 AtlZllAnalysisDemo.cxx:111
 AtlZllAnalysisDemo.cxx:112
 AtlZllAnalysisDemo.cxx:113
 AtlZllAnalysisDemo.cxx:114
 AtlZllAnalysisDemo.cxx:115
 AtlZllAnalysisDemo.cxx:116
 AtlZllAnalysisDemo.cxx:117
 AtlZllAnalysisDemo.cxx:118
 AtlZllAnalysisDemo.cxx:119
 AtlZllAnalysisDemo.cxx:120
 AtlZllAnalysisDemo.cxx:121
 AtlZllAnalysisDemo.cxx:122
 AtlZllAnalysisDemo.cxx:123
 AtlZllAnalysisDemo.cxx:124
 AtlZllAnalysisDemo.cxx:125
 AtlZllAnalysisDemo.cxx:126
 AtlZllAnalysisDemo.cxx:127
 AtlZllAnalysisDemo.cxx:128
 AtlZllAnalysisDemo.cxx:129
 AtlZllAnalysisDemo.cxx:130
 AtlZllAnalysisDemo.cxx:131
 AtlZllAnalysisDemo.cxx:132
 AtlZllAnalysisDemo.cxx:133
 AtlZllAnalysisDemo.cxx:134
 AtlZllAnalysisDemo.cxx:135
 AtlZllAnalysisDemo.cxx:136
 AtlZllAnalysisDemo.cxx:137
 AtlZllAnalysisDemo.cxx:138
 AtlZllAnalysisDemo.cxx:139
 AtlZllAnalysisDemo.cxx:140
 AtlZllAnalysisDemo.cxx:141
 AtlZllAnalysisDemo.cxx:142
 AtlZllAnalysisDemo.cxx:143
 AtlZllAnalysisDemo.cxx:144
 AtlZllAnalysisDemo.cxx:145
 AtlZllAnalysisDemo.cxx:146
 AtlZllAnalysisDemo.cxx:147
 AtlZllAnalysisDemo.cxx:148
 AtlZllAnalysisDemo.cxx:149
 AtlZllAnalysisDemo.cxx:150
 AtlZllAnalysisDemo.cxx:151
 AtlZllAnalysisDemo.cxx:152
 AtlZllAnalysisDemo.cxx:153
 AtlZllAnalysisDemo.cxx:154
 AtlZllAnalysisDemo.cxx:155
 AtlZllAnalysisDemo.cxx:156
 AtlZllAnalysisDemo.cxx:157
 AtlZllAnalysisDemo.cxx:158
 AtlZllAnalysisDemo.cxx:159
 AtlZllAnalysisDemo.cxx:160
 AtlZllAnalysisDemo.cxx:161
 AtlZllAnalysisDemo.cxx:162
 AtlZllAnalysisDemo.cxx:163
 AtlZllAnalysisDemo.cxx:164
 AtlZllAnalysisDemo.cxx:165
 AtlZllAnalysisDemo.cxx:166
 AtlZllAnalysisDemo.cxx:167
 AtlZllAnalysisDemo.cxx:168
 AtlZllAnalysisDemo.cxx:169
 AtlZllAnalysisDemo.cxx:170
 AtlZllAnalysisDemo.cxx:171
 AtlZllAnalysisDemo.cxx:172
 AtlZllAnalysisDemo.cxx:173
 AtlZllAnalysisDemo.cxx:174
 AtlZllAnalysisDemo.cxx:175
 AtlZllAnalysisDemo.cxx:176
 AtlZllAnalysisDemo.cxx:177
 AtlZllAnalysisDemo.cxx:178
 AtlZllAnalysisDemo.cxx:179
 AtlZllAnalysisDemo.cxx:180
 AtlZllAnalysisDemo.cxx:181
 AtlZllAnalysisDemo.cxx:182
 AtlZllAnalysisDemo.cxx:183
 AtlZllAnalysisDemo.cxx:184
 AtlZllAnalysisDemo.cxx:185
 AtlZllAnalysisDemo.cxx:186
 AtlZllAnalysisDemo.cxx:187
 AtlZllAnalysisDemo.cxx:188
 AtlZllAnalysisDemo.cxx:189
 AtlZllAnalysisDemo.cxx:190
 AtlZllAnalysisDemo.cxx:191
 AtlZllAnalysisDemo.cxx:192
 AtlZllAnalysisDemo.cxx:193
 AtlZllAnalysisDemo.cxx:194
 AtlZllAnalysisDemo.cxx:195
 AtlZllAnalysisDemo.cxx:196
 AtlZllAnalysisDemo.cxx:197
 AtlZllAnalysisDemo.cxx:198
 AtlZllAnalysisDemo.cxx:199
 AtlZllAnalysisDemo.cxx:200
 AtlZllAnalysisDemo.cxx:201
 AtlZllAnalysisDemo.cxx:202
 AtlZllAnalysisDemo.cxx:203
 AtlZllAnalysisDemo.cxx:204
 AtlZllAnalysisDemo.cxx:205
 AtlZllAnalysisDemo.cxx:206
 AtlZllAnalysisDemo.cxx:207
 AtlZllAnalysisDemo.cxx:208
 AtlZllAnalysisDemo.cxx:209
 AtlZllAnalysisDemo.cxx:210
 AtlZllAnalysisDemo.cxx:211
 AtlZllAnalysisDemo.cxx:212
 AtlZllAnalysisDemo.cxx:213
 AtlZllAnalysisDemo.cxx:214
 AtlZllAnalysisDemo.cxx:215
 AtlZllAnalysisDemo.cxx:216
 AtlZllAnalysisDemo.cxx:217
 AtlZllAnalysisDemo.cxx:218
 AtlZllAnalysisDemo.cxx:219
 AtlZllAnalysisDemo.cxx:220
 AtlZllAnalysisDemo.cxx:221
 AtlZllAnalysisDemo.cxx:222
 AtlZllAnalysisDemo.cxx:223
 AtlZllAnalysisDemo.cxx:224
 AtlZllAnalysisDemo.cxx:225
 AtlZllAnalysisDemo.cxx:226
 AtlZllAnalysisDemo.cxx:227
 AtlZllAnalysisDemo.cxx:228
 AtlZllAnalysisDemo.cxx:229
 AtlZllAnalysisDemo.cxx:230
 AtlZllAnalysisDemo.cxx:231
 AtlZllAnalysisDemo.cxx:232
 AtlZllAnalysisDemo.cxx:233
 AtlZllAnalysisDemo.cxx:234
 AtlZllAnalysisDemo.cxx:235
 AtlZllAnalysisDemo.cxx:236
 AtlZllAnalysisDemo.cxx:237
 AtlZllAnalysisDemo.cxx:238
 AtlZllAnalysisDemo.cxx:239
 AtlZllAnalysisDemo.cxx:240
 AtlZllAnalysisDemo.cxx:241
 AtlZllAnalysisDemo.cxx:242
 AtlZllAnalysisDemo.cxx:243
 AtlZllAnalysisDemo.cxx:244
 AtlZllAnalysisDemo.cxx:245
 AtlZllAnalysisDemo.cxx:246
 AtlZllAnalysisDemo.cxx:247
 AtlZllAnalysisDemo.cxx:248
 AtlZllAnalysisDemo.cxx:249
 AtlZllAnalysisDemo.cxx:250
 AtlZllAnalysisDemo.cxx:251
 AtlZllAnalysisDemo.cxx:252
 AtlZllAnalysisDemo.cxx:253
 AtlZllAnalysisDemo.cxx:254
 AtlZllAnalysisDemo.cxx:255
 AtlZllAnalysisDemo.cxx:256
 AtlZllAnalysisDemo.cxx:257
 AtlZllAnalysisDemo.cxx:258
 AtlZllAnalysisDemo.cxx:259
 AtlZllAnalysisDemo.cxx:260
 AtlZllAnalysisDemo.cxx:261
 AtlZllAnalysisDemo.cxx:262
 AtlZllAnalysisDemo.cxx:263
 AtlZllAnalysisDemo.cxx:264
 AtlZllAnalysisDemo.cxx:265
 AtlZllAnalysisDemo.cxx:266
 AtlZllAnalysisDemo.cxx:267
 AtlZllAnalysisDemo.cxx:268
 AtlZllAnalysisDemo.cxx:269
 AtlZllAnalysisDemo.cxx:270
 AtlZllAnalysisDemo.cxx:271
 AtlZllAnalysisDemo.cxx:272
 AtlZllAnalysisDemo.cxx:273
 AtlZllAnalysisDemo.cxx:274
 AtlZllAnalysisDemo.cxx:275
 AtlZllAnalysisDemo.cxx:276
 AtlZllAnalysisDemo.cxx:277
 AtlZllAnalysisDemo.cxx:278
 AtlZllAnalysisDemo.cxx:279
 AtlZllAnalysisDemo.cxx:280
 AtlZllAnalysisDemo.cxx:281
 AtlZllAnalysisDemo.cxx:282
 AtlZllAnalysisDemo.cxx:283
 AtlZllAnalysisDemo.cxx:284
 AtlZllAnalysisDemo.cxx:285
 AtlZllAnalysisDemo.cxx:286
 AtlZllAnalysisDemo.cxx:287
 AtlZllAnalysisDemo.cxx:288
 AtlZllAnalysisDemo.cxx:289
 AtlZllAnalysisDemo.cxx:290
 AtlZllAnalysisDemo.cxx:291
 AtlZllAnalysisDemo.cxx:292
 AtlZllAnalysisDemo.cxx:293
 AtlZllAnalysisDemo.cxx:294
 AtlZllAnalysisDemo.cxx:295
 AtlZllAnalysisDemo.cxx:296
 AtlZllAnalysisDemo.cxx:297
 AtlZllAnalysisDemo.cxx:298
 AtlZllAnalysisDemo.cxx:299
 AtlZllAnalysisDemo.cxx:300
 AtlZllAnalysisDemo.cxx:301
 AtlZllAnalysisDemo.cxx:302
 AtlZllAnalysisDemo.cxx:303
 AtlZllAnalysisDemo.cxx:304
 AtlZllAnalysisDemo.cxx:305
 AtlZllAnalysisDemo.cxx:306
 AtlZllAnalysisDemo.cxx:307
 AtlZllAnalysisDemo.cxx:308
 AtlZllAnalysisDemo.cxx:309
 AtlZllAnalysisDemo.cxx:310
 AtlZllAnalysisDemo.cxx:311
 AtlZllAnalysisDemo.cxx:312
 AtlZllAnalysisDemo.cxx:313
 AtlZllAnalysisDemo.cxx:314
 AtlZllAnalysisDemo.cxx:315
 AtlZllAnalysisDemo.cxx:316
 AtlZllAnalysisDemo.cxx:317
 AtlZllAnalysisDemo.cxx:318
 AtlZllAnalysisDemo.cxx:319
 AtlZllAnalysisDemo.cxx:320
 AtlZllAnalysisDemo.cxx:321
 AtlZllAnalysisDemo.cxx:322
 AtlZllAnalysisDemo.cxx:323
 AtlZllAnalysisDemo.cxx:324
 AtlZllAnalysisDemo.cxx:325
 AtlZllAnalysisDemo.cxx:326
 AtlZllAnalysisDemo.cxx:327
 AtlZllAnalysisDemo.cxx:328
 AtlZllAnalysisDemo.cxx:329
 AtlZllAnalysisDemo.cxx:330
 AtlZllAnalysisDemo.cxx:331
 AtlZllAnalysisDemo.cxx:332
 AtlZllAnalysisDemo.cxx:333
 AtlZllAnalysisDemo.cxx:334
 AtlZllAnalysisDemo.cxx:335
 AtlZllAnalysisDemo.cxx:336
 AtlZllAnalysisDemo.cxx:337
 AtlZllAnalysisDemo.cxx:338
 AtlZllAnalysisDemo.cxx:339
 AtlZllAnalysisDemo.cxx:340
 AtlZllAnalysisDemo.cxx:341
 AtlZllAnalysisDemo.cxx:342
 AtlZllAnalysisDemo.cxx:343
 AtlZllAnalysisDemo.cxx:344
 AtlZllAnalysisDemo.cxx:345
 AtlZllAnalysisDemo.cxx:346
 AtlZllAnalysisDemo.cxx:347
 AtlZllAnalysisDemo.cxx:348
 AtlZllAnalysisDemo.cxx:349
 AtlZllAnalysisDemo.cxx:350
 AtlZllAnalysisDemo.cxx:351
 AtlZllAnalysisDemo.cxx:352
 AtlZllAnalysisDemo.cxx:353
 AtlZllAnalysisDemo.cxx:354
 AtlZllAnalysisDemo.cxx:355
 AtlZllAnalysisDemo.cxx:356
 AtlZllAnalysisDemo.cxx:357
 AtlZllAnalysisDemo.cxx:358
 AtlZllAnalysisDemo.cxx:359
 AtlZllAnalysisDemo.cxx:360
 AtlZllAnalysisDemo.cxx:361
 AtlZllAnalysisDemo.cxx:362
 AtlZllAnalysisDemo.cxx:363
 AtlZllAnalysisDemo.cxx:364
 AtlZllAnalysisDemo.cxx:365
 AtlZllAnalysisDemo.cxx:366
 AtlZllAnalysisDemo.cxx:367
 AtlZllAnalysisDemo.cxx:368
 AtlZllAnalysisDemo.cxx:369
 AtlZllAnalysisDemo.cxx:370
 AtlZllAnalysisDemo.cxx:371
 AtlZllAnalysisDemo.cxx:372
 AtlZllAnalysisDemo.cxx:373
 AtlZllAnalysisDemo.cxx:374
 AtlZllAnalysisDemo.cxx:375
 AtlZllAnalysisDemo.cxx:376
 AtlZllAnalysisDemo.cxx:377
 AtlZllAnalysisDemo.cxx:378
 AtlZllAnalysisDemo.cxx:379
 AtlZllAnalysisDemo.cxx:380
 AtlZllAnalysisDemo.cxx:381
 AtlZllAnalysisDemo.cxx:382
 AtlZllAnalysisDemo.cxx:383
 AtlZllAnalysisDemo.cxx:384
 AtlZllAnalysisDemo.cxx:385
 AtlZllAnalysisDemo.cxx:386
 AtlZllAnalysisDemo.cxx:387
 AtlZllAnalysisDemo.cxx:388
 AtlZllAnalysisDemo.cxx:389
 AtlZllAnalysisDemo.cxx:390
 AtlZllAnalysisDemo.cxx:391
 AtlZllAnalysisDemo.cxx:392
 AtlZllAnalysisDemo.cxx:393
 AtlZllAnalysisDemo.cxx:394
 AtlZllAnalysisDemo.cxx:395
 AtlZllAnalysisDemo.cxx:396
 AtlZllAnalysisDemo.cxx:397
 AtlZllAnalysisDemo.cxx:398
 AtlZllAnalysisDemo.cxx:399
 AtlZllAnalysisDemo.cxx:400
 AtlZllAnalysisDemo.cxx:401
 AtlZllAnalysisDemo.cxx:402
 AtlZllAnalysisDemo.cxx:403
 AtlZllAnalysisDemo.cxx:404
 AtlZllAnalysisDemo.cxx:405
 AtlZllAnalysisDemo.cxx:406
 AtlZllAnalysisDemo.cxx:407
 AtlZllAnalysisDemo.cxx:408
 AtlZllAnalysisDemo.cxx:409
 AtlZllAnalysisDemo.cxx:410
 AtlZllAnalysisDemo.cxx:411
 AtlZllAnalysisDemo.cxx:412
 AtlZllAnalysisDemo.cxx:413
 AtlZllAnalysisDemo.cxx:414
 AtlZllAnalysisDemo.cxx:415
 AtlZllAnalysisDemo.cxx:416
 AtlZllAnalysisDemo.cxx:417
 AtlZllAnalysisDemo.cxx:418
 AtlZllAnalysisDemo.cxx:419
 AtlZllAnalysisDemo.cxx:420
 AtlZllAnalysisDemo.cxx:421
 AtlZllAnalysisDemo.cxx:422
 AtlZllAnalysisDemo.cxx:423
 AtlZllAnalysisDemo.cxx:424
 AtlZllAnalysisDemo.cxx:425
 AtlZllAnalysisDemo.cxx:426
 AtlZllAnalysisDemo.cxx:427
 AtlZllAnalysisDemo.cxx:428
 AtlZllAnalysisDemo.cxx:429
 AtlZllAnalysisDemo.cxx:430
 AtlZllAnalysisDemo.cxx:431
 AtlZllAnalysisDemo.cxx:432
 AtlZllAnalysisDemo.cxx:433
 AtlZllAnalysisDemo.cxx:434
 AtlZllAnalysisDemo.cxx:435
 AtlZllAnalysisDemo.cxx:436
 AtlZllAnalysisDemo.cxx:437
 AtlZllAnalysisDemo.cxx:438
 AtlZllAnalysisDemo.cxx:439
 AtlZllAnalysisDemo.cxx:440
 AtlZllAnalysisDemo.cxx:441
 AtlZllAnalysisDemo.cxx:442
 AtlZllAnalysisDemo.cxx:443
 AtlZllAnalysisDemo.cxx:444
 AtlZllAnalysisDemo.cxx:445
 AtlZllAnalysisDemo.cxx:446
 AtlZllAnalysisDemo.cxx:447
 AtlZllAnalysisDemo.cxx:448
 AtlZllAnalysisDemo.cxx:449
 AtlZllAnalysisDemo.cxx:450
 AtlZllAnalysisDemo.cxx:451
 AtlZllAnalysisDemo.cxx:452
 AtlZllAnalysisDemo.cxx:453
 AtlZllAnalysisDemo.cxx:454
 AtlZllAnalysisDemo.cxx:455
 AtlZllAnalysisDemo.cxx:456
 AtlZllAnalysisDemo.cxx:457
 AtlZllAnalysisDemo.cxx:458
 AtlZllAnalysisDemo.cxx:459
 AtlZllAnalysisDemo.cxx:460
 AtlZllAnalysisDemo.cxx:461
 AtlZllAnalysisDemo.cxx:462
 AtlZllAnalysisDemo.cxx:463
 AtlZllAnalysisDemo.cxx:464
 AtlZllAnalysisDemo.cxx:465
 AtlZllAnalysisDemo.cxx:466
 AtlZllAnalysisDemo.cxx:467
 AtlZllAnalysisDemo.cxx:468
 AtlZllAnalysisDemo.cxx:469
 AtlZllAnalysisDemo.cxx:470
 AtlZllAnalysisDemo.cxx:471
 AtlZllAnalysisDemo.cxx:472
 AtlZllAnalysisDemo.cxx:473
 AtlZllAnalysisDemo.cxx:474
 AtlZllAnalysisDemo.cxx:475
 AtlZllAnalysisDemo.cxx:476
 AtlZllAnalysisDemo.cxx:477
 AtlZllAnalysisDemo.cxx:478
 AtlZllAnalysisDemo.cxx:479
 AtlZllAnalysisDemo.cxx:480
 AtlZllAnalysisDemo.cxx:481
 AtlZllAnalysisDemo.cxx:482
 AtlZllAnalysisDemo.cxx:483
 AtlZllAnalysisDemo.cxx:484
 AtlZllAnalysisDemo.cxx:485
 AtlZllAnalysisDemo.cxx:486
 AtlZllAnalysisDemo.cxx:487
 AtlZllAnalysisDemo.cxx:488
 AtlZllAnalysisDemo.cxx:489
 AtlZllAnalysisDemo.cxx:490
 AtlZllAnalysisDemo.cxx:491
 AtlZllAnalysisDemo.cxx:492
 AtlZllAnalysisDemo.cxx:493
 AtlZllAnalysisDemo.cxx:494
 AtlZllAnalysisDemo.cxx:495
 AtlZllAnalysisDemo.cxx:496
 AtlZllAnalysisDemo.cxx:497
 AtlZllAnalysisDemo.cxx:498
 AtlZllAnalysisDemo.cxx:499
 AtlZllAnalysisDemo.cxx:500
 AtlZllAnalysisDemo.cxx:501
 AtlZllAnalysisDemo.cxx:502
 AtlZllAnalysisDemo.cxx:503
 AtlZllAnalysisDemo.cxx:504
 AtlZllAnalysisDemo.cxx:505
 AtlZllAnalysisDemo.cxx:506
 AtlZllAnalysisDemo.cxx:507
 AtlZllAnalysisDemo.cxx:508
 AtlZllAnalysisDemo.cxx:509
 AtlZllAnalysisDemo.cxx:510
 AtlZllAnalysisDemo.cxx:511
 AtlZllAnalysisDemo.cxx:512
 AtlZllAnalysisDemo.cxx:513
 AtlZllAnalysisDemo.cxx:514
 AtlZllAnalysisDemo.cxx:515
 AtlZllAnalysisDemo.cxx:516
 AtlZllAnalysisDemo.cxx:517
 AtlZllAnalysisDemo.cxx:518
 AtlZllAnalysisDemo.cxx:519
 AtlZllAnalysisDemo.cxx:520
 AtlZllAnalysisDemo.cxx:521
 AtlZllAnalysisDemo.cxx:522
 AtlZllAnalysisDemo.cxx:523
 AtlZllAnalysisDemo.cxx:524
 AtlZllAnalysisDemo.cxx:525
 AtlZllAnalysisDemo.cxx:526
 AtlZllAnalysisDemo.cxx:527
 AtlZllAnalysisDemo.cxx:528
 AtlZllAnalysisDemo.cxx:529
 AtlZllAnalysisDemo.cxx:530
 AtlZllAnalysisDemo.cxx:531
 AtlZllAnalysisDemo.cxx:532
 AtlZllAnalysisDemo.cxx:533
 AtlZllAnalysisDemo.cxx:534
 AtlZllAnalysisDemo.cxx:535
 AtlZllAnalysisDemo.cxx:536
 AtlZllAnalysisDemo.cxx:537
 AtlZllAnalysisDemo.cxx:538
 AtlZllAnalysisDemo.cxx:539
 AtlZllAnalysisDemo.cxx:540