Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
 public void ByElements()
 {
     for (var n = Nucleotide.A; n <= Nucleotide.C; n++)
     {
         var c = new Chromosome(ChromosomeEnum.Unknown);
         c.AddRange(new []{n});
         Assert.AreEqual(1, c.Count);
         var pack = c.GetPack(0, 1);
         Assert.AreEqual(1, pack.Length);
         Assert.AreEqual(n, pack[0]);
     }
 }
Ejemplo n.º 3
0
        public void ByRepeats()
        {
            for (var n = Nucleotide.A; n <= Nucleotide.C; n++)
            {
                var c = new Chromosome(ChromosomeEnum.Unknown);
                for (int i = 1; i <= 10; i++)
                {
                    c.AddRange(new[] {n});
                    Assert.AreEqual(i, c.Count);
                    var pack = c.GetPack(0, i);
                    Assert.AreEqual(i, pack.Length);
                    Assert.IsTrue(pack.All(p => p == n));
                }
            }

            for (var n = Nucleotide.A; n <= Nucleotide.C; n++)
            {
                for (int i = 1; i <= 10; i++)
                {
                    var c = new Chromosome(ChromosomeEnum.Unknown);
                    c.AddRange(Enumerable.Repeat(n, i).ToArray());
                    Assert.AreEqual(i, c.Count);
                    var pack = c.GetPack(0, i);
                    Assert.AreEqual(i, pack.Length);
                    Assert.IsTrue(pack.All(p => p == n));
                }
            }
            var tmp = new List<Nucleotide>();
            var cc = new Chromosome(ChromosomeEnum.Unknown);
            for (int i = 0; i <= 10; i++)
            for (var n = Nucleotide.A; n <= Nucleotide.C; n++)
            {
                cc.AddRange(new[] {n});
                tmp.Add(n);
                Assert.IsTrue(cc.Count >= i*4);
                var pack = cc.GetPack(cc.Count-1, 1);
                Assert.AreEqual(1, pack.Length);
                Assert.AreEqual(n, pack[0]);
                var pack2 = cc.GetPack(0, cc.Count);
                CollectionAssert.AreEqual(tmp, pack2);
            }
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 public void Trivial()
 {
     var c = new Chromosome(ChromosomeEnum.Unknown);
     Assert.AreEqual(ChromosomeEnum.Unknown, c.ChromosomeId);
     Assert.AreEqual(0, c.Count);
 }