//  
// Author: Sebastian Mergelmeyer <mailto: mergelm@physik.hu-berlin.de>
// Update: $Id: AtlZllAnalysisDemo.h,v 1.6 2015/12/02 22:14:46 kind Exp $
// Copyright: 2015 (C) Sebastian Mergelmeyer
//
#ifndef SINGLETOP_AtlZllAnalysisDemo
#define SINGLETOP_AtlZllAnalysisDemo
#ifndef ATLAS_AtlSelector
#include <AtlSelector.h>
#endif
#ifndef ATLAS_AtlObjectsToolD3PDSgTop
#include <AtlObjectsToolD3PDSgTop.h>
#endif
#ifndef ATLAS_AtlObjRecoScaleFactorTool
#include <AtlObjRecoScaleFactorTool.h>
#endif

class AtlZllAnalysisDemo : public AtlSelector {

  public:
    enum EChgComb { kChgOpposite, kChgSame, kChgAny };
    
  private:
    enum EHistDir { kPreTag, kBTag, kZPeak, kNDirs };
    
  public:
    EChgComb fChgCombination; // Charge combination of thw first two leading leptons
    Int_t    fNLeptons_min;   // Minimum number of leptons per event
    Int_t    fNBTags_min;     // Minimum number of b-jets
    Int_t    fNBTags_max;     // Maximum number of b-jets
    Double_t fPt_Lep1_min;    // Minimum Pt of leading lepton
    Double_t fMZ_min;         // Minimum Z mass
    Double_t fMZ_max;         // Maximum Z mass
    Double_t fMET_min;        // Minimum missing energy
    Double_t fMET_max;        // Maximum missing energy
    Double_t fMtW_min;        // Minimum transverse W mass
    Double_t fMtW_max;        // Maximum transverse W mass
    
  private:
    TList    *fLeptons;   // List of selected leptons
    TList    *fElectrons; // List of selected electron objects
    TList    *fMuons;     // List of selected muon objects
    TList    *fJets;      // List of selected jets
    TList    *fBJets;     // List of selected b-tagged jets
    Double_t  fMET;       // Missing transverse momentum
    Double_t  fMtW;       // Transverse W boson mass
    Double_t  fDileptonM; // Invariant mass of the leading and sub-leading lepton

    // Tools
    AtlObjectsToolD3PDSgTop   *fObjTool;
    AtlObjRecoScaleFactorTool *fSFTool;

    // ==========
    // Histograms
    // ==========

    // Leptons
    TH1D *fHist_Lep1_Pt[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep1_Eta[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep1_Phi[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep2_Pt[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep2_Eta[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep2_Phi[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep_Chg[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep_N[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Lep_ID[AtlZllAnalysisDemo::kNDirs];

    // Jets
    TH1D *fHist_Jet1_Pt[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Jet1_Eta[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Jet1_Phi[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Jet_N[AtlZllAnalysisDemo::kNDirs];
    
    // MET
    TH1D *fHist_MET_mag[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_MET_phi[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_MtW[AtlZllAnalysisDemo::kNDirs];

    // DiLepton
    TH1D *fHist_Dilepton_DeltaPhi[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Dilepton_Mass[AtlZllAnalysisDemo::kNDirs];
    TH1D *fHist_Dilepton_Chg[AtlZllAnalysisDemo::kNDirs];

  public:
    AtlZllAnalysisDemo(char const* OutputFileName);
    virtual ~AtlZllAnalysisDemo();
    
    virtual void Begin(TTree * tree);
    virtual void SlaveBegin(TTree * tree);
    virtual void BookHistograms();
    virtual void SetCutDefaults();
    virtual void SetBranchStatus();
    virtual void Clear(Option_t * option = "");
    virtual Bool_t ProcessPreCut();
    virtual Bool_t ProcessCut();
    virtual void FillHistograms();
    virtual void Terminate();
    virtual void Print(Option_t * option) const;

  protected:
    virtual void InitEvent();
    virtual void BookHistogramsCommon(EHistDir HistDir);
    virtual void FillHistogramsCommon(EHistDir HistDir);
    
    ClassDef(AtlZllAnalysisDemo,0) // Z->ll 13 TeV demo analysis
};
#endif
 AtlZllAnalysisDemo.h:1
 AtlZllAnalysisDemo.h:2
 AtlZllAnalysisDemo.h:3
 AtlZllAnalysisDemo.h:4
 AtlZllAnalysisDemo.h:5
 AtlZllAnalysisDemo.h:6
 AtlZllAnalysisDemo.h:7
 AtlZllAnalysisDemo.h:8
 AtlZllAnalysisDemo.h:9
 AtlZllAnalysisDemo.h:10
 AtlZllAnalysisDemo.h:11
 AtlZllAnalysisDemo.h:12
 AtlZllAnalysisDemo.h:13
 AtlZllAnalysisDemo.h:14
 AtlZllAnalysisDemo.h:15
 AtlZllAnalysisDemo.h:16
 AtlZllAnalysisDemo.h:17
 AtlZllAnalysisDemo.h:18
 AtlZllAnalysisDemo.h:19
 AtlZllAnalysisDemo.h:20
 AtlZllAnalysisDemo.h:21
 AtlZllAnalysisDemo.h:22
 AtlZllAnalysisDemo.h:23
 AtlZllAnalysisDemo.h:24
 AtlZllAnalysisDemo.h:25
 AtlZllAnalysisDemo.h:26
 AtlZllAnalysisDemo.h:27
 AtlZllAnalysisDemo.h:28
 AtlZllAnalysisDemo.h:29
 AtlZllAnalysisDemo.h:30
 AtlZllAnalysisDemo.h:31
 AtlZllAnalysisDemo.h:32
 AtlZllAnalysisDemo.h:33
 AtlZllAnalysisDemo.h:34
 AtlZllAnalysisDemo.h:35
 AtlZllAnalysisDemo.h:36
 AtlZllAnalysisDemo.h:37
 AtlZllAnalysisDemo.h:38
 AtlZllAnalysisDemo.h:39
 AtlZllAnalysisDemo.h:40
 AtlZllAnalysisDemo.h:41
 AtlZllAnalysisDemo.h:42
 AtlZllAnalysisDemo.h:43
 AtlZllAnalysisDemo.h:44
 AtlZllAnalysisDemo.h:45
 AtlZllAnalysisDemo.h:46
 AtlZllAnalysisDemo.h:47
 AtlZllAnalysisDemo.h:48
 AtlZllAnalysisDemo.h:49
 AtlZllAnalysisDemo.h:50
 AtlZllAnalysisDemo.h:51
 AtlZllAnalysisDemo.h:52
 AtlZllAnalysisDemo.h:53
 AtlZllAnalysisDemo.h:54
 AtlZllAnalysisDemo.h:55
 AtlZllAnalysisDemo.h:56
 AtlZllAnalysisDemo.h:57
 AtlZllAnalysisDemo.h:58
 AtlZllAnalysisDemo.h:59
 AtlZllAnalysisDemo.h:60
 AtlZllAnalysisDemo.h:61
 AtlZllAnalysisDemo.h:62
 AtlZllAnalysisDemo.h:63
 AtlZllAnalysisDemo.h:64
 AtlZllAnalysisDemo.h:65
 AtlZllAnalysisDemo.h:66
 AtlZllAnalysisDemo.h:67
 AtlZllAnalysisDemo.h:68
 AtlZllAnalysisDemo.h:69
 AtlZllAnalysisDemo.h:70
 AtlZllAnalysisDemo.h:71
 AtlZllAnalysisDemo.h:72
 AtlZllAnalysisDemo.h:73
 AtlZllAnalysisDemo.h:74
 AtlZllAnalysisDemo.h:75
 AtlZllAnalysisDemo.h:76
 AtlZllAnalysisDemo.h:77
 AtlZllAnalysisDemo.h:78
 AtlZllAnalysisDemo.h:79
 AtlZllAnalysisDemo.h:80
 AtlZllAnalysisDemo.h:81
 AtlZllAnalysisDemo.h:82
 AtlZllAnalysisDemo.h:83
 AtlZllAnalysisDemo.h:84
 AtlZllAnalysisDemo.h:85
 AtlZllAnalysisDemo.h:86
 AtlZllAnalysisDemo.h:87
 AtlZllAnalysisDemo.h:88
 AtlZllAnalysisDemo.h:89
 AtlZllAnalysisDemo.h:90
 AtlZllAnalysisDemo.h:91
 AtlZllAnalysisDemo.h:92
 AtlZllAnalysisDemo.h:93
 AtlZllAnalysisDemo.h:94
 AtlZllAnalysisDemo.h:95
 AtlZllAnalysisDemo.h:96
 AtlZllAnalysisDemo.h:97
 AtlZllAnalysisDemo.h:98
 AtlZllAnalysisDemo.h:99
 AtlZllAnalysisDemo.h:100
 AtlZllAnalysisDemo.h:101
 AtlZllAnalysisDemo.h:102
 AtlZllAnalysisDemo.h:103
 AtlZllAnalysisDemo.h:104
 AtlZllAnalysisDemo.h:105
 AtlZllAnalysisDemo.h:106
 AtlZllAnalysisDemo.h:107