10 #include <framework/datastore/RelationsObject.h>
11 #include <mdst/dataobjects/PIDLikelihood.h>
12 #include <analysis/VariableManager/Utility.h>
13 #include <analysis/dataobjects/Particle.h>
15 #include <framework/logging/Logger.h>
75 Mask(
const std::string& name =
"",
const std::string& origin =
"unknown"):
m_name(name),
78 B2DEBUG(10,
"Mask " << name <<
" is being initialized by " << origin);
101 B2INFO(
"Mask " +
m_name +
" originating from " +
m_origin +
" is valid, cannot write to it!");
104 for (
auto* particle : particles) {
130 for (
int& i : toErase) {
159 B2INFO(
"\tNot valid!");
161 std::string printout =
"\tIndices: ";
163 printout += std::to_string(index) +
", ";
179 bool isNested =
false,
180 bool isFromMC =
false,
181 bool useKLMEnergy =
false,
182 bool builtWithMostLikely =
false):
191 void addParticles(
const std::vector<const Particle*>& particle);
225 void initializeMask(
const std::string& name,
const std::string& origin =
"unknown");
234 void updateMaskWithCuts(
const std::string& name,
const std::shared_ptr<Variable::Cut>& trackCut =
nullptr,
235 const std::shared_ptr<Variable::Cut>& eclCut =
nullptr,
const std::shared_ptr<Variable::Cut>& klmCut =
nullptr,
236 bool updateExisting =
false);
251 bool hasMask(
const std::string& name)
const;
279 std::vector<const Particle*>
getParticles(
const std::string& maskName =
"",
bool unpackComposite =
true)
const;
287 std::vector<const Particle*>
getPhotons(
const std::string& maskName =
"",
bool unpackComposite =
true)
const;
295 std::vector<const Particle*>
getHadrons(
const std::string& maskName =
"",
bool unpackComposite =
true)
const;
304 std::vector<const Particle*>
getChargedParticles(
const std::string& maskName =
"",
unsigned int pdg = 0,
305 bool unpackComposite =
true)
const;
313 TLorentzVector
get4Vector(
const std::string& maskName =
"")
const;
329 int getNTracks(
const std::string& maskName =
"")
const;
356 void print(
const std::string& maskName =
"",
bool unpackComposite =
true)
const;
382 void printIndices(
const std::string& maskName =
"",
bool unpackComposite =
true,
const std::string& tab =
" - ")
const;
Class to store reconstructed particles.
EParticleSourceObject
particle source enumerators
Defines interface for accessing relations of objects in StoreArray.
int getArrayIndex() const
Returns this object's array index (in StoreArray), or -1 if not found.
ClassDef(RelationsInterface, 0)
defines interface for accessing relations of objects in StoreArray.
This is a general purpose class for collecting reconstructed MDST data objects that are not used in r...
int getPDGCode() const
Gets the PDG code of the rest of event.
std::set< int > m_particleIndices
StoreArray indices to unused particles.
RestOfEvent(int pdgCode=0, bool isNested=false, bool isFromMC=false, bool useKLMEnergy=false, bool builtWithMostLikely=false)
Default constructor.
TLorentzVector get4Vector(const std::string &maskName="") const
Get 4-momentum vector all (no mask) or a subset (use mask) of all Tracks and ECLClusters in ROE.
int getNTracks(const std::string &maskName="") const
Get number of all (no mask) or a subset (use mask) of all Tracks in ROE.
void initializeMask(const std::string &name, const std::string &origin="unknown")
Initialize new mask.
bool checkCompatibilityOfMaskAndV0(const std::string &name, const Particle *particleV0)
Check if V0 can be added, maybe should be moved to private.
bool hasParticle(const Particle *particle, const std::string &maskName="") const
Check if ROE has StoreArray index of given to the list of unused tracks in the event.
bool getIsNested() const
Returns true if the ROE is nested.
bool m_builtWithMostLikely
indicates whether most-likely particle lists were used in build of ROE
void updateMaskWithCuts(const std::string &name, const std::shared_ptr< Variable::Cut > &trackCut=nullptr, const std::shared_ptr< Variable::Cut > &eclCut=nullptr, const std::shared_ptr< Variable::Cut > &klmCut=nullptr, bool updateExisting=false)
Update mask with cuts.
void print(const std::string &maskName="", bool unpackComposite=true) const
Prints the contents of a RestOfEvent object to screen.
bool hasMask(const std::string &name) const
True if this ROE object has mask.
void setPDGCode(int pdgCode)
Sets the PDG code of the rest of event.
bool m_isFromMC
MC ROE indicator.
std::vector< const Particle * > getChargedParticles(const std::string &maskName="", unsigned int pdg=0, bool unpackComposite=true) const
Get charged particles from ROE mask.
int getNECLClusters(const std::string &maskName="") const
Get number of all (no mask) or a subset (use mask) of all ECLclusters in ROE.
std::vector< const Particle * > getHadrons(const std::string &maskName="", bool unpackComposite=true) const
Get hadrons from ROE mask.
std::vector< const Particle * > getParticles(const std::string &maskName="", bool unpackComposite=true) const
Get all Particles from ROE mask.
void printIndices(const std::string &maskName="", bool unpackComposite=true, const std::string &tab=" - ") const
Prints indices in the given set in a single line.
Mask * findMask(const std::string &name)
Helper method to find ROE mask.
void addParticles(const std::vector< const Particle * > &particle)
Add StoreArray indices of given Particles to the list of unused particles in the event.
std::vector< std::string > getMaskNames() const
Get vector of all mask names of the ROE object.
int getNKLMClusters(const std::string &maskName="") const
Get number of all remaining KLM clusters.
void updateMaskWithV0(const std::string &name, const Particle *particleV0)
Update mask with composite particle.
bool m_useKLMEnergy
Include KLM energy into ROE 4-vector.
Particle * convertToParticle(const std::string &maskName="", int pdgCode=0, bool isSelfConjugated=true)
Converts ROE to Particle and adds it to StoreArray.
TLorentzVector get4VectorNeutralECLClusters(const std::string &maskName="") const
Get 4-momentum vector all (no mask) or a subset (use mask) of all ECLClusters in ROE.
bool isBuiltWithMostLikely() const
Returns true if the ROE was built with most-likely particle lists.
std::vector< Mask > m_masks
List of the ROE masks.
int m_pdgCode
PDG code of the 'ROE particle' if we are going to create one.
void excludeParticlesFromMask(const std::string &maskName, const std::vector< const Particle * > &particles, Particle::EParticleSourceObject listType, bool discard)
Update mask by keeping or excluding particles.
bool isInParticleList(const Particle *roeParticle, const std::vector< const Particle * > &particlesToUpdate) const
Checks if a particle has its copy in the provided list.
bool m_isNested
Nested ROE indicator.
std::vector< const Particle * > getPhotons(const std::string &maskName="", bool unpackComposite=true) const
Get photons from ROE mask.
Abstract base class for different kinds of events.
Structure of Rest of Event mask.
std::set< int > m_maskedV0Indices
StoreArray indices for masked V0 ROE particles.
void clearParticles()
Clear selected particles associated to the mask.
bool isValid() const
Get mask validity.
std::set< int > getV0s() const
Get selected particles associated to the V0 of mask.
std::string getName() const
Get mask name.
Mask(const std::string &name="", const std::string &origin="unknown")
Default constructor.
std::string m_origin
Mask origin for debug.
void addParticles(const std::vector< const Particle * > &particles)
Add selected particles to the mask.
bool hasV0(const Particle *v0) const
Has selected particles associated to the mask.
void print() const
Print mask and selected particles associated to the mask.
void addV0(const Particle *v0, std::vector< int > &toErase)
Get selected particles associated to the V0 of mask.
bool m_isValid
Check if mask has elements or correctly initialized.
std::string m_name
Mask name.
std::set< int > m_maskedParticleIndices
StoreArray indices for masked ROE particles.
std::set< int > getParticles() const
Get selected particles associated to the mask.