69d7604f9eb61e890f30f85bd448d2d266be08e8
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCSectorViz.cxx
1 // $Header$
2
3 #include "TPCSectorViz.h"
4
5 #include <Alieve/TPCData.h>
6 #include <Alieve/TPCSectorData.h>
7 #include <AliTPCParam.h>
8
9 #include <TStyle.h>
10 #include <TColor.h>
11
12 using namespace Reve;
13 using namespace Alieve;
14
15 //______________________________________________________________________
16 // TPCSectorViz
17 //
18 // Base class for TPC raw-data visualization.
19 // See TPCSector2D and TPCSector3D for concrete implementations.
20
21 ClassImp(TPCSectorViz)
22
23 /**************************************************************************/
24
25 TPCSectorViz::TPCSectorViz(const Text_t* n, const Text_t* t) :
26   TNamed(n, t),
27   Reve::RenderElement(fFrameColor),
28
29   fTPCData  (0),
30   fSectorID (0),
31
32   fMinTime   (0),
33   fMaxTime   (450),
34   fThreshold (5),
35   fMaxVal    (80),
36
37   fRnrInn   (kTRUE),
38   fRnrOut1  (kTRUE),
39   fRnrOut2  (kTRUE),
40
41   fFrameColor ((Color_t) 4),
42   fRnrFrame (kTRUE),
43   fTrans    (kFALSE),
44   fRTS      (1)
45 {}
46
47 TPCSectorViz::~TPCSectorViz()
48 {
49   if(fTPCData) fTPCData->DecRefCount();
50 }
51
52 /**************************************************************************/
53
54 //UInt_t TPCSectorViz::IncRTS()
55 //{
56 //  return ++fRTS;
57 //}
58
59
60 void TPCSectorViz::SetDataSource(TPCData* data)
61 {
62   if(data == fTPCData) return;
63   if(fTPCData) fTPCData->DecRefCount();
64   fTPCData = data;
65   if(fTPCData) fTPCData->IncRefCount();
66   IncRTS();
67 }
68
69 void TPCSectorViz::SetSectorID(Int_t segment)
70 {
71   if(segment < 0 ) segment = 0;
72   if(segment > 35) segment = 35;
73   fSectorID = segment;
74   IncRTS();
75 }
76
77 TPCSectorData* TPCSectorViz::GetSectorData() const
78 {
79   return fTPCData ? fTPCData->GetSectorData(fSectorID) : 0;
80 }
81
82 /**************************************************************************/
83
84 void TPCSectorViz::SetTrans(Bool_t trans) 
85 {
86   fTrans = trans;
87   if(fTrans) {
88     for (Int_t k=0; k<16; ++k)
89       fMatrix[k] = 0.;
90
91     using namespace TMath;
92     Float_t c = Cos((fSectorID + 0.5)*20*Pi()/180 - PiOver2());
93     Float_t s = Sin((fSectorID + 0.5)*20*Pi()/180 - PiOver2());
94     Float_t z = TPCSectorData::GetParam().GetZLength();
95     if(fSectorID >= 18) z = -z;
96   
97     // column major
98     fMatrix[0]  = -c;
99     fMatrix[1]  = -s;
100     fMatrix[4]  = -s;
101     fMatrix[5]  =  c;
102     fMatrix[10] = -1;
103     fMatrix[14] =  z;
104     fMatrix[15] =  1;
105   }
106 }
107
108 /**************************************************************************/
109
110 void TPCSectorViz::SetupColor(Int_t val, UChar_t* pixel) const
111 {
112   using namespace TMath;
113   Float_t div  = Max(1, fMaxVal - fThreshold);
114   Int_t   nCol = gStyle->GetNumberOfColors();
115   Int_t   cBin = (Int_t) Nint(nCol*(val - fThreshold)/div);
116
117   ColorFromIdx(gStyle->GetColorPalette(Min(nCol - 1, cBin)), pixel);
118 }