1 ///////////////////////////////////////////////////////////////////////////////
3 // This class contains the points for the ALICE event display //
7 <img src="gif/AliRICHpointsClass.gif">
12 ///////////////////////////////////////////////////////////////////////////////
13 #include "AliRICHdisplay.h"
14 #include "AliRICHpoints.h"
20 const Int_t MAX_Nipx=400, MAX_Nipy=800;
22 ClassImp(AliRICHpoints)
24 //_____________________________________________________________________________
25 AliRICHpoints::AliRICHpoints()
28 // Default constructor
35 //_____________________________________________________________________________
36 AliRICHpoints::AliRICHpoints(Int_t npoints)
40 // Standard constructor
47 //_____________________________________________________________________________
48 AliRICHpoints::~AliRICHpoints()
58 //_____________________________________________________________________________
59 void AliRICHpoints::DumpHit()
62 // Dump hit corresponding to this point
64 AliRICHhit *hit = GetHit();
68 //_____________________________________________________________________________
69 void AliRICHpoints::DumpDigit()
72 // Dump digit corresponding to this point
74 AliRICHdigit *digit = GetDigit();
75 if (digit) digit->Dump();
78 //_____________________________________________________________________________
79 void AliRICHpoints::InspectHit()
82 // Inspect hit corresponding to this point
84 AliRICHhit *hit = GetHit();
85 if (hit) hit->Inspect();
88 //_____________________________________________________________________________
89 void AliRICHpoints::InspectDigit()
92 // Inspect digit corresponding to this point
94 AliRICHdigit *digit = GetDigit();
95 if (digit) digit->Inspect();
98 //_____________________________________________________________________________
99 Int_t AliRICHpoints::GetTrackIndex()
102 // Dump digit corresponding to this point
104 printf("GetTrackIndex - fTrackIndex %d \n",fTrackIndex);
109 //_____________________________________________________________________________
110 AliRICHhit *AliRICHpoints::GetHit() const
113 // Returns pointer to hit index in AliRun::fParticles
115 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
116 gAlice->TreeH()->GetEvent(fTrackIndex);
117 TClonesArray *RICHhits = RICH->Hits();
118 Int_t nhits = RICHhits->GetEntriesFast();
119 if (fHitIndex < 0 || fHitIndex >= nhits) return 0;
120 return (AliRICHhit*)RICHhits->UncheckedAt(fHitIndex);
123 //_____________________________________________________________________________
124 AliRICHdigit *AliRICHpoints::GetDigit() const
127 // Returns pointer to digit index in AliRun::fParticles
130 AliRICHdisplay *display=(AliRICHdisplay*)gAlice->Display();
131 Int_t chamber=display->GetChamber();
132 Int_t cathode=display->GetCathode();
134 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
135 TClonesArray *RICHdigits = RICH->DigitsAddress(chamber-1);
136 gAlice->TreeD()->GetEvent(cathode);
137 Int_t ndigits = RICHdigits->GetEntriesFast();
138 if (fDigitIndex < 0 || fDigitIndex >= ndigits) return 0;
139 return (AliRICHdigit*)RICHdigits->UncheckedAt(fDigitIndex);
141 //_____________________________________________________________________________
143 const AliRICHdigit *dig;
145 Bin() {dig=0; idx=-1;}
148 struct PreCluster : public AliRICHreccluster {
149 const AliRICHdigit* summit;
153 PreCluster() : AliRICHreccluster() {cut=npeaks=0;}
155 //_____________________________________________________________________________
157 static void FindCluster(AliRICHchamber *iChamber, AliRICHsegmentation *segmentation, int i, int j, Bin bins[MAX_Nipx][MAX_Nipy], PreCluster &c)
165 printf("I'm in FindCluster \n");
168 Int_t q=b.dig->fSignal;
170 printf("FindCluster - i j q %d %d %d\n",i,j,q);
176 if (b.idx >= 0 && b.idx != c.idx) {
181 if (q > TMath::Abs(c.summit->fSignal)) c.summit=b.dig;
183 Int_t npx = segmentation->Npx();
184 Int_t npy = segmentation->Npy();
186 segmentation->GetPadCxy(i-npx, j-npy, x,y);
187 printf("FindCluster - x y %f %f \n",x,y);
194 b.dig = 0; b.idx = c.idx;
196 if (bins[i-1][j].dig) FindCluster(iChamber,segmentation,i-1,j,bins,c);
197 if (bins[i][j-1].dig) FindCluster(iChamber,segmentation,i,j-1,bins,c);
198 if (bins[i+1][j].dig) FindCluster(iChamber,segmentation,i+1,j,bins,c);
199 if (bins[i][j+1].dig) FindCluster(iChamber,segmentation,i,j+1,bins,c);
203 //_____________________________________________________________________________
205 void AliRICHpoints::GetCenterOfGravity()
208 // simple RICH cluster finder from digits -- finds neighbours and
209 // calculates center of gravity for the cluster
211 const Int_t MAX_nipx=400, MAX_nipy=800;
212 printf("\n Hallo world");
213 AliRICHdisplay *display=(AliRICHdisplay*)gAlice->Display();
214 Int_t chamber=display->GetChamber();
215 Int_t cathode=display->GetCathode();
217 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
218 AliRICHchamber *iChamber;
219 AliRICHsegmentation *segmentation;
220 iChamber =&(RICH->Chamber(chamber-1));
221 segmentation=iChamber->GetSegmentationModel(cathode);
222 Int_t npx = segmentation->Npx();
223 Int_t npy = segmentation->Npy();
224 Float_t zpos=iChamber->ZPosition();
226 TClonesArray *RICHdigits = RICH->DigitsAddress(chamber-1);
227 gAlice->TreeD()->GetEvent(cathode);
228 Int_t ndigits = RICHdigits->GetEntriesFast();
229 if (fDigitIndex < 0 || fDigitIndex >= ndigits) return;
232 dig=(AliRICHdigit*)RICHdigits->UncheckedAt(fDigitIndex);
233 Int_t ipx=dig->fPadX;
234 Int_t ipy=dig->fPadY;
235 Bin bins[MAX_nipx][MAX_nipy];
236 bins[ipx+npx][ipy+npy].dig=dig;
240 for (ndig=0; ndig<ndigits; ndig++) {
241 dig = (AliRICHdigit*)RICHdigits->UncheckedAt(ndig);
242 int i=dig->fPadX, j=dig->fPadY;
243 bins[i+npx][j+npy].dig=dig;
246 PreCluster c; c.summit=bins[ipx+npx][ipy+npy].dig; c.idx=ncls;
247 FindCluster(iChamber,segmentation,ipx+npx, ipy+npy, bins, c);
249 printf("GetCenterOfGravity -- more than one peak");
253 printf("GetCenterOfGravity - c.fX c.fY c.fQ %f %f %d \n",c.fX,c.fY,c.fQ);
255 c.fTracks[0]=c.summit->fTracks[0];
256 c.fTracks[1]=c.summit->fTracks[1];
257 c.fTracks[2]=c.summit->fTracks[2];
259 AliRICHpoints *points = 0;
260 points = new AliRICHpoints(1);
261 points->SetMarkerColor(kYellow);
262 points->SetMarkerStyle(5);
263 points->SetMarkerSize(1.);
264 points->SetPoint(0,c.fX,c.fY,zpos);
267 printf("GetCenterOfGravity -- ncls %d \n",ncls);