27 unsigned int m_extra = pid.
abspid() / 10000000;
35 unsigned int aid = pid.
abspid();
38 if ( m_nq1 == 9 ) m_nq1 = 0;
40 if ( m_n == 9 && m_nr == 9 ) {
44 m_nj = m_nq1 % 2 ? 1 : 3;
49 else if ( m_nl != 0 ) {
53 else if ( !m_nq2 && m_nq3 > 2 ) {
59 else if ( m_n == 4 && m_nr == 9 && m_nq2 ) {
63 else if ( aid == 130 || aid == 310 || aid == 150 || aid == 510 ) {
68 else if ( aid == 10022 || aid == 20022 ) {
72 else if ( m_extra == 45 ) {
83 else if ( m_extra == 46 ) {
94 else if ( m_extra == 47 ) {
105 else if ( m_extra == 49 ) {
117 else if ( aid == 30343 ) {
121 }
else if ( aid == 30353 ) {
125 }
else if ( aid == 30363 ) {
131 else if ( aid == 1009002 ) {
135 }
else if ( aid == 1000542 ) {
139 }
else if ( aid == 1000522 ) {
143 }
else if ( aid == 1000039 ) {
148 }
else if ( aid == 3100021 ) {
154 return { m_extra, m_nj, m_nq3, m_nq2, m_nq1, m_nl, m_nr, m_n };
159 const unsigned int m_extra =
abspid() / 10000000;
160 return 45 == m_extra ? 100u : 46 == m_extra ? 100u : 47 == m_extra ? 100u : 49 == m_extra ? 100u : m_extra;
168 DATA data = decode( *
this );
169 const unsigned int m_extra = data[0];
176 return !m_extra && !( m_nl + m_nq1 + m_nq2 ) ? 10 * m_nq3 + m_nj : 0;
182 return m_pid == 480000000 || m_pid == -990000000 || isNucleus();
185 else if ( abspid() < 100 || isHadron() || isDiQuark() ) {
195 DATA data = decode( *
this );
199 return m_n < 1 || ( m_n == 9 && m_nr != 9 );
204 if ( !isSM() ) {
return false; }
206 DATA data = decode( *
this );
212 return m_nq1 == 0 && m_nq2 != 0 && m_nq3 != 0 && m_nj != 0 && !( pid() < 0 && m_nq2 == m_nq3 );
217 if ( !isSM() ) {
return false; }
219 DATA data = decode( *
this );
225 return m_nq1 != 0 && m_nq2 != 0 && m_nq3 != 0 && m_nj != 0;
230 if ( !isSM() ) {
return false; }
232 DATA data = decode( *
this );
238 return m_nq1 != 0 && m_nq2 != 0 && m_nq3 == 0 && m_nj != 0 && !( m_nj == 1 && m_nq1 == m_nq2 );
244 const unsigned int apid = abspid();
245 return 11 <= apid && apid <= 18;
251 const unsigned int apid = abspid();
252 return Gaudi::ParticleID::Quark::first <= apid && apid <= Gaudi::ParticleID::Quark::last;
258 if ( abspid() == q ) {
return true; }
259 if ( !hasQuarks() ) {
return false; }
261 DATA data = decode( *
this );
266 return q == m_nq3 || q == m_nq2 || q == m_nq1;
275 static const int q[101] = { 0, -1, 2, -1, 2, -1, 2, -1, 2, 6, 0,
276 -3, 0, -3, 0, -3, 0, -3, 0, 0, 0,
277 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
278 0, 0, 0, 3, 0, 0, 3, 0, 0, 0,
279 0, -1, 0, 3, 0, 0, 0, 0, 0, 0,
280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
283 0, 0, 0, 2, -1, 2, -1, 0, 0, 0,
284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
285 const unsigned int fid = fundamentalID();
288 DATA data = decode( *
this );
303 charge =
abs( q[m_nq2] - q[m_nq3] );
307 charge = q[m_nq3] + q[m_nq2] + q[m_nq1];
310 return ( pid() < 0 ? -1 : 1 ) * charge;
319 static const unsigned int j[101] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 4,
320 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
321 3, 3, 3, 3, 1, 0, 0, 0, 0, 0,
322 0, 3, 3, 3, 1, 1, 1, 1, 5, 0,
323 3, 1, 0, 0, 1, 1, 0, 0, 0, 0,
324 1, 2, 3, 1, 3, 1, 1, 1, 1, 1,
325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
326 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
327 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
328 0, 0, 3, 0, 0, 0, 0, 0, 0, 0 };
329 const unsigned int fid = fundamentalID();
332 DATA data = decode( *
this );
340 if ( m_n == 1 || m_n == 2 || m_n == 3 ) {
341 spin =
j[fid] % 2 + 1;
349 else if ( isNucleus() ) {
350 spin = m_nq3 % 2 + 1;
363 if ( !isMeson() ) {
return 0; }
365 DATA data = decode( *
this );
372 }
else if ( m_nj == 1 ) {
374 }
else if ( m_nl == 1 ) {
384 if ( !isMeson() ) {
return 0; }
386 DATA data = decode( *
this );
393 }
else if ( m_nj == 1 ) {
395 }
else if ( m_nl == 0 ) {
396 return ( m_nj - 3 ) / 2;
397 }
else if ( m_nl == 3 ) {
398 return ( m_nj + 1 ) / 2;
400 return ( m_nj - 1 ) / 2;
405 if ( extraBits() < 100 ) {
return 0; }
407 DATA data = decode( *
this );
413 return m_n * 100 + m_nr * 10 + m_nl;
417 if ( extraBits() < 100 ) {
return 0; }
419 DATA data = decode( *
this );
424 return m_nq1 * 100 + m_nq2 * 10 + m_nq3;
428 const unsigned int m_extra = extraBits();
429 return 100 <= m_extra ? m_extra - 100 : 0;
433 return s <<
"Gaudi.ParticleID(" << m_pid <<
")";
446 return s <<
"Gaudi.ParticleID.nj";
448 return s <<
"Gaudi.ParticleID.nq3";
450 return s <<
"Gaudi.ParticleID.nq2";
452 return s <<
"Gaudi.ParticleID.nq1";
454 return s <<
"Gaudi.ParticleID.nl";
456 return s <<
"Gaudi.ParticleID.nr";
458 return s <<
"Gaudi.ParticleID.n";
460 return s <<
"Gaudi.ParticleID.n8";
462 return s <<
"Gaudi.ParticleID.n9";
464 return s <<
"Gaudi.ParticleID.n10";
467 return s <<
"Gaudi.ParticleID.Location(" <<
l <<
")";
473 printLocation(
l,
s );
481 return s <<
"Gaudi.ParticleID.down";
483 return s <<
"Gaudi.ParticleID.up";
485 return s <<
"Gaudi.ParticleID.strange";
487 return s <<
"Gaudi.ParticleID.charm";
489 return s <<
"Gaudi.ParticleID.bottom";
491 return s <<
"Gaudi.ParticleID.top";
493 return s <<
"Gaudi.ParticleID.bottom_prime";
495 return s <<
"Gaudi.ParticleID.top_prime";
498 return s <<
"Gaudi.ParticleID.Quark(" << q <<
")";