Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
Ranking.cxx
Go to the documentation of this file.
1// @(#)root/tmva $Id$
2// Author: Andreas Hoecker, Joerg Stelzer, Helge Voss, Kai Voss
3
4/**********************************************************************************
5 * Project: TMVA - a Root-integrated toolkit for multivariate Data analysis *
6 * Package: TMVA *
7 * Class : Ranking *
8 * *
9 * *
10 * Description: *
11 * Implementation (see header for description) *
12 * *
13 * Authors (alphabetical): *
14 * Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland *
15 * Joerg Stelzer <Joerg.Stelzer@cern.ch> - CERN, Switzerland *
16 * Helge Voss <Helge.Voss@cern.ch> - MPI-K Heidelberg, Germany *
17 * *
18 * Copyright (c) 2005: *
19 * CERN, Switzerland *
20 * MPI-K Heidelberg, Germany *
21 * *
22 * Redistribution and use in source and binary forms, with or without *
23 * modification, are permitted according to the terms listed in LICENSE *
24 * (see tmva/doc/LICENSE) *
25 **********************************************************************************/
26
27/*! \class TMVA::Ranking
28\ingroup TMVA
29Ranking for variables in method (implementation)
30*/
31
32#include "TMVA/Ranking.h"
33
34#include "TMVA/MsgLogger.h"
35#include "TMVA/Types.h"
36
37#include "TString.h"
38
39#include <iomanip>
40
41
42////////////////////////////////////////////////////////////////////////////////
43/// default constructor
44
46: fRanking(),
47 fContext(""),
48 fRankingDiscriminatorName( "" ),
49 fLogger( new MsgLogger("", kINFO) )
50{
51}
52
53////////////////////////////////////////////////////////////////////////////////
54/// constructor
55
57 : fRanking(),
58 fContext( context ),
59 fRankingDiscriminatorName( rankingDiscriminatorName ),
60 fLogger( new MsgLogger(fContext.Data(), kINFO) )
61{
62}
63
64////////////////////////////////////////////////////////////////////////////////
65/// destructor
66
68{
69 fRanking.clear();
70 delete fLogger;
71}
72
73////////////////////////////////////////////////////////////////////////////////
74
76{
77 fContext = context;
78 fLogger->SetSource( fContext.Data() );
79}
80
81////////////////////////////////////////////////////////////////////////////////
82/// Add a new rank
83/// take ownership of it
84
86{
87 // sort according to rank value (descending)
88 // Who the hell knows why this does not compile on windows.. write the sorting
89 // reversing myself... (means sorting in "descending" order)
90 // --> std::sort ( fRanking.begin(), fRanking.end() );
91 // --> std::reverse( fRanking.begin(), fRanking.end() );
92 fRanking.push_back( rank );
93
94 UInt_t sizeofarray=fRanking.size();
95 Rank temp(fRanking[0]);
96 for (UInt_t i=0; i<sizeofarray; i++) {
97 for (UInt_t j=sizeofarray-1; j>i; j--) {
98 if (fRanking[j-1] < fRanking[j]) {
99 temp = fRanking[j-1];fRanking[j-1] = fRanking[j]; fRanking[j] = temp;
100 }
101 }
102 }
103
104 for (UInt_t i=0; i<fRanking.size(); i++) fRanking[i].SetRank( i+1 );
105}
106
107////////////////////////////////////////////////////////////////////////////////
108/// get maximum length of variable names
109
111{
112 Int_t maxL = 0;
113 for (std::vector<Rank>::const_iterator ir = fRanking.begin(); ir != fRanking.end(); ++ir )
114 if ((*ir).GetVariable().Length() > maxL) maxL = (*ir).GetVariable().Length();
115
116 TString hline = "";
117 for (Int_t i=0; i<maxL+15+fRankingDiscriminatorName.Length(); i++) hline += "-";
118 Log() << kHEADER << "Ranking result (top variable is best ranked)" << Endl;
119 Log() << kINFO << hline << Endl;
120 Log() << kINFO << std::setiosflags(std::ios::left)
121 << std::setw(5) << "Rank : "
122 << std::setw(maxL+0) << "Variable "
123 << std::resetiosflags(std::ios::right)
124 << " : " << fRankingDiscriminatorName << Endl;
125 Log() << kINFO << hline << Endl;
126 for (std::vector<Rank>::const_iterator ir = fRanking.begin(); ir != fRanking.end(); ++ir ) {
127 Log() << kINFO
128 << TString::Format( "%4i : ",(*ir).GetRank() )
129 << std::setw(std::max(maxL+0,9)) << (*ir).GetVariable().Data()
130 << TString::Format( " : %3.3e", (*ir).GetRankValue() ) << Endl;
131 }
132 Log() << kINFO << hline << Endl;
133}
134
135////////////////////////////////////////////////////////////////////////////////
136/// constructor
137
139 : fVariable( variable ),
140 fRankValue( rankValue ),
141 fRank( -1 )
142{
143}
144
145////////////////////////////////////////////////////////////////////////////////
146/// destructor
147
151
152////////////////////////////////////////////////////////////////////////////////
153/// comparison operator <
154
156{
157 if (fRankValue < other.fRankValue) return true;
158 else return false;
159}
160
161////////////////////////////////////////////////////////////////////////////////
162/// comparison operator >
163
165{
166 if (fRankValue > other.fRankValue) return true;
167 else return false;
168}
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
const_iterator begin() const
const_iterator end() const
ostringstream derivative to redirect and format output
Definition MsgLogger.h:57
virtual ~Rank()
destructor
Definition Ranking.cxx:148
Rank(const TString &variable, Double_t rankValue)
constructor
Definition Ranking.cxx:138
Bool_t operator>(const Rank &other) const
comparison operator >
Definition Ranking.cxx:164
Bool_t operator<(const Rank &other) const
comparison operator <
Definition Ranking.cxx:155
virtual void AddRank(const Rank &rank)
Add a new rank take ownership of it.
Definition Ranking.cxx:85
virtual void Print() const
get maximum length of variable names
Definition Ranking.cxx:110
void SetContext(const TString &context)
Definition Ranking.cxx:75
virtual ~Ranking()
destructor
Definition Ranking.cxx:67
Ranking()
default constructor
Definition Ranking.cxx:45
Basic string class.
Definition TString.h:138
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2384
MsgLogger & Endl(MsgLogger &ml)
Definition MsgLogger.h:148