21#include "TGLIncludes.h"
47 fM = SetModelDynCast<TEveCalo3D>(obj);
80 out[0] =
v1[1] *
v2[2] -
v1[2] *
v2[1];
81 out[1] =
v1[2] *
v2[0] -
v1[0] *
v2[2];
82 out[2] =
v1[0] *
v2[1] -
v1[1] *
v2[0];
90 using namespace TMath;
109 Float_t r, z, theta, phiU, phiL, eta;
112 for (
Int_t i=0; i<=nx; ++i)
115 if (eta >= transF && (eta > etaMin && eta < etaMax))
118 r = Abs(zEF*Tan(theta));
120 for (
Int_t j=1; j<=ny; ++j)
126 glVertex3f(
r*Cos(phiL),
r*Sin(phiL), z);
127 glVertex3f(
r*Cos(phiU),
r*Sin(phiU), z);
130 }
else if (eta <= transB && (eta > etaMin && eta < etaMax)) {
132 r = Abs(zEB*Tan(theta));
134 for (
Int_t j=1; j<=ny; ++j)
140 glVertex3f(
r*Cos(phiL),
r*Sin(phiL), z);
141 glVertex3f(
r*Cos(phiU),
r*Sin(phiU), z);
157 for (
Int_t j=1; j<=ny; ++j)
163 glVertex3f( r1*Cos(phiU), r1*Sin(phiU), zEF);
164 glVertex3f( r2*Cos(phiU), r2*Sin(phiU), zEF);
165 glVertex3f( r1*Cos(phiL), r1*Sin(phiL), zEF);
166 glVertex3f( r2*Cos(phiL), r2*Sin(phiL), zEF);
182 for (
Int_t j=1; j<=ny; ++j)
188 glVertex3f(r1*Cos(phiU), r1*Sin(phiU), zEB);
189 glVertex3f(r2*Cos(phiU), r2*Sin(phiU), zEB);
190 glVertex3f(r1*Cos(phiL), r1*Sin(phiL), zEB);
191 glVertex3f(r2*Cos(phiL), r2*Sin(phiL), zEB);
202 using namespace TMath;
220 for(
Int_t i=0; i<=nx; i++)
223 if (eta<=transF && eta>=transB && (etaMin < eta && eta < etaMax))
227 for (
Int_t j=1; j<=ny; j++)
233 glVertex3f(rB*Cos(phiL), rB*Sin(phiL), z);
234 glVertex3f(rB*Cos(phiU), rB*Sin(phiU), z);
254 for (
Int_t j=1; j<=ny; j++)
262 glVertex3f(
x,
y, zB);
263 glVertex3f(
x,
y, zF);
266 glVertex3f(
x,
y, zB);
267 glVertex3f(
x,
y, zF);
283 glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT);
287 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
401 using namespace TMath;
405 Float_t z1In, z1Out, z2In, z2Out;
408 z1Out = r2/Tan(cellData.
ThetaMax());
410 z2Out = r2/Tan(cellData.
ThetaMin());
462 offset += towerH*Sin(cellData.
ThetaMin());
471 using namespace TMath;
472 Float_t z1, r1In, r1Out, z2, r2In, r2Out;
479 r1Out = z1*Tan(cellData.
ThetaMax());
480 r2Out = z2*Tan(cellData.
ThetaMax());
511 pnts[0] = r1Out*cos1;
512 pnts[1] = r1Out*sin1;
516 pnts[0] = r1Out*cos2;
517 pnts[1] = r1Out*sin2;
521 pnts[0] = r2Out*cos2;
522 pnts[1] = r2Out*sin2;
526 pnts[0] = r2Out*cos1;
527 pnts[1] = r2Out*sin1;
547 glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
548 glEnable(GL_LIGHTING);
549 glEnable(GL_NORMALIZE);
551 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
556 Int_t prevTower = -1;
567 if (tower != prevTower)
606 glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
607 glDisable(GL_LIGHTING);
608 glDisable(GL_CULL_FACE);
609 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
622 glGetFloatv(GL_DEPTH_RANGE,dr);
624 glDepthRange(dr[0], 0.8*dr[1]);
626 glDepthRange(dr[0], dr[1]);
Class to manage histogram axis.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
OpenGL renderer class for TEveCalo3D.
std::vector< Float_t > fOffset
void RenderBarrelCell(const TEveCaloData::CellGeom_t &cell, Float_t towerH, Float_t &offset) const
Render barrel cell.
void RenderBox(const Float_t pnts[8]) const
Render box with given points.
TEveCalo3DGL()
Constructor.
void RenderGrid(TGLRnrCtx &rnrCtx) const
Draw frame reading eta, phi axis.
void RenderGridEndCap() const
Render end cap grid.
virtual void DirectDraw(TGLRnrCtx &rnrCtx) const
GL rendering.
void DrawSelectedCells(TEveCaloData::vCellId_t cells) const
virtual void ProcessSelection(TGLRnrCtx &rnrCtx, TGLSelectRecord &rec)
Processes tower selection.
virtual Bool_t ShouldDLCache(const TGLRnrCtx &rnrCtx) const
Override from TGLObject.
void CrossProduct(const Float_t a[3], const Float_t b[3], const Float_t c[3], Float_t out[3]) const
Calculate cross-product.
virtual void DrawHighlight(TGLRnrCtx &rnrCtx, const TGLPhysicalShape *ps, Int_t lvl=-1) const
Draw polygons in highlight mode.
void RenderGridBarrel() const
Render barrel grid.
virtual Bool_t SetModel(TObject *obj, const Option_t *opt=0)
Set model object.
void RenderEndCapCell(const TEveCaloData::CellGeom_t &cell, Float_t towerH, Float_t &offset) const
Render an endcap cell.
virtual void SetBBox()
Set bounding box.
Visualization of a calorimeter event data in 3D.
TEveCaloData::vCellId_t fCellList
Bool_t GetRnrBarrelFrame() const
virtual void BuildCellIdCache()
Build list of drawn cell IDs. See TEveCalo3DGL::DirectDraw().
Float_t GetFrameWidth() const
Char_t fFrameTransparency
Bool_t GetRnrEndCapFrame() const
std::vector< CellId_t > vCellId_t
static Float_t EtaToTheta(Float_t eta)
void ProcessSelection(vCellId_t &sel_cells, TGLSelectRecord &rec)
Process newly selected cells with given select-record.
virtual void GetCellData(const CellId_t &id, CellData_t &data) const =0
virtual TAxis * GetEtaBins() const
vCellId_t & GetCellsHighlighted()
virtual TAxis * GetPhiBins() const
vCellId_t & GetCellsSelected()
std::vector< CellId_t >::iterator vCellId_i
Float_t GetEtaMin() const
Float_t GetTransitionEtaBackward() const
Get transition eta between barrel and backward end-cap cells.
Float_t GetBarrelRadius() const
Float_t GetBackwardEndCapPos() const
Float_t GetForwardEndCapPos() const
TEveCaloData * GetData() const
TEveRGBAPalette * AssertPalette()
Make sure the TEveRGBAPalette pointer is not null.
Float_t GetEtaMax() const
Float_t GetTransitionEtaForward() const
Get transition eta between barrel and forward end-cap cells.
Float_t GetPhiMax() const
Bool_t CellInEtaPhiRng(TEveCaloData::CellData_t &) const
Returns true if given cell is in the ceta phi range.
Bool_t GetValueIsColor() const
Float_t GetPhiMin() const
void SetupColorHeight(Float_t value, Int_t slice, Float_t &height) const
Set color and height for a given value and slice using slice color or TEveRGBAPalette.
static Bool_t IsU1IntervalContainedByMinMax(Float_t minM, Float_t maxM, Float_t minQ, Float_t maxQ)
Return true if interval Q is contained within interval M for U1 variables.
TGLColor & Selection(Int_t i)
const UChar_t * CArr() const
TObject * fExternalObj
first replica
Base-class for direct OpenGL renderers.
virtual Bool_t ShouldDLCache(const TGLRnrCtx &rnrCtx) const
Decide if display-list should be used for this pass rendering, as determined by rnrCtx.
void SetAxisAlignedBBox(Float_t xmin, Float_t xmax, Float_t ymin, Float_t ymax, Float_t zmin, Float_t zmax)
Set axis-aligned bounding-box.
Concrete physical shape - a GL drawable.
The TGLRnrCtx class aggregates data for a given redering context as needed by various parts of the RO...
Bool_t SecSelection() const
TGLColorSet & ColorSet()
Return reference to current color-set (top of the stack).
Bool_t IsDrawPassOutlineLine() const
UInt_t GetItem(Int_t i) const
Standard selection record including information about containing scene and details ob out selected ob...
static UInt_t LockColor()
Prevent further color changes.
static void ColorTransparency(Color_t color_index, Char_t transparency=0)
Set color from color_index and ROOT-style transparency (default 0).
static UInt_t UnlockColor()
Allow color changes.
static Float_t LineWidth()
Get the line-width, taking the global scaling into account.
Mother of all ROOT objects.
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Cell data inner structure.
Float_t Value(Bool_t) const
Return energy value associated with the cell, usually Et.
Cell geometry inner structure.