00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
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
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
00059 }
00060
00061
00062 TMVA::Ranking::~Ranking()
00063 {
00064
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
00080
00081
00082
00083
00084
00085
00086
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
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
00138 }
00139
00140
00141 TMVA::Rank::~Rank()
00142 {
00143
00144 }
00145
00146
00147 Bool_t TMVA::Rank::operator< ( const Rank& other ) const
00148 {
00149
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
00158 if (fRankValue > other.fRankValue) return true;
00159 else return false;
00160 }