ROOT  6.07/01
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DataSetInfo.cxx
Go to the documentation of this file.
1 // @(#)root/tmva $Id$
2 // Author: Joerg Stelzer, Peter Speckmeier
3 
4 /**********************************************************************************
5  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6  * Package: TMVA *
7  * Class : DataSetInfo *
8  * Web : http://tmva.sourceforge.net *
9  * *
10  * Description: *
11  * Implementation (see header for description) *
12  * *
13  * Authors (alphabetical): *
14  * Peter Speckmayer <speckmay@mail.cern.ch> - CERN, Switzerland *
15  * Joerg Stelzer <Joerg.Stelzer@cern.ch> - DESY, Germany *
16  * *
17  * Copyright (c) 2008: *
18  * CERN, Switzerland *
19  * MPI-K Heidelberg, Germany *
20  * DESY Hamburg, Germany *
21  * *
22  * Redistribution and use in source and binary forms, with or without *
23  * modification, are permitted according to the terms listed in LICENSE *
24  * (http://tmva.sourceforge.net/LICENSE) *
25  **********************************************************************************/
26 
27 #include <vector>
28 
29 #include "TEventList.h"
30 #include "TFile.h"
31 #include "TH1.h"
32 #include "TH2.h"
33 #include "TProfile.h"
34 #include "TRandom3.h"
35 #include "TMatrixF.h"
36 #include "TVectorF.h"
37 #include "TMath.h"
38 #include "TROOT.h"
39 #include "TObjString.h"
40 
41 #ifndef ROOT_TMVA_MsgLogger
42 #include "TMVA/MsgLogger.h"
43 #endif
44 #ifndef ROOT_TMVA_Tools
45 #include "TMVA/Tools.h"
46 #endif
47 #ifndef ROOT_TMVA_DataSet
48 #include "TMVA/DataSet.h"
49 #endif
50 #ifndef ROOT_TMVA_DataSetInfo
51 #include "TMVA/DataSetInfo.h"
52 #endif
53 #ifndef ROOT_TMVA_DataSetManager
54 #include "TMVA/DataSetManager.h"
55 #endif
56 #ifndef ROOT_TMVA_Event
57 #include "TMVA/Event.h"
58 #endif
59 
60 #include "TMVA/Types.h"
61 #include "TMVA/VariableInfo.h"
62 
63 ////////////////////////////////////////////////////////////////////////////////
64 /// constructor
65 
67  : TObject(),
68  fDataSetManager(NULL),
69  fName(name),
70  fDataSet( 0 ),
71  fNeedsRebuilding( kTRUE ),
72  fVariables(),
73  fTargets(),
74  fSpectators(),
75  fClasses( 0 ),
76  fNormalization( "NONE" ),
77  fSplitOptions(""),
78  fTrainingSumSignalWeights(-1),
79  fTrainingSumBackgrWeights(-1),
80  fTestingSumSignalWeights (-1),
81  fTestingSumBackgrWeights (-1),
82  fOwnRootDir(0),
83  fVerbose( kFALSE ),
84  fSignalClass(0),
85  fTargetsForMulticlass(0),
86  fLogger( new MsgLogger("DataSetInfo", kINFO) )
87 {
88 }
89 
90 ////////////////////////////////////////////////////////////////////////////////
91 /// destructor
92 
94 {
95  ClearDataSet();
96 
97  for(UInt_t i=0, iEnd = fClasses.size(); i<iEnd; ++i) {
98  delete fClasses[i];
99  }
100 
101  delete fTargetsForMulticlass;
102 
103  delete fLogger;
104 }
105 
106 ////////////////////////////////////////////////////////////////////////////////
107 
109 {
110  if(fDataSet!=0) { delete fDataSet; fDataSet=0; }
111 }
112 
113 void
115 {
116  fLogger->SetMinType(t);
117 }
118 
119 ////////////////////////////////////////////////////////////////////////////////
120 
122 {
123  ClassInfo* theClass = GetClassInfo(className);
124  if (theClass) return theClass;
125 
126  fClasses.push_back( new ClassInfo(className) );
127  fClasses.back()->SetNumber(fClasses.size()-1);
128 
129  Log() << kINFO << "Added class \"" << className << "\"\t with internal class number "
130  << fClasses.back()->GetNumber() << Endl;
131 
132  if (className == "Signal") fSignalClass = fClasses.size()-1; // store the signal class index ( for comparison reasons )
133 
134  return fClasses.back();
135 }
136 
137 ////////////////////////////////////////////////////////////////////////////////
138 
140 {
141  for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); it++) {
142  if ((*it)->GetName() == name) return (*it);
143  }
144  return 0;
145 }
146 
147 ////////////////////////////////////////////////////////////////////////////////
148 
150 {
151  try {
152  return fClasses.at(cls);
153  }
154  catch(...) {
155  return 0;
156  }
157 }
158 
159 ////////////////////////////////////////////////////////////////////////////////
160 
162 {
163  for (UInt_t cls = 0; cls < GetNClasses() ; cls++) {
164  Log() << kINFO << "Class index : " << cls << " name : " << GetClassInfo(cls)->GetName() << Endl;
165  }
166 }
167 
168 ////////////////////////////////////////////////////////////////////////////////
169 
171 {
172  return (ev->GetClass() == fSignalClass);
173 }
174 
175 ////////////////////////////////////////////////////////////////////////////////
176 
177 std::vector<Float_t>* TMVA::DataSetInfo::GetTargetsForMulticlass( const TMVA::Event* ev )
178 {
179  if( !fTargetsForMulticlass ) fTargetsForMulticlass = new std::vector<Float_t>( GetNClasses() );
180 // fTargetsForMulticlass->resize( GetNClasses() );
181  fTargetsForMulticlass->assign( GetNClasses(), 0.0 );
182  fTargetsForMulticlass->at( ev->GetClass() ) = 1.0;
183  return fTargetsForMulticlass;
184 }
185 
186 
187 ////////////////////////////////////////////////////////////////////////////////
188 
190 {
191  Bool_t hasCuts = kFALSE;
192  for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); it++) {
193  if( TString((*it)->GetCut()) != TString("") ) hasCuts = kTRUE;
194  }
195  return hasCuts;
196 }
197 
198 ////////////////////////////////////////////////////////////////////////////////
199 
200 const TMatrixD* TMVA::DataSetInfo::CorrelationMatrix( const TString& className ) const
201 {
202  ClassInfo* ptr = GetClassInfo(className);
203  return ptr?ptr->GetCorrelationMatrix():0;
204 }
205 
206 ////////////////////////////////////////////////////////////////////////////////
207 /// add a variable (can be a complex expression) to the set of
208 /// variables used in the MV analysis
209 
211  const TString& title,
212  const TString& unit,
214  char varType,
215  Bool_t normalized,
216  void* external )
217 {
218  TString regexpr = expression; // remove possible blanks
219  regexpr.ReplaceAll(" ", "" );
220  fVariables.push_back(VariableInfo( regexpr, title, unit,
221  fVariables.size()+1, varType, external, min, max, normalized ));
222  fNeedsRebuilding = kTRUE;
223  return fVariables.back();
224 }
225 
226 ////////////////////////////////////////////////////////////////////////////////
227 /// add variable with given VariableInfo
228 
230  fVariables.push_back(VariableInfo( varInfo ));
231  fNeedsRebuilding = kTRUE;
232  return fVariables.back();
233 }
234 
235 ////////////////////////////////////////////////////////////////////////////////
236 /// add a variable (can be a complex expression) to the set of
237 /// variables used in the MV analysis
238 
240  const TString& title,
241  const TString& unit,
243  Bool_t normalized,
244  void* external )
245 {
246  TString regexpr = expression; // remove possible blanks
247  regexpr.ReplaceAll(" ", "" );
248  char type='F';
249  fTargets.push_back(VariableInfo( regexpr, title, unit,
250  fTargets.size()+1, type, external, min,
251  max, normalized ));
252  fNeedsRebuilding = kTRUE;
253  return fTargets.back();
254 }
255 
256 ////////////////////////////////////////////////////////////////////////////////
257 /// add target with given VariableInfo
258 
260  fTargets.push_back(VariableInfo( varInfo ));
261  fNeedsRebuilding = kTRUE;
262  return fTargets.back();
263 }
264 
265 ////////////////////////////////////////////////////////////////////////////////
266 /// add a spectator (can be a complex expression) to the set of spectator variables used in
267 /// the MV analysis
268 
270  const TString& title,
271  const TString& unit,
272  Double_t min, Double_t max, char type,
273  Bool_t normalized, void* external )
274 {
275  TString regexpr = expression; // remove possible blanks
276  regexpr.ReplaceAll(" ", "" );
277  fSpectators.push_back(VariableInfo( regexpr, title, unit,
278  fSpectators.size()+1, type, external, min, max, normalized ));
279  fNeedsRebuilding = kTRUE;
280  return fSpectators.back();
281 }
282 
283 ////////////////////////////////////////////////////////////////////////////////
284 /// add spectator with given VariableInfo
285 
287  fSpectators.push_back(VariableInfo( varInfo ));
288  fNeedsRebuilding = kTRUE;
289  return fSpectators.back();
290 }
291 
292 ////////////////////////////////////////////////////////////////////////////////
293 /// find variable by name
294 
296 {
297  for (UInt_t ivar=0; ivar<GetNVariables(); ivar++)
298  if (var == GetVariableInfo(ivar).GetInternalName()) return ivar;
299 
300  for (UInt_t ivar=0; ivar<GetNVariables(); ivar++)
301  Log() << kINFO << GetVariableInfo(ivar).GetInternalName() << Endl;
302 
303  Log() << kFATAL << "<FindVarIndex> Variable \'" << var << "\' not found." << Endl;
304 
305  return -1;
306 }
307 
308 ////////////////////////////////////////////////////////////////////////////////
309 /// set the weight expressions for the classes
310 /// if class name is specified, set only for this class
311 /// if class name is unknown, register new class with this name
312 
313 void TMVA::DataSetInfo::SetWeightExpression( const TString& expr, const TString& className )
314 {
315  if (className != "") {
316  TMVA::ClassInfo* ci = AddClass(className);
317  ci->SetWeight( expr );
318  }
319  else {
320  // no class name specified, set weight for all classes
321  if (fClasses.empty()) {
322  Log() << kWARNING << "No classes registered yet, cannot specify weight expression!" << Endl;
323  }
324  for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); it++) {
325  (*it)->SetWeight( expr );
326  }
327  }
328 }
329 
330 ////////////////////////////////////////////////////////////////////////////////
331 
332 void TMVA::DataSetInfo::SetCorrelationMatrix( const TString& className, TMatrixD* matrix )
333 {
334  GetClassInfo(className)->SetCorrelationMatrix(matrix);
335 }
336 
337 ////////////////////////////////////////////////////////////////////////////////
338 /// set the cut for the classes
339 
340 void TMVA::DataSetInfo::SetCut( const TCut& cut, const TString& className )
341 {
342  if (className == "") { // if no className has been given set the cut for all the classes
343  for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); it++) {
344  (*it)->SetCut( cut );
345  }
346  }
347  else {
348  TMVA::ClassInfo* ci = AddClass(className);
349  ci->SetCut( cut );
350  }
351 }
352 
353 ////////////////////////////////////////////////////////////////////////////////
354 /// set the cut for the classes
355 
356 void TMVA::DataSetInfo::AddCut( const TCut& cut, const TString& className )
357 {
358  if (className == "") { // if no className has been given set the cut for all the classes
359  for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); it++) {
360  const TCut& oldCut = (*it)->GetCut();
361  (*it)->SetCut( oldCut+cut );
362  }
363  }
364  else {
365  TMVA::ClassInfo* ci = AddClass(className);
366  ci->SetCut( ci->GetCut()+cut );
367  }
368 }
369 
370 ////////////////////////////////////////////////////////////////////////////////
371 /// returns list of variables
372 
373 std::vector<TString> TMVA::DataSetInfo::GetListOfVariables() const
374 {
375  std::vector<TString> vNames;
376  std::vector<TMVA::VariableInfo>::const_iterator viIt = GetVariableInfos().begin();
377  for(;viIt != GetVariableInfos().end(); viIt++) vNames.push_back( (*viIt).GetExpression() );
378 
379  return vNames;
380 }
381 
382 ////////////////////////////////////////////////////////////////////////////////
383 /// calculates the correlation matrices for signal and background,
384 /// prints them to standard output, and fills 2D histograms
385 
387 {
388  Log() << kINFO << "Correlation matrix (" << className << "):" << Endl;
389  gTools().FormattedOutput( *CorrelationMatrix( className ), GetListOfVariables(), Log() );
390 }
391 
392 ////////////////////////////////////////////////////////////////////////////////
393 
395  const TString& hName,
396  const TString& hTitle ) const
397 {
398  if (m==0) return 0;
399 
400  const UInt_t nvar = GetNVariables();
401 
402  // workaround till the TMatrix templates are comonly used
403  // this keeps backward compatibility
404  TMatrixF* tm = new TMatrixF( nvar, nvar );
405  for (UInt_t ivar=0; ivar<nvar; ivar++) {
406  for (UInt_t jvar=0; jvar<nvar; jvar++) {
407  (*tm)(ivar, jvar) = (*m)(ivar,jvar);
408  }
409  }
410 
411  TH2F* h2 = new TH2F( *tm );
412  h2->SetNameTitle( hName, hTitle );
413 
414  for (UInt_t ivar=0; ivar<nvar; ivar++) {
415  h2->GetXaxis()->SetBinLabel( ivar+1, GetVariableInfo(ivar).GetTitle() );
416  h2->GetYaxis()->SetBinLabel( ivar+1, GetVariableInfo(ivar).GetTitle() );
417  }
418 
419  // present in percent, and round off digits
420  // also, use absolute value of correlation coefficient (ignore sign)
421  h2->Scale( 100.0 );
422  for (UInt_t ibin=1; ibin<=nvar; ibin++) {
423  for (UInt_t jbin=1; jbin<=nvar; jbin++) {
424  h2->SetBinContent( ibin, jbin, Int_t(h2->GetBinContent( ibin, jbin )) );
425  }
426  }
427 
428  // style settings
429  const Float_t labelSize = 0.055;
430  h2->SetStats( 0 );
431  h2->GetXaxis()->SetLabelSize( labelSize );
432  h2->GetYaxis()->SetLabelSize( labelSize );
433  h2->SetMarkerSize( 1.5 );
434  h2->SetMarkerColor( 0 );
435  h2->LabelsOption( "d" ); // diagonal labels on x axis
436  h2->SetLabelOffset( 0.011 );// label offset on x axis
437  h2->SetMinimum( -100.0 );
438  h2->SetMaximum( +100.0 );
439 
440  // -------------------------------------------------------------------------------------
441  // just in case one wants to change the position of the color palette axis
442  // -------------------------------------------------------------------------------------
443  // gROOT->SetStyle("Plain");
444  // TStyle* gStyle = gROOT->GetStyle( "Plain" );
445  // gStyle->SetPalette( 1, 0 );
446  // TPaletteAxis* paletteAxis
447  // = (TPaletteAxis*)h2->GetListOfFunctions()->FindObject( "palette" );
448  // -------------------------------------------------------------------------------------
449 
450  Log() << kDEBUG << "Created correlation matrix as 2D histogram: " << h2->GetName() << Endl;
451 
452  return h2;
453 }
454 
455 ////////////////////////////////////////////////////////////////////////////////
456 /// returns data set
457 
459 {
460  if (fDataSet==0 || fNeedsRebuilding) {
461  if(fDataSet!=0) ClearDataSet();
462 // fDataSet = DataSetManager::Instance().CreateDataSet(GetName()); //DSMTEST replaced by following lines
463  if( !fDataSetManager )
464  Log() << kFATAL << "DataSetManager has not been set in DataSetInfo (GetDataSet() )." << Endl;
465  fDataSet = fDataSetManager->CreateDataSet(GetName());
466 
467  fNeedsRebuilding = kFALSE;
468  }
469  return fDataSet;
470 }
471 
472 ////////////////////////////////////////////////////////////////////////////////
473 
475 {
476  if(all)
477  return fSpectators.size();
478  UInt_t nsp(0);
479  for(std::vector<VariableInfo>::const_iterator spit=fSpectators.begin(); spit!=fSpectators.end(); ++spit) {
480  if(spit->GetVarType()!='C') nsp++;
481  }
482  return nsp;
483 }
484 
485 ////////////////////////////////////////////////////////////////////////////////
486 
488 {
489  Int_t maxL = 0;
490  for (UInt_t cl = 0; cl < GetNClasses(); cl++) {
491  if (TString(GetClassInfo(cl)->GetName()).Length() > maxL) maxL = TString(GetClassInfo(cl)->GetName()).Length();
492  }
493 
494  return maxL;
495 }
496 
497 
499  if (fTrainingSumSignalWeights<0) Log() << kFATAL << " asking for the sum of training signal event weights which is not initicalised yet" << Endl;
500  return fTrainingSumSignalWeights;
501 }
503  if (fTrainingSumBackgrWeights<0) Log() << kFATAL << " asking for the sum of training backgr event weights which is not initicalised yet" << Endl;
504  return fTrainingSumBackgrWeights;
505 }
507  if (fTestingSumSignalWeights<0) Log() << kFATAL << " asking for the sum of testing signal event weights which is not initicalised yet" << Endl;
508  return fTestingSumSignalWeights ;
509 }
511  if (fTestingSumBackgrWeights<0) Log() << kFATAL << " asking for the sum of testing backgr event weights which is not initicalised yet" << Endl;
512  return fTestingSumBackgrWeights ;
513 }
514 
virtual void SetNameTitle(const char *name, const char *title)
Change the name and title of this histogram.
Definition: TH1.cxx:8303
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
Definition: TH1.cxx:6174
static Vc_ALWAYS_INLINE int_v min(const int_v &x, const int_v &y)
Definition: vector.h:433
MsgLogger & Endl(MsgLogger &ml)
Definition: MsgLogger.h:162
VariableInfo & AddTarget(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, Bool_t normalized=kTRUE, void *external=0)
add a variable (can be a complex expression) to the set of variables used in the MV analysis ...
virtual void SetMaximum(Double_t maximum=-1111)
Definition: TH1.h:394
virtual void LabelsOption(Option_t *option="h", Option_t *axis="X")
Set option(s) to draw axis with labels.
Definition: TH1.cxx:4901
Ssiz_t Length() const
Definition: TString.h:390
float Float_t
Definition: RtypesCore.h:53
void SetCut(const TCut &cut, const TString &className)
set the cut for the classes
TMatrixT< Float_t > TMatrixF
Definition: TMatrixFfwd.h:24
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:635
Int_t GetClassNameMaxLength() const
virtual void SetMinimum(Double_t minimum=-1111)
Definition: TH1.h:395
Basic string class.
Definition: TString.h:137
void AddClass(const char *cname, Version_t id, const type_info &info, DictFuncPtr_t dict, Int_t pragmabits)
Global function called by the ctor of a class's init class (see the ClassImp macro).
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
void AddCut(const TCut &cut, const TString &className)
set the cut for the classes
Double_t GetTrainingSumSignalWeights()
DataSet * GetDataSet() const
returns data set
Tools & gTools()
Definition: Tools.cxx:79
void SetWeight(const TString &weight)
Definition: ClassInfo.h:66
Bool_t IsSignal(const Event *ev) const
virtual ~DataSetInfo()
destructor
Definition: DataSetInfo.cxx:93
virtual void SetMarkerColor(Color_t mcolor=1)
Definition: TAttMarker.h:51
void PrintCorrelationMatrix(const TString &className)
calculates the correlation matrices for signal and background, prints them to standard output...
TH2D * h2
Definition: fit2dHist.C:45
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
Definition: TH2.h:90
DataSetInfo(const TString &name="Default")
constructor
Definition: DataSetInfo.cxx:66
A specialized string object used for TTree selections.
Definition: TCut.h:27
void SetMsgType(EMsgType t) const
void SetCorrelationMatrix(const TString &className, TMatrixD *matrix)
TThread * t[5]
Definition: threadsh1.C:13
Double_t GetTestingSumSignalWeights()
Service class for 2-Dim histogram classes.
Definition: TH2.h:36
TPaveLabel title(3, 27.1, 15, 28.7,"ROOT Environment and Tools")
2-D histogram with a float per channel (see TH1 documentation)}
Definition: TH2.h:256
ClassInfo * GetClassInfo(Int_t clNum) const
EMsgType
Definition: Types.h:61
const TMatrixD * GetCorrelationMatrix() const
Definition: ClassInfo.h:76
const TMatrixD * CorrelationMatrix(const TString &className) const
void SetWeightExpression(const TString &exp, const TString &className="")
set the weight expressions for the classes if class name is specified, set only for this class if cla...
unsigned int UInt_t
Definition: RtypesCore.h:42
TMarker * m
Definition: textangle.C:8
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
TAxis * GetYaxis()
Definition: TH1.h:320
const TCut & GetCut() const
Definition: ClassInfo.h:74
virtual void SetLabelSize(Float_t size=0.04)
Set size of axis labels The size is expressed in per cent of the pad width.
Definition: TAttAxis.cxx:187
virtual void SetMarkerSize(Size_t msize=1)
Definition: TAttMarker.h:54
void PrintClasses() const
TH2 * CreateCorrelationMatrixHist(const TMatrixD *m, const TString &hName, const TString &hTitle) const
double Double_t
Definition: RtypesCore.h:55
Double_t GetTrainingSumBackgrWeights()
int type
Definition: TGX11.cxx:120
void SetCut(const TCut &cut)
Definition: ClassInfo.h:67
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
Definition: TAxis.cxx:793
void ClearDataSet() const
ClassInfo * AddClass(const TString &className)
UInt_t GetClass() const
Definition: Event.h:86
static Vc_ALWAYS_INLINE int_v max(const int_v &x, const int_v &y)
Definition: vector.h:440
#define name(a, b)
Definition: linkTestLib0.cpp:5
void FormattedOutput(const std::vector< Double_t > &, const std::vector< TString > &, const TString titleVars, const TString titleValues, MsgLogger &logger, TString format="%+1.3f")
formatted output of simple table
Definition: Tools.cxx:896
Mother of all ROOT objects.
Definition: TObject.h:58
VariableInfo & AddSpectator(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, char type= 'F', Bool_t normalized=kTRUE, void *external=0)
add a spectator (can be a complex expression) to the set of spectator variables used in the MV analys...
UInt_t GetNSpectators(bool all=kTRUE) const
void SetNumber(const UInt_t index)
Definition: ClassInfo.h:68
Int_t FindVarIndex(const TString &) const
find variable by name
#define NULL
Definition: Rtypes.h:82
VariableInfo & AddVariable(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0, char varType='F', Bool_t normalized=kTRUE, void *external=0)
add a variable (can be a complex expression) to the set of variables used in the MV analysis ...
std::vector< TString > GetListOfVariables() const
returns list of variables
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content.
Definition: TH2.cxx:2699
const Bool_t kTRUE
Definition: Rtypes.h:91
Bool_t HasCuts() const
tuple all
Definition: na49view.py:13
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
Definition: TH1.cxx:8320
Double_t GetTestingSumBackgrWeights()
Definition: math.cpp:60
TAxis * GetXaxis()
Definition: TH1.h:319
std::vector< Float_t > * GetTargetsForMulticlass(const Event *ev)
virtual void SetLabelOffset(Float_t offset=0.005, Option_t *axis="X")
Set offset between axis and axis' labels.
Definition: Haxis.cxx:261