]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RICH/AliRICHpoints.cxx
More details on installation pre-requisites
[u/mrichter/AliRoot.git] / RICH / AliRICHpoints.cxx
CommitLineData
4c039060 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$Log$
18*/
19
ddae0931 20///////////////////////////////////////////////////////////////////////////////
21// //
22// This class contains the points for the ALICE event display //
23// //
24//Begin_Html
25/*
26<img src="gif/AliRICHpointsClass.gif">
27*/
28//End_Html
29// //
30// //
31///////////////////////////////////////////////////////////////////////////////
32#include "AliRICHdisplay.h"
33#include "AliRICHpoints.h"
34#include "AliRun.h"
35#include "TPad.h"
36#include "TView.h"
37#include "TMath.h"
38
39const Int_t MAX_Nipx=400, MAX_Nipy=800;
40
41ClassImp(AliRICHpoints)
42
43//_____________________________________________________________________________
44AliRICHpoints::AliRICHpoints()
45{
46 //
47 // Default constructor
48 //
49 fHitIndex = 0;
50 fTrackIndex = 0;
51 fDigitIndex = 0;
52}
53
54//_____________________________________________________________________________
55AliRICHpoints::AliRICHpoints(Int_t npoints)
56 :AliPoints(npoints)
57{
58 //
59 // Standard constructor
60 //
61 fHitIndex = 0;
62 fTrackIndex = 0;
63 fDigitIndex = 0;
64}
65
66//_____________________________________________________________________________
67AliRICHpoints::~AliRICHpoints()
68{
69 //
70 // Default destructor
71 //
72 fHitIndex = 0;
73 fTrackIndex = 0;
74 fDigitIndex = 0;
75}
76
77//_____________________________________________________________________________
78void AliRICHpoints::DumpHit()
79{
80 //
81 // Dump hit corresponding to this point
82 //
83 AliRICHhit *hit = GetHit();
84 if (hit) hit->Dump();
85}
86
87//_____________________________________________________________________________
88void AliRICHpoints::DumpDigit()
89{
90 //
91 // Dump digit corresponding to this point
92 //
93 AliRICHdigit *digit = GetDigit();
94 if (digit) digit->Dump();
95}
96
97//_____________________________________________________________________________
98void AliRICHpoints::InspectHit()
99{
100 //
101 // Inspect hit corresponding to this point
102 //
103 AliRICHhit *hit = GetHit();
104 if (hit) hit->Inspect();
105}
106
107//_____________________________________________________________________________
108void AliRICHpoints::InspectDigit()
109{
110 //
111 // Inspect digit corresponding to this point
112 //
113 AliRICHdigit *digit = GetDigit();
114 if (digit) digit->Inspect();
115}
116
117//_____________________________________________________________________________
118Int_t AliRICHpoints::GetTrackIndex()
119{
120 //
121 // Dump digit corresponding to this point
122 //
123 printf("GetTrackIndex - fTrackIndex %d \n",fTrackIndex);
124 this->Inspect();
125 return fTrackIndex;
126}
127
128//_____________________________________________________________________________
129AliRICHhit *AliRICHpoints::GetHit() const
130{
131 //
132 // Returns pointer to hit index in AliRun::fParticles
133 //
134 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
135 gAlice->TreeH()->GetEvent(fTrackIndex);
136 TClonesArray *RICHhits = RICH->Hits();
137 Int_t nhits = RICHhits->GetEntriesFast();
138 if (fHitIndex < 0 || fHitIndex >= nhits) return 0;
139 return (AliRICHhit*)RICHhits->UncheckedAt(fHitIndex);
140}
141
142//_____________________________________________________________________________
143AliRICHdigit *AliRICHpoints::GetDigit() const
144{
145 //
146 // Returns pointer to digit index in AliRun::fParticles
147 //
148
149 AliRICHdisplay *display=(AliRICHdisplay*)gAlice->Display();
150 Int_t chamber=display->GetChamber();
151 Int_t cathode=display->GetCathode();
152
153 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
154 TClonesArray *RICHdigits = RICH->DigitsAddress(chamber-1);
155 gAlice->TreeD()->GetEvent(cathode);
156 Int_t ndigits = RICHdigits->GetEntriesFast();
157 if (fDigitIndex < 0 || fDigitIndex >= ndigits) return 0;
158 return (AliRICHdigit*)RICHdigits->UncheckedAt(fDigitIndex);
159}
160//_____________________________________________________________________________
161struct Bin {
162 const AliRICHdigit *dig;
163 int idx;
164 Bin() {dig=0; idx=-1;}
165};
166
167struct PreCluster : public AliRICHreccluster {
168 const AliRICHdigit* summit;
169 int idx;
170 int cut;
171 int npeaks;
172 PreCluster() : AliRICHreccluster() {cut=npeaks=0;}
173};
174//_____________________________________________________________________________
175
176static void FindCluster(AliRICHchamber *iChamber, AliRICHsegmentation *segmentation, int i, int j, Bin bins[MAX_Nipx][MAX_Nipy], PreCluster &c)
177
178{
179
180 //
181 // Find clusters
182 //
183
184 printf("I'm in FindCluster \n");
185
186 Bin& b=bins[i][j];
187 Int_t q=b.dig->fSignal;
188
189 printf("FindCluster - i j q %d %d %d\n",i,j,q);
190
191 if (q<0) {
192 q=-q;
193 c.cut=1;
194 }
195 if (b.idx >= 0 && b.idx != c.idx) {
196 c.idx=b.idx;
197 c.npeaks++;
198 }
199
200 if (q > TMath::Abs(c.summit->fSignal)) c.summit=b.dig;
201
202 Int_t npx = segmentation->Npx();
203 Int_t npy = segmentation->Npy();
204 Float_t x,y;
205 segmentation->GetPadCxy(i-npx, j-npy, x,y);
206 printf("FindCluster - x y %f %f \n",x,y);
207
208
209 c.fX += q*x;
210 c.fY += q*y;
211 c.fQ += q;
212
213 b.dig = 0; b.idx = c.idx;
214
215 if (bins[i-1][j].dig) FindCluster(iChamber,segmentation,i-1,j,bins,c);
216 if (bins[i][j-1].dig) FindCluster(iChamber,segmentation,i,j-1,bins,c);
217 if (bins[i+1][j].dig) FindCluster(iChamber,segmentation,i+1,j,bins,c);
218 if (bins[i][j+1].dig) FindCluster(iChamber,segmentation,i,j+1,bins,c);
219
220}
221
222//_____________________________________________________________________________
223
224void AliRICHpoints::GetCenterOfGravity()
225{
226 //
227 // simple RICH cluster finder from digits -- finds neighbours and
228 // calculates center of gravity for the cluster
229 //
f91473f6 230 const Int_t MAX_nipx=400, MAX_nipy=800;
ddae0931 231 printf("\n Hallo world");
232 AliRICHdisplay *display=(AliRICHdisplay*)gAlice->Display();
233 Int_t chamber=display->GetChamber();
234 Int_t cathode=display->GetCathode();
235
236 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
237 AliRICHchamber *iChamber;
238 AliRICHsegmentation *segmentation;
239 iChamber =&(RICH->Chamber(chamber-1));
240 segmentation=iChamber->GetSegmentationModel(cathode);
241 Int_t npx = segmentation->Npx();
242 Int_t npy = segmentation->Npy();
243 Float_t zpos=iChamber->ZPosition();
244
245 TClonesArray *RICHdigits = RICH->DigitsAddress(chamber-1);
246 gAlice->TreeD()->GetEvent(cathode);
247 Int_t ndigits = RICHdigits->GetEntriesFast();
248 if (fDigitIndex < 0 || fDigitIndex >= ndigits) return;
249
250 AliRICHdigit *dig;
251 dig=(AliRICHdigit*)RICHdigits->UncheckedAt(fDigitIndex);
252 Int_t ipx=dig->fPadX;
253 Int_t ipy=dig->fPadY;
f91473f6 254 Bin bins[MAX_nipx][MAX_nipy];
ddae0931 255 bins[ipx+npx][ipy+npy].dig=dig;
256
257 int ndig;
258 int ncls=0;
259 for (ndig=0; ndig<ndigits; ndig++) {
260 dig = (AliRICHdigit*)RICHdigits->UncheckedAt(ndig);
261 int i=dig->fPadX, j=dig->fPadY;
262 bins[i+npx][j+npy].dig=dig;
263 }
264
265 PreCluster c; c.summit=bins[ipx+npx][ipy+npy].dig; c.idx=ncls;
266 FindCluster(iChamber,segmentation,ipx+npx, ipy+npy, bins, c);
267 if (c.npeaks>1) {
268 printf("GetCenterOfGravity -- more than one peak");
269 }
270 c.fX /= c.fQ;
271 c.fY /= c.fQ;
272 printf("GetCenterOfGravity - c.fX c.fY c.fQ %f %f %d \n",c.fX,c.fY,c.fQ);
273
274 c.fTracks[0]=c.summit->fTracks[0];
275 c.fTracks[1]=c.summit->fTracks[1];
276 c.fTracks[2]=c.summit->fTracks[2];
277 ncls++;
278 AliRICHpoints *points = 0;
279 points = new AliRICHpoints(1);
280 points->SetMarkerColor(kYellow);
281 points->SetMarkerStyle(5);
282 points->SetMarkerSize(1.);
283 points->SetPoint(0,c.fX,c.fY,zpos);
284 points->Draw();
285
286 printf("GetCenterOfGravity -- ncls %d \n",ncls);
287
288}
289
290
291