Example #1
0
 public void Init(Parameters parameters1, float paramNameWidth, int totalWidth)
 {
     Parameters = parameters1;
     int nrows = Parameters.GroupCount;
     parameterGroupPanels = new ParameterGroupPanel[nrows];
     tableLayoutPanel = new TableLayoutPanel();
     SuspendLayout();
     tableLayoutPanel.ColumnCount = 1;
     tableLayoutPanel.ColumnStyles.Clear();
     tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
     tableLayoutPanel.Dock = DockStyle.None;
     tableLayoutPanel.Location = new Point(0, 0);
     tableLayoutPanel.Name = "tableLayoutPanel";
     tableLayoutPanel.RowCount = nrows + 1;
     tableLayoutPanel.RowStyles.Clear();
     float totalHeight = 0;
     for (int i = 0; i < nrows; i++){
         float h = parameters1.GetGroup(i).Height + 26;
         tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize, h));
         totalHeight += h + 6;
     }
     tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
     tableLayoutPanel.Size = new Size(totalWidth, (int) totalHeight);
     tableLayoutPanel.TabIndex = 0;
     for (int i = 0; i < nrows; i++){
         AddParameterGroup(parameters1.GetGroup(i), i, paramNameWidth, totalWidth);
     }
     AutoScaleDimensions = new SizeF(6F, 13F);
     AutoScaleMode = AutoScaleMode.Font;
     Controls.Clear();
     Controls.Add(tableLayoutPanel);
     Name = "ParameterPanel";
     Size = new Size(totalWidth, (int) totalHeight);
     ResumeLayout(true);
 }
 public BoolWithSubParams(string name, bool value)
     : base(name)
 {
     Value = value;
     Default = value;
     SubParamsFalse = new Parameters();
     SubParamsTrue = new Parameters();
 }
 private static void AddIntSubParams(ICollection<IntParam> result, Parameters sp)
 {
     foreach (Parameter p in sp.GetAllParameters()){
         if (p is IntParam){
             result.Add((IntParam) p);
         } else if (p is ParameterWithSubParams){
             AddIntSubParams(result, ((ParameterWithSubParams) p).GetSubParameters());
         }
     }
 }
 public static void FilterRows(IMatrixData mdata, Parameters parameters, int[] rows)
 {
     bool reduceMatrix = GetReduceMatrix(parameters);
     if (reduceMatrix){
         mdata.ExtractExpressionRows(rows);
     } else{
         Array.Sort(rows);
         string[][] col = new string[mdata.RowCount][];
         for (int i = 0; i < col.Length; i++){
             bool contains = Array.BinarySearch(rows, i) >= 0;
             col[i] = contains ? new[]{"Keep"} : new[]{"Discard"};
         }
         mdata.AddCategoryColumn("Filter", "", col);
     }
 }
 public static void FilterColumns(IMatrixData mdata, Parameters parameters, int[] cols)
 {
     bool reduceMatrix = GetReduceMatrix(parameters);
     if (reduceMatrix){
         mdata.ExtractExpressionColumns(cols);
     } else{
         Array.Sort(cols);
         string[][] row = new string[mdata.ExpressionColumnCount][];
         for (int i = 0; i < row.Length; i++){
             bool contains = Array.BinarySearch(cols, i) >= 0;
             row[i] = contains ? new[]{"Keep"} : new[]{"Discard"};
         }
         mdata.AddCategoryRow("Filter", "", row);
     }
 }
Example #6
0
        public ParameterForm(Parameters parameters, string title, string helpDescription, string helpOutput,
			IList<string> helpSuppls)
        {
            InitializeComponent();
            parameterPanel1.Init(parameters);
            string text = "";
            if (!string.IsNullOrEmpty(helpDescription)){
                text += "\n\nDescription:\n " + helpDescription;
            }
            if (!string.IsNullOrEmpty(helpOutput)){
                text += "\n\nOutput:\n " + helpOutput;
            }
            if (helpSuppls != null){
                for (int i = 0; i < helpSuppls.Count; i++){
                    if (!string.IsNullOrEmpty(helpSuppls[i])){
                        text += "\n\nSuppl. table " + (i + 1) + ":\n " + helpSuppls[i];
                    }
                }
            }
            helpTextBox.Text = text;
            Text = title;
        }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
     float value = (float) param.GetDoubleParam("Value").Value;
     ReplaceMissingsByVal(value, mdata);
 }
Example #8
0
        public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, 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, processInfo.NumThreads);
            } else{
                string[][] catRow = mdata.GetCategoryRowAt(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 data, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, ProcessInfo processInfo)
        {
            bool falseAreIndicated = param.GetSingleChoiceParam("Indicated are").Value == 0;
            int catCol = param.GetSingleChoiceParam("In column").Value;
            string word = param.GetStringParam("Indicator").Value;
            int[] scoreColumns = param.GetMultiChoiceParam("Scores").Value;
            if (scoreColumns.Length == 0){
                processInfo.ErrString = "Please specify at least one column with scores.";
                return;
            }
            bool largeIsGood = param.GetBoolParam("Large values are good").Value;
            int[] showColumns = param.GetMultiChoiceParam("Display quantity").Value;
            if (showColumns.Length == 0){
                processInfo.ErrString = "Please select at least one quantity to display";
                return;
            }
            bool[] indCol = GetIndicatorColumn(falseAreIndicated, catCol, word, data);
            List<string> expColNames = new List<string>();
            List<float[]> expCols = new List<float[]>();
            foreach (int scoreColumn in scoreColumns){
                double[] vals = scoreColumn < data.NumericColumnCount
                    ? data.NumericColumns[scoreColumn]
                    : ArrayUtils.ToDoubles(data.GetExpressionColumn(scoreColumn - data.NumericColumnCount));
                string name = scoreColumn < data.NumericColumnCount
                    ? data.NumericColumnNames[scoreColumn] : data.ExpressionColumnNames[scoreColumn - data.NumericColumnCount];
                int[] order = GetOrder(vals, largeIsGood);
                CalcCurve(ArrayUtils.SubArray(indCol, order), showColumns, name, expCols, expColNames);
            }
            float[,] expData = ToMatrix(expCols);
            data.SetData(data.Name, expColNames, expData, new List<string>(), new List<string[]>(), new List<string>(),
                new List<string[][]>(), new List<string>(), new List<double[]>(), new List<string>(), new List<double[][]>());
        }
 public IAnalysisResult AnalyzeData(IMatrixData mdata, Parameters param, ProcessInfo processInfo)
 {
     return new SelectRowsManuallyResult(mdata);
 }
Example #11
0
 public int GetMaxThreads(Parameters parameters)
 {
     return int.MaxValue;
 }
 private static bool GetReduceMatrix(Parameters parameters)
 {
     return parameters.GetSingleChoiceParam("Filter mode").Value == 0;
 }
 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);
     }
 }
 private static void ProcessDataCreate(IMatrixData mdata, Parameters param)
 {
     string name = param.GetStringParam("Row name").Value;
     double[] groupCol = new double[mdata.ExpressionColumnCount];
     for (int i = 0; i < mdata.ExpressionColumnCount; i++){
         string ename = mdata.ExpressionColumnNames[i];
         double value = param.GetDoubleParam(ename).Value;
         groupCol[i] = value;
     }
     mdata.AddNumericRow(name, name, groupCol);
 }
Example #15
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 Parameters GetEditParameters(IMatrixData mdata)
 {
     Parameters[] subParams = new Parameters[mdata.NumericRowCount];
     for (int i = 0; i < subParams.Length; i++){
         subParams[i] = GetEditParameters(mdata, i);
     }
     List<Parameter> par = new List<Parameter>{
         new SingleChoiceWithSubParams("Numerical row")
         {Values = mdata.NumericRowNames, SubParams = subParams, Help = "Select the numerical row that should be edited."}
     };
     return new Parameters(par);
 }
        public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, 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;
            }
        }
 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,
			ref IDocumentData[] documents, ProcessInfo processInfo)
        {
            int[] cols = param.GetMultiChoiceParam("Columns").Value;
            int truncIndex = param.GetSingleChoiceParam("Use for truncation").Value;
            TestTruncation truncation = truncIndex == 0
                ? TestTruncation.Pvalue : (truncIndex == 1 ? TestTruncation.BenjaminiHochberg : TestTruncation.PermutationBased);
            double threshold = param.GetDoubleParam("Threshold value").Value;
            int sideInd = param.GetSingleChoiceParam("Side").Value;
            TestSide side;
            switch (sideInd){
                case 0:
                    side = TestSide.Both;
                    break;
                case 1:
                    side = TestSide.Left;
                    break;
                case 2:
                    side = TestSide.Right;
                    break;
                default:
                    throw new Exception("Never get here.");
            }
            foreach (int col in cols){
                float[] r = mdata.GetExpressionColumn(col);
                double[] pvals = CalcSignificanceA(r, side);
                string[][] fdr;
                switch (truncation){
                    case TestTruncation.Pvalue:
                        fdr = PerseusPluginUtils.CalcPvalueSignificance(pvals, threshold);
                        break;
                    case TestTruncation.BenjaminiHochberg:
                        fdr = PerseusPluginUtils.CalcBenjaminiHochbergFdr(pvals, threshold);
                        break;
                    default:
                        throw new Exception("Never get here.");
                }
                mdata.AddNumericColumn(mdata.ExpressionColumnNames[col] + " Significance A", "", pvals);
                mdata.AddCategoryColumn(mdata.ExpressionColumnNames[col] + " A significant", "", fdr);
            }
        }
        public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, ProcessInfo processInfo)
        {
            if (!mdata.HasQuality){
                processInfo.ErrString = "No quality data loaded.";
                return;
            }
            double threshold = param.GetDoubleParam("Threshold").Value;
            for (int i = 0; i < mdata.RowCount; i++){
                for (int j = 0; j < mdata.ExpressionColumnCount; j++){
                    float value = mdata.QualityValues[i, j];
                    if (mdata.QualityBiggerIsBetter){
                        if (value < threshold){
                            mdata[i, j] = float.NaN;
                        }
                    } else{
                        if (value > threshold){
                            mdata[i, j] = float.NaN;
                        }
                    }
                }
            }
        }
 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);
 }
        public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, 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);
            string[] colNames = GetColNames(mdata, cols);
            mdata.SetData("Summary", new List<string>(names.ToArray()), exVals, new List<string>(new[]{"Columns"}),
                new List<string[]>(new[]{colNames}), mdata.CategoryRowNames,
                TransformCategories(mdata, cols, mdata.ExpressionColumnCount), mdata.NumericRowNames,
                TransformNumeric(mdata.NumericRows, cols, mdata.ExpressionColumnCount), new List<string>(), new List<double[][]>());
        }
        public void ProcessData(IMatrixData data, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, 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 = PerseusPluginUtils.GetCategoryColumns(data, 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);
            }
        }
 private static void ProcessDataRename(IMatrixData mdata, Parameters param)
 {
     int groupColInd = param.GetSingleChoiceParam("Numerical row").Value;
     string newName = param.GetStringParam("New name").Value;
     string newDescription = param.GetStringParam("New description").Value;
     mdata.NumericRowNames[groupColInd] = newName;
     mdata.NumericRowDescriptions[groupColInd] = newDescription;
 }
        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;
        }
Example #26
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);
 }
 private static void ProcessDataDelete(IMatrixData mdata, Parameters param)
 {
     int groupColInd = param.GetSingleChoiceParam("Numerical row").Value;
     mdata.NumericRows.RemoveAt(groupColInd);
     mdata.NumericRowNames.RemoveAt(groupColInd);
     mdata.NumericRowDescriptions.RemoveAt(groupColInd);
 }
 public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables, ProcessInfo processInfo)
 {
 }
 public int GetMaxThreads(Parameters parameters)
 {
     return 1;
 }
 private static void ProcessDataEdit(IMatrixData mdata, Parameters param)
 {
     SingleChoiceWithSubParams s = param.GetSingleChoiceWithSubParams("Numerical row");
     int groupColInd = s.Value;
     Parameters sp = s.GetSubParameters();
     for (int i = 0; i < mdata.ExpressionColumnCount; i++){
         string t = mdata.ExpressionColumnNames[i];
         double x = sp.GetDoubleParam(t).Value;
         mdata.NumericRows[groupColInd][i] = x;
     }
 }