//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQHWWPlotter__
#define __TQHWWPlotter__

#include "TH1.h"
#include "THStack.h"
#include "TNamed.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TString.h"
#include "QFramework/TQTaggable.h"
#include "QFramework/TQNamedTaggable.h"
#include "QFramework/TQSampleFolder.h"
#include "TObjArray.h"
#include "QFramework/TQROOTPlotter.h"

#include "TGraph.h"
#include "TGraphErrors.h"
#include "TGraphAsymmErrors.h"

#include <math.h>
#include <limits>

class TQSampleDataReader;

class TQHWWPlotter : public TQROOTPlotter {

protected:

  virtual TCanvas * makePlot(TQTaggable& inputTags) override;
  int global_hist_counter;
 
  void setStyle(TQTaggable& tags);
  void setStyleIllinois(TQTaggable& tags);
  virtual TObjArray* collectHistograms(TQTaggable& tags) override;
  void drawRatio(TQTaggable& tags);
  void drawPull(TQTaggable& tags);
  void drawMultiRatio(TQTaggable& tags);
  void drawSignificance(TQTaggable& tags);
  void drawLabels(TQTaggable& tags);
  void stackHistograms(TQTaggable& tags,const TString& stackname);
  void drawOptScan(TQTaggable& tags);
  void drawDataMinusBackground(TQTaggable& tags);
  void drawDataMinusBackgroundOverData(TQTaggable& tags);
  void drawCustomSubPlot(TQTaggable& tags);
  void drawUnitNormSubPlot(TQTaggable& tags);

  bool sysOk;

  bool includeSystematicsLegacy(TQTaggable& tags, TQTaggable& aliases);

public:
 
  static TCanvas * plotHistogram(TH1 * histo, const TString& options = "");
  static bool plotAndSaveHistogram(TH1 * histo, const TString& saveAs, const TString& options = "");
  static TCanvas* plotHistograms(TH1 * data, TH1* mc, const TString& options = "style.showRatio=true, histstyles.mc.histFillColor=kRed");
  static bool plotAndSaveHistograms(TH1 * histo, TH1* mc, const TString& saveAs, const TString& options = "style.showRatio=true, histstyles.mc.histFillColor=kRed");
 
  virtual bool setTotalBkgSystematics(const TString& path);


  TQHWWPlotter();
  TQHWWPlotter(TQSampleFolder * baseSampleFolder);
  TQHWWPlotter(TQSampleDataReader * dataSource);
 
  bool setScheme(TString scheme);
 
  virtual ~TQHWWPlotter();
 
  ClassDefOverride(TQHWWPlotter,0); //QFramework class
 
};

typedef TQHWWPlotter TQHWWPlotter2;

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