//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlPdfReweightingTool.h,v 1.7 2016/11/11 10:36:10 mergelm Exp $
// Copyright: 2012 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlPdfReweightingTool
#define ATLAS_AtlPdfReweightingTool
#ifndef ATLAS_AtlAnalysisTool
#include <AtlAnalysisTool.h>
#endif
#include "PdfReweightingTool/PdfReweightingTool.h"
#ifndef ROOT_TList
#include <TList.h>
#endif

class TH1F;
class TH2F;
class TObjString;
class TFile;
class TSystem;
class TROOT;

class AtlPdfReweightingTool : public AtlAnalysisTool {

  public:
    enum ESystMode { kUp, kDown, kNominal};
    ESystMode  fSystMode;     // Systematics mode (up/down/nominal)
    TList     *fListObsNames; // List of observable histogram names
    Int_t      fDSID;         // DSID of the sample (needed for norm. factors)
    
  private:
    PdfReweightingTool  *fPdfReweightingTool;  // Pdf tool object
    TList  *fListObsHistsOrig; // List of original observable histogram pointers
    TList  *fListObsHistsTmp;  // List of interal observable histogram pointers
    Bool_t  fFirstEvent;       // First event ?
    
  public:
    AtlPdfReweightingTool(const char* name, const char* title);
    virtual ~AtlPdfReweightingTool();
    virtual void   Init();
    virtual void   BookHistograms();
    virtual Bool_t AnalyzeEvent();
    virtual void   Print() const;
    virtual void   SetBranchStatus();
    virtual void   FillHistograms() {;}
    virtual void   Terminate();
    void AddObservable(const char* HistName);

  private:
    void FirstEvent();
    void FillObservables();
    void AddObs1D(TH1F *h_orig);
    void AddObs2D(TH2F *h_orig);
    TList* FIndObjects(TList *list, const TRegexp& pat);
    
    ClassDef(AtlPdfReweightingTool,0) // Pdf reweighting tool
};
#endif

 AtlPdfReweightingTool.h:1
 AtlPdfReweightingTool.h:2
 AtlPdfReweightingTool.h:3
 AtlPdfReweightingTool.h:4
 AtlPdfReweightingTool.h:5
 AtlPdfReweightingTool.h:6
 AtlPdfReweightingTool.h:7
 AtlPdfReweightingTool.h:8
 AtlPdfReweightingTool.h:9
 AtlPdfReweightingTool.h:10
 AtlPdfReweightingTool.h:11
 AtlPdfReweightingTool.h:12
 AtlPdfReweightingTool.h:13
 AtlPdfReweightingTool.h:14
 AtlPdfReweightingTool.h:15
 AtlPdfReweightingTool.h:16
 AtlPdfReweightingTool.h:17
 AtlPdfReweightingTool.h:18
 AtlPdfReweightingTool.h:19
 AtlPdfReweightingTool.h:20
 AtlPdfReweightingTool.h:21
 AtlPdfReweightingTool.h:22
 AtlPdfReweightingTool.h:23
 AtlPdfReweightingTool.h:24
 AtlPdfReweightingTool.h:25
 AtlPdfReweightingTool.h:26
 AtlPdfReweightingTool.h:27
 AtlPdfReweightingTool.h:28
 AtlPdfReweightingTool.h:29
 AtlPdfReweightingTool.h:30
 AtlPdfReweightingTool.h:31
 AtlPdfReweightingTool.h:32
 AtlPdfReweightingTool.h:33
 AtlPdfReweightingTool.h:34
 AtlPdfReweightingTool.h:35
 AtlPdfReweightingTool.h:36
 AtlPdfReweightingTool.h:37
 AtlPdfReweightingTool.h:38
 AtlPdfReweightingTool.h:39
 AtlPdfReweightingTool.h:40
 AtlPdfReweightingTool.h:41
 AtlPdfReweightingTool.h:42
 AtlPdfReweightingTool.h:43
 AtlPdfReweightingTool.h:44
 AtlPdfReweightingTool.h:45
 AtlPdfReweightingTool.h:46
 AtlPdfReweightingTool.h:47
 AtlPdfReweightingTool.h:48
 AtlPdfReweightingTool.h:49
 AtlPdfReweightingTool.h:50
 AtlPdfReweightingTool.h:51
 AtlPdfReweightingTool.h:52
 AtlPdfReweightingTool.h:53
 AtlPdfReweightingTool.h:54
 AtlPdfReweightingTool.h:55
 AtlPdfReweightingTool.h:56
 AtlPdfReweightingTool.h:57
 AtlPdfReweightingTool.h:58
 AtlPdfReweightingTool.h:59