public void LoadData(INetworkDataAnnColumns ndata, Parameters param, ref IData[] supplData, ProcessInfo processInfo) { var remoteExe = GetExectuable(param); if (string.IsNullOrWhiteSpace(remoteExe)) { processInfo.ErrString = Resources.RemoteExeNotSpecified; } var outFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); if (!TryGetCodeFile(param, out string codeFile)) { processInfo.ErrString = $"Code file '{codeFile}' was not found"; return; } var suppFiles = SupplDataTypes.Select(Utils.CreateTemporaryPath).ToArray(); var commandLineArguments = GetCommandLineArguments(param); var args = $"{codeFile} {commandLineArguments} {outFolder} {string.Join(" ", suppFiles)}"; Debug.WriteLine($"executing > {remoteExe} {args}"); if (Utils.RunProcess(remoteExe, args, processInfo.Status, out string processInfoErrString) != 0) { processInfo.ErrString = processInfoErrString; return; } FolderFormat.Read(ndata, outFolder, processInfo); supplData = Utils.ReadSupplementaryData(suppFiles, SupplDataTypes, processInfo); }
/// <summary> /// Write the fiven network to the specified folder. /// </summary> public static void Write(INetworkDataAnnColumns ndata, string folder) { if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } PerseusUtils.WriteDataWithAnnotationColumns(ndata, Path.Combine(folder, "networks.txt")); foreach (var network in ndata) { PerseusUtils.WriteDataWithAnnotationColumns(network.NodeTable, Path.Combine(folder, $"{network.Guid}_nodes.txt")); PerseusUtils.WriteDataWithAnnotationColumns(network.EdgeTable, Path.Combine(folder, $"{network.Guid}_edges.txt")); } }
public static ButtonParamWf NetworkDataPreviewButton(INetworkDataAnnColumns ndata) { return(new ButtonParamWf("Download data for preview", "save", (o, args) => { var dialog = new FolderBrowserDialog { ShowNewFolderButton = true }; if (dialog.ShowDialog() == DialogResult.OK) { FolderFormat.Write(ndata, dialog.SelectedPath); } })); }
/// <summary> /// Create the parameters for the GUI with default of generic 'Executable', 'Code file' and 'Additional arguments' parameters. /// Includes buttons for preview downloads of 'Data' and 'Parameters' for development purposes. /// Overwrite <see cref="SpecificParameters"/> to add specific parameter. Overwrite this function for full control. /// </summary> public virtual Parameters GetParameters(INetworkDataAnnColumns data, ref string errString) { Parameters parameters = new Parameters(); var specificParameters = SpecificParameters(data, ref errString); if (!string.IsNullOrEmpty(errString)) { return(null); } parameters.AddParameterGroup(specificParameters, "Specific", false); var previewButton = Utils.DataPreviewButton(data); var parametersPreviewButton = Utils.ParametersPreviewButton(parameters); parameters.AddParameterGroup(new Parameter[] { ExecutableParam(), previewButton, parametersPreviewButton }, "Generic", false); return(parameters); }
/// <summary> /// Read the network into an instance of <see cref="INetworkData"/>. /// To create an empty network see <see cref="PerseusFactory.CreateNetworkData"/>. /// </summary> /// <param name="ndata">Contains the parsed network after the function was run</param> /// <param name="folder">Path to the directory where the network is stored</param> /// <param name="processInfo"></param> public static void Read(INetworkDataAnnColumns ndata, string folder, ProcessInfo processInfo) { ReadMatrixDataInto(ndata, Path.Combine(folder, "networks.txt"), processInfo); foreach ( var netAttr in ndata.GetStringColumn("guid").Zip(ndata.GetStringColumn("name"), (guid, name) => new { guid, name })) { var guid = Guid.Parse(netAttr.guid); var nodeTable = PerseusFactory.CreateDataWithAnnotationColumns(); var edgeTable = PerseusFactory.CreateDataWithAnnotationColumns(); ReadMatrixDataInto(nodeTable, Path.Combine(folder, $"{guid}_nodes.txt"), processInfo); ReadMatrixDataInto(edgeTable, Path.Combine(folder, $"{guid}_edges.txt"), processInfo); var graph = PerseusFactory.CreateGraph(); var nodeIndex = new Dictionary <INode, int>(); var nameToNode = new Dictionary <string, INode>(); var nodeColumn = nodeTable.GetStringColumn("node"); for (int row = 0; row < nodeTable.RowCount; row++) { var node = graph.AddNode(); nodeIndex[node] = row; nameToNode[nodeColumn[row]] = node; } var sourceColumn = edgeTable.GetStringColumn("source"); var targetColumn = edgeTable.GetStringColumn("target"); var edgeIndex = new Dictionary <IEdge, int>(); for (int row = 0; row < edgeTable.RowCount; row++) { var source = nameToNode[sourceColumn[row]]; var target = nameToNode[targetColumn[row]]; var edge = graph.AddEdge(source, target); edgeIndex[edge] = row; } var network = PerseusFactory.CreateNetworkInfo(graph, nodeTable, nodeIndex, edgeTable, edgeIndex, netAttr.name, guid); ndata.AddNetworks(network); } // overwrite graph table, which was modified by `ndata.AddNetwork(network)` ReadMatrixDataInto(ndata, Path.Combine(folder, "networks.txt"), processInfo); }
/// <summary> /// Create the parameters for the GUI with default of generic 'Code file' /// and 'Additional arguments' parameters. Overwrite this function for custom structured parameters. /// </summary> protected virtual Parameter[] SpecificParameters(INetworkDataAnnColumns data, ref string errString) { return(new Parameter[] { CodeFileParam(), AdditionalArgumentsParam() }); }