예제 #1
0
        public float CalculateDaviesBouldinIndex(List <List <string> > clusters)
        {
            //ClusterOutput clustOut;
            List <string> refStructues = new List <string>(clusters.Count);

            int []   dist;
            float [] avr     = new float[clusters.Count];
            float    measure = 0;

            for (int i = 0; i < clusters.Count; i++)
            {
                float sum = 0;
                if (clusters[i].Count == 0)
                {
                    continue;
                }
                //clustOut=jury.JuryOpt(clusters[i]);
                string refStr = dMeasure.GetReferenceStructure(clusters[i]);
                dist = dMeasure.GetDistance(refStr, clusters[i]);
                foreach (var item in dist)
                {
                    sum += item;
                }

                avr[i] = sum / dist.Length;

                refStructues.Add(refStr);
            }
            for (int i = 0; i < refStructues.Count; i++)
            {
                float max = 0;
                for (int j = 0; j < refStructues.Count; j++)
                {
                    int   cDist;
                    float v;
                    if (i == j)
                    {
                        continue;
                    }
                    cDist = dMeasure.GetDistance(refStructues[i], refStructues[j]);
                    v     = ((float)(avr[i] + avr[j])) / cDist;
                    if (v > max)
                    {
                        max = v;
                    }
                }
                measure += max;
            }

            return(measure / refStructues.Count);
        }
예제 #2
0
        private List <string> CreateCluster(int index)
        {
            List <string> items = new List <string>();
            List <string> ii    = new List <string>(dMeasure.structNames.Keys);

            for (int j = 0; j < pointMark.Length; j++)
            {
                if (!pointMark[j] && dMeasure.GetDistance(index, j) < threshold)
                {
                    items.Add(ii[j]);
                    pointMark[j] = true;
                }
            }

            return(items);
        }
예제 #3
0
 int GetDist(DistanceMeasure distance, string item1, string item2)
 {
     string[] aux1 = item1.Split(Path.DirectorySeparatorChar);
     string[] aux2 = item2.Split(Path.DirectorySeparatorChar);
     int v = distance.GetDistance(aux1[aux1.Length - 1], aux2[aux2.Length - 1]);
     if (v == distance.errorValue)
         v = errorValue;
     return v;
 }
예제 #4
0
        public ClusterOutput Run3DJury()
        {
            ClusterOutput output = new ClusterOutput();
            List <KeyValuePair <string, double> > li = new List <KeyValuePair <string, double> >();

            long[] distTab = new long[dMeasure.structNames.Count];

            progressRead = 1;

            dMeasure.CalcDistMatrix(new List <string>(dMeasure.structNames.Keys));

            maxV = dMeasure.structNames.Count + 1;

            for (int i = 0; i < dMeasure.structNames.Count; i++)
            {
                long sum = 0;
                for (int j = 0; j < dMeasure.structNames.Count; j++)
                {
                    sum += dMeasure.GetDistance(i, j);
                }
                distTab[i] = sum;
                currentV++;
            }

            KeyValuePair <string, double> v;

            List <string> structKeys = new List <string>(dMeasure.structNames.Keys);

            for (int m = 0; m < structKeys.Count; m++)
            {
                v = new KeyValuePair <string, double>(structKeys[m], (double)(distTab[m] / (100.0 * dMeasure.structNames.Count)));
                li.Add(v);
            }
            if (dMeasure.order == false)
            {
                li.Sort((firstPair, nextPair) =>
                {
                    return(nextPair.Value.CompareTo(firstPair.Value));
                });
            }
            else
            {
                li.Sort((firstPair, nextPair) =>
                {
                    return(firstPair.Value.CompareTo(nextPair.Value));
                });
            }

            output.juryLike = li;

            currentV             = maxV;
            output.runParameters = "Distance measure: " + this.dMeasure;
            return(output);
        }
예제 #5
0
        private double CalcDevCluster(DistanceMeasure dd, List <string> cluster, string refStruct)
        {
            double sum = 0;
            double v1 = 0, v2 = 0;

            if (dd == null)
            {
                dd = PrepareDistanceMeasure(cluster, distanceControl1.distDef, dirName);
            }

            foreach (var item in cluster)
            {
                int x = dd.GetDistance(refStruct, item) / 100;
                v1 += x;
                v2 += x * x;
            }
            v1  = v1 / cluster.Count;
            v1 *= v1;
            v2  = v2 / cluster.Count;
            sum = Math.Sqrt(v2 - v1);

            return(sum);
        }
예제 #6
0
        private HClusterNode ConnectDendrogs(AglomerativeType linkage)
        {
            List <Dictionary <int, int> > sim = new List <Dictionary <int, int> >();
            HClusterNode rootNode;
            int          maxV = 1000000000;
            int          minV = maxV - 1;

            while (minV != maxV && dendrogList.Count > 2)
            {
                int[,] distanceM = new int[dendrogList.Count, dendrogList.Count];
                minV             = maxV;
                for (int i = 0; i < dendrogList.Count; i++)
                {
                    for (int j = i + 1; j < dendrogList.Count; j++)
                    {
                        distanceM[i, j] = dMeasure.GetDistance(dendrogList[i].refStructure, dendrogList[j].refStructure);
                        //distanceM[i, j] = dMeasure.FindMinimalDistance(dendrogList[i], dendrogList[j],linkage);
                        if (distanceM[i, j] < minV)
                        {
                            minV = distanceM[i, j];
                        }
                    }
                }

                if (minV != maxV)
                {
                    sim.Clear();
                    for (int i = 0; i < dendrogList.Count; i++)
                    {
                        Dictionary <int, int> aux = new Dictionary <int, int>();
                        aux.Add(i, 0);
                        for (int j = i + 1; j < dendrogList.Count; j++)
                        {
                            if (distanceM[i, j] == minV)
                            {
                                aux.Add(j, 0);
                            }
                        }
                        if (aux.Keys.Count > 1)
                        {
                            sim.Add(aux);
                        }
                    }
                    for (int i = 0; i < sim.Count; i++)
                    {
                        for (int j = i + 1; j < sim.Count; j++)
                        {
                            foreach (var item in sim[j].Keys)
                            {
                                if (sim[i].ContainsKey(item))
                                {
                                    foreach (var itemCopy in sim[j].Keys)
                                    {
                                        if (!sim[i].ContainsKey(itemCopy))
                                        {
                                            sim[i].Add(itemCopy, 0);
                                        }
                                    }

                                    sim.RemoveAt(j);
                                    i = -1;
                                    j = sim.Count;
                                    break;
                                }
                            }
                        }
                    }
                    List <HClusterNode> lNodes     = new List <HClusterNode>();
                    List <int>          removeList = new List <int>();
                    for (int n = sim.Count - 1; n >= 0; n--)
                    {
                        HClusterNode node = new HClusterNode();
                        node.joined    = new List <HClusterNode>();
                        node.setStruct = new List <string>();
                        lNodes.Clear();
                        foreach (var item in sim[n].Keys)
                        {
                            if (!lNodes.Contains(dendrogList[item]))
                            {
                                lNodes.Add(dendrogList[item]);
                            }
                        }

                        node           = JoinNodes(lNodes);
                        node.levelDist = minV;
                        node.realDist  = dMeasure.GetRealValue(minV);
                        List <int> keys = new List <int>(sim[n].Keys);
                        keys.Sort();
                        dendrogList[keys[0]] = node;

                        for (int i = keys.Count - 1; i >= 1; i--)
                        {
                            if (!removeList.Contains(keys[i]))
                            {
                                removeList.Add(keys[i]);
                            }
                            // dendrogList.RemoveAt(keys[i]);
                        }
                    }
                    removeList.Sort();
                    for (int i = removeList.Count - 1; i >= 0; i--)
                    {
                        dendrogList.RemoveAt(removeList[i]);
                    }
                }
            }

            if (dendrogList.Count > 1)
            {
                rootNode = JoinNodes(dendrogList);
            }
            else
            {
                rootNode = dendrogList[0];
            }

            return(rootNode);
        }
예제 #7
0
        private void CalculateDistToAll()
        {
            tableDist = new DataTable();
            tableDist.Columns.Add("Reference structure", typeof(string));
            tableDist.Columns.Add("Distance", typeof(double));
            tableDist.Columns.Add("Cluster size", typeof(int));

            List <string> fileNames=new List<string>();
            if (textBox1.Text != null && textBox1.Text.Length > 5 && File.Exists(textBox1.Text))
            {
                fileNames.Add(textBox1.Text);
                string[] tmp = textBox1.Text.Split(Path.DirectorySeparatorChar);
                native = tmp[tmp.Length - 1];
            }

            bestStr = float.MaxValue;
            foreach (var item in selected)
            {
                foreach (var lItem in item)
                {
                    fileNames.Add(dirName+Path.DirectorySeparatorChar+lItem);
                    switch (distanceControl1.distDef)
                    {
                        case DistanceMeasures.HAMMING:
                            dist = new JuryDistance(fileNames, alignFile, false, distanceControl1.profileName);
                            break;
                        case DistanceMeasures.MAXSUB:
                            dist = new MaxSub(fileNames, alignFile, false);
                            break;
                        case DistanceMeasures.RMSD:
                            dist = new Rmsd(fileNames, alignFile, false, distanceControl1.CAtoms);                           
                            break;
                    }
                    dist.InitMeasure();
                    float distF = float.MaxValue;
                    if (distanceControl1.distDef != DistanceMeasures.HAMMING)
                    {
                        if (!dist.pdbs.molDic.ContainsKey(native) || !dist.pdbs.molDic.ContainsKey(lItem))
                            continue;

                        if (dist.pdbs.molDic[native].mol.Chains[0].chainSequence.Length > dist.pdbs.molDic[lItem].mol.Chains[0].chainSequence.Length)
                            distF = dist.GetDistance(native, lItem) / 100.0f;
                        else
                            distF = dist.GetDistance(lItem, native) / 100.0f;
                    }
                    else
                        distF=dist.GetDistance(native, lItem) / 100.0f;

                    tableDist.Rows.Add(lItem, Convert.ToDouble(String.Format("{0:0.00}", distF)),item.Count);
                    distList.Add(lItem, distF);
                    if (bestStr > distF)
                        bestStr = distF;
                    fileNames.RemoveAt(fileNames.Count - 1);
                    currentV++;
                }
            }

        }
예제 #8
0
        public void CalcStat()
        {
            
            List<string> fileNames = new List<string>();
            List<string> refStructures = new List<string>();
            DistanceMeasures measure = distanceControl1.distDef;
            DistanceMeasure distTemp = null;
            double distRes=0;
            maxV = selected.Count;
            distList.Clear();
            try
            {

                tableRes = new DataTable();

                tableRes.Columns.Add("Cluster Size", typeof(int));
                tableRes.Columns.Add("Reference structure", typeof(string));
                tableRes.Columns.Add("Distance", typeof(double));
                tableRes.Columns.Add("Hidden1", typeof(int));
                tableRes.Columns.Add("Hidden2", typeof(string));


                if (checkBoxSable.Checked)
                {
                    tableRes.Columns.Add("Dist to Sable", typeof(double));
                    maxV *= 2;
                }
                if (checkBox1.Checked)
                {
                    for (int i = 0; i < selected.Count; i++)
                        maxV += selected[i].Count;
                }
                fileNames.Add(textBox1.Text);

                jury1D jury = new jury1D();
                if (distanceControl1.reference)
                    jury.PrepareJury(dirName, alignFile, distanceControl1.referenceProfile);

                refStructures.Clear();
                selected.Sort(delegate(List<string> first, List<string> second)
                { return first.Count.CompareTo(second.Count); });

                selected.Reverse();
                //    dataGridView1.Rows.Add(selected.Count);

                for (int i = 0; i < selected.Count; i++)
                {
                    string refD = selected[i][0];
                    ClusterOutput juryO = null;
                    if (distanceControl1.reference)
                    {

                        if (selected[i].Count > 5)
                        {
                            juryO = jury.JuryOptWeights(selected[i]);
                            if (juryO == null)
                                continue;
                            refD = juryO.juryLike[0].Key;
                            if (!fileNames.Contains(dirName + Path.DirectorySeparatorChar + juryO.juryLike[0].Key))
                            {
                                fileNames.Add(dirName + Path.DirectorySeparatorChar + juryO.juryLike[0].Key);
                                refStructures.Add(dirName + Path.DirectorySeparatorChar + refD);
                            }
                        }
                        else
                            if (!fileNames.Contains(dirName + Path.DirectorySeparatorChar + selected[i][0]))
                            {
                                fileNames.Add(dirName + Path.DirectorySeparatorChar + selected[i][0]);
                                refStructures.Add(dirName + Path.DirectorySeparatorChar + selected[i][0]);
                            }

                    }
                    else
                    {

                        dist = PrepareDistanceMeasure(selected[i], measure, dirName);
                        distTemp = dist;
                        refD = dist.GetReferenceStructure(selected[i]);
                        fileNames.Add(dirName + Path.DirectorySeparatorChar + refD);
                        refStructures.Add(dirName + Path.DirectorySeparatorChar + refD);
                    }

                    if (fileNames.Count == 2)
                    {
                        switch (measure)
                        {
                            case DistanceMeasures.HAMMING:
                                dist = new JuryDistance(fileNames, alignFile, false, distanceControl1.profileName);
                                break;
                            case DistanceMeasures.MAXSUB:
                                dist = new MaxSub(fileNames, null, false);
                                break;
                            case DistanceMeasures.RMSD:
                                dist = new Rmsd(fileNames, null, false, distanceControl1.CAtoms);
                                break;

                        }
                        dist.InitMeasure();
                        distRes = Convert.ToDouble(String.Format("{0:0.00}", dist.GetDistance(native, refD) / 100.0));
                    }
                    fileNames.RemoveAt(fileNames.Count - 1);
                    if (checkBoxSable.Checked && refStructures.Count > 0)
                        tableRes.Rows.Add(selected[i].Count, refD, distRes, i, dirName, 0.0);
                    else
                        tableRes.Rows.Add(selected[i].Count, refD, distRes, i, dirName);
                    currentV++;
                }
                if (checkBoxSable.Checked && refStructures.Count > 0)
                {
                    Dictionary<string, double> res = null;// SableDist(refStructures);
                    for (int i = 0; i < refStructures.Count; i++)
                    {
                        if (res.ContainsKey(Path.GetFileName(refStructures[i])))
                        {
                            DataRow dr = tableDist.Rows[i];                            
                            dr[5] = Convert.ToDouble(String.Format("{0:0.00}", res[Path.GetFileName(refStructures[i])]));
                        }
                    }
                }
                if (checkBox1.Checked)
                {
                    CalculateDistToAll();
                }

            }
            catch(Exception ex)
            {
                exc = ex;
            }
        }
예제 #9
0
        private double CalcDevCluster(DistanceMeasure dd, List<string> cluster, string refStruct)
        {            
            double sum = 0;
            double v1 = 0, v2 = 0;

            if(dd==null)
                dd = PrepareDistanceMeasure(cluster, distanceControl1.distDef, dirName);

            foreach (var item in cluster)
            {
                int x = dd.GetDistance(refStruct, item) / 100;
                v1 += x;
                v2 += x * x;

            }
            v1 = v1 / cluster.Count;
            v1 *= v1;
            v2 = v2 / cluster.Count;
            sum = Math.Sqrt(v2 - v1);

            return sum;
        }
예제 #10
0
        private void CalculateDistToAll()
        {
            tableDist = new DataTable();
            tableDist.Columns.Add("Reference structure", typeof(string));
            tableDist.Columns.Add("Distance", typeof(double));
            tableDist.Columns.Add("Cluster size", typeof(int));

            List <string> fileNames = new List <string>();

            if (textBox1.Text != null && textBox1.Text.Length > 5 && File.Exists(textBox1.Text))
            {
                fileNames.Add(textBox1.Text);
                string[] tmp = textBox1.Text.Split(Path.DirectorySeparatorChar);
                native = tmp[tmp.Length - 1];
            }

            bestStr = float.MaxValue;
            foreach (var item in selected)
            {
                foreach (var lItem in item)
                {
                    fileNames.Add(dirName + Path.DirectorySeparatorChar + lItem);
                    switch (distanceControl1.distDef)
                    {
                    case DistanceMeasures.HAMMING:
                        dist = new JuryDistance(fileNames, alignFile, false, distanceControl1.profileName);
                        break;

                    case DistanceMeasures.MAXSUB:
                        dist = new MaxSub(fileNames, alignFile, false);
                        break;

                    case DistanceMeasures.RMSD:
                        dist = new Rmsd(fileNames, alignFile, false, distanceControl1.CAtoms);
                        break;
                    }
                    dist.InitMeasure();
                    float distF = float.MaxValue;
                    if (distanceControl1.distDef != DistanceMeasures.HAMMING)
                    {
                        if (!dist.pdbs.molDic.ContainsKey(native) || !dist.pdbs.molDic.ContainsKey(lItem))
                        {
                            continue;
                        }

                        if (dist.pdbs.molDic[native].mol.Chains[0].chainSequence.Length > dist.pdbs.molDic[lItem].mol.Chains[0].chainSequence.Length)
                        {
                            distF = dist.GetDistance(native, lItem) / 100.0f;
                        }
                        else
                        {
                            distF = dist.GetDistance(lItem, native) / 100.0f;
                        }
                    }
                    else
                    {
                        distF = dist.GetDistance(native, lItem) / 100.0f;
                    }

                    tableDist.Rows.Add(lItem, Convert.ToDouble(String.Format("{0:0.00}", distF)), item.Count);
                    distList.Add(lItem, distF);
                    if (bestStr > distF)
                    {
                        bestStr = distF;
                    }
                    fileNames.RemoveAt(fileNames.Count - 1);
                    currentV++;
                }
            }
        }
예제 #11
0
        public void CalcStat()
        {
            List <string>    fileNames     = new List <string>();
            List <string>    refStructures = new List <string>();
            DistanceMeasures measure       = distanceControl1.distDef;
            DistanceMeasure  distTemp      = null;
            double           distRes       = 0;

            maxV = selected.Count;
            distList.Clear();
            try
            {
                tableRes = new DataTable();

                tableRes.Columns.Add("Cluster Size", typeof(int));
                tableRes.Columns.Add("Reference structure", typeof(string));
                tableRes.Columns.Add("Distance", typeof(double));
                tableRes.Columns.Add("Hidden1", typeof(int));
                tableRes.Columns.Add("Hidden2", typeof(string));


                if (checkBoxSable.Checked)
                {
                    tableRes.Columns.Add("Dist to Sable", typeof(double));
                    maxV *= 2;
                }
                if (checkBox1.Checked)
                {
                    for (int i = 0; i < selected.Count; i++)
                    {
                        maxV += selected[i].Count;
                    }
                }
                fileNames.Add(textBox1.Text);

                jury1D jury = new jury1D();
                if (distanceControl1.reference)
                {
                    jury.PrepareJury(dirName, alignFile, distanceControl1.referenceProfile);
                }

                refStructures.Clear();
                selected.Sort(delegate(List <string> first, List <string> second)
                              { return(first.Count.CompareTo(second.Count)); });

                selected.Reverse();
                //    dataGridView1.Rows.Add(selected.Count);

                for (int i = 0; i < selected.Count; i++)
                {
                    string        refD  = selected[i][0];
                    ClusterOutput juryO = null;
                    if (distanceControl1.reference)
                    {
                        if (selected[i].Count > 5)
                        {
                            juryO = jury.JuryOptWeights(selected[i]);
                            if (juryO == null)
                            {
                                continue;
                            }
                            refD = juryO.juryLike[0].Key;
                            if (!fileNames.Contains(dirName + Path.DirectorySeparatorChar + juryO.juryLike[0].Key))
                            {
                                fileNames.Add(dirName + Path.DirectorySeparatorChar + juryO.juryLike[0].Key);
                                refStructures.Add(dirName + Path.DirectorySeparatorChar + refD);
                            }
                        }
                        else
                        if (!fileNames.Contains(dirName + Path.DirectorySeparatorChar + selected[i][0]))
                        {
                            fileNames.Add(dirName + Path.DirectorySeparatorChar + selected[i][0]);
                            refStructures.Add(dirName + Path.DirectorySeparatorChar + selected[i][0]);
                        }
                    }
                    else
                    {
                        dist     = PrepareDistanceMeasure(selected[i], measure, dirName);
                        distTemp = dist;
                        refD     = dist.GetReferenceStructure(selected[i]);
                        fileNames.Add(dirName + Path.DirectorySeparatorChar + refD);
                        refStructures.Add(dirName + Path.DirectorySeparatorChar + refD);
                    }

                    if (fileNames.Count == 2)
                    {
                        switch (measure)
                        {
                        case DistanceMeasures.HAMMING:
                            dist = new JuryDistance(fileNames, alignFile, false, distanceControl1.profileName);
                            break;

                        case DistanceMeasures.MAXSUB:
                            dist = new MaxSub(fileNames, null, false);
                            break;

                        case DistanceMeasures.RMSD:
                            dist = new Rmsd(fileNames, null, false, distanceControl1.CAtoms);
                            break;
                        }
                        dist.InitMeasure();
                        distRes = Convert.ToDouble(String.Format("{0:0.00}", dist.GetDistance(native, refD) / 100.0));
                    }
                    fileNames.RemoveAt(fileNames.Count - 1);
                    if (checkBoxSable.Checked && refStructures.Count > 0)
                    {
                        tableRes.Rows.Add(selected[i].Count, refD, distRes, i, dirName, 0.0);
                    }
                    else
                    {
                        tableRes.Rows.Add(selected[i].Count, refD, distRes, i, dirName);
                    }
                    currentV++;
                }
                if (checkBoxSable.Checked && refStructures.Count > 0)
                {
                    Dictionary <string, double> res = null;// SableDist(refStructures);
                    for (int i = 0; i < refStructures.Count; i++)
                    {
                        if (res.ContainsKey(Path.GetFileName(refStructures[i])))
                        {
                            DataRow dr = tableDist.Rows[i];
                            dr[5] = Convert.ToDouble(String.Format("{0:0.00}", res[Path.GetFileName(refStructures[i])]));
                        }
                    }
                }
                if (checkBox1.Checked)
                {
                    CalculateDistToAll();
                }
            }
            catch (Exception ex)
            {
                exc = ex;
            }
        }
예제 #12
0
 int GetDist(DistanceMeasure distance, string item1, string item2)
 {
     string[] aux1 = item1.Split(Path.DirectorySeparatorChar);
     string[] aux2 = item2.Split(Path.DirectorySeparatorChar);
     int v = distance.GetDistance(aux1[aux1.Length - 1], aux2[aux2.Length - 1]);
     if (v == distance.errorValue)
         v = errorValue;
     return v;
 }