#include "TCanvas.h"
#include "TH1.h"
#include "TStyle.h"
#include "TROOT.h"
#include "TFile.h"
#include "TDirectory.h"
#include "TLegend.h"
#include "TLatex.h"
#include "THStack.h"
#include "TParameter.h"
#include "TMap.h"
#include "TMath.h"
#include "TGraphAsymmErrors.h"
#include "TGraphErrors.h"
#include "TArrow.h"
#include "TLine.h"
#include "TH2.h"
#include "TH3.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include "TGaxis.h"
#include "TFormula.h"
#include "TF1.h"
#include "TF2.h"
#include "TFitResult.h"
#include "TRandom3.h"
#include "TObjArray.h"

#include "QFramework/TQNamedTaggable.h"
#include "QFramework/TQHWWPlotter.h"
#include "QFramework/TQSampleDataReader.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQIterator.h"

// #define _DEBUG_
#include "QFramework/TQLibrary.h"

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <stdlib.h>
#include <cmath>

#define DEFAULTTEXTSIZE 0.0375
////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQHWWPlotter:
//
// The TQHWWPlotter provides advanced plotting features for the H->WW->lvlv analysis.
// It inherits basic plotting functionality from the abstract TQPlotter base class.
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQHWWPlotter)

//__________________________________________________________________________________|___________

TQHWWPlotter::TQHWWPlotter() : TQROOTPlotter() {
  // Default constructor of TQHWWPlotter class
  WARNclass("The TQHWWPlotter class is deprecated and will be removed in future versions of CAF. Please switch to using TQDefaultPlotter instead!");
}

//__________________________________________________________________________________|___________

TQHWWPlotter::TQHWWPlotter(TQSampleFolder * baseSampleFolder) : TQROOTPlotter(baseSampleFolder) {
  // Constructor of TQHWWPlotter class
  WARNclass("The TQHWWPlotter class is deprecated and will be removed in future versions of CAF. Please switch to using TQDefaultPlotter instead!");  
}

//__________________________________________________________________________________|___________

TQHWWPlotter::TQHWWPlotter(TQSampleDataReader * dataSource) : TQROOTPlotter(dataSource) {  
  // Constructor of TQHWWPlotter clas
  WARNclass("The TQHWWPlotter class is deprecated and will be removed in future versions of CAF. Please switch to using TQDefaultPlotter instead!");  
}

//______________________________________________________________________________________________

TQHWWPlotter::~TQHWWPlotter() {
  // Destructor of TQHWWPlotter class:
}

//__________________________________________________________________________________|___________

bool TQHWWPlotter::setScheme(TString scheme) {
  // set the plotting scheme
  // this is legacy functionality, please use explicit calls to addProcess instead
  //@tag:[energy,luminosity] (legacy!) This argument tag sets the center-of-mass energy and integrated luminosity denoted on the plots. Default: "(?)".
  TString energy = this->getTagStringDefault("energy","(?)");
  TString lumi = this->getTagStringDefault("luminosity","(?)");

  if(this->fReader && this->fReader->getSampleFolder()){
    this->fReader->getSampleFolder()->setTagBool("wildcarded?",true,"sig/?");
    this->fReader->getSampleFolder()->setTagBool("wildcarded?",true,"bkg/?");
    this->fReader->getSampleFolder()->setTagBool("wildcarded?",true,"data/?");
  }

  if (scheme.CompareTo("hww.minimal.uniflavour") == 0){
    this->resetProcesses();
    this->addBackground("bkg");
    this->addData("data");
    this->addSignal("sig/mh$(mh)");
    return true;
  }
  if (scheme.CompareTo("hww.vbf") == 0){
    resetProcesses();

    addData("data/$(lepch)");
    addBackground("bkg/$(lepch)/diboson/WW");
    addBackground("bkg/$(lepch)/diboson/NonWW");
    addBackground("bkg/$(lepch)/top/ttbar");
    addBackground("bkg/$(lepch)/top/singletop");
    addBackground("bkg/$(lepch)/Zjets");
    addBackground("bkg/$(lepch)/Wjets");
    addBackground("sig/$(lepch)/mh$(mh)/ggf");
    addSignal("sig/$(lepch)/mh$(mh)/vbf");
    setTotalBkgSystematics("bkg/$(lepch)");

    clear();
    setTagBool("style.autoStack", true);
    setTagString("labels.0", "#sqrt{s} = "+energy+" TeV, #lower[-0.2]{#scale[0.6]{#int}} Ldt = "+lumi+" fb^{-1}");
    setTagString("labels.1", "H#rightarrowWW^{*}#rightarrowl#nul#nu");
    setTagBool("style.stackSignal", (scheme.CompareTo("hww.default.sigStacked") == 0));
    return true;
  }
  if (scheme.CompareTo("hww.default") == 0 ||
      scheme.CompareTo("hww.default.sigStacked") == 0) {

    resetProcesses();
    addData("data/$(lepch)");
    addBackground("bkg/$(lepch)/diboson/WW");
    addBackground("bkg/$(lepch)/diboson/NonWW");
    addBackground("bkg/$(lepch)/top/ttbar");
    addBackground("bkg/$(lepch)/top/singletop");
    addBackground("bkg/$(lepch)/Zjets");
    addBackground("bkg/$(lepch)/Wjets");
    addBackground("");
    addSignal("sig/$(lepch)/mh$(mh)");
    setTotalBkgSystematics("bkg/$(lepch)");

    clear();
    setTagBool("style.autoStack", true);
    setTagString("labels.0", "#sqrt{s} = "+energy+" TeV, #lower[-0.2]{#scale[0.6]{#int}} Ldt = "+lumi+" fb^{-1}");
    setTagString("labels.1", "H#rightarrowWW^{*}#rightarrowl#nul#nu");
    setTagBool("style.stackSignal", (scheme.CompareTo("hww.default.sigStacked") == 0));

    return true;
  } else if (scheme.CompareTo("hww.bkgsig") == 0 ||
             scheme.CompareTo("hww.bkgsig.normalize") == 0 ||
             scheme.CompareTo("hww.bkgggfvbf") == 0 ||
             scheme.CompareTo("hww.bkgggfvbf.normalize") == 0) {

    resetProcesses();
    addBackground("bkg/$(lepch)");
    if (scheme.Contains(".bkgsig")) {
      addSignal("sig/$(lepch)/mh$(mh)");
    } else if (scheme.Contains(".bkgggfvbf")) {
      addSignal("sig/$(lepch)/mh$(mh)/ggf");
      addSignal("sig/$(lepch)/mh$(mh)/vbf");
    }
    setTotalBkgSystematics("bkg/$(lepch)");

    clear();
    setTagBool("style.autoStack", true);
    setTagBool("style.showTotalBkg", false);
    setTagBool("normalize", scheme.EndsWith(".normalize"));
    setTagInteger("style.nLegendCols", 1);
    setTagDouble("style.legendHeight", 1.75);
    setTagString("labels.0", "#sqrt{s} = "+energy+" TeV, #lower[-0.2]{#scale[0.6]{#int}} Ldt = "+lumi+" fb^{-1}");
    setTagString("labels.1", "H#rightarrowWW^{*}#rightarrowl#nul#nu");

    return true;
  } else if (scheme.CompareTo("hww.databkgsig") == 0) {

    resetProcesses();
    addData("data/$(lepch)");
    addBackground("bkg/$(lepch)");
    addSignal("sig/$(lepch)/mh$(mh)");
    setTotalBkgSystematics("bkg/$(lepch)");

    clear();
    setTagBool("style.autoStack", true);
    setTagBool("style.showTotalBkg", false);
    setTagBool("style.stackSignal", true);
    setTagInteger("style.nLegendCols", 1);
    setTagDouble("style.legendHeight", 1.75);
    setTagString("labels.0", "#sqrt{s} = "+energy+" TeV, #lower[-0.2]{#scale[0.6]{#int}} Ldt = "+lumi+" fb^{-1}");
    setTagString("labels.1", "H#rightarrowWW^{*}#rightarrowl#nul#nu");

    return true;
  } else if (scheme.CompareTo("comparePlots") == 0) {
    setTagBool("normalize",true);
    setTagBool("style.showRatio",true);
    setTagBool("style.showSub",true);
    setTagString("style.stackDrawOptions", "ep");
    setTagBool("style.showTotalBkg", false);
    setTagBool("errors.showX", false);
    TQTaggableIterator itr(this->fProcesses);
    while(itr.hasNext()){
      TQNamedTaggable * process = itr.readNext();
      if(!process) continue;
      process->setTagBool(".ignoreProcessName",true);
      process->setTagInteger("histLineWidth", 2);
      process->setTagInteger("histMarkerStyle", 20);

      if(getNProcesses(".isData") < 2)
        process->setTagDouble( "histMarkerSize", 0.9);
      else if(getNProcesses(".isData") < 4)
        process->setTagDouble( "histMarkerSize", 0.8);
      else
        process->setTagDouble( "histMarkerSize", 0.7);
      //@tag:[color] (legacy!) The value of this process tag is copied to the process tags "histMarkerColor" and "histLineColor". Defaults are 0 and 1, respectively.
      process->setTagInteger("histMarkerColor", process->getTagIntegerDefault("color",0) );
      process->setTagInteger("histLineColor", process->getTagIntegerDefault("color",1) );
      if(process->getTagBoolDefault(".isBackground",false))
        {
          if(getNProcesses(".isBackground") == 1)
            //@tag:[title] (legacy!) This process tag is copied to the process tag "labels.totalStack" ("labels.data") if the process is the only background (data) process. Default: "Y" ("X")
            this->setTagString("labels.totalStack",process->getTagStringDefault("title","Y"));
          else
            setTagString("labels.totalStack","sum");
        }
      else if(process->getTagBoolDefault(".isData",false))
        {
          if(getNProcesses("isData") == 1)
            setTagString("labels.data",process->getTagStringDefault("title","X"));
          else
            setTagString("labels.data","X");
        }
    }
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

TCanvas * TQHWWPlotter::plotHistogram(TH1 * histo, const TString& options) {
  // plot a single histogram with the given options
  TQSampleFolder * sfTmp = TQSampleFolder::newSampleFolder("sfTmp");
  sfTmp->addObject(TQHistogramUtils::copyHistogram(histo), ".histograms+::histo");

  // parse options
  TQTaggable tags(options);

  // initialize instance of plotter
  TQHWWPlotter pl(sfTmp);
  pl.resetProcesses();
  pl.addData(".", TString::Format("drawOptions = '%s'",
                                  //@tag:[drawOptions] This argument tag is forwarded by TQHWWPlotter::plotHistogram to TQPlotter::addData. Default: "hist".
                                  tags.getTagStringDefault("drawOptions", "hist").Data()));
  tags.removeTag("drawOptions");
  pl.importTags(&tags);

  // plot
  TCanvas * cv = pl.plot("histo");

  delete sfTmp;
  return cv;
}


//__________________________________________________________________________________|___________

TCanvas * TQHWWPlotter::plotHistograms(TH1 * data, TH1* mc, const TString& options) {
  // plot a pair of histograms histograms (data and MC) with the given options
  // set individual styling options with "histstyles.data.XXX" and "histstyles.mc.XXX"

  TQTaggable tags(options);
  TQSampleFolder * sfTmp = TQSampleFolder::newSampleFolder("sfTmp");

  TQSampleFolder* dataSF = sfTmp->getSampleFolder("data+");
  TQTaggable dataTags;
  //@tag: [histstyles.data.,histstyles.mc.; style.default.] The first two argument tag prefixes are used to apply tags either to plotting of data or plotting of MC in TQHWWPlotter::plotHistograms. Only tags continuing with "style.default." are then actually used.
  dataTags.importTagsWithoutPrefix(tags,"histstyles.data.");
  dataSF->importTagsWithPrefix(dataTags,"style.default.");
  dataSF->addObject(TQHistogramUtils::copyHistogram(data), ".histograms+::histogram");

  TQSampleFolder* mcSF = sfTmp->getSampleFolder("mc+");
  TQTaggable mcTags;
  mcTags.importTagsWithoutPrefix(tags,"histstyles.mc.");
  mcSF->importTagsWithPrefix(mcTags,"style.default.");
  mcSF->addObject(TQHistogramUtils::copyHistogram(mc), ".histograms+::histogram");

  TQHWWPlotter pl(sfTmp);
  pl.resetProcesses();
  pl.addData ("data", TString::Format("title='%s'",data->GetTitle()));
  pl.addBackground("mc", TString::Format("title='%s'",mc->GetTitle()));

  TCanvas * cv = pl.plot("histogram", options);

  delete sfTmp;
  return cv;
}



//__________________________________________________________________________________|___________

bool TQHWWPlotter::plotAndSaveHistogram(TH1 * histo, const TString& saveAs, const TString& options) {
  // quick-access-function to plot one histogram and save it
  TCanvas * cv = TQHWWPlotter::plotHistogram(histo, options);
  if (cv) {
    cv->SaveAs(saveAs.Data());
    delete cv;
    return true;
  } else {
    return false;
  }
  delete cv;
}

//__________________________________________________________________________________|___________

bool TQHWWPlotter::plotAndSaveHistograms(TH1 * data, TH1* mc, const TString& saveAs, const TString& options) {
  // quick-access-function to plot two histograms and save them
  TCanvas * cv = TQHWWPlotter::plotHistograms(data,mc, options);
  if (cv) {
    cv->SaveAs(saveAs.Data());
    delete cv;
    return true;
  } else {
    return false;
  }
  delete cv;
}

//__________________________________________________________________________________|___________


void TQHWWPlotter::setStyleIllinois(TQTaggable& tags){
  // setup the "new" (Illinois) style tags
  double padScaling = 1.;
  double ratioPadScaling = 1.;
  double additionalTopMargin = 0.;
  //@tag: [geometry.sub.height] This argument tag (TQHWWPlotter::setStyleIllinois) controls the height of the sub plot (e.g. ratio plot)
  double ratioPadRatio = tags.getTagDoubleDefault("geometry.sub.height",0.35);
  //@tag:[style.titleOffset] This argument tag (TQHWWPlotter::setStyleIllinois) controls the offset of axis lables. Default: 1.
  double titleOffset = tags.getTagDoubleDefault("style.titleOffset",1);
  //@tag:[style.textSize]
  double textsize = tags.getTagDoubleDefault("style.textSize",DEFAULTTEXTSIZE);
  //@tag:[style.showSub] This argument tag controls if a sub plot (e.g. ratio plot) is shown or not. Default: false.
  bool showSub = tags.getTagBoolDefault ("style.showSub",false);
  //@tag:[geometry.legendPadRatio] This argument tag (TQHWWPlotter::setStyleIllinois) controls the width of the legend on plots. Default: 0.25
  double legend_divider_x = 1. - tags.getTagDoubleDefault("geoemetry.legendPadRatio",0.25);

  double geometry_left_margin = 0.20;

  tags.setTagDouble("geometry.main.margins.right", 0.05);
  tags.setTagDouble("geometry.main.margins.left", geometry_left_margin);
  tags.setTagDouble("geometry.main.margins.top", textsize * 1.6 * padScaling);

  tags.setTagDouble("geometry.main.xMin",0.);
  tags.setTagDouble("geometry.main.xMax",legend_divider_x);
  tags.setTagDouble("geometry.main.yMax",1.);

  tags.setTagInteger("style.tickx",0);
  tags.setTagInteger("style.ticky",0);

  //tags.setTagDouble("style.legendHeight",0.35 * (showSub ? 1.0 : 1.1));
  tags.setTagDouble("style.legendHeight",0.33 * (showSub ? 1.0 : 1.1));
  tags.setTagDouble("geometry.legend.margins.right", 0.05);
  tags.setTagDouble("geometry.legend.margins.top", textsize * 1.6 * padScaling);
  tags.setTagDouble("geometry.legend.margins.left",0.16);
  tags.setTagDouble("geometry.legend.margins.bottom", 0.);

  tags.setTagInteger("geometry.canvas.height",600);
  if (showSub){
    tags.setTagInteger("geometry.canvas.width",700);
    padScaling = 1. / (1. - ratioPadRatio) / 8. * 6.;
    ratioPadScaling = (1. / ratioPadRatio) / 8. * 6.;
    double legendPadScaling = 1.;//1/legend_divider_x;
    additionalTopMargin = 0.1 * (padScaling - 1);
    tags.setTagDouble("geometry.sub.margins.top", 0.);
    tags.setTagDouble("geometry.sub.margins.bottom",0.16);
    tags.setTagDouble("geometry.sub.margins.left", geometry_left_margin);
    tags.setTagDouble("geometry.sub.margins.right",0.05);

    tags.setTagDouble("geometry.main.additionalTopMargin",additionalTopMargin);
    tags.setTagDouble("geometry.main.scaling",padScaling);
    tags.setTagDouble("geometry.sub.scaling",ratioPadScaling);
    tags.setTagDouble("geometry.xscaling",legendPadScaling);

    tags.setTagDouble("geometry.sub.xMin",0.);
    tags.setTagDouble("geometry.sub.yMin",0.);
    tags.setTagDouble("geometry.sub.xMax",legend_divider_x);
    tags.setTagDouble("geometry.sub.yMax",ratioPadRatio);

    tags.setTagDouble("geometry.main.yMin",ratioPadRatio);
    tags.setTagDouble("geometry.main.margins.bottom", 0.);

    tags.setTagBool("style.main.xAxis.showLabels",false);
    tags.setTagBool("style.main.xAxis.showTitle",false);
  } else {
    tags.setTagInteger("geometry.canvas.width",800);
    tags.setTagDouble("geometry.main.margins.bottom", 0.18);
    tags.setTagDouble("geometry.main.yMin",0.);
  }

  tags.setTagDouble("geometry.legend.xMin",legend_divider_x);
  tags.setTagDouble("geometry.legend.yMin", 0.);
  tags.setTagDouble("geometry.legend.xMax",1.);
  tags.setTagDouble("geometry.legend.yMax",1. - (1. - (showSub?ratioPadRatio:0)) *tags.getTagDoubleDefault("geometry.main.margins.top",0.3));

  tags.setTagInteger("style.text.font",42);
  tags.setTagDouble("style.textSize",DEFAULTTEXTSIZE);
	// tags.setTagDouble("style.markerSize",1.2);
  tags.setTagInteger("style.markerType",20);
  tags.setTagBool("errors.showX", false);
  //@tag: [style.showEventYields] If this argument tag is set to true, integrated event yields for each process are shown in the legend.
  if (tags.getTagBoolDefault ("style.showEventYields",false))
    tags.setTagDouble("legend.textSize",0.080);

  tags.setTagBool("style.useLegendPad",true);
  tags.setTagDouble("style.logMin",0.011);
  tags.setTagDouble("legend.margin.right",-0.2);

  tags.setTagDouble("geometry.main.xAxis.titleOffset",1.2*titleOffset);
  tags.setTagDouble("geometry.main.xAxis.labelOffset",0.03);
  tags.setTagDouble("geometry.main.xAxis.titleSize",showSub ? 0. : textsize*1.2);
  tags.setTagDouble("geometry.main.xAxis.labelSize",showSub ? 0. : textsize);
  tags.setTagDouble("geometry.main.yAxis.titleOffset",(showSub? 1.5:1.7)*titleOffset);
  tags.setTagDouble("geometry.main.yAxis.labelOffset",0.03);
  tags.setTagDouble("geometry.main.yAxis.titleSize",textsize*1.2);
  tags.setTagDouble("geometry.main.yAxis.labelSize",textsize);

  if(showSub){
    tags.setTagDouble("geometry.sub.xAxis.titleOffset",1.1*titleOffset);
    tags.setTagDouble("geometry.sub.xAxis.labelOffset",0.04);
    tags.setTagDouble("geometry.sub.xAxis.titleSize",textsize*1.2);
    tags.setTagDouble("geometry.sub.xAxis.labelSize",textsize);
    tags.setTagDouble("geometry.sub.yAxis.titleOffset",1.5*titleOffset);
    tags.setTagDouble("geometry.sub.yAxis.labelOffset",0.03);
    tags.setTagDouble("geometry.sub.yAxis.titleSize",textsize*1.2);
    tags.setTagDouble("geometry.sub.yAxis.labelSize",textsize);
  }

  double tickLength = tags.getTagDoubleDefault("style.tickLength",0.02);
  tags.setTagDouble("geometry.main.yAxis.tickLength",-tickLength);
  tags.setTagDouble("geometry.main.xAxis.tickLength",-tickLength);
  tags.setTagDouble("geometry.sub.yAxis.tickLength", -tickLength);
  tags.setTagDouble("geometry.sub.xAxis.tickLength",-tickLength);

  tags.setTagInteger("style.main.xAxis.nDiv",50008);
  tags.setTagInteger("style.main.yAxis.nDiv",50004);

  tags.setTagInteger("style.main.lineColor",0);
  tags.setTagInteger("style.main.markerColor",0);

  tags.setTagInteger("style.ratio.mcErrorBand.fillColor",14);
  tags.setTagInteger("style.ratio.mcErrorBand.fillStyle",3254);

  tags.setTagInteger("style.significance.fillColor",kRed);
  tags.setTagInteger("style.significance.fillStyle",3254);
  tags.setTagInteger("style.significance.lineColor",0);
  tags.setTagInteger("style.significance.lineStyle",0);

  tags.setTagInteger("style.main.data.lineWidth",2);
  tags.setTagInteger("style.main.data.lineColor",kBlack);
  // tags.setTagDouble ("style.main.data.markerSize",1.0);

  tags.setTagInteger("style.main.totalStack.fillColor",0);
  tags.setTagInteger("style.main.totalStack.fillStyle",0);
  tags.setTagInteger("style.main.totalStackError.fillColor",14);
  tags.setTagInteger("style.main.totalStackError.fillStyle",3254);

  tags.setTagInteger("style.sub.xAxis.nDiv",50008);

  tags.setTagInteger("style.nLegendCols",1);

  tags.setTagDouble("legend.xMin",0.0);
  tags.setTagDouble("legend.yMin",0.0);
  tags.setTagDouble("legend.xMax",1.0);
  tags.setTagDouble("legend.yMax",1.0);

  tags.setTagInteger("labels.info.align",11);
  tags.setTagDouble("labels.info.size",0.8);
  tags.setTagDouble("labels.info.xPos",0.);
  tags.setTagDouble("labels.atlas.scale",1.);
  if (showSub) // the following controls the xoffset of "internal" in ATLAS "internal".
    tags.setTagDouble("labels.atlas.xOffset",0.16);
  else
    tags.setTagDouble("labels.atlas.xOffset",0.20);
  tags.setTagDouble("labels.drawATLAS.scale",1.21);
  tags.setTagDouble("style.labels.scale",1.1);
  tags.setTagDouble("style.labels.xOffset",geometry_left_margin+0.015);
  tags.setTagBool("style.legend.textSizeFixed",true);
  tags.setTagDouble("legend.textSize",0.132);

  tags.setTagBool("legend.showTotalBkgErrorType",false);
  tags.setTagString("legend.dataDisplayType","ex1y2p");
  tags.setTagBool("style.manualStacking",false);
  tags.setTagBool("style.autoStackLegend",true);

  double yVetoLeft = 0.70;
  double yVetoRight = 0.70;
  //@tag: [style.logScale] If this argument tag is set to true, the y axis is shown in log scale. Default: false.
  if (tags.getTagBoolDefault ("style.logScale",false )) {
    yVetoLeft -= 0.15;
    yVetoRight -= 0.15;
  }
  tags.setTagDouble("blocks.x.0",0.5); tags.setTagDouble("blocks.y.0",yVetoLeft);
  tags.setTagDouble("blocks.x.1",1.0); tags.setTagDouble("blocks.y.1",yVetoRight);
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::setStyle(TQTaggable& tags){
  //this method is still in use
  // setup the default style tags
  double padScaling = 1.;
  double ratioPadScaling = 1.;
  double additionalTopMargin = 0.;
  //tag doc see setStyleIllinois
  bool showSub = tags.getTagBoolDefault("style.showSub",false);
  double ratioPadRatio = tags.getTagDoubleDefault("geometry.sub.height",0.35);
  //@tag: [style.topLegend] If this argument tag is set to true, the legend is shown at the top of the plot. Default: false.
  if(tags.getTagBoolDefault("style.topLegend",false)){
    tags.setTagDouble("geometry.main.margins.top",0.25);
    tags.setTagInteger("style.legend.fillColor",kWhite);
    tags.setTagInteger("style.legend.fillStyle",1001);
    tags.setTagDouble("labels.info.yPos",0.9);
    tags.setTagDouble("style.labels.yPos",0.9);
    tags.setTagBool("style.showMissing",false);
    tags.setTagDouble("legend.yMin",0.75);
    tags.setTagDouble("legend.yMax",0.95);
  } else {
    tags.setTagDouble("geometry.main.margins.top", 0.05);
    tags.setTagDouble("geometry.legend.margins.top", 0.05);
  }
  if((tags.hasTag("style.heatmap") || tags.hasTag("style.migration"))&& tags.getTagIntegerDefault("style.nDim",1) == 2){ //only change the margin if it's an actual 2D plot.
    tags.setTagDouble("geometry.main.margins.right", 0.12);
  } else {
    tags.setTagDouble("geometry.main.margins.right", 0.05);
  }
  tags.setTagDouble("geometry.main.margins.left", 0.16);

  tags.setTagDouble("geometry.main.xMin",0.);
  tags.setTagDouble("geometry.main.xMax",1.);
  tags.setTagDouble("geometry.main.yMax",1.);

  tags.setTagInteger("geometry.canvas.height",600);
  if (showSub){
    //@tag: [style.ratioTopMargin] This argument tag sets the top margin for ratio plots. Default: 0.015
    tags.setTagDouble("geometry.sub.margins.top", tags.getTagDoubleDefault("style.ratioTopMargin",0.015));
    tags.setTagDouble("geometry.sub.margins.bottom",0.16);
    tags.setTagDouble("geometry.sub.margins.left", 0.16);
    tags.setTagDouble("geometry.sub.margins.right", 0.05);
    tags.setTagInteger("geometry.canvas.width",600);
    double height = tags.getTagDoubleDefault("geometry.canvas.height",0);
    double width = tags.getTagDoubleDefault("geometry.canvas.width",0);
    padScaling = width / height;
    ratioPadScaling =  (height > width ? padScaling : 1.) / ratioPadRatio;
    additionalTopMargin = 0.1 * (padScaling - 1);
    tags.setTagDouble("geometry.main.additionalTopMargin",additionalTopMargin);
    tags.setTagDouble("geometry.main.scaling",padScaling);
    tags.setTagDouble("geometry.sub.scaling",ratioPadScaling);

    tags.setTagDouble("geometry.sub.xMin",0.);
    tags.setTagDouble("geometry.sub.yMin",0.);
    tags.setTagDouble("geometry.sub.xMax",1.);
    tags.setTagDouble("geometry.sub.yMax",ratioPadRatio);
    tags.setTagDouble("geometry.main.yMin",0);
    tags.setTagDouble("geometry.main.margins.bottom",ratioPadRatio);
    tags.setTagDouble("geometry.legend.margins.bottom",ratioPadRatio);

    tags.setTagBool("style.main.xAxis.showLabels",false);
    tags.setTagBool("style.main.xAxis.showTitle",false);
  } else {
    tags.setTagDouble("geometry.main.margins.bottom",0.16);
    tags.setTagDouble("geometry.legend.margins.bottom",0.16);
    tags.setTagDouble("geometry.main.yMin",0.);
    tags.setTagInteger("geometry.canvas.width",800);
  }

  tags.setTagInteger("style.text.font",42);
  tags.setTagDouble("style.textSize",DEFAULTTEXTSIZE);
  // tags.setTagDouble("style.markerSize",1.2);
  tags.setTagInteger("style.markerType",20);

  tags.setTagInteger("style.main.lineColor",0);
  tags.setTagInteger("style.main.markerColor",0);
  tags.setTagInteger("style.main.fillColor",0);
  tags.setTagInteger("style.main.fillStyle",0);

  tags.setTagInteger("style.main.totalStack.lineColor",kBlue);
  tags.setTagInteger("style.main.totalStack.lineWidth",1);
  tags.setTagInteger("style.main.totalStack.fillColor",0);
  tags.setTagInteger("style.main.totalStack.fillStyle",0);
  tags.setTagInteger("style.main.totalStackError.fillColor",14);
  tags.setTagInteger("style.main.totalStackError.fillStyle",3254);
  tags.setTagInteger("style.main.totalStackError.lineStyle",0);

  tags.setTagInteger("style.ratio.mcErrorBand.fillColor",kOrange -2);
  tags.setTagInteger("style.ratio.mcErrorBand.fillStyle",1001);
  tags.setTagInteger("style.optScan.default.fillColor",kOrange -2);
  tags.setTagInteger("style.optScan.default.fillStyle",1001);
  tags.setTagInteger("style.optScan.left.fillColor",kRed);
  tags.setTagInteger("style.optScan.left.fillStyle",1001);
  tags.setTagInteger("style.optScan.right.fillColor",kBlue);
  tags.setTagInteger("style.optScan.right.fillStyle",1001);

  tags.setTagInteger("style.main.data.lineWidth",2);
	tags.setTagDouble ("style.main.data.markerStyle",20);
	if (tags.hasTag("style.markerSize") && !tags.hasTag("style.main.data.markerSize")) {
		tags.setTagDouble("style.main.data.markerSize",tags.getTagDoubleDefault("style.markerSize", 1.));
	}

  // tags.setTagInteger("style.main.data.lineColor",kBlack);

  tags.setTagInteger("style.significance.fillColor",kRed);
  tags.setTagInteger("style.significance.fillStyle",1001);
  tags.setTagInteger("style.significance.lineColor",0);
  tags.setTagInteger("style.significance.lineStyle",0);

  //@tag:[style.tickLength] This argument tag controls the length of the x- and y-axis ticks. Default: 0.03
  double tickLength = tags.getTagDoubleDefault("style.tickLength",0.03);
  tags.setTagDouble("geometry.main.yAxis.tickLength",tickLength);
  tags.setTagDouble("geometry.main.xAxis.tickLength",tickLength);
  tags.setTagDouble("geometry.sub.yAxis.tickLength", tickLength);
  tags.setTagDouble("geometry.sub.xAxis.tickLength",tickLength);

  //@tag:[style.sub.yAxis.nDiv, style.ratio.nYdiv] This tag controls the number of divisions/ticks of the sub plot. The number of top level ticks is given by the two least significant digits (in decimal notation). The second two least significant digits determine the number of sub divisions (smaller ticks), the thrid least significant set of two digits controls the sub-sub-devisions. When "setStyle" is called, the first tag (...yAxis.nDiv) defaults to the value determined from latter tag (...nYdiv) or 510 (10 top level divisions, 5 sub divisions) if the latter one is not set.
  tags.setTagInteger("style.sub.yAxis.nDiv",tags.getTagIntegerDefault("style.ratio.nYdiv",510));
  tags.setTagInteger("style.sub.xAxis.nDiv", tags.getTagIntegerDefault("style.ratio.nXdiv", 510));

  tags.setTagDouble("legend.xMin",0.59);
  tags.setTagDouble("legend.xMax",0.90);
  tags.setTagDouble("legend.yMin",0.70);
  tags.setTagDouble("legend.yMax",0.92);

  tags.setTagBool("errors.showX",true);
  tags.setTagDouble("erros.widthX",0.5);

  tags.setTagDouble("blocks.x.0",0.5);
  tags.setTagDouble("blocks.x.1",1.0);
  if(tags.getTagBoolDefault("style.showLabels",true)){
    double yVetoLeft = 0.84;
    TList* labels = tags.getTagList("labels");
    if (labels) yVetoLeft -= (showSub ? 0.08 : 0.09) * (double)labels->GetEntries() * tags.getTagDoubleDefault("geometry.main.scaling",1.);
    delete labels;
    tags.setTagDouble("blocks.y.0",yVetoLeft);
  } else {
    tags.setTagDouble("blocks.y.0",1);
  }
  if(!tags.getTagBoolDefault("style.useLegendPad",false)){
    double yVetoRight = tags.getTagDoubleDefault("legend.yMin",0.5) - tags.getTagDoubleDefault("legend.margin.right",0.05);
    tags.setTagDouble("blocks.y.1",yVetoRight);
  } else {
    tags.setTagDouble("blocks.y.1",1);
  }
}

//__________________________________________________________________________________|___________

bool TQHWWPlotter::includeSystematicsLegacy(TQTaggable& tags,TQTaggable& aliases){
  // legacy function for systematics handling
  // the new version is to be found in the TQPlotter base class

  //@tag:[verbose] This argument tag enables verbosity. Default: false.
  bool verbose = tags.getTagBoolDefault("verbose",false);
  if(verbose) VERBOSEclass("collecting uncertainty band data");

  // get the systematic uncertainty histogram
  TH1 * hTotalStackSys = 0;
  //@tag: [errors.drawSysMC,errors.drawAsymmSysMC] These argument tags enable drawing of (asymmetric) systematic uncertainties for MC. Default: false
  bool sysMcErrors = tags.getTagBoolDefault("errors.drawSysMC",false );
  bool asymmSysMcErrors = tags.getTagBoolDefault("errors.drawAsymmSysMC", false);

  if (sysMcErrors && !asymmSysMcErrors) {
    //@tag: [input.bkg] This argument tag specifies the path of the total background. Default: "bkg"
    TObjArray * histoSystematics = getHistograms(this->fProcesses,"isTotalBkgSys", tags.getTagStringDefault("input.bkg", "bkg"),".systematics/", aliases, tags);
    if (histoSystematics && histoSystematics->GetEntries() > 0){
      hTotalStackSys = (TH1*)histoSystematics->First();
      this->addObject(hTotalStackSys,"totalStackSys");
    }
  } else {
    TObjArray * histoSystematicsAsymm = 0;
    if (asymmSysMcErrors) {
      TObjArray * procSystematicsAsymm = new TObjArray();
      procSystematicsAsymm->SetOwner(true);
      TQTaggableIterator sysItr(this->fProcesses);
      TObjArray* processes = NULL;
      //@tag: [errors.drawAsymmSysList] This argument tag contains a comma seperated list of systematic uncertainties.
      TObjArray* systList = (tags.getTagStringDefault("errors.drawAsymmSysList", "")).Tokenize(",");
      while(!processes && sysItr.hasNext()){
        TQTaggable* process = sysItr.readNext();
        if(!process) continue;
        //@tag: [isTotalBkgSys] This process tag labels the process as the "process" representing the total systematic uncertainties.
        if(!process->getTagBoolDefault("isTotalBkgSys")) continue;
        //@tag: [.path] This process tag contains the path(s) (possibly including path arithmetics) of the corresponding sample folder(s).
        processes = process->getTagStringDefault(".path").Tokenize("+");
      }
      for (int iSys = 0; iSys < systList->GetEntries(); iSys++) {
        TString entry = "";
        for (int iProc = 0; iProc < processes->GetEntries(); iProc++) {
          TString process = TQStringUtils::trim(processes->At(iProc)->GetName());
          TString syst = TQStringUtils::trim(systList->At(iSys)->GetName());
          if (iProc)
            entry += "+" + process + "/" + syst;
          else
            entry = process + "/" + syst;
        }
        TQNamedTaggable* tmp = new TQNamedTaggable();
        tmp->setTagString(".path",entry);
        tmp->setTagBool("isBkgSys",true);
        procSystematicsAsymm->Add(tmp);

      }
      histoSystematicsAsymm = getHistograms(processes, "isBkgSys", tags.getTagStringDefault("input.bkg", "bkg"), ".asymmsystematics/", aliases, tags);
      delete procSystematicsAsymm;
      delete processes;
      delete systList;
    }
    this->addObject(histoSystematicsAsymm,"asymmSys");
  }

  return true;
}

//__________________________________________________________________________________|___________

bool TQHWWPlotter::setTotalBkgSystematics(const TString& path) {
  // set the total background systematics to be retrieved from the given path
  TQNamedTaggable* totalStackSys = new TQNamedTaggable("totalStackSys");
  totalStackSys->setTagBool("isTotalBkgSys",true);
  totalStackSys->setTagString(".path",path);
  this->fProcesses->Add(totalStackSys);
  return true;
}

//__________________________________________________________________________________|___________

TObjArray* TQHWWPlotter::collectHistograms(TQTaggable& tags){
  // use the TQSampleDataReader to retrieve all histograms from the sample folder

  //@tag: [style.showUnderflow,style.showOverflow] This argument tag controls if under/overflow bins are shown in the histogram. Default: false.
  bool showUnderflow = tags.getTagBoolDefault ("style.showUnderflow",false);
  bool showOverflow = tags.getTagBoolDefault ("style.showOverflow",false );
  tags.setTagBool("includeOverflow",showOverflow);
  tags.setTagBool("includeUnderflow",showUnderflow);
  //@tag: [input.mh] (HWW legacy) This argument tag defines the higgs-boson mass. Default: 125
  int mh = tags.getTagIntegerDefault ("input.mh", 125);
  bool verbose = tags.getTagBoolDefault("verbose",false );
  //tags.setTagBool("norm",normalize); //this is problematic! this causes every histogram individually to be normalized in the SampleDataReader (which changes the shape of the histogram stack and is very misleading) TODO: remove this line after some checks/time

  // get the histograms
  TQTaggable aliases;
  //@tag: [input.lepch,input.channel] These argument tags do something (TODO)
  aliases.setTagString("lepch",tags.getTagStringDefault("input.lepch","?")); //in case it's not specified, we set a default in this way
  aliases.setTagString("channel",tags.getTagStringDefault("input.channel","?"));
  aliases.setTagString("datachannel",tags.getTagStringDefault("input.datachannel","?"));
  aliases.setTagInteger("mh",mh);
  aliases.importTagsWithoutPrefix(tags,"alias.");//import alias and input tags
  aliases.importTagsWithoutPrefix(tags,"input.");

  if(verbose) VERBOSEclass("getting data histograms");
  TObjArray* histosData = getHistograms(this->fProcesses,".isData", tags.getTagStringDefault("input.data", "histogram"), "", aliases, tags);
  if(verbose) VERBOSEclass("getting background histograms");
  TObjArray* histosBkg = getHistograms(this->fProcesses,".isBackground", tags.getTagStringDefault("input.bkg", "histogram"), "", aliases, tags);
  if(verbose) VERBOSEclass("getting signal histograms");
  TObjArray* histosSig = getHistograms(this->fProcesses,".isSignal", tags.getTagStringDefault("input.sig", "histogram"), "", aliases, tags);

  TObjArray* histos = new TObjArray();

  histos->AddAll(histosData);
  histos->AddAll(histosBkg);
  histos->AddAll(histosSig);
  if(histos->GetEntries() < 1){
    delete histos;
    ERRORclass("no histograms found: "+tags.exportTagsAsString("input.*"));
    return NULL;
  }
  if(!histosData || histosData->GetEntries() < 1){
    if(verbose) VERBOSEclass("no data histograms found, disabling data");
    tags.setTagBool("style.drawData",false);
  } else {
    if(verbose) VERBOSEclass("found %d data histograms",histosData->GetEntries());
  }
  
  this->applyBlinding(tags,histosSig, histosBkg, histosData); 
  
  if(histosData) delete histosData;
  if(histosBkg) delete histosBkg;
  if(histosSig) delete histosSig;

  TQTH1Iterator itr(histos);
  double maxint = 0;
  while(itr.hasNext()){
    TH1* hist = itr.readNext();
    double integral = hist->Integral();
    maxint = std::max(integral,maxint);
  }
  if(verbose) VERBOSEclass("highest integral of histogram set is %g",maxint);
  if( maxint < tags.getTagDoubleDefault("skipEmptyHistograms",1e-5) && !tags.getTagDoubleDefault("skipEmptyHistograms",1e-5) == 0 ){  //@tag: [skipEmptyHistograms] Skip histograms with integral below given value. This is set to 1e-5 by default!
    delete histos;
    return NULL;
  }

  //////////////////////////////////////////////////////
  // check the consistency
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("checking histogram consistency");
  // expect at least one histogram to be available
  bool consistent = (histos->GetEntries() > 0);
  // check consistency and create master histogram
  TH1* hMaster = NULL;
  consistent = checkConsistency(hMaster, histos) && consistent;

  // stop if there is no valid histogram or histograms are invalid
  if (!consistent){
    if(verbose) VERBOSEclass("consistency check failed");
    delete histos;
    return NULL;
  }
  hMaster->Reset();
  this->addObject(histos,"histos");

  tags.setTagInteger("style.nDim",TQHistogramUtils::getDimension(hMaster));

  //////////////////////////////////////////////////////
  // initialize background histogram
  //////////////////////////////////////////////////////

  // prepare the total background histogram
  if(verbose) VERBOSEclass("preparing total background histogram");
  TH1* hTotalStack = TQHistogramUtils::copyHistogram(hMaster,"totalStack");
  hTotalStack->SetTitle(tags.getTagStringDefault ("labels.totalStack", "SM"));
  TH1* hTotalSig = TQHistogramUtils::copyHistogram(hMaster,"totalSig");
  hTotalSig->SetTitle(tags.getTagStringDefault ("labels.totalSig", "H#rightarrowWW#rightarrowl#nul#nu"));

  // reset the histogram, because it is a clone of any of the subprocess
  // histograms and we are only interested in the the binning. Reset() resets
  // bin content and errors.
  hTotalStack->Reset();
  hTotalSig->Reset();

  // sum all background contributions by hand and (in the same step) check
  // whether there is any background process to be plotted. If so, the SM
  // background histogram will be shown (including the entry in the legend).
  bool hasTotalBkg = false;
  TString stackFilter = tags.getTagStringDefault ("style.stackFilter","" );
  TQTaggableIterator itr_bkg(this->fProcesses);
  while(itr_bkg.hasNext()){
    TQNamedTaggable* process = itr_bkg.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isBackground",false)) continue;
    TH1 * h = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    if(!h) continue;
    if (!stackFilter.IsNull()) {
      TString title = h->GetTitle();
      if (!stackFilter.Contains(title))
        continue;
    }
    hTotalStack->Add(h);
    hasTotalBkg = true;
  }

  TH1* hTotalBkg = NULL;
  if(hTotalStack){
    hTotalBkg = TQHistogramUtils::copyHistogram(hTotalStack,"totalBkg");
    hTotalBkg->SetDirectory(NULL);
    this->addObject(hTotalBkg);
  }

  // If stacking signal, add it to total background so that it shows up as a
  // part of the ratio
  bool hasTotalSig = false;
  bool stackSignal = tags.getTagBoolDefault ("style.stackSignal",false);
  if (hTotalStack) {
    TQTaggableIterator itr_sig(this->fProcesses);
    while(itr_sig.hasNext()){
      TQNamedTaggable* process = itr_sig.readNext();
      if(!process) continue;
      if(!process->getTagBoolDefault(".isSignal",false)) continue;
      TH1 * h = this->getObject<TH1>(this->makeHistogramIdentifier(process));
      if(!h) continue;
      if(process->getTagBoolDefault("stack",stackSignal)){
        hTotalStack->Add(h);
        hasTotalSig = true;
      } else {
        hTotalSig->Add(h);
        hasTotalSig = true;
      }
    }
  }

  if(hTotalStack && !hasTotalBkg){
    this->removeObject("totalStack",true);
  }

  if(hTotalSig && !hasTotalSig){
    this->removeObject("totalSig",true);
  }

  //////////////////////////////////////////////////////
  // systematics handling
  //////////////////////////////////////////////////////

  if(tags.hasTag("errors.totalBkgSys")){
    tags.setTagString("errors.showSys",tags.getTagStringDefault("errors.totalBkgSys",""));
  }

  if(tags.getTagBoolDefault("errors.drawSysMC",false ) || tags.getTagBoolDefault("errors.drawAsymmSysMC", false)){
    // the "old" way
    this->includeSystematicsLegacy(tags,aliases);
  }
  if(tags.hasTag("errors.showSys")){
    // the "new" way
    this->sysOk = this->includeSystematics(tags);
  }

  //////////////////////////////////////////////////////
  // rebinning options
  //////////////////////////////////////////////////////

  if(this->getNProcesses(".isData") == 0 || !hasTotalBkg) tags.setTagBool("style.showSub",false);

  return histos;
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::stackHistograms(TQTaggable& tags, const TString& stackname){
  // create the histogram stack
  //@tag: normalize: TODO what exactly does this tag do? Default: false
  bool normalize = tags.getTagBoolDefault("normalize",false );
  //@tag:normalizeWithoutOverUnderflow: disable using underflow and overflow for normalization purposes
  bool normalizeWithoutOverUnderflow = !tags.getTagBoolDefault("normalizeWithoutOverUnderflow",false );
  TString stackFilter = tags.getTagStringDefault ("style.stackFilter","");
  TH1* hTotalStack = this->getObject<TH1>("totalStack");

  // scale to normalize total background
  double totalStackScale = TQHistogramUtils::getIntegral(hTotalStack, normalizeWithoutOverUnderflow);
  if (hTotalStack && normalize) {
    if (totalStackScale != 0.)
      hTotalStack->Scale(1. / totalStackScale);
  }

  // the list of histograms to be stacked
  TObjArray * histStackList = new TObjArray();
  TObjArray * processStackList = new TObjArray();
  TQTaggableIterator itr(this->fProcesses);
  while(itr.hasNext()){
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(    (process->getTagBoolDefault(".isBackground",false) && process->getTagBoolDefault("stack", true))   // background
        || (process->getTagBoolDefault(".isSignal",false) &&  tags.getTagBoolDefault ("style.autoStackSignal",false)) // signal
           ){
      TH1 * h = this->getObject<TH1>(this->makeHistogramIdentifier(process));
      if (!h) continue;
      if (!stackFilter.IsNull()) {
        TString title = h->GetTitle();
        if (!stackFilter.Contains(title))
          continue;
      }
      if(totalStackScale > 0 && normalize){
        h->Scale(1. / totalStackScale);
      }
      histStackList->Add(h);
      processStackList->Add(process);
    } else if (totalStackScale > 0 && normalize) {
      //also normalize non-stacked histograms such that their integral matches the normalized stack ("totalBackground")
      TH1 * h = this->getObject<TH1>(this->makeHistogramIdentifier(process));
      if (TQHistogramUtils::getIntegral(h, normalizeWithoutOverUnderflow) > 0) h->Scale(1/TQHistogramUtils::getIntegral(h, normalizeWithoutOverUnderflow));
    }
  }

  // sort the histograms to be stacked by ascending integral (sum of weights)
  if (!tags.getTagBoolDefault("style.manualStacking",false) && tags.getTagBoolDefault("style.autoStack",tags.getTagBoolDefault("style.logScale",false))){
    for (int iHist = 0; iHist < histStackList->GetEntries(); iHist++) {
      int iHistMin = iHist;
      double intMin = ((TH1*)histStackList->At(iHistMin))->GetSumOfWeights();
      for (int iHist2 = iHist + 1; iHist2 < histStackList->GetEntries(); iHist2++) {
        double intMin2 = ((TH1*)histStackList->At(iHist2))->GetSumOfWeights();
        if (intMin2 < intMin) {
          iHistMin = iHist2;
          intMin = intMin2;
        }
      }
      if (iHistMin != iHist) {
        TH1 * temp = (TH1*)(*histStackList)[iHist];
        (*histStackList)[iHist] = (*histStackList)[iHistMin];
        (*histStackList)[iHistMin] = temp;
        TQNamedTaggable * temptag = (TQNamedTaggable*)(*processStackList)[iHist];
        (*processStackList)[iHist] = (*processStackList)[iHistMin];
        (*processStackList)[iHistMin] = temptag;
      }
    }
  }

  // create the stack
  THStack * stack = new THStack(stackname, tags.getTagBoolDefault("style.stackSignal",false) ? "Signal+Background Stack" : "Background Stack");

  // add the histograms to the stack (following the order in the histStackList)
  if (tags.getTagBoolDefault ("style.reverseStacking",false )) {
    for (int iHist = histStackList->GetEntries(); iHist >= 0 ; iHist--){
      TH1* h = dynamic_cast<TH1*>(histStackList->At(iHist));
      stack->Add(h);
    }
  } else {
    for (int iHist = 0; iHist < histStackList->GetEntries(); iHist++){
      TH1* h = dynamic_cast<TH1*>(histStackList->At(iHist));
      stack->Add(h);
    }
  }

  // the histStackList was only a vehicle for an easy implementation of the loop
  delete histStackList;
  delete processStackList;

  TQTaggableIterator sitr(this->fProcesses);
  bool stackSignal = tags.getTagBoolDefault ("style.stackSignal",false);
  if (tags.getTagBoolDefault ("style.autoStackSignal",false)) stackSignal = false;
  if(hTotalStack){
    while(sitr.hasNext()){
      TQNamedTaggable* process = sitr.readNext();
      if(!process) continue;
      if(!process->getTagBoolDefault(".isSignal",false)) continue;
      TH1 * h = this->getObject<TH1>(this->makeHistogramIdentifier(process));
      if(!h) continue;
      if(totalStackScale > 0 && process->getTagBoolDefault("normalizeToTotalBkg",false) && !normalize){ //don't scale again if everything was already normalized to unity (see above)
        //@tag:normalizeToTotalBkg: process tag to normalize individual signal contributions to the total background
        h->Scale(totalStackScale / TQHistogramUtils::getIntegral(h));
      }
      if (process->getTagBoolDefault("stack", stackSignal)){
        stack->Add(h);
      }
    }
  }

  this->addObject(stack,stackname);
}

//__________________________________________________________________________________|___________

TCanvas * TQHWWPlotter::makePlot(TQTaggable& tags) {
  // master-function controlling the plotting
  bool verbose = tags.getTagBoolDefault("verbose",false);

  if(verbose) VERBOSEclass("entering function");
  TString lepch;

  TString histogram = tags.getTagStringDefault("input.histogram");

  TString histname_data = "";
  TString histname_bkg = "";
  TString histname_sig = "";
  if(histogram.First('=') != kNPOS){
    TQTaggable names(histogram);
    names.getTagString("bkg",histname_bkg);
    names.getTagString("sig",histname_sig);
    names.getTagString("data",histname_data);
    if(histname_bkg.IsNull()) getTagString("sig" ,histname_bkg);
    if(histname_bkg.IsNull()) getTagString("data",histname_bkg);
    if(histname_bkg.IsNull()) return NULL;
    if(histname_data.IsNull()) histname_data = histname_bkg;
    if(histname_sig.IsNull()) histname_sig = histname_bkg;
    names.getTagString("lepch",lepch);
    names.getTagString("channel",lepch);
    histogram = "";
    //@tag:.isSignal: process tag to identify signal
    if(this->getNProcesses(".isSignal") > 0) histogram+="sig:"+histname_sig+",";
    //@tag:.isBackground: process tag to identify background
    if(this->getNProcesses(".isBackground") > 0) histogram+="bkg:"+histname_bkg+",";
    //@tag:.isData: process tag to identify data
    if(this->getNProcesses(".isData") > 0) histogram+="data:"+histname_data+",";
    TQStringUtils::removeTrailing(histogram,",");
  } else {
    lepch = TQStringUtils::readPrefix(histogram, ":", "?");
    histname_bkg = histogram;
    histname_sig = histogram;
    histname_data = histogram;
  }

  gStyle->SetOptStat(false);
  gStyle->SetOptFit(false);
  gStyle->SetOptTitle(false);

  //@tag:[input.bkg]: overwrite the sample folder path used for background
  //@tag:[input.sig]: overwrite the sample folder path used for signal
  //@tag:[input.data]: overwrite the sample folder path used for data
  //@tag:[input.lepch,input.chname]: overwrite the lepton channel used (deprecated, use 'input.channel' instead)
  //@tag:[input.channel]: overwrite the channel
  //@tag:[input.sys]: choose the path from which to read the systematics

  tags.getTagString("input.lepch", lepch);
  tags.getTagString("input.channel", lepch); //this takes precedence over the deprecated 'lepch'
  tags.setTagString("input.channel", lepch);
  tags.setTagString("input.chname",lepch == "?" ? "all" : lepch);
  tags.setTagString("input.name",histogram);
  tags.setTagString("input.bkg", histname_bkg);
  tags.setTagString("input.data",histname_data);
  tags.setTagString("input.sig", histname_sig);

  tags.setTagString("input.sys", histname_bkg);

  if(verbose) VERBOSEclass("bkg: %s",histname_bkg.Data());
  if(verbose) VERBOSEclass("sig: %s",histname_sig.Data());
  if(verbose) VERBOSEclass("data: %s",histname_data.Data());
  if(verbose) VERBOSEclass("sys: %s",histname_data.Data());

  //////////////////////////////////////////////////////
  // obtain the histograms
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("collecting histograms");
  TObjArray* histos = this->collectHistograms(tags);
  if(!histos) return NULL;

  // @tag:style.drawData: select whether to draw data points (default:true)
  bool drawData = tags.getTagBoolDefault ("style.drawData",true);
  std::vector<TString> showDataAtCuts;
  if (drawData) {
    tags.getTag("showDataAtCuts", showDataAtCuts);
  }

  if (!drawData) {
    tags.setGlobalOverwrite(true);
    tags.setTagBool("style.showKS",false);
    tags.setTagBool("style.showRatio",false);
    tags.setTagBool("style.showDoverB",false);
    tags.setTagBool("style.showDminusB",false);
    tags.setTagBool("style.showSignificance",false);
    tags.setGlobalOverwrite(false);
  }
  
  TQTH1Iterator histitr(histos);
  int nEntries = 0;
  bool is2D = false;
  bool isTProfile = false;
  while(histitr.hasNext()){
    TH1* hist = histitr.readNext();
    nEntries += hist->GetEntries();
    if(dynamic_cast<TH2*>(hist)) is2D=true;
    if(dynamic_cast<TProfile*>(hist)) isTProfile=true;
  }
  if(nEntries < 1){
    WARNclass("refusing to plot histogram '%s' - no entries!",histogram.Data());
    return NULL;
  }

  //////////////////////////////////////////////////////
  // the ratio plot can only be shown if there is a valid
  // data histogram and at least one MC background histogram
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("sanitizing tags");

  // @tag:style.overrideTotalBkgRequirement: usually, 1D plots without background are skipped. force plotting data/signal only with this option.
  bool overrideTotalBkgRequirement = tags.getTagBoolDefault("style.overrideTotalBkgRequirement", is2D);

  TH1* hTotalStack = this->getObject<TH1>("totalStack");
  if ((!hTotalStack || hTotalStack->GetEntries() <= 0) && !overrideTotalBkgRequirement){
    if(verbose) VERBOSEclass("no total background histogram found, quitting");
    return NULL;
  }
  TH1* hMaster = this->getObject<TH1>("Graph_master");
  if (!hMaster){
    if(verbose) VERBOSEclass("no master histogram found, quitting");
    return NULL;
  }

  /*@tag:[style.showRatio,style.showSignificance,style.showDoverB,style.showDminusB,style.showDminusBoverD,style.showOptScan,style.showCustom]

    control what is shown in the sub-plot. all of these default to 'false', only showing the main plot.
    if any of these are set to true, the corresponding sub plot is shown. only one sub plot can be shown at a time.

    style.showRatio: show the ratio between data and signal+bkg
    style.showMultiRatio: show the ratio between pairs of data and background processes in order of adding
    style.showSignificance: show the poisson significance of the data over the background in each  bin
    style.showDoverB: show the ratio between data and background
    style.showDminusB: show the difference between data and background
    style.showDminusBoverD: show the the ratio between the data-bkg (signal estimate) and the data
    style.showOptScan: show an optimization scan. several figure-of-merit (FOM) options are supported via optScan.FOMmode and optScan.FOMbbb
    style.showCustom, style.ratioFormula: customized subplot. can be controlled with style.ratioFormula
   */
  bool showPull = tags.getTagBoolDefault ("style.showPull",false);
  bool showMultiRatio = tags.getTagBoolDefault ("style.showMultiRatio",false);
  bool showSignificance = tags.getTagBoolDefault ("style.showSignificance",false);
  bool showDoverB = tags.getTagBoolDefault ("style.showDoverB",false) ||  tags.getTagBoolDefault ("style.showRatio",false);
  bool showDminusB = tags.getTagBoolDefault ("style.showDminusB",false);
  bool showDminusBoverD = tags.getTagBoolDefault ("style.showDminusBoverD",false);
  bool showOptScan = tags.getTagBoolDefault ("style.showOptScan",false);
  bool showCustom = tags.getTagBoolDefault ("style.showCustom",false) && tags.hasTagString("style.ratioFormula") ;
  bool showUnitNorm = tags.getTagBoolDefault ("style.showUnitNorm", false);
  int nDim = tags.getTagIntegerDefault("style.nDim",1);
  if(nDim != 1){
    showPull = false;
    showMultiRatio = false;
    showDoverB = false;
    showSignificance = false;
    showDminusB = false;
    showDminusBoverD = false;
    showOptScan = false;
    showCustom = false;
    tags.setTagBool("style.showTotalBkg",false);
  }

  if(showSignificance || showDoverB || showOptScan || showDminusB || showDminusBoverD || showCustom || showMultiRatio || showPull || showUnitNorm){
    tags.setGlobalOverwrite(true);
    tags.setTagBool("style.showSub",true);
    tags.setGlobalOverwrite(false);
  } else {
    tags.setTagBool("style.showSub",false);
  }

  //////////////////////////////////////////////////////
  // set and apply the style
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("applying style");
  bool newPlotStyle = tags.getTagBoolDefault ("style.newPlotStyle", false);
  tags.setGlobalOverwrite(false);
  if (newPlotStyle){
    this->setStyleIllinois(tags);
  } else {
    this->setStyle(tags);
  }

  double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);
  //@tags:[geometry.main.*] control geometry parameters of the main pad
  this->applyGeometry(tags,hMaster, "main", xscaling,tags.getTagDoubleDefault("geometry.main.scaling",1.));
  this->applyStyle (tags,hMaster, "main", xscaling,tags.getTagDoubleDefault("geometry.main.scaling",1.));
  this->applyStyle (tags,hTotalStack,"main.totalStack",xscaling,tags.getTagDoubleDefault("geometry.main.scaling",1.));

  //////////////////////////////////////////////////////
  // canvas and pads
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("creating canvas");
  TCanvas * canvas = this->createCanvas(tags);
  if(!canvas) return NULL;
  canvas->Draw();
  TPad* pad = this->getPad("main");
  if(!pad){
    delete canvas;
    return NULL;
  }
  canvas->cd();

  //////////////////////////////////////////////////////
  // legend
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("creating legend");
  if(tags.getTagBoolDefault("style.useLegendPad",false)){
    canvas->cd();
    TPad * legendPad = this->createPad(tags,"legend");
    legendPad->Draw();
    this->getPad("legend");
    if(!legendPad) return NULL;
    this->makeLegend(tags,histos);
  } else {
    this->makeLegend(tags,histos);
  }
  //create the legend before the stack! (stack creation also involves normalization, i.e., after the stack is created we don't have the original event yields at hand anymore!)
  //////////////////////////////////////////////////////
  // create the stack
  //////////////////////////////////////////////////////

  if(hTotalStack && nDim == 1){
    if(verbose) VERBOSEclass("stacking histograms");
    this->stackHistograms(tags,"stack");
  }

  //////////////////////////////////////////////////////
  // basic label setup
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("setting labels");
  TString label;
  tags.setGlobalOverwrite(true);

  int labelidx = 0;
  if (tags.getTagString("labels.lumi", label)){
    labelidx++;
    tags.setTagString(TString::Format("labels.%d",labelidx), label);
  }
  if (tags.getTagString("labels.process", label)){
    labelidx++;
    tags.setTagString(TString::Format("labels.%d",labelidx), label);
  }

  //////////////////////////////////////////////////////
  // calculate advanced labels
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("calculating tests and other labels");

  if(hTotalStack){
    if(tags.getTagBoolDefault("style.showBkgRMS",false)){
      if(verbose) VERBOSEclass("calculating total background RMS");
      double RMS = hTotalStack->GetRMS();
      tags.setTagString(TString::Format("labels.%d",labelidx),TString::Format("#font[72]{RMS(%s) = %g}", hTotalStack->GetTitle(), RMS));
      labelidx++;
    }
    TQTaggableIterator itr(fProcesses);
    while(itr.hasNext()){
      // get the data histogram
      TQNamedTaggable* process = itr.readNext();
      if(!process) continue;
      if(!process->getTagBoolDefault(".isData",false)) continue;
      TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(process));
      if(!h_data || h_data->GetEntries() == 0) continue;
      if(tags.getTagBoolDefault ("style.showKS",false)){
        if(verbose) VERBOSEclass("calculating KS test for '%s'",h_data->GetTitle());
        float ks = std::numeric_limits<double>::quiet_NaN();
        if(h_data->GetEntries() > 0 && hTotalStack->GetEntries() > 0 && h_data->Integral() > 0 && hTotalStack->Integral() > 0){
          ks = hTotalStack->KolmogorovTest(h_data);
        }
        TString id = TString::Format("labels.%d",labelidx);
        if(TQUtils::isNum(ks)){
          float roundedKS = (float) int(ks*10000.+0.5)/10000.;
          tags.setTagString(id,TString::Format("#color[2]{#font[72]{KS Prob = %2.1f%%}}", roundedKS*100.));
        } else {
          tags.setTagString(id,"#color[2]{#font[72]{KS Prob = N.A.}}");
        }
        labelidx++;
      }
      if(tags.getTagBoolDefault ("style.showChi2",false)){
        if(verbose) VERBOSEclass("calculating Chi2 test for '$s'",h_data->GetTitle());
        Double_t chi2 = 0;
        Int_t ndf = 0, igood = 0;
        TH1F* h_data_tmp = (TH1F*) h_data->Clone("h_data_tmp");
        TH1F* hTotalStack_tmp = (TH1F*) hTotalStack->Clone("hTotalStack_tmp");
        double maxSanitization = 0.;
        if (tags.getTagDouble("style.chi2.maxSanitization",maxSanitization)) {
          for(int i_tmp=1;i_tmp<=h_data_tmp->GetNbinsX()+1;i_tmp++){
            if( h_data_tmp->GetBinContent(i_tmp)==0 && hTotalStack_tmp->GetBinContent(i_tmp)<maxSanitization ){
              hTotalStack_tmp->SetBinContent(i_tmp, 0);
              hTotalStack_tmp->SetBinError(i_tmp, 0);
            }
            if( hTotalStack_tmp->GetBinContent(i_tmp)==0 && h_data_tmp->GetBinContent(i_tmp)<maxSanitization ){
              h_data_tmp->SetBinContent(i_tmp, 0);
              h_data_tmp->SetBinError(i_tmp, 0);
            }
          }
        }
        double prob = h_data_tmp->Chi2TestX(hTotalStack_tmp,chi2,ndf,igood,"UW UF OF");
        float roundedChi2Prob = (float) int(prob*10000.+0.5)/10000.;
        tags.setTagString(TString::Format("labels.%d",labelidx),TString::Format("#color[2]{#font[72]{Chi2 Prob = %2.1f%%}}", roundedChi2Prob*100.));
        labelidx++;
        delete h_data_tmp;
        delete hTotalStack_tmp;
      }
      if(tags.getTagBoolDefault ("style.showChi2P",false)){
        TH1F* h_data_tmp = (TH1F*) h_data->Clone("h_data_tmp");
        TH1F* hTotalStack_tmp = (TH1F*) hTotalStack->Clone("hTotalStack_tmp");
        double maxSanitization = 0.;
        if (tags.getTagDouble("style.chi2.maxSanitization",maxSanitization)) {
          for(int i_tmp=1;i_tmp<=h_data_tmp->GetNbinsX()+1;i_tmp++){
            if( h_data_tmp->GetBinContent(i_tmp)==0 && hTotalStack_tmp->GetBinContent(i_tmp)<maxSanitization ){
              hTotalStack_tmp->SetBinContent(i_tmp, 0);
              hTotalStack_tmp->SetBinError(i_tmp, 0);
            }
            if( hTotalStack_tmp->GetBinContent(i_tmp)==0 && h_data_tmp->GetBinContent(i_tmp)<maxSanitization ){
              h_data_tmp->SetBinContent(i_tmp, 0);
              h_data_tmp->SetBinError(i_tmp, 0);
            }
          }
        }
        double p_value = h_data_tmp->Chi2Test(hTotalStack_tmp,"UW UF OF");
        tags.setTagString(TString::Format("labels.%d",labelidx),TString::Format("#color[2]{#font[72]{#chi^{2} p-value = %f}}", p_value));
        labelidx++;
        delete h_data_tmp;
        delete hTotalStack_tmp;

      }
      if(tags.getTagBoolDefault ("style.showDataRMS",false)){
        if(verbose) VERBOSEclass("calculating RMS for '$s'",h_data->GetTitle());
        double RMS = h_data->GetRMS();
        tags.setTagString(TString::Format("labels.%d",labelidx),TString::Format("#color[2]{#font[72]{RMS(%s) = %2.1f%%}}", h_data->GetTitle(),RMS));
        labelidx++;
      }
    }
  } else {
    if(verbose) VERBOSEclass("no total background histogram found!");
  }


  //////////////////////////////////////////////////////
  // manage the total background error bars
  //////////////////////////////////////////////////////

  this->setErrors(tags,"totalBkg");

  tags.setGlobalOverwrite(false);

  //////////////////////////////////////////////////////
  // draw main pad
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("drawing main pad");
  if(isTProfile){
    this->drawProfiles(tags);
    this->drawLegend(tags);
  } else if(nDim == 1){
    if(!tags.getTagBoolDefault("allow1D",true))	return NULL;
    bool ok = this->drawStack(tags);
    if(!ok){
      return NULL;
    }
    this->drawLegend(tags);
    if(verbose) VERBOSEclass("drawing cut lines");
    this->drawCutLines1D(tags);
  } else if(nDim == 2){
    if(!tags.getTagBoolDefault("allow2D",true)) return NULL;
    if(tags.hasTagString("style.heatmap")){
      this->drawHeatmap(tags);
    } else if (tags.hasTagString("style.migration")){
      this->drawMigration(tags);
    } else if (tags.hasTagString("style.scatter")) {
      this->drawScatter(tags);
      this->drawLegend(tags);
    } else {
      this->drawContours(tags);
      this->drawLegend(tags);
    }
    if(verbose) VERBOSEclass("drawing decorations");
    this->drawAdditionalAxes(tags);
    this->drawHeightLines(tags);
  } else {
    ERRORclass("unsupported dimensionality (nDim=%d)!",nDim);
    return NULL;
  }

  //////////////////////////////////////////////////////
  // do some advanced magic
  //////////////////////////////////////////////////////

  TString fit;
  if(hTotalStack && nDim == 1 && tags.getTagString("totalStackFit.function",fit)){
    TFitResultPtr p = hTotalStack->Fit(fit,"Q");
    TF1* func = dynamic_cast<TF1*>(hTotalStack->GetListOfFunctions()->Last());
    if(func){
      func->SetLineColor(tags.getTagIntegerDefault("totalStackFit.color",kRed));
      func->SetLineStyle(tags.getTagIntegerDefault("totalStackFit.style",1));
      func->Draw("SAME");
      if(tags.getTagBoolDefault("totalStackFit.showResults",true)){
        TString info = "";
        for(Int_t i=0; i<func->GetNpar(); ++i){
          TString name = func->GetParName(i);
          tags.getTagString(TString::Format("totalStackFit.parameter.%d.name",i),name);
          double val = func->GetParameter(i);
          double uncertainty = func->GetParError(i);
          tags.setTagString(TString::Format("labels.%d",labelidx),TString::Format("%s = %g #pm %g",name.Data(),val,uncertainty));
          labelidx++;
        }
      }
    }
  }

  // Check we're meant to draw data for this cut.
  TString histogramTag = tags.getTagStringDefault("input.histogram", "");
  TString cutName(histogramTag(0, histogramTag.First('/')));
  bool drawDataThisCut = (showDataAtCuts.size() == 0);  
  if (std::find(showDataAtCuts.begin(), showDataAtCuts.end(), cutName) != showDataAtCuts.end()) {
    drawDataThisCut = true;
  }

  if (drawData && drawDataThisCut) {
    if(verbose) VERBOSEclass("fitting data slopes");
    TQTaggableIterator itr_data(fProcesses);
    while(itr_data.hasNext()){
      TQNamedTaggable* process = itr_data.readNext();
      if(!process) continue;
      if(!process->getTagBoolDefault(".isData",false)) continue;
      TH1 * h = this->getObject<TH1>(this->makeHistogramIdentifier(process));
      if(!h) continue;
      if(tags.getTagBoolDefault("style.data.fitSlope",false)){
        double fitSlopeXmin = tags.getTagDoubleDefault("style.data.fitSlope.xmin",hMaster->GetXaxis()->GetXmin());
        double fitSlopeXmax = tags.getTagDoubleDefault("style.data.fitSlope.xmax",hMaster->GetXaxis()->GetXmax());
        h->Fit("pol1","QG","", fitSlopeXmin, fitSlopeXmax);
        TF1* f = h->GetFunction("pol1");
        f->SetName(TString::Format("%s_fit",h->GetName()));
        //      this->addObject(f);
        f->SetLineColor(h->GetMarkerColor());
        f->SetLineWidth(tags.getTagIntegerDefault("style.data.fitSlope.lineWidth",1));
        f->SetLineStyle(tags.getTagIntegerDefault("style.data.fitSlope.lineStyle",2));
        //@tag:style.data.fitSlope.exportResults: export the fit results as tags on the plotter
        if (tags.getTagBoolDefault("style.data.fitSlope.exportResults",false)) {
          this->setTagDouble(TString::Format("export.fitSlope.%s.slope",h->GetName()),f->GetParameter(1));
          this->setTagDouble(TString::Format("export.fitSlope.%s.slopeError",h->GetName()),f->GetParError(1));
          this->setTagDouble(TString::Format("export.fitSlope.%s.chi2",h->GetName()),f->GetChisquare());
        }
        if (tags.getTagBoolDefault("style.data.fitSlope.printResults",true)) {
          double slope = TQUtils::roundAuto(f->GetParameter(1));
          double slopeErr = TQUtils::roundAuto(f->GetParError(1));
          double chi2 = TQUtils::roundAuto(f->GetChisquare());
          h->SetTitle(TString::Format("%s (slope #approx %g #pm %g with #chi^{2}/NDF#approx%g)",h->GetTitle(),slope,slopeErr,chi2/f->GetNDF()));
        }
      }
    }
  }


  //////////////////////////////////////////////////////
  // draw the labels
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("drawing labels");
  this->setAxisLabels(tags);
  this->drawLabels(tags);

  //////////////////////////////////////////////////////
  // redraw main pad
  //////////////////////////////////////////////////////

  if(verbose) VERBOSEclass("refreshing drawing area");
  pad->RedrawAxis();
  pad->Update();
  pad->cd();

  //////////////////////////////////////////////////////
  // draw sub pad
  //////////////////////////////////////////////////////

  if(tags.getTagBoolDefault("style.showSub",false)){
    if(verbose) VERBOSEclass("drawing subplot");
    canvas->cd();

    TPad* subPad = this->getPad("sub");
    if(!subPad){
      throw std::runtime_error("unable to obtain sub pad!");
    }
    subPad->cd();

    if (showDoverB){
      if(verbose) VERBOSEclass("drawing ratio");
      this->drawRatio(tags);
    } else if(showPull){
      if(verbose) VERBOSEclass("drawing pull");
      this->drawPull(tags);
    } else if(showMultiRatio){
      if(verbose) VERBOSEclass("drawing multi ratio");
      this->drawMultiRatio(tags);
    } else if(showSignificance){
      if(verbose) VERBOSEclass("drawing significance");
      this->drawSignificance(tags);
    } else if(showOptScan){
      if(verbose) VERBOSEclass("drawing optimization scan");
      this->drawOptScan(tags);
    } else if(showDminusB){
      if(verbose) VERBOSEclass("drawing data minus background");
      this->drawDataMinusBackground(tags);
    } else if(showDminusBoverD){
      if(verbose) VERBOSEclass("drawing data minus background over data");
      this->drawDataMinusBackgroundOverData(tags);
    } else if(showCustom) {
      if(verbose) VERBOSEclass("drawing custom subplot");
      this->drawCustomSubPlot(tags);
    } else if(showUnitNorm) {
      if(verbose) VERBOSEclass("drawing unit norm subplot");
      this->drawUnitNormSubPlot(tags);
    }
    subPad->RedrawAxis();
    subPad->Update();
    subPad->cd();
  }

  if(verbose) VERBOSEclass("all done!");
  // return the canvas
  return canvas;
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawLabels(TQTaggable& tags){
  // draw the labels given by the tags
  bool drawlabels = tags.getTagBoolDefault("style.showLabels",true);
  double scaling = tags.getTagDoubleDefault("geometry.main.scaling",1.);
  double textsize = tags.getTagDoubleDefault("style.textSize",DEFAULTTEXTSIZE);
  int font = tags.getTagDoubleDefault("style.text.font",42);
  int color = tags.getTagDoubleDefault("style.text.color",1);
  double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);

  double x = tags.getTagDoubleDefault("style.labels.xOffset",0.2)*xscaling;

  double y = tags.getTagDoubleDefault("style.labels.yPos",0.86 - tags.getTagDoubleDefault("geometry.main.additionalTopMargin",0.));

  //@tag:labels.drawATLAS: decide whether to draw the 'ATLAS' label
  bool drawATLAS = tags.getTagBoolDefault ("labels.drawATLAS",drawlabels);

  TString nfLabel = "";
  //@tag:labels.drawNFInfo: decide whether to draw information on which NFs were applied
  if(tags.getTagBoolDefault ("labels.drawNFInfo",false)){
    TString tmpLabel = tags.getTagStringDefault("labels.nfInfo","#color[2]{(NF applied for %s)}");
    if(TQStringUtils::countText(tmpLabel,"%s") == 1){
      TString nflist = this->getScaleFactorList(tags.getTagStringDefault("input.bkg",""));
      if(!nflist.IsNull()){
        nfLabel = TString::Format(tmpLabel.Data(),TQStringUtils::convertLaTeX2ROOTTeX(nflist).Data());
      }
    }
  }

  //@tag:labels.drawInfo: decide whether to draw the technical info tag on the top right of the plot
  TString infoLabel = tags.getTagBoolDefault ("labels.drawInfo",drawlabels) ? tags.getTagStringDefault ("labels.info",TString::Format("Plot: \"%s\"", tags.getTagStringDefault("input.name","histogram").Data())) : "";
  //@tag:labels.atlas: which ATLAS label to use (Private, work in progress, Internal, Preliminary, ... - default:'Private')
  TString atlasLabel = tags.getTagStringDefault ("labels.atlas","Private");
  TString stickerLabel = tags.getTagStringDefault ("labels.sticker","");

  if (drawATLAS) {
    // draw the ATLAS label
    TLatex l;
    l.SetNDC();
    l.SetTextFont(72);
    //@tag:labels.drawATLAS.scale: scale of the ATLAS label. Defaults to the scale set by 'labels.atlas.scale' or 1.25 if neither of the two tags are present
    l.SetTextSize(textsize * tags.getTagDoubleDefault("labels.drawATLAS.scale",tags.getTagDoubleDefault("labels.atlas.scale",1.25)) * scaling);
    l.SetTextColor(1);
    //@tag:labels.drawATLAS.text: text of the ATLAS tag (default: ATLAS)
    l.DrawLatex(x, y, tags.getTagStringDefault("labels.drawATLAS.text","ATLAS"));
  }

  if (drawATLAS && !atlasLabel.IsNull()){
    // draw the ATLAS label addition
    TLatex p;
    p.SetNDC();
    p.SetTextFont(font);
    p.SetTextColor(color);
    //@tag:labels.atlas.scale: scale of the addition to the ATLAS label (Internal, Private,...). Defaults to the scale set by 'labels.drawATLAS.scale' or 1.25 if neither of the two tags are present
    p.SetTextSize(textsize * tags.getTagDoubleDefault("labels.atlas.scale",tags.getTagDoubleDefault("labels.drawATLAS.scale",1.25)) * scaling);
    //@tag:labels.atlas.xOffset : horizontal offset between ATLAS label and its addition. (default: 0.16)
    p.DrawLatex(x + tags.getTagDoubleDefault("labels.atlas.xOffset",0.16)*xscaling, y, atlasLabel.Data());
  }

  if (!infoLabel.IsNull()){
    // draw the info label
    if(!nfLabel.IsNull()){
      infoLabel.Prepend(" ");
      infoLabel.Prepend(nfLabel);
    }
    TLatex l0;
    l0.SetNDC();
    l0.SetTextFont(font);
    bool newPlotStyle = tags.getTagBoolDefault ("style.newPlotStyle", false);
    if (newPlotStyle)
      l0.SetTextSize(textsize * tags.getTagDoubleDefault("labels.info.size",0.6) * scaling * 0.7);
    else
      l0.SetTextSize(textsize * tags.getTagDoubleDefault("labels.info.size",0.6) * scaling);
    l0.SetTextColor(color);
    double xpos = tags.getTagDoubleDefault("geometry.main.margins.left",0.16) + tags.getTagDoubleDefault("labels.info.xPos",1.)*(1. - tags.getTagDoubleDefault("geometry.main.margins.right",0.05) - tags.getTagDoubleDefault("geometry.main.margins.left",0.16));
    double ypos = 1. - scaling*(1.-tags.getTagDoubleDefault("labels.info.yPos",0.2))*tags.getTagDoubleDefault("geometry.main.margins.top",0.05);
    l0.SetTextAlign(tags.getTagIntegerDefault("labels.info.align",31));
    l0.DrawLatex(xpos, ypos, infoLabel.Data());
  }

  // draw  labels
  double marginStep = tags.getTagDoubleDefault("style.labels.marginStep",0.045);
  double labelTextScale = tags.getTagDoubleDefault("style.labels.scale",0.85);
  if(drawlabels){
    TQIterator itr(tags.getTagList("labels"),true);
    size_t index = 1;
    while(itr.hasNext()){
      TObject* obj = itr.readNext();
      if(!obj) break;
      TLatex latex;
      latex.SetNDC();
      latex.SetTextFont(font);
      latex.SetTextSize(textsize * labelTextScale * scaling);
      latex.SetTextColor(color);
      latex.DrawLatex(x, y - marginStep * index * scaling,obj->GetName());
      index++;
    }
  }

  // draw extra labels
  if(true){
    int index = 0;
    while(true){
      TString key = TString::Format("extralabels.%d",index);
      TString labeltext;
      if(!tags.getTagString(key,labeltext)){
        break;
      }
      TLatex latex;
      latex.SetNDC();
      latex.SetTextFont(font);
      latex.SetTextSize(textsize * labelTextScale * scaling);
      latex.SetTextColor(color);
      latex.DrawLatex(tags.getTagDoubleDefault(key+".x",x),
                      tags.getTagDoubleDefault(key+".y", y - marginStep * index * scaling),
                      labeltext);
      index++;
    }
  }
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawSignificance(TQTaggable& tags){
  // draw a significance plot in the sub-pad
  TString totalStackLabel = tags.getTagStringDefault ("labels.totalStack", "SM");

  TH1* hMaster = this->getObject<TH1>("Graph_master");
  TH1* hTotalStack = this->getObject<TH1>("totalStack");
  if(!hTotalStack) return;

  int nBins = hMaster->GetNbinsX();

  // loop over all histograms
  TQTaggableIterator itr(fProcesses);
  while(itr.hasNext()){
    // get the data histograms only
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isData",false)) continue;
    TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    if (!h_data) continue;

    // calculate the number of valid ratio points: ratio points are considered
    // valid if they have a finite value (MC prediction != 0) (--> nPoints) and
    // the observed data is greater than zero (--> nRatioPoints)
    int nPoints = 0;
    int nRatioPoints = 0;
    for (int i = 1; i <= nBins; i++) {
      if (hTotalStack->GetBinContent(i) != 0.) {
        nPoints++;
        if (h_data->GetBinContent(i) > 0)
          nRatioPoints++;
      }
    }

    if(nRatioPoints < 1){
      // there is nothing to draw -- well, let's do nothing, then
      continue;
    }

    // the graph used to draw the error band on the ratio
    TGraphAsymmErrors * significanceGraph = new TGraphAsymmErrors(nPoints);
    this->addObject(significanceGraph,TString::Format("significanceGraph_%s",h_data->GetName()));

    int iPoint = 0;

    // actual minimum and maximum ratio
    double actualSigMin = 0.;
    double actualSigMax = 0.;

    bool first = true;
    // loop over all bins of the histogram
    for (int iBin = 1; iBin <= nBins; iBin++) {

      // get the values and errors of data and MC for this bin
      double data = h_data ->GetBinContent(iBin);
      double MC = hTotalStack->GetBinContent(iBin);
      // cannot do anything if MC expectation is zero
      if (MC == 0.)
        continue;

      double sig = 0.;
      double pValue = 0.;

      // set the position and the width of the significance band
      significanceGraph->SetPoint(iPoint, hTotalStack->GetBinCenter(iBin), 0.);

      pValue = TQHistogramUtils::pValuePoisson((unsigned)data, MC);
      if (pValue < 0.5)
        sig = TQHistogramUtils::pValueToSignificance(pValue, (data > MC));

      if (sig < 0.) {
        significanceGraph->SetPointError(
                                         iPoint, hTotalStack->GetBinWidth(iBin) / 2.,
                                         hTotalStack->GetBinWidth(iBin) / 2., -sig, 0.);
      } else {
        significanceGraph->SetPointError(
                                         iPoint, hTotalStack->GetBinWidth(iBin) / 2.,
                                         hTotalStack->GetBinWidth(iBin) / 2., 0., sig);
      }

      if (sig < actualSigMin){
        actualSigMin = sig;
      }
      if (sig > actualSigMax){
        actualSigMax = sig;
      }

      // set the position and the width of the significance band
      significanceGraph->SetPoint(iPoint, hTotalStack->GetBinCenter(iBin), 0.);

      pValue = TQHistogramUtils::pValuePoisson((unsigned)data, MC);
      if (pValue < 0.5)
        sig = TQHistogramUtils::pValueToSignificance(pValue, (data > MC));

      if (sig < 0.) {
        significanceGraph->SetPointError(
                                         iPoint, hTotalStack->GetBinWidth(iBin) / 2.,
                                         hTotalStack->GetBinWidth(iBin) / 2., -sig, 0.);
      } else {
        significanceGraph->SetPointError(
                                         iPoint, hTotalStack->GetBinWidth(iBin) / 2.,
                                         hTotalStack->GetBinWidth(iBin) / 2., 0., sig);
      }

      if (sig < actualSigMin){
        actualSigMin = sig;
      }
      if (sig > actualSigMax){
        actualSigMax = sig;
      }

      iPoint++;

    }

    double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);
    double sigPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
    this->applyStyle(tags,significanceGraph,"significance",xscaling,sigPadScaling);
    this->applyGeometry(tags,significanceGraph,"main" ,xscaling,sigPadScaling);
    this->applyGeometry(tags,significanceGraph,"sub" ,xscaling,sigPadScaling);

    // set the x range of the ratio graph to match the one of the main histogram
    double xLowerLimit = hTotalStack->GetBinLowEdge(1);
    double xUpperLimit = hTotalStack->GetBinLowEdge(nBins) + hTotalStack->GetBinWidth(nBins);
    significanceGraph->GetXaxis()->SetLimits(xLowerLimit, xUpperLimit);

    // set the titles of the axis of the ratio graph
    significanceGraph->GetXaxis()->SetTitle(hTotalStack->GetXaxis()->GetTitle());

    // confine the y axis of the ratio plot
    significanceGraph->GetYaxis()->SetTitle("Significance");

    actualSigMin = TMath::Abs(actualSigMin);
    int y1 = TMath::Nint(actualSigMin);
    if (y1 < actualSigMin)
      actualSigMin = y1 + 0.5;
    else
      actualSigMin = y1;

    if (fmod(actualSigMin, 1) == 0)
      actualSigMin += 0.5;
    int y2 = TMath::Nint(actualSigMax);
    if (y2 < actualSigMax)
      actualSigMax = y2 + 0.5;
    else
      actualSigMax = y2;
    if (fmod(actualSigMax, 1) == 0)
      actualSigMax += 0.5;

    significanceGraph->GetHistogram()->SetMinimum(-actualSigMin);
    significanceGraph->GetHistogram()->SetMaximum(actualSigMax);

    // draw the ratio/significance graph
    if (first)
      significanceGraph->Draw("A2");
    else
      significanceGraph->Draw("2");

    // if 1. is included in the range of the y axis of the ratio plot...
    if ((significanceGraph->GetHistogram()->GetMinimum() <= 0.) && (significanceGraph->GetHistogram()->GetMaximum() >= 0.)) {
      // draw the red line indicating 1 in the ratio plot and around 0 in case
      // of significance
      TLine * line = new TLine(xLowerLimit, 0, xUpperLimit, 0);
      line->SetLineColor(kRed);
      line->Draw();
    }

    first = false;
  }
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawRatio(TQTaggable& tags){
  // draw a ratio-plot in the sub-pad
  double ratioMax = tags.getTagDoubleDefault ("style.ratioMax",1000.);
  double ratioMin = tags.getTagDoubleDefault ("style.ratioMin",0.);
  double ratioMaxQerr = tags.getTagDoubleDefault ("style.ratioMaxQerr",std::numeric_limits<double>::infinity());
  bool forceRatioLimits = tags.getTagBoolDefault ("style.forceRatioLimits",false );
  bool asymmStatErrorData = tags.getTagBoolDefault("style.data.asymErrors", false);
  bool verbose = tags.getTagBoolDefault("verbose",false);
  /// BW: Hashed the following two lines (unused variables)
  //bool showXErrors = tags.getTagBoolDefault("style.ratio.showXErrors", false);
  //bool showYErrors = tags.getTagBoolDefault("style.ratio.showYErrors", true);

  TString ratioDenominator = tags.getTagStringDefault("style.ratio.denominator","totalStack");
  TH1* denominator = this->getObject<TH1>(ratioDenominator);
  if(!denominator) return;

  int nBins = denominator->GetNbinsX();

  // the graph used to draw the error band on the ratio
  if(verbose) VERBOSEclass("generating ratio error graphs");

  // todo: tag documentation
  bool invertRatio = tags.getTagBoolDefault("style.invertRatio",false);

  // todo: make this a histogram, not graph
  TGraphAsymmErrors * ratioErrorGraph = getRatioErrorGraph(denominator);
  this->addObject(ratioErrorGraph);

  if(verbose) VERBOSEclass("calculating geometry and axis ranges");
  // set the x range of the ratio graph to match the one of the main histogram
  //double xLowerLimit = denominator->GetBinLowEdge(1);
  //double xUpperLimit = denominator->GetBinLowEdge(nBins) + denominator->GetBinWidth(nBins);
  double xLowerLimit;
  double xUpperLimit;
  //@tag:[style.xmin,style.xmax] Set custom x-axis range
  if (tags.getTagDouble("style.xmin", xLowerLimit) && tags.getTagDouble("style.xmax", xUpperLimit)) {
    ratioErrorGraph->GetXaxis()->SetLimits(xLowerLimit, xUpperLimit);
  }
  else {
    xLowerLimit = denominator->GetBinLowEdge(1);
    xUpperLimit = denominator->GetBinLowEdge(nBins) + denominator->GetBinWidth(nBins);
    ratioErrorGraph->GetXaxis()->SetLimits(xLowerLimit, xUpperLimit);
  }
  //ratioErrorGraph->GetXaxis()->SetLimits(xLowerLimit, xUpperLimit);
  double ratioPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
  double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1);
  this->applyStyle (tags,ratioErrorGraph,"ratio.mcErrorBand",xscaling,ratioPadScaling);
  this->applyGeometry(tags,ratioErrorGraph,"main" ,xscaling,ratioPadScaling);
  this->applyGeometry(tags,ratioErrorGraph,"sub" ,xscaling,ratioPadScaling);

  if(verbose) VERBOSEclass("drawing ratio error graph");
  ratioErrorGraph->Draw("A2");
  TH1* hMaster = this->getObject<TH1>("Graph_master");
  ratioErrorGraph->GetHistogram()->GetXaxis()->SetTitle(hMaster->GetXaxis()->GetTitle());

  TString dataLabel("");
  tags.getTagString("labels.numerator",dataLabel);
  TList* graphs = new TList();

  // actual minimum and maximum ratio
  double actualRatioMin = 1.;
  double actualRatioMax = 1.;

  if(verbose) VERBOSEclass("generating ratio graphs");
  // loop over data histograms
  TQTaggableIterator itr(fProcesses);

  //@tag:style.ratio.dropYieldsBelow: suppress points in the ratio graph where either MC or data yield are below this number
  double ratioContentThreshold = tags.getTagDoubleDefault("style.ratio.dropYieldsBelow",0.0001);

  double ratioMinAllowed = tags.getTagDoubleDefault ("style.ratioMinAllowed",ratioMin);
  double ratioMaxAllowed = tags.getTagDoubleDefault ("style.ratioMaxAllowed",ratioMax);
  actualRatioMin=ratioMinAllowed;
  actualRatioMax=ratioMaxAllowed;
  if(verbose) VERBOSEclass("drawRatio: allowed range of ratio graph: %f -- %f",actualRatioMin,actualRatioMax);

  while(itr.hasNext()){
    // get the data histogram
    DEBUGclass("next process...");
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isData",false)) continue;
    TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    if(!h_data) continue;
    if(dataLabel.IsNull()) dataLabel = h_data->GetTitle();

    if (asymmStatErrorData) {
      h_data->Sumw2(false); //only do this on data, all sum-of-squared-weights information is deleted (sqrt(n) will be used instead)
      h_data->SetBinErrorOption(TH1::kPoisson);
    }

    TGraphAsymmErrors* ratioGraph = getRatioGraph(h_data,denominator,invertRatio,ratioContentThreshold,verbose);
    if(!ratioGraph) continue;

    this->addObject(ratioGraph,TString::Format("ratioGraph_%s",h_data->GetName()));

    this->applyStyle(tags   ,ratioGraph,"sub.data",1.,ratioPadScaling);

    this->estimateRangeY(ratioGraph,actualRatioMin,actualRatioMax,ratioMaxQerr);

    if(verbose) VERBOSEclass("drawRatio: estimated range of ratio graph: %f -- %f (ratioMaxQerr=%f)",actualRatioMin,actualRatioMax,ratioMaxQerr);

    graphs->Add(ratioGraph);
  }


  if(actualRatioMin == actualRatioMax){
    if(verbose) VERBOSEclass("expanding ratio to not be empty");
    actualRatioMin *= 0.9;
    actualRatioMax *= 1.1;
  }
  if (forceRatioLimits)  actualRatioMin = ratioMin;
  else                   actualRatioMin = actualRatioMin-0.1*(actualRatioMax-actualRatioMin);

  if (forceRatioLimits)  actualRatioMax = ratioMax;
  else                   actualRatioMax = actualRatioMax+0.1*(actualRatioMax-actualRatioMin);
  if(verbose) VERBOSEclass("drawRatio: final of ratio graph: %f -- %f",actualRatioMin,actualRatioMax);
  ratioErrorGraph->GetHistogram()->SetMaximum(actualRatioMax);
  ratioErrorGraph->GetHistogram()->SetMinimum(actualRatioMin);

  TString totalStackLabel = tags.getTagStringDefault ("labels.totalStack", "SM");

  tags.getTagString("labels.data",dataLabel);
  ratioErrorGraph->GetHistogram()->GetXaxis()->SetTitle(hMaster->GetXaxis()->GetTitle());
  TString subXName = tags.getTagStringDefault("labels.axes.subX", "");
  if (subXName.Length()>0) {
    ratioErrorGraph->GetXaxis()->SetTitle(subXName);
  }
  ratioErrorGraph->GetYaxis()->SetTitle(tags.getTagStringDefault("labels.ratio",dataLabel + " / "+ tags.getTagStringDefault ("labels.totalStack", "SM") +" "));
  gStyle->SetEndErrorSize(0);

  if(verbose) VERBOSEclass("drawing lines");
  // if 1. is included in the range of the y axis of the ratio plot...
  this->applyStyle(tags,ratioErrorGraph->GetHistogram()->GetXaxis(),"sub.xAxis");
  this->applyStyle(tags,ratioErrorGraph->GetHistogram()->GetYaxis(),"sub.yAxis");
  this->applyStyle(tags,ratioErrorGraph->GetHistogram()->GetXaxis(),"sub.xAxis");
  
  if ((ratioErrorGraph->GetHistogram()->GetMinimum() <= 1) && (ratioErrorGraph->GetHistogram()->GetMaximum() >= 1.)) {
    // draw the red line indicating 1 in the ratio plot and around 0 in case of
    // significance
    TLine * line = new TLine(xLowerLimit, 1., xUpperLimit, 1.);
    line->SetLineColor(kRed);
    line->Draw();
  }


  // slope fitting for ratio plots
  double textsize = tags.getTagDoubleDefault("style.textSize",DEFAULTTEXTSIZE)* ratioPadScaling * tags.getTagDoubleDefault("style.ratio.fitSlope.printResults.textSize",0.5);
  TLatex l;
  l.SetNDC();
  l.SetTextSize(textsize);
  double fitResultPrintPosX = tags.getTagDoubleDefault("style.ratio.fitSlope.printResults.posX",0.2);
  double fitResultPrintPosY = tags.getTagDoubleDefault("style.ratio.fitSlope.printResults.posY",0.85);
  double fitResultPrintStepY = tags.getTagDoubleDefault("style.ratio.fitSlope.printResults.stepY",1.);

  TString ratioDrawStyle("SAME ");
  ratioDrawStyle.Append(tags.getTagStringDefault("style.ratio.drawOption","P e0"));

  TQGraphIterator itr2(graphs);
  while(itr2.hasNext()){
    TGraph* ratioGraph = itr2.readNext();
    if(!ratioGraph) continue;

    if(tags.getTagBoolDefault("style.ratio.fitSlope",false) && ratioGraph->GetN() > 1){
      if(verbose) VERBOSEclass("running fit on %s",ratioGraph->GetName());
      double fitSlopeXmin = tags.getTagDoubleDefault("style.ratio.fitSlope.xmin",xLowerLimit);
      double fitSlopeXmax = tags.getTagDoubleDefault("style.ratio.fitSlope.xmax",xUpperLimit);
      ratioGraph->Fit("pol1","EQF","", fitSlopeXmin, fitSlopeXmax);
      TF1* f = ratioGraph->GetFunction("pol1");
      f->SetName(TString::Format("%s_fit",ratioGraph->GetName()));
      //      this->addObject(f);
      f->SetLineColor(ratioGraph->GetLineColor());
      f->SetLineWidth(tags.getTagIntegerDefault("style.ratio.fitSlope.lineWidth",1));
      f->SetLineStyle(tags.getTagIntegerDefault("style.ratio.fitSlope.lineStyle",2));
      //@tag:style.ratio.fitSlope.printResults: print the fit results on the ratio canvas
      if (tags.getTagBoolDefault("style.ratio.fitSlope.printResults",false)) {
        l.SetTextColor(ratioGraph->GetLineColor());
        double offset = TQUtils::roundAuto(f->GetParameter(0), 3);
        double slope = TQUtils::roundAuto(f->GetParameter(1), 3);
        double slopeErr = TQUtils::roundAuto(f->GetParError(1), 3);
        double chi2 = TQUtils::roundAuto(f->GetChisquare());
        TString s = TString::Format("line #approx %g + %g * x #pm %g (#chi^{2}#approx%g)",offset, slope,slopeErr,chi2);
        l.DrawLatex(fitResultPrintPosX,fitResultPrintPosY,s);
        fitResultPrintPosY -= fitResultPrintStepY * textsize;
      }
      //@tag:style.ratio.fitSlope.exportResults: export the fit results as tags on the plotter
      if (tags.getTagBoolDefault("style.ratio.fitSlope.exportResults",false)) {
        this->setTagDouble(TString::Format("export.fitSlope.%s.slope",ratioGraph->GetName()),f->GetParameter(1));
        this->setTagDouble(TString::Format("export.fitSlope.%s.slopeError",ratioGraph->GetName()),f->GetParError(1));
        this->setTagDouble(TString::Format("export.fitSlope.%s.chi2",ratioGraph->GetName()),f->GetChisquare());
      }
    }

    ratioGraph->Draw(ratioDrawStyle);

    if(verbose) VERBOSEclass("drawing additional markers");

    this->drawArrows(tags,ratioGraph, actualRatioMin,actualRatioMax);

  }
}


//__________________________________________________________________________________|___________


void TQHWWPlotter::drawMultiRatio(TQTaggable& tags){
  // draw a ratio-plot in the sub-pad
  double ratioMax = tags.getTagDoubleDefault ("style.ratioMax",1000.);
  double ratioMin = tags.getTagDoubleDefault ("style.ratioMin",0.);
  double ratioMaxQerr = tags.getTagDoubleDefault ("style.ratioMaxQerr",std::numeric_limits<double>::infinity());
  bool forceRatioLimits = tags.getTagBoolDefault ("style.forceRatioLimits",false );
  bool verbose = tags.getTagBoolDefault("verbose",false);

  double ratioPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
  double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);

  if(verbose) VERBOSEclass("calculating geometry and axis ranges");
  TString dataLabel("");
  TList* graphs = new TList();
  // graphs->SetOwner(true);

  // actual minimum and maximum ratio
  double actualRatioMin = 1.;
  double actualRatioMax = 1.;

  if(verbose) VERBOSEclass("generating ratio graphs");
  // loop over data histograms
  TQTaggableIterator numerator_processes(fProcesses);
  TQTaggableIterator denominator_processes(fProcesses);
  TString axtitle;
  double xmin = 0;
  double xmax = 0;
  int nbins = 0;
  while(numerator_processes.hasNext() && denominator_processes.hasNext()){
    DEBUGclass(" in the loop");
    // get the data histogram
    TQNamedTaggable* denominator = NULL;
    TQNamedTaggable* numerator = NULL;
    while(!numerator &&  numerator_processes.hasNext()){
      DEBUGclass("Numinator");
      TQNamedTaggable* next = numerator_processes.readNext();
      //if(next->getTagBoolDefault(".isData",false)) data = next;
      if(next->getTagBoolDefault(".isNumerator",false)) numerator = next;
    }

    while(!denominator && denominator_processes.hasNext()){
    //while(!prediction){
      DEBUGclass(" Denominator ");
      TQNamedTaggable* next = denominator_processes.readNext();
      if(next->getTagBoolDefault(".isDenominator",false)) denominator = next;
      // if(next->getTagBoolDefault(".isSignal",false)) prediction = next;
      //if(next->getTagBoolDefault(".isBackground",false)) prediction = next;
      //prediction_processes.reset();
    }

    // TQNamedTaggable* denominator = next_1;
    if(!numerator || !denominator) continue;

    if(verbose) VERBOSEclass("drawing comparsion between %s and %s",numerator->GetName(), denominator->GetName());

    TH1 * h_numerator = this->getObject<TH1>(this->makeHistogramIdentifier(numerator));
    TH1 * h_denominator = this->getObject<TH1>(this->makeHistogramIdentifier(denominator));
    if(!h_numerator) continue;
    if(!h_denominator) continue;
    if(axtitle.IsNull()){
      axtitle = h_numerator->GetXaxis()->GetTitle();
      xmin = h_numerator->GetXaxis()->GetXmin();
      xmax = h_numerator->GetXaxis()->GetXmax();
      nbins = h_numerator->GetNbinsX();
    }

    // calculate the number of valid ratio points: ratio points are considered
    // valid if they have a finite value (MC prediction != 0) (--> nPoints) and
    // the observed data is greater than zero (--> nRatioPoints)
    int nRatioPoints = 0;
    for (int i = 1; i <= h_numerator->GetNbinsX(); i++) {
      double denVal = h_denominator->GetBinContent(i);
      double numVal = h_numerator->GetBinContent(i);
      if(denVal == 0) continue;
      if(numVal == 0) continue;
      if(!TQUtils::isNum(denVal)){
        WARNclass("encountered non-numeric denominator value: %f",denVal);
        continue;
      }
      if(!TQUtils::isNum(numVal)){
        WARNclass("encountered non-numeric numerator value: %f",numVal);
        continue;
      }
      nRatioPoints++;
    }

    if(nRatioPoints < 1){
      // there is nothing to draw -- well, let's do nothing, then
      continue;
    }

    // the graph used to draw the ratio points
    TGraphErrors * ratioGraph = new TGraphErrors(nRatioPoints);
    this->addObject(ratioGraph,TString::Format("ratioGraph_%s",h_numerator->GetName()));
    ratioGraph->SetTitle(TString::Format("%s (ratio)",h_numerator->GetTitle()));
    ratioGraph->SetLineColor(h_numerator->GetLineColor());
    ratioGraph->SetMarkerSize(h_numerator->GetMarkerSize());
    ratioGraph->SetMarkerStyle(h_numerator->GetMarkerStyle());
    ratioGraph->SetMarkerColor(h_numerator->GetMarkerColor());

    int iRatioPoint = 0;

    // loop over all bins of the histogram
    for (int iBin = 1; iBin <= h_numerator->GetNbinsX(); iBin++) {
      double x = h_denominator->GetBinCenter(iBin);
      // get the values and errors of data and MC for this bin
      double num = h_numerator ->GetBinContent(iBin);
      double numErr = h_numerator ->GetBinError (iBin);
      double den = h_denominator->GetBinContent(iBin);
      // cannot do anything if MC expectation is zero
      if (den == 0. || num <= 0.) continue;

      double ratio = num / den;
      double ratioError = ratio * numErr / num;
      if(verbose) VERBOSEclass("adding ratio point with x=%f, y=%f (numerator=%f, denominator=%f)",x,ratio,num,den);
      ratioGraph->SetPoint(iRatioPoint, x, ratio);
      ratioGraph->SetPointError(iRatioPoint, 0., ratioError);
      iRatioPoint++;
    }

    this->applyStyle(tags   ,ratioGraph,"sub.data",1.,ratioPadScaling);

    double ratioMinAllowed = tags.getTagDoubleDefault ("style.ratioMinAllowed",ratioMin);
    double ratioMaxAllowed = tags.getTagDoubleDefault ("style.ratioMaxAllowed",ratioMax);
    actualRatioMin=ratioMinAllowed;
    actualRatioMax=ratioMaxAllowed;
    if(verbose) VERBOSEclass("drawMultiRatio: allowed range of ratio graph: %f -- %f",actualRatioMin,actualRatioMax);

    this->estimateRangeY(ratioGraph,actualRatioMin,actualRatioMax,ratioMaxQerr);

    if(verbose) VERBOSEclass("drawMultiRatio: estimated range of ratio graph: %f -- %f (ratioMaxQerr=%f)",actualRatioMin,actualRatioMax,ratioMaxQerr);

    if(actualRatioMin == actualRatioMax){
      if(verbose) VERBOSEclass("expanding multi ratio to not be empty");
      actualRatioMin *= 0.9;
      actualRatioMax *= 1.1;
    }

    if (forceRatioLimits)
      actualRatioMin = ratioMin;
    else
      actualRatioMin = actualRatioMin-0.1*(actualRatioMax-actualRatioMin);

    if (forceRatioLimits)
      actualRatioMax = ratioMax;
    else
      actualRatioMax = actualRatioMax+0.1*(actualRatioMax-actualRatioMin);

    if(verbose) VERBOSEclass("drawMultiRatio: final of ratio graph: %f -- %f",actualRatioMin,actualRatioMax);

    DEBUGclass(" ratio ");
    graphs->Add(ratioGraph);
  }

  if(verbose) VERBOSEclass("built %d ratio graphs",graphs->GetEntries());

  TString label = tags.getTagStringDefault("labels.ratio","ratio");

  gStyle->SetEndErrorSize(0);

  if(verbose) VERBOSEclass("drawing graphs, range is %g < x %g",xmin,xmax);

  TQGraphErrorsIterator itr2(graphs);
  bool first = true;
  while(itr2.hasNext()){
    TGraphErrors* ratioGraph = itr2.readNext();
    if(!ratioGraph) continue;
    ratioGraph->SetMinimum(actualRatioMin);
    ratioGraph->SetMaximum(actualRatioMax);
    DEBUGclass(" in the loop iiter next");
    ratioGraph->Draw(first ? "AP" : "P SAME");
    if(first){
      ratioGraph->GetYaxis()->SetTitle(label);
      ratioGraph->GetXaxis()->SetTitle(axtitle);
      ratioGraph->GetXaxis()->Set(nbins,xmin,xmax);
      this->applyGeometry(tags,ratioGraph,"main" ,xscaling,ratioPadScaling);
      this->applyGeometry(tags,ratioGraph,"sub" ,xscaling,ratioPadScaling);
    }
    first = false;
    this->drawArrows(tags,ratioGraph, actualRatioMin,actualRatioMax);
  }
}

/*
void TQHWWPlotter::drawMultiRatio(TQTaggable& tags){
  // draw a ratio-plot in the sub-pad
  double ratioMax = tags.getTagDoubleDefault ("style.ratioMax",1000.);
  double ratioMin = tags.getTagDoubleDefault ("style.ratioMin",0.);
  double ratioMaxQerr = tags.getTagDoubleDefault ("style.ratioMaxQerr",std::numeric_limits<double>::infinity());
  bool forceRatioLimits = tags.getTagBoolDefault ("style.forceRatioLimits",false );
  bool verbose = tags.getTagBoolDefault("verbose",false);

  double ratioPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
  double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);

  if(verbose) VERBOSEclass("calculating geometry and axis ranges");

  TString dataLabel("");
  TList* graphs = new TList();
  // graphs->SetOwner(true);

  // actual minimum and maximum ratio
  double actualRatioMin = 1.;
  double actualRatioMax = 1.;

  if(verbose) VERBOSEclass("generating ratio graphs");
  // loop over data histograms
  TQTaggableIterator data_processes(fProcesses);
  TQTaggableIterator prediction_processes(fProcesses);
  TString axtitle;
  double xmin = 0;
  double xmax = 0;

  while(data_processes.hasNext() && prediction_processes.hasNext()){
    // get the data histogram
    TQNamedTaggable* data = NULL;
    while(!data &&  data_processes.hasNext()){
      TQNamedTaggable* next = data_processes.readNext();
      if(next->getTagBoolDefault(".isData",false)) data = next;
    }
    TQNamedTaggable* prediction = NULL;
    while(!prediction && prediction_processes.hasNext()){
      TQNamedTaggable* next = prediction_processes.readNext();
      if(next->getTagBoolDefault(".isSignal",false)) prediction = next;
    }
    if(!data || !prediction) continue;

    if(verbose) VERBOSEclass("drawing comparsion between %s and %s",data->GetName(), prediction->GetName());

    TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(data));
    TH1 * h_prediction = this->getObject<TH1>(this->makeHistogramIdentifier(prediction));
    if(!h_data) continue;
    if(!h_prediction) continue;

    if(axtitle.IsNull()){
      axtitle = h_data->GetXaxis()->GetTitle();
      xmin = h_data->GetXaxis()->GetXmin();
      xmax = h_data->GetXaxis()->GetXmax();
    }

    // calculate the number of valid ratio points: ratio points are considered
    // valid if they have a finite value (MC prediction != 0) (--> nPoints) and
    // the observed data is greater than zero (--> nRatioPoints)
    int nRatioPoints = 0;
    for (int i = 1; i <= h_data->GetNbinsX(); i++) {
      double mcVal = h_prediction->GetBinContent(i);
      double dataVal = h_data->GetBinContent(i);
      if(mcVal == 0) continue;
      if(dataVal == 0) continue;
      if(!TQUtils::isNum(mcVal)){
        WARNclass("encountered non-numeric MC value: %f",mcVal);
        continue;
      }
      if(!TQUtils::isNum(dataVal)){
        WARNclass("encountered non-numeric data value: %f",dataVal);
        continue;
      }
      nRatioPoints++;
    }

    if(nRatioPoints < 1){
      // there is nothing to draw -- well, let's do nothing, then
      continue;
    }

    // the graph used to draw the ratio points
    TGraphErrors * ratioGraph = new TGraphErrors(nRatioPoints);
    this->addObject(ratioGraph,TString::Format("ratioGraph_%s",h_data->GetName()));
    ratioGraph->SetTitle(TString::Format("%s (ratio)",h_data->GetTitle()));
    ratioGraph->SetLineColor(h_data->GetLineColor());
    ratioGraph->SetMarkerSize(h_data->GetMarkerSize());
    ratioGraph->SetMarkerStyle(h_data->GetMarkerStyle());
    ratioGraph->SetMarkerColor(h_data->GetMarkerColor());

    int iRatioPoint = 0;

    // loop over all bins of the histogram
    for (int iBin = 1; iBin <= h_data->GetNbinsX(); iBin++) {
      double x = h_prediction->GetBinCenter(iBin);
      // get the values and errors of data and MC for this bin
      double data = h_data ->GetBinContent(iBin);
      double dataErr = h_data ->GetBinError (iBin);
      double MC = h_prediction->GetBinContent(iBin);
      // cannot do anything if MC expectation is zero
      if (MC == 0. || data <= 0.) continue;

      double ratio = data / MC;
      double ratioError = ratio * dataErr / data;
      if(verbose) VERBOSEclass("adding ratio point with x=%f, y=%f (data=%f, MC=%f)",x,ratio,data,MC);
      ratioGraph->SetPoint(iRatioPoint, x, ratio);
      ratioGraph->SetPointError(iRatioPoint, 0., ratioError);
      iRatioPoint++;
    }

    this->applyStyle(tags   ,ratioGraph,"sub.data",1.,ratioPadScaling);

    double ratioMinAllowed = tags.getTagDoubleDefault ("style.ratioMinAllowed",ratioMin);
    double ratioMaxAllowed = tags.getTagDoubleDefault ("style.ratioMaxAllowed",ratioMax);
    actualRatioMin=ratioMinAllowed;
    actualRatioMax=ratioMaxAllowed;
    if(verbose) VERBOSEclass("drawMultiRatio: allowed range of ratio graph: %f -- %f",actualRatioMin,actualRatioMax);

    this->estimateRangeY(ratioGraph,actualRatioMin,actualRatioMax,ratioMaxQerr);

    if(verbose) VERBOSEclass("drawMultiRatio: estimated range of ratio graph: %f -- %f (ratioMaxQerr=%f)",actualRatioMin,actualRatioMax,ratioMaxQerr);

    if(actualRatioMin == actualRatioMax){
      if(verbose) VERBOSEclass("expanding multi ratio to not be empty");
      actualRatioMin *= 0.9;
      actualRatioMax *= 1.1;
    }

    if (forceRatioLimits)
      actualRatioMin = ratioMin;
    else
      actualRatioMin = actualRatioMin-0.1*(actualRatioMax-actualRatioMin);

    if (forceRatioLimits)
      actualRatioMax = ratioMax;
    else
      actualRatioMax = actualRatioMax+0.1*(actualRatioMax-actualRatioMin);

    if(verbose) VERBOSEclass("drawMulti Ratio: final of ratio graph: %f -- %f",actualRatioMin,actualRatioMax);

    graphs->Add(ratioGraph);
  }

  if(verbose) VERBOSEclass("built %d ratio graphs",graphs->GetEntries());

  TString label = tags.getTagStringDefault("labels.ratio","ratio");

  gStyle->SetEndErrorSize(0);

  if(verbose) VERBOSEclass("drawing line");

  TQGraphErrorsIterator itr2(graphs);
  bool first = true;
  while(itr2.hasNext()){
    TGraphErrors* ratioGraph = itr2.readNext();
    if(!ratioGraph) continue;
    ratioGraph->SetMinimum(actualRatioMin);
    ratioGraph->SetMaximum(actualRatioMax);
    ratioGraph->Draw(first ? "AL" : "L SAME");
    if(first){
      ratioGraph->GetYaxis()->SetTitle(label);
      ratioGraph->GetXaxis()->SetTitle(axtitle);
      ratioGraph->GetXaxis()->SetRangeUser(xmin,xmax);
      this->applyGeometry(tags,ratioGraph,"sub" ,xscaling,ratioPadScaling);
    }
    first = false;
    this->drawArrows(tags,ratioGraph, actualRatioMin,actualRatioMax);
  }
}

*/

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawOptScan(TQTaggable& tags){
  // draw a cut optimization scan in the sub-pad
  double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);
  double subPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
  bool verbose = tags.getTagBoolDefault("verbose",false);

  TH1* hTotalStack = this->getObject<TH1>("totalStack");
  TQTaggableIterator itr(this->fProcesses);
  TH1* hSig = NULL;
  while(itr.hasNext() && !hSig){
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(process->getTagBoolDefault(".isSignal",false)){
      hSig = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    }
  }


  if(!hTotalStack){
    return;
  }
  if(!hSig){
    return;
  }

  TPad* optscanPad = this->getPad("sub");
  optscanPad->SetGridy(0);

  // figure of merit (FOM) plot. e.g. S/sqrt(B) and etc. one can implement more
  TH1* hFOMl = 0;
  TH1* hFOMr = 0;
  TH1* hFOM = 0;

  //@tag:optScan.FOMmode: figure of merit to be used. currently available are: s/sqrt(s+b),s/b,poisson,poissonwerr,s/sqrt(b),s/sqrt(b+db2)
  //@tag:optScan.FOMbbb: evaluate the figure-of-merit bin-by-bin instead of integrated left and right (default:false)
  //@tag:style.FOMmode: deprecated, use optScan.FOMmode
  //@tag:style.FOMbbb: deprecated, use optScan.FOMbbb
  TString fommodestr = tags.getTagStringDefault("optScan.FOMmode",tags.getTagStringDefault ("style.FOMmode","s/sqrt(b)"));
  TQHistogramUtils::FOM FOMmode = TQHistogramUtils::readFOM(fommodestr);
  if(FOMmode == TQHistogramUtils::kUndefined){
    WARNclass("unknown figure of merit '%s'!",fommodestr.Data());
    return;
  }
  bool binByBin = tags.getTagBoolDefault("optScan.FOMbbb",tags.getTagBoolDefault ("style.FOMbbb",false));
  bool drawLegend = !binByBin;
  
  std::vector<TH1*> bkgSystHistos;
  collectOptScanSimplifiedSystHistograms(bkgSystHistos, tags); //TODO? if this returns false something was wrong and no syst histograms are provided -> should abort?
  
  double actualmax = 0;
  if(binByBin){
    if(verbose){
      VERBOSEclass("drawing bin-by-bin significances with FOM=%s for S=%s and B=%s",TQHistogramUtils::getFOMTitleROOT(FOMmode).Data(),hSig->GetTitle(),hTotalStack->GetTitle());
    }
    hFOM = TQHistogramUtils::getFOMHistogram(FOMmode,hSig, hTotalStack, 0, bkgSystHistos);
    actualmax = hFOM->GetMaximum() * tags.getTagDoubleDefault("optScan.enlargeY",1.3);
    this->addObject(hFOM,"hist_FOM_bbb");
  } else {
    if(verbose){
      VERBOSEclass("drawing optimization scan with FOM=%s for S=%s and B=%s",TQHistogramUtils::getFOMTitleROOT(FOMmode).Data(),hSig->GetTitle(),hTotalStack->GetTitle());
    }
    hFOMl = TQHistogramUtils::getFOMScan(FOMmode,hSig, hTotalStack, true,0.05,verbose, bkgSystHistos);
    hFOMr = TQHistogramUtils::getFOMScan(FOMmode,hSig, hTotalStack, false,0.05,verbose, bkgSystHistos);
    //@tag:optScan.autoselect: select the optimization scan (left,right) that is better suited for every histogram and only show that one (default:false)
    if(tags.getTagBoolDefault("optScan.autoselect",false)){
      if(verbose) VERBOSEclass("autoselecting opt scan");
      if(TQHistogramUtils::hasGreaterMaximumThan(hFOMr,hFOMl)){
        if(verbose) VERBOSEclass("removing left-hand FOM histogram");
        this->addObject(hFOMr,"hist_FOM");
        delete hFOMl;
        hFOMl = NULL;
        actualmax = hFOMr->GetMaximum() * tags.getTagDoubleDefault("optScan.enlargeY",1.3);
      } else {
        if(verbose) VERBOSEclass("removing right-hand FOM histogram");
        this->addObject(hFOMl,"hist_FOM");
        delete hFOMr;
        hFOMr = NULL;
        actualmax = hFOMl->GetMaximum() * tags.getTagDoubleDefault("optScan.enlargeY",1.3);
      }
    } else {
      if(verbose) VERBOSEclass("using all opt scans");
      this->addObject(hFOMl,"hist_FOM_left");
      this->addObject(hFOMr,"hist_FOM_right");
      actualmax = std::max(hFOMl->GetMaximum(),hFOMr->GetMaximum()) * tags.getTagDoubleDefault("optScan.enlargeY",1.3);
    }
  }

  //cleanup
  for (TH1* toDel : bkgSystHistos) {
    delete toDel;
  }
  bkgSystHistos.clear(); //just to make sure the otherwise dangling pointers can not accessed anymore afterwards...

  bool first = true;
  // set style
  if (hFOM) {
    //@tag:style.optScan.default.*: control styling of the auto-selected FOM graph
    if(verbose) VERBOSEclass("drawing FOM histogram");
    this->applyStyle (tags,hFOM,"optScan.default",xscaling,subPadScaling);
    this->applyGeometry(tags,hFOM,"main" ,xscaling,subPadScaling);
    this->applyGeometry(tags,hFOM,"sub" ,xscaling,subPadScaling);
    hFOM->SetMaximum(actualmax);
    hFOM->SetMinimum(0);
    hFOM->SetNdivisions(50008);
    hFOM->GetYaxis()->SetNdivisions(50004);
    hFOM->Draw(first ? "HIST" : "HIST SAME");
    first = false;
  }
  if (hFOMl) {
    //@tag:style.optScan.left.*: control styling of the left-hand-side (lower) FOM graph
    if(verbose) VERBOSEclass("drawing FOM histogram (lhs)");
    this->applyStyle (tags,hFOMl,"optScan.left",xscaling,subPadScaling);
    this->applyGeometry(tags,hFOMl,"main" ,xscaling,subPadScaling);
    this->applyGeometry(tags,hFOMl,"sub" ,xscaling,subPadScaling);
    hFOMl->SetFillStyle(0);
    hFOMl->SetMaximum(actualmax);
    hFOMl->SetNdivisions(50008);
    hFOMl->GetYaxis()->SetNdivisions(50004);
    hFOMl->SetMinimum(0);
    hFOMl->Draw(first ? "HIST" : "HIST SAME");
    first = false;
  }
  if (hFOMr) {
    //@tag:style.optScan.right.*: control styling of the right-hand-side (upper) FOM graph
    if(verbose) VERBOSEclass("drawing FOM histogram (rhs)");
    this->applyStyle (tags,hFOMr,"optScan.right",xscaling,subPadScaling);
    this->applyGeometry(tags,hFOMr,"main" ,xscaling,subPadScaling);
    this->applyGeometry(tags,hFOMr,"sub" ,xscaling,subPadScaling);
    hFOMr->SetFillStyle(0);
    hFOMr->SetMaximum(actualmax);
    hFOMr->SetNdivisions(50008);
    hFOMr->GetYaxis()->SetNdivisions(50004);
    hFOMr->SetMinimum(0);
    hFOMr->Draw(first ? "HIST" : "HIST SAME");
    first = false;
  }

  // TLegend
  if(drawLegend){
    TLegend * leg = new TLegend(0.21,0.85,0.93,0.95);
    leg->SetNColumns(2);
    leg->SetFillColor(0);
    leg->SetFillStyle(0);
    leg->SetLineColor(0);
    leg->SetLineWidth(0);

    if (FOMmode == TQHistogramUtils::kSoSqB){
      if(hFOMr){
        double rmax = hFOMr->GetBinContent(hFOMr->GetMaximumBin());
        double rmaxxval = hFOMr->GetBinLowEdge(hFOMr->GetMaximumBin()) + hFOMr->GetBinWidth(hFOMr->GetMaximumBin());
        leg->AddEntry(hFOMr,TString::Format("#leftarrow cut Max=%.2f (%.2f)",rmax,rmaxxval), "l");
      }
      if(hFOMl){
        double lmax = hFOMl->GetBinContent(hFOMl->GetMaximumBin());
        double lmaxxval = hFOMl->GetBinLowEdge(hFOMl->GetMaximumBin());
        leg->AddEntry(hFOMl,TString::Format("#rightarrow cut Max=%.2f (%.2f)",lmax,lmaxxval), "l");
      }
    } else {
      if(hFOMl) leg->AddEntry(hFOMl,"#rightarrow cut", "l");
      if(hFOMr) leg->AddEntry(hFOMr,"#leftarrow cut" , "l");
    }
    leg->Draw("SAME");
  }

}

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawDataMinusBackground(TQTaggable& tags){
  // draw a data-minus-background plot in the sub-pad

  TString subtractionName = tags.getTagStringDefault("style.DminusB.subtraction","totalBkg");
  TH1* subtraction = this->getObject<TH1>(subtractionName);
  if(!subtraction) return;

  TString errorSourceName = tags.getTagStringDefault("style.DminusB.errors","totalBkg");
  TH1* errorSource = this->getObject<TH1>(errorSourceName);
  if(!errorSource) return;

  // set the x range of the dmb graph to match the one of the main histogram
  double dmbPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);

  TString dataLabel("");

  double max = 0;
  double min = 0;

  std::vector<TH1*> v_signal;
  std::vector<TH1*> v_data;

  TQTaggableIterator itrSig(fProcesses);
  while(itrSig.hasNext()){
    TQNamedTaggable* process = itrSig.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isSignal",false)) continue;
    TH1* h_sig = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    h_sig = TQHistogramUtils::copyHistogram(h_sig,TString::Format("%s_dminusb",h_sig->GetName()));
    this->applyStyle(tags,h_sig,"sub.sig",1.,dmbPadScaling);
    max = std::max(max,TQHistogramUtils::getMax(h_sig,false));
    min = std::min(min,TQHistogramUtils::getMin(h_sig,false));
    if(!h_sig) continue;
    v_signal.push_back(h_sig);
  }

  // loop over data histograms
  TQTaggableIterator itr(fProcesses);
  while(itr.hasNext()){
    // get the data histogram
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isData",false)) continue;
    TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    h_data = TQHistogramUtils::copyHistogram(h_data,TString::Format("%s_minus_bkg",h_data->GetName()));
    if(!h_data) continue;
    this->applyStyle(tags,h_data,"sub.data",1.,dmbPadScaling);
    TQHistogramUtils::addHistogramWithoutError(h_data,subtraction,-1.);
    max = std::max(max,TQHistogramUtils::getMax(h_data,true));
    min = std::min(min,TQHistogramUtils::getMin(h_data,true));
    v_data.push_back(h_data);
  }

  gStyle->SetEndErrorSize(0);

  TGraphErrors* errorGraph = new TGraphErrors(errorSource->GetNbinsX());
  for(int i=1; i<errorSource->GetNbinsX(); ++i){
    double val = errorSource->GetBinError(i);
    max = std::max(max,1.1*val);
    min = std::min(min,-1.1*val);
    errorGraph->SetPoint(i,errorSource->GetBinCenter(i),errorSource->GetBinContent(i)-subtraction->GetBinContent(i));
    errorGraph->SetPointError(i,errorSource->GetBinCenter(i)-errorSource->GetBinLowEdge(i),val);
  }

  double margin = tags.getTagDoubleDefault("style.sub.margin",1.1);

  TH1* frame = TQHistogramUtils::copyHistogram(subtraction,"Graph_subFrame");
  frame->Reset();
  frame->SetMaximum(margin*max);
  frame->SetMinimum(margin*min);
  this->applyStyle (tags,frame,"sub");
  this->applyGeometry(tags,frame,"main",1.,dmbPadScaling);
  this->applyGeometry(tags,frame,"sub",1.,dmbPadScaling);

  frame->GetYaxis()->SetTitle(tags.getTagStringDefault("labels.axes.subY", "Data-Bkg."));
  //@tag:labels.axes.subY: y-axis subplot label

  frame->Draw("HIST");

  // sort by integral to have smallest contribution in front
  std::sort(v_signal.begin(),v_signal.end(),[&](TH1* a, TH1* b){ return a->GetSumOfWeights() >= b->GetSumOfWeights();});

  for(auto h:v_signal){
    h->Draw("HISTSAME");
  }

  errorGraph->SetTitle("mc error band");
  this->applyStyle(tags,errorGraph,"main.totalStackError",1.,dmbPadScaling);
  errorGraph->Draw("E2SAME");

  for(auto h:v_data){
    h->Draw("EPSAME");
  }

  // if 0. is included in the range of the y axis of the dmb plot...
  if (min <= 0. && max >= 0.){
    // draw the black line indicating 0 in the dmb
    TLine* line = new TLine();
    line->SetLineColor(kBlack);
    line->DrawLine(TQHistogramUtils::getAxisXmin(subtraction), 0., TQHistogramUtils::getAxisXmax(subtraction), 0.);
    delete line;
  }
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawDataMinusBackgroundOverData(TQTaggable& tags){
  // draw a data-minus-background plot in the sub-pad

  TString subtractionName = tags.getTagStringDefault("style.DminusB.subtraction","totalBkg");
  TH1* subtraction = this->getObject<TH1>(subtractionName);
  if(!subtraction) return;

  TString errorSourceName = tags.getTagStringDefault("style.DminusB.errors","totalBkg");
  TH1* errorSource = this->getObject<TH1>(errorSourceName);
  if(!errorSource) return;

  // set the x range of the dmb graph to match the one of the main histogram
  double dmbPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);

  TString dataLabel("");

  double max = 0;
  double min = 0;

  std::vector<TH1*> v_signal;
  std::vector<TH1*> v_data;

  // loop over data histograms
  TQTaggableIterator itr(fProcesses);
  while(itr.hasNext()){
    // get the data histogram
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isData",false)) continue;
    TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    h_data = TQHistogramUtils::copyHistogram(h_data,TString::Format("%s_minus_bkg_over_d",h_data->GetName()));
    if(!h_data) continue;
    this->applyStyle(tags,h_data,"sub.data",1.,dmbPadScaling);
    v_data.push_back(h_data);
  }

  if(v_data.size() != 1){
    ERRORclass("cannot plot data minus background over data when the number of datasets is != 1");
  }
  TH1* data = v_data[0];

  TQTaggableIterator itrSig(fProcesses);
  while(itrSig.hasNext()){
    TQNamedTaggable* process = itrSig.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isSignal",false)) continue;
    TH1* h_sig = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    h_sig = TQHistogramUtils::copyHistogram(h_sig,TString::Format("%s_dminusboverd",h_sig->GetName()));
    TQHistogramUtils::divideHistogramWithoutError(h_sig,data);
    this->applyStyle(tags,h_sig,"sub.sig",1.,dmbPadScaling);
    max = std::max(max,TQHistogramUtils::getMax(h_sig,false));
    min = std::min(min,TQHistogramUtils::getMin(h_sig,false));
    if(!h_sig) continue;
    v_signal.push_back(h_sig);
  }

  gStyle->SetEndErrorSize(0);

  TGraphErrors* errorGraph = new TGraphErrors(errorSource->GetNbinsX());
  for(int i=1; i<=errorSource->GetNbinsX(); ++i){
    double val = 1000;
    if (data->GetBinContent(i) != 0){
      val = errorSource->GetBinError(i)/data->GetBinContent(i);
    }
    double point = (data->GetBinContent(i)-subtraction->GetBinContent(i))/data->GetBinContent(i);
    if (val < 1000){
      max = std::max(max, 1.1*(abs(point)+val));
      min = std::min(min, -1.1*(abs(point)+val));
    }
    else {
      max = std::max(max, 1.1*(abs(point)));
      min = std::min(min, -1.1*(abs(point)));
    }

    errorGraph->SetPoint(i,errorSource->GetBinCenter(i),(errorSource->GetBinContent(i)-subtraction->GetBinContent(i))/data->GetBinContent(i));
    errorGraph->SetPointError(i,errorSource->GetBinCenter(i)-errorSource->GetBinLowEdge(i),val);
  }

  //@tag:[sub.yMin, sub.yMax] Overwrites automatic axis range of sub plot when drawing drawDataMinusBackgroundOverData
  tags.getTagDouble("sub.yMin", min);
  tags.getTagDouble("sub.yMax", max);

  double margin = tags.getTagDoubleDefault("style.sub.margin",1.1);

  TH1* frame = TQHistogramUtils::copyHistogram(subtraction,"Graph_subFrame");
  frame->Reset();
  frame->SetMaximum(margin*max);
  frame->SetMinimum(margin*min);
  this->applyStyle (tags,frame,"sub");
  this->applyGeometry(tags,frame,"main",1.,dmbPadScaling);
  this->applyGeometry(tags,frame,"sub",1.,dmbPadScaling);

  TString subXName = tags.getTagStringDefault("labels.axes.subX", "");
  //@tag:labels.axes.subX: x-axis subplot label
  
  frame->GetYaxis()->SetTitle(tags.getTagStringDefault("labels.axes.subY", "(Data-Bkg.)/Data"));
  if (subXName.Length()>0) {
    frame->GetXaxis()->SetTitle(subXName);
  }
  frame->Draw("HIST");

  // sort by integral to have smallest contribution in front
  std::sort(v_signal.begin(),v_signal.end(),[&](TH1* a, TH1* b){ return a->GetSumOfWeights() >= b->GetSumOfWeights();});
  for(auto h:v_signal){
    h->Draw("HISTSAME");
  }
  errorGraph->SetTitle("mc error band");
  this->applyStyle(tags,errorGraph,"main.totalStackError",1.,dmbPadScaling);
  errorGraph->Draw("E2SAME");

  TH1* copydata = TQHistogramUtils::copyHistogram(data);
  TQHistogramUtils::addHistogramWithoutError(data,subtraction,-1.);
  TQHistogramUtils::divideHistogramWithoutError(data,copydata);
  delete copydata;

  // X0 don't draw horizontal error bar
  data->Draw("E P SAME X0");

  // Plotting with the e0 option draws errorbars also if the datapoint
  // is outside of the pad (that's what we want), but it draws datapoints
  // when they are at 0 (we don't want that).
  // Workaround: set the marker size to 0 and draw with e0 option. For
  // some reason, plotting the original histogram messes things up. So
  // use a clone instead.
  TH1* dataClone = (TH1*) data->Clone();
  dataClone->SetMarkerSize(0);
  dataClone->Draw("SAME P e0 X0");

  // if 1. is included in the range of the y axis of the dmb plot...
  if (min <= 1. && max >= 1.){
    // draw the black line indicating 0 in the dmb
    TLine* line = new TLine();
    line->SetLineColor(kBlack);
    line->DrawLine(TQHistogramUtils::getAxisXmin(subtraction), 0., TQHistogramUtils::getAxisXmax(subtraction), 0.);
    delete line;
  }

  this->drawArrows(tags, data, frame->GetMinimum(), frame->GetMaximum());
}
 
void TQHWWPlotter::drawUnitNormSubPlot(TQTaggable& tags){
   
  gPad->SetGridy(0);

  double unitNormPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
  double margin = tags.getTagDoubleDefault("style.sub.margin",1.1);
  double max = 0;
  double min = 0;

  std::vector<TH1*> v_Sig;
  std::vector<TH1*> v_Bkg;
  std::vector<TH1*> v_SigBkg;
  std::vector<TH1*> v_SigBkg_bkwds;

  // Loop over signal histograms and scale them to unit norm
  TQTaggableIterator itrSig(fProcesses);
  while(itrSig.hasNext()){
    TQNamedTaggable* process = itrSig.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isSignal",false)) continue;
    TH1 * histo = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    histo = TQHistogramUtils::copyHistogram(histo,TString::Format("%s_unitNorm",histo->GetName()));
    histo->Scale(1./histo->Integral());
    this->applyStyle(tags,histo,"sub",1.,unitNormPadScaling);
    this->applyGeometry(tags,histo,"sub",1.,unitNormPadScaling);
    v_Sig.push_back(histo);
    if (!histo) continue;
  }

  // Loop over background histograms and scale them to unit norm
  TQTaggableIterator itrBkg(fProcesses);
  while(itrBkg.hasNext()){
    TQNamedTaggable* process = itrBkg.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isBackground",false)) continue;
    TH1 * histo = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    histo = TQHistogramUtils::copyHistogram(histo,TString::Format("%s_unitNorm",histo->GetName()));
    histo->Scale(1./histo->Integral());
    this->applyStyle(tags,histo,"sub",1.,unitNormPadScaling);
    this->applyGeometry(tags,histo,"sub",1.,unitNormPadScaling);
    v_Bkg.push_back(histo);
    if (!histo) continue;
  }

  // HS: Not sure how to fully deal with the plotting order to ensure the legends
  // in the main pad and sub pad are identical.
  // For now, I've put the signal histograms in the vector of histograms to
  // plot first, and then the background ones (but swapping the order)
  for(auto h:v_Sig){ 
    v_SigBkg.push_back(h);
  }
  for (Int_t i = v_Bkg.size() - 1; i >= 0; --i ){
    v_SigBkg.push_back(v_Bkg[i]);
    v_SigBkg_bkwds.push_back(v_Bkg[i]);
  } 
  for (auto h:v_Sig){
    v_SigBkg_bkwds.push_back(h);
  }
  // v_SigBkg has signal first, followed by background histograms
  // v_SigBkg_bkwds has background histograms first, and then signal last. This works for getting 
  // the drawing order right for the histograms, and for filling the legend such that it is the 
  // same as the legend in the main pad

  // @tags: [style.unitnormreverse] Reverse stacking and legend order for unitnorm plot if requested
  bool unitnormreverse = tags.getTagBoolDefault("style.unitnormreverse", false);
  if(unitnormreverse){
    std::reverse(v_SigBkg.begin(),v_SigBkg.end());
    std::reverse(v_SigBkg_bkwds.begin(),v_SigBkg_bkwds.end());
  }

  TH1* hMain = TQHistogramUtils::copyHistogram(v_SigBkg[0],"Graph_subFrame");
  hMain->Reset();
  hMain->SetMaximum(margin*max);
  hMain->SetMinimum(margin*min);
  this->applyStyle(tags,hMain,"sub");
  this->applyGeometry(tags,hMain,"main",1.,unitNormPadScaling);
  this->applyGeometry(tags,hMain,"sub",1.,unitNormPadScaling);

  hMain->GetYaxis()->SetTitle(tags.getTagStringDefault("labels.axes.subY", "Unit norm."));
  hMain->GetXaxis()->SetTitle(tags.getTagStringDefault("labels.axes.subX", ""));
  hMain->Draw("HIST");

  // Add a legend to the subplot
  double leg_xmin = tags.getTagDoubleDefault("subLegend.xMin",0.65);
  double leg_xmax = tags.getTagDoubleDefault("subLegend.xMax",0.95);
  double leg_ymin = tags.getTagDoubleDefault("subLegend.yMin",0.58);
  double leg_ymax = tags.getTagDoubleDefault("subLegend.yMax",0.90);
  double leg_textSize = tags.getTagDoubleDefault("subLegend.textSize", 0.065); 

  TLegend* fLegend_sub = new TLegend(leg_xmin, leg_ymin, leg_xmax, leg_ymax);
  int nColumnsSubLegend=tags.getTagIntegerDefault("subLegend.nColumns",2);
  fLegend_sub->SetNColumns(nColumnsSubLegend);
  fLegend_sub->SetFillColor(0);
  fLegend_sub->SetFillStyle(0);
  fLegend_sub->SetBorderSize(0);
  fLegend_sub->SetTextFont(42);
  fLegend_sub->SetTextSize(leg_textSize);
  fLegend_sub->SetShadowColor(kWhite);

  double maxVal = 0.;
  double max_t = 0.;

  //@tags: [style.fillSignal] Tag to choose whether the signal is drawn with a fill colour or not 
  //@tags: [style.fillSignalName] The name of the signal histogram to draw with a fill colour, default sigGGF
  bool fillSignal = tags.getTagBoolDefault("style.fillSignal", false);
  TString fillSignalName = tags.getTagStringDefault("style.fillSignalName", "sigGGF");

  // If fillSignal is true, draw signal first so other lines are drawn over it, so use v_SigBkg
  if (fillSignal) {
    for(auto h:v_SigBkg){
      max_t = h->GetBinContent(h->GetMaximumBin());
      if (max_t > maxVal) {
	maxVal = max_t;
      }
      
      TString title = h->GetTitle();
      title = TQStringUtils::convertLaTeX2ROOTTeX(title);
      TString histoName = h->GetName();
      
      //The line colour of the unit norm histos should be the same as the fill color for the histos in the main pad
      h->SetLineColor(h->GetFillColor());
      
      if (fillSignal && histoName.Contains(fillSignalName)) {
	h->SetFillColor(h->GetFillColor());
	fLegend_sub->AddEntry(h, title, "FL");
      }    
      else{
	h->SetFillColor(0);
	fLegend_sub->AddEntry(h, title, "L");
      }
      h->SetLineWidth(3);
      h->Draw("HISTSAME");
      
    }
  }
  // If not fillSignal, draw signal last so the line is clearly seen, so use v_SigBkg_bkwds. But, to keep the legend order the same as the main pad, use v_SigBkg for legend
  else {
    for(auto h:v_SigBkg_bkwds) {
      max_t = h->GetBinContent(h->GetMaximumBin());
      if (max_t > maxVal) {
        maxVal = max_t;
      }
      
      //The line colour of the unit norm histos should be the same as the fill color for the histos in the main pad                                               
      h->SetLineColor(h->GetFillColor());
      h->SetFillColor(0);
      h->SetLineWidth(3);
      h->Draw("HISTSAME");
    }
    for(auto h:v_SigBkg) {
      TString title = h->GetTitle();
      title = TQStringUtils::convertLaTeX2ROOTTeX(title);
      TString histoName = h->GetName();
      fLegend_sub->AddEntry(h, title, "L");
    }
  }
  
  fLegend_sub->Draw();
  
  double yMaxSubPlot = tags.getTagDoubleDefault("sub.yMax",maxVal*1.25);
  double yMinSubPlot = tags.getTagDoubleDefault("sub.yMin",0.0);
  hMain->GetYaxis()->SetRangeUser(yMinSubPlot, yMaxSubPlot);

  //@tags: style.cutLineSubPlot] If including a cut line, also include it in the subpad
  bool cutLineSubPlot = tags.getTagBoolDefault("style.cutLineSubPlot", false);
  if (cutLineSubPlot) {
    double cutVal = 0.;
    int it= 0.;
    //@tags: cuts.*: a list of (vertical) cut lines to be drawn. value will be x-value of the vertical line
    while (tags.getTagDouble(TString::Format("cuts.%d", it++), cutVal)) { 
      TLine * line_sub = new TLine(cutVal, yMinSubPlot, cutVal, yMaxSubPlot);
      line_sub->SetLineStyle(tags.getTagIntegerDefault("style.cutLineStyle",7));
      line_sub->SetLineWidth(tags.getTagIntegerDefault("style.cutLineWidth",2));
      line_sub->SetLineColor(tags.getTagIntegerDefault("style.cutLineColor",kRed));
      line_sub->Draw();
    }
  }
  
}

void TQHWWPlotter::drawCustomSubPlot(TQTaggable& tags){
  // draw a significance plot in the sub-pad
  TString totalStackLabesl = tags.getTagStringDefault ("labels.totalStack", "SM");
  TString formulaString = tags.getTagStringDefault ("style.ratioFormula","d/b");
  TString formulaName = tags.getTagStringDefault ("style.ratioName",formulaString);
  
  double min = tags.getTagDoubleDefault("style.customSubMin",0.);
  double max = tags.getTagDoubleDefault("style.customSubMax",0.);

  TH1* hMaster = this->getObject<TH1>("Graph_master");
  TH1* hTotalStack = this->getObject<TH1>("totalStack");
  TH1* hTotalSig = this->getObject<TH1>("totalSig");
  if(!hTotalStack) return;

  int nBins = hMaster->GetNbinsX();

  // loop over all histograms
  TQTaggableIterator itr(fProcesses);
  while(itr.hasNext()){
    // get the data histograms only
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!process->getTagBoolDefault(".isData",false)) continue;
    TH1 * hdata = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    if (!hdata) continue;



    // the graph used to draw the values (errors may be suported at a later time)
    //TGraphAsymmErrors * customGraph = new TGraphAsymmErrors(nBins);
    TGraph * customGraph = new TGraph(nBins);
    customGraph->SetLineColor(hdata->GetLineColor());
    customGraph->SetMarkerSize(hdata->GetMarkerSize());
    customGraph->SetMarkerStyle(hdata->GetMarkerStyle());
    customGraph->SetMarkerColor(hdata->GetMarkerColor());

    this->addObject(customGraph,TString::Format("custom_%s",hdata->GetName()));

    int iPoint = 0;

    // actual minimum and maximum value
    double actualSigMin = 0.;
    double actualSigMax = 0.;

    bool first = true;
    // loop over all bins of the histogram
    for (int iBin = 1; iBin <= nBins; iBin++) {
      TString localFormula = formulaString;

      // retrieve required values and fill them into the formula provided

      //watch the order in which expressions are replaced!!
      //@tags:style.ratioFormula: arbitrary formula that can be defined using the following placeholders: sHighXbinWidth,sLowXbinWidth,sHighXbinWidth,sLow,sHigh,sig,bHighXbinWidth,bLowXbinWidth,bLow,bHigh,bkg,dHighXbinWidth,dLowXbinWidthdLow,dHigh,data,binN,binX,binWidth
      //@tags:style.ratioName: name of the custom subplot to be shown
      localFormula = TQStringUtils::replace(localFormula,"sLowXbinWidth",std::to_string(hTotalSig->Integral(0,iBin,"width")));
      localFormula = TQStringUtils::replace(localFormula,"sHighXbinWidth",std::to_string(hTotalSig->Integral(iBin,nBins+1,"width")));
      localFormula = TQStringUtils::replace(localFormula,"sLow",std::to_string(hTotalSig->Integral(0,iBin)));
      localFormula = TQStringUtils::replace(localFormula,"sHigh",std::to_string(hTotalSig->Integral(iBin,nBins+1)));
      localFormula = TQStringUtils::replace(localFormula,"sig",std::to_string(hTotalSig->GetBinContent(iBin)));

      localFormula = TQStringUtils::replace(localFormula,"bLowXbinWidth",std::to_string(hTotalStack->Integral(0,iBin,"width")));
      localFormula = TQStringUtils::replace(localFormula,"bHighXbinWidth",std::to_string(hTotalStack->Integral(iBin,nBins+1,"width")));
      localFormula = TQStringUtils::replace(localFormula,"bLow",std::to_string(hTotalStack->Integral(0,iBin)));
      localFormula = TQStringUtils::replace(localFormula,"bHigh",std::to_string(hTotalStack->Integral(iBin,nBins+1)));
      localFormula = TQStringUtils::replace(localFormula,"bkg",std::to_string(hTotalStack->GetBinContent(iBin)));

      localFormula = TQStringUtils::replace(localFormula,"dLowXbinWidth",std::to_string(hdata->Integral(0,iBin,"width")));
      localFormula = TQStringUtils::replace(localFormula,"dHighXbinWidth",std::to_string(hdata->Integral(iBin,nBins+1,"width")));
      localFormula = TQStringUtils::replace(localFormula,"dLow",std::to_string(hdata->Integral(0,iBin)));
      localFormula = TQStringUtils::replace(localFormula,"dHigh",std::to_string(hdata->Integral(iBin,nBins+1)));
      localFormula = TQStringUtils::replace(localFormula,"data",std::to_string(hdata->GetBinContent(iBin)));

      localFormula = TQStringUtils::replace(localFormula,"binN",std::to_string(iBin));
      localFormula = TQStringUtils::replace(localFormula,"binX",std::to_string(hTotalStack->GetBinCenter(iBin)));
      localFormula = TQStringUtils::replace(localFormula,"binWidth",std::to_string(hTotalStack->GetBinWidth(iBin)));

      TFormula frml(formulaName,localFormula);
      if (0 != frml.Compile()) {
        WARNclass("failed to compile formula %s (raw: %s)",localFormula.Data(),formulaString.Data());
        continue;
      }
      double value = frml.Eval(0.);
      // set the position and the width of the significance band
      customGraph->SetPoint(iPoint, hTotalStack->GetBinCenter(iBin), value);

      //this part might be properly implemented at some time, for now it's irrelevant
      /*
      if (value < 0.) {
        customGraph->SetPointError(
                                         iPoint, hTotalStack->GetBinWidth(iBin) / 2.,
                                         hTotalStack->GetBinWidth(iBin) / 2., -value, 0.);
      } else {
        customGraph->SetPointError(
                                         iPoint, hTotalStack->GetBinWidth(iBin) / 2.,
                                         hTotalStack->GetBinWidth(iBin) / 2., 0., value);
      }
      */
      if (value < actualSigMin){
        actualSigMin = value;
      }
      if (value > actualSigMax){
        actualSigMax = value;
      }

      iPoint++;

    }
    if (min < max) {
      actualSigMin = std::max(actualSigMin,min);
      actualSigMax = std::min(actualSigMax,max);
    }
    //@tag: [geometry.xscaling,geomatry.sub.scaling] These argument tags influence the appearance of the subplot. The precise effect is considered 'black magic'.
    double xscaling = tags.getTagDoubleDefault("geometry.xscaling",1.);
    double sigPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);
    this->applyStyle(tags,customGraph,formulaName,xscaling,sigPadScaling);
    this->applyGeometry(tags,customGraph,"main" ,xscaling,sigPadScaling);
    this->applyGeometry(tags,customGraph,"sub" ,xscaling,sigPadScaling);

    // set the x range of the ratio graph to match the one of the main histogram
    double xLowerLimit = hTotalStack->GetBinLowEdge(1);
    double xUpperLimit = hTotalStack->GetBinLowEdge(nBins) + hTotalStack->GetBinWidth(nBins);
    customGraph->GetXaxis()->SetLimits(xLowerLimit, xUpperLimit);

    // set the titles of the axis of the ratio graph
    customGraph->GetXaxis()->SetTitle(hTotalStack->GetXaxis()->GetTitle());

    // confine the y axis of the ratio plot
    customGraph->GetYaxis()->SetTitle(formulaName);

    actualSigMin = TMath::Abs(actualSigMin);
    int y1 = TMath::Nint(actualSigMin);
    if (y1 < actualSigMin)
      actualSigMin = y1 + 0.5;
    else
      actualSigMin = y1;

    if (fmod(actualSigMin, 1) == 0)
      actualSigMin += 0.5;
    int y2 = TMath::Nint(actualSigMax);
    if (y2 < actualSigMax)
      actualSigMax = y2 + 0.5;
    else
      actualSigMax = y2;
    if (fmod(actualSigMax, 1) == 0)
      actualSigMax += 0.5;

    customGraph->GetHistogram()->SetMinimum(actualSigMin);
    customGraph->GetHistogram()->SetMaximum(actualSigMax);

    // draw the graph
    if (first)
      customGraph->Draw("AP2");
    else
      customGraph->Draw("P2");

    first = false;
  }
}

//__________________________________________________________________________________|___________

void TQHWWPlotter::drawPull(TQTaggable& tags){
  // draw a pull-plot in the sub-pad

  //@tag:[style.pullMax,style.pullMin,style.pullMinAllowed,style.pullMaxAllowed] These argument tags give a suggested range of the y-axis for pull sub-plots. pullMin/MaxAllowed override the other two, unless 'style.forcePullLimits' is set to true, in which case pullMin/Max are hard limits for the subplot's y-axis.
  double pullMax = tags.getTagDoubleDefault ("style.pullMax",1000.);
  double pullMin = tags.getTagDoubleDefault ("style.pullMin",0.);
  //@tag:[style.pullMaxQerr] This argument tag specifies a tolerance to include outlying points when estimating the y-axis range (passed as 'tolerance' argument to TQPlotter::estimateRangeY). Default: std::numeric_limits<double>::infinity.
  double pullMaxQerr = tags.getTagDoubleDefault ("style.pullMaxQerr",std::numeric_limits<double>::infinity());
  //@tag:[style.forcePullLimits] If this argument tag is set to true the y-axis range of the pull sub-plot is enforced to the values given by the tags 'style.pullMin' and 'style.pullMax'. Default: false
  bool forcePullLimits = tags.getTagBoolDefault ("style.forcePullLimits",false );
  bool verbose = tags.getTagBoolDefault("verbose",false);

  TH1* hTotalStack = this->getObject<TH1>("totalStack");
  if(!hTotalStack) return;

  int nBins = hTotalStack->GetNbinsX();

  int nPoints = 0;
  for (int i = 1; i <= nBins; i++) {
    if (hTotalStack->GetBinContent(i) != 0.) {
      nPoints++;
    }
  }

  if(verbose) VERBOSEclass("calculating geometry and axis ranges");
  // set the x range of the pull graph to match the one of the main histogram
  double xLowerLimit = hTotalStack->GetBinLowEdge(1);
  double xUpperLimit = hTotalStack->GetBinLowEdge(nBins) + hTotalStack->GetBinWidth(nBins);
  //@tag:[geometry.sub.scaling] This argument tag sets a scaling factor for the pull sub-plot. Default: 1.
  double pullPadScaling = tags.getTagDoubleDefault("geometry.sub.scaling",1.);

  TString dataLabel("");
  TList* graphs = new TList();
  // graphs->SetOwner(true);

  // actual minimum and maximum pull
  double actualPullMin = 1.;
  double actualPullMax = 1.;

  if(verbose) VERBOSEclass("generating pull graphs");
  // loop over data histograms
  TQTaggableIterator itr(fProcesses);

  while(itr.hasNext()){
    // get the data histogram
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    //@tag:[.isData] This process tag identifies the corresponding histograms as data histograms. Default: false.
    if(!process->getTagBoolDefault(".isData",false)) continue;
    TH1 * h_data = this->getObject<TH1>(this->makeHistogramIdentifier(process));
    if(!h_data) continue;
    if(dataLabel.IsNull()) dataLabel = h_data->GetTitle();

    // calculate the number of valid pull points: pull points are considered
    // valid if they have a finite value (MC prediction != 0) (--> nPoints) and
    // the observed data is greater than zero (--> nPullPoints)
    int nPullPoints = 0;
    for (int i = 1; i <= nBins; i++) {
      double mcErr = hTotalStack->GetBinError(i);
      double dataErr = h_data->GetBinError(i);
      if(mcErr == 0) continue;
      if(dataErr == 0) continue;
      if(!TQUtils::isNum(hTotalStack->GetBinContent(i))){
        WARNclass("encountered non-numeric MC value: %f",mcErr);
        continue;
      }
      if(!TQUtils::isNum(h_data->GetBinContent(i))){
        WARNclass("encountered non-numeric data value: %f",dataErr);
        continue;
      }
      nPullPoints++;
    }

    if(nPullPoints < 1){
      // there is nothing to draw -- well, let's do nothing, then
      continue;
    }

    // the graph used to draw the pull points
    TGraphErrors * pullGraph = new TGraphErrors(nPullPoints);
    this->addObject(pullGraph,TString::Format("pullGraph_%s",h_data->GetName()));
    pullGraph->SetTitle(TString::Format("%s (pull)",h_data->GetTitle()));
    pullGraph->SetLineColor(h_data->GetLineColor());
    pullGraph->SetMarkerSize(h_data->GetMarkerSize());
    pullGraph->SetMarkerStyle(h_data->GetMarkerStyle());
    pullGraph->SetMarkerColor(h_data->GetMarkerColor());

    int iPullPoint = 0;

    // loop over all bins of the histogram
    for (int iBin = 1; iBin <= nBins; iBin++) {
      double x = hTotalStack->GetBinCenter(iBin);
      // get the values and errors of data and MC for this bin
      double data = h_data ->GetBinContent(iBin);
      double mc = hTotalStack->GetBinContent(iBin);
      double value = data - mc;
      double error2 = pow(h_data->GetBinContent(iBin),2) + pow(hTotalStack->GetBinContent(iBin),2);
      if(verbose) VERBOSEclass("adding pull point with x=%f, v=%f, e=%f (data=%f, MC=%f)",x,value,sqrt(error2),data,mc);
      pullGraph->SetPoint(iPullPoint, x, value/sqrt(error2));
      iPullPoint++;
    }

    this->applyStyle(tags   ,pullGraph,"sub.data",1.,pullPadScaling);
    //tag documentation see above
    double pullMinAllowed = tags.getTagDoubleDefault ("style.pullMinAllowed",pullMin);
    double pullMaxAllowed = tags.getTagDoubleDefault ("style.pullMaxAllowed",pullMax);
    actualPullMin=pullMinAllowed;
    actualPullMax=pullMaxAllowed;
    if(verbose) VERBOSEclass("drawPull: allowed range of pull graph: %f -- %f",actualPullMin,actualPullMax);

    this->estimateRangeY(pullGraph,actualPullMin,actualPullMax,pullMaxQerr);

    if(verbose) VERBOSEclass("drawPull: estimated range of pull graph: %f -- %f (pullMaxQerr=%f)",actualPullMin,actualPullMax,pullMaxQerr);

    if(actualPullMin == actualPullMax){
      if(verbose) VERBOSEclass("expanding pull to not be empty");
      //TODO: this is not how this works. this is not how any of this works...
      actualPullMin *= 1.1;
      actualPullMax *= 1.1;
    }

    if (forcePullLimits)
      actualPullMin = pullMin;
    else
      actualPullMin = actualPullMin-0.1*(actualPullMax-actualPullMin);

    if (forcePullLimits)
      actualPullMax = pullMax;
    else
      actualPullMax = actualPullMax+0.1*(actualPullMax-actualPullMin);

    if(verbose) VERBOSEclass("drawPull: final of pull graph: %f -- %f",actualPullMin,actualPullMax);

    graphs->Add(pullGraph);
  }
  //@tag:[labels.totalStack] This argument tag determines the label used for the total (MC) background. Default: "SM".
  TString totalStackLabel = tags.getTagStringDefault ("labels.totalStack", "SM");
  //@tag:[labels.data] This argument tag determines the label for data. Default is the title of the data histogram.
  tags.getTagString("labels.data",dataLabel);

  gStyle->SetEndErrorSize(0);


  if(verbose) VERBOSEclass("drawing line");
  // if 1. is included in the range of the y axis of the pull plot...
  TLine * line = new TLine(xLowerLimit, 0., xUpperLimit, 0.);
  line->SetLineColor(kRed);
  line->Draw();

  if(verbose) VERBOSEclass("drawing additional markers");
  TQGraphErrorsIterator itr2(graphs);
  bool first = true;
  while(itr2.hasNext()){
    TGraphErrors* pullGraph = itr2.readNext();
    if(!pullGraph) continue;
    if(first){
      pullGraph->Draw("AP");
      pullGraph->GetXaxis()->SetRangeUser(hTotalStack->GetXaxis()->GetXmin(),hTotalStack->GetXaxis()->GetXmax());
    } else {
      pullGraph->Draw("P SAME");
    }

    this->drawArrows(tags,pullGraph, actualPullMin,actualPullMax);
  }
}
 TQHWWPlotter.cxx:1
 TQHWWPlotter.cxx:2
 TQHWWPlotter.cxx:3
 TQHWWPlotter.cxx:4
 TQHWWPlotter.cxx:5
 TQHWWPlotter.cxx:6
 TQHWWPlotter.cxx:7
 TQHWWPlotter.cxx:8
 TQHWWPlotter.cxx:9
 TQHWWPlotter.cxx:10
 TQHWWPlotter.cxx:11
 TQHWWPlotter.cxx:12
 TQHWWPlotter.cxx:13
 TQHWWPlotter.cxx:14
 TQHWWPlotter.cxx:15
 TQHWWPlotter.cxx:16
 TQHWWPlotter.cxx:17
 TQHWWPlotter.cxx:18
 TQHWWPlotter.cxx:19
 TQHWWPlotter.cxx:20
 TQHWWPlotter.cxx:21
 TQHWWPlotter.cxx:22
 TQHWWPlotter.cxx:23
 TQHWWPlotter.cxx:24
 TQHWWPlotter.cxx:25
 TQHWWPlotter.cxx:26
 TQHWWPlotter.cxx:27
 TQHWWPlotter.cxx:28
 TQHWWPlotter.cxx:29
 TQHWWPlotter.cxx:30
 TQHWWPlotter.cxx:31
 TQHWWPlotter.cxx:32
 TQHWWPlotter.cxx:33
 TQHWWPlotter.cxx:34
 TQHWWPlotter.cxx:35
 TQHWWPlotter.cxx:36
 TQHWWPlotter.cxx:37
 TQHWWPlotter.cxx:38
 TQHWWPlotter.cxx:39
 TQHWWPlotter.cxx:40
 TQHWWPlotter.cxx:41
 TQHWWPlotter.cxx:42
 TQHWWPlotter.cxx:43
 TQHWWPlotter.cxx:44
 TQHWWPlotter.cxx:45
 TQHWWPlotter.cxx:46
 TQHWWPlotter.cxx:47
 TQHWWPlotter.cxx:48
 TQHWWPlotter.cxx:49
 TQHWWPlotter.cxx:50
 TQHWWPlotter.cxx:51
 TQHWWPlotter.cxx:52
 TQHWWPlotter.cxx:53
 TQHWWPlotter.cxx:54
 TQHWWPlotter.cxx:55
 TQHWWPlotter.cxx:56
 TQHWWPlotter.cxx:57
 TQHWWPlotter.cxx:58
 TQHWWPlotter.cxx:59
 TQHWWPlotter.cxx:60
 TQHWWPlotter.cxx:61
 TQHWWPlotter.cxx:62
 TQHWWPlotter.cxx:63
 TQHWWPlotter.cxx:64
 TQHWWPlotter.cxx:65
 TQHWWPlotter.cxx:66
 TQHWWPlotter.cxx:67
 TQHWWPlotter.cxx:68
 TQHWWPlotter.cxx:69
 TQHWWPlotter.cxx:70
 TQHWWPlotter.cxx:71
 TQHWWPlotter.cxx:72
 TQHWWPlotter.cxx:73
 TQHWWPlotter.cxx:74
 TQHWWPlotter.cxx:75
 TQHWWPlotter.cxx:76
 TQHWWPlotter.cxx:77
 TQHWWPlotter.cxx:78
 TQHWWPlotter.cxx:79
 TQHWWPlotter.cxx:80
 TQHWWPlotter.cxx:81
 TQHWWPlotter.cxx:82
 TQHWWPlotter.cxx:83
 TQHWWPlotter.cxx:84
 TQHWWPlotter.cxx:85
 TQHWWPlotter.cxx:86
 TQHWWPlotter.cxx:87
 TQHWWPlotter.cxx:88
 TQHWWPlotter.cxx:89
 TQHWWPlotter.cxx:90
 TQHWWPlotter.cxx:91
 TQHWWPlotter.cxx:92
 TQHWWPlotter.cxx:93
 TQHWWPlotter.cxx:94
 TQHWWPlotter.cxx:95
 TQHWWPlotter.cxx:96
 TQHWWPlotter.cxx:97
 TQHWWPlotter.cxx:98
 TQHWWPlotter.cxx:99
 TQHWWPlotter.cxx:100
 TQHWWPlotter.cxx:101
 TQHWWPlotter.cxx:102
 TQHWWPlotter.cxx:103
 TQHWWPlotter.cxx:104
 TQHWWPlotter.cxx:105
 TQHWWPlotter.cxx:106
 TQHWWPlotter.cxx:107
 TQHWWPlotter.cxx:108
 TQHWWPlotter.cxx:109
 TQHWWPlotter.cxx:110
 TQHWWPlotter.cxx:111
 TQHWWPlotter.cxx:112
 TQHWWPlotter.cxx:113
 TQHWWPlotter.cxx:114
 TQHWWPlotter.cxx:115
 TQHWWPlotter.cxx:116
 TQHWWPlotter.cxx:117
 TQHWWPlotter.cxx:118
 TQHWWPlotter.cxx:119
 TQHWWPlotter.cxx:120
 TQHWWPlotter.cxx:121
 TQHWWPlotter.cxx:122
 TQHWWPlotter.cxx:123
 TQHWWPlotter.cxx:124
 TQHWWPlotter.cxx:125
 TQHWWPlotter.cxx:126
 TQHWWPlotter.cxx:127
 TQHWWPlotter.cxx:128
 TQHWWPlotter.cxx:129
 TQHWWPlotter.cxx:130
 TQHWWPlotter.cxx:131
 TQHWWPlotter.cxx:132
 TQHWWPlotter.cxx:133
 TQHWWPlotter.cxx:134
 TQHWWPlotter.cxx:135
 TQHWWPlotter.cxx:136
 TQHWWPlotter.cxx:137
 TQHWWPlotter.cxx:138
 TQHWWPlotter.cxx:139
 TQHWWPlotter.cxx:140
 TQHWWPlotter.cxx:141
 TQHWWPlotter.cxx:142
 TQHWWPlotter.cxx:143
 TQHWWPlotter.cxx:144
 TQHWWPlotter.cxx:145
 TQHWWPlotter.cxx:146
 TQHWWPlotter.cxx:147
 TQHWWPlotter.cxx:148
 TQHWWPlotter.cxx:149
 TQHWWPlotter.cxx:150
 TQHWWPlotter.cxx:151
 TQHWWPlotter.cxx:152
 TQHWWPlotter.cxx:153
 TQHWWPlotter.cxx:154
 TQHWWPlotter.cxx:155
 TQHWWPlotter.cxx:156
 TQHWWPlotter.cxx:157
 TQHWWPlotter.cxx:158
 TQHWWPlotter.cxx:159
 TQHWWPlotter.cxx:160
 TQHWWPlotter.cxx:161
 TQHWWPlotter.cxx:162
 TQHWWPlotter.cxx:163
 TQHWWPlotter.cxx:164
 TQHWWPlotter.cxx:165
 TQHWWPlotter.cxx:166
 TQHWWPlotter.cxx:167
 TQHWWPlotter.cxx:168
 TQHWWPlotter.cxx:169
 TQHWWPlotter.cxx:170
 TQHWWPlotter.cxx:171
 TQHWWPlotter.cxx:172
 TQHWWPlotter.cxx:173
 TQHWWPlotter.cxx:174
 TQHWWPlotter.cxx:175
 TQHWWPlotter.cxx:176
 TQHWWPlotter.cxx:177
 TQHWWPlotter.cxx:178
 TQHWWPlotter.cxx:179
 TQHWWPlotter.cxx:180
 TQHWWPlotter.cxx:181
 TQHWWPlotter.cxx:182
 TQHWWPlotter.cxx:183
 TQHWWPlotter.cxx:184
 TQHWWPlotter.cxx:185
 TQHWWPlotter.cxx:186
 TQHWWPlotter.cxx:187
 TQHWWPlotter.cxx:188
 TQHWWPlotter.cxx:189
 TQHWWPlotter.cxx:190
 TQHWWPlotter.cxx:191
 TQHWWPlotter.cxx:192
 TQHWWPlotter.cxx:193
 TQHWWPlotter.cxx:194
 TQHWWPlotter.cxx:195
 TQHWWPlotter.cxx:196
 TQHWWPlotter.cxx:197
 TQHWWPlotter.cxx:198
 TQHWWPlotter.cxx:199
 TQHWWPlotter.cxx:200
 TQHWWPlotter.cxx:201
 TQHWWPlotter.cxx:202
 TQHWWPlotter.cxx:203
 TQHWWPlotter.cxx:204
 TQHWWPlotter.cxx:205
 TQHWWPlotter.cxx:206
 TQHWWPlotter.cxx:207
 TQHWWPlotter.cxx:208
 TQHWWPlotter.cxx:209
 TQHWWPlotter.cxx:210
 TQHWWPlotter.cxx:211
 TQHWWPlotter.cxx:212
 TQHWWPlotter.cxx:213
 TQHWWPlotter.cxx:214
 TQHWWPlotter.cxx:215
 TQHWWPlotter.cxx:216
 TQHWWPlotter.cxx:217
 TQHWWPlotter.cxx:218
 TQHWWPlotter.cxx:219
 TQHWWPlotter.cxx:220
 TQHWWPlotter.cxx:221
 TQHWWPlotter.cxx:222
 TQHWWPlotter.cxx:223
 TQHWWPlotter.cxx:224
 TQHWWPlotter.cxx:225
 TQHWWPlotter.cxx:226
 TQHWWPlotter.cxx:227
 TQHWWPlotter.cxx:228
 TQHWWPlotter.cxx:229
 TQHWWPlotter.cxx:230
 TQHWWPlotter.cxx:231
 TQHWWPlotter.cxx:232
 TQHWWPlotter.cxx:233
 TQHWWPlotter.cxx:234
 TQHWWPlotter.cxx:235
 TQHWWPlotter.cxx:236
 TQHWWPlotter.cxx:237
 TQHWWPlotter.cxx:238
 TQHWWPlotter.cxx:239
 TQHWWPlotter.cxx:240
 TQHWWPlotter.cxx:241
 TQHWWPlotter.cxx:242
 TQHWWPlotter.cxx:243
 TQHWWPlotter.cxx:244
 TQHWWPlotter.cxx:245
 TQHWWPlotter.cxx:246
 TQHWWPlotter.cxx:247
 TQHWWPlotter.cxx:248
 TQHWWPlotter.cxx:249
 TQHWWPlotter.cxx:250
 TQHWWPlotter.cxx:251
 TQHWWPlotter.cxx:252
 TQHWWPlotter.cxx:253
 TQHWWPlotter.cxx:254
 TQHWWPlotter.cxx:255
 TQHWWPlotter.cxx:256
 TQHWWPlotter.cxx:257
 TQHWWPlotter.cxx:258
 TQHWWPlotter.cxx:259
 TQHWWPlotter.cxx:260
 TQHWWPlotter.cxx:261
 TQHWWPlotter.cxx:262
 TQHWWPlotter.cxx:263
 TQHWWPlotter.cxx:264
 TQHWWPlotter.cxx:265
 TQHWWPlotter.cxx:266
 TQHWWPlotter.cxx:267
 TQHWWPlotter.cxx:268
 TQHWWPlotter.cxx:269
 TQHWWPlotter.cxx:270
 TQHWWPlotter.cxx:271
 TQHWWPlotter.cxx:272
 TQHWWPlotter.cxx:273
 TQHWWPlotter.cxx:274
 TQHWWPlotter.cxx:275
 TQHWWPlotter.cxx:276
 TQHWWPlotter.cxx:277
 TQHWWPlotter.cxx:278
 TQHWWPlotter.cxx:279
 TQHWWPlotter.cxx:280
 TQHWWPlotter.cxx:281
 TQHWWPlotter.cxx:282
 TQHWWPlotter.cxx:283
 TQHWWPlotter.cxx:284
 TQHWWPlotter.cxx:285
 TQHWWPlotter.cxx:286
 TQHWWPlotter.cxx:287
 TQHWWPlotter.cxx:288
 TQHWWPlotter.cxx:289
 TQHWWPlotter.cxx:290
 TQHWWPlotter.cxx:291
 TQHWWPlotter.cxx:292
 TQHWWPlotter.cxx:293
 TQHWWPlotter.cxx:294
 TQHWWPlotter.cxx:295
 TQHWWPlotter.cxx:296
 TQHWWPlotter.cxx:297
 TQHWWPlotter.cxx:298
 TQHWWPlotter.cxx:299
 TQHWWPlotter.cxx:300
 TQHWWPlotter.cxx:301
 TQHWWPlotter.cxx:302
 TQHWWPlotter.cxx:303
 TQHWWPlotter.cxx:304
 TQHWWPlotter.cxx:305
 TQHWWPlotter.cxx:306
 TQHWWPlotter.cxx:307
 TQHWWPlotter.cxx:308
 TQHWWPlotter.cxx:309
 TQHWWPlotter.cxx:310
 TQHWWPlotter.cxx:311
 TQHWWPlotter.cxx:312
 TQHWWPlotter.cxx:313
 TQHWWPlotter.cxx:314
 TQHWWPlotter.cxx:315
 TQHWWPlotter.cxx:316
 TQHWWPlotter.cxx:317
 TQHWWPlotter.cxx:318
 TQHWWPlotter.cxx:319
 TQHWWPlotter.cxx:320
 TQHWWPlotter.cxx:321
 TQHWWPlotter.cxx:322
 TQHWWPlotter.cxx:323
 TQHWWPlotter.cxx:324
 TQHWWPlotter.cxx:325
 TQHWWPlotter.cxx:326
 TQHWWPlotter.cxx:327
 TQHWWPlotter.cxx:328
 TQHWWPlotter.cxx:329
 TQHWWPlotter.cxx:330
 TQHWWPlotter.cxx:331
 TQHWWPlotter.cxx:332
 TQHWWPlotter.cxx:333
 TQHWWPlotter.cxx:334
 TQHWWPlotter.cxx:335
 TQHWWPlotter.cxx:336
 TQHWWPlotter.cxx:337
 TQHWWPlotter.cxx:338
 TQHWWPlotter.cxx:339
 TQHWWPlotter.cxx:340
 TQHWWPlotter.cxx:341
 TQHWWPlotter.cxx:342
 TQHWWPlotter.cxx:343
 TQHWWPlotter.cxx:344
 TQHWWPlotter.cxx:345
 TQHWWPlotter.cxx:346
 TQHWWPlotter.cxx:347
 TQHWWPlotter.cxx:348
 TQHWWPlotter.cxx:349
 TQHWWPlotter.cxx:350
 TQHWWPlotter.cxx:351
 TQHWWPlotter.cxx:352
 TQHWWPlotter.cxx:353
 TQHWWPlotter.cxx:354
 TQHWWPlotter.cxx:355
 TQHWWPlotter.cxx:356
 TQHWWPlotter.cxx:357
 TQHWWPlotter.cxx:358
 TQHWWPlotter.cxx:359
 TQHWWPlotter.cxx:360
 TQHWWPlotter.cxx:361
 TQHWWPlotter.cxx:362
 TQHWWPlotter.cxx:363
 TQHWWPlotter.cxx:364
 TQHWWPlotter.cxx:365
 TQHWWPlotter.cxx:366
 TQHWWPlotter.cxx:367
 TQHWWPlotter.cxx:368
 TQHWWPlotter.cxx:369
 TQHWWPlotter.cxx:370
 TQHWWPlotter.cxx:371
 TQHWWPlotter.cxx:372
 TQHWWPlotter.cxx:373
 TQHWWPlotter.cxx:374
 TQHWWPlotter.cxx:375
 TQHWWPlotter.cxx:376
 TQHWWPlotter.cxx:377
 TQHWWPlotter.cxx:378
 TQHWWPlotter.cxx:379
 TQHWWPlotter.cxx:380
 TQHWWPlotter.cxx:381
 TQHWWPlotter.cxx:382
 TQHWWPlotter.cxx:383
 TQHWWPlotter.cxx:384
 TQHWWPlotter.cxx:385
 TQHWWPlotter.cxx:386
 TQHWWPlotter.cxx:387
 TQHWWPlotter.cxx:388
 TQHWWPlotter.cxx:389
 TQHWWPlotter.cxx:390
 TQHWWPlotter.cxx:391
 TQHWWPlotter.cxx:392
 TQHWWPlotter.cxx:393
 TQHWWPlotter.cxx:394
 TQHWWPlotter.cxx:395
 TQHWWPlotter.cxx:396
 TQHWWPlotter.cxx:397
 TQHWWPlotter.cxx:398
 TQHWWPlotter.cxx:399
 TQHWWPlotter.cxx:400
 TQHWWPlotter.cxx:401
 TQHWWPlotter.cxx:402
 TQHWWPlotter.cxx:403
 TQHWWPlotter.cxx:404
 TQHWWPlotter.cxx:405
 TQHWWPlotter.cxx:406
 TQHWWPlotter.cxx:407
 TQHWWPlotter.cxx:408
 TQHWWPlotter.cxx:409
 TQHWWPlotter.cxx:410
 TQHWWPlotter.cxx:411
 TQHWWPlotter.cxx:412
 TQHWWPlotter.cxx:413
 TQHWWPlotter.cxx:414
 TQHWWPlotter.cxx:415
 TQHWWPlotter.cxx:416
 TQHWWPlotter.cxx:417
 TQHWWPlotter.cxx:418
 TQHWWPlotter.cxx:419
 TQHWWPlotter.cxx:420
 TQHWWPlotter.cxx:421
 TQHWWPlotter.cxx:422
 TQHWWPlotter.cxx:423
 TQHWWPlotter.cxx:424
 TQHWWPlotter.cxx:425
 TQHWWPlotter.cxx:426
 TQHWWPlotter.cxx:427
 TQHWWPlotter.cxx:428
 TQHWWPlotter.cxx:429
 TQHWWPlotter.cxx:430
 TQHWWPlotter.cxx:431
 TQHWWPlotter.cxx:432
 TQHWWPlotter.cxx:433
 TQHWWPlotter.cxx:434
 TQHWWPlotter.cxx:435
 TQHWWPlotter.cxx:436
 TQHWWPlotter.cxx:437
 TQHWWPlotter.cxx:438
 TQHWWPlotter.cxx:439
 TQHWWPlotter.cxx:440
 TQHWWPlotter.cxx:441
 TQHWWPlotter.cxx:442
 TQHWWPlotter.cxx:443
 TQHWWPlotter.cxx:444
 TQHWWPlotter.cxx:445
 TQHWWPlotter.cxx:446
 TQHWWPlotter.cxx:447
 TQHWWPlotter.cxx:448
 TQHWWPlotter.cxx:449
 TQHWWPlotter.cxx:450
 TQHWWPlotter.cxx:451
 TQHWWPlotter.cxx:452
 TQHWWPlotter.cxx:453
 TQHWWPlotter.cxx:454
 TQHWWPlotter.cxx:455
 TQHWWPlotter.cxx:456
 TQHWWPlotter.cxx:457
 TQHWWPlotter.cxx:458
 TQHWWPlotter.cxx:459
 TQHWWPlotter.cxx:460
 TQHWWPlotter.cxx:461
 TQHWWPlotter.cxx:462
 TQHWWPlotter.cxx:463
 TQHWWPlotter.cxx:464
 TQHWWPlotter.cxx:465
 TQHWWPlotter.cxx:466
 TQHWWPlotter.cxx:467
 TQHWWPlotter.cxx:468
 TQHWWPlotter.cxx:469
 TQHWWPlotter.cxx:470
 TQHWWPlotter.cxx:471
 TQHWWPlotter.cxx:472
 TQHWWPlotter.cxx:473
 TQHWWPlotter.cxx:474
 TQHWWPlotter.cxx:475
 TQHWWPlotter.cxx:476
 TQHWWPlotter.cxx:477
 TQHWWPlotter.cxx:478
 TQHWWPlotter.cxx:479
 TQHWWPlotter.cxx:480
 TQHWWPlotter.cxx:481
 TQHWWPlotter.cxx:482
 TQHWWPlotter.cxx:483
 TQHWWPlotter.cxx:484
 TQHWWPlotter.cxx:485
 TQHWWPlotter.cxx:486
 TQHWWPlotter.cxx:487
 TQHWWPlotter.cxx:488
 TQHWWPlotter.cxx:489
 TQHWWPlotter.cxx:490
 TQHWWPlotter.cxx:491
 TQHWWPlotter.cxx:492
 TQHWWPlotter.cxx:493
 TQHWWPlotter.cxx:494
 TQHWWPlotter.cxx:495
 TQHWWPlotter.cxx:496
 TQHWWPlotter.cxx:497
 TQHWWPlotter.cxx:498
 TQHWWPlotter.cxx:499
 TQHWWPlotter.cxx:500
 TQHWWPlotter.cxx:501
 TQHWWPlotter.cxx:502
 TQHWWPlotter.cxx:503
 TQHWWPlotter.cxx:504
 TQHWWPlotter.cxx:505
 TQHWWPlotter.cxx:506
 TQHWWPlotter.cxx:507
 TQHWWPlotter.cxx:508
 TQHWWPlotter.cxx:509
 TQHWWPlotter.cxx:510
 TQHWWPlotter.cxx:511
 TQHWWPlotter.cxx:512
 TQHWWPlotter.cxx:513
 TQHWWPlotter.cxx:514
 TQHWWPlotter.cxx:515
 TQHWWPlotter.cxx:516
 TQHWWPlotter.cxx:517
 TQHWWPlotter.cxx:518
 TQHWWPlotter.cxx:519
 TQHWWPlotter.cxx:520
 TQHWWPlotter.cxx:521
 TQHWWPlotter.cxx:522
 TQHWWPlotter.cxx:523
 TQHWWPlotter.cxx:524
 TQHWWPlotter.cxx:525
 TQHWWPlotter.cxx:526
 TQHWWPlotter.cxx:527
 TQHWWPlotter.cxx:528
 TQHWWPlotter.cxx:529
 TQHWWPlotter.cxx:530
 TQHWWPlotter.cxx:531
 TQHWWPlotter.cxx:532
 TQHWWPlotter.cxx:533
 TQHWWPlotter.cxx:534
 TQHWWPlotter.cxx:535
 TQHWWPlotter.cxx:536
 TQHWWPlotter.cxx:537
 TQHWWPlotter.cxx:538
 TQHWWPlotter.cxx:539
 TQHWWPlotter.cxx:540
 TQHWWPlotter.cxx:541
 TQHWWPlotter.cxx:542
 TQHWWPlotter.cxx:543
 TQHWWPlotter.cxx:544
 TQHWWPlotter.cxx:545
 TQHWWPlotter.cxx:546
 TQHWWPlotter.cxx:547
 TQHWWPlotter.cxx:548
 TQHWWPlotter.cxx:549
 TQHWWPlotter.cxx:550
 TQHWWPlotter.cxx:551
 TQHWWPlotter.cxx:552
 TQHWWPlotter.cxx:553
 TQHWWPlotter.cxx:554
 TQHWWPlotter.cxx:555
 TQHWWPlotter.cxx:556
 TQHWWPlotter.cxx:557
 TQHWWPlotter.cxx:558
 TQHWWPlotter.cxx:559
 TQHWWPlotter.cxx:560
 TQHWWPlotter.cxx:561
 TQHWWPlotter.cxx:562
 TQHWWPlotter.cxx:563
 TQHWWPlotter.cxx:564
 TQHWWPlotter.cxx:565
 TQHWWPlotter.cxx:566
 TQHWWPlotter.cxx:567
 TQHWWPlotter.cxx:568
 TQHWWPlotter.cxx:569
 TQHWWPlotter.cxx:570
 TQHWWPlotter.cxx:571
 TQHWWPlotter.cxx:572
 TQHWWPlotter.cxx:573
 TQHWWPlotter.cxx:574
 TQHWWPlotter.cxx:575
 TQHWWPlotter.cxx:576
 TQHWWPlotter.cxx:577
 TQHWWPlotter.cxx:578
 TQHWWPlotter.cxx:579
 TQHWWPlotter.cxx:580
 TQHWWPlotter.cxx:581
 TQHWWPlotter.cxx:582
 TQHWWPlotter.cxx:583
 TQHWWPlotter.cxx:584
 TQHWWPlotter.cxx:585
 TQHWWPlotter.cxx:586
 TQHWWPlotter.cxx:587
 TQHWWPlotter.cxx:588
 TQHWWPlotter.cxx:589
 TQHWWPlotter.cxx:590
 TQHWWPlotter.cxx:591
 TQHWWPlotter.cxx:592
 TQHWWPlotter.cxx:593
 TQHWWPlotter.cxx:594
 TQHWWPlotter.cxx:595
 TQHWWPlotter.cxx:596
 TQHWWPlotter.cxx:597
 TQHWWPlotter.cxx:598
 TQHWWPlotter.cxx:599
 TQHWWPlotter.cxx:600
 TQHWWPlotter.cxx:601
 TQHWWPlotter.cxx:602
 TQHWWPlotter.cxx:603
 TQHWWPlotter.cxx:604
 TQHWWPlotter.cxx:605
 TQHWWPlotter.cxx:606
 TQHWWPlotter.cxx:607
 TQHWWPlotter.cxx:608
 TQHWWPlotter.cxx:609
 TQHWWPlotter.cxx:610
 TQHWWPlotter.cxx:611
 TQHWWPlotter.cxx:612
 TQHWWPlotter.cxx:613
 TQHWWPlotter.cxx:614
 TQHWWPlotter.cxx:615
 TQHWWPlotter.cxx:616
 TQHWWPlotter.cxx:617
 TQHWWPlotter.cxx:618
 TQHWWPlotter.cxx:619
 TQHWWPlotter.cxx:620
 TQHWWPlotter.cxx:621
 TQHWWPlotter.cxx:622
 TQHWWPlotter.cxx:623
 TQHWWPlotter.cxx:624
 TQHWWPlotter.cxx:625
 TQHWWPlotter.cxx:626
 TQHWWPlotter.cxx:627
 TQHWWPlotter.cxx:628
 TQHWWPlotter.cxx:629
 TQHWWPlotter.cxx:630
 TQHWWPlotter.cxx:631
 TQHWWPlotter.cxx:632
 TQHWWPlotter.cxx:633
 TQHWWPlotter.cxx:634
 TQHWWPlotter.cxx:635
 TQHWWPlotter.cxx:636
 TQHWWPlotter.cxx:637
 TQHWWPlotter.cxx:638
 TQHWWPlotter.cxx:639
 TQHWWPlotter.cxx:640
 TQHWWPlotter.cxx:641
 TQHWWPlotter.cxx:642
 TQHWWPlotter.cxx:643
 TQHWWPlotter.cxx:644
 TQHWWPlotter.cxx:645
 TQHWWPlotter.cxx:646
 TQHWWPlotter.cxx:647
 TQHWWPlotter.cxx:648
 TQHWWPlotter.cxx:649
 TQHWWPlotter.cxx:650
 TQHWWPlotter.cxx:651
 TQHWWPlotter.cxx:652
 TQHWWPlotter.cxx:653
 TQHWWPlotter.cxx:654
 TQHWWPlotter.cxx:655
 TQHWWPlotter.cxx:656
 TQHWWPlotter.cxx:657
 TQHWWPlotter.cxx:658
 TQHWWPlotter.cxx:659
 TQHWWPlotter.cxx:660
 TQHWWPlotter.cxx:661
 TQHWWPlotter.cxx:662
 TQHWWPlotter.cxx:663
 TQHWWPlotter.cxx:664
 TQHWWPlotter.cxx:665
 TQHWWPlotter.cxx:666
 TQHWWPlotter.cxx:667
 TQHWWPlotter.cxx:668
 TQHWWPlotter.cxx:669
 TQHWWPlotter.cxx:670
 TQHWWPlotter.cxx:671
 TQHWWPlotter.cxx:672
 TQHWWPlotter.cxx:673
 TQHWWPlotter.cxx:674
 TQHWWPlotter.cxx:675
 TQHWWPlotter.cxx:676
 TQHWWPlotter.cxx:677
 TQHWWPlotter.cxx:678
 TQHWWPlotter.cxx:679
 TQHWWPlotter.cxx:680
 TQHWWPlotter.cxx:681
 TQHWWPlotter.cxx:682
 TQHWWPlotter.cxx:683
 TQHWWPlotter.cxx:684
 TQHWWPlotter.cxx:685
 TQHWWPlotter.cxx:686
 TQHWWPlotter.cxx:687
 TQHWWPlotter.cxx:688
 TQHWWPlotter.cxx:689
 TQHWWPlotter.cxx:690
 TQHWWPlotter.cxx:691
 TQHWWPlotter.cxx:692
 TQHWWPlotter.cxx:693
 TQHWWPlotter.cxx:694
 TQHWWPlotter.cxx:695
 TQHWWPlotter.cxx:696
 TQHWWPlotter.cxx:697
 TQHWWPlotter.cxx:698
 TQHWWPlotter.cxx:699
 TQHWWPlotter.cxx:700
 TQHWWPlotter.cxx:701
 TQHWWPlotter.cxx:702
 TQHWWPlotter.cxx:703
 TQHWWPlotter.cxx:704
 TQHWWPlotter.cxx:705
 TQHWWPlotter.cxx:706
 TQHWWPlotter.cxx:707
 TQHWWPlotter.cxx:708
 TQHWWPlotter.cxx:709
 TQHWWPlotter.cxx:710
 TQHWWPlotter.cxx:711
 TQHWWPlotter.cxx:712
 TQHWWPlotter.cxx:713
 TQHWWPlotter.cxx:714
 TQHWWPlotter.cxx:715
 TQHWWPlotter.cxx:716
 TQHWWPlotter.cxx:717
 TQHWWPlotter.cxx:718
 TQHWWPlotter.cxx:719
 TQHWWPlotter.cxx:720
 TQHWWPlotter.cxx:721
 TQHWWPlotter.cxx:722
 TQHWWPlotter.cxx:723
 TQHWWPlotter.cxx:724
 TQHWWPlotter.cxx:725
 TQHWWPlotter.cxx:726
 TQHWWPlotter.cxx:727
 TQHWWPlotter.cxx:728
 TQHWWPlotter.cxx:729
 TQHWWPlotter.cxx:730
 TQHWWPlotter.cxx:731
 TQHWWPlotter.cxx:732
 TQHWWPlotter.cxx:733
 TQHWWPlotter.cxx:734
 TQHWWPlotter.cxx:735
 TQHWWPlotter.cxx:736
 TQHWWPlotter.cxx:737
 TQHWWPlotter.cxx:738
 TQHWWPlotter.cxx:739
 TQHWWPlotter.cxx:740
 TQHWWPlotter.cxx:741
 TQHWWPlotter.cxx:742
 TQHWWPlotter.cxx:743
 TQHWWPlotter.cxx:744
 TQHWWPlotter.cxx:745
 TQHWWPlotter.cxx:746
 TQHWWPlotter.cxx:747
 TQHWWPlotter.cxx:748
 TQHWWPlotter.cxx:749
 TQHWWPlotter.cxx:750
 TQHWWPlotter.cxx:751
 TQHWWPlotter.cxx:752
 TQHWWPlotter.cxx:753
 TQHWWPlotter.cxx:754
 TQHWWPlotter.cxx:755
 TQHWWPlotter.cxx:756
 TQHWWPlotter.cxx:757
 TQHWWPlotter.cxx:758
 TQHWWPlotter.cxx:759
 TQHWWPlotter.cxx:760
 TQHWWPlotter.cxx:761
 TQHWWPlotter.cxx:762
 TQHWWPlotter.cxx:763
 TQHWWPlotter.cxx:764
 TQHWWPlotter.cxx:765
 TQHWWPlotter.cxx:766
 TQHWWPlotter.cxx:767
 TQHWWPlotter.cxx:768
 TQHWWPlotter.cxx:769
 TQHWWPlotter.cxx:770
 TQHWWPlotter.cxx:771
 TQHWWPlotter.cxx:772
 TQHWWPlotter.cxx:773
 TQHWWPlotter.cxx:774
 TQHWWPlotter.cxx:775
 TQHWWPlotter.cxx:776
 TQHWWPlotter.cxx:777
 TQHWWPlotter.cxx:778
 TQHWWPlotter.cxx:779
 TQHWWPlotter.cxx:780
 TQHWWPlotter.cxx:781
 TQHWWPlotter.cxx:782
 TQHWWPlotter.cxx:783
 TQHWWPlotter.cxx:784
 TQHWWPlotter.cxx:785
 TQHWWPlotter.cxx:786
 TQHWWPlotter.cxx:787
 TQHWWPlotter.cxx:788
 TQHWWPlotter.cxx:789
 TQHWWPlotter.cxx:790
 TQHWWPlotter.cxx:791
 TQHWWPlotter.cxx:792
 TQHWWPlotter.cxx:793
 TQHWWPlotter.cxx:794
 TQHWWPlotter.cxx:795
 TQHWWPlotter.cxx:796
 TQHWWPlotter.cxx:797
 TQHWWPlotter.cxx:798
 TQHWWPlotter.cxx:799
 TQHWWPlotter.cxx:800
 TQHWWPlotter.cxx:801
 TQHWWPlotter.cxx:802
 TQHWWPlotter.cxx:803
 TQHWWPlotter.cxx:804
 TQHWWPlotter.cxx:805
 TQHWWPlotter.cxx:806
 TQHWWPlotter.cxx:807
 TQHWWPlotter.cxx:808
 TQHWWPlotter.cxx:809
 TQHWWPlotter.cxx:810
 TQHWWPlotter.cxx:811
 TQHWWPlotter.cxx:812
 TQHWWPlotter.cxx:813
 TQHWWPlotter.cxx:814
 TQHWWPlotter.cxx:815
 TQHWWPlotter.cxx:816
 TQHWWPlotter.cxx:817
 TQHWWPlotter.cxx:818
 TQHWWPlotter.cxx:819
 TQHWWPlotter.cxx:820
 TQHWWPlotter.cxx:821
 TQHWWPlotter.cxx:822
 TQHWWPlotter.cxx:823
 TQHWWPlotter.cxx:824
 TQHWWPlotter.cxx:825
 TQHWWPlotter.cxx:826
 TQHWWPlotter.cxx:827
 TQHWWPlotter.cxx:828
 TQHWWPlotter.cxx:829
 TQHWWPlotter.cxx:830
 TQHWWPlotter.cxx:831
 TQHWWPlotter.cxx:832
 TQHWWPlotter.cxx:833
 TQHWWPlotter.cxx:834
 TQHWWPlotter.cxx:835
 TQHWWPlotter.cxx:836
 TQHWWPlotter.cxx:837
 TQHWWPlotter.cxx:838
 TQHWWPlotter.cxx:839
 TQHWWPlotter.cxx:840
 TQHWWPlotter.cxx:841
 TQHWWPlotter.cxx:842
 TQHWWPlotter.cxx:843
 TQHWWPlotter.cxx:844
 TQHWWPlotter.cxx:845
 TQHWWPlotter.cxx:846
 TQHWWPlotter.cxx:847
 TQHWWPlotter.cxx:848
 TQHWWPlotter.cxx:849
 TQHWWPlotter.cxx:850
 TQHWWPlotter.cxx:851
 TQHWWPlotter.cxx:852
 TQHWWPlotter.cxx:853
 TQHWWPlotter.cxx:854
 TQHWWPlotter.cxx:855
 TQHWWPlotter.cxx:856
 TQHWWPlotter.cxx:857
 TQHWWPlotter.cxx:858
 TQHWWPlotter.cxx:859
 TQHWWPlotter.cxx:860
 TQHWWPlotter.cxx:861
 TQHWWPlotter.cxx:862
 TQHWWPlotter.cxx:863
 TQHWWPlotter.cxx:864
 TQHWWPlotter.cxx:865
 TQHWWPlotter.cxx:866
 TQHWWPlotter.cxx:867
 TQHWWPlotter.cxx:868
 TQHWWPlotter.cxx:869
 TQHWWPlotter.cxx:870
 TQHWWPlotter.cxx:871
 TQHWWPlotter.cxx:872
 TQHWWPlotter.cxx:873
 TQHWWPlotter.cxx:874
 TQHWWPlotter.cxx:875
 TQHWWPlotter.cxx:876
 TQHWWPlotter.cxx:877
 TQHWWPlotter.cxx:878
 TQHWWPlotter.cxx:879
 TQHWWPlotter.cxx:880
 TQHWWPlotter.cxx:881
 TQHWWPlotter.cxx:882
 TQHWWPlotter.cxx:883
 TQHWWPlotter.cxx:884
 TQHWWPlotter.cxx:885
 TQHWWPlotter.cxx:886
 TQHWWPlotter.cxx:887
 TQHWWPlotter.cxx:888
 TQHWWPlotter.cxx:889
 TQHWWPlotter.cxx:890
 TQHWWPlotter.cxx:891
 TQHWWPlotter.cxx:892
 TQHWWPlotter.cxx:893
 TQHWWPlotter.cxx:894
 TQHWWPlotter.cxx:895
 TQHWWPlotter.cxx:896
 TQHWWPlotter.cxx:897
 TQHWWPlotter.cxx:898
 TQHWWPlotter.cxx:899
 TQHWWPlotter.cxx:900
 TQHWWPlotter.cxx:901
 TQHWWPlotter.cxx:902
 TQHWWPlotter.cxx:903
 TQHWWPlotter.cxx:904
 TQHWWPlotter.cxx:905
 TQHWWPlotter.cxx:906
 TQHWWPlotter.cxx:907
 TQHWWPlotter.cxx:908
 TQHWWPlotter.cxx:909
 TQHWWPlotter.cxx:910
 TQHWWPlotter.cxx:911
 TQHWWPlotter.cxx:912
 TQHWWPlotter.cxx:913
 TQHWWPlotter.cxx:914
 TQHWWPlotter.cxx:915
 TQHWWPlotter.cxx:916
 TQHWWPlotter.cxx:917
 TQHWWPlotter.cxx:918
 TQHWWPlotter.cxx:919
 TQHWWPlotter.cxx:920
 TQHWWPlotter.cxx:921
 TQHWWPlotter.cxx:922
 TQHWWPlotter.cxx:923
 TQHWWPlotter.cxx:924
 TQHWWPlotter.cxx:925
 TQHWWPlotter.cxx:926
 TQHWWPlotter.cxx:927
 TQHWWPlotter.cxx:928
 TQHWWPlotter.cxx:929
 TQHWWPlotter.cxx:930
 TQHWWPlotter.cxx:931
 TQHWWPlotter.cxx:932
 TQHWWPlotter.cxx:933
 TQHWWPlotter.cxx:934
 TQHWWPlotter.cxx:935
 TQHWWPlotter.cxx:936
 TQHWWPlotter.cxx:937
 TQHWWPlotter.cxx:938
 TQHWWPlotter.cxx:939
 TQHWWPlotter.cxx:940
 TQHWWPlotter.cxx:941
 TQHWWPlotter.cxx:942
 TQHWWPlotter.cxx:943
 TQHWWPlotter.cxx:944
 TQHWWPlotter.cxx:945
 TQHWWPlotter.cxx:946
 TQHWWPlotter.cxx:947
 TQHWWPlotter.cxx:948
 TQHWWPlotter.cxx:949
 TQHWWPlotter.cxx:950
 TQHWWPlotter.cxx:951
 TQHWWPlotter.cxx:952
 TQHWWPlotter.cxx:953
 TQHWWPlotter.cxx:954
 TQHWWPlotter.cxx:955
 TQHWWPlotter.cxx:956
 TQHWWPlotter.cxx:957
 TQHWWPlotter.cxx:958
 TQHWWPlotter.cxx:959
 TQHWWPlotter.cxx:960
 TQHWWPlotter.cxx:961
 TQHWWPlotter.cxx:962
 TQHWWPlotter.cxx:963
 TQHWWPlotter.cxx:964
 TQHWWPlotter.cxx:965
 TQHWWPlotter.cxx:966
 TQHWWPlotter.cxx:967
 TQHWWPlotter.cxx:968
 TQHWWPlotter.cxx:969
 TQHWWPlotter.cxx:970
 TQHWWPlotter.cxx:971
 TQHWWPlotter.cxx:972
 TQHWWPlotter.cxx:973
 TQHWWPlotter.cxx:974
 TQHWWPlotter.cxx:975
 TQHWWPlotter.cxx:976
 TQHWWPlotter.cxx:977
 TQHWWPlotter.cxx:978
 TQHWWPlotter.cxx:979
 TQHWWPlotter.cxx:980
 TQHWWPlotter.cxx:981
 TQHWWPlotter.cxx:982
 TQHWWPlotter.cxx:983
 TQHWWPlotter.cxx:984
 TQHWWPlotter.cxx:985
 TQHWWPlotter.cxx:986
 TQHWWPlotter.cxx:987
 TQHWWPlotter.cxx:988
 TQHWWPlotter.cxx:989
 TQHWWPlotter.cxx:990
 TQHWWPlotter.cxx:991
 TQHWWPlotter.cxx:992
 TQHWWPlotter.cxx:993
 TQHWWPlotter.cxx:994
 TQHWWPlotter.cxx:995
 TQHWWPlotter.cxx:996
 TQHWWPlotter.cxx:997
 TQHWWPlotter.cxx:998
 TQHWWPlotter.cxx:999
 TQHWWPlotter.cxx:1000
 TQHWWPlotter.cxx:1001
 TQHWWPlotter.cxx:1002
 TQHWWPlotter.cxx:1003
 TQHWWPlotter.cxx:1004
 TQHWWPlotter.cxx:1005
 TQHWWPlotter.cxx:1006
 TQHWWPlotter.cxx:1007
 TQHWWPlotter.cxx:1008
 TQHWWPlotter.cxx:1009
 TQHWWPlotter.cxx:1010
 TQHWWPlotter.cxx:1011
 TQHWWPlotter.cxx:1012
 TQHWWPlotter.cxx:1013
 TQHWWPlotter.cxx:1014
 TQHWWPlotter.cxx:1015
 TQHWWPlotter.cxx:1016
 TQHWWPlotter.cxx:1017
 TQHWWPlotter.cxx:1018
 TQHWWPlotter.cxx:1019
 TQHWWPlotter.cxx:1020
 TQHWWPlotter.cxx:1021
 TQHWWPlotter.cxx:1022
 TQHWWPlotter.cxx:1023
 TQHWWPlotter.cxx:1024
 TQHWWPlotter.cxx:1025
 TQHWWPlotter.cxx:1026
 TQHWWPlotter.cxx:1027
 TQHWWPlotter.cxx:1028
 TQHWWPlotter.cxx:1029
 TQHWWPlotter.cxx:1030
 TQHWWPlotter.cxx:1031
 TQHWWPlotter.cxx:1032
 TQHWWPlotter.cxx:1033
 TQHWWPlotter.cxx:1034
 TQHWWPlotter.cxx:1035
 TQHWWPlotter.cxx:1036
 TQHWWPlotter.cxx:1037
 TQHWWPlotter.cxx:1038
 TQHWWPlotter.cxx:1039
 TQHWWPlotter.cxx:1040
 TQHWWPlotter.cxx:1041
 TQHWWPlotter.cxx:1042
 TQHWWPlotter.cxx:1043
 TQHWWPlotter.cxx:1044
 TQHWWPlotter.cxx:1045
 TQHWWPlotter.cxx:1046
 TQHWWPlotter.cxx:1047
 TQHWWPlotter.cxx:1048
 TQHWWPlotter.cxx:1049
 TQHWWPlotter.cxx:1050
 TQHWWPlotter.cxx:1051
 TQHWWPlotter.cxx:1052
 TQHWWPlotter.cxx:1053
 TQHWWPlotter.cxx:1054
 TQHWWPlotter.cxx:1055
 TQHWWPlotter.cxx:1056
 TQHWWPlotter.cxx:1057
 TQHWWPlotter.cxx:1058
 TQHWWPlotter.cxx:1059
 TQHWWPlotter.cxx:1060
 TQHWWPlotter.cxx:1061
 TQHWWPlotter.cxx:1062
 TQHWWPlotter.cxx:1063
 TQHWWPlotter.cxx:1064
 TQHWWPlotter.cxx:1065
 TQHWWPlotter.cxx:1066
 TQHWWPlotter.cxx:1067
 TQHWWPlotter.cxx:1068
 TQHWWPlotter.cxx:1069
 TQHWWPlotter.cxx:1070
 TQHWWPlotter.cxx:1071
 TQHWWPlotter.cxx:1072
 TQHWWPlotter.cxx:1073
 TQHWWPlotter.cxx:1074
 TQHWWPlotter.cxx:1075
 TQHWWPlotter.cxx:1076
 TQHWWPlotter.cxx:1077
 TQHWWPlotter.cxx:1078
 TQHWWPlotter.cxx:1079
 TQHWWPlotter.cxx:1080
 TQHWWPlotter.cxx:1081
 TQHWWPlotter.cxx:1082
 TQHWWPlotter.cxx:1083
 TQHWWPlotter.cxx:1084
 TQHWWPlotter.cxx:1085
 TQHWWPlotter.cxx:1086
 TQHWWPlotter.cxx:1087
 TQHWWPlotter.cxx:1088
 TQHWWPlotter.cxx:1089
 TQHWWPlotter.cxx:1090
 TQHWWPlotter.cxx:1091
 TQHWWPlotter.cxx:1092
 TQHWWPlotter.cxx:1093
 TQHWWPlotter.cxx:1094
 TQHWWPlotter.cxx:1095
 TQHWWPlotter.cxx:1096
 TQHWWPlotter.cxx:1097
 TQHWWPlotter.cxx:1098
 TQHWWPlotter.cxx:1099
 TQHWWPlotter.cxx:1100
 TQHWWPlotter.cxx:1101
 TQHWWPlotter.cxx:1102
 TQHWWPlotter.cxx:1103
 TQHWWPlotter.cxx:1104
 TQHWWPlotter.cxx:1105
 TQHWWPlotter.cxx:1106
 TQHWWPlotter.cxx:1107
 TQHWWPlotter.cxx:1108
 TQHWWPlotter.cxx:1109
 TQHWWPlotter.cxx:1110
 TQHWWPlotter.cxx:1111
 TQHWWPlotter.cxx:1112
 TQHWWPlotter.cxx:1113
 TQHWWPlotter.cxx:1114
 TQHWWPlotter.cxx:1115
 TQHWWPlotter.cxx:1116
 TQHWWPlotter.cxx:1117
 TQHWWPlotter.cxx:1118
 TQHWWPlotter.cxx:1119
 TQHWWPlotter.cxx:1120
 TQHWWPlotter.cxx:1121
 TQHWWPlotter.cxx:1122
 TQHWWPlotter.cxx:1123
 TQHWWPlotter.cxx:1124
 TQHWWPlotter.cxx:1125
 TQHWWPlotter.cxx:1126
 TQHWWPlotter.cxx:1127
 TQHWWPlotter.cxx:1128
 TQHWWPlotter.cxx:1129
 TQHWWPlotter.cxx:1130
 TQHWWPlotter.cxx:1131
 TQHWWPlotter.cxx:1132
 TQHWWPlotter.cxx:1133
 TQHWWPlotter.cxx:1134
 TQHWWPlotter.cxx:1135
 TQHWWPlotter.cxx:1136
 TQHWWPlotter.cxx:1137
 TQHWWPlotter.cxx:1138
 TQHWWPlotter.cxx:1139
 TQHWWPlotter.cxx:1140
 TQHWWPlotter.cxx:1141
 TQHWWPlotter.cxx:1142
 TQHWWPlotter.cxx:1143
 TQHWWPlotter.cxx:1144
 TQHWWPlotter.cxx:1145
 TQHWWPlotter.cxx:1146
 TQHWWPlotter.cxx:1147
 TQHWWPlotter.cxx:1148
 TQHWWPlotter.cxx:1149
 TQHWWPlotter.cxx:1150
 TQHWWPlotter.cxx:1151
 TQHWWPlotter.cxx:1152
 TQHWWPlotter.cxx:1153
 TQHWWPlotter.cxx:1154
 TQHWWPlotter.cxx:1155
 TQHWWPlotter.cxx:1156
 TQHWWPlotter.cxx:1157
 TQHWWPlotter.cxx:1158
 TQHWWPlotter.cxx:1159
 TQHWWPlotter.cxx:1160
 TQHWWPlotter.cxx:1161
 TQHWWPlotter.cxx:1162
 TQHWWPlotter.cxx:1163
 TQHWWPlotter.cxx:1164
 TQHWWPlotter.cxx:1165
 TQHWWPlotter.cxx:1166
 TQHWWPlotter.cxx:1167
 TQHWWPlotter.cxx:1168
 TQHWWPlotter.cxx:1169
 TQHWWPlotter.cxx:1170
 TQHWWPlotter.cxx:1171
 TQHWWPlotter.cxx:1172
 TQHWWPlotter.cxx:1173
 TQHWWPlotter.cxx:1174
 TQHWWPlotter.cxx:1175
 TQHWWPlotter.cxx:1176
 TQHWWPlotter.cxx:1177
 TQHWWPlotter.cxx:1178
 TQHWWPlotter.cxx:1179
 TQHWWPlotter.cxx:1180
 TQHWWPlotter.cxx:1181
 TQHWWPlotter.cxx:1182
 TQHWWPlotter.cxx:1183
 TQHWWPlotter.cxx:1184
 TQHWWPlotter.cxx:1185
 TQHWWPlotter.cxx:1186
 TQHWWPlotter.cxx:1187
 TQHWWPlotter.cxx:1188
 TQHWWPlotter.cxx:1189
 TQHWWPlotter.cxx:1190
 TQHWWPlotter.cxx:1191
 TQHWWPlotter.cxx:1192
 TQHWWPlotter.cxx:1193
 TQHWWPlotter.cxx:1194
 TQHWWPlotter.cxx:1195
 TQHWWPlotter.cxx:1196
 TQHWWPlotter.cxx:1197
 TQHWWPlotter.cxx:1198
 TQHWWPlotter.cxx:1199
 TQHWWPlotter.cxx:1200
 TQHWWPlotter.cxx:1201
 TQHWWPlotter.cxx:1202
 TQHWWPlotter.cxx:1203
 TQHWWPlotter.cxx:1204
 TQHWWPlotter.cxx:1205
 TQHWWPlotter.cxx:1206
 TQHWWPlotter.cxx:1207
 TQHWWPlotter.cxx:1208
 TQHWWPlotter.cxx:1209
 TQHWWPlotter.cxx:1210
 TQHWWPlotter.cxx:1211
 TQHWWPlotter.cxx:1212
 TQHWWPlotter.cxx:1213
 TQHWWPlotter.cxx:1214
 TQHWWPlotter.cxx:1215
 TQHWWPlotter.cxx:1216
 TQHWWPlotter.cxx:1217
 TQHWWPlotter.cxx:1218
 TQHWWPlotter.cxx:1219
 TQHWWPlotter.cxx:1220
 TQHWWPlotter.cxx:1221
 TQHWWPlotter.cxx:1222
 TQHWWPlotter.cxx:1223
 TQHWWPlotter.cxx:1224
 TQHWWPlotter.cxx:1225
 TQHWWPlotter.cxx:1226
 TQHWWPlotter.cxx:1227
 TQHWWPlotter.cxx:1228
 TQHWWPlotter.cxx:1229
 TQHWWPlotter.cxx:1230
 TQHWWPlotter.cxx:1231
 TQHWWPlotter.cxx:1232
 TQHWWPlotter.cxx:1233
 TQHWWPlotter.cxx:1234
 TQHWWPlotter.cxx:1235
 TQHWWPlotter.cxx:1236
 TQHWWPlotter.cxx:1237
 TQHWWPlotter.cxx:1238
 TQHWWPlotter.cxx:1239
 TQHWWPlotter.cxx:1240
 TQHWWPlotter.cxx:1241
 TQHWWPlotter.cxx:1242
 TQHWWPlotter.cxx:1243
 TQHWWPlotter.cxx:1244
 TQHWWPlotter.cxx:1245
 TQHWWPlotter.cxx:1246
 TQHWWPlotter.cxx:1247
 TQHWWPlotter.cxx:1248
 TQHWWPlotter.cxx:1249
 TQHWWPlotter.cxx:1250
 TQHWWPlotter.cxx:1251
 TQHWWPlotter.cxx:1252
 TQHWWPlotter.cxx:1253
 TQHWWPlotter.cxx:1254
 TQHWWPlotter.cxx:1255
 TQHWWPlotter.cxx:1256
 TQHWWPlotter.cxx:1257
 TQHWWPlotter.cxx:1258
 TQHWWPlotter.cxx:1259
 TQHWWPlotter.cxx:1260
 TQHWWPlotter.cxx:1261
 TQHWWPlotter.cxx:1262
 TQHWWPlotter.cxx:1263
 TQHWWPlotter.cxx:1264
 TQHWWPlotter.cxx:1265
 TQHWWPlotter.cxx:1266
 TQHWWPlotter.cxx:1267
 TQHWWPlotter.cxx:1268
 TQHWWPlotter.cxx:1269
 TQHWWPlotter.cxx:1270
 TQHWWPlotter.cxx:1271
 TQHWWPlotter.cxx:1272
 TQHWWPlotter.cxx:1273
 TQHWWPlotter.cxx:1274
 TQHWWPlotter.cxx:1275
 TQHWWPlotter.cxx:1276
 TQHWWPlotter.cxx:1277
 TQHWWPlotter.cxx:1278
 TQHWWPlotter.cxx:1279
 TQHWWPlotter.cxx:1280
 TQHWWPlotter.cxx:1281
 TQHWWPlotter.cxx:1282
 TQHWWPlotter.cxx:1283
 TQHWWPlotter.cxx:1284
 TQHWWPlotter.cxx:1285
 TQHWWPlotter.cxx:1286
 TQHWWPlotter.cxx:1287
 TQHWWPlotter.cxx:1288
 TQHWWPlotter.cxx:1289
 TQHWWPlotter.cxx:1290
 TQHWWPlotter.cxx:1291
 TQHWWPlotter.cxx:1292
 TQHWWPlotter.cxx:1293
 TQHWWPlotter.cxx:1294
 TQHWWPlotter.cxx:1295
 TQHWWPlotter.cxx:1296
 TQHWWPlotter.cxx:1297
 TQHWWPlotter.cxx:1298
 TQHWWPlotter.cxx:1299
 TQHWWPlotter.cxx:1300
 TQHWWPlotter.cxx:1301
 TQHWWPlotter.cxx:1302
 TQHWWPlotter.cxx:1303
 TQHWWPlotter.cxx:1304
 TQHWWPlotter.cxx:1305
 TQHWWPlotter.cxx:1306
 TQHWWPlotter.cxx:1307
 TQHWWPlotter.cxx:1308
 TQHWWPlotter.cxx:1309
 TQHWWPlotter.cxx:1310
 TQHWWPlotter.cxx:1311
 TQHWWPlotter.cxx:1312
 TQHWWPlotter.cxx:1313
 TQHWWPlotter.cxx:1314
 TQHWWPlotter.cxx:1315
 TQHWWPlotter.cxx:1316
 TQHWWPlotter.cxx:1317
 TQHWWPlotter.cxx:1318
 TQHWWPlotter.cxx:1319
 TQHWWPlotter.cxx:1320
 TQHWWPlotter.cxx:1321
 TQHWWPlotter.cxx:1322
 TQHWWPlotter.cxx:1323
 TQHWWPlotter.cxx:1324
 TQHWWPlotter.cxx:1325
 TQHWWPlotter.cxx:1326
 TQHWWPlotter.cxx:1327
 TQHWWPlotter.cxx:1328
 TQHWWPlotter.cxx:1329
 TQHWWPlotter.cxx:1330
 TQHWWPlotter.cxx:1331
 TQHWWPlotter.cxx:1332
 TQHWWPlotter.cxx:1333
 TQHWWPlotter.cxx:1334
 TQHWWPlotter.cxx:1335
 TQHWWPlotter.cxx:1336
 TQHWWPlotter.cxx:1337
 TQHWWPlotter.cxx:1338
 TQHWWPlotter.cxx:1339
 TQHWWPlotter.cxx:1340
 TQHWWPlotter.cxx:1341
 TQHWWPlotter.cxx:1342
 TQHWWPlotter.cxx:1343
 TQHWWPlotter.cxx:1344
 TQHWWPlotter.cxx:1345
 TQHWWPlotter.cxx:1346
 TQHWWPlotter.cxx:1347
 TQHWWPlotter.cxx:1348
 TQHWWPlotter.cxx:1349
 TQHWWPlotter.cxx:1350
 TQHWWPlotter.cxx:1351
 TQHWWPlotter.cxx:1352
 TQHWWPlotter.cxx:1353
 TQHWWPlotter.cxx:1354
 TQHWWPlotter.cxx:1355
 TQHWWPlotter.cxx:1356
 TQHWWPlotter.cxx:1357
 TQHWWPlotter.cxx:1358
 TQHWWPlotter.cxx:1359
 TQHWWPlotter.cxx:1360
 TQHWWPlotter.cxx:1361
 TQHWWPlotter.cxx:1362
 TQHWWPlotter.cxx:1363
 TQHWWPlotter.cxx:1364
 TQHWWPlotter.cxx:1365
 TQHWWPlotter.cxx:1366
 TQHWWPlotter.cxx:1367
 TQHWWPlotter.cxx:1368
 TQHWWPlotter.cxx:1369
 TQHWWPlotter.cxx:1370
 TQHWWPlotter.cxx:1371
 TQHWWPlotter.cxx:1372
 TQHWWPlotter.cxx:1373
 TQHWWPlotter.cxx:1374
 TQHWWPlotter.cxx:1375
 TQHWWPlotter.cxx:1376
 TQHWWPlotter.cxx:1377
 TQHWWPlotter.cxx:1378
 TQHWWPlotter.cxx:1379
 TQHWWPlotter.cxx:1380
 TQHWWPlotter.cxx:1381
 TQHWWPlotter.cxx:1382
 TQHWWPlotter.cxx:1383
 TQHWWPlotter.cxx:1384
 TQHWWPlotter.cxx:1385
 TQHWWPlotter.cxx:1386
 TQHWWPlotter.cxx:1387
 TQHWWPlotter.cxx:1388
 TQHWWPlotter.cxx:1389
 TQHWWPlotter.cxx:1390
 TQHWWPlotter.cxx:1391
 TQHWWPlotter.cxx:1392
 TQHWWPlotter.cxx:1393
 TQHWWPlotter.cxx:1394
 TQHWWPlotter.cxx:1395
 TQHWWPlotter.cxx:1396
 TQHWWPlotter.cxx:1397
 TQHWWPlotter.cxx:1398
 TQHWWPlotter.cxx:1399
 TQHWWPlotter.cxx:1400
 TQHWWPlotter.cxx:1401
 TQHWWPlotter.cxx:1402
 TQHWWPlotter.cxx:1403
 TQHWWPlotter.cxx:1404
 TQHWWPlotter.cxx:1405
 TQHWWPlotter.cxx:1406
 TQHWWPlotter.cxx:1407
 TQHWWPlotter.cxx:1408
 TQHWWPlotter.cxx:1409
 TQHWWPlotter.cxx:1410
 TQHWWPlotter.cxx:1411
 TQHWWPlotter.cxx:1412
 TQHWWPlotter.cxx:1413
 TQHWWPlotter.cxx:1414
 TQHWWPlotter.cxx:1415
 TQHWWPlotter.cxx:1416
 TQHWWPlotter.cxx:1417
 TQHWWPlotter.cxx:1418
 TQHWWPlotter.cxx:1419
 TQHWWPlotter.cxx:1420
 TQHWWPlotter.cxx:1421
 TQHWWPlotter.cxx:1422
 TQHWWPlotter.cxx:1423
 TQHWWPlotter.cxx:1424
 TQHWWPlotter.cxx:1425
 TQHWWPlotter.cxx:1426
 TQHWWPlotter.cxx:1427
 TQHWWPlotter.cxx:1428
 TQHWWPlotter.cxx:1429
 TQHWWPlotter.cxx:1430
 TQHWWPlotter.cxx:1431
 TQHWWPlotter.cxx:1432
 TQHWWPlotter.cxx:1433
 TQHWWPlotter.cxx:1434
 TQHWWPlotter.cxx:1435
 TQHWWPlotter.cxx:1436
 TQHWWPlotter.cxx:1437
 TQHWWPlotter.cxx:1438
 TQHWWPlotter.cxx:1439
 TQHWWPlotter.cxx:1440
 TQHWWPlotter.cxx:1441
 TQHWWPlotter.cxx:1442
 TQHWWPlotter.cxx:1443
 TQHWWPlotter.cxx:1444
 TQHWWPlotter.cxx:1445
 TQHWWPlotter.cxx:1446
 TQHWWPlotter.cxx:1447
 TQHWWPlotter.cxx:1448
 TQHWWPlotter.cxx:1449
 TQHWWPlotter.cxx:1450
 TQHWWPlotter.cxx:1451
 TQHWWPlotter.cxx:1452
 TQHWWPlotter.cxx:1453
 TQHWWPlotter.cxx:1454
 TQHWWPlotter.cxx:1455
 TQHWWPlotter.cxx:1456
 TQHWWPlotter.cxx:1457
 TQHWWPlotter.cxx:1458
 TQHWWPlotter.cxx:1459
 TQHWWPlotter.cxx:1460
 TQHWWPlotter.cxx:1461
 TQHWWPlotter.cxx:1462
 TQHWWPlotter.cxx:1463
 TQHWWPlotter.cxx:1464
 TQHWWPlotter.cxx:1465
 TQHWWPlotter.cxx:1466
 TQHWWPlotter.cxx:1467
 TQHWWPlotter.cxx:1468
 TQHWWPlotter.cxx:1469
 TQHWWPlotter.cxx:1470
 TQHWWPlotter.cxx:1471
 TQHWWPlotter.cxx:1472
 TQHWWPlotter.cxx:1473
 TQHWWPlotter.cxx:1474
 TQHWWPlotter.cxx:1475
 TQHWWPlotter.cxx:1476
 TQHWWPlotter.cxx:1477
 TQHWWPlotter.cxx:1478
 TQHWWPlotter.cxx:1479
 TQHWWPlotter.cxx:1480
 TQHWWPlotter.cxx:1481
 TQHWWPlotter.cxx:1482
 TQHWWPlotter.cxx:1483
 TQHWWPlotter.cxx:1484
 TQHWWPlotter.cxx:1485
 TQHWWPlotter.cxx:1486
 TQHWWPlotter.cxx:1487
 TQHWWPlotter.cxx:1488
 TQHWWPlotter.cxx:1489
 TQHWWPlotter.cxx:1490
 TQHWWPlotter.cxx:1491
 TQHWWPlotter.cxx:1492
 TQHWWPlotter.cxx:1493
 TQHWWPlotter.cxx:1494
 TQHWWPlotter.cxx:1495
 TQHWWPlotter.cxx:1496
 TQHWWPlotter.cxx:1497
 TQHWWPlotter.cxx:1498
 TQHWWPlotter.cxx:1499
 TQHWWPlotter.cxx:1500
 TQHWWPlotter.cxx:1501
 TQHWWPlotter.cxx:1502
 TQHWWPlotter.cxx:1503
 TQHWWPlotter.cxx:1504
 TQHWWPlotter.cxx:1505
 TQHWWPlotter.cxx:1506
 TQHWWPlotter.cxx:1507
 TQHWWPlotter.cxx:1508
 TQHWWPlotter.cxx:1509
 TQHWWPlotter.cxx:1510
 TQHWWPlotter.cxx:1511
 TQHWWPlotter.cxx:1512
 TQHWWPlotter.cxx:1513
 TQHWWPlotter.cxx:1514
 TQHWWPlotter.cxx:1515
 TQHWWPlotter.cxx:1516
 TQHWWPlotter.cxx:1517
 TQHWWPlotter.cxx:1518
 TQHWWPlotter.cxx:1519
 TQHWWPlotter.cxx:1520
 TQHWWPlotter.cxx:1521
 TQHWWPlotter.cxx:1522
 TQHWWPlotter.cxx:1523
 TQHWWPlotter.cxx:1524
 TQHWWPlotter.cxx:1525
 TQHWWPlotter.cxx:1526
 TQHWWPlotter.cxx:1527
 TQHWWPlotter.cxx:1528
 TQHWWPlotter.cxx:1529
 TQHWWPlotter.cxx:1530
 TQHWWPlotter.cxx:1531
 TQHWWPlotter.cxx:1532
 TQHWWPlotter.cxx:1533
 TQHWWPlotter.cxx:1534
 TQHWWPlotter.cxx:1535
 TQHWWPlotter.cxx:1536
 TQHWWPlotter.cxx:1537
 TQHWWPlotter.cxx:1538
 TQHWWPlotter.cxx:1539
 TQHWWPlotter.cxx:1540
 TQHWWPlotter.cxx:1541
 TQHWWPlotter.cxx:1542
 TQHWWPlotter.cxx:1543
 TQHWWPlotter.cxx:1544
 TQHWWPlotter.cxx:1545
 TQHWWPlotter.cxx:1546
 TQHWWPlotter.cxx:1547
 TQHWWPlotter.cxx:1548
 TQHWWPlotter.cxx:1549
 TQHWWPlotter.cxx:1550
 TQHWWPlotter.cxx:1551
 TQHWWPlotter.cxx:1552
 TQHWWPlotter.cxx:1553
 TQHWWPlotter.cxx:1554
 TQHWWPlotter.cxx:1555
 TQHWWPlotter.cxx:1556
 TQHWWPlotter.cxx:1557
 TQHWWPlotter.cxx:1558
 TQHWWPlotter.cxx:1559
 TQHWWPlotter.cxx:1560
 TQHWWPlotter.cxx:1561
 TQHWWPlotter.cxx:1562
 TQHWWPlotter.cxx:1563
 TQHWWPlotter.cxx:1564
 TQHWWPlotter.cxx:1565
 TQHWWPlotter.cxx:1566
 TQHWWPlotter.cxx:1567
 TQHWWPlotter.cxx:1568
 TQHWWPlotter.cxx:1569
 TQHWWPlotter.cxx:1570
 TQHWWPlotter.cxx:1571
 TQHWWPlotter.cxx:1572
 TQHWWPlotter.cxx:1573
 TQHWWPlotter.cxx:1574
 TQHWWPlotter.cxx:1575
 TQHWWPlotter.cxx:1576
 TQHWWPlotter.cxx:1577
 TQHWWPlotter.cxx:1578
 TQHWWPlotter.cxx:1579
 TQHWWPlotter.cxx:1580
 TQHWWPlotter.cxx:1581
 TQHWWPlotter.cxx:1582
 TQHWWPlotter.cxx:1583
 TQHWWPlotter.cxx:1584
 TQHWWPlotter.cxx:1585
 TQHWWPlotter.cxx:1586
 TQHWWPlotter.cxx:1587
 TQHWWPlotter.cxx:1588
 TQHWWPlotter.cxx:1589
 TQHWWPlotter.cxx:1590
 TQHWWPlotter.cxx:1591
 TQHWWPlotter.cxx:1592
 TQHWWPlotter.cxx:1593
 TQHWWPlotter.cxx:1594
 TQHWWPlotter.cxx:1595
 TQHWWPlotter.cxx:1596
 TQHWWPlotter.cxx:1597
 TQHWWPlotter.cxx:1598
 TQHWWPlotter.cxx:1599
 TQHWWPlotter.cxx:1600
 TQHWWPlotter.cxx:1601
 TQHWWPlotter.cxx:1602
 TQHWWPlotter.cxx:1603
 TQHWWPlotter.cxx:1604
 TQHWWPlotter.cxx:1605
 TQHWWPlotter.cxx:1606
 TQHWWPlotter.cxx:1607
 TQHWWPlotter.cxx:1608
 TQHWWPlotter.cxx:1609
 TQHWWPlotter.cxx:1610
 TQHWWPlotter.cxx:1611
 TQHWWPlotter.cxx:1612
 TQHWWPlotter.cxx:1613
 TQHWWPlotter.cxx:1614
 TQHWWPlotter.cxx:1615
 TQHWWPlotter.cxx:1616
 TQHWWPlotter.cxx:1617
 TQHWWPlotter.cxx:1618
 TQHWWPlotter.cxx:1619
 TQHWWPlotter.cxx:1620
 TQHWWPlotter.cxx:1621
 TQHWWPlotter.cxx:1622
 TQHWWPlotter.cxx:1623
 TQHWWPlotter.cxx:1624
 TQHWWPlotter.cxx:1625
 TQHWWPlotter.cxx:1626
 TQHWWPlotter.cxx:1627
 TQHWWPlotter.cxx:1628
 TQHWWPlotter.cxx:1629
 TQHWWPlotter.cxx:1630
 TQHWWPlotter.cxx:1631
 TQHWWPlotter.cxx:1632
 TQHWWPlotter.cxx:1633
 TQHWWPlotter.cxx:1634
 TQHWWPlotter.cxx:1635
 TQHWWPlotter.cxx:1636
 TQHWWPlotter.cxx:1637
 TQHWWPlotter.cxx:1638
 TQHWWPlotter.cxx:1639
 TQHWWPlotter.cxx:1640
 TQHWWPlotter.cxx:1641
 TQHWWPlotter.cxx:1642
 TQHWWPlotter.cxx:1643
 TQHWWPlotter.cxx:1644
 TQHWWPlotter.cxx:1645
 TQHWWPlotter.cxx:1646
 TQHWWPlotter.cxx:1647
 TQHWWPlotter.cxx:1648
 TQHWWPlotter.cxx:1649
 TQHWWPlotter.cxx:1650
 TQHWWPlotter.cxx:1651
 TQHWWPlotter.cxx:1652
 TQHWWPlotter.cxx:1653
 TQHWWPlotter.cxx:1654
 TQHWWPlotter.cxx:1655
 TQHWWPlotter.cxx:1656
 TQHWWPlotter.cxx:1657
 TQHWWPlotter.cxx:1658
 TQHWWPlotter.cxx:1659
 TQHWWPlotter.cxx:1660
 TQHWWPlotter.cxx:1661
 TQHWWPlotter.cxx:1662
 TQHWWPlotter.cxx:1663
 TQHWWPlotter.cxx:1664
 TQHWWPlotter.cxx:1665
 TQHWWPlotter.cxx:1666
 TQHWWPlotter.cxx:1667
 TQHWWPlotter.cxx:1668
 TQHWWPlotter.cxx:1669
 TQHWWPlotter.cxx:1670
 TQHWWPlotter.cxx:1671
 TQHWWPlotter.cxx:1672
 TQHWWPlotter.cxx:1673
 TQHWWPlotter.cxx:1674
 TQHWWPlotter.cxx:1675
 TQHWWPlotter.cxx:1676
 TQHWWPlotter.cxx:1677
 TQHWWPlotter.cxx:1678
 TQHWWPlotter.cxx:1679
 TQHWWPlotter.cxx:1680
 TQHWWPlotter.cxx:1681
 TQHWWPlotter.cxx:1682
 TQHWWPlotter.cxx:1683
 TQHWWPlotter.cxx:1684
 TQHWWPlotter.cxx:1685
 TQHWWPlotter.cxx:1686
 TQHWWPlotter.cxx:1687
 TQHWWPlotter.cxx:1688
 TQHWWPlotter.cxx:1689
 TQHWWPlotter.cxx:1690
 TQHWWPlotter.cxx:1691
 TQHWWPlotter.cxx:1692
 TQHWWPlotter.cxx:1693
 TQHWWPlotter.cxx:1694
 TQHWWPlotter.cxx:1695
 TQHWWPlotter.cxx:1696
 TQHWWPlotter.cxx:1697
 TQHWWPlotter.cxx:1698
 TQHWWPlotter.cxx:1699
 TQHWWPlotter.cxx:1700
 TQHWWPlotter.cxx:1701
 TQHWWPlotter.cxx:1702
 TQHWWPlotter.cxx:1703
 TQHWWPlotter.cxx:1704
 TQHWWPlotter.cxx:1705
 TQHWWPlotter.cxx:1706
 TQHWWPlotter.cxx:1707
 TQHWWPlotter.cxx:1708
 TQHWWPlotter.cxx:1709
 TQHWWPlotter.cxx:1710
 TQHWWPlotter.cxx:1711
 TQHWWPlotter.cxx:1712
 TQHWWPlotter.cxx:1713
 TQHWWPlotter.cxx:1714
 TQHWWPlotter.cxx:1715
 TQHWWPlotter.cxx:1716
 TQHWWPlotter.cxx:1717
 TQHWWPlotter.cxx:1718
 TQHWWPlotter.cxx:1719
 TQHWWPlotter.cxx:1720
 TQHWWPlotter.cxx:1721
 TQHWWPlotter.cxx:1722
 TQHWWPlotter.cxx:1723
 TQHWWPlotter.cxx:1724
 TQHWWPlotter.cxx:1725
 TQHWWPlotter.cxx:1726
 TQHWWPlotter.cxx:1727
 TQHWWPlotter.cxx:1728
 TQHWWPlotter.cxx:1729
 TQHWWPlotter.cxx:1730
 TQHWWPlotter.cxx:1731
 TQHWWPlotter.cxx:1732
 TQHWWPlotter.cxx:1733
 TQHWWPlotter.cxx:1734
 TQHWWPlotter.cxx:1735
 TQHWWPlotter.cxx:1736
 TQHWWPlotter.cxx:1737
 TQHWWPlotter.cxx:1738
 TQHWWPlotter.cxx:1739
 TQHWWPlotter.cxx:1740
 TQHWWPlotter.cxx:1741
 TQHWWPlotter.cxx:1742
 TQHWWPlotter.cxx:1743
 TQHWWPlotter.cxx:1744
 TQHWWPlotter.cxx:1745
 TQHWWPlotter.cxx:1746
 TQHWWPlotter.cxx:1747
 TQHWWPlotter.cxx:1748
 TQHWWPlotter.cxx:1749
 TQHWWPlotter.cxx:1750
 TQHWWPlotter.cxx:1751
 TQHWWPlotter.cxx:1752
 TQHWWPlotter.cxx:1753
 TQHWWPlotter.cxx:1754
 TQHWWPlotter.cxx:1755
 TQHWWPlotter.cxx:1756
 TQHWWPlotter.cxx:1757
 TQHWWPlotter.cxx:1758
 TQHWWPlotter.cxx:1759
 TQHWWPlotter.cxx:1760
 TQHWWPlotter.cxx:1761
 TQHWWPlotter.cxx:1762
 TQHWWPlotter.cxx:1763
 TQHWWPlotter.cxx:1764
 TQHWWPlotter.cxx:1765
 TQHWWPlotter.cxx:1766
 TQHWWPlotter.cxx:1767
 TQHWWPlotter.cxx:1768
 TQHWWPlotter.cxx:1769
 TQHWWPlotter.cxx:1770
 TQHWWPlotter.cxx:1771
 TQHWWPlotter.cxx:1772
 TQHWWPlotter.cxx:1773
 TQHWWPlotter.cxx:1774
 TQHWWPlotter.cxx:1775
 TQHWWPlotter.cxx:1776
 TQHWWPlotter.cxx:1777
 TQHWWPlotter.cxx:1778
 TQHWWPlotter.cxx:1779
 TQHWWPlotter.cxx:1780
 TQHWWPlotter.cxx:1781
 TQHWWPlotter.cxx:1782
 TQHWWPlotter.cxx:1783
 TQHWWPlotter.cxx:1784
 TQHWWPlotter.cxx:1785
 TQHWWPlotter.cxx:1786
 TQHWWPlotter.cxx:1787
 TQHWWPlotter.cxx:1788
 TQHWWPlotter.cxx:1789
 TQHWWPlotter.cxx:1790
 TQHWWPlotter.cxx:1791
 TQHWWPlotter.cxx:1792
 TQHWWPlotter.cxx:1793
 TQHWWPlotter.cxx:1794
 TQHWWPlotter.cxx:1795
 TQHWWPlotter.cxx:1796
 TQHWWPlotter.cxx:1797
 TQHWWPlotter.cxx:1798
 TQHWWPlotter.cxx:1799
 TQHWWPlotter.cxx:1800
 TQHWWPlotter.cxx:1801
 TQHWWPlotter.cxx:1802
 TQHWWPlotter.cxx:1803
 TQHWWPlotter.cxx:1804
 TQHWWPlotter.cxx:1805
 TQHWWPlotter.cxx:1806
 TQHWWPlotter.cxx:1807
 TQHWWPlotter.cxx:1808
 TQHWWPlotter.cxx:1809
 TQHWWPlotter.cxx:1810
 TQHWWPlotter.cxx:1811
 TQHWWPlotter.cxx:1812
 TQHWWPlotter.cxx:1813
 TQHWWPlotter.cxx:1814
 TQHWWPlotter.cxx:1815
 TQHWWPlotter.cxx:1816
 TQHWWPlotter.cxx:1817
 TQHWWPlotter.cxx:1818
 TQHWWPlotter.cxx:1819
 TQHWWPlotter.cxx:1820
 TQHWWPlotter.cxx:1821
 TQHWWPlotter.cxx:1822
 TQHWWPlotter.cxx:1823
 TQHWWPlotter.cxx:1824
 TQHWWPlotter.cxx:1825
 TQHWWPlotter.cxx:1826
 TQHWWPlotter.cxx:1827
 TQHWWPlotter.cxx:1828
 TQHWWPlotter.cxx:1829
 TQHWWPlotter.cxx:1830
 TQHWWPlotter.cxx:1831
 TQHWWPlotter.cxx:1832
 TQHWWPlotter.cxx:1833
 TQHWWPlotter.cxx:1834
 TQHWWPlotter.cxx:1835
 TQHWWPlotter.cxx:1836
 TQHWWPlotter.cxx:1837
 TQHWWPlotter.cxx:1838
 TQHWWPlotter.cxx:1839
 TQHWWPlotter.cxx:1840
 TQHWWPlotter.cxx:1841
 TQHWWPlotter.cxx:1842
 TQHWWPlotter.cxx:1843
 TQHWWPlotter.cxx:1844
 TQHWWPlotter.cxx:1845
 TQHWWPlotter.cxx:1846
 TQHWWPlotter.cxx:1847
 TQHWWPlotter.cxx:1848
 TQHWWPlotter.cxx:1849
 TQHWWPlotter.cxx:1850
 TQHWWPlotter.cxx:1851
 TQHWWPlotter.cxx:1852
 TQHWWPlotter.cxx:1853
 TQHWWPlotter.cxx:1854
 TQHWWPlotter.cxx:1855
 TQHWWPlotter.cxx:1856
 TQHWWPlotter.cxx:1857
 TQHWWPlotter.cxx:1858
 TQHWWPlotter.cxx:1859
 TQHWWPlotter.cxx:1860
 TQHWWPlotter.cxx:1861
 TQHWWPlotter.cxx:1862
 TQHWWPlotter.cxx:1863
 TQHWWPlotter.cxx:1864
 TQHWWPlotter.cxx:1865
 TQHWWPlotter.cxx:1866
 TQHWWPlotter.cxx:1867
 TQHWWPlotter.cxx:1868
 TQHWWPlotter.cxx:1869
 TQHWWPlotter.cxx:1870
 TQHWWPlotter.cxx:1871
 TQHWWPlotter.cxx:1872
 TQHWWPlotter.cxx:1873
 TQHWWPlotter.cxx:1874
 TQHWWPlotter.cxx:1875
 TQHWWPlotter.cxx:1876
 TQHWWPlotter.cxx:1877
 TQHWWPlotter.cxx:1878
 TQHWWPlotter.cxx:1879
 TQHWWPlotter.cxx:1880
 TQHWWPlotter.cxx:1881
 TQHWWPlotter.cxx:1882
 TQHWWPlotter.cxx:1883
 TQHWWPlotter.cxx:1884
 TQHWWPlotter.cxx:1885
 TQHWWPlotter.cxx:1886
 TQHWWPlotter.cxx:1887
 TQHWWPlotter.cxx:1888
 TQHWWPlotter.cxx:1889
 TQHWWPlotter.cxx:1890
 TQHWWPlotter.cxx:1891
 TQHWWPlotter.cxx:1892
 TQHWWPlotter.cxx:1893
 TQHWWPlotter.cxx:1894
 TQHWWPlotter.cxx:1895
 TQHWWPlotter.cxx:1896
 TQHWWPlotter.cxx:1897
 TQHWWPlotter.cxx:1898
 TQHWWPlotter.cxx:1899
 TQHWWPlotter.cxx:1900
 TQHWWPlotter.cxx:1901
 TQHWWPlotter.cxx:1902
 TQHWWPlotter.cxx:1903
 TQHWWPlotter.cxx:1904
 TQHWWPlotter.cxx:1905
 TQHWWPlotter.cxx:1906
 TQHWWPlotter.cxx:1907
 TQHWWPlotter.cxx:1908
 TQHWWPlotter.cxx:1909
 TQHWWPlotter.cxx:1910
 TQHWWPlotter.cxx:1911
 TQHWWPlotter.cxx:1912
 TQHWWPlotter.cxx:1913
 TQHWWPlotter.cxx:1914
 TQHWWPlotter.cxx:1915
 TQHWWPlotter.cxx:1916
 TQHWWPlotter.cxx:1917
 TQHWWPlotter.cxx:1918
 TQHWWPlotter.cxx:1919
 TQHWWPlotter.cxx:1920
 TQHWWPlotter.cxx:1921
 TQHWWPlotter.cxx:1922
 TQHWWPlotter.cxx:1923
 TQHWWPlotter.cxx:1924
 TQHWWPlotter.cxx:1925
 TQHWWPlotter.cxx:1926
 TQHWWPlotter.cxx:1927
 TQHWWPlotter.cxx:1928
 TQHWWPlotter.cxx:1929
 TQHWWPlotter.cxx:1930
 TQHWWPlotter.cxx:1931
 TQHWWPlotter.cxx:1932
 TQHWWPlotter.cxx:1933
 TQHWWPlotter.cxx:1934
 TQHWWPlotter.cxx:1935
 TQHWWPlotter.cxx:1936
 TQHWWPlotter.cxx:1937
 TQHWWPlotter.cxx:1938
 TQHWWPlotter.cxx:1939
 TQHWWPlotter.cxx:1940
 TQHWWPlotter.cxx:1941
 TQHWWPlotter.cxx:1942
 TQHWWPlotter.cxx:1943
 TQHWWPlotter.cxx:1944
 TQHWWPlotter.cxx:1945
 TQHWWPlotter.cxx:1946
 TQHWWPlotter.cxx:1947
 TQHWWPlotter.cxx:1948
 TQHWWPlotter.cxx:1949
 TQHWWPlotter.cxx:1950
 TQHWWPlotter.cxx:1951
 TQHWWPlotter.cxx:1952
 TQHWWPlotter.cxx:1953
 TQHWWPlotter.cxx:1954
 TQHWWPlotter.cxx:1955
 TQHWWPlotter.cxx:1956
 TQHWWPlotter.cxx:1957
 TQHWWPlotter.cxx:1958
 TQHWWPlotter.cxx:1959
 TQHWWPlotter.cxx:1960
 TQHWWPlotter.cxx:1961
 TQHWWPlotter.cxx:1962
 TQHWWPlotter.cxx:1963
 TQHWWPlotter.cxx:1964
 TQHWWPlotter.cxx:1965
 TQHWWPlotter.cxx:1966
 TQHWWPlotter.cxx:1967
 TQHWWPlotter.cxx:1968
 TQHWWPlotter.cxx:1969
 TQHWWPlotter.cxx:1970
 TQHWWPlotter.cxx:1971
 TQHWWPlotter.cxx:1972
 TQHWWPlotter.cxx:1973
 TQHWWPlotter.cxx:1974
 TQHWWPlotter.cxx:1975
 TQHWWPlotter.cxx:1976
 TQHWWPlotter.cxx:1977
 TQHWWPlotter.cxx:1978
 TQHWWPlotter.cxx:1979
 TQHWWPlotter.cxx:1980
 TQHWWPlotter.cxx:1981
 TQHWWPlotter.cxx:1982
 TQHWWPlotter.cxx:1983
 TQHWWPlotter.cxx:1984
 TQHWWPlotter.cxx:1985
 TQHWWPlotter.cxx:1986
 TQHWWPlotter.cxx:1987
 TQHWWPlotter.cxx:1988
 TQHWWPlotter.cxx:1989
 TQHWWPlotter.cxx:1990
 TQHWWPlotter.cxx:1991
 TQHWWPlotter.cxx:1992
 TQHWWPlotter.cxx:1993
 TQHWWPlotter.cxx:1994
 TQHWWPlotter.cxx:1995
 TQHWWPlotter.cxx:1996
 TQHWWPlotter.cxx:1997
 TQHWWPlotter.cxx:1998
 TQHWWPlotter.cxx:1999
 TQHWWPlotter.cxx:2000
 TQHWWPlotter.cxx:2001
 TQHWWPlotter.cxx:2002
 TQHWWPlotter.cxx:2003
 TQHWWPlotter.cxx:2004
 TQHWWPlotter.cxx:2005
 TQHWWPlotter.cxx:2006
 TQHWWPlotter.cxx:2007
 TQHWWPlotter.cxx:2008
 TQHWWPlotter.cxx:2009
 TQHWWPlotter.cxx:2010
 TQHWWPlotter.cxx:2011
 TQHWWPlotter.cxx:2012
 TQHWWPlotter.cxx:2013
 TQHWWPlotter.cxx:2014
 TQHWWPlotter.cxx:2015
 TQHWWPlotter.cxx:2016
 TQHWWPlotter.cxx:2017
 TQHWWPlotter.cxx:2018
 TQHWWPlotter.cxx:2019
 TQHWWPlotter.cxx:2020
 TQHWWPlotter.cxx:2021
 TQHWWPlotter.cxx:2022
 TQHWWPlotter.cxx:2023
 TQHWWPlotter.cxx:2024
 TQHWWPlotter.cxx:2025
 TQHWWPlotter.cxx:2026
 TQHWWPlotter.cxx:2027
 TQHWWPlotter.cxx:2028
 TQHWWPlotter.cxx:2029
 TQHWWPlotter.cxx:2030
 TQHWWPlotter.cxx:2031
 TQHWWPlotter.cxx:2032
 TQHWWPlotter.cxx:2033
 TQHWWPlotter.cxx:2034
 TQHWWPlotter.cxx:2035
 TQHWWPlotter.cxx:2036
 TQHWWPlotter.cxx:2037
 TQHWWPlotter.cxx:2038
 TQHWWPlotter.cxx:2039
 TQHWWPlotter.cxx:2040
 TQHWWPlotter.cxx:2041
 TQHWWPlotter.cxx:2042
 TQHWWPlotter.cxx:2043
 TQHWWPlotter.cxx:2044
 TQHWWPlotter.cxx:2045
 TQHWWPlotter.cxx:2046
 TQHWWPlotter.cxx:2047
 TQHWWPlotter.cxx:2048
 TQHWWPlotter.cxx:2049
 TQHWWPlotter.cxx:2050
 TQHWWPlotter.cxx:2051
 TQHWWPlotter.cxx:2052
 TQHWWPlotter.cxx:2053
 TQHWWPlotter.cxx:2054
 TQHWWPlotter.cxx:2055
 TQHWWPlotter.cxx:2056
 TQHWWPlotter.cxx:2057
 TQHWWPlotter.cxx:2058
 TQHWWPlotter.cxx:2059
 TQHWWPlotter.cxx:2060
 TQHWWPlotter.cxx:2061
 TQHWWPlotter.cxx:2062
 TQHWWPlotter.cxx:2063
 TQHWWPlotter.cxx:2064
 TQHWWPlotter.cxx:2065
 TQHWWPlotter.cxx:2066
 TQHWWPlotter.cxx:2067
 TQHWWPlotter.cxx:2068
 TQHWWPlotter.cxx:2069
 TQHWWPlotter.cxx:2070
 TQHWWPlotter.cxx:2071
 TQHWWPlotter.cxx:2072
 TQHWWPlotter.cxx:2073
 TQHWWPlotter.cxx:2074
 TQHWWPlotter.cxx:2075
 TQHWWPlotter.cxx:2076
 TQHWWPlotter.cxx:2077
 TQHWWPlotter.cxx:2078
 TQHWWPlotter.cxx:2079
 TQHWWPlotter.cxx:2080
 TQHWWPlotter.cxx:2081
 TQHWWPlotter.cxx:2082
 TQHWWPlotter.cxx:2083
 TQHWWPlotter.cxx:2084
 TQHWWPlotter.cxx:2085
 TQHWWPlotter.cxx:2086
 TQHWWPlotter.cxx:2087
 TQHWWPlotter.cxx:2088
 TQHWWPlotter.cxx:2089
 TQHWWPlotter.cxx:2090
 TQHWWPlotter.cxx:2091
 TQHWWPlotter.cxx:2092
 TQHWWPlotter.cxx:2093
 TQHWWPlotter.cxx:2094
 TQHWWPlotter.cxx:2095
 TQHWWPlotter.cxx:2096
 TQHWWPlotter.cxx:2097
 TQHWWPlotter.cxx:2098
 TQHWWPlotter.cxx:2099
 TQHWWPlotter.cxx:2100
 TQHWWPlotter.cxx:2101
 TQHWWPlotter.cxx:2102
 TQHWWPlotter.cxx:2103
 TQHWWPlotter.cxx:2104
 TQHWWPlotter.cxx:2105
 TQHWWPlotter.cxx:2106
 TQHWWPlotter.cxx:2107
 TQHWWPlotter.cxx:2108
 TQHWWPlotter.cxx:2109
 TQHWWPlotter.cxx:2110
 TQHWWPlotter.cxx:2111
 TQHWWPlotter.cxx:2112
 TQHWWPlotter.cxx:2113
 TQHWWPlotter.cxx:2114
 TQHWWPlotter.cxx:2115
 TQHWWPlotter.cxx:2116
 TQHWWPlotter.cxx:2117
 TQHWWPlotter.cxx:2118
 TQHWWPlotter.cxx:2119
 TQHWWPlotter.cxx:2120
 TQHWWPlotter.cxx:2121
 TQHWWPlotter.cxx:2122
 TQHWWPlotter.cxx:2123
 TQHWWPlotter.cxx:2124
 TQHWWPlotter.cxx:2125
 TQHWWPlotter.cxx:2126
 TQHWWPlotter.cxx:2127
 TQHWWPlotter.cxx:2128
 TQHWWPlotter.cxx:2129
 TQHWWPlotter.cxx:2130
 TQHWWPlotter.cxx:2131
 TQHWWPlotter.cxx:2132
 TQHWWPlotter.cxx:2133
 TQHWWPlotter.cxx:2134
 TQHWWPlotter.cxx:2135
 TQHWWPlotter.cxx:2136
 TQHWWPlotter.cxx:2137
 TQHWWPlotter.cxx:2138
 TQHWWPlotter.cxx:2139
 TQHWWPlotter.cxx:2140
 TQHWWPlotter.cxx:2141
 TQHWWPlotter.cxx:2142
 TQHWWPlotter.cxx:2143
 TQHWWPlotter.cxx:2144
 TQHWWPlotter.cxx:2145
 TQHWWPlotter.cxx:2146
 TQHWWPlotter.cxx:2147
 TQHWWPlotter.cxx:2148
 TQHWWPlotter.cxx:2149
 TQHWWPlotter.cxx:2150
 TQHWWPlotter.cxx:2151
 TQHWWPlotter.cxx:2152
 TQHWWPlotter.cxx:2153
 TQHWWPlotter.cxx:2154
 TQHWWPlotter.cxx:2155
 TQHWWPlotter.cxx:2156
 TQHWWPlotter.cxx:2157
 TQHWWPlotter.cxx:2158
 TQHWWPlotter.cxx:2159
 TQHWWPlotter.cxx:2160
 TQHWWPlotter.cxx:2161
 TQHWWPlotter.cxx:2162
 TQHWWPlotter.cxx:2163
 TQHWWPlotter.cxx:2164
 TQHWWPlotter.cxx:2165
 TQHWWPlotter.cxx:2166
 TQHWWPlotter.cxx:2167
 TQHWWPlotter.cxx:2168
 TQHWWPlotter.cxx:2169
 TQHWWPlotter.cxx:2170
 TQHWWPlotter.cxx:2171
 TQHWWPlotter.cxx:2172
 TQHWWPlotter.cxx:2173
 TQHWWPlotter.cxx:2174
 TQHWWPlotter.cxx:2175
 TQHWWPlotter.cxx:2176
 TQHWWPlotter.cxx:2177
 TQHWWPlotter.cxx:2178
 TQHWWPlotter.cxx:2179
 TQHWWPlotter.cxx:2180
 TQHWWPlotter.cxx:2181
 TQHWWPlotter.cxx:2182
 TQHWWPlotter.cxx:2183
 TQHWWPlotter.cxx:2184
 TQHWWPlotter.cxx:2185
 TQHWWPlotter.cxx:2186
 TQHWWPlotter.cxx:2187
 TQHWWPlotter.cxx:2188
 TQHWWPlotter.cxx:2189
 TQHWWPlotter.cxx:2190
 TQHWWPlotter.cxx:2191
 TQHWWPlotter.cxx:2192
 TQHWWPlotter.cxx:2193
 TQHWWPlotter.cxx:2194
 TQHWWPlotter.cxx:2195
 TQHWWPlotter.cxx:2196
 TQHWWPlotter.cxx:2197
 TQHWWPlotter.cxx:2198
 TQHWWPlotter.cxx:2199
 TQHWWPlotter.cxx:2200
 TQHWWPlotter.cxx:2201
 TQHWWPlotter.cxx:2202
 TQHWWPlotter.cxx:2203
 TQHWWPlotter.cxx:2204
 TQHWWPlotter.cxx:2205
 TQHWWPlotter.cxx:2206
 TQHWWPlotter.cxx:2207
 TQHWWPlotter.cxx:2208
 TQHWWPlotter.cxx:2209
 TQHWWPlotter.cxx:2210
 TQHWWPlotter.cxx:2211
 TQHWWPlotter.cxx:2212
 TQHWWPlotter.cxx:2213
 TQHWWPlotter.cxx:2214
 TQHWWPlotter.cxx:2215
 TQHWWPlotter.cxx:2216
 TQHWWPlotter.cxx:2217
 TQHWWPlotter.cxx:2218
 TQHWWPlotter.cxx:2219
 TQHWWPlotter.cxx:2220
 TQHWWPlotter.cxx:2221
 TQHWWPlotter.cxx:2222
 TQHWWPlotter.cxx:2223
 TQHWWPlotter.cxx:2224
 TQHWWPlotter.cxx:2225
 TQHWWPlotter.cxx:2226
 TQHWWPlotter.cxx:2227
 TQHWWPlotter.cxx:2228
 TQHWWPlotter.cxx:2229
 TQHWWPlotter.cxx:2230
 TQHWWPlotter.cxx:2231
 TQHWWPlotter.cxx:2232
 TQHWWPlotter.cxx:2233
 TQHWWPlotter.cxx:2234
 TQHWWPlotter.cxx:2235
 TQHWWPlotter.cxx:2236
 TQHWWPlotter.cxx:2237
 TQHWWPlotter.cxx:2238
 TQHWWPlotter.cxx:2239
 TQHWWPlotter.cxx:2240
 TQHWWPlotter.cxx:2241
 TQHWWPlotter.cxx:2242
 TQHWWPlotter.cxx:2243
 TQHWWPlotter.cxx:2244
 TQHWWPlotter.cxx:2245
 TQHWWPlotter.cxx:2246
 TQHWWPlotter.cxx:2247
 TQHWWPlotter.cxx:2248
 TQHWWPlotter.cxx:2249
 TQHWWPlotter.cxx:2250
 TQHWWPlotter.cxx:2251
 TQHWWPlotter.cxx:2252
 TQHWWPlotter.cxx:2253
 TQHWWPlotter.cxx:2254
 TQHWWPlotter.cxx:2255
 TQHWWPlotter.cxx:2256
 TQHWWPlotter.cxx:2257
 TQHWWPlotter.cxx:2258
 TQHWWPlotter.cxx:2259
 TQHWWPlotter.cxx:2260
 TQHWWPlotter.cxx:2261
 TQHWWPlotter.cxx:2262
 TQHWWPlotter.cxx:2263
 TQHWWPlotter.cxx:2264
 TQHWWPlotter.cxx:2265
 TQHWWPlotter.cxx:2266
 TQHWWPlotter.cxx:2267
 TQHWWPlotter.cxx:2268
 TQHWWPlotter.cxx:2269
 TQHWWPlotter.cxx:2270
 TQHWWPlotter.cxx:2271
 TQHWWPlotter.cxx:2272
 TQHWWPlotter.cxx:2273
 TQHWWPlotter.cxx:2274
 TQHWWPlotter.cxx:2275
 TQHWWPlotter.cxx:2276
 TQHWWPlotter.cxx:2277
 TQHWWPlotter.cxx:2278
 TQHWWPlotter.cxx:2279
 TQHWWPlotter.cxx:2280
 TQHWWPlotter.cxx:2281
 TQHWWPlotter.cxx:2282
 TQHWWPlotter.cxx:2283
 TQHWWPlotter.cxx:2284
 TQHWWPlotter.cxx:2285
 TQHWWPlotter.cxx:2286
 TQHWWPlotter.cxx:2287
 TQHWWPlotter.cxx:2288
 TQHWWPlotter.cxx:2289
 TQHWWPlotter.cxx:2290
 TQHWWPlotter.cxx:2291
 TQHWWPlotter.cxx:2292
 TQHWWPlotter.cxx:2293
 TQHWWPlotter.cxx:2294
 TQHWWPlotter.cxx:2295
 TQHWWPlotter.cxx:2296
 TQHWWPlotter.cxx:2297
 TQHWWPlotter.cxx:2298
 TQHWWPlotter.cxx:2299
 TQHWWPlotter.cxx:2300
 TQHWWPlotter.cxx:2301
 TQHWWPlotter.cxx:2302
 TQHWWPlotter.cxx:2303
 TQHWWPlotter.cxx:2304
 TQHWWPlotter.cxx:2305
 TQHWWPlotter.cxx:2306
 TQHWWPlotter.cxx:2307
 TQHWWPlotter.cxx:2308
 TQHWWPlotter.cxx:2309
 TQHWWPlotter.cxx:2310
 TQHWWPlotter.cxx:2311
 TQHWWPlotter.cxx:2312
 TQHWWPlotter.cxx:2313
 TQHWWPlotter.cxx:2314
 TQHWWPlotter.cxx:2315
 TQHWWPlotter.cxx:2316
 TQHWWPlotter.cxx:2317
 TQHWWPlotter.cxx:2318
 TQHWWPlotter.cxx:2319
 TQHWWPlotter.cxx:2320
 TQHWWPlotter.cxx:2321
 TQHWWPlotter.cxx:2322
 TQHWWPlotter.cxx:2323
 TQHWWPlotter.cxx:2324
 TQHWWPlotter.cxx:2325
 TQHWWPlotter.cxx:2326
 TQHWWPlotter.cxx:2327
 TQHWWPlotter.cxx:2328
 TQHWWPlotter.cxx:2329
 TQHWWPlotter.cxx:2330
 TQHWWPlotter.cxx:2331
 TQHWWPlotter.cxx:2332
 TQHWWPlotter.cxx:2333
 TQHWWPlotter.cxx:2334
 TQHWWPlotter.cxx:2335
 TQHWWPlotter.cxx:2336
 TQHWWPlotter.cxx:2337
 TQHWWPlotter.cxx:2338
 TQHWWPlotter.cxx:2339
 TQHWWPlotter.cxx:2340
 TQHWWPlotter.cxx:2341
 TQHWWPlotter.cxx:2342
 TQHWWPlotter.cxx:2343
 TQHWWPlotter.cxx:2344
 TQHWWPlotter.cxx:2345
 TQHWWPlotter.cxx:2346
 TQHWWPlotter.cxx:2347
 TQHWWPlotter.cxx:2348
 TQHWWPlotter.cxx:2349
 TQHWWPlotter.cxx:2350
 TQHWWPlotter.cxx:2351
 TQHWWPlotter.cxx:2352
 TQHWWPlotter.cxx:2353
 TQHWWPlotter.cxx:2354
 TQHWWPlotter.cxx:2355
 TQHWWPlotter.cxx:2356
 TQHWWPlotter.cxx:2357
 TQHWWPlotter.cxx:2358
 TQHWWPlotter.cxx:2359
 TQHWWPlotter.cxx:2360
 TQHWWPlotter.cxx:2361
 TQHWWPlotter.cxx:2362
 TQHWWPlotter.cxx:2363
 TQHWWPlotter.cxx:2364
 TQHWWPlotter.cxx:2365
 TQHWWPlotter.cxx:2366
 TQHWWPlotter.cxx:2367
 TQHWWPlotter.cxx:2368
 TQHWWPlotter.cxx:2369
 TQHWWPlotter.cxx:2370
 TQHWWPlotter.cxx:2371
 TQHWWPlotter.cxx:2372
 TQHWWPlotter.cxx:2373
 TQHWWPlotter.cxx:2374
 TQHWWPlotter.cxx:2375
 TQHWWPlotter.cxx:2376
 TQHWWPlotter.cxx:2377
 TQHWWPlotter.cxx:2378
 TQHWWPlotter.cxx:2379
 TQHWWPlotter.cxx:2380
 TQHWWPlotter.cxx:2381
 TQHWWPlotter.cxx:2382
 TQHWWPlotter.cxx:2383
 TQHWWPlotter.cxx:2384
 TQHWWPlotter.cxx:2385
 TQHWWPlotter.cxx:2386
 TQHWWPlotter.cxx:2387
 TQHWWPlotter.cxx:2388
 TQHWWPlotter.cxx:2389
 TQHWWPlotter.cxx:2390
 TQHWWPlotter.cxx:2391
 TQHWWPlotter.cxx:2392
 TQHWWPlotter.cxx:2393
 TQHWWPlotter.cxx:2394
 TQHWWPlotter.cxx:2395
 TQHWWPlotter.cxx:2396
 TQHWWPlotter.cxx:2397
 TQHWWPlotter.cxx:2398
 TQHWWPlotter.cxx:2399
 TQHWWPlotter.cxx:2400
 TQHWWPlotter.cxx:2401
 TQHWWPlotter.cxx:2402
 TQHWWPlotter.cxx:2403
 TQHWWPlotter.cxx:2404
 TQHWWPlotter.cxx:2405
 TQHWWPlotter.cxx:2406
 TQHWWPlotter.cxx:2407
 TQHWWPlotter.cxx:2408
 TQHWWPlotter.cxx:2409
 TQHWWPlotter.cxx:2410
 TQHWWPlotter.cxx:2411
 TQHWWPlotter.cxx:2412
 TQHWWPlotter.cxx:2413
 TQHWWPlotter.cxx:2414
 TQHWWPlotter.cxx:2415
 TQHWWPlotter.cxx:2416
 TQHWWPlotter.cxx:2417
 TQHWWPlotter.cxx:2418
 TQHWWPlotter.cxx:2419
 TQHWWPlotter.cxx:2420
 TQHWWPlotter.cxx:2421
 TQHWWPlotter.cxx:2422
 TQHWWPlotter.cxx:2423
 TQHWWPlotter.cxx:2424
 TQHWWPlotter.cxx:2425
 TQHWWPlotter.cxx:2426
 TQHWWPlotter.cxx:2427
 TQHWWPlotter.cxx:2428
 TQHWWPlotter.cxx:2429
 TQHWWPlotter.cxx:2430
 TQHWWPlotter.cxx:2431
 TQHWWPlotter.cxx:2432
 TQHWWPlotter.cxx:2433
 TQHWWPlotter.cxx:2434
 TQHWWPlotter.cxx:2435
 TQHWWPlotter.cxx:2436
 TQHWWPlotter.cxx:2437
 TQHWWPlotter.cxx:2438
 TQHWWPlotter.cxx:2439
 TQHWWPlotter.cxx:2440
 TQHWWPlotter.cxx:2441
 TQHWWPlotter.cxx:2442
 TQHWWPlotter.cxx:2443
 TQHWWPlotter.cxx:2444
 TQHWWPlotter.cxx:2445
 TQHWWPlotter.cxx:2446
 TQHWWPlotter.cxx:2447
 TQHWWPlotter.cxx:2448
 TQHWWPlotter.cxx:2449
 TQHWWPlotter.cxx:2450
 TQHWWPlotter.cxx:2451
 TQHWWPlotter.cxx:2452
 TQHWWPlotter.cxx:2453
 TQHWWPlotter.cxx:2454
 TQHWWPlotter.cxx:2455
 TQHWWPlotter.cxx:2456
 TQHWWPlotter.cxx:2457
 TQHWWPlotter.cxx:2458
 TQHWWPlotter.cxx:2459
 TQHWWPlotter.cxx:2460
 TQHWWPlotter.cxx:2461
 TQHWWPlotter.cxx:2462
 TQHWWPlotter.cxx:2463
 TQHWWPlotter.cxx:2464
 TQHWWPlotter.cxx:2465
 TQHWWPlotter.cxx:2466
 TQHWWPlotter.cxx:2467
 TQHWWPlotter.cxx:2468
 TQHWWPlotter.cxx:2469
 TQHWWPlotter.cxx:2470
 TQHWWPlotter.cxx:2471
 TQHWWPlotter.cxx:2472
 TQHWWPlotter.cxx:2473
 TQHWWPlotter.cxx:2474
 TQHWWPlotter.cxx:2475
 TQHWWPlotter.cxx:2476
 TQHWWPlotter.cxx:2477
 TQHWWPlotter.cxx:2478
 TQHWWPlotter.cxx:2479
 TQHWWPlotter.cxx:2480
 TQHWWPlotter.cxx:2481
 TQHWWPlotter.cxx:2482
 TQHWWPlotter.cxx:2483
 TQHWWPlotter.cxx:2484
 TQHWWPlotter.cxx:2485
 TQHWWPlotter.cxx:2486
 TQHWWPlotter.cxx:2487
 TQHWWPlotter.cxx:2488
 TQHWWPlotter.cxx:2489
 TQHWWPlotter.cxx:2490
 TQHWWPlotter.cxx:2491
 TQHWWPlotter.cxx:2492
 TQHWWPlotter.cxx:2493
 TQHWWPlotter.cxx:2494
 TQHWWPlotter.cxx:2495
 TQHWWPlotter.cxx:2496
 TQHWWPlotter.cxx:2497
 TQHWWPlotter.cxx:2498
 TQHWWPlotter.cxx:2499
 TQHWWPlotter.cxx:2500
 TQHWWPlotter.cxx:2501
 TQHWWPlotter.cxx:2502
 TQHWWPlotter.cxx:2503
 TQHWWPlotter.cxx:2504
 TQHWWPlotter.cxx:2505
 TQHWWPlotter.cxx:2506
 TQHWWPlotter.cxx:2507
 TQHWWPlotter.cxx:2508
 TQHWWPlotter.cxx:2509
 TQHWWPlotter.cxx:2510
 TQHWWPlotter.cxx:2511
 TQHWWPlotter.cxx:2512
 TQHWWPlotter.cxx:2513
 TQHWWPlotter.cxx:2514
 TQHWWPlotter.cxx:2515
 TQHWWPlotter.cxx:2516
 TQHWWPlotter.cxx:2517
 TQHWWPlotter.cxx:2518
 TQHWWPlotter.cxx:2519
 TQHWWPlotter.cxx:2520
 TQHWWPlotter.cxx:2521
 TQHWWPlotter.cxx:2522
 TQHWWPlotter.cxx:2523
 TQHWWPlotter.cxx:2524
 TQHWWPlotter.cxx:2525
 TQHWWPlotter.cxx:2526
 TQHWWPlotter.cxx:2527
 TQHWWPlotter.cxx:2528
 TQHWWPlotter.cxx:2529
 TQHWWPlotter.cxx:2530
 TQHWWPlotter.cxx:2531
 TQHWWPlotter.cxx:2532
 TQHWWPlotter.cxx:2533
 TQHWWPlotter.cxx:2534
 TQHWWPlotter.cxx:2535
 TQHWWPlotter.cxx:2536
 TQHWWPlotter.cxx:2537
 TQHWWPlotter.cxx:2538
 TQHWWPlotter.cxx:2539
 TQHWWPlotter.cxx:2540
 TQHWWPlotter.cxx:2541
 TQHWWPlotter.cxx:2542
 TQHWWPlotter.cxx:2543
 TQHWWPlotter.cxx:2544
 TQHWWPlotter.cxx:2545
 TQHWWPlotter.cxx:2546
 TQHWWPlotter.cxx:2547
 TQHWWPlotter.cxx:2548
 TQHWWPlotter.cxx:2549
 TQHWWPlotter.cxx:2550
 TQHWWPlotter.cxx:2551
 TQHWWPlotter.cxx:2552
 TQHWWPlotter.cxx:2553
 TQHWWPlotter.cxx:2554
 TQHWWPlotter.cxx:2555
 TQHWWPlotter.cxx:2556
 TQHWWPlotter.cxx:2557
 TQHWWPlotter.cxx:2558
 TQHWWPlotter.cxx:2559
 TQHWWPlotter.cxx:2560
 TQHWWPlotter.cxx:2561
 TQHWWPlotter.cxx:2562
 TQHWWPlotter.cxx:2563
 TQHWWPlotter.cxx:2564
 TQHWWPlotter.cxx:2565
 TQHWWPlotter.cxx:2566
 TQHWWPlotter.cxx:2567
 TQHWWPlotter.cxx:2568
 TQHWWPlotter.cxx:2569
 TQHWWPlotter.cxx:2570
 TQHWWPlotter.cxx:2571
 TQHWWPlotter.cxx:2572
 TQHWWPlotter.cxx:2573
 TQHWWPlotter.cxx:2574
 TQHWWPlotter.cxx:2575
 TQHWWPlotter.cxx:2576
 TQHWWPlotter.cxx:2577
 TQHWWPlotter.cxx:2578
 TQHWWPlotter.cxx:2579
 TQHWWPlotter.cxx:2580
 TQHWWPlotter.cxx:2581
 TQHWWPlotter.cxx:2582
 TQHWWPlotter.cxx:2583
 TQHWWPlotter.cxx:2584
 TQHWWPlotter.cxx:2585
 TQHWWPlotter.cxx:2586
 TQHWWPlotter.cxx:2587
 TQHWWPlotter.cxx:2588
 TQHWWPlotter.cxx:2589
 TQHWWPlotter.cxx:2590
 TQHWWPlotter.cxx:2591
 TQHWWPlotter.cxx:2592
 TQHWWPlotter.cxx:2593
 TQHWWPlotter.cxx:2594
 TQHWWPlotter.cxx:2595
 TQHWWPlotter.cxx:2596
 TQHWWPlotter.cxx:2597
 TQHWWPlotter.cxx:2598
 TQHWWPlotter.cxx:2599
 TQHWWPlotter.cxx:2600
 TQHWWPlotter.cxx:2601
 TQHWWPlotter.cxx:2602
 TQHWWPlotter.cxx:2603
 TQHWWPlotter.cxx:2604
 TQHWWPlotter.cxx:2605
 TQHWWPlotter.cxx:2606
 TQHWWPlotter.cxx:2607
 TQHWWPlotter.cxx:2608
 TQHWWPlotter.cxx:2609
 TQHWWPlotter.cxx:2610
 TQHWWPlotter.cxx:2611
 TQHWWPlotter.cxx:2612
 TQHWWPlotter.cxx:2613
 TQHWWPlotter.cxx:2614
 TQHWWPlotter.cxx:2615
 TQHWWPlotter.cxx:2616
 TQHWWPlotter.cxx:2617
 TQHWWPlotter.cxx:2618
 TQHWWPlotter.cxx:2619
 TQHWWPlotter.cxx:2620
 TQHWWPlotter.cxx:2621
 TQHWWPlotter.cxx:2622
 TQHWWPlotter.cxx:2623
 TQHWWPlotter.cxx:2624
 TQHWWPlotter.cxx:2625
 TQHWWPlotter.cxx:2626
 TQHWWPlotter.cxx:2627
 TQHWWPlotter.cxx:2628
 TQHWWPlotter.cxx:2629
 TQHWWPlotter.cxx:2630
 TQHWWPlotter.cxx:2631
 TQHWWPlotter.cxx:2632
 TQHWWPlotter.cxx:2633
 TQHWWPlotter.cxx:2634
 TQHWWPlotter.cxx:2635
 TQHWWPlotter.cxx:2636
 TQHWWPlotter.cxx:2637
 TQHWWPlotter.cxx:2638
 TQHWWPlotter.cxx:2639
 TQHWWPlotter.cxx:2640
 TQHWWPlotter.cxx:2641
 TQHWWPlotter.cxx:2642
 TQHWWPlotter.cxx:2643
 TQHWWPlotter.cxx:2644
 TQHWWPlotter.cxx:2645
 TQHWWPlotter.cxx:2646
 TQHWWPlotter.cxx:2647
 TQHWWPlotter.cxx:2648
 TQHWWPlotter.cxx:2649
 TQHWWPlotter.cxx:2650
 TQHWWPlotter.cxx:2651
 TQHWWPlotter.cxx:2652
 TQHWWPlotter.cxx:2653
 TQHWWPlotter.cxx:2654
 TQHWWPlotter.cxx:2655
 TQHWWPlotter.cxx:2656
 TQHWWPlotter.cxx:2657
 TQHWWPlotter.cxx:2658
 TQHWWPlotter.cxx:2659
 TQHWWPlotter.cxx:2660
 TQHWWPlotter.cxx:2661
 TQHWWPlotter.cxx:2662
 TQHWWPlotter.cxx:2663
 TQHWWPlotter.cxx:2664
 TQHWWPlotter.cxx:2665
 TQHWWPlotter.cxx:2666
 TQHWWPlotter.cxx:2667
 TQHWWPlotter.cxx:2668
 TQHWWPlotter.cxx:2669
 TQHWWPlotter.cxx:2670
 TQHWWPlotter.cxx:2671
 TQHWWPlotter.cxx:2672
 TQHWWPlotter.cxx:2673
 TQHWWPlotter.cxx:2674
 TQHWWPlotter.cxx:2675
 TQHWWPlotter.cxx:2676
 TQHWWPlotter.cxx:2677
 TQHWWPlotter.cxx:2678
 TQHWWPlotter.cxx:2679
 TQHWWPlotter.cxx:2680
 TQHWWPlotter.cxx:2681
 TQHWWPlotter.cxx:2682
 TQHWWPlotter.cxx:2683
 TQHWWPlotter.cxx:2684
 TQHWWPlotter.cxx:2685
 TQHWWPlotter.cxx:2686
 TQHWWPlotter.cxx:2687
 TQHWWPlotter.cxx:2688
 TQHWWPlotter.cxx:2689
 TQHWWPlotter.cxx:2690
 TQHWWPlotter.cxx:2691
 TQHWWPlotter.cxx:2692
 TQHWWPlotter.cxx:2693
 TQHWWPlotter.cxx:2694
 TQHWWPlotter.cxx:2695
 TQHWWPlotter.cxx:2696
 TQHWWPlotter.cxx:2697
 TQHWWPlotter.cxx:2698
 TQHWWPlotter.cxx:2699
 TQHWWPlotter.cxx:2700
 TQHWWPlotter.cxx:2701
 TQHWWPlotter.cxx:2702
 TQHWWPlotter.cxx:2703
 TQHWWPlotter.cxx:2704
 TQHWWPlotter.cxx:2705
 TQHWWPlotter.cxx:2706
 TQHWWPlotter.cxx:2707
 TQHWWPlotter.cxx:2708
 TQHWWPlotter.cxx:2709
 TQHWWPlotter.cxx:2710
 TQHWWPlotter.cxx:2711
 TQHWWPlotter.cxx:2712
 TQHWWPlotter.cxx:2713
 TQHWWPlotter.cxx:2714
 TQHWWPlotter.cxx:2715
 TQHWWPlotter.cxx:2716
 TQHWWPlotter.cxx:2717
 TQHWWPlotter.cxx:2718
 TQHWWPlotter.cxx:2719
 TQHWWPlotter.cxx:2720
 TQHWWPlotter.cxx:2721
 TQHWWPlotter.cxx:2722
 TQHWWPlotter.cxx:2723
 TQHWWPlotter.cxx:2724
 TQHWWPlotter.cxx:2725
 TQHWWPlotter.cxx:2726
 TQHWWPlotter.cxx:2727
 TQHWWPlotter.cxx:2728
 TQHWWPlotter.cxx:2729
 TQHWWPlotter.cxx:2730
 TQHWWPlotter.cxx:2731
 TQHWWPlotter.cxx:2732
 TQHWWPlotter.cxx:2733
 TQHWWPlotter.cxx:2734
 TQHWWPlotter.cxx:2735
 TQHWWPlotter.cxx:2736
 TQHWWPlotter.cxx:2737
 TQHWWPlotter.cxx:2738
 TQHWWPlotter.cxx:2739
 TQHWWPlotter.cxx:2740
 TQHWWPlotter.cxx:2741
 TQHWWPlotter.cxx:2742
 TQHWWPlotter.cxx:2743
 TQHWWPlotter.cxx:2744
 TQHWWPlotter.cxx:2745
 TQHWWPlotter.cxx:2746
 TQHWWPlotter.cxx:2747
 TQHWWPlotter.cxx:2748
 TQHWWPlotter.cxx:2749
 TQHWWPlotter.cxx:2750
 TQHWWPlotter.cxx:2751
 TQHWWPlotter.cxx:2752
 TQHWWPlotter.cxx:2753
 TQHWWPlotter.cxx:2754
 TQHWWPlotter.cxx:2755
 TQHWWPlotter.cxx:2756
 TQHWWPlotter.cxx:2757
 TQHWWPlotter.cxx:2758
 TQHWWPlotter.cxx:2759
 TQHWWPlotter.cxx:2760
 TQHWWPlotter.cxx:2761
 TQHWWPlotter.cxx:2762
 TQHWWPlotter.cxx:2763
 TQHWWPlotter.cxx:2764
 TQHWWPlotter.cxx:2765
 TQHWWPlotter.cxx:2766
 TQHWWPlotter.cxx:2767
 TQHWWPlotter.cxx:2768
 TQHWWPlotter.cxx:2769
 TQHWWPlotter.cxx:2770
 TQHWWPlotter.cxx:2771
 TQHWWPlotter.cxx:2772
 TQHWWPlotter.cxx:2773
 TQHWWPlotter.cxx:2774
 TQHWWPlotter.cxx:2775
 TQHWWPlotter.cxx:2776
 TQHWWPlotter.cxx:2777
 TQHWWPlotter.cxx:2778
 TQHWWPlotter.cxx:2779
 TQHWWPlotter.cxx:2780
 TQHWWPlotter.cxx:2781
 TQHWWPlotter.cxx:2782
 TQHWWPlotter.cxx:2783
 TQHWWPlotter.cxx:2784
 TQHWWPlotter.cxx:2785
 TQHWWPlotter.cxx:2786
 TQHWWPlotter.cxx:2787
 TQHWWPlotter.cxx:2788
 TQHWWPlotter.cxx:2789
 TQHWWPlotter.cxx:2790
 TQHWWPlotter.cxx:2791
 TQHWWPlotter.cxx:2792
 TQHWWPlotter.cxx:2793
 TQHWWPlotter.cxx:2794
 TQHWWPlotter.cxx:2795
 TQHWWPlotter.cxx:2796
 TQHWWPlotter.cxx:2797
 TQHWWPlotter.cxx:2798
 TQHWWPlotter.cxx:2799
 TQHWWPlotter.cxx:2800
 TQHWWPlotter.cxx:2801
 TQHWWPlotter.cxx:2802
 TQHWWPlotter.cxx:2803
 TQHWWPlotter.cxx:2804
 TQHWWPlotter.cxx:2805
 TQHWWPlotter.cxx:2806
 TQHWWPlotter.cxx:2807
 TQHWWPlotter.cxx:2808
 TQHWWPlotter.cxx:2809
 TQHWWPlotter.cxx:2810
 TQHWWPlotter.cxx:2811
 TQHWWPlotter.cxx:2812
 TQHWWPlotter.cxx:2813
 TQHWWPlotter.cxx:2814
 TQHWWPlotter.cxx:2815
 TQHWWPlotter.cxx:2816
 TQHWWPlotter.cxx:2817
 TQHWWPlotter.cxx:2818
 TQHWWPlotter.cxx:2819
 TQHWWPlotter.cxx:2820
 TQHWWPlotter.cxx:2821
 TQHWWPlotter.cxx:2822
 TQHWWPlotter.cxx:2823
 TQHWWPlotter.cxx:2824
 TQHWWPlotter.cxx:2825
 TQHWWPlotter.cxx:2826
 TQHWWPlotter.cxx:2827
 TQHWWPlotter.cxx:2828
 TQHWWPlotter.cxx:2829
 TQHWWPlotter.cxx:2830
 TQHWWPlotter.cxx:2831
 TQHWWPlotter.cxx:2832
 TQHWWPlotter.cxx:2833
 TQHWWPlotter.cxx:2834
 TQHWWPlotter.cxx:2835
 TQHWWPlotter.cxx:2836
 TQHWWPlotter.cxx:2837
 TQHWWPlotter.cxx:2838
 TQHWWPlotter.cxx:2839
 TQHWWPlotter.cxx:2840
 TQHWWPlotter.cxx:2841
 TQHWWPlotter.cxx:2842
 TQHWWPlotter.cxx:2843
 TQHWWPlotter.cxx:2844
 TQHWWPlotter.cxx:2845
 TQHWWPlotter.cxx:2846
 TQHWWPlotter.cxx:2847
 TQHWWPlotter.cxx:2848
 TQHWWPlotter.cxx:2849
 TQHWWPlotter.cxx:2850
 TQHWWPlotter.cxx:2851
 TQHWWPlotter.cxx:2852
 TQHWWPlotter.cxx:2853
 TQHWWPlotter.cxx:2854
 TQHWWPlotter.cxx:2855
 TQHWWPlotter.cxx:2856
 TQHWWPlotter.cxx:2857
 TQHWWPlotter.cxx:2858
 TQHWWPlotter.cxx:2859
 TQHWWPlotter.cxx:2860
 TQHWWPlotter.cxx:2861
 TQHWWPlotter.cxx:2862
 TQHWWPlotter.cxx:2863
 TQHWWPlotter.cxx:2864
 TQHWWPlotter.cxx:2865
 TQHWWPlotter.cxx:2866
 TQHWWPlotter.cxx:2867
 TQHWWPlotter.cxx:2868
 TQHWWPlotter.cxx:2869
 TQHWWPlotter.cxx:2870
 TQHWWPlotter.cxx:2871
 TQHWWPlotter.cxx:2872
 TQHWWPlotter.cxx:2873
 TQHWWPlotter.cxx:2874
 TQHWWPlotter.cxx:2875
 TQHWWPlotter.cxx:2876
 TQHWWPlotter.cxx:2877
 TQHWWPlotter.cxx:2878
 TQHWWPlotter.cxx:2879
 TQHWWPlotter.cxx:2880
 TQHWWPlotter.cxx:2881
 TQHWWPlotter.cxx:2882
 TQHWWPlotter.cxx:2883
 TQHWWPlotter.cxx:2884
 TQHWWPlotter.cxx:2885
 TQHWWPlotter.cxx:2886
 TQHWWPlotter.cxx:2887
 TQHWWPlotter.cxx:2888
 TQHWWPlotter.cxx:2889
 TQHWWPlotter.cxx:2890
 TQHWWPlotter.cxx:2891
 TQHWWPlotter.cxx:2892
 TQHWWPlotter.cxx:2893
 TQHWWPlotter.cxx:2894
 TQHWWPlotter.cxx:2895
 TQHWWPlotter.cxx:2896
 TQHWWPlotter.cxx:2897
 TQHWWPlotter.cxx:2898
 TQHWWPlotter.cxx:2899
 TQHWWPlotter.cxx:2900
 TQHWWPlotter.cxx:2901
 TQHWWPlotter.cxx:2902
 TQHWWPlotter.cxx:2903
 TQHWWPlotter.cxx:2904
 TQHWWPlotter.cxx:2905
 TQHWWPlotter.cxx:2906
 TQHWWPlotter.cxx:2907
 TQHWWPlotter.cxx:2908
 TQHWWPlotter.cxx:2909
 TQHWWPlotter.cxx:2910
 TQHWWPlotter.cxx:2911
 TQHWWPlotter.cxx:2912
 TQHWWPlotter.cxx:2913
 TQHWWPlotter.cxx:2914
 TQHWWPlotter.cxx:2915
 TQHWWPlotter.cxx:2916
 TQHWWPlotter.cxx:2917
 TQHWWPlotter.cxx:2918
 TQHWWPlotter.cxx:2919
 TQHWWPlotter.cxx:2920
 TQHWWPlotter.cxx:2921
 TQHWWPlotter.cxx:2922
 TQHWWPlotter.cxx:2923
 TQHWWPlotter.cxx:2924
 TQHWWPlotter.cxx:2925
 TQHWWPlotter.cxx:2926
 TQHWWPlotter.cxx:2927
 TQHWWPlotter.cxx:2928
 TQHWWPlotter.cxx:2929
 TQHWWPlotter.cxx:2930
 TQHWWPlotter.cxx:2931
 TQHWWPlotter.cxx:2932
 TQHWWPlotter.cxx:2933
 TQHWWPlotter.cxx:2934
 TQHWWPlotter.cxx:2935
 TQHWWPlotter.cxx:2936
 TQHWWPlotter.cxx:2937
 TQHWWPlotter.cxx:2938
 TQHWWPlotter.cxx:2939
 TQHWWPlotter.cxx:2940
 TQHWWPlotter.cxx:2941
 TQHWWPlotter.cxx:2942
 TQHWWPlotter.cxx:2943
 TQHWWPlotter.cxx:2944
 TQHWWPlotter.cxx:2945
 TQHWWPlotter.cxx:2946
 TQHWWPlotter.cxx:2947
 TQHWWPlotter.cxx:2948
 TQHWWPlotter.cxx:2949
 TQHWWPlotter.cxx:2950
 TQHWWPlotter.cxx:2951
 TQHWWPlotter.cxx:2952
 TQHWWPlotter.cxx:2953
 TQHWWPlotter.cxx:2954
 TQHWWPlotter.cxx:2955
 TQHWWPlotter.cxx:2956
 TQHWWPlotter.cxx:2957
 TQHWWPlotter.cxx:2958
 TQHWWPlotter.cxx:2959
 TQHWWPlotter.cxx:2960
 TQHWWPlotter.cxx:2961
 TQHWWPlotter.cxx:2962
 TQHWWPlotter.cxx:2963
 TQHWWPlotter.cxx:2964
 TQHWWPlotter.cxx:2965
 TQHWWPlotter.cxx:2966
 TQHWWPlotter.cxx:2967
 TQHWWPlotter.cxx:2968
 TQHWWPlotter.cxx:2969
 TQHWWPlotter.cxx:2970
 TQHWWPlotter.cxx:2971
 TQHWWPlotter.cxx:2972
 TQHWWPlotter.cxx:2973
 TQHWWPlotter.cxx:2974
 TQHWWPlotter.cxx:2975
 TQHWWPlotter.cxx:2976
 TQHWWPlotter.cxx:2977
 TQHWWPlotter.cxx:2978
 TQHWWPlotter.cxx:2979
 TQHWWPlotter.cxx:2980
 TQHWWPlotter.cxx:2981
 TQHWWPlotter.cxx:2982
 TQHWWPlotter.cxx:2983
 TQHWWPlotter.cxx:2984
 TQHWWPlotter.cxx:2985
 TQHWWPlotter.cxx:2986
 TQHWWPlotter.cxx:2987
 TQHWWPlotter.cxx:2988
 TQHWWPlotter.cxx:2989
 TQHWWPlotter.cxx:2990
 TQHWWPlotter.cxx:2991
 TQHWWPlotter.cxx:2992
 TQHWWPlotter.cxx:2993
 TQHWWPlotter.cxx:2994
 TQHWWPlotter.cxx:2995
 TQHWWPlotter.cxx:2996
 TQHWWPlotter.cxx:2997
 TQHWWPlotter.cxx:2998
 TQHWWPlotter.cxx:2999
 TQHWWPlotter.cxx:3000
 TQHWWPlotter.cxx:3001
 TQHWWPlotter.cxx:3002
 TQHWWPlotter.cxx:3003
 TQHWWPlotter.cxx:3004
 TQHWWPlotter.cxx:3005
 TQHWWPlotter.cxx:3006
 TQHWWPlotter.cxx:3007
 TQHWWPlotter.cxx:3008
 TQHWWPlotter.cxx:3009
 TQHWWPlotter.cxx:3010
 TQHWWPlotter.cxx:3011
 TQHWWPlotter.cxx:3012
 TQHWWPlotter.cxx:3013
 TQHWWPlotter.cxx:3014
 TQHWWPlotter.cxx:3015
 TQHWWPlotter.cxx:3016
 TQHWWPlotter.cxx:3017
 TQHWWPlotter.cxx:3018
 TQHWWPlotter.cxx:3019
 TQHWWPlotter.cxx:3020
 TQHWWPlotter.cxx:3021
 TQHWWPlotter.cxx:3022
 TQHWWPlotter.cxx:3023
 TQHWWPlotter.cxx:3024
 TQHWWPlotter.cxx:3025
 TQHWWPlotter.cxx:3026
 TQHWWPlotter.cxx:3027
 TQHWWPlotter.cxx:3028
 TQHWWPlotter.cxx:3029
 TQHWWPlotter.cxx:3030
 TQHWWPlotter.cxx:3031
 TQHWWPlotter.cxx:3032
 TQHWWPlotter.cxx:3033
 TQHWWPlotter.cxx:3034
 TQHWWPlotter.cxx:3035
 TQHWWPlotter.cxx:3036
 TQHWWPlotter.cxx:3037
 TQHWWPlotter.cxx:3038
 TQHWWPlotter.cxx:3039
 TQHWWPlotter.cxx:3040
 TQHWWPlotter.cxx:3041
 TQHWWPlotter.cxx:3042
 TQHWWPlotter.cxx:3043
 TQHWWPlotter.cxx:3044
 TQHWWPlotter.cxx:3045
 TQHWWPlotter.cxx:3046
 TQHWWPlotter.cxx:3047
 TQHWWPlotter.cxx:3048
 TQHWWPlotter.cxx:3049
 TQHWWPlotter.cxx:3050
 TQHWWPlotter.cxx:3051
 TQHWWPlotter.cxx:3052
 TQHWWPlotter.cxx:3053
 TQHWWPlotter.cxx:3054
 TQHWWPlotter.cxx:3055
 TQHWWPlotter.cxx:3056
 TQHWWPlotter.cxx:3057
 TQHWWPlotter.cxx:3058
 TQHWWPlotter.cxx:3059
 TQHWWPlotter.cxx:3060
 TQHWWPlotter.cxx:3061
 TQHWWPlotter.cxx:3062
 TQHWWPlotter.cxx:3063
 TQHWWPlotter.cxx:3064
 TQHWWPlotter.cxx:3065
 TQHWWPlotter.cxx:3066
 TQHWWPlotter.cxx:3067
 TQHWWPlotter.cxx:3068
 TQHWWPlotter.cxx:3069
 TQHWWPlotter.cxx:3070
 TQHWWPlotter.cxx:3071
 TQHWWPlotter.cxx:3072
 TQHWWPlotter.cxx:3073
 TQHWWPlotter.cxx:3074
 TQHWWPlotter.cxx:3075
 TQHWWPlotter.cxx:3076
 TQHWWPlotter.cxx:3077
 TQHWWPlotter.cxx:3078
 TQHWWPlotter.cxx:3079
 TQHWWPlotter.cxx:3080
 TQHWWPlotter.cxx:3081
 TQHWWPlotter.cxx:3082
 TQHWWPlotter.cxx:3083
 TQHWWPlotter.cxx:3084
 TQHWWPlotter.cxx:3085
 TQHWWPlotter.cxx:3086
 TQHWWPlotter.cxx:3087
 TQHWWPlotter.cxx:3088
 TQHWWPlotter.cxx:3089
 TQHWWPlotter.cxx:3090
 TQHWWPlotter.cxx:3091
 TQHWWPlotter.cxx:3092
 TQHWWPlotter.cxx:3093
 TQHWWPlotter.cxx:3094
 TQHWWPlotter.cxx:3095
 TQHWWPlotter.cxx:3096
 TQHWWPlotter.cxx:3097
 TQHWWPlotter.cxx:3098
 TQHWWPlotter.cxx:3099
 TQHWWPlotter.cxx:3100
 TQHWWPlotter.cxx:3101
 TQHWWPlotter.cxx:3102
 TQHWWPlotter.cxx:3103
 TQHWWPlotter.cxx:3104
 TQHWWPlotter.cxx:3105
 TQHWWPlotter.cxx:3106
 TQHWWPlotter.cxx:3107
 TQHWWPlotter.cxx:3108
 TQHWWPlotter.cxx:3109
 TQHWWPlotter.cxx:3110
 TQHWWPlotter.cxx:3111
 TQHWWPlotter.cxx:3112
 TQHWWPlotter.cxx:3113
 TQHWWPlotter.cxx:3114
 TQHWWPlotter.cxx:3115
 TQHWWPlotter.cxx:3116
 TQHWWPlotter.cxx:3117
 TQHWWPlotter.cxx:3118
 TQHWWPlotter.cxx:3119
 TQHWWPlotter.cxx:3120
 TQHWWPlotter.cxx:3121
 TQHWWPlotter.cxx:3122
 TQHWWPlotter.cxx:3123
 TQHWWPlotter.cxx:3124
 TQHWWPlotter.cxx:3125
 TQHWWPlotter.cxx:3126
 TQHWWPlotter.cxx:3127
 TQHWWPlotter.cxx:3128
 TQHWWPlotter.cxx:3129
 TQHWWPlotter.cxx:3130
 TQHWWPlotter.cxx:3131
 TQHWWPlotter.cxx:3132
 TQHWWPlotter.cxx:3133
 TQHWWPlotter.cxx:3134
 TQHWWPlotter.cxx:3135
 TQHWWPlotter.cxx:3136
 TQHWWPlotter.cxx:3137
 TQHWWPlotter.cxx:3138
 TQHWWPlotter.cxx:3139
 TQHWWPlotter.cxx:3140
 TQHWWPlotter.cxx:3141
 TQHWWPlotter.cxx:3142
 TQHWWPlotter.cxx:3143
 TQHWWPlotter.cxx:3144
 TQHWWPlotter.cxx:3145
 TQHWWPlotter.cxx:3146
 TQHWWPlotter.cxx:3147
 TQHWWPlotter.cxx:3148
 TQHWWPlotter.cxx:3149
 TQHWWPlotter.cxx:3150
 TQHWWPlotter.cxx:3151
 TQHWWPlotter.cxx:3152
 TQHWWPlotter.cxx:3153
 TQHWWPlotter.cxx:3154
 TQHWWPlotter.cxx:3155
 TQHWWPlotter.cxx:3156
 TQHWWPlotter.cxx:3157
 TQHWWPlotter.cxx:3158
 TQHWWPlotter.cxx:3159
 TQHWWPlotter.cxx:3160
 TQHWWPlotter.cxx:3161
 TQHWWPlotter.cxx:3162
 TQHWWPlotter.cxx:3163
 TQHWWPlotter.cxx:3164
 TQHWWPlotter.cxx:3165
 TQHWWPlotter.cxx:3166
 TQHWWPlotter.cxx:3167
 TQHWWPlotter.cxx:3168
 TQHWWPlotter.cxx:3169
 TQHWWPlotter.cxx:3170
 TQHWWPlotter.cxx:3171
 TQHWWPlotter.cxx:3172
 TQHWWPlotter.cxx:3173
 TQHWWPlotter.cxx:3174
 TQHWWPlotter.cxx:3175
 TQHWWPlotter.cxx:3176
 TQHWWPlotter.cxx:3177
 TQHWWPlotter.cxx:3178
 TQHWWPlotter.cxx:3179
 TQHWWPlotter.cxx:3180
 TQHWWPlotter.cxx:3181
 TQHWWPlotter.cxx:3182
 TQHWWPlotter.cxx:3183
 TQHWWPlotter.cxx:3184
 TQHWWPlotter.cxx:3185
 TQHWWPlotter.cxx:3186
 TQHWWPlotter.cxx:3187
 TQHWWPlotter.cxx:3188
 TQHWWPlotter.cxx:3189
 TQHWWPlotter.cxx:3190
 TQHWWPlotter.cxx:3191
 TQHWWPlotter.cxx:3192
 TQHWWPlotter.cxx:3193
 TQHWWPlotter.cxx:3194
 TQHWWPlotter.cxx:3195
 TQHWWPlotter.cxx:3196
 TQHWWPlotter.cxx:3197
 TQHWWPlotter.cxx:3198
 TQHWWPlotter.cxx:3199
 TQHWWPlotter.cxx:3200
 TQHWWPlotter.cxx:3201
 TQHWWPlotter.cxx:3202
 TQHWWPlotter.cxx:3203
 TQHWWPlotter.cxx:3204
 TQHWWPlotter.cxx:3205
 TQHWWPlotter.cxx:3206
 TQHWWPlotter.cxx:3207
 TQHWWPlotter.cxx:3208
 TQHWWPlotter.cxx:3209
 TQHWWPlotter.cxx:3210
 TQHWWPlotter.cxx:3211
 TQHWWPlotter.cxx:3212
 TQHWWPlotter.cxx:3213
 TQHWWPlotter.cxx:3214
 TQHWWPlotter.cxx:3215
 TQHWWPlotter.cxx:3216
 TQHWWPlotter.cxx:3217
 TQHWWPlotter.cxx:3218
 TQHWWPlotter.cxx:3219
 TQHWWPlotter.cxx:3220
 TQHWWPlotter.cxx:3221
 TQHWWPlotter.cxx:3222
 TQHWWPlotter.cxx:3223
 TQHWWPlotter.cxx:3224
 TQHWWPlotter.cxx:3225
 TQHWWPlotter.cxx:3226
 TQHWWPlotter.cxx:3227
 TQHWWPlotter.cxx:3228
 TQHWWPlotter.cxx:3229
 TQHWWPlotter.cxx:3230
 TQHWWPlotter.cxx:3231
 TQHWWPlotter.cxx:3232
 TQHWWPlotter.cxx:3233
 TQHWWPlotter.cxx:3234
 TQHWWPlotter.cxx:3235
 TQHWWPlotter.cxx:3236
 TQHWWPlotter.cxx:3237
 TQHWWPlotter.cxx:3238
 TQHWWPlotter.cxx:3239
 TQHWWPlotter.cxx:3240
 TQHWWPlotter.cxx:3241
 TQHWWPlotter.cxx:3242
 TQHWWPlotter.cxx:3243
 TQHWWPlotter.cxx:3244
 TQHWWPlotter.cxx:3245
 TQHWWPlotter.cxx:3246
 TQHWWPlotter.cxx:3247
 TQHWWPlotter.cxx:3248
 TQHWWPlotter.cxx:3249
 TQHWWPlotter.cxx:3250
 TQHWWPlotter.cxx:3251
 TQHWWPlotter.cxx:3252
 TQHWWPlotter.cxx:3253
 TQHWWPlotter.cxx:3254
 TQHWWPlotter.cxx:3255
 TQHWWPlotter.cxx:3256
 TQHWWPlotter.cxx:3257
 TQHWWPlotter.cxx:3258
 TQHWWPlotter.cxx:3259
 TQHWWPlotter.cxx:3260
 TQHWWPlotter.cxx:3261
 TQHWWPlotter.cxx:3262
 TQHWWPlotter.cxx:3263
 TQHWWPlotter.cxx:3264
 TQHWWPlotter.cxx:3265
 TQHWWPlotter.cxx:3266
 TQHWWPlotter.cxx:3267
 TQHWWPlotter.cxx:3268
 TQHWWPlotter.cxx:3269
 TQHWWPlotter.cxx:3270
 TQHWWPlotter.cxx:3271
 TQHWWPlotter.cxx:3272
 TQHWWPlotter.cxx:3273
 TQHWWPlotter.cxx:3274
 TQHWWPlotter.cxx:3275
 TQHWWPlotter.cxx:3276
 TQHWWPlotter.cxx:3277
 TQHWWPlotter.cxx:3278
 TQHWWPlotter.cxx:3279
 TQHWWPlotter.cxx:3280
 TQHWWPlotter.cxx:3281
 TQHWWPlotter.cxx:3282
 TQHWWPlotter.cxx:3283
 TQHWWPlotter.cxx:3284
 TQHWWPlotter.cxx:3285
 TQHWWPlotter.cxx:3286
 TQHWWPlotter.cxx:3287
 TQHWWPlotter.cxx:3288
 TQHWWPlotter.cxx:3289
 TQHWWPlotter.cxx:3290
 TQHWWPlotter.cxx:3291
 TQHWWPlotter.cxx:3292
 TQHWWPlotter.cxx:3293
 TQHWWPlotter.cxx:3294
 TQHWWPlotter.cxx:3295
 TQHWWPlotter.cxx:3296
 TQHWWPlotter.cxx:3297
 TQHWWPlotter.cxx:3298
 TQHWWPlotter.cxx:3299
 TQHWWPlotter.cxx:3300
 TQHWWPlotter.cxx:3301
 TQHWWPlotter.cxx:3302
 TQHWWPlotter.cxx:3303
 TQHWWPlotter.cxx:3304
 TQHWWPlotter.cxx:3305
 TQHWWPlotter.cxx:3306
 TQHWWPlotter.cxx:3307
 TQHWWPlotter.cxx:3308
 TQHWWPlotter.cxx:3309
 TQHWWPlotter.cxx:3310
 TQHWWPlotter.cxx:3311
 TQHWWPlotter.cxx:3312
 TQHWWPlotter.cxx:3313
 TQHWWPlotter.cxx:3314
 TQHWWPlotter.cxx:3315
 TQHWWPlotter.cxx:3316
 TQHWWPlotter.cxx:3317
 TQHWWPlotter.cxx:3318
 TQHWWPlotter.cxx:3319
 TQHWWPlotter.cxx:3320
 TQHWWPlotter.cxx:3321
 TQHWWPlotter.cxx:3322
 TQHWWPlotter.cxx:3323
 TQHWWPlotter.cxx:3324
 TQHWWPlotter.cxx:3325
 TQHWWPlotter.cxx:3326
 TQHWWPlotter.cxx:3327
 TQHWWPlotter.cxx:3328
 TQHWWPlotter.cxx:3329
 TQHWWPlotter.cxx:3330
 TQHWWPlotter.cxx:3331
 TQHWWPlotter.cxx:3332
 TQHWWPlotter.cxx:3333
 TQHWWPlotter.cxx:3334
 TQHWWPlotter.cxx:3335
 TQHWWPlotter.cxx:3336
 TQHWWPlotter.cxx:3337
 TQHWWPlotter.cxx:3338
 TQHWWPlotter.cxx:3339
 TQHWWPlotter.cxx:3340
 TQHWWPlotter.cxx:3341
 TQHWWPlotter.cxx:3342
 TQHWWPlotter.cxx:3343
 TQHWWPlotter.cxx:3344
 TQHWWPlotter.cxx:3345
 TQHWWPlotter.cxx:3346
 TQHWWPlotter.cxx:3347
 TQHWWPlotter.cxx:3348
 TQHWWPlotter.cxx:3349
 TQHWWPlotter.cxx:3350
 TQHWWPlotter.cxx:3351
 TQHWWPlotter.cxx:3352