10#include <analysis/variables/BelleVariables.h>
12#include <analysis/dataobjects/Particle.h>
13#include <analysis/dataobjects/ParticleList.h>
14#include <analysis/dbobjects/BellePi0EtaProbParameters.h>
15#include <analysis/variables/AcceptanceVariables.h>
16#include <analysis/variables/Variables.h>
17#include <analysis/variables/VertexVariables.h>
18#include <analysis/variables/ECLVariables.h>
19#include <analysis/variables/V0DaughterTrackVariables.h>
20#include <analysis/variables/VertexVariables.h>
22#include <framework/logging/Logger.h>
23#include <framework/gearbox/Const.h>
24#include <framework/database/DBObjPtr.h>
25#include <mdst/dbobjects/BeamSpot.h>
26#include <mdst/dataobjects/Track.h>
28#include <framework/datastore/StoreArray.h>
29#include <b2bii/dataobjects/BelleTrkExtra.h>
41 bool goodBelleKshort(
const Particle* KS)
44 if (KS->getNDaughters() != 2) {
45 B2WARNING(
"goodBelleKshort is only defined for a particle with two daughters");
48 const Particle* d0 = KS->getDaughter(0);
49 const Particle* d1 = KS->getDaughter(1);
50 if ((d0->getCharge() == 0) || (d1->getCharge() == 0)) {
51 B2WARNING(
"goodBelleKshort is only defined for a particle with charged daughters");
55 B2WARNING(
"goodBelleKshort is being applied to a candidate with PDG " << KS->getPDGCode());
58 if (KS->hasExtraInfo(
"goodKs")) {
59 return bool(KS->getExtraInfo(
"goodKs"));
63 double p = particleP(KS);
64 double fl = particleDRho(KS);
65 double dphi = acos(((particleDX(KS) * particlePx(KS)) + (particleDY(KS) * particlePy(KS))) / (fl * sqrt(particlePx(KS) * particlePx(
66 KS) + particlePy(KS) * particlePy(KS))));
68 double dr = std::min(std::abs(particleDRho(d0)), std::abs(particleDRho(d1)));
69 double zdist = v0DaughterZ0Diff(KS);
71 bool low = p < 0.5 && std::abs(zdist) < 0.8 && dr > 0.05 && dphi < 0.3;
72 bool mid = p < 1.5 && p > 0.5 && std::abs(zdist) < 1.8 && dr > 0.03 && dphi < 0.1 && fl > .08;
73 bool high = p > 1.5 && std::abs(zdist) < 2.4 && dr > 0.02 && dphi < 0.03 && fl > .22;
75 if (low || mid || high) {
81 double goodBelleLambda(
const Particle* Lambda)
83 if (Lambda->getNDaughters() != 2) {
84 B2WARNING(
"goodBelleLambda is only defined for a particle with two daughters");
87 const Particle* d0 = Lambda->getDaughter(0);
88 const Particle* d1 = Lambda->getDaughter(1);
89 if ((d0->getCharge() == 0) || (d1->getCharge() == 0)) {
90 B2WARNING(
"goodBelleLambda is only defined for a particle with charged daughters");
94 B2WARNING(
"goodBelleLambda is being applied to a candidate with PDG " << Lambda->getPDGCode());
97 if (Lambda->hasExtraInfo(
"goodLambda"))
98 return Lambda->getExtraInfo(
"goodLambda");
100 double p = particleP(Lambda);
101 double dr = std::min(std::abs(particleDRho(d0)), std::abs(particleDRho(d1)));
102 double zdist = v0DaughterZ0Diff(Lambda);
103 double dphi = acos(cosAngleBetweenMomentumAndVertexVectorInXYPlane(Lambda));
105 double fl = particleDRho(Lambda);
108 bool high1 = p >= 1.5 && std::abs(zdist) < 12.9 && dr > 0.008 && dphi < 0.09 && fl > 0.22;
109 bool mid1 = p >= 0.5 && p < 1.5 && std::abs(zdist) < 9.8 && dr > 0.01 && dphi < 0.18 && fl > 0.16;
110 bool low1 = p < 0.5 && std::abs(zdist) < 2.4 && dr > 0.027 && dphi < 1.2 && fl > 0.11;
113 bool high2 = p >= 1.5 && std::abs(zdist) < 7.7 && dr > 0.018 && dphi < 0.07 && fl > 0.35;
114 bool mid2 = p >= 0.5 && p < 1.5 && std::abs(zdist) < 2.1 && dr > 0.033 && dphi < 0.10 && fl > 0.24;
115 bool low2 = p < 0.5 && std::abs(zdist) < 1.9 && dr > 0.059 && dphi < 0.6 && fl > 0.17;
117 if (low2 || mid2 || high2) {
119 }
else if (low1 || mid1 || high1) {
127 bool isGoodBelleGamma(
int region,
double energy)
129 bool goodGammaRegion1, goodGammaRegion2, goodGammaRegion3;
130 goodGammaRegion1 = region == 1 && energy > 0.100;
131 goodGammaRegion2 = region == 2 && energy > 0.050;
132 goodGammaRegion3 = region == 3 && energy > 0.150;
134 return goodGammaRegion1 || goodGammaRegion2 || goodGammaRegion3;
137 bool goodBelleGamma(
const Particle* particle)
139 double energy = eclClusterE(particle);
140 int region = eclClusterDetectionRegion(particle);
142 return isGoodBelleGamma(region, energy);
145 BelleTrkExtra* getBelleTrkExtraInfoFromParticle(Particle
const* particle)
147 const Track* track = particle->getTrack();
151 auto belleTrkExtra = track->getRelatedTo<BelleTrkExtra>();
152 if (!belleTrkExtra) {
155 return belleTrkExtra;
158 double BelleFirstCDCHitX(
const Particle* particle)
160 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
161 if (!belleTrkExtra) {
162 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
165 return belleTrkExtra->getTrackFirstX();
168 double BelleFirstCDCHitY(
const Particle* particle)
170 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
171 if (!belleTrkExtra) {
172 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
175 return belleTrkExtra->getTrackFirstY();
178 double BelleFirstCDCHitZ(
const Particle* particle)
180 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
181 if (!belleTrkExtra) {
182 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
185 return belleTrkExtra->getTrackFirstZ();
188 double BelleLastCDCHitX(
const Particle* particle)
190 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
191 if (!belleTrkExtra) {
192 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
195 return belleTrkExtra->getTrackLastX();
198 double BelleLastCDCHitY(
const Particle* particle)
200 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
201 if (!belleTrkExtra) {
202 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
205 return belleTrkExtra->getTrackLastY();
208 double BelleLastCDCHitZ(
const Particle* particle)
210 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
211 if (!belleTrkExtra) {
212 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
215 return belleTrkExtra->getTrackLastZ();
218 double BellePi0InvariantMassSignificance(
const Particle* particle)
220 TMatrixFSym covarianceMatrix(Particle::c_DimMomentum);
221 for (
auto daughter : particle->getDaughters()) {
222 covarianceMatrix += daughter->getMomentumErrorMatrix();
225 TVectorF jacobian(Particle::c_DimMomentum);
226 jacobian[0] = -1.0 * particle->getPx() / particle->getMass();
227 jacobian[1] = -1.0 * particle->getPy() / particle->getMass();
228 jacobian[2] = -1.0 * particle->getPz() / particle->getMass();
229 jacobian[3] = 1.0 * particle->getEnergy() / particle->getMass();
231 double massErrSquared = jacobian * (covarianceMatrix * jacobian);
233 if (massErrSquared < 0.0)
236 double invMass = particleInvariantMassFromDaughters(particle);
237 double nomMass = particle->getPDGMass();
239 return (invMass - nomMass) / sqrt(massErrSquared);
242 double BelleTof(
const Particle* particle)
244 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
245 if (!belleTrkExtra) {
246 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
249 return belleTrkExtra->getTof();
252 double BelleTofQuality(
const Particle* particle)
254 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
255 if (!belleTrkExtra) {
256 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
259 return belleTrkExtra->getTofQuality();
262 double BelleTofSigma(
const Particle* particle)
264 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
265 if (!belleTrkExtra) {
266 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
269 return belleTrkExtra->getTofSigma();
272 double BellePathLength(
const Particle* particle)
274 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
275 if (!belleTrkExtra) {
276 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
279 return belleTrkExtra->getPathLength();
282 double BelleTofMass(
const Particle* particle)
284 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
285 if (!belleTrkExtra) {
286 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
289 double time = belleTrkExtra->getTof();
290 double length = belleTrkExtra->getPathLength();
291 double p = particle->getP();
293 double tofmass = p * sqrt(1. / (tofbeta * tofbeta) - 1.);
298 double BelledEdx(
const Particle* particle)
300 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
301 if (!belleTrkExtra) {
302 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
305 return belleTrkExtra->getdEdx();
308 double BelledEdxQuality(
const Particle* particle)
310 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
311 if (!belleTrkExtra) {
312 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
315 return belleTrkExtra->getdEdxQuality();
318 double BelleACCnPe(
const Particle* particle)
320 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
321 if (!belleTrkExtra) {
322 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
325 return belleTrkExtra->getACCPe();
328 double BelleACCQuality(
const Particle* particle)
330 auto belleTrkExtra = getBelleTrkExtraInfoFromParticle(particle);
331 if (!belleTrkExtra) {
332 B2WARNING(
"Cannot find BelleTrkExtra, did you forget to enable BelleTrkExtra during the conversion?");
335 return belleTrkExtra->getACCQuality();
338 double Pi0_Prob(
double mass,
double energy,
int eclRegion)
340 static const double massMin = 0.034976;
341 static const double massMax = 0.234976;
342 static const double logEnergyMin = 1.3;
343 static const double logEnergyMax = 3.7;
344 static const int p_bins = 24;
345 static const int m_bins = 50;
347 double logp = log(1000 * energy) / log(10.);
348 if ((logp < logEnergyMin) || (logp > logEnergyMax))
return 0;
350 double drow = p_bins * (logp - logEnergyMin) / (logEnergyMax - logEnergyMin);
352 double dcol = m_bins * (mass - massMin) / (massMax - massMin);
354 if ((row < 0) || (row >= p_bins) || (col < 0) || (col >= m_bins)) {
355 B2ERROR(
"Fault in getting the coordinates of pi0 probability");
358 int pos = m_bins * row + col ;
359 if (pos > m_bins * p_bins) {
360 B2ERROR(
"Fault in getting the coordinates of pi0 probability");
363 static DBObjPtr<BellePi0EtaProbParameters> probs;
364 if (!probs.isValid()) {
367 if (eclRegion == 1) {
368 return probs->getBelleFWDPi0Probability(pos);
369 }
else if (eclRegion == 2) {
370 return probs->getBelleBRLPi0Probability(pos);
371 }
else if (eclRegion == 3) {
372 return probs->getBelleBWDPi0Probability(pos);
376 double Eta_Prob(
double mass,
double energy,
int eclRegion)
378 static const double massMin = 0.4473;
379 static const double massMax = 0.6473;
380 static const double logEnergyMin = 1.3;
381 static const double logEnergyMax = 3.7;
382 static const int p_bins = 24;
383 static const int m_bins = 50;
385 double logp = log(1000 * energy) / log(10.);
386 if ((logp < logEnergyMin) || (logp > logEnergyMax))
return 0;
388 double drow = p_bins * (logp - logEnergyMin) / (logEnergyMax - logEnergyMin);
390 double dcol = m_bins * (mass - massMin) / (massMax - massMin);
392 if ((row < 0) || (row >= p_bins) || (col < 0) || (col >= m_bins)) {
393 B2ERROR(
"Fault in getting the coordinates of eta probability");
396 int pos = m_bins * row + col ;
397 if (pos > m_bins * p_bins) {
398 B2ERROR(
"Fault in getting the coordinates of eta probability");
402 static DBObjPtr<BellePi0EtaProbParameters> probs;
403 if (!probs.isValid())
405 if (eclRegion == 1) {
406 return probs->getBelleFWDEtaProbability(pos);
407 }
else if (eclRegion == 2) {
408 return probs->getBelleBRLEtaProbability(pos);
409 }
else if (eclRegion == 3) {
410 return probs->getBelleBWDEtaProbability(pos);
416 std::string photonListName =
"gamma:mdst";
417 if (arguments.size() == 1) photonListName = arguments[0];
419 auto func = [photonListName](
const Particle * particle) ->
double {
420 StoreObjPtr<ParticleList> photonList(photonListName);
421 if (!(photonList.isValid()))
423 B2FATAL(
"Invalid photon list name " << photonListName <<
" given to BellePi0Veto!");
426 ROOT::Math::PxPyPzEVector particle4Vector = particle->get4Vector();
427 unsigned int particleIndex = particle->getMdstArrayIndex();
428 std::optional<double> temppi0;
430 for (
unsigned int i = 0; i < photonList->getListSize(); i++)
432 const Particle* photon = photonList->getParticle(i);
434 if (photon->getMdstArrayIndex() == particleIndex)
continue;
436 ROOT::Math::PxPyPzEVector Pi0 = particle4Vector + photon->get4Vector();
438 double mass = Pi0.M();
439 if (mass < 0.11 or mass > 0.15)
continue;
441 double pi0_prob = Pi0_Prob(
444 eclClusterDetectionRegion(photon)
446 if (!temppi0 or pi0_prob > *temppi0) {
457 std::string photonListName =
"gamma:mdst";
458 if (arguments.size() == 1) photonListName = arguments[0];
460 auto func = [photonListName](
const Particle * particle) ->
double {
461 StoreObjPtr<ParticleList> photonList(photonListName);
462 if (!(photonList.isValid()))
464 B2FATAL(
"Invalid photon list name " << photonListName <<
" given to BelleEtaVeto!");
467 ROOT::Math::PxPyPzEVector particle4Vector = particle->get4Vector();
468 unsigned int particleIndex = particle->getMdstArrayIndex();
469 std::optional<double> tempeta;
471 for (
unsigned int i = 0; i < photonList->getListSize(); i++)
473 const Particle* photon = photonList->getParticle(i);
475 if (photon->getMdstArrayIndex() == particleIndex)
continue;
477 ROOT::Math::PxPyPzEVector Eta = particle4Vector + photon->get4Vector();
479 double mass = Eta.M();
480 if (mass < 0.5 or mass > 0.58)
continue;
482 double eta_prob = Eta_Prob(
485 eclClusterDetectionRegion(photon)
487 if (!tempeta or eta_prob > *tempeta) {
496 VARIABLE_GROUP(
"Belle Variables");
498 REGISTER_VARIABLE(
"goodBelleKshort", goodBelleKshort, R
"DOC(
499[Legacy] GoodKs Returns true if a :math:`K_{S}^0\to\pi\pi` candidate passes the Belle algorithm:
500a momentum-binned selection including requirements on impact parameter of, and
501angle between the daughter pions as well as separation from the vertex and
502flight distance in the transverse plane.
504.. seealso:: `BELLE2-NOTE-PH-2018-017 <https://docs.belle2.org/record/957>`_
507 REGISTER_VARIABLE("goodBelleLambda", goodBelleLambda, R
"DOC(
508[Legacy] Returns 2.0, 1.0, 0.0 as an indication of goodness of :math:`\Lambda^0` candidates,
511* The distance of the two daughter tracks at their interception at z axis,
512* the minimum distance of the daughter tracks and the IP in xy plane,
513* the difference of the azimuthal angle of the vertex vector and the momentum vector,
514* and the flight distance of the Lambda0 candidates in xy plane.
516It reproduces the ``goodLambda()`` function in Belle.
518``goodBelleLambda`` selection 1 (selected with: ``goodBelleLambda>0``) maximizes the signal significance after applying
519``atcPIDBelle(4,2) > 0.6``, while ``goodBelleLambda`` selection 2 (``goodBelleLambda>1``) is tighter and maximizes the signal
520significance of a :math:`\Lambda^0` sample without any proton PID cut. However, it might still be beneficial to apply a proton PID
521cut on top of it. Which combination of proton PID cut and ``goodBelleLambda`` selection scenario is ideal, is probably
524.. warning:: ``goodBelleLambda`` is not optimized or tested on Belle II data.
527 * `BN-684`_ Lambda selection at Belle. K F Chen et al.
528 * The ``FindLambda`` class can be found at ``/belle_legacy/findLambda/findLambda.h``
530.. _BN-684: https://belle.kek.jp/secured/belle_note/gn684/bn684.ps.gz
534 REGISTER_VARIABLE("goodBelleGamma", goodBelleGamma, R
"DOC(
535[Legacy] Returns 1.0 if the photon candidate passes the simple region dependent
536energy selection for Belle data and MC.
540 E > 50 \textrm{ MeV; barrel}\\
541 E > 100 \textrm{ MeV; forward endcap}\\
542 E > 150 \textrm{ MeV; backward endcap}
545 REGISTER_VARIABLE("BelleFirstCDCHitX", BelleFirstCDCHitX, R
"DOC(
546[Legacy] Returns x component of starting point of the track near the 1st SVD or CDC hit for SVD1 data (exp. 7 - 27) or the 1st CDC hit for SVD2 data (from exp. 31). (Belle only, originally stored in mdst_trk_fit.)
550 REGISTER_VARIABLE("BelleFirstCDCHitY", BelleFirstCDCHitY, R"DOC(
551[Legacy] Returns y component of starting point of the track near the 1st SVD or CDC hit for SVD1 data (exp. 7 - 27) or the 1st CDC hit for SVD2 data (from exp. 31). (Belle only, originally stored in mdst_trk_fit.)
555 REGISTER_VARIABLE("BelleFirstCDCHitZ", BelleFirstCDCHitZ, R"DOC(
556[Legacy] Returns z component of starting point of the track near the 1st SVD or CDC hit for SVD1 data (exp. 7 - 27) or the 1st CDC hit for SVD2 data (from exp. 31). (Belle only, originally stored in mdst_trk_fit.)
560 REGISTER_VARIABLE("BelleLastCDCHitX", BelleLastCDCHitX, R"DOC(
561[Legacy] Returns x component of end point of the track near the last CDC hit. (Belle only, originally stored in mdst_trk_fit.)
565 REGISTER_VARIABLE("BelleLastCDCHitY", BelleLastCDCHitY, R"DOC(
566[Legacy] Returns y component of end point of the track near the last CDC hit. (Belle only, originally stored in mdst_trk_fit.)
570 REGISTER_VARIABLE("BelleLastCDCHitZ", BelleLastCDCHitZ, R"DOC(
571[Legacy] Returns z component of end point of the track near the last CDC hit. (Belle only, originally stored in mdst_trk_fit.)
575 REGISTER_VARIABLE("BellePi0SigM", BellePi0InvariantMassSignificance, R"DOC(
576[Legacy] Returns the significance of the :math:`\pi^0` mass used in the FEI for B2BII.
577The significance is calculated as the difference between the reconstructed and the nominal mass divided by the mass uncertainty:
580 \frac{m_{\gamma\gamma} - m_{\pi^0}^\textrm{PDG}}{\sigma_{m_{\gamma\gamma}}}
582Since the :math:`\pi^0`'s covariance matrix for B2BII is empty, the latter is calculated using the photon daughters' covariance matrices.
585 REGISTER_VARIABLE("BelleTof", BelleTof, R
"DOC(
586[Legacy] Returns the time of flight of a track. (Belle only).
590 REGISTER_VARIABLE(
"BelleTofQuality", BelleTofQuality, R
"DOC(
591[Legacy] Returns the quality flag of the time of flight of a track. Original description from the panther table: 0 if consistency between z of hit by charge Q and corrected times, 1 if zhit from Q NOT consistent with zhit from and correct times. (Belle only).
594 REGISTER_VARIABLE("BelleTofSigma", BelleTofSigma, R
"DOC(
595[Legacy] Returns the expected resolution on the time of flight of a track. (Belle only).
599 REGISTER_VARIABLE(
"BellePathLength", BellePathLength, R
"DOC(
600[Legacy] Returns the track path length. This is defined from the closest point to the z-axis up to TOF counter. (Belle only).
604 REGISTER_VARIABLE(
"BelleTofMass", BelleTofMass, R
"DOC(
605[Legacy] Returns the TOF mass calculated from the time of flight and path length. (Belle only).
607)DOC", "GeV/:math:`\\text{c}^2`");
609 REGISTER_VARIABLE(
"BelledEdx", BelledEdx, R
"DOC(
610[Legacy] Returns the dE/dx measured in the CDC. (Belle only).
614 REGISTER_VARIABLE(
"BelledEdxQuality", BelledEdxQuality, R
"DOC(
615[Legacy] Returns the quality flag of the dE/dx measured in the CDC. Sadly no information about the code meaning is given in the original panther tables. (Belle only).
618 REGISTER_VARIABLE("BelleACCnPe", BelleACCnPe, R
"DOC(
619[Legacy] Returns the number of photo-electrons associated to the track in the ACC. (Belle only).
622 REGISTER_VARIABLE("BelleACCQuality", BelleACCQuality, R
"DOC(
623[Legacy] Returns the ACC quality flag. Original definition in the panther tables: if 0 normal, if 1 the track is out of ACC acceptance. (Belle only).
626 REGISTER_METAVARIABLE("BellePi0Veto(photonlistname)", BellePi0Veto, R
"DOC(
627[Legacy] Meta-variable that computes the maximum probability that a photon candidate is
628consistent with originating from a pi0 decay when combined with any other photon in a given list.
629Calculated within a mass window of 0.11 - 0.15 GeV/c^2, based on mass, energy, and ecl cluster region,
630using lookup tables derived in Belle. For more details, see Belle Note 665.
631)DOC", Manager::VariableDataType::c_double);
632 REGISTER_METAVARIABLE("BelleEtaVeto(photonlistname)", BelleEtaVeto, R
"DOC(
633[Legacy] Meta-variable that computes the maximum probability that a photon candidate is
634consistent with originating from an eta decay when combined with any other photon in a given list.
635Calculated within a mass window of 0.50 - 0.58 GeV/c^2, based on mass, energy, and ecl cluster region,
636using lookup tables derived in Belle. For more details, see Belle Note 665.
637)DOC", Manager::VariableDataType::c_double);
641 REGISTER_VARIABLE(
"clusterBelleQuality", eclClusterDeltaL, R
"DOC(
642[Legacy] Returns ECL cluster's quality indicating a good cluster in GSIM (stored in deltaL of ECL cluster object).
643Belle analysis typically used clusters with quality == 0 in their :math:`E_{\text{extra ECL}}` (Belle only).
int getPDGCode() const
PDG code.
static const ParticleType Lambda
Lambda particle.
static const double speedOfLight
[cm/ns]
static const ParticleType Kshort
K^0_S particle.
static const double doubleNaN
quiet_NaN
std::function< VarVariant(const Particle *)> FunctionPtr
functions stored take a const Particle* and return VarVariant.
Abstract base class for different kinds of events.