AliTOFDigitMap, AliTOFReconstructionerV2 and AliTOFTrackV2 added.Fixed bug on AliTOFS...
[u/mrichter/AliRoot.git] / TOF / AliTOFDigitMap.cxx
CommitLineData
bf6bf84c 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
17////////////////////////////////////////////////////////////////////////
18//
19// AliTOFDigitMap class
20//
21// digitmap enables fast check if the pad was already hit
22// The index of a AliTOFdigit is saved in the each hitmap "cell"
23// (there is an offset +1, because the index can be zero and
24// zero means empty cell.
25// In TOF, number of strips varies according plate type, the highest
26// number is in plate C. For all plates is used this number, so
27// the size of the digitmap is a little bit greater than necessary, but
28// it simplifies the access algorithm.
29//
30//
31// Author: F. Pierella based on AliTOFHitMap
32//
33////////////////////////////////////////////////////////////////////////
34
35#include <iostream.h>
36#include <TMath.h>
37
38#include "AliTOFDigitMap.h"
39#include "AliTOFdigit.h"
40#include "AliTOFConstants.h"
41
42
43#include <TClonesArray.h>
44
45ClassImp(AliTOFDigitMap)
46
47AliTOFDigitMap::AliTOFDigitMap()
48{
49//
50// Default ctor
51//
52 fDigitMap = 0;
53 fDigits = 0;
54}
55
56////////////////////////////////////////////////////////////////////////
57AliTOFDigitMap::AliTOFDigitMap(TClonesArray *dig)
58{
59 //
60 // ctor
61 //
62 // of course, these constants must not be hardwired
63 // change later
64
65 fNSector = AliTOFConstants::fgkNSectors;
66 fNplate = AliTOFConstants::fgkNPlates;
67 fNstrip = AliTOFConstants::fgkNStripC;
68 fNpx = AliTOFConstants::fgkNpadX;
69 fNpy = AliTOFConstants::fgkNpadZ;
70 fMaxIndex=fNSector*fNplate*fNstrip*fNpx*fNpy;
71 fDigitMap = new Int_t[fMaxIndex];
72 fDigits = dig;
73 Clear();
74}
75
76////////////////////////////////////////////////////////////////////////
77AliTOFDigitMap::AliTOFDigitMap(const AliTOFDigitMap & digitMap)
78{
79//
80// Dummy copy constructor
81//
82 ;
83}
84
85
86////////////////////////////////////////////////////////////////////////
87AliTOFDigitMap::~AliTOFDigitMap()
88{
89//
90// Destructor
91//
92 if (fDigitMap) delete[] fDigitMap;
93}
94
95////////////////////////////////////////////////////////////////////////
96void AliTOFDigitMap::Clear(const char *)
97{
98//
99// Clear hitmap
100//
101 memset(fDigitMap,0,sizeof(int)*fMaxIndex);
102}
103
104////////////////////////////////////////////////////////////////////////
105Int_t AliTOFDigitMap::CheckedIndex(Int_t *vol) const
106{
107//
108// Return checked indices for vol
109//
110 Int_t index=
111 (vol[0]-1)*fNplate*fNstrip*fNpx*fNpy+ // sector
112 (vol[1]-1)*fNstrip*fNpx*fNpy+ // plate
113 (vol[2]-1)*fNpx*fNpy+ // strip
114 (vol[3]-1)*fNpy+ // padx
115 (vol[4]-1); // pady (=padz)
116
117 if (index >= fMaxIndex) {
118 Error("AliTOFDigitMap","CheckedIndex - input outside bounds");
119 return -1;
120 } else {
121 return index;
122 }
123}
124
125////////////////////////////////////////////////////////////////////////
126void AliTOFDigitMap::SetHit(Int_t *vol, Int_t idigit)
127{
128//
129// Assign digit to pad vol
130//
131
132// 0 means empty pad, we need to shift indeces by 1
133 fDigitMap[CheckedIndex(vol)]=idigit+1;
134}
135
136////////////////////////////////////////////////////////////////////////
137void AliTOFDigitMap::SetHit(Int_t *vol)
138{
139//
140// Assign last digit to pad vol
141//
142
143// 0 means empty pad, we need to shift indeces by 1
144 fDigitMap[CheckedIndex(vol)]=fDigits->GetLast()+1;
145}
146
147////////////////////////////////////////////////////////////////////////
148Int_t AliTOFDigitMap::GetHitIndex(Int_t *vol) const
149{
150//
151// Get contents of pad vol
152//
153
154// 0 means empty pad, we need to shift indeces by 1
155 return fDigitMap[CheckedIndex(vol)]-1;
156}
157
158////////////////////////////////////////////////////////////////////////
159TObject* AliTOFDigitMap::GetHit(Int_t *vol) const
160{
161//
162// Get pointer to object at vol
163// return 0 if vol out of bounds
164 Int_t index=GetHitIndex(vol);
165 return (index <0) ? 0 : fDigits->UncheckedAt(index);
166}
167
168////////////////////////////////////////////////////////////////////////
169FlagType AliTOFDigitMap::TestHit(Int_t *vol) const
170{
171//
172// Check if hit cell is empty, used or unused
173//
174 Int_t inf=fDigitMap[CheckedIndex(vol)];
175 if (inf < 0) {
176 return kUsed;
177 } else if (inf == 0) {
178 return kEmpty;
179 } else {
180 return kUnused;
181 }
182}
183
184////////////////////////////////////////////////////////////////////////
185AliTOFDigitMap & AliTOFDigitMap::operator = (const AliTOFDigitMap & rhs)
186{
187// Dummy assignment operator
188 return *this;
189}
190
191
192
193
194