```// @(#)root/mathcore:\$Id\$
// Authors: David Gonzalez Maline    01/2008

/**********************************************************************
*                                                                    *
* Copyright (c) 2006 , LCG ROOT MathLib Team                         *
*                                                                    *
*                                                                    *
**********************************************************************/

//
// Created by: David Gonzalez Maline  : Wed Jan 16 2008
//

#ifndef ROOT_Math_GaussLegendreIntegrator
#define ROOT_Math_GaussLegendreIntegrator

#ifndef ROOT_Math_GaussIntegrator
#include "Math/GaussIntegrator.h"
#endif

namespace ROOT {
namespace Math {

//___________________________________________________________________________________________
/**
User class for performing function integration.

It will use the Gauss-Legendre Method for function integration in a given interval.
This class is implemented from TF1::Integral().

@ingroup Integration

*/

class GaussLegendreIntegrator: public GaussIntegrator {
public:

/** Basic contructor of GaussLegendreIntegrator.
\@param num Number of desired points to calculate the integration.
\@param eps Desired relative error.
*/
GaussLegendreIntegrator(int num = 10 ,double eps=1e-12);

/** Default Destructor */
virtual ~GaussLegendreIntegrator();

/** Set the number of points used in the calculation of the
integral */
void SetNumberPoints(int num);

/** Set the desired relative Error. */
virtual void SetRelTolerance (double);

/** This method is not implemented. */
virtual void SetAbsTolerance (double);

/** Returns the arrays x and w containing the abscissa and weight of

Gauss-Legendre: W(x)=1 -1<x<1
(j+1)P_{j+1} = (2j+1)xP_j-jP_{j-1}
*/
void GetWeightVectors(double *x, double *w) const;

int GetNumberPoints() const { return fNum; }

/**
return number of function evaluations in calculating the integral
This is equivalent to the number of points
*/
int NEval() const { return fNum; }

///  get the option used for the integration
virtual ROOT::Math::IntegratorOneDimOptions Options() const;

// set the options
virtual void SetOptions(const ROOT::Math::IntegratorOneDimOptions & opt);

private:

/**
Integration surrugate method. Return integral of passed function in  interval [a,b]
Reimplement method of GaussIntegrator using CalcGaussLegendreSamplingPoints
*/
virtual double DoIntegral (double a, double b, const IGenFunction* func);

/**
Type: unsafe but fast interface filling the arrays x and w (static method)

Given the number of sampling points this routine fills the arrays x and w
of length num, containing the abscissa and weight of the Gauss-Legendre

Gauss-Legendre: W(x)=1  -1<x<1
(j+1)P_{j+1} = (2j+1)xP_j-jP_{j-1}

num is the number of sampling points (>0)
x and w are arrays of size num
eps is the relative precision

If num<=0 or eps<=0 no action is done.

Reference: Numerical Recipes in C, Second Edition
*/
void CalcGaussLegendreSamplingPoints();

protected:
int fNum;                         // Number of points used in the stimation of the integral.
double* fX;                       // Abscisa of the points used.
double* fW;                       // Weights of the points used.

};

} // end namespace Math

} // end namespace ROOT

#endif /* ROOT_Math_GaussLegendreIntegrator */
```
GaussLegendreIntegrator.h:1
GaussLegendreIntegrator.h:2
GaussLegendreIntegrator.h:3
GaussLegendreIntegrator.h:4
GaussLegendreIntegrator.h:5
GaussLegendreIntegrator.h:6
GaussLegendreIntegrator.h:7
GaussLegendreIntegrator.h:8
GaussLegendreIntegrator.h:9
GaussLegendreIntegrator.h:10
GaussLegendreIntegrator.h:11
GaussLegendreIntegrator.h:12
GaussLegendreIntegrator.h:13
GaussLegendreIntegrator.h:14
GaussLegendreIntegrator.h:15
GaussLegendreIntegrator.h:16
GaussLegendreIntegrator.h:17
GaussLegendreIntegrator.h:18
GaussLegendreIntegrator.h:19
GaussLegendreIntegrator.h:20
GaussLegendreIntegrator.h:21
GaussLegendreIntegrator.h:22
GaussLegendreIntegrator.h:23
GaussLegendreIntegrator.h:24
GaussLegendreIntegrator.h:25
GaussLegendreIntegrator.h:26
GaussLegendreIntegrator.h:27
GaussLegendreIntegrator.h:28
GaussLegendreIntegrator.h:29
GaussLegendreIntegrator.h:30
GaussLegendreIntegrator.h:31
GaussLegendreIntegrator.h:32
GaussLegendreIntegrator.h:33
GaussLegendreIntegrator.h:34
GaussLegendreIntegrator.h:35
GaussLegendreIntegrator.h:36
GaussLegendreIntegrator.h:37
GaussLegendreIntegrator.h:38
GaussLegendreIntegrator.h:39
GaussLegendreIntegrator.h:40
GaussLegendreIntegrator.h:41
GaussLegendreIntegrator.h:42
GaussLegendreIntegrator.h:43
GaussLegendreIntegrator.h:44
GaussLegendreIntegrator.h:45
GaussLegendreIntegrator.h:46
GaussLegendreIntegrator.h:47
GaussLegendreIntegrator.h:48
GaussLegendreIntegrator.h:49
GaussLegendreIntegrator.h:50
GaussLegendreIntegrator.h:51
GaussLegendreIntegrator.h:52
GaussLegendreIntegrator.h:53
GaussLegendreIntegrator.h:54
GaussLegendreIntegrator.h:55
GaussLegendreIntegrator.h:56
GaussLegendreIntegrator.h:57
GaussLegendreIntegrator.h:58
GaussLegendreIntegrator.h:59
GaussLegendreIntegrator.h:60
GaussLegendreIntegrator.h:61
GaussLegendreIntegrator.h:62
GaussLegendreIntegrator.h:63
GaussLegendreIntegrator.h:64
GaussLegendreIntegrator.h:65
GaussLegendreIntegrator.h:66
GaussLegendreIntegrator.h:67
GaussLegendreIntegrator.h:68
GaussLegendreIntegrator.h:69
GaussLegendreIntegrator.h:70
GaussLegendreIntegrator.h:71
GaussLegendreIntegrator.h:72
GaussLegendreIntegrator.h:73
GaussLegendreIntegrator.h:74
GaussLegendreIntegrator.h:75
GaussLegendreIntegrator.h:76
GaussLegendreIntegrator.h:77
GaussLegendreIntegrator.h:78
GaussLegendreIntegrator.h:79
GaussLegendreIntegrator.h:80
GaussLegendreIntegrator.h:81
GaussLegendreIntegrator.h:82
GaussLegendreIntegrator.h:83
GaussLegendreIntegrator.h:84
GaussLegendreIntegrator.h:85
GaussLegendreIntegrator.h:86
GaussLegendreIntegrator.h:87
GaussLegendreIntegrator.h:88
GaussLegendreIntegrator.h:89
GaussLegendreIntegrator.h:90
GaussLegendreIntegrator.h:91
GaussLegendreIntegrator.h:92
GaussLegendreIntegrator.h:93
GaussLegendreIntegrator.h:94
GaussLegendreIntegrator.h:95
GaussLegendreIntegrator.h:96
GaussLegendreIntegrator.h:97
GaussLegendreIntegrator.h:98
GaussLegendreIntegrator.h:99
GaussLegendreIntegrator.h:100
GaussLegendreIntegrator.h:101
GaussLegendreIntegrator.h:102
GaussLegendreIntegrator.h:103
GaussLegendreIntegrator.h:104
GaussLegendreIntegrator.h:105
GaussLegendreIntegrator.h:106
GaussLegendreIntegrator.h:107
GaussLegendreIntegrator.h:108
GaussLegendreIntegrator.h:109
GaussLegendreIntegrator.h:110
GaussLegendreIntegrator.h:111
GaussLegendreIntegrator.h:112
GaussLegendreIntegrator.h:113
GaussLegendreIntegrator.h:114
GaussLegendreIntegrator.h:115
GaussLegendreIntegrator.h:116
GaussLegendreIntegrator.h:117
GaussLegendreIntegrator.h:118
GaussLegendreIntegrator.h:119
GaussLegendreIntegrator.h:120
GaussLegendreIntegrator.h:121
GaussLegendreIntegrator.h:122
GaussLegendreIntegrator.h:123
GaussLegendreIntegrator.h:124
GaussLegendreIntegrator.h:125