Logo ROOT  
Reference Guide
Channel.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/** \class RooStats::HistFactory::Channel
13 * \ingroup HistFactory
14 This class encapsulates all information for the statistical interpretation of one experiment.
15 It can be combined with other channels (e.g. for the combination of multiple experiments, or
16 to constrain nuisance parameters with information obtained in a control region).
17 A channel contains one or more samples which describe the contribution from different processes
18 to this measurement.
19*/
20
21
22
24#include "HFMsgService.h"
25#include <stdlib.h>
26
27#include "TFile.h"
28#include "TKey.h"
29#include "TTimeStamp.h"
30
32
33using namespace std;
34
36 fName( "" )
37{
38 // standard constructor
39}
40
42 fName( other.fName ),
43 fInputFile( other.fInputFile ),
44 fHistoPath( other.fHistoPath ),
45 fData( other.fData ),
46 fAdditionalData( other.fAdditionalData ),
47 fStatErrorConfig( other.fStatErrorConfig ),
48 fSamples( other.fSamples )
49{ ; }
50
51
52RooStats::HistFactory::Channel::Channel(std::string ChanName, std::string ChanInputFile) :
53 fName( ChanName ), fInputFile( ChanInputFile )
54{
55 // create channel with given name and input file
56}
57
58namespace RooStats{
59 namespace HistFactory{
60 //BadChannel = Channel();
62 // BadChannel.Name = "BadChannel"; // = Channel(); //.Name = "BadChannel";
63 }
64}
65
66
68{
69 // add fully configured sample to channel
70
71 sample.SetChannelName( GetName() );
72 fSamples.push_back( sample );
73}
74
75void RooStats::HistFactory::Channel::Print( std::ostream& stream ) {
76 // print information of channel to given stream
77
78 stream << "\t Channel Name: " << fName
79 << "\t InputFile: " << fInputFile
80 << std::endl;
81
82 stream << "\t Data:" << std::endl;
83 fData.Print( stream );
84
85
86 stream << "\t statErrorConfig:" << std::endl;
87 fStatErrorConfig.Print( stream );
88
89
90 if( fSamples.size() != 0 ) {
91
92 stream << "\t Samples: " << std::endl;
93 for( unsigned int i = 0; i < fSamples.size(); ++i ) {
94 fSamples.at(i).Print( stream );
95 }
96 }
97
98
99 stream << "\t End of Channel " << fName << std::endl;
100
101
102}
103
104
105void RooStats::HistFactory::Channel::PrintXML( std::string directory, std::string prefix ) {
106
107 // Create an XML file for this channel
108 cxcoutPHF << "Printing XML Files for channel: " << GetName() << std::endl;
109
110 std::string XMLName = prefix + fName + ".xml";
111 if( directory != "" ) XMLName = directory + "/" + XMLName;
112
113 ofstream xml( XMLName.c_str() );
114
115 // Add the time
116 xml << "<!--" << std::endl;
117 xml << "This xml file created automatically on: " << std::endl;
118 // LM: use TTimeStamp since time_t does not work on Windows
119 TTimeStamp t;
120 UInt_t year = 0;
121 UInt_t month = 0;
122 UInt_t day = 0;
123 t.GetDate(true, 0, &year, &month, &day);
124 xml << year << '-'
125 << month << '-'
126 << day
127 << std::endl;
128 xml << "-->" << std::endl;
129
130 // Add the DOCTYPE
131 xml << "<!DOCTYPE Channel SYSTEM 'HistFactorySchema.dtd'> " << std::endl << std::endl;
132
133 // Add the Channel
134 xml << " <Channel Name=\"" << fName << "\" InputFile=\"" << fInputFile << "\" >" << std::endl << std::endl;
135
136 fData.PrintXML( xml );
137 /*
138 xml << " <Data HistoName=\"" << fData.GetHistoName() << "\" "
139 << "InputFile=\"" << fData.GetInputFile() << "\" "
140 << "HistoPath=\"" << fData.GetHistoPath() << "\" "
141 << " /> " << std::endl << std::endl;
142 */
143
144 fStatErrorConfig.PrintXML( xml );
145 /*
146 xml << " <StatErrorConfig RelErrorThreshold=\"" << fStatErrorConfig.GetRelErrorThreshold() << "\" "
147 << "ConstraintType=\"" << Constraint::Name( fStatErrorConfig.GetConstraintType() ) << "\" "
148 << "/> " << std::endl << std::endl;
149 */
150
151 for( unsigned int i = 0; i < fSamples.size(); ++i ) {
152 fSamples.at(i).PrintXML( xml );
153 xml << std::endl << std::endl;
154 }
155
156 xml << std::endl;
157 xml << " </Channel> " << std::endl;
158 xml.close();
159
160 cxcoutPHF << "Finished printing XML files" << std::endl;
161
162}
163
164
165
166void RooStats::HistFactory::Channel::SetData( std::string DataHistoName, std::string DataInputFile, std::string DataHistoPath ) {
167 // set data for this channel by specifying the name of the histogram,
168 // the external ROOT file and the path to the histogram inside the ROOT file
169
170 fData.SetHistoName( DataHistoName );
171 fData.SetInputFile( DataInputFile );
172 fData.SetHistoPath( DataHistoPath );
173
174}
175
176
177
179 // set data directly to some histogram
180 fData.SetHisto( hData );
181}
182
184
185 // For a NumberCounting measurement only
186 // Set the value of data in a particular channel
187 //
188 // Internally, this simply creates a 1-bin TH1F for you
189
190 std::string DataHistName = fName + "_data";
191
192 // Histogram has 1-bin (hard-coded)
193 TH1F* hData = new TH1F( DataHistName.c_str(), DataHistName.c_str(), 1, 0, 1 );
194 hData->SetBinContent( 1, val );
195
196 // Set the histogram of the internally held data
197 // node of this channel to this newly created histogram
198 SetData( hData );
199
200}
201
202
203void RooStats::HistFactory::Channel::SetStatErrorConfig( double StatRelErrorThreshold, Constraint::Type StatConstraintType ) {
204
205 fStatErrorConfig.SetRelErrorThreshold( StatRelErrorThreshold );
206 fStatErrorConfig.SetConstraintType( StatConstraintType );
207
208}
209
210void RooStats::HistFactory::Channel::SetStatErrorConfig( double StatRelErrorThreshold, std::string StatConstraintType ) {
211
212 fStatErrorConfig.SetRelErrorThreshold( StatRelErrorThreshold );
213 fStatErrorConfig.SetConstraintType( Constraint::GetType(StatConstraintType) );
214
215}
216
217
218
220
221 // Loop through all Samples and Systematics
222 // and collect all necessary histograms
223
224 // Handles to open files for collecting histograms
225 std::map<std::string,std::unique_ptr<TFile>> fileHandles;
226
227 // Get the Data Histogram:
228
229 if( fData.GetInputFile() != "" ) {
230 fData.SetHisto( GetHistogram(fData.GetInputFile(),
231 fData.GetHistoPath(),
232 fData.GetHistoName(),
233 fileHandles) );
234 }
235
236 // Collect any histograms for additional Datasets
237 for( unsigned int i=0; i < fAdditionalData.size(); ++i) {
238 RooStats::HistFactory::Data& data = fAdditionalData.at(i);
239 if( data.GetInputFile() != "" ) {
240 data.SetHisto( GetHistogram(data.GetInputFile(), data.GetHistoPath(), data.GetHistoName(), fileHandles) );
241 }
242 }
243
244 // Get the histograms for the samples:
245 for( unsigned int sampItr = 0; sampItr < fSamples.size(); ++sampItr ) {
246
247 RooStats::HistFactory::Sample& sample = fSamples.at( sampItr );
248
249
250 // Get the nominal histogram:
251 cxcoutDHF << "Collecting Nominal Histogram" << std::endl;
252 TH1* Nominal = GetHistogram(sample.GetInputFile(),
253 sample.GetHistoPath(),
254 sample.GetHistoName(),
255 fileHandles);
256
257 sample.SetHisto( Nominal );
258
259
260 // Get the StatError Histogram (if necessary)
261 if( sample.GetStatError().GetUseHisto() ) {
262 sample.GetStatError().SetErrorHist( GetHistogram(sample.GetStatError().GetInputFile(),
263 sample.GetStatError().GetHistoPath(),
264 sample.GetStatError().GetHistoName(),
265 fileHandles) );
266 }
267
268
269 // Get the HistoSys Variations:
270 for( unsigned int histoSysItr = 0; histoSysItr < sample.GetHistoSysList().size(); ++histoSysItr ) {
271
272 RooStats::HistFactory::HistoSys& histoSys = sample.GetHistoSysList().at( histoSysItr );
273
274 histoSys.SetHistoLow( GetHistogram(histoSys.GetInputFileLow(),
275 histoSys.GetHistoPathLow(),
276 histoSys.GetHistoNameLow(),
277 fileHandles) );
278
279 histoSys.SetHistoHigh( GetHistogram(histoSys.GetInputFileHigh(),
280 histoSys.GetHistoPathHigh(),
281 histoSys.GetHistoNameHigh(),
282 fileHandles) );
283 } // End Loop over HistoSys
284
285
286 // Get the HistoFactor Variations:
287 for( unsigned int histoFactorItr = 0; histoFactorItr < sample.GetHistoFactorList().size(); ++histoFactorItr ) {
288
289 RooStats::HistFactory::HistoFactor& histoFactor = sample.GetHistoFactorList().at( histoFactorItr );
290
291 histoFactor.SetHistoLow( GetHistogram(histoFactor.GetInputFileLow(),
292 histoFactor.GetHistoPathLow(),
293 histoFactor.GetHistoNameLow(),
294 fileHandles) );
295
296 histoFactor.SetHistoHigh( GetHistogram(histoFactor.GetInputFileHigh(),
297 histoFactor.GetHistoPathHigh(),
298 histoFactor.GetHistoNameHigh(),
299 fileHandles) );
300 } // End Loop over HistoFactor
301
302
303 // Get the ShapeSys Variations:
304 for( unsigned int shapeSysItr = 0; shapeSysItr < sample.GetShapeSysList().size(); ++shapeSysItr ) {
305
306 RooStats::HistFactory::ShapeSys& shapeSys = sample.GetShapeSysList().at( shapeSysItr );
307
308 shapeSys.SetErrorHist( GetHistogram(shapeSys.GetInputFile(),
309 shapeSys.GetHistoPath(),
310 shapeSys.GetHistoName(),
311 fileHandles) );
312 } // End Loop over ShapeSys
313
314
315 // Get any initial shape for a ShapeFactor
316 for( unsigned int shapeFactorItr = 0; shapeFactorItr < sample.GetShapeFactorList().size(); ++shapeFactorItr ) {
317
318 RooStats::HistFactory::ShapeFactor& shapeFactor = sample.GetShapeFactorList().at( shapeFactorItr );
319
320 // Check if we need an InitialShape
321 if( shapeFactor.HasInitialShape() ) {
322 TH1* hist = GetHistogram( shapeFactor.GetInputFile(), shapeFactor.GetHistoPath(),
323 shapeFactor.GetHistoName(), fileHandles );
324 shapeFactor.SetInitialShape( hist );
325 }
326
327 } // End Loop over ShapeFactor
328
329 } // End Loop over Samples
330}
331
332
334
335 // Check that all internal histogram pointers
336 // are properly configured (ie that they're not NULL)
337
338 try {
339
340 if( fData.GetHisto() == NULL && fData.GetInputFile() != "" ) {
341 cxcoutEHF << "Error: Data Histogram for channel " << GetName() << " is NULL." << std::endl;
342 throw hf_exc();
343 }
344
345 // Get the histograms for the samples:
346 for( unsigned int sampItr = 0; sampItr < fSamples.size(); ++sampItr ) {
347
348 RooStats::HistFactory::Sample& sample = fSamples.at( sampItr );
349
350 // Get the nominal histogram:
351 if( sample.GetHisto() == NULL ) {
352 cxcoutEHF << "Error: Nominal Histogram for sample " << sample.GetName() << " is NULL." << std::endl;
353 throw hf_exc();
354 }
355 else {
356
357 // Check if any bins are negative
358 std::vector<int> NegativeBinNumber;
359 std::vector<double> NegativeBinContent;
360 const TH1* histNominal = sample.GetHisto();
361 for(int ibin=1; ibin<=histNominal->GetNbinsX(); ++ibin) {
362 if(histNominal->GetBinContent(ibin) < 0) {
363 NegativeBinNumber.push_back(ibin);
364 NegativeBinContent.push_back(histNominal->GetBinContent(ibin));
365 }
366 }
367 if(NegativeBinNumber.size()>0) {
368 cxcoutWHF << "WARNING: Nominal Histogram " << histNominal->GetName() << " for Sample = " << sample.GetName()
369 << " in Channel = " << GetName() << " has negative entries in bin numbers = ";
370
371 for(unsigned int ibin=0; ibin<NegativeBinNumber.size(); ++ibin) {
372 if(ibin>0) std::cout << " , " ;
373 std::cout << NegativeBinNumber[ibin] << " : " << NegativeBinContent[ibin] ;
374 }
375 std::cout << std::endl;
376 }
377
378 }
379
380 // Get the StatError Histogram (if necessary)
381 if( sample.GetStatError().GetUseHisto() ) {
382 if( sample.GetStatError().GetErrorHist() == NULL ) {
383 cxcoutEHF << "Error: Statistical Error Histogram for sample " << sample.GetName() << " is NULL." << std::endl;
384 throw hf_exc();
385 }
386 }
387
388
389 // Get the HistoSys Variations:
390 for( unsigned int histoSysItr = 0; histoSysItr < sample.GetHistoSysList().size(); ++histoSysItr ) {
391
392 RooStats::HistFactory::HistoSys& histoSys = sample.GetHistoSysList().at( histoSysItr );
393
394 if( histoSys.GetHistoLow() == NULL ) {
395 cxcoutEHF << "Error: HistoSyst Low for Systematic " << histoSys.GetName()
396 << " in sample " << sample.GetName() << " is NULL." << std::endl;
397 throw hf_exc();
398 }
399 if( histoSys.GetHistoHigh() == NULL ) {
400 cxcoutEHF << "Error: HistoSyst High for Systematic " << histoSys.GetName()
401 << " in sample " << sample.GetName() << " is NULL." << std::endl;
402 throw hf_exc();
403 }
404
405 } // End Loop over HistoSys
406
407
408 // Get the HistoFactor Variations:
409 for( unsigned int histoFactorItr = 0; histoFactorItr < sample.GetHistoFactorList().size(); ++histoFactorItr ) {
410
411 RooStats::HistFactory::HistoFactor& histoFactor = sample.GetHistoFactorList().at( histoFactorItr );
412
413 if( histoFactor.GetHistoLow() == NULL ) {
414 cxcoutEHF << "Error: HistoSyst Low for Systematic " << histoFactor.GetName()
415 << " in sample " << sample.GetName() << " is NULL." << std::endl;
416 throw hf_exc();
417 }
418 if( histoFactor.GetHistoHigh() == NULL ) {
419 cxcoutEHF << "Error: HistoSyst High for Systematic " << histoFactor.GetName()
420 << " in sample " << sample.GetName() << " is NULL." << std::endl;
421 throw hf_exc();
422 }
423
424 } // End Loop over HistoFactor
425
426
427 // Get the ShapeSys Variations:
428 for( unsigned int shapeSysItr = 0; shapeSysItr < sample.GetShapeSysList().size(); ++shapeSysItr ) {
429
430 RooStats::HistFactory::ShapeSys& shapeSys = sample.GetShapeSysList().at( shapeSysItr );
431
432 if( shapeSys.GetErrorHist() == NULL ) {
433 cxcoutEHF << "Error: HistoSyst High for Systematic " << shapeSys.GetName()
434 << " in sample " << sample.GetName() << " is NULL." << std::endl;
435 throw hf_exc();
436 }
437
438 } // End Loop over ShapeSys
439
440 } // End Loop over Samples
441
442 }
443 catch(std::exception& e)
444 {
445 std::cout << e.what() << std::endl;
446 return false;
447 }
448
449 return true;
450
451
452
453
454}
455
456
457
458/// Open a file and copy a histogram
459/// \param InputFile File where the histogram resides.
460/// \param HistoPath Path of the histogram in the file.
461/// \param HistoName Name of the histogram to retrieve.
462/// \param lsof List of open files. Helps to prevent opening and closing a file hundreds of times.
463TH1* RooStats::HistFactory::Channel::GetHistogram(std::string InputFile, std::string HistoPath, std::string HistoName, std::map<std::string,std::unique_ptr<TFile>>& lsof) {
464
465 cxcoutPHF << "Getting histogram " << InputFile << ":" << HistoPath << "/" << HistoName << std::endl;
466
467 auto& inFile = lsof[InputFile];
468 if (!inFile || !inFile->IsOpen()) {
469 inFile.reset( TFile::Open(InputFile.c_str()) );
470 if ( !inFile || !inFile->IsOpen() ) {
471 cxcoutEHF << "Error: Unable to open input file: " << InputFile << std::endl;
472 throw hf_exc();
473 }
474 cxcoutIHF << "Opened input file: " << InputFile << ": " << std::endl;
475 }
476
477 TDirectory* dir = inFile->GetDirectory(HistoPath.c_str());
478 if (dir == nullptr) {
479 cxcoutEHF << "Histogram path '" << HistoPath
480 << "' wasn't found in file '" << InputFile << "'." << std::endl;
481 throw hf_exc();
482 }
483
484 // Have to read histograms via keys, to ensure that the latest-greatest
485 // name cycle is read from file. Otherwise, they might come from memory.
486 auto key = dir->GetKey(HistoName.c_str());
487 if (key == nullptr) {
488 cxcoutEHF << "Histogram '" << HistoName
489 << "' wasn't found in file '" << InputFile
490 << "' in directory '" << HistoPath << "'." << std::endl;
491 throw hf_exc();
492 }
493
494 auto hist = dynamic_cast<TH1*>(key->ReadObj());
495 if( !hist ) {
496 cxcoutEHF << "Histogram '" << HistoName
497 << "' wasn't found in file '" << InputFile
498 << "' in directory '" << HistoPath << "'." << std::endl;
499 throw hf_exc();
500 }
501
502
503 TH1 * ptr = (TH1 *) hist->Clone();
504
505 if(!ptr){
506 std::cerr << "Not all necessary info are set to access the input file. Check your config" << std::endl;
507 std::cerr << "filename: " << InputFile
508 << "path: " << HistoPath
509 << "obj: " << HistoName << std::endl;
510 throw hf_exc();
511 }
512
513 ptr->SetDirectory(nullptr);
514
515
516#ifdef DEBUG
517 std::cout << "Found Histogram: " << HistoName " at address: " << ptr
518 << " with integral " << ptr->Integral() << " and mean " << ptr->GetMean()
519 << std::endl;
520#endif
521
522 // Done
523 return ptr;
524
525}
#define cxcoutPHF
Definition: HFMsgService.h:18
#define cxcoutDHF
Definition: HFMsgService.h:16
#define cxcoutIHF
Definition: HFMsgService.h:17
#define cxcoutWHF
Definition: HFMsgService.h:19
#define cxcoutEHF
Definition: HFMsgService.h:20
#define e(i)
Definition: RSha256.hxx:103
This class encapsulates all information for the statistical interpretation of one experiment.
Definition: Channel.h:29
void Print(std::ostream &=std::cout)
Definition: Channel.cxx:75
void PrintXML(std::string Directory, std::string Prefix="")
Definition: Channel.cxx:105
void SetData(const RooStats::HistFactory::Data &data)
set data object
Definition: Channel.h:53
void AddSample(RooStats::HistFactory::Sample sample)
Definition: Channel.cxx:67
TH1 * GetHistogram(std::string InputFile, std::string HistoPath, std::string HistoName, std::map< std::string, std::unique_ptr< TFile > > &lsof)
Open a file and copy a histogram.
Definition: Channel.cxx:463
void SetStatErrorConfig(double RelErrorThreshold, Constraint::Type ConstraintType)
Definition: Channel.cxx:203
void SetHisto(TH1 *Hist)
Definition: Data.h:50
std::string GetInputFile()
Definition: Data.h:37
std::string GetHistoName()
Definition: Data.h:40
std::string GetHistoPath()
Definition: Data.h:43
Configuration for an *un*constrained, coherent shape variation of affected samples.
Definition: Systematics.h:215
Configuration for a constrained, coherent shape variation of affected samples.
Definition: Systematics.h:205
const std::string & GetHistoNameHigh() const
Definition: Systematics.h:175
const std::string & GetHistoNameLow() const
Definition: Systematics.h:174
const std::string & GetHistoPathLow() const
Definition: Systematics.h:180
const std::string & GetInputFileHigh() const
Definition: Systematics.h:169
const std::string & GetInputFileLow() const
Definition: Systematics.h:168
const std::string & GetHistoPathHigh() const
Definition: Systematics.h:181
std::string GetHistoName() const
get histogram name
Definition: Sample.h:93
std::string GetName() const
get name of sample
Definition: Sample.h:83
const TH1 * GetHisto() const
Definition: Sample.cxx:99
void SetChannelName(const std::string &ChannelName)
set name of associated channel
Definition: Sample.h:105
void SetHisto(TH1 *histo)
Definition: Sample.h:46
std::string GetHistoPath() const
get histogram path
Definition: Sample.h:98
RooStats::HistFactory::StatError & GetStatError()
Definition: Sample.h:118
std::vector< RooStats::HistFactory::ShapeFactor > & GetShapeFactorList()
Definition: Sample.h:116
std::vector< RooStats::HistFactory::HistoFactor > & GetHistoFactorList()
Definition: Sample.h:113
std::string GetInputFile() const
get input ROOT file
Definition: Sample.h:88
std::vector< RooStats::HistFactory::HistoSys > & GetHistoSysList()
Definition: Sample.h:112
std::vector< RooStats::HistFactory::ShapeSys > & GetShapeSysList()
Definition: Sample.h:115
*Un*constrained bin-by-bin variation of affected histogram.
Definition: Systematics.h:267
const std::string & GetHistoPath() const
Definition: Systematics.h:306
const std::string & GetInputFile() const
Definition: Systematics.h:294
const std::string & GetHistoName() const
Definition: Systematics.h:300
Constrained bin-by-bin variation of affected histogram.
Definition: Systematics.h:225
std::string GetHistoPath() const
Definition: Systematics.h:243
const TH1 * GetErrorHist() const
Definition: Systematics.h:249
std::string GetHistoName() const
Definition: Systematics.h:240
std::string GetInputFile() const
Definition: Systematics.h:237
void SetErrorHist(TH1 *hError)
Definition: Systematics.h:252
const std::string & GetHistoPath() const
Definition: Systematics.h:346
const TH1 * GetErrorHist() const
Definition: Systematics.h:349
const std::string & GetInputFile() const
Definition: Systematics.h:340
const std::string & GetHistoName() const
Definition: Systematics.h:343
Describe directory structure in memory.
Definition: TDirectory.h:40
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
Definition: TDirectory.cxx:401
virtual TKey * GetKey(const char *, Short_t=9999) const
Definition: TDirectory.h:164
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Definition: TFile.cxx:3942
1-D histogram with a float per channel (see TH1 documentation)}
Definition: TH1.h:571
The TH1 histogram class.
Definition: TH1.h:56
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
Definition: TH1.cxx:8393
virtual Double_t GetMean(Int_t axis=1) const
For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
Definition: TH1.cxx:7086
TObject * Clone(const char *newname=0) const
Make a complete copy of the underlying object.
Definition: TH1.cxx:2665
virtual Int_t GetNbinsX() const
Definition: TH1.h:292
virtual Double_t Integral(Option_t *option="") const
Return integral of bin contents.
Definition: TH1.cxx:7450
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
Definition: TH1.cxx:8678
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
Definition: TH1.cxx:4907
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:47
The TTimeStamp encapsulates seconds and ns since EPOCH.
Definition: TTimeStamp.h:71
UInt_t GetDate(Bool_t inUTC=kTRUE, Int_t secOffset=0, UInt_t *year=0, UInt_t *month=0, UInt_t *day=0) const
Return date in form of 19971224 (i.e.
Definition: TTimeStamp.cxx:353
@ HistFactory
Definition: RooGlobalFunc.h:69
Type GetType(const std::string &Name)
Definition: Systematics.cxx:34
Namespace for the RooStats classes.
Definition: Asimov.h:19