3 #include "TPCSector2D.h"
5 #include <Alieve/TPCData.h>
6 #include <Alieve/TPCSectorData.h>
8 #include <AliTPCParam.h>
11 using namespace Alieve;
16 /**************************************************************************/
18 void TPCSector2D::Init()
40 TPCSector2D::~TPCSector2D()
42 if(fTPCData) fTPCData->DecRefCount();
45 /**************************************************************************/
47 void TPCSector2D::SetDataSource(TPCData* data)
49 if(data == fTPCData) return;
50 if(fTPCData) fTPCData->DecRefCount();
52 if(fTPCData) fTPCData->IncRefCount();
56 void TPCSector2D::SetSectorID(Int_t segment)
58 if(segment < 0 ) segment = 0;
59 if(segment > 35) segment = 35;
61 SetName(Form("TPCSector2D %d", fSectorID));
65 /**************************************************************************/
67 void TPCSector2D::ComputeBBox()
69 const TPCSectorData::SegmentInfo& iSeg = TPCSectorData::GetInnSeg();
70 const TPCSectorData::SegmentInfo& o2Seg = TPCSectorData::GetOut2Seg();
73 Float_t w = o2Seg.GetNMaxPads()*o2Seg.GetPadWidth()/2;
76 fBBox[2] = iSeg.GetRLow();
77 fBBox[3] = o2Seg.GetRLow() + o2Seg.GetNRows()*o2Seg.GetPadHeight();
78 fBBox[4] = -0.5; // Fake z-width to 1 cm.
82 /**************************************************************************/
84 void TPCSector2D::SetTrans(Bool_t trans)
88 for (Int_t k = 0; k< 16; k++)
91 Float_t c = TMath::Cos((fSectorID + 0.5)*20*TMath::Pi()/180 - TMath::Pi()/2);
92 Float_t s = TMath::Sin((fSectorID + 0.5)*20*TMath::Pi()/180 - TMath::Pi()/2);
93 Float_t z = TPCSectorData::GetParam().GetZLength();
94 if(fSectorID >= 18) z = -z;
107 /**************************************************************************/
109 void TPCSector2D::Paint(Option_t* )
111 TBuffer3D buffer(TBuffer3DTypes::kGeneric);
116 buffer.fTransparency = 0;
117 buffer.fLocalFrame = fTrans;
119 memcpy(buffer.fLocalMaster, fMatrix, 16*sizeof(Double_t));
120 buffer.SetSectionsValid(TBuffer3D::kCore);
122 Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
123 if (reqSections == TBuffer3D::kNone) {
124 // printf("TPCSector2D::Paint viewer was happy with Core buff3d.\n");
128 printf("TPCSector2D::Paint only GL supported.\n");
132 if (reqSections & TBuffer3D::kRawSizes) {
133 Int_t nbPnts = fQuads.size()*4;
134 Int_t nbSegs = nbPnts;
135 if (!buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, fQuads.size(), fQuads.size()*6)) {
138 buffer.SetSectionsValid(TBuffer3D::kRawSizes);
141 if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
144 for (std::vector<Quad>::iterator i=fQuads.begin(); i!=fQuads.end(); ++i) {
145 for (Int_t k = 0; k < 12; k++ ){
146 buffer.fPnts[pidx] = (*i).vertices[k];
153 for (Int_t q = 0; q < fQuads.size(); ++q) {
154 for (Int_t s = 0; s < 4; ++s ) {
155 buffer.fSegs[3*sidx ] = 4;
156 buffer.fSegs[3*sidx+1] = sidx;
158 buffer.fSegs[3*sidx+2] = q*4;
160 buffer.fSegs[3*sidx+2] = sidx + 1;
166 for (Int_t q = 0; q < fQuads.size(); ++q) {
167 buffer.fPols[6*q] = fQuads[q].color;
168 buffer.fPols[6*q +1] = 4;
169 buffer.fPols[6*q +2] = 4*q +0;
170 buffer.fPols[6*q +3] = 4*q +1;
171 buffer.fPols[6*q +4] = 4*q +2;
172 buffer.fPols[6*q +5] = 4*q +3;
175 buffer.SetSectionsValid(TBuffer3D::kRaw);
180 // gPad->GetViewer3D()->AddObject(buffer);