ROOT logo
// @(#)root/tmva $Id: Interval.cxx 29195 2009-06-24 10:39:49Z brun $    
// Author: Peter Speckmayer

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : TMVA::Interval                                                        *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Implementation (see header for description)                               *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Peter Speckmayer <speckmay@mail.cern.ch>  - CERN, Switzerland             *
 *                                                                                *
 * 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)                                          *
 *                                                                                *
 * File and Version Information:                                                  *
 **********************************************************************************/

//_______________________________________________________________________
//                                                                      
// Interval definition, continuous and discrete                          
//_______________________________________________________________________

#include "TMath.h"
#include "TRandom3.h"

#include "TMVA/Interval.h"
#include "TMVA/MsgLogger.h"

ClassImp(TMVA::Interval)

//_______________________________________________________________________
TMVA::Interval::Interval( Double_t min, Double_t max, Int_t nbins ) : 
   fMin(min),
   fMax(max),
   fNbins(nbins),
   fLogger( new MsgLogger("Interval") )
{
   // defines minimum and maximum of an interval
   // when nbins == 0, interval describes a discrete distribution (equally distributed in the interval)
   // when nbins > 0, interval describes a continous interval
   //
   if (fMax - fMin < 0) Log() << kFATAL << "maximum lower than minimum" << Endl;
   if (nbins < 0) {
      Log() << kFATAL << "nbins < 0" << Endl;
      return;
   }
   else if (nbins == 1) {
      Log() << kFATAL << "interval has to have at least 2 bins if discrete" << Endl;
      return;
   }
}

TMVA::Interval::Interval( const Interval& other ) :
   fMin  ( other.fMin ),
   fMax  ( other.fMin ),
   fNbins( other.fNbins ),
   fLogger( new MsgLogger("Interval") )
{}

//_______________________________________________________________________
TMVA::Interval::~Interval()
{
   // destructor
   delete fLogger;
}

//_______________________________________________________________________
Double_t TMVA::Interval::GetElement( Int_t bin ) const
{
   // calculates the value of the "number" bin in a discrete interval. 
   // Parameters:
   //        Double_t position 
   //
   if (fNbins <= 0) {
      Log() << kFATAL << "GetElement only possible for discrete values" << Endl;
      return 0.0;
   }
   else if (bin < 0 || bin >= fNbins) {
      Log() << kFATAL << "bin " << bin << " out of interval [0," << fNbins << ")" << Endl;
      return 0.0;
   }
   
   return fMin + ( (Double_t(bin)/(fNbins-1)) *(fMax - fMin) );
}

//_______________________________________________________________________
Double_t TMVA::Interval::GetRndm( TRandom3& rnd )  const
{
   // get uniformely distributed number within interval
   return rnd.Rndm()*(fMax - fMin) + fMin;
}


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