22 #include "FairGeaneUtil.h"
23 #include "FairTrackParH.h"
32 #include "FairGeanePro.h"
48 const TVector3& poserr,
49 const TVector3& momerr,
52 :
GFAbsTrackRep(5), _geane(geane), _pdg(PDGCode), _backw(0), _spu(1)
54 FairTrackParP
par(plane.
getO(),
mom,poserr,momerr,(int)TMath::Sign(1.0, q),plane.
getO(),plane.
getU(),plane.
getV());
67 double* covarray=
par.GetCov();
82 const TVector3& poserr,
83 const TVector3& momerr,
86 :
GFAbsTrackRep(5), _geane(geane), _pdg(PDGCode), _backw(0), _spu(1)
101 double* covarray=
par.GetCov();
103 for(
int i=0;
i<5;++
i){
104 for(
int j=
i;j<5;++j){
130 TMatrixT<double>& statePred)
132 TMatrixT<double> covPred(5,5);
140 TMatrixT<double>& statePred,
141 TMatrixT<double>& covPred)
144 GFException exc(
"GEANE propagation not possible for p.theta<THETACUT",__LINE__,__FILE__);
150 TVector3 o=pl.
getO();
151 TVector3 u=pl.
getU();
152 TVector3
v=pl.
getV();
158 _geane->PropagateFromPlane(ufrom,vfrom);
159 _geane->PropagateToPlane(o,u,v);
161 FairTrackParP result;
162 FairTrackParH result2;
171 for(
int i=0;
i<5;++
i){
172 for(
int j=
i;j<5;++j){
173 cova[count++]=
fCov[
i][j];
178 GFException exc(
"GeaneTrackRep: PROTECT AGAINST LOW MOMENTA",__LINE__,__FILE__);
190 TVector3
pos(par.GetX(),par.GetY(),par.GetZ());
204 GFException exc(
"GEANE propagation failed",__LINE__,__FILE__);
210 double l=
_geane->GetLengthAtPCA();
212 statePred[0][0]=result.GetQp();
213 statePred[1][0]=result.GetTV();
214 statePred[2][0]=result.GetTW();
215 statePred[3][0]=result.GetV();
216 statePred[4][0]=result.GetW();
220 double* rescov=result.GetCov();
222 for(
int i=0;
i<5;++
i){
223 for(
int j=
i;j<5;++j){
224 covPred[
i][j]=rescov[
count];
225 if(
i!=j)covPred[j][
i]=rescov[
count];
231 _spu=result.GetSPU();
249 TVector3& dirInPoca){
251 GFException exc(
"GEANE propagation not possible for p.theta<THETACUT",__LINE__,__FILE__);
256 TMatrixT<double> statePred(dim,1);
257 TMatrixT<double> covPred(dim,dim);
266 _geane->PropagateFromPlane(ufrom,vfrom);
270 for(
int i=0;
i<5;++
i){
271 for(
int j=
i;j<5;++j){
272 cova[count++]=
fCov[
i][j];
277 GFException exc(
"GeaneTrackRep: PROTECT AGAINST LOW MOMENTA",__LINE__,__FILE__);
294 _geane->PropagateToVirtualPlaneAtPCA(1);
298 _geane->BackTrackToVirtualPlaneAtPCA(1);
301 FairTrackParP result;
305 GFException exc(
"GEANE propagation failed",__LINE__,__FILE__);
312 statePred[0][0]=result.GetQp();
313 statePred[1][0]=result.GetTV();
314 statePred[2][0]=result.GetTW();
315 statePred[3][0]=result.GetV();
316 statePred[4][0]=result.GetW();
318 double* rescov=result.GetCov();
320 for(
int i=0;
i<5;++
i){
321 for(
int j=
i;j<5;++j){
322 covPred[
i][j]=rescov[
count];
323 if(
i!=j)covPred[j][
i]=rescov[
count];
328 poca.SetXYZ(result.GetX(),result.GetY(),result.GetZ());
329 dirInPoca = result.GetJVer().Cross( result.GetKVer() );
335 const TVector3& point2,
338 TVector3& poca_onwire)
341 GFException exc(
"GEANE propagation not possible for p.theta<THETACUT",__LINE__,__FILE__);
352 distance1 = (point1 - start).Mag();
353 distance2 = (point2 - start).Mag();
355 if(distance1 < distance2) maxdistance = distance2;
356 else maxdistance = distance1;
360 TVector3
point(0,0,0);
365 Float_t trklength = 0.;
370 for(
int i = 0;
i < 5;
i++)
for(
int j = 0; j < 5; j++) cov55[
i][j] =
fCov[
i][j];
372 util.FromMat25ToVec15(cov55, cova);
383 _geane->ActualFindPCA(pca, &par, direction);
384 Int_t findpca =
_geane->FindPCA(pca,
_pdg, point, point1, point2, maxdistance, Rad, poca, poca_onwire, Di, trklength);
387 GFException exc(
"findpca failure", __LINE__,__FILE__);
392 dirInPoca.SetXYZ(0., 0., 0.);
411 _geane->PropagateFromPlane(ufrom,vfrom);
414 for(
int i=0;
i<5;++
i){
415 for(
int j=
i;j<5;++j){
416 cova[count++]=
fCov[
i][j];
421 GFException exc(
"GeaneTrackRep: PROTECT AGAINST LOW MOMENTA",__LINE__,__FILE__);
433 _geane->PropagateToVirtualPlaneAtPCA(2);
437 _geane->BackTrackToVirtualPlaneAtPCA(2);
440 FairTrackParP result;
445 GFException exc(
"GEANE propagation failed",__LINE__,__FILE__);
450 return _geane->GetPCAOnWire();
461 TMatrixT<double> statePred(
fState);
463 return pl.
getO()+(statePred[3][0]*pl.
getU())+(statePred[4][0]*pl.
getV());
469 TMatrixT<double> statePred(
fState);
472 TVector3
mom = fSPU*pl.
getNormal()+fSPU*statePred[1][0]*pl.
getU()+fSPU*statePred[2][0]*pl.
getV();
473 mom.SetMag(1./
fabs(statePred[0][0]));
479 TMatrixT<double> statePred(
fState);
483 mom.SetMag(1./
fabs(statePred[0][0]));
484 pos = pl.
getO()+(statePred[3][0]*pl.
getU())+(statePred[4][0]*pl.
getV());
492 TMatrixT<double> statePred(
fState), covPred(
fCov);
496 pos = pl.
getO()+(statePred[3][0]*pl.
getU())+(statePred[4][0]*pl.
getV());
500 mom = fSPU*pl.
getNormal()+fSPU*statePred[1][0]*pl.
getU()+fSPU*statePred[2][0]*pl.
getV();
501 mom.SetMag(1./
fabs(statePred[0][0]));
507 for(
int i = 0;
i < 5;
i++)
for(
int j = 0; j < 5; j++) cov55[
i][j] = covPred[
i][j];
510 util.FromMat25ToVec15(cov55, cov15);
512 FairTrackParP parPred(statePred[3][0],
513 statePred[4][0], statePred[1][0],
514 statePred[2][0], statePred[0][0],
519 parPred.GetMARSCov(cov66);
520 for(
int i = 0;
i < 6;
i++)
for(
int j = 0; j < 6; j++) cov[
i][j] = cov66[
i][j];
virtual void getPosMomCov(const GFDetPlane &pl, TVector3 &pos, TVector3 &mom, TMatrixT< double > &cov)
method which gets position, momentum and 6x6 covariance matrix
virtual double extrapolate(const GFDetPlane &, TMatrixT< double > &statePred)
returns the tracklength spanned in this extrapolation
Base Class for genfit track representations. Defines interface for track parameterizations.
Detector plane genfit geometry class.
void extrapolateToLine(const TVector3 &point1, const TVector3 &point2, TVector3 &poca, TVector3 &dirInPoca, TVector3 &poca_onwire)
This method extrapolates to the point of closest approach to a line.
unsigned int fDimension
Dimensionality of track representation.
void extrapolateToPoint(const TVector3 &pos, TVector3 &poca, TVector3 &dirInPoca)
This method is to extrapolate the track to point of closest approach to a point in space...
unsigned int getDim() const
returns dimension of state vector
virtual void getPosMom(const GFDetPlane &, TVector3 &pos, TVector3 &mom)
friend F32vec4 fabs(const F32vec4 &a)
Exception class for error handling in GENFIT (provides storage for diagnostic information) ...
void setFatal(bool b=true)
set fatal flag. if this is true, the fit stops for this current track repr.
TMatrixT< double > fState
The vector of track parameters.
TVector3 getNormal() const
TVector3 getPocaOnLine(const TVector3 &p1, const TVector3 &p2, bool back=false)
TMatrixT< double > fCov
The covariance matrix.
TVector3 dist(const TVector3 &point) const