Belle II Software  release-05-01-25
InternalTrack Class Reference

another unneccessary layer of abstraction More...

#include <InternalTrack.h>

Inheritance diagram for InternalTrack:
Collaboration diagram for InternalTrack:

Public Types

enum  TFParticleType {
  kInteractionPoint,
  kOrigin,
  kRecoComposite,
  kRecoResonance,
  kInternalParticle,
  kRecoTrack,
  kResonance,
  kRecoPhoton,
  kRecoKlong,
  kMissingParticle,
  kFeedthroughParticle,
  kInternalTrack
}
 particle types

 
typedef std::vector< Constraintconstraintlist
 alias
 
typedef std::vector< std::pair< const ParticleBase *, int > > indexmap
 alias
 

Public Member Functions

 InternalTrack (Belle2::Particle *particle, const ParticleBase *mother, const ConstraintConfiguration &config, bool forceFitAll, bool noEnergySum, bool forceMassConstraint)
 constructor
 
virtual ~InternalTrack ()
 destructor
 
virtual ErrCode initCovariance (FitParams &) const override
 init covariance
 
ErrCode projectHelixConstraint (const FitParams &, Projection &) const
 project helix constraint
 
virtual ErrCode initParticleWithMother (FitParams &fitparams) override
 init particle in case it has a mother
 
virtual ErrCode initMotherlessParticle (FitParams &fitparams) override
 init particle in case it has no mother More...
 
ErrCode projectConstraint (const Constraint::Type type, const FitParams &fitparams, Projection &p) const override
 find out which constraint it is and project
 
virtual int dim () const override
 space reserved in fit params
 
virtual int type () const override
 type
 
virtual int posIndex () const override
 position index in fit params
 
virtual int tauIndex () const override
 tau index in fit params only if it has a mother
 
virtual int momIndex () const override
 momentum index in fit params depending on whether it has a mother

 
virtual bool hasEnergy () const override
 has energy in fitparams

 
virtual bool hasPosition () const override
 has position index

 
virtual void addToConstraintList (constraintlist &list, int depth) const override
 add to constraint list

 
void setMassConstraint (bool b)
 set mass constraint flag
 
void forceP4Sum (FitParams &fitparams) const override
 Forces the four-momentum sum.
 
virtual void updateIndex (int &offset)
 this sets the index for momentum, position, etc. More...
 
virtual std::string parname (int index) const
 get name of parameter i
 
const ParticleBaselocate (Belle2::Particle *particle) const
 get particle base from basf2 particle
 
Belle2::Particleparticle () const
 get basf2 particle

 
int index () const
 get index

 
const ParticleBasemother () const
 getMother() / hasMother()
 
const std::string & name () const
 get name of the particle
 
virtual ErrCode projectGeoConstraint (const FitParams &, Projection &) const
 project geometrical constraint More...
 
virtual ErrCode projectMassConstraintParticle (const FitParams &, Projection &) const
 project mass constraint using the particles parameters More...
 
virtual ErrCode projectMassConstraintDaughters (const FitParams &, Projection &) const
 project mass constraint using the parameters of the daughters More...
 
virtual ErrCode projectMassConstraint (const FitParams &, Projection &) const
 project mass constraint abstract
 
int eneIndex () const
 get energy index

 
virtual double chiSquare (const FitParams &) const
 get chi2
 
double pdgMass () const
 get pdg mass

 
double pdgWidth () const
 get pdg width
 
double pdgLifeTime () const
 get pdg lifetime
 
double pdgTime () const
 get Tau
 
int charge () const
 get charge
 
virtual ParticleBaseaddDaughter (Belle2::Particle *, const ConstraintConfiguration &config, bool forceFitAll=false)
 add daughter

 
virtual void removeDaughter (const ParticleBase *pb)
 remove daughter
 
virtual void retrieveIndexMap (indexmap &anindexmap) const
 get index map

 
void setMother (const ParticleBase *m)
 set mother

 
void collectVertexDaughters (std::vector< ParticleBase * > &particles, int posindex)
 get vertex daughters
 
virtual int nFinalChargedCandidates () const
 number of charged candidates
 
void setParticle (Belle2::Particle *particle)
 set the relation to basf2 particle type
 

Static Public Member Functions

static ParticleBasecreateParticle (Belle2::Particle *particle, const ParticleBase *mother, const ConstraintConfiguration &config, bool forceFitAll=false)
 create the according treeFitter particle obj for a basf2 particle type

 
static ParticleBasecreateOrigin (Belle2::Particle *daughter, const ConstraintConfiguration &config, bool forceFitAll)
 create a custom origin particle or a beamspot
 

Protected Types

typedef std::vector< ParticleBase * > ParticleContainer
 just an alias
 

Protected Member Functions

ErrCode initMomentum (FitParams &fitparams) const
 init momentum of *this and daughters
 
ErrCode initTau (FitParams &par) const
 initialises tau as a length

 
void setIndex (int i)
 set Index (in statevector)
 

Static Protected Member Functions

static double pdgLifeTime (Belle2::Particle *particle)
 get pdg lifetime
 
static bool isAResonance (Belle2::Particle *particle)
 controls if a particle is treated as a resonance(lifetime=0) or a particle that has a finite lifetime. More...
 
static double bFieldOverC ()
 Bz/c

 

Protected Attributes

Belle2::Particlem_particle
 pointer to framework type

 
const ParticleBasem_mother
 motherparticle
 
std::vector< ParticleBase * > m_daughters
 daughter container

 
bool m_isStronglyDecayingResonance
 decay length less than 1 micron

 
const ConstraintConfigurationm_config
 has all the constraint config
 

Static Private Member Functions

static bool compTrkTransverseMomentum (const RecoTrack *lhs, const RecoTrack *rhs)
 compare transverse track momentum
 

Private Attributes

bool m_massconstraint
 has mass cosntraint
 
bool m_noEnergySum
 Energy is not conserved at the decay (happens in Bremsstrahlung)
 
bool m_isconversion
 is conversion
 
double m_bfield
 B field value.
 
int m_index
 index
 
const double m_pdgMass
 pdg mass

 
double m_pdgWidth
 particle width
 
const double m_pdgLifeTime
 lifetime in cm

 
int m_charge
 charge

 
std::string m_name
 name

 

Detailed Description

another unneccessary layer of abstraction

Definition at line 26 of file InternalTrack.h.

Member Function Documentation

◆ initMotherlessParticle()

ErrCode initMotherlessParticle ( FitParams fitparams)
overridevirtual

init particle in case it has no mother

(0,0,0) is the best guess in any other case

Implements ParticleBase.

Definition at line 61 of file InternalTrack.cc.

62  {
63  ErrCode status;
64  for (ParticleBase* daughter : m_daughters)
65 
66  {
67  status |= daughter->initMotherlessParticle(fitparams);
68  }
69  int posindex = posIndex();
70  // FIXME update this and check if this position is already initialised
71  // lower stream vertices might be better
72 
73  if (hasPosition()) {
74  fitparams.getStateVector().segment(posindex, 3) = Eigen::Matrix<double, 3, 1>::Zero(3);
75  TVector3 vtx = particle()->getVertex();
76  if (vtx.Mag2()) {
77  // Checking Mag2() instead of Mag() avoids a Sqrt(...)
78  fitparams.getStateVector()(posindex) = vtx.X();
79  fitparams.getStateVector()(posindex + 1) = vtx.Y();
80  fitparams.getStateVector()(posindex + 2) = vtx.Z();
81  } else {
82  // Init containers
83  vector<ParticleBase*> alldaughters;
84  vector<ParticleBase*> vtxdaughters;
85  vector<RecoTrack*> trkdaughters;
86 
87  ParticleBase::collectVertexDaughters(alldaughters, posindex);
88 
89  for (ParticleBase* daughter : alldaughters) {
90  if (daughter->type() == ParticleBase::TFParticleType::kRecoTrack) {
91  trkdaughters.push_back(static_cast<RecoTrack*>(daughter));
92  } else if (daughter->hasPosition() && fitparams.getStateVector()(daughter->posIndex()) != 0) {
93  vtxdaughters.push_back(daughter);
94  }
95  }
96 
97  if (trkdaughters.size() >= 2) {
98  std::sort(trkdaughters.begin(), trkdaughters.end(), compTrkTransverseMomentum);
99 
100  RecoTrack* dau1 = trkdaughters[0];
101  RecoTrack* dau2 = trkdaughters[1];
102 
103  Belle2::Helix helix1 = dau1->particle()->getTrack()->getTrackFitResultWithClosestMass(Belle2::Const::ChargedStable(std::abs(
104  dau1->particle()->getPDGCode())))->getHelix();
105  Belle2::Helix helix2 = dau2->particle()->getTrack()->getTrackFitResultWithClosestMass(Belle2::Const::ChargedStable(std::abs(
106  dau2->particle()->getPDGCode())))->getHelix();
107 
108  double flt1(0), flt2(0);
109  TVector3 v;
110  HelixUtils::helixPoca(helix1, helix2, flt1, flt2, v, m_isconversion);
111 
112  fitparams.getStateVector()(posindex) = v.x();
113  fitparams.getStateVector()(posindex + 1) = v.y();
114  fitparams.getStateVector()(posindex + 2) = v.z();
115 
116  dau1->setFlightLength(flt1);
117  dau2->setFlightLength(flt2);
118 
119  } else if (mother() && mother()->posIndex() >= 0) {
120  const int posindexmother = mother()->posIndex();
121  const int dim = m_config->m_originDimension; //TODO access mother
122  fitparams.getStateVector().segment(posindex, dim) = fitparams.getStateVector().segment(posindexmother, dim);
123  } else {
125  fitparams.getStateVector().segment(posindex, 3) = Eigen::Matrix<double, 1, 3>::Zero(3);
126  }
127  }
128  }
129 
130  for (ParticleBase* daughter : m_daughters) {
131  daughter->initParticleWithMother(fitparams);
132  }
133 
134  initMomentum(fitparams);
135  return status;
136  }

◆ isAResonance()

bool isAResonance ( Belle2::Particle particle)
staticprotectedinherited

controls if a particle is treated as a resonance(lifetime=0) or a particle that has a finite lifetime.

A finite life time means it will register a geo constraint for this particle

Definition at line 235 of file ParticleBase.cc.

◆ projectGeoConstraint()

ErrCode projectGeoConstraint ( const FitParams fitparams,
Projection p 
) const
virtualinherited

project geometrical constraint

the direction of the momentum is very well known from the kinematic constraints that is why we do not extract the distance as a vector here

Definition at line 359 of file ParticleBase.cc.

◆ projectMassConstraintDaughters()

ErrCode projectMassConstraintDaughters ( const FitParams fitparams,
Projection p 
) const
virtualinherited

project mass constraint using the parameters of the daughters

be aware that the signs here are important E-|p|-m extracts a negative mass and messes with the momentum !

Definition at line 435 of file ParticleBase.cc.

◆ projectMassConstraintParticle()

ErrCode projectMassConstraintParticle ( const FitParams fitparams,
Projection p 
) const
virtualinherited

project mass constraint using the particles parameters

be aware that the signs here are important E-|p|-m extracts a negative mass and messes with the momentum !

Definition at line 496 of file ParticleBase.cc.

◆ updateIndex()

void updateIndex ( int &  offset)
virtualinherited

this sets the index for momentum, position, etc.

in the statevector

Definition at line 138 of file ParticleBase.cc.


The documentation for this class was generated from the following files:
Belle2::Particle::getVertex
TVector3 getVertex() const
Returns vertex position (POCA for charged, IP for neutral FS particles)
Definition: Particle.h:529
TreeFitter::ParticleBase::ParticleBase
ParticleBase(Belle2::Particle *particle, const ParticleBase *mother, const ConstraintConfiguration *config)
default constructor
Definition: ParticleBase.cc:41
TreeFitter::InternalTrack::initMomentum
ErrCode initMomentum(FitParams &fitparams) const
init momentum of *this and daughters
Definition: InternalTrack.cc:152
TreeFitter::InternalTrack::dim
virtual int dim() const override
space reserved in fit params
Definition: InternalTrack.cc:339
TreeFitter::InternalTrack::m_isconversion
bool m_isconversion
is conversion
Definition: InternalTrack.h:112
TreeFitter::HelixUtils::helixPoca
static double helixPoca(const Belle2::Helix &helix1, const Belle2::Helix &helix2, double &flt1, double &flt2, TVector3 &vertex, bool parallel=false)
POCA between two tracks.
Definition: HelixUtils.cc:238
TreeFitter::ConstraintConfiguration::m_originDimension
const int m_originDimension
dimension of the origin constraint and ALL geometric gcosntraints
Definition: ConstraintConfiguration.h:113
TreeFitter::InternalTrack::hasPosition
virtual bool hasPosition() const override
has position index
Definition: InternalTrack.cc:317
TreeFitter::ParticleBase::posIndex
virtual int posIndex() const
get vertex index (in statevector!)
Definition: ParticleBase.h:142
Belle2::CDC::Helix
Helix parameter class.
Definition: Helix.h:51
TreeFitter::InternalTrack::compTrkTransverseMomentum
static bool compTrkTransverseMomentum(const RecoTrack *lhs, const RecoTrack *rhs)
compare transverse track momentum
Definition: InternalTrack.cc:56
TreeFitter::ParticleBase::mother
const ParticleBase * mother() const
getMother() / hasMother()
Definition: ParticleBase.cc:295
Belle2::Const::ChargedStable
Provides a type-safe way to pass members of the chargedStableSet set.
Definition: Const.h:465
TreeFitter::ParticleBase::collectVertexDaughters
void collectVertexDaughters(std::vector< ParticleBase * > &particles, int posindex)
get vertex daughters
Definition: ParticleBase.cc:257
TreeFitter::ParticleBase::m_config
const ConstraintConfiguration * m_config
has all the constraint config
Definition: ParticleBase.h:237
TreeFitter::InternalTrack::posIndex
virtual int posIndex() const override
position index in fit params
Definition: InternalTrack.cc:329
TreeFitter::ParticleBase::particle
Belle2::Particle * particle() const
get basf2 particle
Definition: ParticleBase.h:109
TreeFitter::ParticleBase::m_daughters
std::vector< ParticleBase * > m_daughters
daughter container
Definition: ParticleBase.h:231