////////////////////////////////////////////////////////////////////////// // // // Pnd4CFitter // // // // Author: K. Goetzen, GSI, 2008 // // // ////////////////////////////////////////////////////////////////////////// #include #include "Pnd4CFitter.h" #include "RhoBase/TCandListIterator.h" #include "PndVtxFitterParticle.h" #include "PndVtxFitter_Init.h" #include "PndVtxFitterError.h" #include "RhoBase/TFactory.h" using namespace std; ClassImp(Pnd4CFitter) TBuffer &operator>>(TBuffer &buf, Pnd4CFitter *&obj) { obj = (Pnd4CFitter *) buf.ReadObject(Pnd4CFitter::Class()); return buf; } Pnd4CFitter::Pnd4CFitter( const TCandidate& b , TLorentzVector lv) : VAbsFitter( b ), fLv4C(lv), fNDau(0), fGlobChi2(0.0), fConserveDaughterMasses(false) { } Pnd4CFitter::~Pnd4CFitter() { //if(fHeadOfTree) delete fHeadOfTree; } void Pnd4CFitter::Fit() { //TCandidate theHead=*fHeadOfTree; //TCandListIterator iter=theHead.DaughterIterator(); //cout <<"Fit: head of Tree:"<DaughterIterator(); while (tc=iter.Next()) fDaughters.Add(*tc); */ fHeadOfTree->RemoveAssociations(); for (int i=0;iAddDaughterLinkSimple(&(fDaughters[i])); fNDau=fDaughters.GetLength(); Do4CFit(); } void Pnd4CFitter::PrintTree(TCandidate *c, int l) { for (int i=0;iUid(),c->M()); if (c->NDaughters()>0) { cout<<" ->"<NDaughters();j++) PrintTree(c->Daughter(j),l+1); } else cout<DaughterIterator(); while (tc=iter.Next()) fDaughters.Add(*tc); */ fHeadOfTree->RemoveAssociations(); for (int i=0;iAddDaughterLinkSimple(&(fDaughters[i])); Do4CFitWithMassConservation(); } void Pnd4CFitter::FindAndAddGenericDaughters(TCandidate *head) { TCandidate *tc; TCandListIterator iter=head->DaughterIterator(); while ((tc=iter.Next())) { if (!tc->IsComposite()) fDaughters.Add(*tc); else FindAndAddGenericDaughters(tc); } } //Fit can vary the energy and momentum of input 4-vectors independently (4 params per track) /* void Pnd4CFitter::Init(TMatrixD &al, TMatrixD &V_al0) { int nd=fNDau; int k,i,j; for (k=0;kSetP4(sum); fGlobChi2=chi2; } //Fit conserves the daughter masses (only 3 params per track...) void Pnd4CFitter::Do4CFitWithMassConservation() { int nd=fDaughters.GetLength(); TMatrixD al(3*nd,1); TMatrixD V_al0(3*nd,3*nd); TMatrixD V_D(4,4); TMatrixD d(4,1); TMatrixD D(4,3*nd); TMatrixD m(nd,1); int k,i,j; for (k=0;kSetP4(sum); fGlobChi2=chi2; }