Пример #1
0
        public List <FeatureItemGroup> ReadFromFile(string fileName)
        {
            Console.WriteLine("read file {0} ...", fileName);
            var result = new List <FeatureItemGroup>();

            XElement root = XElement.Load(fileName);

            //Console.WriteLine("read locations ...");
            Dictionary <string, SAMAlignedLocation> qmmap = root.ToSAMAlignedItems().ToSAMAlignedLocationMap();

            //Console.WriteLine("read mapped items ...");
            foreach (XElement groupEle in root.Element("subjectResult").Elements("subjectGroup"))
            {
                var group = new FeatureItemGroup();
                result.Add(group);

                foreach (XElement featureEle in groupEle.Elements("subject"))
                {
                    var item = new FeatureItem();
                    group.Add(item);
                    item.Name = featureEle.Attribute("name").Value;

                    foreach (XElement locEle in featureEle.Elements("region"))
                    {
                        var fl = new FeatureLocation();
                        item.Locations.Add(fl);

                        fl.Name = item.Name;
                        fl.ParseLocation(locEle);

                        if (locEle.Attribute("sequence") != null)
                        {
                            fl.Sequence = locEle.Attribute("sequence").Value;
                        }

                        if (locEle.Attribute("query_count_before_filter") != null)
                        {
                            fl.QueryCountBeforeFilter = int.Parse(locEle.Attribute("query_count_before_filter").Value);
                        }

                        if (locEle.Attribute("pvalue") != null)
                        {
                            fl.PValue = double.Parse(locEle.Attribute("pvalue").Value);
                        }

                        foreach (XElement queryEle in locEle.Elements("query"))
                        {
                            string             qname = queryEle.Attribute("qname").Value;
                            string             loc   = queryEle.Attribute("loc").Value;
                            string             key   = SAMAlignedLocation.GetKey(qname, loc);
                            SAMAlignedLocation query = qmmap[key];

                            FeatureSamLocation fsl = new FeatureSamLocation(fl);
                            fsl.SamLocation = query;
                            var attr = queryEle.FindAttribute("overlap");
                            if (attr == null)
                            {
                                fsl.OverlapPercentage = query.OverlapPercentage(fl);
                            }
                            else
                            {
                                fsl.OverlapPercentage = double.Parse(attr.Value);
                            }

                            var nnpm = queryEle.FindAttribute("nnpm");
                            if (nnpm == null)
                            {
                                nnpm = queryEle.FindAttribute("nnmp");
                            }
                            if (nnpm != null)
                            {
                                fsl.NumberOfNoPenaltyMutation = int.Parse(nnpm.Value);
                            }

                            var nmi = queryEle.FindAttribute("nmi");
                            if (nmi != null)
                            {
                                fsl.NumberOfMismatch = int.Parse(nmi.Value);
                            }
                        }
                    }
                }
            }
            qmmap.Clear();

            return(result);
        }