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 <TObjArray.h>
19 #include "AliITSMapA2.h"
20 #include "AliITSsegmentation.h"
21 #include "AliITSdigit.h"
23 ////////////////////////////////////////////////////////////////////////
24 // Map Class for ITS. Implementation A2. In this implementation, the //
25 // 2 dimensional (iz,ix) map is filled with Double precision floating //
26 // point values. Since this class is derived for AliITSMapA1 it also //
27 // has all of the functionality of that class as well. For each //
28 // cell a corresponding TObject, a hit, can also be stored. //
29 // The detector geometry is accessed via the that detectors //
30 // segmentation class and stored here for conveniance. //
31 ////////////////////////////////////////////////////////////////////////
35 //______________________________________________________________________
36 AliITSMapA2::AliITSMapA2():
41 // default constructor
50 //______________________________________________________________________
51 AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg):
59 fNpz = fSegmentation->Npz();
60 fNpx = fSegmentation->Npx();
61 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
62 fHitMapD = new Double_t[fMaxIndex+1];
67 //______________________________________________________________________
68 AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg,
69 Int_t scalesizeX, Int_t scalesizeZ):
72 fScaleSizeX(scalesizeX),
73 fScaleSizeZ(scalesizeZ){
77 fNpz = fScaleSizeZ*fSegmentation->Npz();
78 fNpx = fScaleSizeX*fSegmentation->Npx();
79 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
80 fHitMapD = new Double_t[fMaxIndex+1];
85 //______________________________________________________________________
86 AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *obj,
89 fMapThresholdD(thresh),
96 fNpz = fSegmentation->Npz();
97 fNpx = fSegmentation->Npx();
98 fMaxIndex = fNpz*fNpx+fNpx; // 2 halves of detector
99 fHitMapD = new Double_t[fMaxIndex+1];
101 if (fObjects) fNobjects = fObjects->GetEntriesFast();
104 //______________________________________________________________________
105 AliITSMapA2::~AliITSMapA2(){
108 if (fHitMapD) delete[] fHitMapD;
110 //______________________________________________________________________
111 AliITSMapA2::AliITSMapA2(const AliITSMapA2 &source) : AliITSMapA1(source),
112 fHitMapD(source.fHitMapD),
113 fMapThresholdD(source.fMapThresholdD),
114 fScaleSizeX(source.fScaleSizeX),
115 fScaleSizeZ(source.fScaleSizeZ){
119 //______________________________________________________________________
120 AliITSMapA2& AliITSMapA2::operator=(const AliITSMapA2 &source) {
121 // Assignment operator
122 this->~AliITSMapA2();
123 new(this) AliITSMapA2(source);
128 //______________________________________________________________________
129 void AliITSMapA2::ClearMap(){
132 memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
134 //______________________________________________________________________
135 void AliITSMapA2::FillMap(){
136 // fills signal map from digits - apply a threshold for signal
138 if (!fObjects) return;
140 Int_t ndigits = fObjects->GetEntriesFast();
141 if (!ndigits) return;
144 for (Int_t ndig=0; ndig<ndigits; ndig++) {
145 dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
146 Double_t signal = (Double_t)(dig->GetSignal());
147 if (signal > fMapThresholdD) SetHit(dig->GetCoord1(),dig->GetCoord2(),signal);
150 //______________________________________________________________________
151 void AliITSMapA2::FlagHit(Int_t iz, Int_t ix){
154 fHitMapD[CheckedIndex(iz, ix)]=
155 -1000.*TMath::Abs((Int_t)(fHitMapD[CheckedIndex(iz, ix)])+1.);
157 //______________________________________________________________________
158 TObject* AliITSMapA2::GetHit(Int_t i, Int_t dummy) const {
159 //return a pointer to the 1D histogram
161 dummy = 0; // added to remove unused variable warning.
163 return fObjects->UncheckedAt(i);
166 //______________________________________________________________________
167 Double_t AliITSMapA2::GetSignal(Int_t index) const {
168 //get signal in a cell
170 if (index<fMaxIndex) return (index <0) ? 0. : fHitMapD[index];
173 //______________________________________________________________________
174 FlagType AliITSMapA2::TestHit(Int_t iz, Int_t ix){
175 // check if the entry has already been flagged
177 if (CheckedIndex(iz, ix) < 0) return kEmpty;
178 Int_t inf=(Int_t)fHitMapD[CheckedIndex(iz, ix)];
182 } else if (inf == 0) {
188 //______________________________________________________________________
189 void AliITSMapA2::FillMapFromHist(){
190 // fills map from 1D histograms
192 if (!fObjects) return;
195 for( Int_t i=0; i<fNobjects; i++) {
196 TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
197 Int_t nsamples = hist->GetNbinsX();
198 for( Int_t j=0; j<nsamples; j++) {
199 Double_t signal = (Double_t)(hist->GetBinContent(j+1));
200 if (signal > fMapThresholdD) SetHit(i,j,signal);
204 //______________________________________________________________________
205 void AliITSMapA2::FillHist(){
206 // fill 1D histograms from map
208 if (!fObjects || fScaleSizeX != 1) return;
211 for( Int_t i=0; i<fNobjects; i++) {
212 TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
213 for( Int_t j=0; j<fNpx; j++) {
214 Double_t signal=GetSignal(i,j);
215 if (signal > fMapThresholdD) hist->Fill((Float_t)j,signal);
219 //______________________________________________________________________
220 void AliITSMapA2::ResetHist(){
223 if (!fObjects) return;
225 for( Int_t i=0; i<fNobjects; i++) {
226 if ((*fObjects)[i]) ((TH1F*)(*fObjects)[i])->Reset();
229 //______________________________________________________________________
230 void AliITSMapA2::AddSignal(Int_t iz,Int_t ix,Double_t sig){
231 // Addes sig to cell iz. equivalent to the very common
232 // sig = fMapA2->GetSignal(iz,ix) + sig; fMapA2->SetHit(iz,ix,sig);
235 Int_t index=GetHitIndex(iz,ix);
237 fHitMapD[CheckedIndex(iz, ix)] += sig;