]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODTowers.h
New class for debugging of the memory consumption and other run time parameters ...
[u/mrichter/AliRoot.git] / STEER / AliAODTowers.h
1 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 /* $Id$ */
5
6 //-------------------------------------------------------------------------
7 //     AOD class to store tower data
8 //     Author: Markus Oldenburg, CERN
9 //-------------------------------------------------------------------------
10
11 #ifndef ALIAODTOWERS_H
12 #define ALIAODTOWERS_H
13
14 #include <TNamed.h>
15 #include <TMath.h>
16
17 class AliAODTowers : public TNamed 
18 {
19  public:
20   enum AODTwrs_t {kUndef = -1, 
21                   kEMCAL, 
22                   kPHOS};
23
24   AliAODTowers();
25   AliAODTowers(const char* name, const char* title, AODTwrs_t ttype=kUndef);
26   
27   virtual ~AliAODTowers();
28   
29   void CreateContainer(Short_t nTowers);
30   void DeleteContainer();
31   
32   Bool_t SetTower(Short_t pos, Short_t index, Double_t amplitude);
33   
34   Short_t GetNumberOfTowers() const { return fNTowers; }
35   inline Bool_t   GetTower(Short_t pos, Short_t &index, Double_t &amplitude) const;
36   inline Double_t GetTowerAmplitude(Short_t towerIndex);
37   inline Double_t GetAmplitude(Short_t pos) const;
38   inline Short_t  GetIndex(Short_t pos) const;
39
40   Char_t  GetType() const { return fType;}
41   void    SetType(AODTwrs_t ttype) { fType=ttype; }
42
43  protected:
44   Short_t     fNTowers;      // Number of towers
45   Short_t    *fIndex;        //[fNTowers] array of tower indices
46   Double32_t *fAmplitude;    //[fNTowers][0.,600.,16] array with tower amplitudes (= energy!)
47   Bool_t      fIsSorted;     //! true if tower arrays are sorted by index
48   Char_t      fType;         // Towers type
49   
50  private:
51   AliAODTowers(const AliAODTowers& tow); 
52   AliAODTowers& operator=(const AliAODTowers& tow);
53   
54   ClassDef(AliAODTowers, 1);
55 };
56
57
58 Bool_t AliAODTowers::GetTower(Short_t pos, Short_t &index, Double_t &amplitude) const 
59
60   if (pos>=0 && pos<fNTowers) {
61     index = fIndex[pos];
62     amplitude = fAmplitude[pos];
63     return kTRUE;
64   } else {
65     Error("GetTower","Invalid tower index %d", pos);
66     return kFALSE;
67   }
68 }
69
70
71 Double_t AliAODTowers::GetTowerAmplitude(Short_t towerIndex)
72
73   if (!fIsSorted) {
74     // sort it here!
75     Warning("GetTowerAmplitude","Array sort has to be implemented");
76     fIsSorted = kTRUE;
77   }
78
79 Short_t pos = TMath::BinarySearch(fNTowers, fIndex, towerIndex);
80   if (pos>=0 && pos == towerIndex) {
81     return fAmplitude[pos];
82   } else {
83     Error("GetTowerAmplitude","Wrong tower index %d",pos);
84     return 0.;
85   }
86 }
87
88
89 Double_t AliAODTowers::GetAmplitude(Short_t pos) const 
90
91   if (pos>=0 && pos<fNTowers) {
92     return fAmplitude[pos];
93   } else {
94     Error("GetAmplitude","Invalid tower index %d",pos);
95     return 0.;
96   }
97 }
98
99
100 Short_t AliAODTowers::GetIndex(Short_t pos) const 
101
102   if (pos>=0 && pos<fNTowers) {
103     return fIndex[pos];
104   } else {
105     Error("GetIndex","Invalid tower index %d",pos);
106     return fNTowers;
107   }
108 }
109
110
111 #endif