Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
PointSetInterval.cxx
Go to the documentation of this file.
1 // @(#)root/roostats:$Id$
2 // Author: Kyle Cranmer, Lorenzo Moneta, Gregory Schott, Wouter Verkerke
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 /*****************************************************************************
12  * Project: RooStats
13  * Package: RooFit/RooStats
14  * @(#)root/roofit/roostats:$Id$
15  * Original Author: Kyle Cranmer
16  * Kyle Cranmer, Lorenzo Moneta, Gregory Schott, Wouter Verkerke
17  *
18  *****************************************************************************/
19 
20 
21 /** \class RooStats::PointSetInterval
22  \ingroup Roostats
23 
24 PointSetInterval is a concrete implementation of the ConfInterval interface.
25 It implements simple general purpose interval of arbitrary dimensions and shape.
26 It does not assume the interval is connected.
27 It uses either a RooDataSet (eg. a list of parameter points in the interval) or
28 a RooDataHist (eg. a Histogram-like object for small regions of the parameter space) to
29 store the interval.
30 
31 */
32 
33 
35 
36 #include "RooRealVar.h"
37 #include "RooDataSet.h"
38 #include "RooDataHist.h"
39 
40 using namespace std;
41 
42 ClassImp(RooStats::PointSetInterval); ;
43 
44 using namespace RooStats;
45 
46 
47 ////////////////////////////////////////////////////////////////////////////////
48 /// Default constructor
49 
50 PointSetInterval::PointSetInterval(const char* name) :
51  ConfInterval(name), fConfidenceLevel(0.95), fParameterPointsInInterval(0)
52 {
53 }
54 
55 ////////////////////////////////////////////////////////////////////////////////
56 /// Alternate constructor passing the dataset
57 
58 PointSetInterval::PointSetInterval(const char* name, RooAbsData& data) :
59  ConfInterval(name), fConfidenceLevel(0.95), fParameterPointsInInterval(&data)
60 {
61 }
62 
63 
64 
65 ////////////////////////////////////////////////////////////////////////////////
66 /// Destructor
67 
68 PointSetInterval::~PointSetInterval()
69 {
70 }
71 
72 
73 ////////////////////////////////////////////////////////////////////////////////
74 /// Method to determine if a parameter point is in the interval
75 
76 Bool_t PointSetInterval::IsInInterval(const RooArgSet &parameterPoint) const
77 {
78  RooDataSet* tree = dynamic_cast<RooDataSet*>( fParameterPointsInInterval );
79  RooDataHist* hist = dynamic_cast<RooDataHist*>( fParameterPointsInInterval );
80 
81  if( !this->CheckParameters(parameterPoint) ){
82  // std::cout << "problem with parameters" << std::endl;
83  return false;
84  }
85 
86  if( hist ) {
87  if ( hist->weight( parameterPoint , 0 ) > 0 ) // positive value indicates point is in interval
88  return true;
89  else
90  return false;
91  }
92  else if( tree ){
93  const RooArgSet* thisPoint = 0;
94  // need to check if the parameter point is the same as any point in tree.
95  for(Int_t i = 0; i<tree->numEntries(); ++i){
96  // This method is not complete
97  thisPoint = tree->get(i);
98  bool samePoint = true;
99  TIter it = parameterPoint.createIterator();
100  RooRealVar *myarg;
101  while ( samePoint && (myarg = (RooRealVar *)it.Next())) {
102  if(myarg->getVal() != thisPoint->getRealValue(myarg->GetName()))
103  samePoint = false;
104  }
105  if(samePoint)
106  return true;
107 
108  // delete thisPoint;
109  }
110  return false; // didn't find a good point
111  }
112  else {
113  std::cout << "dataset is not initialized properly" << std::endl;
114  }
115 
116  return true;
117 
118 }
119 
120 ////////////////////////////////////////////////////////////////////////////////
121 /// returns list of parameters
122 
123 RooArgSet* PointSetInterval::GetParameters() const
124 {
125  return new RooArgSet(*(fParameterPointsInInterval->get()) );
126 }
127 
128 ////////////////////////////////////////////////////////////////////////////////
129 
130 Bool_t PointSetInterval::CheckParameters(const RooArgSet &parameterPoint) const
131 {
132  if (parameterPoint.getSize() != fParameterPointsInInterval->get()->getSize() ) {
133  std::cout << "PointSetInterval: argument size is wrong, parameters don't match: arg=" << parameterPoint
134  << " interval=" << (*fParameterPointsInInterval->get()) << std::endl;
135  return false;
136  }
137  if ( ! parameterPoint.equals( *(fParameterPointsInInterval->get() ) ) ) {
138  std::cout << "PointSetInterval: size is ok, but parameters don't match" << std::endl;
139  return false;
140  }
141  return true;
142 }
143 
144 
145 ////////////////////////////////////////////////////////////////////////////////
146 
147 Double_t PointSetInterval::UpperLimit(RooRealVar& param )
148 {
149  RooDataSet* tree = dynamic_cast<RooDataSet*>( fParameterPointsInInterval );
150  Double_t low = 0, high = 0;
151  if( tree ){
152  tree->getRange(param, low, high);
153  return high;
154  }
155  return param.getMax();
156 }
157 
158 ////////////////////////////////////////////////////////////////////////////////
159 
160 Double_t PointSetInterval::LowerLimit(RooRealVar& param )
161 {
162  RooDataSet* tree = dynamic_cast<RooDataSet*>( fParameterPointsInInterval );
163  Double_t low = 0, high = 0;
164  if( tree ){
165  tree->getRange(param, low, high);
166  return low;
167  }
168  return param.getMin();
169 }