Example #1
0
        /// <summary>
        /// returns an array of exons given a list of ObjectValues (AbstractData)
        /// </summary>
        public static MutableExon[] ParseList(IImportNode importNode, IChromosome chromosome)
        {
            var listMembers = importNode.GetListMembers();

            if (listMembers == null)
            {
                throw new InvalidDataException("Encountered an exon node that could not be converted to a member list.");
            }

            var exons = new MutableExon[listMembers.Count];

            for (var exonIndex = 0; exonIndex < listMembers.Count; exonIndex++)
            {
                if (listMembers[exonIndex] is ObjectValueNode objectValue)
                {
                    exons[exonIndex] = Parse(objectValue, chromosome);
                }
                else
                {
                    throw new InvalidDataException($"Could not transform the AbstractData object into an ObjectValue: [{listMembers[exonIndex].GetType()}]");
                }
            }

            return(exons);
        }
Example #2
0
        /// <summary>
        /// returns an array of miRNAs given a list of ObjectValues (AbstractData)
        /// </summary>
        public static (IInterval[] MicroRnas, IRnaEdit[] RnaEdits, bool CdsStartNotFound, bool CdsEndNotFound) ParseList(
            IImportNode importNode)
        {
            var listMembers = importNode.GetListMembers();

            if (listMembers == null)
            {
                throw new InvalidDataException("Encountered an attribute node that could not be converted to a member list.");
            }

            var microRnaList     = new List <IInterval>();
            var rnaEditList      = new List <IRnaEdit>();
            var cdsStartNotFound = false;
            var cdsEndNotFound   = false;

            foreach (var node in listMembers)
            {
                if (!(node is ObjectValueNode objectValue))
                {
                    throw new InvalidDataException($"Could not transform the AbstractData object into an ObjectValue: [{node.GetType()}]");
                }

                (var key, var value) = ParseKeyValue(objectValue);
                if (key == null)
                {
                    continue;
                }

                // ReSharper disable once SwitchStatementMissingSomeCases
                switch (key)
                {
                case "miRNA":
                    microRnaList.Add(GetInterval(value));
                    break;

                case "_rna_edit":
                    rnaEditList.Add(GetRnaEdit(value));
                    break;

                case "cds_start_NF":
                    cdsStartNotFound = true;
                    break;

                case "cds_end_NF":
                    cdsEndNotFound = true;
                    break;
                }
            }

            var microRnas = microRnaList.Count == 0 ? null : microRnaList.ToArray();
            var rnaEdits  = rnaEditList.Count == 0 ? null : rnaEditList.ToArray();

            return(microRnas, rnaEdits, cdsStartNotFound, cdsEndNotFound);
        }