diff --git a/public/js/src_modules/dropDownListAggregationAverage.mjs b/public/js/src_modules/dropDownListAggregationAverage.mjs new file mode 100644 index 0000000000000000000000000000000000000000..98098af9aceba331106b36842929758f225c9245 --- /dev/null +++ b/public/js/src_modules/dropDownListAggregationAverage.mjs @@ -0,0 +1,117 @@ +"use strict"; + +import { + extractUniqueCalendarMonthsFromCalendarDates, + formatAggregationResultForChart, +} from "./aggregateHelpers.mjs"; + +import { calculateAverageOfObservationValuesWithinInterval } from "./aggregate.mjs"; + +import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; + +/** + * Calculate the daily average of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (daily average) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatDailyAverageObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Calculate AVERAGE / DAILY of values of observations + const observationsAverageDailyNestedArr = + calculateAverageOfObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + "daily" + ); + + // Format the observations + const formattedObservationsAverageDailyNestedArr = + observationsAverageDailyNestedArr.map((obsAverageDailyArr, i) => + formatAggregationResultForChart( + uniqueCalendarDatesNestedArr[i], + obsAverageDailyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "daily", + "average" + ); + + return [ + formattedObservationsAverageDailyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +/** + * Calculate the monthly average of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (monthly average) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatMonthlyAverageObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Unique calendar months + const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( + (uniqueCalendarDatesArr) => + extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) + ); + + // Calculate AVERAGE / MONTHLY of values of observations + const observationsAverageMonthlyNestedArr = + calculateAverageOfObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarMonthsNestedArr, + "monthly" + ); + + // Format the observations + const formattedObservationsAverageMonthlyNestedArr = + observationsAverageMonthlyNestedArr.map((obsAverageMonthlyArr, i) => + formatAggregationResultForChart( + uniqueCalendarMonthsNestedArr[i], + obsAverageMonthlyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "monthly", + "average" + ); + + return [ + formattedObservationsAverageMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +export { + calculateAndFormatDailyAverageObservations, + calculateAndFormatMonthlyAverageObservations, +}; diff --git a/public/js/src_modules/dropDownListAggregationMaximum.mjs b/public/js/src_modules/dropDownListAggregationMaximum.mjs new file mode 100644 index 0000000000000000000000000000000000000000..3ef25d3823eca6578d659ab99e4ef16763598241 --- /dev/null +++ b/public/js/src_modules/dropDownListAggregationMaximum.mjs @@ -0,0 +1,117 @@ +"use strict"; + +import { + extractUniqueCalendarMonthsFromCalendarDates, + formatAggregationResultForChart, +} from "./aggregateHelpers.mjs"; + +import { calculateMaximumObservationValuesWithinInterval } from "./aggregate.mjs"; + +import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; + +/** + * Calculate the daily maximum of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (daily maximum) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatDailyMaximumObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Calculate MAXIMUM / DAILY of values of observations + const observationsMaximumDailyNestedArr = + calculateMaximumObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + "daily" + ); + + // Format the observations + const formattedObservationsMaximumDailyNestedArr = + observationsMaximumDailyNestedArr.map((obsMinDailyArr, i) => + formatAggregationResultForChart( + uniqueCalendarDatesNestedArr[i], + obsMinDailyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "daily", + "maximum" + ); + + return [ + formattedObservationsMaximumDailyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +/** + * Calculate the monthly maximum of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (monthly maximum) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatMonthlyMaximumObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Unique calendar months + const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( + (uniqueCalendarDatesArr) => + extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) + ); + + // Calculate MAXIMUM / MONTHLY of values of observations + const observationsMaximumMonthlyNestedArr = + calculateMaximumObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarMonthsNestedArr, + "monthly" + ); + + // Format the observations + const formattedObservationsMaximumMonthlyNestedArr = + observationsMaximumMonthlyNestedArr.map((obsMaxMonthlyArr, i) => + formatAggregationResultForChart( + uniqueCalendarMonthsNestedArr[i], + obsMaxMonthlyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "monthly", + "maximum" + ); + + return [ + formattedObservationsMaximumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +export { + calculateAndFormatDailyMaximumObservations, + calculateAndFormatMonthlyMaximumObservations, +}; diff --git a/public/js/src_modules/dropDownListAggregationMinimum.mjs b/public/js/src_modules/dropDownListAggregationMinimum.mjs new file mode 100644 index 0000000000000000000000000000000000000000..2fec44e30463a3006aba132d1f47531e3be42673 --- /dev/null +++ b/public/js/src_modules/dropDownListAggregationMinimum.mjs @@ -0,0 +1,117 @@ +"use strict"; + +import { + extractUniqueCalendarMonthsFromCalendarDates, + formatAggregationResultForChart, +} from "./aggregateHelpers.mjs"; + +import { calculateMinimumObservationValuesWithinInterval } from "./aggregate.mjs"; + +import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; + +/** + * Calculate the daily minimum of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (daily minimum) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatDailyMinimumObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Calculate MINIMUM / DAILY of values of observations + const observationsMinimumDailyNestedArr = + calculateMinimumObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + "daily" + ); + + // Format the observations + const formattedObservationsMinimumDailyNestedArr = + observationsMinimumDailyNestedArr.map((obsMinDailyArr, i) => + formatAggregationResultForChart( + uniqueCalendarDatesNestedArr[i], + obsMinDailyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "daily", + "minimum" + ); + + return [ + formattedObservationsMinimumDailyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +/** + * Calculate the monthly minimum of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (monthly minimum) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatMonthlyMinimumObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Unique calendar months + const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( + (uniqueCalendarDatesArr) => + extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) + ); + + // Calculate MINIMUM / MONTHLY of values of observations + const observationsMinimumMonthlyNestedArr = + calculateMinimumObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarMonthsNestedArr, + "monthly" + ); + + // Format the observations + const formattedObservationsMinimumMonthlyNestedArr = + observationsMinimumMonthlyNestedArr.map((obsMinMonthlyArr, i) => + formatAggregationResultForChart( + uniqueCalendarMonthsNestedArr[i], + obsMinMonthlyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "monthly", + "minimum" + ); + + return [ + formattedObservationsMinimumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +export { + calculateAndFormatDailyMinimumObservations, + calculateAndFormatMonthlyMinimumObservations, +}; diff --git a/public/js/src_modules/dropDownListAggregationSum.mjs b/public/js/src_modules/dropDownListAggregationSum.mjs new file mode 100644 index 0000000000000000000000000000000000000000..472db001db7d745a858b038935512b7d0fc84d53 --- /dev/null +++ b/public/js/src_modules/dropDownListAggregationSum.mjs @@ -0,0 +1,117 @@ +"use strict"; + +import { + extractUniqueCalendarMonthsFromCalendarDates, + formatAggregationResultForChart, +} from "./aggregateHelpers.mjs"; + +import { calculateSumOfObservationValuesWithinInterval } from "./aggregate.mjs"; + +import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; + +/** + * Calculate the daily sum of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (daily sum) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatDailySumObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Calculate SUM / DAILY of values of observations + const observationsSumDailyNestedArr = + calculateSumOfObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + "daily" + ); + + // Format the observations + const formattedObservationsSumDailyNestedArr = + observationsSumDailyNestedArr.map((obsSumDailyArr, i) => + formatAggregationResultForChart( + uniqueCalendarDatesNestedArr[i], + obsSumDailyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "daily", + "sum" + ); + + return [ + formattedObservationsSumDailyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +/** + * Calculate the monthly sum of observations and format these aggregated observations + * + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {Array} An array whose first element is the formatted aggregated (monthly sum) observations. The second element is an object made up of extracted & formatted datastream properties + */ +const calculateAndFormatMonthlySumObservations = function ( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr +) { + // Unique calendar months + const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( + (uniqueCalendarDatesArr) => + extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) + ); + + // Calculate SUM / MONTHLY of values of observations + const observationsSumMonthlyNestedArr = + calculateSumOfObservationValuesWithinInterval( + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarMonthsNestedArr, + "monthly" + ); + + // Format the observations + const formattedObservationsSumMonthlyNestedArr = + observationsSumMonthlyNestedArr.map((obsSumMonthlyArr, i) => + formatAggregationResultForChart( + uniqueCalendarMonthsNestedArr[i], + obsSumMonthlyArr + ) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "monthly", + "sum" + ); + + return [ + formattedObservationsSumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ]; +}; + +export { + calculateAndFormatDailySumObservations, + calculateAndFormatMonthlySumObservations, +}; diff --git a/public/js/src_modules/dropDownListChartColumn.mjs b/public/js/src_modules/dropDownListChartColumn.mjs index eda51d78402bcf3f327baceec17935f1a07352a6..e412fdc55f5b1d9e5555785a90fc6f94e7c3ab0d 100644 --- a/public/js/src_modules/dropDownListChartColumn.mjs +++ b/public/js/src_modules/dropDownListChartColumn.mjs @@ -5,13 +5,22 @@ import { drawColumnChartHighcharts } from "./chartColumn.mjs"; import { calculateAndFormatDailySumObservations, calculateAndFormatMonthlySumObservations, +} from "./dropDownListAggregationSum.mjs"; + +import { calculateAndFormatDailyMaximumObservations, calculateAndFormatMonthlyMaximumObservations, +} from "./dropDownListAggregationMaximum.mjs"; + +import { calculateAndFormatDailyMinimumObservations, calculateAndFormatMonthlyMinimumObservations, +} from "./dropDownListAggregationMinimum.mjs"; + +import { calculateAndFormatDailyAverageObservations, calculateAndFormatMonthlyAverageObservations, -} from "./dropDownListProcessing.mjs"; +} from "./dropDownListAggregationAverage.mjs"; /** * Draw a column chart based on the selected aggregation options from a drop-down list diff --git a/public/js/src_modules/dropDownListChartLine.mjs b/public/js/src_modules/dropDownListChartLine.mjs index 7d10a0d1fc14a4ac5359988105b41751162c0a17..70e721de83a9cce34dc1a402b90f32d315688c1e 100644 --- a/public/js/src_modules/dropDownListChartLine.mjs +++ b/public/js/src_modules/dropDownListChartLine.mjs @@ -5,13 +5,22 @@ import { drawLineChartHighcharts } from "./chartLine.mjs"; import { calculateAndFormatDailySumObservations, calculateAndFormatMonthlySumObservations, +} from "./dropDownListAggregationSum.mjs"; + +import { calculateAndFormatDailyMaximumObservations, calculateAndFormatMonthlyMaximumObservations, +} from "./dropDownListAggregationMaximum.mjs"; + +import { calculateAndFormatDailyMinimumObservations, calculateAndFormatMonthlyMinimumObservations, +} from "./dropDownListAggregationMinimum.mjs"; + +import { calculateAndFormatDailyAverageObservations, calculateAndFormatMonthlyAverageObservations, -} from "./dropDownListProcessing.mjs"; +} from "./dropDownListAggregationAverage.mjs"; /** * Draw a line chart based on the selected aggregation options from a drop-down list diff --git a/public/js/src_modules/dropDownListProcessing.mjs b/public/js/src_modules/dropDownListProcessing.mjs deleted file mode 100644 index 508a73d008222105b092a6e4c8036153b56de694..0000000000000000000000000000000000000000 --- a/public/js/src_modules/dropDownListProcessing.mjs +++ /dev/null @@ -1,434 +0,0 @@ -"use strict"; - -import { - extractUniqueCalendarMonthsFromCalendarDates, - formatAggregationResultForChart, -} from "./aggregateHelpers.mjs"; - -import { - calculateMinimumObservationValuesWithinInterval, - calculateMaximumObservationValuesWithinInterval, - calculateSumOfObservationValuesWithinInterval, - calculateAverageOfObservationValuesWithinInterval, -} from "./aggregate.mjs"; - -import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; - -/** - * Calculate the daily sum of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (daily sum) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatDailySumObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Calculate SUM / DAILY of values of observations - const observationsSumDailyNestedArr = - calculateSumOfObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - "daily" - ); - - // Format the observations - const formattedObservationsSumDailyNestedArr = - observationsSumDailyNestedArr.map((obsSumDailyArr, i) => - formatAggregationResultForChart( - uniqueCalendarDatesNestedArr[i], - obsSumDailyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "daily", - "sum" - ); - - return [ - formattedObservationsSumDailyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the monthly sum of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (monthly sum) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatMonthlySumObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Unique calendar months - const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( - (uniqueCalendarDatesArr) => - extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) - ); - - // Calculate SUM / MONTHLY of values of observations - const observationsSumMonthlyNestedArr = - calculateSumOfObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarMonthsNestedArr, - "monthly" - ); - - // Format the observations - const formattedObservationsSumMonthlyNestedArr = - observationsSumMonthlyNestedArr.map((obsSumMonthlyArr, i) => - formatAggregationResultForChart( - uniqueCalendarMonthsNestedArr[i], - obsSumMonthlyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "monthly", - "sum" - ); - - return [ - formattedObservationsSumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the daily maximum of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (daily maximum) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatDailyMaximumObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Calculate MAXIMUM / DAILY of values of observations - const observationsMaximumDailyNestedArr = - calculateMaximumObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - "daily" - ); - - // Format the observations - const formattedObservationsMaximumDailyNestedArr = - observationsMaximumDailyNestedArr.map((obsMinDailyArr, i) => - formatAggregationResultForChart( - uniqueCalendarDatesNestedArr[i], - obsMinDailyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "daily", - "maximum" - ); - - return [ - formattedObservationsMaximumDailyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the monthly maximum of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (monthly maximum) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatMonthlyMaximumObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Unique calendar months - const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( - (uniqueCalendarDatesArr) => - extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) - ); - - // Calculate MAXIMUM / MONTHLY of values of observations - const observationsMaximumMonthlyNestedArr = - calculateMaximumObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarMonthsNestedArr, - "monthly" - ); - - // Format the observations - const formattedObservationsMaximumMonthlyNestedArr = - observationsMaximumMonthlyNestedArr.map((obsMaxMonthlyArr, i) => - formatAggregationResultForChart( - uniqueCalendarMonthsNestedArr[i], - obsMaxMonthlyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "monthly", - "maximum" - ); - - return [ - formattedObservationsMaximumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the daily minimum of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (daily minimum) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatDailyMinimumObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Calculate MINIMUM / DAILY of values of observations - const observationsMinimumDailyNestedArr = - calculateMinimumObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - "daily" - ); - - // Format the observations - const formattedObservationsMinimumDailyNestedArr = - observationsMinimumDailyNestedArr.map((obsMinDailyArr, i) => - formatAggregationResultForChart( - uniqueCalendarDatesNestedArr[i], - obsMinDailyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "daily", - "minimum" - ); - - return [ - formattedObservationsMinimumDailyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the monthly minimum of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (monthly minimum) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatMonthlyMinimumObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Unique calendar months - const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( - (uniqueCalendarDatesArr) => - extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) - ); - - // Calculate MINIMUM / MONTHLY of values of observations - const observationsMinimumMonthlyNestedArr = - calculateMinimumObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarMonthsNestedArr, - "monthly" - ); - - // Format the observations - const formattedObservationsMinimumMonthlyNestedArr = - observationsMinimumMonthlyNestedArr.map((obsMinMonthlyArr, i) => - formatAggregationResultForChart( - uniqueCalendarMonthsNestedArr[i], - obsMinMonthlyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "monthly", - "minimum" - ); - - return [ - formattedObservationsMinimumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the daily average of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (daily average) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatDailyAverageObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Calculate AVERAGE / DAILY of values of observations - const observationsAverageDailyNestedArr = - calculateAverageOfObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - "daily" - ); - - // Format the observations - const formattedObservationsAverageDailyNestedArr = - observationsAverageDailyNestedArr.map((obsAverageDailyArr, i) => - formatAggregationResultForChart( - uniqueCalendarDatesNestedArr[i], - obsAverageDailyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "daily", - "average" - ); - - return [ - formattedObservationsAverageDailyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -/** - * Calculate the monthly average of observations and format these aggregated observations - * - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {Array} An array whose first element is the formatted aggregated (monthly average) observations. The second element is an object made up of extracted & formatted datastream properties - */ -const calculateAndFormatMonthlyAverageObservations = function ( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr -) { - // Unique calendar months - const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( - (uniqueCalendarDatesArr) => - extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) - ); - - // Calculate AVERAGE / MONTHLY of values of observations - const observationsAverageMonthlyNestedArr = - calculateAverageOfObservationValuesWithinInterval( - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarMonthsNestedArr, - "monthly" - ); - - // Format the observations - const formattedObservationsAverageMonthlyNestedArr = - observationsAverageMonthlyNestedArr.map((obsAverageMonthlyArr, i) => - formatAggregationResultForChart( - uniqueCalendarMonthsNestedArr[i], - obsAverageMonthlyArr - ) - ); - - // Extract the formatted metadata properties - const extractedFormattedDatastreamProperties = - extractPropertiesFromFormattedDatastreamMetadata( - formattedMetadataNestedArr, - true, - "monthly", - "average" - ); - - return [ - formattedObservationsAverageMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ]; -}; - -export { - calculateAndFormatDailySumObservations, - calculateAndFormatMonthlySumObservations, - calculateAndFormatDailyMaximumObservations, - calculateAndFormatMonthlyMaximumObservations, - calculateAndFormatDailyMinimumObservations, - calculateAndFormatMonthlyMinimumObservations, - calculateAndFormatDailyAverageObservations, - calculateAndFormatMonthlyAverageObservations, -};