dear experts,
I discussed this with several people, but I would need a confirmation that what i am doing is consistent enough.
Basically, I am trying to extract some single source systematic uncertainty associated to one measurement. In order to extract the different systematics, I am proceeding as follow:
-
start with the histogram templates for signal (nominal and systematics) and data driven background and produce the Roofit workspace using the Histfactory machinery.
-
fix all nuisance parameters to zero, fit and extract the 68% confidence interval.
-> This is the nominal signal strength factor, that i label: mu_nom_c, mu_nom_u, mu_nom_d (central, upper, lower) -
leave all nuisance parameters free within [-2,2], perform the fit and extract again the associated 68% confidence interval.
-> I label these: mu_sys_c, mu_sys_u, mu_sys_d (central, upper, lower)
-> I have the set of associated values for the nuisance parameters. -
loop over all nuisance parameters, for each of them, fix its value to the value found in step 3) and perform the fit w.r.t. all other ones left free and extract the associated 68% CL interval. I call this:
-> I label these: mu_alphaI_c, mu_alphaI_u, mu_alphaI_d (central, upper, lower) -
fix all nuisance parameters to their value found in step 3) and perform the fit -> this allows me to extract the stat only uncertainty: mu_stat_c, mu_stat_u, mu_stat_d
then i compute the systematics (total and single sources ) as follow:
a) total systematics:
tot_sys_u = ( |(mu_sys_c - mu_sys_u)^2 - (mu_stat_c - mu_stat_u)^2 |)^(1/2)
tot_sys_d = ( |(mu_sys_c - mu_sys_d)^2 - (mu_stat_c - mu_stat_d)^2 |)^(1/2)
b) Luminosity:
lumi_sys_u = ( |(mu_lumi_c - mu_lumi_u)^2 - (mu_stat_c - mu_stat_u)^2 |)^(1/2)
lumi_sys_d = ( |(mu_lumi_c - mu_lumi_d)^2 - (mu_stat_c - mu_stat_d)^2 |)^(1/2)
c) Nuisance parameter associated systematics:
alpha_sys_u = ( | (mu_sys_c - mu_sys_u)^2 - (mu_alpha_c - mu_alpha_u)^2 |)^(1/2);
alpha_sys_d = ( | (mu_sys_c - mu_sys_d)^2 - (mu_alpha_c - mu_alpha_d)^2 |)^(1/2);
To do this on the technical aspect, I am using Minuit2 like:
mc->GetPdf()->fitTo(*data,Save(kTRUE),InitialHesse(true), Hesse(true),Minos(kTRUE), RooFit::Minimizer(“Minuit2”,“minos”), Strategy(1), PrintLevel(3), Save(true) );
and to extract the confidence interval, i use:
ProfileLikelihoodCalculator* PL = new ProfileLikelihoodCalculator(*data,mc);
PL->SetConfidenceLevel(0.68);
LikelihoodInterval interval = PL->GetInterval();
double intervalValue = POI->getVal();
double intervalError = POI->getError();
double intervalLow = interval->LowerLimit(*POI);
double intervalUp = interval->UpperLimit(*POI);
thanks in advance.