Logo ROOT   6.14/05
Reference Guide
LogInterval.cxx
Go to the documentation of this file.
1 /**********************************************************************************
2  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
3  * Package: TMVA *
4  * Class : Interval *
5  * Web : http://tmva.sourceforge.net *
6  * *
7  * Description: *
8  * Extension of the Interval to "logarithmic" intervals *
9  * *
10  * *
11  * *
12  * Authors (alphabetical): *
13  * Helge Voss <helge.voss@cern.ch> - MPI-K Heidelberg, Germany *
14  * *
15  * Copyright (c) 2005: *
16  * CERN, Switzerland *
17  * MPI-K Heidelberg, Germany *
18  * *
19  * Redistribution and use in source and binary forms, with or without *
20  * modification, are permitted according to the terms listed in LICENSE *
21  * (http://tmva.sourceforge.net/LICENSE) *
22  **********************************************************************************/
23 
24 /*! \class TMVA::LogInterval
25 \ingroup TMVA
26 
27 The TMVA::Interval Class.
28 
29  - LogInterval definition, continuous and discrete
30 
31  - LogInterval(min,max) : a continous interval [min,max]
32  - LogInterval(min,max,n): a "discrete interval" [min,max], i.e the n numbers:
33 
34  1,10,100,1000
35 
36  1,2,4,8,16,32,64,128,512,1024
37 
38  or alike ..
39 
40 ~~~ {.cpp}
41  Example:
42  LogInterval(1,10000,5)
43  i=0 --> 1 note: StepSize(ibin=0) = not defined !!
44  i=1 --> 10 StepSize(ibin=1) = 9
45  i=2 --> 100 StepSize(ibin=2) = 99
46  i=3 --> 1000 StepSize(ibin=3) = 999
47  i=4 --> 10000 StepSize(ibin=4) = 9999
48 
49  LogInterval(1,1000,11)
50  i=0 --> 1
51  i=1 --> 1.99526
52  i=2 --> 3.98107
53  i=3 --> 7.94328
54  i=4 --> 15.8489
55  i=5 --> 31.6228
56  i=6 --> 63.0957
57  i=7 --> 125.893
58  i=8 --> 251.189
59  i=9 --> 501.187
60  i=10 --> 1000
61 
62  LogInterval(1,1024,11)
63  i=0 --> 1
64  i=1 --> 2
65  i=2 --> 4
66  i=3 --> 8
67  i=4 --> 16
68  i=5 --> 32
69  i=6 --> 64
70  i=7 --> 128
71  i=8 --> 256
72  i=9 --> 512
73  i=10 --> 1024
74 ~~~
75 */
76 
77 #include "TMath.h"
78 #include "TRandom3.h"
79 #include "ThreadLocalStorage.h"
80 
81 #include "TMVA/LogInterval.h"
82 #include "TMVA/MsgLogger.h"
83 #include "TMVA/Types.h"
84 
86 
87 ////////////////////////////////////////////////////////////////////////////////
88 
90 TMVA::Interval(min,max,nbins)
91 {
92  if (min<=0) Log() << kFATAL << "logarithmic intervals have to have Min>0 !!" << Endl;
93 }
94 
96  TMVA::Interval(other)
97 {
98 }
99 
100 ////////////////////////////////////////////////////////////////////////////////
101 /// destructor
102 
104 {
105 }
106 
107 ////////////////////////////////////////////////////////////////////////////////
108 /// calculates the value of the "number" bin in a discrete interval.
109 ///
110 /// Parameters:
111 /// - Double_t position
112 
114 {
115  if (fNbins <= 0) {
116  Log() << kFATAL << "GetElement only defined for discrete value LogIntervals" << Endl;
117  return 0.0;
118  }
119  else if (bin < 0 || bin >= fNbins) {
120  Log() << kFATAL << "bin " << bin << " out of range: interval *bins* count from 0 to " << fNbins-1 << Endl;
121  return 0.0;
122  }
123  return TMath::Exp(TMath::Log(fMin)+((Double_t)bin) /((Double_t)(fNbins-1))*log(fMax/fMin));
124 }
125 
126 ////////////////////////////////////////////////////////////////////////////////
127 /// returns the step size between the numbers of a "discrete LogInterval"
128 
130 {
131  if (fNbins <= 0) {
132  Log() << kFATAL << "GetElement only defined for discrete value LogIntervals" << Endl;
133  }
134  if (iBin<0) {
135  Log() << kFATAL << "You asked for iBin=" << iBin
136  <<" in interval .. and.. sorry, I cannot let this happen.."<<Endl;
137  }
138  return (GetElement(TMath::Max(iBin,0))-GetElement(TMath::Max(iBin-1,0)));
139 }
140 
141 ////////////////////////////////////////////////////////////////////////////////
142 /// get uniformly distributed number within interval
143 
145 {
147 }
148 
149 ////////////////////////////////////////////////////////////////////////////////
150 
152 {
153  return fMax - fMin;
154 }
155 
156 ////////////////////////////////////////////////////////////////////////////////
157 
159 {
160  return (fMax + fMin)/2;
161 }
162 
163 ////////////////////////////////////////////////////////////////////////////////
164 
166  TTHREAD_TLS_DECL_ARG(MsgLogger,logger,"LogInterval"); // message logger
167  return logger;
168 }
LogInterval(Double_t min, Double_t max, Int_t nbins=0)
Definition: LogInterval.cxx:89
Double_t fMin
Definition: Interval.h:87
Random number generator class based on M.
Definition: TRandom3.h:27
Double_t fMax
Definition: Interval.h:87
virtual Double_t GetWidth() const
MsgLogger & Endl(MsgLogger &ml)
Definition: MsgLogger.h:158
Double_t Log(Double_t x)
Definition: TMath.h:759
virtual Double_t Rndm()
Machine independent random number generator.
Definition: TRandom3.cxx:100
int Int_t
Definition: RtypesCore.h:41
Int_t fNbins
Definition: Interval.h:88
virtual Double_t GetStepSize(Int_t iBin=0) const
returns the step size between the numbers of a "discrete LogInterval"
virtual Double_t GetElement(Int_t position) const
calculates the value of the "number" bin in a discrete interval.
The TMVA::Interval Class.
Definition: Interval.h:61
Double_t Exp(Double_t x)
Definition: TMath.h:726
#define ClassImp(name)
Definition: Rtypes.h:359
double Double_t
Definition: RtypesCore.h:55
virtual Double_t GetMean() const
The TMVA::Interval Class.
Definition: LogInterval.h:83
ostringstream derivative to redirect and format output
Definition: MsgLogger.h:59
virtual Double_t GetRndm(TRandom3 &) const
get uniformly distributed number within interval
Abstract ClassifierFactory template that handles arbitrary types.
Short_t Max(Short_t a, Short_t b)
Definition: TMathBase.h:200
MsgLogger & Log() const
virtual ~LogInterval()
destructor
double log(double)