예제 #1
0
        private void root_MouseUp(object sender, MouseButtonEventArgs e)
        {
            var p = e.GetPosition(root);

            // 已选中项,红框显示,无法形成链接
            VisualTreeHelper.HitTest(root, null, f =>
            {
                var element = f.VisualHit;

                if (element is Border)
                {
                    object tag = ((Border)element).Tag;
                    if (tag != null)
                    {
                        string columnName = tag.ToString();

                        var target = targetItemList.FirstOrDefault(item => item.ColumnName == columnName);

                        if (target != null && sourceItem != null)
                        {
                            targetItem = target;

                            if (!ColumnMap.ContainsKey(targetItem.ColumnName))
                            {
                                drawLine(sourceItem.ColumnName, targetItem.ColumnName);
                                ColumnMap.Add(targetItem.ColumnName, sourceItem.ColumnName);

                                targetItem.ColumnValue = sourceItem.ColumnName;

                                TableDAL.Comment(TableName, targetItem.ColumnName, sourceItem.ColumnName);
                            }
                        }
                    }
                }

                return(HitTestResultBehavior.Continue);
            }, new PointHitTestParameters(p));
            // 未选中项,记录选中项,画线
            root.ReleaseMouseCapture();

            root.Children.Remove(tempLine);
            tempLine   = null;
            sourceItem = null;
        }
        private bool PassesFilters(MSFeature msFeature)
        {
            if (ColumnMap.ContainsKey("MSFeature.Frame"))
            {
                if (msFeature.ScanLC < Settings.ScanLCMin || msFeature.ScanLC > Settings.ScanLCMax)
                {
                    return(false);
                }
            }

            if (ColumnMap.ContainsKey("MSFeature.ScanIMS"))
            {
                if (msFeature.ScanIMS < Settings.ScanIMSMin || msFeature.ScanIMS > Settings.ScanIMSMax)
                {
                    return(false);
                }
            }

            if (ColumnMap.ContainsKey("MSFeature.MassMonoisotopic"))
            {
                if (msFeature.MassMonoisotopic < Settings.MassMonoisotopicStart || msFeature.MassMonoisotopic > Settings.MassMonoisotopicEnd)
                {
                    return(false);
                }
            }

            if (ColumnMap.ContainsKey("MSFeature.ErrorFlag"))
            {
                if (msFeature.ErrorFlag == 1)
                {
                    return(false);
                }
            }


            var deconToolsFilterTableIsBeingUsed = (Settings.FilterUsingHardCodedFilters && Settings.DeconToolsFilterList != null && Settings.DeconToolsFilterList.Count > 0);

            if (deconToolsFilterTableIsBeingUsed)
            {
                if (!DeconToolsFilterUtil.IsValidMSFeature(msFeature, Settings.DeconToolsFilterList))
                {
                    return(false);
                }
            }
            else
            {
                if (ColumnMap.ContainsKey("MSFeature.Fit"))
                {
                    if (msFeature.Fit > Settings.FitMax)
                    {
                        return(false);
                    }
                }

                if (ColumnMap.ContainsKey("MSFeature.InterferenceScore"))
                {
                    if (msFeature.InterferenceScore > Settings.InterferenceScoreMax)
                    {
                        return(false);
                    }
                }

                if (ColumnMap.ContainsKey("MSFeature.Abundance"))
                {
                    if (msFeature.Abundance < Settings.IntensityMin)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
        /// <summary>
        /// Saves the data from a ISOS csv file to an List of MSFeature Objects.
        /// </summary>
        private List <MSFeature> SaveDataToMSFeatureList()
        {
            var    msFeatureList = new List <MSFeature>();
            string line;

            NumOfUnfilteredMSFeatures = 0;
            var msFeatureIndex = 0;
            var currentFrame   = 0;

            // Read the rest of the Stream, 1 line at a time, and save the appropriate data into new Objects
            for (var i = 0; (line = m_isosFileReader.ReadLine()) != null; i++)
            {
                try
                {
                    var columns = line.Split(',', '\t', '\n');

                    var msFeature = new MSFeature {
                        IndexInFile = i
                    };

                    if (ColumnMap.ContainsKey("MSFeature.Frame"))
                    {
                        var frame = Int32.Parse(columns[ColumnMap["MSFeature.Frame"]]);

                        ScanLCToFrameTypeMap.Mapping.TryGetValue(frame, out var frameType);

                        // Ignore this MS Feature if it belongs to a Frame Type that is not correct
                        if (Settings.FrameTypeFilter != UIMFData.FrameType.Calibration && frameType != Settings.FrameTypeFilter)
                        {
                            continue;
                        }

                        if (i == 0)
                        {
                            currentFrame = frame;
                            ScanLCMap.Mapping.Add(ScanLCMap.ScanLCIndex, frame);
                        }
                        if (frame != currentFrame)
                        {
                            currentFrame = frame;
                            ScanLCMap.ScanLCIndex++;
                            ScanLCMap.Mapping.Add(ScanLCMap.ScanLCIndex, frame);
                        }

                        msFeature.ScanLC = ScanLCMap.ScanLCIndex;
                    }

                    if (ColumnMap.ContainsKey("MSFeature.ScanIMS"))
                    {
                        msFeature.ScanIMS = Int32.Parse(columns[ColumnMap["MSFeature.ScanIMS"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.Charge"))
                    {
                        msFeature.Charge = (byte)Int16.Parse(columns[ColumnMap["MSFeature.Charge"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.Abundance"))
                    {
                        msFeature.Abundance = (int)float.Parse(columns[ColumnMap["MSFeature.Abundance"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.IntensityUnSummed"))
                    {
                        msFeature.IntensityUnSummed = (int)float.Parse(columns[ColumnMap["MSFeature.IntensityUnSummed"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.Mz"))
                    {
                        msFeature.Mz = double.Parse(columns[ColumnMap["MSFeature.Mz"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.Fit"))
                    {
                        msFeature.Fit = float.Parse(columns[ColumnMap["MSFeature.Fit"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.InterferenceScore"))
                    {
                        msFeature.InterferenceScore = float.Parse(columns[ColumnMap["MSFeature.InterferenceScore"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.MassMonoisotopic"))
                    {
                        msFeature.MassMonoisotopic = double.Parse(columns[ColumnMap["MSFeature.MassMonoisotopic"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.MassMostAbundant"))
                    {
                        msFeature.MassMostAbundantIsotope = double.Parse(columns[ColumnMap["MSFeature.MassMostAbundant"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.Fwhm"))
                    {
                        msFeature.Fwhm = float.Parse(columns[ColumnMap["MSFeature.Fwhm"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.DriftTimeIMS"))
                    {
                        msFeature.DriftTime = float.Parse(columns[ColumnMap["MSFeature.DriftTimeIMS"]], System.Globalization.NumberStyles.Any);
                    }
                    if (ColumnMap.ContainsKey("MSFeature.ErrorFlag"))
                    {
                        msFeature.ErrorFlag = (byte)(columns[ColumnMap["MSFeature.ErrorFlag"]].Equals(string.Empty) ? 0 : Int16.Parse(columns[ColumnMap["MSFeature.ErrorFlag"]], System.Globalization.NumberStyles.Any));
                    }
                    if (ColumnMap.ContainsKey("MSFeature.IsSaturated"))
                    {
                        msFeature.IsSaturated = Convert.ToBoolean(Int16.Parse(columns[ColumnMap["MSFeature.IsSaturated"]], System.Globalization.NumberStyles.Any));
                    }

                    if (PassesFilters(msFeature))
                    {
                        msFeature.Id = msFeatureIndex;
                        msFeatureList.Add(msFeature);
                        m_isosFileWriter.WriteLine(line);
                        msFeatureIndex++;
                    }

                    NumOfUnfilteredMSFeatures++;
                }
                catch (Exception e)
                {
                    Logger.Log("Error while reading line in isos file. Skipping Line #" + (i + 2));
                    Console.WriteLine(e.StackTrace);
                }
            }

            m_isosFileReader.Close();
            m_isosFileWriter.Close();

            return(msFeatureList);
        }