// Path: lib/src/main/java/hrv/lib/hrv/calc/parameter/HRVParameter.java
// public class HRVParameter {
// 
// 	private HRVParameterEnum type;
// 	private String unit;
// 	private double value;
// 	
// 	/**
// 	 * Creates a new HRV-Parameter
// 	 */
// 	public HRVParameter() { 
// 		// Just empty constructor
// 	}
// 
// 	/**
// 	 * Creates a new HRV-Parameter
// 	 * @param value Value of the parameter
// 	 * @param unit Unit of the parameter
// 	 */
// 	public HRVParameter(HRVParameterEnum type, double value, String unit) {
// 		this.type = type;
// 		this.value = value;
// 		this.setUnit(unit);
// 	}
// 	
// 	public String getName() {
// 		return type.toString();
// 	}
// 	
// 	public HRVParameterEnum getType() {
// 		return type;
// 	}
// 
// 	public double getValue() {
// 		return value;
// 	}
// 
// 	public void setValue(double value) {
// 		this.value = value;
// 	}
// 
// 	public String getUnit() {
// 		return unit;
// 	}
// 
// 	public void setUnit(String unit) {
// 		this.unit = unit;
// 	}
// 
// 	/**
// 	 * Returns a string with the following format:
// 	 * <Name>: <Value> <Unit>
// 	 */
// 	@Override
// 	public String toString() {
// 		return type.toString() + ": " + value + " " + unit;
// 	}
// }
// 
// Path: lib/src/main/java/hrv/lib/hrv/calc/parameter/HRVParameterEnum.java
// public enum HRVParameterEnum {
// 	NON, AMPLITUDEMODE, AVG_SAMPLE_SIZE, BAEVSKY, HEART_RATE, HFNU, LFNU, LFHF, LF, HF, VLF, MEAN, MODE, MXDMN, NN50, PNN50, RMSSD, SDNN, SD1, SD2, SD1SD2, SDSD
// }
// 
// Path: lib/src/main/java/hrv/lib/hrv/calc/parameter/HRVPowerSpectrumProcessor.java
// @FunctionalInterface
// public interface HRVPowerSpectrumProcessor {
// 
// 	HRVParameter process(PowerSpectrum ps);
// }


import hrv.lib.hrv.calc.parameter.HRVParameter;
import hrv.lib.hrv.calc.parameter.HRVParameterEnum;
import hrv.lib.hrv.calc.parameter.HRVPowerSpectrumProcessor;
import org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator;
import org.apache.commons.math3.analysis.integration.TrapezoidIntegrator;
package hrv.lib.hrv.calc.psd;


public class PowerSpectrumIntegralCalculator implements HRVPowerSpectrumProcessor {

    private final double lowerIntegrationLimit;
    private final double upperIntegrationLimit;

    public PowerSpectrumIntegralCalculator(double lowerIntegrationLimit, double upperIntegrationLimit) {
        this.lowerIntegrationLimit = lowerIntegrationLimit;
        this.upperIntegrationLimit = upperIntegrationLimit;
    }

    @Override
    public HRVParameter process(PowerSpectrum ps) {
        var psAdapter = new PowerSpectrumUnivariateFunctionAdapter(ps);
        var integrator = new TrapezoidIntegrator();
// Path: lib/src/main/java/hrv/lib/hrv/calc/parameter/HRVParameter.java
// public class HRVParameter {
// 
// 	private HRVParameterEnum type;
// 	private String unit;
// 	private double value;
// 	
// 	/**
// 	 * Creates a new HRV-Parameter
// 	 */
// 	public HRVParameter() { 
// 		// Just empty constructor
// 	}
// 
// 	/**
// 	 * Creates a new HRV-Parameter
// 	 * @param value Value of the parameter
// 	 * @param unit Unit of the parameter
// 	 */
// 	public HRVParameter(HRVParameterEnum type, double value, String unit) {
// 		this.type = type;
// 		this.value = value;
// 		this.setUnit(unit);
// 	}
// 	
// 	public String getName() {
// 		return type.toString();
// 	}
// 	
// 	public HRVParameterEnum getType() {
// 		return type;
// 	}
// 
// 	public double getValue() {
// 		return value;
// 	}
// 
// 	public void setValue(double value) {
// 		this.value = value;
// 	}
// 
// 	public String getUnit() {
// 		return unit;
// 	}
// 
// 	public void setUnit(String unit) {
// 		this.unit = unit;
// 	}
// 
// 	/**
// 	 * Returns a string with the following format:
// 	 * <Name>: <Value> <Unit>
// 	 */
// 	@Override
// 	public String toString() {
// 		return type.toString() + ": " + value + " " + unit;
// 	}
// }
// 
// Path: lib/src/main/java/hrv/lib/hrv/calc/parameter/HRVParameterEnum.java
// public enum HRVParameterEnum {
// 	NON, AMPLITUDEMODE, AVG_SAMPLE_SIZE, BAEVSKY, HEART_RATE, HFNU, LFNU, LFHF, LF, HF, VLF, MEAN, MODE, MXDMN, NN50, PNN50, RMSSD, SDNN, SD1, SD2, SD1SD2, SDSD
// }
// 
// Path: lib/src/main/java/hrv/lib/hrv/calc/parameter/HRVPowerSpectrumProcessor.java
// @FunctionalInterface
// public interface HRVPowerSpectrumProcessor {
// 
// 	HRVParameter process(PowerSpectrum ps);
// }


// Path: lib/src/main/java/hrv/lib/hrv/calc/psd/PowerSpectrumIntegralCalculator.java
import hrv.lib.hrv.calc.parameter.HRVParameter;
import hrv.lib.hrv.calc.parameter.HRVParameterEnum;
import hrv.lib.hrv.calc.parameter.HRVPowerSpectrumProcessor;
import org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator;
import org.apache.commons.math3.analysis.integration.TrapezoidIntegrator;

package hrv.lib.hrv.calc.psd;


public class PowerSpectrumIntegralCalculator implements HRVPowerSpectrumProcessor {

    private final double lowerIntegrationLimit;
    private final double upperIntegrationLimit;

    public PowerSpectrumIntegralCalculator(double lowerIntegrationLimit, double upperIntegrationLimit) {
        this.lowerIntegrationLimit = lowerIntegrationLimit;
        this.upperIntegrationLimit = upperIntegrationLimit;
    }

    @Override
    public HRVParameter process(PowerSpectrum ps) {
        var psAdapter = new PowerSpectrumUnivariateFunctionAdapter(ps);
        var integrator = new TrapezoidIntegrator();
        return new HRVParameter(HRVParameterEnum.NON,