Skip to content

Commit c9fa107

Browse files
committed
Precursor intensity in MGF
1 parent 27f438c commit c9fa107

File tree

3 files changed

+52
-53
lines changed

3 files changed

+52
-53
lines changed

Writer/MgfSpectrumWriter.cs

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Globalization;
32
using System.Reflection;
43
using log4net;
54
using ThermoFisher.CommonCore.Data.Business;
@@ -88,50 +87,49 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc
8887
// Construct the precursor reference string for the title
8988
var precursorReference = "";
9089

91-
if (ParseInput.MgfPrecursor)
90+
//Tracking precursor scan numbers for MSn scans
91+
if (msLevel == 1)
9292
{
93-
if (msLevel == 1)
94-
{
95-
// Keep track of the MS1 scan number for precursor reference
96-
_precursorScanNumbers[""] = scanNumber;
97-
}
98-
else
93+
// Keep track of the MS1 scan number for precursor reference
94+
_precursorScanNumbers[""] = scanNumber;
95+
}
96+
else
97+
{
98+
// Keep track of scan number and isolation m/z for precursor reference
99+
var result = _filterStringIsolationMzPattern.Match(scanEvent.ToString());
100+
if (result.Success)
99101
{
100-
// Keep track of scan number and isolation m/z for precursor reference
101-
var result = _filterStringIsolationMzPattern.Match(scanEvent.ToString());
102-
if (result.Success)
102+
if (_precursorScanNumbers.ContainsKey(result.Groups[1].Value))
103103
{
104-
if (_precursorScanNumbers.ContainsKey(result.Groups[1].Value))
105-
{
106-
_precursorScanNumbers.Remove(result.Groups[1].Value);
107-
}
108-
109-
_precursorScanNumbers.Add(result.Groups[1].Value, scanNumber);
104+
_precursorScanNumbers.Remove(result.Groups[1].Value);
110105
}
111106

112-
//update precursor scan if it is provided in trailer data
113-
var trailerMasterScan = trailerData.AsPositiveInt("Master Scan Number:");
114-
if (trailerMasterScan.HasValue)
115-
{
116-
_precursorScanNumber = trailerMasterScan.Value;
117-
}
118-
else //try getting it from the scan filter
119-
{
120-
_precursorScanNumber = GetParentFromScanString(result.Groups[1].Value);
121-
}
107+
_precursorScanNumbers.Add(result.Groups[1].Value, scanNumber);
108+
}
122109

123-
if (_precursorScanNumber > 0)
124-
{
125-
precursorReference = ConstructSpectrumTitle((int)Device.MS, 1, _precursorScanNumber);
126-
}
127-
else
128-
{
129-
Log.Error($"Cannot find precursor scan for scan# {scanNumber}");
130-
_precursorTree[-2] = new PrecursorInfo(0, msLevel, FindLastReaction(scanEvent, msLevel), null);
131-
ParseInput.NewError();
132-
}
110+
//update precursor scan if it is provided in trailer data
111+
var trailerMasterScan = trailerData.AsPositiveInt("Master Scan Number:");
112+
if (trailerMasterScan.HasValue)
113+
{
114+
_precursorScanNumber = trailerMasterScan.Value;
115+
}
116+
else //try getting it from the scan filter
117+
{
118+
_precursorScanNumber = GetParentFromScanString(result.Groups[1].Value);
119+
}
120+
121+
if (_precursorScanNumber > 0)
122+
{
123+
precursorReference = ConstructSpectrumTitle((int)Device.MS, 1, _precursorScanNumber);
124+
}
125+
else
126+
{
127+
Log.Error($"Cannot find precursor scan for scan# {scanNumber}");
128+
_precursorTree[-2] = new PrecursorInfo(0, msLevel, FindLastReaction(scanEvent, msLevel), null);
129+
ParseInput.NewError();
133130
}
134131
}
132+
135133

136134
if (ParseInput.MsLevel.Contains(msLevel))
137135
{
@@ -150,7 +148,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc
150148

151149
Writer.WriteLine($"SCANS={scanNumber}");
152150
Writer.WriteLine(
153-
$"RTINSECONDS={(retentionTime * 60).ToString(CultureInfo.InvariantCulture)}");
151+
$"RTINSECONDS={(retentionTime * 60):f5}");
154152

155153
int? charge = trailerData.AsPositiveInt("Charge State:");
156154
double? monoisotopicMz = trailerData.AsDouble("Monoisotopic M/Z:");
@@ -162,8 +160,11 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc
162160
var selectedIonMz =
163161
CalculateSelectedIonMz(reaction, monoisotopicMz, isolationWidth);
164162

165-
Writer.WriteLine("PEPMASS=" +
166-
selectedIonMz.ToString(CultureInfo.InvariantCulture));
163+
var selectedIonIntensity = (selectedIonMz > ZeroDelta && _precursorScanNumber > 0) ?
164+
CalculatePrecursorPeakIntensity(rawFile, _precursorScanNumber, reaction.PrecursorMass, isolationWidth,
165+
ParseInput.NoPeakPicking.Contains(msLevel - 1)) : 0;
166+
167+
Writer.WriteLine($"PEPMASS={selectedIonMz:f5} {selectedIonIntensity:f3}");
167168
}
168169

169170
// Charge

Writer/MzMlSpectrumWriter.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2323,19 +2323,17 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE
23232323
{
23242324
var selectedIonIntensity = CalculatePrecursorPeakIntensity(_rawFile, precursorScanNumber, reaction.PrecursorMass, isolationWidth,
23252325
ParseInput.NoPeakPicking.Contains(msLevel - 1));
2326-
if (selectedIonIntensity != null)
2326+
2327+
ionCvParams.Add(new CVParamType
23272328
{
2328-
ionCvParams.Add(new CVParamType
2329-
{
2330-
name = "peak intensity",
2331-
value = selectedIonIntensity.ToString(),
2332-
accession = "MS:1000042",
2333-
cvRef = "MS",
2334-
unitAccession = "MS:1000131",
2335-
unitCvRef = "MS",
2336-
unitName = "number of detector counts"
2337-
});
2338-
}
2329+
name = "peak intensity",
2330+
value = selectedIonIntensity.ToString(),
2331+
accession = "MS:1000042",
2332+
cvRef = "MS",
2333+
unitAccession = "MS:1000131",
2334+
unitCvRef = "MS",
2335+
unitName = "number of detector counts"
2336+
});
23392337
}
23402338

23412339
precursor.selectedIonList.selectedIon[0].cvParam = ionCvParams.ToArray();

Writer/SpectrumWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public static IReaction GetReaction(IScanEvent scanEvent, int scanNumber)
209209
/// <param name="precursorMass">the precursor mass</param>
210210
/// <param name="isolationWidth">the isolation width</param>
211211
/// <param name="useProfile">profile/centroid switch</param>
212-
protected static double? CalculatePrecursorPeakIntensity(IRawDataPlus rawFile, int precursorScanNumber,
212+
protected static double CalculatePrecursorPeakIntensity(IRawDataPlus rawFile, int precursorScanNumber,
213213
double precursorMass, double? isolationWidth, bool useProfile)
214214
{
215215
double precursorIntensity = 0;

0 commit comments

Comments
 (0)