Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
FrequentistCalculator.h
Go to the documentation of this file.
1 // @(#)root/roostats:$Id: FrequentistCalculator.h 37084 2010-11-29 21:37:13Z moneta $
2 // Author: Sven Kreiss, Kyle Cranmer Nov 2010
3 /*************************************************************************
4  * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers. *
5  * All rights reserved. *
6  * *
7  * For the licensing terms see $ROOTSYS/LICENSE. *
8  * For the list of contributors see $ROOTSYS/README/CREDITS. *
9  *************************************************************************/
10 
11 #ifndef ROOSTATS_FrequentistCalculator
12 #define ROOSTATS_FrequentistCalculator
13 
14 
16 
17 #include "RooStats/ToyMCSampler.h"
18 
20 
21 #include "RooFitResult.h"
22 
23 namespace RooStats {
24 
25  class FrequentistCalculator : public HypoTestCalculatorGeneric {
26 
27  public:
28  FrequentistCalculator(
29  const RooAbsData &data,
30  const ModelConfig &altModel,
31  const ModelConfig &nullModel,
32  TestStatSampler* sampler=0
33  ) :
34  HypoTestCalculatorGeneric(data, altModel, nullModel, sampler),
35  fConditionalMLEsNull(NULL),
36  fConditionalMLEsAlt(NULL),
37  fNToysNull(-1),
38  fNToysAlt(-1),
39  fNToysNullTail(0),
40  fNToysAltTail(0),
41  fFitInfo(NULL),
42  fStoreFitInfo(false)
43  {
44  }
45 
46  ~FrequentistCalculator() {
47  if( fConditionalMLEsNull ) delete fConditionalMLEsNull;
48  if( fConditionalMLEsAlt ) delete fConditionalMLEsAlt;
49  if( fFitInfo ) delete fFitInfo;
50  }
51 
52 
53  /// set number of toys
54  void SetToys(int toysNull, int toysAlt) { fNToysNull = toysNull; fNToysAlt = toysAlt; }
55 
56  /// set least number of toys in tails
57  void SetNToysInTails(int toysNull, int toysAlt) { fNToysNullTail = toysNull; fNToysAltTail = toysAlt; }
58 
59  /// set given nuisance parameters to a specific value that will be used instead of their
60  /// profiled value for Null toys
61  void SetConditionalMLEsNull( const RooArgSet* c ) {
62  if( fConditionalMLEsNull ) delete fConditionalMLEsNull;
63 
64  if( c ) fConditionalMLEsNull = (const RooArgSet*)c->snapshot();
65  else fConditionalMLEsNull = NULL;
66  }
67 
68  /// set given nuisance parameters to a specific value that will be used instead of their
69  /// profiled value for Alternate toys
70  void SetConditionalMLEsAlt( const RooArgSet* c ) {
71  if( fConditionalMLEsAlt ) delete fConditionalMLEsAlt;
72 
73  if( c ) fConditionalMLEsAlt = (const RooArgSet*)c->snapshot();
74  else fConditionalMLEsAlt = NULL;
75  }
76 
77  void StoreFitInfo(bool val = true) {
78  fStoreFitInfo = val;
79  }
80 
81  const RooArgSet* GetFitInfo() const {
82  return fFitInfo;
83  }
84 
85  protected:
86  /// configure TestStatSampler for the Null run
87  int PreNullHook(RooArgSet *parameterPoint, double obsTestStat) const;
88 
89  /// configure TestStatSampler for the Alt run
90  int PreAltHook(RooArgSet *parameterPoint, double obsTestStat) const;
91 
92  void PreHook() const;
93  void PostHook() const;
94 
95  protected:
96  // MLE inputs
97  const RooArgSet* fConditionalMLEsNull;
98  const RooArgSet* fConditionalMLEsAlt;
99 
100  // different number of toys for null and alt
101  int fNToysNull;
102  int fNToysAlt;
103 
104  // adaptive sampling
105  int fNToysNullTail;
106  int fNToysAltTail;
107 
108  private:
109  mutable RooArgSet* fFitInfo;
110  bool fStoreFitInfo;
111 
112  protected:
113  ClassDef(FrequentistCalculator,1)
114  };
115 }
116 
117 #endif