BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
MpdDCMSMMGenerator.cxx
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- MpdDCMSMMGenerator source file -----
3// ----- Created 27-AUG-2019 by Igor Rufanov -----
4// -------------------------------------------------------------------------
6
7#include "FairIon.h"
8#include "FairMCEventHeader.h"
9#include "FairPrimaryGenerator.h"
10#include "FairRunSim.h"
11#include "TDatabasePDG.h"
12#include "TParticlePDG.h"
13#include "TRandom.h"
14
15#include <cerrno>
16#include <cstring>
17using namespace std;
18using namespace TMath;
19
20// ----- Default constructor ------------------------------------------
32// ------------------------------------------------------------------------
33
34// ----- Standard constructor -----------------------------------------
37 , fInputFile(nullptr)
38 , fFileName(fileName)
39 , fBoostType("CmsFixed")
41 , fBoostBeta(0.0)
42 , fBoostGamma(0.0)
45{
46 cout << "-I MpdDCMSMMGenerator: Opening input file " << fFileName.Data() << endl;
47#ifdef GZIP_SUPPORT
48 fInputFile = gzopen(fFileName.Data(), "rb");
49#else
50 fInputFile = fopen(fFileName.Data(), "r");
51#endif
52 if (!fInputFile) {
53 Fatal("MpdDCMSMMGenerator", "Cannot open input file.");
54 exit(1);
55 }
56 // read file header
57 char read[200];
58 Int_t A1, Z1, A2, Z2;
59 Double_t T0, sqS;
60 Int_t header_size = 1; // old and current formats have different header size
61
62 for (Int_t i = 0; i < header_size; i++) {
63 if (!ReadLine(read, 200))
64 Fatal("MpdDCMSMMGenerator", "Cannot read the header of the input file %s: %s", fFileName.Data(),
65 GetReadError().Data());
66 cout << "-I MpdDCMSMMGenerator:" << read;
67 if (i == 0) {
68 string str0(read);
69
70 if (str0.find("Results of DCM-SMM") != string::npos) { // new version
72 header_size = 20;
73 } else if (str0.find("Results of QGSM") != string::npos) { // old version
75 header_size = 3;
76 } else {
77 Fatal("MpdDCMSMMGenerator", "Wrong input file format.");
78 exit(1);
79 }
80
81 A1 = stoi(str0.substr(str0.find("A1=") + 3, 3));
82 Z1 = stoi(str0.substr(str0.find("Z1=") + 3, 3));
83 A2 = stoi(str0.substr(str0.find("A2=") + 3, 3));
84 Z2 = stoi(str0.substr(str0.find("Z2=") + 3, 3));
85 // Int_t A1= 0;
86 } else if (i == 1) {
87 string str0(read); // hypcoa-b1.f line 711: ss=sqrt(1.88*(T0+1.88)) => mp=0.940
88 T0 = stof(str0.substr(str0.find("T0=") + 3, 8));
89 sqS = stof(str0.substr(str0.find("sqrt(s)=") + 8, 8));
90
91 Double_t mp = 0.940; // to obtain equivalence of read "sqrt(s)=" and calculated below mCMS
92 Double_t e = T0 + mp;
93 Double_t p = pow(e * e - mp * mp, 0.5);
94 Double_t mCMS = pow(2. * mp * (e + mp), 0.5);
95 cout << "mCMS=" << mCMS << endl;
96
97 if (fInputFileVersion == 0) {
99 if (fBoostType == "None")
101 else if (fBoostType == "CmsFixed") { // from CMS to target (2-nd particle) rest system
102 fBoostGamma = (e + mp) / mCMS;
103 fBoostBeta = pow(1. - 1. / (fBoostGamma * fBoostGamma), 0.5);
104 } else if (fBoostType == "CmsFixedInverted") { // from CMS to beam ( 1-st particle) rest system
105 fBoostGamma = -(e + mp) / mCMS;
106 fBoostBeta = -pow(1. - 1. / (fBoostGamma * fBoostGamma), 0.5);
107 } else if (fBoostType == "FixedFixedInverted") { // from target rest system to beam RS
108 fBoostGamma = -e / mp;
109 fBoostBeta = -p / e;
110 }
111 }
112 }
113 }
114 cout << "-I MpdDCMSMMGenerator: A1=" << A1 << " Z1=" << Z1 << " A2=" << A2 << " Z2=" << Z2 << " T0=" << T0
115 << " sqS=" << sqS << endl;
116
117 if (fSpectatorsON) /*Int_t n = */
118 RegisterIons();
119}
120// ------------------------------------------------------------------------
121
122// ----- Destructor ---------------------------------------------------
124{
125 if (fInputFile) {
126#ifdef GZIP_SUPPORT
127 gzclose(fInputFile);
128#else
129 fclose(fInputFile);
130#endif
131 fInputFile = NULL;
132 }
133 // cout<<"Leave Destructor of MpdDCMSMMGenerator"<<endl;
134}
135// ------------------------------------------------------------------------
136
137// ----- Public method ReadEvent --------------------------------------
138Bool_t MpdDCMSMMGenerator::ReadEvent(FairPrimaryGenerator* primGen)
139{
140 // ---> Check for input file
141 // cout<<"MpdDCMSMMGenerator::ReadEvent -------------------------"<<endl;
142 if (!fInputFile) {
143 cout << "-E MpdDCMSMMGenerator: Input file not open! " << endl;
144 return kFALSE;
145 }
146
147 // ---> Check for primary generator
148 if (!primGen) {
149 cout << "-E- MpdDCMSMMGenerator::ReadEvent: "
150 << "No PrimaryGenerator!" << endl;
151 return kFALSE;
152 }
153
154 char read[128]; // pnaleks: It was 80, but the line length of 98 chars has been seen
155 // a read error has to stop the run: otherwise the content left in the buffer would be parsed as the next line,
156 // giving a wrong event and bringing the reading out of step with the file. The end of the file is not an error
157 // here, it is handled below
158 if ((!ReadLine(read, 128)) && (!IsEndOfFile()))
159 Fatal(__func__, ": cannot read the header of the next event from %s: %s", fFileName.Data(),
160 GetReadError().Data());
161 Int_t evnr = 0;
162 Float_t b, bimpX, bimpY;
163 Int_t npp = 0; // pnaleks: number of produced particles after cascade and light clusters after coalescence stages
164 // (for fInputFileVersion == 1)
165
166 if (fInputFileVersion == 0) // old version
167 sscanf(read, "%d %f %f %f", &evnr, &b, &bimpX, &bimpY);
168 else // new version
169 sscanf(read, "%d %d %f %f %f", &evnr, &npp, &b, &bimpX, &bimpY);
170
171#ifdef GZIP_SUPPORT
172 if (gzeof(fInputFile)) {
173#else
174 if (feof(fInputFile)) {
175#endif
176 cout << "-I MpdDCMSMMGenerator : End of input file reached." << endl;
177 const Bool_t ZeroSizeEvents = kFALSE;
178 if (ZeroSizeEvents)
179 return kTRUE; // gives zero multiplicity events after EOF
180 else { // gives geant crash after EOF and one empty event in .root file
181#ifdef GZIP_SUPPORT
182 gzclose(fInputFile);
183#else
184 fclose(fInputFile);
185#endif
186 fInputFile = NULL;
187 return kFALSE;
188 }
189 }
190
191 Float_t phi = atan2(bimpY, bimpX);
192
193 // Set event id and impact parameter in MCEvent if not yet done
194 FairMCEventHeader* event = primGen->GetEvent();
195 if (event && (!event->IsSet())) {
196 event->SetEventID(evnr);
197 event->SetB(b);
198 event->MarkSet(kTRUE);
199 event->SetRotZ(phi);
200 }
201
203
204 Float_t px, py, pz;
205 for (Int_t ibeam = 0; ibeam < 3; ibeam++) { // spectators pz+, spectators pz-, participants.
206 Int_t np = 0;
207 if (!ReadLine(read, 128))
208 Fatal(__func__, ": cannot read event %d from %s: %s", evnr, fFileName.Data(), GetReadError().Data());
209 sscanf(read, "%d", &np); // cout<<np<<" "<<endl;
210 // Information for fInputFileVersion == 1:
211 // pnaleks: In this line is also an additional information for ibeam < 2,
212 // which is ignored because next lines contains this datta by fragments
213
214 for (Int_t i = 0; i < np; i++) {
215 if (!ReadLine(read, 128))
216 Fatal(__func__, ": cannot read event %d from %s: %s", evnr, fFileName.Data(), GetReadError().Data());
217 Int_t iN, iQ, iS = 0;
218 Float_t xxx = 0., mass;
219 Int_t pdgID_in = 0, iL;
220 Float_t pLabZ /*, pALabZ = 0*/;
221 if (fInputFileVersion == 0) {
222 if (ibeam < 2)
223 sscanf(read, "%d %d %f %f %f %f", &iN, &iQ, &xxx, &px, &py, &pz);
224 else
225 sscanf(read, "%d %d %d %f %f %f %f", &iN, &iQ, &iS, &px, &py, &pz, &mass);
226 } else { // fInputFileVersion == 1
227 Float_t var10, var11;
228 Int_t res = sscanf(read, "%d%d%d%d%d%f%f%f%f%f%f", &iQ, &iL, &iS, &iN, &pdgID_in, &px, &py, &pz, &pLabZ,
229 &var10, &var11);
230 switch (res) {
231 case 10:
232 mass = var10;
233 break;
234 case 11:
235 // pALabZ = var10;
236 mass = var11;
237 break;
238 default:
239 Fatal(__func__, ": data format mismatch, event %d\n", evnr);
240 }
241 } // if (fInputFileVersion == 0)
242
243 // Int_t pdgID=0;
244 Int_t pdgID = pdgID_in;
245 if (fInputFileVersion == 0) {
246 if (ibeam == 2) { // participants
247 Double_t massFactor = 1.;
248 pdgID = FindPDGCodeParticipant(iN, iS, iQ, mass, massFactor);
249 if (massFactor != 1.) {
250 px *= massFactor;
251 py *= massFactor;
252 pz *= massFactor;
253 }
254 // if (pdgID > 1000030000) cout<<pdgID<<" "<<iN<<" "<<iS<<" "<<iQ<<" "<<mass<<endl;
255 } else { // spectators
256 if (fSpectatorsON) {
257 Int_t dN =
258 -999; // difference of number of nucleons iN-NTab between DCM-DCMSMM and registered ions
259 pdgID = FindPDGCodeSpectator(iN, iQ, dN);
260 }
261 }
262 } else { // AZ-250324 - fix error with K0 and K0bar written as K0S and K0L and handle K0 and K0bar
263 if (pdgID == 310 || pdgID == 130 || TMath::Abs(pdgID) == 311) {
264 Double_t kSL = gRandom->Uniform(0., 1.);
265 if (kSL < 0.5)
266 pdgID = 130; // KL
267 else
268 pdgID = 310; // KS
269 }
270 } // AZ
271
272 TParticlePDG* particle = pdgID ? dbPDG->GetParticle(pdgID) : 0;
273 if (particle) {
274 if (fInputFileVersion == 0) {
275 if (fUseLorentzBoost) {
276 // TParticlePDG* particle= dbPDG->GetParticle(pdgID);
277 Double_t m = particle->Mass();
278 Double_t e = pow(px * px + py * py + pz * pz + m * m, 0.5);
279 Double_t pzF = fBoostGamma * (pz + fBoostBeta * e);
280 // Double_t eF = pow( px*px+ py*py+ pzF*pzF+ m*m, 0.5 );
281 // cout<<fBoostGamma<<" "<<fBoostBeta<<" "<<pdgID<<" "<<m<<" "<<pz<<" "<<pzF<<" "<<eF-m<<endl;
282 pz = pzF;
283 }
284 } else // fInputFileVersion == 1
285 pz = pLabZ;
286
287 // Int_t Geant3ID= dbPDG->ConvertPdgToGeant3(pdgID);
288 if (fabs(pz) > 50.)
289 cout << "pz=" << pz << " N=" << iN << " Q=" << iQ << " pdg=" << pdgID << "\n";
290 primGen->AddTrack(pdgID, px, py, pz, 0., 0., 0.);
291 } else {
292 // if( ibeam==2 || (ibeam==2&&fSpectatorsON))
293 if (fInputFileVersion == 1 || ibeam == 2 || fSpectatorsON) {
294 // cout<<"-I MpdDCMSMMGenerator : unknown particle N="<<iN<<" Q="<<iQ<<endl;
295 cout << "-I MpdDCMSMMGenerator : unknown particle N=" << iN << " Q=" << iQ;
296 if (fInputFileVersion == 1)
297 cout << " PDG_in=" << pdgID_in << " ibeam=" << ibeam << endl;
298 else
299 cout << endl;
300 }
301 }
302 }
303 }
304 return kTRUE;
305}
306// ------------------------------------------------------------------------
307
308// read the next line of the input file, kFALSE if no line was read (the end of the file or a read error)
310{
311#ifdef GZIP_SUPPORT
312 return gzgets(fInputFile, line, size) != Z_NULL;
313#else
314 return fgets(line, size, fInputFile) != nullptr;
315#endif
316}
317
318// whether the end of the input file has been reached
320{
321#ifdef GZIP_SUPPORT
322 return gzeof(fInputFile) != 0;
323#else
324 return feof(fInputFile) != 0;
325#endif
326}
327
328// reason why the last line was not read: the end of the file or the message of the read error
330{
331 if (IsEndOfFile())
332 return "unexpected end of the file";
333#ifdef GZIP_SUPPORT
334 int error_code = Z_OK;
335 const char* message = gzerror(fInputFile, &error_code);
336 // a system error (e.g. an input/output error of the file system) is described by errno
337 if (error_code == Z_ERRNO)
338 return strerror(errno);
339 return message;
340#else
341 return strerror(errno);
342#endif
343}
344
346{
347 if (count <= 0)
348 return kTRUE;
349 for (Int_t ii = 0; ii < count; ii++) {
350 // ---> Check for input file
351 if (!fInputFile) {
352 cout << "-E MpdDCMSMMGenerator: Input file not open! " << endl;
353 return kFALSE;
354 }
355 char read[128];
356 // the lines are read with the check, so that a read error or the end of the file stops the skipping
357 auto read_line = [this, &read, ii, count]() {
358 if (ReadLine(read, 128))
359 return kTRUE;
360 cout << "-E MpdDCMSMMGenerator: cannot skip event " << ii + 1 << " of " << count << " in " << fFileName
361 << ": " << GetReadError() << endl;
362 return kFALSE;
363 };
364 if (!read_line())
365 return kFALSE;
366 // Int_t evnr=0; Float_t b, bimpX, bimpY;
367 // sscanf(read, "%d %f %f %f", &evnr, &b, &bimpX, &bimpY);
368 for (Int_t ibeam = 0; ibeam < 3; ibeam++) {
369 Int_t np = 0;
370 if (!read_line())
371 return kFALSE;
372 sscanf(read, "%d", &np);
373 for (Int_t i = 0; i < np; i++) {
374 if (!read_line())
375 return kFALSE;
376 // Int_t iN, iQ, iS=0;
377 // Float_t xxx=0., mass, px,py,pz;
378 // if( ibeam < 2) sscanf(read, "%d %d %f %f %f %f", &iN, &iQ, &xxx, &px,&py,&pz); //cout<<np<<" "<<endl;
379 // else sscanf(read, "%d %d %d %f %f %f %f", &iN, &iQ, &iS, &px,&py,&pz, &mass);
380 }
381 }
382 }
383
384 return kTRUE;
385}
386// ------------------------------------------------------------------------
387
389{
390 Int_t k = 0;
391 Int_t aA = abs(A), aS = abs(S), aZ = abs(Z);
392
393 if (aA == 0) { // mesons and gamma =====================================
394 if (S == 0) { // not strange
395 if (aZ == 0) { // neutral
396 const Int_t n000 = 7; // gamma, pi0, eta, rho, omega, etaPri, phi
397 // Float_t M000M[n000]={ 0.0,0.13497,0.54745,0.7690,0.78265,0.95778,1.019455};
398 Float_t M000L[n000] = {0.0, 0.13400, 0.54700, 0.7680, 0.78200, 0.95700, 1.019390};
399 Float_t M000U[n000] = {0.0, 0.13510, 0.54810, 0.7711, 0.78310, 0.95810, 1.019610};
400 Int_t C000[n000] = {22, 111, 211, 113, 223, 331, 333};
401 for (Int_t i = 0; i < n000; i++) {
402 if (mass < M000L[i] || mass > M000U[i])
403 continue;
404 k = C000[i];
405 break;
406 }
407
408 if (k == 0 && mass > 0.4979 && mass < 0.4981)
409 k = 22; // rare particle in pairs in begining of list
410 // invariant mass of these pairs (considering them as gamma) is close to mass of pion
411 } else { // non-stranges charged mesons
412 if (mass > 0.1389 && mass < 0.1401)
413 k = 211 * Z; // pi+/-
414 else if (mass > 0.134 && mass < 0.136)
415 k = 211 * Z; // also pi+/-
416 else if (mass == 0.776)
417 k = 213 * Z; // rho+/-
418 else if (mass > 0.0004 && mass < 0.0011)
419 k = -11 * Z; // e+/e-
420 else if (mass > 0.1055 && mass < 0.1065)
421 k = -13 * Z; // mu+/mu-
422 }
423 } else { // A==0 && S!=0 strange mesons
424 if (aZ == 0) { // neutral K0, K*0
425 if (mass > 0.491 && mass < 0.4981) { // K0 S=1 311, AK0 S=-1 -311
426 Double_t KSL = gRandom->Uniform(0., 1.);
427 if (KSL < 0.5)
428 k = 130; // KL
429 else
430 k = 310; // KS
431 } else if (mass == 0.8922)
432 k = 313 * S; // K*0
433 }
434 if (aZ == 1) {
435 if (mass > 0.491 && mass < 0.4951)
436 k = 321 * Z; // K+
437 else if (mass > 0.8815 && mass > 0.8895)
438 k = 323 * Z; // K*+ (not occured)
439 }
440 }
441 } else if (aA == 1) { // barions ============================================
442 if (S == 0) { // Light baryons: n,p,Delta
443 if (Z == 0) {
444 if ((mass > 0.9389 && mass < 0.940) || mass < -1.)
445 k = 2112 * A; // n
446 else if (mass == 1.232)
447 k = 2114 * A; // Delta0 (not observed)
448 } else if (aZ == 1) {
449 if ((mass > 0.9379 && mass < 0.9401) || mass < -1.)
450 k = 2212 * A; // p
451 else if (mass == 1.232) {
452 if (A * Z == 1)
453 k = 2214 * A; // Delta+ (not observed)
454 else if (A * Z == -1)
455 k = 1114 * A; // Delta- (not observed)
456 }
457 } else if (aZ == 2) {
458 if (mass == 1.232)
459 k = 2224 * A; // Delta++ (not observed)
460 }
461 } else if (aS == 1) { // Lambda, Sigma, Sigma*
462 if (Z == 0) {
463 if (mass > 1.1149 && mass < 1.1161)
464 k = 3122 * A; // Lambda
465 else if (mass > 1.189 && mass < 1.1921)
466 k = 3212 * A; // Sigma0
467 else if (mass == 1.382)
468 k = 3214 * A; // Sigma*0 (not observed)
469 } else if (aZ == 1) { // Sigma-, Sigma+, Sigma*-, Sigma*+
470 if (mass > 1.1889 && mass < 1.1921)
471 k = 3222 * A; // Sigma+
472 else if (mass > 1.196 && mass < 1.1971)
473 k = 3112 * A; // Sigma-
474 else if (mass == 1.3823)
475 k = 3224 * A; // Sigma*+ (not observed)
476 else if (mass == 1.3875)
477 k = 3114 * A; // Sigma*- (not observed)
478 }
479 } else if (aS == 2) { // Xi, Xi*
480 if (Z == 0) { // Xi0, Xi*0
481 if (mass > 1.3139 && mass < 1.3161)
482 k = 3322 * A; // Xi0
483 else if (mass == 1.5318)
484 k = 3324 * A; // Xi*0
485 } else if (aZ == 1) { // Xi-, Xi*-
486 if (mass > 1.3139 && mass < 1.3221)
487 k = 3312 * A; // Xi-
488 else if (mass == 1.535)
489 k = 3314 * A; // Xi*-
490 }
491 } else if (aS == 3) { // Omega-
492 if (aZ == 1) {
493 if (mass > 1.6 && mass < 1.801)
494 k = 3334 * A; // Omega- 1.67245
495 }
496 }
497 } else if (A == 2) { // d is only valid ion (particle). All over are unstable. ==
498
499 if (S == 0) {
500 if (Z == 1 && (mass < -1 || (mass > 1.875 && mass < 1.877)))
501 k = 1000010020; // d
502 } else if (S == -1) { // unstable strange pairs => take the most heavy nucleon
503 if (Z == -1) {
504 k = 3112;
505 massFactor = 1.197436 / mass;
506 } // Sigma- n 2.13699 GeV (not occured)
507 else if (Z == 0 && mass > 2.0545 && mass < 2.0555)
508 {
509 k = 3122;
510 massFactor = 1.11568 / mass;
511 } // Lambda n
512 else if (Z == 1 && mass > 2.0535 && mass < 2.0545)
513 {
514 k = 3122;
515 massFactor = 1.11568 / mass;
516 } // Lambda p
517 else if (Z == 2)
518 {
519 k = 3222;
520 massFactor = 1.18937 / mass;
521 } // Sigma+ p 2.12764 GeV (not occured)
522 } else if (S == -2) {
523 if (Z == -1 && mass > 2.2545 && mass < 2.2615) {
524 k = 3312;
525 massFactor = 1.32132 / mass;
526 } // Xi- n M=2.26088 ( also ghost at 2.255 GeV)
527 else if (Z == 0)
528 {
529 if (mass > 2.2305 && mass < 2.2315) {
530 k = 3122;
531 massFactor = 1.11568 / mass;
532 } // Lambda Lambda M=2.23136
533 else if (mass > 2.2525 && mass < 2.2555)
534 {
535 k = 3322;
536 massFactor = 1.19255 / mass;
537 } // Xi0 n M=2.25446
538 else if (mass > 2.2595 && mass < 2.2605)
539 {
540 k = 3312;
541 massFactor = 1.197436 / mass;
542 } // Xi- p M=2.25959
543 } else if (Z == 1 && mass > 2.2525 && mass < 2.2535) {
544 k = 3322;
545 massFactor = 1.3149 / mass;
546 } // Xi0 p M=2.25317 (132)
547 } else if (S == -3) {
548 if (Z == -1 && mass > 2.4305 && mass < 2.4375) {
549 k = 3312;
550 massFactor = 1.197436 / mass;
551 } // Xi- Lambda M=2.43700 ( also ghost at 2.431 GeV) (37)
552 else if (Z == 0 && mass > 2.4301 && mass < 2.4315)
553 {
554 k = 3322;
555 massFactor = 1.3149 / mass;
556 } // Xi0 Lambda M=2.43058 (36)
557 } else if (S == -4 && Z == -1 && mass > 2.6295 && mass < 2.6365) {
558 k = 3312;
559 massFactor = 1.32132 / mass;
560 } // Xi- Xi0 M=2.63622 (1)
561 } else if (A == 3) {
562 //
563 if (S == 0) {
564 if (Z == 1 && mass > 2.8085 && mass < 2.8095)
565 k = 1000010030; // t
566 else if (Z == 2 && mass > 2.8085 && mass < 2.8095)
567 k = 1000020030; // He3
568 } else if (S == -1) {
569 if (Z == 1 && mass > 2.9915 && mass < 2.9925)
570 k = 1010010030; // H3L
571 }
572 } else if (A == 4) {
573 if (S == 0) {
574 if (Z == 2 && mass > 3.7275 && mass < 3.7285)
575 k = 1000020040; // Alpha
576 // else if( Z==1 && mass>3.7275 && mass<3.7285) k=1000020040; // H4
577 } else if (S == -1) {
578 if (Z == 1 && mass > 3.9245 && mass < 3.9255)
579 k = 1010010040; // H4L
580 if (Z == 2 && mass > 3.9245 && mass < 3.9255)
581 k = 1010020040; // He4L
582 } else if (S == -2) {
583 // if( Z==1 && mass>4.1065 && mass<4.1075 ) k=1020010040; // H4LL (6 per 100k MPD events)
584 }
585 } else if (A == 5) {
586 // if( S==-2 && mass>5.0405 && mass<5.0415) k= 1020020050; // He5LL (0 per 100k MPD events)
587 }
588
589 // if( aA<=2 && k==0) {
590 if (mass > -10 && k == 0) {
591 // if( A==0 && S==0 && Z==0 && fabs( mass)-0.498 < 0.001) {}
592 // else
593 cout << "A=" << A << " S=" << S << " Z=" << Z << " mass= " << mass << " Pdg=" << k << endl;
594 }
595 // k= 1000030060;
596 return k;
597}
598// ------------------------------------------------------------------------
599
601{
602 Int_t k = 0;
603 dN = 0;
604 if (Z == 0 && N == 1)
605 k = 2112; // n
606 else if (Z == 1 && N == 1)
607 k = 2212; // p
608 // else if( Z>=1 && Z<=fZMax ) { // find registeried ion with a same Z
609 // Int_t NTab;
610 // if( N<fN1[Z]) { NTab=fN1[Z]; dN=N-fN1[Z];}
611 // else if( N<=fN2[Z]) { NTab=N; dN=0;} // same B
612 // else { NTab=fN2[Z]; dN=N-fN2[Z];}
613 // k=1000000000+ Z*10000+ NTab*10;
614 // }
615 else if (N >= 2 && N <= fBMax) { // find registeried ion with a same baryon number
616 Int_t ZTab;
617 if (Z < fZ1[N]) {
618 ZTab = fZ1[N];
619 dN = Z - fZ1[N];
620 } else if (Z <= fZ2[N]) {
621 ZTab = Z;
622 dN = 0;
623 } // same Z
624 else
625 {
626 ZTab = fZ2[N];
627 dN = Z - fZ2[N];
628 }
629 k = 1000000000 + ZTab * 10000 + N * 10;
630 }
631 return k;
632}
633// ------------------------------------------------------------------------
634
636{
637 // see ./fairsoft/transport/geant3/TGeant3/TGeant3.cxx::AddParticlesToPdgDataBase()
638 // or ./fairsoft/transport/geant4_vmc/source/physics/src/TG4ParticlesManager::DefineParticles()
639 // Deuteron, Triton, Alpha, HE3, HyperTriton and their ANTI-particle are added there
640 // also Special particles: "Cherenkov", "FeedbackPhoton".
641 // He4L, H4L are added in mpdroot/gconfig/UserDecay.C
642
643 struct gpions
644 {
645 Int_t N, Z;
646 Char_t Name[6];
647 Double_t Mass;
648 };
649 const Int_t NSI = 236;
650 const struct gpions ions[NSI] = {
651 {2, 1, "d", 0.0},
652 {3, 1, "t", 0.0},
653 {3, 2, "He3", 0.0},
654 {4, 2, "He4", 0.0},
655 {5, 2, "He5q", 4.6688534},
656 {6, 2, "He6", 5.6065596},
657 {7, 2, "He7", 6.5465601},
658 {6, 3, "Li6", 5.60305},
659 {7, 3, "Li7", 6.53536},
660 {8, 3, "Li8", 7.4728996},
661 {9, 3, "Li9", 8.40840118},
662 {7, 4, "Be7", 6.53622},
663 {8, 4, "Be8q", 7.4568945},
664 {9, 4, "Be9", 8.39479},
665 {10, 4, "Be10", 9.32754},
666 {11, 4, "Be11", 10.2666},
667 {12, 4, "Be12", 11.203006},
668 {8, 5, "B8", 7.4748744},
669 {9, 5, "B9", 8.3958634},
670 {10, 5, "B10", 9.32699},
671 {11, 5, "B11", 10.25510},
672 {12, 5, "B12", 11.1913},
673 {9, 6, "C9", 8.4123574},
674 {10, 6, "C10", 9.3306397},
675 {11, 6, "C11", 10.257085},
676 {12, 6, "C12", 11.17793},
677 {13, 6, "C13", 12.112548},
678 {14, 6, "C14", 13.043937},
679 {15, 6, "C15", 13.98228},
680 {16, 6, "C16", 14.917600},
681 {11, 7, "N11", 10.257085},
682 {12, 7, "N12", 11.195267},
683 {13, 7, "N13", 12.11477},
684 {14, 7, "N14", 13.04378},
685 {15, 7, "N15", 13.972513},
686 {16, 7, "N16", 14.90959},
687 {17, 7, "N17", 15.843271},
688 // N11, o11-o13 are only unstable isotopes in this list (add for SRC analysis)
689 {11, 8, "O11", 10.257085},
690 {12, 8, "O12", 11.195267},
691 {13, 8, "O13", 12.132536},
692 {14, 8, "O14", 13.048925},
693 {15, 8, "O15", 13.97527},
694 {16, 8, "O16", 14.89917},
695 {17, 8, "O17", 15.834591},
696 {18, 8, "O18", 16.76611},
697 {19, 8, "O19", 17.701723},
698 {19, 9, "F19", 17.69690},
699 {20, 10, "Ne20", 18.62284},
700 {21, 10, "Ne21", 19.555644},
701 {22, 10, "Ne22", 20.484846},
702 {23, 11, "Na23", 21.41483},
703 {24, 12, "Mg24", 22.34193},
704 {25, 12, "Mg25", 23.274160},
705 {26, 12, "Mg26", 24.202632},
706 {27, 13, "Al27", 25.13314},
707 {28, 14, "Si28", 26.06034},
708 {29, 14, "Si29", 26.991434},
709 {30, 14, "Si30", 27.920390},
710 {31, 15, "P31", 28.85188},
711 {32, 16, "S32", 29.78180},
712 {33, 16, "S33", 30.712719},
713 {34, 16, "S34", 31.640868},
714 {35, 17, "Cl35", 32.57328},
715 {36, 18, "Ar36", 33.50356},
716 {37, 18, "Ar37", 34.434334},
717 {38, 18, "Ar38", 35.362061},
718 {39, 19, "K39", 36.29447},
719 {40, 20, "Ca40", 37.22492},
720 {41, 20, "Ca41", 38.156120},
721 {42, 20, "Ca42", 39.084205},
722 {43, 20, "Ca43", 40.015838},
723 {44, 20, "Ca44", 40.944272},
724 {45, 21, "Sc45", 41.87617},
725 {46, 22, "Ti46", 42.804605},
726 {47, 22, "Ti47", 43.735290},
727 /*
728 { 48, 22, "Ti48", 44.66324}, { 49, 22, "Ti49", 45.594652}, { 50, 22, "Ti50", 46.523278},
729 { 51, 23, "V51", 47.45401}, { 52, 24, "Cr52", 48.38228}, { 53, 24, "Cr53", 49.313903},
730 { 54, 24, "Cr54", 50.243749}, { 55, 25, "Mn55", 51.17447}, { 56, 26, "Fe56", 52.10307},
731 { 57, 26, "Fe57", 53.034984}, { 58, 26, "Fe58", 53.964505},
732 { 59, 27, "Co59", 54.89593}, { 60, 28, "Ni60", 55.825174}, { 61, 28, "Ni61", 56.756919},
733 { 62, 28, "Ni62", 57.685888}, { 63, 29, "Cu63", 58.61856}, { 64, 29, "Cu64", 59.550198},
734 { 65, 29, "Cu65", 60.479853}, { 66, 30, "Zn66", 61.409711}, { 67, 30, "Zn67", 62.342224},
735 { 68, 30, "Zn68", 63.271592}, { 69, 31, "Ga69", 64.203765}, { 70, 31, "Ga70", 65.135677},
736 { 71, 31, "Ga71", 66.065941}, { 72, 32, "Ge72", 66.994989}, { 73, 32, "Ge73", 68.857141},
737 { 74, 32, "Ge74", 68.85715}, { 75, 33, "As75", 69.789025}, { 76, 34, "Se76", 70.718300},
738 { 77, 34, "Se77", 71.650446}, { 78, 34, "Se78", 72.579514}, { 79, 34, "Se79", 73.512116},
739 { 80, 34, "Se80", 74.44178}, { 81, 35, "Br81", 75.373047}, { 82, 36, "Kr82", 76.301927},
740 { 83, 36, "Kr83", 77.234029}, { 84, 36, "Kr84", 78.16309}, { 85, 37, "Rb85", 79.09483},
741 { 86, 38, "Sr86", 80.023969}, { 87, 38, "Sr87", 80.955106}, { 88, 38, "Sr88", 81.88358},
742 { 89, 39, "Y89", 82.81527}, { 90, 40, "Zr90", 83.74571}, { 91, 40, "Zr91", 84.678073},
743 { 92, 40, "Zr92", 85.609003}, { 93, 41, "Nb93", 86.541743}, { 94, 41, "Nb94", 87.474081},
744 { 95, 42, "Mo95", 88.404232}, { 96, 42, "Mo96", 89.334643}, { 97, 42, "Mo97", 90.267388},
745 { 98, 42, "Mo98", 91.19832}, { 99, 43, "Tc99", 92.13059}, { 100, 44, "Ru100", 93.060191},
746 { 101, 44, "Ru101", 93.992955}, { 102, 44, "Ru102", 94.923300}, { 103, 45, "Rh103", 95.855870},
747 { 104, 46, "Pd104", 96.785997}, { 105, 46, "Pd105", 97.718468}, { 106, 46, "Pd106", 98.64997},
748 { 107, 47, "Ag107", 99.581467}, { 108, 47, "Ag108", 100.51376}, { 109, 47, "Ag109", 101.444134},
749 { 110, 48, "Cd110", 102.37400}, { 111, 48, "Cd111", 103.30659}, { 112, 48, "Cd112", 104.23676},
750 { 113, 48, "Cd113", 105.16978}, { 114, 48, "Cd114", 106.10997}, { 115, 49, "In115", 107.03228},
751 { 116, 49, "In116", 107.96507}, { 117, 49, "In117", 108.89586}, { 118, 50, "Sn118", 109.82465},
752 { 119, 50, "Sn119", 110.75773}, { 120, 50, "Sn120", 111.68821},
753 { 121, 51, "Sb121", 112.62119}, { 122, 51, "Sb122", 113.55395}, { 123, 51, "Sb123", 114.48455},
754 { 124, 52, "Te124", 115.41474}, { 125, 52, "Te125", 116.3477}, { 126, 52, "Te126", 117.27819},
755 { 127, 53, "I127", 118.21077}, { 128, 53, "I128", 119.14351}, { 129, 53, "I129", 120.07424 },
756 { 130, 54, "Xe130", 121.00435}, { 131, 54, "Xe131", 121.93731}, { 132, 54, "Xe132", 122.86796},
757 { 133, 55, "Cs133", 123.80064}, { 134, 55, "Cs134", 124.73332}, { 135, 55, "Cs135", 125.66412195},
758 { 136, 56, "Ba136", 126.59431}, { 137, 56, "Ba137", 127.52697}, { 138, 56, "Ba138", 128.45793},
759 { 139, 57, "La139", 129.39045}, { 140, 58, "Ce140", 130.32111}, { 141, 59, "Pr141", 131.2546475},
760 { 142, 60, "Nd142", 132.18621}, { 143, 60, "Nd143", 133.11965}, { 144, 60, "Nd144", 134.05140},
761 { 145, 60, "Nd145", 134.9852}, { 146, 60, "Nd146", 135.91721}, { 147, 60, "Nd147", 136.85148},
762 { 148, 61, "Pm148", 137.78426}, { 149, 61, "Pm149", 138.71655},
763 { 150, 62, "Sm150", 139.64706}, { 151, 62, "Sm151", 140.58103}, { 152, 62, "Sm152", 141.51236},
764 { 153, 63, "Eu153", 142.44522}, { 154, 64, "Gd154", 143.37638}, { 155, 64, "Gd155", 144.30951},
765 { 156, 64, "Gd156", 145.24054}, { 157, 64, "Gd157", 146.17374}, { 158, 65, "Tb158", 147.10659},
766 { 159, 65, "Tb159", 148.03802}, { 160, 65, "Tb160", 148.97121}, { 161, 65, "Tb161", 149.90308},
767 { 162, 66, "Dy162", 150.83386}, { 163, 66, "Dy163", 151.76715}, { 164, 66, "Dy164", 152.69909},
768 { 165, 67, "Ho165", 153.63162}, { 166, 68, "Er166", 154.56309}, { 167, 68, "Er167", 155.49622},
769 { 168, 68, "Er168", 156.42801}, { 169, 69, "Tm169", 157.36122}, { 170, 69, "Tm170", 158.29420},
770 { 171, 69, "Tm171", 159.22628}, { 172, 70, "Yb172", 160.15773}, { 173, 70, "Yb173", 161.09092},
771 { 174, 70, "Yb174", 162.02245}, { 175, 71, "Lu175", 162.95630}, { 176, 72, "Hf176", 163.88838},
772 { 177, 72, "Hf177", 164.82157}, { 178, 72, "Hf178", 165.75351}, { 179, 72, "Hf179", 166.68697},
773 { 180, 73, "Ta180", 167.62000}, { 181, 73, "Ta181", 168.55199}, { 182, 74, "W182", 169.48368},
774 { 183, 74, "W183", 170.41705}, { 184, 74, "W184", 171.34924}, { 185, 75, "Re185", 172.28258},
775 { 186, 76, "Os186", 173.21490}, { 187, 76, "Os187", 174.14818}, { 188, 76, "Os188", 175.079754},
776 { 189, 76, "Os189", 176.01340}, { 190, 76, "Os190", 176.94517}, { 191, 77, "Ir191", 177.878667},
777 { 192, 78, "Pt192", 178.81057}, { 193, 78, "Pt193", 179.74388}, { 194, 78, "Pt194", 180.67513},
778 { 195, 78, "Pt195", 181.60855}, { 196, 78, "Pt196", 182.54020}, { 197, 79, "Au197", 183.47324},
779 { 198, 80, "Hg198", 184.40488}, { 199, 80, "Hg199", 185.33778}, { 200, 80, "Hg200", 186.26932},
780 { 201, 80, "Hg201", 187.20265}, { 202, 80, "Hg202", 188.13451}, { 203, 81, "Tl203", 189.06754},
781 { 204, 81, "Tl204", 190.00045}, { 205, 81, "Tl205", 190.93247}, { 206, 82, "Pb206", 191.86400},
782 { 207, 82, "Pb207", 192.79683}, { 208, 82, "Pb208", 193.72907}};
783 */
784 {48, 23, "V48", 44.66324},
785 {49, 23, "V49", 45.594652},
786 {50, 24, "Cr50", 46.523278},
787 {51, 24, "Cr51", 47.45401},
788 {52, 25, "Mn52", 48.38228},
789 {53, 25, "Mn53", 49.313903},
790 {54, 26, "Fe54", 50.243749},
791 {55, 26, "Fe55", 51.17447},
792 {56, 27, "Co56", 52.10307},
793 {57, 27, "Co57", 53.034984},
794 {58, 27, "Co58", 53.964505},
795 {59, 28, "Ni59", 54.89593},
796 {60, 28, "Ni60", 55.825174},
797 {61, 28, "Ni61", 56.756919},
798 {62, 29, "Cu62", 57.685888},
799 {63, 29, "Cu63", 58.61856},
800 {64, 30, "Zn64", 59.550198},
801 {65, 30, "Zn65", 60.479853},
802 {66, 31, "Ga66", 61.409711},
803 {67, 31, "Ga67", 62.342224},
804 {68, 32, "Ge68", 63.271592},
805 {69, 32, "Ge69", 64.203765},
806 {70, 33, "As70", 65.135677},
807 {71, 33, "As71", 66.065941},
808 {72, 34, "Se72", 66.994989},
809 {73, 34, "Se73", 68.857141},
810 {74, 34, "Se74", 68.85715},
811 {75, 35, "Br75", 69.789025},
812 {76, 35, "Br76", 70.718300},
813 {77, 36, "Kr77", 71.650446},
814 {78, 36, "Kr78", 72.579514},
815 {79, 36, "Kr79", 73.512116},
816 {80, 37, "Rb80", 74.44178},
817 {81, 37, "Rb81", 75.373047},
818 {82, 38, "Sr82", 76.301927},
819 {83, 38, "Sr83", 77.234029},
820 {84, 39, "Y84", 78.16309},
821 {85, 39, "Y85", 79.09483},
822 {86, 40, "Zr86", 80.023969},
823 {87, 40, "Zr87", 80.955106},
824 {88, 40, "Zr88", 81.88358},
825 {89, 41, "Nb89", 82.81527},
826 {90, 42, "Mo90", 83.74571},
827 {91, 42, "Mo91", 84.678073},
828 {92, 43, "Tc92", 85.609003},
829 {93, 43, "Tc93", 86.541743},
830 {94, 43, "Tc94", 87.474081},
831 {95, 44, "Ru95", 88.404232},
832 {96, 44, "Ru96", 89.334643},
833 {97, 45, "Rh97", 90.267388},
834 {98, 45, "Rh98", 91.19832},
835 {99, 45, "Rh99", 92.13059},
836 {100, 46, "Pd100", 93.060191},
837 {101, 46, "Pd101", 93.992955},
838 {102, 47, "Ag102", 94.923300},
839 {103, 47, "Ag103", 95.855870},
840 {104, 47, "Ag104", 96.785997},
841 {105, 48, "Cd105", 97.718468},
842 {106, 48, "Cd106", 98.64997},
843 {107, 49, "In107", 99.581467},
844 {108, 49, "In108", 100.51376},
845 {109, 50, "Sn109", 101.444134},
846 {110, 50, "Sn110", 102.37400},
847 {111, 51, "Sb111", 103.30659},
848 {112, 51, "Sb112", 104.23676},
849 {113, 52, "Te113", 105.16978},
850 {114, 52, "Te114", 106.10997},
851 {115, 52, "Te115", 107.03228},
852 {116, 53, "I116", 107.96507},
853 {117, 53, "I117", 108.89586},
854 {118, 54, "Xe118", 109.82465},
855 {119, 54, "Xe119", 110.75773},
856 {120, 55, "Cs120", 111.68821},
857 {121, 55, "Cs121", 112.62119},
858 {122, 56, "Ba122", 113.55395},
859 {123, 56, "Ba123", 114.48455},
860 {124, 56, "Ba124", 115.41474},
861 {125, 57, "La125", 116.3477},
862 {126, 57, "La126", 117.27819},
863 {127, 58, "Ce127", 118.21077},
864 {128, 58, "Ce128", 119.14351},
865 {129, 58, "Ce129", 120.07424},
866 {130, 59, "Pr130", 121.00435},
867 {131, 59, "Pr131", 121.93731},
868 {132, 60, "Nd132", 122.86796},
869 {133, 60, "Nd133", 123.80064},
870 {134, 60, "Nd134", 124.73332},
871 {135, 61, "Pm135", 125.66412195},
872 {136, 62, "Sm136", 126.59431},
873 {137, 62, "Sm137", 127.52697},
874 {138, 62, "Sm138", 128.45793},
875 {139, 63, "Eu139", 129.39045},
876 {140, 63, "Eu140", 130.32111},
877 {141, 64, "Gd141", 131.2546475},
878 {142, 64, "Gd142", 132.18621},
879 {143, 64, "Gd143", 133.11965},
880 {144, 65, "Tb144", 134.05140},
881 {145, 65, "Tb145", 134.9852},
882 {146, 66, "Dy146", 135.91721},
883 {147, 66, "Dy147", 136.85148},
884 {148, 66, "Dy148", 137.78426},
885 {149, 67, "Ho149", 138.71655},
886 {150, 67, "Ho150", 139.64706},
887 {151, 67, "Ho151", 140.58103},
888 {152, 68, "Er152", 141.51236},
889 {153, 68, "Er153", 142.44522},
890 {154, 69, "Tm154", 143.37638},
891 {155, 69, "Tm155", 144.30951},
892 {156, 69, "Tm156", 145.24054},
893 {157, 70, "Yb157", 146.17374},
894 {158, 70, "Yb158", 147.10659},
895 {159, 71, "Lu159", 148.03802},
896 {160, 71, "Lu160", 148.97121},
897 {161, 71, "Lu161", 149.90308},
898 {162, 72, "Hf162", 150.83386},
899 {163, 72, "Hf163", 151.76715},
900 {164, 72, "Hf164", 152.69909},
901 {165, 72, "Hf165", 153.63162},
902 {166, 73, "Ta166", 154.56309},
903 {167, 73, "Ta167", 155.49622},
904 {168, 73, "Ta168", 156.42801},
905 {169, 74, "W169", 157.36122},
906 {170, 74, "W170", 158.29420},
907 {171, 75, "Re171", 159.22628},
908 {172, 75, "Re172", 160.15773},
909 {173, 75, "Re173", 161.09092},
910 {174, 75, "Re174", 162.02245},
911 {175, 75, "Re175", 162.95630},
912 {176, 75, "Re176", 163.88838},
913 {177, 76, "Os177", 164.82157},
914 {178, 76, "Os178", 165.75351},
915 {179, 76, "Os179", 166.68697},
916 {180, 77, "Ir180", 167.62000},
917 {181, 77, "Ir181", 168.55199},
918 {182, 77, "Ir182", 169.48368},
919 {183, 77, "Ir183", 170.41705},
920 {184, 77, "Ir184", 171.34924},
921 {185, 78, "Pt185", 172.28258},
922 {186, 78, "Pt186", 173.21490},
923 {187, 78, "Pt187", 174.14818},
924 {188, 78, "Pt188", 175.079754},
925 {189, 78, "Pt189", 176.01340},
926 {190, 78, "Pt190", 176.94517},
927 {191, 78, "Pt191", 177.878667},
928 {192, 79, "Au192", 178.81057},
929 {193, 79, "Au193", 179.74388},
930 {194, 79, "Au194", 180.67513},
931 {195, 79, "Au195", 181.60855},
932 {196, 79, "Au196", 182.54020},
933 {197, 79, "Au197", 183.47324},
934 {198, 80, "Hg198", 184.40488},
935 {199, 80, "Hg199", 185.33778},
936 {200, 80, "Hg200", 186.26932},
937 {201, 80, "Hg201", 187.20265},
938 {202, 80, "Hg202", 188.13451},
939 {203, 81, "Tl203", 189.06754},
940 {204, 81, "Tl204", 190.00045},
941 {205, 81, "Tl205", 190.93247},
942 {206, 82, "Pb206", 191.86400},
943 {207, 82, "Pb207", 192.79683},
944 {208, 82, "Pb208", 193.72907}};
946 for (Int_t i = 0; i < NSI; i++) {
947 if (ions[i].Mass < 0.1)
948 continue; // expected that it is already registered
949 Int_t ID = 1000000000 + ions[i].Z * 10000 + ions[i].N * 10;
950 if (dbPDG->GetParticle(ID))
951 continue;
952 FairIon* ion = new FairIon(ions[i].Name, ions[i].Z, ions[i].N, ions[i].Z);
953 FairRunSim::Instance()->AddNewIon(ion);
954 }
955 // Min and max baryon charge for a given Z
956 for (Int_t i = 0; i < NSI; i++) {
957 Int_t z = ions[i].Z;
958 if (z < 0 && z > fZMax)
959 continue;
960 fN2[z] = ions[i].N;
961 }
962 for (Int_t i = NSI - 1; i >= 0; i--) {
963 Int_t z = ions[i].Z;
964 if (z < 0 && z > fZMax)
965 continue;
966 fN1[z] = ions[i].N;
967 }
968
969 // Min and max Z for a given baryon charge
970 for (Int_t i = 0; i < NSI; i++) {
971 Int_t B = ions[i].N;
972 if (B < 0 && B > fBMax)
973 continue;
974 fZ2[B] = ions[i].Z;
975 }
976 for (Int_t i = NSI - 1; i >= 0; i--) {
977 Int_t B = ions[i].N;
978 if (B < 0 && B > fBMax)
979 continue;
980 fZ1[B] = ions[i].Z;
981 }
982
983 for (int i = 2; i <= fBMax; i++)
984 cout << i << ": " << fZ1[i] << "-" << fZ2[i] << " ";
985 cout << "\n";
986
987 return NSI;
988}
friend F32vec4 fabs(const F32vec4 &a)
Definition P4_F32vec4.h:52
int i
Definition P4_F32vec4.h:22
__m128 m
Definition P4_F32vec4.h:27
bool Bool_t
int Int_t
char Char_t
float Float_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TRandom * gRandom
TString fFileName
Input file.
MpdDCMSMMGenerator()
Default constructor without arguments should not be used.
Int_t FindPDGCodeSpectator(Int_t N, Int_t Z, Int_t &dN)
static const Int_t fBMax
static const Int_t fZMax
Int_t FindPDGCodeParticipant(Int_t A, Int_t S, Int_t Z, Float_t mass, Double_t &massFactor)
Bool_t ReadLine(char *line, Int_t size)
Bool_t ReadEvent(FairPrimaryGenerator *primGen)
Bool_t SkipEvents(Int_t count)
static TDatabasePDG * Instance()
TParticlePDG * GetParticle(const char *name) const
Double_t Mass() const
RVec< PromoteType< T > > abs(const RVec< T > &v)
RVec< PromoteTypes< T0, T1 > > pow(const RVec< T0 > &v, const T1 &y)
RVec< PromoteTypes< T0, T1 > > atan2(const RVec< T0 > &v, const T1 &y)
Double_t Abs(Double_t d)
Definition json.hpp:4446