private void RunKMeans(string name, string dirName, string alignFile = null, DCDFile dcd = null) { DateTime cpuPart1 = DateTime.Now; ClusterOutput clustOut; DistanceMeasure distance = null; if (dcd == null) { distance = CreateMeasure(name, dirName, opt.kmeans.kDistance, opt.kmeans.kAtoms, opt.kmeans.reference1Djury, alignFile, opt.kmeans.hammingProfile, opt.kmeans.jury1DProfile); } else { distance = CreateMeasureForDCD(dcd, opt.kmeans.kDistance, opt.kmeans.kAtoms, opt.kmeans.reference1Djury, opt.kmeans.alignmentFileName, opt.kmeans.hammingProfile, opt.kmeans.jury1DProfile); } kMeans km; km = new kMeans(distance, opt.kmeans.kMeans_init); if (beginJob != null) { beginJob(currentProcessName, km.ToString(), dirName, distance.ToString()); } progressDic.Add(name, km); distance.InitMeasure(); DateTime cpuPart2 = DateTime.Now; clType = km.ToString(); if ((int)opt.kmeans.maxK <= 1) { throw new Exception("k in k-Means must be bigger then 1, right now is: " + (int)opt.kmeans.maxK); } if (distance.structNames.Count < 10) { throw new Exception("Number of structures to cluster must be bigger then 10 right now is: " + distance.structNames.Count); } clustOut = km.kMeansLevel((int)opt.kmeans.maxK, opt.kmeans.maxIter, new List <string>(distance.structNames.Keys)); UpdateOutput(name, dirName, alignFile, clustOut, distance.ToString(), cpuPart1, cpuPart2, km); GC.SuppressFinalize(distance); }
private void RunHKMeans(string name, string dirName, string alignFile = null, DCDFile dcd = null) { DateTime cpuPart1 = DateTime.Now; ClusterOutput clustOut = null; DistanceMeasure distance = null; if (dcd == null) { distance = CreateMeasure(name, dirName, opt.hierarchical.distance, opt.hierarchical.atoms, opt.hierarchical.reference1DjuryKmeans, alignFile, opt.hierarchical.hammingProfile, opt.hierarchical.jury1DProfileKmeans); } else { distance = CreateMeasureForDCD(dcd, opt.hierarchical.distance, opt.hierarchical.atoms, opt.hierarchical.reference1DjuryKmeans, opt.hierarchical.alignmentFileName, opt.hierarchical.hammingProfile, opt.hierarchical.jury1DProfileKmeans); } kMeans km; km = new kMeans(distance, true); if (beginJob != null) { beginJob(currentProcessName, km.ToString(), dirName, distance.ToString()); } progressDic.Add(name, km); DateTime cpuPart2 = DateTime.Now; distance.InitMeasure(); clType = km.ToString(); km.BMIndex = opt.hierarchical.indexDB; km.threshold = opt.hierarchical.numberOfStruct; km.maxRepeat = opt.hierarchical.repeatTime; km.maxK = opt.hierarchical.maxK; clustOut = km.HierarchicalKMeans(); UpdateOutput(name, dirName, alignFile, clustOut, distance.ToString(), cpuPart1, cpuPart2, km); }
ClusterOutput DivideSpace1DJury(List <string> list) { ClusterOutput outC, finalOut = new ClusterOutput(); outC = jury.JuryOptWeights(list); double dev = CalcStandDev(outC); List <string> clust1 = new List <string>(); List <string> clust2 = new List <string>(); dev += dev; if (useKMeans) { clust1.Add(outC.juryLike[0].Key); clust1.Add(outC.juryLike[outC.juryLike.Count - 1].Key); kMeans km = new kMeans(dMeasure); return(km.kMeansRun(kMeansIter, list, clust1)); } else { for (int i = 0; i < outC.juryLike.Count; i++) { if (i < outC.juryLike.Count / 2) { clust1.Add(outC.juryLike[i].Key); } else { clust2.Add(outC.juryLike[i].Key); } } finalOut.clusters = new List <List <string> >(); finalOut.clusters.Add(clust1); finalOut.clusters.Add(clust2); } return(finalOut); }
private void RunKMeans(string name, string dirName, string alignFile=null, DCDFile dcd = null) { DateTime cpuPart1 = DateTime.Now; ClusterOutput clustOut; DistanceMeasure distance = null; if(dcd==null) distance = CreateMeasure(name,dirName,opt.kmeans.kDistance, opt.kmeans.kAtoms, opt.kmeans.reference1Djury, alignFile, opt.kmeans.hammingProfile, opt.kmeans.jury1DProfile); else distance =CreateMeasureForDCD(dcd, opt.kmeans.kDistance, opt.kmeans.kAtoms, opt.kmeans.reference1Djury, opt.kmeans.alignmentFileName, opt.kmeans.hammingProfile, opt.kmeans.jury1DProfile); kMeans km; km = new kMeans(distance, opt.kmeans.kMeans_init); progressDic.Add(name, km); distance.InitMeasure(); DateTime cpuPart2 = DateTime.Now; clType = km.ToString(); if ((int)opt.kmeans.maxK <= 1) throw new Exception("k in k-Means must be bigger then 1, right now is: " + (int)opt.kmeans.maxK); if (distance.structNames.Count < 10) throw new Exception("Number of structures to cluster must be bigger then 10 right now is: " + distance.structNames.Count); clustOut = km.kMeansLevel((int)opt.kmeans.maxK, opt.kmeans.maxIter,new List <string>(distance.structNames.Keys)); UpdateOutput(name, dirName,alignFile, clustOut, distance.ToString(), cpuPart1, cpuPart2,km); GC.SuppressFinalize(distance); }
private void RunHKMeans(string name, string dirName, string alignFile=null,DCDFile dcd = null) { DateTime cpuPart1 = DateTime.Now; ClusterOutput clustOut = null; DistanceMeasure distance = null; if(dcd==null) distance = CreateMeasure(name,dirName,opt.hierarchical.distance, opt.hierarchical.atoms, opt.hierarchical.reference1DjuryKmeans, alignFile, opt.hierarchical.hammingProfile, opt.hierarchical.jury1DProfileKmeans); else distance = CreateMeasureForDCD(dcd, opt.hierarchical.distance, opt.hierarchical.atoms, opt.hierarchical.reference1DjuryKmeans, opt.hierarchical.alignmentFileName, opt.hierarchical.hammingProfile, opt.hierarchical.jury1DProfileKmeans); kMeans km; km = new kMeans(distance,true); progressDic.Add(name, km); DateTime cpuPart2 = DateTime.Now; distance.InitMeasure(); clType = km.ToString(); km.BMIndex = opt.hierarchical.indexDB; km.threshold = opt.hierarchical.numberOfStruct; km.maxRepeat = opt.hierarchical.repeatTime; km.maxK = opt.hierarchical.maxK; clustOut = km.HierarchicalKMeans(); UpdateOutput(name, dirName,alignFile,clustOut, distance.ToString(), cpuPart1, cpuPart2, km); }
ClusterOutput DivideSpaceHamming(List <string> list) { ClusterOutput output = new ClusterOutput(); Dictionary <string, int> aux = new Dictionary <string, int>(); ClusterOutput outC = jury.JuryOptWeights(list); if (outC == null) { return(null); } List <string> clust1 = new List <string>(); List <string> clust2 = new List <string>(); //consensus.ToConsensusStates(list, jury.GetStructureStates(outC.juryLike[0].Key)); consensus.ToConsensusStates(list, outC.juryLike[0].Key); foreach (var item in list) { aux.Add(item, consensus.distanceOrdered[item]); } if (useKMeans) { clust1.Add(outC.juryLike[0].Key); var item = aux.OrderByDescending(j => j.Value); int dist = item.First().Value; foreach (var ll in item) { if (dist != ll.Value) { break; } else { clust2.Add(ll.Key); } } Dictionary <string, double> dic = new Dictionary <string, double>(); foreach (var it in outC.juryLike) { dic.Add(it.Key, it.Value); } double min = Double.MaxValue; string rem = ""; foreach (var it in clust2) { if (dic[it] < min) { min = dic[it]; rem = it; } } clust1.Add(rem); kMeans km = new kMeans(dMeasure); return(km.kMeansRun(kMeansIter, list, clust1)); } else { int i = 0; foreach (var item in aux.OrderBy(j => j.Value)) { if (i < list.Count() / 2) { clust1.Add(item.Key); } else { clust2.Add(item.Key); } i++; } output.clusters = new List <List <string> >(); output.clusters.Add(clust1); output.clusters.Add(clust2); } return(output); }
ClusterOutput DivideSpaceKmeans(List <string> list) { kMeans km = new kMeans(dMeasure); return(km.kMeansLevel(2, 30, list)); }
ClusterOutput DivideSpaceHamming(List<string> list) { ClusterOutput output=new ClusterOutput(); Dictionary<string, int> aux = new Dictionary<string, int>(); ClusterOutput outC = jury.JuryOptWeights(list); if (outC == null) return null; List<string> clust1 = new List<string>(); List<string> clust2 = new List<string>(); //consensus.ToConsensusStates(list, jury.GetStructureStates(outC.juryLike[0].Key)); consensus.ToConsensusStates(list,outC.juryLike[0].Key); foreach (var item in list) aux.Add(item, consensus.distanceOrdered[item]); if (useKMeans) { clust1.Add(outC.juryLike[0].Key); var item = aux.OrderByDescending(j => j.Value); int dist = item.First().Value; foreach (var ll in item) { if (dist != ll.Value) break; else clust2.Add(ll.Key); } Dictionary<string, double> dic = new Dictionary<string, double>(); foreach (var it in outC.juryLike) dic.Add(it.Key, it.Value); double min = Double.MaxValue; string rem = ""; foreach (var it in clust2) { if (dic[it] < min) { min = dic[it]; rem = it; } } clust1.Add(rem); kMeans km = new kMeans(dMeasure); return km.kMeansRun(kMeansIter,list, clust1); } else { int i = 0; foreach (var item in aux.OrderBy(j => j.Value)) { if (i < list.Count() / 2) clust1.Add(item.Key); else clust2.Add(item.Key); i++; } output.clusters = new List<List<string>>(); output.clusters.Add(clust1); output.clusters.Add(clust2); } return output; }
ClusterOutput DivideSpaceKmeans(List<string> list) { kMeans km = new kMeans(dMeasure); return km.kMeansLevel(2,30, list); }
ClusterOutput DivideSpace1DJury(List<string> list) { ClusterOutput outC,finalOut=new ClusterOutput(); outC=jury.JuryOptWeights(list); double dev = CalcStandDev(outC); List<string> clust1 = new List<string>(); List<string> clust2 = new List<string>(); dev += dev; if (useKMeans) { clust1.Add(outC.juryLike[0].Key); clust1.Add(outC.juryLike[outC.juryLike.Count - 1].Key); kMeans km = new kMeans(dMeasure); return km.kMeansRun(kMeansIter,list, clust1); } else { for (int i = 0; i < outC.juryLike.Count; i++) if(i<outC.juryLike.Count / 2) clust1.Add(outC.juryLike[i].Key); else clust2.Add(outC.juryLike[i].Key); finalOut.clusters = new List<List<string>>(); finalOut.clusters.Add(clust1); finalOut.clusters.Add(clust2); } return finalOut; }