private void Download() { try { string Fail = ""; if (Directory.Exists(ParentDirectory)) { DirectoryInfo Folder = new DirectoryInfo(ParentDirectory); FileInfo[] Child = Folder.GetFiles("*"); Prolongation.NewFile(ParentDirectory + "\\" + Format); System.Threading.Tasks.Parallel.For(0, Child.Count(), (i) => { if (Child[i].Name != "PrimersTable.txt" && Child[i].Name != "Null.txt" && Child[i].Name != "LocationTable.txt") { if (!Advanced.GetFile(ParentDirectory + "\\" + Child[i].Name, ParentDirectory + "\\" + Format + "\\" + Child[i].Name, Format)) { Fail += Child[i].Name + ","; } } }); if (Fail != "") { MessageBox.Show("Number: " + Fail + "download failed"); } else { MessageBox.Show("Download Success"); } } else { MessageBox.Show("Can't find " + Format + " Floder"); } } catch (Exception) { MessageBox.Show("There is something wrong. Please try again"); } }
/// <summary> /// 筛选相同引物 /// </summary> /// <param name="dnablocklist"></param> public static List <SamePrimers> SelectPrimers(List <Basic.DnaBlock> dnablocklist) { Prolongation.JHsort(dnablocklist, 0, dnablocklist.Count - 1); List <SamePrimers> sameprimers = new List <SamePrimers>(); for (int i = dnablocklist.Count() - 1; i >= 0; i--) { List <string> Version = new List <string>(); if (dnablocklist[i].Fwd_seq.Count == 0 || i == 0) { foreach (Basic.DnaBlock dnablock in dnablocklist) { Version.Add(dnablock.Version); } sameprimers.Add(new SamePrimers() { Version = Version }); break; } int j = i - 1; Version.Add(dnablocklist[i].Version); while (j >= 0 && dnablocklist[i].Fwd_seq.Count == dnablocklist[j].Fwd_seq.Count) { int count = 0; for (int z = 0; z < dnablocklist[i].Fwd_seq.Count; z++) { for (int m = dnablocklist[j].Fwd_seq.Count - 1; m >= 0; m--) { if (dnablocklist[i].Fwd_seq[z] + ";" + dnablocklist[i].Rev_seq[z] == dnablocklist[j].Fwd_seq[m] + ";" + dnablocklist[j].Rev_seq[m]) { count++; } } } if (dnablocklist[j].Fwd_seq.Count == count) { Version.Add(dnablocklist[j].Version); dnablocklist.RemoveAt(j); i--; } j--; } sameprimers.Add(new SamePrimers() { Version = Version, Fwd_seq = dnablocklist[i].Fwd_seq, Rev_seq = dnablocklist[i].Rev_seq }); dnablocklist.Remove(dnablocklist[i]); } return(sameprimers); }
private void Output() { int error = 0; try { ParentDirectory = FileName.Substring(0, FileName.TrimEnd('\\').LastIndexOf('\\')); name = FileName.Replace(ParentDirectory, "").Split('.')[0]; foreach (var a in Check) { if (a == '1') { string SamePrimersPath = ParentDirectory + name + "_SamePrimers\\"; Prolongation.NewFile(SamePrimersPath); System.Threading.Tasks.Parallel.For(0, Cache.DnaBlock.Count, (i) => { Cache.DnaBlock[i] = Basic.GetPrimers(Cache.DnaBlock[i]); }); List <Advanced.SamePrimers> SamePrimers = Advanced.SelectPrimers(new List <Basic.DnaBlock>(Cache.DnaBlock.ToArray())); int Null = -1; FileStream File1 = new FileStream(SamePrimersPath + "PrimersTable.txt", FileMode.Create); StreamWriter Writer1 = new StreamWriter(File1); for (int i = 0; i < SamePrimers.Count; i++) { if (SamePrimers[i].Fwd_seq != null) { for (int j = 0; j < SamePrimers[i].Fwd_seq.Count; j++) { if (j == 0) { Writer1.WriteLine(i + " " + SamePrimers[i].Fwd_seq[j] + " " + SamePrimers[i].Rev_seq[j]); } else { Writer1.WriteLine(" " + SamePrimers[i].Fwd_seq[j] + " " + SamePrimers[i].Rev_seq[j]); } } Writer1.WriteLine(); } else { Null = i; } } Writer1.Flush(); Writer1.Close(); File1.Close(); System.Threading.Tasks.Parallel.For(0, SamePrimers.Count, (i) => { FileStream File; if (i != Null) { File = new FileStream(SamePrimersPath + i + ".txt", FileMode.Create); } else { File = new FileStream(SamePrimersPath + "Null.txt", FileMode.Create); } StreamWriter Writer = new StreamWriter(File); foreach (string Version in SamePrimers[i].Version) { Writer.WriteLine(Version); } Writer.Flush(); Writer.Close(); File.Close(); }); } if (a == '2') { string SameOrganismPath = ParentDirectory + name + "_SameOrganism\\"; Prolongation.NewFile(SameOrganismPath); System.Threading.Tasks.Parallel.For(0, Cache.DnaBlock.Count, (i) => { Cache.DnaBlock[i] = Basic.GetOrganism(Cache.DnaBlock[i]); }); List <Advanced.SameOrganism> SameOrganism = Advanced.SelectOrganism(new List <Basic.DnaBlock>(Cache.DnaBlock.ToArray())); System.Threading.Tasks.Parallel.For(0, SameOrganism.Count, (i) => { FileStream File = new FileStream(SameOrganismPath + SameOrganism[i].Organism.Replace("/", " ").Replace(":", "-") + ".txt", FileMode.Create); StreamWriter Writer = new StreamWriter(File); foreach (string Version in SameOrganism[i].Version) { Writer.WriteLine(Version); } Writer.Flush(); Writer.Close(); File.Close(); }); } if (a == '3') { string SameCountryPath = ParentDirectory + name + "_SameCountry\\"; Prolongation.NewFile(SameCountryPath); System.Threading.Tasks.Parallel.For(0, Cache.DnaBlock.Count, (i) => { Cache.DnaBlock[i] = Basic.GetLocation(Cache.DnaBlock[i]); }); OutputLocation(SameCountryPath, Cache.DnaBlock); List <Advanced.SameLocation> SameCountry = Advanced.SelectCountry(new List <Basic.DnaBlock>(Cache.DnaBlock.ToArray())); System.Threading.Tasks.Parallel.For(0, SameCountry.Count, (i) => { FileStream File; if (SameCountry[i].Location != null) { File = new FileStream(SameCountryPath + SameCountry[i].Location.Replace("/", " ").Replace(":", "-") + ".txt", FileMode.Create); } else { File = new FileStream(SameCountryPath + "Null.txt", FileMode.Create); } StreamWriter Writer = new StreamWriter(File); foreach (string Version in SameCountry[i].Version) { Writer.WriteLine(Version); } Writer.Flush(); Writer.Close(); File.Close(); }); } if (a == '4') { string SameCityPath = ParentDirectory + name + "_SameCity\\"; Prolongation.NewFile(SameCityPath); System.Threading.Tasks.Parallel.For(0, Cache.DnaBlock.Count, (i) => { Cache.DnaBlock[i] = Basic.GetLocation(Cache.DnaBlock[i]); }); OutputLocation(SameCityPath, Cache.DnaBlock); List <Advanced.SameLocation> SameCity = Advanced.SelectLocation(new List <Basic.DnaBlock>(Cache.DnaBlock.ToArray())); List <Advanced.SameLocation> SameLatLngCity = Advanced.SelectLatLng(new List <Basic.DnaBlock>(Cache.DnaBlock.ToArray())); System.Threading.Tasks.Parallel.For(0, SameCity.Count, (i) => { if (SameCity[i].Location != null && error <= 0) { SameCity[i] = Advanced.GetCityLatLng(SameCity[i]); if (SameCity[i].Lat == "NetworkError") { error++; } } }); System.Threading.Tasks.Parallel.For(0, SameLatLngCity.Count, (i) => { if (SameLatLngCity[i].Location != null && error <= 0) { SameLatLngCity[i] = Advanced.GetLatLngCityLatLng(SameLatLngCity[i]); if (SameLatLngCity[i].Lat == "NetworkError") { error++; } } }); if (error <= 0) { for (int i = SameCity.Count() - 1; i >= 0; i--) { for (int j = SameLatLngCity.Count() - 1; j >= 0; j--) { if (SameCity[i].Location == SameLatLngCity[j].Location) { var Temp = SameCity[i]; Temp.Version = SameCity[i].Version.Union(SameLatLngCity[j].Version).ToList <string>(); SameCity[i] = Temp; SameLatLngCity.RemoveAt(j); } } } if (SameCity.Count() > 1) { for (int i = SameCity.Count() - 1; i > 0; i--) { int j = i - 1; while (j >= 0) { if (SameCity[i].Location == SameCity[j].Location) { var Temp = SameCity[i]; Temp.Version = SameCity[i].Version.Union(SameCity[j].Version).ToList <string>(); SameCity[i] = Temp; SameCity.RemoveAt(j); i--; } j--; } } } System.Threading.Tasks.Parallel.For(0, SameCity.Count, (i) => { FileStream File; if (SameCity[i].Lat != null) { File = new FileStream(SameCityPath + SameCity[i].Location.Replace("/", " ").Replace(":", "-") + ".txt", FileMode.Create); StreamWriter Writer = new StreamWriter(File); foreach (string Version in SameCity[i].Version) { Writer.WriteLine(Version); } Writer.Flush(); Writer.Close(); File.Close(); } }); } } if (a == '5') { string SameLatLonPath = ParentDirectory + name + "_SameLatLon\\"; Prolongation.NewFile(SameLatLonPath); System.Threading.Tasks.Parallel.For(0, Cache.DnaBlock.Count, (i) => { Cache.DnaBlock[i] = Basic.GetLocation(Cache.DnaBlock[i]); }); OutputLocation(SameLatLonPath, Cache.DnaBlock); List <Advanced.SameLocation> SameLatLon = Advanced.SelectLatLng(new List <Basic.DnaBlock>(Cache.DnaBlock.ToArray())); System.Threading.Tasks.Parallel.For(0, SameLatLon.Count, (i) => { FileStream File; if (SameLatLon[i].Lat != null) { File = new FileStream(SameLatLonPath + SameLatLon[i].Lat + "," + SameLatLon[i].Lng + ".txt", FileMode.Create); } else { File = new FileStream(SameLatLonPath + "Null.txt", FileMode.Append); } StreamWriter Writer = new StreamWriter(File); foreach (string Version in SameLatLon[i].Version) { Writer.WriteLine(Version); } Writer.Flush(); Writer.Close(); File.Close(); }); } } if (error > 0) { MessageBox.Show("Classify City Failed,Classify Others Success"); } else { MessageBox.Show("ClassifySuccess"); } } catch (Exception) { MessageBox.Show("There is something wrong. Please try again"); } }