Logo ROOT  
Reference Guide
Interval.cxx
Go to the documentation of this file.
1// @(#)root/tmva $Id$
2// Author: Peter Speckmayer
3
4/**********************************************************************************
5 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6 * Package: TMVA *
7 * Class : TMVA::Interval *
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 * *
16 * Copyright (c) 2005: *
17 * CERN, Switzerland *
18 * MPI-K Heidelberg, Germany *
19 * *
20 * Redistribution and use in source and binary forms, with or without *
21 * modification, are permitted according to the terms listed in LICENSE *
22 * (http://tmva.sourceforge.net/LICENSE) *
23 * *
24 * File and Version Information: *
25 **********************************************************************************/
26
27/*! \class TMVA::Interval
28\ingroup TMVA
29
30The TMVA::Interval Class
31
32Interval definition, continuous and discrete
33
34 - Interval(min,max) : a continous interval [min,max]
35 - Interval(min,max,n): a "discrete interval" [min,max], i.e the n numbers:
36 min, min+step, min+2*step,...., min+(n-1)*step, min+n*step=max
37
38 e.g.:
39
40 - Interval(1,5,5) = 1,2,3,4,5
41 - Interval(.5,1.,6) = .5, .6., .7, .8, .9, 1.0
42
43 Note: **bin** counting starts from ZERO unlike in ROOT histograms
44
45 - Interval definition, continuous and discrete
46
47 - Interval(min,max) : a continous interval [min,max]
48 - Interval(min,max,n): a "discrete interval" [min,max], i.e the n numbers:
49
50 min, min+step, min+2*step,...., min+(n-1)*step=max
51
52 e.g.:
53
54 - Interval(1,5,5)=1,2,3,4,5 <br>
55 - Interval(.5,1.,6)= .5, .6., .7, .8, .9, 1.0 <br>
56
57~~~ {.cpp}
58 Example: Interval(.5,1.,6)
59
60 [ min max ]
61 -----------------------------------------------
62 | | | | | |
63 .5 .6 .7 .8 .9 1.0
64
65 bin 0 1 2 3 4 5
66~~~
67*/
68
69#include "TMath.h"
70#include "TRandom3.h"
71#include "ThreadLocalStorage.h"
72
73#include "TMVA/Interval.h"
74#include "TMVA/MsgLogger.h"
75#include "TMVA/Types.h"
76
78
79////////////////////////////////////////////////////////////////////////////////
80/// defines minimum and maximum of an interval
81/// - when nbins > 0, interval describes a discrete distribution (equally distributed in the interval)
82/// - when nbins == 0, interval describes a continous interval
83
85fMin(min),
86 fMax(max),
87 fNbins(nbins)
88{
89 if (fMax - fMin < 0) Log() << kFATAL << "maximum lower than minimum" << Endl;
90 if (nbins < 0) {
91 Log() << kFATAL << "nbins < 0" << Endl;
92 return;
93 }
94 else if (nbins == 1) {
95 Log() << kFATAL << "interval has to have at least 2 bins if discrete" << Endl;
96 return;
97 }
98}
99
101 fMin ( other.fMin ),
102 fMax ( other.fMax ),
103 fNbins( other.fNbins )
104{
105}
106
107////////////////////////////////////////////////////////////////////////////////
108/// destructor
109
111{
112}
113
114////////////////////////////////////////////////////////////////////////////////
115/// calculates the value of the "number" bin in a discrete interval.
116/// Parameters:
117/// Double_t position
118///
119
121{
122 if (fNbins <= 0) {
123 Log() << kFATAL << "GetElement only defined for discrete value Intervals" << Endl;
124 return 0.0;
125 }
126 else if (bin < 0 || bin >= fNbins) {
127 Log() << kFATAL << "bin " << bin << " out of range: interval *bins* count from 0 to " << fNbins-1 << Endl;
128 return 0.0;
129 }
130 return fMin + ( (Double_t(bin)/(fNbins-1)) *(fMax - fMin) );
131}
132
133////////////////////////////////////////////////////////////////////////////////
134/// returns the step size between the numbers of a "discrete Interval"
135
137{
138 if (fNbins <= 0) {
139 Log() << kFATAL << "GetElement only defined for discrete value Intervals" << Endl;
140 }
141 if (iBin<0) {
142 Log() << kFATAL << "You asked for iBin=" << iBin
143 <<" in interval .. and.. sorry, I cannot let this happen.."<<Endl;
144 }
145 return (fMax-fMin)/(Double_t)(fNbins-1);
146}
147
148////////////////////////////////////////////////////////////////////////////////
149/// get uniformly distributed number within interval
150
152{
153 return rnd.Rndm()*(fMax - fMin) + fMin;
154}
155
157{
158 return fMax - fMin;
159}
161{
162 return (fMax + fMin)/2;
163}
164
165void TMVA::Interval::Print(std::ostream &os) const
166{
167 for (Int_t i=0; i<GetNbins(); i++){
168 os << "| " << GetElement(i)<<" |" ;
169 }
170}
171
173 TTHREAD_TLS_DECL_ARG(MsgLogger,logger,"Interval"); // message logger
174 return logger;
175}
double Double_t
Definition: RtypesCore.h:57
#define ClassImp(name)
Definition: Rtypes.h:361
The TMVA::Interval Class.
Definition: Interval.h:61
virtual Double_t GetRndm(TRandom3 &) const
get uniformly distributed number within interval
Definition: Interval.cxx:151
virtual void Print(std::ostream &os) const
Definition: Interval.cxx:165
Double_t fMin
Definition: Interval.h:87
MsgLogger & Log() const
Definition: Interval.cxx:172
virtual ~Interval()
destructor
Definition: Interval.cxx:110
Double_t fMax
Definition: Interval.h:87
virtual Double_t GetElement(Int_t position) const
calculates the value of the "number" bin in a discrete interval.
Definition: Interval.cxx:120
virtual Double_t GetStepSize(Int_t iBin=0) const
returns the step size between the numbers of a "discrete Interval"
Definition: Interval.cxx:136
virtual Double_t GetWidth() const
Definition: Interval.cxx:156
Interval(Double_t min, Double_t max, Int_t nbins=0)
defines minimum and maximum of an interval
Definition: Interval.cxx:84
virtual Double_t GetMean() const
Definition: Interval.cxx:160
ostringstream derivative to redirect and format output
Definition: MsgLogger.h:59
Random number generator class based on M.
Definition: TRandom3.h:27
virtual Double_t Rndm()
Machine independent random number generator.
Definition: TRandom3.cxx:100
MsgLogger & Endl(MsgLogger &ml)
Definition: MsgLogger.h:158
Double_t Log(Double_t x)
Definition: TMath.h:750