Hi Emiliano,
are you sure that everything is well defined in your model?
I get this error:
[#0] WARNING:Minization -- RooFitGlue: Minimized function has error status.
Returning maximum FCN so far (-46865) to force MIGRAD to back out of this region. Error log follows
Parameter values: aalpha=1.22103, bbeta=3.4, mmin=0.9, nbkg=3400, par2=1.995, psi2S_mean=1.66, psi2S_nsig=2000, psi2S_width=0.0512, square_nsig=1000
RooGenericPdf::Bk[ actualVars=(Mass,aalpha,bbeta,mmin) formula="(( (Mass-mmin))**aalpha)*(( (2.100-Mass) )**bbeta)" ]
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.5,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.125,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.3125,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.21875,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.40625,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.17188,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.26562,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.35938,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.45312,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.10156,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.14844,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
p.d.f value is Not-a-Number (-nan), forcing value to zero @ actualVars=(Mass = 2.19531,aalpha = 1.22103,bbeta = 3.4,mmin = 0.9)
... (remaining 8 messages suppressed)
I had to manipulate 2 or 3 lines in your code, please find it here:
#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "RooRealVar.h"
#include "RooStats/SPlot.h"
#include "RooAbsData.h"
#include "RooDataSet.h"
#include "RooRealVar.h"
#include "RooGaussian.h"
#include "RooExponential.h"
#include "RooChebychev.h"
#include "RooAddPdf.h"
#include "RooGenericPdf.h"
#include "RooProdPdf.h"
#include "RooAddition.h"
#include "RooProduct.h"
#include "TCanvas.h"
#include "RooAbsPdf.h"
#include "RooFit.h"
#include "RooFitResult.h"
#include "RooWorkspace.h"
#include "RooConstVar.h"
#include "TMath.h"
#include "TTree.h"
#include "TH1F.h"
#include "TRandom.h"
#include "RooPolynomial.h"
#include "RooDataHist.h"
#include "RooPlot.h"
#include "TH1D.h"
#include "TFile.h"
using namespace RooFit ;
using namespace RooStats ;
#include <iostream>
#include <vector>
using namespace std;
// #include "MathCore.h"
// using namespace ROOT::Math;
// #pragma link C++ class vector<double>+;
// void AddModel(RooWorkspace*);
// void AddData(RooWorkspace*);
// void DoSPlot(RooWorkspace*);
// void MakePlots(RooWorkspace*);
void test(){
TFile *f = new TFile("sPlot_to_fit.root","read");
RooWorkspace *ws = (RooWorkspace *) f->Get("nWS") ;
f->Close();
RooRealVar* Mass = ws->var("Mass");
RooDataSet * data = (RooDataSet*) ws->data("dataWithSWeights");
RooDataSet * dataw_phi = new RooDataSet(data->GetName(),data->GetTitle(),data,*data->get(),0,"nsig_sw") ;
TCanvas* cdata1 = new TCanvas("sPlot1","sPlot1", 600, 450);
RooPlot* frame2 = Mass->frame() ;
dataw_phi->plotOn(frame2, Binning(150), DataError(RooAbsData::SumW2) ) ;
frame2->SetTitle("LHCb preliminary");
frame2->Draw() ;
RooRealVar psi2S_mean("psi2S_mean","mean of the signal",1.660,1.600,1.800);
RooRealVar psi2S_width("psi2S_width","width/sigma of the signal",0.0512,0.020,0.070);
RooGaussian psi2S_sigModel("psi2S_sigModel","signal model",*Mass,psi2S_mean,psi2S_width);
RooRealVar par0("par0","par0", 0.035 , 0. , 0.150);
RooRealVar par1("par1","par1", 0.0106 , 0. , 0.027 );
RooRealVar par2("par2","par2", 1.995 , 1.900 ,2.005 );
RooRealVar par3("par3","par3", 1.686 , 1.500 ,1.800 );
par3.setConstant(kTRUE);
// par2.setConstant(kTRUE);
par1.setConstant(kTRUE);
par0.setConstant(kTRUE);
RooGenericPdf square("square","Generic PDF","0.5*par0*(tanh((Mass-par3)/par1)-tanh((Mass-par2)/par1))", RooArgSet(*Mass,par0,par1,par2,par3));
RooRealVar psi2S_nsig("psi2S_nsig","#signal events",2000,100,10000);
RooRealVar square_nsig("square_nsig","square_nsig",1000,0.,300000);
Double_t alpha=1.2;
Double_t beta=3.4;
Double_t min=0.900;
RooRealVar aalpha("aalpha","aalpha", alpha,0.40,1.80);
RooRealVar bbeta("bbeta","bbeta", beta, 0.0,2.00);
RooRealVar mmin("mmin","mmin",min,0.700,1.200);
RooGenericPdf Bk("Bk","Generic PDF 2","(( (Mass-mmin))**aalpha)*(( (2.100-Mass) )**bbeta)", RooArgSet(*Mass,aalpha,bbeta,mmin) );
RooRealVar Bk_nbkg("nbkg","#background events",3400,3100,3800);
RooAddPdf low_sum("low_sum","low_sum",RooArgList( psi2S_sigModel, square, Bk ), RooArgList( psi2S_nsig, square_nsig, Bk_nbkg ) );
low_sum.fitTo(*dataw_phi,Range(1.070,2.070),PrintLevel(-1),SumW2Error(kTRUE));
low_sum.plotOn(frame2);
Double_t chi2 = frame2->chiSquare();
low_sum.paramOn(frame2);
low_sum.plotOn(frame2,Components(psi2S_sigModel),LineColor(kRed));
low_sum.plotOn(frame2,Components(square),LineColor(kCyan));
low_sum.plotOn(frame2,Components(Bk),LineStyle(kDashed));
frame2->Draw();
}