-//Author: Uli Frankenfeld
-//Last Modified: 06.12.2000
+// @(#) $Id$
+
+// Author: Uli Frankenfeld <mailto:franken@fi.uib.no>
+//*-- Copyright © ALICE HLT Group
+
+#include "AliL3StandardIncludes.h"
-#include <math.h>
-#include <string.h>
-#include <iostream.h>
#include "AliL3Logging.h"
#include "AliL3TrackArray.h"
#include "AliL3HoughTrack.h"
+#include "AliL3ModelTrack.h"
#include "AliL3ConfMapTrack.h"
#include "AliL3TrackSegmentData.h"
#include "AliL3Transform.h"
#include "AliL3ConfMapPoint.h"
+
+/** \class AliL3TrackArray
+<pre>
//_____________________________________________________________
+// AliL3TrackArray
//
-// The L3 TrackArray
+// Track array class
//
+</pre>
+*/
ClassImp(AliL3TrackArray)
-AliL3TrackArray::AliL3TrackArray(){
+AliL3TrackArray::AliL3TrackArray()
+{
//Default constructor
fSize = 0;
fNTracks=0;
}
-AliL3TrackArray::AliL3TrackArray(Int_t ntrack){
+AliL3TrackArray::AliL3TrackArray(Int_t ntrack)
+{
//Constructor.
fSize = 0;
fNTracks=0;
SetSize(ntrack);
}
-AliL3TrackArray::AliL3TrackArray(char* tracktype,Int_t ntrack){
+AliL3TrackArray::AliL3TrackArray(char* tracktype,Int_t ntrack)
+{
//Constructor.
fSize = 0;
fNTracks=0;
if(strcmp(tracktype,"AliL3Track")==0) fTrackType='t';
if(strcmp(tracktype,"AliL3ConfMapTrack")==0) fTrackType='c';
if(strcmp(tracktype,"AliL3HoughTrack")==0) fTrackType='h';
+ if(strcmp(tracktype,"AliL3ModelTrack")==0) fTrackType='m';
SetSize(ntrack);
}
-AliL3TrackArray::AliL3TrackArray(char* tracktype){
+AliL3TrackArray::AliL3TrackArray(char* tracktype)
+{
//Constructor.
fSize = 0;
fNTracks=0;
if(strcmp(tracktype,"AliL3Track")==0) fTrackType='t';
if(strcmp(tracktype,"AliL3ConfMapTrack")==0) fTrackType='c';
if(strcmp(tracktype,"AliL3HoughTrack")==0) fTrackType='h';
+ if(strcmp(tracktype,"AliL3ModelTrack")==0) fTrackType='m';
SetSize();
}
-
-AliL3TrackArray::~AliL3TrackArray(){
+AliL3TrackArray::~AliL3TrackArray()
+{
//Destructor
DeleteArray();
}
-AliL3Track *AliL3TrackArray::NextTrack(){
+AliL3Track *AliL3TrackArray::NextTrack()
+{
+ //next track in array
if(fNTracks<fSize) return fTrack[fNTracks++];
SetSize(fSize+100);
return fTrack[fNTracks++];
}
-void AliL3TrackArray::DeleteArray(){
+void AliL3TrackArray::DeleteArray()
+{
+ //delete array
for(Int_t i=0; i<fSize;i++)
delete fTrack[i];
delete[] fIsPresent;
delete[] fTrack;
}
-Bool_t AliL3TrackArray::SetSize(Int_t newsize){
+Bool_t AliL3TrackArray::SetSize(Int_t newsize)
+{
+ //set size
if(newsize<=fSize) return kFALSE; //shrink comes later!!
if(!fSize){
fSize = newsize;
fIsPresent[i] = kTRUE;
}
break;
+ case 'm':
+ for(Int_t i=0;i<fSize;i++){
+ fTrack[i] = new AliL3ModelTrack();
+ fIsPresent[i] = kTRUE;
+ }
+ break;
default:
return kFALSE;
}
fIsPresent[i] = kTRUE;
}
break;
+ case 'm':
+ for(Int_t i=fSize;i<newsize;i++){
+ fTrack[i] = new AliL3ModelTrack();
+ fIsPresent[i] = kTRUE;
+ }
+ break;
default:
return kFALSE;
}
return kTRUE;
}
-void AliL3TrackArray::Reset(){
+void AliL3TrackArray::Reset()
+{
+ //reset
fNTracks=0;
fNAbsent=0;
for(Int_t i=0; i<fSize;i++)
fIsPresent[i] = kTRUE;
}
-void AliL3TrackArray::Remove(Int_t track){
+void AliL3TrackArray::Remove(Int_t track)
+{
+ //remove track
if(fIsPresent[track]){
fIsPresent[track]=kFALSE;
fNAbsent++;
void AliL3TrackArray::FillTracks(Int_t ntracks, AliL3TrackSegmentData* tr){
//Read tracks from shared memory (or memory)
AliL3TrackSegmentData *trs = tr;
- for(Int_t i=0; i<ntracks; i++){
+ for(Int_t i=0; i<ntracks; i++){
AliL3Track *track = NextTrack();
track->SetPt(trs->fPt);
track->SetPsi(trs->fPsi);
track->SetTgl(trs->fTgl);
+ track->SetPterr(trs->fPterr);
+ track->SetPsierr(trs->fPsierr);
+ track->SetTglerr(trs->fTglerr);
track->SetNHits(trs->fNPoints);
track->SetCharge(trs->fCharge);
track->SetFirstPoint(trs->fX,trs->fY,trs->fZ);
track->SetLastPoint(trs->fLastX,trs->fLastY,trs->fLastZ);
track->SetHits( trs->fNPoints, trs->fPointIDs );
+#ifdef ROWHOUGHPARAMS
+ if(GetTrackType()=='h') {
+ ((AliL3HoughTrack *)track)->SetWeight(trs->fWeight);
+ ((AliL3HoughTrack *)track)->SetBinXY(trs->fBinX,trs->fBinY,trs->fBinXSize,trs->fBinYSize);
+ }
+ track->SetMCid(trs->fTrackID);
+ track->SetRowRange(trs->fRowRange1,trs->fRowRange2);
+ track->SetSector(trs->fSector);
+ track->SetPID(trs->fPID);
+#endif
UChar_t *tmpP = (UChar_t*)trs;
tmpP += sizeof(AliL3TrackSegmentData)+trs->fNPoints*sizeof(UInt_t);
trs = (AliL3TrackSegmentData*)tmpP;
}
}
-void AliL3TrackArray::FillTracks(Int_t ntracks, AliL3TrackSegmentData* tr,Int_t slice, AliL3Transform* trans){
+void AliL3TrackArray::FillTracks(Int_t ntracks, AliL3TrackSegmentData* tr,Int_t slice)
+{
//Read tracks from shared memory (or memory)
AliL3TrackSegmentData *trs = tr;
for(Int_t i=0; i<ntracks; i++){
AliL3Track *track = NextTrack();
track->SetPt(trs->fPt);
+ track->SetPterr(trs->fPterr);
Float_t psi[1];
psi[0]=trs->fPsi;
- trans->Local2GlobalAngle(psi,slice);
+ AliL3Transform::Local2GlobalAngle(psi,slice);
track->SetPsi(psi[0]);
track->SetTgl(trs->fTgl);
+ track->SetPsierr(trs->fPsierr);
+ track->SetTglerr(trs->fTglerr);
track->SetNHits(trs->fNPoints);
track->SetCharge(trs->fCharge);
Float_t first[3];
first[0]=trs->fX;first[1]=trs->fY;first[2]=trs->fZ;
- trans->Local2Global(first,slice);
+ AliL3Transform::Local2Global(first,slice);
track->SetFirstPoint(first[0],first[1],first[2]);
Float_t last[3];
last[0]=trs->fLastX;last[1]=trs->fLastY;last[2]=trs->fLastZ;
- trans->Local2Global(last,slice);
+ AliL3Transform::Local2Global(last,slice);
track->SetLastPoint(last[0],last[1],last[2]);
track->SetHits( trs->fNPoints, trs->fPointIDs );
+#ifdef ROWHOUGHPARAMS
+ if(GetTrackType()=='h') {
+ ((AliL3HoughTrack *)track)->SetWeight(trs->fWeight);
+ ((AliL3HoughTrack *)track)->SetBinXY(trs->fBinX,trs->fBinY,trs->fBinXSize,trs->fBinYSize);
+ }
+ track->SetMCid(trs->fTrackID);
+ track->SetRowRange(trs->fRowRange1,trs->fRowRange2);
+ track->SetSector(slice);
+ track->SetPID(trs->fPID);
+#endif
UChar_t *tmpP = (UChar_t*)trs;
tmpP += sizeof(AliL3TrackSegmentData)+trs->fNPoints*sizeof(UInt_t);
trs = (AliL3TrackSegmentData*)tmpP;
}
}
-UInt_t AliL3TrackArray::GetOutSize(){
+UInt_t AliL3TrackArray::GetOutSize()
+{
+ //get size for IO
UInt_t count = GetOutCount(); //use only present tracks
UInt_t tHits = 0;
for(Int_t i=0;i<fNTracks;i++){ //loop over all tracks
return count*sizeof(AliL3TrackSegmentData)+sizeof(UInt_t)*tHits;
}
-UInt_t AliL3TrackArray::WriteTracks(UInt_t & ntracks,AliL3TrackSegmentData* tr){
+UInt_t AliL3TrackArray::WriteTracks(UInt_t & ntracks,AliL3TrackSegmentData* tr)
+{
+ //write tracks
ntracks = GetOutCount();
return WriteTracks(tr);
}
-UInt_t AliL3TrackArray::WriteTracks(AliL3TrackSegmentData* tr){
- if(GetTrackType()=='c') return WriteConfMapTracks(tr);
+UInt_t AliL3TrackArray::WriteTracks(AliL3TrackSegmentData* tr)
+{
+ //if(GetTrackType()=='c') return WriteConfMapTracks(tr);
AliL3TrackSegmentData *tP = tr;
UInt_t *pP;
UInt_t size = 0;
tP->fY = track->GetFirstPointY();
tP->fZ = track->GetFirstPointZ();
tP->fPt = track->GetPt();
+ tP->fPterr = track->GetPterr();
tP->fLastX = track->GetLastPointX();
tP->fLastY = track->GetLastPointY();
tP->fLastZ = track->GetLastPointZ();
tP->fPsi = track->GetPsi();
tP->fTgl = track->GetTgl();
+ tP->fPsierr = track->GetPsierr();
+ tP->fTglerr = track->GetTglerr();
tP->fCharge = track->GetCharge();
tP->fNPoints = track->GetNHits();
+#ifdef ROWHOUGHPARAMS
+ if(GetTrackType()=='h') {
+ tP->fWeight = ((AliL3HoughTrack *)track)->GetWeight();
+ tP->fBinX = ((AliL3HoughTrack *)track)->GetBinX();
+ tP->fBinY = ((AliL3HoughTrack *)track)->GetBinY();
+ tP->fBinXSize = ((AliL3HoughTrack *)track)->GetSizeX();
+ tP->fBinYSize = ((AliL3HoughTrack *)track)->GetSizeY();
+ }
+ tP->fTrackID = track->GetMCid();
+ tP->fRowRange1 = track->GetFirstRow();
+ tP->fRowRange2 = track->GetLastRow();
+ tP->fSector = track->GetSector();
+ tP->fPID = track->GetPID();
+#endif
pP = (UInt_t*)track->GetHitNumbers();
for (UInt_t j=0;j<tP->fNPoints;j++){
tP->fPointIDs[j] = pP[j];
return size;
}
-UInt_t AliL3TrackArray::WriteConfMapTracks(AliL3TrackSegmentData* tr){
+UInt_t AliL3TrackArray::WriteConfMapTracks(AliL3TrackSegmentData* tr)
+{
// use first and last point objects
AliL3TrackSegmentData *tP = tr;
UInt_t *pP;
for(Int_t i=0; i<fNTracks; i++){ //loop over all tracks
AliL3ConfMapTrack *track =(AliL3ConfMapTrack *) GetCheckedTrack(i); //use only present tracks
if(!track) continue; //use only present tracks
- AliL3ConfMapPoint *hit = (AliL3ConfMapPoint*)track->lastHit;
- AliL3ConfMapPoint *lastHit = (AliL3ConfMapPoint*)track->firstHit;
+ AliL3ConfMapPoint *hit = (AliL3ConfMapPoint*)track->GetLastHit();
+ AliL3ConfMapPoint *lastHit = (AliL3ConfMapPoint*)track->GetFirstHit();
tP->fX = hit->GetX();
tP->fY = hit->GetY();
tP->fZ = hit->GetZ();
// tP->fY = track->GetFirstPointY();
// tP->fZ = track->GetFirstPointZ();
tP->fPt = track->GetPt();
+ tP->fPterr = track->GetPterr();
// tP->fLastX = track->GetLastPointX();
// tP->fLastY = track->GetLastPointY();
// tP->fLastZ = track->GetLastPointZ();
tP->fPsi = track->GetPsi();
tP->fTgl = track->GetTgl();
+ tP->fPsierr = track->GetPsierr();
+ tP->fTglerr = track->GetTglerr();
tP->fCharge = track->GetCharge();
+#ifdef ROWHOUGHPARAMS
+ tP->fTrackID = track->GetMCid();
+ tP->fRowRange1 = track->GetFirstRow();
+ tP->fRowRange2 = track->GetLastRow();
+ tP->fSector = track->GetSector();
+ tP->fPID = track->GetPID();
+#endif
tP->fNPoints = track->GetNHits();
pP = (UInt_t*)track->GetHitNumbers();
for (UInt_t j=0;j<tP->fNPoints;j++){
void AliL3TrackArray::AddLast(AliL3Track *track)
{
+ //add track to last position
AliL3Track *tpt = NextTrack();
tpt->Set(track);
}
-
-void AliL3TrackArray::AddTracks(AliL3TrackArray *newtrack,Bool_t remove_old){
+void AliL3TrackArray::AddTracks(AliL3TrackArray *newtrack,Bool_t remove_old,Int_t slice)
+{
+ //add tracks
if(GetTrackType() != newtrack->GetTrackType() && GetTrackType()!='t')
{
LOG(AliL3Log::kError,"AliL3TrackArray::AddTracks","Track types")
newtrack->Remove(i);
AliL3Track *track = NextTrack();
track->Set(tpt);
+ if(slice>=0)
+ track->Rotate(slice); //Rotate track to global coordinates
/*
AliL3Track *track;
if(GetTrackType()=='h')
}
}
-
-void AliL3TrackArray::Compress(){
+void AliL3TrackArray::Compress()
+{
+ //compress array
if(GetNPresent()==GetNTracks()) return;
AliL3Track **tmp = new AliL3Track *[fNTracks];
Int_t present=0;
fNAbsent = 0;
}
-void AliL3TrackArray::QSort(){
- // compress an sort
+void AliL3TrackArray::QSort()
+{
+ // compress and sort
Compress();
QSort(fTrack,0,fNTracks);
}
-void AliL3TrackArray::QSort( AliL3Track **a, Int_t first, Int_t last){
-
+void AliL3TrackArray::QSort( AliL3Track **a, Int_t first, Int_t last)
+{
// Sort array of AliL3Track pointers using a quicksort algorithm.
// Uses TrackCompare() to compare objects.
// Thanks to Root!
}
}
-Int_t AliL3TrackArray::TrackCompare(AliL3Track *a, AliL3Track *b){
+Int_t AliL3TrackArray::TrackCompare(AliL3Track *a, AliL3Track *b) const
+{
// Compare the two tracks.
return b->Compare(a);