From 22d03a3bcd3c4cb1686ffb51db71582cf62bbd35 Mon Sep 17 00:00:00 2001 From: Michael Nilsson Date: Wed, 22 Jun 2016 14:17:59 -0400 Subject: [PATCH] get dimensions from metadata differently, documentation, change dataprocessor method args to const --- modules/iswa/util/dataprocessor.h | 38 ++++++++++++++++++--- modules/iswa/util/dataprocessorjson.cpp | 23 +++++++------ modules/iswa/util/dataprocessorjson.h | 6 ++-- modules/iswa/util/dataprocessorkameleon.cpp | 8 ++--- modules/iswa/util/dataprocessorkameleon.h | 12 ++++--- modules/iswa/util/dataprocessortext.cpp | 6 ++-- modules/iswa/util/dataprocessortext.h | 6 ++-- 7 files changed, 67 insertions(+), 32 deletions(-) diff --git a/modules/iswa/util/dataprocessor.h b/modules/iswa/util/dataprocessor.h index 28cddcd9c0..aa64af7e74 100644 --- a/modules/iswa/util/dataprocessor.h +++ b/modules/iswa/util/dataprocessor.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * -* Copyright (c) 2014-2015 * +* Copyright (c) 2014-2016 * * * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * * software and associated documentation files (the "Software"), to deal in the Software * @@ -38,9 +38,39 @@ public: DataProcessor(); ~DataProcessor(); - virtual std::vector readMetadata(std::string data, glm::size3_t& dimensions) = 0; - virtual void addDataValues(std::string data, properties::SelectionProperty& dataOptions) = 0; - virtual std::vector processData(std::string data, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions) = 0; + /** + * Reads and returns the metadata from the data file. + * + * @param data The data file content to read metadata from + * @param dimensions the dimensions of the data, will be modified + * + * @return An array with data variable options + */ + virtual std::vector readMetadata(const std::string& data, glm::size3_t& dimensions) = 0; + + /** + * Function that initializes the dataprocessor for a new data variable by + * calculating its min & max value, standard deviation, sum and histogram for a + * given data file. This file will then be used as reference when normalizing, filtering + * and give auto-contrast + * + * @param data The data file content to add data from + * @param dataOptions a list of dataoptions that you want to pre-process + */ + virtual void addDataValues(const std::string& data, const properties::SelectionProperty& dataOptions) = 0; + + /** + * Will take raw input data as a string and return it as a vector of + * float arrays (one float array per data variable that is selected). + * Before returning it, the data is processed with normalization and + * an optional histogram equalization. + * + * @param data input data. directly from data file (file contents) + * @param dataOptions Pass in the dataOptions property from the Renderable + * @param dimensions Dimensions of the data + * @return Processed data + */ + virtual std::vector processData(const std::string& data, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions) = 0; void useLog(bool useLog); void useHistogram(bool useHistogram); diff --git a/modules/iswa/util/dataprocessorjson.cpp b/modules/iswa/util/dataprocessorjson.cpp index 151f8e6a13..dd8a3f3fed 100644 --- a/modules/iswa/util/dataprocessorjson.cpp +++ b/modules/iswa/util/dataprocessorjson.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * -* Copyright (c) 2014-2015 * +* Copyright (c) 2014-2016 * * * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * * software and associated documentation files (the "Software"), to deal in the Software * @@ -39,20 +39,21 @@ DataProcessorJson::DataProcessorJson() DataProcessorJson::~DataProcessorJson(){} -std::vector DataProcessorJson::readMetadata(std::string data, glm::size3_t& dimensions){ +std::vector DataProcessorJson::readMetadata(const std::string& data, glm::size3_t& dimensions){ std::vector options = std::vector(); if(!data.empty()){ json j = json::parse(data); json variables = j["variables"]; - for(json::iterator it = variables.begin(); it != variables.end(); ++it){ - std::string option = it.key(); - if(option == "ep"){ - json row = it.value(); - json col = row.at(0); + //Setting dimensions + json::iterator it = variables.begin(); + json row = it.value(); + json col = row.at(0); + dimensions = glm::size3_t(col.size(), row.size(), 1); - dimensions = glm::size3_t(col.size(), row.size(), 1); - } + //Reading options + for(; it != variables.end(); ++it){ + std::string option = it.key(); if(_coordinateVariables.find(option) == _coordinateVariables.end()){ options.push_back(option); @@ -62,7 +63,7 @@ std::vector DataProcessorJson::readMetadata(std::string data, glm:: return options; } -void DataProcessorJson::addDataValues(std::string data, properties::SelectionProperty& dataOptions){ +void DataProcessorJson::addDataValues(const std::string& data, const properties::SelectionProperty& dataOptions){ int numOptions = dataOptions.options().size(); initializeVectors(numOptions); @@ -99,7 +100,7 @@ void DataProcessorJson::addDataValues(std::string data, properties::SelectionPro } } -std::vector DataProcessorJson::processData(std::string data, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions){ +std::vector DataProcessorJson::processData(const std::string& data, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions){ if(!data.empty()){ json j = json::parse(data); json variables = j["variables"]; diff --git a/modules/iswa/util/dataprocessorjson.h b/modules/iswa/util/dataprocessorjson.h index 2516bea159..7772a403b0 100644 --- a/modules/iswa/util/dataprocessorjson.h +++ b/modules/iswa/util/dataprocessorjson.h @@ -33,9 +33,9 @@ public: DataProcessorJson(); ~DataProcessorJson(); - virtual std::vector readMetadata(std::string data, glm::size3_t& dimensions) override; - virtual void addDataValues(std::string data, properties::SelectionProperty& dataOptions) override; - virtual std::vector processData(std::string data, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions) override; + std::vector readMetadata(const std::string& data, glm::size3_t& dimensions) override; + void addDataValues(const std::string& data, const properties::SelectionProperty& dataOptions) override; + std::vector processData(const std::string& data, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions) override; }; }// namespace diff --git a/modules/iswa/util/dataprocessorkameleon.cpp b/modules/iswa/util/dataprocessorkameleon.cpp index 5abba4833b..9aa5f14665 100644 --- a/modules/iswa/util/dataprocessorkameleon.cpp +++ b/modules/iswa/util/dataprocessorkameleon.cpp @@ -42,7 +42,7 @@ DataProcessorKameleon::DataProcessorKameleon() DataProcessorKameleon::~DataProcessorKameleon(){} -std::vector DataProcessorKameleon::readMetadata(std::string path, glm::size3_t& dimensions){ +std::vector DataProcessorKameleon::readMetadata(const std::string& path, glm::size3_t& dimensions){ if(!path.empty()){ if(path != _kwPath || !_kw){ @@ -64,7 +64,7 @@ std::vector DataProcessorKameleon::readMetadata(std::string path, g return std::vector(); } -void DataProcessorKameleon::addDataValues(std::string path, properties::SelectionProperty& dataOptions){ +void DataProcessorKameleon::addDataValues(const std::string& path, const properties::SelectionProperty& dataOptions){ int numOptions = dataOptions.options().size(); initializeVectors(numOptions); @@ -98,13 +98,13 @@ void DataProcessorKameleon::addDataValues(std::string path, properties::Selectio add(optionValues, sum); } } -std::vector DataProcessorKameleon::processData(std::string path, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions, float slice){ +std::vector DataProcessorKameleon::processData(const std::string path, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions, float slice){ _slice = slice; // _dimensions = dimensions; return processData(path, dataOptions, dimensions); } -std::vector DataProcessorKameleon::processData(std::string path, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions){ +std::vector DataProcessorKameleon::processData(const std::string& path, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions){ int numOptions = dataOptions.options().size(); if(!path.empty()){ diff --git a/modules/iswa/util/dataprocessorkameleon.h b/modules/iswa/util/dataprocessorkameleon.h index 1a8f97cbe3..141ce86267 100644 --- a/modules/iswa/util/dataprocessorkameleon.h +++ b/modules/iswa/util/dataprocessorkameleon.h @@ -29,15 +29,19 @@ namespace openspace { +/** +* See DataProcessor for documentation. +* Instead of data file content as first argument, pass path to cdf file for all overriden functions +*/ class DataProcessorKameleon : public DataProcessor { public: DataProcessorKameleon(); ~DataProcessorKameleon(); - virtual std::vector readMetadata(std::string path, glm::size3_t& dimensions) override; - virtual void addDataValues(std::string data, properties::SelectionProperty& dataOptions) override; - virtual std::vector processData(std::string path, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions) override; - virtual std::vector processData(std::string path, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions, float slice); + std::vector readMetadata(const std::string& path, glm::size3_t& dimensions) override; + void addDataValues(const std::string& path, const properties::SelectionProperty& dataOptions) override; + std::vector processData(const std::string& path, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions) override; + std::vector processData(const std::string path, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions, float slice); void dimensions(glm::size3_t dimensions){_dimensions = dimensions;} private: diff --git a/modules/iswa/util/dataprocessortext.cpp b/modules/iswa/util/dataprocessortext.cpp index ecdb1ac4d0..ca4cc78ac1 100644 --- a/modules/iswa/util/dataprocessortext.cpp +++ b/modules/iswa/util/dataprocessortext.cpp @@ -43,7 +43,7 @@ DataProcessorText::DataProcessorText() DataProcessorText::~DataProcessorText(){} -std::vector DataProcessorText::readMetadata(std::string data, glm::size3_t& dimensions){ +std::vector DataProcessorText::readMetadata(const std::string& data, glm::size3_t& dimensions){ //The intresting part of the file looks like this: //# Output data: field with 61x61=3721 elements //# x y z N V_x B_x @@ -84,7 +84,7 @@ std::vector DataProcessorText::readMetadata(std::string data, glm:: return options; } -void DataProcessorText::addDataValues(std::string data, properties::SelectionProperty& dataOptions){ +void DataProcessorText::addDataValues(const std::string& data, const properties::SelectionProperty& dataOptions){ int numOptions = dataOptions.options().size(); initializeVectors(numOptions); @@ -142,7 +142,7 @@ void DataProcessorText::addDataValues(std::string data, properties::SelectionPro } } -std::vector DataProcessorText::processData(std::string data, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions){ +std::vector DataProcessorText::processData(const std::string& data, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions){ if(!data.empty()){ std::string line; diff --git a/modules/iswa/util/dataprocessortext.h b/modules/iswa/util/dataprocessortext.h index ac575a0f70..7b0063557c 100644 --- a/modules/iswa/util/dataprocessortext.h +++ b/modules/iswa/util/dataprocessortext.h @@ -33,9 +33,9 @@ public: DataProcessorText(); ~DataProcessorText(); - virtual std::vector readMetadata(std::string data, glm::size3_t& dimensions) override; - virtual void addDataValues(std::string data, properties::SelectionProperty& dataOptions) override; - virtual std::vector processData(std::string data, properties::SelectionProperty& dataOptions, glm::size3_t& dimensions) override; + std::vector readMetadata(const std::string& data, glm::size3_t& dimensions) override; + void addDataValues(const std::string& data, const properties::SelectionProperty& dataOptions) override; + std::vector processData(const std::string& data, const properties::SelectionProperty& dataOptions, const glm::size3_t& dimensions) override; private: // void initialize(int numOptions);