bug fix for outer sectors, extra interface
authorsgorbuno <sgorbuno@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 4 Dec 2011 06:10:39 +0000 (06:10 +0000)
committersgorbuno <sgorbuno@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 4 Dec 2011 06:10:39 +0000 (06:10 +0000)
HLT/TPCLib/HWCFemulator/AliHLTTPCHWClusterMerger.cxx
HLT/TPCLib/HWCFemulator/AliHLTTPCHWClusterMerger.h

index 2981260..3d1757a 100644 (file)
@@ -138,8 +138,11 @@ void AliHLTTPCHWClusterMerger::Init()
        vBorders.push_back(pad+1.);
       }
     }
-  }  
-  /*
+  } 
+
+  //cout<<" NBorders = "<<fNBorders/2<<endl;
+
+  /*  
   cout<<"Borders:"<<endl;
   for( int row=0; row<fNRows; row++ ){
     for( int pad=0; pad<fNRowPads; pad++ ){
@@ -150,6 +153,7 @@ void AliHLTTPCHWClusterMerger::Init()
     }
   }
   */
+
   fBorders = new AliHLTFloat32_t [fNBorders];
   if( !fBorders ){
     HLTError("Can not allocate memory: %d bytes", fNBorders*sizeof(AliHLTFloat32_t));
@@ -182,14 +186,13 @@ bool AliHLTTPCHWClusterMerger::CheckCandidate(int /*slice*/, int partition, int
 {
   /// check cluster if it is a candidate for merging
   int slicerow=partitionrow+AliHLTTPCTransform::GetFirstRow(partition);
-  // cout<<"pad "<<pad<<" sigma2 "<<sigmaPad2<<endl;
-
+  
   if( !fMapping ) Init();
   if( !fMapping ) return 0;
   if( slicerow <0 || slicerow>= fNRows ) return 0;
   int iPad = (int) pad;
   if( iPad<0 || iPad>=fNRowPads ) return 0;
-  int atBorder = fMapping[partitionrow*fNRowPads+iPad];
+  int atBorder = fMapping[slicerow*fNRowPads+iPad];    
   if( atBorder<0 ) return 0;
   float dPad = pad - fBorders[atBorder];
   if( sigmaPad2>1.e-4 ){
@@ -218,7 +221,9 @@ int AliHLTTPCHWClusterMerger::AddCandidate(int slice,
   int iBorder = -1;
   int iPad = (int) pad;
   if( !fMapping ) Init();
-
+  int slicerow=partitionrow+AliHLTTPCTransform::GetFirstRow(partition);
   if (id!=~AliHLTUInt32_t(0)) {
     if (slice<0) {
       slice=AliHLTTPCSpacePointData::GetSlice(id);
@@ -231,15 +236,18 @@ int AliHLTTPCHWClusterMerger::AddCandidate(int slice,
       HLTError("cluster id 0x%08x is not consistent with specified partition %d", id, partition);
     }
   }
+
   if( slice<0 || slice>=fkNSlices ){
     HLTError("cluster id 0x%08x has wrong slice number %d", id, slice);    
   }
+  
   if( partition<0 || partition>=6 ){
     HLTError("cluster id 0x%08x has wrong partition number %d", id, partition);
   }
   
-  if( slice>=0 && slice<fkNSlices && partition>=0 && partition<6 && fMapping && iPad>=0 && iPad < fNRowPads ){
-    iBorder = fMapping[partitionrow*fNRowPads+iPad];
+  if( slice>=0 && slice<fkNSlices && slicerow>=0 && slicerow <fNRows && fMapping && iPad>=0 && iPad < fNRowPads ){
+    iBorder = fMapping[slicerow*fNRowPads+iPad];
+    
     if( iBorder>=0 ){
       float dPad = pad - fBorders[iBorder];
       if( sigmaY2>1.e-4 ){
@@ -248,17 +256,17 @@ int AliHLTTPCHWClusterMerger::AddCandidate(int slice,
        if( fabs(dPad)>1. ) iBorder = -1;
       }    
     }
-    if( iBorder>=0 ) iBorder = slice*fkNSlices + iBorder;
+    if( iBorder>=0 ) iBorder = slice*fNBorders + iBorder;
   }
 
-  fClusters.push_back(AliClusterRecord(slice, partition, iBorder, 0, id,
+  fClusters.push_back(AliClusterRecord(slice, partition, iBorder, -1, id,
                                       AliHLTTPCRawCluster(partitionrow, pad, time, sigmaY2, sigmaZ2, charge, qmax), mc ));
 
   if( iBorder>=0 ){
     fBorderNClusters[iBorder]++;
     fBorderNClustersTotal++;
   }
-  return fClusters.size();
+  return fClusters.size()-1;
 }
 
 int AliHLTTPCHWClusterMerger::FillIndex()
@@ -292,6 +300,13 @@ int AliHLTTPCHWClusterMerger::FillIndex()
     }
   }
   */
+  /*
+  for( int ib=1; ib<fkNSlices*fNBorders; ib++ ){
+    if( fBorderFirstCluster[ib] != fBorderFirstCluster[ib-1]+fBorderNClusters[ib-1] ){
+      cout<<"Something wrong with cluster borders !!! "<<endl;
+    }
+  }
+  */
   return 0;
 }
 
@@ -418,8 +433,8 @@ sLeft+=n1;
       fRemovedClusterIds.push_back(c2.GetId());
       HLTDebug("merging %d into %d", border2[ib2].fClusterRecordID, border1[ib1].fClusterRecordID);
       //cout<<"Set merged flag at position "<<border2[ib2].fClusterRecordID<<endl;
-      c2.SetMergedFlag(1);
-       count++;
+      c2.SetMergedTo(border1[ib1].fClusterRecordID);      
+      count++;
       // do not merge c1 anymore
       ib1++;    
     }    
index 28dd45b..11ccdce 100644 (file)
@@ -125,10 +125,10 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
   class AliClusterRecord {
   public:
     AliClusterRecord()
-      : fSlice(-1), fPartition(-1), fBorder(-1), fMergedFlag(0), fId(~AliHLTUInt32_t(0)), fCluster(), fMC() {}
-    AliClusterRecord(int slice, int partition, int border,bool merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster)
+      : fSlice(-1), fPartition(-1), fBorder(-1), fMergedFlag(-1), fId(~AliHLTUInt32_t(0)), fCluster(), fMC() {}
+    AliClusterRecord(int slice, int partition, int border,int merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster)
       : fSlice(slice), fPartition(partition), fBorder(border), fMergedFlag(merged), fId(id), fCluster(cluster), fMC() {}
-    AliClusterRecord(int slice, int partition, int border,bool merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster, const AliHLTTPCClusterMCLabel &mc)
+    AliClusterRecord(int slice, int partition, int border,int merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster, const AliHLTTPCClusterMCLabel &mc)
       : fSlice(slice), fPartition(partition), fBorder(border), fMergedFlag(merged), fId(id), fCluster(cluster), fMC(mc) {}
 
     AliClusterRecord(const AliClusterRecord& other)
@@ -147,7 +147,7 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
       return *this;
     }
 
-    bool GetMergedFlag() const { return fMergedFlag; }
+    int IsMergedTo() const { return fMergedFlag; }
     int GetSlice() const {return fSlice;}
     int GetBorder() const {return fBorder;}
     int GetPartition() const {return fPartition;}
@@ -155,14 +155,14 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
     operator AliHLTTPCRawCluster() const {return fCluster;}
     const AliHLTTPCRawCluster& GetCluster() const {return fCluster;}
     const AliHLTTPCClusterMCLabel& GetMCLabel() const {return fMC;}
-    void SetMergedFlag(bool v ){ fMergedFlag = v;}
+    void SetMergedTo( int ind ){ fMergedFlag = ind;}
     AliHLTTPCRawCluster &Cluster(){ return fCluster; }
     AliHLTTPCClusterMCLabel& MCLabel(){ return fMC; }
   private:
     int fSlice; //!
     int fPartition; //!
     int fBorder; //!
-    bool fMergedFlag; //!
+    int fMergedFlag; //!
     AliHLTUInt32_t fId; //!
     AliHLTTPCRawCluster fCluster; //!
     AliHLTTPCClusterMCLabel fMC; //!
@@ -189,8 +189,7 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
     iterator& operator++() {
       if (!fArray || fIter==fArray->end()) return *this;
       while ((++fIter)!=fArray->end()) {
-       // cout<<"Read flag: "<<fIter->GetMergedFlag()<<endl;
-       if (!fIter->GetMergedFlag() ) break;    
+       if ( fIter->IsMergedTo()<0 ) break;     
       }             
       return *this;
     }
@@ -198,7 +197,7 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
       if (!fArray) return *this;
       while (fIter!=fArray->begin()) {
        --fIter;
-       if (!fIter->GetMergedFlag()) break;     
+       if ( fIter->IsMergedTo()<0 ) break;     
       }
       return *this;
     }
@@ -236,7 +235,7 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
     new (&fIter) iterator(&fClusters);
     fEnd=fIter;  fEnd+=fClusters.size();    
     // skip empty (merged) clusters
-    while (fIter!=fEnd && (*fIter).GetMergedFlag() ) {
+    while (fIter!=fEnd && ( (*fIter).IsMergedTo()>=0) ) {
       fIter++;
     }
     return fIter;
@@ -247,6 +246,13 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
     return fEnd;
   }
 
+  const vector<AliHLTTPCHWClusterMerger::AliClusterRecord> &GetRecords(){ return fClusters; }
+  static const int GetNSlices(){ return fkNSlices; }
+  int GetNBorders() const { return fNBorders; }
+  int GetBorderNClusters( int ib ) const { return fBorderNClusters[ib]; }
+  int GetBorderFirstCluster( int ib ) const { return fBorderFirstCluster[ib]; }
+  const AliHLTTPCHWClusterMerger::AliBorderRecord *GetBorderClusters() const { return fBorderClusters;}
+
   //////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -286,7 +292,7 @@ class AliHLTTPCHWClusterMerger : public AliHLTLogging
   iterator fEnd; //!
   static const int fkMergeWidth = 3;
   static const int fkNSlices = 36;
-  static const int fkMergeTimeWindow = 2;
+  static const int fkMergeTimeWindow = 3;
   ClassDef(AliHLTTPCHWClusterMerger, 0)
 };