/** 
* @file OptimKernelParameterGradInterface.h
* @author Erik Rodner
* @date 01/28/2010

*/
#ifndef _NICE_OBJREC_OPTIMKERNELPARAMETERGRADINTERFACEINCLUDE
#define _NICE_OBJREC_OPTIMKERNELPARAMETERGRADINTERFACEINCLUDE

#include "ParameterizedKernel.h"

namespace OBJREC {
  
/** @class OptimKernelParameterGradInterface
 * optimized kernel parameter interface 
 *
 * @author Erik Rodner
 */
class OptimKernelParameterGradInterface : public ParameterizedKernel
{

    protected:

    public:
  
		/** simple destructor */
		virtual ~OptimKernelParameterGradInterface();
    
		/* Due to memory limitations we are not able to
		 * compute the gradient of the kernel matrix directly, therefore
		 * we calculate the parameter gradient directly for GP regression */
		virtual void calculateGPRegGradientOptimized ( const NICE::Vector & parameters, const KernelData *kernelData,
			const NICE::VVector & y, NICE::Vector & newGradient ) const = 0;

};

}

#endif