/// <summary> /// Read supplementary files according to file paths and data types. /// </summary> /// <param name="suppFiles"></param> /// <param name="supplDataTypes"></param> /// <param name="processInfo"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public static IData[] ReadSupplementaryData(string[] suppFiles, DataType[] supplDataTypes, ProcessInfo processInfo) { var numSupplTables = suppFiles.Length; IData[] supplData = new IData[numSupplTables]; for (int i = 0; i < numSupplTables; i++) { switch (supplDataTypes[i]) { case DataType.Matrix: var mdata = PerseusFactory.CreateMatrixData(); PerseusUtils.ReadMatrixFromFile(mdata, processInfo, suppFiles[i], '\t'); supplData[i] = mdata; break; case DataType.Network: var ndata = PerseusFactory.CreateNetworkData(); FolderFormat.Read(ndata, suppFiles[i], processInfo); supplData[i] = ndata; break; default: throw new NotImplementedException($"Data type {supplDataTypes[i]} not supported!"); } } return(supplData); }
public void ProcessData(IMatrixData inData, INetworkData outData, Parameters param, ref IData[] supplData, ProcessInfo processInfo) { var remoteExe = param.GetParam <string>(InterpreterLabel).Value; var inFile = Path.GetTempFileName(); PerseusUtils.WriteMatrixToFile(inData, inFile, false); var paramFile = Path.GetTempFileName(); param.ToFile(paramFile); 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 args = $"{codeFile} {paramFile} {inFile} {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(outData, outFolder, processInfo); supplData = Utils.ReadSupplementaryData(suppFiles, SupplDataTypes, processInfo); }
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); }