Beispiel #1
0
        private static (Stream jsonStream, Stream jasixStream) GetNirvanaJsonStreamWithoutGenes(int chromNumber)
        {
            var jsonStream  = new MemoryStream();
            var jasixStream = new MemoryStream();

            using (var bgZipStream = new BlockGZipStream(jsonStream, CompressionMode.Compress, true))
                using (var writer = new BgzipTextWriter(bgZipStream))
                    using (var jasixIndex = new JasixIndex())
                    {
                        writer.Write(NirvanaHeader);
                        writer.Flush();
                        jasixIndex.BeginSection(JasixCommons.PositionsSectionTag, writer.Position);
                        for (int i = 100 * chromNumber; i < 123 * chromNumber; i++)
                        {
                            writer.WriteLine($"{{\"chromosome\":\"chr{chromNumber}\",\"position\":{i}}},");
                            if (i % 50 == 0)
                            {
                                writer.Flush();  //creating another block
                            }
                        }
                        writer.WriteLine($"{{\"chromosome\":\"chr{chromNumber}\",\"position\":{100 *chromNumber +25}}}");
                        writer.Flush();
                        jasixIndex.EndSection(JasixCommons.PositionsSectionTag, writer.Position);

                        writer.Write(NirvanaFooter);
                        jasixIndex.Write(jasixStream);
                    }

            jsonStream.Position  = 0;
            jasixStream.Position = 0;
            return(jsonStream, jasixStream);
        }
Beispiel #2
0
 // due to the flush, the end of a section will point to the next to last block for a section.
 // e.g. if positions start at block 2 and end at block 10, blocks 2..9 contains positions.
 private void BeginSection(string section)
 {
     if (_bgzipTextWriter == null)
     {
         return;
     }
     _bgzipTextWriter.Flush();
     _jasixIndexCreator.BeginSection(section, _bgzipTextWriter.Position);
 }
        public void BgzipTextWriter_EndToEnd()
        {
            var asterisks         = new string('*', BlockGZipStream.BlockGZipFormatCommon.BlockSize);
            var observedLines     = new List <string>();
            var observedPositions = new List <long>();

            using (var ms = new MemoryStream())
            {
                using (var stream = new BlockGZipStream(ms, CompressionMode.Compress, true))
                    using (var writer = new BgzipTextWriter(stream))
                    {
                        writer.Flush();
                        writer.WriteLine("BOB");
                        writer.WriteLine();
                        writer.Flush();
                        writer.Write("AB");
                        writer.Write("");
                        writer.Write("C");
                        writer.Write(" ");
                        writer.WriteLine("123");
                        writer.WriteLine(asterisks);
                        writer.WriteLine(asterisks);
                        writer.WriteLine(asterisks);
                    }

                ms.Position = 0;

                using (var reader = new BgzipTextReader(new BlockGZipStream(ms, CompressionMode.Decompress)))
                {
                    while (true)
                    {
                        string line = reader.ReadLine();
                        observedPositions.Add(reader.Position);
                        if (line == null)
                        {
                            break;
                        }
                        observedLines.Add(line);
                    }
                }
            }

            Assert.Equal(6, observedLines.Count);
            Assert.Equal("BOB", observedLines[0]);
            Assert.Equal(0, observedLines[1].Length);
            Assert.Equal("ABC 123", observedLines[2]);
            Assert.Equal(asterisks, observedLines[3]);
            Assert.Equal(4, observedPositions[0]);
            Assert.Equal(5, observedPositions[1]);
            Assert.Equal(13, observedPositions[2]);
            Assert.Equal(43843598, observedPositions[3]);
            Assert.Equal(87097359, observedPositions[4]);
        }