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 "AliEveTPCSector2D.h"
11 #include "AliEveTPCSector3D.h"
13 #include <EveDet/AliEveTPCData.h>
14 #include <EveDet/AliEveTPCSectorData.h>
16 #include <TEveManager.h>
18 #include <AliTPCParam.h>
20 #include <TBuffer3D.h>
21 #include <TBuffer3DTypes.h>
22 #include <TVirtualPad.h>
23 #include <TVirtualViewer3D.h>
27 #include <TVirtualPad.h>
31 //______________________________________________________________________________
34 // Displays TPC raw-data in 2D.
36 // fShowMax: true - display maximum value for given time interval
37 // false - display integral
38 // fAverage: only available when fShowMax = false; divide by time window width
40 // fUseTexture: use OpenGL textures to display data (fast rendering,
41 // updates take the same time)
44 ClassImp(AliEveTPCSector2D)
46 /******************************************************************************/
48 AliEveTPCSector2D::AliEveTPCSector2D(const Text_t* n, const Text_t* t) :
49 AliEveTPCSectorViz(n,t),
61 /******************************************************************************/
63 void AliEveTPCSector2D::MakeSector3D()
65 // Make a 3D sector with same setting as this one.
66 // It is added as a child ot this object.
68 AliEveTPCSector3D* s = new AliEveTPCSector3D;
69 s->SetDataSource(fTPCData);
70 s->SetSectorID(fSectorID);
71 s->SetAutoTrans(fAutoTrans);
72 s->CopyVizParams(*this);
73 gEve->AddElement(s, this);
77 /******************************************************************************/
79 void AliEveTPCSector2D::ComputeBBox()
81 // Compute boundig-box.
83 const AliEveTPCSectorData::SegmentInfo& iSeg = AliEveTPCSectorData::GetInnSeg();
84 const AliEveTPCSectorData::SegmentInfo& o2Seg = AliEveTPCSectorData::GetOut2Seg();
87 Float_t w = o2Seg.GetNMaxPads()*o2Seg.GetPadWidth()/2;
90 fBBox[2] = iSeg.GetRLow();
91 fBBox[3] = o2Seg.GetRLow() + o2Seg.GetNRows()*o2Seg.GetPadHeight();
92 fBBox[4] = -0.5; // Fake z-width to 1 cm.
96 /******************************************************************************/
98 void AliEveTPCSector2D::PadSelected(Int_t row, Int_t pad)
100 // Called when ctrl-mouse-left-click registered over a pad.
102 // EVE -> Std convention
103 Int_t sseg = fSectorID, srow = row;
104 if (row >= AliEveTPCSectorData::GetInnSeg().GetNRows()) {
106 srow -= AliEveTPCSectorData::GetInnSeg().GetNRows();
111 printf("AliEveTPCSector2DGL::ProcessSelection segment=%d, row=%d, pad=%d\n",
116 AliEveTPCSectorData* sectorData = GetSectorData();
117 if (sectorData == 0) return;
118 Int_t mint = fMinTime;
119 Int_t maxt = fMaxTime;
120 TH1S* h = new TH1S(Form("Seg%d_Row%d_TEvePad%d", sseg, srow, pad),
121 Form("Segment %d, Row %d, TEvePad %d", sseg, srow, pad),
122 maxt - mint +1 , mint, maxt);
123 h->SetXTitle("Time");
125 AliEveTPCSectorData::PadIterator i = sectorData->MakePadIterator(row, pad);
127 h->Fill(i.Time(), i.Signal());
134 AliEveTPCSectorData* sectorData = GetSectorData();
135 if (sectorData == 0) return;
136 Int_t mint = fMinTime;
137 Int_t maxt = fMaxTime;
138 Int_t npad = AliEveTPCSectorData::GetNPadsInRow(row);
139 TH2S* h = new TH2S(Form("Seg%d_Row%d", sseg, srow),
140 Form("Segment %d, Row %d", sseg, srow),
141 maxt - mint +1 , mint, maxt,
143 h->SetXTitle("Time");
144 h->SetYTitle("TEvePad");
146 AliEveTPCSectorData::RowIterator i = sectorData->MakeRowIterator(row);
149 h->Fill(i.Time(), i.TEvePad(), i.Signal());
158 /******************************************************************************/
160 void AliEveTPCSector2D::Paint(Option_t* )
164 if(fRnrSelf == kFALSE)
167 TBuffer3D buffer(TBuffer3DTypes::kGeneric);
172 buffer.fTransparency = 0;
173 fHMTrans.SetBuffer3D(buffer);
174 buffer.SetSectionsValid(TBuffer3D::kCore);
176 Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
177 if (reqSections == TBuffer3D::kNone) {
181 Error("AliEveTPCSector2D::Paint", "only direct OpenGL rendering supported.");