Пример #1
0
        public static Chromosome GetChromosome(ChromosomeEnum chId)
        {
            const string srcBaseRoot = @"http://hgdownload.soe.ucsc.edu/goldenPath/hg19/chromosomes/";
            const string dataFolder = "chromosomes";
            var chIdStr = chId.ToString().ToLower();
            if (!Directory.Exists(dataFolder))
                Directory.CreateDirectory(dataFolder);
            var protoPath = Path.Combine(dataFolder, chIdStr + ".proto");
            if (File.Exists(protoPath)) // если уже есть заготовка, то берём её и не паримся
                return Deserialize(protoPath);
            // ищем локальную копию или подгружаем из инета
            var fazName = chIdStr + ".fa.gz";
            var d = new Downloader(srcBaseRoot + fazName, dataFolder);
            var faPath = d.Get();
            // вычитываем в своё представление
            var sw = Stopwatch.StartNew();
            var faReader = new FastaReader(faPath);
            var chr = new Chromosome(chId);
            foreach (var f in faReader.ReadFlow())
                chr.AddRange(f.Select(ToNucleotide).ToArray());
            Debug.Assert(faReader.Description == chIdStr);

            Logs.Instance.Trace("FASTA to Chromosome converted, dt=" + sw.Elapsed.ToHuman() + ", " + chr.Count.ToHuman("pairs"));
            chr.Serialize(protoPath);// сериализуем в свою заготовку на будущее
            return chr;
        }
Пример #2
0
 private static Nucleotide ToNucleotide(FastaReader.FastaItem item)
 {
     switch (item)
     {
         case FastaReader.FastaItem.A:
         case FastaReader.FastaItem.Alow:
             return Nucleotide.A;
         case FastaReader.FastaItem.T:
         case FastaReader.FastaItem.Tlow:
             return Nucleotide.T;
         case FastaReader.FastaItem.G:
         case FastaReader.FastaItem.Glow:
             return Nucleotide.G;
         case FastaReader.FastaItem.C:
         case FastaReader.FastaItem.Clow:
             return Nucleotide.C;
         case FastaReader.FastaItem.Any:
             return Nucleotide.Any;
         default:
             throw new NotSupportedException();
     }
 }