public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] cols = param.GetMultiChoiceParam("Columns").Value;
     HashSet<int> w = ArrayUtils.ToHashSet(param.GetMultiChoiceParam("Calculate").Value);
     bool[] include = new bool[SummaryStatisticsRows.procs.Length];
     double[][] rowws = new double[SummaryStatisticsRows.procs.Length][];
     for (int i = 0; i < include.Length; i++){
         include[i] = w.Contains(i);
         if (include[i]){
             rowws[i] = new double[cols.Length];
         }
     }
     for (int i = 0; i < cols.Length; i++){
         double[] vals = GetColumn(cols[i], mdata);
         for (int j = 0; j < include.Length; j++){
             if (include[j]){
                 rowws[j][i] = SummaryStatisticsRows.procs[j].Item2(vals);
             }
         }
     }
     List<double[]> ex = new List<double[]>();
     List<string> names = new List<string>();
     for (int i = 0; i < include.Length; i++){
         if (include[i]){
             ex.Add(rowws[i]);
             names.Add(SummaryStatisticsRows.procs[i].Item1);
         }
     }
     float[,] exVals = GetExVals(ex);
     IEnumerable<string> colNames = GetColNames(mdata, cols);
     mdata.SetData("Summary", new List<string>(colNames), exVals, new List<string>(new[]{"Type"}),
         new List<string[]>(new[]{names.ToArray()}), new List<string>(), new List<string[][]>(), new List<string>(),
         new List<double[]>(), new List<string>(), new List<double[][]>());
 }
示例#2
0
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     SingleChoiceWithSubParams access = param.GetSingleChoiceWithSubParams("Matrix access");
     bool rows = access.Value == 0;
     int groupInd;
     if (rows) {
         groupInd = access.GetSubParameters().GetSingleChoiceParam("Grouping").Value - 1;
     } else {
         groupInd = -1;
     }
     int what = param.GetSingleChoiceParam("Subtract what").Value;
     if (groupInd < 0){
         SubtractValues(rows, GetFunc(what), mdata);
     } else{
         string[][] catRow = mdata.CategoryRows[groupInd];
         foreach (string[] t in catRow) {
             if (t.Length > 1) {
                 processInfo.ErrString = "The groups are overlapping.";
                 return;
             }
         }
         SubtractGroups(mdata, catRow, GetFunc(what));
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     bool rows = param.GetSingleChoiceParam("Matrix access").Value == 0;
     double min = param.GetDoubleParam("Minimum").Value;
     double max = param.GetDoubleParam("Maximum").Value;
     MapToInterval1(rows, mdata, min, max);
 }
示例#4
0
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int numQuantiles = param.GetIntParam("Number of quantiles").Value;
     int[] colInds = param.GetMultiChoiceParam("Columns").Value;
     foreach (int colInd in colInds){
         float[] vals = mdata.GetExpressionColumn(colInd);
         List<int> v = new List<int>();
         for (int i = 0; i < vals.Length; i++){
             if (!float.IsNaN(vals[i])){
                 v.Add(i);
             }
         }
         int[] o = v.ToArray();
         vals = ArrayUtils.SubArray(vals, o);
         int[] q = ArrayUtils.Order(vals);
         o = ArrayUtils.SubArray(o, q);
         string[][] catCol = new string[mdata.RowCount][];
         for (int i = 0; i < catCol.Length; i++){
             catCol[i] = new[]{"missing"};
         }
         for (int i = 0; i < o.Length; i++){
             int catVal = (i*numQuantiles)/o.Length + 1;
             catCol[o[i]] = new[]{"Q" + catVal};
         }
         string name = mdata.ExpressionColumnNames[colInd] + "_q";
         string desc = "The column " + mdata.ExpressionColumnNames[colInd] + " has been divided into " + numQuantiles +
             " quantiles.";
         mdata.AddCategoryColumn(name, desc, catCol);
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     double width = param.GetDoubleParam("Width").Value;
     double shift = param.GetDoubleParam("Down shift").Value;
     bool separateColumns = param.GetSingleChoiceParam("Mode").Value == 0;
     if (separateColumns){
         ReplaceMissingsByGaussianByColumn(width, shift, mdata);
     } else{
         ReplaceMissingsByGaussianWholeMatrix(width, shift, mdata);
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int colInd = param.GetSingleChoiceParam("Column").Value;
     double value = param.GetDoubleParam("Value").Value;
     int ruleInd = param.GetSingleChoiceParam("Remove if").Value;
     bool keepNan = param.GetBoolParam("Keep NaN").Value;
     double[] vals = colInd < mdata.NumericColumnCount
         ? mdata.NumericColumns[colInd] : ArrayUtils.ToDoubles(mdata.GetExpressionColumn(colInd - mdata.NumericColumnCount));
     List<int> valids = new List<int>();
     for (int i = 0; i < vals.Length; i++){
         bool valid;
         double val = vals[i];
         if (double.IsNaN(val)){
             valid = keepNan;
         } else{
             switch (ruleInd){
                 case 0:
                     valid = val > value;
                     break;
                 case 1:
                     valid = val >= value;
                     break;
                 case 2:
                     valid = val != value;
                     break;
                 case 3:
                     valid = val == value;
                     break;
                 case 4:
                     valid = val <= value;
                     break;
                 case 5:
                     valid = val < value;
                     break;
                 default:
                     throw new Exception("Never get here.");
             }
         }
         if (valid){
             valids.Add(i);
         }
     }
     PerseusPluginUtils.FilterRows(mdata, param, valids.ToArray());
 }
 public IMatrixAnalysisResult AnalyzeData(IMatrixData mdata, Parameters param, ProcessInfo processInfo)
 {
     return new SelectRowsManuallyResult(mdata);
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     SingleChoiceWithSubParams sp = param.GetSingleChoiceWithSubParams("Source type");
     Parameters subParams = sp.GetSubParameters();
     int[] colInds = subParams.GetMultiChoiceParam("Columns").Value;
     int which = subParams.GetSingleChoiceParam("Target type").Value;
     switch (sp.Value){
         case 0:
             ExpressionToNumeric(colInds, mdata);
             break;
         case 1:
             if (which == 0){
                 NumericToCategorical(colInds, mdata);
             } else{
                 NumericToExpression(colInds, mdata);
             }
             break;
         case 2:
             if (which == 0){
                 CategoricalToNumeric(colInds, mdata);
             } else{
                 CategoricalToString(colInds, mdata);
             }
             break;
         case 3:
             StringToCategorical(colInds, mdata);
             break;
         default:
             throw new Exception("Never get here");
     }
 }
 public void LoadData(IMatrixData matrixData, Parameters parameters, ProcessInfo processInfo)
 {
     PerseusLoadFileParam par = (PerseusLoadFileParam) parameters.GetParam("File");
     string filename = par.Filename;
     if (string.IsNullOrEmpty(filename)){
         processInfo.ErrString = "Please specify a filename";
         return;
     }
     if (!File.Exists(filename)){
         processInfo.ErrString = "File '" + filename + "' does not exist.";
         return;
     }
     string[] colNames;
     Dictionary<string, string[]> annotationRows = new Dictionary<string, string[]>();
     try{
         colNames = TabSep.GetColumnNames(filename, commentPrefix, commentPrefixExceptions, annotationRows);
     } catch (Exception){
         processInfo.ErrString = "Could not open the file '" + filename + "'. It is probably opened by another program.";
         return;
     }
     string[] colDescriptions = null;
     string[] colTypes = null;
     bool[] colVisible = null;
     if (annotationRows.ContainsKey("Description")){
         colDescriptions = annotationRows["Description"];
         annotationRows.Remove("Description");
     }
     if (annotationRows.ContainsKey("Type")){
         colTypes = annotationRows["Type"];
         annotationRows.Remove("Type");
     }
     if (annotationRows.ContainsKey("Visible")){
         string[] colVis = annotationRows["Visible"];
         colVisible = new bool[colVis.Length];
         for (int i = 0; i < colVisible.Length; i++){
             colVisible[i] = bool.Parse(colVis[i]);
         }
         annotationRows.Remove("Visible");
     }
     int[] eInds = par.ExpressionColumnIndices;
     int[] cInds = par.CategoryColumnIndices;
     int[] nInds = par.NumericalColumnIndices;
     int[] tInds = par.TextColumnIndices;
     int[] mInds = par.MultiNumericalColumnIndices;
     int[] allInds = ArrayUtils.Concat(new[]{eInds, cInds, nInds, tInds, mInds});
     Array.Sort(allInds);
     for (int i = 0; i < allInds.Length - 1; i++){
         if (allInds[i + 1] == allInds[i]){
             processInfo.ErrString = "Column '" + colNames[allInds[i]] + "' has been selected multiple times";
             return;
         }
     }
     string[] allColNames = ArrayUtils.SubArray(colNames, allInds);
     Array.Sort(allColNames);
     for (int i = 0; i < allColNames.Length - 1; i++){
         if (allColNames[i + 1].Equals(allColNames[i])){
             processInfo.ErrString = "Column name '" + allColNames[i] + "' occurs multiple times.";
             return;
         }
     }
     LoadData(colNames, colDescriptions, eInds, cInds, nInds, tInds, mInds, filename, matrixData, annotationRows,
         processInfo.Progress, processInfo.Status);
 }
 public void ProcessData(IMatrixData mdata, Parameters param1, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] multiNumCols = param1.GetMultiChoiceParam("Multi-numeric columns").Value;
     Array.Sort(multiNumCols);
     int[] stringCols = param1.GetMultiChoiceParam("String columns").Value;
     Array.Sort(stringCols);
     HashSet<int> multinumCols2 = new HashSet<int>(multiNumCols);
     HashSet<int> stringCols2 = new HashSet<int>(stringCols);
     if (multiNumCols.Length + stringCols.Length == 0){
         processInfo.ErrString = "Please select some columns.";
         return;
     }
     int rowCount = GetNewRowCount(mdata, multiNumCols, stringCols);
     float[,] expVals = new float[rowCount,mdata.ExpressionColumnCount];
     List<string[]> stringC = new List<string[]>();
     for (int i = 0; i < mdata.StringColumnCount; i++){
         stringC.Add(new string[rowCount]);
     }
     List<double[]> numC = new List<double[]>();
     for (int i = 0; i < mdata.NumericColumnCount; i++){
         numC.Add(new double[rowCount]);
     }
     List<string[][]> catC = new List<string[][]>();
     for (int i = 0; i < mdata.CategoryColumnCount; i++){
         catC.Add(new string[rowCount][]);
     }
     List<double[][]> multiNumC = new List<double[][]>();
     for (int i = 0; i < mdata.MultiNumericColumnCount; i++){
         multiNumC.Add(new double[rowCount][]);
     }
     int count = 0;
     for (int i = 0; i < mdata.RowCount; i++){
         string err;
         int entryCount = GetEntryCount(i, mdata, multiNumCols, stringCols, out err);
         if (err != null){
             processInfo.ErrString = err;
             return;
         }
         bool empty = entryCount == 0;
         entryCount = Math.Max(entryCount, 1);
         for (int j = 0; j < entryCount; j++){
             for (int k = 0; k < mdata.ExpressionColumnCount; k++){
                 expVals[count + j, k] = mdata[i, k];
             }
             for (int k = 0; k < mdata.NumericColumnCount; k++){
                 numC[k][count + j] = mdata.NumericColumns[k][i];
             }
             for (int k = 0; k < mdata.CategoryColumnCount; k++){
                 catC[k][count + j] = mdata.CategoryColumns[k][i];
             }
         }
         for (int k = 0; k < mdata.MultiNumericColumnCount; k++){
             if (multinumCols2.Contains(k)){
                 if (empty){
                     multiNumC[k][count] = new double[0];
                 } else{
                     double[] vals = mdata.MultiNumericColumns[k][i];
                     for (int j = 0; j < entryCount; j++){
                         multiNumC[k][count + j] = new[]{vals[j]};
                     }
                 }
             } else{
                 for (int j = 0; j < entryCount; j++){
                     multiNumC[k][count + j] = mdata.MultiNumericColumns[k][i];
                 }
             }
         }
         for (int k = 0; k < mdata.StringColumnCount; k++){
             if (stringCols2.Contains(k)){
                 if (empty){
                     stringC[k][count] = "";
                 } else{
                     string[] vals = mdata.StringColumns[k][i].Split(';');
                     for (int j = 0; j < entryCount; j++){
                         stringC[k][count + j] = vals[j];
                     }
                 }
             } else{
                 for (int j = 0; j < entryCount; j++){
                     stringC[k][count + j] = mdata.StringColumns[k][i];
                 }
             }
         }
         count += entryCount;
     }
     int[] multiNumComplement = ArrayUtils.Complement(multiNumCols, mdata.MultiNumericColumnCount);
     List<double[][]> toBeTransformed = ArrayUtils.SubList(multiNumC, multiNumCols);
     multiNumC = ArrayUtils.SubList(multiNumC, multiNumComplement);
     foreach (double[][] d in toBeTransformed){
         numC.Add(Transform(d));
     }
     mdata.SetData(mdata.Name, mdata.ExpressionColumnNames, expVals, mdata.StringColumnNames, stringC,
         mdata.CategoryColumnNames, catC,
         new List<string>(ArrayUtils.Concat(mdata.NumericColumnNames,
             ArrayUtils.SubList(mdata.MultiNumericColumnNames, multiNumCols))), numC,
         new List<string>(ArrayUtils.SubArray(mdata.MultiNumericColumnNames, multiNumComplement)), multiNumC);
 }
示例#11
0
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     SingleChoiceParam access = param.GetSingleChoiceParam("Matrix access");
     bool rows = access.Value == 0;
     int what = param.GetSingleChoiceParam("Divide by what").Value;
     DivideImpl(rows, ArrayUtils.Mean, mdata);
     switch (what){
         case 0:
             DivideImpl(rows, ArrayUtils.Mean, mdata);
             break;
         case 1:
             DivideImpl(rows, ArrayUtils.Median, mdata);
             break;
         case 2:
             DivideImpl(rows, ArrayUtils.MostFrequentValue, mdata);
             break;
         default:
             throw new Exception("Never get here.");
     }
 }
示例#12
0
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int ind = param.GetSingleChoiceParam("Column").Value;
     bool descending = param.GetBoolParam("Descending").Value;
     if (ind < mdata.ExpressionColumnCount){
         float[] v = mdata.GetExpressionColumn(ind);
         int[] o = ArrayUtils.Order(v);
         if (descending){
             ArrayUtils.Revert(o);
         }
         mdata.ExtractExpressionRows(o);
     } else{
         double[] v = mdata.NumericColumns[ind - mdata.ExpressionColumnCount];
         int[] o = ArrayUtils.Order(v);
         if (descending){
             ArrayUtils.Revert(o);
         }
         mdata.ExtractExpressionRows(o);
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param1, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] cols = param1.GetMultiChoiceParam("Columns").Value;
     int[] ops = param1.GetMultiChoiceParam("Operation").Value;
     foreach (int t in ops){
         double[][] vals = new double[cols.Length][];
         for (int i = 0; i < cols.Length; i++){
             double[][] x = mdata.MultiNumericColumns[cols[i]];
             vals[i] = new double[x.Length];
             for (int j = 0; j < vals[i].Length; j++){
                 vals[i][j] = operations[t](x[j]);
             }
         }
         for (int i = 0; i < cols.Length; i++){
             mdata.AddNumericColumn(mdata.MultiNumericColumnNames[cols[i]] + "_" + names[t], "", vals[i]);
         }
     }
 }
 public void Export(Parameters parameters, IMatrixData data, ProcessInfo processInfo)
 {
     string filename = parameters.GetFileParam("File name").Value;
     StreamWriter writer;
     try{
         writer = new StreamWriter(filename);
     } catch (Exception e){
         processInfo.ErrString = e.Message;
         return;
     }
     List<string> words = new List<string>();
     for (int i = 0; i < data.ExpressionColumnCount; i++){
         words.Add(Trunc(data.ExpressionColumnNames[i]));
     }
     for (int i = 0; i < data.CategoryColumnCount; i++){
         words.Add(Trunc(data.CategoryColumnNames[i]));
     }
     for (int i = 0; i < data.NumericColumnCount; i++){
         words.Add(Trunc(data.NumericColumnNames[i]));
     }
     for (int i = 0; i < data.StringColumnCount; i++){
         words.Add(Trunc(data.StringColumnNames[i]));
     }
     for (int i = 0; i < data.MultiNumericColumnCount; i++){
         words.Add(Trunc(data.MultiNumericColumnNames[i]));
     }
     writer.WriteLine(StringUtils.Concat("\t", words));
     if (HasAnyDescription(data)){
         words = new List<string>();
         for (int i = 0; i < data.ExpressionColumnCount; i++){
             words.Add(Trunc(data.ExpressionColumnDescriptions[i] ?? ""));
         }
         for (int i = 0; i < data.CategoryColumnCount; i++){
             words.Add(Trunc(data.CategoryColumnDescriptions[i] ?? ""));
         }
         for (int i = 0; i < data.NumericColumnCount; i++){
             words.Add(Trunc(data.NumericColumnDescriptions[i] ?? ""));
         }
         for (int i = 0; i < data.StringColumnCount; i++){
             words.Add(Trunc(data.StringColumnDescriptions[i] ?? ""));
         }
         for (int i = 0; i < data.MultiNumericColumnCount; i++){
             words.Add(Trunc(data.MultiNumericColumnDescriptions[i] ?? ""));
         }
         writer.WriteLine("#!{Description}" + StringUtils.Concat("\t", words));
     }
     words = new List<string>();
     for (int i = 0; i < data.ExpressionColumnCount; i++){
         words.Add("E");
     }
     for (int i = 0; i < data.CategoryColumnCount; i++){
         words.Add("C");
     }
     for (int i = 0; i < data.NumericColumnCount; i++){
         words.Add("N");
     }
     for (int i = 0; i < data.StringColumnCount; i++){
         words.Add("T");
     }
     for (int i = 0; i < data.MultiNumericColumnCount; i++){
         words.Add("M");
     }
     writer.WriteLine("#!{Type}" + StringUtils.Concat("\t", words));
     for (int i = 0; i < data.NumericRowCount; i++){
         words = new List<string>();
         for (int j = 0; j < data.ExpressionColumnCount; j++){
             words.Add("" + data.NumericRows[i][j]);
         }
         for (int j = 0; j < data.CategoryColumnCount; j++){
             words.Add("");
         }
         for (int j = 0; j < data.NumericColumnCount; j++){
             words.Add("");
         }
         for (int j = 0; j < data.StringColumnCount; j++){
             words.Add("");
         }
         for (int j = 0; j < data.MultiNumericColumnCount; j++){
             words.Add("");
         }
         writer.WriteLine("#!{N:" + data.NumericRowNames[i] + "}" + StringUtils.Concat("\t", words));
     }
     for (int i = 0; i < data.CategoryRowCount; i++){
         words = new List<string>();
         for (int j = 0; j < data.ExpressionColumnCount; j++){
             string[] s = data.CategoryRows[i][j];
             words.Add(s.Length == 0 ? "" : StringUtils.Concat(";", s));
         }
         for (int j = 0; j < data.CategoryColumnCount; j++){
             words.Add("");
         }
         for (int j = 0; j < data.NumericColumnCount; j++){
             words.Add("");
         }
         for (int j = 0; j < data.StringColumnCount; j++){
             words.Add("");
         }
         for (int j = 0; j < data.MultiNumericColumnCount; j++){
             words.Add("");
         }
         writer.WriteLine("#!{C:" + data.CategoryRowNames[i] + "}" + StringUtils.Concat("\t", words));
     }
     for (int j = 0; j < data.RowCount; j++){
         words = new List<string>();
         for (int i = 0; i < data.ExpressionColumnCount; i++){
             words.Add(Trunc("" + data[j, i]));
         }
         for (int i = 0; i < data.CategoryColumnCount; i++){
             string[] q = data.CategoryColumns[i][j] ?? new string[0];
             words.Add(Trunc((q.Length > 0 ? StringUtils.Concat(";", q) : "")));
         }
         for (int i = 0; i < data.NumericColumnCount; i++){
             words.Add(Trunc("" + data.NumericColumns[i][j]));
         }
         for (int i = 0; i < data.StringColumnCount; i++){
             words.Add(Trunc(data.StringColumns[i][j]));
         }
         for (int i = 0; i < data.MultiNumericColumnCount; i++){
             double[] q = data.MultiNumericColumns[i][j];
             words.Add(Trunc((q.Length > 0 ? StringUtils.Concat(";", q) : "")));
         }
         string s = StringUtils.Concat("\t", words);
         s = s.Replace("\"", "");
         writer.WriteLine(s);
     }
     writer.Close();
 }
 public void ProcessData(IMatrixData data, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] exColInds = GetValidExCols(data);
     int[] numColInds = GetValidNumCols(data);
     int[] multiNumColInds = GetValidMultiNumCols(data);
     int[] catColInds = GetValidCatCols(data);
     int[] textColInds = GetValidTextCols(data);
     if (exColInds.Length < data.ExpressionColumnCount) {
         data.ExtractExpressionColumns(exColInds);
     }
     if (numColInds.Length < data.NumericColumnCount) {
         data.NumericColumns = ArrayUtils.SubList(data.NumericColumns, numColInds);
         data.NumericColumnNames = ArrayUtils.SubList(data.NumericColumnNames, numColInds);
         data.NumericColumnDescriptions = ArrayUtils.SubList(data.NumericColumnDescriptions, numColInds);
     }
     if (multiNumColInds.Length < data.MultiNumericColumnCount) {
         data.MultiNumericColumns = ArrayUtils.SubList(data.MultiNumericColumns, multiNumColInds);
         data.MultiNumericColumnNames = ArrayUtils.SubList(data.MultiNumericColumnNames, multiNumColInds);
         data.MultiNumericColumnDescriptions = ArrayUtils.SubList(data.MultiNumericColumnDescriptions, multiNumColInds);
     }
     if (catColInds.Length < data.CategoryColumnCount) {
         data.CategoryColumns = ArrayUtils.SubList(data.CategoryColumns, catColInds);
         data.CategoryColumnNames = ArrayUtils.SubList(data.CategoryColumnNames, catColInds);
         data.CategoryColumnDescriptions = ArrayUtils.SubList(data.CategoryColumnDescriptions, catColInds);
     }
     if (textColInds.Length < data.StringColumnCount) {
         data.StringColumns = ArrayUtils.SubList(data.StringColumns, textColInds);
         data.StringColumnNames = ArrayUtils.SubList(data.StringColumnNames, textColInds);
         data.StringColumnDescriptions = ArrayUtils.SubList(data.StringColumnDescriptions, textColInds);
     }
 }
示例#16
0
 public void ProcessData(IMatrixData mdata, Parameters param1, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] stringCols = param1.GetMultiChoiceParam("String columns").Value;
     int[] catCols = param1.GetMultiChoiceParam("Categorical columns").Value;
     if (catCols.Length + stringCols.Length == 0){
         processInfo.ErrString = "Please select some columns.";
         return;
     }
     foreach (string[][] col in catCols.Select(catCol => mdata.CategoryColumns[catCol])){
         for (int i = 0; i < col.Length; i++){
             col[i] = ArrayUtils.UniqueValues(col[i]);
         }
     }
     foreach (string[] col in stringCols.Select(stringCol => mdata.StringColumns[stringCol])){
         for (int i = 0; i < col.Length; i++){
             string q = col[i];
             if (q.Length == 0){
                 continue;
             }
             string[] w = q.Split(';');
             w = ArrayUtils.UniqueValues(w);
             col[i] = StringUtils.Concat(";", w);
         }
     }
 }
 public void ProcessData(IMatrixData data, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] exColInds = param.GetMultiChoiceParam("Expression columns").Value;
     int[] numColInds = param.GetMultiChoiceParam("Numerical columns").Value;
     int[] multiNumColInds = param.GetMultiChoiceParam("Multi-numerical columns").Value;
     int[] catColInds = param.GetMultiChoiceParam("Categorical columns").Value;
     int[] textColInds = param.GetMultiChoiceParam("Text columns").Value;
     data.ExtractExpressionColumns(exColInds);
     data.NumericColumns = ArrayUtils.SubList(data.NumericColumns, numColInds);
     data.NumericColumnNames = ArrayUtils.SubList(data.NumericColumnNames, numColInds);
     data.NumericColumnDescriptions = ArrayUtils.SubList(data.NumericColumnDescriptions, numColInds);
     data.MultiNumericColumns = ArrayUtils.SubList(data.MultiNumericColumns, multiNumColInds);
     data.MultiNumericColumnNames = ArrayUtils.SubList(data.MultiNumericColumnNames, multiNumColInds);
     data.MultiNumericColumnDescriptions = ArrayUtils.SubList(data.MultiNumericColumnDescriptions, multiNumColInds);
     data.CategoryColumns = ArrayUtils.SubList(data.CategoryColumns, catColInds);
     data.CategoryColumnNames = ArrayUtils.SubList(data.CategoryColumnNames, catColInds);
     data.CategoryColumnDescriptions = ArrayUtils.SubList(data.CategoryColumnDescriptions, catColInds);
     data.StringColumns = ArrayUtils.SubList(data.StringColumns, textColInds);
     data.StringColumnNames = ArrayUtils.SubList(data.StringColumnNames, textColInds);
     data.StringColumnDescriptions = ArrayUtils.SubList(data.StringColumnDescriptions, textColInds);
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int colInd = param.GetSingleChoiceParam("Column").Value;
     string value = param.GetStringParam("Find").Value;
     bool remove = param.GetSingleChoiceParam("Mode").Value == 0;
     string[][] cats = mdata.CategoryColumns[colInd];
     List<int> valids = new List<int>();
     for (int i = 0; i < cats.Length; i++){
         bool valid = true;
         foreach (string w in cats[i]){
             if (w.Equals(value)){
                 valid = false;
                 break;
             }
         }
         if ((valid && remove) || (!valid && !remove)){
             valids.Add(i);
         }
     }
     mdata.ExtractExpressionRows(valids.ToArray());
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     string[][] col = mdata.CategoryColumns[param.GetSingleChoiceParam("Indicator column").Value];
     string term = param.GetStringParam("Value").Value;
     List<int> inds = new List<int>();
     for (int i = 0; i < col.Length; i++){
         if (Contains(col[i], term)){
             inds.Add(i);
         }
     }
     float[][] profiles = new float[inds.Count][];
     for (int i = 0; i < profiles.Length; i++){
         profiles[i] = mdata.GetExpressionRow(inds[i]);
         float mean = (float) ArrayUtils.Mean(profiles[i]);
         for (int j = 0; j < profiles[i].Length; j++){
             profiles[i][j] -= mean;
         }
     }
     float[] totalProfile = new float[mdata.ExpressionColumnCount];
     for (int i = 0; i < totalProfile.Length; i++){
         List<float> vals = new List<float>();
         foreach (float[] t in profiles){
             float val = t[i];
             if (float.IsNaN(val) || float.IsInfinity(val)){
                 continue;
             }
             vals.Add(val);
         }
         totalProfile[i] = vals.Count > 0 ? ArrayUtils.Median(vals) : float.NaN;
     }
     for (int i = 0; i < mdata.RowCount; i++){
         for (int j = 0; j < mdata.ExpressionColumnCount; j++){
             mdata[i, j] -= totalProfile[j];
         }
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     bool rows = param.GetSingleChoiceParam("Matrix access").Value == 0;
     bool atLeast = param.GetSingleChoiceParam("Side").Value == 0;
     int numValids = param.GetIntParam("Number of valid values").Value;
     SingleChoiceWithSubParams modeParam = param.GetSingleChoiceWithSubParams("Mode");
     int modeInd = modeParam.Value;
     if (modeInd != 0 && mdata.CategoryRowNames.Count == 0){
         processInfo.ErrString = "No grouping is defined.";
         return;
     }
     if (modeInd != 0 && !rows){
         processInfo.ErrString = "Group-wise filtering can only be appled to rows.";
         return;
     }
     if (modeInd != 0){
         int gind = modeParam.GetSubParameters().GetSingleChoiceParam("Grouping").Value;
         string[][] groupCol = mdata.CategoryRows[gind];
         ValidValueFilterGroup(numValids, mdata, param, modeInd == 2, groupCol, atLeast);
     } else{
         ValidValueFilter1(rows, numValids, mdata, param, atLeast);
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
 }
示例#22
0
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int nameCol = param.GetSingleChoiceParam("New column names").Value;
     float[,] x = ArrayUtils.Transpose(mdata.ExpressionValues);
     List<string> colNames = new List<string>(mdata.StringColumns[nameCol]);
     List<string> rowNames = mdata.ExpressionColumnNames;
     mdata.SetData(mdata.Name, colNames, x, new List<string>(new[]{"Name"}), new List<string[]>(new[]{rowNames.ToArray()}),
         new List<string>(), new List<string[][]>(), new List<string>(), new List<double[]>(), new List<string>(),
         new List<double[][]>());
 }
示例#23
0
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     SingleChoiceParam access = param.GetSingleChoiceParam("Matrix access");
     bool rows = access.Value == 0;
     UnitVectors(rows, mdata);
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     SingleChoiceWithSubParams xp = param.GetSingleChoiceWithSubParams("Expression column selection");
     bool groups = xp.Value == 2;
     string[] groupNames = null;
     int[][] colIndsGroups = null;
     if (groups){
         int groupRowInd = xp.GetSubParameters().GetSingleChoiceParam("Group").Value;
         string[][] groupCol = mdata.CategoryRows[groupRowInd];
         groupNames = ArrayUtils.UniqueValuesPreserveOrder(groupCol);
         colIndsGroups = PerseusPluginUtils.GetExpressionColIndices(groupCol, groupNames);
     }
     int[] useCols = xp.Value == 1
         ? xp.GetSubParameters().GetMultiChoiceParam("Columns").Value
         : ArrayUtils.ConsecutiveInts(mdata.ExpressionColumnCount);
     HashSet<int> w = ArrayUtils.ToHashSet(param.GetMultiChoiceParam("Calculate").Value);
     bool[] include = new bool[procs.Length];
     double[][] columns = new double[procs.Length][];
     double[][][] columnsG = null;
     if (groups){
         columnsG = new double[procs.Length][][];
         for (int i = 0; i < columnsG.Length; i++){
             columnsG[i] = new double[groupNames.Length][];
         }
     }
     for (int i = 0; i < include.Length; i++){
         include[i] = w.Contains(i);
         if (include[i]){
             columns[i] = new double[mdata.RowCount];
             if (groups){
                 for (int j = 0; j < groupNames.Length; j++){
                     columnsG[i][j] = new double[mdata.RowCount];
                 }
             }
         }
     }
     for (int i = 0; i < mdata.RowCount; i++){
         List<double> v = new List<double>();
         foreach (int j in useCols){
             double x = mdata[i, j];
             if (!double.IsNaN(x) && !double.IsInfinity(x)){
                 v.Add(x);
             }
         }
         for (int j = 0; j < include.Length; j++){
             if (include[j]){
                 columns[j][i] = procs[j].Item2(v);
             }
         }
         if (groups){
             List<double>[] vg = new List<double>[groupNames.Length];
             for (int j = 0; j < colIndsGroups.Length; j++){
                 vg[j] = new List<double>();
                 for (int k = 0; k < colIndsGroups[j].Length; k++){
                     double x = mdata[i, colIndsGroups[j][k]];
                     if (!double.IsNaN(x) && !double.IsInfinity(x)){
                         vg[j].Add(x);
                     }
                 }
             }
             for (int j = 0; j < include.Length; j++){
                 if (include[j]){
                     for (int k = 0; k < groupNames.Length; k++){
                         columnsG[j][k][i] = procs[j].Item2(vg[k]);
                     }
                 }
             }
         }
     }
     for (int i = 0; i < include.Length; i++){
         if (include[i]){
             mdata.AddNumericColumn(procs[i].Item1, procs[i].Item3, columns[i]);
             if (groups){
                 for (int k = 0; k < groupNames.Length; k++){
                     mdata.AddNumericColumn(procs[i].Item1 + " " + groupNames[k], procs[i].Item3, columnsG[i][k]);
                 }
             }
         }
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int colIndex = param.GetSingleChoiceParam("Control column").Value;
     if (colIndex < mdata.ExpressionColumnCount){
         DivideByColumn(mdata, colIndex);
     } else{
         DivideByColumnNum(mdata, colIndex - mdata.ExpressionColumnCount);
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     int[] colIndx = param.GetMultiChoiceParam("Column 1").Value;
     int[] colIndy = param.GetMultiChoiceParam("Column 2").Value;
     if (colIndx.Length == 0){
         processInfo.ErrString = "Please select some columns";
         return;
     }
     if (colIndx.Length != colIndy.Length){
         processInfo.ErrString = "Please select the same number of columns in the boxes for the first and second columns.";
         return;
     }
     int points = param.GetIntParam("Number of points").Value;
     for (int k = 0; k < colIndx.Length; k++){
         float[] xvals = GetColumn(mdata, colIndx[k]);
         float[] yvals = GetColumn(mdata, colIndy[k]);
         float[] xvals1;
         float[] yvals1;
         NumUtils.GetValidPairs(xvals, yvals, out xvals1, out yvals1);
         double xmin;
         double xmax;
         double ymin;
         double ymax;
         DensityEstimation.CalcRanges(xvals1, yvals1, out xmin, out xmax, out ymin, out ymax);
         float[,] values = DensityEstimation.GetValuesOnGrid(xvals1, xmin, (xmax - xmin) / points, points, yvals1, ymin,
             (ymax - ymin)/points, points);
         DensityEstimation.DivideByMaximum(values);
         //if (modeInd == 1){
         //	values = InvertRows(values);
         //	List<string> colNames = new List<string>();
         //	for (int i = 0; i < values.GetLength(1); i++){
         //		colNames.Add("" + i);
         //	}
         //	mdata.SetData(mdata.Name, colNames, values, new List<string>(), new List<string[]>(), new List<string>(),
         //		new List<string[][]>(), new List<string>(), new List<double[]>(), new List<string>(), new List<double[][]>());
         //	return;
         //}
         double[] xmat = new double[points];
         for (int i = 0; i < points; i++){
             xmat[i] = xmin + i*(xmax - xmin)/points;
         }
         double[] ymat = new double[points];
         for (int i = 0; i < points; i++){
             ymat[i] = ymin + i*(ymax - ymin)/points;
         }
         float[,] percvalues = CalcExcludedPercentage(values);
         double[] dvals = new double[xvals.Length];
         double[] pvals = new double[xvals.Length];
         for (int i = 0; i < dvals.Length; i++){
             double xx = xvals[i];
             double yy = yvals[i];
             if (!double.IsNaN(xx) && !double.IsNaN(yy)){
                 int xind = ArrayUtils.ClosestIndex(xmat, xx);
                 int yind = ArrayUtils.ClosestIndex(ymat, yy);
                 dvals[i] = values[xind, yind];
                 pvals[i] = percvalues[xind, yind];
             } else{
                 dvals[i] = double.NaN;
                 pvals[i] = double.NaN;
             }
         }
         string xname = GetColumnName(mdata, colIndx[k]);
         string yname = GetColumnName(mdata, colIndy[k]);
         mdata.AddNumericColumn("Density_" + xname + "_" + yname,
             "Density of data points in the plane spanned by the columns " + xname + " and " + yname + ".", dvals);
         mdata.AddNumericColumn("Excluded fraction_" + xname + "_" + yname,
             "Percentage of points with a point density smaller than at this point in the plane spanned by the columns " + xname +
                 " and " + yname + ".", pvals);
     }
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     float value = (float) param.GetDoubleParam("Value").Value;
     ReplaceMissingsByVal(value, mdata);
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     float[,] vals = mdata.ExpressionValues;
     double[] dm = new double[mdata.ExpressionColumnCount];
     double[] dp = new double[mdata.ExpressionColumnCount];
     for (int i = 0; i < mdata.ExpressionColumnCount; i++){
         List<float> v = new List<float>();
         foreach (float f in mdata.GetExpressionColumn(i)){
             if (!float.IsNaN(f) && !float.IsInfinity(f)){
                 v.Add(f);
             }
         }
         float[] d = v.ToArray();
         float[] q = ArrayUtils.Quantiles(d, new[]{0.25, 0.5, 0.75});
         for (int j = 0; j < mdata.RowCount; j++){
             vals[j, i] -= q[1];
         }
         dm[i] = q[1] - q[0];
         dp[i] = q[2] - q[1];
     }
     double adm = ArrayUtils.Median(dm);
     double adp = ArrayUtils.Median(dp);
     for (int i = 0; i < mdata.ExpressionColumnCount; i++){
         for (int j = 0; j < mdata.RowCount; j++){
             if (vals[j, i] < 0){
                 vals[j, i] = (float) (vals[j, i]*adm/dm[i]);
             } else{
                 vals[j, i] = (float) (vals[j, i]*adp/dp[i]);
             }
         }
     }
 }
        public IMatrixData CombineData(IMatrixData matrixData1, IMatrixData matrixData2, Parameters parameters,
			ProcessInfo processInfo)
        {
            bool indicator = parameters.GetBoolParam("Indicator").Value;
            int otherCol = parameters.GetSingleChoiceParam("Matching column 2").Value;
            Average avExpression = GetAveraging(parameters.GetSingleChoiceParam("Combine expression values").Value);
            Average avNumerical = GetAveraging(parameters.GetSingleChoiceParam("Combine numerical values").Value);
            string[] q = matrixData2.StringColumns[otherCol];
            string[][] w = new string[q.Length][];
            for (int i = 0; i < q.Length; i++){
                string r = q[i].Trim();
                w[i] = r.Length == 0 ? new string[0] : r.Split(';');
                w[i] = ArrayUtils.UniqueValues(w[i]);
            }
            Dictionary<string, List<int>> id2Cols = new Dictionary<string, List<int>>();
            for (int i = 0; i < w.Length; i++){
                foreach (string s in w[i]){
                    if (!id2Cols.ContainsKey(s)){
                        id2Cols.Add(s, new List<int>());
                    }
                    id2Cols[s].Add(i);
                }
            }
            int pgCol = parameters.GetSingleChoiceParam("Matching column 1").Value;
            string[] d = matrixData1.StringColumns[pgCol];
            string[][] x = new string[d.Length][];
            for (int i = 0; i < d.Length; i++){
                string r = d[i].Trim();
                x[i] = r.Length == 0 ? new string[0] : r.Split(';');
                x[i] = ArrayUtils.UniqueValues(x[i]);
            }
            int[][] indexMap = new int[x.Length][];
            string[][] indicatorCol = new string[x.Length][];
            for (int i = 0; i < indexMap.Length; i++){
                List<int> qwer = new List<int>();
                foreach (string s in x[i]){
                    if (id2Cols.ContainsKey(s)){
                        List<int> en = id2Cols[s];
                        qwer.AddRange(en);
                    }
                }
                indexMap[i] = qwer.ToArray();
                indexMap[i] = ArrayUtils.UniqueValues(indexMap[i]);
                indicatorCol[i] = indexMap[i].Length > 0 ? new[]{"+"} : new string[0];
            }
            IMatrixData result = matrixData1.Copy();
            SetAnnotationRows(result, matrixData1, matrixData2);
            if (indicator){
                result.AddCategoryColumn(matrixData2.Name, "", indicatorCol);
            }
                {
                    int[] exCols = parameters.GetMultiChoiceParam("Expression columns").Value;
                    float[,] newExColumns = new float[matrixData1.RowCount, exCols.Length];
                    float[,] newQuality = new float[matrixData1.RowCount, exCols.Length];
                    bool[,] newIsImputed = new bool[matrixData1.RowCount, exCols.Length];
                    string[] newExColNames = new string[exCols.Length];
                    float[,] oldEx = matrixData2.ExpressionValues;
                    float[,] oldQual = matrixData2.QualityValues;
                    bool[,] oldImp = matrixData2.IsImputed;
                    for (int i = 0; i < exCols.Length; i++) {
                        newExColNames[i] = matrixData2.ExpressionColumnNames[exCols[i]];
                        for (int j = 0; j < matrixData1.RowCount; j++){
                            int[] inds = indexMap[j];
                            List<double> values = new List<double>();
                            List<double> qual = new List<double>();
                            List<bool> imp = new List<bool>();
                            foreach (int ind in inds) {
                                double v = oldEx[ind, exCols[i]];
                                if (!double.IsNaN(v) && !double.IsInfinity(v)){
                                    values.Add(v);
                                    double qx = oldQual[ind, exCols[i]];
                                    if (!double.IsNaN(qx) && !double.IsInfinity(qx)){
                                        qual.Add(qx);
                                    }
                                    bool isi = oldImp[ind, exCols[i]];
                                    imp.Add(isi);
                                }
                            }
                            newExColumns[j, i] = values.Count == 0 ? float.NaN : (float)avExpression(values.ToArray());
                            newQuality[j, i] = qual.Count == 0 ? float.NaN : (float)avExpression(qual.ToArray());
                            newIsImputed[j, i] = imp.Count != 0 && AvImp(imp.ToArray());
                        }
                    }
                    MakeNewNames(newExColNames, result.ExpressionColumnNames);
                    AddExpressionColumns(result, newExColNames, newExColumns, newQuality, newIsImputed);
                }
                {
                    int[] numCols = parameters.GetMultiChoiceParam("Numerical columns").Value;
                    double[][] newNumericalColumns = new double[numCols.Length][];
                    string[] newNumColNames = new string[numCols.Length];
                    for (int i = 0; i < numCols.Length; i++){
                        double[] oldCol = matrixData2.NumericColumns[numCols[i]];
                        newNumColNames[i] = matrixData2.NumericColumnNames[numCols[i]];
                        newNumericalColumns[i] = new double[matrixData1.RowCount];
                        for (int j = 0; j < matrixData1.RowCount; j++){
                            int[] inds = indexMap[j];
                            List<double> values = new List<double>();
                            foreach (int ind in inds){
                                double v = oldCol[ind];
                                if (!double.IsNaN(v)){
                                    values.Add(v);
                                }
                            }
                            newNumericalColumns[i][j] = values.Count == 0 ? double.NaN : avNumerical(values.ToArray());
                        }
                    }
                    for (int i = 0; i < numCols.Length; i++){
                        result.AddNumericColumn(newNumColNames[i], "", newNumericalColumns[i]);
                    }
                }
                {
                    int[] catCols = parameters.GetMultiChoiceParam("Categorical columns").Value;
                    string[][][] newCatColumns = new string[catCols.Length][][];
                    string[] newCatColNames = new string[catCols.Length];
                    for (int i = 0; i < catCols.Length; i++){
                        string[][] oldCol = matrixData2.CategoryColumns[catCols[i]];
                        newCatColNames[i] = matrixData2.CategoryColumnNames[catCols[i]];
                        newCatColumns[i] = new string[matrixData1.RowCount][];
                        for (int j = 0; j < matrixData1.RowCount; j++){
                            int[] inds = indexMap[j];
                            List<string[]> values = new List<string[]>();
                            foreach (int ind in inds){
                                string[] v = oldCol[ind];
                                if (v.Length > 0){
                                    values.Add(v);
                                }
                            }
                            newCatColumns[i][j] = values.Count == 0
                                ? new string[0] : ArrayUtils.UniqueValues(ArrayUtils.Concat(values.ToArray()));
                        }
                    }
                    for (int i = 0; i < catCols.Length; i++){
                        result.AddCategoryColumn(newCatColNames[i], "", newCatColumns[i]);
                    }
                }
                {
                    int[] stringCols = parameters.GetMultiChoiceParam("String columns").Value;
                    string[][] newStringColumns = new string[stringCols.Length][];
                    string[] newStringColNames = new string[stringCols.Length];
                    for (int i = 0; i < stringCols.Length; i++){
                        string[] oldCol = matrixData2.StringColumns[stringCols[i]];
                        newStringColNames[i] = matrixData2.StringColumnNames[stringCols[i]];
                        newStringColumns[i] = new string[matrixData1.RowCount];
                        for (int j = 0; j < matrixData1.RowCount; j++){
                            int[] inds = indexMap[j];
                            List<string> values = new List<string>();
                            foreach (int ind in inds){
                                string v = oldCol[ind];
                                if (v.Length > 0){
                                    values.Add(v);
                                }
                            }
                            newStringColumns[i][j] = values.Count == 0 ? "" : StringUtils.Concat(";", values.ToArray());
                        }
                    }
                    for (int i = 0; i < stringCols.Length; i++){
                        result.AddStringColumn(newStringColNames[i], "", newStringColumns[i]);
                    }
                }
            result.Origin = "Combination";
            return result;
        }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     SingleChoiceWithSubParams scwsp = param.GetSingleChoiceWithSubParams("Action");
     Parameters spar = scwsp.GetSubParameters();
     switch (scwsp.Value){
         case 0:
             ProcessDataCreate(mdata, spar);
             break;
         case 1:
             ProcessDataEdit(mdata, spar);
             break;
         case 2:
             ProcessDataRename(mdata, spar);
             break;
         case 3:
             ProcessDataDelete(mdata, spar);
             break;
     }
 }