GeomAsym.h
Go to the documentation of this file.
1 
19 #ifndef __GeomAsym_h_
20 #define __GeomAsym_h_
21 
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <math.h>
25 #include <fstream>
26 
27 
28 //------------------------------------------------------------------
29 //----Geometrical asymmetries theta (rad) psi (rad) r (cm)
30 // Mean/RMS pz: pQGSJetII, Psi=0 [deg], theta=25-60 [deg]
31 // AmodTmod : FeQGSJetII theta=36 [deg]
32 //-------------------------------------------------------------------
33 
34 namespace GeomAsymNS {
35 
36  //-----
37  const int nPar = 2;
38  const double DX_Eval[4][2] = { {300., 800.}, {100., 600.}, {300., 800.}, {300., 800.} };
39  const double PzEval[4][2] = { {1.000, 0.800}, {1.000, 0.500} , {1.000, 0.500}, {1.000, 0.500} };
40  const double ctheta_pCut[3] = {1.e-3, 1.e-3, 1.e-3};
41  //-----
42 
43 
44  const double ARadPar_WCD[4][3] = {
45  {8.44278e-01 , 9.38319e-01, 4.29313e+00 },
46  {6.57193e-01 , 9.18171e-01, 5.80537e+00 },
47  {3.90266e-01 , 8.03916e-01, 2.24399e+00 },
48  {6.46413e-01 , 9.11551e-01, 5.91902e+00 }
49  };
50 
51  const double ARadPar_Scin[4][3] = {
52  {8.40498e-01 , 9.28027e-01, 2.76516e+00 },
53  {4.34142e-01 , 8.22609e-01, 1.83113e+00 },
54  {2.52660e-01 , 5.96130e-01, 1.01825e+00 },
55  {4.45720e-01 , 8.41307e-01, 2.05514e+00 }
56  };
57 
58  const double ARadPar_MD[4][3] = {
59  {8.24256e-01 , 9.46884e-01, 8.17439e+00 },
60  {0.00000e+00 , 0.00000e+00, 0.00000e+00 },
61  {0.00000e+00 , 0.00000e+00, 0.00000e+00 },
62  {0.00000e+00 , 0.00000e+00, 0.00000e+00 }
63  };
64 
65 
66  //-----
67 
68 
69  const double parPzMean_WCD[2][4][3] = {
70  { { 9.9385e-01, 9.6255e-01, 3.3279e-01 }, { 1.0112e+00, 7.2816e-01, 1.2064e-08 }, { 9.9755e-01, 9.3883e-01, 2.9493e-01 }, { 1.0176e+00, 7.9683e-01, 3.7233e-01 } },
71  { { 9.9880e-01, 9.9184e-01, 1.0665e-01 }, { 9.9727e-01, 8.5415e-01, 6.2728e-14 }, { 9.9575e-01, 9.7822e-01, 2.2628e-01 }, { 1.0139e+00, 8.3023e-01, 3.3331e-01 }}
72  };
73  const double parPzRMS_WCD[2][4][3] = {
74  { { 4.3760e-02, 7.6375e-02, 1.4265e+00 }, { 4.5449e-02, 2.9219e-01, 1.8370e-01 }, { 3.0585e-02, 1.1501e-01, 9.0525e-01 }, { 1.6134e-02, 2.4898e-01, 1.1828e+00 } },
75  { { 1.7280e-02, 3.0640e-02, 3.5530e-01 }, { 4.2403e-02, 1.8258e-01, 3.5770e-01 }, { 2.3636e-02, 6.4811e-02, 6.1970e-01 }, { 1.5748e-02, 2.2207e-01, 1.1063e+00 }}
76  };
77 
78  const double parPzMean_Scin[2][4][3] = {
79  { { 9.8353e-01, 9.4431e-01, 5.1014e-01 }, { 9.1219e-01, 5.8688e-01, 8.2284e-01 }, { 9.4121e-01, 8.5813e-01, 7.1219e-01 }, { 9.7121e-01, 7.3468e-01, 4.1524e-01 } },
80  { { 9.9674e-01, 9.8886e-01, 1.2998e-02 }, { 9.1736e-01, 7.3672e-01, 8.2866e-01 }, { 9.4514e-01, 9.1451e-01, 5.0038e-01 }, { 9.6649e-01, 7.7452e-01, 2.8727e-01 }}
81  };
82  const double parPzRMS_Scin[2][4][3] = {
83  { { 6.2239e-02, 1.1247e-01, 7.7006e+00 }, { 1.6764e-01, 4.2508e-01, 2.2892e+00 }, { 1.2128e-01, 2.0790e-01, 1.4579e+00 }, { 1.0932e-01, 3.0257e-01, 8.2100e-01 } },
84  { { 3.2062e-02, 4.4561e-02, 4.7003e-09 }, { 1.3595e-01, 3.0496e-01, 3.0289e+00 }, { 1.0860e-01, 1.5356e-01, 9.3974e-01 }, { 9.7479e-02, 2.6829e-01, 7.4948e-01 }}
85  };
86 
87  const double parPzMean_MD[2][4][3] = {
88  { { 9.9970e-01, 9.8511e-01, 9.7120e-02 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 } },
89  { { 1.0002e+00, 9.9533e-01, 3.5598e-05 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }}
90  };
91  const double parPzRMS_MD[2][4][3] = {
92  { { 7.1826e-03, 2.0591e-02, 4.8287e-01 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 } },
93  { { 3.5597e-03, 8.7650e-03, 2.5199e-02 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }, { 0.0000e+00, 0.0000e+00, 0.0000e+00 }}
94  };
95 
96 
97  //-----
98 
99  const double parR0_WCD[4][2][3] = {
100  { {1.04310e+00 , 1.02973e+00, -1.14274e-01 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
101  { {7.36665e-01 , 7.07778e-01, 3.91090e-01 }, {8.95082e-01, 8.81654e-01, 2.76298e+00} } ,
102  { {8.26309e-01 , 7.52921e-01, 3.69729e+00 }, {9.37310e-01, 8.95069e-01, 3.99126e+00} } ,
103  { {8.53844e-01 , 7.46741e-01, 5.05042e+00 }, {9.39195e-01, 8.90733e-01, 4.10932e+00} }
104  };
105 
106  const double parR1_WCD[4][2][3] = {
107  { {7.70737e-01 , 7.87434e-01, -6.23018e-02 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
108  { {4.34488e-01 , 6.81246e-01, 5.49479e+00 }, {7.73728e-01, 8.68745e-01, 5.29519e+00} } ,
109  { {4.37475e-01 , 6.71398e-01, 3.24066e+00 }, {6.56330e-01, 8.67457e-01, 5.51830e+00} } ,
110  { {5.09806e-01 , 7.24397e-01, 1.62878e+01 }, {8.17381e-01, 8.85314e-01, 1.12824e+01} }
111  };
112 
113  const double parR2_WCD[4][2][3] = {
114  { {2.90453e+00 , 1.95511e+00, 5.67312e-01 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
115  { {5.00000e+00 , 0.00000e+00, 0.00000e+00 }, {5.00000e+00, 0.00000e+00, 0.00000e+00} } ,
116  { {5.00000e+00 , 0.00000e+00, 0.00000e+00 }, {5.00000e+00, 0.00000e+00, 0.00000e+00} } ,
117  { {5.00000e+00 , 0.00000e+00, 0.00000e+00 }, {5.00000e+00, 0.00000e+00, 0.00000e+00} }
118  };
119 
120  const double parR0_Scin[4][2][3] = {
121  { {1.05000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
122  { {1.65810e+00 , 1.12103e+00, 5.00000e-02 }, {1.20000e+00, 0.00000e+00, 0.00000e+00} } ,
123  { {1.52586e+00 , 1.39455e+00, 5.00000e-02 }, {1.20000e+00, 0.00000e+00, 0.00000e+00} } ,
124  { {1.59511e+00 , 1.30306e+00, 5.00000e-02 }, {1.20000e+00, 0.00000e+00, 0.00000e+00} }
125  };
126 
127  const double parR1_Scin[4][2][3] = {
128  { {1.05000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
129  { {2.47145e-01 , 8.65333e-01, 3.63005e+00 }, {6.17876e-01, 9.35269e-01, 3.70127e+00} } ,
130  { {3.18544e-01 , 7.26477e-01, 1.50323e+00 }, {3.85089e-01, 8.57716e-01, 2.68724e+00} } ,
131  { {3.72612e-01 , 9.50745e-01, 2.97895e+00 }, {6.49787e-01, 9.78503e-01, 3.77275e+00} }
132  };
133 
134  const double parR2_Scin[4][2][3] = {
135  { {1.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
136  { {1.50000e+01 , 1.20000e+01, 1.00000e-01 }, {8.00000e+00, 0.00000e+00, 0.00000e+00} } ,
137  { {1.50000e+01 , 1.20000e+01, 1.00000e-01 }, {8.00000e+00, 0.00000e+00, 0.00000e+00} } ,
138  { {1.50000e+01 , 1.20000e+01, 1.00000e-01 }, {8.00000e+00, 0.00000e+00, 0.00000e+00} }
139  };
140 
141 
142  const double parR0_MD[4][2][3] = {
143  { {1.00000e+00 , 8.50000e-01, 1.00000e-01 }, {1.00000e+00, 9.50000e-01, 1.00000e-01} } ,
144  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
145  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
146  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} }
147  };
148 
149  const double parR1_MD[4][2][3] = {
150  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {1.20000e-01, 0.00000e+00, 0.00000e+00} } ,
151  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
152  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
153  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} }
154  };
155 
156  const double parR2_MD[4][2][3] = {
157  { {3.00000e+01 , 2.50000e+01, 1.00000e-01 }, {1.00000e+01, 8.00000e+00, 1.00000e-01} } ,
158  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
159  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} } ,
160  { {0.00000e+00 , 0.00000e+00, 0.00000e+00 }, {0.00000e+00, 0.00000e+00, 0.00000e+00} }
161  };
162 
163 
164  //------
165 
166 
167  class GeomAsym {
168 
169  private:
170  int fDetectorType; // [0] WCD [1] Scin [2] MD
172 
173  public:
174 
175  GeomAsym(int DetectorType);
176  ~GeomAsym() {};
177 
178  // Pz limit
179  void SetPzIntegralLimit(double pzLimit_i)
180  {
181  pzIntegralLimit = pzLimit_i;
182  }
183 
184  // <pz>/RMS pz
185  double GetPzMeanPar(double r, int icomp, int ipar);
186  double GetPzMean(double DX, double r, int icomp); // DX (g/cm^2) r (cm)
187 
188  double GetPzRMSPar(double r, int icomp, int ipar);
189  double GetPzRMS(double DX, double r, int icomp); // DX (g/cm^2) r (cm)
190 
191  // Amod x Tmod (cos(theta_p),r,pz)
192  double GetTmodAmod_Par_i(double r, int itheta, int icomp, int ipar);
193  double GetTmodAmod(double ctheta_p, double* par, int icomp);
194  double GetTmodAmod(double ctheta_p, double pz, double r, int icomp);
195 
196  // Radial approximation
197  double GetARad(double r, int icomp);
198  double GetCosTheta_p(double pz, double r, double theta, double psi, int icomp);
199  double GetPzCut(double r, double theta, double psi, int icomp);
200 
201  // Geom Asymmetries
202  double GetPzMeanRange(double alpha, double beta, double pz0, double pz1);
203  double GetShadow(double DX, double r, double theta, double psi, int icomp);
204  double GetGeomAsym(double DX, double r, double theta, double psi, int icomp);
205  double GetGeomAsym(double DX, double r, double theta, double psi, int icomp, int nSteps);
206 
207  // Gamma function ( ROOT implementation, ideally I should isolate the routine for compatibility purposes )
208  double gamma_cdf(double x, double alpha, double beta);
209  double gamma_quantile(double x, double alpha, double beta);
210 
211  };
212 }
213 #endif // __GeomAsym_h_
const double parR2_MD[4][2][3]
Definition: GeomAsym.h:156
double GetCosTheta_p(double pz, double r, double theta, double psi, int icomp)
Definition: GeomAsym.cc:365
const double parPzRMS_MD[2][4][3]
Definition: GeomAsym.h:91
const double ARadPar_MD[4][3]
Definition: GeomAsym.h:58
double GetGeomAsym(double DX, double r, double theta, double psi, int icomp)
Definition: GeomAsym.cc:454
const double PzEval[4][2]
Definition: GeomAsym.h:39
double GetTmodAmod_Par_i(double r, int itheta, int icomp, int ipar)
Definition: GeomAsym.cc:191
GeomAsym(int DetectorType)
Definition: GeomAsym.cc:28
const double ARadPar_Scin[4][3]
Definition: GeomAsym.h:51
const double parPzMean_WCD[2][4][3]
Definition: GeomAsym.h:69
double GetPzCut(double r, double theta, double psi, int icomp)
Definition: GeomAsym.cc:380
double GetTmodAmod(double ctheta_p, double *par, int icomp)
Definition: GeomAsym.cc:257
double GetPzMean(double DX, double r, int icomp)
Definition: GeomAsym.cc:96
double gamma_cdf(double x, double alpha, double beta)
Definition: GeomAsym.cc:45
const double parR1_WCD[4][2][3]
Definition: GeomAsym.h:106
const double parR0_WCD[4][2][3]
Definition: GeomAsym.h:99
double GetPzRMS(double DX, double r, int icomp)
Definition: GeomAsym.cc:159
double pzIntegralLimit
Definition: GeomAsym.h:171
const double parR1_Scin[4][2][3]
Definition: GeomAsym.h:127
const double parR0_MD[4][2][3]
Definition: GeomAsym.h:142
double GetARad(double r, int icomp)
Definition: GeomAsym.cc:333
const double ctheta_pCut[3]
Definition: GeomAsym.h:40
const double parPzMean_MD[2][4][3]
Definition: GeomAsym.h:87
const double parR2_Scin[4][2][3]
Definition: GeomAsym.h:134
const double parR1_MD[4][2][3]
Definition: GeomAsym.h:149
const double parPzRMS_Scin[2][4][3]
Definition: GeomAsym.h:82
void SetPzIntegralLimit(double pzLimit_i)
Definition: GeomAsym.h:179
const double DX_Eval[4][2]
Definition: GeomAsym.h:38
const double parPzMean_Scin[2][4][3]
Definition: GeomAsym.h:78
const double parPzRMS_WCD[2][4][3]
Definition: GeomAsym.h:73
double GetPzMeanRange(double alpha, double beta, double pz0, double pz1)
Definition: GeomAsym.cc:414
double gamma_quantile(double x, double alpha, double beta)
Definition: GeomAsym.cc:52
const int nPar
Definition: GeomAsym.h:37
double GetShadow(double DX, double r, double theta, double psi, int icomp)
Definition: GeomAsym.cc:424
double GetPzRMSPar(double r, int icomp, int ipar)
Definition: GeomAsym.cc:130
double GetPzMeanPar(double r, int icomp, int ipar)
Definition: GeomAsym.cc:63
const double ARadPar_WCD[4][3]
Definition: GeomAsym.h:44
const double parR0_Scin[4][2][3]
Definition: GeomAsym.h:120
const double parR2_WCD[4][2][3]
Definition: GeomAsym.h:113

, generated on Tue Sep 26 2023.