--- graf/inc/TGraph.h-orig 2005-05-11 21:59:32.000000000 +0200 +++ graf/inc/TGraph.h 2005-05-11 22:03:18.000000000 +0200 @@ -95,6 +95,7 @@ virtual void DrawGraph(Int_t n, const Float_t *x, const Float_t *y, Option_t *option=""); virtual void DrawGraph(Int_t n, const Double_t *x=0, const Double_t *y=0, Option_t *option=""); virtual void DrawPanel(); // *MENU* + static void EnlargeRange(Bool_t log, const Double_t min, const Double_t max, Double_t&min_out, Double_t&max_out); virtual Double_t Eval(Double_t x, TSpline *spline=0, Option_t *option="") const; virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py); virtual void Expand(Int_t newsize); --- graf/src/TGraph.cxx-orig 2005-05-11 21:51:05.000000000 +0200 +++ graf/src/TGraph.cxx 2005-05-11 22:22:14.000000000 +0200 @@ -639,6 +639,22 @@ } //______________________________________________________________________________ +void TGraph::EnlargeRange(Bool_t log, const Double_t min, const Double_t max, + Double_t&out_min, Double_t&out_max) +{ +// enlarge the range by 10% on either side, taking into account log scale + if (log) { + Double_t d = TMath::Power(10, 0.1*TMath::Log10(max/min)); + out_min = min / d; + out_max = max * d; + } else { + Double_t d = 0.1*(max - min); + out_min = min - d; + out_max = max + d; + } +} + +//______________________________________________________________________________ Double_t TGraph::Eval(Double_t x, TSpline *spline, Option_t *option) const { // Interpolate points in this graph at x using a TSpline @@ -1448,7 +1464,7 @@ // 2- user had called TPad::DrawFrame. return pointer to hframe histogram if (fHistogram) return fHistogram; - Double_t rwxmin,rwxmax, rwymin, rwymax, maximum, minimum, dx, dy; + Double_t rwxmin,rwxmax, rwymin, rwymax, maximum, minimum; Double_t uxmin, uxmax; if (fNpoints <= 0) { rwxmin = rwxmax = 0; @@ -1468,12 +1484,8 @@ if (rwxmin == rwxmax) rwxmax += 1.; if (rwymin == rwymax) rwymax += 1.; - dx = 0.1*(rwxmax-rwxmin); - dy = 0.1*(rwymax-rwymin); - uxmin = rwxmin - dx; - uxmax = rwxmax + dx; - minimum = rwymin - dy; - maximum = rwymax + dy; + EnlargeRange(gPad && gPad->GetLogx(), rwxmin, rwxmax, uxmin, uxmax); + EnlargeRange(gPad && gPad->GetLogy(), rwymin, rwymax, minimum, maximum); if (fMinimum != -1111) minimum = fMinimum; if (fMaximum != -1111) maximum = fMaximum; @@ -1997,7 +2009,7 @@ //*-*- Draw the Axis with a fixed number of division: 510 - Double_t rwxmin,rwxmax, rwymin, rwymax, maximum, minimum, dx, dy; + Double_t rwxmin,rwxmax, rwymin, rwymax, maximum, minimum; if (OptionAxis) { @@ -2032,12 +2044,8 @@ if (rwxmin == rwxmax) rwxmax += 1.; if (rwymin == rwymax) rwymax += 1.; - dx = 0.1*(rwxmax-rwxmin); - dy = 0.1*(rwymax-rwymin); - uxmin = rwxmin - dx; - uxmax = rwxmax + dx; - minimum = rwymin - dy; - maximum = rwymax + dy; + EnlargeRange(gPad->GetLogx(), rwxmin, rwxmax, uxmin, uxmax); + EnlargeRange(gPad->GetLogy(), rwymin, rwymax, minimum, maximum); } if (fMinimum != -1111) rwymin = minimum = fMinimum; if (fMaximum != -1111) rwymax = maximum = fMaximum;