]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSMapA2.cxx
Added many comments and some documentation, fixed up some coding violations
[u/mrichter/AliRoot.git] / ITS / AliITSMapA2.cxx
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
35 ClassImp(AliITSMapA2)
36
37 //______________________________________________________________________
38 AliITSMapA2::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 //______________________________________________________________________
51 AliITSMapA2::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 //______________________________________________________________________
67 AliITSMapA2::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 //______________________________________________________________________
84 AliITSMapA2::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 //______________________________________________________________________
102 AliITSMapA2::~AliITSMapA2(){
103     //destructor
104
105     if (fHitMapD) delete[] fHitMapD;
106 }
107 //______________________________________________________________________
108 AliITSMapA2::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 //______________________________________________________________________
120 AliITSMapA2& 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 //______________________________________________________________________
132 void AliITSMapA2::ClearMap(){
133     //clear array
134
135     memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
136 }
137 //______________________________________________________________________
138 void  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 //______________________________________________________________________
154 void  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 //______________________________________________________________________
160 void AliITSMapA2::DeleteHit(Int_t iz, Int_t ix){
161     //set the entry value to zero
162
163     fHitMapD[CheckedIndex(iz, ix)]=0;
164 }
165 //______________________________________________________________________
166 void 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 //______________________________________________________________________
173 Int_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 //______________________________________________________________________
179 TObject* 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 //______________________________________________________________________
187 Double_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 //______________________________________________________________________
194 FlagType 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 //______________________________________________________________________
209 void  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 //______________________________________________________________________
225 void  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 //______________________________________________________________________
240 void  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 //______________________________________________________________________
250 void 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 }