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"));
     }
 }
Beispiel #3
0
 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() });
 }