Skip to content
Merged
6 changes: 3 additions & 3 deletions pwiz_tools/Skyline/FileUI/ManageResultsDlg.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,19 +185,19 @@ public ManageResultsSettings FormSettings
{
get
{
var results = DocumentUIContainer.Document.MeasuredResults ?? MeasuredResults.EMPTY;
var chromatograms = DocumentUIContainer.Document.MeasuredResults?.Chromatograms ?? Array.Empty<ChromatogramSet>();
var remainingReplicates = listResults.Items.Cast<ManageResultsAction>().Select(a => a.Chromatograms);

// only keep renames where there's still a replicate with the new name
var renamed = _renamedReplicates.Where(r => remainingReplicates.Any(rep => rep.Name == r.Value))
.Select(r => new RenamedReplicate(r.Key, r.Value)).ToList();

var removed = results.Chromatograms.Except(remainingReplicates)
var removed = chromatograms.Except(remainingReplicates)
.Where(chrom => renamed.All(r => r.OldName != chrom.Name))
.Select(c => c.Name).ToList();

return new ManageResultsSettings(renamed, removed,
LibraryRunsRemovedList, removed.Count == results.Chromatograms.Count,
LibraryRunsRemovedList, removed.Count == chromatograms.Count,
IsRemoveAllLibraryRuns,
IsRemoveCorrespondingReplicates, IsRemoveCorrespondingLibraries);
}
Expand Down
12 changes: 10 additions & 2 deletions pwiz_tools/Skyline/Model/DocSettings/SrmSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -531,9 +531,17 @@ public SrmSettings ChangeDataSettings(DataSettings prop)

public SrmSettings ChangeMeasuredResults(MeasuredResults prop)
{
ValidateMeasuredResults(prop);

return ChangeProp(ImClone(this), im => im.MeasuredResults = prop);
}

private void ValidateMeasuredResults(MeasuredResults measuredResults)
{
if (measuredResults != null && measuredResults.Chromatograms.Count == 0)
throw new ArgumentException(@"MeasuredResults must have at least one ChromatogramSet. Use null to remove all results.");
}

public SrmSettings ChangeIsResultsJoiningDisabled(bool prop)
{
return ChangeProp(ImClone(this), im =>
Expand Down Expand Up @@ -2282,13 +2290,13 @@ public override void ReadXml(XmlReader reader)
// We want Skyline to be able to read older documents where <measured_results> come before <data_settings>
if (reader.IsStartElement(new XmlElementHelper<MeasuredResults>().ElementNames[0]))
{
MeasuredResults = reader.DeserializeElement<MeasuredResults>();
MeasuredResults = reader.DeserializeElement<MeasuredResults>()?.NullIfEmpty();
DataSettings = reader.DeserializeElement<DataSettings>() ?? DataSettings.DEFAULT;
}
else
{
DataSettings = reader.DeserializeElement<DataSettings>() ?? DataSettings.DEFAULT;
MeasuredResults = reader.DeserializeElement<MeasuredResults>();
MeasuredResults = reader.DeserializeElement<MeasuredResults>()?.NullIfEmpty();
}
DocumentRetentionTimes = reader.DeserializeElement<DocumentRetentionTimes>() ?? DocumentRetentionTimes.EMPTY;
reader.ReadEndElement();
Expand Down
11 changes: 7 additions & 4 deletions pwiz_tools/Skyline/Model/Results/MeasuredResults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ namespace pwiz.Skyline.Model.Results
[XmlRoot("measured_results")]
public sealed class MeasuredResults : Immutable, IXmlSerializable
{
public static readonly MeasuredResults EMPTY = new MeasuredResults(new ChromatogramSet[0]);

private static readonly HashSet<MsDataFileUri> EMPTY_FILES = new HashSet<MsDataFileUri>();

private ImmutableList<ChromatogramSet> _chromatograms;
Expand Down Expand Up @@ -64,9 +62,14 @@ public MeasuredResults(IList<ChromatogramSet> chromatograms, bool disableJoining
IsTimeNormalArea = true;
}

public bool IsEmpty
/// <summary>
/// Returns null if Chromatograms is empty to help with assignment
/// to SrmSettings, which does not allow MeasuredResults with empty
/// Chromatograms, but requires null instead in this case.
/// </summary>
public MeasuredResults NullIfEmpty()
{
get { return _chromatograms == null || _chromatograms.Count == 0; }
return Chromatograms.Count == 0 ? null : this;
}

[TrackChildren]
Expand Down