]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSpList.h
Bug fix - Jira ticket ALIROOT-5665
[u/mrichter/AliRoot.git] / ITS / AliITSpList.h
index 10d0e5e23b8d08de6f121663d9d9b16a22cde005..fec0b4cada50809e0f035925f99911faf8330c8a 100644 (file)
-#ifndef ALIITSPLISTSSDITEM_H
-#define ALIITSPLISTSSDITEM_H
+#ifndef ALIITSPLIST_H
+#define ALIITSPLIST_H
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice     */
-/* $Id$ */
 
-#include <TObject.h>
-
-
-class AliITSpListItem: public TObject {
- public:
-    // Default Constructor
-    AliITSpListItem();
-    // Standard Signal Constructor
-    AliITSpListItem(Int_t track,Int_t hit,Int_t module,Int_t index,
-                  Double_t signal);
-    // Standard Noise Constructor
-    AliITSpListItem(Int_t module,Int_t index,Double_t signal);
-    // Class destrutor
-    virtual ~AliITSpListItem();
-    // Copy Oporator
-    AliITSpListItem(AliITSpListItem &source);
-    // = Opoerator
-    virtual AliITSpListItem& operator=(const AliITSpListItem &source);
-    // Returns the signal value in the list of signals
-    virtual Double_t GetSignal(Int_t i){
-                           return ( (i>=0&&i<fkSize-1) ? fSignal[i] : 0.0);}
-    virtual Double_t GetSignal(){
-                           return fTsignal;}
-    virtual Double_t GetSignalAfterElect(){
-                           return fSignalAfterElect;}
-    // Returns the Sum/Total signal
-    virtual Double_t GetSumSignal() const {return fTsignal+fNoise;}
-    // Returns the  noise
-    virtual Double_t GetNoise() const {return fNoise;}
-    // Returns the number of stored singals.
-    virtual Int_t GetNsignals() const {return fkSize;}
-    // Addes track number and signal to this existing list.
-    virtual void AddSignal(Int_t track,Int_t hit,Int_t module,
-                          Int_t index,Double_t signal);
-    // Adds signal after electronics to this existing list.
-    virtual void AddSignalAfterElect(Int_t module,Int_t index,Double_t signal);
-    // Addes noise to this existing list.
-    virtual void AddNoise(Int_t module,Int_t index,Double_t noise);
-    // Returns track number.
-    virtual Int_t GetTrack(Int_t i){
-                           return ((i>=0&&i<fkSize-1) ? fTrack[i] : 0);}
-    // Returns hit number.
-    virtual Int_t GetHit(Int_t i){
-                           return ((i>=0&&i<fkSize-1) ? fHits[i] : 0);}
-    // Returns module number.
-    virtual Int_t GetModule(){
-                           return fmodule;}
-    // Returns index number.
-    virtual Int_t GetIndex(){
-                           return findex;}
-    // Adds the contents of pl to this 
-    virtual void Add(AliITSpListItem *pl);
-    // Adds the contents of pl to this with track number off set given by
-    // fileIndex.
-    virtual void AddTo(Int_t fileIndex,AliITSpListItem *pl);
-    // Shift an index number to occupy the upper four bits.
-    virtual Int_t ShiftIndex(Int_t in,Int_t trk);
-    // Standard ascii class print function
-    void Print(ostream *os);
-    // Standard ascii class read function
-    void Read(istream *is);
-    // Returns max size of array for for Tracks, Hits, and signals.
-    static Int_t GetMaxKept() {return fkSize;};
-
- private:
-    static const Int_t fkSize = 10; // Array sizes
-    Int_t    fmodule;         // module number
-    Int_t    findex;          // Strip/row,col number linearlized.
-    Int_t    fTrack[fkSize];  //[fkSize] track Number
-    Int_t    fHits[fkSize];   //[fkSize] hit number
-    Double_t fSignal[fkSize]; //[fkSize] Signals
-    Double_t fTsignal;        // Total signal (no noise)
-    Double_t fNoise;          // Total noise, coupling, ...
-    Double_t fSignalAfterElect; // Signal after electronics
-
-    ClassDef(AliITSpListItem,3) // Item list of signals and track numbers
-};     
-// Input and output functions for standard C++ input/output.
-ostream & operator<<(ostream &os,AliITSpListItem &source);
-istream & operator>>(istream &is,AliITSpListItem &source);
-
-
-#endif
-
-#ifndef ALIITSPLISTSSD_H
-#define ALIITSPLISTSSD_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice     */
-/* $Id$ */
+//***********************************************************************
+//
+// It consist of a TClonesArray of 
+// AliITSpListItem objects
+// This array can be accessed via 2 indexed
+// it is used at digitization level by 
+// all the 3 ITS subdetectors
+//
+// ***********************************************************************
+#include "TArrayI.h"
+#include "TClonesArray.h"
+#include "AliLog.h"
 #include "AliITSMap.h"
-
-class TObjArray;
-class AliITSpListItem;
+#include "AliITSpListItem.h"
 
 class AliITSpList: public AliITSMap {
- private:
-    // returns the TObjArray index for a give set of map indecies.
-    Int_t GetIndex(Int_t i,Int_t j){
-       if(i<0||i>=fNi || j<0||j>=fNj){
-           Warning("GetIndex","Index out of range 0<i=%d<%d and 0<0j=%d<%d",
-                   i,fNi,j,fNj);
-           return -1;
-       } // end if
-       return fNj*i+j;
-    }
 
  public:
     // Default Constructor
@@ -117,66 +27,66 @@ class AliITSpList: public AliITSMap {
     AliITSpList(Int_t imax,Int_t jmax);
     // Class destrutor
     virtual ~AliITSpList();
-    // Copy Oporator
-    AliITSpList(AliITSpList &source);
-    // = Opoerator
+    // Copy constructor
+    AliITSpList(const AliITSpList &source);
+    // = Operator
     virtual AliITSpList& operator=(const AliITSpList &source);
     // Returns the max mape index values
-    void GetMaxMapIndex(Int_t &ni,Int_t &nj){ni=fNi;nj=fNj;return;}
+    void GetMaxMapIndex(Int_t &ni,Int_t &nj) const {ni=fNi;nj=fNj;return;}
     // returns the max index value.
-    Int_t GetMaxIndex(){return fNi*fNj;}
+    Int_t GetMaxIndex() const {return fNi*fNj;}
     // returns the largest non-zero entry kept in the array fa.
-    Int_t GetEntries(){return fEnteries;}
+    Int_t GetEntries() const {return fEntries;}
     // returns the max number of track/hit entries per cell.
-    Int_t GetNEnteries(){return AliITSpListItem::GetMaxKept();}
-    // for a give TObjArray index it returns the corresponding map index
-    void  GetMapIndex(Int_t index,Int_t &i,Int_t &j){
+    Int_t GetNEntries() const {return AliITSpListItem::GetMaxKept();}
+    // for a given TClonesArray index it returns the corresponding map index
+    void  GetMapIndex(Int_t index,Int_t &i,Int_t &j) const {
        i = index/fNj;j = index - fNj*i;
        if(i<0||i>=fNi || j<0||j>=fNj){i=-1;j=-1; return;}
     }
     // Returns the signal+noise for a give map coordinate
-    Double_t GetSignal(Int_t index){
+    Double_t GetSignal(Int_t index)  {
        if(GetpListItem(index)==0) return 0.0;
        return GetpListItem(index)->GetSumSignal();
     }
     // Returns the signal+noise for a give map coordinate
-    Double_t GetSignal(Int_t i,Int_t j){
+    virtual Double_t GetSignal(Int_t i,Int_t j) const  {
        if(GetpListItem(i,j)==0) return 0.0;
        return GetpListItem(i,j)->GetSumSignal();
     }
     // Returns the signal only for a give map coordinate
-    Double_t GetSignalOnly(Int_t i,Int_t j){
+    Double_t GetSignalOnly(Int_t i,Int_t j)const  {
        if(GetpListItem(i,j)==0) return 0.0;
        return GetpListItem(i,j)->GetSignal();
     }
     // Returns the noise for a give map coordinate
-    Double_t GetNoise(Int_t i,Int_t j){
+    Double_t GetNoise(Int_t i,Int_t j) const {
        if(GetpListItem(i,j)==0) return 0.0;
        return GetpListItem(i,j)->GetNoise();
     }
     // returns the track number which generated the signal at a given map
     // coordinate. If there is no signal or only noise, then -2 is returned.
     // k is the track rank number.
-    Double_t GetTSignal(Int_t i,Int_t j,Int_t k){
+    Double_t GetTSignal(Int_t i,Int_t j,Int_t k) const {
        if(GetpListItem(i,j)==0) return 0.0;
        return GetpListItem(i,j)->GetSignal(k);
     }
     // returns the track number which generated the signal at a given map
     // coordinate. If there is no signal or only noise, then -2 is returned.
     // k is the track rank number.
-    Int_t GetTrack(Int_t i,Int_t j,Int_t k){
+    Int_t GetTrack(Int_t i,Int_t j,Int_t k) const {
        if(GetpListItem(i,j)==0) return -2;
        return GetpListItem(i,j)->GetTrack(k);
     }
     // returns the hit number which generated the signal at a given map
     // coordinate. If there is no signal or only noise, then -2 is returned.
     // k is the hit rank number.
-    Int_t GetHit(Int_t i,Int_t j,Int_t k){
+    Int_t GetHit(Int_t i,Int_t j,Int_t k) const {
        if(GetpListItem(i,j)==0) return -2;
        return GetpListItem(i,j)->GetHit(k);
     }
     // returns the number of Signal values
-    Int_t GetNSignals(Int_t i,Int_t j){
+    Int_t GetNSignals(Int_t i,Int_t j) const {
        if(GetpListItem(i,j)==0) return 0;
        return GetpListItem(i,j)->GetNsignals();
     }
@@ -187,46 +97,54 @@ class AliITSpList: public AliITSMap {
     void AddSignal(Int_t i,Int_t j,Int_t trk,Int_t ht,Int_t mod,Double_t sig);
     // Adds a Noise value to the map. Creating and expanding arrays as needed.
     void AddNoise(Int_t i,Int_t j,Int_t mod,Double_t noise);
-    // Delete all AliITSpListItems and zero the TObjArray
-    void ClearMap();
-    // Delete a particular AliITSpListItem in the TObjArray.
-    void DeleteHit(Int_t i,Int_t j);
-    // returns hit index in TObjArray
-    Int_t GetHitIndex(Int_t i,Int_t j){return GetIndex(i,j);}
+    // Delete all AliITSpListItems and zero the TClonesArray
+    virtual void ClearMap();
+    // Delete a particular AliITSpListItem in the TClonesArray.
+    virtual void DeleteHit(Int_t i,Int_t j);
+    // returns hit index in TClonesArray
+    virtual Int_t GetHitIndex(Int_t i,Int_t j) const {return GetIndex(i,j);}
     // returns "hit" AliITSpListItem as a TObject.
-    TObject * GetHit(Int_t i,Int_t j){return (TObject*)GetpListItem(i,j);}
+    TObject * GetHit(Int_t i,Int_t j) const {return (TObject*)GetpListItem(i,j);}
     // tests hit status.
-    FlagType TestHit(Int_t i,Int_t j){if(GetpListItem(i,j)==0) return kEmpty;
-    else if(GetSignal(i,j)<=0) return kUnused; else return kUsed;}
-    // Returns the pointer to the TObjArray of pList Items
-    TObjArray * GetpListItems(){return fa;}
-    // returns the pList Item stored in the TObject array
-    AliITSpListItem* GetpListItem(Int_t index){
-       if(fa!=0)return (AliITSpListItem*) (fa->At(index));
-       else return 0;}
+    virtual FlagTypeITS TestHit(Int_t i,Int_t j){if(GetpListItem(i,j)==0) return kEmptyITS;
+    else if(GetSignal(i,j)<=0) return kUnusedITS; else return kUsedITS;}
+    // returns the pList Item stored in the TClonesArray
+    AliITSpListItem* GetpListItem(Int_t index) { if((fa[index]).IsUsed())
+      return &(fa[index]);
+      else return NULL;}
     // returns the pList Item stored in the TObject array
-    AliITSpListItem* GetpListItem(Int_t i,Int_t j){
-       if(fa!=0)return (AliITSpListItem*) (fa->At(GetIndex(i,j)));
-       else return 0;}
+    AliITSpListItem* GetpListItem(Int_t i,Int_t j) const {
+      if((fa[GetIndex(i,j)]).IsUsed())return &(fa[GetIndex(i,j)]);
+      else return NULL; }
 
     // Fill pList from digits. Not functional yet
-    void FillMap(){;}
+    virtual void FillMap(){NotImplemented("FillMap");}
+    virtual void FillMap2() {NotImplemented("FillMap2");}
     // Sets threshold for significance. Not of relavance in this case.
-    void SetThreshold(Int_t i){;}
+    virtual void SetThreshold(Int_t /* i */){NotImplemented("SetThreshold");}
+    virtual void SetThresholdArr(TArrayI /*thr*/) {NotImplemented("SetThresholdArr");}    
     // Sets a single hit. Not of relavance in this case.
-    void SetHit(Int_t i,Int_t j,Int_t k){;}
+    virtual void SetHit(Int_t /* i */,Int_t /* j */,Int_t /* k */){NotImplemented("SetHit");}
     // Flags a hit. Not of relavence in this case.
-    void FlagHit(Int_t i,Int_t j){;}
+    virtual void FlagHit(Int_t /* i */,Int_t /* j */){NotImplemented("FlagHit");}
+    virtual void GetCell(Int_t index,Int_t &i,Int_t &j) const;
+ // GetIndex returns the TClonesArray index for a given set of map indexes.
+    static Int_t GetIndex(Int_t i,Int_t j,Int_t maxj){
+      return maxj*i+j;}
 
  private:
+
+// private methods
+    Int_t GetIndex(Int_t i,Int_t j) const {
+      if(i<0||i>=fNi || j<0||j>=fNj){AliWarning(Form("Index out of range 0<i=%d<%d and 0<0j=%d<%d",i,fNi,j,fNj)); return -1;}
+      return GetIndex(i,j,fNj);}
+    void NotImplemented(const char *method) const {if(gDebug>0)
+       Warning(method,"This method is not implemented for this class");}
+// data members
     Int_t     fNi,fNj;   // The max index in i,j.
-    TObjArray *fa;       // array of pList items
-    Int_t     fEnteries; // keepts track of the number of non-zero entries.
+    AliITSpListItem *fa;       // array of pList items
+    Int_t     fEntries; // keepts track of the number of non-zero entries.
 
-    ClassDef(AliITSpList,3) // list of signals and track numbers
+    ClassDef(AliITSpList,5) // list of signals and track numbers
 };     
-// Input and output functions for standard C++ input/output.
-ostream & operator<<(ostream &os,AliITSpList &source);
-istream & operator>>(istream &is,AliITSpList &source);
-
 #endif