/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : Interval                                                              *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *          Extension of the Interval to "logarithmic" invarvals                  *
 *                                                                                *
 *                                                                                *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Helge Voss <helge.voss@cern.ch>  - MPI-K Heidelberg, Germany              *
 *                                                                                *
 * Copyright (c) 2005:                                                            *
 *      CERN, Switzerland                                                         * 
 *      MPI-K Heidelberg, Germany                                                 * 
 *                                                                                *
 * Redistribution and use in source and binary forms, with or without             *
 * modification, are permitted according to the terms listed in LICENSE           *
 * (http://tmva.sourceforge.net/LICENSE)                                          *
 **********************************************************************************/

#ifndef ROOT_TMVA_LogInterval
#define ROOT_TMVA_LogInterval

//////////////////////////////////////////////////////////////////////////////
//                                                                          //
// Interval with non-equi distant bins                                      //
//      that are equi-distant in a logarithmic scale)                       //
//                                                                          //
// Interval definition, continuous and discrete                             //
//                                                                          //
//  Note: **bin** counting starts from ZERO unlike in ROOT histograms       //
//                                                                          //
//       ----------------                                                   //
// LogInterval(1,10000,5)                                                   //
//     i=0 --> 1              note: StepSize(ibin=0) =  not defined !!      //
//     i=1 --> 10                   StepSize(ibin=1) = 9                    //
//     i=2 --> 100                  StepSize(ibin=2) = 99                   //
//     i=3 --> 1000                 StepSize(ibin=3) = 999                  //
//     i=4 --> 10000                StepSize(ibin=4) = 9999                 //          
//                                                                          //
// LogInterval(1,1000,11)                                                   //
//    i=0 --> 1                                                             //
//    i=1 --> 1.99526                                                       //
//    i=2 --> 3.98107                                                       //
//    i=3 --> 7.94328                                                       //
//    i=4 --> 15.8489                                                       //
//    i=5 --> 31.6228                                                       //
//    i=6 --> 63.0957                                                       //
//    i=7 --> 125.893                                                       //
//    i=8 --> 251.189                                                       //
//    i=9 --> 501.187                                                       //
//    i=10 --> 1000                                                         //
//                                                                          //
// LogInterval(1,1024,11)                                                   //
//    i=0 --> 1                                                             //
//    i=1 --> 2                                                             //
//    i=2 --> 4                                                             //
//    i=3 --> 8                                                             //
//    i=4 --> 16                                                            //
//    i=5 --> 32                                                            //
//    i=6 --> 64                                                            //
//    i=7 --> 128                                                           //
//    i=8 --> 256                                                           //
//    i=9 --> 512                                                           //
//    i=10 --> 1024                                                         //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////
#ifndef ROOT_Rtypes                                                         
#include "Rtypes.h"
#endif

#ifndef TMVA_Interval                                                         
#include "Interval.h"
#endif



class TRandom3;

namespace TMVA {

   class MsgLogger;
   
   class LogInterval : public Interval {

   public:

      LogInterval( Double_t min, Double_t max, Int_t nbins = 0 );
      LogInterval( const LogInterval& other );
      virtual ~LogInterval();

      // accessors
      virtual Double_t GetMin()   const { return fMin; }
      virtual Double_t GetMax()   const { return fMax; }
      virtual Double_t GetWidth() const;
      virtual Int_t    GetNbins() const { return fNbins; }
      virtual Double_t GetMean()  const;
      virtual Double_t GetRndm( TRandom3& )  const;
      virtual Double_t GetElement( Int_t position ) const;      
      virtual Double_t GetStepSize(Int_t iBin=0) const;

      void SetMax( Double_t m ) { fMax = m; }
      void SetMin( Double_t m ) { fMin = m; }

      MsgLogger& Log() const;

      ClassDef(Interval,0)    // Interval definition, continous and discrete
   };

} // namespace TMVA

#endif
 LogInterval.h:1
 LogInterval.h:2
 LogInterval.h:3
 LogInterval.h:4
 LogInterval.h:5
 LogInterval.h:6
 LogInterval.h:7
 LogInterval.h:8
 LogInterval.h:9
 LogInterval.h:10
 LogInterval.h:11
 LogInterval.h:12
 LogInterval.h:13
 LogInterval.h:14
 LogInterval.h:15
 LogInterval.h:16
 LogInterval.h:17
 LogInterval.h:18
 LogInterval.h:19
 LogInterval.h:20
 LogInterval.h:21
 LogInterval.h:22
 LogInterval.h:23
 LogInterval.h:24
 LogInterval.h:25
 LogInterval.h:26
 LogInterval.h:27
 LogInterval.h:28
 LogInterval.h:29
 LogInterval.h:30
 LogInterval.h:31
 LogInterval.h:32
 LogInterval.h:33
 LogInterval.h:34
 LogInterval.h:35
 LogInterval.h:36
 LogInterval.h:37
 LogInterval.h:38
 LogInterval.h:39
 LogInterval.h:40
 LogInterval.h:41
 LogInterval.h:42
 LogInterval.h:43
 LogInterval.h:44
 LogInterval.h:45
 LogInterval.h:46
 LogInterval.h:47
 LogInterval.h:48
 LogInterval.h:49
 LogInterval.h:50
 LogInterval.h:51
 LogInterval.h:52
 LogInterval.h:53
 LogInterval.h:54
 LogInterval.h:55
 LogInterval.h:56
 LogInterval.h:57
 LogInterval.h:58
 LogInterval.h:59
 LogInterval.h:60
 LogInterval.h:61
 LogInterval.h:62
 LogInterval.h:63
 LogInterval.h:64
 LogInterval.h:65
 LogInterval.h:66
 LogInterval.h:67
 LogInterval.h:68
 LogInterval.h:69
 LogInterval.h:70
 LogInterval.h:71
 LogInterval.h:72
 LogInterval.h:73
 LogInterval.h:74
 LogInterval.h:75
 LogInterval.h:76
 LogInterval.h:77
 LogInterval.h:78
 LogInterval.h:79
 LogInterval.h:80
 LogInterval.h:81
 LogInterval.h:82
 LogInterval.h:83
 LogInterval.h:84
 LogInterval.h:85
 LogInterval.h:86
 LogInterval.h:87
 LogInterval.h:88
 LogInterval.h:89
 LogInterval.h:90
 LogInterval.h:91
 LogInterval.h:92
 LogInterval.h:93
 LogInterval.h:94
 LogInterval.h:95
 LogInterval.h:96
 LogInterval.h:97
 LogInterval.h:98
 LogInterval.h:99
 LogInterval.h:100
 LogInterval.h:101
 LogInterval.h:102
 LogInterval.h:103
 LogInterval.h:104
 LogInterval.h:105
 LogInterval.h:106
 LogInterval.h:107
 LogInterval.h:108
 LogInterval.h:109
 LogInterval.h:110
 LogInterval.h:111
 LogInterval.h:112
 LogInterval.h:113
 LogInterval.h:114
 LogInterval.h:115