Speed up AliTRDseedV1::AttachClusyters() and add HLT data containers as friend classe...
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Sep 2009 12:01:41 +0000 (12:01 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Sep 2009 12:01:41 +0000 (12:01 +0000)
TRD/AliTRDcluster.h
TRD/AliTRDseedV1.cxx
TRD/AliTRDseedV1.h
TRD/AliTRDtrackV1.h

index 86936dc..f2b7009 100644 (file)
@@ -16,8 +16,9 @@
 class AliTRDtrackletWord;
 
 class AliTRDcluster : public AliCluster {
-public:
+  friend class AliHLTTRDCluster;
 
+public:
   enum ETRDclusterStatus { 
     kInChamber = BIT(16) // Out of fiducial volume of chamber (signal tails)
    ,kFivePad   = BIT(17) // Deconvoluted clusters
index 5d4d6ab..d025e08 100644 (file)
@@ -919,11 +919,12 @@ Bool_t    AliTRDseedV1::AttachClusters(AliTRDtrackingChamber *const chamber, Bool_t
   const Int_t kNrows = 16;
   const Int_t kNcls  = 3*kNclusters; // buffer size
   AliTRDcluster *clst[kNrows][kNcls];
+  Bool_t blst[kNrows][kNcls];
   Double_t cond[4], dx, dy, yt, zt, yres[kNrows][kNcls];
   Int_t idxs[kNrows][kNcls], ncl[kNrows], ncls = 0;
   memset(ncl, 0, kNrows*sizeof(Int_t));
   memset(yres, 0, kNrows*kNcls*sizeof(Double_t));
-  memset(clst, 0, kNrows*kNcls*sizeof(AliTRDcluster*));
+  memset(blst, 0, kNrows*kNcls*sizeof(Bool_t));   //this is 8 times faster to memset than "memset(clst, 0, kNrows*kNcls*sizeof(AliTRDcluster*))"
 
   // Do cluster projection
   AliTRDcluster *c = NULL;
@@ -962,6 +963,7 @@ Bool_t      AliTRDseedV1::AttachClusters(AliTRDtrackingChamber *const chamber, Bool_t
       Int_t r = c->GetPadRow();
       if(kPRINT) printf("\t\t%d dy[%f] yc[%f] r[%d]\n", ic, TMath::Abs(dy), c->GetY(), r);
       clst[r][ncl[r]] = c;
+      blst[r][ncl[r]] = kTRUE;
       idxs[r][ncl[r]] = idx[ic];
       yres[r][ncl[r]] = dy;
       ncl[r]++; ncls++;
@@ -1016,7 +1018,7 @@ Bool_t    AliTRDseedV1::AttachClusters(AliTRDtrackingChamber *const chamber, Bool_t
     Bool_t kFOUND = kFALSE;
     for(Int_t ic = ncl[ir]; ic--;){
       if(yres[ir][ic] - mean > 3. * syDis){ 
-        clst[ir][ic] = NULL; continue;
+        blst[ir][ic] = kFALSE; continue;
       }
       nrow[nr]++; kFOUND = kTRUE;
     }
@@ -1058,7 +1060,8 @@ Bool_t    AliTRDseedV1::AttachClusters(AliTRDtrackingChamber *const chamber, Bool_t
     Int_t jr = row + ir*lr; 
     if(kPRINT) printf("\tattach %d clusters for row %d\n", ncl[jr], jr);
     for (Int_t ic = 0; ic < ncl[jr]; ic++) {
-      if(!(c = clst[jr][ic])) continue;
+      if(!blst[jr][ic])continue;
+      c = clst[jr][ic];
       Int_t it = c->GetPadTime();
       // TODO proper indexing of clusters !!
       fIndexes[it+kNtb*ir]  = chamber->GetTB(it)->GetGlobalIndex(idxs[jr][ic]);
@@ -1281,9 +1284,10 @@ Bool_t AliTRDseedV1::Fit(Bool_t tilt, Bool_t zcorr)
     if(tilt) yc[n] -= (GetTilt()*(zc[n] - zt)); 
 
     fitterY.AddPoint(&xc[n], yc[n], TMath::Sqrt(sy[n]));
-    fitterZ.AddPoint(&xc[n], qc[n], 1.);
+    if(IsRowCross())fitterZ.AddPoint(&xc[n], qc[n], 1.);
     n++;
   }
+
   // to few clusters
   if (n < kClmin) return kFALSE; 
 
index 9e51e52..f93f621 100644 (file)
@@ -47,6 +47,8 @@ class AliTRDtrackV1;
 class AliTRDpadPlane;
 class AliTRDseedV1 : public AliTRDtrackletBase
 {
+  friend class AliHLTTRDTracklet;
+
 public:
   enum ETRDtrackletBuffers {    
     kNtb       = 31     // max clusters/pad row
index 00491e1..bc3e5a5 100644 (file)
@@ -24,6 +24,7 @@ class AliESDtrack;
 class AliTRDReconstructor;
 class AliTRDtrackV1 : public AliKalmanTrack
 {
+  friend class AliHLTTRDTrack;
 public:
   enum ETRDtrackSize { 
     kNdet      = AliTRDgeometry::kNdet