Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
Systematics.cxx
Go to the documentation of this file.
1 // @(#)root/roostats:$Id$
2 // Author: Kyle Cranmer, George Lewis
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 
13 /*
14 BEGIN_HTML
15 <p>
16 </p>
17 END_HTML
18 */
19 //
20 
21 
24 
25 
26 // Constraints
27 std::string RooStats::HistFactory::Constraint::Name( Constraint::Type type ) {
28 
29  if( type == Constraint::Gaussian ) return "Gaussian";
30  if( type == Constraint::Poisson ) return "Poisson";
31  return "";
32 }
33 
34 RooStats::HistFactory::Constraint::Type RooStats::HistFactory::Constraint::GetType( const std::string& Name ) {
35 
36  if( Name == "" ) {
37  std::cout << "Error: Given empty name for ConstraintType" << std::endl;
38  throw hf_exc();
39  }
40 
41  else if ( Name == "Gaussian" || Name == "Gauss" ) {
42  return Constraint::Gaussian;
43  }
44 
45  else if ( Name == "Poisson" || Name == "Pois" ) {
46  return Constraint::Poisson;
47  }
48 
49  else {
50  std::cout << "Error: Unknown name given for Constraint Type: " << Name << std::endl;
51  throw hf_exc();
52  }
53 
54 }
55 
56 // Norm Factor
57 RooStats::HistFactory::NormFactor::NormFactor() : fName(""), fVal(1.0),
58  fLow(1.0), fHigh(1.0),
59  fConst(true) {;}
60 
61 void RooStats::HistFactory::NormFactor::Print( std::ostream& stream ) const {
62  stream << "\t \t Name: " << fName
63  << "\t Val: " << fVal
64  << "\t Low: " << fLow
65  << "\t High: " << fHigh
66  << "\t Const: " << fConst
67  << std::endl;
68 }
69 
70 void RooStats::HistFactory::NormFactor::PrintXML( std::ostream& xml ) const {
71  xml << " <NormFactor Name=\"" << GetName() << "\" "
72  << " Val=\"" << GetVal() << "\" "
73  << " High=\"" << GetHigh() << "\" "
74  << " Low=\"" << GetLow() << "\" "
75  << " Const=\"" << (GetConst() ? std::string("True") : std::string("False")) << "\" "
76  << " /> " << std::endl;
77 }
78 
79 // Overall Sys
80 void RooStats::HistFactory::OverallSys::Print( std::ostream& stream ) const {
81  stream << "\t \t Name: " << fName
82  << "\t Low: " << fLow
83  << "\t High: " << fHigh
84  << std::endl;
85 }
86 
87 void RooStats::HistFactory::OverallSys::PrintXML( std::ostream& xml ) const {
88  xml << " <OverallSys Name=\"" << GetName() << "\" "
89  << " High=\"" << GetHigh() << "\" "
90  << " Low=\"" << GetLow() << "\" "
91  << " /> " << std::endl;
92 }
93 
94 
95 void RooStats::HistFactory::HistogramUncertaintyBase::Print( std::ostream& stream ) const {
96  stream << "\t \t Name: " << fName
97  << "\t HistoFileLow: " << fInputFileLow
98  << "\t HistoNameLow: " << fHistoNameLow
99  << "\t HistoPathLow: " << fHistoPathLow
100  << "\t HistoFileHigh: " << fInputFileHigh
101  << "\t HistoNameHigh: " << fHistoNameHigh
102  << "\t HistoPathHigh: " << fHistoPathHigh
103  << std::endl;
104 }
105 
106 void RooStats::HistFactory::HistogramUncertaintyBase::writeToFile( const std::string& FileName,
107  const std::string& DirName ) {
108 
109  // This saves the histograms to a file and
110  // changes the name of the local file and histograms
111 
112  auto histLow = GetHistoLow();
113  if( histLow==NULL ) {
114  std::cout << "Error: Cannot write " << GetName()
115  << " to file: " << FileName
116  << " HistoLow is NULL"
117  << std::endl;
118  throw hf_exc();
119  }
120  histLow->Write();
121  fInputFileLow = FileName;
122  fHistoPathLow = DirName;
123  fHistoNameLow = histLow->GetName();
124 
125  auto histHigh = GetHistoHigh();
126  if( histHigh==NULL ) {
127  std::cout << "Error: Cannot write " << GetName()
128  << " to file: " << FileName
129  << " HistoHigh is NULL"
130  << std::endl;
131  throw hf_exc();
132  }
133  histHigh->Write();
134  fInputFileHigh = FileName;
135  fHistoPathHigh = DirName;
136  fHistoNameHigh = histHigh->GetName();
137 
138  return;
139 
140 }
141 
142 
143 void RooStats::HistFactory::HistoSys::PrintXML( std::ostream& xml ) const {
144  xml << " <HistoSys Name=\"" << GetName() << "\" "
145  << " HistoFileLow=\"" << GetInputFileLow() << "\" "
146  << " HistoNameLow=\"" << GetHistoNameLow() << "\" "
147  << " HistoPathLow=\"" << GetHistoPathLow() << "\" "
148 
149  << " HistoFileHigh=\"" << GetInputFileHigh() << "\" "
150  << " HistoNameHigh=\"" << GetHistoNameHigh() << "\" "
151  << " HistoPathHigh=\"" << GetHistoPathHigh() << "\" "
152  << " /> " << std::endl;
153 }
154 
155 // Shape Sys
156 
157 void RooStats::HistFactory::ShapeSys::Print( std::ostream& stream ) const {
158  stream << "\t \t Name: " << fName
159  << "\t InputFile: " << fInputFileHigh
160  << "\t HistoName: " << fHistoNameHigh
161  << "\t HistoPath: " << fHistoPathHigh
162  << std::endl;
163 }
164 
165 
166 void RooStats::HistFactory::ShapeSys::PrintXML( std::ostream& xml ) const {
167  xml << " <ShapeSys Name=\"" << GetName() << "\" "
168  << " InputFile=\"" << GetInputFile() << "\" "
169  << " HistoName=\"" << GetHistoName() << "\" "
170  << " HistoPath=\"" << GetHistoPath() << "\" "
171  << " ConstraintType=\"" << std::string(Constraint::Name(GetConstraintType())) << "\" "
172  << " /> " << std::endl;
173 }
174 
175 
176 void RooStats::HistFactory::ShapeSys::writeToFile( const std::string& FileName,
177  const std::string& DirName ) {
178 
179  auto histError = GetErrorHist();
180  if( histError==NULL ) {
181  std::cout << "Error: Cannot write " << GetName()
182  << " to file: " << FileName
183  << " ErrorHist is NULL"
184  << std::endl;
185  throw hf_exc();
186  }
187  histError->Write();
188  fInputFileHigh = FileName;
189  fHistoPathHigh = DirName;
190  fHistoNameHigh = histError->GetName();
191 
192  return;
193 
194 }
195 
196 
197 
198 
199 // HistoFactor
200 
201 void RooStats::HistFactory::HistoFactor::PrintXML( std::ostream& xml ) const {
202  xml << " <HistoFactor Name=\"" << GetName() << "\" "
203 
204  << " InputFileLow=\"" << GetInputFileLow() << "\" "
205  << " HistoNameLow=\"" << GetHistoNameLow() << "\" "
206  << " HistoPathLow=\"" << GetHistoPathLow() << "\" "
207 
208  << " InputFileHigh=\"" << GetInputFileHigh() << "\" "
209  << " HistoNameHigh=\"" << GetHistoNameHigh() << "\" "
210  << " HistoPathHigh=\"" << GetHistoPathHigh() << "\" "
211  << " /> " << std::endl;
212 }
213 
214 
215 // Shape Factor
216 void RooStats::HistFactory::ShapeFactor::Print( std::ostream& stream ) const {
217 
218  stream << "\t \t Name: " << fName << std::endl;
219 
220  if( fHistoNameHigh != "" ) {
221  stream << "\t \t "
222  << " Shape Hist Name: " << fHistoNameHigh
223  << " Shape Hist Path Name: " << fHistoPathHigh
224  << " Shape Hist FileName: " << fInputFileHigh
225  << std::endl;
226  }
227 
228  if( fConstant ) { stream << "\t \t ( Constant ): " << std::endl; }
229 
230 }
231 
232 
233 void RooStats::HistFactory::ShapeFactor::writeToFile( const std::string& FileName,
234  const std::string& DirName ) {
235 
236  if( HasInitialShape() ) {
237  auto histInitialShape = GetInitialShape();
238  if( histInitialShape==NULL ) {
239  std::cout << "Error: Cannot write " << GetName()
240  << " to file: " << FileName
241  << " InitialShape is NULL"
242  << std::endl;
243  throw hf_exc();
244  }
245  histInitialShape->Write();
246  fInputFileHigh = FileName;
247  fHistoPathHigh = DirName;
248  fHistoNameHigh = histInitialShape->GetName();
249  }
250 
251  return;
252 
253 }
254 
255 
256 void RooStats::HistFactory::ShapeFactor::PrintXML( std::ostream& xml ) const {
257  xml << " <ShapeFactor Name=\"" << GetName() << "\" ";
258  if( fHasInitialShape ) {
259  xml << " InputFile=\"" << GetInputFile() << "\" "
260  << " HistoName=\"" << GetHistoName() << "\" "
261  << " HistoPath=\"" << GetHistoPath() << "\" ";
262  }
263  xml << " /> " << std::endl;
264 }
265 
266 
267 // Stat Error Config
268 void RooStats::HistFactory::StatErrorConfig::Print( std::ostream& stream ) const {
269  stream << "\t \t RelErrorThreshold: " << fRelErrorThreshold
270  << "\t ConstraintType: " << Constraint::Name( fConstraintType )
271  << std::endl;
272 }
273 
274 void RooStats::HistFactory::StatErrorConfig::PrintXML( std::ostream& xml ) const {
275  xml << " <StatErrorConfig RelErrorThreshold=\"" << GetRelErrorThreshold()
276  << "\" "
277  << "ConstraintType=\"" << Constraint::Name( GetConstraintType() )
278  << "\" "
279  << "/> " << std::endl << std::endl;
280 
281 }
282 
283 
284 // Stat Error
285 void RooStats::HistFactory::StatError::Print( std::ostream& stream ) const {
286  stream << "\t \t Activate: " << fActivate
287  << "\t InputFile: " << fInputFileHigh
288  << "\t HistoName: " << fHistoNameHigh
289  << "\t histoPath: " << fHistoPathHigh
290  << std::endl;
291 }
292 
293 void RooStats::HistFactory::StatError::PrintXML( std::ostream& xml ) const {
294 
295  if( GetActivate() ) {
296  xml << " <StatError Activate=\""
297  << (GetActivate() ? std::string("True") : std::string("False"))
298  << "\" "
299  << " InputFile=\"" << GetInputFile() << "\" "
300  << " HistoName=\"" << GetHistoName() << "\" "
301  << " HistoPath=\"" << GetHistoPath() << "\" "
302  << " /> " << std::endl;
303  }
304 
305 }
306 
307 
308 void RooStats::HistFactory::StatError::writeToFile( const std::string& OutputFileName,
309  const std::string& DirName ) {
310 
311  if( fUseHisto ) {
312 
313  std::string statErrorHistName = "statisticalErrors";
314 
315  auto hStatError = GetErrorHist();
316  if( hStatError == NULL ) {
317  std::cout << "Error: Stat Error error hist is NULL" << std::endl;
318  throw hf_exc();
319  }
320  hStatError->Write(statErrorHistName.c_str());
321 
322  fInputFileHigh = OutputFileName;
323  fHistoNameHigh = statErrorHistName;
324  fHistoPathHigh = DirName;
325 
326  }
327 
328  return;
329 
330 }