Now, I am interested in getting 2 expected limits and their 2 CLs curve VS SIG with the 1 and 2 sigma bands:
-the expected limit if I was observing the Bkg Only hypothesis
-the expected limit if I was observing the Bkg+SM Signal (including the theoretical uncertainties on the SM prediction)

I can get the first one easily.
For the second one I didn’t find any thing except :
HypoTestInverterResult::GetExpectedUpperLimit(N_SM_SIG)
which only gives me the expected limit if I was observing the Bkg+N_SM_SIG Signal but no uncertainties on the SM prediction are considered and I cannot get the CLs curve with the 1 and 2 sigma bands…

Do you know any solution to get this second curve?

When you are computing a limit using the HypoTestInverter your null hypothesis is the Sig+Bkg and the alternate is normally Bkg only. This is explained in the slides linked to that tutorial Web page.
The expected limit is computed using the median of the sampling distribution obtained for the alternate hypothesis (i.e. the bkg only).
Now if you want to compute an expected limit for a model with Sig+Bkg and Sig=Standard Model cross section, you need to use that model as alternate model.
This is done, when you are building the ModelConfig for the alternate model. You must set as snapshot for the signal value (the poi) the Standard Model value. Looking at the code in the tutorial you do

ModelConfig * bModel = (ModelConfig*) sbModel->Clone();
bModel->SetName(TString(modelSBName)+TString("_with_poi_0"));
double oldval = poi->getVal();
// poi->setVal( 0); // for using bkg only model
poi->setVal( SMvalue); // for using s+bkg with s = SMvalue
bModel->SetSnapshot( *poi );
poi->setVal(oldval);

However there is a small problem, CLs will not be computed correctly, since the CLb you are using now is not correct, since it is obtained using as model a sig+bkg with sig=SM.
However, I presume that you have an excess in your data, so CLs+b is pratically equal to CLs (i.e. CLb = 1). So, you can compute the expected limit in this case just using CLs+b.
Just do:

and by running the HypoTestInverter you will get an “almost” correct expected limit and +/- 1,2 sigma bands by calling HypoTestInverterResult::GetExpectedUpperLimit.

You can model the uncertainties in the SM prediction by adding an extra parameter in your model with a constraint (for example Gaussian or log-normal) depending on your uncertainty.
You can use the example of the uncertainty in the efficiency in the counting model made for the tutorial twiki.cern.ch/twiki/bin/view/Ro … ting_model