Program Listing for File hierarchicalOptimizationAnalyticalParameterProvider.h

Return to documentation for file (include/parpeamici/hierarchicalOptimizationAnalyticalParameterProvider.h)

#ifndef HIERARCHICALOPTIMIZATIONANALYTICALPARAMETERPROVIDER_H
#define HIERARCHICALOPTIMIZATIONANALYTICALPARAMETERPROVIDER_H

#include <vector>
#include <map>

#include <H5Cpp.h>

namespace parpe {


class AnalyticalParameterProvider
{
  public:
    virtual ~AnalyticalParameterProvider() = default;

    virtual std::vector<int> getConditionsForParameter(
        int parameterIndex) const = 0;

    virtual std::vector<int> const& getObservablesForParameter(
        int parameterIndex,
        int conditionIdx) const = 0;

    virtual std::vector<int> getOptimizationParameterIndices() const = 0;
};

class AnalyticalParameterProviderDefault : public AnalyticalParameterProvider
{
  public:
    AnalyticalParameterProviderDefault() = default;

    std::vector<int> getConditionsForParameter(
        int parameterIndex) const override;

    std::vector<int> const& getObservablesForParameter(
        int parameterIndex,
        int conditionIdx) const override;

    std::vector<int> getOptimizationParameterIndices() const override;

    // TODO private
    std::vector<std::vector<int>> conditionsForParameter;
    std::vector<int> optimizationParameterIndices;
    // x[scalingIdx][conditionIdx] -> std::vector of observableIndices
    std::vector<std::map<int, std::vector<int>>> mapping;
};

class AnalyticalParameterHdf5Reader : public AnalyticalParameterProvider
{
  public:
    AnalyticalParameterHdf5Reader() = default;

    AnalyticalParameterHdf5Reader(const H5::H5File& file,
                                  std::string analyticalParameterIndicesPath,
                                  std::string mapPath);

    AnalyticalParameterHdf5Reader(AnalyticalParameterHdf5Reader const&) =
        delete;

    std::vector<int> getConditionsForParameter(
        int parameterIndex) const override;

    std::vector<int> const& getObservablesForParameter(
        int parameterIndex,
        int conditionIdx) const override;

    std::vector<int> getOptimizationParameterIndices() const override;

    ~AnalyticalParameterHdf5Reader() override;

  private:
    int getNumAnalyticalParameters() const;

    void readParameterConditionObservableMappingFromFile();
    std::vector<int> readRawMap(const H5::DataSet &dataset,
                                hsize_t& nRows,
                                hsize_t& nCols) const;

    H5::H5File file;
    std::string rootPath;
    std::string mapPath;
    std::string analyticalParameterIndicesPath;

    // x[scalingIdx][conditionIdx] -> std::vector of observableIndices
    std::vector<std::map<int, std::vector<int>>> mapping;
};


}
#endif // HIERARCHICALOPTIMIZATIONANALYTICALPARAMETERPROVIDER_H