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 ///////////////////////////////////////////////////////////////////////////////
20 // This class contains the points for the ALICE event display //
24 <img src="gif/AliMUONPointsClass.gif">
29 ///////////////////////////////////////////////////////////////////////////////
32 #include <TPolyMarker3D.h>
33 #include <TVirtualPad.h>
34 #include <TPaveText.h>
35 #include <TMarker3DBox.h>
37 #include "AliMUONPoints.h"
38 #include "AliMUONDisplay.h"
41 #include "AliMUONHit.h"
42 #include "AliMUONDigit.h"
45 ClassImp(AliMUONPoints)
47 //_____________________________________________________________________________
48 AliMUONPoints::AliMUONPoints()
52 // Default constructor
57 fMarker[0] = fMarker[1] = fMarker[2]=0;
61 //_____________________________________________________________________________
62 AliMUONPoints::AliMUONPoints(Int_t npoints)
66 // Standard constructor
71 fMarker[0] = fMarker[1] = fMarker[2]=0;
75 //_____________________________________________________________________________
76 AliMUONPoints::AliMUONPoints(const AliMUONPoints& points)
79 // Protected copy constructor
81 AliFatal("Not implemented.");
84 //_____________________________________________________________________________
85 AliMUONPoints::~AliMUONPoints()
93 for (Int_t i=0;i<3;i++){
94 if (fMarker[i]) delete fMarker[i];
99 //_____________________________________________________________________________
100 void AliMUONPoints::DumpHit() const
103 // Dump hit corresponding to this point
105 AliMUONHit *hit = GetHit();
106 if (hit) hit->Dump();
109 //_____________________________________________________________________________
110 void AliMUONPoints::DumpDigit() const
113 // Dump digit corresponding to this point
115 AliMUONDigit *digit = GetDigit();
116 if (digit) digit->Dump();
119 //_____________________________________________________________________________
120 void AliMUONPoints::InspectHit()
123 // Inspect hit corresponding to this point
126 if (fHitIndex < 0 ) return;
127 TVirtualPad *padsav = gPad;
128 AliMUONHit *hit = GetHit();
129 if (hit) hit->Inspect();
130 TVirtualPad *padinspect = (TVirtualPad*)(gROOT->GetListOfCanvases())->FindObject("inspect");
132 Float_t xmin = gPad->GetX1();
133 Float_t xmax = gPad->GetX2();
134 Float_t ymin = gPad->GetY1();
135 Float_t ymax = gPad->GetY2();
136 Float_t dy = ymax-ymin;
138 TPaveText *pad = new TPaveText(xmin, ymin+0.1*dy, xmax, ymin+0.15*dy);
139 pad->SetBit(kCanDelete);
140 pad->SetFillColor(42);
143 sprintf(ptitle," %s , fTrack: %d fTrackIndex: %d ",GetName(),fIndex,fTrackIndex);
144 pad->AddText(ptitle);
146 padinspect->Update();
147 if (padsav) padsav->cd();
151 //_____________________________________________________________________________
152 void AliMUONPoints::InspectDigit()
155 // Inspect digit corresponding to this point
157 if (fDigitIndex < 0) return;
158 TVirtualPad *padsav = gPad;
159 AliMUONDigit *digit = GetDigit();
160 if (digit) digit->Inspect();
161 TVirtualPad *padinspect = (TVirtualPad*)(gROOT->GetListOfCanvases())->FindObject("inspect");
163 Float_t xmin = gPad->GetX1();
164 Float_t xmax = gPad->GetX2();
165 Float_t ymin = gPad->GetY1();
166 Float_t ymax = gPad->GetY2();
167 Float_t dy = ymax-ymin;
169 TPaveText *pad = new TPaveText(xmin, ymin+0.1*dy, xmax, ymin+0.25*dy);
170 pad->SetBit(kCanDelete);
171 pad->SetFillColor(42);
173 char ptitle[11][100];
174 // sprintf(ptitle[11],"Tracks making this digit");
175 // pad->AddText(ptitle[11]);
176 for (int i=0;i<digit->Ntracks();i++) {
177 if (digit->Track(i) == 0) continue;
178 sprintf(ptitle[i],"fTrackIndex: %d Charge: %d",
179 digit->Track(i), digit->TrackCharge(i));
180 pad->AddText(ptitle[i]);
183 padinspect->Update();
184 if (padsav) padsav->cd();
188 //_____________________________________________________________________________
189 Int_t AliMUONPoints::GetTrackIndex() const
192 // Dump digit corresponding to this point
197 if (fDigitIndex != 0) {
198 Int_t ncol=this->fMatrix->GetNcols();
199 for (int i=0;i<ncol;i++) {
200 printf(" track charge %f %f \n",(*(this->fMatrix))(0,i),(*(this->fMatrix))(1,i));
207 //_____________________________________________________________________________
208 AliMUONHit *AliMUONPoints::GetHit() const
211 // Returns pointer to hit index in AliRun::fParticles
213 AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
215 pMUON->TreeH()->GetEvent(fTrackIndex);
216 TClonesArray *muonHits = pMUON->Hits();
217 Int_t nhits = muonHits->GetEntriesFast();
218 if (fHitIndex < 0 || fHitIndex >= nhits) return 0;
219 return (AliMUONHit*)muonHits->UncheckedAt(fHitIndex);
222 //_____________________________________________________________________________
223 AliMUONDigit *AliMUONPoints::GetDigit() const
226 // Returns pointer to digit index in AliRun::fParticles
229 AliMUONDisplay *display=(AliMUONDisplay*)gAlice->Display();
230 Int_t chamber=display->GetChamber();
232 AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
233 TClonesArray *muonDigits = pMUON->GetMUONData()->Digits(chamber-1);
234 pMUON->GetMUONData()->GetDigits();
235 //gAlice->TreeD()->GetEvent(cathode);
236 Int_t ndigits = muonDigits->GetEntriesFast();
237 if (fDigitIndex < 0 || fDigitIndex >= ndigits) return 0;
238 return (AliMUONDigit*)muonDigits->UncheckedAt(fDigitIndex);
240 //_____________________________________________________________________________
242 AliMUONPoints& AliMUONPoints::operator= (const AliMUONPoints& rhs)
244 // Protected assignement operator
246 if (this == &rhs) return *this;
248 AliFatal("Not implemented.");