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

#include "QFramework/TQPlotter.h"

class TQROOTPlotter : public TQPlotter {

protected:

  TObjArray* pads; //!

  using TQPlotter::addObject;
  virtual void addObject(TLegend* obj, const TString& key = "");

  void drawCutLines1D(TQTaggable& tags);
  int drawAdditionalAxes(TQTaggable& tags);
  int drawHeightLines(TQTaggable& tags);
  bool calculateAxisRanges1D(TQTaggable& tags); 
  bool calculateAxisRangesProfile(TQTaggable& tags);

  virtual bool drawProfiles(TQTaggable& tags);
  virtual void makeLegend(TQTaggable& tags, TObjArray* histos);
  virtual void stackHistograms(TQTaggable& tags, const TString& stackname);
  virtual void drawLegend(TQTaggable& tags);
  template<class T> void drawArrows(TQTaggable &tags,T *ratioGraph, double min, double max);

  virtual bool drawStack(TQTaggable& tags);
  virtual bool drawContours(TQTaggable& tags);
  virtual bool drawScatter(TQTaggable& tags);
  virtual bool drawHeatmap(TQTaggable& tags);
  virtual bool drawMigration(TQTaggable& tags);
  
  virtual TCanvas* createCanvas(TQTaggable& tags);
  virtual TPad* createPad(TQTaggable& tags, const TString& key);

  virtual void addAllHistogramsToLegend(TQTaggable& tags, TLegend * legend, const TString& processFilter, const TString& options = "", bool reverse=false);
  virtual void addHistogramToLegend(TQTaggable& tags, TLegend * legend, const TString& identifier, TQTaggable& options);
  virtual void addHistogramToLegend(TQTaggable& tags, TLegend * legend, TH1* histo, TQTaggable& options);
  virtual void addHistogramToLegend(TQTaggable& tags, TLegend * legend, TQNamedTaggable* process, const TString& options = "");
  virtual void addHistogramToLegend(TQTaggable& tags, TLegend * legend, TH1* histo, const TString& options = "");

  virtual TCanvas * makePlot(TQTaggable& tags) = 0;

  virtual void clearObjects() override;
  virtual void deleteObjects() override;

  virtual bool plotAndSaveAsInternal(const TString& histogram, const TString& saveAs, TQTaggable& tags) override;  

public:

 
  TPad* getPad(const TString& name);
  
  TQROOTPlotter();
  TQROOTPlotter(TQSampleFolder * baseSampleFolder);
  TQROOTPlotter(TQSampleDataReader * dataSource);

  virtual TCanvas * plot(TString histogram, const TString& inputTags);
  virtual TCanvas * plot(TString histogram, const char* inputTags);
  virtual TCanvas * plot(TString histogram, TQTaggable * inputTags = 0);
  virtual TCanvas * plot(TString histogram, TQTaggable& inputTags);

  static void setStyleAtlas();

  virtual ~TQROOTPlotter(); 

  virtual void reset();

  static bool isDefaultPlotMessage(TString message, const TString& filename);
  
  ClassDefOverride(TQROOTPlotter, 0); //Base class for QFramework plotters using the ROOT graphics engine

};

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