Changes related to the extraction of the V0 finder into a separate class (A. Dainese...
[u/mrichter/AliRoot.git] / ITS / AliITSpList.h
1 #ifndef ALIITSPLIST_H
2 #define ALIITSPLIST_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5
6 //***********************************************************************
7 //
8 // It consist of a TClonesArray of 
9 // AliITSpListItem objects
10 // This array can be accessed via 2 indexed
11 // it is used at digitization level by 
12 // all the 3 ITS subdetectors
13 //
14 // ***********************************************************************
15 #include "TArrayI.h"
16 #include "TClonesArray.h"
17 #include "AliITSMap.h"
18 #include "AliITSpListItem.h"
19
20 class AliITSpList: public AliITSMap {
21
22  public:
23     // Default Constructor
24     AliITSpList();
25     // Standard Constructor
26     AliITSpList(Int_t imax,Int_t jmax);
27     // Class destrutor
28     virtual ~AliITSpList();
29     // Copy constructor
30     AliITSpList(const AliITSpList &source);
31     // = Operator
32     virtual AliITSpList& operator=(const AliITSpList &source);
33     // Returns the max mape index values
34     void GetMaxMapIndex(Int_t &ni,Int_t &nj) const {ni=fNi;nj=fNj;return;}
35     // returns the max index value.
36     Int_t GetMaxIndex() const {return fNi*fNj;}
37     // returns the largest non-zero entry kept in the array fa.
38     Int_t GetEntries() const {return fEntries;}
39     // returns the max number of track/hit entries per cell.
40     Int_t GetNEntries() const {return AliITSpListItem::GetMaxKept();}
41     // for a given TClonesArray index it returns the corresponding map index
42     void  GetMapIndex(Int_t index,Int_t &i,Int_t &j) const {
43         i = index/fNj;j = index - fNj*i;
44         if(i<0||i>=fNi || j<0||j>=fNj){i=-1;j=-1; return;}
45     }
46     // Returns the signal+noise for a give map coordinate
47     Double_t GetSignal(Int_t index)  {
48         if(GetpListItem(index)==0) return 0.0;
49         return GetpListItem(index)->GetSumSignal();
50     }
51     // Returns the signal+noise for a give map coordinate
52     virtual Double_t GetSignal(Int_t i,Int_t j) const  {
53         if(GetpListItem(i,j)==0) return 0.0;
54         return GetpListItem(i,j)->GetSumSignal();
55     }
56     // Returns the signal only for a give map coordinate
57     Double_t GetSignalOnly(Int_t i,Int_t j)const  {
58         if(GetpListItem(i,j)==0) return 0.0;
59         return GetpListItem(i,j)->GetSignal();
60     }
61     // Returns the noise for a give map coordinate
62     Double_t GetNoise(Int_t i,Int_t j) const {
63         if(GetpListItem(i,j)==0) return 0.0;
64         return GetpListItem(i,j)->GetNoise();
65     }
66     // returns the track number which generated the signal at a given map
67     // coordinate. If there is no signal or only noise, then -2 is returned.
68     // k is the track rank number.
69     Double_t GetTSignal(Int_t i,Int_t j,Int_t k) const {
70         if(GetpListItem(i,j)==0) return 0.0;
71         return GetpListItem(i,j)->GetSignal(k);
72     }
73     // returns the track number which generated the signal at a given map
74     // coordinate. If there is no signal or only noise, then -2 is returned.
75     // k is the track rank number.
76     Int_t GetTrack(Int_t i,Int_t j,Int_t k) const {
77         if(GetpListItem(i,j)==0) return -2;
78         return GetpListItem(i,j)->GetTrack(k);
79     }
80     // returns the hit number which generated the signal at a given map
81     // coordinate. If there is no signal or only noise, then -2 is returned.
82     // k is the hit rank number.
83     Int_t GetHit(Int_t i,Int_t j,Int_t k) const {
84         if(GetpListItem(i,j)==0) return -2;
85         return GetpListItem(i,j)->GetHit(k);
86     }
87     // returns the number of Signal values
88     Int_t GetNSignals(Int_t i,Int_t j) const {
89         if(GetpListItem(i,j)==0) return 0;
90         return GetpListItem(i,j)->GetNsignals();
91     }
92     // Adds the contents of pl to the list with track number off set given by
93     // fileIndex.
94     virtual void AddItemTo(Int_t fileIndex, AliITSpListItem *pl);
95     // Adds a Signal value to the map. Creating and expanding arrays as needed.
96     void AddSignal(Int_t i,Int_t j,Int_t trk,Int_t ht,Int_t mod,Double_t sig);
97     // Adds a Noise value to the map. Creating and expanding arrays as needed.
98     void AddNoise(Int_t i,Int_t j,Int_t mod,Double_t noise);
99     // Delete all AliITSpListItems and zero the TClonesArray
100     virtual void ClearMap();
101     // Delete a particular AliITSpListItem in the TClonesArray.
102     virtual void DeleteHit(Int_t i,Int_t j);
103     // returns hit index in TClonesArray
104     virtual Int_t GetHitIndex(Int_t i,Int_t j) const {return GetIndex(i,j);}
105     // returns "hit" AliITSpListItem as a TObject.
106     TObject * GetHit(Int_t i,Int_t j) const {return (TObject*)GetpListItem(i,j);}
107     // tests hit status.
108     virtual FlagType TestHit(Int_t i,Int_t j){if(GetpListItem(i,j)==0) return kEmpty;
109     else if(GetSignal(i,j)<=0) return kUnused; else return kUsed;}
110     // returns the pList Item stored in the TClonesArray
111     AliITSpListItem* GetpListItem(Int_t index) { if((fa[index]).IsUsed())
112       return &(fa[index]);
113       else return NULL;}
114     // returns the pList Item stored in the TObject array
115     AliITSpListItem* GetpListItem(Int_t i,Int_t j) const {
116       if((fa[GetIndex(i,j)]).IsUsed())return &(fa[GetIndex(i,j)]);
117       else return NULL; }
118
119     // Fill pList from digits. Not functional yet
120     virtual void FillMap(){NotImplemented("FillMap");}
121     virtual void FillMap2() {NotImplemented("FillMap2");}
122     // Sets threshold for significance. Not of relavance in this case.
123     virtual void SetThreshold(Int_t /* i */){NotImplemented("SetThreshold");}
124     virtual void SetThresholdArr(TArrayI /*thr*/) {NotImplemented("SetThresholdArr");}    
125     // Sets a single hit. Not of relavance in this case.
126     virtual void SetHit(Int_t /* i */,Int_t /* j */,Int_t /* k */){NotImplemented("SetHit");}
127     // Flags a hit. Not of relavence in this case.
128     virtual void FlagHit(Int_t /* i */,Int_t /* j */){NotImplemented("FlagHit");}
129     virtual void GetCell(Int_t index,Int_t &i,Int_t &j) const;
130
131  private:
132
133 // private methods
134     Int_t GetIndex(Int_t i,Int_t j) const;
135     void NotImplemented(const char *method) const {if(gDebug>0)
136          Warning(method,"This method is not implemented for this class");}
137 // data members
138     Int_t     fNi,fNj;   // The max index in i,j.
139     AliITSpListItem *fa;       // array of pList items
140     Int_t     fEntries; // keepts track of the number of non-zero entries.
141
142     ClassDef(AliITSpList,5) // list of signals and track numbers
143 };      
144 #endif