]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSMapA1.cxx
Fix up a warning about casts
[u/mrichter/AliRoot.git] / ITS / AliITSMapA1.cxx
... / ...
CommitLineData
1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15#include <TObjArray.h>
16#include "AliITSMapA1.h"
17#include "AliITSsegmentation.h"
18#include "AliITSdigit.h"
19
20////////////////////////////////////////////////////////////////////////
21// Map Class for ITS. Implementation A1. In this implementation, the //
22// 2 dimensional (iz,ix) map is filled with integers values. For each //
23// cell a corresponding TObject, a hit, can also be stored. //
24// The detector geometry is accessed via the that detectors //
25// segmentation class and stored here for conveniance. //
26////////////////////////////////////////////////////////////////////////
27
28ClassImp(AliITSMapA1)
29//______________________________________________________________________
30AliITSMapA1::AliITSMapA1():
31fSegmentation(0),
32fNpx(0),
33fNpz(0),
34fObjects(0),
35fNobjects(0),
36fMaxIndex(0),
37fMapThresholdArr(0),
38fHitMap(0),
39fMapThreshold(0){
40 // default constructor
41
42}
43//______________________________________________________________________
44AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg):
45fSegmentation(seg),
46fNpx(0),
47fNpz(0),
48fObjects(0),
49fNobjects(0),
50fMaxIndex(0),
51fMapThresholdArr(0),
52fHitMap(0),
53fMapThreshold(0){
54 //constructor
55
56 fNpz = fSegmentation->Npz();
57 fNpx = fSegmentation->Npx();
58 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
59 fHitMap = new Int_t[fMaxIndex];
60 ClearMap();
61}
62//______________________________________________________________________
63AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj):
64fSegmentation(seg),
65fNpx(0),
66fNpz(0),
67fObjects(obj),
68fNobjects(0),
69fMaxIndex(0),
70fMapThresholdArr(0),
71fHitMap(0),
72fMapThreshold(0){
73 //constructor
74
75 fNpz = fSegmentation->Npz();
76 fNpx = fSegmentation->Npx();
77 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
78 fHitMap = new Int_t[fMaxIndex];
79 if(fObjects) fNobjects = fObjects->GetEntriesFast();
80 ClearMap();
81}
82//______________________________________________________________________
83AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, Int_t thr):
84fSegmentation(seg),
85fNpx(0),
86fNpz(0),
87fObjects(obj),
88fNobjects(0),
89fMaxIndex(0),
90fMapThresholdArr(0),
91fHitMap(0),
92fMapThreshold(thr){
93 //constructor
94
95 fNpz = fSegmentation->Npz();
96 fNpx = fSegmentation->Npx();
97 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
98 fHitMap = new Int_t[fMaxIndex];
99 if(fObjects) fNobjects = fObjects->GetEntriesFast();
100 ClearMap();
101}
102//______________________________________________________________________
103AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, TArrayI thr):
104fSegmentation(seg),
105fNpx(0),
106fNpz(0),
107fObjects(obj),
108fNobjects(0),
109fMaxIndex(0),
110fMapThresholdArr(thr),
111fHitMap(0),
112fMapThreshold(0){
113 //constructor
114
115 fNpz = fSegmentation->Npz();
116 fNpx = fSegmentation->Npx();
117 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
118 fHitMap = new Int_t[fMaxIndex];
119 if(fObjects) fNobjects = fObjects->GetEntriesFast();
120 ClearMap();
121}
122
123//______________________________________________________________________
124AliITSMapA1::~AliITSMapA1(){
125 //destructor
126
127 if(fHitMap) delete[] fHitMap;
128}
129
130//______________________________________________________________________
131void AliITSMapA1::ClearMap(){
132 //clear array
133
134 memset(fHitMap,0,sizeof(int)*fMaxIndex);
135}
136//______________________________________________________________________
137void AliITSMapA1::SetArray(TObjArray *obj){
138 // set array of objects
139
140 fObjects = obj;
141 if (fObjects) fNobjects = fObjects->GetEntriesFast();
142}
143//______________________________________________________________________
144Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix) const {
145 //check boundaries and return an index in array
146 Int_t index=fNpx*iz+ix;
147
148 //if (index > fMaxIndex) {
149 if (index > fMaxIndex || index < 0) {
150 printf("\n \n \n Try to read/write outside array !!!!"
151 " \n \n %d %d %d %d %d %d \n",iz,ix,fMaxIndex,index,fNpz,fNpx);
152 // force crash
153 return -1;
154 } else {
155 return index;
156 } // end if index>max or < 0
157}
158//______________________________________________________________________
159void AliITSMapA1::FillMap(){
160 // fill array with digits indices
161
162 Int_t ndigits = fObjects->GetEntriesFast();
163 if (!ndigits) return;
164
165 AliITSdigit *dig;
166 for (Int_t ndig=0; ndig<ndigits; ndig++) {
167 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
168 if(dig->GetSignal() > fMapThreshold) {
169 SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
170 } // end if fSignal > fMapthreshold
171 } // end for ndig
172}
173//______________________________________________________________________
174void AliITSMapA1::FillMap2(){
175 // fill array with digits indices
176
177 Int_t ndigits = fObjects->GetEntriesFast();
178 if (!ndigits) return;
179
180 AliITSdigit *dig;
181 for (Int_t ndig=0; ndig<ndigits; ndig++) {
182 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
183 if(dig->GetSignal() > fMapThresholdArr[dig->GetCoord1()]) {
184 SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
185 } // end if fSignal > fMapthreshold
186 } // end for ndig
187}
188
189//______________________________________________________________________
190void AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit){
191 // set the digit index at a certain position in array
192
193 fHitMap[CheckedIndex(iz, ix)]=idigit+1;
194}
195//______________________________________________________________________
196void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix){
197 // delete an entry in array
198
199 fHitMap[CheckedIndex(iz, ix)]=0;
200}
201//______________________________________________________________________
202void AliITSMapA1::FlagHit(Int_t iz, Int_t ix){
203 // flag an entry in array
204
205 fHitMap[CheckedIndex(iz, ix)] = -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
206}
207//______________________________________________________________________
208Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix) const {
209 // return the digit index from a specific entry in array
210
211 return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
212}
213//______________________________________________________________________
214TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix) const {
215 // return the pointer to the digit
216
217 Int_t index=GetHitIndex(iz,ix);
218 // Force crash if index does not exist !
219 return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
220}
221//______________________________________________________________________
222Double_t AliITSMapA1::GetSignal(Int_t iz, Int_t ix) const{
223 // get a pad signal
224 Double_t signal;
225
226 AliITSdigit *dig = (AliITSdigit*)GetHit(iz,ix);
227 if(dig) signal=(Double_t)dig->GetSignal();
228 else signal=0.;
229 return signal;
230}
231//______________________________________________________________________
232FlagType AliITSMapA1::TestHit(Int_t iz, Int_t ix) {
233 // check whether the digit has already been flagged
234
235 if (CheckedIndex(iz, ix) < 0) return kEmpty;
236 Int_t inf=fHitMap[CheckedIndex(iz, ix)];
237 if (inf < 0) {
238 return kUsed;
239 } else if (inf == 0) {
240 return kEmpty;
241 } else {
242 return kUnused;
243 } // end if inf
244}
245