ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4SimpleIntegration.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4SimpleIntegration.hh
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 //
28 // Class description:
29 //
30 // Class for realisation of simple numerical methodes for integration of
31 // functions with signature: double f(double). The methods based mainly on
32 // algorithms given in the book :
33 // An introduction to NUMERICAL METHODS IN C++,
34 // B.H. Flowers, Claredon Press, Oxford, 1995.
35 //
36 // --------------------------- Member data ----------------------------
37 //
38 // fFunction - pointer to the function to be integrated
39 // fTolerance - accuracy of integration in Adaptive Gauss method
40 // fMaxDepth = 100 - constant maximum iteration depth for
41 // Adaptive Gauss method
42 //
43 // --------------------------- Methods --------------------------------
44 //
45 // Trapezoidal, MidPoint, Gauss and Simpson(double a,double b,int n)
46 // - integrate function pointed by fFunction from a to b by n iterations,
47 // i.e. with Step (b-a)/n according to the correspondent method.
48 //
49 // AdaptGausIntegration(double a, double b)
50 // - integrate function from a to be with accuracy <= fTolerance
51 
52 // ----------------------------- History ------------------------------
53 //
54 // 26.03.97 V.Grichine ( Vladimir.Grichine@cern.ch )
55 
56 #ifndef G4SIMPLEINTEGRATION_HH
57 #define G4SIMPLEINTEGRATION_HH
58 
59 #include "G4Types.hh"
60 
61 typedef G4double (*function)(G4double) ;
62 
64 {
65  public:
66 
67  explicit G4SimpleIntegration( function pFunction ) ;
68 
69  G4SimpleIntegration( function pFunction,
70  G4double pTolerance ) ;
71 
73 
74  // Simple integration methods
75 
76  G4double Trapezoidal(G4double xInitial,
77  G4double xFinal,
78  G4int iterationNumber ) ;
79 
80  G4double MidPoint(G4double xInitial,
81  G4double xFinal,
82  G4int iterationNumber ) ;
83 
84  G4double Gauss(G4double xInitial,
85  G4double xFinal,
86  G4int iterationNumber ) ;
87 
88  G4double Simpson(G4double xInitial,
89  G4double xFinal,
90  G4int iterationNumber ) ;
91 
92  // Adaptive Gauss integration with accuracy ~ fTolerance
93 
95  G4double xFinal ) ;
96 
97  protected:
98 
99  G4double Gauss( G4double xInitial,
100  G4double xFinal ) ;
101 
102  void AdaptGauss( G4double xInitial,
103  G4double xFinal,
104  G4double& sum,
105  G4int& depth ) ;
106  private:
107 
110  // Private copy constructor and assignment operator.
111 
112  private:
113 
114  function fFunction ;
116  const G4int fMaxDepth ;
117 };
118 
119 #endif