+// $Id$
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Authors: *
+ * for The ALICE HLT Project. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+// @file AliHLTTRDTracklet.cxx
+// @author Theodor Rascanu
+// @date
+// @brief A datacontainer for tracklets for the HLT.
+//
+
#include "AliHLTTRDTrack.h"
#include "AliHLTTRDTracklet.h"
-
/**
* Default Constructor
*/
//============================================================================
AliHLTTRDTrack::AliHLTTRDTrack():
- fSize(sizeof(AliHLTTRDTrack)),
- fTRDtrack(NULL),
- fPIDquality(0),
fDE(-1),
fFakeRatio(-1),
fChi2(-1),
- fMass(-1),
- fLab(-1),
+ // fMass(-1),
fN(-1),
fIntegratedLength(-1),
fX(-1),
- fAlpha(-1)
+ fAlpha(-1),
+ fSize(sizeof(AliHLTTRDTrack)),
+ fBits(0)
{
InitArrays();
// not to be used
* Creates hltTrack from TRDtrackV1
*/
//============================================================================
-AliHLTTRDTrack::AliHLTTRDTrack(AliTRDtrackV1 * inTrack):
+AliHLTTRDTrack::AliHLTTRDTrack(const AliTRDtrackV1* const inTrack):
+ fDE(inTrack->fDE),
+ fFakeRatio(inTrack->fFakeRatio),
+ fChi2(inTrack->fChi2),
+ // fMass(inTrack->fMass),
+ fN(inTrack->fN),
+ fIntegratedLength(inTrack->GetIntegratedLength()),
+ fX(inTrack->GetX()),
+ fAlpha(inTrack->GetAlpha()),
fSize(sizeof(AliHLTTRDTrack)),
- fTRDtrack(NULL),
- fPIDquality(0),
- fDE(-1),
- fFakeRatio(-1),
- fChi2(-1),
- fMass(-1),
- fLab(-1),
- fN(-1),
- fIntegratedLength(-1),
- fX(-1),
- fAlpha(-1)
+ fBits(0)
{
- InitArrays();
-
- fTRDtrack = inTrack;
-
- CopyDataMembers();
-
- AddTracklets();
-
+ CopyDataMembers(inTrack);
}
/**
}
-/**
- * Copy tracklets to the HLTTRDTrack
- */
-//============================================================================
-void AliHLTTRDTrack::AddTracklets()
-{
- for (Int_t iTracklet = 0; iTracklet < kNplane; iTracklet++)
- {
- // if (fTracklet[iTracklet])
- // HLTWarning("Trying to rewrite tracklets in the Track. Not good.");
- AliTRDseedV1 * trdTracklet = fTRDtrack->GetTracklet(iTracklet);
- if (trdTracklet){
- AliHLTTRDTracklet * hltTracklet = new (GetEndPointer()) AliHLTTRDTracklet(trdTracklet);
- fSize += hltTracklet->GetSize();
- //HLTDebug("tracklet %i; adr 0x%x; endPointer 0x%x; fSize %i", iTracklet, hltTracklet, hltTracklet->GetEndPointer(), fSize);
- fTracklet[iTracklet] = hltTracklet;
- }
- else
- fTracklet[iTracklet] = NULL;
- }
-}
-
-
/**
* Copy data members (except tracklets) from TRDtrackV1 to HLTTRDTrack.
*/
//============================================================================
-void AliHLTTRDTrack::CopyDataMembers()
+void AliHLTTRDTrack::CopyDataMembers(const AliTRDtrackV1* const inTrack)
{
-
- fPIDquality = fTRDtrack->GetPIDquality();
-
for(Int_t i = 0; i < AliPID::kSPECIES; i++)
{
- fPID[i] = fTRDtrack->GetPID(i);
+ fPID[i] = inTrack->fPID[i];
}
for (Int_t i = 0; i < 3; i++)
{
- fBudget[i] = fTRDtrack->GetBudget(i);
- }
- fDE = fTRDtrack->GetEdep();
- fFakeRatio = fTRDtrack->GetFakeRatio();
- fChi2 = fTRDtrack->GetChi2();
- fMass = fTRDtrack->GetMass();
- fLab = fTRDtrack->GetLabel();
- fN = fTRDtrack->GetNumberOfClusters();
- fIntegratedLength = fTRDtrack->GetIntegratedLength();
+ fBudget[i] = inTrack->fBudget[i];
+ }
- fX = fTRDtrack->GetX();
- fAlpha = fTRDtrack->GetAlpha();
- const Double_t *Ptemp = fTRDtrack->GetParameter();
+ const Double_t* const Ptemp = inTrack->GetParameter();
for (Int_t i = 0; i < 5; i++)
{
fP[i] = Ptemp[i];
}
- const Double_t *Ctemp = fTRDtrack->GetCovariance();
+
+ const Double_t* const Ctemp = inTrack->GetCovariance();
for (Int_t i = 0; i < 15; i++)
{
fC[i] = Ctemp[i];
}
-
+
+ UInt_t mask = inTrack->TestBits(-1);
+ fBits = mask >> 14;
+
+ for (Int_t iTracklet = 0; iTracklet < AliTRDtrackV1::kNplane; iTracklet++)
+ {
+ AliTRDseedV1* trdTracklet = inTrack->GetTracklet(iTracklet);
+ if (trdTracklet){
+ AliHLTTRDTracklet* hltTracklet = new (GetEndPointer()) AliHLTTRDTracklet(trdTracklet);
+ fSize += hltTracklet->GetSize();
+ fTrackletAtPlane[iTracklet] = kTRUE;
+ }
+ else fTrackletAtPlane[iTracklet] = kFALSE;
+ }
}
/**
* Copy data to the output TRDtrackV1
*/
//============================================================================
-void AliHLTTRDTrack::ExportTRDTrack(AliTRDtrackV1 *outTrack)
+void AliHLTTRDTrack::ExportTRDTrack(AliTRDtrackV1* const outTrack) const
{
- outTrack->Reset();
-
- //Set members from AliTRDtrackV1
- outTrack->SetPIDquality(fPIDquality);
- outTrack->SetEdep(fDE);
+ //outTrack->Reset(); we always use a new fresh trdtrack as input, so this is useless
+ outTrack->SetBit(AliTRDtrackV1::kOwner);
+
+ outTrack->fDE=fDE;
+ outTrack->fFakeRatio=fFakeRatio;
+ outTrack->fChi2=fChi2;
+ // outTrack->fMass=fMass;
+ outTrack->fN=fN;
+ outTrack->SetIntegratedLength(fIntegratedLength);
+ outTrack->Set(fX, fAlpha, fP, fC);
+
for(Int_t i = 0; i < AliPID::kSPECIES; i++)
{
- outTrack->SetPID(i,fPID[i]);
+ outTrack->fPID[i] = fPID[i];
}
for (Int_t i = 0; i < 3; i++)
{
- outTrack->SetBudget(i, fBudget[i]);
+ outTrack->fBudget[i]=fBudget[i];
}
- for (Int_t iTracklet = 0; iTracklet < kNplane; iTracklet++){
- if (fTracklet[iTracklet]){
+
+ outTrack->SetBit(UInt_t(fBits)<<14);
+
+ AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*)this+sizeof(*this);
+ AliHLTTRDTracklet* hltTracklet;
+
+ for (Int_t iTracklet = 0; iTracklet < AliTRDtrackV1::kNplane; iTracklet++){
+ if (fTrackletAtPlane[iTracklet]){
AliTRDseedV1* trdTracklet = new AliTRDseedV1();
- fTracklet[iTracklet]->ExportTRDTracklet(trdTracklet);
+ hltTracklet = (AliHLTTRDTracklet*) iterPtr;
+ hltTracklet->ExportTRDTracklet(trdTracklet);
outTrack->SetTracklet(trdTracklet,iTracklet);
+ iterPtr += hltTracklet->GetSize();
}
}
- //Set members from AliKalmanTrack
- outTrack->SetFakeRatio(fFakeRatio);
- //outTrack->SetChi2(fChi2);
- outTrack->SetMass(fMass);
- outTrack->SetLabel(fLab);
- (dynamic_cast<AliKalmanTrack*>(outTrack))->SetNumberOfClusters(fN);
- outTrack->SetIntegratedLength(fIntegratedLength);
-
- //Set members from AliExternalTrackParam
- outTrack->Set(fX, fAlpha, fP, fC);
}
//============================================================================
void AliHLTTRDTrack::InitArrays()
{
- for(Int_t i = 0; i < kNplane; i++){
- fTracklet[i]=NULL;
+ for(Int_t i = 0; i < AliTRDtrackV1::kNplane; i++){
+ fTrackletAtPlane[i]=kFALSE;
}
for(Int_t i = 0; i < AliPID::kSPECIES; i++)
* Print main values for HLTTrack
*/
//============================================================================
-void AliHLTTRDTrack::Print(Bool_t printTracklets)
+void AliHLTTRDTrack::Print(Bool_t printTracklets) const
{
- //printf("--hltTrack-- addr 0x%p(%i); fSize %i\n", this, (int)this, fSize);
- //printf(" fPIDquality = %s; fX = %f; fAlpha = %f\n", fPIDquality, fX, fAlpha);
+ printf("--hltTrack-- addr %p; fSize %i\n", this, fSize);
+ printf(" fX = %f; fAlpha = %f\n", fX, fAlpha);
printf(" ");
for(Int_t i = 0; i < AliPID::kSPECIES; i++)
if (printTracklets)
{
- for (Int_t i = 0; i < kNplane; i++){
- if (fTracklet[i]){
+ AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*)this+sizeof(*this);
+ AliHLTTRDTracklet* hltTracklet;
+
+ for (Int_t i = 0; i < AliTRDtrackV1::kNplane; i++){
+ if (fTrackletAtPlane[i]){
printf("[%i]",i);
- fTracklet[i]->Print();
+ hltTracklet = (AliHLTTRDTracklet*) iterPtr;
+ hltTracklet->Print();
+ iterPtr += hltTracklet->GetSize();
}
else
printf(" NULL ");
}
/**
- * Read tracklets from the memory.
- * Number of tracklets should be already known
+ * Save track at block position
*/
//============================================================================
-void AliHLTTRDTrack::ReadTrackletsFromMemory(void* input)
+AliHLTUInt32_t AliHLTTRDTrack::SaveAt(AliHLTUInt8_t *const block, const AliTRDtrackV1* const inTrack)
{
- AliHLTUInt8_t *iterPtr = (AliHLTUInt8_t*) input;
- AliHLTTRDTracklet* hltTracklet = NULL;
-
- for (Int_t iTracklet = 0; iTracklet < kNplane; iTracklet++){
- if (fTracklet[iTracklet]){
- hltTracklet = (AliHLTTRDTracklet*) iterPtr;
- hltTracklet->ReadClustersFromMemory(iterPtr+sizeof(AliHLTTRDTracklet));
- fTracklet[iTracklet] = hltTracklet;
- iterPtr += hltTracklet->GetSize();
- //hltTracklet->Print(kFALSE);
+ AliHLTUInt32_t size=0;
+
+ memcpy(block,inTrack,sizeof(AliTRDtrackV1));
+ size+=sizeof(AliTRDtrackV1);
+
+ for(int i=0; i<AliTRDtrackV1::kNplane; i++){
+ AliTRDseedV1* inTracklet = inTrack->GetTracklet(i);
+ if(inTracklet) size+=AliHLTTRDTracklet::SaveAt(block+size, inTracklet);
+ }
+
+ return size;
+}
+
+/**
+ * Read track from block
+ */
+//============================================================================
+AliHLTUInt32_t AliHLTTRDTrack::LoadFrom(AliTRDtrackV1 *const outTrack, const AliHLTUInt8_t *const block)
+{
+ AliHLTUInt32_t size=0;
+
+ memcpy(((AliHLTUInt8_t*)outTrack)+sizeof(void*),block+sizeof(void*),sizeof(AliTRDtrackV1)-sizeof(void*));
+ size+=sizeof(AliTRDtrackV1);
+
+ for(int i=0; i<AliTRDtrackV1::kNplane; i++){
+ if(outTrack->GetTracklet(i)){
+ AliTRDseedV1 *const outTracklet = new AliTRDseedV1;
+ outTrack->fTracklet[i]=outTracklet;
+ size+=AliHLTTRDTracklet::LoadFrom(outTracklet, block+size);
}
}
+
+ outTrack->SetBit(AliTRDtrackV1::kOwner);
+ outTrack->fBackupTrack=NULL;
+ outTrack->fTrackLow=NULL;
+ outTrack->fTrackHigh=NULL;
+ return size;
}