3 #include "TPCSector2D.h"
5 #include <Alieve/TPCData.h>
6 #include <Alieve/TPCSectorData.h>
8 #include <AliTPCParam.h>
10 #include <TBuffer3D.h>
11 #include <TBuffer3DTypes.h>
12 #include <TVirtualPad.h>
13 #include <TVirtualViewer3D.h>
16 using namespace Alieve;
19 //______________________________________________________________________
22 // Displays TPC raw-data in 2D.
24 // fShowMax: true - display maximum value for given time interval
25 // false - display integral
26 // fAverage: only available when fShowMax = false; divide by time window width
28 // fUseTexture: use OpenGL textures to display data (fast rendering,
29 // updates take the same time)
34 /**************************************************************************/
36 TPCSector2D::TPCSector2D(const Text_t* n, const Text_t* t) :
45 TPCSector2D::~TPCSector2D()
48 /**************************************************************************/
50 void TPCSector2D::ComputeBBox()
52 const TPCSectorData::SegmentInfo& iSeg = TPCSectorData::GetInnSeg();
53 const TPCSectorData::SegmentInfo& o2Seg = TPCSectorData::GetOut2Seg();
56 Float_t w = o2Seg.GetNMaxPads()*o2Seg.GetPadWidth()/2;
59 fBBox[2] = iSeg.GetRLow();
60 fBBox[3] = o2Seg.GetRLow() + o2Seg.GetNRows()*o2Seg.GetPadHeight();
61 fBBox[4] = -0.5; // Fake z-width to 1 cm.
65 /**************************************************************************/
67 void TPCSector2D::Paint(Option_t* )
69 if(fRnrElement == kFALSE)
72 TBuffer3D buffer(TBuffer3DTypes::kGeneric);
77 buffer.fTransparency = 0;
78 buffer.fLocalFrame = fTrans;
80 memcpy(buffer.fLocalMaster, fMatrix, 16*sizeof(Double_t));
81 buffer.SetSectionsValid(TBuffer3D::kCore);
83 Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
84 if (reqSections == TBuffer3D::kNone) {
85 // printf("TPCSector2D::Paint viewer was happy with Core buff3d.\n");
89 printf("TPCSector2D::Paint only GL supported.\n");
93 if (reqSections & TBuffer3D::kRawSizes) {
94 Int_t nbPnts = fQuads.size()*4;
95 Int_t nbSegs = nbPnts;
96 if (!buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, fQuads.size(), fQuads.size()*6)) {
99 buffer.SetSectionsValid(TBuffer3D::kRawSizes);
102 if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
105 for (std::vector<Quad>::iterator i=fQuads.begin(); i!=fQuads.end(); ++i) {
106 for (Int_t k = 0; k < 12; k++ ){
107 buffer.fPnts[pidx] = (*i).vertices[k];
114 for (Int_t q = 0; q < fQuads.size(); ++q) {
115 for (Int_t s = 0; s < 4; ++s ) {
116 buffer.fSegs[3*sidx ] = 4;
117 buffer.fSegs[3*sidx+1] = sidx;
119 buffer.fSegs[3*sidx+2] = q*4;
121 buffer.fSegs[3*sidx+2] = sidx + 1;
127 for (Int_t q = 0; q < fQuads.size(); ++q) {
128 buffer.fPols[6*q] = fQuads[q].color;
129 buffer.fPols[6*q +1] = 4;
130 buffer.fPols[6*q +2] = 4*q +0;
131 buffer.fPols[6*q +3] = 4*q +1;
132 buffer.fPols[6*q +4] = 4*q +2;
133 buffer.fPols[6*q +5] = 4*q +3;
136 buffer.SetSectionsValid(TBuffer3D::kRaw);
141 // gPad->GetViewer3D()->AddObject(buffer);