]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliAODTowers.h
Correct loadpoint in ReorderKine used fro TFluka.
[u/mrichter/AliRoot.git] / STEER / AliAODTowers.h
CommitLineData
049bc9fd 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
17class 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
58Bool_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
71Double_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
79Short_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
89Double_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
100Short_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