11using System ;
2- using System . Globalization ;
32using System . Reflection ;
43using log4net ;
54using 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
0 commit comments