compomics / compomics-utilities

Open source Java library for computational proteomics
http://compomics.github.io/projects/compomics-utilities.html
29 stars 17 forks source link

Semi-specific digestion in the IteratorFactory #64

Open wenbostar opened 2 months ago

wenbostar commented 2 months ago

Is there a way to do semi-tryptic digestion using the getSequenceIterator function from IteratorFactory?

hbarsnes commented 2 months ago

Yes, I think you should be able to do something like this:

DigestionParameters digestionPreferences = new DigestionParameters();
digestionPreferences.setCleavageParameter(DigestionParameters.CleavageParameter.enzyme);
digestionPreferences.addEnzyme(enzymeFactory.getEnzyme("Trypsin"));
SequenceIterator sequenceIterator = iteratorFactoryNoModifications.getSequenceIterator(yourSequence, digestionPreferences, 0.0, Double.MAX_VALUE);
wenbostar commented 2 months ago

Hi @hbarsnes , thanks. Which parameter in the code is used to control for semi-digestion?

hbarsnes commented 2 months ago

Ah, sorry, forgot to add the semi-specific part. See the fourth line below.

DigestionParameters digestionPreferences = new DigestionParameters();
digestionPreferences.setCleavageParameter(DigestionParameters.CleavageParameter.enzyme);
digestionPreferences.addEnzyme(enzymeFactory.getEnzyme("Trypsin"));
digestionPreferences.setSpecificity("Trypsin", Specificity.semiSpecific);
SequenceIterator sequenceIterator = iteratorFactoryNoModifications.getSequenceIterator(yourSequence, digestionPreferences, 0.0, Double.MAX_VALUE);
wenbostar commented 2 months ago

It looks like this doesn't work.

void testSemi_digestion(){
        IteratorFactory iteratorModifications = new IteratorFactory(new ArrayList<>());
        DigestionParameters digestionPreferences = new DigestionParameters();
        digestionPreferences.setCleavageParameter(DigestionParameters.CleavageParameter.enzyme);
        digestionPreferences.addEnzyme(EnzymeFactory.getInstance().getEnzyme("Trypsin"));
        digestionPreferences.setSpecificity("Trypsin", DigestionParameters.Specificity.semiSpecific);

        try {
            SequenceIterator sequenceIterator = iteratorModifications.getSequenceIterator("MTEYKLVVVGAGGVGKSALTIQLIQNHFVDEYDPTIEDSYR", digestionPreferences, 0.0, Double.MAX_VALUE);
            ExtendedPeptide extendedPeptide;
            while (true) {
                try {
                    if ((extendedPeptide = sequenceIterator.getNextPeptide()) == null) {
                        break;
                    }

                    Peptide peptide = extendedPeptide.peptide;
                    System.out.println(peptide.getSequence());

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

Output:

MTEYK
LVVVGAGGVGK
SALTIQLIQNHFVDEYDPTIEDSYR

Utilities version: 5.0.39.

wenbostar commented 2 months ago

Does this indicate semi-digestion is not implemented yet? https://github.com/compomics/compomics-utilities/blob/master/src/test/java/com/compomics/util/test/experiment/sequences/digestion/ProteinSequenceIteratorTest.java#L244

hbarsnes commented 2 months ago

Seems like you are correct in that the support for semi-specific has not been implemented for the IteratorFactory. I'll add it to the list of requested features, but I'm afraid that we will not have the resources to look into it at the moment.