FairRoot/PandaRoot
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
DecayTreeFitter::Fitter Class Reference

#include <Fitter.h>

Inheritance diagram for DecayTreeFitter::Fitter:
RhoFitterBase RhoDecayTreeFitter

Public Types

enum  FitStatus {
  UnFitted = -1, Success = 0, Failed, BadInput,
  NonConverged
}
 

Public Member Functions

 Fitter (RhoCandidate *bc, RecoTrackStateProvider *extrapolator, int verbosity=0)
 constructor from the particle (decay head) More...
 
 Fitter (RhoCandidate *bc, const RhoVector3Err &pv, RecoTrackStateProvider *extrapolator=0, int verbosity=0)
 constructor from the particle (decay head) and primary vertex More...
 
 Fitter (RhoCandidate *bc, const RhoLorentzVectorErr &lv, RecoTrackStateProvider *extrapolator, int verbosity=0)
 constructor from the particle (decay head) and pbeam More...
 
 Fitter (RhoCandidate *bc, const RhoLorentzVectorErr &lv, const RhoVector3Err &pv, RecoTrackStateProvider *extrapolator=0, int verbosity=0)
 constructor from the particle (decay head), pbeam and primary vertex More...
 
virtual ~Fitter ()
 destructor More...
 
void setMassConstraint (RhoCandidate *cand, bool add=true)
 Add or remove a mass constraint. More...
 
void setMassConstraint (RhoCandidate *cand, double mass)
 Add a constraint to a mass different from the property table mass. More...
 
Bool_t Fit (int maxNumberOfIterations=10, double deltaChisquareConverged=0.01)
 Add or remove a mass constraintfor a certain ParticleID. More...
 
Bool_t FitAll (int maxit=10, double dchiq=0.01)
 
std::string print () const
 Print the result of the fit. More...
 
std::ostreamfillStream (std::ostream &s) const
 Print the result of the fit. More...
 
RhoCandidateparticle () const
 The top level particle that is fitted. More...
 
RhoCandidatefitParams (RhoCandidate *p=0) const
 
double chiSquare () const
 Total chisquare. More...
 
int nDof () const
 Total number of DOFs. More...
 
FitStatus status () const
 Status of fit. More...
 
int nIter () const
 Number of iterations used by vertex fit. More...
 
ChiSquare chiSquare (RhoCandidate *p) const
 get the chisquare of everything 'downstream' of a particle More...
 
RhoDoubleErr decayLengthSum (RhoCandidate *, RhoCandidate *) const
 
bool updateCand (RhoCandidate *cand) const
 update a particlular candidate in the tree More...
 
bool updateTree (RhoCandidate *cand) const
 update a particlular candidate in the tree More...
 
int errCode ()
 error code More...
 
void setVerbose (int i)
 set the verbosity level (for debugging only) More...
 
void SetToleranceZ (double z)
 
DecayChainGetDecayChainDirty ()
 
RecoTrackStateProviderextrapolator ()
 get the extrapolator More...
 
void setStateProvider (RecoTrackStateProvider *extrapolator)
 set the track extrapolator More...
 
Bool_t Fit ()
 
Bool_t FitAll ()
 
double Chi2Contribution (const RhoCandidate *)
 
double GetChi2 () const
 
int GetNdf () const
 
double GetProb () const
 
void SetVerbose (Bool_t v=kTRUE)
 

Protected Member Functions

std::string name (RhoCandidate *cand) const
 Name of a particle in the decay tree. More...
 
RhoDoubleErr decayLengthSum (const ParticleBase &, const ParticleBase &) const
 
DecayChaindecaychain ()
 
FitParamsfitparams ()
 
const DecayChaindecaychain () const
 
const FitParamsfitparams () const
 
double globalChiSquare () const
 
double add (RhoCandidate *cand)
 
double remove (RhoCandidate *cand)
 
void updateIndex ()
 
void fit (int maxNumberOfIterations=10, double deltaChisquareConverged=0.01)
 Fit the decay tree. More...
 
void fitOneStep ()
 Fit just one step. More...
 
RhoCandidatefittedCand (RhoCandidate *cand, RhoCandidate *headoftree) const
 
void updateCand (const ParticleBase &pb, RhoCandidate *cand) const
 
RhoCandidateHeadOfTree () const
 
virtual Bool_t FitNode (RhoCandidate *b)
 
RhoCandidateCopyCand (RhoCandidate *)
 uppermost particle composite in tree More...
 
RhoCandidateCopyTree (RhoCandidate *)
 
void InsertChi2 (const RhoCandidate *bc, const double chi2)
 
void SetDaugthersFromComposite (RhoCandidate *cand)
 
void FindAndAddFinalStateDaughters (RhoCandidate *cand)
 
void SetFourMomentumByDaughters (RhoCandidate *composite)
 
void SetDecayVertex (RhoCandidate *composite, const TVector3 &vtx, const TMatrixD &CovVV)
 

Protected Attributes

RecoTrackStateProviderm_extrapolator
 track extrapolator (if needed) More...
 
Bool_t fVerbose
 
RhoCandidatefHeadOfTree
 
std::vector< RhoCandidate * > fDaughters
 
double fChiSquare
 
int fNDegreesOfFreedom
 

Private Member Functions

 Fitter ()
 default constructor is disabled More...
 
 Fitter (const Fitter &)
 copy constructor is disabled More...
 
Fitteroperator= (const Fitter &)
 assignement operator is disabled More...
 

Private Attributes

RhoCandidatem_particle
 
DecayChainm_decaychain
 
FitParamsm_fitparams
 
FitStatus m_status
 
int m_niter
 
int m_errCode
 

Detailed Description

``Decay-Tree-Fitter''`

Author
Wouter Hulsbergen Woute.nosp@m.r.Hu.nosp@m.lsber.nosp@m.gen@.nosp@m.nikhe.nosp@m.f.nl

Definition at line 55 of file Fitter.h.

Member Enumeration Documentation

Enumerator
UnFitted 
Success 
Failed 
BadInput 
NonConverged 

Definition at line 59 of file Fitter.h.

Constructor & Destructor Documentation

DecayTreeFitter::Fitter::Fitter ( RhoCandidate bc,
RecoTrackStateProvider extrapolator,
int  verbosity = 0 
)

constructor from the particle (decay head)

Definition at line 37 of file Fitter.cxx.

References vtxverbose.

40 : RhoFitterBase(bc)
41 , m_particle (bc)
42 , m_decaychain (0)
43 , m_fitparams (0)
45 //, m_chiSquare (-1)
46 , m_niter (-1)
47 , m_errCode (0)
48 , m_extrapolator( aExtrapolator)
49 {
50  vtxverbose = verbosity;
51  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") A - config"<<std::endl;
52  Configuration config(aExtrapolator) ;
53  // build the tree
54  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") A - tree"<<std::endl;
55  m_decaychain = new DecayChain(bc,config) ;
56  // allocate the fit parameters
57  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") A - Fitparams"<<std::endl;
59  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") A - done"<<std::endl;
60 }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
FitParams * m_fitparams
Definition: Fitter.h:223
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
int vtxverbose
RhoCandidate * m_particle
Definition: Fitter.h:221
DecayTreeFitter::Fitter::Fitter ( RhoCandidate bc,
const RhoVector3Err pv,
RecoTrackStateProvider extrapolator = 0,
int  verbosity = 0 
)

constructor from the particle (decay head) and primary vertex

Definition at line 66 of file Fitter.cxx.

References vtxverbose.

70 : RhoFitterBase(bc)
71 , m_particle ( bc )
72 , m_decaychain ( 0 )
73 , m_fitparams ( 0 )
74 , m_status ( UnFitted )
75 //, m_chiSquare ( -1 )
76 , m_niter ( -1 )
77 , m_errCode ( 0 )
78 //
79 , m_extrapolator ( aExtrapolator)
80 //
81 {
82  vtxverbose = verbosity;
83  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - config"<<std::endl;
84  Configuration config(aExtrapolator) ;
85  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - tree "<<std::flush;
86  m_decaychain = new DecayChain(bc,pv,config) ;
87  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - fitparams "<<std::flush;
89  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - done"<<std::endl;
90 }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
FitParams * m_fitparams
Definition: Fitter.h:223
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
int vtxverbose
RhoCandidate * m_particle
Definition: Fitter.h:221
DecayTreeFitter::Fitter::Fitter ( RhoCandidate bc,
const RhoLorentzVectorErr lv,
RecoTrackStateProvider extrapolator,
int  verbosity = 0 
)

constructor from the particle (decay head) and pbeam

Definition at line 95 of file Fitter.cxx.

References vtxverbose.

99 : RhoFitterBase(bc)
100 , m_particle ( bc )
101 , m_decaychain ( 0 )
102 , m_fitparams ( 0 )
103 , m_status ( UnFitted )
104 //, m_chiSquare ( -1 )
105 , m_niter ( -1 )
106 , m_errCode ( 0 )
107 //
108 , m_extrapolator ( aExtrapolator)
109 //
110 {
111  vtxverbose = verbosity;
112  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - config"<<std::endl;
113  Configuration config(aExtrapolator) ;
114  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - tree "<<std::flush;
115  m_decaychain = new DecayChain(bc,lv,config) ;
116  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - fitparams "<<std::flush;
118  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") D - done"<<std::endl;
119 }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
FitParams * m_fitparams
Definition: Fitter.h:223
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
int vtxverbose
RhoCandidate * m_particle
Definition: Fitter.h:221
DecayTreeFitter::Fitter::Fitter ( RhoCandidate bc,
const RhoLorentzVectorErr lv,
const RhoVector3Err pv,
RecoTrackStateProvider extrapolator = 0,
int  verbosity = 0 
)

constructor from the particle (decay head), pbeam and primary vertex

Definition at line 124 of file Fitter.cxx.

References vtxverbose.

129 : RhoFitterBase(bc)
130 , m_particle ( bc )
131 , m_decaychain ( 0 )
132 , m_fitparams ( 0 )
133 , m_status ( UnFitted )
134 //, m_chiSquare ( -1 )
135 , m_niter ( -1 )
136 , m_errCode ( 0 )
137 //
138 , m_extrapolator ( aExtrapolator)
139 //
140 {
141  vtxverbose = verbosity;
142  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") C - config"<<std::endl;
143  Configuration config(aExtrapolator) ;
144  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") C - tree "<<std::flush;
145  m_decaychain = new DecayChain(bc,lv,pv,config) ;
146  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") C - fitparams "<<std::flush;
148  if(vtxverbose>5) std::cout<<"Fitter::Fitter() ("<<this<<") C - done"<<std::endl;
149 }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
FitParams * m_fitparams
Definition: Fitter.h:223
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
int vtxverbose
RhoCandidate * m_particle
Definition: Fitter.h:221
DecayTreeFitter::Fitter::~Fitter ( )
virtual

destructor

Definition at line 160 of file Fitter.cxx.

161 {
162 //std::cout<<"Fitter::~Fitter() ("<<this<<") - dc "<<m_decaychain<<std::endl;
163  if(m_decaychain) delete m_decaychain ;
164 //std::cout<<"Fitter::~Fitter() ("<<this<<") - fp "<<m_fitparams<<std::endl;
165  if(m_fitparams) delete m_fitparams ;
166  if(m_extrapolator) delete m_extrapolator;
167 //std::cout<<"Fitter::~Fitter() ("<<this<<") - done"<<std::endl;
168 }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
FitParams * m_fitparams
Definition: Fitter.h:223
DecayChain * m_decaychain
Definition: Fitter.h:222
DecayTreeFitter::Fitter::Fitter ( )
private

default constructor is disabled

DecayTreeFitter::Fitter::Fitter ( const Fitter )
private

copy constructor is disabled

Member Function Documentation

double DecayTreeFitter::Fitter::add ( RhoCandidate cand)
protected

Definition at line 324 of file Fitter.cxx.

References DecayTreeFitter::ParticleBase::addToConstraintList(), bp, DecayTreeFitter::ParticleBase::initCov(), DecayTreeFitter::ParticleBase::initPar1(), DecayTreeFitter::ParticleBase::initPar2(), offset(), and DecayTreeFitter::ParticleBase::updateIndex().

325 {
326  // first obtain a map
327  //ParticleBase::indexmap indexmap ;
328  //m_decaychain->mother()->addToMap( indexmap ) ;
329  // add this track
330 std::cout<<"Fitter::add(RhoCandidate*) - start"<<std::endl;
332  int offset = m_fitparams->dim() ;
333  double deltachisq(999) ;
334  if( bp ) {
335  bp->updateIndex(offset) ;
336  // reassign indices
337  //int offset(0) ;
338  //m_decaychain->mother()->updIndex(offset) ;
339  // resize the fitparams
340 std::cout<<"Fitter::add(RhoCandidate*) - resize"<<std::endl;
341  m_fitparams->resize(offset) ;
342  // initialize the added track, filter and return the delta chisq
343  bp->initPar1(m_fitparams) ;
344  bp->initPar2(m_fitparams) ;
345  bp->initCov(m_fitparams) ;
346 
347 std::cout<<"Fitter::add(RhoCandidate*) - constrains"<<std::endl;
348  ParticleBase::constraintlist constraints ;
349  bp->addToConstraintList(constraints,0) ;
350  double chisq = m_fitparams->chiSquare() ;
351  ErrCode estatus ;
352  for( ParticleBase::constraintlist::const_iterator it = constraints.begin() ;
353  it != constraints.end(); ++it)
354  estatus |= it->filter(m_fitparams) ;
355 
356  deltachisq = m_fitparams->chiSquare() - chisq ;
358 
359 std::cout<<"Fitter::add(RhoCandidate*) - init dchain"<<std::endl;
360  // we want this somewhere else, but too much work now
362 
363  // print() ;
364  } else {
365  std::cout << "cannot add track to this vertex ..."
366  << m_decaychain->mother()->type() << std::endl ;
367  }
368  return deltachisq ;
369 }
std::vector< DecayTreeFitter::Constraint > constraintlist
Definition: ParticleBase.h:110
virtual void addToConstraintList(constraintlist &alist, int depth) const =0
FitParams * m_fitparams
Definition: Fitter.h:223
TVector3 offset(2, 0, 0)
virtual ErrCode initCov(FitParams *) const
ParticleBase * mother()
Definition: DecayChain.h:45
virtual ErrCode initPar2(FitParams *)=0
void resize(int newdim)
Definition: FitParams.cxx:112
double chiSquare() const
Definition: FitParams.h:51
virtual void updateIndex(int &offset)
DecayChain * m_decaychain
Definition: Fitter.h:222
virtual int type() const =0
ParticleBase * addDaughter(RhoCandidate *, const Configuration &config)
double fChiSquare
Definition: RhoFitterBase.h:74
DecayChain * decaychain()
Definition: Fitter.h:187
virtual ErrCode initPar1(FitParams *)=0
TF1 * bp
Definition: hist-t7.C:69
Double_t RhoFitterBase::Chi2Contribution ( const RhoCandidate b)
inherited

access to the fitted candidates

Definition at line 86 of file RhoFitterBase.cxx.

References Double_t, RhoFitterBase::fChi2Map, uid(), and RhoCandidate::Uid().

87 {
88  if(!b) return -999.;
89  Int_t uid = b->Uid();
90  Double_t chi2=fChi2Map[uid];
91  return chi2 >=0.0 ? chi2 : -1.;
92 }
Int_t Uid() const
Definition: RhoCandidate.h:419
std::map< Int_t, Double_t > fChi2Map
! each particle's contribution to the chi^2
Definition: RhoFitterBase.h:80
int uid(int lev, int lrun, int lmode)
Definition: autocutx.C:122
Double_t
double DecayTreeFitter::Fitter::chiSquare ( ) const
inline

Total chisquare.

Definition at line 124 of file Fitter.h.

References RhoFitterBase::fChiSquare.

124 { return fChiSquare ; }
double fChiSquare
Definition: RhoFitterBase.h:74
ChiSquare DecayTreeFitter::Fitter::chiSquare ( RhoCandidate p) const

get the chisquare of everything 'downstream' of a particle

Definition at line 912 of file Fitter.cxx.

913 {
914  return m_decaychain->chiSquare(aParticle, m_fitparams) ;
915 }
FitParams * m_fitparams
Definition: Fitter.h:223
DecayChain * m_decaychain
Definition: Fitter.h:222
double chiSquare(const FitParams *par) const
Definition: DecayChain.cxx:195
RhoCandidate * RhoFitterBase::CopyCand ( RhoCandidate b)
protectedinherited

uppermost particle composite in tree

Definition at line 51 of file RhoFitterBase.cxx.

References RhoFactory::Instance(), RhoFactory::NewCandidate(), RhoCandidate::RemoveAssociations(), and RhoCandidate::SetFit().

Referenced by RhoFitterBase::CopyTree().

52 {
54  newCand->RemoveAssociations();
55  b->SetFit(newCand);//ready to be modified
56  return newCand;
57 }
void RemoveAssociations()
static RhoFactory * Instance()
Definition: RhoFactory.cxx:34
void SetFit(RhoCandidate *b)
Definition: RhoCandidate.h:292
static RhoCandidate * NewCandidate()
Definition: RhoFactory.cxx:52
RhoCandidate * RhoFitterBase::CopyTree ( RhoCandidate head)
protectedinherited

Definition at line 61 of file RhoFitterBase.cxx.

References RhoFitterBase::CopyCand(), RhoCandidate::Daughter(), i, RhoCandidate::IsComposite(), RhoCandidate::NDaughters(), and RhoCandidate::SetMotherLink().

Referenced by RhoFitterBase::RhoFitterBase().

62 {
63  //std::cout<<"\n\tcopy tree "<<head->Uid()<<" "<<&head<<" "<<head->PdgCode()<<" "<<head->NDaughters()<<"...";
64  RhoCandidate* headcopy=CopyCand(head);
65  RhoCandidate* daucopy=0;
66  RhoCandidate* dau=0;
67  for(Int_t i=0;i<head->NDaughters();i++)
68  {
69  dau=head->Daughter(i);
70  //std::cout<<" daugter "<<dau->Uid()<<" "<<i<<" "<<dau->PdgCode()<<" at "<<dau<<" ";
71  if(dau == head) {
72  std::cout<<endl<<"*** Candidate is its own mother??? *** \n"<<std::endl;
73  std::cout<<" print: "<<*head<<std::endl;;
74  }
75  assert(dau != head);
76  if(dau->IsComposite()) daucopy=CopyTree(dau);
77  else daucopy=CopyCand(dau);
78  //std::cout<<"CopyTree: copied candidate "<<dau->Uid()<<std::endl;
79  daucopy->SetMotherLink(headcopy); //daughter link is set automatically, too
80  }
81  return headcopy;
82 }
Int_t i
Definition: run_full.C:25
void SetMotherLink(RhoCandidate *m, bool verbose=true)
Bool_t IsComposite() const
RhoCandidate * Daughter(Int_t n)
Int_t NDaughters() const
RhoCandidate * CopyTree(RhoCandidate *)
RhoCandidate * CopyCand(RhoCandidate *)
uppermost particle composite in tree
DecayChain* DecayTreeFitter::Fitter::decaychain ( )
inlineprotected

Definition at line 187 of file Fitter.h.

References m_decaychain.

187 { return m_decaychain ; }
DecayChain * m_decaychain
Definition: Fitter.h:222
const DecayChain* DecayTreeFitter::Fitter::decaychain ( ) const
inlineprotected

Definition at line 189 of file Fitter.h.

References m_decaychain.

189 { return m_decaychain ; }
DecayChain * m_decaychain
Definition: Fitter.h:222
RhoDoubleErr DecayTreeFitter::Fitter::decayLengthSum ( RhoCandidate candA,
RhoCandidate candB 
) const

Compute the decay length sum of two particles in the decay tree (useful for e.g. B->DD)

Definition at line 514 of file Fitter.cxx.

References DecayTreeFitter::ParticleBase::lenIndex(), DecayTreeFitter::ParticleBase::locate(), and DecayTreeFitter::ParticleBase::mother().

515 {
516  // returns the decaylengthsum of two particles (use ful for e.g. B->DD)
517  RhoDoubleErr rc(0,0) ;
518  const ParticleBase* pbA = m_decaychain->locate(candA) ;
519  const ParticleBase* pbB = m_decaychain->locate(candB) ;
520  if(pbA && pbB && pbA->mother() && pbB->mother() ) {
521  int lenindexA = pbA->lenIndex() ;
522  int lenindexB = pbB->lenIndex() ;
523  if( lenindexA>=0 && lenindexB>=0) {
524  double lenA = m_fitparams->par()(lenindexA) ;
525  double lenB = m_fitparams->par()(lenindexB) ;
526  double cov =
527  m_fitparams->cov()(lenindexA, lenindexA) +
528  m_fitparams->cov()(lenindexB, lenindexB) +
529  2*m_fitparams->cov()(lenindexA, lenindexB) ;
530 
531  // rc = VtxDoubleErr(lenA+lenB,std::sqrt(cov)) ;
532  rc = RhoDoubleErr( lenA+lenB , cov) ;
533  }
534  }
535  return rc ;
536 }
virtual int lenIndex() const
Definition: ParticleBase.h:70
FitParams * m_fitparams
Definition: Fitter.h:223
DecayChain * m_decaychain
Definition: Fitter.h:222
const ParticleBase * locate(RhoCandidate *bc) const
Definition: DecayChain.cxx:201
const ParticleBase * mother() const
Definition: ParticleBase.h:60
TMatrixDSym & cov()
Definition: FitParams.h:34
RhoDoubleErr DecayTreeFitter::Fitter::decayLengthSum ( const ParticleBase ,
const ParticleBase  
) const
protected
int DecayTreeFitter::Fitter::errCode ( )
inline

error code

Definition at line 158 of file Fitter.h.

References m_errCode.

158 { return m_errCode ; }
RecoTrackStateProvider* DecayTreeFitter::Fitter::extrapolator ( )
inline

get the extrapolator

Definition at line 172 of file Fitter.h.

References m_extrapolator.

172 { return m_extrapolator ; }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
std::ostream & DecayTreeFitter::Fitter::fillStream ( std::ostream s) const

Print the result of the fit.

Definition at line 908 of file Fitter.cxx.

References print().

909 { return s << print() ; }
std::string print() const
Print the result of the fit.
Definition: Fitter.cxx:307
void RhoFitterBase::FindAndAddFinalStateDaughters ( RhoCandidate cand)
protectedinherited

Definition at line 149 of file RhoFitterBase.cxx.

References RhoCandidate::Daughter(), RhoFitterBase::fDaughters, RhoCandidate::IsComposite(), RhoCandidate::IsLocked(), and RhoCandidate::NDaughters().

Referenced by Rho4CFitter::Fit(), RhoKinFitter::Fit(), and Rho4CFitter::FitConserveMasses().

150 {
151  RhoCandidate* tc;
152  for (int k=0;k<cand->NDaughters();k++) {
153  tc=cand->Daughter(k);
154  if (!tc->IsComposite() || tc->IsLocked()) { fDaughters.push_back(tc); }
155  else { FindAndAddFinalStateDaughters(tc); }
156  }
157  return;
158 }
void FindAndAddFinalStateDaughters(RhoCandidate *cand)
Bool_t IsComposite() const
RhoCandidate * Daughter(Int_t n)
Bool_t IsLocked()
Definition: RhoCandidate.h:330
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
Int_t NDaughters() const
Bool_t RhoFitterBase::Fit ( )
inherited
Bool_t DecayTreeFitter::Fitter::Fit ( int  maxNumberOfIterations = 10,
double  deltaChisquareConverged = 0.01 
)
inline

Add or remove a mass constraintfor a certain ParticleID.

Add a constraint to a mass different from the property table mass Fit the decay tree

Definition at line 103 of file Fitter.h.

References fit(), m_particle, m_status, and updateTree().

104  {
105  fit(maxNumberOfIterations,deltaChisquareConverged);
106  bool check = updateTree(m_particle);
107  check = check && (m_status==0);
108  return check;
109  };
bool updateTree(RhoCandidate *cand) const
update a particlular candidate in the tree
Definition: Fitter.cxx:894
void fit(int maxNumberOfIterations=10, double deltaChisquareConverged=0.01)
Fit the decay tree.
Definition: Fitter.cxx:171
FitStatus m_status
Definition: Fitter.h:224
RhoCandidate * m_particle
Definition: Fitter.h:221
void DecayTreeFitter::Fitter::fit ( int  maxNumberOfIterations = 10,
double  deltaChisquareConverged = 0.01 
)
protected

Fit the decay tree.

Definition at line 171 of file Fitter.cxx.

References fabs(), DecayTreeFitter::ErrCode::fastdivergingfit, max(), print(), DecayTreeFitter::ErrCode::slowdivergingfit, and vtxverbose.

Referenced by Fit().

172 {
173 if(vtxverbose>5){std::cout<<"Fitter::fit(): - start"<<std::endl;}
174 //FIXME it's not used?
175  // m_map.clear() ;
176 
177  const int maxndiverging=3 ;
178  //const double dChisqQuit = nDof() ; // if chi2 increases by more than this --> fit failed
179 
180  // initialize
181  fChiSquare = -1 ;
182  // m_errCode.reset() ;
183  m_errCode = 0 ;
184 
185  if( m_status == UnFitted )
186  {
187  if(vtxverbose>5){std::cout<<"Fitter::fit(): - unfitted: init decaychain"<<std::endl;}
189  }
190  if(vtxverbose>3){std::cout<<"Fitter:fit(): decaychain init ended with errcode "<<m_errCode<<std::endl;}
191  // if(m_errCode.failure()) {
192  if ( 0 != m_errCode )
193  {
194  // the input tracks are too far apart
195  m_status = BadInput ;
196 
197  } else {
198  // reset the status flag
199  m_status = UnFitted ;
200 
201  int ndiverging=0 ;
202  bool finished = false ;
203 
204  for(m_niter=0; m_niter<nitermax && !finished; ++m_niter)
205  {
206  TVectorD prevpar = m_fitparams->par() ;
207  bool firstpass = m_niter==0 ;
208  if(vtxverbose>5){std::cout<<"Fitter::fit(): - filtering"<<std::endl;}
209  m_errCode = m_decaychain->filter(m_fitparams,firstpass).flag() ;
210  if(vtxverbose>5){std::cout<<"Fitter::fit(): - filtering done"<<std::endl;}
211  double chisq = m_fitparams->chiSquare() ;
212  double deltachisq = chisq - fChiSquare ;
213  // if chi2 increases by more than this --> fit failed
214  const double dChisqQuit = std::max(double(2*nDof()),2*fChiSquare) ;
215 
216  // if(m_errCode.failure()) {
217  if( 0 != m_errCode ) {
218  finished = true ;
219  m_status = Failed ;
220  if(vtxverbose>5){std::cout<<"Fitter::fit(): - ow, we got an error: "<<m_errCode<<std::endl;}
221  } else {
222  if( m_niter>0 ) {
223  if( fabs( deltachisq ) < dChisqConv ) {
224  fChiSquare = chisq ;
225  m_status = Success ;
226  finished = true ;
227  if(vtxverbose>5){std::cout<<"Fitter::fit(): - yay! we filtered successfully"<<std::endl;}
228  } else if( m_niter>1 && deltachisq > dChisqQuit ) {
229  m_fitparams->par() = prevpar ;
230  m_status = Failed ;
232  finished = true ;
233  if(vtxverbose>5){std::cout<<"Fitter::fit(): - fast diverging"<<std::endl;}
234  } else if( deltachisq > 0 && ++ndiverging>=maxndiverging) {
235  m_fitparams->par() = prevpar ;
238  finished = true ;
239  if(vtxverbose>5){std::cout<<"Fitter::fit(): - slow diverging"<<std::endl;}
240  } else if( deltachisq > 0 ) {
241  if(vtxverbose>5){std::cout<<"Fitter::fit(): - well, smaller steps now"<<std::endl;}
242  // make a half step and reduce stepsize
243  m_fitparams->par() += prevpar ;
244  m_fitparams->par() *= 0.5 ;
245  //if( m_niter>10) m_fitparams->scale() *= 0.5 ;
246  }
247  }
248  if ( deltachisq < 0 ) ndiverging=0 ; // start over with counting
249  if(!finished) fChiSquare = chisq ;
250  }
252 
253  if(vtxverbose>=1) {
254  std::cout << "Fitter::fit(): step, stat, errcode, ndf (ncon, dim) , chiSquare, dchisq: "
255  << std::setw(3) << m_niter
256  << std::setw(3) << m_status<<"\t"
257  << std::setw(3) << m_errCode<<"\t"
258  << std::setw(3) << nDof() << " ("
259  << std::setw(3) << m_fitparams->nConstraints() << ", "
260  << std::setw(3) << m_fitparams->dim() << ") "
261  << std::setprecision(6)
262  << std::setw(12) << chisq
263  << std::setw(12) << deltachisq << std::endl ;
264  }
265 
266  if(vtxverbose>=4) {
267  std::cout << print() << std::endl;
268  std::cout << "press a key ...." << std::endl ;
269  getchar() ;
270  }
271  }
272 
273  if( m_niter == nitermax && m_status != Success )
274  { m_status = NonConverged ; }
275 
276  //m_decaychain->mother()->forceP4Sum(m_fitparams) ;
277 
278  if(m_status == Success ) {
279  if(vtxverbose>5){std::cout<<"Fitter::fit(): - test cov"<<std::endl;}
280  if( !(m_fitparams->testCov() ) ) {
281  //static int counter(10) ;
282  //if( --counter>=0)
283  std::cout << "DecayTreeFitterter::Fitter: Error matrix not positive definite. "
284  << "Changing status to failed." << std::endl ;
285  m_status = Failed ;
286  //print() ;
287  }
288  }
289  }
290  if(vtxverbose>5){std::cout<<"Fitter::fit(): - done"<<std::endl;}
291 }
ErrCode init(FitParams *par)
Definition: DecayChain.cxx:114
int nConstraints() const
Definition: FitParams.h:53
FitParams * m_fitparams
Definition: Fitter.h:223
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:26
unsigned int flag() const
Definition: ErrCode.h:46
ErrCode filter(FitParams *par, bool firstpass=true)
Definition: DecayChain.cxx:145
double chiSquare() const
Definition: FitParams.h:51
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
int nDof() const
Total number of DOFs.
Definition: Fitter.cxx:319
double fChiSquare
Definition: RhoFitterBase.h:74
int vtxverbose
std::string print() const
Print the result of the fit.
Definition: Fitter.cxx:307
int fNDegreesOfFreedom
Definition: RhoFitterBase.h:75
Bool_t RhoFitterBase::FitAll ( )
inherited

Definition at line 101 of file RhoFitterBase.cxx.

References RhoFitterBase::fHeadOfTree, RhoCandidate::IsLocked(), and RhoFitterBase::IterateAndFit().

102 {
103  if(fHeadOfTree->IsLocked())
104  {
105  Warning("RhoFitterBase::FitAll","You tried to fit a locked candidate. Retuning kFALSE now.");
106  return kFALSE;
107  }
108  return IterateAndFit(fHeadOfTree);
109 }
Bool_t IsLocked()
Definition: RhoCandidate.h:330
RhoCandidate * fHeadOfTree
Definition: RhoFitterBase.h:62
Bool_t IterateAndFit(RhoCandidate *b)
Bool_t DecayTreeFitter::Fitter::FitAll ( int  maxit = 10,
double  dchiq = 0.01 
)
inline

Definition at line 110 of file Fitter.h.

References RhoFitterBase::Fit().

110 { return Fit(maxit,dchiq); };
Bool_t RhoFitterBase::FitNode ( RhoCandidate b)
protectedvirtualinherited

Reimplemented in RhoKinHyperonVtxFitter, RhoKinVtxFitter, and RhoKalmanVtxFitter.

Definition at line 130 of file RhoFitterBase.cxx.

Referenced by RhoFitterBase::Fit(), and RhoFitterBase::IterateAndFit().

131 {
132  Warning("RhoFitterBase::FitNode","Method not implemented in %s",this->GetName());
133  return kFALSE;
134 }
void DecayTreeFitter::Fitter::fitOneStep ( )
protected

Fit just one step.

Definition at line 294 of file Fitter.cxx.

References vtxverbose.

295 {
296  bool firstpass = m_status==UnFitted ;
297  if( firstpass ) m_decaychain->init(m_fitparams) ;
298  m_decaychain->filter(m_fitparams,firstpass) ;
301  if(vtxverbose>=1)
302  std::cout << "In Fitter::fitOneStep(): " << m_status << " " << firstpass << " " << fChiSquare << " " << fNDegreesOfFreedom << std::endl ;
303  m_status = Success ;
304 }
ErrCode init(FitParams *par)
Definition: DecayChain.cxx:114
FitParams * m_fitparams
Definition: Fitter.h:223
ErrCode filter(FitParams *par, bool firstpass=true)
Definition: DecayChain.cxx:145
double chiSquare() const
Definition: FitParams.h:51
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
double fChiSquare
Definition: RhoFitterBase.h:74
int vtxverbose
int fNDegreesOfFreedom
Definition: RhoFitterBase.h:75
RhoCandidate* DecayTreeFitter::Fitter::fitParams ( RhoCandidate p = 0) const
inline

Currently the only accessor to the actual fitted data

Parameters
p(INPUT) the particle the fitted parameters ( 0 for invaild parameters/fits)

Definition at line 121 of file Fitter.h.

References p.

121 {return p->GetFit();};
RhoCandidate * GetFit() const
Definition: RhoCandidate.h:293
FitParams* DecayTreeFitter::Fitter::fitparams ( )
inlineprotected

Definition at line 188 of file Fitter.h.

References m_fitparams.

188 { return m_fitparams ; }
FitParams * m_fitparams
Definition: Fitter.h:223
const FitParams* DecayTreeFitter::Fitter::fitparams ( ) const
inlineprotected

Definition at line 190 of file Fitter.h.

References m_fitparams.

190 { return m_fitparams ; }
FitParams * m_fitparams
Definition: Fitter.h:223
RhoCandidate* DecayTreeFitter::Fitter::fittedCand ( RhoCandidate cand,
RhoCandidate headoftree 
) const
protected
double RhoFitterBase::GetChi2 ( ) const
inlineinherited
DecayChain* DecayTreeFitter::Fitter::GetDecayChainDirty ( )
inline

Definition at line 165 of file Fitter.h.

References m_decaychain.

165 { return m_decaychain ; }
DecayChain * m_decaychain
Definition: Fitter.h:222
int RhoFitterBase::GetNdf ( ) const
inlineinherited

Definition at line 49 of file RhoFitterBase.h.

References RhoFitterBase::fNDegreesOfFreedom.

Referenced by poormantracks(), and PndRhoTupleQA::qaFitter().

49 {return fNDegreesOfFreedom;};
int fNDegreesOfFreedom
Definition: RhoFitterBase.h:75
double RhoFitterBase::GetProb ( ) const
inlineinherited
double DecayTreeFitter::Fitter::globalChiSquare ( ) const
protected

Definition at line 427 of file Fitter.cxx.

428 {
430 }
FitParams * m_fitparams
Definition: Fitter.h:223
DecayChain * m_decaychain
Definition: Fitter.h:222
double chiSquare(const FitParams *par) const
Definition: DecayChain.cxx:195
RhoCandidate& RhoFitterBase::HeadOfTree ( ) const
inlineprotectedinherited

Definition at line 57 of file RhoFitterBase.h.

References RhoFitterBase::fHeadOfTree.

57 { return *fHeadOfTree; }
RhoCandidate * fHeadOfTree
Definition: RhoFitterBase.h:62
void RhoFitterBase::InsertChi2 ( const RhoCandidate bc,
const double  chi2 
)
inlineprotectedinherited

Definition at line 66 of file RhoFitterBase.h.

References RhoFitterBase::fChi2Map, and RhoCandidate::Uid().

Referenced by RhoKalmanVtxFitter::Calculate().

66 {fChi2Map[ bc->Uid()] = chi2;}
Int_t Uid() const
Definition: RhoCandidate.h:419
std::map< Int_t, Double_t > fChi2Map
! each particle's contribution to the chi^2
Definition: RhoFitterBase.h:80
std::string DecayTreeFitter::Fitter::name ( RhoCandidate cand) const
protected

Name of a particle in the decay tree.

Definition at line 539 of file Fitter.cxx.

References DecayTreeFitter::ParticleBase::locate(), and DecayTreeFitter::ParticleBase::name().

540 {
541  const ParticleBase* pb = m_decaychain->locate(cand) ;
542  return pb ? pb->name() : "Not found" ;
543 }
const std::string & name() const
Definition: ParticleBase.h:61
DecayChain * m_decaychain
Definition: Fitter.h:222
const ParticleBase * locate(RhoCandidate *bc) const
Definition: DecayChain.cxx:201
int DecayTreeFitter::Fitter::nDof ( ) const

Total number of DOFs.

Definition at line 319 of file Fitter.cxx.

319  {
320  return fNDegreesOfFreedom;
321 }
int fNDegreesOfFreedom
Definition: RhoFitterBase.h:75
int DecayTreeFitter::Fitter::nIter ( ) const
inline

Number of iterations used by vertex fit.

Definition at line 130 of file Fitter.h.

References m_niter.

130 { return m_niter ; }
Fitter& DecayTreeFitter::Fitter::operator= ( const Fitter )
private

assignement operator is disabled

RhoCandidate* DecayTreeFitter::Fitter::particle ( ) const
inline

The top level particle that is fitted.

Definition at line 116 of file Fitter.h.

References m_particle.

116 { return m_particle ; }
RhoCandidate * m_particle
Definition: Fitter.h:221
std::string DecayTreeFitter::Fitter::print ( ) const

Print the result of the fit.

Definition at line 307 of file Fitter.cxx.

References s, and status.

308 {
309  std::ostringstream s ;
311  s << "chisq,ndof,ncontr,niter,status,errcode: "
312  << chiSquare() << " "
313  << nDof() << " " << m_fitparams->nConstraints() << " "
314  << nIter() << " " << status() << " " << m_errCode << std::endl ;
315  return s.str() ;
316 }
int nConstraints() const
Definition: FitParams.h:53
TLorentzVector s
Definition: Pnd2DStar.C:50
int nIter() const
Number of iterations used by vertex fit.
Definition: Fitter.h:130
FitParams * m_fitparams
Definition: Fitter.h:223
ParticleBase * mother()
Definition: DecayChain.h:45
FitStatus status() const
Status of fit.
Definition: Fitter.h:128
DecayChain * m_decaychain
Definition: Fitter.h:222
int nDof() const
Total number of DOFs.
Definition: Fitter.cxx:319
double chiSquare() const
Total chisquare.
Definition: Fitter.h:124
virtual void print(const FitParams *) const
double DecayTreeFitter::Fitter::remove ( RhoCandidate cand)
protected

Definition at line 371 of file Fitter.cxx.

References DecayTreeFitter::ParticleBase::addToConstraintList(), DecayTreeFitter::ParticleBase::mother(), and DecayTreeFitter::ParticleBase::removeDaughter().

372 {
373  ParticleBase* pb = const_cast<ParticleBase*>(m_decaychain->locate(cand)) ;
374  ErrCode estatus ;
375  double dchisq(0) ;
376  if(pb) {
377  // filter with negative weight
378  ParticleBase::constraintlist constraints ;
379  pb->addToConstraintList(constraints,0) ;
380  double chisq = m_fitparams->chiSquare() ;
381  for( ParticleBase::constraintlist::iterator it = constraints.begin() ;
382  it != constraints.end(); ++it) {
383  it->setWeight(-1) ;
384  estatus |= it->filter(m_fitparams) ;
385  }
386  dchisq = chisq - m_fitparams->chiSquare() ;
387  // remove
388  ParticleBase* themother = const_cast<ParticleBase*>(pb->mother()) ;
389  if(themother) themother->removeDaughter(pb);
390  }
391  return dchisq ;
392 }
std::vector< DecayTreeFitter::Constraint > constraintlist
Definition: ParticleBase.h:110
virtual void addToConstraintList(constraintlist &alist, int depth) const =0
FitParams * m_fitparams
Definition: Fitter.h:223
double chiSquare() const
Definition: FitParams.h:51
DecayChain * m_decaychain
Definition: Fitter.h:222
void removeDaughter(const ParticleBase *pb)
const ParticleBase * locate(RhoCandidate *bc) const
Definition: DecayChain.cxx:201
const ParticleBase * mother() const
Definition: ParticleBase.h:60
void RhoFitterBase::SetDaugthersFromComposite ( RhoCandidate cand)
protectedinherited

Definition at line 136 of file RhoFitterBase.cxx.

References RhoCandidate::Daughter(), RhoFitterBase::fDaughters, RhoCandidate::IsComposite(), and RhoCandidate::NDaughters().

Referenced by RhoKinHyperonFitter::Fit(), RhoKinVtxFitter::FitNode(), RhoKinHyperonVtxFitter::FitNode(), and RhoKinHyperonFitter::SetMatrices().

137 {
138  fDaughters.clear();
139  if(cand->IsComposite()){
140  RhoCandidate* tc;
141  for (int k=0;k<cand->NDaughters();k++) {
142  tc=cand->Daughter(k);
143  fDaughters.push_back(tc);
144  }
145  }
146  return;
147 }
Bool_t IsComposite() const
RhoCandidate * Daughter(Int_t n)
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
Int_t NDaughters() const
void RhoFitterBase::SetDecayVertex ( RhoCandidate composite,
const TVector3 &  vtx,
const TMatrixD CovVV 
)
protectedinherited

Definition at line 178 of file RhoFitterBase.cxx.

References RhoCandidate::SetDecayVtx().

Referenced by RhoKalmanVtxFitter::Calculate(), RhoKinVtxFitter::SetOutput(), and RhoKinHyperonVtxFitter::SetOutput().

179 {
180  RhoError decaypointcov(CovVV);
181  RhoVector3Err decayvertex(vtx,decaypointcov);
182  composite->SetDecayVtx(decayvertex);
183 }
void SetDecayVtx(RhoVector3Err theVtx)
void RhoFitterBase::SetFourMomentumByDaughters ( RhoCandidate composite)
protectedinherited

Definition at line 160 of file RhoFitterBase.cxx.

References RhoCandidate::Cov7(), RhoCandidate::Daughter(), RhoCandidate::IsComposite(), RhoCandidate::IsLocked(), RhoCandidate::NDaughters(), RhoCandidate::P4(), RhoCandidate::SetCov7(), and RhoCandidate::SetP4().

Referenced by RhoKalmanVtxFitter::Calculate(), Rho4CFitter::Fit(), Rho4CFitter::FitConserveMasses(), RhoKinVtxFitter::SetOutput(), and RhoKinFitter::SetOutput().

161 {
162  RhoCandidate* tc;
163  TLorentzVector tmpLV;
164  TMatrixD tmpCov(7,7);
165  // Sum daughter fourmomenta, dive into nodes if necessary
166  for (int k=0;k<composite->NDaughters();k++) {
167  tc=composite->Daughter(k);
168  if (tc->IsComposite() && !tc->IsLocked()) { SetFourMomentumByDaughters(tc); }
169  tmpLV += tc->P4();
170  tmpCov = tmpCov + tc->Cov7();
171  }
172  composite->SetP4(tmpLV);
173  composite->SetCov7(tmpCov);
174  //std::cout<<" Base fitter cov7 from tc "<<tc->Uid()<<"/"<<tc->Charge()<<"/"<<tc->PdgCode()<<": ";tmpCov.Print();
175  return;
176 }
Bool_t IsComposite() const
RhoCandidate * Daughter(Int_t n)
void SetFourMomentumByDaughters(RhoCandidate *composite)
void SetP4(Double_t mass, const TVector3 &p3)
Bool_t IsLocked()
Definition: RhoCandidate.h:330
TLorentzVector P4() const
Definition: RhoCandidate.h:195
TMatrixD Cov7() const
Int_t NDaughters() const
void SetCov7(const TMatrixD &cov7)
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
void DecayTreeFitter::Fitter::setMassConstraint ( RhoCandidate cand,
bool  add = true 
)

Add or remove a mass constraint.

Definition at line 394 of file Fitter.cxx.

395 {
396  m_decaychain->setMassConstraint(bc,badd) ;
397  m_status = UnFitted ;
398 }
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
void setMassConstraint(RhoCandidate *bc, bool add=true)
Definition: DecayChain.cxx:217
void DecayTreeFitter::Fitter::setMassConstraint ( RhoCandidate cand,
double  mass 
)

Add a constraint to a mass different from the property table mass.

Definition at line 400 of file Fitter.cxx.

401 {
402  m_decaychain->setMassConstraint(bc,mass) ;
403  m_status = UnFitted ;
404 }
FitStatus m_status
Definition: Fitter.h:224
DecayChain * m_decaychain
Definition: Fitter.h:222
void setMassConstraint(RhoCandidate *bc, bool add=true)
Definition: DecayChain.cxx:217
void DecayTreeFitter::Fitter::setStateProvider ( RecoTrackStateProvider extrapolator)

set the track extrapolator

Definition at line 154 of file Fitter.cxx.

155 { m_extrapolator = aExtrapolator; }
RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
void DecayTreeFitter::Fitter::SetToleranceZ ( double  z)
inline

Definition at line 161 of file Fitter.h.

References m_extrapolator, and DecayTreeFitter::RecoTrackStateProvider::SetToleranceZ().

RecoTrackStateProvider * m_extrapolator
track extrapolator (if needed)
Definition: Fitter.h:235
Double_t z
void RhoFitterBase::SetVerbose ( Bool_t  v = kTRUE)
inlineinherited

Definition at line 52 of file RhoFitterBase.h.

References RhoFitterBase::fVerbose, and v.

52 {fVerbose=v;}
__m128 v
Definition: P4_F32vec4.h:4
void DecayTreeFitter::Fitter::setVerbose ( int  i)

set the verbosity level (for debugging only)

Definition at line 158 of file Fitter.cxx.

References i, and vtxverbose.

158 { vtxverbose = i ; }
Int_t i
Definition: run_full.C:25
int vtxverbose
FitStatus DecayTreeFitter::Fitter::status ( ) const
inline

Status of fit.

Definition at line 128 of file Fitter.h.

References m_status.

128 { return m_status ; }
FitStatus m_status
Definition: Fitter.h:224
bool DecayTreeFitter::Fitter::updateCand ( RhoCandidate cand) const

update a particlular candidate in the tree

return an updated decay tree. this is not a final solution. will try to move more info to Particle methods to retrieve the result in terms of RhoCandidates (note: mother vertex is not updated, and decay length cannot be stored anywhere. Use fitParams instead methods to retrieve the result in terms of RhoCandidates (note: mother vertex is not updated, and decay length cannot be stored anywhere. Use fitParams instead

Definition at line 875 of file Fitter.cxx.

References DecayTreeFitter::ParticleBase::locate().

876 {
877  // assigns fitted parameters to a candidate
878  const ParticleBase* pb = m_decaychain->locate(aParticle) ;
879  if(pb) updateCand(*pb,aParticle) ;
880  //else {
881  // this error message does not make sense, because it is also
882  // triggered for daughters that were simply not refitted. we
883  // have to do something about that.
884  // VtxPrintTree printer(&myvtxprint) ;
885  // ErrMsg(error) << "cann't find candidate " << std::endl
886  // << printer.print(cand)
887  // << "in tree " << std::endl
888  // << printer.print(*_bc)
889  // << endmsg;
890  return pb != 0 ;
891 }
DecayChain * m_decaychain
Definition: Fitter.h:222
bool updateCand(RhoCandidate *cand) const
update a particlular candidate in the tree
Definition: Fitter.cxx:875
const ParticleBase * locate(RhoCandidate *bc) const
Definition: DecayChain.cxx:201
void DecayTreeFitter::Fitter::updateCand ( const ParticleBase pb,
RhoCandidate cand 
) const
protected

Definition at line 736 of file Fitter.cxx.

References col, energy, RhoCandidate::GetFit(), DecayTreeFitter::ParticleBase::hasEnergy(), i, RhoFactory::Instance(), DecayTreeFitter::ParticleBase::lenIndex(), DecayTreeFitter::ParticleBase::momIndex(), DecayTreeFitter::ParticleBase::mother(), RhoFactory::NewCandidate(), DecayTreeFitter::ParticleBase::pdtMass(), pos, DecayTreeFitter::ParticleBase::posIndex(), RhoCandidate::RemoveAssociations(), row, RhoCandidate::SetCov7(), RhoCandidate::SetFit(), RhoCandidate::SetP4(), RhoCandidate::SetPos(), and sqrt().

737 {
738  // Update the FittedCand of the RhoCandidate
739  // This replaces the previous updateCand() as well as fitParams() functions
743  int posindex = ( pb.mother() ? pb.mother()->posIndex() : pb.posIndex() ) ;
744  if(posindex<0) posindex = pb.posIndex() ;
745  int momindex = pb.momIndex() ;
746  int lenindex = pb.lenIndex() ;
747  TVector3 pos(m_fitparams->par()(posindex+0),
748  m_fitparams->par()(posindex+1),
749  m_fitparams->par()(posindex+2)) ;
750  TLorentzVector p4 ;
751  p4.SetPx( m_fitparams->par()(momindex+0) ) ;
752  p4.SetPy( m_fitparams->par()(momindex+1) ) ;
753  p4.SetPz( m_fitparams->par()(momindex+2) ) ;
754  // double decaylength = lenindex>=0 ? m_fitparams->par()(lenindex) : 0 ; // Unused
755  TMatrixDSym cov8(8) ;
756  //
757  if( pb.hasEnergy() ) {
758  // if particle has energy, get full p4 from fitparams
759  p4.SetE( m_fitparams->par()(momindex+3) ) ;
760  int parmap[8] ;
761  for(int i=0; i<3; ++i) parmap[i] = posindex + i ;
762  for(int i=0; i<4; ++i) parmap[i+3] = momindex + i ;
763  parmap[7] = lenindex ;
764  int maxrow = lenindex >=0 ? 8 : 7 ;
765  for(int row=0; row<maxrow; ++row)
766  //for(int col=0; col<=row; ++col) //TMatrixDSym is not really symmetric :-(
767  for(int col=0; col<maxrow; ++col)
768  cov8(row,col) = m_fitparams->cov()(parmap[row],parmap[col]) ;
769  } else {
770  // if not, use the pdttable mass
771  TMatrixDSym cov7(7) ;
772  int parmap[8] ;
773  for(int i=0; i<3; ++i) parmap[i] = posindex + i ;
774  for(int i=0; i<3; ++i) parmap[i+3] = momindex + i ;
775  parmap[6] = lenindex ;
776  int maxrow = lenindex >=0 ? 7 : 6 ;
777  for(int row=0; row<maxrow; ++row)
778  //for(int col=0; col<=row; ++col)
779  for(int col=0; col<maxrow; ++col)
780  cov7(row,col) = m_fitparams->cov()(parmap[row],parmap[col]) ;
781 
782  // now fill the jacobian
783  double mass = pb.pdtMass() ;
784  double energy2 = mass*mass ;
785  for(int row=0; row<3; ++row) {
786  double px = m_fitparams->par()(momindex+row) ;
787  energy2 += px*px ;
788  }
789  double energy = std::sqrt(energy2) ;
790  TMatrixD jacobian(8,7);
791  for(int col=0; col<7; ++col)
792  jacobian(col,col) = 1;
793  for(int col=3; col<6; ++col)
794  jacobian(6,col) = m_fitparams->par()(parmap[col])/energy ;
795 
796  p4.SetE(energy) ;
797  cov8 = cov7.Similarity(jacobian);
798  }
799  // // VtxFitParams vtxfitparams(pb.charge(),pos,p4,decaylength,cov8) ;
800  RhoCandidate* fittedcand=aParticle->GetFit();
801  if(!fittedcand)
802  {
803  fittedcand = RhoFactory::Instance()->NewCandidate ( aParticle );
804  fittedcand->RemoveAssociations();
805  aParticle->SetFit(fittedcand);//ready to be modified
806  }
807  fittedcand->SetPos(pos);
808  fittedcand->SetP4(p4);
809  fittedcand->SetCov7(cov8.GetSub(0,6,0,6));
810 }
int row
Definition: anaLmdDigi.C:67
TVector3 pos
void SetPos(const TVector3 &pos)
Definition: RhoCandidate.h:235
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
int col
Definition: anaLmdDigi.C:67
virtual int momIndex() const
Definition: ParticleBase.h:71
virtual int lenIndex() const
Definition: ParticleBase.h:70
FitParams * m_fitparams
Definition: Fitter.h:223
virtual bool hasEnergy() const
Definition: ParticleBase.h:74
void SetP4(Double_t mass, const TVector3 &p3)
virtual int posIndex() const
Definition: ParticleBase.h:69
void RemoveAssociations()
static RhoFactory * Instance()
Definition: RhoFactory.cxx:34
static RhoCandidate * NewCandidate()
Definition: RhoFactory.cxx:52
RhoCandidate * GetFit() const
Definition: RhoCandidate.h:293
void SetCov7(const TMatrixD &cov7)
const ParticleBase * mother() const
Definition: ParticleBase.h:60
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
TMatrixDSym & cov()
Definition: FitParams.h:34
Double_t energy
Definition: plot_dirc.C:15
void DecayTreeFitter::Fitter::updateIndex ( )
protected

Definition at line 418 of file Fitter.cxx.

References offset().

419 {
420  std::cout<<"Fitter::updateIndex() start"<<std::endl;
421  int offset=0 ;
422  m_decaychain->mother()->updateIndex(offset) ;
423  std::cout<<"Fitter::updateIndex() resize"<<std::endl;
424  m_fitparams->resize(offset) ;
425 }
FitParams * m_fitparams
Definition: Fitter.h:223
TVector3 offset(2, 0, 0)
ParticleBase * mother()
Definition: DecayChain.h:45
void resize(int newdim)
Definition: FitParams.cxx:112
virtual void updateIndex(int &offset)
DecayChain * m_decaychain
Definition: Fitter.h:222
bool DecayTreeFitter::Fitter::updateTree ( RhoCandidate cand) const

update a particlular candidate in the tree

Definition at line 894 of file Fitter.cxx.

References RhoCandidate::Daughter(), and RhoCandidate::NDaughters().

Referenced by Fit().

895 {
896  bool rc ;
897  if ( (rc = updateCand(p) ) ) {
898  // BOOST_FOREACH( RhoCandidate* daughter, p.daughters() ) {
899  // updateTree( const_cast<RhoCandidate*>(*daughter) ) ;
900  for(int iDau=0;iDau<p->NDaughters();iDau++){
901  updateTree( const_cast<RhoCandidate*>(p->Daughter(iDau)) ) ;
902  }
903  }
904  return rc ;
905 }
bool updateTree(RhoCandidate *cand) const
update a particlular candidate in the tree
Definition: Fitter.cxx:894
Double_t p
Definition: anasim.C:58
bool updateCand(RhoCandidate *cand) const
update a particlular candidate in the tree
Definition: Fitter.cxx:875

Member Data Documentation

double RhoFitterBase::fChiSquare
protectedinherited
std::vector<RhoCandidate*> RhoFitterBase::fDaughters
protectedinherited
RhoCandidate* RhoFitterBase::fHeadOfTree
protectedinherited
int RhoFitterBase::fNDegreesOfFreedom
protectedinherited
Bool_t RhoFitterBase::fVerbose
protectedinherited
DecayChain* DecayTreeFitter::Fitter::m_decaychain
private

Definition at line 222 of file Fitter.h.

Referenced by decaychain(), and GetDecayChainDirty().

int DecayTreeFitter::Fitter::m_errCode
private

Definition at line 227 of file Fitter.h.

Referenced by errCode().

RecoTrackStateProvider* DecayTreeFitter::Fitter::m_extrapolator
protected

track extrapolator (if needed)

Definition at line 235 of file Fitter.h.

Referenced by extrapolator(), and SetToleranceZ().

FitParams* DecayTreeFitter::Fitter::m_fitparams
private

Definition at line 223 of file Fitter.h.

Referenced by fitparams().

int DecayTreeFitter::Fitter::m_niter
private

Definition at line 226 of file Fitter.h.

Referenced by nIter().

RhoCandidate* DecayTreeFitter::Fitter::m_particle
private

Definition at line 221 of file Fitter.h.

Referenced by Fit(), and particle().

FitStatus DecayTreeFitter::Fitter::m_status
private

Definition at line 224 of file Fitter.h.

Referenced by Fit(), and status().


The documentation for this class was generated from the following files: