@@ -31,7 +31,7 @@ public class MzMlSpectrumWriter : SpectrumWriter
3131
3232 //tune version < 3 produces multiple trailer entry like "SPS Mass [number]"
3333 private readonly Regex SPSentry = new Regex ( @"SPS Mass\s+\d+:" ) ;
34- //tune version == 3 produces trailer entry "SPS Masses/ Continued"
34+ //tune version == 3 produces trailer entry "SPS Masses ( Continued) "
3535 private readonly Regex SPSentry3 = new Regex ( @"SPS Masses(?:\s+Continued)?:" ) ;
3636
3737 private IRawDataPlus _rawFile ;
@@ -1142,7 +1142,46 @@ private SpectrumType ConstructMSSpectrum(int scanNumber)
11421142 } ;
11431143
11441144 // Trailer extra data list
1145- var trailerData = _rawFile . GetTrailerExtraInformation ( scanNumber ) ;
1145+ var trailerData = new ScanTrailer ( _rawFile . GetTrailerExtraInformation ( scanNumber ) ) ;
1146+ int ? charge ;
1147+ double ? monoisotopicMz ;
1148+ double ? ionInjectionTime ;
1149+ double ? isolationWidth ;
1150+ double ? FAIMSCV = null ;
1151+ List < double > SPSMasses = new List < double > ( ) ;
1152+
1153+ charge = trailerData . AsPositiveInt ( "Charge State:" ) ;
1154+ monoisotopicMz = trailerData . AsDouble ( "Monoisotopic M/Z:" ) ;
1155+ ionInjectionTime = trailerData . AsDouble ( "Ion Injection Time (ms):" ) ;
1156+ isolationWidth = trailerData . AsDouble ( "MS" + ( int ) scanFilter . MSOrder + " Isolation Width:" ) ;
1157+ if ( trailerData . AsBool ( "FAIMS Voltage On:" ) . GetValueOrDefault ( false ) )
1158+ FAIMSCV = trailerData . AsDouble ( "FAIMS CV:" ) ;
1159+
1160+ //tune version < 3
1161+ if ( trailerData . Has ( "SPS Mass 1:" ) )
1162+ {
1163+ foreach ( var label in trailerData . MatchKeys ( SPSentry ) )
1164+ {
1165+ var mass = trailerData . AsDouble ( label ) . GetValueOrDefault ( 0 ) ;
1166+ if ( mass > 0 ) SPSMasses . Add ( ( double ) mass ) ; //zero means mass does not exist
1167+ }
1168+ }
1169+
1170+ //tune version == 3
1171+ if ( trailerData . Has ( "SPS Masses:" ) )
1172+ {
1173+ foreach ( var label in trailerData . MatchKeys ( SPSentry3 ) )
1174+ {
1175+ foreach ( var mass in trailerData . Get ( label ) . Trim ( ) . Split ( new char [ ] { ',' } , StringSplitOptions . RemoveEmptyEntries ) )
1176+ {
1177+ SPSMasses . Add ( double . Parse ( mass ) ) ;
1178+ }
1179+
1180+ }
1181+ }
1182+
1183+ //Older iterative version that works with trailer directly, can be removed if the new object version is better
1184+ /*var trailerData = _rawFile.GetTrailerExtraInformation(scanNumber);
11461185 int? charge = null;
11471186 double? monoisotopicMz = null;
11481187 double? ionInjectionTime = null;
@@ -1200,7 +1239,7 @@ private SpectrumType ConstructMSSpectrum(int scanNumber)
12001239 }
12011240
12021241 }
1203- }
1242+ }*/
12041243
12051244 // Construct and set the scan list element of the spectrum
12061245 var scanListType = ConstructScanList ( scanNumber , scan , scanFilter , scanEvent , monoisotopicMz ,
0 commit comments