/////////////////////////////////////////////////////////////////////////
//
// 'ORGANIZATION AND SIMULTANEOUS FITS' RooFit tutorial macro #503
// 
// Reading and using a workspace
//
// --> The input file for this macro is generated by rf502_wspaceread.C
// 
//
// 07/2008 - Wouter Verkerke 
//
/////////////////////////////////////////////////////////////////////////

#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "RooConstVar.h"
#include "RooChebychev.h"
#include "RooAddPdf.h"
#include "RooWorkspace.h"
#include "RooPlot.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "TFile.h"
#include "TH1.h"
using namespace RooFit ;


void rf503_wspaceread()
{
  // R e a d   w o r k s p a c e   f r o m   f i l e
  // -----------------------------------------------

  // Open input file with workspace (generated by rf14_wspacewrite)
  TFile *f = new TFile("rf502_workspace.root") ;

  // Retrieve workspace from file
  RooWorkspace* w = (RooWorkspace*) f->Get("w") ;



  // R e t r i e v e   p d f ,   d a t a   f r o m   w o r k s p a c e
  // -----------------------------------------------------------------

  // Retrieve x,model and data from workspace
  RooRealVar* x = w->var("x") ;
  RooAbsPdf* model = w->pdf("model") ;
  RooAbsData* data = w->data("modelData") ;

  // Print structure of composite p.d.f.
  model->Print("t") ;


  // F i t   m o d e l   t o   d a t a ,   p l o t   m o d e l 
  // ---------------------------------------------------------

  // Fit model to data
  model->fitTo(*data) ;
  
  // Plot data and PDF overlaid
  RooPlot* xframe = x->frame(Title("Model and data read from workspace")) ;
  data->plotOn(xframe) ;
  model->plotOn(xframe) ;

  // Overlay the background component of model with a dashed line
  model->plotOn(xframe,Components("bkg"),LineStyle(kDashed)) ;

  // Overlay the background+sig2 components of model with a dotted line
  model->plotOn(xframe,Components("bkg,sig2"),LineStyle(kDotted)) ;



  // Draw the frame on the canvas
  new TCanvas("rf503_wspaceread","rf503_wspaceread",600,600) ;
  gPad->SetLeftMargin(0.15) ; xframe->GetYaxis()->SetTitleOffset(1.4) ; xframe->Draw() ;


}
