]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TRD/AliHLTTRDTrack.cxx
change order of bookkeeping events
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDTrack.cxx
index 7ea8838dcbe18af1030e5735583cc2840e89a3a5..3bfaba6ff6b7ba18ee8fe29dfb6faebbcd59d043 100644 (file)
@@ -1,24 +1,44 @@
+// $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
@@ -29,28 +49,19 @@ AliHLTTRDTrack::AliHLTTRDTrack():
  * 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);
 }
 
 /**
@@ -63,107 +74,90 @@ AliHLTTRDTrack::~AliHLTTRDTrack()
   
 }
 
-/**
- * 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);
 }
   
 
@@ -173,8 +167,8 @@ void AliHLTTRDTrack::ExportTRDTrack(AliTRDtrackV1 *outTrack)
 //============================================================================
 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++)
@@ -200,10 +194,10 @@ void AliHLTTRDTrack::InitArrays()
  * 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++)
@@ -220,10 +214,15 @@ void AliHLTTRDTrack::Print(Bool_t printTracklets)
 
   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 ");
@@ -234,22 +233,46 @@ void AliHLTTRDTrack::Print(Bool_t printTracklets)
 }
 
 /**
- * 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;
 }