From $ROOTSYS/tutorials/splot/TestSPlot.C

#include "TSPlot.h"
#include "TTree.h"
#include "TH1.h"
#include "TCanvas.h"
#include "TFile.h"
#include "TPaveLabel.h"
#include "TPad.h"
#include "TPaveText.h"
#include "Riostream.h"

void TestSPlot()
{
//This tutorial illustrates the use of class TSPlot and of the sPlots method
//
//It is an example of analysis of charmless B decays, performed for BABAR.
//One is dealing with a data sample in which two species are present:
//the first is termed signal and the second background. 
//A maximum Likelihood fit is performed to obtain the two yields N1 and N2
//The fit relies on two discriminating variables collectively denoted y, 
//which are chosen within three possible variables denoted Mes, dE and F.
//The variable which is not incorporated in y, is used as the control variable x.
//The distributions of discriminating variables and more details about the method 
//can be found in the TSPlot class description
//
// NOTE: This script requires a data file "TestSPlot_toyMC.dat".
//       This data file is not distributed in the standard ROOT binary tar file.
//       You can download it from ftp://root.cern.ch/root/TestSPlot_toyMC.dat
//
//Authors: Anna Kreshuk, Muriel Pivc

   TString dir = gSystem->UnixPathName(__FILE__);
   dir.ReplaceAll("TestSPlot.C","");
   dir.ReplaceAll("/./","/");
   TString dataFile = Form("%sTestSPlot_toyMC.dat",dir.Data());
   
   //Read the data and initialize a TSPlot object
   TTree *datatree = new TTree("datatree", "datatree");
   datatree->ReadFile(dataFile, 
                      "Mes/D:dE/D:F/D:MesSignal/D:MesBackground/D:dESignal/D:dEBackground/D:FSignal/D:FBackground/D",' ');

   TSPlot *splot = new TSPlot(0, 3, 5420, 2, datatree);

   //Set the selection for data tree
   //Note the order of the variables: 
   //first the control variables (not presented in this example),
   //then the 3 discriminating variables, then their probability distribution 
   //functions for the first species(signal) and then their pdfs for the 
   //second species(background)
   splot->SetTreeSelection(
      "Mes:dE:F:MesSignal:dESignal:FSignal:MesBackground:"
      "dEBackground:FBackground");

   //Set the initial estimates of the number of events in each species 
   //- used as initial parameter values for the Minuit likelihood fit
   Int_t ne[2];
   ne[0]=500; ne[1]=5000;
   splot->SetInitialNumbersOfSpecies(ne);

   //Compute the weights
   splot->MakeSPlot();

   //Fill the sPlots
   splot->FillSWeightsHists(25);

   //Now let's look at the sPlots
   //The first two histograms are sPlots for the Mes variable signal and 
   //background. dE and F were chosen as discriminating variables to determine 
   //N1 and N2, through a maximum Likelihood fit, and thus the sPlots for the 
   //control variable Mes, unknown to the fit, was contructed.
   //One can see that the sPlot for signal reproduces the PDF correctly, 
   //even when the latter vanishes.
   //
   //The lower two histograms are sPlots for the F variables signal and 
   //background. dE and Mes were chosen as discriminating variables to 
   //determine N1 and N2, through a maximum Likelihood fit, and thus the 
   //sPlots for the control variable F, unknown to the fit, was contructed.

   TCanvas *myc = new TCanvas("myc", 
   "sPlots of Mes and F signal and background", 800, 600);
   myc->SetFillColor(40);

   TPaveText *pt = new TPaveText(0.02,0.85,0.98,0.98);
   pt->SetFillColor(18);
   pt->SetTextFont(20);
   pt->SetTextColor(4);
   pt->AddText("sPlots of Mes and F signal and background,");
   pt->AddText("obtained by the tutorial TestSPlot.C on BABAR MC "
               "data (sPlot_toyMC.fit)");
   TText *t3=pt->AddText(
      "M. Pivk and F. R. Le Diberder, Nucl.Inst.Meth.A, physics/0402083");
   t3->SetTextColor(1);
   t3->SetTextFont(30);
   pt->Draw();

   TPad* pad1 = new TPad("pad1","Mes signal",0.02,0.43,0.48,0.83,33);
   TPad* pad2 = new TPad("pad2","Mes background",0.5,0.43,0.98,0.83,33);
   TPad* pad3 = new TPad("pad3", "F signal", 0.02, 0.02, 0.48, 0.41,33);
   TPad* pad4 = new TPad("pad4", "F background", 0.5, 0.02, 0.98, 0.41,33);
   pad1->Draw();
   pad2->Draw();
   pad3->Draw();
   pad4->Draw();

   pad1->cd();
   pad1->SetGrid();
   TH1D *sweight00 = splot->GetSWeightsHist(-1, 0, 0);
   sweight00->SetTitle("Mes signal");
   sweight00->SetStats(kFALSE);
   sweight00->Draw("e");
   sweight00->SetMarkerStyle(21);
   sweight00->SetMarkerSize(0.7);
   sweight00->SetMarkerColor(2);
   sweight00->SetLineColor(2);
   sweight00->GetXaxis()->SetLabelSize(0.05);
   sweight00->GetYaxis()->SetLabelSize(0.06);
   sweight00->GetXaxis()->SetLabelOffset(0.02);

   pad2->cd();
   pad2->SetGrid();
   TH1D *sweight10 = splot->GetSWeightsHist(-1, 1, 0);
   sweight10->SetTitle("Mes background");
   sweight10->SetStats(kFALSE);
   sweight10->Draw("e");
   sweight10->SetMarkerStyle(21);
   sweight10->SetMarkerSize(0.7);
   sweight10->SetMarkerColor(2);
   sweight10->SetLineColor(2);
   sweight10->GetXaxis()->SetLabelSize(0.05);
   sweight10->GetYaxis()->SetLabelSize(0.06);
   sweight10->GetXaxis()->SetLabelOffset(0.02);
 
   pad3->cd();
   pad3->SetGrid();
   TH1D *sweight02 = splot->GetSWeightsHist(-1, 0, 2);
   sweight02->SetTitle("F signal");
   sweight02->SetStats(kFALSE);
   sweight02->Draw("e");
   sweight02->SetMarkerStyle(21);
   sweight02->SetMarkerSize(0.7);
   sweight02->SetMarkerColor(2);
   sweight02->SetLineColor(2);
   sweight02->GetXaxis()->SetLabelSize(0.06);
   sweight02->GetYaxis()->SetLabelSize(0.06);
   sweight02->GetXaxis()->SetLabelOffset(0.01);

   pad4->cd();
   pad4->SetGrid();
   TH1D *sweight12 = splot->GetSWeightsHist(-1, 1, 2);
   sweight12->SetTitle("F background");
   sweight12->SetStats(kFALSE);
   sweight12->Draw("e");
   sweight12->SetMarkerStyle(21);
   sweight12->SetMarkerSize(0.7);
   sweight12->SetMarkerColor(2);
   sweight12->SetLineColor(2);
   sweight12->GetXaxis()->SetLabelSize(0.06);
   sweight12->GetYaxis()->SetLabelSize(0.06);
   sweight02->GetXaxis()->SetLabelOffset(0.01);
   myc->cd();
}
 TestSPlot.C:1
 TestSPlot.C:2
 TestSPlot.C:3
 TestSPlot.C:4
 TestSPlot.C:5
 TestSPlot.C:6
 TestSPlot.C:7
 TestSPlot.C:8
 TestSPlot.C:9
 TestSPlot.C:10
 TestSPlot.C:11
 TestSPlot.C:12
 TestSPlot.C:13
 TestSPlot.C:14
 TestSPlot.C:15
 TestSPlot.C:16
 TestSPlot.C:17
 TestSPlot.C:18
 TestSPlot.C:19
 TestSPlot.C:20
 TestSPlot.C:21
 TestSPlot.C:22
 TestSPlot.C:23
 TestSPlot.C:24
 TestSPlot.C:25
 TestSPlot.C:26
 TestSPlot.C:27
 TestSPlot.C:28
 TestSPlot.C:29
 TestSPlot.C:30
 TestSPlot.C:31
 TestSPlot.C:32
 TestSPlot.C:33
 TestSPlot.C:34
 TestSPlot.C:35
 TestSPlot.C:36
 TestSPlot.C:37
 TestSPlot.C:38
 TestSPlot.C:39
 TestSPlot.C:40
 TestSPlot.C:41
 TestSPlot.C:42
 TestSPlot.C:43
 TestSPlot.C:44
 TestSPlot.C:45
 TestSPlot.C:46
 TestSPlot.C:47
 TestSPlot.C:48
 TestSPlot.C:49
 TestSPlot.C:50
 TestSPlot.C:51
 TestSPlot.C:52
 TestSPlot.C:53
 TestSPlot.C:54
 TestSPlot.C:55
 TestSPlot.C:56
 TestSPlot.C:57
 TestSPlot.C:58
 TestSPlot.C:59
 TestSPlot.C:60
 TestSPlot.C:61
 TestSPlot.C:62
 TestSPlot.C:63
 TestSPlot.C:64
 TestSPlot.C:65
 TestSPlot.C:66
 TestSPlot.C:67
 TestSPlot.C:68
 TestSPlot.C:69
 TestSPlot.C:70
 TestSPlot.C:71
 TestSPlot.C:72
 TestSPlot.C:73
 TestSPlot.C:74
 TestSPlot.C:75
 TestSPlot.C:76
 TestSPlot.C:77
 TestSPlot.C:78
 TestSPlot.C:79
 TestSPlot.C:80
 TestSPlot.C:81
 TestSPlot.C:82
 TestSPlot.C:83
 TestSPlot.C:84
 TestSPlot.C:85
 TestSPlot.C:86
 TestSPlot.C:87
 TestSPlot.C:88
 TestSPlot.C:89
 TestSPlot.C:90
 TestSPlot.C:91
 TestSPlot.C:92
 TestSPlot.C:93
 TestSPlot.C:94
 TestSPlot.C:95
 TestSPlot.C:96
 TestSPlot.C:97
 TestSPlot.C:98
 TestSPlot.C:99
 TestSPlot.C:100
 TestSPlot.C:101
 TestSPlot.C:102
 TestSPlot.C:103
 TestSPlot.C:104
 TestSPlot.C:105
 TestSPlot.C:106
 TestSPlot.C:107
 TestSPlot.C:108
 TestSPlot.C:109
 TestSPlot.C:110
 TestSPlot.C:111
 TestSPlot.C:112
 TestSPlot.C:113
 TestSPlot.C:114
 TestSPlot.C:115
 TestSPlot.C:116
 TestSPlot.C:117
 TestSPlot.C:118
 TestSPlot.C:119
 TestSPlot.C:120
 TestSPlot.C:121
 TestSPlot.C:122
 TestSPlot.C:123
 TestSPlot.C:124
 TestSPlot.C:125
 TestSPlot.C:126
 TestSPlot.C:127
 TestSPlot.C:128
 TestSPlot.C:129
 TestSPlot.C:130
 TestSPlot.C:131
 TestSPlot.C:132
 TestSPlot.C:133
 TestSPlot.C:134
 TestSPlot.C:135
 TestSPlot.C:136
 TestSPlot.C:137
 TestSPlot.C:138
 TestSPlot.C:139
 TestSPlot.C:140
 TestSPlot.C:141
 TestSPlot.C:142
 TestSPlot.C:143
 TestSPlot.C:144
 TestSPlot.C:145
 TestSPlot.C:146
 TestSPlot.C:147
 TestSPlot.C:148
 TestSPlot.C:149
 TestSPlot.C:150
 TestSPlot.C:151
 TestSPlot.C:152
 TestSPlot.C:153
 TestSPlot.C:154
 TestSPlot.C:155
 TestSPlot.C:156
 TestSPlot.C:157
 TestSPlot.C:158
 TestSPlot.C:159
 TestSPlot.C:160
 TestSPlot.C:161