/// <summary> /// Extracts transcript name and FPKM/RPM values and creates bed locations with score /// When multiple transcripts are present, adds all transcripts /// </summary> /// <param name="fields">Fields.</param> /// <param name="layout">Layout.</param> /// <param name="data">Data.</param> /// <param name="entryCount">Entry count.</param> protected override void ParseFields(string[] fields, Layout layout, List <Tuple <Genomics.Location, string> > data, ref int entryCount) { //Console.WriteLine(EntryTypeFieldFormat [expressionType] + "\t" + expressionType + "\t" + fields [2]); if (EntryTypeFieldFormat [expressionType] == fields [2]) { string geneName = ""; List <string> transcriptNames = ParseNameData(fields [layout.Name], ref entryCount, out geneName); var startSite = new Genomics.Location { Start = int.Parse(fields [layout.Start]), End = int.Parse(fields [layout.End]) }; foreach (string transcriptName in transcriptNames) { string name = transcriptName; var location = new Genomics.Location { Name = name, Chromosome = fields [layout.Chromosome], Start = int.Parse(fields [layout.Start]), End = int.Parse(fields [layout.End]), Strand = fields [layout.Strand], Score = expressionLevel, Data = fields, AlternateName = geneName }; // Short expression only measures exons, so use each exon // start as it's own 'transcript' and 'gene' if (expressionType == ExpressionType.Short) { name = transcriptName + "." + location.DirectionalStart; location = new Genomics.Location { Name = name, Chromosome = fields [layout.Chromosome], Start = int.Parse(fields [layout.Start]), End = int.Parse(fields [layout.End]), Strand = fields [layout.Strand], Score = expressionLevel, Data = fields, AlternateName = geneName }; } if (this.IsValidTranscriptName(name)) { data.Add(new Tuple <Genomics.Location, string>(location, name)); } } } }
/// <summary> /// Parses the fields. /// </summary> /// <param name="fields">Fields.</param> /// <param name="layout">Layout.</param> /// <param name="data">Data.</param> /// <param name="entryCount">Entry count.</param> protected override void ParseFields(string[] fields, Layout layout, List <Tuple <Genomics.Location, string> > data, ref int entryCount) { if (fields[0][0] == '#') { return; } if (fields [2] != this.Feature) { return; } var nameData = ParseNameData(fields [layout.Name]); var startSite = new Genomics.Location { Start = int.Parse(fields [layout.Start]), End = int.Parse(fields [layout.End]) }; linecount++; if (linecount % 10000 == 0) { Console.WriteLine(linecount); } var name = nameData["transcript_id"]; string geneName = nameData["gene_id"]; var location = new Genomics.Location { Name = nameData["transcript_id"], Chromosome = fields [layout.Chromosome], Start = int.Parse(fields [layout.Start]), End = int.Parse(fields [layout.End]), Strand = fields [layout.Strand], Data = fields, AdditionalFields = nameData, AlternateName = geneName + "." + startSite.DirectionalStart }; data.Add(new Tuple <Genomics.Location, string>( location, nameData["transcript_id"]) ); }