Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
LaplaceSolution.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file LaplaceSolution.h
1 #ifndef __LAPLACESOLUTION_H__
2 #define __LAPLACESOLUTION_H__
3 
4 //
5 // Hello Space Charge Fans: (although you should hate space charge)
6 //
7 // This is a code that implements the calculations of space charge contributions
8 // In a cylindrical TPC. It uses the solutions discovered by Stefan Rossegger for
9 // the ALICE experiment. These solutions use various Bessel functions as a series
10 // solution to the "point charge in a conducting cylinder" problem imposed by
11 // The typical configuration of a TPC found at a collider.
12 //
13 // These calculations have only a single dimension [length] and we shall choose
14 // the units of cm throughout the calculations.
15 //
16 // TKH
17 // 12-3-2015
18 //
19 
20 #define NumberOfOrders 15 // Convergence problems after 15; Rossegger used 30
21 #include <string>
22 
24 {
25  public:
27  LaplaceSolution(double a=30, double b=80, double L=80);
28  virtual ~LaplaceSolution() {}
29 
30  void Verbosity(int v) {verbosity=v;}
31  double Rmn (int m, int n, double r); //Rmn function from Rossegger
32  double Rmn1(int m, int n, double r); //Rmn1 function from Rossegger
33  double Rmn2(int m, int n, double r); //Rmn2 function from Rossegger
34  double RPrime(int m, int n, double a, double r); // RPrime function from Rossegger
35 
36  double Rnk(int n, int k, double r); //Rnk function from Rossegger
37 
38  double Ez (double r, double phi, double z, double r1, double phi1, double z1);
39  double Er (double r, double phi, double z, double r1, double phi1, double z1);
40  double Ephi(double r, double phi, double z, double r1, double phi1, double z1);
41 
42  protected:
43  bool fByFile;
44  double a,b,L; // InnerRadius, OuterRadius, Length of 1/2 the TPC.
45  int verbosity;
46  double pi;
47 
48  void FindBetamn(double epsilon); // Routine used to fill the Betamn array with resolution epsilon...
49  void FindMunk(double epsilon); // Routine used to fill the Munk array with resolution epsilon...
50 
51  double Betamn[NumberOfOrders][NumberOfOrders]; // Betamn array from Rossegger
52  double N2mn[NumberOfOrders][NumberOfOrders]; // N2mn array from Rossegger
53  double Munk[NumberOfOrders][NumberOfOrders]; // Munk array from Rossegger
54  double ByFileER(double r, double phi, double z, double r1, double phi1, double z1);
55  double ByFileEZ(double r, double phi, double z, double r1, double phi1, double z1);
56 
57 
58 };
59 
60 #endif /* __LAPLACESOLUTION_H__ */
61 
62 
63