1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 #include "AliITSMap.h"
23 AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg)
27 fNpz=fSegmentation->Npz();
28 fNpx=fSegmentation->Npx();
29 fMaxIndex=fNpz*fNpx+fNpx; // 2 halves of detector
31 fHitMap = new Int_t[fMaxIndex];
36 AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj)
40 fNpz=fSegmentation->Npz();
41 fNpx=fSegmentation->Npx();
42 fMaxIndex=fNpz*fNpx+fNpx; // 2 halves of detector
44 fHitMap = new Int_t[fMaxIndex];
46 if (fObjects) fNobjects = fObjects->GetEntriesFast();
51 AliITSMapA1::~AliITSMapA1()
54 if (fHitMap) delete[] fHitMap;
57 //__________________________________________________________________________
58 AliITSMapA1::AliITSMapA1(const AliITSMapA1 &source){
60 if(&source == this) return;
61 this->fNpx = source.fNpx;
62 this->fNpz = source.fNpz;
63 this->fObjects = source.fObjects;
64 this->fNobjects = source.fNobjects;
65 this->fMaxIndex = source.fMaxIndex;
66 this->fHitMap = source.fHitMap;
70 //_________________________________________________________________________
72 AliITSMapA1::operator=(const AliITSMapA1 &source) {
73 // Assignment operator
74 if(&source == this) return *this;
75 this->fNpx = source.fNpx;
76 this->fNpz = source.fNpz;
77 this->fObjects = source.fObjects;
78 this->fNobjects = source.fNobjects;
79 this->fMaxIndex = source.fMaxIndex;
80 this->fHitMap = source.fHitMap;
84 void AliITSMapA1::ClearMap()
87 memset(fHitMap,0,sizeof(int)*fMaxIndex);
90 void AliITSMapA1::SetArray(TObjArray *obj)
92 // set array of objects
94 if (fObjects) fNobjects = fObjects->GetEntriesFast();
98 Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix)
100 //check boundaries and return an index in array
101 Int_t index=fNpx*iz+ix;
102 if (index > fMaxIndex) {
103 printf("\n \n \n Try to read/write outside array !!!! \n \n %d %d %d %d %d %d",iz,ix, fMaxIndex, index, fNpz, fNpx);
112 void AliITSMapA1::FillMap()
114 // fill array with digits indices
115 Int_t ndigits = fObjects->GetEntriesFast();
116 //printf("MapA1: ndigits fNobjects %d %d \n",ndigits,fNobjects);
117 if (!ndigits) return;
121 for(ndig=0; ndig<ndigits; ndig++) {
122 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
123 //printf("MapA1: ndig fCoord1 fCoord2 %d %d %d \n",dig->fCoord1,dig->fCoord2,ndig);
124 SetHit(dig->fCoord1,dig->fCoord2,ndig);
129 void AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit)
131 // set the digit index at a certain position in array
132 fHitMap[CheckedIndex(iz, ix)]=idigit+1;
135 void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix)
137 // delete an entry in array
138 fHitMap[CheckedIndex(iz, ix)]=0;
141 void AliITSMapA1::FlagHit(Int_t iz, Int_t ix)
143 // flag an entry in array
144 fHitMap[CheckedIndex(iz, ix)]=
145 -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
148 Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix)
150 // return the digit index from a specific entry in array
151 return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
154 TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix)
156 // return the pointer to the digit
157 Int_t index=GetHitIndex(iz,ix);
158 // Force crash if index does not exist !
159 return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
163 Flag_t AliITSMapA1::TestHit(Int_t iz, Int_t ix)
165 // check whether the digit has already been flagged
166 Int_t inf=fHitMap[CheckedIndex(iz, ix)];
169 } else if (inf == 0) {
175 //_______________________________________________________________________
176 void AliITSMapA1::Streamer(TBuffer &R__b)
178 // Stream an object of class AliITSMapA1.
180 if (R__b.IsReading()) {
181 Version_t R__v = R__b.ReadVersion(); if (R__v) { }
182 AliITSMap::Streamer(R__b);
183 R__b >> fSegmentation;
189 R__b.ReadArray(fHitMap);
191 R__b.WriteVersion(AliITSMapA1::IsA());
192 AliITSMap::Streamer(R__b);
193 R__b << fSegmentation;
199 R__b.WriteArray(fHitMap,fMaxIndex);
203 //========================================================================
204 ClassImp(AliITSMapA2)
206 AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg)
210 fNpz=fSegmentation->Npz();
211 fNpx=fSegmentation->Npx();
212 fMaxIndex=fNpz*fNpx+fNpx; // 2 halves of detector
214 fHitMap = new Double_t[fMaxIndex];
219 //--------------------------------------
220 AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *hist, Double_t thresh)
224 fNpz=fSegmentation->Npz();
225 fNpx=fSegmentation->Npx();
226 fMaxIndex=fNpz*fNpx+fNpx; // 2 halves of detector
228 fHitMap = new Double_t[fMaxIndex];
230 if (fObjects) fNobjects = fObjects->GetEntriesFast();
231 fMapThreshold = thresh;
234 //--------------------------------------
237 AliITSMapA2::~AliITSMapA2()
240 if (fHitMap) delete[] fHitMap;
242 //--------------------------------------
244 //__________________________________________________________________________
245 AliITSMapA2::AliITSMapA2(const AliITSMapA2 &source){
247 if(&source == this) return;
248 this->fMapThreshold = source.fMapThreshold;
249 this->fHitMap = source.fHitMap;
253 //_________________________________________________________________________
255 AliITSMapA2::operator=(const AliITSMapA2 &source) {
256 // Assignment operator
257 if(&source == this) return *this;
258 this->fMapThreshold = source.fMapThreshold;
259 this->fHitMap = source.fHitMap;
263 void AliITSMapA2::ClearMap()
266 memset(fHitMap,0,sizeof(Double_t)*fMaxIndex);
269 //--------------------------------------
270 void AliITSMapA2::FillMap()
273 // fills signal map from digits - apply a threshold for signal
275 if (!fObjects) return;
277 Int_t ndigits = fObjects->GetEntriesFast();
278 printf("MapA2: ndigits fNobjects %d %d \n",ndigits,fNobjects);
279 if (!ndigits) return;
283 for(ndig=0; ndig<ndigits; ndig++) {
284 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
285 Double_t signal = (Double_t)(dig->fSignal);
286 if (signal >= fMapThreshold) SetHit(dig->fCoord1,dig->fCoord2,signal);
290 //--------------------------------------
291 void AliITSMapA2::SetHit(Int_t iz, Int_t ix, Double_t signal)
293 // set signal at a certain position in array
294 fHitMap[CheckedIndex(iz, ix)]=signal;
298 //--------------------------------------
299 void AliITSMapA2::DeleteHit(Int_t iz, Int_t ix)
301 //set the entry value to zero
302 fHitMap[CheckedIndex(iz, ix)]=0;
305 //--------------------------------------
306 void AliITSMapA2::FlagHit(Int_t iz, Int_t ix)
309 fHitMap[CheckedIndex(iz, ix)]=
310 -1000.*TMath::Abs((Int_t)(fHitMap[CheckedIndex(iz, ix)])+1.);
314 //--------------------------------------
315 Int_t AliITSMapA2::GetHitIndex(Int_t iz, Int_t ix)
317 //return the index of an entry in array
318 return CheckedIndex(iz, ix);
321 //--------------------------------------
322 TObject* AliITSMapA2::GetHit(Int_t i, Int_t dummy)
325 //return a pointer to the 1D histogram
328 return fObjects->UncheckedAt(i);
334 //--------------------------------------
335 Double_t AliITSMapA2::GetSignal(Int_t iz, Int_t ix)
337 //get signal in a cell
338 Int_t index=GetHitIndex(iz,ix);
339 return (index <0) ? 0. : fHitMap[CheckedIndex(iz, ix)];
342 //--------------------------------------
343 Double_t AliITSMapA2::GetSignal(Int_t index)
345 //get signal in a cell
346 if (index<fMaxIndex) return (index <0) ? 0. : fHitMap[index];
349 //--------------------------------------
350 Flag_t AliITSMapA2::TestHit(Int_t iz, Int_t ix)
352 // check if the entry has already been flagged
353 Int_t inf=(Int_t)fHitMap[CheckedIndex(iz, ix)];
357 } else if (inf == 0) {
364 //--------------------------------------
365 void AliITSMapA2::FillMapFromHist()
368 // fills map from 1D histograms
370 if (!fObjects) return;
374 for(i=0; i<fNobjects; i++) {
375 TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
376 Int_t nsamples = hist->GetNbinsX();
377 for(j=0; j<nsamples; j++) {
378 Double_t signal = (Double_t)(hist->GetBinContent(j+1));
379 if (signal >= fMapThreshold) SetHit(i,j,signal);
384 //--------------------------------------
385 void AliITSMapA2::FillHist()
388 // fill 1D histograms from map
389 if (!fObjects) return;
393 for(i=0; i<fNobjects; i++) {
394 TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
395 for(j=0; j<fNpx; j++) {
396 Double_t signal=GetSignal(i,j);
397 if (signal >= fMapThreshold) hist->Fill((Float_t)j,signal);
402 //--------------------------------------
403 void AliITSMapA2::ResetHist()
409 if (!fObjects) return;
412 for(i=0; i<fNobjects; i++) {
413 if ((*fObjects)[i]) ((TH1F*)(*fObjects)[i])->Reset();
417 //______________________________________________________________________________
418 void AliITSMapA2::Streamer(TBuffer &R__b)
420 // Stream an object of class AliITSMapA2.
422 if (R__b.IsReading()) {
423 Version_t R__v = R__b.ReadVersion(); if (R__v) { }
424 AliITSMapA1::Streamer(R__b);
425 R__b.ReadArray(fHitMap);
426 R__b >> fMapThreshold;
428 R__b.WriteVersion(AliITSMapA2::IsA());
429 AliITSMapA1::Streamer(R__b);
430 R__b.WriteArray(fHitMap, fMaxIndex); // fMaxIndex is from AliITSMapA1.
431 R__b << fMapThreshold;