Ejemplo n.º 1
0
        protected async static Task <Array> FetchRawDataAsync(IDataStorage storage, DataDomain dataDomain, string variable)
        {
            Stopwatch dataRequestSw = Stopwatch.StartNew();

            ts.TraceEvent(TraceEventType.Start, 2, "Extracting data from storage");
            var data = await storage.GetDataAsync(variable, dataDomain.Origin, null, dataDomain.Shape);

            dataRequestSw.Stop();
            long sizeMb = (data.Length *
                           Marshal.SizeOf(data.GetType().GetElementType())) / 1024 / 1024;

            ts.TraceEvent(TraceEventType.Stop, 2, string.Format("Data extracted in {0}. {1}MB extracted", dataRequestSw.Elapsed, sizeMb));
            return(data);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The method producing double array of mean values from the sequence of cells
        /// </summary>
        /// <param name="variable">A variable name (data source scope) to get the mean values for</param>
        /// <param name="cells">A sequence of cells to get the mean values for</param>
        /// <returns></returns>
        public async Task <double[]> AggregateCellsBatchAsync(IEnumerable <ICellRequest> cells)
        {
            ICellRequest first = cells.FirstOrDefault();

            if (first == null)
            {
                return(new double[0]);
            }
            else
            {
                var        cellArray  = cells.ToArray();
                var        variable   = first.VariableName;
                DataDomain dataDomain = CalcDataDomain(cellArray, this.timeBBCalc, this.latBBcalc, this.lonBBcalc);
                if (dataDomain == null)
                {
                    return(Enumerable.Repeat(double.NaN, cellArray.Length).ToArray());
                }

                Array data = await FetchRawDataAsync(dataStorage, dataDomain, variable);

                double[] result = arrayAggregator.Aggregate(variable, data, dataDomain, cellArray).ToArray();
                return(result);
            }
        }