21 ClassImp(TConfidenceLevel);
23 Double_t
const TConfidenceLevel::fgMCLM2S = 0.025;
24 Double_t
const TConfidenceLevel::fgMCLM1S = 0.16;
25 Double_t
const TConfidenceLevel::fgMCLMED = 0.5;
26 Double_t
const TConfidenceLevel::fgMCLP1S = 0.84;
27 Double_t
const TConfidenceLevel::fgMCLP2S = 0.975;
29 Double_t
const TConfidenceLevel::fgMCL3S1S = 2.6998E-3;
30 Double_t
const TConfidenceLevel::fgMCL5S1S = 5.7330E-7;
32 Double_t
const TConfidenceLevel::fgMCL3S2S = 1.349898E-3;
33 Double_t
const TConfidenceLevel::fgMCL5S2S = 2.866516E-7;
39 TConfidenceLevel::TConfidenceLevel()
63 TConfidenceLevel::TConfidenceLevel(Int_t mc,
bool onesided)
77 fMCL3S = onesided ? fgMCL3S1S : fgMCL3S2S;
78 fMCL5S = onesided ? fgMCL5S1S : fgMCL5S2S;
85 TConfidenceLevel::~TConfidenceLevel()
105 Double_t TConfidenceLevel::GetExpectedStatistic_b(Int_t sigma)
const
109 return (-2 *((fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP2S)))]]) - fStot));
111 return (-2 *((fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP1S)))]]) - fStot));
113 return (-2 *((fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLMED)))]]) - fStot));
115 return (-2 *((fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM1S)))]]) - fStot));
117 return (-2 *((fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM2S)))]]) - fStot));
127 Double_t TConfidenceLevel::GetExpectedStatistic_sb(Int_t sigma)
const
131 return (-2 *((fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP2S)))]]) - fStot));
133 return (-2 *((fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP1S)))]]) - fStot));
135 return (-2 *((fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLMED)))]]) - fStot));
137 return (-2 *((fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM1S)))]]) - fStot));
139 return (-2 *((fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM2S)))]]) - fStot));
149 Double_t TConfidenceLevel::CLb(
bool use_sMC)
const
153 for (Int_t i = 0; i < fNMC; i++)
154 if (fTSS[fISS[i]] < fTSD)
155 result += (1 / (fLRS[fISS[i]] * fNMC));
157 for (Int_t i = 0; i < fNMC; i++)
158 if (fTSB[fISB[i]] < fTSD)
159 result = (Double_t(i + 1)) / fNMC;
168 Double_t TConfidenceLevel::CLsb(
bool use_sMC)
const
172 for (Int_t i = 0; i < fNMC; i++)
173 if (fTSS[fISS[i]] <= fTSD)
176 for (Int_t i = 0; i < fNMC; i++)
177 if (fTSB[fISB[i]] <= fTSD)
178 result += (fLRB[fISB[i]]) / fNMC;
188 Double_t TConfidenceLevel::CLs(
bool use_sMC)
const
190 Double_t clb = CLb(kFALSE);
191 Double_t clsb = CLsb(use_sMC);
192 if(clb==0) { std::cout <<
"Warning: clb = 0 !" << std::endl;
return 0;}
193 else return clsb/clb;
201 Double_t TConfidenceLevel::GetExpectedCLsb_b(Int_t sigma)
const
207 for (Int_t i = 0; i < fNMC; i++)
208 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP2S)))]])
209 result += fLRB[fISB[i]] / fNMC;
214 for (Int_t i = 0; i < fNMC; i++)
215 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP1S)))]])
216 result += fLRB[fISB[i]] / fNMC;
221 for (Int_t i = 0; i < fNMC; i++)
222 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLMED)))]])
223 result += fLRB[fISB[i]] / fNMC;
228 for (Int_t i = 0; i < fNMC; i++)
229 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM1S)))]])
230 result += fLRB[fISB[i]] / fNMC;
235 for (Int_t i = 0; i < fNMC; i++)
236 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM2S)))]])
237 result += fLRB[fISB[i]] / fNMC;
250 Double_t TConfidenceLevel::GetExpectedCLb_sb(Int_t sigma)
const
256 for (Int_t i = 0; i < fNMC; i++)
257 if (fTSS[fISS[i]] <= fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP2S)))]])
258 result += fLRS[fISS[i]] / fNMC;
263 for (Int_t i = 0; i < fNMC; i++)
264 if (fTSS[fISS[i]] <= fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP1S)))]])
265 result += fLRS[fISS[i]] / fNMC;
270 for (Int_t i = 0; i < fNMC; i++)
271 if (fTSS[fISS[i]] <= fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLMED)))]])
272 result += fLRS[fISS[i]] / fNMC;
277 for (Int_t i = 0; i < fNMC; i++)
278 if (fTSS[fISS[i]] <= fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM1S)))]])
279 result += fLRS[fISS[i]] / fNMC;
284 for (Int_t i = 0; i < fNMC; i++)
285 if (fTSS[fISS[i]] <= fTSS[fISS[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM2S)))]])
286 result += fLRS[fISS[i]] / fNMC;
299 Double_t TConfidenceLevel::GetExpectedCLb_b(Int_t sigma)
const
305 for (Int_t i = 0; i < fNMC; i++)
306 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM2S)))]])
307 result = (i + 1) /
double (fNMC);
312 for (Int_t i = 0; i < fNMC; i++)
313 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLM1S)))]])
314 result = (i + 1) / double (fNMC);
319 for (Int_t i = 0; i < fNMC; i++)
320 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLMED)))]])
321 result = (i + 1) /
double (fNMC);
326 for (Int_t i = 0; i < fNMC; i++)
327 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP1S)))]])
328 result = (i + 1) / double (fNMC);
333 for (Int_t i = 0; i < fNMC; i++)
334 if (fTSB[fISB[i]] <= fTSB[fISB[TMath::Min((Int_t) fNMC,(Int_t) TMath::Max((Int_t) 1,(Int_t) (fNMC * fgMCLP2S)))]])
335 result = (i + 1) /
double (fNMC);
346 Double_t TConfidenceLevel::GetAverageCLsb()
const
350 for (Int_t i = 0; i < fNMC; i++) {
351 psumsb += fLRB[fISB[i]] / fNMC;
352 result += psumsb / fNMC;
361 Double_t TConfidenceLevel::GetAverageCLs()
const
365 for (Int_t i = 0; i < fNMC; i++) {
366 psumsb += fLRB[fISB[i]] / fNMC;
367 result += ((psumsb / fNMC) / ((i + 1) / fNMC));
376 Double_t TConfidenceLevel::Get3sProbability()
const
380 for (Int_t i = 0; i < fNMC; i++) {
381 psumbs += 1 / (Double_t) (fLRS[(fISS[(Int_t) (fNMC - i)])] * fNMC);
382 if (psumbs <= fMCL3S)
392 Double_t TConfidenceLevel::Get5sProbability()
const
396 for (Int_t i = 0; i < fNMC; i++) {
397 psumbs += 1 / (Double_t) (fLRS[(fISS[(Int_t) (fNMC - i)])] * fNMC);
398 if (psumbs <= fMCL5S)
414 void TConfidenceLevel::Draw(
const Option_t*)
416 TH1F h(
"TConfidenceLevel_Draw",
"",50,0,0);
418 for (i=0; i<fNMC; i++) {
419 h.Fill(-2*(fTSB[i]-fStot));
420 h.Fill(-2*(fTSS[i]-fStot));
422 TH1F* b_hist =
new TH1F(
"b_hist",
"-2lnQ",50,h.GetXaxis()->GetXmin(),h.GetXaxis()->GetXmax());
423 TH1F* sb_hist =
new TH1F(
"sb_hist",
"-2lnQ",50,h.GetXaxis()->GetXmin(),h.GetXaxis()->GetXmax());
424 for (i=0; i<fNMC; i++) {
425 b_hist->Fill(-2*(fTSB[i]-fStot));
426 sb_hist->Fill(-2*(fTSS[i]-fStot));
429 sb_hist->Draw(
"Same");
430 sb_hist->SetLineStyle(3);
437 void TConfidenceLevel::SetTSB(Double_t * in)
440 TMath::Sort(fNNMC, fTSB, fISB, 0);
447 void TConfidenceLevel::SetTSS(Double_t * in)
450 TMath::Sort(fNNMC, fTSS, fISS, 0);