dropDownListAggregationAverage.mjs 4.18 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"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)
16
 * @param {Array} observationsNestedArr An array made up of sub-array(s) of observations
17
18
19
20
21
22
 * @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,
23
  observationsNestedArr,
24
25
26
27
28
29
  selectedSamplingRateAbbrev,
  formattedMetadataNestedArr
) {
  // Calculate AVERAGE / DAILY of values of observations
  const observationsAverageDailyNestedArr =
    calculateAverageOfObservationValuesWithinInterval(
30
      observationsNestedArr,
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
      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)
64
 * @param {Array} observationsNestedArr An array made up of sub-array(s) of observations
65
66
67
68
69
70
 * @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,
71
  observationsNestedArr,
72
73
74
75
76
77
78
79
80
81
82
83
  selectedSamplingRateAbbrev,
  formattedMetadataNestedArr
) {
  // Unique calendar months
  const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map(
    (uniqueCalendarDatesArr) =>
      extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr)
  );

  // Calculate AVERAGE / MONTHLY of values of observations
  const observationsAverageMonthlyNestedArr =
    calculateAverageOfObservationValuesWithinInterval(
84
      observationsNestedArr,
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
      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,
};