Пример #1
0
        public void Write(Dictionary <string, List <ISuppGeneItem> > geneToEntries)
        {
            using (var memStream = new MemoryStream())
                using (var memWriter = new ExtendedBinaryWriter(memStream))
                    using (var writer = new BinaryWriter(_nsaStream))
                    {
                        _version.Write(memWriter);
                        memWriter.WriteOptAscii(_jsonKey);
                        memWriter.Write(_isArray);
                        memWriter.WriteOpt(_schemaVersion);

                        memWriter.WriteOpt(geneToEntries.Count);
                        foreach ((string geneSymbol, var entries) in geneToEntries)
                        {
                            memWriter.WriteOptAscii(geneSymbol);
                            memWriter.WriteOpt(entries.Count);
                            foreach (ISuppGeneItem geneItem in entries)
                            {
                                memWriter.Write(geneItem.GetJsonString());
                            }
                        }

                        var uncompressedBytes = memStream.ToArray();
                        var compressedBytes   = new byte[uncompressedBytes.Length + 32];

                        var compressor   = new Zstandard();
                        var compressSize = compressor.Compress(uncompressedBytes, uncompressedBytes.Length, compressedBytes,
                                                               compressedBytes.Length);

                        writer.Write(compressedBytes, 0, compressSize);
                        Console.WriteLine("Number of gene entries written:" + geneToEntries.Count);
                    }
        }
Пример #2
0
        public int Write(IEnumerable <ISuppIntervalItem> siItems)
        {
            var sortedItems = siItems.OrderBy(x => x.Chromosome.Index).ThenBy(x => x.Start).ThenBy(x => x.End).ToList();

            Console.WriteLine($"Writing {sortedItems.Count} intervals to database...");
            _memWriter.WriteOpt(sortedItems.Count);
            foreach (ISuppIntervalItem item in sortedItems)
            {
                _memWriter.WriteOptAscii(item.Chromosome.EnsemblName);
                _memWriter.WriteOptAscii(item.Chromosome.UcscName);
                _memWriter.WriteOpt(item.Chromosome.Index);
                _memWriter.WriteOpt(item.Start);
                _memWriter.WriteOpt(item.End);
                _memWriter.Write(item.GetJsonString());
            }

            var uncompressedBytes = _memStream.ToArray();
            var compressedBytes   = new byte[uncompressedBytes.Length + 32];

            var compressor   = new Zstandard();
            var compressSize = compressor.Compress(uncompressedBytes, uncompressedBytes.Length, compressedBytes,
                                                   compressedBytes.Length);

            _writer.Write(compressedBytes, 0, compressSize);
            _writer.Flush();
            return(sortedItems.Count);
        }
Пример #3
0
        private void WriteCompressed(int lastPosition)
        {
            var startLocation = _writer.BaseStream.Position;

            int compressSize = _zstd.Compress(_scores, lastPosition, _compressedScores, _compressedScores.Length);

            _writer.Write(_compressedScores, 0, compressSize);
            _index.Add(_chromIndex, startLocation, compressSize);

            Array.Clear(_scores, 0, _scores.Length);
            _memStream.Position = 0;//reset the stream
        }