Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
5fc05fb
Basic Decon Tab, no plots
nbollis Aug 22, 2025
2bab278
Basic Plotting
nbollis Aug 22, 2025
04d5719
Created cyclical queue for colors in Decon Plot
nbollis Aug 22, 2025
cb78d02
Exposed additional Decon params
nbollis Aug 22, 2025
96ee85d
Polished the Plots
nbollis Aug 22, 2025
1faa7b8
More Polishing
nbollis Aug 22, 2025
26c4734
Tested It
nbollis Aug 23, 2025
f6a4c97
Testing, Comments, Name Change
nbollis Aug 23, 2025
fa62430
PR Cleanup
nbollis Aug 27, 2025
a92effa
Merge branch 'master' into DeconExploration
nbollis Aug 27, 2025
c6663cc
classic decon cleanup
nbollis Aug 27, 2025
e1e8371
Merge branch 'DeconExploration' of https://github.com/nbollis/MetaMor…
nbollis Aug 27, 2025
25dbc85
Fix broken tests
nbollis Aug 27, 2025
c85f148
Moved Decon Plot
nbollis Aug 27, 2025
3bcc46e
Merge branch 'master' into DeconExploration
nbollis Aug 27, 2025
1eb2bc3
Built the Base of the View Models
nbollis Aug 27, 2025
37e5910
Added start of processing logic
nbollis Aug 27, 2025
c52fa46
Basic View
nbollis Aug 27, 2025
8c84c4a
Start of Plot
nbollis Aug 27, 2025
c02bcc4
Made the figure better
nbollis Aug 27, 2025
0b90575
Built in colors to the settings.
nbollis Aug 28, 2025
4b2db09
Filtering automatically on filter changed
nbollis Aug 28, 2025
e5d5862
Filter Works
nbollis Aug 28, 2025
ac4a804
Export works
nbollis Aug 28, 2025
e0ed7d4
Cleanup
nbollis Aug 28, 2025
d6c980d
Moved File
nbollis Aug 28, 2025
42eef79
Added start of tests
nbollis Aug 28, 2025
431baf6
Namespace Adjustment
nbollis Aug 28, 2025
58546bd
More Testing and comments
nbollis Aug 28, 2025
82e680b
fix rna tests
nbollis Aug 29, 2025
0699865
Merge branch 'master' into BioPolymerView
nbollis Aug 29, 2025
a840847
Reverted common parms change
nbollis Aug 29, 2025
40af37d
Merged in decon branch
nbollis Aug 29, 2025
4dbb358
Touched up jitter
nbollis Sep 2, 2025
db21167
Expanded test coverage
nbollis Sep 4, 2025
d976225
Expanded coverage adn improved functionality.
nbollis Sep 4, 2025
1fd9d0a
Optimized Plotting
nbollis Sep 4, 2025
c122001
Added protein name on top
nbollis Sep 4, 2025
4beb56b
Uncomment Chimeras
nbollis Sep 4, 2025
cf7e006
MetaDrawLogic Loading Refactor
nbollis Sep 4, 2025
7b64f65
Changed Chimera Analysis Tab to have a process method
nbollis Sep 4, 2025
26a2c42
Loading now all happens in MetaDrawDataLoader
nbollis Sep 4, 2025
7d085f8
Loading happens asynchronously
nbollis Sep 4, 2025
2102fb6
Unified data loading
nbollis Sep 4, 2025
d15346b
Loading Progress
nbollis Sep 4, 2025
9d3fea7
BIOPOLYMER: Fix set and reset buttons
nbollis Sep 5, 2025
7df57a5
Progress indication clean up and tab header custom laoding animation
nbollis Sep 5, 2025
82996b7
Cleaned up data loader.
nbollis Sep 5, 2025
e8c74da
Cleaned up data loader
nbollis Sep 8, 2025
6657b94
Added unit tests
nbollis Sep 8, 2025
597b3ee
PR Cleanup
nbollis Sep 12, 2025
7fbf003
Fix some tests
nbollis Sep 12, 2025
17cb671
Visual cleanup
nbollis Sep 12, 2025
d0e4bff
More unit tests.
nbollis Sep 15, 2025
36b9471
Merge branch 'master' into MetaDrawLoading
nbollis Sep 15, 2025
d217f1b
Update MetaMorpheus/GuiFunctions/MzLibExtensions.cs
nbollis Sep 16, 2025
2d435d1
Update MetaMorpheus/GuiFunctions/MetaDraw/BioPolymerCoverage/BioPolym…
nbollis Sep 16, 2025
685b180
Update MetaMorpheus/GuiFunctions/MetaDraw/BioPolymerCoverage/BioPolym…
nbollis Sep 16, 2025
5ff07cc
Merge branch 'master' into MetaDrawLoading
trishorts Sep 17, 2025
fb02221
fix broken test
nbollis Sep 19, 2025
d7bcdcc
Plot title and grid.
nbollis Sep 19, 2025
90b6958
Merge branch 'master' into MetaDrawLoading
nbollis Sep 22, 2025
206d8c8
Disable psm grid while spectra are loading
nbollis Sep 22, 2025
83dbad4
Decon filter to identified.
nbollis Sep 22, 2025
a312dc7
Added in loading overlay
nbollis Sep 23, 2025
7915b1b
Load prose, async those loading methods, fix tests.
nbollis Sep 23, 2025
603c762
Fix? Unit Tests
nbollis Sep 24, 2025
06d3e85
Region bounds in decon plot and testing
nbollis Sep 24, 2025
ff7a8b4
test?
nbollis Sep 24, 2025
1a35130
Merge branch 'master' into MetaDrawLoading
nbollis Sep 26, 2025
2eb7e4a
Missed cleavage is null in glyco
nbollis Sep 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion MetaMorpheus/EngineLayer/GlobalVariables.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public static class GlobalVariables
public static void SetUpGlobalVariables()
{
AcceptedDatabaseFormats = new List<string> { ".fasta", ".fa", ".xml", ".msp" };
AcceptedSpectraFormats = new List<string> { ".raw", ".mzml", ".mgf", ".msalign" };
AcceptedSpectraFormats = new List<string> { ".raw", ".mzml", ".mgf", ".msalign", ".tdf", ".tdf_bin", ".d" };
AnalyteType = AnalyteType.Peptide;
_InvalidAminoAcids = new char[] { 'X', 'B', 'J', 'Z', ':', '|', ';', '[', ']', '{', '}', '(', ')', '+', '-' };
ExperimentalDesignFileName = "ExperimentalDesign.tsv";
Expand Down
2 changes: 1 addition & 1 deletion MetaMorpheus/GUI/App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<SolidColorBrush x:Key="SideBarMainColor" Color="#353b48" />
<SolidColorBrush x:Key="AccentColor" Color="#0097e6" />
<SolidColorBrush x:Key="PurpleAccentColor" Color="#e6aeff" />
<SolidColorBrush x:Key="SecondaryButtonColor" Color="#2f3640" />
<SolidColorBrush x:Key="SecondaryButtonColor" Color="#504B59" />
<SolidColorBrush x:Key="BackgroundColor" Color="#f5f6fa" />
<SolidColorBrush x:Key="DataGridBackgroundColor" Color="#f5f6fa" />
<SolidColorBrush x:Key="DataGridHeaderColor" Color="#dcdde1" />
Expand Down
4 changes: 2 additions & 2 deletions MetaMorpheus/GUI/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@
{
Dispatcher.BeginInvoke(new Action(() => NewoutLabelStatus(sender, s)));
}
else
else if (InProgressTasks != null)
{
// Find the task or the collection!!!

Expand Down Expand Up @@ -1080,7 +1080,7 @@
}
}

private MetaMorpheusTask? _clipboard;

Check warning on line 1083 in MetaMorpheus/GUI/MainWindow.xaml.cs

View workflow job for this annotation

GitHub Actions / Create Installer Artifact

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Check warning on line 1083 in MetaMorpheus/GUI/MainWindow.xaml.cs

View workflow job for this annotation

GitHub Actions / Create Installer Artifact

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

/// <summary>
/// Handles keyboard input.
Expand Down Expand Up @@ -1264,7 +1264,7 @@

private void MenuItem_MetaDraw_Click(object sender, RoutedEventArgs e)
{
string[]? filesToLoad = null;

Check warning on line 1267 in MetaMorpheus/GUI/MainWindow.xaml.cs

View workflow job for this annotation

GitHub Actions / Create Installer Artifact

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.
try
{
// get completed search tasks from in progress tasks.
Expand All @@ -1279,11 +1279,11 @@

// Get search results
var searchResult = Directory.GetFiles(finalSearchTask.Task.OutputFolder)
.First(p => p.EndsWith(".psmtsv") || p.EndsWith(".osmtsv"));
.First(p => p.EndsWith("PSMs.psmtsv") || p.EndsWith("OSMs.osmtsv"));

filesToLoad = spectraFiles.Append(searchResult).ToArray();
}
catch (Exception ex)

Check warning on line 1286 in MetaMorpheus/GUI/MainWindow.xaml.cs

View workflow job for this annotation

GitHub Actions / Create Installer Artifact

The variable 'ex' is declared but never used
{
// Something went wrong in trying to find a completed search task.
// This is expected when we do not have a completed search to parse.
Expand Down
164 changes: 164 additions & 0 deletions MetaMorpheus/GUI/MetaDraw/BioPolymerCoverageTabView.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
<UserControl x:Class="MetaMorpheusGUI.BioPolymerCoverageTabView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MetaMorpheusGUI"
xmlns:guiFunctions="clr-namespace:GuiFunctions;assembly=GuiFunctions"
xmlns:metaDraw="clr-namespace:GuiFunctions.MetaDraw;assembly=GuiFunctions"
mc:Ignorable="d"
d:DataContext="{x:Static metaDraw:BioPolymerTabModel.Instance}"
d:DesignHeight="450" d:DesignWidth="800">
<DockPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>

<!-- Left Side -->
<Grid Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>

<!--Select database file-->
<DockPanel Grid.Row="0" LastChildFill="True" Grid.ColumnSpan="3" Margin="5 2">
<Label Content="Database File: " Width="95" />

<Button Content="Reset" HorizontalAlignment="Right" DockPanel.Dock="Right"
VerticalAlignment="Center" Width="40" Height="26"
IsEnabled="{Binding DatabasePath, Converter={local:StringIsNotNullOrEmptyToBoolConverter}}"
Command="{Binding ResetDatabaseCommand}" />

<Button Name="SelectDatabaseButton" Content="Select" HorizontalAlignment="Right" DockPanel.Dock="Right"
VerticalAlignment="Center" Width="40" Height="26" Margin="5 0"
IsEnabled="{Binding DatabasePath, Converter={local:StringIsNullOrEmptyToBoolConverter}}"
Click="SelectDatabaseButton_OnClick" />

<Label BorderThickness="1">
<TextBlock TextTrimming="CharacterEllipsis">
<TextBlock.Text>
<Binding Path="DatabaseName" FallbackValue="None Selected" />
</TextBlock.Text>
</TextBlock>
</Label>
</DockPanel>

<DockPanel Grid.Row ="1" Margin =" 5 2">
<Label Content="Color By:" DockPanel.Dock="Left" />
<ComboBox Width="120" Margin="5 0" DockPanel.Dock="Left" HorizontalAlignment="Left"
SelectedValue="{Binding CoverageMapViewModel.ColorBy}"
ItemsSource="{Binding CoverageMapViewModel.AllColorByTypes}" />
</DockPanel>



<!-- Load Button and Search Bar -->
<Border Grid.Row="2" Grid.ColumnSpan="3" BorderBrush="Black"
BorderThickness="0,0,0,1" Margin="5 2" >
<DockPanel LastChildFill="True" Margin="0 0 0 2">
<Button Name="LoadDatabase" Content="Load Files" Width="80"
Command="{Binding LoadDatabaseCommand}"/>

<TextBox Width="140" DockPanel.Dock="Right" VerticalContentAlignment="Center"
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" />
<Label HorizontalAlignment="Right" Height="28">Search</Label>
</DockPanel>
</Border>

<!-- Data Table -->
<GroupBox Header="BioPolymer Groups" Grid.Row="4" Margin="0 2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>

<DataGrid x:Name="biopolymerDataGrid" Grid.Row="0" AutoGenerateColumns="False" VerticalAlignment="Stretch" ScrollViewer.CanContentScroll="True" IsReadOnly="True"
CanUserDeleteRows="false" CanUserAddRows="false" SelectionMode="Single"
SelectionChanged="BioPolymerDataGrid_OnSelectionChanged"
ItemsSource="{Binding FilteredGroups}"
SelectedItem="{Binding SelectedGroup}">
<DataGrid.Columns>
<DataGridTextColumn Header="Accession" Binding="{Binding Accession}" Width="90"
ElementStyle="{StaticResource DataGridCenteredCellStyle}" />
<DataGridTextColumn Header="Unique Cov" Binding="{Binding UniqueSequenceCoverage, StringFormat={}{0:F2}}" Width="60"
ElementStyle="{StaticResource DataGridCenteredCellStyle}" />
<DataGridTextColumn Header="Max Cov" Binding="{Binding MaximumSequenceCoverage, StringFormat={}{0:F2}}" Width="60"
ElementStyle="{StaticResource DataGridCenteredCellStyle}" />
<DataGridTextColumn Header="Name" Binding="{Binding ProteinName}" Width="90"
ElementStyle="{StaticResource DataGridCenteredCellStyle}" />
<DataGridTextColumn Header="Count" Binding="{Binding GroupCount}" Width="70"
ElementStyle="{StaticResource DataGridCenteredCellStyle}" />
<DataGridTextColumn Header="Length" Binding="{Binding Length}" Width="52"
ElementStyle="{StaticResource DataGridCenteredCellStyle}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</GroupBox>

<!-- Loading overlay -->
<Grid x:Name="LoadOverlay" Grid.Row="4" Margin="2 16 2 4"
Visibility="{Binding IsLoading, Converter={local:BooleanToVisibilityConverter}}"

Background="#80000000"
Panel.ZIndex="100">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<ProgressBar IsIndeterminate="True" Width="120" Height="18" Margin="0,0,0,8"/>
<TextBlock Text="Loading..." Foreground="White" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
</StackPanel>
</Grid>

<!-- Export -->
<DockPanel Grid.Row="5" LastChildFill="True" HorizontalAlignment="Center">
<Label Content="Export As: " DockPanel.Dock="Left"/>
<Button Name="ExportBioPolymerCoverage" Width="40" HorizontalAlignment="Left"
Style="{StaticResource MetaDrawButtonStyle}"
Content="{Binding ExportType, Source={x:Static guiFunctions:MetaDrawSettingsViewModel.Instance}}"
Command="{Binding ExportImageCommand}"/>
</DockPanel>
</Grid>

<!--Moveable splitter-->
<GridSplitter Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Background="Silver"
Width="3"/>

<!-- Right side -->
<Grid Grid.Column="2" Name="BioPolymerAnnotationGrid" Style="{StaticResource InternalGridStyle}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="4*" />
<RowDefinition Height="Auto" MaxHeight="300" />
</Grid.RowDefinitions>

<local:SettingsButtonControl Grid.Row="0" Height="52" x:Name="SettingsButton"
HorizontalAlignment="Left" VerticalAlignment="Top"
Panel.ZIndex="1" SelectedTabIndex="4" />
<!-- BioPolymer coverage display -->
<ScrollViewer Grid.Row="1" Name="BioPolymerCoverageHorizontalScroll" Width="Auto"
CanContentScroll="True" VerticalScrollBarVisibility="Auto" Margin="0 10 ">
<local:BioPolymerCoverageMapView DataContext="{Binding CoverageMapViewModel}" />
</ScrollViewer>

<!-- Individual Results -->
<Expander Grid.Row="2" Header="Individual Results">
<DataGrid ScrollViewer.CanContentScroll="True" IsReadOnly="True"
CanUserDeleteRows="false" CanUserAddRows="false" SelectionMode="Single"
SelectionChanged="BioPolymerDataGrid_OnSelectionChanged"
ItemsSource="{Binding SelectedGroup.CoverageResults}" >

</DataGrid>
</Expander>
</Grid>
</Grid>
</DockPanel>
</UserControl>
55 changes: 55 additions & 0 deletions MetaMorpheus/GUI/MetaDraw/BioPolymerCoverageTabView.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System.Linq;
using EngineLayer;
using System.Windows;
using System.Windows.Controls;
using GuiFunctions.MetaDraw;

namespace MetaMorpheusGUI;

/// <summary>
/// Interaction logic for BioPolymerCoverageTabView.xaml
/// </summary>
public partial class BioPolymerCoverageTabView : UserControl
{
public BioPolymerCoverageTabView()
{
InitializeComponent();
}

private void SelectDatabaseButton_OnClick(object sender, RoutedEventArgs e)
{
var dataContext = DataContext as BioPolymerTabViewModel;
if (sender == null || dataContext == null)
{
return;
}

string filterString = string.Join(";", GlobalVariables.AcceptedDatabaseFormats.Select(p => "*" + p));

Microsoft.Win32.OpenFileDialog openFileDialog1 = new Microsoft.Win32.OpenFileDialog
{
Filter = "Database Files(" + filterString + ")|" + filterString,
FilterIndex = 1,
RestoreDirectory = true,
Multiselect = false
};

if (openFileDialog1.ShowDialog() == true)
{
var toAdd = openFileDialog1.FileName;
if (GlobalVariables.AcceptedDatabaseFormats.Contains(GlobalVariables.GetFileExtension(toAdd).ToLowerInvariant()))
{
dataContext.DatabasePath = toAdd;
}
else
{
MessageBox.Show("Cannot read file type: " + GlobalVariables.GetFileExtension(toAdd).ToLowerInvariant());
}
}
}

private void BioPolymerDataGrid_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
//throw new System.NotImplementedException();
}
}
6 changes: 3 additions & 3 deletions MetaMorpheus/GUI/MetaDraw/ChimeraAnalysisTabView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,11 @@ private void AttachLegendCanvasEvents()
if (legendCanvas != null)
{
ChimeraLegend.Children.Add(dataContext?.LegendCanvas);

legendCanvas.UpdateLayout();
double parentWidth = ChimeraLegend.ActualWidth;
double parentHeight = ChimeraLegend.ActualHeight;
double legendWidth = legendCanvas.Width;
double legendHeight = legendCanvas.Height;
double legendWidth = legendCanvas.ActualWidth;
double legendHeight = legendCanvas.ActualHeight;

// Check if previous position is valid and within bounds
bool validLeft = !double.IsNaN(lastLeft) && lastLeft >= 0 && lastLeft + legendWidth <= parentWidth;
Expand Down
Loading
Loading