PandaRoot
ParticleBase.h
Go to the documentation of this file.
1 // ******************************************************
2 // DecayTreeFitter Package
3 // We thank the original author Wouter Hulsbergen
4 // (BaBar, LHCb) for providing the sources.
5 // http://arxiv.org/abs/physics/0503191v1 (2005)
6 // Adaptation & Development for PANDA: Ralf Kliemt (2015)
7 // ******************************************************
8 #ifndef PARTICLEBASE_H
9 #define PARTICLEBASE_H 1
10 #include "Rtypes.h"
11 
12 #include <string>
13 #include <vector>
14 #include "Constraint.h"
15 #include "Projection.h"
16 #include "ChiSquare.h"
17 
18 #include "RhoCandidate.h"
19 
20 namespace DecayTreeFitter {
21 class FitParams;
22 class Configuration;
23 
24 class ParticleBase {
25  public:
27  typedef std::vector<ParticleBase *> ParticleContainer;
28 
29  // 'default' constructor
31 
32  // constructor used for InteractionPoint
33  ParticleBase(const std::string &name);
34 
35  virtual ~ParticleBase();
36 
37  static ParticleBase *createParticle(RhoCandidate *bc, const ParticleBase *mother, const Configuration &config);
38 
39  virtual int dim() const = 0;
40  virtual void updateIndex(int &offset);
41  virtual ErrCode initPar1(FitParams *) = 0; // init everything that does not need mother vtx
42  virtual ErrCode initPar2(FitParams *) = 0; // everything else
43  virtual ErrCode initCov(FitParams *) const;
44  virtual std::string parname(int index) const;
45  virtual void print(const FitParams *) const;
46 
47  const ParticleBase *locate(RhoCandidate *bc) const;
48  // void locate(RhoCandidateID& pid, ParticleContainer& result ) ;
49  RhoCandidate *particle() const { return m_particle; }
50 
51  virtual int index() const { return m_index; }
52  const ParticleBase *mother() const { return m_mother; }
53  const std::string &name() const { return m_name; }
54 
55  virtual ErrCode projectGeoConstraint(const FitParams *, Projection &) const;
56  virtual ErrCode projectMassConstraint(const FitParams *, Projection &) const;
58 
59  // indices to fit parameters
60  virtual int type() const = 0;
61  virtual int posIndex() const { return -1; }
62  virtual int lenIndex() const { return -1; }
63  virtual int momIndex() const { return -1; }
64 
65  // does the particle have a 3-momentum or a 4-momentum ?
66  virtual bool hasEnergy() const { return false; }
67 
68  // does the particle have is own decay vertex ? (resonances and
69  // recoparticles do not)
70  virtual bool hasPosition() const { return false; }
71 
72  int eneIndex() const { return hasEnergy() ? momIndex() + 3 : -1; }
73 
74  // calculates the global chisquare (pretty useless)
75  virtual double chiSquareD(const FitParams *) const;
76 
77  // access to particle PDT parameters
78  double pdtMass() const { return m_pdtMass; }
79  double pdtWidth() const { return m_pdtWidth; }
80  double pdtCLifeTime() const { return m_pdtCLifeTime; }
81  double pdtTau() const { return m_pdtMass > 0 ? m_pdtCLifeTime / m_pdtMass : 0; }
82  int charge() const { return m_charge; }
83 
84  // return a trajectory
85  // virtual const LHCb::Trajectory* trajectory() const { return 0 ; }
86 
87  // access to daughters
88  typedef std::vector<ParticleBase *> daucontainer;
89  typedef daucontainer::const_iterator const_iterator;
90 
91  const daucontainer &daughters() const { return m_daughters; }
92  const_iterator begin() const { return m_daughters.begin(); }
93  const_iterator end() const { return m_daughters.end(); }
95  void removeDaughter(const ParticleBase *pb);
96 
97  typedef std::vector<std::pair<const ParticleBase *, int>> indexmap;
98  virtual void retrieveIndexMap(indexmap &anindexmap) const;
99 
100  void setMother(const ParticleBase *m) { m_mother = m; }
101 
102  typedef std::vector<DecayTreeFitter::Constraint> constraintlist;
103  virtual void addToConstraintList(constraintlist &alist, int depth) const = 0;
104  virtual int nFinalChargedCandidates() const;
105  void setParticle(RhoCandidate *bc) { m_particle = bc; }
106 
107  // collect all particles emitted from vertex with position posindex
108  void collectVertexDaughters(daucontainer &particles, int posindex);
109  // set the mass constraint for this particle. return true if value changed
110  bool setMassConstraint(bool add)
111  {
112  std::swap(add, m_hasMassConstraint);
113  return add != m_hasMassConstraint;
114  }
115  // set the mass of the mass constraint (use with care!)
116  void setMassConstraint(double mass)
117  {
118  m_hasMassConstraint = true;
119  m_pdtMass = mass;
120  }
121 
122  ChiSquare chiSquare(const FitParams *fitparams) const;
123 
124  protected:
125  static double pdtCLifeTime(RhoCandidate *bc);
126  // static bool isAResonance(RhoCandidate* bc) ;
127  static bool isAResonance(const TParticlePDG *bc); // TODO
128  // static double bFieldOverC() { return RhoCalculationTools::GetBz ( TVector3(0.,0.,0.) ) / TMath::C() ; } //FIXME: Is that an issue??? // Bz/c
129  static double bFieldOverC(); // FIXME: Is that an issue??? // Bz/c
130  ErrCode initTau(FitParams *par) const;
131  void makeName(RhoCandidate *bc);
132  daucontainer &daughters() { return m_daughters; }
133  bool hasMassConstraint() const { return m_hasMassConstraint; }
134 
135  protected:
136  void setIndex(int i) { m_index = i; }
137  void setName(const std::string &n) { m_name = n; }
138 
139  private:
140  RhoCandidate *m_particle;
141  const ParticleBase *m_mother;
142  ParticleContainer m_daughters;
143  const TParticlePDG *m_prop;
144  int m_index;
145  double m_pdtMass; // cached mass
146  double m_pdtWidth; // particle width (for mass constraints)
147  double m_pdtCLifeTime; // cached lifetime
148  int m_charge; // charge
149  std::string m_name;
150  bool m_hasMassConstraint;
151  ClassDef(ParticleBase, 1)
152 };
153 
154 } // namespace DecayTreeFitter
155 
156 #endif
std::vector< DecayTreeFitter::Constraint > constraintlist
Definition: ParticleBase.h:102
__m128 m
Definition: P4_F32vec4.h:26
const ParticleBase * mother() const
Definition: ParticleBase.h:52
RhoCandidate * particle() const
Definition: ParticleBase.h:49
virtual int posIndex() const
Definition: ParticleBase.h:61
virtual void addToConstraintList(constraintlist &alist, int depth) const =0
virtual int dim() const =0
const std::string & name() const
Definition: ParticleBase.h:53
virtual int lenIndex() const
Definition: ParticleBase.h:62
void setName(const std::string &n)
Definition: ParticleBase.h:137
virtual int nFinalChargedCandidates() const
unsigned int i
Definition: P4_F32vec4.h:21
void setMother(const ParticleBase *m)
Definition: ParticleBase.h:100
virtual ErrCode initPar2(FitParams *)=0
static bool isAResonance(const TParticlePDG *bc)
std::vector< ParticleBase * > ParticleContainer
Definition: ParticleBase.h:27
const_iterator begin() const
Definition: ParticleBase.h:92
ParticleBase * addDaughter(RhoCandidate *, const Configuration &config)
virtual ErrCode projectConstraint(Constraint::Type, const FitParams *, Projection &) const
daucontainer::const_iterator const_iterator
Definition: ParticleBase.h:89
void collectVertexDaughters(daucontainer &particles, int posindex)
ParticleBase(RhoCandidate *bc, const ParticleBase *mother)
virtual ErrCode initCov(FitParams *) const
void removeDaughter(const ParticleBase *pb)
void setParticle(RhoCandidate *bc)
Definition: ParticleBase.h:105
virtual int type() const =0
ErrCode initTau(FitParams *par) const
virtual ErrCode projectGeoConstraint(const FitParams *, Projection &) const
void setMassConstraint(double mass)
Definition: ParticleBase.h:116
virtual bool hasEnergy() const
Definition: ParticleBase.h:66
const ParticleBase * locate(RhoCandidate *bc) const
virtual ErrCode projectMassConstraint(const FitParams *, Projection &) const
const_iterator end() const
Definition: ParticleBase.h:93
virtual double chiSquareD(const FitParams *) const
const daucontainer & daughters() const
Definition: ParticleBase.h:91
virtual void print(const FitParams *) const
std::vector< std::pair< const ParticleBase *, int > > indexmap
Definition: ParticleBase.h:97
virtual ErrCode initPar1(FitParams *)=0
virtual bool hasPosition() const
Definition: ParticleBase.h:70
virtual int momIndex() const
Definition: ParticleBase.h:63
ChiSquare chiSquare(const FitParams *fitparams) const
bool setMassConstraint(bool add)
Definition: ParticleBase.h:110
virtual void retrieveIndexMap(indexmap &anindexmap) const
static ParticleBase * createParticle(RhoCandidate *bc, const ParticleBase *mother, const Configuration &config)
virtual std::string parname(int index) const
std::vector< ParticleBase * > daucontainer
Definition: ParticleBase.h:88
virtual int index() const
Definition: ParticleBase.h:51
void makeName(RhoCandidate *bc)
virtual void updateIndex(int &offset)