]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONHitMapA1.cxx
12-sep-2006 NvE Memberfunctions GetNslots and AddNamedSlot introduced and various
[u/mrichter/AliRoot.git] / MUON / AliMUONHitMapA1.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 /* $Id$ */
17
18 // -----------------------
19 // Class AliMUONHitMapA1
20 // -----------------------
21 // Implements AliHitMap as a 1-dim array
22 // ...
23
24 #include "AliMUONHitMapA1.h"
25 #include "AliMUONDigit.h"
26
27 #include "AliLog.h"
28
29 #include <TObjArray.h>
30 #include <TMath.h>
31
32 ClassImp(AliMUONHitMapA1)
33
34 AliMUONHitMapA1::AliMUONHitMapA1()
35   : AliHitMap()
36 {
37 /// Default constructor
38     fNpx          = 0;
39     fNpy          = 0;
40     fMaxIndex     = 0;
41     
42     fHitMap       = 0;
43     fDigits       = 0;
44 }
45
46 //________________________________________________________________________________
47 AliMUONHitMapA1::AliMUONHitMapA1(Int_t npx, Int_t npy, TObjArray* dig)
48   : AliHitMap()
49 {
50 /// Standard constructor
51
52     fNpx = npx;
53     fNpy = npy;
54     fMaxIndex=2*(fNpx+1)*2*(fNpy+1)+2*fNpy;
55     
56     fHitMap = new Int_t[fMaxIndex];
57     fDigits =  dig;
58     Clear();
59 }
60 //______________________________________________________________
61 AliMUONHitMapA1::AliMUONHitMapA1(const AliMUONHitMapA1 & hitMap)
62   : AliHitMap(hitMap)
63 {
64 /// Protected copy constructor
65
66   AliFatal("Not implemented.");
67 }
68 //_________________________________
69 AliMUONHitMapA1::~AliMUONHitMapA1()
70 {
71 /// Destructor
72     if (fHitMap) delete[] fHitMap;
73 }
74 //______________________________________
75 void AliMUONHitMapA1::Clear(const char *)
76 {
77 /// Clear hitmap
78     memset(fHitMap,0,sizeof(int)*fMaxIndex);
79 }
80 //___________________________________________________
81 Bool_t AliMUONHitMapA1::ValidateHit(Int_t ix, Int_t iy)
82 {
83 /// Check if pad coordinates are within boundaries
84
85 //    printf("\n Validate %d %d %d %d", ix, iy, fNpx, fNpy);
86     
87     return (TMath::Abs(ix) <= fNpx && TMath::Abs(iy) <= fNpy); 
88 }
89 //_________________________________________________________
90 Int_t AliMUONHitMapA1::CheckedIndex(Int_t ix, Int_t iy) const
91 {
92 /// Return checked indices ix, iy
93     Int_t index=2*fNpy*(ix+fNpx)+(iy+fNpy);
94     if ( index < 0 || index >= fMaxIndex ) {
95         AliWarning(Form("index outside array ix %d iy %d MaxIndex %d index %d Npx %d Npy %d",
96                       ix, iy, fMaxIndex, index, fNpx, fNpy));
97         return  fMaxIndex-1;
98     } else {
99         return index;
100     }
101 }
102 //_____________________________
103 void  AliMUONHitMapA1::FillHits()
104 {
105 /// Fill hits from digits list  
106     Int_t ndigits = fDigits->GetEntriesFast();
107     //printf("\n Filling hits into HitMap\n");
108     //printf("FindRawClusters -- ndigits %d \n",ndigits);
109     if (!ndigits) return;
110     AliMUONDigit *dig;
111     for (Int_t ndig=0; ndig<ndigits; ndig++) {
112         dig = (AliMUONDigit*)fDigits->UncheckedAt(ndig);
113         SetHit(dig->PadX(),dig->PadY(),ndig);
114     }
115 }
116 //___________________________________________________________
117 void  AliMUONHitMapA1::SetHit(Int_t ix, Int_t iy, Int_t idigit)
118 {
119 /// Assign digit to hit cell ix,iy
120
121 //    fHitMap[kMaxNpady*(ix+fNpx)+(iy+fNpy)]=idigit+1;
122     fHitMap[CheckedIndex(ix, iy)]=idigit+1;
123 }
124 //_______________________________________________
125 void AliMUONHitMapA1::DeleteHit(Int_t ix, Int_t iy)
126 {
127 /// Delete hit at cell ix,iy
128
129 //    fHitMap[kMaxNpady*(ix+fNpx)+(iy+fNpy)]=0;
130     fHitMap[CheckedIndex(ix, iy)]=0;
131 }
132 //_____________________________________________
133 void AliMUONHitMapA1::FlagHit(Int_t ix, Int_t iy)
134 {
135 /// Flag hit as used
136     fHitMap[CheckedIndex(ix, iy)]=
137         -TMath::Abs(fHitMap[CheckedIndex(ix, iy)]);
138 }
139 //________________________________________________________
140 Int_t AliMUONHitMapA1::GetHitIndex(Int_t ix, Int_t iy) const
141 {
142 /// Get absolute value of contents of hit cell ix,iy
143     return TMath::Abs(fHitMap[CheckedIndex(ix, iy)])-1;
144 }
145 //_______________________________________________________
146 TObject* AliMUONHitMapA1::GetHit(Int_t ix, Int_t iy) const
147 {
148 /// Get pointer to object at hit cell ix, iy
149 /// Force crash if index does not exist ! (Manu)
150     Int_t index=GetHitIndex(ix,iy);
151     return (index <0) ? 0 : fDigits->UncheckedAt(GetHitIndex(ix,iy));
152 }
153 //_________________________________________________
154 FlagType AliMUONHitMapA1::TestHit(Int_t ix, Int_t iy)
155 {
156 /// Check if hit cell is empty, used or unused
157
158     Int_t index = CheckedIndex(ix, iy);
159     if (index<0 || index >= fMaxIndex) return kEmpty;
160
161     Int_t inf=fHitMap[index];
162     if (inf < 0) {
163         return kUsed;
164     } else if (inf == 0) {
165         return kEmpty;
166     } else {
167         return kUnused;
168     }
169 }
170 //________________________________________________________________________
171 AliMUONHitMapA1 & AliMUONHitMapA1::operator = (const AliMUONHitMapA1 & rhs) 
172 {
173 /// Protected assignement operator
174
175   if (this == &rhs) return *this;
176
177   AliFatal( "Not implemented.");
178     
179   return *this;  
180 }
181
182
183
184
185