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