3 // Author: Anders Vestbo <mailto:vestbo$fi.uib.no>
4 //*-- Copyright © ALICE HLT Group
5 //_____________________________________________________________
11 #include "AliHLTStandardIncludes.h"
13 #include "AliHLTLogging.h"
14 #include "AliHLTTransform.h"
15 #include "AliHLTVertex.h"
16 #include "AliHLTDataCompressorHelper.h"
18 #include "AliHLTModelTrack.h"
24 ClassImp(AliHLTModelTrack)
26 AliHLTModelTrack::AliHLTModelTrack()
28 // default constructor
40 fArraysCreated=kFALSE;
44 AliHLTModelTrack::~AliHLTModelTrack()
50 void AliHLTModelTrack::DeleteArrays()
60 delete [] fCrossingAngle;
62 delete [] fParSigmaY2;
64 delete [] fParSigmaZ2;
71 for(Int_t i=0; i<AliHLTTransform::GetNRows(fPatch); i++)
72 delete [] fOverlap[i];
75 fArraysCreated=kFALSE;
78 void AliHLTModelTrack::Init(Int_t /*slice*/,Int_t patch)
85 fNClusters=AliHLTTransform::GetNRows(patch);
87 Int_t nrows = AliHLTTransform::GetNRows(fPatch);
88 fClusters = new AliHLTClusterModel[nrows];
89 fPad = new Float_t[nrows];
90 fTime = new Float_t[nrows];
91 fCrossingAngle = new Float_t[nrows];
92 fParSigmaY2 = new Float_t[nrows];
93 fParSigmaZ2 = new Float_t[nrows];
94 fTrackModel = new AliHLTTrackModel;
96 fOverlap = new Int_t*[nrows];
97 fNoverlaps = new Int_t[nrows];
100 memset(fNoverlaps,0,nrows*sizeof(Int_t));
101 memset(fClusters,0,nrows*sizeof(AliHLTClusterModel));
102 memset(fPad,0,nrows*sizeof(Float_t));
103 memset(fTime,0,nrows*sizeof(Float_t));
104 memset(fCrossingAngle,0,nrows*sizeof(Float_t));
105 memset(fParSigmaY2,0,nrows*sizeof(Float_t));
106 memset(fParSigmaZ2,0,nrows*sizeof(Float_t));
107 memset(fTrackModel,0,sizeof(AliHLTTrackModel));
108 for(Int_t i=0; i<nrows; i++)
110 fOverlap[i] = new Int_t[fMaxOverlaps];
111 for(Int_t j=0; j<fMaxOverlaps; j++)
113 fClusters[i].fSlice = -1;
115 fArraysCreated=kTRUE;
120 void AliHLTModelTrack::CalculateClusterWidths(Int_t row,Bool_t parametrize)
126 Int_t index = row - AliHLTTransform::GetFirstRow(fPatch);
127 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
129 cerr<<"AliHLTModelTrack::CalculcateClusterWidths : Wrond index "<<index<<" row "<<row<<endl;
132 Int_t patch = AliHLTTransform::GetPatch(row);
133 AliHLTTransform::Slice2Sector(0,row,sr,lr);
134 AliHLTTransform::Raw2Local(xyz,sr,lr,GetPadHit(row),GetTimeHit(row));
135 fParSigmaY2[index] = AliHLTTransform::GetParSigmaY2(row,xyz[2],GetCrossingAngleLUT(row));
136 fParSigmaZ2[index] = AliHLTTransform::GetParSigmaZ2(row,xyz[2],GetTgl());
140 fParSigmaY2[index] = (fParSigmaY2[index] + (1./12)*pow(AliHLTTransform::GetPadPitchWidth(patch),2) );
141 fParSigmaY2[index] *= 0.108;
143 fParSigmaY2[index] *= 2.07;
145 fParSigmaZ2[index] = (fParSigmaZ2[index] + (1./12)*pow(AliHLTTransform::GetZWidth(),2) );
146 fParSigmaZ2[index] *= 0.169;
148 fParSigmaZ2[index] *= 1.77;
151 //convert to raw coordinates:
152 fParSigmaY2[index] /= pow(AliHLTTransform::GetPadPitchWidth(patch),2);
153 fParSigmaZ2[index] /= pow(AliHLTTransform::GetZWidth(),2);
156 void AliHLTModelTrack::SetCluster(Int_t row,Float_t fpad,Float_t ftime,Float_t charge,
157 Float_t sigmaY2,Float_t sigmaZ2,Int_t npads)
159 AliHLTClusterModel *cl = GetClusterModel(row);
161 //First bit: Cluster is present or not
162 //Second bit: Cluster was set, meaning an fit attempt was done (if true)
164 cl->fPresent |= 0x2; //set second bit to true, because a fit attempt has been made
166 Int_t patch = AliHLTTransform::GetPatch(row);
167 if(!charge || npads == 1)
169 cl->fPresent &= ~0x1; //set first bit to false
173 cl->fPresent|=0x1;//set first bit to true
174 cl->fDPad = (fpad - GetPadHit(row))/(AliHLTDataCompressorHelper::GetXYResidualStep(row)/AliHLTTransform::GetPadPitchWidth(patch));
175 cl->fDTime = (ftime - GetTimeHit(row))/(AliHLTDataCompressorHelper::GetZResidualStep(row)/AliHLTTransform::GetZWidth());
176 cl->fDCharge = charge;
177 if(sigmaY2==0 && sigmaZ2==0)
179 cl->fDSigmaY=0;//if width is zero, shape is not supposed to be written
184 //cl->fDSigmaY2 = (sigmaY2 - GetParSigmaY2(row))/(pow(AliHLTDataCompressorHelper::GetXYWidthStep(),2)/pow(AliHLTTransform::GetPadPitchWidth(patch),2));
185 //cl->fDSigmaZ2 = (sigmaZ2 - GetParSigmaZ2(row))/(pow(AliHLTDataCompressorHelper::GetZWidthStep(),2)/pow(AliHLTTransform::GetZWidth(),2));
186 cl->fDSigmaY = (sqrt(sigmaY2) - sqrt(GetParSigmaY2(row)))/(AliHLTDataCompressorHelper::GetXYWidthStep()/AliHLTTransform::GetPadPitchWidth(patch));
187 cl->fDSigmaZ = (sqrt(sigmaZ2) - sqrt(GetParSigmaZ2(row)))/(AliHLTDataCompressorHelper::GetZWidthStep()/AliHLTTransform::GetZWidth());
194 void AliHLTModelTrack::Set(AliHLTTrack *tpt)
196 // Sets track and does initialization
197 AliHLTModelTrack *tr = (AliHLTModelTrack*)tpt;
198 SetRowRange(tr->GetFirstRow(),tr->GetLastRow());
199 SetPhi0(tr->GetPhi0());
200 SetKappa(tr->GetKappa());
201 SetFirstPoint(tr->GetFirstPointX(),tr->GetFirstPointY(),tr->GetFirstPointZ());
202 SetLastPoint(tr->GetLastPointX(),tr->GetLastPointY(),tr->GetLastPointZ());
204 SetPsi(tr->GetPsi());
205 SetTgl(tr->GetTgl());
206 SetCharge(tr->GetCharge());
210 cerr<<"AliHLTModelTrack::Set : Init has already been called for this object!"<<endl;
214 //Init(tr->fSlice,tr->fPatch);
216 memcpy(fClusters,tr->fClusters,AliHLTTransform::GetNRows(fPatch)*sizeof(AliHLTClusterModel));
217 memcpy(fPad,tr->fPad,AliHLTTransform::GetNRows(fPatch)*sizeof(Float_t));
218 memcpy(fTime,tr->fTime,AliHLTTransform::GetNRows(fPatch)*sizeof(Float_t));
219 memcpy(fParSigmaY2,tr->fParSigmaY2,AliHLTTransform::GetNRows(fPatch)*sizeof(Float_t));
220 memcpy(fParSigmaZ2,tr->fParSigmaZ2,AliHLTTransform::GetNRows(fPatch)*sizeof(Float_t));
221 memcpy(fCrossingAngle,tr->fCrossingAngle,AliHLTTransform::GetNRows(fPatch)*sizeof(Float_t));
222 memcpy(fTrackModel,tr->fTrackModel,sizeof(AliHLTTrackModel));
226 Int_t AliHLTModelTrack::GetNPresentClusters()
228 //Return the number of assigned clusters to the track.
229 //Differs from fNClusters, which should be equal to the
230 //number of padrows in the present patch.
234 for(Int_t i=AliHLTTransform::GetFirstRow(fPatch); i<=AliHLTTransform::GetLastRow(fPatch); i++)
241 void AliHLTModelTrack::FillModel()
243 //Fill the track structure
245 if(fNClusters != AliHLTTransform::GetNRows(fPatch))
247 cout<<"AliHLTModelTrack::FillModel : fNClusters != nrows; beware, this could be caused by a bug!!!"<<endl;
248 fNClusters = AliHLTTransform::GetNRows(fPatch);
253 cerr<<"AliHLTModelTrack::FillModel() : No trackmodel "<<endl;
259 GetClosestPoint(&vertex,impact[0],impact[1],impact[2]);
260 fTrackModel->fKappa = GetKappa();
261 fTrackModel->fPhi = atan2(impact[1],impact[0]);
262 fTrackModel->fD = sqrt(impact[0]*impact[0] + impact[1]*impact[1]);
263 fTrackModel->fZ0 = impact[2];
264 fTrackModel->fTgl = GetTgl();
266 //We have to check on which of the vertex the track fit is lying
267 //This we need to encode the azimuthal angle coordinate of the center of curvature.
268 if(GetRadius() < sqrt(GetCenterX()*GetCenterX()+GetCenterY()*GetCenterY()))
269 fTrackModel->fD *=-1;
273 void AliHLTModelTrack::FillTrack()
275 //Fill the track parameters from the structure.
279 cerr<<"AliHLTModelTrack::FillTrack() : No data!!"<<endl;
282 SetKappa(fTrackModel->fKappa);
283 Double_t impact[3],psi;
284 Float_t trackPhi0 = fTrackModel->fPhi;
285 if(fTrackModel->fD < 0)
286 trackPhi0 += AliHLTTransform::Pi();
287 Int_t charge = -1*(Int_t)copysign(1.,GetKappa());
288 impact[0] = fabs(fTrackModel->fD)*cos(fTrackModel->fPhi);
289 impact[1] = fabs(fTrackModel->fD)*sin(fTrackModel->fPhi);
290 impact[2] = fTrackModel->fZ0;
292 psi = trackPhi0 - charge*0.5*AliHLTTransform::Pi();
294 psi += 2*AliHLTTransform::Pi();
297 SetFirstPoint(impact[0],impact[1],impact[2]);
299 SetTgl(fTrackModel->fTgl);
300 SetPt((AliHLTTransform::GetBFact()*AliHLTTransform::GetBField())/fabs(GetKappa()));
301 fNClusters = AliHLTTransform::GetNRows(fPatch);
304 for(Int_t i=AliHLTTransform::GetFirstRow(fPatch); i<=AliHLTTransform::GetLastRow(fPatch); i++)
306 AliHLTClusterModel *cl = GetClusterModel(i);
315 if(cl->fSlice < 0 || cl->fSlice > 35)
317 cerr<<"AliHLTModelTrack::FillTrack : Slice out of range "<<cl->fSlice<<" on row "<<i<<endl;
323 AliHLTTransform::Local2GlobalAngle(&angle,cl->fSlice);
324 if(!CalculateReferencePoint(angle,AliHLTTransform::Row2X(i)))
328 cerr<<"AliHLTModelTrack::FillTrack : Track does not cross slice "<<cl->fSlice<<" row "<<i<<" Points "
329 <<GetPointX()<<" "<<GetPointY()<<" "<<GetPointZ()<<endl;
337 Float_t hit[3] = {GetPointX(),GetPointY(),GetPointZ()};
339 AliHLTTransform::Slice2Sector(cl->fSlice,i,sector,row);
340 AliHLTTransform::Global2Raw(hit,sector,row);
343 SetTimeHit(i,hit[2]);
345 Float_t crossingangle = GetCrossingAngle(i,cl->fSlice);
347 SetCrossingAngleLUT(i,crossingangle);
348 CalculateClusterWidths(i,kTRUE);
353 void AliHLTModelTrack::SetPadHit(Int_t row,Float_t pad)
356 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
357 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
359 cerr<<"AliHLTModelTrack::SetPadHit() : Wrong index: "<<index<<endl;
365 void AliHLTModelTrack::SetTimeHit(Int_t row,Float_t time)
368 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
369 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
371 cerr<<"AliHLTModelTrack::SetTimeHit() : Wrong index: "<<index<<endl;
377 void AliHLTModelTrack::SetCrossingAngleLUT(Int_t row,Float_t angle)
379 // sets LUT for crossing angle
380 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
381 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
383 cerr<<"AliHLTModelTrack::SetCrossingAngle() : Wrong index: "<<index<<endl;
386 fCrossingAngle[index]=angle;
389 void AliHLTModelTrack::SetOverlap(Int_t row,Int_t id)
392 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
393 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
395 cerr<<"AliHLTModelTrack::SetOverlap() : Wrong index: "<<index<<endl;
398 if(fNoverlaps[index] >= fMaxOverlaps) return;
399 fOverlap[index][fNoverlaps[index]++] = id;
402 Bool_t AliHLTModelTrack::IsPresent(Int_t row)
404 AliHLTClusterModel *cl = GetClusterModel(row);
405 return (Bool_t)(cl->fPresent & 0x1);
408 Bool_t AliHLTModelTrack::IsSet(Int_t row)
410 // checks if row was set
411 AliHLTClusterModel *cl = GetClusterModel(row);
412 return (Bool_t)(cl->fPresent & 0x2);
415 Int_t AliHLTModelTrack::GetNPads(Int_t row)
417 // gets number of pads
418 AliHLTClusterModel *cl = GetClusterModel(row);
422 Bool_t AliHLTModelTrack::GetPad(Int_t row,Float_t &pad)
425 //(fpad - GetPadHit(row))/(AliHLTDataCompressorHelper::GetXYResidualStep(row)/AliHLTTransform::GetPadPitchWidth(patch));
426 AliHLTClusterModel *cl = GetClusterModel(row);
427 Int_t patch = AliHLTTransform::GetPatch(row);
428 pad = cl->fDPad*(AliHLTDataCompressorHelper::GetXYResidualStep(row)/AliHLTTransform::GetPadPitchWidth(patch)) + GetPadHit(row);
429 return IsPresent(row);
432 Bool_t AliHLTModelTrack::GetTime(Int_t row,Float_t &time)
435 AliHLTClusterModel *cl = GetClusterModel(row);
436 time = cl->fDTime*(AliHLTDataCompressorHelper::GetZResidualStep(row)/AliHLTTransform::GetZWidth()) + GetTimeHit(row);
437 return IsPresent(row);
440 Bool_t AliHLTModelTrack::GetClusterCharge(Int_t row,Int_t &charge)
442 // gets cluster's charge
443 AliHLTClusterModel *cl = GetClusterModel(row);
444 charge = (Int_t)cl->fDCharge;// + AliHLTDataCompressorHelperHelper::GetClusterCharge();
445 return IsPresent(row);
448 Bool_t AliHLTModelTrack::GetSigmaY2(Int_t row,Float_t &sigma2)
451 //cl->fDSigmaY = (sqrt(sigmaY2) - sqrt(GetParSigmaY2(row)))/(AliHLTDataCompressorHelper::GetXYWidthStep()/AliHLTTransform::GetPadPitchWidth(patch));
452 AliHLTClusterModel *cl = GetClusterModel(row);
453 Int_t patch = AliHLTTransform::GetPatch(row);
454 Float_t sigma = cl->fDSigmaY*(AliHLTDataCompressorHelper::GetXYWidthStep()/AliHLTTransform::GetPadPitchWidth(patch)) + sqrt(GetParSigmaY2(row));
455 sigma2 = sigma*sigma;
456 return IsPresent(row);
459 Bool_t AliHLTModelTrack::GetSigmaZ2(Int_t row,Float_t &sigma2)
462 //cl->fDSigmaZ = (sqrt(sigmaZ2) - sqrt(GetParSigmaZ2(row)))/(AliHLTDataCompressorHelper::GetZWidthStep()/AliHLTTransform::GetZWidth());
463 AliHLTClusterModel *cl = GetClusterModel(row);
464 Float_t sigma = cl->fDSigmaZ*(AliHLTDataCompressorHelper::GetZWidthStep()/AliHLTTransform::GetZWidth()) + sqrt(GetParSigmaZ2(row));
465 sigma2 = sigma*sigma;
466 return IsPresent(row);
469 Bool_t AliHLTModelTrack::GetPadResidual(Int_t row,Float_t &res)
472 AliHLTClusterModel *cl = GetClusterModel(row);
473 Int_t patch = AliHLTTransform::GetPatch(row);
474 res = cl->fDPad*(AliHLTDataCompressorHelper::GetXYResidualStep(row)/AliHLTTransform::GetPadPitchWidth(patch));
475 return IsPresent(row);
478 Bool_t AliHLTModelTrack::GetTimeResidual(Int_t row,Float_t &res)
480 // gets time residual
481 AliHLTClusterModel *cl = GetClusterModel(row);
482 res = cl->fDTime*(AliHLTDataCompressorHelper::GetZResidualStep(row)/AliHLTTransform::GetZWidth());
483 return IsPresent(row);
486 Bool_t AliHLTModelTrack::GetSigmaYResidual(Int_t row,Float_t &res)
488 // gets SigmaY residual (?)
489 AliHLTClusterModel *cl = GetClusterModel(row);
490 Int_t patch = AliHLTTransform::GetPatch(row);
491 res = cl->fDSigmaY*(AliHLTDataCompressorHelper::GetXYWidthStep()/AliHLTTransform::GetPadPitchWidth(patch));
492 return IsPresent(row);
495 Bool_t AliHLTModelTrack::GetSigmaZResidual(Int_t row,Float_t &res)
497 // gets SigmaZ resigual (?)
498 AliHLTClusterModel *cl = GetClusterModel(row);
499 res = cl->fDSigmaZ*(AliHLTDataCompressorHelper::GetZWidthStep()/AliHLTTransform::GetZWidth());
500 return IsPresent(row);
503 Int_t AliHLTModelTrack::GetSlice(Int_t row)
506 AliHLTClusterModel *cl = GetClusterModel(row);
510 Float_t AliHLTModelTrack::GetPadHit(Int_t row)
513 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
514 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
516 cerr<<"AliHLTModelTrack::GetPadHit() : Wrong index: "<<index<<" row "<<row<<endl;
522 Float_t AliHLTModelTrack::GetTimeHit(Int_t row)
525 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
526 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
528 cerr<<"AliHLTModelTrack::GetTimeHit() : Wrong index: "<<index<<" row "<<row<<endl;
534 Float_t AliHLTModelTrack::GetCrossingAngleLUT(Int_t row)
536 // gets LUT for crossing angle
537 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
538 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
540 cerr<<"AliHLTModelTrack::GetCrossingAngleLUT() : Wrong index: "<<index<<" row "<<row<<endl;
543 return fCrossingAngle[index];
546 Float_t AliHLTModelTrack::GetParSigmaY2(Int_t row)
548 // gets par SigmaY2 (?)
549 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
550 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
552 cerr<<"AliHLTModelTrack::GetParSigmaY2() : Wrong index: "<<index<<" row "<<row<<endl;
555 return fParSigmaY2[index];
558 Float_t AliHLTModelTrack::GetParSigmaZ2(Int_t row)
560 // gets par SigmaZ2 (?)
561 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
562 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
564 cerr<<"AliHLTModelTrack::GetParSigmaZ2() : Wrong index: "<<index<<" row "<<row<<endl;
567 return fParSigmaZ2[index];
570 Int_t AliHLTModelTrack::GetNOverlaps(Int_t row)
572 // gets number of overlaps
573 Int_t index = row - AliHLTTransform::GetFirstRow(fPatch);
574 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
576 cerr<<"AliHLTModelTrack::GetOverlap() : Wrong index: "<<index<<endl;
579 return fNoverlaps[index];
582 Int_t *AliHLTModelTrack::GetOverlaps(Int_t row)
585 Int_t index = row - AliHLTTransform::GetFirstRow(fPatch);
586 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
588 cerr<<"AliHLTModelTrack::GetOverlap() : Wrong index: "<<index<<endl;
591 return fOverlap[index];
594 AliHLTClusterModel *AliHLTModelTrack::GetClusterModel(Int_t row)
596 // gets cluster model
597 if(!fClusters) return 0;
598 Int_t index = row-AliHLTTransform::GetFirstRow(fPatch);
599 if(index < 0 || index > AliHLTTransform::GetNRows(fPatch))
601 cerr<<"AliHLTModelTrack::GetClusterModel() : Wrong index: "<<index<<endl;
604 return &fClusters[index];
607 void AliHLTModelTrack::Print(Bool_t everything)
611 cout<<"First point "<<GetFirstPointX()<<" "<<GetFirstPointY()<<" "<<GetFirstPointZ()<<endl;
612 cout<<"Last point "<<GetLastPointX()<<" "<<GetLastPointY()<<" "<<GetLastPointZ()<<endl;
613 cout<<"Pt "<<GetPt()<<" kappa "<<GetKappa()<<" tgl "<<GetTgl()<<" psi "<<GetPsi()<<" charge "<<GetCharge()<<endl;
614 cout<<"Center "<<GetCenterX()<<" "<<GetCenterY()<<endl<<endl;
617 cout<<"NHits "<<GetNClusters()<<endl;
619 cout<<"Clusters:"<<endl;
620 Int_t origslice=-1,counter=0;
621 Float_t fpad,ftime,sigmaY2,sigmaZ2;
622 for(Int_t i=AliHLTTransform::GetFirstRow(fPatch); i<=AliHLTTransform::GetLastRow(fPatch); i++)
624 AliHLTClusterModel *cl = GetClusterModel(i);
628 cout<<i<<" Empty"<<" Slice "<<cl->fSlice<<" Padcrossing "<<GetPadHit(i)<<" Timecrossing "<<GetTimeHit(i)<<" ";
629 //AliHLTTransform::RawHLT2Global(xyz,cl->fSlice,i,GetPadHit(i),GetTimeHit(i));
630 //cout<<i<<" slice "<<cl->fSlice<<" x "<<xyz[0]<<" y "<<xyz[1]<<" z "<<xyz[2];
636 GetSigmaY2(i,sigmaY2);
637 GetSigmaZ2(i,sigmaZ2);
639 origslice=cl->fSlice;
640 else if(cl->fSlice != origslice)
641 cout<<"Change in slice "<<cl->fSlice<<" "<<origslice<<endl;
642 cout<<i<<" Slice "<<cl->fSlice<<" Dpad "<<cl->fDPad<<" Dtime "<<cl->fDTime<<" Dcharge "<<cl->fDCharge;
643 cout<<" sigmaY2 "<<sigmaY2<<" sigmaZ2 "<<sigmaZ2;
644 cout<<" parsigmaY2 "<<GetParSigmaY2(i)<<" parsigmaZ2 "<<GetParSigmaZ2(i);
645 cout<<" Pad "<<fpad<<" padhit "<<GetPadHit(i)<<" Time "<<ftime<<" timehit "<<GetTimeHit(i)<<" ";
653 void AliHLTModelTrack::SetClusterLabel(Int_t row,Int_t *trackID)
655 // sets cluster label
656 AliHLTClusterModel *cl = GetClusterModel(row);
657 cl->fTrackID[0] = trackID[0];
658 cl->fTrackID[1] = trackID[1];
659 cl->fTrackID[2] = trackID[2];
661 void AliHLTModelTrack::SetClusterLabel(Int_t /*row*/,Int_t */*trackID*/)
663 // Does nothing if do_mc undefined
669 void AliHLTModelTrack::GetClusterLabel(Int_t row,Int_t *trackID)
671 // gets cluster label
672 AliHLTClusterModel *cl = GetClusterModel(row);
673 trackID[0] = cl->fTrackID[0];
674 trackID[1] = cl->fTrackID[1];
675 trackID[2] = cl->fTrackID[2];
677 void AliHLTModelTrack::GetClusterLabel(Int_t /*row*/,Int_t */*trackID*/)
679 // Does nothing if do_mc undefined