private static void ProcessDataCreate(IDataWithAnnotationRows mdata, Parameters param) { string name = param.GetParam <string>("Row name").Value; string[][] groupCol = new string[mdata.ColumnCount][]; for (int i = 0; i < mdata.ColumnCount; i++) { string ename = mdata.ColumnNames[i]; string value = param.GetParam <string>(ename).Value; groupCol[i] = value.Length > 0 ? value.Split(';') : new string[0]; } mdata.AddCategoryRow(name, name, groupCol); }
private static void ProcessDataCreateFromGoupNames(IDataWithAnnotationRows mdata, Parameters param, ProcessInfo processInfo) { var name = param.GetParam <string>("Name").Value; ParameterWithSubParams <int> scwsp = param.GetParamWithSubParams <int>("Pattern"); Parameters spar = scwsp.GetSubParameters(); string regexString = ""; string replacement = ""; switch (scwsp.Value) { case 0: case 1: case 2: regexString = GetSelectableRegexes()[scwsp.Value][1]; break; case 3: regexString = spar.GetParam <string>("Regex").Value; break; case 4: regexString = spar.GetParam <string>("Regex").Value; replacement = spar.GetParam <string>("Replace with").Value; break; } Regex regex; try { regex = new Regex(regexString); } catch (ArgumentException) { processInfo.ErrString = "The regular expression you provided has invalid syntax."; return; } List <string[]> groupNames = new List <string[]>(); foreach (string sampleName in mdata.ColumnNames) { string groupName = scwsp.Value < 4 ? regex.Match(sampleName).Groups[1].Value : regex.Replace(sampleName, replacement); if (string.IsNullOrEmpty(groupName)) { groupName = sampleName; } groupNames.Add(new[] { groupName }); } mdata.AddCategoryRow(name, "", groupNames.ToArray()); }
private static string ProcessDataReadFromFile(IDataWithAnnotationRows mdata, Parameters param) { Parameter <string> fp = param.GetParam <string>("Input file"); string filename = fp.Value; string[] colNames; try { colNames = TabSep.GetColumnNames(filename, '\t'); } catch (Exception) { return("Could not open file " + filename + ". It maybe open in another program."); } int nameIndex = GetNameIndex(colNames); if (nameIndex < 0) { return("Error: the file has to contain a column called 'Name'."); } if (colNames.Length < 2) { return("Error: the file does not contain a grouping column."); } string[] nameCol = TabSep.GetColumn(colNames[nameIndex], filename, '\t'); Dictionary <string, int> map = ArrayUtils.InverseMap(nameCol); for (int i = 0; i < colNames.Length; i++) { if (i == nameIndex) { continue; } string groupName = colNames[i]; string[] groupCol = TabSep.GetColumn(groupName, filename, '\t'); string[][] newCol = new string[mdata.ColumnCount][]; for (int j = 0; j < newCol.Length; j++) { string colName = mdata.ColumnNames[j]; if (!map.ContainsKey(colName)) { newCol[j] = new string[0]; continue; } int ind = map[colName]; string group = groupCol[ind] ?? ""; group = group.Trim(); if (string.IsNullOrEmpty(group)) { newCol[j] = new string[0]; } else { string[] w = group.Split(';'); Array.Sort(w); for (int k = 0; k < w.Length; k++) { w[k] = w[k].Trim(); } newCol[j] = w; } } mdata.AddCategoryRow(groupName, groupName, newCol); } return(null); }
private static void SetAnnotationRows(IDataWithAnnotationRows result, IDataWithAnnotationRows mdata1, IDataWithAnnotationRows mdata2) { result.CategoryRowNames.Clear(); result.CategoryRowDescriptions.Clear(); result.ClearCategoryRows(); result.NumericRowNames.Clear(); result.NumericRowDescriptions.Clear(); result.NumericRows.Clear(); string[] allCatNames = ArrayUtils.Concat(mdata1.CategoryRowNames, mdata2.CategoryRowNames); allCatNames = ArrayUtils.UniqueValues(allCatNames); result.CategoryRowNames = new List <string>(); string[] allCatDescriptions = new string[allCatNames.Length]; for (int i = 0; i < allCatNames.Length; i++) { allCatDescriptions[i] = GetDescription(allCatNames[i], mdata1.CategoryRowNames, mdata2.CategoryRowNames, mdata1.CategoryRowDescriptions, mdata2.CategoryRowDescriptions); } result.CategoryRowDescriptions = new List <string>(); for (int index = 0; index < allCatNames.Length; index++) { string t = allCatNames[index]; string[][] categoryRow = new string[mdata1.ColumnCount + mdata2.ColumnCount][]; for (int j = 0; j < categoryRow.Length; j++) { categoryRow[j] = new string[0]; } int ind1 = mdata1.CategoryRowNames.IndexOf(t); if (ind1 >= 0) { string[][] c1 = mdata1.GetCategoryRowAt(ind1); for (int j = 0; j < c1.Length; j++) { categoryRow[j] = c1[j]; } } int ind2 = mdata2.CategoryRowNames.IndexOf(t); if (ind2 >= 0) { string[][] c2 = mdata2.GetCategoryRowAt(ind2); for (int j = 0; j < c2.Length; j++) { categoryRow[mdata1.ColumnCount + j] = c2[j]; } } result.AddCategoryRow(allCatNames[index], allCatDescriptions[index], categoryRow); } string[] allNumNames = ArrayUtils.Concat(mdata1.NumericRowNames, mdata2.NumericRowNames); allNumNames = ArrayUtils.UniqueValues(allNumNames); result.NumericRowNames = new List <string>(allNumNames); string[] allNumDescriptions = new string[allNumNames.Length]; for (int i = 0; i < allNumNames.Length; i++) { allNumDescriptions[i] = GetDescription(allNumNames[i], mdata1.NumericRowNames, mdata2.NumericRowNames, mdata1.NumericRowDescriptions, mdata2.NumericRowDescriptions); } result.NumericRowDescriptions = new List <string>(allNumDescriptions); foreach (string t in allNumNames) { double[] numericRow = new double[mdata1.ColumnCount + mdata2.ColumnCount]; for (int j = 0; j < numericRow.Length; j++) { numericRow[j] = double.NaN; } int ind1 = mdata1.NumericRowNames.IndexOf(t); if (ind1 >= 0) { double[] c1 = mdata1.NumericRows[ind1]; for (int j = 0; j < c1.Length; j++) { numericRow[j] = c1[j]; } } int ind2 = mdata2.NumericRowNames.IndexOf(t); if (ind2 >= 0) { double[] c2 = mdata2.NumericRows[ind2]; for (int j = 0; j < c2.Length; j++) { numericRow[mdata1.ColumnCount + j] = c2[j]; } } result.NumericRows.Add(numericRow); } }