/// <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)); }
/// <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); }