]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSMapA2.cxx
Removed zero-ing of fModules variable in constructors.
[u/mrichter/AliRoot.git] / ITS / AliITSMapA2.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
16#include <TH1.h>
17#include <TObjArray.h>
18#include <TMath.h>
19
20#include "AliITSMapA2.h"
21#include "AliITSsegmentation.h"
22#include "AliITSresponse.h"
23#include "AliITSdigit.h"
24
25////////////////////////////////////////////////////////////////////////
26// Map Class for ITS. Implementation A2. In this implementation, the //
27// 2 dimensional (iz,ix) map is filled with Double precision floating //
28// point values. Since this class is derived for AliITSMapA1 it also //
29// has all of the functionality of that class as well. For each //
30// cell a corresponding TObject, a hit, can also be stored. //
31// The detector geometry is accessed via the that detectors //
32// segmentation class and stored here for conveniance. //
33////////////////////////////////////////////////////////////////////////
34
35ClassImp(AliITSMapA2)
36
37//______________________________________________________________________
38AliITSMapA2::AliITSMapA2(){
39 // default constructor
40
41 fSegmentation = 0;
42 fNpz = 0;
43 fNpx = 0;
44 fMaxIndex = 0;
45 fHitMapD = 0;
46 fObjects = 0;
47 fNobjects = 0;
48 fMapThresholdD =0.;
49}
50//______________________________________________________________________
51AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg){
52 //constructor
53
54 fScaleSizeZ = 1;
55 fScaleSizeX = 1;
56 fSegmentation = seg;
57 fNpz = fSegmentation->Npz();
58 fNpx = fSegmentation->Npx();
59 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
60 fHitMapD = new Double_t[fMaxIndex];
61 fMapThresholdD = 0.;
62 fObjects = 0;
63 fNobjects = 0;
64 ClearMap();
65}
66//______________________________________________________________________
67AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg,
68 Int_t scalesizeX, Int_t scalesizeZ){
69 //constructor
70
71 fSegmentation = seg;
72 fScaleSizeX = scalesizeX;
73 fScaleSizeZ = scalesizeZ;
74 fNpz = fScaleSizeZ*fSegmentation->Npz();
75 fNpx = fScaleSizeX*fSegmentation->Npx();
76 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
77 fHitMapD = new Double_t[fMaxIndex];
78 fMapThresholdD = 0.;
79 fObjects = 0;
80 fNobjects = 0;
81 ClearMap();
82}
83//______________________________________________________________________
84AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *obj,
85 Double_t thresh){
86 //constructor
87
88 fNobjects = 0;
89 fScaleSizeZ = 1;
90 fScaleSizeX = 1;
91 fSegmentation = seg;
92 fNpz = fSegmentation->Npz();
93 fNpx = fSegmentation->Npx();
94 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
95 fHitMapD = new Double_t[fMaxIndex];
96 fObjects = obj;
97 if (fObjects) fNobjects = fObjects->GetEntriesFast();
98 fMapThresholdD = thresh;
99 ClearMap();
100}
101//______________________________________________________________________
102AliITSMapA2::~AliITSMapA2(){
103 //destructor
104
105 if (fHitMapD) delete[] fHitMapD;
106}
107//______________________________________________________________________
108AliITSMapA2::AliITSMapA2(const AliITSMapA2 &source){
109 // Copy Constructor
110
111 if(&source == this) return;
112
113 this->fMapThresholdD = source.fMapThresholdD;
114 this->fScaleSizeX = source.fScaleSizeX;
115 this->fScaleSizeZ = source.fScaleSizeZ;
116 this->fHitMapD = source.fHitMapD;
117 return;
118}
119//______________________________________________________________________
120AliITSMapA2& AliITSMapA2::operator=(const AliITSMapA2 &source) {
121 // Assignment operator
122
123 if(&source == this) return *this;
124
125 this->fMapThresholdD = source.fMapThresholdD;
126 this->fScaleSizeX = source.fScaleSizeX;
127 this->fScaleSizeZ = source.fScaleSizeZ;
128 this->fHitMapD = source.fHitMapD;
129 return *this;
130}
131//______________________________________________________________________
132void AliITSMapA2::ClearMap(){
133 //clear array
134
135 memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
136}
137//______________________________________________________________________
138void AliITSMapA2::FillMap(){
139 // fills signal map from digits - apply a threshold for signal
140
141 if (!fObjects) return;
142
143 Int_t ndigits = fObjects->GetEntriesFast();
144 if (!ndigits) return;
145
146 AliITSdigit *dig;
147 for (Int_t ndig=0; ndig<ndigits; ndig++) {
148 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
149 Double_t signal = (Double_t)(dig->fSignal);
150 if (signal > fMapThresholdD) SetHit(dig->fCoord1,dig->fCoord2,signal);
151 } // end for ndig
152}
153//______________________________________________________________________
154void AliITSMapA2::SetHit(Int_t iz, Int_t ix, Double_t signal){
155 // set signal at a certain position in array
156
157 fHitMapD[CheckedIndex(iz, ix)]=signal;
158}
159//______________________________________________________________________
160void AliITSMapA2::DeleteHit(Int_t iz, Int_t ix){
161 //set the entry value to zero
162
163 fHitMapD[CheckedIndex(iz, ix)]=0;
164}
165//______________________________________________________________________
166void AliITSMapA2::FlagHit(Int_t iz, Int_t ix){
167 //flag an entry
168
169 fHitMapD[CheckedIndex(iz, ix)]=
170 -1000.*TMath::Abs((Int_t)(fHitMapD[CheckedIndex(iz, ix)])+1.);
171}
172//______________________________________________________________________
173Int_t AliITSMapA2::GetHitIndex(Int_t iz, Int_t ix){
174 //return the index of an entry in array
175
176 return CheckedIndex(iz, ix);
177}
178//______________________________________________________________________
179TObject* AliITSMapA2::GetHit(Int_t i, Int_t dummy){
180 //return a pointer to the 1D histogram
181
182 if (fObjects) {
183 return fObjects->UncheckedAt(i);
184 } else return NULL;
185}
186//______________________________________________________________________
187Double_t AliITSMapA2::GetSignal(Int_t index){
188 //get signal in a cell
189
190 if (index<fMaxIndex) return (index <0) ? 0. : fHitMapD[index];
191 else return 0.;
192}
193//______________________________________________________________________
194FlagType AliITSMapA2::TestHit(Int_t iz, Int_t ix){
195 // check if the entry has already been flagged
196
197 if (CheckedIndex(iz, ix) < 0) return kEmpty;
198 Int_t inf=(Int_t)fHitMapD[CheckedIndex(iz, ix)];
199
200 if (inf <= -1000) {
201 return kUsed;
202 } else if (inf == 0) {
203 return kEmpty;
204 } else {
205 return kUnused;
206 } // end if inf...
207}
208//______________________________________________________________________
209void AliITSMapA2::FillMapFromHist(){
210 // fills map from 1D histograms
211
212 if (!fObjects) return;
213
214 // an example
215 for( Int_t i=0; i<fNobjects; i++) {
216 TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
217 Int_t nsamples = hist->GetNbinsX();
218 for( Int_t j=0; j<nsamples; j++) {
219 Double_t signal = (Double_t)(hist->GetBinContent(j+1));
220 if (signal > fMapThresholdD) SetHit(i,j,signal);
221 } // end for j
222 } // end for i
223}
224//______________________________________________________________________
225void AliITSMapA2::FillHist(){
226 // fill 1D histograms from map
227
228 if (!fObjects || fScaleSizeX != 1) return;
229
230 // an example
231 for( Int_t i=0; i<fNobjects; i++) {
232 TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
233 for( Int_t j=0; j<fNpx; j++) {
234 Double_t signal=GetSignal(i,j);
235 if (signal > fMapThresholdD) hist->Fill((Float_t)j,signal);
236 } // end for j
237 } // end for i
238}
239//______________________________________________________________________
240void AliITSMapA2::ResetHist(){
241 // Reset histograms
242
243 if (!fObjects) return;
244
245 for( Int_t i=0; i<fNobjects; i++) {
246 if ((*fObjects)[i]) ((TH1F*)(*fObjects)[i])->Reset();
247 } // end for i
248}
249//______________________________________________________________________
250void AliITSMapA2::AddSignal(Int_t iz,Int_t ix,Double_t sig){
251 // Addes sig to cell iz. equivalent to the very common
252 // sig = fMapA2->GetSignal(iz,ix) + sig; fMapA2->SetHit(iz,ix,sig);
253
254
255 Int_t index=GetHitIndex(iz,ix);
256 if(index<0) return;
257 fHitMapD[CheckedIndex(iz, ix)] += sig;
258}