12 #ifndef RooStats_MCMCInterval
13 #define RooStats_MCMCInterval
30 class MCMCInterval :
public ConfInterval {
36 explicit MCMCInterval(
const char* name = 0);
39 MCMCInterval(
const char* name,
const RooArgSet& parameters,
42 enum {DEFAULT_NUM_BINS = 50};
43 enum IntervalType {kShortest, kTailFraction};
45 virtual ~MCMCInterval();
48 virtual Bool_t IsInInterval(
const RooArgSet& point)
const;
56 virtual void SetConfidenceLevel(Double_t cl);
59 virtual Double_t ConfidenceLevel()
const {
return fConfidenceLevel;}
63 virtual RooArgSet* GetParameters()
const;
67 virtual Double_t GetHistCutoff();
71 virtual Double_t GetKeysPdfCutoff();
75 virtual Double_t GetActualConfidenceLevel();
79 virtual void SetHistStrict(Bool_t isHistStrict)
80 { fIsHistStrict = isHistStrict; }
83 Bool_t CheckParameters(
const RooArgSet& point)
const;
87 virtual void SetParameters(
const RooArgSet& parameters);
90 virtual void SetChain(MarkovChain& chain) { fChain = &chain; }
95 virtual void SetAxes(RooArgList& axes);
99 virtual RooArgList* GetAxes()
101 RooArgList* axes =
new RooArgList();
102 for (Int_t i = 0; i < fDimension; i++)
103 axes->addClone(*fAxes[i]);
108 virtual Double_t LowerLimit(RooRealVar& param);
111 virtual Double_t LowerLimitTailFraction(RooRealVar& param);
116 virtual Double_t LowerLimitShortest(RooRealVar& param);
119 virtual Double_t LowerLimitByKeys(RooRealVar& param);
122 virtual Double_t LowerLimitByHist(RooRealVar& param);
125 virtual Double_t LowerLimitBySparseHist(RooRealVar& param);
128 virtual Double_t LowerLimitByDataHist(RooRealVar& param);
131 virtual Double_t UpperLimit(RooRealVar& param);
134 virtual Double_t UpperLimitTailFraction(RooRealVar& param);
139 virtual Double_t UpperLimitShortest(RooRealVar& param);
142 virtual Double_t UpperLimitByKeys(RooRealVar& param);
145 virtual Double_t UpperLimitByHist(RooRealVar& param);
148 virtual Double_t UpperLimitBySparseHist(RooRealVar& param);
151 virtual Double_t UpperLimitByDataHist(RooRealVar& param);
154 Double_t GetKeysMax();
158 virtual void SetNumBurnInSteps(Int_t numBurnInSteps)
159 { fNumBurnInSteps = numBurnInSteps; }
162 virtual void SetUseKeys(Bool_t useKeys) { fUseKeys = useKeys; }
166 virtual void SetUseSparseHist(Bool_t useSparseHist)
167 { fUseSparseHist = useSparseHist; }
170 virtual Bool_t GetUseKeys() {
return fUseKeys; }
176 virtual Int_t GetNumBurnInSteps() {
return fNumBurnInSteps; }
182 virtual TH1* GetPosteriorHist();
185 virtual RooNDKeysPdf* GetPosteriorKeysPdf();
188 virtual RooProduct* GetPosteriorKeysProduct();
191 virtual Int_t GetDimension()
const {
return fDimension; }
195 virtual const MarkovChain* GetChain() {
return fChain; }
199 virtual RooDataSet* GetChainAsDataSet(RooArgSet* whichVars = NULL)
200 {
return fChain->GetAsDataSet(whichVars); }
204 virtual const RooDataSet* GetChainAsConstDataSet()
205 {
return fChain->GetAsConstDataSet(); }
209 virtual RooDataHist* GetChainAsDataHist(RooArgSet* whichVars = NULL)
210 {
return fChain->GetAsDataHist(whichVars); }
214 virtual THnSparse* GetChainAsSparseHist(RooArgSet* whichVars = NULL)
215 {
return fChain->GetAsSparseHist(whichVars); }
218 virtual RooRealVar* GetNLLVar()
const
219 {
return fChain->GetNLLVar(); }
222 virtual RooRealVar* GetWeightVar()
const
223 {
return fChain->GetWeightVar(); }
226 virtual void SetEpsilon(Double_t epsilon)
229 coutE(InputArguments) <<
"MCMCInterval::SetEpsilon will not allow "
230 <<
"negative epsilon value" << std::endl;
239 virtual void SetIntervalType(
enum IntervalType intervalType)
240 { fIntervalType = intervalType; }
241 virtual void SetShortestInterval() { SetIntervalType(kShortest); }
244 virtual enum IntervalType GetIntervalType() {
return fIntervalType; }
247 virtual void SetLeftSideTailFraction(Double_t a) {
248 fIntervalType = kTailFraction;
260 virtual void SetDelta(Double_t delta)
263 coutE(InputArguments) <<
"MCMCInterval::SetDelta will not allow "
264 <<
"negative delta value" << std::endl;
270 inline Bool_t AcceptableConfLevel(Double_t confLevel);
271 inline Bool_t WithinDeltaFraction(Double_t a, Double_t b);
275 RooArgSet fParameters;
277 Double_t fConfidenceLevel;
279 RooDataHist* fDataHist;
280 THnSparse* fSparseHist;
281 Double_t fHistConfLevel;
282 Double_t fHistCutoff;
284 RooNDKeysPdf* fKeysPdf;
285 RooProduct* fProduct;
286 Heaviside* fHeaviside;
287 RooDataHist* fKeysDataHist;
288 RooRealVar* fCutoffVar;
289 Double_t fKeysConfLevel;
290 Double_t fKeysCutoff;
293 Double_t fLeftSideTF;
294 Double_t fTFConfLevel;
295 std::vector<Int_t> fVector;
303 Bool_t fUseSparseHist;
304 Bool_t fIsHistStrict;
309 Int_t fNumBurnInSteps;
323 enum IntervalType fIntervalType;
327 virtual void DetermineInterval();
328 virtual void DetermineShortestInterval();
329 virtual void DetermineTailFractionInterval();
330 virtual void DetermineByHist();
331 virtual void DetermineBySparseHist();
332 virtual void DetermineByDataHist();
333 virtual void DetermineByKeys();
334 virtual void CreateHist();
335 virtual void CreateSparseHist();
336 virtual void CreateDataHist();
337 virtual void CreateKeysPdf();
338 virtual void CreateKeysDataHist();
339 virtual void CreateVector(RooRealVar* param);
340 inline virtual Double_t CalcConfLevel(Double_t cutoff, Double_t full);
342 ClassDef(MCMCInterval,1)