@@ -743,27 +743,34 @@ public static AminoAcidSet getAminoAcidSetFromModFile(String modFilePath) {
743
743
try {
744
744
numMods = Integer .parseInt (modSetting .split ("=" )[1 ].trim ());
745
745
} catch (NumberFormatException e ) {
746
- System .err .println (fileName + ": Invalid NumMods option at line " + lineNum + ": " + s );
746
+ System .err .println ("Error: Invalid NumMods option at line " +
747
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
747
748
e .printStackTrace ();
748
749
System .exit (-1 );
749
750
}
750
751
} else {
751
752
String [] modInfo = modSetting .split ("," );
752
753
if (modInfo .length < 5 ) {
754
+ System .out .println ("Ignoring line in " );
753
755
continue ;
754
756
}
755
757
756
758
// Mass or Composition
757
759
double modMass = 0 ;
758
760
String compStr = modInfo [0 ].trim ();
761
+
762
+ // First try to parse compStr as an empirical formula
763
+ // Supports C, H, N, O, S, P, Br, Cl, Fe, and Se
764
+
759
765
Double mass = Composition .getMass (compStr );
760
766
if (mass != null )
761
767
modMass = mass ;
762
768
else {
763
769
try {
764
770
modMass = Double .parseDouble (compStr );
765
771
} catch (NumberFormatException e ) {
766
- System .err .println (fileName + ": AminoAcidSet: Invalid Mass/Composition at line " + lineNum + ": " + s );
772
+ System .err .println ("Error: Invalid Mass/Composition at line " +
773
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
767
774
e .printStackTrace ();
768
775
System .exit (-1 );
769
776
}
@@ -804,21 +811,25 @@ else if (modInfo[2].trim().equalsIgnoreCase("custom"))
804
811
modTypeParseFailed = true ;
805
812
806
813
if ((!isResidueStrLegitimate && !isCustomAminoAcid ) || (isCustomAminoAcid && matchesCustomAA )) {
807
- System .err .println (fileName + ": AminoAcidSet: Invalid Residue(s) at line " + lineNum + ": " + s );
814
+ System .err .println ("Error: Invalid Residue(s) at line " +
815
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
808
816
System .exit (-1 );
809
817
}
810
818
if (isCustomAminoAcid && (residueStr .length () > 1 || !residueStr .toLowerCase ().matches ("[bjouxz]" ))) {
811
- System .err .println (fileName + ": AminoAcidSet: Invalid Residue(s) at line " + lineNum + ": " + s );
819
+ System .err .println ("Error: Invalid Residue(s) at line " +
820
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
812
821
System .err .println ("Custom Amino acids are only allowed using B, J, O, U, X, or Z as the custom symbol." );
813
822
System .exit (-1 );
814
823
}
815
824
if (isCustomAminoAcid && !compStr .matches ("([CHNOS][0-9]{0,3})+" )) {
816
- System .err .println (fileName + ": AminoAcidSet: Invalid composition/mass at line " + lineNum + ": " + s );
825
+ System .err .println ("Error: Invalid composition/mass at line " +
826
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
817
827
System .err .println ("Custom Amino acids must supply a composition string, and must not use elements other than C H N O S." );
818
828
System .exit (-1 );
819
829
}
820
830
if (modTypeParseFailed ) {
821
- System .err .println (fileName + ": AminoAcidSet: Modification must be either fix, opt, or custom at line " + lineNum + ": " + s );
831
+ System .err .println ("Error: Modification must be either fix, opt, or custom at line " +
832
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
822
833
System .exit (-1 );
823
834
}
824
835
@@ -839,7 +850,8 @@ else if (locStr.equalsIgnoreCase("Prot-C-Term") || locStr.equalsIgnoreCase("Prot
839
850
else if (isCustomAminoAcid )
840
851
customResidueBase = locStr ;
841
852
else {
842
- System .err .println (fileName + ": AminoAcidSet: Invalid Location at line " + lineNum + ": " + s );
853
+ System .err .println ("Error: Invalid Location at line " +
854
+ lineNum + " in file " + modFile .getName () + ": " + modSetting );
843
855
System .exit (-1 );
844
856
}
845
857
@@ -902,7 +914,7 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
902
914
903
915
int numMods = 2 ;
904
916
905
- // memorize keywords
917
+ // Define keywords
906
918
String numModsKey = "<parameter name=\" ptm.mods\" >" ;
907
919
String cysKey = "<parameter name=\" cysteine_protease.cysteine\" >" ;
908
920
String oxidationKey = "<parameter name=\" ptm.OXIDATION\" >on</parameter>" ;
@@ -925,7 +937,8 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
925
937
String value = dataLine .substring (numModsKey .length (), dataLine .lastIndexOf (closeKey ));
926
938
numMods = Integer .parseInt (value );
927
939
} catch (NumberFormatException e ) {
928
- System .err .println (fileName + ": Invalid ptm.mods option at line " + lineNum + ": " + s );
940
+ System .err .println ("Error: Invalid ptm.mods option at line " +
941
+ lineNum + " in file " + modFile .getName () + ": " + dataLine );
929
942
e .printStackTrace ();
930
943
System .exit (-1 );
931
944
}
@@ -951,7 +964,8 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
951
964
} else if (value .equals ("None" )) {
952
965
// do nothing
953
966
} else {
954
- System .err .println (fileName + ": Invalid Cycteine protecting group at line " + lineNum + ": " + s );
967
+ System .err .println ("Error: Invalid Cysteine protecting group at line " +
968
+ lineNum + " in file " + modFile .getName () + ": " + dataLine );
955
969
System .exit (-1 );
956
970
}
957
971
} else if (dataLine .startsWith (ptmKey )) // custom PTM
@@ -960,7 +974,8 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
960
974
String [] token = value .split ("," );
961
975
962
976
if (token .length != 3 ) {
963
- System .err .println (fileName + ": Invalid custom ptm option at line " + lineNum + ": " + s );
977
+ System .err .println ("Error: Invalid custom ptm option at line " +
978
+ lineNum + " in file " + modFile .getName () + ": " + dataLine );
964
979
System .exit (-1 );
965
980
}
966
981
@@ -969,7 +984,8 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
969
984
try {
970
985
modMass = Double .parseDouble (token [0 ]);
971
986
} catch (NumberFormatException e ) {
972
- System .err .println (fileName + ": AminoAcidSet: Invalid Mass at line " + lineNum + ": " + s );
987
+ System .err .println ("Error: Invalid Mass at line " +
988
+ lineNum + " in file " + modFile .getName () + ": " + dataLine );
973
989
e .printStackTrace ();
974
990
System .exit (-1 );
975
991
}
@@ -989,7 +1005,8 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
989
1005
isResidueStrLegitimate = false ;
990
1006
}
991
1007
if (!isResidueStrLegitimate ) {
992
- System .err .println (fileName + ": AminoAcidSet: Invalid Residue(s) at line " + lineNum + ": " + s );
1008
+ System .err .println ("Error: Invalid Residue(s) at line " +
1009
+ lineNum + " in file " + modFile .getName () + ": " + dataLine );
993
1010
System .exit (-1 );
994
1011
}
995
1012
@@ -1017,7 +1034,8 @@ public static AminoAcidSet getAminoAcidSetFromXMLFile(String modFilePath) {
1017
1034
isFixedModification = true ;
1018
1035
location = Location .C_Term ;
1019
1036
} else {
1020
- System .err .println (fileName + ": AminoAcidSet: Invalid Type(s) at line " + lineNum + ": " + s );
1037
+ System .err .println ("Error: Invalid Type(s) at line " +
1038
+ lineNum + " in file " + modFile .getName () + ": " + dataLine );
1021
1039
System .exit (-1 );
1022
1040
}
1023
1041
@@ -1159,18 +1177,22 @@ public static AminoAcidSet getAminoAcidSet(String aaFilePath) {
1159
1177
1160
1178
String [] token = dataLine .split ("," );
1161
1179
if (token .length != 3 ) {
1180
+ System .out .println ("Ignoring line " +
1181
+ lineNum + " in file " + aaFile .getName () + " since not 3 comma separated fields" );
1162
1182
continue ;
1163
1183
}
1184
+
1164
1185
String residueStr = token [0 ].trim ();
1165
1186
if (residueStr .length () != 1 ) {
1166
- System .err .println ("Invalid amino acid file format: " + fileName );
1167
- System . err . println ( "Residue must be a single character: " + s );
1187
+ System .err .println ("Error: Invalid AASet file format at line " +
1188
+ lineNum + " in file " + aaFile . getName () + " (residue must be a single character) : " + dataLine );
1168
1189
System .exit (-1 );
1169
1190
}
1191
+
1170
1192
char residue = residueStr .charAt (0 );
1171
1193
if (!Character .isUpperCase (residue )) {
1172
- System .err .println ("Invalid amino acid file format: " + fileName );
1173
- System . err . println ( "Residue must be an upper case letter: " + s );
1194
+ System .err .println ("Error: Invalid AASet file format at line " +
1195
+ lineNum + " in file " + aaFile . getName () + " (residue must be an upper case letter) : " + dataLine );
1174
1196
System .exit (-1 );
1175
1197
}
1176
1198
String name = token [1 ].trim ();
@@ -1186,33 +1208,58 @@ public static AminoAcidSet getAminoAcidSet(String aaFilePath) {
1186
1208
try {
1187
1209
mass = Double .parseDouble (token [2 ]);
1188
1210
} catch (NumberFormatException e ) {
1189
- System .err .println ("Invalid AASet File format at line " + lineNum + ": " + s );
1211
+ System .err .println ("Error: Invalid AASet file format at line " +
1212
+ lineNum + " in file " + aaFile .getName () +
1213
+ " (should be a composition like C5H7NO3 or a mass): " + dataLine );
1190
1214
System .exit (-1 );
1191
1215
}
1192
1216
aa = AminoAcid .getCustomAminoAcid (residue , name , mass );
1193
1217
}
1194
1218
} else {
1195
1219
// fileType == 1, only masses (and probabilities) are available (e.g. D=115 or D=115,0.0467)
1196
1220
String [] token = dataLine .split ("=" );
1221
+ if (token .length != 2 ) {
1222
+ System .err .println ("Error: Invalid AASet file format at line" +
1223
+ lineNum + " in file " + aaFile .getName () + " (splitting on = should give 2 items): " + dataLine );
1197
1224
System .exit (-1 );
1198
1225
}
1226
+
1227
+ if (token [0 ].length () != 1 ) {
1228
+ System .err .println ("Error: Invalid AASet file format at line" +
1229
+ lineNum + " in file " + aaFile .getName () + " (amino acid symbol must be a single character): " + dataLine );
1230
+ System .exit (-1 );
1231
+ }
1232
+
1233
+ if (!Character .isLetter (token [0 ].charAt (0 ))) {
1234
+ System .err .println ("Error: Invalid AASet file format at line" +
1235
+ lineNum + " in file " + aaFile .getName () + " (amino acid symbol must be a letter): " + dataLine );
1236
+ System .exit (-1 );
1237
+ }
1238
+
1199
1239
char residue = token [0 ].charAt (0 );
1200
1240
String name = token [0 ];
1201
1241
float mass = -1 ;
1202
1242
float prob = 0.05f ;
1243
+ String probabilityAddon = "" ;
1244
+
1203
1245
try {
1204
1246
if (!token [1 ].contains ("," ))
1205
1247
mass = Float .parseFloat (token [1 ]);
1206
1248
else {
1249
+ probabilityAddon = " or probability" ;
1207
1250
mass = Float .parseFloat (token [1 ].split ("," )[0 ]);
1208
1251
prob = Float .parseFloat (token [1 ].split ("," )[1 ]);
1209
1252
}
1210
1253
} catch (NumberFormatException e ) {
1211
- System .err .println ("Invalid AASet File format at line" + lineNum + ": " + s );
1254
+ System .err .println ("Invalid AASet file format at line" +
1255
+ lineNum + " in file " + aaFile .getName () +
1256
+ " (NumberFormatException parsing the mass" + probabilityAddon + "): " + dataLine );
1212
1257
System .exit (-1 );
1213
1258
}
1214
1259
if (mass <= 0 ) {
1215
- System .err .println ("Invalid AASet File format at line" + lineNum + ": " + s );
1260
+ System .err .println ("Invalid AASet file format at line" +
1261
+ lineNum + " in file " + aaFile .getName () +
1262
+ " (could not parse the mass" + probabilityAddon + "): " + dataLine );
1216
1263
System .exit (-1 );
1217
1264
}
1218
1265
aa = AminoAcid .getCustomAminoAcid (residue , name , mass ).setProbability (prob );
0 commit comments