void BuildDataTable() { //build list of datetime for complete daterange of all configs _unifiedData = new DataTable(); List <double> HubHtValues = new List <double>(); List <double> UpperHtValues = new List <double>(); List <double> LowerHtValues = new List <double>(); List <double> WDValues = new List <double>(); List <DateTime> DateValues = new List <DateTime>(); _startDate = _acvm.Configs.Select(c => c.DataSetStartDate).Min(); _endDate = _acvm.Configs.Select(c => c.DataSetEndDate).Max(); for (int i = 0; i < _acvm.Configs.Count; i++) { DataTable Data = _acvm.Configs[i].DownloadedData[0]; //build a list for upper,lower,and hub height ws int wdindex = _acvm.Configs[i].ColumnCollection.WDComp(_startDate); int DateIndex = _acvm.Configs[i].ColumnCollection.DateIndex; foreach (DataRow dr in Data.Rows) { int j = HubHeightRow[i].SelectedColumn.ColIndex; { if (!Convert.IsDBNull(dr[j]) & dr[j].ToString().Length > 0) { HubHtValues.Add(double.Parse(dr[j].ToString())); } else { HubHtValues.Add(-9999.99); } } j = DateIndex; { if (!Convert.IsDBNull(dr[j]) & dr[j].ToString().Length > 0) { DateValues.Add(DateTime.Parse(dr[j].ToString())); } } j = wdindex; { if (!Convert.IsDBNull(dr[j]) & dr[j].ToString().Length > 0) { WDValues.Add(double.Parse(dr[j].ToString())); } else { WDValues.Add(-9999.99); } } j = UpperHeightRow[i].SelectedColumn.ColIndex; { if (!Convert.IsDBNull(dr[j]) & dr[j].ToString().Length > 0) { UpperHtValues.Add(double.Parse(dr[j].ToString())); } else { UpperHtValues.Add(-9999.99); } } j = LowerHeightRow[i].SelectedColumn.ColIndex; { if (!Convert.IsDBNull(dr[j]) & dr[j].ToString().Length > 0) { LowerHtValues.Add(double.Parse(dr[j].ToString())); } else { LowerHtValues.Add(-9999.99); } } } } //end for i Utils.AddColtoDataTable <DateTime>("DateTime", DateValues, _unifiedData); Utils.AddColtoDataTable <double>(HubHeight.ToString() + "m", HubHtValues, _unifiedData); Utils.AddColtoDataTable <double>(UpperHeight.ToString() + "m", UpperHtValues, _unifiedData); Utils.AddColtoDataTable <double>(LowerHeight.ToString() + "m", LowerHtValues, _unifiedData); Utils.AddColtoDataTable <double>("WD", WDValues, _unifiedData); DateTimeSequence sequence = new DateTimeSequence(_unifiedData, 0); DataPrep prep = new DataPrep(_unifiedData, 0); try { prep.FillMissingdates(sequence.GetMissingTimeStamps()); } catch (OutOfMemoryException) { MessageBox.Show("The file is too big. Volatile memory has been exceeded while filling missing dates."); } }
void OutPutSummary() { BackgroundWorker worker = new BackgroundWorker(); string filename = string.Empty; SaveFileDialog sf = new SaveFileDialog(); sf.Title = "save data"; sf.Filter = "Excel|*.xlsx"; sf.DefaultExt = ".xlsx"; sf.FileName = "Unified" + "_StnSummary_" + DateTime.Now.ToShortDateString().Replace(@"/", ""); DialogResult result = sf.ShowDialog(); if (result == DialogResult.Cancel) { return; } if (sf.FileName != "") { filename = sf.FileName; } else { return; } worker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) { SummaryIsProcessing = false; }; worker.DoWork += delegate(object s, DoWorkEventArgs args) { XbyYShearStationSummary summary = null; try { SummaryIsProcessing = true; //create the DataTable if (_unifiedData != null) { _unifiedData.Clear(); } BuildDataTable(); //create column collection ColumnCollection = new SessionColumnCollection(_unifiedData); //add column def and add configs ISessionColumn hubws = ColumnCollection[HubHeight.ToString() + "m"]; hubws.ColumnType = SessionColumnType.WSAvgShear; hubws.IsCalculated = true; hubws.IsComposite = true; SensorConfig config = new SensorConfig() { StartDate = _startDate, EndDate = _endDate, Height = HubHeight }; hubws.Configs.Add(config); ISessionColumn upperws = ColumnCollection[UpperHeight.ToString().Replace(".", "_") + "m"]; upperws.ColumnType = SessionColumnType.WSAvg; upperws.IsComposite = true; config = new SensorConfig() { StartDate = _startDate, EndDate = _endDate, Height = UpperHeight }; upperws.Configs.Add(config); ISessionColumn lowerws = ColumnCollection[LowerHeight.ToString().Replace(".", "_") + "m"]; lowerws.ColumnType = SessionColumnType.WSAvg; lowerws.IsComposite = true; config = new SensorConfig() { StartDate = _startDate, EndDate = _endDate, Height = LowerHeight }; lowerws.Configs.Add(config); ISessionColumn wd = ColumnCollection["WD"]; wd.ColumnType = SessionColumnType.WDAvg; wd.IsComposite = true; config = new SensorConfig() { StartDate = _startDate, EndDate = _endDate }; wd.Configs.Add(config); //get axis selections from UI IAxis Xaxis = GetAxis(_xShearAxis, _xBinWidth); IAxis Yaxis = GetAxis(_yShearAxis, _yBinWidth); //calculate alpha AlphaFactory afactory = new AlphaFactory(); Alpha alpha = (Alpha)afactory.CreateAlpha(_unifiedData, AlphaFilterMethod.Coincident, upperws, lowerws, Xaxis, Yaxis); alpha.SourceDataSet = this.DisplayName; alpha.CalculateAlpha(); string xBin = string.Empty; string yBin = string.Empty; if (Xaxis.AxisType == AxisType.WD) { var wdaxis = (WindDirectionAxis)Xaxis; xBin = " " + wdaxis.BinWidth.ToString() + " deg"; } if (Xaxis.AxisType == AxisType.WS) { var wsaxis = (WindSpeedAxis)Xaxis; xBin = " " + wsaxis.BinWidth.ToString() + " m/s"; } if (Yaxis.AxisType == AxisType.WD) { var wdaxis = (WindDirectionAxis)Yaxis; yBin = " " + wdaxis.BinWidth.ToString() + " deg"; } if (Yaxis.AxisType == AxisType.WS) { var wsaxis = (WindSpeedAxis)Yaxis; yBin = " " + wsaxis.BinWidth.ToString() + " m/s"; } //Set up column metadata for the summary run summary = new XbyYShearStationSummary(ColumnCollection, _unifiedData.AsDataView(), 30, 10, 2, alpha); summary.CreateReport(filename); SummaryIsProcessing = false; } catch (ApplicationException e) { MessageBox.Show("Error calculating station summary: " + e.Message + " " + e.Source); StreamWriter fs = new StreamWriter(Path.GetDirectoryName(filename) + @"\LOG_" + Path.GetFileNameWithoutExtension(filename) + ".txt", false); summary.log.ForEach(c => fs.WriteLine(c)); fs.Close(); } finally { SummaryIsProcessing = false; } }; worker.RunWorkerAsync(); }