File indexing completed on 2025-12-18 09:17:53
0001 #ifndef TPCGENERATOR_ROSSEGGER_H
0002 #define TPCGENERATOR_ROSSEGGER_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <cmath>
0021 #include <format>
0022 #include <iostream>
0023 #include <limits>
0024 #include <map>
0025 #include <string>
0026
0027 class TH2;
0028 class TH3;
0029
0030 #define NumberOfOrders 15
0031
0032 class Rossegger
0033 {
0034 public:
0035 explicit Rossegger(const std::string &filename);
0036 Rossegger(double InnerRadius = 30, double OuterRadius = 80, double Rdo_Z = 80, double precision = 1E-4);
0037 virtual ~Rossegger() = default;
0038
0039 void Verbosity(int v)
0040 {
0041 std::cout << std::format("verbosity set to {}. was {}", v, verbosity) << std::endl;
0042 verbosity = v;
0043 return;
0044 };
0045 double Rmn(int m, int n, double r);
0046 double Rmn_for_zeroes(int m, double x);
0047 double Rmn1(int m, int n, double r);
0048 double Rmn2(int m, int n, double r);
0049 double RPrime(int m, int n, double ref, double r);
0050
0051 double Rnk(int n, int k, double r);
0052 double Rnk_for_zeroes(int n, double mu);
0053
0054 double Limu(double mu, double x);
0055 double Kimu(double mu, double x);
0056
0057 double Ez(double r, double phi, double z, double r1, double phi1, double z1);
0058 double Er(double r, double phi, double z, double r1, double phi1, double z1);
0059 double Ephi(double r, double phi, double z, double r1, double phi1, double z1);
0060
0061
0062 double Rmn_(int m, int n, double r);
0063
0064 double Rmn1_(int m, int n, double r);
0065 double Rmn2_(int m, int n, double r);
0066 double RPrime_(int m, int n, double ref, double r);
0067 double Rnk_(int n, int k, double r);
0068 double Rnk_for_zeroes_(int n, double mu);
0069 double Ez_(double r, double phi, double z, double r1, double phi1, double z1);
0070 double Er_(double r, double phi, double z, double r1, double phi1, double z1);
0071 double Ephi_(double r, double phi, double z, double r1, double phi1, double z1);
0072
0073 protected:
0074 bool fByFile {false};
0075 double a {std::numeric_limits<double>::quiet_NaN()};
0076 double b {std::numeric_limits<double>::quiet_NaN()};
0077 double L {std::numeric_limits<double>::quiet_NaN()};
0078 int verbosity {0};
0079 double pi {M_PI};
0080 double epsilon {std::numeric_limits<double>::quiet_NaN()};
0081
0082 bool tweak {false};
0083
0084 double MinimumDR {std::numeric_limits<double>::quiet_NaN()};
0085 double MinimumDPHI {std::numeric_limits<double>::quiet_NaN()};
0086 double MinimumDZ {std::numeric_limits<double>::quiet_NaN()};
0087
0088 double FindNextZero(double xstart, double epsilon, int order, double (Rossegger::*func)(int, double));
0089 void FindBetamn(double epsilon);
0090 void FindMunk(double epsilon);
0091 bool CheckZeroes(double epsilon);
0092
0093 void LoadZeroes(const std::string &destfile);
0094 void SaveZeroes(const std::string &destfile);
0095
0096 double Betamn[NumberOfOrders][NumberOfOrders]{};
0097 double N2mn[NumberOfOrders][NumberOfOrders]{};
0098 double Munk[NumberOfOrders][NumberOfOrders]{};
0099 double N2nk[NumberOfOrders][NumberOfOrders]{};
0100
0101 void PrecalcFreeConstants();
0102
0103 double BetaN[NumberOfOrders]{};
0104 double BetaN_a[NumberOfOrders]{};
0105 double BetaN_b[NumberOfOrders]{};
0106 double km_BetaN_a[NumberOfOrders][NumberOfOrders]{};
0107 double im_BetaN_a[NumberOfOrders][NumberOfOrders]{};
0108 double km_BetaN_b[NumberOfOrders][NumberOfOrders]{};
0109 double im_BetaN_b[NumberOfOrders][NumberOfOrders]{};
0110 double bessel_denominator[NumberOfOrders][NumberOfOrders]{};
0111
0112 void PrecalcDerivedConstants();
0113 double ym_Betamn_a[NumberOfOrders][NumberOfOrders]{};
0114 double jm_Betamn_a[NumberOfOrders][NumberOfOrders]{};
0115 double liMunk_BetaN_a[NumberOfOrders][NumberOfOrders]{};
0116 double kiMunk_BetaN_a[NumberOfOrders][NumberOfOrders]{};
0117 double sinh_Betamn_L[NumberOfOrders][NumberOfOrders]{};
0118 double sinh_pi_Munk[NumberOfOrders][NumberOfOrders]{};
0119
0120 TH2 *Tags {nullptr};
0121 std::map<std::string, TH3 *> Grid;
0122 };
0123
0124 #endif