Logo ROOT   6.16/01
Reference Guide
TUnuranEmpDist.cxx
Go to the documentation of this file.
1// @(#)root/unuran:$Id$
2// Authors: L. Moneta, J. Leydold Wed Feb 28 2007
3
4/**********************************************************************
5 * *
6 * Copyright (c) 2006 LCG ROOT Math Team, CERN/PH-SFT *
7 * *
8 * *
9 **********************************************************************/
10
11// Implementation file for class TUnuranEmpDist
12
13#include "TUnuranEmpDist.h"
14
15#include "TH1.h"
16
17#include <cassert>
18
19
20
21TUnuranEmpDist::TUnuranEmpDist (const TH1 * h1, bool useBuffer) :
22 fDim(0),
23 fMin(0),
24 fMax(0),
25 fBinned(false)
26{
27 //Constructor from a TH1 objects.
28 //The buffer of the histo, if available, can be used for
29 // the estimation of the parent distribution using smoothing
30
31 if (!h1) return; // in case of default ctor for I/O
32
33 fDim = h1->GetDimension();
34
35 bool unbin = useBuffer && h1->GetBufferLength() > 0 ;
36 fBinned = !unbin;
37
38 if (fBinned ) {
39 int nbins = h1->GetNbinsX();
40 fData.reserve(nbins);
41 for (int i =0; i < nbins; ++i)
42 fData.push_back( h1->GetBinContent(i+1) );
43
44 fMin = h1->GetXaxis()->GetXmin();
45 fMax = h1->GetXaxis()->GetXmax();
46 }
47 else {
48 //std::cout << "use kernel smoothing method" << std::endl;
49
50 int n = h1->GetBufferLength();
51 const double * bf = h1->GetBuffer();
52 fData.reserve(n);
53 // fill buffer (assume weights are equal to 1)
54 // bugger is : [n,w0,x0,y0,..,w1,x1,y1,...wn,xn,yn]
55 // buffer contains size
56 for (int i = 0; i < n; ++i) {
57 int index = (fDim+1)*i + fDim + 1;
58 fData.push_back( bf[index] );
59 }
60 }
61}
62
63TUnuranEmpDist::TUnuranEmpDist (unsigned int n, double * x) :
64 fData(std::vector<double>(x,x+n) ),
65 fDim(1),
66 fMin(0), fMax(0),
67 fBinned(0)
68{
69 // constructor for 1D unbinned data
70}
71
72TUnuranEmpDist::TUnuranEmpDist (unsigned int n, double * x, double * y) :
73 fData(std::vector<double>(2*n) ),
74 fDim(2),
75 fMin(0), fMax(0),
76 fBinned(0)
77{
78 // constructor for 2D unbinned data
79 for (unsigned int i = 0; i < n; ++i) {
80 fData[i*2] = x[i];
81 fData[i*2+1] = y[i];
82 }
83}
84
85TUnuranEmpDist::TUnuranEmpDist (unsigned int n, double * x, double * y, double *z) :
86 fData(std::vector<double>(3*n) ),
87 fDim(3),
88 fMin(0), fMax(0),
89 fBinned(0)
90{
91 // constructor for 3D unbinned data
92 for (unsigned int i = 0; i < n; ++i) {
93 fData[i*3] = x[i];
94 fData[i*3+1] = y[i];
95 fData[i*3+2] = z[i];
96 }
97}
98
99
100
103{
104 // Implementation of copy ctor using aassignment operator
105 operator=(rhs);
106}
107
109{
110 // Implementation of assignment operator (copy only the function pointer not the function itself)
111 if (this == &rhs) return *this; // time saving self-test
112 fData = rhs.fData;
113 fDim = rhs.fDim;
114 fMin = rhs.fMin;
115 fMax = rhs.fMax;
116 fBinned = rhs.fBinned;
117 return *this;
118}
119
120
121
122
123
124
Double_t GetXmax() const
Definition: TAxis.h:134
Double_t GetXmin() const
Definition: TAxis.h:133
The TH1 histogram class.
Definition: TH1.h:56
virtual Int_t GetDimension() const
Definition: TH1.h:278
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
Definition: TH1.h:316
Int_t GetBufferLength() const
Definition: TH1.h:232
virtual Int_t GetNbinsX() const
Definition: TH1.h:292
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
Definition: TH1.cxx:4790
const Double_t * GetBuffer() const
Definition: TH1.h:234
TUnuranBaseDist, base class for Unuran distribution classees such as TUnuranContDist (for one-dimensi...
TUnuranEmpDist class for describing empiral distributions.
TUnuranEmpDist(const TH1 *h1=0, bool useBuffer=true)
Constructor from a TH1 objects.
TUnuranEmpDist & operator=(const TUnuranEmpDist &rhs)
Assignment operator.
unsigned int fDim
std::vector< double > fData
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
const Int_t n
Definition: legend1.C:16
TH1F * h1
Definition: legend1.C:5
STL namespace.