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.8 2001/01/26 21:47:21 morsch
19 Use access functions to AliMUONDigit member data.
21 Revision 1.7 2001/01/25 11:43:48 morsch
22 Add a "real" default constructor.
24 Revision 1.6 2000/10/06 09:05:42 morsch
25 Correction on upper limits for x- and y- coordinates to make code work with slat chambers.
27 Revision 1.5 2000/10/02 21:28:09 fca
28 Removal of useless dependecies via forward declarations
30 Revision 1.4 2000/07/13 16:19:44 fca
31 Mainly coding conventions + some small bug fixes
33 Revision 1.3 2000/07/03 11:54:57 morsch
34 AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
35 The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
37 Revision 1.2 2000/06/15 07:58:48 morsch
38 Code from MUON-dev joined
40 Revision 1.1.2.2 2000/06/12 07:58:06 morsch
43 Revision 1.1.2.1 2000/06/09 22:01:09 morsch
44 Code from AliMUONHitMap.h
45 Most coding rule violations corrected.
49 #include "AliMUONHitMapA1.h"
50 #include "AliSegmentation.h"
51 #include "AliMUONResponse.h"
52 #include "AliMUONDigit.h"
54 #include <TObjArray.h>
57 ClassImp(AliMUONHitMapA1)
59 AliMUONHitMapA1::AliMUONHitMapA1()
61 // Default constructor
72 AliMUONHitMapA1::AliMUONHitMapA1(AliSegmentation *seg, TObjArray *dig)
76 fNpx = fSegmentation->Npx()+1;
77 fNpy = fSegmentation->Npy()+1;
78 fMaxIndex=2*(fNpx+1)*2*(fNpy+1)+2*fNpy;
80 fHitMap = new Int_t[fMaxIndex];
82 fNdigits = fDigits->GetEntriesFast();
86 AliMUONHitMapA1::AliMUONHitMapA1(const AliMUONHitMapA1 & hitMap)
88 // Dummy copy constructor
93 AliMUONHitMapA1::~AliMUONHitMapA1()
96 // if (fDigits) delete fDigits;
97 if (fHitMap) delete[] fHitMap;
100 void AliMUONHitMapA1::Clear(const char *)
103 memset(fHitMap,0,sizeof(int)*fMaxIndex);
106 Int_t AliMUONHitMapA1::CheckedIndex(Int_t ix, Int_t iy) const
108 // Return checked indices ix, iy
109 Int_t index=2*fNpy*(ix+fNpx)+(iy+fNpy);
110 if (index >= fMaxIndex) {
111 printf("\n \n \n Try to read/write outside array !!!! \n \n %d %d %d %d %d %d",
112 ix,iy, fMaxIndex, index, fNpx, fNpy);
120 void AliMUONHitMapA1::FillHits()
122 // Fill hits from digits list
123 Int_t ndigits = fDigits->GetEntriesFast();
124 //printf("\n Filling hits into HitMap\n");
125 //printf("FindRawClusters -- ndigits %d \n",ndigits);
126 if (!ndigits) return;
128 for (Int_t ndig=0; ndig<fNdigits; ndig++) {
129 dig = (AliMUONDigit*)fDigits->UncheckedAt(ndig);
130 SetHit(dig->PadX(),dig->PadY(),ndig);
135 void AliMUONHitMapA1::SetHit(Int_t ix, Int_t iy, Int_t idigit)
137 // Assign digit to hit cell ix,iy
138 // fHitMap[kMaxNpady*(ix+fNpx)+(iy+fNpy)]=idigit+1;
139 fHitMap[CheckedIndex(ix, iy)]=idigit+1;
142 void AliMUONHitMapA1::DeleteHit(Int_t ix, Int_t iy)
144 // Delete hit at cell ix,iy
145 // fHitMap[kMaxNpady*(ix+fNpx)+(iy+fNpy)]=0;
146 fHitMap[CheckedIndex(ix, iy)]=0;
149 void AliMUONHitMapA1::FlagHit(Int_t ix, Int_t iy)
152 fHitMap[CheckedIndex(ix, iy)]=
153 -TMath::Abs(fHitMap[CheckedIndex(ix, iy)]);
156 Int_t AliMUONHitMapA1::GetHitIndex(Int_t ix, Int_t iy) const
158 // Get absolute value of contents of hit cell ix,iy
159 return TMath::Abs(fHitMap[CheckedIndex(ix, iy)])-1;
162 TObject* AliMUONHitMapA1::GetHit(Int_t ix, Int_t iy) const
164 // Get pointer to object at hit cell ix, iy
165 // Force crash if index does not exist ! (Manu)
166 Int_t index=GetHitIndex(ix,iy);
167 return (index <0) ? 0 : fDigits->UncheckedAt(GetHitIndex(ix,iy));
170 FlagType AliMUONHitMapA1::TestHit(Int_t ix, Int_t iy)
172 // Check if hit cell is empty, used or unused
174 Int_t inf=fHitMap[CheckedIndex(ix, iy)];
177 } else if (inf == 0) {
184 AliMUONHitMapA1 & AliMUONHitMapA1::operator = (const AliMUONHitMapA1 & rhs)
186 // Dummy assignment operator