BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnPairFinder.cxx
Go to the documentation of this file.
1
2#include "BmnPairFinder.h"
3
4#include "BmnVertex.h"
5#include "CbmMCTrack.h"
6#include "CbmStsPoint.h"
7#include "CbmStsTrack.h"
8#include "CbmVertex.h"
9#include "TFile.h"
10
11#include <TCanvas.h>
12#include <TGeoManager.h>
13
14const Float_t pathCutMin = 1.0;
15const Float_t pathCutMax = 100.0;
16const Float_t DCA12CutMin = 0.0;
17const Float_t DCA12CutMax = 2.0;
18const Float_t DCA1CutMin = 0.0;
19const Float_t DCA1CutMax = 10.0;
20const Float_t DCA2CutMin = 0.0;
21const Float_t DCA2CutMax = 10.0;
22const Float_t DCA0CutMin = 0.0;
23const Float_t DCA0CutMax = 1.0;
24const Float_t PVXCutMin = -1.0;
25const Float_t PVXCutMax = 1.5;
26const Float_t PVYCutMin = -1.0;
27const Float_t PVYCutMax = 1.0;
28const Float_t PVZCutMin = -0.4;
29const Float_t PVZCutMax = 0.4;
30const Int_t NTrCutMin = 0;
31const Int_t NTrCutMax = 100;
32
34{
35 cout << "\nBmnPairFinder::Constructor()" << endl;
36 fDstHeader = nullptr;
37 fKalman = nullptr;
38 fParticlePair = nullptr;
39 fVertex = nullptr;
40 evNumber = 0;
41 fRunId = -10;
42 fParticle = unique_ptr<TParticlePDG>(particle);
43}
44
46{
47 cout << "\nBmnPairFinder::Destructor()" << endl;
48}
49
51{
52 cout << "\nBmnPairFinder::Init()" << endl;
53 switch (fParticle->PdgCode()) {
54 case 310:
55 fDecayFirstParticle = unique_ptr<TParticlePDG>(TDatabasePDG::Instance()->GetParticle(211));
56 fDecaySecondParticle = unique_ptr<TParticlePDG>(TDatabasePDG::Instance()->GetParticle(-211));
57 lowV0Z = -10.0;
58 break;
59 case 3122:
60 fDecayFirstParticle = unique_ptr<TParticlePDG>(TDatabasePDG::Instance()->GetParticle(2212));
61 fDecaySecondParticle = unique_ptr<TParticlePDG>(TDatabasePDG::Instance()->GetParticle(-211));
62 lowV0Z = 0.0;
63 break;
64 default:
65 LOGF(error, "Unsupported particle %d %s !", fParticle->PdgCode(), fParticle->GetName());
66 return kERROR;
67 break;
68 }
69 if (fParticle)
70 LOGF(info, "Search decays: %s -> %s %s", fParticle->GetName(), fDecayFirstParticle->GetName(),
71 fDecaySecondParticle->GetName());
72
73 FairRootManager* ioman = FairRootManager::Instance();
74 fDstHeader = (DstEventHeader*)ioman->GetObject("DstEventHeader.");
75 fStsTracks = (TClonesArray*)ioman->GetObject("StsVector");
76 fVertex = (CbmVertex*)ioman->GetObject("PrimaryVertex.");
77
78 fParticlePair = new TClonesArray("BmnParticlePair");
79 ioman->Register("ParticlePair", "Lambda", fParticlePair, kTRUE);
80
82
83 return kSUCCESS;
84}
85
86// ------------------------------------------------------------------
87
89{
90 // cout << "\nBmnPairFinder::Exec()" << endl;
91 // cout << "Event = " << evNumber++ << endl;
92
93 evNumber++;
94 if (evNumber % 1000 == 0)
95 printf("Event number: %d\n", evNumber);
96
97 fParticlePair->Delete();
98
99 if (fVertex->GetNTracks() < 2)
100 return;
101
102 if (fVertex->GetZ() > PVZCutMax || fVertex->GetZ() < PVZCutMin)
103 return;
104 if (fVertex->GetX() > PVXCutMax || fVertex->GetX() < PVXCutMin)
105 return;
106 if (fVertex->GetY() > PVYCutMax || fVertex->GetY() < PVYCutMin)
107 return;
108
109 if (fStsTracks->GetEntriesFast() > NTrCutMax || fStsTracks->GetEntriesFast() < NTrCutMin)
110 return;
111
112 for (Int_t iTrack = 0; iTrack < fStsTracks->GetEntriesFast(); iTrack++) {
113 CbmStsTrack* cbmststrack1 = (CbmStsTrack*)fStsTracks->At(iTrack);
114
115 BmnGlobalTrack globTr1;
116
117 // globTr1.SetGemTrackIndex(i);
118 globTr1.SetParamFirst(*(cbmststrack1->GetParamFirst()));
119 globTr1.SetParamLast(*(cbmststrack1->GetParamLast()));
120 Int_t nHitsPos = cbmststrack1->GetNStsHits();
121 // if (nHitsPos < 5) continue;
122 globTr1.SetNHits(nHitsPos);
123 globTr1.SetNDF(cbmststrack1->GetNDF());
124 globTr1.SetChi2(cbmststrack1->GetChi2());
125
126 FairTrackParam par_prot_Vp = *(globTr1.GetParamFirst());
127
128 if (par_prot_Vp.GetQp() < 0)
129 continue;
130 if (fKalman->TGeoTrackPropagate(&par_prot_Vp, fVertex->GetZ(), fDecayFirstParticle->PdgCode(), nullptr, nullptr,
131 kTRUE)
132 == kBMNERROR)
133 continue;
134
135 for (Int_t jTrack = 0; jTrack < fStsTracks->GetEntriesFast(); jTrack++) {
136 CbmStsTrack* cbmststrack2 = (CbmStsTrack*)fStsTracks->At(jTrack);
137
138 BmnGlobalTrack globTr2;
139
140 globTr2.SetParamFirst(*(cbmststrack2->GetParamFirst()));
141 globTr2.SetParamLast(*(cbmststrack2->GetParamLast()));
142 Int_t nHitsNeg = cbmststrack2->GetNStsHits();
143 // if (nHitsNeg < 4) continue;
144 globTr2.SetNHits(cbmststrack2->GetNStsHits());
145 globTr2.SetNDF(cbmststrack2->GetNDF());
146 globTr2.SetChi2(cbmststrack2->GetChi2());
147
148 FairTrackParam par_pion_Vp = *(globTr2.GetParamFirst());
149 if (par_pion_Vp.GetQp() > 0)
150 continue; // suppose negative particle is pi-
151 if (fKalman->TGeoTrackPropagate(&par_pion_Vp, fVertex->GetZ(), fDecaySecondParticle->PdgCode(), nullptr,
152 nullptr, kTRUE)
153 == kBMNERROR)
154 continue;
155 // Float_t vDist = TMath::Sqrt(Sq(par_pion_Vp.GetX() - fVertex->GetX()) + Sq(par_pion_Vp.GetY() -
156 // fVertex->GetY())); if (vDist > 2.0) continue;
157
159
160 Double_t V0Z = FindV0ByVirtualPlanes(&globTr1, &globTr2, 20, 50);
161 if (V0Z < lowV0Z || V0Z > 50)
162 continue;
163
164 FairTrackParam par_prot_V0 = *(globTr1.GetParamFirst());
165 FairTrackParam par_pion_V0 = *(globTr2.GetParamFirst());
166 if (fKalman->TGeoTrackPropagate(&par_prot_V0, V0Z, fDecayFirstParticle->PdgCode(), nullptr, nullptr, kTRUE)
167 == kBMNERROR)
168 continue;
169 if (fKalman->TGeoTrackPropagate(&par_pion_V0, V0Z, fDecaySecondParticle->PdgCode(), nullptr, nullptr, kTRUE)
170 == kBMNERROR)
171 continue;
172
173 if (fKalman->TGeoTrackPropagate(&par_prot_Vp, fVertex->GetZ(), fDecayFirstParticle->PdgCode(), nullptr,
174 nullptr, kTRUE)
175 == kBMNERROR)
176 continue;
177 if (fKalman->TGeoTrackPropagate(&par_pion_Vp, fVertex->GetZ(), fDecaySecondParticle->PdgCode(), nullptr,
178 nullptr, kTRUE)
179 == kBMNERROR)
180 continue;
181
182 Double_t V0X = .5 * (par_prot_V0.GetX() + par_pion_V0.GetX());
183 if (V0X < -2.0 || V0X > 2.0)
184 continue;
185 Double_t V0Y = .5 * (par_prot_V0.GetY() + par_pion_V0.GetY());
186 if (V0Y < -2.0 || V0Y > 2.0)
187 continue;
188
189 Float_t Path = GetPath(fVertex->GetX(), fVertex->GetY(), fVertex->GetZ(), V0X, V0Y, V0Z);
190 if (Path < pathCutMin || Path > pathCutMax)
191 continue;
192
193 Float_t DCA0 =
194 FindDCA0(par_prot_V0, par_pion_V0, fVertex->GetX(), fVertex->GetY(), fVertex->GetZ(), V0X, V0Y, V0Z);
195 if (DCA0 < DCA0CutMin || DCA0 > DCA0CutMax)
196 continue;
197
198 Float_t DCA1 =
199 TMath::Sqrt(Sq(par_prot_Vp.GetX() - fVertex->GetX()) + Sq(par_prot_Vp.GetY() - fVertex->GetY()));
200 if (DCA1 < DCA1CutMin || DCA1 > DCA1CutMax)
201 continue;
202
203 Float_t DCA2 =
204 TMath::Sqrt(Sq(par_pion_Vp.GetX() - fVertex->GetX()) + Sq(par_pion_Vp.GetY() - fVertex->GetY()));
205 if (DCA2 < DCA2CutMin || DCA2 > DCA2CutMax)
206 continue;
207
208 Float_t DCA12 =
209 TMath::Sqrt(Sq(par_prot_V0.GetX() - par_pion_V0.GetX()) + Sq(par_prot_V0.GetY() - par_pion_V0.GetY()));
210 if (DCA12 < DCA12CutMin || DCA12 > DCA12CutMax)
211 continue;
212
213 pair.SetPath(Path);
214 pair.SetDCA0(DCA0);
215 pair.SetDCA12(DCA12);
216 pair.SetDCA1(DCA1);
217 pair.SetDCA2(DCA2);
218
219 pair.SetV0X(V0X);
220 pair.SetV0Y(V0Y);
221 pair.SetV0Z(V0Z);
222
223 pair.SetTxPair(par_prot_V0.GetTx(), par_pion_V0.GetTx());
224 pair.SetTyPair(par_prot_V0.GetTy(), par_pion_V0.GetTy());
225
226 pair.SetMomPair(globTr1.GetP(), globTr2.GetP());
227 pair.SetNHitsPair(nHitsPos, nHitsNeg);
228 pair.SetChi2Pair(globTr1.GetChi2(), globTr2.GetChi2());
229 pair.SetNDFPair(globTr1.GetNDF(), globTr2.GetNDF());
230 pair.SetInvMass(FindInvMass(par_prot_V0, par_pion_V0));
231 pair.SetAngleDecayProducts(FindAngleDecayProducts(par_prot_V0, par_pion_V0));
232 pair.SetEtaPair(FindEta(par_prot_V0), FindEta(par_pion_V0));
233 new ((*fParticlePair)[fParticlePair->GetEntriesFast()]) BmnParticlePair(pair);
234 }
235 }
236}
237// -------------------------------------------------------------------
238
240 BmnGlobalTrack* track2,
241 Double_t z_0,
242 Double_t range)
243
244{
245
246 const Int_t nPlanes = 5; // FIXME
247
248 // if (V0Z < Vpz - 10. || V0Z > fDetector->GetGemStation(5)->GetZPosition()) // FIXME!
249 // continue;
250
251 while (range >= 0.1) {
252 Double_t zMax = z_0 + range;
253 Double_t zMin = z_0 - range;
254 Double_t zStep = (zMax - zMin) / nPlanes;
255
256 Double_t zPlane[nPlanes];
257 Double_t Dist[nPlanes];
258
259 FairTrackParam par1 = *(track1->GetParamFirst());
260 FairTrackParam par2 = *(track2->GetParamFirst());
261
262 for (Int_t iPlane = 0; iPlane < nPlanes; ++iPlane) {
263 zPlane[iPlane] = zMax - iPlane * zStep;
264 BmnStatus stat1 = fKalman->TGeoTrackPropagate(&par1, zPlane[iPlane], fDecayFirstParticle->PdgCode(),
265 nullptr, nullptr, kTRUE);
266 BmnStatus stat2 = fKalman->TGeoTrackPropagate(&par2, zPlane[iPlane], fDecaySecondParticle->PdgCode(),
267 nullptr, nullptr, kTRUE);
268
269 if (stat1 == kBMNERROR || stat2 == kBMNERROR) {
270 return DBL_MAX;
271 }
272
273 Dist[iPlane] = TMath::Sqrt(Sq(par1.GetX() - par2.GetX()) + Sq(par1.GetY() - par2.GetY()));
274 }
275
276 map<Double_t, Double_t> dist_zPlanes; // distance --> z-position
277
278 for (Int_t iPlane = 0; iPlane < nPlanes; iPlane++)
279 dist_zPlanes[Dist[iPlane]] = zPlane[iPlane];
280
281 z_0 = dist_zPlanes.begin()->second;
282
283 range /= 2;
284 }
285
286 return z_0;
287}
288
289Double_t BmnPairFinder::FindInvMass(FairTrackParam pi_plus_meson_V0, FairTrackParam pi_minus_meson_V0)
290{
291
292 Double_t Tx1, Ty1, Tx2, Ty2, p1, p2;
293 Double_t A1, A2;
294 TLorentzVector lPos, lNeg;
295
296 Tx1 = pi_plus_meson_V0.GetTx();
297 Ty1 = pi_plus_meson_V0.GetTy();
298 Tx2 = pi_minus_meson_V0.GetTx();
299 Ty2 = pi_minus_meson_V0.GetTy();
300 p1 = 1. / pi_plus_meson_V0.GetQp();
301 // cout<<"small_test_1:"<<""<<p1<<endl;
302 p2 = 1. / pi_minus_meson_V0.GetQp();
303 // cout<<"small_test_2:"<<""<<p2<<endl;
304 // armenPodol = ArmenterosPodol(proton_V0, pion_V0);
305
306 A1 = 1. / TMath::Sqrt(Tx1 * Tx1 + Ty1 * Ty1 + 1);
307 lPos.SetXYZM(Tx1 * A1 * p1, Ty1 * A1 * p1, p1 * A1, fDecayFirstParticle->Mass());
308
309 p2 *= -1.; // Since in the calculations pos. mom. values should be used
310
311 A2 = 1. / TMath::Sqrt(Tx2 * Tx2 + Ty2 * Ty2 + 1);
312 lNeg.SetXYZM(Tx2 * A2 * p2, Ty2 * A2 * p2, p2 * A2, fDecaySecondParticle->Mass());
313
314 // partPair.SetAlpha(armenPodol.X());
315 // partPair.SetPtPodol(armenPodol.Y());
316 return (TLorentzVector((lPos + lNeg)).Mag());
317}
318
320{
321 TVector3 V0(v0x, v0y, v0z);
322 TVector3 Vp(vPx, vPy, vPz);
323 return TVector3(V0 - Vp).Mag();
324}
325
326Double_t BmnPairFinder::FindDCA0(FairTrackParam pi_plus_meson_V0,
327 FairTrackParam pi_minus_meson_V0,
328 Double_t vPx,
329 Double_t vPy,
330 Double_t vPz,
331 Double_t v0x,
332 Double_t v0y,
333 Double_t v0z)
334{
335 Double_t Tx1, Ty1, Tx2, Ty2, p1, p2;
336 Double_t A1, A2;
337 TVector3 V0(v0x, v0y, v0z);
338 TVector3 Vp(vPx, vPy, vPz);
339
340 Tx1 = pi_plus_meson_V0.GetTx();
341 Ty1 = pi_plus_meson_V0.GetTy();
342 Tx2 = pi_minus_meson_V0.GetTx();
343 Ty2 = pi_minus_meson_V0.GetTy();
344 p1 = 1. / pi_plus_meson_V0.GetQp();
345 p2 = 1. / pi_minus_meson_V0.GetQp();
346
347 A1 = 1. / TMath::Sqrt(Tx1 * Tx1 + Ty1 * Ty1 + 1);
348 p2 *= -1.;
349 A2 = 1. / TMath::Sqrt(Tx2 * Tx2 + Ty2 * Ty2 + 1);
350
351 Double_t PzPart1 = Abs(p1) * A1;
352 Double_t PzPart2 = Abs(p2) * A2;
353
354 Double_t PzPart0 = PzPart1 + PzPart2;
355 Double_t PxPart0 = PzPart1 * Tx1 + PzPart2 * Tx2;
356 Double_t PyPart0 = PzPart1 * Ty1 + PzPart2 * Ty2;
357
358 Double_t TxPart0 = PxPart0 / PzPart0;
359 Double_t TyPart0 = PyPart0 / PzPart0;
360
361 Double_t xPart0 = TxPart0 * (Vp.Z() - V0.Z()) + V0.X();
362 Double_t yPart0 = TyPart0 * (Vp.Z() - V0.Z()) + V0.Y();
363
364 Double_t dca0 = TMath::Sqrt(Sq(xPart0 - Vp.X()) + Sq(yPart0 - Vp.Y()));
365
366 return dca0;
367}
368
369Double_t BmnPairFinder::FindEta(FairTrackParam pi_plus_meson_V0)
370{
371 Double_t Tx = pi_plus_meson_V0.GetTx();
372 Double_t Ty = pi_plus_meson_V0.GetTy();
373 Double_t p = 1. / pi_plus_meson_V0.GetQp();
374
375 Double_t Pz = Abs(p) / TMath::Sqrt(1 + Tx * Tx + Ty * Ty);
376
377 Double_t eta = 0.5 * Log((Abs(p) + Pz) / (Abs(p) - Pz));
378
379 return eta;
380}
381
382Double_t BmnPairFinder::FindAngleDecayProducts(FairTrackParam proton_V0, FairTrackParam pi_minus_meson_V0)
383{
384 Double_t Tx1, Ty1, Tx2, Ty2, p1, p2;
385 Double_t A1, A2;
386 TVector3 Pproton;
387 TVector3 Pnegpimeson;
388
389 Tx1 = proton_V0.GetTx();
390 Ty1 = proton_V0.GetTy();
391 Tx2 = pi_minus_meson_V0.GetTx();
392 Ty2 = pi_minus_meson_V0.GetTy();
393
394 p1 = 1. / proton_V0.GetQp();
395 p2 = 1. / pi_minus_meson_V0.GetQp();
396
397 A1 = 1. / TMath::Sqrt(Tx1 * Tx1 + Ty1 * Ty1 + 1);
398 p2 *= -1.;
399 A2 = 1. / TMath::Sqrt(Tx2 * Tx2 + Ty2 * Ty2 + 1);
400
401 Pproton.SetX(Tx1 * A1 * p1);
402 Pproton.SetY(Ty1 * A1 * p1);
403 Pproton.SetZ(p1 * A1);
404
405 Pnegpimeson.SetX(Tx2 * A2 * p2);
406 Pnegpimeson.SetY(Ty2 * A2 * p2);
407 Pnegpimeson.SetZ(p2 * A2);
408
409 Double_t dot_product = Pproton.Dot(Pnegpimeson);
410 // cout<<"1:"<<dot_product<<endl;
411 Double_t mag_Pproton = Pproton.Mag();
412 // cout<<"2:"<<mag_Pproton<<endl;
413 Double_t mag_Pnegpimeson = Pnegpimeson.Mag();
414 // cout<<"3:"<<mag_Pnegpimeson<<endl;
415 // cout<<"4:"<<ACos(dot_product/(mag_Pproton*mag_Pnegpimeson))<<endl;
416 // cout<<"5:"<<ACos(dot_product/(mag_Pproton*mag_Pnegpimeson))*180/Pi()<<endl;
417 return ACos(dot_product / (mag_Pproton * mag_Pnegpimeson)) * 180 / Pi();
418}
419
421{
422
423 cout << "\n-I- [BmnPairFinder::Finish] " << endl;
424}
Float_t Dist(Float_t x1, Float_t y1, Float_t x2, Float_t y2)
Definition BmnMath.cxx:432
const Float_t PVZCutMin
const Float_t DCA0CutMax
const Float_t pathCutMin
const Int_t NTrCutMin
const Float_t DCA1CutMin
const Float_t DCA12CutMax
const Float_t DCA12CutMin
const Float_t DCA1CutMax
const Float_t DCA0CutMin
const Float_t PVYCutMin
const Float_t DCA2CutMax
const Int_t NTrCutMax
const Float_t PVXCutMin
const Float_t PVZCutMax
const Float_t pathCutMax
const Float_t PVYCutMax
const Float_t PVXCutMax
const Float_t DCA2CutMin
int Int_t
float Float_t
double Double_t
constexpr Bool_t kTRUE
const char Option_t
BmnStatus
Define status code.
Definition BmnEnums.h:93
@ kBMNERROR
Error.
Definition BmnEnums.h:95
BmnGlobalTrack.h.
unique_ptr< TParticlePDG > fDecaySecondParticle
virtual InitStatus Init()
unique_ptr< TParticlePDG > fParticle
Double_t FindDCA0(FairTrackParam pi_plus_meson_V0, FairTrackParam pi_minus_meson_V0, Double_t vPx, Double_t vPy, Double_t vPz, Double_t v0x, Double_t v0y, Double_t v0z)
Double_t FindEta(FairTrackParam pi_plus_meson_V0)
BmnPairFinder(TParticlePDG *particle=TDatabasePDG::Instance() ->GetParticle("Lambda0"))
TClonesArray * fStsTracks
Double_t GetPath(Double_t vPx, Double_t vPy, Double_t vPz, Double_t v0x, Double_t v0y, Double_t v0z)
Double_t FindV0ByVirtualPlanes(BmnGlobalTrack *track1, BmnGlobalTrack *track2, Double_t z_0, Double_t range)
DstEventHeader * fDstHeader
BmnKalmanFilter * fKalman
virtual void Exec(Option_t *option)
virtual void Finish()
CbmVertex * fVertex
Double_t lowV0Z
Double_t FindAngleDecayProducts(FairTrackParam proton_V0, FairTrackParam pi_minus_meson_V0)
Double_t FindInvMass(FairTrackParam pi_plus_meson_V0, FairTrackParam pi_minus_meson_V0)
virtual ~BmnPairFinder()
TClonesArray * fParticlePair
unique_ptr< TParticlePDG > fDecayFirstParticle
void SetDCA2(Double_t val)
void SetTxPair(Double_t val1, Double_t val2)
void SetNHitsPair(vector< Int_t > part1, vector< Int_t > part2)
void SetTyPair(Double_t val1, Double_t val2)
void SetInvMass(Double_t val)
void SetChi2Pair(Double_t val1, Double_t val2)
void SetV0Y(Double_t val)
void SetV0Z(Double_t val)
void SetDCA1(Double_t val)
void SetAngleDecayProducts(Double_t val)
void SetDCA12(Double_t val)
void SetMomPair(Double_t val1, Double_t val2)
void SetDCA0(Double_t val)
void SetEtaPair(Double_t val1, Double_t val2)
void SetPath(Double_t val)
void SetV0X(Double_t val)
void SetNDFPair(Int_t val1, Int_t val2)
Int_t GetNDF() const
Definition BmnTrack.h:57
void SetChi2(Double_t chi2)
Definition BmnTrack.h:76
void SetParamLast(FairTrackParam &par)
Definition BmnTrack.h:72
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:63
Float_t GetChi2() const
Definition BmnTrack.h:55
Double_t GetP()
Definition BmnTrack.h:67
void SetNHits(Int_t n)
Definition BmnTrack.h:80
void SetParamFirst(FairTrackParam &par)
Modifiers.
Definition BmnTrack.h:70
void SetNDF(Int_t ndf)
Definition BmnTrack.h:78
FairTrackParam * GetParamLast()
Definition CbmStsTrack.h:70
Int_t GetNStsHits() const
Accessors.
Definition CbmStsTrack.h:60
Double_t GetChi2() const
Definition CbmStsTrack.h:66
FairTrackParam * GetParamFirst()
Definition CbmStsTrack.h:69
Int_t GetNDF() const
Definition CbmStsTrack.h:67
CbmVertex.h.
Definition CbmVertex.h:21
static TDatabasePDG * Instance()
void SetXYZM(Double_t x, Double_t y, Double_t z, Double_t m)
Double_t Z() const
void SetY(Double_t)
Double_t Y() const
Double_t Dot(const TVector3 &) const
Double_t X() const
Double_t Mag() const
void SetX(Double_t)
void SetZ(Double_t)
Double_t ACos(Double_t)
Double_t Log(Double_t x)
Double_t Sq(Double_t x)
Double_t Sqrt(Double_t x)
constexpr Double_t Pi()
Double_t Abs(Double_t d)