@@ -7,14 +7,16 @@ namespace EngineLayer
7
7
public class PeptideWithPossibleModifications : Peptide
8
8
{
9
9
10
+ private readonly Dictionary < int , MetaMorpheusModification > thisDictionaryOfFixedMods ;
10
11
#region Public Constructors
11
12
12
- public PeptideWithPossibleModifications ( int oneBasedStartResidueNumberInProtein , int oneBasedEndResidueNumberInProtein , Protein parentProtein , int missedCleavages , string peptideDescription )
13
+ public PeptideWithPossibleModifications ( int oneBasedStartResidueNumberInProtein , int oneBasedEndResidueNumberInProtein , Protein parentProtein , int missedCleavages , string peptideDescription , IEnumerable < MetaMorpheusModification > allKnownFixedModifications )
13
14
: base ( parentProtein , oneBasedStartResidueNumberInProtein , oneBasedEndResidueNumberInProtein )
14
15
{
15
16
OneBasedPossibleLocalizedModifications = Protein . OneBasedPossibleLocalizedModifications . Where ( ok => ok . Key >= OneBasedStartResidueInProtein && ok . Key <= OneBasedEndResidueInProtein ) . ToDictionary ( ok => ok . Key - OneBasedStartResidueInProtein + 1 , ok => ok . Value ) ;
16
17
this . MissedCleavages = missedCleavages ;
17
18
this . PeptideDescription = peptideDescription ;
19
+ thisDictionaryOfFixedMods = AddFixedMods ( allKnownFixedModifications ) ;
18
20
}
19
21
20
22
#endregion Public Constructors
@@ -28,7 +30,7 @@ public PeptideWithPossibleModifications(int oneBasedStartResidueNumberInProtein,
28
30
29
31
#region Public Methods
30
32
31
- public IEnumerable < PeptideWithSetModifications > GetPeptideWithSetModifications ( List < MetaMorpheusModification > variableModifications , int maximumVariableModificationIsoforms , int maxModsForPeptide , IEnumerable < MetaMorpheusModification > allKnownFixedModifications )
33
+ public IEnumerable < PeptideWithSetModifications > GetPeptideWithSetModifications ( List < MetaMorpheusModification > variableModifications , int maximumVariableModificationIsoforms , int maxModsForPeptide )
32
34
{
33
35
var two_based_possible_variable_and_localizeable_modifications = new Dictionary < int , UniqueModificationsCollection > ( Length + 4 ) ;
34
36
@@ -143,7 +145,10 @@ public IEnumerable<PeptideWithSetModifications> GetPeptideWithSetModifications(L
143
145
int variable_modification_isoforms = 0 ;
144
146
foreach ( Dictionary < int , MetaMorpheusModification > kvp in GetVariableModificationPatterns ( two_based_possible_variable_and_localizeable_modifications , maxModsForPeptide ) )
145
147
{
146
- yield return new PeptideWithSetModifications ( this , AddFixedMods ( kvp , allKnownFixedModifications ) ) ;
148
+ foreach ( var ok in thisDictionaryOfFixedMods )
149
+ if ( ! kvp . ContainsKey ( ok . Key ) )
150
+ kvp . Add ( ok . Key , ok . Value ) ;
151
+ yield return new PeptideWithSetModifications ( this , kvp ) ;
147
152
variable_modification_isoforms ++ ;
148
153
if ( variable_modification_isoforms == maximumVariableModificationIsoforms )
149
154
yield break ;
@@ -237,53 +242,34 @@ private static Dictionary<int, MetaMorpheusModification> GetNewVariableModificat
237
242
return modification_pattern ;
238
243
}
239
244
240
- private Dictionary < int , MetaMorpheusModification > AddFixedMods ( Dictionary < int , MetaMorpheusModification > allModsOneIsNterminus , IEnumerable < MetaMorpheusModification > allKnownFixedModifications )
245
+ private Dictionary < int , MetaMorpheusModification > AddFixedMods ( IEnumerable < MetaMorpheusModification > allKnownFixedModifications )
241
246
{
242
- MetaMorpheusModification val ;
243
- for ( int i = 0 ; i <= Length + 3 ; i ++ )
247
+ var allModsOneIsNterminus = new Dictionary < int , MetaMorpheusModification > ( Length + 3 ) ;
248
+ foreach ( MetaMorpheusModification mod in allKnownFixedModifications )
244
249
{
245
- foreach ( MetaMorpheusModification mod in allKnownFixedModifications )
250
+ switch ( mod . ThisModificationType )
246
251
{
247
- if ( i == 0 && ( OneBasedStartResidueInProtein == 1 || OneBasedStartResidueInProtein == 2 ) )
248
- {
249
- if ( mod . ThisModificationType == ModificationType . ProteinNTerminus && ( mod . AminoAcid . Equals ( this [ 0 ] ) || mod . AminoAcid . Equals ( '\0 ' ) ) )
250
- {
251
- if ( ! allModsOneIsNterminus . TryGetValue ( 1 , out val ) )
252
- allModsOneIsNterminus . Add ( 1 , mod ) ;
253
- }
254
- }
255
- else if ( i == 1 )
256
- {
257
- if ( mod . ThisModificationType == ModificationType . PeptideNTerminus && ( mod . AminoAcid . Equals ( this [ 0 ] ) || mod . AminoAcid . Equals ( '\0 ' ) ) )
258
- {
259
- if ( ! allModsOneIsNterminus . TryGetValue ( 1 , out val ) )
260
- allModsOneIsNterminus . Add ( 1 , mod ) ;
261
- }
262
- }
263
- else if ( i >= 2 && i <= Length + 1 )
264
- {
265
- if ( mod . ThisModificationType == ModificationType . AminoAcidResidue && ( mod . AminoAcid . Equals ( this [ i - 2 ] ) || mod . AminoAcid . Equals ( '\0 ' ) ) )
266
- {
267
- if ( ! allModsOneIsNterminus . TryGetValue ( i , out val ) )
268
- allModsOneIsNterminus . Add ( i , mod ) ;
269
- }
270
- }
271
- else if ( i == Length + 2 )
272
- {
273
- if ( mod . ThisModificationType == ModificationType . PeptideCTerminus && ( mod . AminoAcid . Equals ( this [ Length - 1 ] ) || mod . AminoAcid . Equals ( '\0 ' ) ) )
274
- {
275
- if ( ! allModsOneIsNterminus . TryGetValue ( Length + 2 , out val ) )
276
- allModsOneIsNterminus . Add ( Length + 2 , mod ) ;
277
- }
278
- }
279
- else if ( i == Length + 3 && OneBasedEndResidueInProtein == Protein . Length )
280
- {
281
- if ( mod . ThisModificationType == ModificationType . ProteinCTerminus && ( mod . AminoAcid . Equals ( this [ Length - 1 ] ) || mod . AminoAcid . Equals ( '\0 ' ) ) )
282
- {
283
- if ( ! allModsOneIsNterminus . TryGetValue ( Length + 2 , out val ) )
284
- allModsOneIsNterminus . Add ( Length + 2 , mod ) ;
285
- }
286
- }
252
+ case ModificationType . ProteinNTerminus :
253
+ if ( ( OneBasedStartResidueInProtein == 1 || OneBasedStartResidueInProtein == 2 ) && ( mod . AminoAcid . Equals ( '\0 ' ) || mod . AminoAcid . Equals ( this [ 0 ] ) ) )
254
+ allModsOneIsNterminus [ 1 ] = mod ;
255
+ break ;
256
+ case ModificationType . PeptideNTerminus :
257
+ if ( mod . AminoAcid . Equals ( '\0 ' ) || mod . AminoAcid . Equals ( this [ 0 ] ) )
258
+ allModsOneIsNterminus [ 1 ] = mod ;
259
+ break ;
260
+ case ModificationType . AminoAcidResidue :
261
+ for ( int i = 2 ; i <= Length + 1 ; i ++ )
262
+ if ( mod . AminoAcid . Equals ( this [ i - 2 ] ) || mod . AminoAcid . Equals ( '\0 ' ) )
263
+ allModsOneIsNterminus [ i ] = mod ;
264
+ break ;
265
+ case ModificationType . PeptideCTerminus :
266
+ if ( mod . AminoAcid . Equals ( '\0 ' ) || mod . AminoAcid . Equals ( this [ Length - 1 ] ) )
267
+ allModsOneIsNterminus [ Length + 2 ] = mod ;
268
+ break ;
269
+ case ModificationType . ProteinCTerminus :
270
+ if ( OneBasedEndResidueInProtein == Protein . Length && ( mod . AminoAcid . Equals ( '\0 ' ) || mod . AminoAcid . Equals ( this [ Length - 1 ] ) ) )
271
+ allModsOneIsNterminus [ Length + 2 ] = mod ;
272
+ break ;
287
273
}
288
274
}
289
275
return allModsOneIsNterminus ;
0 commit comments