/// <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));
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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"])
                     );
        }