BestModel FindBestToModel(List<string> targets,DistanceMeasures distance,string dirName,string alignFile,string profileName,string model) { BestModel vOut=new BestModel(); List<string> localNames = new List<string>(2); List<string> fileNames = new List<string>(targets.Count); foreach (var item in targets) fileNames.Add(dirName + Path.DirectorySeparatorChar + item); fileNames.Add(model); //dist=PrepareDistance(distance,fileNames,alignFile,profileName); string[] aux = model.Split(Path.DirectorySeparatorChar); InitBestModel(distance, ref vOut); foreach (var item in targets) { /* localNames.Clear(); localNames.Add(model); localNames.Add(item); dist = PrepareDistance(distance, fileNames, alignFile, profileName);*/ int value=0; //value = dist.GetDistance(aux[aux.Length - 1], item); value = GetDist(distance, dirName, model, item); CheckBest(distance, value, item, ref vOut); } return vOut; }
void InitBestModel(DistanceMeasures distance,ref BestModel model) { switch (distance) { case DistanceMeasures.HAMMING: model.value = int.MinValue; break; case DistanceMeasures.MAXSUB: case DistanceMeasures.RMSD: case DistanceMeasures.GDT_TS: model.value = int.MaxValue; break; } }
void CheckBest(DistanceMeasures distance,int value,string item,ref BestModel best) { switch (distance) { case DistanceMeasures.HAMMING: if (best.value <= value) { best.value = value; best.modelName = item; } break; case DistanceMeasures.MAXSUB: case DistanceMeasures.GDT_TS: case DistanceMeasures.RMSD: if (best.value >= value) { best.value=value; best.modelName = item; } break; } }
public void GetFraction(object param) { float fraction = 0; float avrDiff=0; int counter = 0; int end; DistanceMeasures distance=((fractionParams)param).distance; string profileName = ((fractionParams)param).profileName; double distThreshold = ((fractionParams)param).distThreshold; int clustersNum = ((fractionParams)param).clustersNum; results = new DataTable(); try { DataColumn col; col=results.Columns.Add("Output", typeof(string)); col.AllowDBNull = true; col=results.Columns.Add("Best Model", typeof(string)); col.AllowDBNull = true; col=results.Columns.Add("Distance To Native", typeof(double)); col.AllowDBNull = true; col=results.Columns.Add("Best found", typeof(string)); col.AllowDBNull = true; col=results.Columns.Add("Distance to best model", typeof(double)); col.AllowDBNull = true; maxV = output.Count; foreach (var item in output) { string[] kkk = item.dirName.Split(Path.DirectorySeparatorChar); List<List<string>> clusters = item.GetClusters(10); List<string> list = new List<string>(); foreach (var cl in clusters) foreach (var target in cl) list.Add(target); string native = item.dirName + ".pdb"; if (item.dirName.Contains(".")) { string[] aux = item.dirName.Split('.'); native = aux[0] + ".pdb"; } string fileBestModel = item.dirName + "_" + distance.ToString() + "_bestmodel.dat"; BestModel bestToNative; if (!File.Exists(fileBestModel)) { bestToNative = FindBestToModel(list, distance, item.dirName, "", "", native); StreamWriter st = new StreamWriter(fileBestModel); st.WriteLine(bestToNative.modelName + " " + bestToNative.value); st.Close(); } else { StreamReader st = new StreamReader(fileBestModel); string line = st.ReadLine(); string[] aux = line.Split(' '); bestToNative.modelName = aux[0]; bestToNative.value = Convert.ToInt32(aux[1], System.Globalization.CultureInfo.InvariantCulture); st.Close(); } if (bestToNative.value == int.MaxValue) continue; // list.Clear(); if (clusters.Count > 0) clusters.Sort(delegate(List<string> first, List<string> second) { return second.Count.CompareTo(first.Count); }); string represent = ""; //And now best five BestModel vOut = new BestModel(); InitBestModel(distance, ref vOut); end = clustersNum; if (clusters.Count < clustersNum) end = clusters.Count; for (int i = 0; i < end; i++) //for (int i = 0; i < clusters.Count; i++) { if (profileName != null) represent = CLusterRepresentJury(item.dirName, clusters[i], profileName)[0].Key; else { if (item.juryLike != null) represent = item.juryLike[i].Key; else { /* if (clusters.Count > 1) { represent = CLusterRepresent(distance,item.dirName, clusters[i],"",profileName); } else*/ represent = clusters[i][0]; } } int vDist = GetDist(distance, item.dirName, bestToNative.modelName, represent); //int vDist = GetDist(distance, item.dirName, native, represent); CheckBest(distance, vDist, represent, ref vOut); } if (bestToNative.value == errorValue || vOut.value == errorValue) { if (bestToNative.value == errorValue && vOut.value != errorValue) results.Rows.Add(item.name, bestToNative.modelName, double.NaN, vOut.modelName, vOut.value / 100.0); else if(bestToNative.value != errorValue && vOut.value == errorValue) results.Rows.Add(item.name, bestToNative.modelName, bestToNative.value / 100.0, vOut.modelName, double.NaN); else results.Rows.Add(item.name, bestToNative.modelName, double.NaN, vOut.modelName, double.NaN); } else results.Rows.Add(item.name, bestToNative.modelName, bestToNative.value / 100.0, vOut.modelName, vOut.value / 100.0); if (vOut.value!=errorValue && vOut.value-bestToNative.value < distThreshold * 100) //if (vOut.value != errorValue && vOut.value < distThreshold * 100) { fraction++; } if (vOut.value!=errorValue) { counter++; avrDiff += vOut.value; } //dist = null; GC.Collect(); currentV++; } avrDiff /= counter; fraction /= counter; results.Rows.Add(null, null, null, null, null); results.Rows.Add("AVR:"," "+Math.Round(avrDiff / 100,2),null,"Fraction:",Math.Round(fraction,2)); } catch(Exception ex) { exc = ex; } //Console.WriteLine("avrDiff=" + avrDiff + " fraction=" + fraction+" pearson="+Pearson()); currentV = maxV; }
public void GetFraction(object param) { float fraction = 0; float avrDiff=0; int counter = 0; int end; DistanceMeasures distance=((fractionParams)param).distance; string profileName = ((fractionParams)param).profileName; double distThreshold = ((fractionParams)param).distThreshold; int clustersNum = ((fractionParams)param).clustersNum; results = new DataTable(); try { DataColumn col; col=results.Columns.Add("Output", typeof(string)); col.AllowDBNull = true; col=results.Columns.Add("Best Model", typeof(string)); col.AllowDBNull = true; col=results.Columns.Add("Distance To Native", typeof(double)); col.AllowDBNull = true; col=results.Columns.Add("Best found", typeof(string)); col.AllowDBNull = true; col=results.Columns.Add("Distance to best model", typeof(double)); col.AllowDBNull = true; maxV = output.Count; foreach (var item in output) { string[] kkk = item.dirName.Split(Path.DirectorySeparatorChar); List<List<string>> clusters = item.GetClusters(10); List<string> list = new List<string>(); foreach (var cl in clusters) foreach (var target in cl) list.Add(target); string native = item.dirName + ".pdb"; if (item.dirName.Contains(".")) { string[] aux = item.dirName.Split('.'); native = aux[0] + ".pdb"; } string fileBestModel = item.dirName + "_" + distance.ToString() + "_bestmodel.dat"; BestModel bestToNative; if (!File.Exists(fileBestModel)) { bestToNative = FindBestToModel(list, distance, item.dirName, "", "", native); StreamWriter st = new StreamWriter(fileBestModel); st.WriteLine(bestToNative.modelName + " " + bestToNative.value); st.Close(); } else { StreamReader st = new StreamReader(fileBestModel); string line = st.ReadLine(); string[] aux = line.Split(' '); bestToNative.modelName = aux[0]; bestToNative.value = Convert.ToInt32(aux[1]); st.Close(); } if (bestToNative.value == int.MaxValue) continue; // list.Clear(); if (clusters.Count > 0) clusters.Sort(delegate(List<string> first, List<string> second) { return second.Count.CompareTo(first.Count); }); string represent = ""; //And now best five BestModel vOut = new BestModel(); InitBestModel(distance, ref vOut); end = clustersNum; if (clusters.Count < clustersNum) end = clusters.Count; for (int i = 0; i < end; i++) //for (int i = 0; i < clusters.Count; i++) { if (profileName != null) represent = CLusterRepresentJury(item.dirName, clusters[i], profileName)[0].Key; else { if (item.juryLike != null) represent = item.juryLike[i].Key; else { /* if (clusters.Count > 1) { represent = CLusterRepresent(distance,item.dirName, clusters[i],"",profileName); } else*/ represent = clusters[i][0]; } } //int vDist = GetDist(distance, item.dirName, bestToNative.modelName, represent); int vDist = GetDist(distance, item.dirName, native, represent); CheckBest(distance, vDist, represent, ref vOut); } if (bestToNative.value == errorValue || vOut.value == errorValue) { if (bestToNative.value == errorValue && vOut.value != errorValue) results.Rows.Add(item.name, bestToNative.modelName, double.NaN, vOut.modelName, vOut.value / 100.0); else if(bestToNative.value != errorValue && vOut.value == errorValue) results.Rows.Add(item.name, bestToNative.modelName, bestToNative.value / 100.0, vOut.modelName, double.NaN); else results.Rows.Add(item.name, bestToNative.modelName, double.NaN, vOut.modelName, double.NaN); } else results.Rows.Add(item.name, bestToNative.modelName, bestToNative.value / 100.0, vOut.modelName, vOut.value / 100.0); if (vOut.value!=errorValue && Math.Abs(vOut.value-bestToNative.value) < distThreshold * 100) { fraction++; } if (vOut.value!=errorValue) { counter++; avrDiff += vOut.value; } dist = null; GC.Collect(); currentV++; } avrDiff /= counter; fraction /= counter; results.Rows.Add(null, null, null, null, null); results.Rows.Add("AVR:"," "+Math.Round(avrDiff / 100,2),null,"Fraction:",Math.Round(fraction,2)); } catch(Exception ex) { exc = ex; } //Console.WriteLine("avrDiff=" + avrDiff + " fraction=" + fraction+" pearson="+Pearson()); currentV = maxV; }