FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
RhoKinHyperonVtxFitter Class Reference

#include <RhoKinHyperonVtxFitter.h>

Inheritance diagram for RhoKinHyperonVtxFitter:
RhoFitterBase

Public Member Functions

 RhoKinHyperonVtxFitter (RhoCandidate *b)
 
virtual ~RhoKinHyperonVtxFitter ()
 
void AddMassConstraint (double mass)
 
double GetPull ()
 
void SetNMaxIterations (int nit=20)
 
void SetNIterationsExact (int nit=2)
 
void SetMinDChisq (double m=0.001)
 
TMatrixD GetAl0 ()
 
TMatrixD GetVal0 ()
 
TMatrixD GetVal_composite ()
 
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

RhoCandidateHeadOfTree () const
 
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

Bool_t fVerbose
 
RhoCandidatefHeadOfTree
 
std::vector< RhoCandidate * > fDaughters
 
double fChiSquare
 
int fNDegreesOfFreedom
 

Private Member Functions

Bool_t FitNode (RhoCandidate *b)
 
void SetMatrices ()
 
void ResetMatrices ()
 
void ReadMatrix ()
 
void ReadKinMatrix ()
 
void ReadMassKinMatrix ()
 
Bool_t Compute (RhoCandidate *c)
 
void SetOutput (RhoCandidate *head)
 
void TransportToPoca (TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &)
 
void TransportToVertex (TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &)
 
void GetCovariance (TMatrixD &a_cov0, TMatrixD &cov_al_x, TMatrixD &V_vtx, TMatrixD &covS)
 

Private Attributes

TMatrixD al0
 
TMatrixD al1
 
TMatrixD V_al0
 
TMatrixD V_al1
 
TMatrixD covC
 
TMatrixD mD
 
TMatrixD mE
 
TMatrixD md
 
TMatrixD mPull
 
Int_t fNvar
 
Int_t fNpar
 
Int_t fNpart
 
Int_t fNcon
 
Int_t fNc
 
Int_t fNiter
 
Int_t fNumKnown
 
Int_t NumCon
 
int niter
 
double fChi2Diff
 
double fPull
 
TMatrixD vtx_ex
 
TMatrixD vtx_st
 
double fMass
 
int fMassConstraint
 
double fMinDChisq
 
int fNMaxIterations
 
bool fIterateExact
 
int fnDof
 
double fchiSquare
 

Detailed Description

Definition at line 22 of file RhoKinHyperonVtxFitter.h.

Constructor & Destructor Documentation

RhoKinHyperonVtxFitter::RhoKinHyperonVtxFitter ( RhoCandidate b)

Definition at line 24 of file RhoKinHyperonVtxFitter.cxx.

References fIterateExact, fMassConstraint, fMinDChisq, and fNMaxIterations.

24  :
25  RhoFitterBase( b )
26 {
27  fMassConstraint =-1;
28  //fPointConstraint=-1;
29 
30  fMinDChisq=0.01;
31  fNMaxIterations=20;
32  fIterateExact=false;
33 
34 
35 }
RhoKinHyperonVtxFitter::~RhoKinHyperonVtxFitter ( )
virtual

Definition at line 37 of file RhoKinHyperonVtxFitter.cxx.

38 {
39 }

Member Function Documentation

void RhoKinHyperonVtxFitter::AddMassConstraint ( double  mass)

Definition at line 41 of file RhoKinHyperonVtxFitter.cxx.

References fMass, and fMassConstraint.

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&#39;s contribution to the chi^2
Definition: RhoFitterBase.h:80
int uid(int lev, int lrun, int lmode)
Definition: autocutx.C:122
Double_t
Bool_t RhoKinHyperonVtxFitter::Compute ( RhoCandidate c)
private

Definition at line 100 of file RhoKinHyperonVtxFitter.cxx.

References al0, al1, covC, fabs(), RhoFitterBase::fChiSquare, RhoFitterBase::fDaughters, fIterateExact, fMassConstraint, fMinDChisq, fNc, RhoFitterBase::fNDegreesOfFreedom, fNMaxIterations, fPull, RhoFitterBase::fVerbose, GetCovariance(), RhoVtxPoca::GetPocaVtx(), mD, md, mE, mPull, NumCon, ReadKinMatrix(), ReadMassKinMatrix(), ReadMatrix(), ResetMatrices(), SetMatrices(), TransportToPoca(), TransportToVertex(), V_al0, V_al1, vtx_ex, and vtx_st.

Referenced by FitNode().

101 {
102 
103  // int nd=fDaughters.size();
104  int nd=fDaughters.size();
105 //cout<<"nd="<<nd<<endl;
106  NumCon=2*nd;
107 
108  if(fMassConstraint >0) {
109  NumCon += 1;
110  }
111 // if(fPointConstraint >0) {
112 // NumCon += 2;
113 // }
114 
116 
117 
118 
119  SetMatrices();
120  ResetMatrices();
121  ReadMatrix();
122 
123  TMatrixD cov_al_x(7*nd,3);
124 
125  TVector3 startVtx;
126  //Getting point of closed approach as start vertex point
127  RhoVtxPoca poca; //changed from internal method to class RhoVtxPoca by J.Puetz
128  poca.GetPocaVtx(startVtx, c);
129 
130  vtx_st[0][0]=startVtx.X();
131  vtx_st[1][0]=startVtx.Y();
132  vtx_st[2][0]=startVtx.Z();
133 
134  vtx_ex=vtx_st;
135  if(fVerbose) { cout<<"Initial vertex Position is "<<vtx_ex[0][0]<<" "<<vtx_ex[1][0]<<" "<<vtx_ex[2][0]<<endl; }
136 
137  al1=al0;
138  V_al1=V_al0;
140  al0=al1;
141  V_al0=V_al1;
142 
143 
144 
145 
146  TMatrixD V_vtx(3,3);
147  V_vtx[0][0] = 9000.;
148  V_vtx[1][1] = 9000.;
149  V_vtx[2][2] = 9000.;
150  // vtx_ex=vtx_st;
151 
152  double ierr =0 ; // used to check inversions
153  TMatrixD chi2(1,1);
154  TMatrixD chi2_1(1,1);
155 
156  chi2[0][0]=2000000.;
157  //double tmp_chiSq = 999;
158 
159  for(Int_t j1=0; j1<fNMaxIterations; ++j1) {
160 
161  fNc=0;
162  if(fMassConstraint >0) {
164  } else {
165  ReadKinMatrix();
166  }
167 
168  TMatrixD mD_t=mD;
169  mD_t.T();
170  // mD_t=mD_t.Transpose(mD);
171 
172 
173  TMatrixD Vd_inv = mD*V_al0*mD_t;
174  if(Vd_inv==0) { continue; }
175  TMatrixD Vd = Vd_inv.Invert(&ierr);
176 
177 
178  // if( ierr != 0 ){
179  // if(fVerbose) cout << "Inversion of constraint-matrix failed! " << endl;
180  // return 0;}
181  // Vd.Print();
182 
183 
184  TMatrixD del_al = al0 - al1;
185  TMatrixD del_x0 = vtx_st - vtx_ex;
186 
187 
188  // Lagrange multiplier
189 
190  //TMatrixD lam0=Vd*md;
191  TMatrixD lam0 = Vd* ( mD*del_al + md);
192  // if(fVerbose) cout << " lam0 calculated" << endl;
193 
194 
195  // Position Derivative matrix ...............
196  TMatrixD mE_t=mE;
197  mE_t.T();
198  //TMatrixD Vx_inv = mE_t*Vd*mE;
199  TMatrixD Vx0_inv=V_vtx.Invert(&ierr);
200  TMatrixD Vx_inv = Vx0_inv + mE_t*Vd*mE;
201  TMatrixD Vx=Vx_inv.Invert(&ierr);
202 // TMatrixD del_x=Vx*Vx0_inv*del_x0- Vx*mE_t*lam0;// by x.song
203 // cout<<" *** *** *** *** ***"<<endl;
204 // cout<<"mE "; mE.Print();
205 // cout<<"mE_t "; mE_t.Print();
206 // cout<<"Vd "; Vd.Print();
207 // cout<<"Vx_inv "; Vx_inv.Print();
208 // cout<<"Vx "; Vx.Print();
209 // cout<<" *******************"<<endl;
210 
211  // New vertex and covariance ........
212  TMatrixD V_vtx_new(3,3);
213  TMatrixD vtx_new(vtx_ex);
214 
215 
216  //vtx_new -= Vx*mE_t*lam0;
217  vtx_new += Vx*Vx0_inv*del_x0 - Vx*mE_t*lam0;
218  //cout << " New vtx calculated" << endl;
219  //vtx_new.Print();
220  V_vtx_new = Vx;
221 
222 
223 
224  // Final Lagarange multiplier ........
225  TMatrixD lam = lam0 + (Vd * mE) * (vtx_new - vtx_ex);
226  // if(fVerbose) cout << " New lam calculated" << endl;
227 
228 
229 
230  // New track parameters.............
231  TMatrixD al_new(al0);
232  al_new -= V_al0*mD_t*lam;
233  // if(fVerbose) cout << " New track param calculated" << endl;
234 
235 
236 
237  //chiSquared
238  TMatrixD lam_t=lam;
239  lam_t.T();
240  TMatrixD chi2_new = lam_t*(mD*(al0 - al_new) + mE*(vtx_st-vtx_ex) + md);
241 
242 
243 
244  // New Covariance Matrix................
245  // TMatrixD V_al_new(V_al0);
246  // V_al_new-=V_al0*mD_t*Vd*mD*V_al0_t;
247 
248 
249  // protect against errors. RK: is that safe to do?
250  if(TMath::IsNaN(chi2_new[0][0])) continue;
251 
252  double deltaChi=chi2_new[0][0]-chi2[0][0];
253 
254  // Check chi^2. If better yes update the values ..............................
255  if (deltaChi>0.1*chi2[0][0]) {continue;}
256  if( chi2_new[0][0] < chi2[0][0] ) {
257  vtx_ex = vtx_new;
258  al1 = al_new;
259  // V_al0 = V_al_new;
260  }
261 
262 
263  // if (j1==0) {chi2=chi2_new;continue;}
264 
265  // If Chi^2 change is small then go out of iteration......................
266  if( (j1+1 == fNMaxIterations) ||
267  (!fIterateExact && ( fabs(chi2[0][0]-chi2_new[0][0])<fMinDChisq) ) ) {
268  chi2 = chi2_new;
269  vtx_ex = vtx_new;
270  al0 =al_new;
271 
272 
273  TMatrixD Vd_new(Vd);
274  Vd_new -= Vd*(mE*Vx*mE_t)*Vd.T();
275  TMatrixD V_al_new(V_al0);
276  V_al_new -= V_al0*(mD_t*Vd_new*mD)*V_al0.T();
277  cov_al_x -= V_al0*mD_t*Vd*mE*Vx; // Vertex-track Correlation
278 
279 
280 
281  //double covdif=(V_al0[6][6]-V_al_new[6][6]);
282  // if (covdif > 0 ) {mPull[0][0] =(al0[6][0]-al_new[6][0])/sqrt(covdif);}
283  mPull[0][0] =(al0[6][0]-al_new[6][0]);
284  fPull=mPull[0][0];
285 
286  V_al0 = V_al_new;
287  V_vtx = V_vtx_new;
288  if(fVerbose) { cout <<"iteration Number " << " " << j1 <<" final." <<endl; }
289  if(fVerbose) { cout <<" chi2 in iteration" << " " << chi2[0][0] << " pull="<<fPull<< endl; }
290  break; // that was the final iteration, stop the loop
291  }
292  chi2 = chi2_new;
293  if(fVerbose) { cout << "iteration Number " << " " << j1 << endl; }
294  if(fVerbose) { cout <<" vertex Position is "<<vtx_new[0][0]<<" "<<vtx_new[1][0]<<" "<<vtx_new[2][0]<<endl; }
295  if(fVerbose) { cout << " chi2 in iteration" << " " << chi2[0][0] << endl; }
296  } // end of iteration-loop
297 
298  // tell that the fit failed if we have no updated chi2
299  if( TMath::IsNaN(chi2[0][0]) || chi2[0][0]==2000000. ) return kFALSE;
300 
301  TMatrixD al_new_vtx(7*nd,1);
302  TMatrixD Va_new_vtx(7*nd,7*nd);
303 
304 
305 
306 
307  // Trivial way for covariance matrix of composite
308 // covC=
309 // for(Int_t k=0;k<nd;k++) {
310 // for(int j = 0; j< nd ; ++j) {
311 // {if(k<=j) CovS(k,j) = V_al_0(k,j);}}
312 // CovC -= CovS;
313 // covC+=V_al0.GetSub(k*7,(k+1)*7-1,k*7,(k+1)*7-1);}
314 
315  GetCovariance(V_al0,cov_al_x,V_vtx,covC);
316 
317 
318  // al_new_vtx=al1;
319  // Va_new_vtx=V_al1;
320 
321 //transport the daughters para and cov to those on the fitted vertex
322 
323  TransportToVertex(al0, V_al0, al_new_vtx, Va_new_vtx, vtx_ex);
324  al0=al_new_vtx;
325  V_al0=Va_new_vtx;
326  fChiSquare=chi2[0][0];
327  // fChi2Diff=chi2_1[0][0]-chi2[0][0];
328 
329  return kTRUE;
330 }
void GetCovariance(TMatrixD &a_cov0, TMatrixD &cov_al_x, TMatrixD &V_vtx, TMatrixD &covS)
Double_t GetPocaVtx(TVector3 &vertex, RhoCandidate *composite)
Definition: RhoVtxPoca.cxx:27
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
void TransportToVertex(TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &)
double fChiSquare
Definition: RhoFitterBase.h:74
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
void TransportToPoca(TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &, TMatrixD &)
int fNDegreesOfFreedom
Definition: RhoFitterBase.h:75
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
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 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 RhoKinHyperonVtxFitter::FitNode ( RhoCandidate b)
privatevirtual

Reimplemented from RhoFitterBase.

Definition at line 54 of file RhoKinHyperonVtxFitter.cxx.

References Bool_t, Compute(), RhoFitterBase::SetDaugthersFromComposite(), and SetOutput().

55 {
57  Bool_t check=Compute(cand);
58  SetOutput(cand);
59  return check;
60 }
void SetOutput(RhoCandidate *head)
Bool_t Compute(RhoCandidate *c)
void SetDaugthersFromComposite(RhoCandidate *cand)
TMatrixD RhoKinHyperonVtxFitter::GetAl0 ( )
inline

Definition at line 34 of file RhoKinHyperonVtxFitter.h.

References al0.

34 {return al0;}
double RhoFitterBase::GetChi2 ( ) const
inlineinherited
void RhoKinHyperonVtxFitter::GetCovariance ( TMatrixD a_cov0,
TMatrixD cov_al_x,
TMatrixD V_vtx,
TMatrixD covS 
)
private

Definition at line 1219 of file RhoKinHyperonVtxFitter.cxx.

References a, Double_t, RhoFitterBase::fDaughters, RhoCalculationTools::GetBz(), i, and jj.

Referenced by Compute().

1221 {
1222  int fNDau=fDaughters.size();
1223  int nd=fNDau;
1224 
1225 
1226  TMatrixD cov_al_x_temp=cov_al_x;
1227 
1228  TMatrixD pA(4*nd,7*nd);
1229  pA.Zero();
1230  double sumA=0;
1231  double a;
1232  int kN, jN;
1233  for (int k=0; k<nd; k++) {
1234  kN=k*7;
1235  jN=k*4;
1236  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
1237  a = -0.00299792458*bField*fDaughters[k]->GetCharge();
1238  sumA += a;
1239  pA[jN][kN]=pA[jN+1][kN+1]=pA[jN+2][kN+2]=pA[jN+3][kN+3]=1;
1240  pA[jN+1][kN+4]=-a;
1241  pA[jN][kN+5]=a;
1242  }
1243 
1244  TMatrixD pB(4,3);
1245  TMatrixD pB_t(3,4);
1246  pB.Zero();
1247  pB[0][1]=-sumA;
1248  pB[1][0]=sumA;
1249 
1250  TMatrixD covA_al_xi=pA*cov_al_x;
1251 //TMatrixD covB_al_xi=pB*cov_al_x;
1252  TMatrixD cov_al_xT(3,7*nd);
1253  cov_al_xT = cov_al_x_temp.T();
1254 
1255  TMatrixD pA_t(7*nd,4*nd);
1256 //pA_t=pA.T();
1257 
1258 //TMatrixD covP(4*nd,4*nd);
1259  TMatrixD covP = pA*a_cov0*(pA_t.Transpose(pA));
1260  TMatrixD covA=covA_al_xi*(pB_t.Transpose(pB));
1261  TMatrixD covB=pB*(cov_al_xT)*(pA_t.Transpose(pA));
1262  TMatrixD covBV=pB*(V_vtx)*(pB_t.Transpose(pB));
1263 
1264  TMatrixD covA_al_x(4,3);
1265  TMatrixD SumcovP(4,4);
1266  SumcovP=covBV;
1267 
1268  for (int k=0; k<nd; k++) {
1269  kN=k*7;
1270  jN=k*4;
1271  for (int i=0; i<4; i++) {
1272  for (int j=0; j<4; j++) {
1273  SumcovP[i][j] += covP[jN+i][jN+j];
1274  SumcovP[i][j] += covA[jN+i][j];
1275  SumcovP[i][j] += covB[i][jN+j];
1276  }
1277  for (int jj=0; jj<3; jj++) {
1278  covA_al_x[i][jj] += covA_al_xi[jN+i][jj];
1279  }
1280  }
1281  }
1282 
1283 
1284  TMatrixD covPX(4,3);
1285  covPX = covA_al_x ;
1286  covPX += (pB *V_vtx);
1287  TMatrixD covPX_t(3,4);
1288  covPX_t=covPX_t.Transpose(covPX);
1289 
1290 
1291 
1292  covS.SetSub(0,0,V_vtx);
1293  covS.SetSub(0,3,covPX_t);
1294  covS.SetSub(3,0,covPX);
1295  covS.SetSub(3,3,SumcovP);
1296 
1297 }
Int_t i
Definition: run_full.C:25
Int_t a
Definition: anaLmdDigi.C:126
Double_t
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
static Double_t GetBz(const TVector3 &position)
Return the magnetic field along the z-axis in kGs
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
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 RhoKinHyperonVtxFitter::GetPull ( )
inline

Definition at line 29 of file RhoKinHyperonVtxFitter.h.

References fPull.

29 {return fPull;}
TMatrixD RhoKinHyperonVtxFitter::GetVal0 ( )
inline

Definition at line 35 of file RhoKinHyperonVtxFitter.h.

References V_al0.

35 {return V_al0;}
TMatrixD RhoKinHyperonVtxFitter::GetVal_composite ( )
inline

Definition at line 36 of file RhoKinHyperonVtxFitter.h.

References covC.

36 {return covC;}
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&#39;s contribution to the chi^2
Definition: RhoFitterBase.h:80
void RhoKinHyperonVtxFitter::ReadKinMatrix ( )
private

Definition at line 514 of file RhoKinHyperonVtxFitter.cxx.

References a, al1, Double_t, RhoFitterBase::fDaughters, fNc, fNcon, fNpar, RhoCalculationTools::GetBz(), mD, md, mE, pz, sqrt(), and vtx_ex.

Referenced by Compute().

515 {
516 
517  int nd=fDaughters.size();
518  fNc=0;
519  mD.ResizeTo(fNcon,fNpar);
520  mE.ResizeTo(fNcon,3);
521  md.ResizeTo(fNcon,1);
522  for (int k=0; k<nd; k++) {
523 
524 
525  int kN=k*7;
526  int k2=k*2;
527  double delX = vtx_ex[0][0] - al1[kN+4][0];
528  double delY = vtx_ex[1][0] - al1[kN+5][0];
529  double delZ = vtx_ex[2][0] - al1[kN+6][0];
530  double px = al1[kN+0][0];
531  double py = al1[kN+1][0];
532  double pz = al1[kN+2][0];
533  double ch=fDaughters[k]->GetCharge();
534  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
535  double a = -0.0029979246*ch*bField;
536  double pT_2 = px*px + py*py;
537 
538  double J = a*(delX*px + delY*py)/pT_2;
539  double Rx = delX - 2.*px*(delX*px + delY*py)/pT_2;
540  double Ry = delY - 2.*py*(delX*px + delY*py)/pT_2;
541 
542  // if(fabs(J) > 1) {return 0;}
543  if (J>=1.0 || J<= -1.0) { J = (J>=1.0 ? 0.99 : -0.99);}
544 
545  double S = 1./(pT_2*sqrt(1-(J*J)));
546  // if(fVerbose) cout << ch << "ch" << S << "pt2" << J << "bField" << bField <<endl;
547  double asin_J = asin(J);
548  //charged particle
549  if(ch !=0) {
550  mD[fNc+0+k2][kN+0] = delY ;
551  //if(fVerbose) cout << al0[kN+4][0] << " " << delY << endl;
552  mD[fNc+0+k2][kN+1] = -(delX) ;
553  mD[fNc+0+k2][kN+2] = 0. ;
554  mD[fNc+0+k2][kN+3] = 0. ;
555  mD[fNc+0+k2][kN+4] = py + a*delX ;
556  mD[fNc+0+k2][kN+5] = -px + a*delY ;
557  mD[fNc+0+k2][kN+6] = 0. ;
558 
559  mD[fNc+1+k2][kN+0] = -pz*S*Rx ;
560  mD[fNc+1+k2][kN+1] = -pz*S*Ry ;
561  mD[fNc+1+k2][kN+2] = -asin_J/a ;
562  mD[fNc+1+k2][kN+3] = 0.;
563  mD[fNc+1+k2][kN+4] = px*pz*S;
564  mD[fNc+1+k2][kN+5] = py*pz*S;
565  mD[fNc+1+k2][kN+6] = -1.;
566  } else {
567  //neutral particle
568  mD[fNc+0+k2][kN+0] = delY ;
569  mD[fNc+0+k2][kN+1] = -(delX) ;
570  mD[fNc+0+k2][kN+2] = 0. ;
571  mD[fNc+0+k2][kN+3] = 0. ;
572  mD[fNc+0+k2][kN+4] = py;
573  mD[fNc+0+k2][kN+5] = -px;
574  mD[fNc+0+k2][kN+6] = 0. ;
575 
576  mD[fNc+1+k2][kN+0] = 2*(delX*px+delY*py)*px*pz/(pT_2*pT_2) - pz*delX/(pT_2);
577  mD[fNc+1+k2][kN+1] = 2*(delX*px+delY*py)*py*pz/(pT_2*pT_2) - pz*delY/(pT_2);
578  mD[fNc+1+k2][kN+2] =-(delX*px+delY*py)/(pT_2);
579  mD[fNc+1+k2][kN+3] = 0.;
580  mD[fNc+1+k2][kN+4] = px*pz/pT_2;
581  mD[fNc+1+k2][kN+5] = py*pz/pT_2;
582  mD[fNc+1+k2][kN+6] = -1.;
583  }
584  //DMat_trk.push_back(DMat_tmp);
585  //E jacobian matrix
586  if(ch !=0 ) {
587  mE[fNc+0+k2][0] = -(py + a*delX);
588  mE[fNc+0+k2][1] = (px - a*delY);
589  mE[fNc+0+k2][2] = 0.;
590  mE[fNc+1+k2][0] = -px*pz*S;
591  mE[fNc+1+k2][1] = -py*pz*S;
592  mE[fNc+1+k2][2] = 1.;
593  } else {
594  mE[fNc+0+k2][0] = -py ;
595  mE[fNc+0+k2][1] = px;
596  mE[fNc+0+k2][2] = 0.;
597  mE[fNc+1+k2][0] = -px*pz/pT_2;
598  mE[fNc+1+k2][1] = -py*pz/pT_2;
599  mE[fNc+1+k2][2] = 1.;
600  }
601  if(ch !=0 ) {
602  md[fNc+0+k2][0] = delY*px - delX*py - (a/2.)*(delX*delX + delY*delY);
603  md[fNc+1+k2][0] = delZ - (pz/a)*asin_J;
604  } else {
605  md[fNc+0+k2][0] = delY*px - delX*py;
606  md[fNc+1+k2][0] = delZ - pz*(delX * px + delY * py)/(pT_2);
607  }
608 
609  }
610  fNc +=2*nd;
611 
612 
613 
614 
615 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t a
Definition: anaLmdDigi.C:126
Double_t
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
static Double_t GetBz(const TVector3 &position)
Return the magnetic field along the z-axis in kGs
double pz[39]
Definition: pipisigmas.h:14
void RhoKinHyperonVtxFitter::ReadMassKinMatrix ( )
private

Definition at line 618 of file RhoKinHyperonVtxFitter.cxx.

References a, al1, Double_t, RhoFitterBase::fDaughters, fMass, fNc, fNcon, fNpar, RhoCalculationTools::GetBz(), m, mD, md, mE, p1, pz, CAMath::Sqrt(), and vtx_ex.

Referenced by Compute().

620 {
621  // if(m_fitIncludingVertex == 0)
622  //{
623  int nd=fDaughters.size();
624 
625  mD.ResizeTo(fNcon,fNpar);
626  mE.ResizeTo(fNcon,3);
627  md.ResizeTo(fNcon,1);
628 
629  double Etot = 0.;
630  double Px = 0.;
631  double Py = 0.;
632  double Pz = 0.;
633 
634  TMatrixD al1p(al1);
635  double a=0; //TODO: is that right to initialize with 0?
636  TMatrixD m(nd,1);
637 
638  /*
639  // Mass Constraint without vertex Info.............................
640 
641  for(unsigned k=0;k<nd;++k){
642  int kN=k*7;
643  TLorentzVector p1=fDaughters[k]->P4();
644  m[k][0]=p1.M();
645  double px = al1p[kN+0][0];
646  double py = al1p[kN+1][0];
647  double pz = al1p[kN+2][0];
648  double E = TMath::Sqrt(px*px+py*py+pz*pz+m[k][0]*m[k][0]);
649 
650  // Etot += E; Px +=px; Py +=py; Pz += pz;}
651  // md[fNc+0][0] = Etot*Etot - Px*Px - Py*Py - Pz*Pz - fMass*fMass ;
652 
653  a = -0.00299792458*2.0*fDaughters[k]->GetCharge();
654  Double_t invE = 1./E;
655 
656  mD[fNc+0][kN+0] = 2.*(Etot*px*invE-Px);
657  mD[fNc+0][kN+1] = 2.*(Etot*py*invE-Py);
658  mD[fNc+0][kN+2] = 2.*(Etot*pz*invE-Pz);
659  // mD[fNc+0][kN+3] = 0.0;
660  mD[fNc+0][kN+3] = 2* m[k][0]*Etot*invE;
661  mD[fNc+0][kN+4] = 2.*Py*a;
662  mD[fNc+0][kN+5] = -2.*Px*a;
663  mD[fNc+0][kN+6] = 0.0;
664 
665  //................Simple....................
666 
667  // mD[fNc+0][kN+0] = -2.*Px;
668  // mD[fNc+0][kN+1] = -2.*Py;;
669  // mD[fNc+0][kN+2] = -2.*Pz;
670  // mD[fNc+0][kN+3] = 2.*Etot;
671  // mD[fNc+0][kN+3] = 2* m[k][0]*Etot*invE;
672  // mD[fNc+0][kN+4] = 2.*(Etot*py*invE-Py)*a;
673  // mD[fNc+0][kN+5] = 2.*(Etot*px*invE-Px)*a;
674  // mD[fNc+0][kN+4] = 0.0;
675  // mD[fNc+0][kN+5] = 0.0;
676  // mD[fNc+0][kN+6] = 0.0;
677  }
678  */
679 
680  // With Vertex Info.............................................
681  for(int k=0; k<nd; ++k) {
682  int kN=k*7;
683  TLorentzVector p1=fDaughters[k]->P4();
684  m[k][0]=p1.M();
685  double delX = vtx_ex[0][0] - al1p[kN+4][0];
686  double delY = vtx_ex[1][0] - al1p[kN+5][0];
687  // double delX=0.;
688  // double delY=0.;
689 
690  al1p[kN+0][0] = al1p[kN+0][0]-a*delY;
691  al1p[kN+1][0] = al1p[kN+1][0]+a*delX;
692  // al1p[kN+2][0] = al1p[kN+2][0];
693  double E = TMath::Sqrt(al1p[kN+0][0]* al1p[kN+0][0]+al1p[kN+1][0]*al1p[kN+1][0]+al1p[kN+2][0]*al1p[kN+2][0]+m[k][0]*m[k][0]);
694  Etot += E;
695 
696  Px += al1p[kN+0][0] ;
697  Py += al1p[kN+1][0];
698  Pz += al1p[kN+2][0];
699  }
700  md[fNc+0][0] = Etot*Etot - Px*Px - Py*Py - Pz*Pz - fMass*fMass ;
701 
702  double sumA=0;
703  for(int k=0; k<nd; ++k) {
704  int kN=k*7;
705  double px = al1p[kN+0][0];
706  double py = al1p[kN+1][0];
707  double pz = al1p[kN+2][0];
708  // double E = al1p[kN+3][0];
709  double E = TMath::Sqrt(px*px+py*py+pz*pz+m[k][0]*m[k][0]);
710 
711  //here there should be implemented the algorithm for neutral particles
712 
713  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
714  a = -0.00299792458*bField*fDaughters[k]->GetCharge();//TODO BField
715  sumA += a;
716  Double_t invE = 1./E;
717 
718  mD[fNc+0][kN+0] = 2.*(Etot*al1p[kN+0][0]*invE-Px);
719  mD[fNc+0][kN+1] = 2.*(Etot*al1p[kN+1][0]*invE-Py);
720  mD[fNc+0][kN+2] = 2.*(Etot*al1p[kN+2][0]*invE-Pz);
721  mD[fNc+0][kN+3] = 0.;
722  mD[fNc+0][kN+4] =-2.*(Etot*al1p[kN+1][0]*invE-Py)*a;
723  mD[fNc+0][kN+5] = 2.*(Etot*al1p[kN+0][0]*invE-Px)*a;
724  mD[fNc+0][kN+6] = 0.;
725  }
726  cout << "Sum A: " << sumA << endl;
727 
728 
729  mE[fNc+0][0] = 2*sumA*Px;
730  mE[fNc+0][1] = -2*sumA*Py;
731  mE[fNc+0][2] = 0.;
732  fNc +=1;
733 }
__m128 m
Definition: P4_F32vec4.h:28
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Int_t a
Definition: anaLmdDigi.C:126
Double_t
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
static Double_t GetBz(const TVector3 &position)
Return the magnetic field along the z-axis in kGs
TPad * p1
Definition: hist-t7.C:116
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
double pz[39]
Definition: pipisigmas.h:14
void RhoKinHyperonVtxFitter::ReadMatrix ( )
private

Definition at line 451 of file RhoKinHyperonVtxFitter.cxx.

References al0, RhoFitterBase::fDaughters, i, jj, m, p1, p2, sqrt(), and V_al0.

Referenced by Compute().

452 {
453  int nd =fDaughters.size();
454  TMatrixD m(nd,1);
455  for (int k=0; k<nd; k++) {
456  int kN=k*7;
457  //px,py,pz,E,x,y,z
458  TLorentzVector p1=fDaughters[k]->P4(); //4-momentum of the daughter
459  TVector3 p2=fDaughters[k]->Pos(); // position of the daughter
460  al0[kN+0][0]=p1.X();
461  al0[kN+1][0]=p1.Y();
462  al0[kN+2][0]=p1.Z();
463  // al0[kN+3][0]=p1.E();
464  al0[kN+4][0]=p2.X();
465  al0[kN+5][0]=p2.Y();
466  al0[kN+6][0]=p2.Z();
467 
468  double fm=fDaughters[k]->Mass();
469  al0[kN+3][0]=sqrt(al0[kN+0][0]*al0[kN+0][0]+ al0[kN+1][0]*al0[kN+1][0]+al0[kN+2][0]*al0[kN+2][0]+fm*fm);
470 
471  // Read Covariance Matrix .... Can read 6x6 matrices..................
472  TMatrixD p1Cov(7,7);
473  TMatrixD p3Cov(6,6); //Why 6x6 here if 7x7 should be cpoied (below)
474  TMatrixD p2Cov(7,7);
475  TMatrixD p4Cov(7,7);
476  p1Cov=fDaughters[k]->Cov7(); //Cov Matrix x,y,z,px,py,pz,E
477 
478  for (int ii=0; ii<6; ii++) {for(int jj=0; jj<6; jj++) {p3Cov[ii][jj]=p1Cov[ii][jj];}} //test
479 
480  //Extend matrix for energy for each candidates .....6x6 to 7x7
481  TMatrixD J(7,6) ;
482  J.Zero();
483  TMatrixD J_t(6,7);
484  for (int ii=0; ii<6; ii++) {for(int jj=0; jj<6; jj++) {J[ii][jj] = 1;}}
485  for(int i=3; i<6; ++i) {J[6][i] = al0[kN+i-3][0]/al0[kN+3][0];}
486  // p2Cov= J*p3Cov*(J_t.Transpose(J));
487  p2Cov=p1Cov;
488  //Change to px,py,pz,E,x,y,z
489  for(int i=0; i<7; i++) {
490  for(int j=0; j<7; j++) {
491  if(i>=3) {
492  if(j>=3) {
493  p4Cov[i-3][j-3] = p2Cov[i][j];
494  } else { p4Cov[i-3][j+4] = p2Cov[i][j]; }
495  } else {
496  if(j>=3) {
497  p4Cov[i+4][j-3] = p2Cov[i][j];
498  } else { p4Cov[i+4][j+4] = p2Cov[i][j]; }
499  }
500  }
501  }
502 
503  for(int i=0; i<7; i++) {
504  for (int j=0; j<7; j++) {
505  V_al0[k*7+i][k*7+j] = p4Cov[i][j];
506  }
507  }
508  }
509 }
Int_t i
Definition: run_full.C:25
__m128 m
Definition: P4_F32vec4.h:28
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
TPad * p2
Definition: hist-t7.C:117
TPad * p1
Definition: hist-t7.C:116
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
void RhoKinHyperonVtxFitter::ResetMatrices ( )
private

Definition at line 86 of file RhoKinHyperonVtxFitter.cxx.

References al0, al1, covC, mPull, V_al0, V_al1, vtx_ex, and vtx_st.

Referenced by Compute().

87 {
88  al0.Zero();
89  V_al0.Zero();
90  al1.Zero();
91  V_al1.Zero();
92  mPull.Zero();
93  vtx_ex.Zero();
94  vtx_st.Zero();
95  covC.Zero();
96 }
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(), 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 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 RhoKinHyperonVtxFitter::SetMatrices ( )
private

Definition at line 63 of file RhoKinHyperonVtxFitter.cxx.

References al0, al1, covC, RhoFitterBase::fDaughters, fNc, fNcon, fNiter, fNpar, fNpart, fNvar, mPull, NumCon, V_al0, V_al1, vtx_ex, and vtx_st.

Referenced by Compute().

64 {
65  int nd=fDaughters.size();
66 
67  fNvar=7;
68  fNpart=nd;
69  fNpar =nd*fNvar;
70  fNcon=NumCon;
71  // if(fVerbose) cout << fNcon << "Num " << endl;
72  fNc=0;
73  fNiter=0;
74 
75  al0.ResizeTo(7*nd,1);
76  V_al0.ResizeTo(fNpar,fNpar);
77  al1.ResizeTo(7*nd,1);
78  V_al1.ResizeTo(fNpar,fNpar);
79  vtx_ex.ResizeTo(3,1);
80  vtx_st.ResizeTo(3,1);
81  mPull.ResizeTo(7*nd,1);
82  covC.ResizeTo(7,7);
83 }
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
void RhoKinHyperonVtxFitter::SetMinDChisq ( double  m = 0.001)
inline

Definition at line 33 of file RhoKinHyperonVtxFitter.h.

References fabs(), fMinDChisq, and m.

33 {fMinDChisq=fabs(m);};
__m128 m
Definition: P4_F32vec4.h:28
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void RhoKinHyperonVtxFitter::SetNIterationsExact ( int  nit = 2)
inline
void RhoKinHyperonVtxFitter::SetNMaxIterations ( int  nit = 20)
inline
void RhoKinHyperonVtxFitter::SetOutput ( RhoCandidate head)
private

[ralfk:28.5.2013] Use flat Fourmomentum sum from RhoFitterBase

Definition at line 338 of file RhoKinHyperonVtxFitter.cxx.

References a, al0, al1, covC, Double_t, RhoFitterBase::fDaughters, fe, RhoFitterBase::fVerbose, RhoCalculationTools::GetBz(), i, m, p1, pos, RhoCandidate::SetCov7(), RhoFitterBase::SetDecayVertex(), RhoCandidate::SetP7(), RhoCandidate::SetPos(), V_al0, and vtx_ex.

Referenced by FitNode().

339 {
340 
341  int nd=fDaughters.size();
342  TMatrixD m(nd,1);
343 
344 
345  double sumA=0;
346  double a;
347  for (int k=0; k<nd; k++) {
348 
349 
350  //skip locked daughters
351  if(fDaughters[k]->IsLocked()) continue;
352  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
353  a = -0.00299792458*bField*fDaughters[k]->GetCharge();
354  sumA += a;
355  TVector3 pos(al0[k*7+4][0],al0[k*7+5][0],al0[k*7+6][0]);
356  TLorentzVector mom4(al0[k*7+0][0],al0[k*7+1][0],al0[k*7+2][0], al0[k*7+3][0]);
357 // fDaughters[k]->SetP7(pos,mom4);
358 //better to put daugthers with mass hypothesis .......?? VJ
359  TLorentzVector momM;
360  double fM=fDaughters[k]->Mass();
361  momM.SetXYZM(al0[k*7+0][0],al0[k*7+1][0],al0[k*7+2][0],fM);
362 // momM.SetP4(fM,al0[k*7+0][0],al0[k*7+1][0],al0[k*7+2][0]);
363  fDaughters[k]->SetP7(pos,momM);
364 
365 
366  //Extend matrix for energy for each candidates if daughters from mass hypothesis 6x6 covariance
367  TMatrixD p1Cov(7,7);
368  TLorentzVector p1=fDaughters[k]->P4();
369  TMatrixD p2Cov(7,7);
370 
371  for(int i=0; i<7; i++) {
372  for (int j=0; j<7; j++) {
373  p1Cov[i][j]= V_al0[k*7+i][k*7+j];
374  }
375  }
376 
377 
378  //Change from px,py,pz,E,x,y,z
379  // to x,y,z,px,py,pz,E
380  for(int i=0; i<7; i++) {
381  for(int j=0; j<7; j++) {
382  if(i>=4) {
383  if(j>=4) {
384  p2Cov[i-4][j-4] = p1Cov[i][j];
385  } else { p2Cov[i-4][j+3] = p1Cov[i][j]; }
386  } else {
387  if(j>=4) {
388  p2Cov[i+3][j-4] = p1Cov[i][j];
389  } else { p2Cov[i+3][j+3] = p1Cov[i][j]; }
390  }
391  }
392  }
393 
394  // create cov with E... check it
395  double invE = 1./al0[k*7+3][0];
396  p2Cov[3][6] = p2Cov[6][3] = (p1.X()*p1Cov[0][0]+p1.Y()*p1Cov[0][1]+p1.Z()*p1Cov[0][2])*invE;
397  p2Cov[4][6] = p2Cov[6][4] = (p1.X()*p1Cov[1][0]+p1.Y()*p1Cov[1][1]+p1.Z()*p1Cov[1][2])*invE;
398  p2Cov[5][6] = p2Cov[6][5] = (p1.X()*p1Cov[2][0]+p1.Y()*p1Cov[2][1]+p1.Z()*p1Cov[2][2])*invE;
399 
400  p2Cov[6][6] = (p1.X()*p1.X()*p1Cov[0][0]+p1.Y()*p1.Y()*p1Cov[1][1]+p1.Z()*p1.Z()*p1Cov[2][2]
401  +2.0*p1.X()*p1.Y()*p1Cov[0][1]
402  +2.0*p1.X()*p1.Z()*p1Cov[0][2]
403  +2.0*p1.Y()*p1.Z()*p1Cov[1][2])*invE*invE;
404 
405  p2Cov[6][0] = p2Cov[0][6] = (p1.X()*p1Cov[0][4]+p1.Y()*p1Cov[1][4]+p1.Z()*p1Cov[2][4])*invE;
406  p2Cov[6][1] = p2Cov[1][6] = (p1.X()*p1Cov[0][5]+p1.Y()*p1Cov[1][5]+p1.Z()*p1Cov[2][5])*invE;
407  p2Cov[6][2] = p2Cov[2][6] = (p1.X()*p1Cov[0][6]+p1.Y()*p1Cov[1][6]+p1.Z()*p1Cov[2][6])*invE;
408 
409  fDaughters[k]->SetCov7(p2Cov); //New covariance matrix with correlations
410  //cout<< " ####### KinVtx daughter cov check... " << endl;
411  //cout<<"p1Cov"; p1Cov.Print();
412  //cout<<"p2Cov"; p2Cov.Print();
413 
414  }
415 
416 
418 //
419 // // For the composite particle ..............................
421  double fpx=0,fpy=0,fpz=0,fe=0;
422  for (int k=0; k<nd; k++) {
423  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
424  a = -0.00299792458*bField*fDaughters[k]->GetCharge();
425 
426  fpx+= al0[k*7+0][0]-a*(vtx_ex[1][0] - al0[k*7+5][0]);
427  fpy+= al0[k*7+1][0]+a*(vtx_ex[0][0] - al0[k*7+4][0]);
428  fpz+= al0[k*7+2][0];
429  fe += al0[k*7+3][0];
430  }
431 
432  TLorentzVector sum(fpx,fpy,fpz,fe);
433  TVector3 vtx(vtx_ex[0][0],vtx_ex[1][0],vtx_ex[2][0]);
434  head->SetP7(vtx,sum); //[ralfk:01.12.11 Try to make it a leaf-by-leaf fit]
435  //We set the decay vertex of the mother! [R.K.]
436 
437  TMatrixD CovV = covC.GetSub(0,2,0,2);
438 
439  head->SetPos(vtx);//P4 is defined here
440  SetDecayVertex(head,vtx,CovV);
441 // SetFourMomentumByDaughters(head);//propagates cov7 from daughters
442  head->SetCov7(covC);//which one to use???
443  //cout<<" KinVtx Cov7: ";covC.Print();
444  if(fVerbose) { cout<<"Final vertex Position is "<<vtx_ex[0][0]<<" "<<vtx_ex[1][0]<<" "<<vtx_ex[2][0]<<endl; }
445  if(fVerbose) { cout<<"Final Momenta are "<<al0[0][0]<<" "<<al1[1][0]<<" "<<al1[2][0]<<endl; }
446 }
TVector3 pos
void SetP7(const TVector3 &pos, const TLorentzVector &p4)
void SetPos(const TVector3 &pos)
Definition: RhoCandidate.h:235
Int_t i
Definition: run_full.C:25
__m128 m
Definition: P4_F32vec4.h:28
Int_t a
Definition: anaLmdDigi.C:126
Double_t
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
int fe
Definition: anaLmdDigi.C:67
static Double_t GetBz(const TVector3 &position)
Return the magnetic field along the z-axis in kGs
TPad * p1
Definition: hist-t7.C:116
void SetDecayVertex(RhoCandidate *composite, const TVector3 &vtx, const TMatrixD &CovVV)
void SetCov7(const TMatrixD &cov7)
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
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 RhoKinHyperonVtxFitter::TransportToPoca ( TMatrixD a_in,
TMatrixD a_cov_in,
TMatrixD a_out,
TMatrixD a_cov_out,
TMatrixD xref 
)
private

Definition at line 816 of file RhoKinHyperonVtxFitter.cxx.

References a, b, c, cos(), Double_t, fabs(), RhoFitterBase::fDaughters, RhoCalculationTools::GetBz(), h, ptot, pz, s, sin(), sqrt(), t, x, x0, y, and z.

Referenced by Compute().

817 {
818  // by Xinying Song
819  // Transport the p7 and cov7 to the point nearest to poca or the vertex from fit
820  // it should be a iteration process
821 
822  int fNDau=fDaughters.size();
823  int nd=fNDau;
824  TMatrixD U(7*nd,7*nd);
825  int kN=0;
826  for(int k=0; k<nd; k++) {
827  kN=7*k;
828 
829  //double m = fDaughters[k]->Mass(); //[R.K. 01/2017] unused variable?
830  //check, if daughter particle is either neutral or charged
831  if (fabs(fDaughters[k]->GetCharge())<1e-6){//begin neutral
832  //Get position, energy and momentum for the daughter particle
833  double px=a_in[kN+0][0];
834  double py=a_in[kN+1][0];
835  double pz=a_in[kN+2][0];
836  //double p2=px*px+py*py+pz*pz; //[R.K. 01/2017] unused variable?
837  //double E= sqrt(m*m+p2);
838  double x=a_in[kN+4][0];
839  double y=a_in[kN+5][0];
840  double z=a_in[kN+6][0];
841  double ptot=sqrt(pz*pz+py*py+px*px);
842 
843  double t=(px*(xref[0][0]-x)+ py*(xref[1][0]-y)+pz*(xref[2][0]-z))/(ptot*ptot);
844 
845  //correct particle position to vertex, keep momentum and energy
846  a_out[kN+0][0] = px;
847  a_out[kN+1][0] = py;
848  a_out[kN+2][0] = pz;
849  a_out[kN+3][0] = a_in[kN+3][0];
850  a_out[kN+4][0] = x+px*t;
851  a_out[kN+5][0] = y+py*t;
852  a_out[kN+6][0] = z+pz*t;
853 
854  U[kN+0][kN+0] = 1.;
855  U[kN+1][kN+1] = 1.;
856  U[kN+2][kN+2] = 1.;
857  U[3+kN][3+kN] = 1.;
858 
859  U[4+kN][4+kN] = 1.;
860  U[4+kN][0+kN] = t;
861 
862  U[5+kN][5+kN] = 1.;
863  U[5+kN][1+kN] = t;
864 
865  U[6+kN][6+kN] = 1.;
866  U[6+kN][2+kN] = t;
867 
868  } // end neutral
869  else{
870  // for the charged track, the reference is Transporting Track parameters and covariance Matrix in magnetic field section III.4
871 
872  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
873  double a = -0.00299792458*bField*fDaughters[k]->GetCharge();
874 
875  //Get position, energy and momentum for the daughter particle
876 
877  double px=a_in[kN+0][0];
878  double py=a_in[kN+1][0];
879  double pz=a_in[kN+2][0];
880  double x=a_in[kN+4][0];
881  double y=a_in[kN+5][0];
882  double z=a_in[kN+6][0];
883 
884  double ptot = sqrt(px*px + py*py + pz*pz);
885  //double E=sqrt(m*m+ptot*ptot);
886  double rho = a/ptot; //1/R with R: the radius of the trajectory
887 
888  TVector3 x0(x,y,z);
889  TVector3 xp(xref[0][0], xref[1][0], xref[2][0]);
890  TVector3 delta= x0-xp;
891  TVector3 p0(px,py,pz);
892  TVector3 h(0,0,1);// assume magnetic field is only in z direction
893  double c = delta.Dot(p0);
894  double b = ptot- rho* delta.Dot( p0.Cross(h) );
895  double delta_h = delta.Dot(h);
896  double p_h = p0.Dot(h);
897  double A = -1.0* ( c - delta_h*p_h)*rho*rho/2.0;
898  // A*s^2 + b*s + c =0
899  double s1, s2,s;
900  if ((b*b-4*A*c)<0) {s1=s2=0;}
901  else{
902  s1=(-1.0*b -sqrt(b*b-4*A*c))/(2.0*A);
903  s2=(-1.0*b +sqrt(b*b-4*A*c))/(2.0*A);
904 
905  }
906 
907  double rs1=rho*s1;
908  double rs2=rho*s2;
909 
910  TVector3 x1(x+px/a*sin(rs1)-py/a*(1-cos(rs1)), y + py/a*sin(rs1)+px/a*(1-cos(rs1)), z+pz/ptot*s1 );
911  TVector3 x2(x+px/a*sin(rs2)-py/a*(1-cos(rs2)), y + py/a*sin(rs2)+px/a*(1-cos(rs2)), z+pz/ptot*s2 );
912  double d1= (x1-xp).Mag();
913  double d2= (x2-xp).Mag();
914  if(d1<=d2) {s=s1;}
915  else{s=s2;}
916  double cos_rho_s=cos(rho*s);
917  double sin_rho_s=sin(rho*s);
918 
919  a_out[kN+0][0] = px*cos_rho_s-py*sin_rho_s;
920  a_out[kN+1][0] = py*cos_rho_s+px*sin_rho_s;
921  a_out[kN+2][0] = pz;
922  a_out[kN+3][0] = a_in[kN+3][0];
923  a_out[kN+4][0] = x + (px*sin_rho_s - py*(1-cos_rho_s))/a;
924  a_out[kN+5][0] = y + (py*sin_rho_s + px*(1-cos_rho_s))/a;
925  a_out[kN+6][0] = z + (pz/ptot)*s;
926 
927 
928  //matrix to calculate the corrected covariance matrix
929  U[kN+0][kN+0] = cos_rho_s;
930  U[kN+0][kN+1] = -sin_rho_s;
931 
932  U[kN+1][kN+0] = sin_rho_s;
933  U[kN+1][kN+1] = cos_rho_s;
934 
935  U[kN+2][kN+2] = 1.;
936  U[3+kN][3+kN] = 1.;
937 
938  U[4+kN][0+kN] = sin_rho_s/a;
939  U[4+kN][1+kN] = -1.*(1.-cos_rho_s)/a;
940  U[4+kN][4+kN] = 1.;
941 
942  U[5+kN][0+kN] = (1.-cos_rho_s)/a;
943  U[5+kN][1+kN] = sin_rho_s/a;
944  U[5+kN][5+kN] = 1.;
945 
946  U[6+kN][2+kN] = s/ptot;
947  U[6+kN][6+kN] = 1.;
948 
949 
950  }// end charged
951 
952  }//end k
953 
954  TMatrixD U_t=U;
955  U_t=U_t.T();
956  a_cov_out = U*a_cov_in*U_t;
957 
958  }
Double_t x0
Definition: checkhelixhit.C:70
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
TTree * b
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
TLorentzVector s
Definition: Pnd2DStar.C:50
Double_t ptot
Definition: checkhelixhit.C:68
Int_t a
Definition: anaLmdDigi.C:126
Double_t
Double_t z
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
Double_t x
static Double_t GetBz(const TVector3 &position)
Return the magnetic field along the z-axis in kGs
TTree * t
Definition: bump_analys.C:13
Double_t y
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
double pz[39]
Definition: pipisigmas.h:14
void RhoKinHyperonVtxFitter::TransportToVertex ( TMatrixD a_in,
TMatrixD a_cov_in,
TMatrixD a_out,
TMatrixD a_cov_out,
TMatrixD xref 
)
private

Definition at line 961 of file RhoKinHyperonVtxFitter.cxx.

References a, atan2(), Double_t, fabs(), RhoFitterBase::fDaughters, RhoCalculationTools::GetBz(), ptot, pz, s, sqrt(), t, x, y, and z.

Referenced by Compute().

962  {
963  //modified by Xinying Song, original version is from J.Puetz
964  //different from TransportToPoca(), this is for the daughters after vertex fit. their momentum is transported to the vertex fitted.
965 
966  int fNDau=fDaughters.size();
967  int nd=fNDau;
968  TMatrixD U(7*nd,7*nd);
969  int kN=0;
970  for(int k=0; k<nd; k++) {
971  kN=7*k;
972 
973  //double m = fDaughters[k]->Mass(); //[R.K. 01/2017] unused variable?
974  //check, if daughter particle is either neutral or charged
975  if (fabs(fDaughters[k]->GetCharge())<1e-6){//begin neutral
976 
977  //Get position, energy and momentum for the daughter particle
978  double px=a_in[kN+0][0];
979  double py=a_in[kN+1][0];
980  double pz=a_in[kN+2][0];
981  //double p2=px*px+py*py+pz*pz; //[R.K. 01/2017] unused variable?
982  //double E= sqrt(m*m+p2);
983  double x=a_in[kN+4][0];
984  double y=a_in[kN+5][0];
985  double z=a_in[kN+6][0];
986 
987  //correct particle position to vertex, keep momentum and energy
988  a_out[kN+0][0] = px;
989  a_out[kN+1][0] = py;
990  a_out[kN+2][0] = pz;
991  a_out[kN+3][0] = a_in[kN+3][0];
992  a_out[kN+4][0] = xref[0][0];
993  a_out[kN+5][0] = xref[1][0];
994  a_out[kN+6][0] = xref[2][0];
995  double s=sqrt((xref[0][0]-x)*(xref[0][0]-x)+(xref[1][0]-y)*(xref[1][0]-y) + (xref[2][0]-z)*(xref[2][0]-z));
996  double ptot=sqrt(px*px+py*py+pz*pz);
997  double t=s/ptot;
998 
999  //matrix U corrects the covariant matrix a_cov_in to a_cov_out= U * a_cov_in * U^T
1000  //note that x_new= x0- px*t;
1001 
1002  U[kN+0][kN+0] = 1.;
1003  U[kN+1][kN+1] = 1.;
1004  U[kN+2][kN+2] = 1.;
1005  U[3+kN][3+kN] = 1.;
1006 
1007  U[4+kN][4+kN] = 1.;
1008  U[4+kN][0+kN] = -1.*t;
1009 
1010  U[5+kN][5+kN] = 1.;
1011  U[5+kN][1+kN] = -1.*t;
1012 
1013  U[6+kN][6+kN] = 1.;
1014  U[6+kN][2+kN] = -1.*t;
1015 
1016 
1017  }//end neutral
1018 
1019  else{ // if particle is charged
1020 
1021  Double_t bField = 0.1*RhoCalculationTools::GetBz(fDaughters[k]->Pos()); // T, assume field in z only
1022  double a = -0.00299792458*bField*fDaughters[k]->GetCharge();
1023 
1024  // if(fVerbose)cout << "a " << a << endl;
1025 
1026  //Get position, energy and momentum for the daughter particle
1027 
1028  double px=a_in[kN+0][0];
1029  double py=a_in[kN+1][0];
1030  double pz=a_in[kN+2][0];
1031  double x=a_in[kN+4][0];
1032  double y=a_in[kN+5][0];
1033  double z=a_in[kN+6][0];
1034 
1035  double ptot = sqrt(px*px + py*py + pz*pz);
1036  //double E=sqrt(m*m+ptot*ptot);
1037  double rho = a/ptot; //1/R with R: the radius of the trajectory
1038 
1039  //double s=(xref[2][0]-z)*ptot/pz;
1040  double cos_rho_s = 1+a*(py*(xref[0][0]-x)-px*(xref[1][0]-y))/(ptot*ptot-pz*pz);
1041  double sin_rho_s = a*(px*(xref[0][0]-x) + py*(xref[1][0]-y))/(ptot*ptot-pz*pz);
1042 
1043 
1044 
1045  //double s = atan2(sin_rho_s,cos_rho_s);
1046  double s = atan2(sin_rho_s,cos_rho_s)/rho ;
1047  a_out[kN+0][0] = px*cos_rho_s-py*sin_rho_s;
1048  a_out[kN+1][0] = py*cos_rho_s+px*sin_rho_s;
1049  a_out[kN+2][0] = pz;
1050  a_out[kN+3][0] = a_in[kN+3][0];
1051  a_out[kN+4][0] = x + (px*sin_rho_s - py*(1-cos_rho_s))/a;
1052  a_out[kN+5][0] = y + (py*sin_rho_s + px*(1-cos_rho_s))/a;
1053  a_out[kN+6][0] = z + (pz/ptot)*s;
1054 
1055 
1056  //matrix to calculate the corrected covariance matrix
1057  U[kN+0][kN+0] = cos_rho_s;
1058  U[kN+0][kN+1] = -sin_rho_s;
1059 
1060  U[kN+1][kN+0] = sin_rho_s;
1061  U[kN+1][kN+1] = cos_rho_s;
1062 
1063  U[kN+2][kN+2] = 1.;
1064  U[3+kN][3+kN] = 1.;
1065 
1066  U[4+kN][0+kN] = sin_rho_s/a;
1067  U[4+kN][1+kN] = -1.*(1.-cos_rho_s)/a;
1068  U[4+kN][4+kN] = 1.;
1069 
1070  U[5+kN][0+kN] = (1.-cos_rho_s)/a;
1071  U[5+kN][1+kN] = sin_rho_s/a;
1072  U[5+kN][5+kN] = 1.;
1073 
1074  U[6+kN][2+kN] = s/ptot;
1075  U[6+kN][6+kN] = 1.;
1076 
1077 
1078  }// end charged
1079 
1080  }//end k
1081 
1082  TMatrixD U_t=U;
1083  U_t=U_t.T();
1084  a_cov_out = U*a_cov_in*U_t;
1085 
1086  }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
TLorentzVector s
Definition: Pnd2DStar.C:50
Double_t ptot
Definition: checkhelixhit.C:68
Int_t a
Definition: anaLmdDigi.C:126
Double_t
Double_t z
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
std::vector< RhoCandidate * > fDaughters
Definition: RhoFitterBase.h:69
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
Double_t x
static Double_t GetBz(const TVector3 &position)
Return the magnetic field along the z-axis in kGs
TTree * t
Definition: bump_analys.C:13
Double_t y
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
double pz[39]
Definition: pipisigmas.h:14

Member Data Documentation

TMatrixD RhoKinHyperonVtxFitter::al0
private
TMatrixD RhoKinHyperonVtxFitter::al1
private
TMatrixD RhoKinHyperonVtxFitter::covC
private
double RhoKinHyperonVtxFitter::fChi2Diff
private

Definition at line 86 of file RhoKinHyperonVtxFitter.h.

double RhoFitterBase::fChiSquare
protectedinherited
double RhoKinHyperonVtxFitter::fchiSquare
private

Definition at line 108 of file RhoKinHyperonVtxFitter.h.

std::vector<RhoCandidate*> RhoFitterBase::fDaughters
protectedinherited
RhoCandidate* RhoFitterBase::fHeadOfTree
protectedinherited
bool RhoKinHyperonVtxFitter::fIterateExact
private
double RhoKinHyperonVtxFitter::fMass
private

Definition at line 95 of file RhoKinHyperonVtxFitter.h.

Referenced by AddMassConstraint(), and ReadMassKinMatrix().

int RhoKinHyperonVtxFitter::fMassConstraint
private

Definition at line 98 of file RhoKinHyperonVtxFitter.h.

Referenced by AddMassConstraint(), Compute(), and RhoKinHyperonVtxFitter().

double RhoKinHyperonVtxFitter::fMinDChisq
private

Definition at line 102 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), RhoKinHyperonVtxFitter(), and SetMinDChisq().

Int_t RhoKinHyperonVtxFitter::fNc
private

Definition at line 78 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ReadKinMatrix(), ReadMassKinMatrix(), and SetMatrices().

Int_t RhoKinHyperonVtxFitter::fNcon
private

Definition at line 75 of file RhoKinHyperonVtxFitter.h.

Referenced by ReadKinMatrix(), ReadMassKinMatrix(), and SetMatrices().

int RhoFitterBase::fNDegreesOfFreedom
protectedinherited
int RhoKinHyperonVtxFitter::fnDof
private

Definition at line 107 of file RhoKinHyperonVtxFitter.h.

Int_t RhoKinHyperonVtxFitter::fNiter
private

Definition at line 79 of file RhoKinHyperonVtxFitter.h.

Referenced by SetMatrices().

int RhoKinHyperonVtxFitter::fNMaxIterations
private
Int_t RhoKinHyperonVtxFitter::fNpar
private

Definition at line 73 of file RhoKinHyperonVtxFitter.h.

Referenced by ReadKinMatrix(), ReadMassKinMatrix(), and SetMatrices().

Int_t RhoKinHyperonVtxFitter::fNpart
private

Definition at line 74 of file RhoKinHyperonVtxFitter.h.

Referenced by SetMatrices().

Int_t RhoKinHyperonVtxFitter::fNumKnown
private

Definition at line 80 of file RhoKinHyperonVtxFitter.h.

Int_t RhoKinHyperonVtxFitter::fNvar
private

Definition at line 72 of file RhoKinHyperonVtxFitter.h.

Referenced by SetMatrices().

double RhoKinHyperonVtxFitter::fPull
private

Definition at line 87 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), and GetPull().

Bool_t RhoFitterBase::fVerbose
protectedinherited
TMatrixD RhoKinHyperonVtxFitter::mD
private

Definition at line 66 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ReadKinMatrix(), and ReadMassKinMatrix().

TMatrixD RhoKinHyperonVtxFitter::md
private

Definition at line 68 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ReadKinMatrix(), and ReadMassKinMatrix().

TMatrixD RhoKinHyperonVtxFitter::mE
private

Definition at line 67 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ReadKinMatrix(), and ReadMassKinMatrix().

TMatrixD RhoKinHyperonVtxFitter::mPull
private

Definition at line 69 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ResetMatrices(), and SetMatrices().

int RhoKinHyperonVtxFitter::niter
private

Definition at line 85 of file RhoKinHyperonVtxFitter.h.

Int_t RhoKinHyperonVtxFitter::NumCon
private

Definition at line 81 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), and SetMatrices().

TMatrixD RhoKinHyperonVtxFitter::V_al0
private
TMatrixD RhoKinHyperonVtxFitter::V_al1
private

Definition at line 63 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ResetMatrices(), and SetMatrices().

TMatrixD RhoKinHyperonVtxFitter::vtx_ex
private
TMatrixD RhoKinHyperonVtxFitter::vtx_st
private

Definition at line 92 of file RhoKinHyperonVtxFitter.h.

Referenced by Compute(), ResetMatrices(), and SetMatrices().


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