private double[] estimateCoverableAA(String proteinMatchKey) throws IllegalArgumentException, SQLException, IOException, ClassNotFoundException, InterruptedException {
ProteinMatch proteinMatch = identification.getProteinMatch(proteinMatchKey);
String sequence = sequenceFactory.getProtein(proteinMatch.getMainMatch()).getSequence();
double[] result = new double[sequence.length()];
Distribution peptideLengthDistribution = metrics.getPeptideLengthDistribution();
Enzyme enzyme = searchParameters.getEnzyme();
// special case for no cleavage searches
if (enzyme.isWholeProtein()) {
for (int i = 0; i < result.length; i++) {
result[i] = 1.0;
}
return result;
}
int lastCleavage = -1;
char previousChar = sequence.charAt(0), nextChar;
for (int i = 0; i < sequence.length() - 1; i++) {
double p = 1;
if (!enzyme.isSemiSpecific()) {
nextChar = sequence.charAt(i + 1);
if (enzyme.isCleavageSite(previousChar, nextChar)) {
int length = i - lastCleavage;
if (peptideLengthDistribution == null) { //backward compatibility check
int pepMax = idFilter.getMaxPepLength();
if (length > pepMax) {
p = 0;
}
} else {
p = peptideLengthDistribution.getProbabilityAt(length);
}
for (int j = lastCleavage + 1; j <= i; j++) {
result[j] = p;
}
lastCleavage = i;
}
previousChar = nextChar;
} else {
result[i] = p;
}
}
double p = 1;
if (!enzyme.isSemiSpecific()) {
int length = sequence.length() - lastCleavage + 1;
if (peptideLengthDistribution == null) { //backward compatibility check
int pepMax = idFilter.getMaxPepLength();
if (length > pepMax) {
p = 0;
}
} else {
p = peptideLengthDistribution.getProbabilityAt(length);
}
for (int j = lastCleavage; j < sequence.length(); j++) {
result[j] = p;
}
} else {