示例#1
0
        private void MakeDendrogs(AglomerativeType linkage)
        {
            ClusterOutput       outCl;
            hierarchicalCluster dendrog = new hierarchicalCluster(dMeasure, input, dirName);

            currentV = 0;
            maxV     = leaves.Count + 1;
            double remProgress = currentProgress;

            for (int i = 0; i < leaves.Count; i++)
            {
                HClusterNode c = leaves[i];
                dendrog.mustRefStructure = c.setStruct[0];
                outCl = dendrog.HierarchicalClustering(c.setStruct);
                dendrogList.Add(c);
                c.levelDist    = outCl.hNode.levelDist;
                c.realDist     = dMeasure.GetRealValue(c.levelDist);
                c.refStructure = outCl.hNode.refStructure;
                if (outCl.hNode.joined != null)
                {
                    c.joined = new List <HClusterNode>();
                    foreach (var item in outCl.hNode.joined)
                    {
                        c.joined.Add(item);
                    }
                }
                currentV++;
                currentProgress = remProgress + 1.0 / maxProgress * (double)currentV / maxV;
            }
            maxV            = currentV;
            currentProgress = remProgress;
        }
 public hierarchicalCluster(DistanceMeasure dMeasure, HierarchicalCInput hier, string dirName)
 {
     this.dMeasure    = dMeasure;
     this.linkageType = hier.linkageType;
     this.dirName     = dirName;
     progressRead     = 0;
     hierOpt          = hier;
 }
 public HashClusterDendrog(DCDFile dcd, HashCInput input, HierarchicalCInput dendrogOpt) : base(dcd, input)
 {
     this.dMeasure       = dendrogOpt.distance;
     this.linkageType    = dendrogOpt.linkageType;
     this.atoms          = dendrogOpt.atoms;
     this.jury1d         = dendrogOpt.reference1DjuryH;
     this.profileName    = dendrogOpt.hammingProfile;
     this.refJuryProfile = dendrogOpt.jury1DProfileH;
     hier = dendrogOpt;
 }
示例#4
0
 public FastDendrog(DistanceMeasure dMeasure, HierarchicalCInput input, string dirName)
 {
     this.dMeasure     = dMeasure;
     this.initNodesNum = input.numInitNodes;
     this.linkage      = input.linkageType;
     this.useKMeans    = input.ItMeans;
     this.hConcensus   = input.HConsensus;
     this.kMeansIter   = input.ItNum;
     this.dirName      = dirName;
     this.input        = input;
 }
  public HashClusterDendrog(string dirName, string alignFile, HashCInput input, DistanceMeasures dMeasure, AglomerativeType linkageType, PDB.PDBMODE atoms, bool jury1d, string alignFileName,
                                       string profileName = null, string refJuryProfile = null):base(dirName,alignFile,input)
 {
     this.dMeasure=dMeasure;
     this.linkageType=linkageType;
     this.atoms = atoms;
     this.jury1d = jury1d;
     this.profileName = profileName;
     this.refJuryProfile = refJuryProfile;
     this.dirName = dirName;
 }
示例#6
0
 public FastDendrog(DistanceMeasure dMeasure,HierarchicalCInput input,string dirName)
 {
     this.dMeasure = dMeasure;
     this.initNodesNum = input.numInitNodes;
     this.linkage = input.linkageType;
     this.useKMeans = input.ItMeans;
     this.hConcensus = input.HConsensus;
     this.kMeansIter = input.ItNum;
     this.dirName = dirName;
     this.input = input;
   
 }
		//private jury1D jury;

		public hierarchicalCluster (DistanceMeasure dMeasure, AglomerativeType linkageType,string dirName)
		{
			this.dMeasure=dMeasure;
            this.linkageType = linkageType;
            this.dirName = dirName;
		}
示例#8
0
        //private jury1D jury;

        public hierarchicalCluster(DistanceMeasure dMeasure, AglomerativeType linkageType, string dirName)
        {
            this.dMeasure    = dMeasure;
            this.linkageType = linkageType;
            this.dirName     = dirName;
        }
示例#9
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);
        }
示例#10
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;
        }
示例#11
0
 private void MakeDendrogs(AglomerativeType linkage)
 {
     ClusterOutput outCl;
     hierarchicalCluster dendrog = new hierarchicalCluster(dMeasure,linkage,dirName);
     currentV = 0;
     maxV = leaves.Count+1;
     double remProgress = currentProgress;
     for(int i=0;i<leaves.Count;i++)
     {
         HClusterNode c = leaves[i];
         dendrog.mustRefStructure = c.setStruct[0];
         outCl = dendrog.HierarchicalClustering(c.setStruct);
         dendrogList.Add(c);
         c.levelDist = outCl.hNode.levelDist;
         c.realDist = dMeasure.GetRealValue(c.levelDist);
         c.refStructure = outCl.hNode.refStructure;
         if(outCl.hNode.joined!=null)
         {
             c.joined = new List<HClusterNode>();
             foreach (var item in outCl.hNode.joined)
                 c.joined.Add(item);
         }
         currentV++;
         currentProgress=remProgress+1.0/maxProgress* (double)currentV / maxV;
     }
     maxV = currentV;
     currentProgress = remProgress;
 }
示例#12
0
        public KeyValuePair <int, int> FindMinimalDistance(HClusterNode clust1, HClusterNode clust2, AglomerativeType linkageType)
        {
            int dist  = 0;
            int index = 0;
            int min   = 0;

            switch (linkageType)
            {
            case AglomerativeType.SINGLE:
                min = Int32.MaxValue;
                foreach (var item1 in clust1.setStruct)
                {
                    int v = hashIndex[item1];
                    foreach (var item2 in clust2.setStruct)
                    {
                        dist = GetDistance(v, hashIndex[item2]);
                        if (dist < min)
                        {
                            min   = dist;
                            index = GetIndex(v, hashIndex[item2]);
                        }
                    }
                }
                break;

            case AglomerativeType.AVERAGE:
                dist = GetDistance(hashIndex[clust1.refStructure], hashIndex[clust2.refStructure]);

                index = GetIndex(hashIndex[clust1.refStructure], hashIndex[clust2.refStructure]);
                break;

            case AglomerativeType.COMPLETE:
                min = Int32.MinValue;
                foreach (var item1 in clust1.setStruct)
                {
                    int v = hashIndex[item1];
                    foreach (var item2 in clust2.setStruct)
                    {
                        dist = GetDistance(v, hashIndex[item2]);
                        if (dist > min)
                        {
                            min   = dist;
                            index = GetIndex(v, hashIndex[item2]);
                        }
                    }
                }
                break;
            }
            return(new KeyValuePair <int, int>(dist, index));
        }