public static Chromosome GetChromosome(ChromosomeEnum id) { if (!Directory.Exists(DataRoot)) throw new DirectoryNotFoundException("Не найдена директория для данных. Она уже должна существовать."); var chrDir = Path.Combine(DataRoot, ChromosomeFolder); if (!Directory.Exists(chrDir)) Directory.CreateDirectory(chrDir); var chrName = id.ToString().ToLower() + ".fa"; var chrPath = Path.Combine(chrDir, chrName); if (File.Exists(chrPath + ".proto"))// файл есть return Chromosome.Deserialize(chrPath + ".proto"); var chrPath2 = GetChromosomeFaPath(id); Debug.Assert(chrPath2 == chrPath); Console.WriteLine("Запускаем конвертацию во внутреннее представление файла " + chrPath + ", размер: " + new FileInfo(chrPath).Length + "B"); // конвертация файла в наш формат var chr = new Chromosome(id); bool isFirst = true; foreach (var line in File.ReadLines(chrPath)) { if (isFirst) { if(line != ">" + id.ToString().ToLower()) throw new Exception("Заголовок файла не верен: " + line); isFirst = false; continue; } chr.AddRange(line.Select(CharToNucleotide).ToArray()); } Console.WriteLine("Конвертация завершена. Осталось только сериализовать для последующего испольования."); // сериализация его var serL = chr.Serialize(chrPath + ".proto"); Console.WriteLine("Хромосома в новом представлении сериализована. Размер: " + serL + "B"); return chr; }
public void Test1() { var c = new Chromosome(ChromosomeEnum.Unknown); Assert.AreEqual(ChromosomeEnum.Unknown, c.ChromosomeId); Assert.AreEqual(0, c.Count); var pack = new[] {Nucleotide.A, Nucleotide.G, Nucleotide.T, Nucleotide.C, Nucleotide.G}; c.AddRange(pack); Assert.AreEqual(pack.Length, c.Count); c.AddRange(pack); Assert.AreEqual(pack.Length*2, c.Count); var pack1 = c.GetPack(0, pack.Length); var pack2 = c.GetPack(pack.Length, pack.Length); var pack3 = c.GetPack(0, pack.Length*2); CollectionAssert.AreEqual(pack, pack1); CollectionAssert.AreEqual(pack1, pack2); var tmpPath = "qwe.tmp"; File.Delete(tmpPath); c.Serialize(tmpPath); var c2 = Chromosome.Deserialize(tmpPath); Assert.AreEqual(c.ChromosomeId, c2.ChromosomeId); Assert.AreEqual(c.Count, c2.Count); var tmp = new List<Nucleotide>(); var e = c.GetEnumerator(); while(e.MoveNext()) tmp.Add(e.Current); var tmp2 = c2.GetPack(0, pack.Length*2).ToList(); CollectionAssert.AreEqual(tmp, tmp2); }