diff --git a/hist/hist/src/TH2.cxx b/hist/hist/src/TH2.cxx index 5792ac8f27906..51f87ad1ff86e 100644 --- a/hist/hist/src/TH2.cxx +++ b/hist/hist/src/TH2.cxx @@ -260,35 +260,50 @@ Int_t TH2::BufferEmpty(Int_t action) fBuffer = buffer; } - if (CanExtendAllAxes() || fXaxis.GetXmax() <= fXaxis.GetXmin() || fYaxis.GetXmax() <= fYaxis.GetXmin()) { + const bool xbinAuto = fXaxis.GetXmax() <= fXaxis.GetXmin(); + Double_t xmin = fBuffer[2]; + Double_t xmax = xmin; + if (CanExtendAllAxes() || xbinAuto) { //find min, max of entries in buffer - Double_t xmin = fBuffer[2]; - Double_t xmax = xmin; - Double_t ymin = fBuffer[3]; - Double_t ymax = ymin; for (Int_t i=1;i xmax) xmax = x; + } + if (xbinAuto) { + THLimitsFinder::GetLimitsFinder()->FindGoodLimits(this,xmin,xmax); + } else { + fBuffer = nullptr; + Int_t keep = fBufferSize; fBufferSize = 0; + if (xmin < fXaxis.GetXmin()) ExtendAxis(xmin,&fXaxis); + if (xmax >= fXaxis.GetXmax()) ExtendAxis(xmax,&fXaxis); + fBuffer = buffer; + fBufferSize = keep; + } + } + const bool ybinAuto = fYaxis.GetXmax() <= fYaxis.GetXmin(); + Double_t ymin = fBuffer[3]; + Double_t ymax = ymin; + if (CanExtendAllAxes() || ybinAuto) { + //find min, max of entries in buffer + for (Int_t i=1;i ymax) ymax = y; } - if (fXaxis.GetXmax() <= fXaxis.GetXmin() || fYaxis.GetXmax() <= fYaxis.GetXmin()) { + if (ybinAuto) { THLimitsFinder::GetLimitsFinder()->FindGoodLimits(this,xmin,xmax,ymin,ymax); } else { fBuffer = nullptr; Int_t keep = fBufferSize; fBufferSize = 0; - if (xmin < fXaxis.GetXmin()) ExtendAxis(xmin,&fXaxis); - if (xmax >= fXaxis.GetXmax()) ExtendAxis(xmax,&fXaxis); if (ymin < fYaxis.GetXmin()) ExtendAxis(ymin,&fYaxis); if (ymax >= fYaxis.GetXmax()) ExtendAxis(ymax,&fYaxis); fBuffer = buffer; fBufferSize = keep; } } - - fBuffer = nullptr; + + buffer = fBuffer; fBuffer = nullptr; for (Int_t i=0;i xmax) xmax = x; - Double_t y = fBuffer[4*i+3]; - if (y < ymin) ymin = y; - if (y > ymax) ymax = y; - Double_t z = fBuffer[4*i+4]; - if (z < zmin) zmin = z; - if (z > zmax) zmax = z; - } - if (fXaxis.GetXmax() <= fXaxis.GetXmin() || fYaxis.GetXmax() <= fYaxis.GetXmin() || fZaxis.GetXmax() <= fZaxis.GetXmin()) { - THLimitsFinder::GetLimitsFinder()->FindGoodLimits(this,xmin,xmax,ymin,ymax,zmin,zmax); - } else { - fBuffer = nullptr; - Int_t keep = fBufferSize; fBufferSize = 0; - if (xmin < fXaxis.GetXmin()) ExtendAxis(xmin,&fXaxis); - if (xmax >= fXaxis.GetXmax()) ExtendAxis(xmax,&fXaxis); - if (ymin < fYaxis.GetXmin()) ExtendAxis(ymin,&fYaxis); - if (ymax >= fYaxis.GetXmax()) ExtendAxis(ymax,&fYaxis); - if (zmin < fZaxis.GetXmin()) ExtendAxis(zmin,&fZaxis); - if (zmax >= fZaxis.GetXmax()) ExtendAxis(zmax,&fZaxis); - fBuffer = buffer; - fBufferSize = keep; - } + const bool xbinAuto = fXaxis.GetXmax() <= fXaxis.GetXmin(); + Double_t xmin = fBuffer[2]; + Double_t xmax = xmin; + if (CanExtendAllAxes() || xbinAuto) { + //find min, max of entries in buffer + for (Int_t i=1;i xmax) xmax = x; + } + if (xbinAuto) { + THLimitsFinder::GetLimitsFinder()->FindGoodLimits(this,xmin,xmax); + } else { + fBuffer = nullptr; + Int_t keep = fBufferSize; fBufferSize = 0; + if (xmin < fXaxis.GetXmin()) ExtendAxis(xmin,&fXaxis); + if (xmax >= fXaxis.GetXmax()) ExtendAxis(xmax,&fXaxis); + fBuffer = buffer; + fBufferSize = keep; + } + } + const bool ybinAuto = fYaxis.GetXmax() <= fYaxis.GetXmin(); + Double_t ymin = fBuffer[3]; + Double_t ymax = ymin; + if (CanExtendAllAxes() || ybinAuto) { + //find min, max of entries in buffer + for (Int_t i=1;i ymax) ymax = y; + } + if (ybinAuto) { + THLimitsFinder::GetLimitsFinder()->FindGoodLimits(this,xmin,xmax,ymin,ymax); + } else { + fBuffer = nullptr; + Int_t keep = fBufferSize; fBufferSize = 0; + if (ymin < fYaxis.GetXmin()) ExtendAxis(ymin,&fYaxis); + if (ymax >= fYaxis.GetXmax()) ExtendAxis(ymax,&fYaxis); + fBuffer = buffer; + fBufferSize = keep; + } + } + const bool zbinAuto = fZaxis.GetXmax() <= fZaxis.GetXmin(); + Double_t zmin = fBuffer[4]; + Double_t zmax = zmin; + if (CanExtendAllAxes() || zbinAuto) { + //find min, max of entries in buffer + for (Int_t i=1;i zmax) zmax = z; + } + if (zbinAuto) { + THLimitsFinder::GetLimitsFinder()->FindGoodLimits(this,xmin,xmax,ymin,ymax,zmin,zmax); + } else { + fBuffer = nullptr; + Int_t keep = fBufferSize; fBufferSize = 0; + if (zmin < fZaxis.GetXmin()) ExtendAxis(zmin,&fZaxis); + if (zmax >= fZaxis.GetXmax()) ExtendAxis(zmax,&fZaxis); + fBuffer = buffer; + fBufferSize = keep; + } } - fBuffer = nullptr; + + buffer = fBuffer; fBuffer = nullptr; for (Int_t i=0;i