public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { SpectrumViewModel spectrum = value as SpectrumViewModel; if (spectrum != null) { _Spectrum.DataContext = spectrum; return(_Spectrum); } ScreenCaptureViewModel screenCapture = value as ScreenCaptureViewModel; if (screenCapture != null) { _ScreenCapture.DataContext = screenCapture; return(_ScreenCapture); } CustomEffectViewModel custom = value as CustomEffectViewModel; if (custom != null) { _Custom.DataContext = custom; return(_Custom); } return(null); }
public void TestDisplaySpectra(string rawFile, string idFile) { // init var idFileReader = IdFileReaderFactory.CreateReader(idFile); var ids = idFileReader.Read(); var lcms = PbfLcMsRun.GetLcMsRun(rawFile); var idList = ids.ToList(); foreach (var id in idList) { id.LcMs = lcms; id.RawFileName = Path.GetFileNameWithoutExtension(rawFile); } idList.Sort(new PrSm.PrSmScoreComparer()); var prsm = idList[0]; // init XicPlotViewModel var dialogService = new TestableMainDialogService(); var spectrumViewModel = new SpectrumViewModel(dialogService, lcms); // init test ions var baseIonTypes = new List <BaseIonType> { BaseIonType.B, BaseIonType.Y }; var neutralLosses = new List <NeutralLoss> { NeutralLoss.NoLoss }; const int charge = 1; const int minCharge = 1, maxCharge = 2; var ionTypeFactory = new IonTypeFactory(maxCharge); var ionTypes = IonUtils.GetIonTypes(ionTypeFactory, baseIonTypes, neutralLosses, minCharge, maxCharge); var ions = IonUtils.GetFragmentIonLabels(prsm.Sequence, charge, ionTypes); var ionVms = ions.Select(label => new LabeledIonViewModel(label.Composition, label.IonType, label.IsFragmentIon, lcms, label.PrecursorIon, label.IsChargeState, label.Index)).ToList(); }
/// <summary> /// Initializes a new instance of the <see cref="DataSetViewModel"/> class. /// </summary> /// <param name="dialogService">A dialog service for opening dialogs from the view model</param> public DataSetViewModel(IMainDialogService dialogService) { this.dialogService = dialogService; ReadyToClose = false; IdFileOpen = false; SelectedPrSm = new PrSm(); ScanViewModel = new ScanViewModel(dialogService, new List <PrSm>()); CreateSequenceViewModel = new CreateSequenceViewModel(dialogService) { SelectedDataSetViewModel = this }; CreateSequenceViewModel.CreateAndAddPrSmCommand.Subscribe( _ => ScanViewModel.Data.Add(CreateSequenceViewModel.SelectedPrSm)); // Remove filter by raw file name from ScanViewModel filters ScanViewModel.Filters.Remove(ScanViewModel.Filters.FirstOrDefault(f => f.Name == "Raw File Name")); // When a PrSm is selected from the ScanViewModel, update the SelectedPrSm for this data set ScanViewModel.WhenAnyValue(x => x.SelectedPrSm).Where(prsm => prsm != null).Subscribe(x => SelectedPrSm = x); // When the scan number in the selected prsm changes, the selected scan in the xic plots should update this.WhenAnyValue(x => x.SelectedPrSm) .Where(_ => SelectedPrSm != null && SpectrumViewModel != null && XicViewModel != null) .Subscribe(prsm => { SpectrumViewModel.UpdateSpectra(prsm.Scan, SelectedPrSm.PrecursorMz); XicViewModel.SetSelectedScan(prsm.Scan); XicViewModel.ZoomToScan(prsm.Scan); }); var prsmObservable = this.WhenAnyValue(x => x.SelectedPrSm).Where(prsm => prsm != null); prsmObservable .Select(prsm => prsm.GetFragmentationSequence()).Where(fragSeq => fragSeq != null) .Subscribe(fragSeq => { SpectrumViewModel.FragmentationSequence = fragSeq; XicViewModel.FragmentationSequence = fragSeq; }); // When the prsm changes, update the Scan View Model. prsmObservable.Subscribe(prsm => ScanViewModel.SelectedPrSm = prsm); // When the prsm updates, update the prsm in the sequence creator prsmObservable.Subscribe(prsm => CreateSequenceViewModel.SelectedPrSm = prsm); // When the prsm updates, update the feature map prsmObservable.Where(_ => FeatureMapViewModel != null).Subscribe(prsm => FeatureMapViewModel.FeatureMapViewModel.SelectedPrSm = prsm); // When prsm updates, subscribe to scan updates prsmObservable.Subscribe(prsm => { prsm.WhenAnyValue(x => x.Scan, x => x.PrecursorMz) .Where(x => x.Item1 > 0 && x.Item2 > 0 && SpectrumViewModel != null) .Subscribe(x => SpectrumViewModel.UpdateSpectra(x.Item1, x.Item2)); prsm.WhenAnyValue(x => x.Scan).Where(scan => scan > 0 && XicViewModel != null) .Subscribe(scan => XicViewModel.SetSelectedScan(scan)); }); // When a new prsm is created by CreateSequenceViewModel, update SelectedPrSm CreateSequenceViewModel.WhenAnyValue(x => x.SelectedPrSm).Subscribe(prsm => SelectedPrSm = prsm); // When IDs are filtered in the ScanViewModel, update feature map with new IDs ScanViewModel.WhenAnyValue(x => x.FilteredData).Where(_ => FeatureMapViewModel != null).Subscribe(data => FeatureMapViewModel.UpdateIds(data)); // Toggle instrument data when ShowInstrumentData setting is changed. IcParameters.Instance.WhenAnyValue(x => x.ShowInstrumentData).Select(async x => await ScanViewModel.ToggleShowInstrumentDataAsync(x, (PbfLcMsRun)LcMs)).Subscribe(); // When product ion tolerance or ion correlation threshold change, update scorer factory IcParameters.Instance.WhenAnyValue(x => x.ProductIonTolerancePpm, x => x.IonCorrelationThreshold) .Subscribe( x => { var scorer = new ScorerFactory(x.Item1, Constants.MinCharge, Constants.MaxCharge, x.Item2); CreateSequenceViewModel.ScorerFactory = scorer; ScanViewModel.ScorerFactory = scorer; }); // When an ID file has been opened, turn on the unidentified scan filter this.WhenAnyValue(x => x.IdFileOpen) .Where(idFileOpen => idFileOpen) .Select(_ => ScanViewModel.Filters.FirstOrDefault(f => f.Name == "Hide Unidentified Scans")) .Where(f => f != null) .Subscribe(f => f.Selected = true); // Start MsPf Search Command StartMsPfSearchCommand = ReactiveCommand.Create(StartMsPfSearchImplementation); // Close command verifies that the user wants to close the dataset, then sets ReadyToClose to true if they are CloseCommand = ReactiveCommand.Create(() => { ReadyToClose = dialogService.ConfirmationBox( string.Format("Are you sure you would like to close {0}?", Title), string.Empty); }); }