@@ -1142,12 +1142,37 @@ 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 ) ) ;
11461146 int ? charge = null ;
11471147 double ? monoisotopicMz = null ;
11481148 double ? ionInjectionTime = null ;
11491149 double ? FAIMSCV = null ;
11501150 List < double > SPSMasses = new List < double > ( ) ;
1151+
1152+ charge = trailerData . AsPositiveInt ( "Charge State:" ) ;
1153+ monoisotopicMz = trailerData . AsDouble ( "Monoisotopic M/Z:" ) ;
1154+ ionInjectionTime = trailerData . AsDouble ( "Ion Injection Time (ms):" ) ;
1155+ if ( trailerData . AsBool ( "FAIMS Voltage On:" ) . GetValueOrDefault ( false ) )
1156+ FAIMSCV = trailerData . AsDouble ( "FAIMS CV:" ) ;
1157+
1158+ //tune version < 3 produced trailer entry like "SPS Mass #", one entry per mass
1159+ foreach ( var label in trailerData . MatchKeys ( SPSentry ) )
1160+ {
1161+ var mass = trailerData . AsDouble ( label ) . GetValueOrDefault ( 0 ) ;
1162+ if ( mass > 0 ) SPSMasses . Add ( ( double ) mass ) ; //zero means mass does not exist
1163+ }
1164+
1165+ //tune version == 3 produces trailer entry "SPS Masses", comma separated list of masses
1166+ foreach ( var label in trailerData . MatchKeys ( SPSentry3 ) )
1167+ {
1168+ foreach ( var mass in trailerData . Get ( label ) . Trim ( ) . Split ( new char [ ] { ',' } , StringSplitOptions . RemoveEmptyEntries ) )
1169+ {
1170+ SPSMasses . Add ( double . Parse ( mass ) ) ;
1171+ }
1172+
1173+ }
1174+
1175+ /*var trailerData = _rawFile.GetTrailerExtraInformation(scanNumber);
11511176 for (var i = 0; i < trailerData.Length; i++)
11521177 {
11531178 if (trailerData.Labels[i] == "Charge State:")
@@ -1192,13 +1217,15 @@ private SpectrumType ConstructMSSpectrum(int scanNumber)
11921217 }
11931218
11941219 }
1195- }
1220+ }*/
11961221
11971222 // Construct and set the scan list element of the spectrum
11981223 var scanListType = ConstructScanList ( scanNumber , scan , scanFilter , scanEvent , monoisotopicMz ,
11991224 ionInjectionTime ) ;
12001225 spectrum . scanList = scanListType ;
12011226
1227+ int ? trailerMasterScan ;
1228+
12021229 switch ( scanFilter . MSOrder )
12031230 {
12041231 case MSOrderType . Ms :
@@ -1211,7 +1238,8 @@ private SpectrumType ConstructMSSpectrum(int scanNumber)
12111238 } ) ;
12121239
12131240 // Keep track of scan number for precursor reference
1214- _precursorMs1ScanNumber = scanNumber ;
1241+ trailerMasterScan = trailerData . AsInt ( "Master Scan Number:" ) ;
1242+ _precursorMs1ScanNumber = trailerMasterScan . HasValue ? trailerMasterScan . Value : scanNumber ;
12151243
12161244 break ;
12171245 case MSOrderType . Ms2 :
@@ -1232,7 +1260,9 @@ private SpectrumType ConstructMSSpectrum(int scanNumber)
12321260 _precursorMs2ScanNumbers . Remove ( result . Groups [ 1 ] . Value ) ;
12331261 }
12341262
1235- _precursorMs2ScanNumbers . Add ( result . Groups [ 1 ] . Value , scanNumber ) ;
1263+ trailerMasterScan = trailerData . AsInt ( "Master Scan Number:" ) ;
1264+ _precursorMs2ScanNumbers . Add ( result . Groups [ 1 ] . Value ,
1265+ trailerMasterScan . HasValue ? trailerMasterScan . Value : scanNumber ) ;
12361266 }
12371267
12381268 // Construct and set the precursor list element of the spectrum
0 commit comments