/** 
* @file VCTransform.h
// refactor-nice.pl: check this substitution
// old: * @brief interface to Vector Transformation
* @brief interface to NICE::Vector Transformation
* @author Michael Koch
* @date 11/28/2007

*/
#ifndef VCTransformINCLUDE
#define VCTransformINCLUDE

#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"

#include "vislearning/math/ftransform/FTransform.h"
#include "vislearning/classifier/classifierbase/VecClassifier.h"


namespace OBJREC {

/** VC with Feature Transformation */
class VCTransform : public VecClassifier
{

    protected:
	VecClassifier * classifier;
        FTransform * transform;
        LabeledSetVector transformedSet;
	uint dimension;
        uint mode;
    public:
	
  
	/** simple constructor */
	VCTransform( const NICE::Config *conf, VecClassifier * classifier, FTransform * transform );
      
	/** simple destructor */
	virtual ~VCTransform();
     
	/** classify using simple vector */
	// refactor-nice.pl: check this substitution
	// old: virtual ClassificationResult classify ( const ice::Vector & x ) const;
	ClassificationResult classify ( const NICE::Vector & x ) const;

	void teach ( const LabeledSetVector & teachSet );

	void finishTeaching();
        
        void restore ( std::istream & is, int format = 0 );

        void store ( std::ostream & is, int format = 0 ) const;
	
        void clear ();

};


} // namespace

#endif
