// @(#)root/hist:$Id$
// Author: Rene Brun   30/08/99

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
#ifndef ROOT_THLimitsFinder
#define ROOT_THLimitsFinder


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// THLimitsFinder                                                       //
//                                                                      //
// class to find nice axis limits                                       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////


#include "TObject.h"

class TH1;

class THLimitsFinder : public TObject {

protected:
   static THLimitsFinder *fgLimitsFinder;   ///<! Pointer to hist limits finder

public:
   THLimitsFinder();
   ~THLimitsFinder() override;
   virtual Int_t      FindGoodLimits(TH1 *h, Double_t xmin, Double_t xmax);
   virtual Int_t      FindGoodLimitsXY(TH1 *h, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax,
                                       Int_t newbinsx = 0, Int_t newbinsy = 0);
   virtual Int_t      FindGoodLimitsXYZ(TH1 *h, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax,
                                        Int_t newbinsx = 0, Int_t newbinsy = 0, Int_t newbinsz = 0);

   static  void       Optimize(Double_t A1,  Double_t A2,  Int_t nold,
                               Double_t &BinLow, Double_t &BinHigh, Int_t &nbins, Double_t &BWID, Option_t *option="");
   static void        OptimizeLimits(Int_t nbins, Int_t &newbins, Double_t &xmin, Double_t &xmax, Bool_t isInteger);
   static THLimitsFinder *GetLimitsFinder();
   static  void       SetLimitsFinder(THLimitsFinder *finder);

   ClassDefOverride(THLimitsFinder,0)  //Class to find best axis limits
};

#endif
