// @(#)root/tmva $Id$
// Author: Andreas Hoecker, Peter Speckmayer, Joerg Stelzer, Helge Voss, Jan Therhaag

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : ResultsMulticlass                                                     *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Base-class for result-vectors                                             *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland              *
 *      Peter Speckmayer <Peter.Speckmayer@cern.ch>  - CERN, Switzerland          *
 *      Joerg Stelzer   <Joerg.Stelzer@cern.ch>  - CERN, Switzerland              *
 *      Jan Therhaag       <Jan.Therhaag@cern.ch>     - U of Bonn, Germany        *
 *      Helge Voss      <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany      *
 *                                                                                *
 * Copyright (c) 2005-2011:                                                       *
 *      CERN, Switzerland                                                         *
 *      U. of Victoria, Canada                                                    *
 *      MPI-K Heidelberg, Germany                                                 *
 *      U. of Bonn, 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_ResultsMulticlass
#define ROOT_TMVA_ResultsMulticlass

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// ResultsMulticlass                                                    //
//                                                                      //
// Class which takes the results of a multiclass classification         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include <vector>

#ifndef ROOT_TH1F
#include "TH1F.h"
#endif
#ifndef ROOT_TH2F
#include "TH2F.h"
#endif

#ifndef ROOT_TMVA_Results
#include "TMVA/Results.h"
#endif
#ifndef ROOT_TMVA_Event
#include "TMVA/Event.h"
#endif
#ifndef ROOT_IFitterTarget
#include "IFitterTarget.h"
#endif

namespace TMVA {

   class MsgLogger;
   
   class ResultsMulticlass : public Results, public IFitterTarget {

   public:

      ResultsMulticlass( const DataSetInfo* dsi, TString resultsName  );
      ~ResultsMulticlass();

      // setters
      void     SetValue( std::vector<Float_t>& value, Int_t ievt );
      void     Resize( Int_t entries )  { fMultiClassValues.resize( entries ); }
      using TObject::Clear;
      virtual void     Clear(Option_t *)  { fMultiClassValues.clear(); }

      // getters
      Long64_t GetSize() const        { return fMultiClassValues.size(); }
      virtual const std::vector< Float_t >&  operator[] ( Int_t ievt ) const { return fMultiClassValues.at(ievt); }
      std::vector<std::vector< Float_t> >* GetValueVector()  { return &fMultiClassValues; }

      Types::EAnalysisType  GetAnalysisType() { return Types::kMulticlass; }
      Float_t GetAchievableEff(UInt_t cls){return fAchievableEff.at(cls);}
      Float_t GetAchievablePur(UInt_t cls){return fAchievablePur.at(cls);}
      std::vector<Float_t>& GetAchievableEff(){return fAchievableEff;}
      std::vector<Float_t>& GetAchievablePur(){return fAchievablePur;}
      // histogramming
      void     CreateMulticlassHistos( TString prefix, Int_t nbins, Int_t nbins_high);

      Double_t EstimatorFunction( std::vector<Double_t> & );
      std::vector<Double_t> GetBestMultiClassCuts(UInt_t targetClass);

   private:

      mutable std::vector<std::vector< Float_t> >  fMultiClassValues;        // mva values (Results)
      mutable MsgLogger* fLogger;                                            //! message logger
      MsgLogger& Log() const { return *fLogger; }
      UInt_t fClassToOptimize;
      std::vector<Float_t> fAchievableEff;
      std::vector<Float_t> fAchievablePur;
      std::vector<std::vector<Double_t> > fBestCuts;
   protected:
       
       ClassDef(ResultsMulticlass,2);

   }; 

}

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