]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSMapA1.cxx
Produce sample with given amp, delegate ADC2GeV conversion to OCDB
[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//_________________________________________________________________________
130AliITSMapA1& AliITSMapA1::operator=(const AliITSMapA1 &source) {
131 // Assignment operator
132
133 this->~AliITSMapA1();
134 new(this) AliITSMapA1(source);
135 return *this;
136}
137//______________________________________________________________________
138AliITSMapA1::AliITSMapA1(const AliITSMapA1 &source) : AliITSMap(source),
139fSegmentation(source.fSegmentation),
140fNpx(source.fNpx),
141fNpz(source.fNpz),
142fObjects(source.fObjects),
143fNobjects(source.fNobjects),
144fMaxIndex(source.fMaxIndex),
145fMapThresholdArr(source.fMapThresholdArr),
146fHitMap(source.fHitMap),
147fMapThreshold(source.fMapThreshold){
148 // Copy Constructor
149
150}
151//______________________________________________________________________
152void AliITSMapA1::ClearMap(){
153 //clear array
154
155 memset(fHitMap,0,sizeof(int)*fMaxIndex);
156}
157//______________________________________________________________________
158void AliITSMapA1::SetArray(TObjArray *obj){
159 // set array of objects
160
161 fObjects = obj;
162 if (fObjects) fNobjects = fObjects->GetEntriesFast();
163}
164//______________________________________________________________________
165Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix) const {
166 //check boundaries and return an index in array
167 Int_t index=fNpx*iz+ix;
168
169 //if (index > fMaxIndex) {
170 if (index > fMaxIndex || index < 0) {
171 printf("\n \n \n Try to read/write outside array !!!!"
172 " \n \n %d %d %d %d %d %d \n",iz,ix,fMaxIndex,index,fNpz,fNpx);
173 // force crash
174 return -1;
175 } else {
176 return index;
177 } // end if index>max or < 0
178}
179//______________________________________________________________________
180void AliITSMapA1::FillMap(){
181 // fill array with digits indices
182
183 Int_t ndigits = fObjects->GetEntriesFast();
184 if (!ndigits) return;
185
186 AliITSdigit *dig;
187 for (Int_t ndig=0; ndig<ndigits; ndig++) {
188 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
189 if(dig->GetSignal() > fMapThreshold) {
190 SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
191 } // end if fSignal > fMapthreshold
192 } // end for ndig
193}
194//______________________________________________________________________
195void AliITSMapA1::FillMap2(){
196 // fill array with digits indices
197
198 Int_t ndigits = fObjects->GetEntriesFast();
199 if (!ndigits) return;
200
201 AliITSdigit *dig;
202 for (Int_t ndig=0; ndig<ndigits; ndig++) {
203 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
204 if(dig->GetSignal() > fMapThresholdArr[dig->GetCoord1()]) {
205 SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
206 } // end if fSignal > fMapthreshold
207 } // end for ndig
208}
209
210//______________________________________________________________________
211void AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit){
212 // set the digit index at a certain position in array
213
214 fHitMap[CheckedIndex(iz, ix)]=idigit+1;
215}
216//______________________________________________________________________
217void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix){
218 // delete an entry in array
219
220 fHitMap[CheckedIndex(iz, ix)]=0;
221}
222//______________________________________________________________________
223void AliITSMapA1::FlagHit(Int_t iz, Int_t ix){
224 // flag an entry in array
225
226 fHitMap[CheckedIndex(iz, ix)] = -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
227}
228//______________________________________________________________________
229Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix) const {
230 // return the digit index from a specific entry in array
231
232 return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
233}
234//______________________________________________________________________
235TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix) const {
236 // return the pointer to the digit
237
238 Int_t index=GetHitIndex(iz,ix);
239 // Force crash if index does not exist !
240 return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
241}
242//______________________________________________________________________
243Double_t AliITSMapA1::GetSignal(Int_t iz, Int_t ix) const{
244 // get a pad signal
245 Double_t signal;
246
247 AliITSdigit *dig = (AliITSdigit*)GetHit(iz,ix);
248 if(dig) signal=(Double_t)dig->GetSignal();
249 else signal=0.;
250 return signal;
251}
252//______________________________________________________________________
253FlagType AliITSMapA1::TestHit(Int_t iz, Int_t ix) {
254 // check whether the digit has already been flagged
255
256 if (CheckedIndex(iz, ix) < 0) return kEmpty;
257 Int_t inf=fHitMap[CheckedIndex(iz, ix)];
258 if (inf < 0) {
259 return kUsed;
260 } else if (inf == 0) {
261 return kEmpty;
262 } else {
263 return kUnused;
264 } // end if inf
265}
266