Пример #1
0
        /// <summary>
        /// reads the transcript from the binary reader
        /// </summary>
        public static Transcript Read(ExtendedBinaryReader reader, Gene[] cacheGenes, SimpleInterval[] cacheIntrons,
                                      SimpleInterval[] cacheMirnas, string[] cachePeptideSeqs)
        {
            // transcript
            var referenceIndex = reader.ReadUInt16();
            var start          = reader.ReadOptInt32();
            var end            = reader.ReadOptInt32();
            var id             = CompactId.Read(reader);

            // gene
            var geneIndex = reader.ReadOptInt32();
            var gene      = cacheGenes[geneIndex];

            // encoded data
            var encoded = new EncodedTranscriptData(reader.ReadUInt16(), reader.ReadByte());

            // exons & introns
            var introns  = encoded.HasIntrons  ? ReadIndices(reader, cacheIntrons) : null;
            var cdnaMaps = encoded.HasCdnaMaps ? ReadCdnaMaps(reader)              : null;

            // protein function predictions
            int siftIndex     = encoded.HasSift     ? reader.ReadOptInt32() : -1;
            int polyphenIndex = encoded.HasPolyPhen ? reader.ReadOptInt32() : -1;

            // translation
            var translation = encoded.HasTranslation ? Translation.Read(reader, cachePeptideSeqs) : null;

            // attributes
            var mirnas = encoded.HasMirnas ? ReadIndices(reader, cacheMirnas) : null;

            return(new Transcript(referenceIndex, start, end, id, encoded.Version, translation, encoded.BioType,
                                  gene, TranscriptUtilities.GetTotalExonLength(cdnaMaps), encoded.StartExonPhase, encoded.IsCanonical,
                                  introns, mirnas, cdnaMaps, siftIndex, polyphenIndex, encoded.TranscriptSource));
        }
Пример #2
0
        /// <summary>
        /// writes the transcript to the binary writer
        /// </summary>
        public void Write(ExtendedBinaryWriter writer, Dictionary <Gene, int> geneIndices,
                          Dictionary <SimpleInterval, int> intronIndices, Dictionary <SimpleInterval, int> microRnaIndices,
                          Dictionary <string, int> peptideIndices)
        {
            // transcript
            writer.Write(ReferenceIndex);
            writer.WriteOpt(Start);
            writer.WriteOpt(End);
            Id.Write(writer);

            // gene
            writer.WriteOpt(GetIndex(Gene, geneIndices));

            // encoded data
            var encoded = new EncodedTranscriptData(BioType, Version, TranscriptSource, IsCanonical, SiftIndex != -1,
                                                    PolyPhenIndex != -1, MicroRnas != null, Introns != null, CdnaMaps != null, Translation != null,
                                                    StartExonPhase);

            encoded.Write(writer);

            // exons & introns
            if (encoded.HasIntrons)
            {
                WriteIndices(writer, Introns, intronIndices);
            }
            if (encoded.HasCdnaMaps)
            {
                WriteCdnaMaps(writer);
            }

            // protein function predictions
            if (encoded.HasSift)
            {
                writer.WriteOpt(SiftIndex);
            }
            if (encoded.HasPolyPhen)
            {
                writer.WriteOpt(PolyPhenIndex);
            }

            // translation
            if (encoded.HasTranslation)
            {
                // ReSharper disable once PossibleNullReferenceException
                var peptideIndex = GetIndex(Translation.PeptideSeq, peptideIndices);
                Translation.Write(writer, peptideIndex);
            }

            // attributes
            if (encoded.HasMirnas)
            {
                WriteIndices(writer, MicroRnas, microRnaIndices);
            }
        }
        public void EncodedTranscriptData_EndToEnd()
        {
            const BioType expectedBiotype           = BioType.Y_RNA;
            const bool    expectedCdsStartNotFound  = true;
            const bool    expectedCdsEndNotFound    = true;
            const Source  expectedSource            = Source.BothRefSeqAndEnsembl;
            const bool    expectedCanonical         = true;
            const bool    expectedSift              = true;
            const bool    expectedPolyPhen          = true;
            const bool    expectedMirnas            = true;
            const bool    expectedRnaEdits          = true;
            const bool    expectedSelenocysteines   = true;
            const bool    expectedTranscriptRegions = true;
            const bool    expectedTranslation       = true;
            const byte    expectedStartExonPhase    = 3;

            // ReSharper disable ConditionIsAlwaysTrueOrFalse
            var encodedData = EncodedTranscriptData.GetEncodedTranscriptData(expectedBiotype, expectedCdsStartNotFound,
                                                                             expectedCdsEndNotFound, expectedSource, expectedCanonical, expectedSift, expectedPolyPhen,
                                                                             expectedMirnas, expectedRnaEdits, expectedSelenocysteines, expectedTranscriptRegions,
                                                                             expectedTranslation, expectedStartExonPhase);
            // ReSharper restore ConditionIsAlwaysTrueOrFalse

            EncodedTranscriptData observedEncodedTranscriptData;

            using (var ms = new MemoryStream())
            {
                using (var writer = new ExtendedBinaryWriter(ms, Encoding.UTF8, true))
                {
                    encodedData.Write(writer);
                }

                ms.Position = 0;

                using (var reader = new BufferedBinaryReader(ms))
                {
                    observedEncodedTranscriptData = EncodedTranscriptData.Read(reader);
                }
            }

            Assert.NotNull(observedEncodedTranscriptData);
            Assert.Equal(expectedBiotype, observedEncodedTranscriptData.BioType);
            Assert.Equal(expectedSource, observedEncodedTranscriptData.TranscriptSource);
            Assert.Equal(expectedCanonical, observedEncodedTranscriptData.IsCanonical);
            Assert.Equal(expectedSift, observedEncodedTranscriptData.HasSift);
            Assert.Equal(expectedPolyPhen, observedEncodedTranscriptData.HasPolyPhen);
            Assert.Equal(expectedMirnas, observedEncodedTranscriptData.HasMirnas);
            Assert.Equal(expectedTranscriptRegions, observedEncodedTranscriptData.HasTranscriptRegions);
            Assert.Equal(expectedTranslation, observedEncodedTranscriptData.HasTranslation);
            Assert.Equal(expectedStartExonPhase, observedEncodedTranscriptData.StartExonPhase);
        }