Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
Sample.h
Go to the documentation of this file.
1 // @(#)root/roostats:$Id$
2 // Author: George Lewis, Kyle Cranmer
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 HISTFACTORY_SAMPLE_H
12 #define HISTFACTORY_SAMPLE_H
13 
14 #include <string>
15 #include <fstream>
16 #include <vector>
17 #include <iostream>
18 
19 class TH1;
20 
23 
24 namespace RooStats{
25 namespace HistFactory {
26 
27 class Sample {
28 
29 
30 public:
31 
32  Sample();
33  Sample(std::string Name);
34  Sample(const Sample& other);
35  Sample& operator=(const Sample& other);
36  /// constructor from name, file and path. Name of the histogram should not include the path
37  Sample(std::string Name, std::string HistoName, std::string InputFile, std::string HistoPath="");
38  ~Sample();
39 
40  void Print(std::ostream& = std::cout) const;
41  void PrintXML( std::ofstream& xml );
42  void writeToFile( std::string FileName, std::string DirName );
43 
44  const TH1* GetHisto() const;
45  // set histogram for this sample
46  void SetHisto( TH1* histo ) { fhNominal = histo; fHistoName=histo->GetName(); }
47  void SetValue( Double_t Val );
48 
49  // Some helper functions
50  // Note that histogram name should not include the path of the histogram in the file.
51  // This has to be given separatly
52 
53  void ActivateStatError();
54  void ActivateStatError( std::string HistoName, std::string InputFile, std::string HistoPath="" );
55 
56  void AddOverallSys( std::string Name, Double_t Low, Double_t High );
57  void AddOverallSys( const OverallSys& Sys );
58 
59  void AddNormFactor( std::string Name, Double_t Val, Double_t Low, Double_t High, bool Const=false );
60  void AddNormFactor( const NormFactor& Factor );
61 
62  void AddHistoSys( std::string Name, std::string HistoNameLow, std::string HistoFileLow, std::string HistoPathLow,
63  std::string HistoNameHigh, std::string HistoFileHigh, std::string HistoPathHigh );
64  void AddHistoSys( const HistoSys& Sys );
65 
66  void AddHistoFactor( std::string Name, std::string HistoNameLow, std::string HistoFileLow, std::string HistoPathLow,
67  std::string HistoNameHigh, std::string HistoFileHigh, std::string HistoPathHigh );
68  void AddHistoFactor( const HistoFactor& Factor );
69 
70  void AddShapeFactor( std::string Name );
71  void AddShapeFactor( const ShapeFactor& Factor );
72 
73  void AddShapeSys( std::string Name, Constraint::Type ConstraintType, std::string HistoName, std::string HistoFile, std::string HistoPath="" );
74  void AddShapeSys( const ShapeSys& Sys );
75 
76  /// defines whether the normalization scale with luminosity
77  void SetNormalizeByTheory( bool norm ) { fNormalizeByTheory = norm; }
78  /// does the normalization scale with luminosity
79  bool GetNormalizeByTheory() const { return fNormalizeByTheory; }
80 
81 
82  /// get name of sample
83  std::string GetName() const { return fName; }
84  /// set name of sample
85  void SetName(const std::string& Name) { fName = Name; }
86 
87  /// get input ROOT file
88  std::string GetInputFile() const { return fInputFile; }
89  /// set input ROOT file
90  void SetInputFile(const std::string& InputFile) { fInputFile = InputFile; }
91 
92  /// get histogram name
93  std::string GetHistoName() const { return fHistoName; }
94  /// set histogram name
95  void SetHistoName(const std::string& HistoName) { fHistoName = HistoName; }
96 
97  /// get histogram path
98  std::string GetHistoPath() const { return fHistoPath; }
99  /// set histogram path
100  void SetHistoPath(const std::string& HistoPath) { fHistoPath = HistoPath; }
101 
102  /// get name of associated channel
103  std::string GetChannelName() const { return fChannelName; }
104  /// set name of associated channel
105  void SetChannelName(const std::string& ChannelName) { fChannelName = ChannelName; }
106 
107 
108 
109  std::vector< RooStats::HistFactory::OverallSys >& GetOverallSysList() { return fOverallSysList; }
110  std::vector< RooStats::HistFactory::NormFactor >& GetNormFactorList() { return fNormFactorList; }
111 
112  std::vector< RooStats::HistFactory::HistoSys >& GetHistoSysList() { return fHistoSysList; }
113  std::vector< RooStats::HistFactory::HistoFactor >& GetHistoFactorList() { return fHistoFactorList; }
114 
115  std::vector< RooStats::HistFactory::ShapeSys >& GetShapeSysList() { return fShapeSysList; }
116  std::vector< RooStats::HistFactory::ShapeFactor >& GetShapeFactorList() { return fShapeFactorList; }
117 
118  RooStats::HistFactory::StatError& GetStatError() { return fStatError; }
119  void SetStatError( RooStats::HistFactory::StatError Error ) {
120  fStatError = std::move(Error);
121  }
122 
123 
124 protected:
125 
126  std::string fName;
127  std::string fInputFile;
128  std::string fHistoName;
129  std::string fHistoPath;
130 
131  /// The Name of the parent channel
132  std::string fChannelName;
133 
134  //
135  // Systematics
136  //
137 
138  std::vector< RooStats::HistFactory::OverallSys > fOverallSysList;
139  std::vector< RooStats::HistFactory::NormFactor > fNormFactorList;
140 
141  std::vector< RooStats::HistFactory::HistoSys > fHistoSysList;
142  std::vector< RooStats::HistFactory::HistoFactor > fHistoFactorList;
143 
144  std::vector< RooStats::HistFactory::ShapeSys > fShapeSysList;
145  std::vector< RooStats::HistFactory::ShapeFactor > fShapeFactorList;
146 
147 
148  /// Properties
149  RooStats::HistFactory::StatError fStatError;
150 
151  bool fNormalizeByTheory;
152  bool fStatErrorActivate;
153 
154 
155  /// The Nominal Shape
156  HistRef fhNominal;
157  TH1* fhCountingHist;
158 
159 };
160 
161 
162 } // namespace HistFactory
163 } // namespace RooStats
164 
165 #endif