Exemplo n.º 1
0
        private static string GetMedoidImageString(StatisticalResultCsv item)
        {
            try
            {
                //string labelFile = $"{Config.WorkingFolder}\\{item.Method}\\{item.Dataset}\\individuals\\{item.File}";
                DegradomeType dt;
                Enum.TryParse(item.Degredome, out dt);
                FeatureType ft = FeatureTypeExtension.FromString(item.DataType);

                double[,] X = Ezfx.Csv.Ex.CsvMatrix.Read($"{Config.WorkingFolder}\\cs_datasets\\{item.Dataset}.csv");


                //if (item.Method.ToUpper() == "KMEDOIDS")
                //{
                //    medoidIndices = labels.Distinct().OrderBy(c => c).ToArray();
                //}
                //else if (ft != FeatureType.Reactivity)
                //{
                //    medoidIndices = CsMetrics.GetMedoidsByDistanceMatrix(labelFile, item.Dataset).Select(c => c.Index).ToArray();
                //}
                //else
                //{
                //    medoidIndices = CsMetrics.GetMedoids(labelFile, item.Dataset).Select(c => c.Index).ToArray();
                //}

                //medoidIndices = ft == FeatureType.Reactivity ? CsMetrics.GetMedoids(labelFile, item.Dataset).Select(c => c.Index).ToArray() : FileExtension.Readlabels(labelFile).Distinct().ToArray();

                string medoidImageString = "#### Structure\r\n\r\nFor clustering algorithms using reactivity, the structure is for reference only .\r\n\r\n";
                int    index             = 0;

                string[] centerBitmapFiles = new string[medoidIndices.Length];
                string[] annotation        = new string[medoidIndices.Length];
                for (int i = 0; i < medoidIndices.Length; i++)
                {
                    centerBitmapFiles[i] =
                        $"{Config.CsStrucFolder}\\plot\\{dt}_{item.Length}_{medoidIndices[i]}.png";
                    annotation[i] = $"Medoid {i}";
                }

                if (ft == FeatureType.RnaDistance)
                {
                    double[,] medoidDistanceMatrix = Clustering.Metrics.GetSubDistanceMatrix(X, medoidIndices);
                    medoidImageString += Rmd.StartRBlock("distance_matrx");
                    medoidImageString += Rmd.PrintMatrix(medoidDistanceMatrix);
                    medoidImageString += Rmd.EndRBlock();
                    if (medoidIndices.Length == 3)
                    {
                        string guid = Guid.NewGuid().ToString().Replace("-", "_");
                        string file = $"{Config.WorkingFolder}\\reports\\figure\\{guid}.png";
                        ImageHelper.DistanceTriangle(file, centerBitmapFiles, MathEx.DistanceMatrixToTriangle(medoidDistanceMatrix));
                        medoidImageString += Rmd.InsertImage(file, "distance");
                    }
                }

                int[][] samples = Metrics.Sample(labels, 20);



                for (int i = 0; i < medoidIndices.Length; i++)
                {
                    medoidImageString += $"##### Centre of Cluster {index} (Data Point {medoidIndices[i]})\r\n\r\n";
                    medoidImageString += Rmd.InsertImage(centerBitmapFiles[i], "Cleavage site structure");
                    if (ft == FeatureType.RnaDistance)
                    {
                        string thumbFile = GetFilename();
                        medoidImageString += $"Other structures of the this group:\r\n\r\n";
                        medoidImageString += $"![Cleavage site structure]({thumbFile.Replace("\\", "\\\\")})\r\n\r\n";
                        GenerateGroupThumbnails(thumbFile, item, samples[i]);
                        //star
                        if (medoidIndices.Length == 3)
                        {
                            medoidImageString += $"examine the first of the above:\r\n\r\n";
                            string starFile = GetFilename();
                            medoidImageString += $"![Cleavage site structure]({starFile.Replace("\\", "\\\\")})\r\n\r\n";
                            int first = samples[i][0];
                            ImageHelper.Star(starFile,
                                             $"{Config.WorkingFolder}\\cs_rna_struct\\plot\\{item.Degredome}_{item.Length}_{first + 1}.png",
                                             $"CS {first + 1}",
                                             centerBitmapFiles, annotation,
                                             new float[] { (float)X[first, medoidIndices[0]], (float)X[first, medoidIndices[1]], (float)X[first, medoidIndices[2]] }
                                             );
                        }
                    }
                    index++;
                }
                return(medoidImageString);
            }
            catch (NotImplementedException)
            {
                //throw;
                return(string.Empty);
            }
        }