Histo2DFunction.hh 3.44 KB
/*
 * Histo2Dfunction.hh
 *
 *  Created on: Jan 30, 2023
 *      Author: AKKODIS
 */

#ifndef HISTO2DFUNCTION_HH_
#define HISTO2DFUNCTION_HH_

#include <iostream>
#include <map>
#include <string>
#include "Matrix.hh"
#include "Range.hh"

namespace plot {

/**
* Class that manages the function to apply on the 2Dhistogram
*/

class Histo2DFunction {
	public:
		Histo2DFunction(){

		}
		~Histo2DFunction(){}

		virtual void apply(MatrixGrid &matrixGrid, double* xData, double* yData, double* zData, int nbData, Range xRange, Range yRange,
										int xBinNumber,int yBinNumber, double& zMin, double& zMax,int smoothFactor) = 0;
		void applySmooth(MatrixGrid &matrixGrid, int smoothFactor, int columnSize );

		virtual std::string getTextLegend()
		{
			return "";
		}

		std::map<int,std::vector<double>> getMatrixValues(double* xData, double* yData, double* zData, int nbData, 
																	Range xRange, Range yRange, int xBinNumber,int yBinNumber);

};

/**
*  All the way down, different classes that apply a function on 2Dhistogram and return result
*/

class Density2DFunction : public Histo2DFunction {
public:
	Density2DFunction() {}
	~Density2DFunction() {}

	virtual void apply(MatrixGrid &matrixGrid, double* xData, double* yData, double* /*zData*/, int nbData, Range xRange, Range yRange,
						int xBinNumber,int yBinNumber,double& zMin, double& zMax, int smoothFactor);
	virtual std::string getTextLegend()
	{
		return "Counts in bins";
	}
};

class Mean2DFunction : public Histo2DFunction {
public:
	Mean2DFunction() {}
	~Mean2DFunction() {}

	virtual void apply(MatrixGrid &matrixGrid,  double* xData, double* yData, double* zData, int nbData, Range xRange, Range yRange,
						int xBinNumber,int yBinNumber, double& zMin, double& zMax,int smoothFactor);
	virtual std::string getTextLegend()
	{
		return "Mean on bins for ";
	}
};

class Max2DFunction : public Histo2DFunction {
public:
	Max2DFunction() {}
	~Max2DFunction() {}

	virtual void apply(MatrixGrid &matrixGrid,  double* xData, double* yData, double* zData, int nbData, Range xRange, Range yRange,
						int xBinNumber,int yBinNumber, double& zMin, double& zMax,int smoothFactor);
	virtual std::string getTextLegend()
	{
		return "Max on bins for ";
	}
};

class Min2DFunction : public Histo2DFunction {
public:
	Min2DFunction() {}
	~Min2DFunction() {}

	virtual void apply(MatrixGrid &matrixGrid,  double* xData, double* yData, double* zData, int nbData, Range xRange, Range yRange,
						int xBinNumber,int yBinNumber, double& zMin, double& zMax,int smoothFactor);
	virtual std::string getTextLegend()
	{
		return "Min on bins for ";
	}
};

class Median2DFunction : public Histo2DFunction {
public:
	Median2DFunction() {}
	~Median2DFunction() {}

	virtual void apply(MatrixGrid &matrixGrid,  double* xData, double* yData, double* zData, int nbData, Range xRange, Range yRange,
						int xBinNumber,int yBinNumber, double& zMin, double& zMax,int smoothFactor);
	virtual std::string getTextLegend()
	{
		return "Median on bins for ";
	}
};

class StandardDeviation2DFunction : public Histo2DFunction {
public:
	StandardDeviation2DFunction() {}
	~StandardDeviation2DFunction() {}

	virtual void apply(MatrixGrid &matrixGrid,  double* xData, double* yData, double* zData, int nbData, Range xRange, Range yRange,
						int xBinNumber,int yBinNumber, double& zMin, double& zMax,int smoothFactor);
	virtual std::string getTextLegend()
	{
		return "Sta. deviation on bins for ";
	}
};


} /* namespace plot */

#endif /* HISTO2DFUNCTION_HH_ */