//
//    Author: Soeren Stamm <mailto: stamm@physik.hu-berlin.de>
//    Update: $Id: AtlQCDMMTool.h,v 1.12 2017/07/28 17:19:17 kaphle Exp $
//    Copyright: 2013 (C) Soeren Stamm
//

#ifndef ATLAS_AtlQCDMMTool
#define ATLAS_AtlQCDMMTool
#ifndef ATLAS_AtlAnalysisTool
#include <AtlAnalysisTool.h>
#endif
#ifndef ROOT_AtlSelector
#include <AtlSelector.h>
#endif
#ifndef ATLAS_AtlObjectsToolD3PDSgTop
#include <AtlObjectsToolD3PDSgTop.h>
#endif
#include <iostream>
#include <fstream>
#include <TopFakes/FakesWeights.h>

class AtlEvent;
class TString;
class TROOT;
class TH1F;
class AtlMuon;
class AtlElectron;

class AtlQCDMMTool : public AtlAnalysisTool {

  private:
    Float_t fMMWeight;                // Matrix-method weight
    TH1F*   fHistMMWeight_nominal;    // Histogram of matrix-method weights
    TH1F*   fHistMMWeight_e_nominal;  // same, only for electrons
    TH1F*   fHistMMWeight_mu_nominal; // same, only for muons
    TH1F*   fHistMMEff_fake;          // fake efficiencies from TopFakes
    TH1F*   fHistMMEff_e_fake;        // fake efficiencies from TopFakes
    TH1F*   fHistMMEff_mu_fake;       // fake efficiencies from TopFakes
    TH1F*   fHistMMEff_real;          // real efficiencies from TopFakes
    TH1F*   fHistMMEff_e_real;        // real efficiencies from TopFakes
    TH1F*   fHistMMEff_mu_real;       // real efficiencies from TopFakes
    AtlObjectsToolD3PDSgTop *fObjTool;// Pointer to objects definition
    FakesWeights *fFakeWeightEJets;   // TopFakes object to calculate weights (e+jets)
    FakesWeights *fFakeWeightMuJets;  // TopFakes object to calculate weights (mu+jets)
    TString fYear;                    // Year used in eff. path and param. strings
    
  public:
    AtlQCDMMTool(const char* name, const char* title);
    virtual ~AtlQCDMMTool();

    AtlBTag::ETagger fBTagger;        // b-tagger to count b-jets
    TString fEfficiencyPath2015;      // Path to the Fake efficiency files (2015)
    TString fEfficiencyPath2016;      // Path to the Fake efficiency files (2016)
    TString fParamString_fake2015;    // Parametrization for fake eff (2015)
    TString fParamString_fake2016;    // Parametrization for fake eff (2016)
    TString fParamString_real2015;    // Parametrization for real eff (2015)
    TString fParamString_real2016;    // Parametrization for real eff (2016)

    virtual Bool_t Notify();
    
  protected:
    virtual Bool_t AnalyzeEvent();
    virtual void   BookHistograms();
    virtual void   FillHistograms();
    virtual void   FillHistogramsNoEvtSel();
    virtual void   SetBranchStatus();
    virtual void   SetCutDefaults();
    virtual void   Print() const;
    virtual void   Terminate();

  private:
    void InitEvent();
   
    ClassDef(AtlQCDMMTool,0)  // Atlas QCD Estimation Tool
};
#endif
 AtlQCDMMTool.h:1
 AtlQCDMMTool.h:2
 AtlQCDMMTool.h:3
 AtlQCDMMTool.h:4
 AtlQCDMMTool.h:5
 AtlQCDMMTool.h:6
 AtlQCDMMTool.h:7
 AtlQCDMMTool.h:8
 AtlQCDMMTool.h:9
 AtlQCDMMTool.h:10
 AtlQCDMMTool.h:11
 AtlQCDMMTool.h:12
 AtlQCDMMTool.h:13
 AtlQCDMMTool.h:14
 AtlQCDMMTool.h:15
 AtlQCDMMTool.h:16
 AtlQCDMMTool.h:17
 AtlQCDMMTool.h:18
 AtlQCDMMTool.h:19
 AtlQCDMMTool.h:20
 AtlQCDMMTool.h:21
 AtlQCDMMTool.h:22
 AtlQCDMMTool.h:23
 AtlQCDMMTool.h:24
 AtlQCDMMTool.h:25
 AtlQCDMMTool.h:26
 AtlQCDMMTool.h:27
 AtlQCDMMTool.h:28
 AtlQCDMMTool.h:29
 AtlQCDMMTool.h:30
 AtlQCDMMTool.h:31
 AtlQCDMMTool.h:32
 AtlQCDMMTool.h:33
 AtlQCDMMTool.h:34
 AtlQCDMMTool.h:35
 AtlQCDMMTool.h:36
 AtlQCDMMTool.h:37
 AtlQCDMMTool.h:38
 AtlQCDMMTool.h:39
 AtlQCDMMTool.h:40
 AtlQCDMMTool.h:41
 AtlQCDMMTool.h:42
 AtlQCDMMTool.h:43
 AtlQCDMMTool.h:44
 AtlQCDMMTool.h:45
 AtlQCDMMTool.h:46
 AtlQCDMMTool.h:47
 AtlQCDMMTool.h:48
 AtlQCDMMTool.h:49
 AtlQCDMMTool.h:50
 AtlQCDMMTool.h:51
 AtlQCDMMTool.h:52
 AtlQCDMMTool.h:53
 AtlQCDMMTool.h:54
 AtlQCDMMTool.h:55
 AtlQCDMMTool.h:56
 AtlQCDMMTool.h:57
 AtlQCDMMTool.h:58
 AtlQCDMMTool.h:59
 AtlQCDMMTool.h:60
 AtlQCDMMTool.h:61
 AtlQCDMMTool.h:62
 AtlQCDMMTool.h:63
 AtlQCDMMTool.h:64
 AtlQCDMMTool.h:65
 AtlQCDMMTool.h:66
 AtlQCDMMTool.h:67
 AtlQCDMMTool.h:68
 AtlQCDMMTool.h:69
 AtlQCDMMTool.h:70
 AtlQCDMMTool.h:71
 AtlQCDMMTool.h:72
 AtlQCDMMTool.h:73
 AtlQCDMMTool.h:74
 AtlQCDMMTool.h:75
 AtlQCDMMTool.h:76