Skip to content

Commit 602475d

Browse files
fix bug in xicreader with nonsensical retention time windows
1 parent 92e055f commit 602475d

2 files changed

Lines changed: 65 additions & 17 deletions

File tree

ThermoRawFileParserTest/XicReaderTests.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void testXicRead()
4848
var testRawFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Data/small2.RAW");
4949
XicData xicData = new XicData
5050
{
51-
// test the full range
51+
// test the full retention time range
5252
Content = new List<XicUnit>
5353
{
5454
new XicUnit()
@@ -71,6 +71,32 @@ public void testXicRead()
7171
Assert.AreEqual(749.8093, xicUnit.Meta.MzEnd, 0.01);
7272
Assert.AreEqual(10, xicUnit.Meta.RtStart, 0.01);
7373
Assert.AreEqual(10.98, xicUnit.Meta.RtEnd, 0.01);
74+
75+
xicData = new XicData
76+
{
77+
// test the nonsensical retention time range
78+
Content = new List<XicUnit>
79+
{
80+
new XicUnit()
81+
{
82+
Meta = new XicMeta()
83+
{
84+
MzStart = 749.786,
85+
MzEnd = 749.8093,
86+
RtStart = 300,
87+
RtEnd = 400
88+
}
89+
}
90+
}
91+
};
92+
XicReader.ReadXic(testRawFile, false, xicData);
93+
xicUnit = xicData.Content[0];
94+
Assert.AreEqual(1, ((Array) xicUnit.RetentionTimes).Length);
95+
Assert.AreEqual(1, ((Array) xicUnit.Intensities).Length);
96+
Assert.AreEqual(749.786, xicUnit.Meta.MzStart, 0.01);
97+
Assert.AreEqual(749.8093, xicUnit.Meta.MzEnd, 0.01);
98+
Assert.AreEqual(300, xicUnit.Meta.RtStart, 0.01);
99+
Assert.AreEqual(400, xicUnit.Meta.RtEnd, 0.01);
74100
}
75101

76102
[Test]

XIC/XicReader.cs

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.Reflection;
5+
using log4net;
6+
using NUnit.Framework.Internal;
47
using ThermoFisher.CommonCore.Data;
58
using ThermoFisher.CommonCore.Data.Business;
69
using ThermoFisher.CommonCore.Data.Interfaces;
@@ -9,6 +12,9 @@ namespace ThermoRawFileParser.XIC
912
{
1013
public class XicReader
1114
{
15+
private static readonly ILog Log =
16+
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
17+
1218
private const string MsFilter = "ms";
1319

1420
public static void ReadXic(string rawFilePath, bool base64, XicData xicData)
@@ -104,36 +110,52 @@ public static void ReadXic(string rawFilePath, bool base64, XicData xicData)
104110
xicUnit.Meta.RtEnd = endTime;
105111
}
106112

113+
IChromatogramData data = null;
107114
if (rtFilteredScans == null)
108115
{
109116
rtFilteredScans = rawFile.GetFilteredScansListByTimeRange(MsFilter,
110117
xicUnit.Meta.RtStart.Value, xicUnit.Meta.RtEnd.Value);
111-
}
112118

113-
IChromatogramData data;
114-
if (!rtFilteredScans.IsNullOrEmpty())
115-
{
116-
data = rawFile.GetChromatogramData(new IChromatogramSettings[] {settings}, rtFilteredScans[0],
117-
rtFilteredScans[rtFilteredScans.Count - 1]);
119+
if (rtFilteredScans.Count != 0)
120+
{
121+
data = rawFile.GetChromatogramData(new IChromatogramSettings[] {settings},
122+
rtFilteredScans[0],
123+
rtFilteredScans[rtFilteredScans.Count - 1]);
124+
if (data.PositionsArray.Length == 1 && data.PositionsArray[0].Length == 1 &&
125+
(Math.Abs(data.PositionsArray[0][0] - startTime) < 0.001 ||
126+
Math.Abs(data.PositionsArray[0][0] - endTime) < 0.001))
127+
{
128+
Log.Warn(
129+
$"Only the minimum or maximum retention time was returned. This is an indication that the provided retention time range [{xicUnit.Meta.RtStart}-{xicUnit.Meta.RtEnd}] lies outside the max. window [{startTime}-{endTime}]");
130+
}
131+
}
132+
else
133+
{
134+
Log.Warn(
135+
$"No scans found in retention time range [{xicUnit.Meta.RtStart}-{xicUnit.Meta.RtEnd}]. This is an indication that the provided retention time window lies outside the max. window [{startTime}-{endTime}]");
136+
}
118137
}
119138
else
120139
{
121140
data = rawFile.GetChromatogramData(new IChromatogramSettings[] {settings}, firstScanNumber,
122141
lastScanNumber);
123142
}
124143

125-
var chromatogramTrace = ChromatogramSignal.FromChromatogramData(data);
126-
if (chromatogramTrace[0].Scans.Count != 0)
144+
if (data != null)
127145
{
128-
if (!base64)
129-
{
130-
xicUnit.RetentionTimes = chromatogramTrace[0].Times;
131-
xicUnit.Intensities = chromatogramTrace[0].Intensities;
132-
}
133-
else
146+
var chromatogramTrace = ChromatogramSignal.FromChromatogramData(data);
147+
if (chromatogramTrace[0].Scans.Count != 0)
134148
{
135-
xicUnit.RetentionTimes = GetBase64String(chromatogramTrace[0].Times);
136-
xicUnit.Intensities = GetBase64String(chromatogramTrace[0].Intensities);
149+
if (!base64)
150+
{
151+
xicUnit.RetentionTimes = chromatogramTrace[0].Times;
152+
xicUnit.Intensities = chromatogramTrace[0].Intensities;
153+
}
154+
else
155+
{
156+
xicUnit.RetentionTimes = GetBase64String(chromatogramTrace[0].Times);
157+
xicUnit.Intensities = GetBase64String(chromatogramTrace[0].Intensities);
158+
}
137159
}
138160
}
139161
}

0 commit comments

Comments
 (0)