diff --git a/graf3d/eve/inc/TEveCalo.h b/graf3d/eve/inc/TEveCalo.h index 54273114437d3f7fdbfec9fbd5d55a96abcd983f..145c27529066b1dcdb0c2e5cc67f8e3375d9f1a9 100644 --- a/graf3d/eve/inc/TEveCalo.h +++ b/graf3d/eve/inc/TEveCalo.h @@ -262,6 +262,9 @@ protected: Bool_t fDrawHPlane; Float_t fHPlaneVal; + Bool_t fHasFixedHeightIn2DMode; + Float_t fFixedHeightValIn2DMode; // 1% of whole height + Int_t fDrawNumberCellPixels; Int_t fCellPixelFontSize; @@ -298,12 +301,18 @@ public: Bool_t GetNormalizeRebin() const { return fNormalizeRebin; } void SetNormalizeRebin(Bool_t s) { fNormalizeRebin = s; fCellIdCacheOK=kFALSE;} + EProjection_e GetProjection() const { return fProjection; } void SetProjection(EProjection_e p) { fProjection = p; } - EProjection_e GetProjection() { return fProjection; } void Set2DMode(E2DMode_e p) { f2DMode = p; } E2DMode_e Get2DMode() { return f2DMode; } + bool GetHasFixedHeightIn2DMode() const { return fHasFixedHeightIn2DMode; } + void SetHasFixedHeightIn2DMode(bool x) { fHasFixedHeightIn2DMode = x; } + + float GetFixedHeightValIn2DMode() const { return fFixedHeightValIn2DMode; } + void SetFixedHeightValIn2DMode(float x) { fFixedHeightValIn2DMode = x; } + void SetBoxMode(EBoxMode_e p) { fBoxMode = p; } EBoxMode_e GetBoxMode() { return fBoxMode; } diff --git a/graf3d/eve/src/TEveCalo.cxx b/graf3d/eve/src/TEveCalo.cxx index 2962d239546aacbd6554f178af6a91b2a48eb099..1c520f5a0100203310865697821ccfc2a45bf5df 100644 --- a/graf3d/eve/src/TEveCalo.cxx +++ b/graf3d/eve/src/TEveCalo.cxx @@ -778,6 +778,9 @@ TEveCaloLego::TEveCaloLego(TEveCaloData* d, const char* n, const char* t): fDrawHPlane(kFALSE), fHPlaneVal(0), + fHasFixedHeightIn2DMode(kFALSE), + fFixedHeightValIn2DMode(0.f), + fDrawNumberCellPixels(18), // draw numbers on cell above 30 pixels fCellPixelFontSize(12) // size of cell fonts in pixels { diff --git a/graf3d/eve/src/TEveCaloLegoGL.cxx b/graf3d/eve/src/TEveCaloLegoGL.cxx index 24b64855a2ff79bc8e9e4a70be1b51bb2b011190..7ddda9ea6ced15d75a4a597a9ac1e1b1f6294be2 100644 --- a/graf3d/eve/src/TEveCaloLegoGL.cxx +++ b/graf3d/eve/src/TEveCaloLegoGL.cxx @@ -572,6 +572,9 @@ void TEveCaloLegoGL::DrawAxis2D(TGLRnrCtx & rnrCtx) const { // Draw XY axis. + if (fM->GetData()->Empty()) + fAxisPainter.SetTMNDim(1); + TGLCamera& cam = rnrCtx.RefCamera(); TAxis ax; @@ -637,6 +640,8 @@ void TEveCaloLegoGL::DrawAxis2D(TGLRnrCtx & rnrCtx) const glTranslatef(fM->GetEtaMin(), 0, 0); fAxisPainter.PaintAxis(rnrCtx, &ax); glPopMatrix(); + + fAxisPainter.SetTMNDim(2); } //______________________________________________________________________________ @@ -900,6 +905,8 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const Float_t bws = -1; //smallest bin Float_t logMax = -1; + Float_t baseOffset = fM->GetFixedHeightValIn2DMode()*fMaxVal; + if (fM->f2DMode == TEveCaloLego::kValColor) { fM->AssertPalette(); @@ -909,14 +916,14 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const { if (rnrCtx.SecSelection()) glLoadName(i->fId); glBegin(GL_POLYGON); - Float_t val = i->fSumVal; - fM->fPalette->ColorFromValue(TMath::FloorNint(val), col); + fM->fPalette->ColorFromValue(TMath::FloorNint(i->fSumVal), col); col[3] = fM->GetData()->GetSliceTransparency(i->fMaxSlice); TGLUtil::Color4ubv(col); - glVertex3f(i->fX0, i->fY0, val); - glVertex3f(i->fX1, i->fY0, val); - glVertex3f(i->fX1, i->fY1, val); - glVertex3f(i->fX0, i->fY1, val); + Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal; + glVertex3f(i->fX0, i->fY0, z); + glVertex3f(i->fX1, i->fY0, z); + glVertex3f(i->fX1, i->fY1, z); + glVertex3f(i->fX0, i->fY1, z); glEnd(); } } @@ -946,10 +953,11 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const glPushName(i->fId); glBegin(GL_QUADS); - glVertex3f(i->fX0, i->fY0, i->fSumVal); - glVertex3f(i->fX1, i->fY0, i->fSumVal); - glVertex3f(i->fX1, i->fY1, i->fSumVal); - glVertex3f(i->fX0, i->fY1, i->fSumVal); + Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal; + glVertex3f(i->fX0, i->fY0, z); + glVertex3f(i->fX1, i->fY0, z); + glVertex3f(i->fX1, i->fY1, z); + glVertex3f(i->fX0, i->fY1, z); glEnd(); glPopName(); @@ -963,7 +971,8 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const for (vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i) { TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), fM->fData->GetSliceTransparency(i->fMaxSlice)); - glVertex3f(i->X(), i->Y() , i->fSumVal); + Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal; + glVertex3f(i->X(), i->Y() , z); } glEnd(); } @@ -975,10 +984,11 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const Float_t bw = fValToPixel*TMath::Log10(i->fSumVal+1); x = i->X(); y = i->Y(); - glVertex3f(x - bw, y - bw, i->fSumVal); - glVertex3f(x + bw, y - bw, i->fSumVal); - glVertex3f(x + bw, y + bw, i->fSumVal); - glVertex3f(x - bw, y + bw, i->fSumVal); + Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal; + glVertex3f(x - bw, y - bw, z); + glVertex3f(x + bw, y - bw, z); + glVertex3f(x + bw, y + bw, z); + glVertex3f(x - bw, y + bw, z); } glEnd(); @@ -986,12 +996,13 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const { glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT); Float_t z = 0; - Float_t zOff = fDataMax*0.1 ; + Float_t zOff = fDataMax*0.001 ; // avoid polygon stpiling glBegin(GL_QUADS); for ( vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i) { Char_t transp = TMath::Min(100, 80 + fM->fData->GetSliceTransparency(i->fMaxSlice) / 5); TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), transp); - z = i->fSumVal - zOff; + z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal; + z -= zOff; glVertex3f(i->fX0, i->fY0, z); glVertex3f(i->fX1, i->fY0, z); glVertex3f(i->fX1, i->fY1, z); @@ -1003,7 +1014,8 @@ void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const glBegin(GL_QUADS); for ( vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i) { TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), 60); - z = i->fSumVal + zOff; + z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal; + z += zOff; glVertex3f(i->fX0, i->fY0, z); glVertex3f(i->fX1, i->fY0, z); glVertex3f(i->fX1, i->fY1, z); @@ -1060,7 +1072,8 @@ void TEveCaloLegoGL::DrawHighlight(TGLRnrCtx& rnrCtx, const TGLPhysicalShape* /* Double_t unit = ((eM - em) < (pM - pm)) ? (eM - em) : (pM - pm); Float_t sx = (eM - em) / fM->GetEtaRng(); Float_t sy = (pM - pm) / fM->GetPhiRng(); - glScalef(sx / unit, sy / unit, fM->GetValToHeight()); + Float_t sz = (fM->fData->Empty() && (fM->GetScaleAbs() == false)) ? 1 : fM->GetMaxTowerH() / fDataMax; + glScalef(sx / unit, sy / unit, sz); glTranslatef(-fM->GetEta(), -fM->fPhi, 0); glDisable(GL_LIGHTING); @@ -1277,10 +1290,10 @@ void TEveCaloLegoGL::DirectDraw(TGLRnrCtx & rnrCtx) const glPushMatrix(); Float_t sx = (eM - em) / fM->GetEtaRng(); Float_t sy = (pM - pm) / fM->GetPhiRng(); - glScalef(sx / unit, sy / unit, fM->GetValToHeight()); + Float_t sz = (fM->fData->Empty() && (fM->GetScaleAbs() == false)) ? 1 : fM->GetMaxTowerH() / fDataMax; + glScalef(sx / unit, sy / unit, sz); glTranslatef(-fM->GetEta(), -fM->fPhi, 0); - fFontColor = fM->fFontColor; fGridColor = fM->fGridColor; if (fGridColor < 0 || fFontColor < 0)