Project
Loading...
Searching...
No Matches
O2DatabasePDG.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12//
13// Created by Sandro Wenzel on 11.08.22.
14//
15
16#ifndef O2_O2DATABASEPDG_H
17#define O2_O2DATABASEPDG_H
18
19#include <string>
20#include "TDatabasePDG.h"
21#include "TParticlePDG.h"
22
23namespace o2
24{
25
26// An ALICE specific extension of ROOT's TDatabasePDG
27//
28// By using O2DatabasePDG::Instance() in our code instead of TDatabasePDG::Instance(), correct initialization
29// is guaranteed. Alternatively, a static function is exposed with which particles can be added to TDatabasePDG objects
30// directly.
32{
33 //
34 public:
36 {
37 static bool initialized = false; // initialize this --> adds particles to TDatabasePDG;
38 auto db = TDatabasePDG::Instance();
39 if (!initialized) {
41 initialized = true;
42 }
43 return db;
44 }
45
46 // adds ALICE particles to a given TDatabasePDG instance
47 static void addALICEParticles(TDatabasePDG* db = TDatabasePDG::Instance());
49
50 // get particle's (if any) mass
51 static Double_t MassImpl(TParticlePDG* particle, bool& success)
52 {
53 success = false;
54 if (!particle) {
55 return -1.;
56 }
57 success = true;
58 return particle->Mass();
59 }
60
61 // determine particle to get mass for based on PDG
62 static Double_t Mass(int pdg, bool& success, TDatabasePDG* db = O2DatabasePDG::Instance())
63 {
64 if (pdg < IONBASELOW || pdg > IONBASEHIGH) {
65 // not an ion, return immediately
66 return MassImpl(db->GetParticle(pdg), success);
67 }
68 if (auto particle = db->GetParticle(pdg)) {
69 // see if this ion can be found
70 return MassImpl(particle, success);
71 }
72 // if we are here, try one last time to look for ground state of potential isomere state
73 pdg = pdg / 10 * 10;
74 return MassImpl(db->GetParticle(pdg), success);
75 }
76
77 // remove default constructor
78 O2DatabasePDG() = delete;
79
80 private:
81 static constexpr int IONBASELOW{1000000000};
82 static constexpr int IONBASEHIGH{1099999999};
83};
84
85// by keeping this inline, we can use it in other parts of the code, for instance Framework or Analysis,
86// without needing to link against this library
88{
89 //
90 // Add ALICE particles to the ROOT PDG data base
91 // Code has been taken from AliRoot
92 const Int_t kspe = 50000000;
93
94 // PDG nuclear states are 10-digit numbers
95 // 10LZZZAAAI e.g. deuteron is
96 // 1000010020
97 const Int_t kion = 1000000000;
98
99 /*
100 const Double_t kAu2Gev=0.9314943228;
101*/
102
103 const Double_t khSlash = 1.0545726663e-27;
104 const Double_t kErg2Gev = 1 / 1.6021773349e-3;
105 const Double_t khShGev = khSlash * kErg2Gev;
106 const Double_t kYear2Sec = 3600 * 24 * 365.25;
107
108 // Heavy-flavour particles
109
110 // χc1(3872) aka X(3872), taken from PDG 2022 (https://pdg.lbl.gov/2022/listings/rpp2022-list-chi-c1-3872.pdf)
111 db->AddParticle("Chi_c1(3872)", "Chi_c1(3872)", 3.87165, kFALSE, 0, 0, "CCBarMeson", 9920443);
112
113 //
114 // Bottom mesons
115 // mass and life-time from PDG
116 //
117 db->AddParticle("Upsilon(3S)", "Upsilon(3S)", 10.3552, kTRUE,
118 0, 0, "Bottonium", 200553);
119
120 // QCD diffractive states
121 db->AddParticle("rho_diff0", "rho_diff0", 0, kTRUE,
122 0, 0, "QCD diffr. state", 9900110);
123 db->AddParticle("pi_diffr+", "pi_diffr+", 0, kTRUE,
124 0, 3, "QCD diffr. state", 9900210);
125 db->AddParticle("omega_di", "omega_di", 0, kTRUE,
126 0, 0, "QCD diffr. state", 9900220);
127 db->AddParticle("phi_diff", "phi_diff", 0, kTRUE,
128 0, 0, "QCD diffr. state", 9900330);
129 db->AddParticle("J/psi_di", "J/psi_di", 0, kTRUE,
130 0, 0, "QCD diffr. state", 9900440);
131 db->AddParticle("n_diffr0", "n_diffr0", 0, kTRUE,
132 0, 0, "QCD diffr. state", 9902110);
133 db->AddParticle("p_diffr+", "p_diffr+", 0, kTRUE,
134 0, 3, "QCD diffr. state", 9902210);
135
136 // From Herwig
137 db->AddParticle("PSID ", " ", 3.7699, kFALSE, 0.0, 0, "meson", 30443);
138
139 db->AddParticle("A_00 ", " ", 0.9960, kFALSE, 0.0, 0, "meson", 9000111);
140 db->AddParticle("A_0+ ", " ", 0.9960, kFALSE, 0.0, +3, "meson", 9000211);
141 db->AddParticle("A_0- ", " ", 0.9960, kFALSE, 0.0, -3, "meson", -9000211);
142
143 //db->AddParticle("F0P0 ", " ", 0.9960, kFALSE, 0.0, 0, "meson", 9010221);
144
145 db->AddParticle("KDL_2+ ", " ", 1.773, kFALSE, 0.0, +3, "meson", 10325);
146 db->AddParticle("KDL_2- ", " ", 1.773, kFALSE, 0.0, -3, "meson", -10325);
147
148 db->AddParticle("KDL_20 ", " ", 1.773, kFALSE, 0.0, 0, "meson", 10315);
149 db->AddParticle("KDL_2BR0", " ", 1.773, kFALSE, 0.0, 0, "meson", -10315);
150
151 db->AddParticle("PI_2+ ", " ", 1.670, kFALSE, 0.0, +3, "meson", 10215);
152 db->AddParticle("PI_2- ", " ", 1.670, kFALSE, 0.0, -3, "meson", -10215);
153 db->AddParticle("PI_20 ", " ", 1.670, kFALSE, 0.0, 0, "meson", 10115);
154
155 db->AddParticle("KD*+ ", " ", 1.717, kFALSE, 0.0, +3, "meson", 30323);
156 db->AddParticle("KD*- ", " ", 1.717, kFALSE, 0.0, -3, "meson", -30323);
157
158 db->AddParticle("KD*0 ", " ", 1.717, kFALSE, 0.0, 0, "meson", 30313);
159 db->AddParticle("KDBR*0 ", " ", 1.717, kFALSE, 0.0, 0, "meson", -30313);
160
161 db->AddParticle("RHOD+ ", " ", 1.700, kFALSE, 0.0, +3, "meson", 30213);
162 db->AddParticle("RHOD- ", " ", 1.700, kFALSE, 0.0, -3, "meson", -30213);
163 db->AddParticle("RHOD0 ", " ", 1.700, kFALSE, 0.0, 0, "meson", 30113);
164
165 db->AddParticle("ETA_2(L)", " ", 1.632, kFALSE, 0.0, 0, "meson", 10225);
166 db->AddParticle("ETA_2(H)", " ", 1.854, kFALSE, 0.0, 0, "meson", 10335);
167 db->AddParticle("OMEGA(H)", " ", 1.649, kFALSE, 0.0, 0, "meson", 30223);
168
169 db->AddParticle("KDH_2+ ", " ", 1.816, kFALSE, 0.0, +3, "meson", 20325);
170 db->AddParticle("KDH_2- ", " ", 1.816, kFALSE, 0.0, -3, "meson", -20325);
171
172 db->AddParticle("KDH_20 ", " ", 1.816, kFALSE, 0.0, 0, "meson", 20315);
173 db->AddParticle("KDH_2BR0", " ", 1.816, kFALSE, 0.0, 0, "meson", -20315);
174
175 db->AddParticle("KD_3+ ", " ", 1.773, kFALSE, 0.0, +3, "meson", 327);
176 db->AddParticle("KD_3- ", " ", 1.773, kFALSE, 0.0, -3, "meson", -327);
177
178 db->AddParticle("KD_30 ", " ", 1.773, kFALSE, 0.0, 0, "meson", 317);
179 db->AddParticle("KD_3BR0 ", " ", 1.773, kFALSE, 0.0, 0, "meson", -317);
180
181 db->AddParticle("RHO_3+ ", " ", 1.691, kFALSE, 0.0, +3, "meson", 217);
182 db->AddParticle("RHO_3- ", " ", 1.691, kFALSE, 0.0, -3, "meson", -217);
183 db->AddParticle("RHO_30 ", " ", 1.691, kFALSE, 0.0, 0, "meson", 117);
184 db->AddParticle("OMEGA_3 ", " ", 1.667, kFALSE, 0.0, 0, "meson", 227);
185 db->AddParticle("PHI_3 ", " ", 1.854, kFALSE, 0.0, 0, "meson", 337);
186
187 db->AddParticle("CHI2P_B0", " ", 10.232, kFALSE, 0.0, 0, "meson", 110551);
188 db->AddParticle("CHI2P_B1", " ", 10.255, kFALSE, 0.0, 0, "meson", 120553);
189 db->AddParticle("CHI2P_B2", " ", 10.269, kFALSE, 0.0, 0, "meson", 100555);
190 db->AddParticle("UPSLON4S", " ", 10.580, kFALSE, 0.0, 0, "meson", 300553);
191
192 // IONS
193 //
194 // Done by default now from Pythia6 table
195 // Needed for other generators
196 // So check if already defined
197
199 Int_t ionCode = kion + 10020;
200 if (!db->GetParticle(ionCode)) {
201 db->AddParticle("Deuteron", "Deuteron", 1.87561294257, kTRUE,
202 0, 3, "Ion", ionCode);
203 }
204 db->AddAntiParticle("AntiDeuteron", -ionCode);
205
206 ionCode = kion + 10030;
207 if (!db->GetParticle(ionCode)) {
208 db->AddParticle("Triton", "Triton", 2.80892113298, kFALSE,
209 khShGev / (12.33 * kYear2Sec), 3, "Ion", ionCode);
210 }
211 db->AddAntiParticle("AntiTriton", -ionCode);
212
213 ionCode = kion + 20030;
214 if (!db->GetParticle(ionCode)) {
215 db->AddParticle("HE3", "HE3", 2.80839160743, kFALSE,
216 0, 6, "Ion", ionCode);
217 }
218 db->AddAntiParticle("AntiHE3", -ionCode);
219
220 ionCode = kion + 20040;
221 if (!db->GetParticle(ionCode)) {
222 db->AddParticle("Alpha", "Alpha", 3.7273794066, kTRUE,
223 khShGev / (12.33 * kYear2Sec), 6, "Ion", ionCode);
224 }
225 db->AddAntiParticle("AntiAlpha", -ionCode);
227
228 // Special particles
229 //
230 db->AddParticle("Cherenkov", "Cherenkov", 0, kFALSE,
231 0, 0, "Special", kspe + 50);
232 db->AddParticle("FeedbackPhoton", "FeedbackPhoton", 0, kFALSE,
233 0, 0, "Special", kspe + 51);
234
235 //Hyper nuclei and exotica
236 ionCode = 1010010030;
237 if (!db->GetParticle(ionCode)) {
238 db->AddParticle("HyperTriton", "HyperTriton", 2.991134, kFALSE,
239 2.5e-15, 3, "Ion", ionCode);
240 }
241
242 ionCode = -1010010030;
243 if (!db->GetParticle(ionCode)) {
244 db->AddParticle("AntiHyperTriton", "AntiHyperTriton", 2.991134, kFALSE,
245 2.5e-15, 3, "Ion", ionCode);
246 }
247
248 //hyper hydrogen 4 ground state
249 ionCode = 1010010040;
250 if (!db->GetParticle(ionCode)) {
251 db->AddParticle("Hyperhydrog4", "Hyperhydrog4", 3.922434, kFALSE,
252 2.5e-15, 3, "Ion", ionCode);
253 }
254 //anti hyper hydrogen 4 ground state
255 ionCode = -1010010040;
256 if (!db->GetParticle(ionCode)) {
257 db->AddParticle("AntiHyperhydrog4", "AntiHyperhydrog4", 3.922434, kFALSE,
258 2.5e-15, 3, "Ion", ionCode);
259 }
260 //hyper helium 4 ground state
261 ionCode = 1010020040;
262 if (!db->GetParticle(ionCode)) {
263 db->AddParticle("Hyperhelium4", "Hyperhelium4", 3.921728, kFALSE,
264 2.5e-15, 6, "Ion", ionCode);
265 }
266 //anti hyper helium 4 ground state
267 ionCode = -1010020040;
268 if (!db->GetParticle(ionCode)) {
269 db->AddParticle("AntiHyperhelium4", "AntiHyperhelium4", 3.921728, kFALSE,
270 2.5e-15, 6, "Ion", ionCode);
271 }
272
273 // Lithium 4 ground state
274 ionCode = 1000030040;
275 if (!db->GetParticle(ionCode)) {
276 db->AddParticle("Lithium4", "Lithium4", 3.7513, kFALSE,
277 0.003, 9, "Ion", ionCode);
278 }
279 // anti Lithium 4 ground state
280 ionCode = -1000030040;
281 if (!db->GetParticle(ionCode)) {
282 db->AddParticle("AntiLithium4", "AntiLithium4", 3.7513, kFALSE,
283 0.003, 9, "Ion", ionCode);
284 }
285
286 ionCode = 1010020050;
287 if (!db->GetParticle(ionCode)) {
288 db->AddParticle("Hyperhelium5", "Hyperhelium5", 4.839961, kFALSE,
289 2.5e-15, 6, "Ion", ionCode);
290 }
291
292 ionCode = -1010020050;
293 if (!db->GetParticle(ionCode)) {
294 db->AddParticle("AntiHyperhelium5", "AntiHyperhelium5", 4.839961, kFALSE,
295 2.5e-15, 6, "Ion", ionCode);
296 }
297
298 ionCode = 1020010040;
299 if (!db->GetParticle(ionCode)) {
300 db->AddParticle("DoubleHyperhydrogen4", "DoubleHyperhydrogen4", 4.106, kFALSE,
301 2.5e-15, 6, "Ion", ionCode);
302 }
303
304 ionCode = -1020010040;
305 if (!db->GetParticle(ionCode)) {
306 db->AddParticle("DoubleAntiHyperhydrogen4", "DoubleAntiHyperhydrogen4", 4.106, kFALSE,
307 2.5e-15, 6, "Ion", ionCode);
308 }
309
310 // 4-Xi-He
311 ionCode = 1120020040;
312 if (!db->GetParticle(ionCode)) {
313 db->AddParticle("4XiHe", "4XiHe", 4.128, kFALSE, 4.04e-15, 3, "Ion", ionCode);
314 db->AddAntiParticle("Anti4XiHe", -ionCode);
315 }
316
317 // 4-Xi-H
318 ionCode = 1120010040;
319 if (!db->GetParticle(ionCode)) {
320 db->AddParticle("4XiH", "4XiH", 4.128, kFALSE, 4.04e-15, 3, "Ion", ionCode);
321 db->AddAntiParticle("Anti4XiH", -ionCode);
322 }
323
324 // hyper helium 4 sigma
325 ionCode = 1110020040;
326 if (!db->GetParticle(ionCode)) {
327 db->AddParticle("Hyperhelium4sigma", "Hyperhelium4sigma", 3.995, kFALSE,
328 2.5e-15, 6, "Ion", ionCode);
329 }
330 // anti-hyper helium 4 sigma
331 ionCode = -1110020040;
332 if (!db->GetParticle(ionCode)) {
333 db->AddParticle("AntiHyperhelium4sigma", "AntiHyperhelium4sigma", 3.995, kFALSE,
334 2.5e-15, 6, "Ion", ionCode);
335 }
336
337 ionCode = 1010000020;
338 if (!db->GetParticle(ionCode)) {
339 db->AddParticle("LambdaNeutron", "LambdaNeutron", 2.054, kFALSE,
340 2.5e-15, 0, "Special", ionCode);
341 }
342
343 ionCode = -1010000020;
344 if (!db->GetParticle(ionCode)) {
345 db->AddParticle("AntiLambdaNeutron", "AntiLambdaNeutron", 2.054, kFALSE,
346 2.5e-15, 0, "Special", ionCode);
347 }
348
349 ionCode = 1020000020;
350 if (!db->GetParticle(ionCode)) {
351 db->AddParticle("Hdibaryon", "Hdibaryon", 2.23, kFALSE,
352 2.5e-15, 0, "Special", ionCode);
353 }
354
355 ionCode = -1020000020;
356 if (!db->GetParticle(ionCode)) {
357 db->AddParticle("AntiHdibaryon", "AntiHdibaryon", 2.23, kFALSE,
358 2.5e-15, 0, "Special", ionCode);
359 }
360
361 ionCode = 1010000030;
362 if (!db->GetParticle(ionCode)) {
363 db->AddParticle("LambdaNeutronNeutron", "LambdaNeutronNeutron", 2.99, kFALSE,
364 2.5e-15, 0, "Special", ionCode);
365 }
366
367 ionCode = -1010000030;
368 if (!db->GetParticle(ionCode)) {
369 db->AddParticle("AntiLambdaNeutronNeutron", "AntiLambdaNeutronNeutron", 2.99, kFALSE,
370 2.5e-15, 0, "Special", ionCode);
371 }
372
373 ionCode = 1020010020;
374 if (!db->GetParticle(ionCode)) {
375 db->AddParticle("Xi0Proton", "Xi0Proton", 2.248, kFALSE,
376 5e-15, 3, "Ion", ionCode);
377 }
378
379 ionCode = -1020010020;
380 if (!db->GetParticle(ionCode)) {
381 db->AddParticle("AntiXi0Proton", "AntiXi0Proton", 2.248, kFALSE,
382 5e-15, 3, "Ion", ionCode);
383 }
384
385 ionCode = 1030000020;
386 if (!db->GetParticle(ionCode)) {
387 db->AddParticle("OmegaProton", "OmegaProton", 2.592, kFALSE,
388 2.5e-15, 0, "Special", ionCode);
389 }
390
391 ionCode = -1030000020;
392 if (!db->GetParticle(ionCode)) {
393 db->AddParticle("AntiOmegaProton", "AntiOmegaProton", 2.592, kFALSE,
394 2.5e-15, 0, "Special", ionCode);
395 }
396
397 ionCode = 1030010020;
398 if (!db->GetParticle(ionCode)) {
399 db->AddParticle("OmegaNeutron", "OmegaNeutron", 2.472, kFALSE,
400 0.003, 3, "Special", ionCode);
401 }
402
403 ionCode = -1030010020;
404 if (!db->GetParticle(ionCode)) {
405 db->AddParticle("AntiOmegaNeutron", "AntiOmegaNeutron", 2.472, kFALSE,
406 0.003, 3, "Special", ionCode);
407 }
408
409 ionCode = 1060020020;
410 if (!db->GetParticle(ionCode)) {
411 db->AddParticle("OmegaOmega", "OmegaOmega", 3.229, kFALSE,
412 2.5e-15, 6, "Special", ionCode);
413 }
414
415 ionCode = -1060020020;
416 if (!db->GetParticle(ionCode)) {
417 db->AddParticle("AntiOmegaOmega", "AntiOmegaOmega", 3.229, kFALSE,
418 2.5e-15, 6, "Special", ionCode);
419 }
420
421 ionCode = 1010010021;
422 if (!db->GetParticle(ionCode)) {
423 db->AddParticle("Lambda1405Proton", "Lambda1405Proton", 2.295, kFALSE,
424 0.05, 3, "Special", ionCode);
425 }
426
427 ionCode = -1010010021;
428 if (!db->GetParticle(ionCode)) {
429 db->AddParticle("AntiLambda1405Proton", "AntiLambda1405Proton", 2.295, kFALSE,
430 0.05, 3, "Special", ionCode);
431 }
432
433 ionCode = 1020000021;
434 if (!db->GetParticle(ionCode)) {
435 db->AddParticle("Lambda1405Lambda1405", "Lambda1405Lambda1405", 2.693, kFALSE,
436 0.05, 0, "Special", ionCode);
437 }
438
439 ionCode = -1020000021;
440 if (!db->GetParticle(ionCode)) {
441 db->AddParticle("AntiLambda1405Lambda1405", "AntiLambda1405Lambda1405", 2.693, kFALSE,
442 0.05, 0, "Special", ionCode);
443 }
444
445 ionCode = 2010010030;
446 if (!db->GetParticle(ionCode)) {
447 db->AddParticle("CTriton", "CTriton", 4.162, kFALSE,
448 3.3e-12, 3, "Ion", ionCode);
449 db->AddAntiParticle("AntiCTriton", -ionCode);
450 }
451
452 ionCode = 2010010020;
453 if (!db->GetParticle(ionCode)) {
454 db->AddParticle("CDeuteron", "CDeuteron", 3.226, kFALSE,
455 3.3e-12, 3, "Ion", ionCode);
456 db->AddAntiParticle("AntiCDeuteron", -ionCode);
457 }
458
459 // Special resonances
460
461 ionCode = 9010221;
462 if (!db->GetParticle(ionCode)) {
463 db->AddParticle("f0_980", "f0_980", 0.980, kFALSE,
464 0.07, 0, "Resonance", ionCode);
465 }
466
467 ionCode = 225;
468 if (!db->GetParticle(ionCode)) {
469 db->AddParticle("f2_1270", "f2_1270", 1.275, kFALSE,
470 0.185, 0, "Resonance", ionCode);
471 }
472
473 // Lambda(1520)0
474 ionCode = 102134;
475 if (!db->GetParticle(ionCode)) {
476 db->AddParticle("Lambda_1520_0", "Lambda_1520_0", 1.5195, kFALSE, 0.0156, 0, "Resonance", ionCode);
477 }
478 if (!db->GetParticle(-ionCode)) {
479 db->AddParticle("AntiLambda_1520_0", "AntiLambda_1520_0", 1.5195, kFALSE, 0.0156, 0, "Resonance", -ionCode);
480 }
481
482 // f1 study
483 ionCode = 20223;
484 if (!db->GetParticle(ionCode)) {
485 db->AddParticle("f1_1285", "f1_1285", 1.28210, kFALSE, 0.02420, 0, "Resonance", ionCode);
486 }
487 ionCode = 20333;
488 if (!db->GetParticle(ionCode)) {
489 db->AddParticle("f1_1420", "f1_1420", 1.42640, kFALSE, 0.05490, 0, "Resonance", ionCode);
490 }
491
492 // glueball hunting
493 ionCode = 115;
494 if (!db->GetParticle(ionCode)) {
495 db->AddParticle("a2_1320", "a2_1320", 1.3182, kFALSE, 0.1078, 0, "Resonance", ionCode);
496 }
497 ionCode = 10221;
498 if (!db->GetParticle(ionCode)) {
499 db->AddParticle("f0_1370", "f0_1370", 1.37, kFALSE, 0.200, 0, "Resonance", ionCode);
500 }
501 ionCode = 9030221;
502 if (!db->GetParticle(ionCode)) {
503 db->AddParticle("f0_1500", "f0_1500", 1.500, kFALSE, 0.112, 0, "Resonance", ionCode);
504 }
505 ionCode = 10331;
506 if (!db->GetParticle(ionCode)) {
507 db->AddParticle("f0_1710", "f0_1710", 1.710, kFALSE, 0.139, 0, "Resonance", ionCode);
508 }
509 ionCode = 335;
510 if (!db->GetParticle(ionCode)) {
511 db->AddParticle("f2_1525", "f2_1525", 1.525, kFALSE, 0.073, 0, "Resonance", ionCode);
512 }
513
514 // Xi-/+ (1820)
515 ionCode = 123314;
516 if (!db->GetParticle(ionCode)) {
517 db->AddParticle("Xi_Minus_1820", "Xi_Minus_1820", 1.8234, kFALSE, 0.024, -3, "Resonance", ionCode);
518 }
519 if (!db->GetParticle(-ionCode)) {
520 db->AddParticle("Xi_Plus_1820", "Xi_Plus_1820", 1.8234, kFALSE, 0.024, 3, "Resonance", -ionCode);
521 }
522
523 // Xi0 (1820)
524 ionCode = 123324;
525 if (!db->GetParticle(ionCode)) {
526 db->AddParticle("Xi_0_1820", "Xi_0_1820", 1.8234, kFALSE, 0.024, 0, "Resonance", ionCode);
527 }
528 if (!db->GetParticle(-ionCode)) {
529 db->AddParticle("Xi_0_Bar_1820", "Xi_0_Bar_1820", 1.8234, kFALSE, 0.024, 0, "Resonance", -ionCode);
530 }
531
532 // Ps - hidden strange (s-sbar) pentaquarks
533
534 ionCode = 9322134;
535 if (!db->GetParticle(ionCode)) {
536 db->AddParticle("ps_2100", "ps_2100", 2.100, kFALSE,
537 0.040, 3, "Resonance", ionCode);
538 }
539 if (!db->GetParticle(-ionCode)) {
540 db->AddParticle("anti-ps_2100", "anti-ps_2100", 2.100, kFALSE,
541 0.040, -3, "Resonance", -ionCode);
542 }
543
544 ionCode = 9322136;
545 if (!db->GetParticle(ionCode)) {
546 db->AddParticle("ps_2500", "ps_2500", 2.500, kFALSE,
547 0.040, 3, "Resonance", ionCode);
548 }
549 if (!db->GetParticle(-ionCode)) {
550 db->AddParticle("anti-ps_2500", "anti-ps_2500", 2.500, kFALSE,
551 0.040, -3, "Resonance", -ionCode);
552 }
553
554 //Additional Hidden Strangeness Pentaquarks
555
556 //Ps +/-
557 ionCode = 9322132;
558 if (!db->GetParticle(ionCode)) {
559 db->AddParticle("Ps_Plus_1870", "Ps_Plus_1870", 1.870, kFALSE,
560 0.10, 3, "Resonance", ionCode);
561 }
562 if (!db->GetParticle(-ionCode)) {
563 db->AddParticle("Anti-Ps_Minus_1870", "Anti-Ps_Minus_1870", 1.870, kFALSE,
564 0.10, -3, "Resonance", -ionCode);
565 }
566 ionCode = 9322312;
567 if (!db->GetParticle(ionCode)) {
568 db->AddParticle("Ps_Plus_2065", "Ps_Plus_2065", 2.065, kFALSE,
569 0.10, 3, "Resonance", ionCode);
570 }
571 if (!db->GetParticle(-ionCode)) {
572 db->AddParticle("Anti-Ps_Minus_2065", "Anti-Ps_Minus_2065", 2.065, kFALSE,
573 0.10, -3, "Resonance", -ionCode);
574 }
575 ionCode = 9323212;
576 if (!db->GetParticle(ionCode)) {
577 db->AddParticle("Ps_Plus_2255", "Ps_Plus_2255", 2.255, kFALSE,
578 0.10, 3, "Resonance", ionCode);
579 }
580 if (!db->GetParticle(-ionCode)) {
581 db->AddParticle("Anti-Ps_Minus_2255", "Anti-Ps_Minus_2255", 2.255, kFALSE,
582 0.10, -3, "Resonance", -ionCode);
583 }
584 ionCode = 9332212;
585 if (!db->GetParticle(ionCode)) {
586 db->AddParticle("Ps_Plus_2455", "Ps_Plus_2455", 2.455, kFALSE,
587 0.10, 3, "Resonance", ionCode);
588 }
589 if (!db->GetParticle(-ionCode)) {
590 db->AddParticle("Anti-Ps_Minus_2455", "Anti-Ps_Minus_2455", 2.455, kFALSE,
591 0.10, -3, "Resonance", -ionCode);
592 }
593
594 //Ps0
595 ionCode = 9322131;
596 if (!db->GetParticle(ionCode)) {
597 db->AddParticle("Ps_0_1870", "Ps_0_1870", 1.870, kFALSE,
598 0.10, 0, "Resonance", ionCode);
599 }
600 if (!db->GetParticle(-ionCode)) {
601 db->AddParticle("Anti-Ps_0_1870", "Anti-Ps_0_1870", 1.870, kFALSE,
602 0.10, 0, "Resonance", -ionCode);
603 }
604 ionCode = 9322311;
605 if (!db->GetParticle(ionCode)) {
606 db->AddParticle("Ps_0_2065", "Ps_0_2065", 2.065, kFALSE,
607 0.10, 0, "Resonance", ionCode);
608 }
609 if (!db->GetParticle(-ionCode)) {
610 db->AddParticle("Anti-Ps_0_2065", "Anti-Ps_0_2065", 2.065, kFALSE,
611 0.10, 0, "Resonance", -ionCode);
612 }
613 ionCode = 9323211;
614 if (!db->GetParticle(ionCode)) {
615 db->AddParticle("Ps_0_2255", "Ps_0_2255", 2.255, kFALSE,
616 0.10, 0, "Resonance", ionCode);
617 }
618 if (!db->GetParticle(-ionCode)) {
619 db->AddParticle("Anti-Ps_0_2255", "Anti-Ps_0_2255", 2.255, kFALSE,
620 0.10, 0, "Resonance", -ionCode);
621 }
622 ionCode = 9332211;
623 if (!db->GetParticle(ionCode)) {
624 db->AddParticle("Ps_0_2455", "Ps_0_2455", 2.455, kFALSE,
625 0.10, 0, "Resonance", ionCode);
626 }
627 if (!db->GetParticle(-ionCode)) {
628 db->AddParticle("Anti-Ps_0_2455", "Anti-Ps_0_2455", 2.455, kFALSE,
629 0.10, 0, "Resonance", -ionCode);
630 }
631
632 // Charm pentaquarks
633 // Theta_c: isospin singlet with J=1/2+ (see https://arxiv.org/abs/hep-ph/0409121)
634 ionCode = 9422111;
635 if (!db->GetParticle(ionCode)) {
636 db->AddParticle("Anti-Theta_c_3100", "Anti-Theta_c_3100", 3.099, kFALSE,
637 83.e-6, 0, "Resonance", ionCode); // same width as D*+ (83 keV)
638 }
639 if (!db->GetParticle(-ionCode)) {
640 db->AddParticle("Theta_c_3100", "Theta_c_3100", 3.099, kFALSE,
641 83.e-6, 0, "Resonance", -ionCode); // same width as D*+ (83 keV)
642 }
643
644 // d*(2380) - dibaryon resonance
645
646 ionCode = 900010020; //Arbitrary choice - as deuteron but with leading 9 instead of 10
647 if (!db->GetParticle(ionCode)) {
648 db->AddParticle("d*_2380", "d*_2380", 2.38, kFALSE,
649 0.070, 3, "Resonance", ionCode);
650 }
651 db->AddAntiParticle("d*_2380_bar", -ionCode);
652
653 //Sexaquark (uuddss): compact, neutral and stable hypothetical bound state (arxiv.org/abs/1708.08951)
654 ionCode = 900000020;
655 if (!db->GetParticle(ionCode)) {
656 db->AddParticle("Sexaquark", "Sexaquark", 2.0, kTRUE, 0.0, 0, "Special", ionCode);
657 }
658
659 if (!db->GetParticle(-ionCode)) {
660 db->AddParticle("AntiSexaquark", "AntiSexaquark", 2.0, kTRUE, 0.0, 0, "Special", -ionCode);
661 }
662
663 // lastly, add particle from the the extra text file
665}
666
668{
669 static bool initialized = false;
670 if (!initialized) {
671 // allow user to specify custom file
672 if (const char* custom = std::getenv("O2_SIM_CUSTOM_PDG")) {
673 // TODO: make sure this is a file
674 db->ReadPDGTable(custom);
675 } else if (const char* o2Root = std::getenv("O2_ROOT")) {
676 // take the maintained file from O2
677 auto inputExtraPDGs = std::string(o2Root) + "/share/Detectors/gconfig/data/extra_ions_pdg_table.dat";
678 db->ReadPDGTable(inputExtraPDGs.c_str());
679 }
680 initialized = true;
681 }
682}
683
684} // namespace o2
685
686#endif //O2_O2DATABASEPDG_H
static void addALICEParticles(TDatabasePDG *db=TDatabasePDG::Instance())
static TDatabasePDG * Instance()
static void addParticlesFromExternalFile(TDatabasePDG *db)
static Double_t Mass(int pdg, bool &success, TDatabasePDG *db=O2DatabasePDG::Instance())
O2DatabasePDG()=delete
static Double_t MassImpl(TParticlePDG *particle, bool &success)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...