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 **************************************************************************/
18 Revision 1.10 2001/11/02 12:43:21 jchudoba
19 remove fNdigits data member, it could have wrong value if fDigits is updated. Make this class non-persistent
21 Revision 1.9 2001/03/20 13:34:05 egangler
24 Revision 1.8 2001/01/26 21:47:21 morsch
25 Use access functions to AliMUONDigit member data.
27 Revision 1.7 2001/01/25 11:43:48 morsch
28 Add a "real" default constructor.
30 Revision 1.6 2000/10/06 09:05:42 morsch
31 Correction on upper limits for x- and y- coordinates to make code work with slat chambers.
33 Revision 1.5 2000/10/02 21:28:09 fca
34 Removal of useless dependecies via forward declarations
36 Revision 1.4 2000/07/13 16:19:44 fca
37 Mainly coding conventions + some small bug fixes
39 Revision 1.3 2000/07/03 11:54:57 morsch
40 AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
41 The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
43 Revision 1.2 2000/06/15 07:58:48 morsch
44 Code from MUON-dev joined
46 Revision 1.1.2.2 2000/06/12 07:58:06 morsch
49 Revision 1.1.2.1 2000/06/09 22:01:09 morsch
50 Code from AliMUONHitMap.h
51 Most coding rule violations corrected.
55 #include "AliMUONHitMapA1.h"
56 #include "AliSegmentation.h"
57 #include "AliMUONResponse.h"
58 #include "AliMUONDigit.h"
60 #include <TObjArray.h>
63 ClassImp(AliMUONHitMapA1)
65 AliMUONHitMapA1::AliMUONHitMapA1()
67 // Default constructor
76 AliMUONHitMapA1::AliMUONHitMapA1(AliSegmentation *seg, TObjArray *dig)
81 fMaxIndex=2*(fNpx+1)*2*(fNpy+1)+2*fNpy;
83 fHitMap = new Int_t[fMaxIndex];
88 AliMUONHitMapA1::AliMUONHitMapA1(const AliMUONHitMapA1 & hitMap)
90 // Dummy copy constructor
95 AliMUONHitMapA1::~AliMUONHitMapA1()
98 if (fHitMap) delete[] fHitMap;
101 void AliMUONHitMapA1::Clear(const char *)
104 memset(fHitMap,0,sizeof(int)*fMaxIndex);
107 Bool_t AliMUONHitMapA1::ValidateHit(Int_t ix, Int_t iy)
110 // Check if pad coordinates are within boundaries
112 // printf("\n Validate %d %d %d %d", ix, iy, fNpx, fNpy);
114 return (TMath::Abs(ix) <= fNpx && TMath::Abs(iy) <= fNpy);
117 Int_t AliMUONHitMapA1::CheckedIndex(Int_t ix, Int_t iy) const
119 // Return checked indices ix, iy
120 Int_t index=2*fNpy*(ix+fNpx)+(iy+fNpy);
121 if (index >= fMaxIndex) {
122 printf("\n \n \n Try to read/write outside array !!!! \n \n %d %d %d %d %d %d",
123 ix,iy, fMaxIndex, index, fNpx, fNpy);
131 void AliMUONHitMapA1::FillHits()
133 // Fill hits from digits list
134 Int_t ndigits = fDigits->GetEntriesFast();
135 //printf("\n Filling hits into HitMap\n");
136 //printf("FindRawClusters -- ndigits %d \n",ndigits);
137 if (!ndigits) return;
139 for (Int_t ndig=0; ndig<ndigits; ndig++) {
140 dig = (AliMUONDigit*)fDigits->UncheckedAt(ndig);
141 SetHit(dig->PadX(),dig->PadY(),ndig);
146 void AliMUONHitMapA1::SetHit(Int_t ix, Int_t iy, Int_t idigit)
148 // Assign digit to hit cell ix,iy
149 // fHitMap[kMaxNpady*(ix+fNpx)+(iy+fNpy)]=idigit+1;
150 fHitMap[CheckedIndex(ix, iy)]=idigit+1;
153 void AliMUONHitMapA1::DeleteHit(Int_t ix, Int_t iy)
155 // Delete hit at cell ix,iy
156 // fHitMap[kMaxNpady*(ix+fNpx)+(iy+fNpy)]=0;
157 fHitMap[CheckedIndex(ix, iy)]=0;
160 void AliMUONHitMapA1::FlagHit(Int_t ix, Int_t iy)
163 fHitMap[CheckedIndex(ix, iy)]=
164 -TMath::Abs(fHitMap[CheckedIndex(ix, iy)]);
167 Int_t AliMUONHitMapA1::GetHitIndex(Int_t ix, Int_t iy) const
169 // Get absolute value of contents of hit cell ix,iy
170 return TMath::Abs(fHitMap[CheckedIndex(ix, iy)])-1;
173 TObject* AliMUONHitMapA1::GetHit(Int_t ix, Int_t iy) const
175 // Get pointer to object at hit cell ix, iy
176 // Force crash if index does not exist ! (Manu)
177 Int_t index=GetHitIndex(ix,iy);
178 return (index <0) ? 0 : fDigits->UncheckedAt(GetHitIndex(ix,iy));
181 FlagType AliMUONHitMapA1::TestHit(Int_t ix, Int_t iy)
183 // Check if hit cell is empty, used or unused
185 Int_t inf=fHitMap[CheckedIndex(ix, iy)];
188 } else if (inf == 0) {
195 AliMUONHitMapA1 & AliMUONHitMapA1::operator = (const AliMUONHitMapA1 & rhs)
197 // Dummy assignment operator