/*
    Copyright (C) 2012 Bartosz Broda, Jacek Bochenek, Łukasz Biłeńkij, 
    Damian Jaworski, Wojciech Mazur, Dominik Piasecki, Maciej Piasecki, 
    Radosław Ramocki
    
    This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.

    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. 

    See the LICENSE and COPYING files for more details.
*/

#ifndef COMPARATOR_RWFMILINCOMPARISION
#define COMPARATOR_RWFMILINCOMPARISION

#include "../comparator_stdheaders.h"
#include "CompareFunction.h"
#include "../weights/RankBuilder.h"

namespace smartcomparator
{
	namespace compare
	{

		class SMART_COMPARATOR_API RWFMILinComparision : public CompareFunction
		{
		public:
			/**
			 * Params:
			 * - pMatrix - matrix
			 * - pRankBuilder - how to build a ranking
			 * - noisefilter - entropy-based filter for columns(features); value dentotes the amount [%] of columns to
			 *   retain, i.e., if noisefilter = 0.99, then 1% of most noisy columns will be removed
			 * - col_mintf - minimum term frequency for column
			 * - mi_threshold - min value for mutual information for cell
			 * - row_min_nz - min value for row number of non zero cells
			 * - row_min_tf - min value for row term frequency
			 * - row_min_TF - min value for row global term frequency
			 */
			RWFMILinComparision(Matrices::SuperMatrixPtr pMatrix, weights::RankBuilderPtr pRankBuilder,
					double noisefilter = 0.99, size_t col_mintf = 5, double mi_treshold = 0, size_t row_min_nz = 0,
					size_t row_min_tf = 0, size_t  row_min_TF = 0);
		};
	}
}

#endif //COMPARATOR_RWFMILINCOMPARISION
