/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id$
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/

//////////////////////////////////////////////////////////////////////////////
//
// BEGIN_HTML
// A RooPlot is a plot frame and a container for graphics objects
// within that frame. As a frame, it provides the TH1-style public interface
// for settting plot ranges, configuring axes, etc. As a container, it
// holds an arbitrary set of objects that might be histograms of data,
// curves representing a fit model, or text labels. Use the Draw()
// method to draw a frame and the objects it contains. Use the various
// add...() methods to add objects to be drawn.  In general, the
// add...() methods create a private copy of the object you pass them
// and return a pointer to this copy. The caller owns the input object
// and this class owns the returned object.
// <p>
// All RooAbsReal and RooAbsData derived classes implement plotOn()
// functions that facilitate to plot themselves on a given RooPlot, e.g.
// <pre>
// RooPlot *frame = x.frame() ;
// data.plotOn(frame) ;
// pdf.plotOn(frame) ;
// </pre>
// These high level functions also take care of any projections
// or other mappings that need to be made to plot a multi-dimensional
// object onto a one-dimensional plot.
// END_HTML
//


#include "RooFit.h"

#include "TClass.h"
#include "TH1D.h"
#include "TBrowser.h"
#include "TPad.h"

#include "RooPlot.h"
#include "RooAbsReal.h"
#include "RooAbsRealLValue.h"
#include "RooPlotable.h"
#include "RooArgSet.h"
#include "RooCurve.h"
#include "RooHist.h"
#include "RooMsgService.h"

#include "TAttLine.h"
#include "TAttFill.h"
#include "TAttMarker.h"
#include "TAttText.h"
#include "TDirectory.h"
#include "TDirectoryFile.h"

#include "Riostream.h"
#include <string.h>
#include <assert.h>

using namespace std;

ClassImp(RooPlot)
;

Bool_t RooPlot::_addDirStatus = kTRUE ;

Bool_t RooPlot::addDirectoryStatus() { return _addDirStatus ; }
Bool_t RooPlot::setAddDirectoryStatus(Bool_t flag) { Bool_t ret = flag ; _addDirStatus = flag ; return ret ; }


//_____________________________________________________________________________
RooPlot::RooPlot() : _hist(0), _plotVarClone(0), _plotVarSet(0), _normVars(0), _normObj(0), _dir(0)
{
  // Default constructor
  // coverity[UNINIT_CTOR]

  _iterator= _items.MakeIterator() ;

  if (gDirectory && addDirectoryStatus()) {
    _dir = gDirectory ;
    gDirectory->Append(this) ;
  }
}


//_____________________________________________________________________________
RooPlot::RooPlot(Double_t xmin, Double_t xmax) :
  _hist(0), _items(), _plotVarClone(0), _plotVarSet(0), _normObj(0),
  _defYmin(1e-5), _defYmax(1), _dir(0)
{
  // Constructor of RooPlot with range [xmin,xmax]

  Bool_t histAddDirStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE) ;

  _hist = new TH1D(histName(),"A RooPlot",100,xmin,xmax) ;
  _hist->Sumw2(kFALSE) ;
  _hist->GetSumw2()->Set(0) ;

  
  TH1::AddDirectory(histAddDirStatus) ;


  // Create an empty frame with the specified x-axis limits.
  initialize();

}



//_____________________________________________________________________________
RooPlot::RooPlot(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax) :
  _hist(0), _items(), _plotVarClone(0),
  _plotVarSet(0), _normObj(0), _defYmin(1e-5), _defYmax(0), _dir(0)
{
  // Construct of a two-dimensioanl RooPlot with ranges [xmin,xmax] x [ymin,ymax]

  Bool_t histAddDirStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE) ;

  _hist = new TH1D(histName(),"A RooPlot",100,xmin,xmax) ;
  _hist->Sumw2(kFALSE) ;
  _hist->GetSumw2()->Set(0) ;

  TH1::AddDirectory(histAddDirStatus) ;

  SetMinimum(ymin);
  SetMaximum(ymax);
  initialize();
}


//_____________________________________________________________________________
RooPlot::RooPlot(const RooAbsRealLValue &var1, const RooAbsRealLValue &var2) :
  _hist(0), _items(),
  _plotVarClone(0), _plotVarSet(0), _normObj(0), _defYmin(1e-5), _defYmax(0), _dir(0)
{
  // Construct a two-dimensional RooPlot with ranges and properties taken
  // from variables var1 and var2

  Bool_t histAddDirStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE) ;

  _hist = new TH1D(histName(),"A RooPlot",100,var1.getMin(),var1.getMax()) ;
  _hist->Sumw2(kFALSE) ;
  _hist->GetSumw2()->Set(0) ;

  TH1::AddDirectory(histAddDirStatus) ;

  if(!var1.hasMin() || !var1.hasMax()) {
    coutE(InputArguments) << "RooPlot::RooPlot: cannot create plot for variable without finite limits: "
	 << var1.GetName() << endl;
    return;
  }
  if(!var2.hasMin() || !var2.hasMax()) {
    coutE(InputArguments) << "RooPlot::RooPlot: cannot create plot for variable without finite limits: "
	 << var1.GetName() << endl;
    return;
  }
  SetMinimum(var2.getMin());
  SetMaximum(var2.getMax());
  SetXTitle(var1.getTitle(kTRUE));
  SetYTitle(var2.getTitle(kTRUE));
  initialize();
}


//_____________________________________________________________________________
RooPlot::RooPlot(const RooAbsRealLValue &var1, const RooAbsRealLValue &var2,
		 Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax) :
  _hist(0), _items(), _plotVarClone(0),
  _plotVarSet(0), _normObj(0), _defYmin(1e-5), _defYmax(0), _dir(0)
{
  // Construct a two-dimensional RooPlot with ranges and properties taken
  // from variables var1 and var2 but with an overriding range definition
  // of [xmin,xmax] x [ymin,ymax]

  Bool_t histAddDirStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE) ;

  _hist = new TH1D(histName(),"A RooPlot",100,xmin,xmax) ;
  _hist->Sumw2(kFALSE) ;
  _hist->GetSumw2()->Set(0) ;

  TH1::AddDirectory(histAddDirStatus) ;

  SetMinimum(ymin);
  SetMaximum(ymax);
  SetXTitle(var1.getTitle(kTRUE));
  SetYTitle(var2.getTitle(kTRUE));
  initialize();
}


//_____________________________________________________________________________
RooPlot::RooPlot(const char* name, const char* title, const RooAbsRealLValue &var, Double_t xmin, Double_t xmax, Int_t nbins) :
  _hist(0), _items(),
  _plotVarClone(0), _plotVarSet(0), _normObj(0), _defYmin(1e-5), _defYmax(1), _dir(0)
{
  // Create an 1-dimensional with all properties taken from 'var', but
  // with an explicit range [xmin,xmax] and a default binning of 'nbins'

  Bool_t histAddDirStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE) ;

  _hist = new TH1D(name,title,nbins,xmin,xmax) ;
  _hist->Sumw2(kFALSE) ;
  _hist->GetSumw2()->Set(0) ;

  TH1::AddDirectory(histAddDirStatus) ;

  // plotVar can be a composite in case of a RooDataSet::plot, need deepClone
  _plotVarSet = (RooArgSet*) RooArgSet(var).snapshot() ;
  _plotVarClone= (RooAbsRealLValue*)_plotVarSet->find(var.GetName()) ;

  TString xtitle= var.getTitle(kTRUE);
  SetXTitle(xtitle.Data());

  initialize();

  _normBinWidth = (xmax-xmin)/nbins ;
}


//_____________________________________________________________________________
RooPlot::RooPlot(const RooAbsRealLValue &var, Double_t xmin, Double_t xmax, Int_t nbins) :
  _hist(0), _items(),
  _plotVarClone(0), _plotVarSet(0), _normObj(0), _defYmin(1e-5), _defYmax(1), _dir(0)
{
  // Create an 1-dimensional with all properties taken from 'var', but
  // with an explicit range [xmin,xmax] and a default binning of 'nbins'

  Bool_t histAddDirStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE) ;

  _hist = new TH1D(histName(),"RooPlot",nbins,xmin,xmax) ;
  _hist->Sumw2(kFALSE) ;
  _hist->GetSumw2()->Set(0) ;

  TH1::AddDirectory(histAddDirStatus) ;

  // plotVar can be a composite in case of a RooDataSet::plot, need deepClone
  _plotVarSet = (RooArgSet*) RooArgSet(var).snapshot() ;
  _plotVarClone= (RooAbsRealLValue*)_plotVarSet->find(var.GetName()) ;

  TString xtitle= var.getTitle(kTRUE);
  SetXTitle(xtitle.Data());

  TString title("A RooPlot of \"");
  title.Append(var.getTitle());
  title.Append("\"");
  SetTitle(title.Data());
  initialize();

  _normBinWidth = (xmax-xmin)/nbins ;
}



//_____________________________________________________________________________
RooPlot* RooPlot::emptyClone(const char* name)
{
  // Return empty clone of current RooPlot

  RooPlot* clone = new RooPlot(*_plotVarClone,_hist->GetXaxis()->GetXmin(),_hist->GetXaxis()->GetXmax(),_hist->GetNbinsX()) ;
  clone->SetName(name) ;
  return clone ;
}


//_____________________________________________________________________________
void RooPlot::initialize()
{
  // Perform initialization that is common to all constructors.

  SetName(histName()) ;

  if (gDirectory && addDirectoryStatus()) {
    _dir = gDirectory ;
    gDirectory->Append(this) ;
  }

  // We do not have useful stats of our own
  _hist->SetStats(kFALSE);
  // Default vertical padding of our enclosed objects
  setPadFactor(0.05);
  // We don't know our normalization yet
  _normNumEvts= 0;
  _normBinWidth = 0;
  _normVars= 0;
  // Create an iterator over our enclosed objects
  _iterator= _items.MakeIterator();
  assert(0 != _iterator);
}


//_____________________________________________________________________________
TString RooPlot::histName() const
{
  // Construct automatic name of internal TH1
  if (_plotVarClone) {
    return TString(Form("frame_%s_%lx",_plotVarClone->GetName(),(ULong_t)this)) ;
  } else {
    return TString(Form("frame_%lx",(ULong_t)this)) ;
  }
}


//_____________________________________________________________________________
RooPlot::~RooPlot()
{
  // Destructor

  // Delete the items in our container and our iterator.
  if (_dir) {
    if (!_dir->TestBit(TDirectoryFile::kCloseDirectory)) {
      _dir->GetList()->RecursiveRemove(this) ;
    }
  }

  _items.Delete();
  delete _iterator;
  if(_plotVarSet) delete _plotVarSet;
  if(_normVars) delete _normVars;
  delete _hist ;

}


//_____________________________________________________________________________
void RooPlot::updateNormVars(const RooArgSet &vars)
{
  // Install the given set of observables are reference normalization
  // variables for this frame. These observables are e.g. later used
  // to automatically project out observables when plotting functions
  // on this frame. This function is only effective when called the
  // first time on a frame

  if(0 == _normVars) _normVars= (RooArgSet*) vars.snapshot(kTRUE);
}


//_____________________________________________________________________________
Stat_t RooPlot::GetBinContent(Int_t /*i*/) const {
  // A plot object is a frame without any bin contents of its own so this
  // method always returns zero.
  return 0;
}


//_____________________________________________________________________________
Stat_t RooPlot::GetBinContent(Int_t, Int_t) const
{
  // A plot object is a frame without any bin contents of its own so this
  // method always returns zero.
  return 0;
}


//_____________________________________________________________________________
Stat_t RooPlot::GetBinContent(Int_t, Int_t, Int_t) const
{
  // A plot object is a frame without any bin contents of its own so this
  // method always returns zero.
  return 0;
}



//_____________________________________________________________________________
void RooPlot::addObject(TObject *obj, Option_t *drawOptions, Bool_t invisible)
{
  // Add a generic object to this plot. The specified options will be
  // used to Draw() this object later. The caller transfers ownership
  // of the object with this call, and the object will be deleted
  // when its containing plot object is destroyed.

  if(0 == obj) {
    coutE(InputArguments) << fName << "::addObject: called with a null pointer" << endl;
    return;
  }
  DrawOpt opt(drawOptions) ;
  opt.invisible = invisible ;
  _items.Add(obj,opt.rawOpt());
}


//_____________________________________________________________________________
void RooPlot::addTH1(TH1 *hist, Option_t *drawOptions, Bool_t invisible)
{
  // Add a TH1 histogram object to this plot. The specified options
  // will be used to Draw() this object later. "SAME" will be added to
  // the options if they are not already present. The caller transfers
  // ownership of the object with this call, and the object will be
  // deleted when its containing plot object is destroyed.

  if(0 == hist) {
    coutE(InputArguments) << fName << "::addTH1: called with a null pointer" << endl;
    return;
  }
  // check that this histogram is really 1D
  if(1 != hist->GetDimension()) {
    coutE(InputArguments) << fName << "::addTH1: cannot plot histogram with "
	 << hist->GetDimension() << " dimensions" << endl;
    return;
  }

  // add option "SAME" if necessary
  TString options(drawOptions);
  options.ToUpper();
  if(!options.Contains("SAME")) options.Append("SAME");

  // update our y-axis label and limits
  updateYAxis(hist->GetMinimum(),hist->GetMaximum(),hist->GetYaxis()->GetTitle());

  // use this histogram's normalization if necessary
  updateFitRangeNorm(hist);

  // add the histogram to our list
  addObject(hist,options.Data(),invisible);
}


//_____________________________________________________________________________
void RooPlot::addPlotable(RooPlotable *plotable, Option_t *drawOptions, Bool_t invisible, Bool_t refreshNorm)
{
  // Add the specified plotable object to our plot. Increase our y-axis
  // limits to fit this object if necessary. The default lower-limit
  // is zero unless we are plotting an object that takes on negative values.
  // This call transfers ownership of the plotable object to this class.
  // The plotable object will be deleted when this plot object is deleted.

  // update our y-axis label and limits
  updateYAxis(plotable->getYAxisMin(),plotable->getYAxisMax(),plotable->getYAxisLabel());

  // use this object's normalization if necessary
  updateFitRangeNorm(plotable,refreshNorm) ;

  // add this element to our list and remember its drawing option
  TObject *obj= plotable->crossCast();
  if(0 == obj) {
    coutE(InputArguments) << fName << "::add: cross-cast to TObject failed (nothing added)" << endl;
  }
  else {
    DrawOpt opt(drawOptions) ;
    opt.invisible = invisible ;
    _items.Add(obj,opt.rawOpt());
  }
}


//_____________________________________________________________________________
void RooPlot::updateFitRangeNorm(const TH1* hist)
{
  // Update our plot normalization over our plot variable's fit range,
  // which will be determined by the first suitable object added to our plot.

  const TAxis* xa = ((TH1*)hist)->GetXaxis() ;
  _normBinWidth = (xa->GetXmax()-xa->GetXmin())/hist->GetNbinsX() ;
  _normNumEvts = hist->GetEntries()/_normBinWidth ;
}


//_____________________________________________________________________________
void RooPlot::updateFitRangeNorm(const RooPlotable* rp, Bool_t refreshNorm)
{
  // Update our plot normalization over our plot variable's fit range,
  // which will be determined by the first suitable object added to our plot.

  if (_normNumEvts != 0) {

    // If refresh feature is disabled stop here
    if (!refreshNorm) return ;

    Double_t corFac(1.0) ;
    if (dynamic_cast<const RooHist*>(rp)) corFac = _normBinWidth/rp->getFitRangeBinW() ;


    if (fabs(rp->getFitRangeNEvt()/corFac-_normNumEvts)>1e-6) {
      coutI(Plotting) << "RooPlot::updateFitRangeNorm: New event count of " << rp->getFitRangeNEvt()/corFac
		      << " will supercede previous event count of " << _normNumEvts << " for normalization of PDF projections" << endl ;
    }

    // Nominal bin width (i.e event density) is already locked in by previously drawn histogram
    // scale this histogram to match that density
    _normNumEvts = rp->getFitRangeNEvt()/corFac ;
    _normObj = rp ;
    // cout << "correction factor = " << _normBinWidth << "/" << rp->getFitRangeBinW() << endl ;
    // cout << "updating numevts to " << _normNumEvts << endl ;

  } else {

    _normObj = rp ;
    _normNumEvts = rp->getFitRangeNEvt() ;
    if (rp->getFitRangeBinW()) {
      _normBinWidth = rp->getFitRangeBinW() ;
    }

    // cout << "updating numevts to " << _normNumEvts << endl ;
  }

}



//_____________________________________________________________________________
void RooPlot::updateYAxis(Double_t ymin, Double_t ymax, const char *label)
{
  // Update our y-axis limits to accomodate an object whose spread
  // in y is (ymin,ymax). Use the specified y-axis label if we don't
  // have one assigned already.

  // force an implicit lower limit of zero if appropriate
  if(GetMinimum() == 0 && ymin > 0) ymin= 0;

  // calculate padded values
  Double_t ypad= getPadFactor()*(ymax-ymin);
  ymax+= ypad;
  if(ymin < 0) ymin-= ypad;

  // update our limits if necessary
  if(GetMaximum() < ymax) {
    _defYmax = ymax ;
    SetMaximum(ymax);
    // if we don't do this - Unzoom on y-axis will reset upper bound to 1 
    _hist->SetBinContent(1,ymax) ; 
  }
  if(GetMinimum() > ymin) {
    _defYmin = ymin ;
    SetMinimum(ymin);
  }

  // use the specified y-axis label if we don't have one already
  if(0 == strlen(_hist->GetYaxis()->GetTitle())) _hist->SetYTitle(label);
}


//_____________________________________________________________________________
void RooPlot::Draw(Option_t *option)
{
  // Draw this plot and all of the elements it contains. The specified options
  // only apply to the drawing of our frame. The options specified in our add...()
  // methods will be used to draw each object we contain.

  TString optArg = option ;
  optArg.ToLower() ;

  // This draw options prevents the histogram with one dummy entry 
  // to be drawn 
  if (optArg.Contains("same")) {
    _hist->Draw("FUNCSAME");
  } else {
    _hist->Draw("FUNC");
  }

  _iterator->Reset();
  TObject *obj = 0;
  while((obj= _iterator->Next())) {
    DrawOpt opt(_iterator->GetOption()) ;
    if (!opt.invisible) {
       //LM:  in case of a TGraph derived object, do not use default "" option
       // which is "ALP" from 5.34.10 (and will then redrawn the axis) but  use "LP" 
       if (!strlen(opt.drawOptions) && obj->IsA()->InheritsFrom(TGraph::Class()) ) strlcpy(opt.drawOptions,"LP",3); 
       obj->Draw(opt.drawOptions);
    }
  }

  _hist->Draw("AXISSAME");
}



//_____________________________________________________________________________
void RooPlot::printName(ostream& os) const
{
  // Print frame name
  os << GetName() ;
}


//_____________________________________________________________________________
void RooPlot::printTitle(ostream& os) const
{
  // Print frame title
  os << GetTitle() ;
}


//_____________________________________________________________________________
void RooPlot::printClassName(ostream& os) const
{
  // Print frame class name
  os << IsA()->GetName() ;
}



//_____________________________________________________________________________
void RooPlot::printArgs(ostream& os) const
{
  if (_plotVarClone) {
    os << "[" ;
    _plotVarClone->printStream(os,kName,kInline) ;
    os << "]" ;
  }
}



//_____________________________________________________________________________
void RooPlot::printValue(ostream& os) const
{
  // Print frame arguments
  os << "(" ;
  _iterator->Reset();
  TObject *obj = 0;
  Bool_t first(kTRUE) ;
  while((obj= _iterator->Next())) {
    if (first) {
      first=kFALSE ;
    } else {
      os << "," ;
    }
    if(obj->IsA()->InheritsFrom(RooPrintable::Class())) {
      RooPrintable* po = dynamic_cast<RooPrintable*>(obj) ;
      // coverity[FORWARD_NULL]
      po->printStream(os,kClassName|kName,kInline) ;
    }
    // is it a TNamed subclass?
    else {
      os << obj->ClassName() << "::" << obj->GetName() ;
    }
  }
  os << ")" ;
}


//_____________________________________________________________________________
void RooPlot::printMultiline(ostream& os, Int_t /*content*/, Bool_t verbose, TString indent) const
{
  // Frame detailed printing

  TString deeper(indent);
  deeper.Append("    ");
  if(0 != _plotVarClone) {
    os << indent << "RooPlot " << GetName() << " (" << GetTitle() << ") plots variable ";
    _plotVarClone->printStream(os,kName|kTitle,kSingleLine,"");
  }
  else {
    os << indent << "RooPlot " << GetName() << " (" << GetTitle() << ") has no associated plot variable" << endl ;
  }
  os << indent << "  Plot frame contains " << _items.GetSize() << " object(s):" << endl;

  if(verbose) {
    _iterator->Reset();
    TObject *obj = 0;
    Int_t i=0 ;
    while((obj= _iterator->Next())) {
      os << deeper << "[" << i++ << "] (Options=\"" << _iterator->GetOption() << "\") ";
      // Is this a printable object?
      if(obj->IsA()->InheritsFrom(RooPrintable::Class())) {
	RooPrintable* po = dynamic_cast<RooPrintable*>(obj) ;
	if (po) {
	  po->printStream(os,kName|kClassName|kArgs|kExtras,kSingleLine) ;
	}
      }
      // is it a TNamed subclass?
      else {
	os << obj->ClassName() << "::" << obj->GetName() << endl;
      }
    }
  }
}



//_____________________________________________________________________________
const char* RooPlot::nameOf(Int_t idx) const
{
  // Return the name of the object at slot 'idx' in this RooPlot.
  // If the given index is out of range, return a null pointer

  TObject* obj = _items.At(idx) ;
  if (!obj) {
    coutE(InputArguments) << "RooPlot::nameOf(" << GetName() << ") index " << idx << " out of range" << endl ;
    return 0 ;
  }
  return obj->GetName() ;
}



//_____________________________________________________________________________
TObject* RooPlot::getObject(Int_t idx) const
{
  // Return the name of the object at slot 'idx' in this RooPlot.
  // If the given index is out of range, return a null pointer

  TObject* obj = _items.At(idx) ;
  if (!obj) {
    coutE(InputArguments) << "RooPlot::getObject(" << GetName() << ") index " << idx << " out of range" << endl ;
    return 0 ;
  }
  return obj ;
}



//_____________________________________________________________________________
TAttLine *RooPlot::getAttLine(const char *name) const
{
  // Return a pointer to the line attributes of the named object in this plot,
  // or zero if the named object does not exist or does not have line attributes.

  return dynamic_cast<TAttLine*>(findObject(name));
}


//_____________________________________________________________________________
TAttFill *RooPlot::getAttFill(const char *name) const
{
  // Return a pointer to the fill attributes of the named object in this plot,
  // or zero if the named object does not exist or does not have fill attributes.

  return dynamic_cast<TAttFill*>(findObject(name));
}


//_____________________________________________________________________________
TAttMarker *RooPlot::getAttMarker(const char *name) const
{
  // Return a pointer to the marker attributes of the named object in this plot,
  // or zero if the named object does not exist or does not have marker attributes.

  return dynamic_cast<TAttMarker*>(findObject(name));
}


//_____________________________________________________________________________
TAttText *RooPlot::getAttText(const char *name) const
{
  // Return a pointer to the text attributes of the named object in this plot,
  // or zero if the named object does not exist or does not have text attributes.

  return dynamic_cast<TAttText*>(findObject(name));
}



//_____________________________________________________________________________
RooCurve* RooPlot::getCurve(const char* name) const
{
  // Return a RooCurve pointer of the named object in this plot,
  // or zero if the named object does not exist or is not a RooCurve

  return dynamic_cast<RooCurve*>(findObject(name)) ;
}


//_____________________________________________________________________________
RooHist* RooPlot::getHist(const char* name) const
{
  // Return a RooCurve pointer of the named object in this plot,
  // or zero if the named object does not exist or is not a RooCurve

  return dynamic_cast<RooHist*>(findObject(name)) ;
}



//_____________________________________________________________________________
void RooPlot::remove(const char* name, Bool_t deleteToo)
{
  // Remove object with given name, or last object added if no name is given.
  // If deleteToo is true (default), the object removed from the RooPlot is
  // also deleted.

  TObject* obj = findObject(name) ;
  if (!obj) {
    if (name) {
      coutE(InputArguments) << "RooPlot::remove(" << GetName() << ") ERROR: no object found with name " << name << endl ;
    } else {
      coutE(InputArguments) << "RooPlot::remove(" << GetName() << ") ERROR: plot frame is empty, cannot remove last object" << endl ;
    }
    return ;
  }

  _items.Remove(obj) ;

  if (deleteToo) {
    delete obj ;
  }
}


//_____________________________________________________________________________
Bool_t RooPlot::drawBefore(const char *before, const char *target)
{
  // Change the order in which our contained objects are drawn so that
  // the target object is drawn just before the specified object.
  // Returns kFALSE if either object does not exist.

  return _items.moveBefore(before, target, caller("drawBefore"));
}


//_____________________________________________________________________________
Bool_t RooPlot::drawAfter(const char *after, const char *target)
{
  // Change the order in which our contained objects are drawn so that
  // the target object is drawn just after the specified object.
  // Returns kFALSE if either object does not exist.

  return _items.moveAfter(after, target, caller("drawAfter"));
}


//_____________________________________________________________________________
TObject *RooPlot::findObject(const char *name, const TClass* clas) const
{
  // Find the named object in our list of items and return a pointer
  // to it. Return zero and print a warning message if the named
  // object cannot be found. If no name is supplied the last object
  // added is returned.
  //
  // Note that the returned pointer is to a
  // TObject and so will generally need casting. Use the getAtt...()
  // methods to change the drawing style attributes of a contained
  // object directly.

  TObject *obj = 0;
  TObject *ret = 0;

  TIterator* iter = _items.MakeIterator() ;
  while((obj=iter->Next())) {
    if ((!name || !TString(name).CompareTo(obj->GetName())) &&
	(!clas || (obj->IsA()==clas))) {
      ret = obj ;
    }
  }
  delete iter ;

  if (ret==0) {
    coutE(InputArguments) << "RooPlot::findObject(" << GetName() << ") cannot find object " << (name?name:"<last>") << endl ;
  }
  return ret ;
}


//_____________________________________________________________________________
TString RooPlot::getDrawOptions(const char *name) const
{
  // Return the Draw() options registered for the named object. Return
  // an empty string if the named object cannot be found.

  TObjOptLink *link= _items.findLink(name,caller("getDrawOptions"));
  DrawOpt opt(0 == link ? "" : link->GetOption()) ;
  return TString(opt.drawOptions) ;
}


//_____________________________________________________________________________
Bool_t RooPlot::setDrawOptions(const char *name, TString options)
{
  // Register the specified drawing options for the named object.
  // Return kFALSE if the named object cannot be found.

  TObjOptLink *link= _items.findLink(name,caller("setDrawOptions"));
  if(0 == link) return kFALSE;

  DrawOpt opt(link->GetOption()) ;
  strlcpy(opt.drawOptions,options,128) ;
  link->SetOption(opt.rawOpt());
  return kTRUE;
}


//_____________________________________________________________________________
Bool_t RooPlot::getInvisible(const char* name) const
{
  // Returns true of object with given name is set to be invisible
  TObjOptLink *link= _items.findLink(name,caller("getInvisible"));
  if(0 == link) return kFALSE;

  return DrawOpt(link->GetOption()).invisible ;
}


//_____________________________________________________________________________
void RooPlot::setInvisible(const char* name, Bool_t flag)
{
  // If flag is true object with 'name' is set to be invisible
  // i.e. it is not drawn when Draw() is called

  TObjOptLink *link= _items.findLink(name,caller("getInvisible"));

  DrawOpt opt ;

  if(link) {
    opt.initialize(link->GetOption()) ;
    opt.invisible = flag ;
    link->SetOption(opt.rawOpt()) ;
  }

}



//_____________________________________________________________________________
TString RooPlot::caller(const char *method) const
{
  // Utility function
  TString name(fName);
  if(strlen(method)) {
    name.Append("::");
    name.Append(method);
  }
  return name;
}



//_____________________________________________________________________________
void RooPlot::SetMaximum(Double_t maximum)
{
  // Set maximum value of Y axis
  _hist->SetMaximum(maximum==-1111?_defYmax:maximum) ;
}



//_____________________________________________________________________________
void RooPlot::SetMinimum(Double_t minimum)
{
  // Set minimum value of Y axis
  _hist->SetMinimum(minimum==-1111?_defYmin:minimum) ;
}



//_____________________________________________________________________________
Double_t RooPlot::chiSquare(const char* curvename, const char* histname, Int_t nFitParam) const
{
  // Calculate and return reduced chi-squared of curve with given name with respect
  // to histogram with given name. If nFitParam is non-zero, it is used to reduce the
  // number of degrees of freedom for a chi^2 for a curve that was fitted to the
  // data with that number of floating parameters


  // Find curve object
  RooCurve* curve = (RooCurve*) findObject(curvename,RooCurve::Class()) ;
  if (!curve) {
    coutE(InputArguments) << "RooPlot::chiSquare(" << GetName() << ") cannot find curve" << endl ;
    return -1. ;
  }

  // Find histogram object
  RooHist* hist = (RooHist*) findObject(histname,RooHist::Class()) ;
  if (!hist) {
    coutE(InputArguments) << "RooPlot::chiSquare(" << GetName() << ") cannot find histogram" << endl ;
    return -1. ;
  }

  return curve->chiSquare(*hist,nFitParam) ;
}


//_____________________________________________________________________________
RooHist* RooPlot::residHist(const char* histname, const char* curvename, bool normalize, bool useAverage) const
{
  // Return a RooHist containing the residuals of histogram 'histname' with respect
  // to curve 'curvename'. If normalize is true the residuals are divided by the error
  // on the histogram, effectively returning a pull histogram

  // Find curve object
  RooCurve* curve = (RooCurve*) findObject(curvename,RooCurve::Class()) ;
  if (!curve) {
    coutE(InputArguments) << "RooPlot::residHist(" << GetName() << ") cannot find curve" << endl ;
    return 0 ;
  }

  // Find histogram object
  RooHist* hist = (RooHist*) findObject(histname,RooHist::Class()) ;
  if (!hist) {
    coutE(InputArguments) << "RooPlot::residHist(" << GetName() << ") cannot find histogram" << endl ;
    return 0 ;
  }

  return hist->makeResidHist(*curve,normalize,useAverage) ;
}



//_____________________________________________________________________________
void RooPlot::DrawOpt::initialize(const char* inRawOpt)
{
  // Initialize the DrawOpt helper class

  if (!inRawOpt) {
    drawOptions[0] = 0 ;
    invisible=kFALSE ;
    return ;
  }
  strlcpy(drawOptions,inRawOpt,128) ;
  strtok(drawOptions,":") ;
  const char* extraOpt = strtok(0,":") ;
  if (extraOpt) {
    invisible =  (extraOpt[0]=='I') ;
  }
}


//_____________________________________________________________________________
const char* RooPlot::DrawOpt::rawOpt() const
{
  // Return the raw draw options
  static char buf[128] ;
  strlcpy(buf,drawOptions,128) ;
  if (invisible) {
    strlcat(buf,":I",128) ;
  }
  return buf ;
}



//_____________________________________________________________________________
Double_t RooPlot::getFitRangeNEvt(Double_t xlo, Double_t xhi) const
{
  // Return the number of events that is associated with the range [xlo,xhi]
  // This method is only fully functional for ranges not equal to the full
  // range if the object that inserted the normalization data provided
  // a link to an external object that can calculate the event count in
  // in sub ranges. An error will be printed if this function is used
  // on sub-ranges while that information is not available

  Double_t scaleFactor = 1.0 ;
  if (_normObj) {
    scaleFactor = _normObj->getFitRangeNEvt(xlo,xhi)/_normObj->getFitRangeNEvt() ;
  } else {
    coutW(Plotting) << "RooPlot::getFitRangeNEvt(" << GetName() << ") WARNING: Unable to obtain event count in range "
		    << xlo << " to " << xhi << ", substituting full event count" << endl ;
  }
  return getFitRangeNEvt()*scaleFactor ;
}


//_____________________________________________________________________________
void RooPlot::SetName(const char *name)
{
  // Set the name of the RooPlot to 'name'

  if (_dir) _dir->GetList()->Remove(this);
  TNamed::SetName(name) ;
  if (_dir) _dir->GetList()->Add(this);
}


//_____________________________________________________________________________
void RooPlot::SetNameTitle(const char *name, const char* title)
{
  // Set the name and title of the RooPlot to 'name' and 'title'
  if (_dir) _dir->GetList()->Remove(this);
  TNamed::SetNameTitle(name,title) ;
  if (_dir) _dir->GetList()->Add(this);
}


//_____________________________________________________________________________
void RooPlot::SetTitle(const char* title)
{
  // Set the title of the RooPlot to 'title'
  TNamed::SetTitle(title) ;
  _hist->SetTitle(title) ;
}



//_____________________________________________________________________________
Int_t RooPlot::defaultPrintContents(Option_t* /*opt*/) const
{
  // Define default print options, for a given print style

  return kName|kArgs|kValue ;
}



TAxis* RooPlot::GetXaxis() const { return _hist->GetXaxis() ; }
TAxis* RooPlot::GetYaxis() const { return _hist->GetYaxis() ; }
Int_t  RooPlot::GetNbinsX() const { return _hist->GetNbinsX() ; }
Int_t  RooPlot::GetNdivisions(Option_t* axis) const { return _hist->GetNdivisions(axis) ; }
Double_t  RooPlot::GetMinimum(Double_t minval) const { return _hist->GetMinimum(minval) ; }
Double_t   RooPlot::GetMaximum(Double_t maxval) const { return _hist->GetMaximum(maxval) ; }


void RooPlot::SetAxisColor(Color_t color, Option_t* axis) { _hist->SetAxisColor(color,axis) ; }
void RooPlot::SetAxisRange(Double_t xmin, Double_t xmax, Option_t* axis) { _hist->SetAxisRange(xmin,xmax,axis) ; }
void RooPlot::SetBarOffset(Float_t offset) { _hist->SetBarOffset(offset) ; }
void RooPlot::SetBarWidth(Float_t width) { _hist->SetBarWidth(width) ; }
void RooPlot::SetContour(Int_t nlevels, const Double_t* levels) { _hist->SetContour(nlevels,levels) ; }
void RooPlot::SetContourLevel(Int_t level, Double_t value) { _hist->SetContourLevel(level,value) ; }
void RooPlot::SetDrawOption(Option_t* option) { _hist->SetDrawOption(option) ; }
void RooPlot::SetFillAttributes() { _hist->SetFillAttributes() ; }
void RooPlot::SetFillColor(Color_t fcolor) { _hist->SetFillColor(fcolor) ; }
void RooPlot::SetFillStyle(Style_t fstyle) { _hist->SetFillStyle(fstyle) ; }
void RooPlot::SetLabelColor(Color_t color, Option_t* axis) { _hist->SetLabelColor(color,axis) ; }
void RooPlot::SetLabelFont(Style_t font, Option_t* axis) { _hist->SetLabelFont(font,axis) ; }
void RooPlot::SetLabelOffset(Float_t offset, Option_t* axis) { _hist->SetLabelOffset(offset,axis) ; }
void RooPlot::SetLabelSize(Float_t size, Option_t* axis) { _hist->SetLabelSize(size,axis) ; }
void RooPlot::SetLineAttributes() { _hist->SetLineAttributes() ; }
void RooPlot::SetLineColor(Color_t lcolor) { _hist->SetLineColor(lcolor) ; }
void RooPlot::SetLineStyle(Style_t lstyle) { _hist->SetLineStyle(lstyle) ; }
void RooPlot::SetLineWidth(Width_t lwidth) { _hist->SetLineWidth(lwidth) ; }
void RooPlot::SetMarkerAttributes() { _hist->SetMarkerAttributes() ; }
void RooPlot::SetMarkerColor(Color_t tcolor) { _hist->SetMarkerColor(tcolor) ; }
void RooPlot::SetMarkerSize(Size_t msize) { _hist->SetMarkerSize(msize) ; }
void RooPlot::SetMarkerStyle(Style_t mstyle) { _hist->SetMarkerStyle(mstyle) ; }
void RooPlot::SetNdivisions(Int_t n, Option_t* axis) { _hist->SetNdivisions(n,axis) ; }
void RooPlot::SetOption(Option_t* option) { _hist->SetOption(option) ; }
void RooPlot::SetStats(Bool_t stats) { _hist->SetStats(stats) ; }
void RooPlot::SetTickLength(Float_t length, Option_t* axis) { _hist->SetTickLength(length,axis) ; }
void RooPlot::SetTitleFont(Style_t font, Option_t* axis) { _hist->SetTitleFont(font,axis) ; }
void RooPlot::SetTitleOffset(Float_t offset, Option_t* axis) { _hist->SetTitleOffset(offset,axis) ; }
void RooPlot::SetTitleSize(Float_t size, Option_t* axis) { _hist->SetTitleSize(size,axis) ; }
void RooPlot::SetXTitle(const char *title) { _hist->SetXTitle(title) ; }
void RooPlot::SetYTitle(const char *title) { _hist->SetYTitle(title) ; }
void RooPlot::SetZTitle(const char *title) { _hist->SetZTitle(title) ; }




//______________________________________________________________________________
void RooPlot::Browse(TBrowser * /*b*/)
{
  // Plot RooPlot when double-clicked in browser
  Draw();
  gPad->Update();
}




//_____________________________________________________________________________
void RooPlot::Streamer(TBuffer &R__b)
{

  // Custom streamer, needed for backward compatibility

  if (R__b.IsReading()) {

    TH1::AddDirectory(kFALSE) ;

    UInt_t R__s, R__c;
    Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
    if (R__v > 1) {
      R__b.ReadClassBuffer(RooPlot::Class(),this,R__v,R__s,R__c);
    } else {
      // backward compatible streamer code here
      // Version 1 of RooPlot was deriving from TH1 and RooPrintable
      // Version 2 derives instead from TNamed and RooPrintable
      _hist = new TH1F();
      _hist->TH1::Streamer(R__b);
      SetName(_hist->GetName());
      SetTitle(_hist->GetTitle());
      RooPrintable::Streamer(R__b);
      _items.Streamer(R__b);
      R__b >> _padFactor;
      R__b >> _plotVarClone;
      R__b >> _plotVarSet;
      R__b >> _normVars;
      R__b >> _normNumEvts;
      R__b >> _normBinWidth;
      R__b >> _defYmin;
      R__b >> _defYmax;
      R__b.CheckByteCount(R__s, R__c, RooPlot::IsA());
    }

    TH1::AddDirectory(kTRUE) ;


  } else {
    R__b.WriteClassBuffer(RooPlot::Class(),this);
  }
}
 RooPlot.cxx:1
 RooPlot.cxx:2
 RooPlot.cxx:3
 RooPlot.cxx:4
 RooPlot.cxx:5
 RooPlot.cxx:6
 RooPlot.cxx:7
 RooPlot.cxx:8
 RooPlot.cxx:9
 RooPlot.cxx:10
 RooPlot.cxx:11
 RooPlot.cxx:12
 RooPlot.cxx:13
 RooPlot.cxx:14
 RooPlot.cxx:15
 RooPlot.cxx:16
 RooPlot.cxx:17
 RooPlot.cxx:18
 RooPlot.cxx:19
 RooPlot.cxx:20
 RooPlot.cxx:21
 RooPlot.cxx:22
 RooPlot.cxx:23
 RooPlot.cxx:24
 RooPlot.cxx:25
 RooPlot.cxx:26
 RooPlot.cxx:27
 RooPlot.cxx:28
 RooPlot.cxx:29
 RooPlot.cxx:30
 RooPlot.cxx:31
 RooPlot.cxx:32
 RooPlot.cxx:33
 RooPlot.cxx:34
 RooPlot.cxx:35
 RooPlot.cxx:36
 RooPlot.cxx:37
 RooPlot.cxx:38
 RooPlot.cxx:39
 RooPlot.cxx:40
 RooPlot.cxx:41
 RooPlot.cxx:42
 RooPlot.cxx:43
 RooPlot.cxx:44
 RooPlot.cxx:45
 RooPlot.cxx:46
 RooPlot.cxx:47
 RooPlot.cxx:48
 RooPlot.cxx:49
 RooPlot.cxx:50
 RooPlot.cxx:51
 RooPlot.cxx:52
 RooPlot.cxx:53
 RooPlot.cxx:54
 RooPlot.cxx:55
 RooPlot.cxx:56
 RooPlot.cxx:57
 RooPlot.cxx:58
 RooPlot.cxx:59
 RooPlot.cxx:60
 RooPlot.cxx:61
 RooPlot.cxx:62
 RooPlot.cxx:63
 RooPlot.cxx:64
 RooPlot.cxx:65
 RooPlot.cxx:66
 RooPlot.cxx:67
 RooPlot.cxx:68
 RooPlot.cxx:69
 RooPlot.cxx:70
 RooPlot.cxx:71
 RooPlot.cxx:72
 RooPlot.cxx:73
 RooPlot.cxx:74
 RooPlot.cxx:75
 RooPlot.cxx:76
 RooPlot.cxx:77
 RooPlot.cxx:78
 RooPlot.cxx:79
 RooPlot.cxx:80
 RooPlot.cxx:81
 RooPlot.cxx:82
 RooPlot.cxx:83
 RooPlot.cxx:84
 RooPlot.cxx:85
 RooPlot.cxx:86
 RooPlot.cxx:87
 RooPlot.cxx:88
 RooPlot.cxx:89
 RooPlot.cxx:90
 RooPlot.cxx:91
 RooPlot.cxx:92
 RooPlot.cxx:93
 RooPlot.cxx:94
 RooPlot.cxx:95
 RooPlot.cxx:96
 RooPlot.cxx:97
 RooPlot.cxx:98
 RooPlot.cxx:99
 RooPlot.cxx:100
 RooPlot.cxx:101
 RooPlot.cxx:102
 RooPlot.cxx:103
 RooPlot.cxx:104
 RooPlot.cxx:105
 RooPlot.cxx:106
 RooPlot.cxx:107
 RooPlot.cxx:108
 RooPlot.cxx:109
 RooPlot.cxx:110
 RooPlot.cxx:111
 RooPlot.cxx:112
 RooPlot.cxx:113
 RooPlot.cxx:114
 RooPlot.cxx:115
 RooPlot.cxx:116
 RooPlot.cxx:117
 RooPlot.cxx:118
 RooPlot.cxx:119
 RooPlot.cxx:120
 RooPlot.cxx:121
 RooPlot.cxx:122
 RooPlot.cxx:123
 RooPlot.cxx:124
 RooPlot.cxx:125
 RooPlot.cxx:126
 RooPlot.cxx:127
 RooPlot.cxx:128
 RooPlot.cxx:129
 RooPlot.cxx:130
 RooPlot.cxx:131
 RooPlot.cxx:132
 RooPlot.cxx:133
 RooPlot.cxx:134
 RooPlot.cxx:135
 RooPlot.cxx:136
 RooPlot.cxx:137
 RooPlot.cxx:138
 RooPlot.cxx:139
 RooPlot.cxx:140
 RooPlot.cxx:141
 RooPlot.cxx:142
 RooPlot.cxx:143
 RooPlot.cxx:144
 RooPlot.cxx:145
 RooPlot.cxx:146
 RooPlot.cxx:147
 RooPlot.cxx:148
 RooPlot.cxx:149
 RooPlot.cxx:150
 RooPlot.cxx:151
 RooPlot.cxx:152
 RooPlot.cxx:153
 RooPlot.cxx:154
 RooPlot.cxx:155
 RooPlot.cxx:156
 RooPlot.cxx:157
 RooPlot.cxx:158
 RooPlot.cxx:159
 RooPlot.cxx:160
 RooPlot.cxx:161
 RooPlot.cxx:162
 RooPlot.cxx:163
 RooPlot.cxx:164
 RooPlot.cxx:165
 RooPlot.cxx:166
 RooPlot.cxx:167
 RooPlot.cxx:168
 RooPlot.cxx:169
 RooPlot.cxx:170
 RooPlot.cxx:171
 RooPlot.cxx:172
 RooPlot.cxx:173
 RooPlot.cxx:174
 RooPlot.cxx:175
 RooPlot.cxx:176
 RooPlot.cxx:177
 RooPlot.cxx:178
 RooPlot.cxx:179
 RooPlot.cxx:180
 RooPlot.cxx:181
 RooPlot.cxx:182
 RooPlot.cxx:183
 RooPlot.cxx:184
 RooPlot.cxx:185
 RooPlot.cxx:186
 RooPlot.cxx:187
 RooPlot.cxx:188
 RooPlot.cxx:189
 RooPlot.cxx:190
 RooPlot.cxx:191
 RooPlot.cxx:192
 RooPlot.cxx:193
 RooPlot.cxx:194
 RooPlot.cxx:195
 RooPlot.cxx:196
 RooPlot.cxx:197
 RooPlot.cxx:198
 RooPlot.cxx:199
 RooPlot.cxx:200
 RooPlot.cxx:201
 RooPlot.cxx:202
 RooPlot.cxx:203
 RooPlot.cxx:204
 RooPlot.cxx:205
 RooPlot.cxx:206
 RooPlot.cxx:207
 RooPlot.cxx:208
 RooPlot.cxx:209
 RooPlot.cxx:210
 RooPlot.cxx:211
 RooPlot.cxx:212
 RooPlot.cxx:213
 RooPlot.cxx:214
 RooPlot.cxx:215
 RooPlot.cxx:216
 RooPlot.cxx:217
 RooPlot.cxx:218
 RooPlot.cxx:219
 RooPlot.cxx:220
 RooPlot.cxx:221
 RooPlot.cxx:222
 RooPlot.cxx:223
 RooPlot.cxx:224
 RooPlot.cxx:225
 RooPlot.cxx:226
 RooPlot.cxx:227
 RooPlot.cxx:228
 RooPlot.cxx:229
 RooPlot.cxx:230
 RooPlot.cxx:231
 RooPlot.cxx:232
 RooPlot.cxx:233
 RooPlot.cxx:234
 RooPlot.cxx:235
 RooPlot.cxx:236
 RooPlot.cxx:237
 RooPlot.cxx:238
 RooPlot.cxx:239
 RooPlot.cxx:240
 RooPlot.cxx:241
 RooPlot.cxx:242
 RooPlot.cxx:243
 RooPlot.cxx:244
 RooPlot.cxx:245
 RooPlot.cxx:246
 RooPlot.cxx:247
 RooPlot.cxx:248
 RooPlot.cxx:249
 RooPlot.cxx:250
 RooPlot.cxx:251
 RooPlot.cxx:252
 RooPlot.cxx:253
 RooPlot.cxx:254
 RooPlot.cxx:255
 RooPlot.cxx:256
 RooPlot.cxx:257
 RooPlot.cxx:258
 RooPlot.cxx:259
 RooPlot.cxx:260
 RooPlot.cxx:261
 RooPlot.cxx:262
 RooPlot.cxx:263
 RooPlot.cxx:264
 RooPlot.cxx:265
 RooPlot.cxx:266
 RooPlot.cxx:267
 RooPlot.cxx:268
 RooPlot.cxx:269
 RooPlot.cxx:270
 RooPlot.cxx:271
 RooPlot.cxx:272
 RooPlot.cxx:273
 RooPlot.cxx:274
 RooPlot.cxx:275
 RooPlot.cxx:276
 RooPlot.cxx:277
 RooPlot.cxx:278
 RooPlot.cxx:279
 RooPlot.cxx:280
 RooPlot.cxx:281
 RooPlot.cxx:282
 RooPlot.cxx:283
 RooPlot.cxx:284
 RooPlot.cxx:285
 RooPlot.cxx:286
 RooPlot.cxx:287
 RooPlot.cxx:288
 RooPlot.cxx:289
 RooPlot.cxx:290
 RooPlot.cxx:291
 RooPlot.cxx:292
 RooPlot.cxx:293
 RooPlot.cxx:294
 RooPlot.cxx:295
 RooPlot.cxx:296
 RooPlot.cxx:297
 RooPlot.cxx:298
 RooPlot.cxx:299
 RooPlot.cxx:300
 RooPlot.cxx:301
 RooPlot.cxx:302
 RooPlot.cxx:303
 RooPlot.cxx:304
 RooPlot.cxx:305
 RooPlot.cxx:306
 RooPlot.cxx:307
 RooPlot.cxx:308
 RooPlot.cxx:309
 RooPlot.cxx:310
 RooPlot.cxx:311
 RooPlot.cxx:312
 RooPlot.cxx:313
 RooPlot.cxx:314
 RooPlot.cxx:315
 RooPlot.cxx:316
 RooPlot.cxx:317
 RooPlot.cxx:318
 RooPlot.cxx:319
 RooPlot.cxx:320
 RooPlot.cxx:321
 RooPlot.cxx:322
 RooPlot.cxx:323
 RooPlot.cxx:324
 RooPlot.cxx:325
 RooPlot.cxx:326
 RooPlot.cxx:327
 RooPlot.cxx:328
 RooPlot.cxx:329
 RooPlot.cxx:330
 RooPlot.cxx:331
 RooPlot.cxx:332
 RooPlot.cxx:333
 RooPlot.cxx:334
 RooPlot.cxx:335
 RooPlot.cxx:336
 RooPlot.cxx:337
 RooPlot.cxx:338
 RooPlot.cxx:339
 RooPlot.cxx:340
 RooPlot.cxx:341
 RooPlot.cxx:342
 RooPlot.cxx:343
 RooPlot.cxx:344
 RooPlot.cxx:345
 RooPlot.cxx:346
 RooPlot.cxx:347
 RooPlot.cxx:348
 RooPlot.cxx:349
 RooPlot.cxx:350
 RooPlot.cxx:351
 RooPlot.cxx:352
 RooPlot.cxx:353
 RooPlot.cxx:354
 RooPlot.cxx:355
 RooPlot.cxx:356
 RooPlot.cxx:357
 RooPlot.cxx:358
 RooPlot.cxx:359
 RooPlot.cxx:360
 RooPlot.cxx:361
 RooPlot.cxx:362
 RooPlot.cxx:363
 RooPlot.cxx:364
 RooPlot.cxx:365
 RooPlot.cxx:366
 RooPlot.cxx:367
 RooPlot.cxx:368
 RooPlot.cxx:369
 RooPlot.cxx:370
 RooPlot.cxx:371
 RooPlot.cxx:372
 RooPlot.cxx:373
 RooPlot.cxx:374
 RooPlot.cxx:375
 RooPlot.cxx:376
 RooPlot.cxx:377
 RooPlot.cxx:378
 RooPlot.cxx:379
 RooPlot.cxx:380
 RooPlot.cxx:381
 RooPlot.cxx:382
 RooPlot.cxx:383
 RooPlot.cxx:384
 RooPlot.cxx:385
 RooPlot.cxx:386
 RooPlot.cxx:387
 RooPlot.cxx:388
 RooPlot.cxx:389
 RooPlot.cxx:390
 RooPlot.cxx:391
 RooPlot.cxx:392
 RooPlot.cxx:393
 RooPlot.cxx:394
 RooPlot.cxx:395
 RooPlot.cxx:396
 RooPlot.cxx:397
 RooPlot.cxx:398
 RooPlot.cxx:399
 RooPlot.cxx:400
 RooPlot.cxx:401
 RooPlot.cxx:402
 RooPlot.cxx:403
 RooPlot.cxx:404
 RooPlot.cxx:405
 RooPlot.cxx:406
 RooPlot.cxx:407
 RooPlot.cxx:408
 RooPlot.cxx:409
 RooPlot.cxx:410
 RooPlot.cxx:411
 RooPlot.cxx:412
 RooPlot.cxx:413
 RooPlot.cxx:414
 RooPlot.cxx:415
 RooPlot.cxx:416
 RooPlot.cxx:417
 RooPlot.cxx:418
 RooPlot.cxx:419
 RooPlot.cxx:420
 RooPlot.cxx:421
 RooPlot.cxx:422
 RooPlot.cxx:423
 RooPlot.cxx:424
 RooPlot.cxx:425
 RooPlot.cxx:426
 RooPlot.cxx:427
 RooPlot.cxx:428
 RooPlot.cxx:429
 RooPlot.cxx:430
 RooPlot.cxx:431
 RooPlot.cxx:432
 RooPlot.cxx:433
 RooPlot.cxx:434
 RooPlot.cxx:435
 RooPlot.cxx:436
 RooPlot.cxx:437
 RooPlot.cxx:438
 RooPlot.cxx:439
 RooPlot.cxx:440
 RooPlot.cxx:441
 RooPlot.cxx:442
 RooPlot.cxx:443
 RooPlot.cxx:444
 RooPlot.cxx:445
 RooPlot.cxx:446
 RooPlot.cxx:447
 RooPlot.cxx:448
 RooPlot.cxx:449
 RooPlot.cxx:450
 RooPlot.cxx:451
 RooPlot.cxx:452
 RooPlot.cxx:453
 RooPlot.cxx:454
 RooPlot.cxx:455
 RooPlot.cxx:456
 RooPlot.cxx:457
 RooPlot.cxx:458
 RooPlot.cxx:459
 RooPlot.cxx:460
 RooPlot.cxx:461
 RooPlot.cxx:462
 RooPlot.cxx:463
 RooPlot.cxx:464
 RooPlot.cxx:465
 RooPlot.cxx:466
 RooPlot.cxx:467
 RooPlot.cxx:468
 RooPlot.cxx:469
 RooPlot.cxx:470
 RooPlot.cxx:471
 RooPlot.cxx:472
 RooPlot.cxx:473
 RooPlot.cxx:474
 RooPlot.cxx:475
 RooPlot.cxx:476
 RooPlot.cxx:477
 RooPlot.cxx:478
 RooPlot.cxx:479
 RooPlot.cxx:480
 RooPlot.cxx:481
 RooPlot.cxx:482
 RooPlot.cxx:483
 RooPlot.cxx:484
 RooPlot.cxx:485
 RooPlot.cxx:486
 RooPlot.cxx:487
 RooPlot.cxx:488
 RooPlot.cxx:489
 RooPlot.cxx:490
 RooPlot.cxx:491
 RooPlot.cxx:492
 RooPlot.cxx:493
 RooPlot.cxx:494
 RooPlot.cxx:495
 RooPlot.cxx:496
 RooPlot.cxx:497
 RooPlot.cxx:498
 RooPlot.cxx:499
 RooPlot.cxx:500
 RooPlot.cxx:501
 RooPlot.cxx:502
 RooPlot.cxx:503
 RooPlot.cxx:504
 RooPlot.cxx:505
 RooPlot.cxx:506
 RooPlot.cxx:507
 RooPlot.cxx:508
 RooPlot.cxx:509
 RooPlot.cxx:510
 RooPlot.cxx:511
 RooPlot.cxx:512
 RooPlot.cxx:513
 RooPlot.cxx:514
 RooPlot.cxx:515
 RooPlot.cxx:516
 RooPlot.cxx:517
 RooPlot.cxx:518
 RooPlot.cxx:519
 RooPlot.cxx:520
 RooPlot.cxx:521
 RooPlot.cxx:522
 RooPlot.cxx:523
 RooPlot.cxx:524
 RooPlot.cxx:525
 RooPlot.cxx:526
 RooPlot.cxx:527
 RooPlot.cxx:528
 RooPlot.cxx:529
 RooPlot.cxx:530
 RooPlot.cxx:531
 RooPlot.cxx:532
 RooPlot.cxx:533
 RooPlot.cxx:534
 RooPlot.cxx:535
 RooPlot.cxx:536
 RooPlot.cxx:537
 RooPlot.cxx:538
 RooPlot.cxx:539
 RooPlot.cxx:540
 RooPlot.cxx:541
 RooPlot.cxx:542
 RooPlot.cxx:543
 RooPlot.cxx:544
 RooPlot.cxx:545
 RooPlot.cxx:546
 RooPlot.cxx:547
 RooPlot.cxx:548
 RooPlot.cxx:549
 RooPlot.cxx:550
 RooPlot.cxx:551
 RooPlot.cxx:552
 RooPlot.cxx:553
 RooPlot.cxx:554
 RooPlot.cxx:555
 RooPlot.cxx:556
 RooPlot.cxx:557
 RooPlot.cxx:558
 RooPlot.cxx:559
 RooPlot.cxx:560
 RooPlot.cxx:561
 RooPlot.cxx:562
 RooPlot.cxx:563
 RooPlot.cxx:564
 RooPlot.cxx:565
 RooPlot.cxx:566
 RooPlot.cxx:567
 RooPlot.cxx:568
 RooPlot.cxx:569
 RooPlot.cxx:570
 RooPlot.cxx:571
 RooPlot.cxx:572
 RooPlot.cxx:573
 RooPlot.cxx:574
 RooPlot.cxx:575
 RooPlot.cxx:576
 RooPlot.cxx:577
 RooPlot.cxx:578
 RooPlot.cxx:579
 RooPlot.cxx:580
 RooPlot.cxx:581
 RooPlot.cxx:582
 RooPlot.cxx:583
 RooPlot.cxx:584
 RooPlot.cxx:585
 RooPlot.cxx:586
 RooPlot.cxx:587
 RooPlot.cxx:588
 RooPlot.cxx:589
 RooPlot.cxx:590
 RooPlot.cxx:591
 RooPlot.cxx:592
 RooPlot.cxx:593
 RooPlot.cxx:594
 RooPlot.cxx:595
 RooPlot.cxx:596
 RooPlot.cxx:597
 RooPlot.cxx:598
 RooPlot.cxx:599
 RooPlot.cxx:600
 RooPlot.cxx:601
 RooPlot.cxx:602
 RooPlot.cxx:603
 RooPlot.cxx:604
 RooPlot.cxx:605
 RooPlot.cxx:606
 RooPlot.cxx:607
 RooPlot.cxx:608
 RooPlot.cxx:609
 RooPlot.cxx:610
 RooPlot.cxx:611
 RooPlot.cxx:612
 RooPlot.cxx:613
 RooPlot.cxx:614
 RooPlot.cxx:615
 RooPlot.cxx:616
 RooPlot.cxx:617
 RooPlot.cxx:618
 RooPlot.cxx:619
 RooPlot.cxx:620
 RooPlot.cxx:621
 RooPlot.cxx:622
 RooPlot.cxx:623
 RooPlot.cxx:624
 RooPlot.cxx:625
 RooPlot.cxx:626
 RooPlot.cxx:627
 RooPlot.cxx:628
 RooPlot.cxx:629
 RooPlot.cxx:630
 RooPlot.cxx:631
 RooPlot.cxx:632
 RooPlot.cxx:633
 RooPlot.cxx:634
 RooPlot.cxx:635
 RooPlot.cxx:636
 RooPlot.cxx:637
 RooPlot.cxx:638
 RooPlot.cxx:639
 RooPlot.cxx:640
 RooPlot.cxx:641
 RooPlot.cxx:642
 RooPlot.cxx:643
 RooPlot.cxx:644
 RooPlot.cxx:645
 RooPlot.cxx:646
 RooPlot.cxx:647
 RooPlot.cxx:648
 RooPlot.cxx:649
 RooPlot.cxx:650
 RooPlot.cxx:651
 RooPlot.cxx:652
 RooPlot.cxx:653
 RooPlot.cxx:654
 RooPlot.cxx:655
 RooPlot.cxx:656
 RooPlot.cxx:657
 RooPlot.cxx:658
 RooPlot.cxx:659
 RooPlot.cxx:660
 RooPlot.cxx:661
 RooPlot.cxx:662
 RooPlot.cxx:663
 RooPlot.cxx:664
 RooPlot.cxx:665
 RooPlot.cxx:666
 RooPlot.cxx:667
 RooPlot.cxx:668
 RooPlot.cxx:669
 RooPlot.cxx:670
 RooPlot.cxx:671
 RooPlot.cxx:672
 RooPlot.cxx:673
 RooPlot.cxx:674
 RooPlot.cxx:675
 RooPlot.cxx:676
 RooPlot.cxx:677
 RooPlot.cxx:678
 RooPlot.cxx:679
 RooPlot.cxx:680
 RooPlot.cxx:681
 RooPlot.cxx:682
 RooPlot.cxx:683
 RooPlot.cxx:684
 RooPlot.cxx:685
 RooPlot.cxx:686
 RooPlot.cxx:687
 RooPlot.cxx:688
 RooPlot.cxx:689
 RooPlot.cxx:690
 RooPlot.cxx:691
 RooPlot.cxx:692
 RooPlot.cxx:693
 RooPlot.cxx:694
 RooPlot.cxx:695
 RooPlot.cxx:696
 RooPlot.cxx:697
 RooPlot.cxx:698
 RooPlot.cxx:699
 RooPlot.cxx:700
 RooPlot.cxx:701
 RooPlot.cxx:702
 RooPlot.cxx:703
 RooPlot.cxx:704
 RooPlot.cxx:705
 RooPlot.cxx:706
 RooPlot.cxx:707
 RooPlot.cxx:708
 RooPlot.cxx:709
 RooPlot.cxx:710
 RooPlot.cxx:711
 RooPlot.cxx:712
 RooPlot.cxx:713
 RooPlot.cxx:714
 RooPlot.cxx:715
 RooPlot.cxx:716
 RooPlot.cxx:717
 RooPlot.cxx:718
 RooPlot.cxx:719
 RooPlot.cxx:720
 RooPlot.cxx:721
 RooPlot.cxx:722
 RooPlot.cxx:723
 RooPlot.cxx:724
 RooPlot.cxx:725
 RooPlot.cxx:726
 RooPlot.cxx:727
 RooPlot.cxx:728
 RooPlot.cxx:729
 RooPlot.cxx:730
 RooPlot.cxx:731
 RooPlot.cxx:732
 RooPlot.cxx:733
 RooPlot.cxx:734
 RooPlot.cxx:735
 RooPlot.cxx:736
 RooPlot.cxx:737
 RooPlot.cxx:738
 RooPlot.cxx:739
 RooPlot.cxx:740
 RooPlot.cxx:741
 RooPlot.cxx:742
 RooPlot.cxx:743
 RooPlot.cxx:744
 RooPlot.cxx:745
 RooPlot.cxx:746
 RooPlot.cxx:747
 RooPlot.cxx:748
 RooPlot.cxx:749
 RooPlot.cxx:750
 RooPlot.cxx:751
 RooPlot.cxx:752
 RooPlot.cxx:753
 RooPlot.cxx:754
 RooPlot.cxx:755
 RooPlot.cxx:756
 RooPlot.cxx:757
 RooPlot.cxx:758
 RooPlot.cxx:759
 RooPlot.cxx:760
 RooPlot.cxx:761
 RooPlot.cxx:762
 RooPlot.cxx:763
 RooPlot.cxx:764
 RooPlot.cxx:765
 RooPlot.cxx:766
 RooPlot.cxx:767
 RooPlot.cxx:768
 RooPlot.cxx:769
 RooPlot.cxx:770
 RooPlot.cxx:771
 RooPlot.cxx:772
 RooPlot.cxx:773
 RooPlot.cxx:774
 RooPlot.cxx:775
 RooPlot.cxx:776
 RooPlot.cxx:777
 RooPlot.cxx:778
 RooPlot.cxx:779
 RooPlot.cxx:780
 RooPlot.cxx:781
 RooPlot.cxx:782
 RooPlot.cxx:783
 RooPlot.cxx:784
 RooPlot.cxx:785
 RooPlot.cxx:786
 RooPlot.cxx:787
 RooPlot.cxx:788
 RooPlot.cxx:789
 RooPlot.cxx:790
 RooPlot.cxx:791
 RooPlot.cxx:792
 RooPlot.cxx:793
 RooPlot.cxx:794
 RooPlot.cxx:795
 RooPlot.cxx:796
 RooPlot.cxx:797
 RooPlot.cxx:798
 RooPlot.cxx:799
 RooPlot.cxx:800
 RooPlot.cxx:801
 RooPlot.cxx:802
 RooPlot.cxx:803
 RooPlot.cxx:804
 RooPlot.cxx:805
 RooPlot.cxx:806
 RooPlot.cxx:807
 RooPlot.cxx:808
 RooPlot.cxx:809
 RooPlot.cxx:810
 RooPlot.cxx:811
 RooPlot.cxx:812
 RooPlot.cxx:813
 RooPlot.cxx:814
 RooPlot.cxx:815
 RooPlot.cxx:816
 RooPlot.cxx:817
 RooPlot.cxx:818
 RooPlot.cxx:819
 RooPlot.cxx:820
 RooPlot.cxx:821
 RooPlot.cxx:822
 RooPlot.cxx:823
 RooPlot.cxx:824
 RooPlot.cxx:825
 RooPlot.cxx:826
 RooPlot.cxx:827
 RooPlot.cxx:828
 RooPlot.cxx:829
 RooPlot.cxx:830
 RooPlot.cxx:831
 RooPlot.cxx:832
 RooPlot.cxx:833
 RooPlot.cxx:834
 RooPlot.cxx:835
 RooPlot.cxx:836
 RooPlot.cxx:837
 RooPlot.cxx:838
 RooPlot.cxx:839
 RooPlot.cxx:840
 RooPlot.cxx:841
 RooPlot.cxx:842
 RooPlot.cxx:843
 RooPlot.cxx:844
 RooPlot.cxx:845
 RooPlot.cxx:846
 RooPlot.cxx:847
 RooPlot.cxx:848
 RooPlot.cxx:849
 RooPlot.cxx:850
 RooPlot.cxx:851
 RooPlot.cxx:852
 RooPlot.cxx:853
 RooPlot.cxx:854
 RooPlot.cxx:855
 RooPlot.cxx:856
 RooPlot.cxx:857
 RooPlot.cxx:858
 RooPlot.cxx:859
 RooPlot.cxx:860
 RooPlot.cxx:861
 RooPlot.cxx:862
 RooPlot.cxx:863
 RooPlot.cxx:864
 RooPlot.cxx:865
 RooPlot.cxx:866
 RooPlot.cxx:867
 RooPlot.cxx:868
 RooPlot.cxx:869
 RooPlot.cxx:870
 RooPlot.cxx:871
 RooPlot.cxx:872
 RooPlot.cxx:873
 RooPlot.cxx:874
 RooPlot.cxx:875
 RooPlot.cxx:876
 RooPlot.cxx:877
 RooPlot.cxx:878
 RooPlot.cxx:879
 RooPlot.cxx:880
 RooPlot.cxx:881
 RooPlot.cxx:882
 RooPlot.cxx:883
 RooPlot.cxx:884
 RooPlot.cxx:885
 RooPlot.cxx:886
 RooPlot.cxx:887
 RooPlot.cxx:888
 RooPlot.cxx:889
 RooPlot.cxx:890
 RooPlot.cxx:891
 RooPlot.cxx:892
 RooPlot.cxx:893
 RooPlot.cxx:894
 RooPlot.cxx:895
 RooPlot.cxx:896
 RooPlot.cxx:897
 RooPlot.cxx:898
 RooPlot.cxx:899
 RooPlot.cxx:900
 RooPlot.cxx:901
 RooPlot.cxx:902
 RooPlot.cxx:903
 RooPlot.cxx:904
 RooPlot.cxx:905
 RooPlot.cxx:906
 RooPlot.cxx:907
 RooPlot.cxx:908
 RooPlot.cxx:909
 RooPlot.cxx:910
 RooPlot.cxx:911
 RooPlot.cxx:912
 RooPlot.cxx:913
 RooPlot.cxx:914
 RooPlot.cxx:915
 RooPlot.cxx:916
 RooPlot.cxx:917
 RooPlot.cxx:918
 RooPlot.cxx:919
 RooPlot.cxx:920
 RooPlot.cxx:921
 RooPlot.cxx:922
 RooPlot.cxx:923
 RooPlot.cxx:924
 RooPlot.cxx:925
 RooPlot.cxx:926
 RooPlot.cxx:927
 RooPlot.cxx:928
 RooPlot.cxx:929
 RooPlot.cxx:930
 RooPlot.cxx:931
 RooPlot.cxx:932
 RooPlot.cxx:933
 RooPlot.cxx:934
 RooPlot.cxx:935
 RooPlot.cxx:936
 RooPlot.cxx:937
 RooPlot.cxx:938
 RooPlot.cxx:939
 RooPlot.cxx:940
 RooPlot.cxx:941
 RooPlot.cxx:942
 RooPlot.cxx:943
 RooPlot.cxx:944
 RooPlot.cxx:945
 RooPlot.cxx:946
 RooPlot.cxx:947
 RooPlot.cxx:948
 RooPlot.cxx:949
 RooPlot.cxx:950
 RooPlot.cxx:951
 RooPlot.cxx:952
 RooPlot.cxx:953
 RooPlot.cxx:954
 RooPlot.cxx:955
 RooPlot.cxx:956
 RooPlot.cxx:957
 RooPlot.cxx:958
 RooPlot.cxx:959
 RooPlot.cxx:960
 RooPlot.cxx:961
 RooPlot.cxx:962
 RooPlot.cxx:963
 RooPlot.cxx:964
 RooPlot.cxx:965
 RooPlot.cxx:966
 RooPlot.cxx:967
 RooPlot.cxx:968
 RooPlot.cxx:969
 RooPlot.cxx:970
 RooPlot.cxx:971
 RooPlot.cxx:972
 RooPlot.cxx:973
 RooPlot.cxx:974
 RooPlot.cxx:975
 RooPlot.cxx:976
 RooPlot.cxx:977
 RooPlot.cxx:978
 RooPlot.cxx:979
 RooPlot.cxx:980
 RooPlot.cxx:981
 RooPlot.cxx:982
 RooPlot.cxx:983
 RooPlot.cxx:984
 RooPlot.cxx:985
 RooPlot.cxx:986
 RooPlot.cxx:987
 RooPlot.cxx:988
 RooPlot.cxx:989
 RooPlot.cxx:990
 RooPlot.cxx:991
 RooPlot.cxx:992
 RooPlot.cxx:993
 RooPlot.cxx:994
 RooPlot.cxx:995
 RooPlot.cxx:996
 RooPlot.cxx:997
 RooPlot.cxx:998
 RooPlot.cxx:999
 RooPlot.cxx:1000
 RooPlot.cxx:1001
 RooPlot.cxx:1002
 RooPlot.cxx:1003
 RooPlot.cxx:1004
 RooPlot.cxx:1005
 RooPlot.cxx:1006
 RooPlot.cxx:1007
 RooPlot.cxx:1008
 RooPlot.cxx:1009
 RooPlot.cxx:1010
 RooPlot.cxx:1011
 RooPlot.cxx:1012
 RooPlot.cxx:1013
 RooPlot.cxx:1014
 RooPlot.cxx:1015
 RooPlot.cxx:1016
 RooPlot.cxx:1017
 RooPlot.cxx:1018
 RooPlot.cxx:1019
 RooPlot.cxx:1020
 RooPlot.cxx:1021
 RooPlot.cxx:1022
 RooPlot.cxx:1023
 RooPlot.cxx:1024
 RooPlot.cxx:1025
 RooPlot.cxx:1026
 RooPlot.cxx:1027
 RooPlot.cxx:1028
 RooPlot.cxx:1029
 RooPlot.cxx:1030
 RooPlot.cxx:1031
 RooPlot.cxx:1032
 RooPlot.cxx:1033
 RooPlot.cxx:1034
 RooPlot.cxx:1035
 RooPlot.cxx:1036
 RooPlot.cxx:1037
 RooPlot.cxx:1038
 RooPlot.cxx:1039
 RooPlot.cxx:1040
 RooPlot.cxx:1041
 RooPlot.cxx:1042
 RooPlot.cxx:1043
 RooPlot.cxx:1044
 RooPlot.cxx:1045
 RooPlot.cxx:1046
 RooPlot.cxx:1047
 RooPlot.cxx:1048
 RooPlot.cxx:1049
 RooPlot.cxx:1050
 RooPlot.cxx:1051
 RooPlot.cxx:1052
 RooPlot.cxx:1053
 RooPlot.cxx:1054
 RooPlot.cxx:1055
 RooPlot.cxx:1056
 RooPlot.cxx:1057
 RooPlot.cxx:1058
 RooPlot.cxx:1059
 RooPlot.cxx:1060
 RooPlot.cxx:1061
 RooPlot.cxx:1062
 RooPlot.cxx:1063
 RooPlot.cxx:1064
 RooPlot.cxx:1065
 RooPlot.cxx:1066
 RooPlot.cxx:1067
 RooPlot.cxx:1068
 RooPlot.cxx:1069
 RooPlot.cxx:1070
 RooPlot.cxx:1071
 RooPlot.cxx:1072
 RooPlot.cxx:1073
 RooPlot.cxx:1074
 RooPlot.cxx:1075
 RooPlot.cxx:1076
 RooPlot.cxx:1077
 RooPlot.cxx:1078
 RooPlot.cxx:1079
 RooPlot.cxx:1080
 RooPlot.cxx:1081
 RooPlot.cxx:1082
 RooPlot.cxx:1083
 RooPlot.cxx:1084
 RooPlot.cxx:1085
 RooPlot.cxx:1086
 RooPlot.cxx:1087
 RooPlot.cxx:1088
 RooPlot.cxx:1089
 RooPlot.cxx:1090
 RooPlot.cxx:1091
 RooPlot.cxx:1092
 RooPlot.cxx:1093
 RooPlot.cxx:1094
 RooPlot.cxx:1095
 RooPlot.cxx:1096
 RooPlot.cxx:1097
 RooPlot.cxx:1098
 RooPlot.cxx:1099
 RooPlot.cxx:1100
 RooPlot.cxx:1101
 RooPlot.cxx:1102
 RooPlot.cxx:1103
 RooPlot.cxx:1104
 RooPlot.cxx:1105
 RooPlot.cxx:1106
 RooPlot.cxx:1107
 RooPlot.cxx:1108
 RooPlot.cxx:1109
 RooPlot.cxx:1110
 RooPlot.cxx:1111
 RooPlot.cxx:1112
 RooPlot.cxx:1113
 RooPlot.cxx:1114
 RooPlot.cxx:1115
 RooPlot.cxx:1116
 RooPlot.cxx:1117
 RooPlot.cxx:1118
 RooPlot.cxx:1119
 RooPlot.cxx:1120
 RooPlot.cxx:1121
 RooPlot.cxx:1122
 RooPlot.cxx:1123
 RooPlot.cxx:1124
 RooPlot.cxx:1125
 RooPlot.cxx:1126
 RooPlot.cxx:1127
 RooPlot.cxx:1128
 RooPlot.cxx:1129
 RooPlot.cxx:1130
 RooPlot.cxx:1131
 RooPlot.cxx:1132
 RooPlot.cxx:1133
 RooPlot.cxx:1134
 RooPlot.cxx:1135
 RooPlot.cxx:1136
 RooPlot.cxx:1137
 RooPlot.cxx:1138
 RooPlot.cxx:1139
 RooPlot.cxx:1140
 RooPlot.cxx:1141
 RooPlot.cxx:1142
 RooPlot.cxx:1143
 RooPlot.cxx:1144
 RooPlot.cxx:1145
 RooPlot.cxx:1146
 RooPlot.cxx:1147
 RooPlot.cxx:1148
 RooPlot.cxx:1149
 RooPlot.cxx:1150
 RooPlot.cxx:1151
 RooPlot.cxx:1152
 RooPlot.cxx:1153
 RooPlot.cxx:1154
 RooPlot.cxx:1155
 RooPlot.cxx:1156
 RooPlot.cxx:1157
 RooPlot.cxx:1158
 RooPlot.cxx:1159
 RooPlot.cxx:1160
 RooPlot.cxx:1161
 RooPlot.cxx:1162
 RooPlot.cxx:1163
 RooPlot.cxx:1164
 RooPlot.cxx:1165
 RooPlot.cxx:1166
 RooPlot.cxx:1167
 RooPlot.cxx:1168
 RooPlot.cxx:1169
 RooPlot.cxx:1170
 RooPlot.cxx:1171
 RooPlot.cxx:1172
 RooPlot.cxx:1173
 RooPlot.cxx:1174
 RooPlot.cxx:1175
 RooPlot.cxx:1176
 RooPlot.cxx:1177
 RooPlot.cxx:1178
 RooPlot.cxx:1179
 RooPlot.cxx:1180
 RooPlot.cxx:1181
 RooPlot.cxx:1182
 RooPlot.cxx:1183
 RooPlot.cxx:1184
 RooPlot.cxx:1185
 RooPlot.cxx:1186
 RooPlot.cxx:1187
 RooPlot.cxx:1188
 RooPlot.cxx:1189
 RooPlot.cxx:1190
 RooPlot.cxx:1191
 RooPlot.cxx:1192
 RooPlot.cxx:1193
 RooPlot.cxx:1194
 RooPlot.cxx:1195
 RooPlot.cxx:1196
 RooPlot.cxx:1197