File indexing completed on 2025-07-05 08:52:39
0001
0002
0003
0004 #pragma once
0005
0006 #include <algorithms/service.h>
0007 #include <map>
0008 #include <memory>
0009 #include <string>
0010
0011 namespace algorithms {
0012
0013 class ParticleSvc : public Service<ParticleSvc> {
0014 public:
0015 struct ParticleData {
0016 int pdgCode;
0017 int charge;
0018 double mass;
0019 std::string name;
0020 };
0021 using Particle = ParticleData;
0022 using ParticleMap = std::map<int, Particle>;
0023
0024 public:
0025 virtual void init(std::shared_ptr<ParticleMap> map = nullptr) {
0026 if (map != nullptr) {
0027 m_particleMap = map;
0028 } else {
0029 m_particleMap = std::make_shared<ParticleMap>(kParticleMap);
0030 }
0031 }
0032
0033 virtual std::shared_ptr<ParticleMap> particleMap() const { return m_particleMap; };
0034
0035 virtual Particle& particle(int pdg) const {
0036 if (m_particleMap->count(pdg) == 0) {
0037 return m_particleMap->at(0);
0038 }
0039 return m_particleMap->at(pdg);
0040 };
0041
0042 protected:
0043 std::shared_ptr<ParticleMap> m_particleMap{nullptr};
0044
0045 ALGORITHMS_DEFINE_SERVICE(ParticleSvc)
0046
0047 private:
0048 inline static const ParticleMap kParticleMap{
0049
0050 { 0, { 0, 0, 0.0 , "unknown" }},
0051 { 11, { 11, -1, 0.000510998928, "e-" }},
0052 { -11, { -11, 1, 0.000510998928, "e+" }},
0053 { 13, { 13, -1, 0.105658357 , "mu-" }},
0054 { -13, { -13, 1, 0.105658357 , "mu+" }},
0055 { 22, { 22, 0, 0.0 , "gamma" }},
0056 { 111, { 111, 0, 0.1349766 , "p0" }},
0057 { 113, { 111, 0, 0.76850 , "rho(770)^0" }},
0058 { 115, { 115, 0, 1.31800 , "a_2(1320)^0" }},
0059 { 211, { 211, 1, 0.1395701 , "pi+" }},
0060 { -211, { -211, -1, 0.1395701 , "pi-" }},
0061 { 213, { 213, 1, 0.76690 , "rho+" }},
0062 { -213, { -213, -1, 0.76690 , "rho-" }},
0063 { 215, { 215, 1, 1.31800 , "a_2(1320)+" }},
0064 { -215, { -215, -1, 1.31800 , "a_2(1320)-" }},
0065 { 221, { 221, 0, 0.54745 , "eta" }},
0066 { 223, { 223, 0, 0.78194 , "omega" }},
0067 { 225, { 225, 0, 1.27500 , "f_2(1270)" }},
0068 { 130, { 130, 0, 0.49767 , "KL_0" }},
0069 { 310, { 310, 0, 0.49767 , "KS_0" }},
0070 { 311, { 311, 0, 0.49767 , "K^0" }},
0071 { -311, { -311, 0, 0.49767 , "K~^0" }},
0072 { 313, { 313, 0, 0.89610 , "K*(892)^0" }},
0073 { -313, { -313, 0, 0.89610 , "K*(892)~^0" }},
0074 { 315, { 315, 0, 1.43200 , "K*_2(1430)^0" }},
0075 { -315, { -315, 0, 1.43200 , "K*_2(1430)~^0" }},
0076 { 321, { 321, 1, 0.49360 , "K^+" }},
0077 { -321, { -321, -1, 0.49360 , "K^-" }},
0078 { 323, { 323, 1, 0.89160 , "K*(892)^+" }},
0079 { -323, { -323, -1, 0.89160 , "K*(892)^-" }},
0080 { 325, { 325, 1, 1.42500 , "K*_2(1430)^+" }},
0081 { -325, { -325, -1, 1.42500 , "K*_2(1430)^-" }},
0082 { 331, { 331, 0, 0.95777 , "eta'(958)" }},
0083 { 333, { 333, 0, 1.01940 , "phi(1020)" }},
0084 { 335, { 335, 0, 1.52500 , "f'_2(1525)" }},
0085 { 411, { 411, 1, 1.86930 , "D+" }},
0086 { -411, { 411, -1, 1.86930 , "D-" }},
0087 { 413, { 413, 1, 2.01000 , "D*(2010)^+" }},
0088 { -413, { -413, -1, 2.01000 , "D*(2010)^-" }},
0089 { 415, { 415, 1, 2.46000 , "D*_2(2460)^+" }},
0090 { -415, { -415, -1, 2.46000 , "D*_2(2460)^-" }},
0091 { 421, { 421, 0, 1.86450 , "D^0" }},
0092 { -421, { -421, 0, 1.86450 , "D~^0" }},
0093 { 423, { 423, 0, 2.00670 , "D*(2007)^0" }},
0094 { -423, { -423, 0, 2.00670 , "D*(2007)~^0" }},
0095 { 425, { 425, 0, 2.46000 , "D*_2(2460)^0" }},
0096 { -425, { -425, 0, 2.46000 , "D*_2(2460)~^0" }},
0097 { 431, { 431, 1, 1.96850 , "D_s^+" }},
0098 { -431, { -431, -1, 1.96850 , "D_s^-" }},
0099 { 433, { 433, 1, 2.11240 , "D*_s^+" }},
0100 { -433, { -433, -1, 2.11240 , "D*_s^-" }},
0101 { 435, { 435, 1, 2.57350 , "D*_s2(2573)^+" }},
0102 { -435, { -435, -1, 2.57350 , "D*_s2(2573)^-" }},
0103 { 441, { 441, 0, 2.97980 , "eta_c(1S)" }},
0104 { 443, { 443, 0, 3.09688 , "J/psi(1S)" }},
0105 { 445, { 445, 0, 3.55620 , "chi_c2(1P)" }},
0106 { 511, { 511, 0, 5.27920 , "B^0" }},
0107 { -511, { -511, 0, 5.27920 , "B~^0" }},
0108 { 513, { 513, 0, 5.32480 , "B*^0" }},
0109 { -513, { -513, 0, 5.32480 , "B*~^0" }},
0110 { 515, { 515, 0, 5.83000 , "B*_2^0" }},
0111 { -515, { -515, 0, 5.83000 , "B*_2~^0" }},
0112 { 521, { 521, 1, 5.27890 , "B^+" }},
0113 { -521, { -521, -1, 5.27890 , "B^-" }},
0114 { 523, { 523, 1, 5.32480 , "B*^+" }},
0115 { -523, { -523, -1, 5.32480 , "B*^-" }},
0116 { 525, { 525, 1, 5.83000 , "B*_2^+" }},
0117 { -525, { -525, -1, 5.83000 , "B*_2^-" }},
0118 { 531, { 531, 0, 5.36930 , "B_s^0" }},
0119 { -531, { -531, 0, 5.36930 , "B_s~^0" }},
0120 { 533, { 533, 0, 5.41630 , "B*_s^0" }},
0121 { -533, { -533, 0, 5.41630 , "B*_s~^0" }},
0122 { 535, { 535, 0, 6.07000 , "B*_s2^0" }},
0123 { -535, { -535, 0, 6.07000 , "B*_s2~^0" }},
0124 { 541, { 541, 1, 6.59400 , "B_c^+" }},
0125 { -541, { -541, -1, 6.59400 , "B_c^-" }},
0126 { 543, { 543, 1, 6.60200 , "B*_c^+" }},
0127 { -543, { -543, -1, 6.60200 , "B*_c^-" }},
0128 { 545, { 545, 1, 7.35000 , "B*_c2^+" }},
0129 { -545, { -545, -1, 7.35000 , "B*_c2^-" }},
0130 { 551, { 551, 0, 9.40000 , "eta_b(1S)" }},
0131 { 553, { 553, 0, 9.46030 , "Upsilon(1S)" }},
0132 { 555, { 555, 0, 9.91320 , "chi_b2(1P)" }},
0133 { 990, { 990, 0, 0.00000 , "pomeron" }},
0134 { 1114, { 1114, -1, 1.23400 , "Delta^-" }},
0135 { -1114, { -1114, 1, 1.23400 , "Delta~^+" }},
0136 { 2112, { 2112, 0, 0.93957 , "n" }},
0137 { -2112, { -2112, 0, 0.93957 , "n~^0" }},
0138 { 2114, { 2114, 0, 1.23300 , "Delta^0" }},
0139 { -2114, { -2114, 0, 1.23300 , "Delta~^0" }},
0140 { 2212, { 2212, 1, 0.93827 , "p^+" }},
0141 { -2212, { -2212, -1, 0.93827 , "p~^-" }},
0142 { 2214, { 2214, 1, 1.23200 , "Delta^+" }},
0143 { -2214, { -2214, -1, 1.23200 , "Delta~^-" }},
0144 { 2224, { 2224, 2, 1.23100 , "Delta^++" }},
0145 { -2224, { -2224, -2, 1.23100 , "Delta~^--" }},
0146 { 3112, { 3112, -1, 1.19744 , "Sigma^-" }},
0147 { -3112, { -3112, 1, 1.19744 , "Sigma~^+" }},
0148 { 3114, { 3114, -1, 1.38720 , "Sigma*^-" }},
0149 { -3114, { -3114, 1, 1.38720 , "Sigma*~^+" }},
0150 { 3122, { 3122, 0, 1.11568 , "Lambda^0" }},
0151 { -3122, { -3122, 0, 1.11568 , "Lambda~^0" }},
0152 { 3212, { 3212, 0, 1.19255 , "Sigma^0" }},
0153 { -3212, { -3212, 0, 1.19255 , "Sigma~^0" }},
0154 { 3214, { 3214, 0, 1.38370 , "Sigma*^0" }},
0155 { -3214, { -3214, 0, 1.38370 , "Sigma*~^0" }},
0156 { 3222, { 3222, 1, 1.18937 , "Sigma^+" }},
0157 { -3222, { -3222, -1, 1.18937 , "Sigma~^-" }},
0158 { 3224, { 3224, 1, 1.38280 , "Sigma*^+" }},
0159 { -3224, { -3224, -1, 1.38280 , "Sigma*~^-" }},
0160 { 3312, { 3312, -1, 1.32130 , "Xi^-" }},
0161 { -3312, { -3312, 1, 1.32130 , "Xi~^+" }},
0162 { 3314, { 3314, -1, 1.53500 , "Xi*^-" }},
0163 { -3314, { -3314, 1, 1.53500 , "Xi*~^+" }},
0164 { 3322, { 3322, 0, 1.31490 , "Xi^0" }},
0165 { -3322, { -3322, 0, 1.31490 , "Xi~^0" }},
0166 { 3324, { 3324, 0, 1.53180 , "Xi*^0" }},
0167 { -3324, { -3324, 0, 1.53180 , "Xi*~^0" }},
0168 { 3334, { 3334, -1, 1.67245 , "Omega^-" }},
0169 { -3334, { -3334, 1, 1.67245 , "Omega~^+" }},
0170 { 4112, { 4112, 0, 2.45210 , "Sigma_c^0" }},
0171 { -4112, { -4112, 0, 2.45210 , "Sigma_c~^0" }},
0172 { 4114, { 4114, 0, 2.50000 , "Sigma*_c^0" }},
0173 { -4114, { -4114, 0, 2.50000 , "Sigma*_c~^0" }},
0174 { 4122, { 4122, 1, 2.28490 , "Lambda_c^+" }},
0175 { -4122, { -4122, -1, 2.28490 , "Lambda_c~^-" }},
0176 { 4132, { 4132, 0, 2.47030 , "Xi_c^0" }},
0177 { -4132, { -4132, 0, 2.47030 , "Xi_c~^0" }},
0178 { 4212, { 4212, 1, 2.45350 , "Sigma_c^+" }},
0179 { -4212, { -4212, -1, 2.45350 , "Sigma_c~^-" }},
0180 { 4214, { 4214, 1, 2.50000 , "Sigma*_c^+" }},
0181 { -4214, { -4214, -1, 2.50000 , "Sigma*_c~^-" }},
0182 { 4222, { 4222, 2, 2.45290 , "Sigma_c^++" }},
0183 { -4222, { -4222, -2, 2.45290 , "Sigma_c~^--" }},
0184 { 4224, { 4224, 2, 2.50000 , "Sigma*_c^++" }},
0185 { -4224, { -4224, -2, 2.50000 , "Sigma*_c~^--" }},
0186 { 4232, { 4232, 1, 2.46560 , "Xi_c^+" }},
0187 { -4232, { -4232, -1, 2.46560 , "Xi_c~^-" }},
0188 { 4312, { 4312, 0, 2.55000 , "Xi'_c^0" }},
0189 { -4312, { -4312, 0, 2.55000 , "Xi'_c~^0" }},
0190 { 4314, { 4314, 0, 2.63000 , "Xi*_c^0" }},
0191 { -4314, { -4314, 0, 2.63000 , "Xi*_c~^0" }},
0192 { 4322, { 4322, 1, 2.55000 , "Xi'_c^+" }},
0193 { -4322, { -4322, -1, 2.55000 , "Xi'_c~^-" }},
0194 { 4324, { 4324, 1, 2.63000 , "Xi*_c^+" }},
0195 { -4324, { -4324, -1, 2.63000 , "Xi*_c~^-" }},
0196 { 4332, { 4332, 0, 2.70400 , "Omega_c^0" }},
0197 { -4332, { -4332, 0, 2.70400 , "Omega_c~^0" }},
0198 { 4334, { 4334, 0, 2.80000 , "Omega*_c^0" }},
0199 { -4334, { -4334, 0, 2.80000 , "Omega*_c~^0" }},
0200 { 4412, { 4412, 1, 3.59798 , "Xi_cc^+" }},
0201 { -4412, { -4412, -1, 3.59798 , "Xi_cc~^-" }},
0202 { 4414, { 4414, 1, 3.65648 , "Xi*_cc^+" }},
0203 { -4414, { -4414, -1, 3.65648 , "Xi*_cc~^-" }},
0204 { 4422, { 4422, 2, 3.59798 , "Xi_cc^++" }},
0205 { -4422, { -4422, -2, 3.59798 , "Xi_cc~^--" }},
0206 { 4424, { 4424, 2, 3.65648 , "Xi*_cc^++" }},
0207 { -4424, { -4424, -2, 3.65648 , "Xi*_cc~^--" }},
0208 { 4432, { 4432, 1, 3.78663 , "Omega_cc^+" }},
0209 { -4432, { -4432, -1, 3.78663 , "Omega_cc~^-" }},
0210 { 4434, { 4434, 1, 3.82466 , "Omega*_cc^+" }},
0211 { -4434, { -4434, -1, 3.82466 , "Omega*_cc~^-" }},
0212 { 4444, { 4444, 2, 4.91594 , "Omega*_ccc^++" }},
0213 { -4444, { -4444, -2, 4.91594 , "Omega*_ccc~^--" }},
0214 { 5112, { 5112, -1, 5.80000 , "Sigma_b^-" }},
0215 { -5112, { -5112, 1, 5.80000 , "Sigma_b~^+" }},
0216 { 5114, { 5114, -1, 5.81000 , "Sigma*_b^-" }},
0217 { -5114, { -5114, 1, 5.81000 , "Sigma*_b~^+" }},
0218 { 5122, { 5122, 0, 5.64100 , "Lambda_b^0" }},
0219 { -5122, { -5122, 0, 5.64100 , "Lambda_b~^0" }},
0220 { 5132, { 5132, -1, 5.84000 , "Xi_b^-" }},
0221 { -5132, { -5132, 1, 5.84000 , "Xi_b~^+" }},
0222 { 5142, { 5142, 0, 7.00575 , "Xi_bc^0" }},
0223 { -5142, { -5142, 0, 7.00575 , "Xi_bc~^0" }},
0224 { 5212, { 5212, 0, 5.80000 , "Sigma_b^0" }},
0225 { -5212, { -5212, 0, 5.80000 , "Sigma_b~^0" }},
0226 { 5214, { 5214, 0, 5.81000 , "Sigma*_b^0" }},
0227 { -5214, { -5214, 0, 5.81000 , "Sigma*_b~^0" }},
0228 { 5222, { 5222, 1, 5.80000 , "Sigma_b^+" }},
0229 { -5222, { -5222, -1, 5.80000 , "Sigma_b~^-" }},
0230 { 5224, { 5224, 1, 5.81000 , "Sigma*_b^+" }},
0231 { -5224, { -5224, -1, 5.81000 , "Sigma*_b~^-" }},
0232 { 5232, { 5232, 0, 5.84000 , "Xi_b^0" }},
0233 { -5232, { -5232, 0, 5.84000 , "Xi_b~^0" }},
0234 { 5242, { 5242, 1, 7.00575 , "Xi_bc^+" }},
0235 { -5242, { -5242, -1, 7.00575 , "Xi_bc~^-" }},
0236 { 5312, { 5312, -1, 5.96000 , "Xi'_b^-" }},
0237 { -5312, { -5312, 1, 5.96000 , "Xi'_b~^+" }},
0238 { 5314, { 5314, -1, 5.97000 , "Xi*_b^-" }},
0239 { -5314, { -5314, 1, 5.97000 , "Xi*_b~^+" }},
0240 { 5322, { 5322, 0, 5.96000 , "Xi'_b^0" }},
0241 { -5322, { -5322, 0, 5.96000 , "Xi'_b~^0" }},
0242 { 5324, { 5324, 0, 5.97000 , "Xi*_b^0" }},
0243 { -5324, { -5324, 0, 5.97000 , "Xi*_b~^0" }},
0244 { 5332, { 5332, -1, 6.12000 , "Omega_b^-" }},
0245 { -5332, { -5332, 1, 6.12000 , "Omega_b~^+" }},
0246 { 5334, { 5334, -1, 6.13000 , "Omega*_b^-" }},
0247 { -5334, { -5334, 1, 6.13000 , "Omega*_b~^+" }},
0248 { 5342, { 5342, 0, 7.19099 , "Omega_bc^0" }},
0249 { -5342, { -5342, 0, 7.19099 , "Omega_bc~^0" }},
0250 { 5412, { 5412, 0, 7.03724 , "Xi'_bc^0" }},
0251 { -5412, { -5412, 0, 7.03724 , "Xi'_bc~^0" }},
0252 { 5414, { 5414, 0, 7.04850 , "Xi*_bc^0" }},
0253 { -5414, { -5414, 0, 7.04850 , "Xi*_bc~^0" }},
0254 { 5422, { 5422, 1, 7.03724 , "Xi'_bc^+" }},
0255 { -5422, { -5422, -1, 7.03724 , "Xi'_bc~^-" }},
0256 { 5424, { 5424, 1, 7.04850 , "Xi*_bc^+" }},
0257 { -5424, { -5424, -1, 7.04850 , "Xi*_bc~^-" }},
0258 { 5432, { 5432, 0, 7.21101 , "Omega'_bc^0" }},
0259 { -5432, { -5432, 0, 7.21101 , "Omega'_bc~^0" }},
0260 { 5434, { 5434, 0, 7.21900 , "Omega*_bc^0" }},
0261 { -5434, { -5434, 0, 7.21900 , "Omega*_bc~^0" }},
0262 { 5442, { 5442, 1, 8.30945 , "Omega_bcc^+" }},
0263 { -5442, { -5442, -1, 8.30945 , "Omega_bcc~^-" }},
0264 { 5444, { 5444, 1, 8.31325 , "Omega*_bcc^+" }},
0265 { -5444, { -5444, -1, 8.31325 , "Omega*_bcc~^-" }},
0266 { 5512, { 5512, -1, 10.42272 , "Xi_bb^-" }},
0267 { -5512, { -5512, 1, 10.42272 , "Xi_bb~^+" }},
0268 { 5514, { 5514, -1, 10.44144 , "Xi*_bb^-" }},
0269 { -5514, { -5514, 1, 10.44144 , "Xi*_bb~^+" }},
0270 { 5522, { 5522, 0, 10.42272 , "Xi_bb^0" }},
0271 { -5522, { -5522, 0, 10.42272 , "Xi_bb~^0" }},
0272 { 5524, { 5524, 0, 10.44144 , "Xi*_bb^0" }},
0273 { -5524, { -5524, 0, 10.44144 , "Xi*_bb~^0" }},
0274 { 5532, { 5532, -1, 10.60209 , "Omega_bb^-" }},
0275 { -5532, { -5532, 1, 10.60209 , "Omega_bb~^+" }},
0276 { 5534, { 5534, -1, 10.61426 , "Omega*_bb^-" }},
0277 { -5534, { -5534, 1, 10.61426 , "Omega*_bb~^+" }},
0278 { 5542, { 5542, 0, 11.70767 , "Omega_bbc^0" }},
0279 { -5542, { -5542, 0, 11.70767 , "Omega_bbc~^0" }},
0280 { 5544, { 5544, 0, 11.71147 , "Omega*_bbc^0" }},
0281 { -5544, { -5544, 0, 11.71147 , "Omega*_bbc~^0" }},
0282 { 5554, { 5554, -1, 15.11061 , "Omega*_bbb^-" }},
0283 { -5554, { -5554, 1, 15.11061 , "Omega*_bbb~^+" }},
0284 { 1000010020, { 1000010020, 1, 1.87561 , "Deuterium" }},
0285 { 1000010030, { 1000010030, 1, 2.80925 , "Tritium" }},
0286 { 1000020030, { 1000020030, 2, 2.80923 , "He-3" }},
0287 { 1000020040, { 1000020040, 2, 3.72742 , "Alpha" }},
0288
0289 };
0290 };
0291
0292 }