]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDData.cxx
No need for TGLObject.h (C.Holm)
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDData.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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  **************************************************************************/
9
10 #include "AliEveTRDData.h"
11 #include "AliEveTRDModuleImp.h"
12
13 #include "AliTRDhit.h"
14 #include "AliTRDcluster.h"
15 #include "AliTRDcalibDB.h"
16 #include "AliTRDpadPlane.h"
17 #include "AliTRDgeometry.h"
18 #include "AliTRDdigitsManager.h"
19
20 ClassImp(AliEveTRDHits)
21 ClassImp(AliEveTRDDigits)
22 ClassImp(AliEveTRDClusters)
23
24 ///////////////////////////////////////////////////////////
25 /////////////   AliEveTRDDigits       /////////////////////
26 ///////////////////////////////////////////////////////////
27
28 //______________________________________________________________________________
29 AliEveTRDDigits::AliEveTRDDigits(AliEveTRDChamber *p) :
30   TEveQuadSet("digits", ""), fParent(p), fBoxes(), fData()
31 {
32   // Constructor.
33 }
34
35 //______________________________________________________________________________
36 void AliEveTRDDigits::SetData(AliTRDdigitsManager *digits)
37 {
38   // Set data source.
39
40   fData.Allocate(fParent->fRowMax, fParent->fColMax, fParent->fTimeMax);
41   //    digits->Expand();
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()));
47       }
48 }
49
50 //______________________________________________________________________________
51 void AliEveTRDDigits::ComputeRepresentation()
52 {
53   // Calculate digits representation according to user settings. The
54   // user can set the following parameters:
55   // - digits scale (log/lin)
56   // - digits threshold
57   // - digits apparence (quads/boxes)
58
59   TEveQuadSet::Reset(TEveQuadSet::kQT_FreeQuad, kTRUE, 64);
60   // MT fBoxes.fBoxes.clear();
61
62   Double_t colSize, rowSize, scale;
63   Double_t x, y, z;
64
65   Int_t charge;
66   Float_t t0;
67   Float_t timeBinSize;
68
69   AliTRDcalibDB* calibration = AliTRDcalibDB::Instance();
70   Double_t cloc[4][3], cglo[3];
71   Int_t color, dimension;
72   fData.Expand();
73   for (Int_t  row = 0;  row <  fParent->fRowMax;  row++) {
74     rowSize = .5 * fParent->fPadPlane->GetRowSize(row);
75     z = fParent->fPadPlane->GetRowPos(row) - rowSize;
76
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;
82
83       for (Int_t time = 0; time < fParent->fTimeMax; time++) {
84         charge = fData.GetDataUnchecked(row, col, time);
85         if (charge < fParent->GetDigitsThreshold()) continue;
86
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.);
90
91         cloc[0][2] = z - rowSize * scale;
92         cloc[0][1] = y - colSize * scale;
93         cloc[0][0] = x;
94
95         cloc[1][2] = z - rowSize * scale;
96         cloc[1][1] = y + colSize * scale;
97         cloc[1][0] = x;
98
99         cloc[2][2] = z + rowSize * scale;
100         cloc[2][1] = y + colSize * scale;
101         cloc[2][0] = x;
102
103         cloc[3][2] = z + rowSize * scale;
104         cloc[3][1] = y - colSize * scale;
105         cloc[3][0] = x;
106
107         Float_t* p = 0;
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;
115           dimension = 2;
116         } else {
117           AddQuad((Float_t*)0);
118           QuadColor(color);
119           p = ((QFreeQuad_t*) fLastDigit)->fVertices;
120           dimension = 1;
121         }
122
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];
128             p+=3;
129           }
130       }  // end time loop
131     }  // end col loop
132   }  // end row loop
133   fData.Compress(1);
134 }
135
136 //______________________________________________________________________________
137 void AliEveTRDDigits::Paint(Option_t *option)
138 {
139   // Paint the object.
140
141   if(fParent->GetDigitsBox()) fBoxes.Paint(option);
142   else TEveQuadSet::Paint(option);
143 }
144
145 //______________________________________________________________________________
146 void AliEveTRDDigits::Reset()
147 {
148   // Reset raw and visual data.
149
150   TEveQuadSet::Reset(TEveQuadSet::kQT_FreeQuad, kTRUE, 64);
151   // MT fBoxes.fBoxes.clear();
152   fData.Reset();
153 }
154
155 ///////////////////////////////////////////////////////////
156 /////////////   AliEveTRDHits         /////////////////////
157 ///////////////////////////////////////////////////////////
158
159 //______________________________________________________________________________
160 AliEveTRDHits::AliEveTRDHits(AliEveTRDChamber *p) :
161   TEvePointSet("hits", 20), fParent(p)
162 {
163   // Constructor.
164 }
165
166 //______________________________________________________________________________
167 void AliEveTRDHits::PointSelected(Int_t n)
168 {
169   // Handle an individual point selection from GL.
170
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());
179 }
180
181
182 ///////////////////////////////////////////////////////////
183 /////////////   AliEveTRDHits         /////////////////////
184 ///////////////////////////////////////////////////////////
185
186 //______________________________________________________________________________
187 AliEveTRDClusters::AliEveTRDClusters(AliEveTRDChamber *p):AliEveTRDHits(p)
188 {
189   // Constructor.
190 }
191
192 //______________________________________________________________________________
193 void AliEveTRDClusters::PointSelected(Int_t n)
194 {
195   // Handle an individual point selection from GL.
196
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
214 }
215
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),
222   fM(0)
223 {
224   // Constructor.
225
226   MakeTitle("TRD Hits");
227 }
228
229 void AliEveTRDHitsEditor::SetModel(TObject* obj)
230 {
231   // Set model object.
232
233   fM = dynamic_cast<AliEveTRDHits*>(obj);
234
235   //    Float_t x, y, z;
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);
239   //    }
240 }
241
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),
248   fM(0)
249 {
250   // Constructor.
251
252   MakeTitle("TRD Digits");
253 }
254
255 void AliEveTRDDigitsEditor::SetModel(TObject* obj)
256 {
257   // Set model object.
258
259   fM = dynamic_cast<AliEveTRDDigits*>(obj);
260   fM->fParent->SpawnEditor();
261
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));
267   //                    }
268 }