Belle II Software light-2406-ragdoll
ParticleListName.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#include <analysis/DecayDescriptor/DecayDescriptor.h>
9#include <analysis/DecayDescriptor/ParticleListName.h>
10
11#include <analysis/utility/EvtPDLUtil.h>
12
13#include <stdexcept>
14
15using namespace Belle2;
16
17std::string ParticleListName::antiParticleListName(const std::string& listName)
18{
19 DecayDescriptor decayDescriptor;
20 bool valid = decayDescriptor.init(listName);
21 if (!valid)
22 throw std::runtime_error("Invalid ParticleList name: '" + listName + "' Should be EVTPDLNAME[:LABEL], e.g. B+ or B+:mylist.");
23
24 int nProducts = decayDescriptor.getNDaughters();
25 if (nProducts > 0)
26 throw std::runtime_error("Invalid ParticleList name " + listName
27 + ". DecayString should not contain any daughters, only the mother particle.");
28
29 const DecayDescriptorParticle* mother = decayDescriptor.getMother();
30 const int pdgCode = mother->getPDGCode();
31
32 bool isSelfConjugatedParticle = !(EvtPDLUtil::hasAntiParticle(pdgCode));
33 if (isSelfConjugatedParticle)
34 return listName;
35 else
36 return EvtPDLUtil::antiParticleListName(pdgCode, mother->getLabel());
37}
38
Represents a particle in the DecayDescriptor.
int getPDGCode() const
Return PDG code.
std::string getLabel() const
The label of this particle, "default" returned, when no label set.
The DecayDescriptor stores information about a decay tree or parts of a decay tree.
std::string antiParticleListName(int pdgCode, const std::string &label)
Returns the name of the anti-particle ParticleList for particles with given pdg code and with given l...
Definition: EvtPDLUtil.cc:30
bool hasAntiParticle(int pdgCode)
Checks if the particle with given pdg code has an anti-particle or not.
Definition: EvtPDLUtil.cc:12
std::string antiParticleListName(const std::string &listName)
Returns name of anti-particle-list corresponding to listName.
Abstract base class for different kinds of events.
Definition: ClusterUtils.h:24