/** 
 * @file VCNormalize.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 VCNormalizeINCLUDE
#define VCNormalizeINCLUDE

#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 VCNormalize: public VecClassifier
{

protected:
	VecClassifier * classifier;
	LabeledSetVector transformedSet;
	uint mode;
	NICE::Vector vector_max;
	NICE::Vector vector_min;
	NICE::Vector vector_span;
	NICE::Vector getNormalizedVector(const NICE::Vector &x) const;
public:

	/** simple constructor */
	VCNormalize(const NICE::Config *conf, VecClassifier * classifier);

	/** simple destructor */
	virtual ~VCNormalize();

	/** classify using simple vector */
	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
