public static TimeSeriesComplexType FromTimeSeries(TimeSeries ts, string forcedTimeStamp) { TimeSeriesComplexType result = new TimeSeriesComplexType( ); string locationName = LocationName(ts.name); result.header = new HeaderComplexType { type = timeSeriesType.mean, locationId = locationName, //stationName = locationName, startDate = new DateTimeComplexType { DateTime = MergeDT(ts.Start, forcedTimeStamp) }, endDate = new DateTimeComplexType { DateTime = MergeDT(ts.End, forcedTimeStamp) }, missVal = ts.NullValue, units = PIUnits(ts), timeStep = PITimeStep(ts.timeStep), parameterId = ParameterName(ts.name) }; IList <EventComplexType> events = new List <EventComplexType>(); for (int i = 0; i < ts.count(); i++) { var fewsDT = new DateTimeComplexType { DateTime = MergeDT(ts.timeForItem(i), forcedTimeStamp) }; events.Add(new EventComplexType { date = fewsDT.date, time = fewsDT.time, flag = 2, flagSpecified = true, value = ts[i] }); } result.@event = events.ToArray(); return(result); }
public static TimeSeries ConvertTimeSeriesFromFEWS(TimeSeriesComplexType fewsTS) { var header = fewsTS.header; DateTime tsStart = DateTimeComplexType.DateTimeFromPI(header.startDate); DateTime tsEnd = DateTimeComplexType.DateTimeFromPI(header.endDate); TimeStep step = TimeStepFromPI(header.timeStep); TimeSeries result = new TimeSeries(tsStart, tsEnd, step); result.name = header.parameterId + "_" + header.locationId; foreach (var e in fewsTS.@event) { var dt = DateTimeComplexType.Merge(e.date, e.time); result.setTime(dt, e.value); } return(result); }
public static void Run(RunComplexType runSettings, Diagnostics diagnostics, string[] args) { var start = DateTimeComplexType.DateTimeFromPI(runSettings.startDateTime); var end = DateTimeComplexType.DateTimeFromPI(runSettings.endDateTime); // string dateFormat = "dd/MM/yyyy"; var dtf = Thread.CurrentThread.CurrentCulture.DateTimeFormat; string dateFormat = dtf.ShortDatePattern; // "MM/dd/yyyy"; if (runSettings.TimeStepInSeconds != 86400) { dateFormat += " HH:mm:ss"; } string sourceExe = runSettings.SourceExeToUse(); string sourceProject = runSettings.Property(Keys.PROJECT_FILE); string sourceOutput = runSettings.Property(Keys.OUTPUT_FILE); if (File.Exists(sourceOutput)) { diagnostics.Log(3, string.Format("Deleting old source output file {0}", sourceOutput)); File.Delete(sourceOutput); } string mode = runSettings.ExecutionMode(); if (mode == "") { if (runSettings.ConfiguredServer() != "") { diagnostics.Log(3, string.Format("Running locally because configured server ({0}) is unavailable", runSettings.ConfiguredServer())); } } else { sourceProject = ""; } string sourceCommand = string.Format("-p \"{0};;{1};{2}\" {4} -o {3}", sourceProject, start.ToString(dateFormat), end.ToString(dateFormat), sourceOutput, mode); diagnostics.Log(3, string.Format("Starting Source Run with command line {0}", sourceCommand)); ProcessStartInfo startInfo = new ProcessStartInfo { Arguments = sourceCommand, CreateNoWindow = true, FileName = sourceExe, UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true }; Process p = Process.Start(startInfo); string output = p.StandardOutput.ReadToEnd(); p.WaitForExit(); string errors = p.StandardError.ReadToEnd(); if (!File.Exists(sourceOutput)) { File.WriteAllText(runSettings.workDir + "\\SourceErrors.txt", errors); File.WriteAllText(runSettings.workDir + "\\SourceOutput.txt", output); foreach (string line in errors.Split('\n')) { diagnostics.Log(1, line); } throw new Exception(string.Format("Source run failed. No output file: {0}", sourceOutput)); } diagnostics.Log(3, "All done"); }