2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 #include "AliEveTRDData.h"
11 #include "AliEveTRDModuleImp.h"
13 #include "AliTRDhit.h"
14 #include "AliTRDcluster.h"
15 #include "AliTRDcalibDB.h"
16 #include "AliTRDpadPlane.h"
17 #include "AliTRDgeometry.h"
18 #include "AliTRDdigitsManager.h"
20 ClassImp(AliEveTRDHits)
21 ClassImp(AliEveTRDDigits)
22 ClassImp(AliEveTRDClusters)
24 ///////////////////////////////////////////////////////////
25 ///////////// AliEveTRDDigits /////////////////////
26 ///////////////////////////////////////////////////////////
28 //______________________________________________________________________________
29 AliEveTRDDigits::AliEveTRDDigits(AliEveTRDChamber *p) :
30 TEveQuadSet("digits", ""), fParent(p), fBoxes(), fData()
35 //______________________________________________________________________________
36 void AliEveTRDDigits::SetData(AliTRDdigitsManager *digits)
40 fData.Allocate(fParent->fRowMax, fParent->fColMax, fParent->fTimeMax);
42 for (Int_t row = 0; row < fParent->fRowMax; row++)
43 for (Int_t col = 0; col < fParent->fColMax; col++)
44 for (Int_t time = 0; time < fParent->fTimeMax; time++) {
45 if(digits->GetDigitAmp(row, col, time, fParent->GetID()) < 0) continue;
46 fData.SetDataUnchecked(row, col, time, digits->GetDigitAmp(row, col, time, fParent->GetID()));
50 //______________________________________________________________________________
51 void AliEveTRDDigits::ComputeRepresentation()
53 // Calculate digits representation according to user settings. The
54 // user can set the following parameters:
55 // - digits scale (log/lin)
57 // - digits apparence (quads/boxes)
59 TEveQuadSet::Reset(TEveQuadSet::kQT_FreeQuad, kTRUE, 64);
60 // MT fBoxes.fBoxes.clear();
62 Double_t colSize, rowSize, scale;
69 AliTRDcalibDB* calibration = AliTRDcalibDB::Instance();
70 Double_t cloc[4][3], cglo[3];
71 Int_t color, dimension;
73 for (Int_t row = 0; row < fParent->fRowMax; row++) {
74 rowSize = .5 * fParent->fPadPlane->GetRowSize(row);
75 z = fParent->fPadPlane->GetRowPos(row) - rowSize;
77 for (Int_t col = 0; col < fParent->fColMax; col++) {
78 colSize = .5 * fParent->fPadPlane->GetColSize(col);
79 y = fParent->fPadPlane->GetColPos(col) - colSize;
80 t0 = calibration->GetT0(fParent->fDet, col, row);
81 timeBinSize = calibration->GetVdrift(fParent->fDet, col, row)/fParent->fSamplingFrequency;
83 for (Int_t time = 0; time < fParent->fTimeMax; time++) {
84 charge = fData.GetDataUnchecked(row, col, time);
85 if (charge < fParent->GetDigitsThreshold()) continue;
87 x = fParent->fX0 - (time+0.5-t0)*timeBinSize;
88 scale = fParent->GetDigitsLog() ? TMath::Log(float(charge))/TMath::Log(1024.) : charge/1024.;
89 color = 50+int(scale*50.);
91 cloc[0][2] = z - rowSize * scale;
92 cloc[0][1] = y - colSize * scale;
95 cloc[1][2] = z - rowSize * scale;
96 cloc[1][1] = y + colSize * scale;
99 cloc[2][2] = z + rowSize * scale;
100 cloc[2][1] = y + colSize * scale;
103 cloc[3][2] = z + rowSize * scale;
104 cloc[3][1] = y - colSize * scale;
108 if( fParent->GetDigitsBox()){
109 // MT fBoxes.fBoxes.push_back(Box());
110 // MT fBoxes.fBoxes.back().color[0] = (UChar_t)color;
111 // MT fBoxes.fBoxes.back().color[1] = (UChar_t)color;
112 // MT fBoxes.fBoxes.back().color[2] = (UChar_t)color;
113 // MT fBoxes.fBoxes.back().color[3] = (UChar_t)color;
114 // MT p = fBoxes.fBoxes.back().vertices;
117 AddQuad((Float_t*)0);
119 p = ((QFreeQuad_t*) fLastDigit)->fVertices;
123 for(int id=0; id<dimension; id++)
124 for (Int_t ic = 0; ic < 4; ic++) {
125 cloc[ic][0] -= .5 * id * timeBinSize;
126 fParent->fGeo->RotateBack(fParent->fDet,cloc[ic],cglo);
127 p[0] = cglo[0]; p[1] = cglo[1]; p[2] = cglo[2];
136 //______________________________________________________________________________
137 void AliEveTRDDigits::Paint(Option_t *option)
141 if(fParent->GetDigitsBox()) fBoxes.Paint(option);
142 else TEveQuadSet::Paint(option);
145 //______________________________________________________________________________
146 void AliEveTRDDigits::Reset()
148 // Reset raw and visual data.
150 TEveQuadSet::Reset(TEveQuadSet::kQT_FreeQuad, kTRUE, 64);
151 // MT fBoxes.fBoxes.clear();
155 ///////////////////////////////////////////////////////////
156 ///////////// AliEveTRDHits /////////////////////
157 ///////////////////////////////////////////////////////////
159 //______________________________________________________________________________
160 AliEveTRDHits::AliEveTRDHits(AliEveTRDChamber *p) :
161 TEvePointSet("hits", 20), fParent(p)
166 //______________________________________________________________________________
167 void AliEveTRDHits::PointSelected(Int_t n)
169 // Handle an individual point selection from GL.
171 fParent->SpawnEditor();
172 AliTRDhit *h = dynamic_cast<AliTRDhit*>(GetPointId(n));
173 printf("\nDetector : %d\n", h->GetDetector());
174 printf("Region of production : %c\n", h->FromAmplification() ? 'A' : 'D');
175 printf("TR photon : %s\n", h->FromTRphoton() ? "Yes" : "No");
176 printf("Charge : %d\n", h->GetCharge());
177 printf("MC track label : %d\n", h->GetTrack());
178 printf("Time from collision : %f\n", h->GetTime());
182 ///////////////////////////////////////////////////////////
183 ///////////// AliEveTRDHits /////////////////////
184 ///////////////////////////////////////////////////////////
186 //______________________________________________________________________________
187 AliEveTRDClusters::AliEveTRDClusters(AliEveTRDChamber *p):AliEveTRDHits(p)
192 //______________________________________________________________________________
193 void AliEveTRDClusters::PointSelected(Int_t n)
195 // Handle an individual point selection from GL.
197 fParent->SpawnEditor();
198 AliTRDcluster *c = dynamic_cast<AliTRDcluster*>(GetPointId(n));
199 printf("\nDetector : %d\n", c->GetDetector());
200 printf("Charge : %f\n", c->GetQ());
201 printf("Sum S : %4.0f\n", c->GetSumS());
202 printf("Time bin : %d\n", c->GetLocalTimeBin());
203 printf("Signals : ");
204 Short_t *cSignals = c->GetSignals();
205 for(Int_t ipad=0; ipad<7; ipad++) printf("%d ", cSignals[ipad]); printf("\n");
206 printf("Central pad : %d\n", c->GetPadCol());
207 printf("MC track labels : ");
208 for(Int_t itrk=0; itrk<3; itrk++) printf("%d ", c->GetLabel(itrk)); printf("\n");
209 // Bool_t AliCluster::GetGlobalCov(Float_t* cov) const
210 // Bool_t AliCluster::GetGlobalXYZ(Float_t* xyz) const
211 // Float_t AliCluster::GetSigmaY2() const
212 // Float_t AliCluster::GetSigmaYZ() const
213 // Float_t AliCluster::GetSigmaZ2() const
216 ///////////////////////////////////////////////////////////
217 //////////// AliEveTRDHitsEditor ///////////////////
218 ///////////////////////////////////////////////////////////
219 AliEveTRDHitsEditor::AliEveTRDHitsEditor(const TGWindow* p, Int_t width, Int_t height,
220 UInt_t options, Pixel_t back) :
221 TGedFrame(p, width, height, options, back),
226 MakeTitle("TRD Hits");
229 void AliEveTRDHitsEditor::SetModel(TObject* obj)
233 fM = dynamic_cast<AliEveTRDHits*>(obj);
236 // for(int ihit=0; ihit<fM->GetN(); ihit++){
237 // fM->GetPoint(ihit, x, y, z);
238 // printf("%3d : x=%6.3f y=%6.3f z=%6.3f\n", ihit, x, y, z);
242 ///////////////////////////////////////////////////////////
243 ///////////// AliEveTRDDigitsEditor /////////////////////
244 ///////////////////////////////////////////////////////////
245 AliEveTRDDigitsEditor::AliEveTRDDigitsEditor(const TGWindow* p, Int_t width, Int_t height,
246 UInt_t options, Pixel_t back) :
247 TGedFrame(p, width, height, options, back),
252 MakeTitle("TRD Digits");
255 void AliEveTRDDigitsEditor::SetModel(TObject* obj)
259 fM = dynamic_cast<AliEveTRDDigits*>(obj);
260 fM->fParent->SpawnEditor();
262 // printf("Chamber %d", fM->fParent->GetID());
263 // for (Int_t row = 0; row < fM->fParent->GetRowMax(); row++)
264 // for (Int_t col = 0; col < fM->fParent->GetColMax(); col++)
265 // for (Int_t time = 0; time < fM->fParent->GetTimeMax(); time++) {
266 // printf("\tA(%d %d %d) = %d\n", row, col, time, fM->fData.GetDataUnchecked(row, col, time));