using namespace RooFit ; void myfit() { TFile *f = new TFile("fbetti_workspace.root") ; RooWorkspace* w = (RooWorkspace*) f->Get("w") ; RooRealVar* B0mES = w->var("B0mES"); RooRealVar* B0DeltaE = w->var("B0DeltaE"); RooRealVar* NSIG = w->var("NSIG"); RooRealVar* mSIG_mES = w->var("m_{SIG}(m_{ES})"); RooRealVar* sigmaSIG_mES = w->var("#sigma_{SIG}(m_{ES})"); RooRealVar* aSIG_mES = w->var("a_{SIG}(m_{ES})"); RooRealVar* nSIG_mES = w->var("n_{SIG}(m_{ES})"); RooRealVar* m1SIG_DeltaE = w->var("m1_{SIG}(#DeltaE)"); RooRealVar* m2SIG_DeltaE = w->var("m2_{SIG}(#DeltaE)"); RooRealVar* sigma1SIG_DeltaE = w->var("#sigma1_{SIG}(#DeltaE)"); RooRealVar* sigma2SIG_DeltaE = w->var("#sigma2_{SIG}(#DeltaE)"); RooRealVar* fGau1SIG_DeltaE = w->var("f(Gau1)_{SIG}(#DeltaE)"); RooAbsPdf* PsDataPDF = w->pdf("PsDataPDF") ; RooAbsData* dsPsData = w->data("dsPsData") ; // Now I fix all the parameters RooArgSet* param = PsDataPDF->getParameters(RooArgSet(*B0mES,*B0DeltaE)); //param->Print(); TIterator * iter = param->createIterator(); RooRealVar * var; while(0 != (var= (RooRealVar*)iter->Next())) { // Fix this parameter: var->setConstant(kTRUE); } // I want the parameters of the signal to be floating in the ranges obtained by a previous fit on MonteCarlo NSIG->setConstant(kFALSE); mSIG_mES->setConstant(kFALSE); sigmaSIG_mES->setConstant(kFALSE); aSIG_mES->setRange(aSIG_mES->getVal()-aSIG_mES->getError(),aSIG_mES->getVal()+aSIG_mES->getError()); aSIG_mES->setConstant(kFALSE); nSIG_mES->setRange(nSIG_mES->getVal()-nSIG_mES->getError(),nSIG_mES->getVal()+nSIG_mES->getError()); nSIG_mES->setConstant(kFALSE); m1SIG_DeltaE->setRange(m1SIG_DeltaE->getVal()-m1SIG_DeltaE->getError(),m1SIG_DeltaE->getVal()+m1SIG_DeltaE->getError()); m1SIG_DeltaE->setConstant(kFALSE); m2SIG_DeltaE->setRange(m2SIG_DeltaE->getVal()-m2SIG_DeltaE->getError(),m2SIG_DeltaE->getVal()+m2SIG_DeltaE->getError()); m2SIG_DeltaE->setConstant(kFALSE); sigma1SIG_DeltaE->setRange(sigma1SIG_DeltaE->getVal()-sigma1SIG_DeltaE->getError(),sigma1SIG_DeltaE->getVal()+sigma1SIG_DeltaE->getError()); sigma1SIG_DeltaE->setConstant(kFALSE); sigma2SIG_DeltaE->setRange(sigma2SIG_DeltaE->getVal()-sigma2SIG_DeltaE->getError(),sigma2SIG_DeltaE->getVal()+sigma2SIG_DeltaE->getError()); sigma2SIG_DeltaE->setConstant(kFALSE); fGau1SIG_DeltaE->setRange(fGau1SIG_DeltaE->getVal()-fGau1SIG_DeltaE->getError(),fGau1SIG_DeltaE->getVal()+fGau1SIG_DeltaE->getError()); fGau1SIG_DeltaE->setConstant(kFALSE); // --------------- // Fit pseudodata // --------------- RooFitResult* fitPsData = PsDataPDF->fitTo(*dsPsData,Save(),Extended(1),SumW2Error(kTRUE)); fitPsData->Print(); }