private static void RandomizeConstantRegion(int[] o, int startInd, int endInd)
 {
     int len = endInd - startInd;
     Random2 r = new Random2();
     int[] p = r.NextPermutation(len);
     int[] permuted = new int[len];
     for (int i = 0; i < len; i++){
         permuted[i] = o[startInd + p[i]];
     }
     Array.Copy(permuted, 0, o, startInd, len);
 }
        public void ProcessData(IMatrixData mdata, Parameters param, ref IMatrixData[] supplTables,
			ref IDocumentData[] documents, ProcessInfo processInfo)
        {
            int nrows = param.GetIntParam("Number of rows").Value;
            nrows = Math.Min(nrows, mdata.RowCount);
            Random2 rand = new Random2();
            int[] rows = ArrayUtils.SubArray(rand.NextPermutation(mdata.RowCount), nrows);
            PerseusPluginUtils.FilterRows(mdata, param, rows);
        }