134 def parsePDGTABLE(self):
135
136
137 with open(self.table, 'r') as f:
138 for line in f:
139 if line.startswith('*'):
140
141 continue
142 splitLine = line.split()
143
144
145 baseName = splitLine[-2]
146
147
148 charges = splitLine[-1].
split(
',')
149
150
151 prop = ''
152 symbol = splitLine[0]
153 if symbol == 'M':
154 prop = 'mass'
155 elif symbol == 'W':
156 prop = 'width'
157 else:
158 raise ValueError(
159 'Unidentified symbol %s for particle %s' % (
160 symbol, baseName))
161
162 pdgs = splitLine[1:1+len(charges)]
163 value = float(splitLine[1+len(charges)])
164
165 for pdg, charge in zip(pdgs, charges):
166 if not self.accept(int(pdg)):
167 continue
168 name = self.formatName(baseName, charge)
169 kwargs = dict()
170 kwargs.setdefault('name', name)
171 kwargs.setdefault(prop, value * MeV)
172 kwargs.setdefault('pdg', int(pdg))
173 kwargs.setdefault('charge', self.formatCharge(charge))
174 if name not in self.extraParticles.keys():
175 self.extraParticles[name] = ExtraParticle(**kwargs)
176 else:
177 if getattr(self.extraParticles[name], prop) != -1:
178 self.log.warning(
179 "Property %s is already"
180 "set for particle %s."
181 "Current value is %s and"
182 "incoming value is %s.",
183 prop, name,
184 getattr(self.extraParticles[name], prop),
185 value)
186 continue
187 setattr(self.extraParticles[name], prop, value)
188
189 for name in self.extraParticles:
190
191 width = self.extraParticles[name].width
192 if width > 0:
193 self.extraParticles[name].lifetime = hbar_Planck/width
194
195
196 for name in [x for x in self.extraParticles.keys()]:
197 antiParticle = -self.extraParticles[name]
198 self.extraParticles.update({antiParticle.name: antiParticle})
199