18 #include "TClonesArray.h" 58 Bool_t extrapStatus = kTRUE;
59 Double_t addChi2TrackAtCluster;
62 Int_t nCells = currentCATrack->
GetNcells();
64 if (nCells < 2)
return kFALSE;
73 Double_t *caHit1, *caHit2;
77 Double_t dX = caHit1[0] - caHit2[0];
78 Double_t
dY = caHit1[1] - caHit2[1];
79 Double_t
dZ = caHit1[2] - caHit2[2];
80 Double_t dr = TMath::Sqrt(dX*dX+dY*dY);
81 Double_t slopeX_Z = dX /
dZ;
82 Double_t slopeY_Z = dY /
dZ;
83 Double_t slopeY_R = dY / dr;
84 Double_t slope2 = slopeX_Z*slopeX_Z + slopeY_Z*slopeY_Z;
87 Double_t inversePt = 1./currentCATrack->
GetPt();
92 trackParamAtLastCluster->
SetX(caHit2[0]);
93 trackParamAtLastCluster->
SetY(caHit2[1]);
94 trackParamAtLastCluster->
SetZ(caHit2[2]);
95 trackParamAtLastCluster->
SetSlopeX(slopeX_Z);
96 trackParamAtLastCluster->
SetSlopeY(slopeY_Z);
99 Double_t inverseMomentum;
108 paramCov(0,0) = errX2;
109 paramCov(1,1) = errY2;
110 paramCov(2,2) = ( 1001. * errX2 )/ dZ / dZ;
111 paramCov(2,0) = -errX2 /
dZ;
112 paramCov(0,2) = paramCov(2,0);
114 paramCov(3,3) = ( 1001. * errY2 )/ dZ / dZ;
115 paramCov(3,1) = -errY2 /
dZ;
116 paramCov(1,3) = paramCov(3,1);
122 paramCov(4,4) = inversePt*inversePt
123 *(0.1*0.1+ (slopeX_Z*slopeX_Z *errX2 *1001. + slopeY_Z*slopeY_Z *errY2 *1001.)/dZ/dZ / slope2 / slope2);
124 paramCov(4,0) = inversePt / dZ / slope2 * errX2 * slopeX_Z;
125 paramCov(4,1) = inversePt / dZ / slope2 * errY2 * slopeY_Z;
126 paramCov(0,4) = paramCov(4,0);
127 paramCov(1,4) = paramCov(4,1);
128 paramCov(4,2) = - inversePt / slope2 * slopeX_Z * paramCov(2,2);
129 paramCov(4,3) = - inversePt / slope2 * slopeY_Z * paramCov(3,3);
130 paramCov(2,4) = paramCov(4,2);
131 paramCov(3,4) = paramCov(4,3);
134 AliInfo(
"Starting Covariance Matrix");
138 trackParamAtLastCluster->
Print(
"FULL");
143 startingTrackParam = trackParamAtLastCluster;
147 for (Int_t iCell = 0 ; iCell < nCells; iCell++) {
148 caCell = currentCATrack->
GetCell(iCell);
156 trackParamAtCluster->
SetZ(startingTrackParam->
GetZ());
160 extrapStatus =
AddMCSEffect(caCell, trackParamAtCluster);
164 kFALSE)) extrapStatus = kFALSE;
170 currentTrack->
SetChi2(currentTrack->
GetChi2() + addChi2TrackAtCluster);
173 trackParamAtCluster->
SetLocalChi2(addChi2TrackAtCluster);
175 trackParamAtCluster->
Print(
"FULL");
179 startingTrackParam = trackParamAtCluster;
182 if( (iCell == nCells-1) && trackParamAtCluster )
183 AliWarning(
"Reaching last cell but still some AliMFTTrackParameter objects in the array ...");
194 currentTrack->
Print();
200 Bool_t returnStatus = kTRUE;
201 Int_t *planeIDs = currentCell->
GetLayers();
202 Int_t startingPlaneID = planeIDs[1];
203 Int_t startingDiskID = startingPlaneID/2;
204 AliInfo(Form(
"Layer ID = %d ; Length = %d ",startingPlaneID,currentCell->
GetLength()));
208 if(startingPlaneID%2==1){
209 AliInfo(Form(
"Add MCS of Disk %d ",startingDiskID));
218 Int_t currentPlaneID = startingPlaneID;
219 AliInfo(Form(
"Layer IDs %d - %d ",planeIDs[0], planeIDs[1]));
220 while (currentPlaneID != planeIDs[0]) {
223 if(currentPlaneID%2==1){
224 AliInfo(Form(
"Add MCS of Disk %d ",currentPlaneID/2));
228 AliInfo(Form(
"Extrapolate to Plane ID %d ",currentPlaneID-1));
230 AliInfo(Form(
"After extrapolation to Z = %f",trackParam->
GetZ()));
231 trackParam->
Print(
"FULL");
252 Int_t nTracks = fMFTTracks->GetEntriesFast();
253 if (nTracks == 0)
return;
256 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
257 AliInfo(Form(
"Treating Track %d",iTrack));
318 AliInfo(
"Enter RunKalmanFilter");
326 clusterParam(0,0) = trackParamAtCluster.
GetClusterX();
327 clusterParam(1,0) = trackParamAtCluster.
GetClusterY();
329 AliInfo(Form(
"Cluster X,Y : %f %f ",clusterParam(0,0), clusterParam(1,0)));
335 AliInfo(
"actual parameter covariance matrix");
337 AliInfo(Form(
"paramWeight.Determinant = %e ",paramWeight.Determinant()));
339 if (paramWeight.Determinant() != 0) {
340 paramWeight.Invert();
345 AliInfo(
"actual parameter weight");
350 clusterWeight.Zero();
353 clusterWeight(0,0) = 1./errX2;
354 clusterWeight(1,1) = 1./errY2;
356 clusterWeight.Print();
358 TMatrixD newParamCov(paramWeight,TMatrixD::kPlus,clusterWeight);
359 AliInfo(
"new parameters weight");
362 if (newParamCov.Determinant() != 0) {
363 newParamCov.Invert();
370 AliInfo(
"new parameters covariance matrix");
376 TMatrixD tmp(clusterParam,TMatrixD::kMinus,param);
377 TMatrixD tmp2(clusterWeight,TMatrixD::kMult,tmp);
378 TMatrixD newParam(newParamCov,TMatrixD::kMult,tmp2);
392 TMatrixD tmp3(paramWeight,TMatrixD::kMult,tmp);
393 TMatrixD addChi2Track(tmp,TMatrixD::kTransposeMult,tmp3);
396 TMatrixD tmp4(clusterWeight,TMatrixD::kMult,tmp);
397 addChi2Track +=
TMatrixD(tmp,TMatrixD::kTransposeMult,tmp4);
399 return addChi2Track(0,0);
static const Double_t kYPixelPitch
Pixel pitch along Y.
const TMatrixD & GetParameters() const
return track parameters
void SetZ(Double_t z)
set Z coordinate (cm)
static Double_t DefaultPlaneZ(Int_t Id)
Return Plane Z position.
Class Doing MFT Track reconstruction.
Double_t GetClusterX() const
return cluster X coordinate (cm)
void SetLocalChi2(Double_t chi2)
set the local chi2 of the associated cluster with respect to the track
const TMatrixD & GetCovariances() const
const Int_t GetNcells() const
void SetInverseTransverseMomentum(Double_t val)
set Inverse Momentum
void PrintCell(Option_t *opt)
Bool_t AddMCSEffect(AliMFTCACell *currentCell, AliMFTTrackParam *trackParam)
void SetCovariances(const TMatrixD &covariances)
#define AliWarning(message)
void SetX(Double_t val)
set X coordinate (cm)
static const Double_t kXPixelPitch
Pixel pitch along X.
void SetTheta(double val)
void Print(const char *method, TStopwatch &timer, Int_t n)
Description of an ALICE Standalone MFT track.
void SetChi2(Double_t chi2)
set the minimum value of the function minimized by the fit
void SetTrackChi2(Double_t chi2)
set the chi2 of the track when the associated cluster was attached
virtual ~AliMFTTrackReconstructor()
Double_t GetChi2() const
return the minimum value of the function minimized by the fit
void SetMCLabel(Int_t label)
set the corresponding MC track number
virtual void Print(Option_t *opt="") const
void EvalSignedPt()
Estimate the charge sign.
#define AliCodeTimerAuto(message, counter)
AliMFTCACell * GetCell(Int_t ic) const
void EventReconstruct(TClonesArray *fMFTTracks)
Double_t GetClusterY() const
return cluster Y coordinate (cm)
AliMFTTrackReconstructor()
TObjArray * GetTrackParamAtCluster() const
Double_t GetZ() const
return Z coordinate (cm)
void SetSlopeY(Double_t val)
set Y slope
void SetY(Double_t val)
set Y coordinate (cm)
Bool_t TraceTrack(AliMFTTrack *fMFTTracks)
#define AliDebug(logLevel, message)
static Double_t DiskThicknessInX0(Int_t Id)
Return Disk thickness in X0.
Class holding the parameter of a MFT Standalone Track.
Double_t RunKalmanFilter(AliMFTTrackParam &trackParamAtCluster)
virtual void Print(Option_t *opt="") const
void SetParameters(const TMatrixD ¶meters)
set track parameters
AliMFTCATrack * GetCATrack() const
return pointer to track found by Track Finder (includes clusters)
void SetSlopeX(Double_t val)
set X slope
class TMatrixT< Double_t > TMatrixD