Log replaced by Id
[u/mrichter/AliRoot.git] / RICH / AliRICHPoints.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 //                                                                           //
20 //  This class contains the points for the ALICE event display               //
21 //                                                                           //
22 //Begin_Html
23 /*
24 <img src="gif/AliRICHPointsClass.gif">
25 */
26 //End_Html
27 //                                                                           //
28 //                                                                           //
29 ///////////////////////////////////////////////////////////////////////////////
30 #include <TPad.h>
31 #include <TTree.h>
32 #include <TView.h>
33 #include <TMath.h>
34 #include <TPolyMarker3D.h>
35 #include <TMarker3DBox.h>
36
37 #include <AliRICH.h>
38 #include "TParticle.h"
39 #include "AliRICHDisplay.h"
40 #include "AliRICHPoints.h"
41 #include "AliRun.h"
42 #include "AliRICHHit.h"
43 #include "AliRICHCerenkov.h"
44 #include "AliRICHSDigit.h"
45 #include "AliRICHDigit.h"
46 #include "AliRICHRawCluster.h"
47
48 const Int_t kMaxNipx=400, kMaxNipy=800;
49  
50 ClassImp(AliRICHPoints)
51
52 //_____________________________________________________________________________
53 AliRICHPoints::AliRICHPoints()
54 {
55   //
56   // Default constructor
57   //
58   fHitIndex = 0;
59   fTrackIndex = 0;
60   fDigitIndex = 0;
61   fMarker[0] = fMarker[1] = fMarker[2]=0;
62 }
63
64 //_____________________________________________________________________________
65 AliRICHPoints::AliRICHPoints(Int_t npoints)
66   :AliPoints(npoints)
67 {
68   //
69   // Standard constructor
70   //
71   fHitIndex = 0;
72   fTrackIndex = 0;
73   fDigitIndex = 0;
74   fMarker[0] = fMarker[1] = fMarker[2]=0;
75 }
76          
77 //_____________________________________________________________________________
78 AliRICHPoints::~AliRICHPoints()
79 {
80   //
81   // Default destructor
82   //
83   fHitIndex = 0;
84   fTrackIndex = 0;
85   fDigitIndex = 0;
86 }
87
88 //_____________________________________________________________________________
89 void AliRICHPoints::DumpHit()
90 {
91   //
92   //   Dump hit corresponding to this point
93   //
94   AliRICHHit *hit = GetHit();
95   if (hit) hit->Dump();
96 }
97
98 //_____________________________________________________________________________
99 void AliRICHPoints::DumpDigit()
100 {
101   //
102   //   Dump digit corresponding to this point
103   //
104   AliRICHDigit *digit = GetDigit();
105   if (digit) digit->Dump();
106 }
107
108 //_____________________________________________________________________________
109 void AliRICHPoints::InspectHit()
110 {
111   //
112   //   Inspect hit corresponding to this point
113   //
114   AliRICHHit *hit = GetHit();
115   if (hit) hit->Inspect();
116 }
117
118 //_____________________________________________________________________________
119 void AliRICHPoints::InspectDigit()
120 {
121   //
122   //   Inspect digit corresponding to this point
123   //
124   AliRICHDigit *digit = GetDigit();
125   if (digit) digit->Inspect();
126 }
127
128 //_____________________________________________________________________________
129 Int_t AliRICHPoints::GetTrackIndex()
130 {
131   //
132   //   Dump digit corresponding to this point
133   //
134   printf("GetTrackIndex - fTrackIndex %d \n",fTrackIndex);
135   this->Inspect();
136   return fTrackIndex;
137 }
138 //_____________________________________________________________________________
139 TParticle *AliRICHPoints::GetParticle() const
140 {
141   //
142   //   Returns pointer to particle index in AliRun::fParticles
143   //
144   if (fIndex < 0 || fIndex >= gAlice->GetNtrack()) return 0;
145   return gAlice->Particle(fIndex);
146 }
147
148 //_____________________________________________________________________________
149 AliRICHHit *AliRICHPoints::GetHit() const
150 {
151   //
152   //   Returns pointer to hit index in AliRun::fParticles
153   //
154   AliRICH *pRICH  = (AliRICH*)gAlice->GetDetector("RICH");
155   pRICH->TreeH()->GetEvent(fTrackIndex);
156   TClonesArray *pRICHhits  = pRICH->Hits();
157   Int_t nhits = pRICHhits->GetEntriesFast();
158   if (fHitIndex < 0 || fHitIndex >= nhits) return 0;
159   return (AliRICHHit*)pRICHhits->UncheckedAt(fHitIndex);
160 }
161
162 //_____________________________________________________________________________
163 AliRICHDigit *AliRICHPoints::GetDigit() const
164 {
165   //
166   //   Returns pointer to digit index in AliRun::fParticles
167   //
168
169   AliRICHDisplay *display=(AliRICHDisplay*)gAlice->Display();
170   Int_t chamber=display->GetChamber();
171   Int_t cathode=display->GetCathode();
172    
173   AliRICH *pRICH  = (AliRICH*)gAlice->GetDetector("RICH");
174   TClonesArray *pRICHdigits  = pRICH->DigitsAddress(chamber-1);
175   gAlice->TreeD()->GetEvent(cathode);
176   Int_t ndigits = pRICHdigits->GetEntriesFast();
177   if (fDigitIndex < 0 || fDigitIndex >= ndigits) return 0;
178   return (AliRICHDigit*)pRICHdigits->UncheckedAt(fDigitIndex);
179 }
180 //----------------------------------------------------------------------------
181 void AliRICHPoints::ShowRing(Int_t highlight) {
182
183 //
184 // Highlights all pads generated by the same mother particle
185
186    
187   AliRICH *pRICH  = (AliRICH*)gAlice->GetDetector("RICH");
188   AliRICHChamber*       iChamber;
189   AliSegmentation*      segmentation;
190
191       
192   AliRICHPoints *points = 0;
193   TMarker3DBox  *marker = 0;
194     
195   AliRICHHit *mHit = GetHit();
196
197   printf("Hit %d on chamber: %d\n",fHitIndex, mHit->Chamber());
198
199   TClonesArray *digits  = pRICH->DigitsAddress(mHit->Chamber() - 1);
200   iChamber = &(pRICH->Chamber(mHit->Chamber() - 1));
201   segmentation=iChamber->GetSegmentationModel();
202
203   Float_t dpx  = segmentation->Dpx();
204   Float_t dpy  = segmentation->Dpy();
205
206   int ndigits=digits->GetEntriesFast();
207   
208   printf("Show Ring called with %d digits\n",ndigits);
209   
210   for (int digit=0;digit<ndigits;digit++) {
211     AliRICHDigit *mdig = (AliRICHDigit*)digits->UncheckedAt(digit);
212     points = new AliRICHPoints(1);
213     
214      //printf("Particle %d belongs to ring %d \n", fTrackIndex, mdig->fTracks[1]);
215
216     if (!points) continue;
217     if (fTrackIndex == mdig->Track(0)) {
218
219       printf("Digit %d from particle %d belongs to ring %d \n", digit, fTrackIndex, mdig->Track(0));
220
221       Int_t charge=mdig->Signal();
222       Int_t index=Int_t(TMath::Log(charge)/(TMath::Log(adc_satm)/22));
223       Int_t color=701+index;
224       if (color>722) color=722;
225       points->SetMarkerColor(color);
226       points->SetMarkerStyle(21);
227       points->SetMarkerSize(.5);
228       Float_t xpad, ypad, zpad;
229       segmentation->GetPadC(mdig->PadX(), mdig->PadY(),xpad, ypad, zpad);
230       Float_t vectorLoc[3]={xpad,6.276,ypad};
231       Float_t  vectorGlob[3];
232       points->SetParticle(-1);
233       points->SetHitIndex(-1);
234       points->SetTrackIndex(-1);
235       points->SetDigitIndex(digit);
236       iChamber->LocaltoGlobal(vectorLoc,vectorGlob);
237       points->SetPoint(0,vectorGlob[0],vectorGlob[1],vectorGlob[2]);
238       
239       segmentation->GetPadC(mdig->PadX(), mdig->PadY(), xpad, ypad, zpad);
240       Float_t theta = iChamber->GetRotMatrix()->GetTheta();
241       Float_t phi   = iChamber->GetRotMatrix()->GetPhi();          
242       marker=new TMarker3DBox(vectorGlob[0],vectorGlob[1],vectorGlob[2],
243                               dpy/2,0,dpx/2,theta,phi);
244       marker->SetLineColor(highlight);
245       marker->SetFillStyle(1001);
246       marker->SetFillColor(color);
247       marker->SetRefObject((TObject*)points);
248       points->Set3DMarker(0, marker);
249       
250       points->Draw("same");
251       for (Int_t im=0;im<3;im++) {
252         TMarker3DBox *marker=points->GetMarker(im);
253         if (marker)
254           marker->Draw();
255       }
256       TParticle *p = gAlice->Particle(fIndex);
257       printf("\nTrack index %d\n",fTrackIndex);
258       printf("Particle ID %d\n",p->GetPdgCode());
259       printf("Parent %d\n",p->GetFirstMother());
260       printf("First child %d\n",p->GetFirstDaughter());
261       printf("Px,Py,Pz %f %f %f\n",p->Px(),p->Py(),p->Pz());
262     }
263   }
264 }
265
266 //_____________________________________________________________________________
267 const Text_t *AliRICHPoints::GetName() const
268 {
269   //
270   // Return name of the Geant3 particle corresponding to this point
271   //
272   TParticle *particle = GetParticle();
273   if (!particle) return "Particle";
274   return particle->GetName();
275 }
276
277 //_____________________________________________________________________________
278 Text_t *AliRICHPoints::GetObjectInfo(Int_t, Int_t)
279 {
280   //
281   //   Redefines TObject::GetObjectInfo.
282   //   Displays the info (particle,etc
283   //   corresponding to cursor position px,py
284   //
285   static char info[64];
286   sprintf(info,"%s %d",GetName(),fIndex);
287   return info;
288 }
289
290
291