Bugfix for https://savannah.cern.ch/bugs/?97755
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCClusterAccessHLTOUT.h
index a5a3873..c08b3db 100644 (file)
@@ -109,21 +109,19 @@ class AliHLTTPCClusterAccessHLTOUT : public TObject
   /// process the cluster data block of various formats from HLTOUT
   int ProcessClusters(const char* params);
 
-  /// helper struct to store cluster pointers in a map together with MC info
+  /// helper struct to store cluster in a map together with MC info
   struct AliRawClusterEntry {
-    AliRawClusterEntry() : fCluster(NULL), fMC(NULL) {}
-    AliRawClusterEntry(AliHLTTPCRawCluster* pCluster) : fCluster(pCluster), fMC(NULL) {}
+    AliRawClusterEntry() : fCluster(), fMC() {}
     AliRawClusterEntry(const AliRawClusterEntry& other) : fCluster(other.fCluster), fMC(other.fMC) {}
     AliRawClusterEntry& operator=(const AliRawClusterEntry& other) {
       if (&other==this) return *this;
       fCluster=other.fCluster; fMC=other.fMC;
       return *this;
     }
-    AliHLTTPCRawCluster* fCluster; //! pointer to cluster in the array of all clusters
-    const AliHLTTPCClusterMCLabel* fMC; //! pointer to corresponding MC data in HLTOUT block 
+    AliHLTTPCRawCluster fCluster; //! cluster
+    AliHLTTPCClusterMCLabel fMC; //! MC labels 
   };
   
-  typedef vector<AliHLTTPCRawCluster> AliHLTTPCRawClusterVector;
   typedef vector<AliRawClusterEntry> AliRawClusterEntryVector;
 
   /**
@@ -154,25 +152,28 @@ class AliHLTTPCClusterAccessHLTOUT : public TObject
       }
       ~iterator() {}
 
-      void SetPadRow(int row)          {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetPadRow(row-fRowOffset);}
-      void SetPad(float pad)          {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetPad(pad);}
-      void SetTime(float time)                {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetTime(time);}
-      void SetSigmaY2(float sigmaY2)   {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetSigmaY2(sigmaY2);}
-      void SetSigmaZ2(float sigmaZ2)   {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetSigmaZ2(sigmaZ2);}
-      void SetCharge(unsigned charge)  {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetCharge(charge);}
-      void SetQMax(unsigned qmax)      {if (fEntry && fEntry->fCluster) fEntry->fCluster->SetQMax(qmax);}
+      void SetPadRow(int row)          {if (fEntry ) fEntry->fCluster.SetPadRow(row-fRowOffset);}
+      void SetPad(float pad)          {if (fEntry ) fEntry->fCluster.SetPad(pad);}
+      void SetTime(float time)                {if (fEntry ) fEntry->fCluster.SetTime(time);}
+      void SetSigmaY2(float sigmaY2)   {if (fEntry ) fEntry->fCluster.SetSigmaY2(sigmaY2);}
+      void SetSigmaZ2(float sigmaZ2)   {if (fEntry ) fEntry->fCluster.SetSigmaZ2(sigmaZ2);}
+      void SetCharge(unsigned charge)  {if (fEntry ) fEntry->fCluster.SetCharge(charge);}
+      void SetQMax(unsigned qmax)      {if (fEntry ) fEntry->fCluster.SetQMax(qmax);}
       void SetMC(const AliHLTTPCClusterMCLabel* pMC) {
-       if (fEntry) fEntry->fMC=pMC;
+       if (fEntry && pMC ) fEntry->fMC=*pMC;
       }
 
       // switch to next cluster
       iterator& Next(int slice, int partition);
 
     private:
+
+      static const Int_t fkRowOffsetOuterSector; //! transient
+
       int fClusterNo; //! cluster no in the current block
       AliRawClusterContainer* fData; //! pointer to actual data
       AliRawClusterEntry* fEntry; //! pointer to current cluster
-      int fRowOffset;  //! row offset for current partition
+      int fRowOffset;  //! row offset for current partition      
     };
 
     /// iterator of remaining clusters block of specification
@@ -199,7 +200,6 @@ class AliHLTTPCClusterAccessHLTOUT : public TObject
     /// assignment operator prohibited
     AliRawClusterContainer& operator=(const AliRawClusterContainer&);
 
-    vector<AliHLTTPCRawClusterVector*> fClusterVectors; //! instances of cluster arrays
     vector<AliRawClusterEntryVector*> fClusterMaps; //! cluster pointer vectors per sector (offline notation 0-71)
     TClonesArray* fSectorArray; //! current sector array of clusters provided to caller
     iterator fIterator; //!