Ranking.cxx

Go to the documentation of this file.
00001 // @(#)root/tmva $Id: Ranking.cxx 29195 2009-06-24 10:39:49Z brun $
00002 // Author: Andreas Hoecker, Joerg Stelzer, Helge Voss, Kai Voss 
00003 
00004 /**********************************************************************************
00005  * Project: TMVA - a Root-integrated toolkit for multivariate Data analysis       *
00006  * Package: TMVA                                                                  *
00007  * Class  : Ranking                                                               *
00008  * Web    : http://tmva.sourceforge.net                                           *
00009  *                                                                                *
00010  * Description:                                                                   *
00011  *      Implementation (see header for description)                               *
00012  *                                                                                *
00013  * Authors (alphabetical):                                                        *
00014  *      Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland              *
00015  *      Joerg Stelzer   <Joerg.Stelzer@cern.ch>  - CERN, Switzerland              *
00016  *      Helge Voss      <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany      *
00017  *                                                                                *
00018  * Copyright (c) 2005:                                                            *
00019  *      CERN, Switzerland                                                         * 
00020  *      MPI-K Heidelberg, Germany                                                 * 
00021  *                                                                                *
00022  * Redistribution and use in source and binary forms, with or without             *
00023  * modification, are permitted according to the terms listed in LICENSE           *
00024  * (http://tmva.sourceforge.net/LICENSE)                                          *
00025  **********************************************************************************/
00026 
00027 //_______________________________________________________________________
00028 // 
00029 // Ranking for variables in method (implementation)
00030 //_______________________________________________________________________
00031 
00032 #include <iomanip>
00033 
00034 #include "TString.h"
00035 
00036 #include "TMVA/Ranking.h"
00037 #include "TMVA/MsgLogger.h"
00038 
00039 ClassImp(TMVA::Ranking)
00040 
00041 //_______________________________________________________________________
00042 TMVA::Ranking::Ranking() 
00043    : fRanking(),
00044      fContext(""),
00045      fRankingDiscriminatorName( "" ),
00046      fLogger( new MsgLogger("", kINFO) )
00047 {
00048    // default constructor
00049 }
00050 
00051 //_______________________________________________________________________
00052 TMVA::Ranking::Ranking( const TString& context, const TString& rankingDiscriminatorName ) 
00053    : fRanking(),
00054      fContext( context ),
00055      fRankingDiscriminatorName( rankingDiscriminatorName ),
00056      fLogger( new MsgLogger(fContext.Data(), kINFO) )
00057 {
00058    // constructor
00059 }
00060 
00061 //_______________________________________________________________________
00062 TMVA::Ranking::~Ranking() 
00063 {
00064    // destructor
00065    fRanking.clear();
00066    delete fLogger;
00067 }
00068 
00069 //_______________________________________________________________________
00070 void TMVA::Ranking::SetContext( const TString& context) 
00071 {
00072    fContext = context;
00073    fLogger->SetSource( fContext.Data() );
00074 }
00075 
00076 //_______________________________________________________________________
00077 void TMVA::Ranking::AddRank( const Rank& rank )
00078 {
00079    // Add a new rank
00080    // take ownership of it
00081 
00082    // sort according to rank value (descending)
00083    // Who the hell knows why this does not compile on windos.. write the sorting 
00084    // reversing myself... (means sorting in "descending" order)
00085    //   --> std::sort   ( fRanking.begin(), fRanking.end() );
00086    //   --> std::reverse( fRanking.begin(), fRanking.end() );
00087    fRanking.push_back( rank );
00088       
00089    UInt_t sizeofarray=fRanking.size();
00090    Rank  temp(fRanking[0]);
00091    for (UInt_t i=0; i<sizeofarray; i++) {
00092       for (UInt_t j=sizeofarray-1; j>i; j--) {
00093          if (fRanking[j-1] < fRanking[j]) {
00094             temp = fRanking[j-1];fRanking[j-1] = fRanking[j]; fRanking[j] = temp;
00095          }
00096       }
00097    }
00098    
00099    for (UInt_t i=0; i<fRanking.size(); i++) fRanking[i].SetRank( i+1 );
00100 }
00101 
00102 //_______________________________________________________________________
00103 void TMVA::Ranking::Print() const
00104 {
00105    // get maximum length of variable names
00106    Int_t maxL = 0; 
00107    for (std::vector<Rank>::const_iterator ir = fRanking.begin(); ir != fRanking.end(); ir++ ) 
00108       if ((*ir).GetVariable().Length() > maxL) maxL = (*ir).GetVariable().Length();
00109    
00110    TString hline = "";
00111    for (Int_t i=0; i<maxL+15+fRankingDiscriminatorName.Length(); i++) hline += "-";
00112    Log() << kINFO << "Ranking result (top variable is best ranked)" << Endl;
00113    Log() << kINFO << hline << Endl;
00114    Log() << kINFO << std::setiosflags(std::ios::left) 
00115          << std::setw(5) << "Rank : "
00116          << std::setw(maxL+0) << "Variable "
00117          << std::resetiosflags(std::ios::right) 
00118          << " : " << fRankingDiscriminatorName << Endl;
00119    Log() << kINFO << hline << Endl;
00120    for (std::vector<Rank>::const_iterator ir = fRanking.begin(); ir != fRanking.end(); ir++ ) {
00121       Log() << kINFO 
00122             << Form( "%4i : ",(*ir).GetRank() )
00123             << std::setw(TMath::Max(maxL+0,9)) << (*ir).GetVariable().Data()
00124             << Form( " : %3.3e", (*ir).GetRankValue() ) << Endl;
00125    }
00126    Log() << kINFO << hline << Endl;
00127 }
00128 
00129 // ===============================================================================================
00130 
00131 //_______________________________________________________________________
00132 TMVA::Rank::Rank( const TString& variable, Double_t rankValue ) 
00133    : fVariable( variable ),
00134      fRankValue( rankValue ),
00135      fRank( -1 ) 
00136 {
00137    // constructor
00138 }
00139 
00140 //_______________________________________________________________________
00141 TMVA::Rank::~Rank() 
00142 {
00143    // destructor
00144 }
00145 
00146 //_______________________________________________________________________
00147 Bool_t TMVA::Rank::operator< ( const Rank& other ) const
00148 { 
00149    // comparison operator <
00150    if (fRankValue < other.fRankValue) return true;
00151    else                               return false;
00152 }
00153 
00154 //_______________________________________________________________________
00155 Bool_t TMVA::Rank::operator> ( const Rank& other ) const
00156 { 
00157    // comparison operator >
00158    if (fRankValue > other.fRankValue) return true;
00159    else                               return false;
00160 }

Generated on Tue Jul 5 15:25:31 2011 for ROOT_528-00b_version by  doxygen 1.5.1