Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support of D-AminoAcids #993

Open
aalhossary opened this issue Nov 7, 2021 · 7 comments
Open

Support of D-AminoAcids #993

aalhossary opened this issue Nov 7, 2021 · 7 comments
Labels
enhancement Improvement of existing code or method new feature New method or data structure

Comments

@aalhossary
Copy link
Member

D-AminoAcids (https://proteopedia.org/wiki/index.php/Amino_Acids) are optical isomers or enantiomers (mirror images) of naturally occuring L-AminoAcids. They have the same structure but with opposite chirality.
When I parse structures that contain D-AminoAcids, they are parser as hetatoms.

Here are some of my notes:

  • I tried adding the D-AminoAcids to StructureTools lookup table, but that was not enough.
  • HetatomImpl.isAminoAcid() returns false for cases like DAL (D-Alanine), because it tests whether PolymerType.PROTEIN_ONLY.contains(pt).
  • Although PolymerType includes types for both peptide("polypeptide(L)") and dpeptide("polypeptide(D)"), PolymerType.PROTEIN_ONLY contains the peptide type only.
  • Also I see a lot of redundancy between StructureTools and ChemCompTools. Is there a need to keep both of them?, or we can simply deprecate the former for the sake of the later.

I think a restructuring task can be done in conjunction with supporting longer ChecmComp names expected in 2022.
We can schedule refactoring this feature to the new version of BioJava. However, we need to start by supporting D-AminoAcids soon.

@aalhossary aalhossary added enhancement Improvement of existing code or method new feature New method or data structure labels Nov 7, 2021
@aalhossary
Copy link
Member Author

Here is another question for community discussion:
When an amino acid (regardless to being L or D) is the substrate (say in an oligopeptide), is it considered both polymeric and ligand or only one of them?

@josemduarte
Copy link
Contributor

I have some reservations about making d-aminoacids behave just as normal aminoacids in biojava. When they appear as part of polymers in the PDB, they appear mostly as short peptides, not as full proteins. Also there are a few cases in the PDB where there are engineered proteins composed of only D-aminoacids (e.g. in racemic mixture crystals) but in any case very rare and non-natural.

I can see how in some applications it might make sense to treat them as aminoacids, but I'd say that in most applications you would want them treated as something different from standard aminoacids. For instance, adding them to PolymerType.PROTEIN_ONLY seems dangerous to me for the general case.

@aalhossary
Copy link
Member Author

aalhossary commented Nov 20, 2021

I agree to most of your points @josemduarte.
D-AminoAcids are not as frequent as L-AminoAcids (at least yet). However, they are aminoacids at the end of the day.
They have the natural right to possess getN(), getC(), getO() as all other free AminoAcids citizens (sorry for the silly joke :) ).
Depriving D-AminoAcids from being distinct from all other HetAtomGroups and from identifying a peptide bonds limits the users' research.

That said, it might be a good idea to craft an interface / type called AminoAcid, which includes all sorts of compounds that contain amino and carboxylic acid groups: L_AminoAcids, D_AminoAcids, and maybe Beta_AminoAcids (see below);
and another interface / type called NaturalAminoAcids, which is specific to the 20/21/22 naturally-occurring aminoacids.


Beta AminoAcids are amino acids in which there is an amine group on the carbon beta to a carboxylic acid group.
https://chem.libretexts.org/Ancillary_Materials/Reference/Organic_Chemistry_Glossary/Beta_Amino_Acid
https://en.wikipedia.org/wiki/Beta-peptide

@sbliven
Copy link
Member

sbliven commented Jan 4, 2022

Is it possible to write your code to use the Group interface (e.g. Group.getAtom("N") instead of AminoAcid.getN())? I also feel like supporting D-AA is unusual enough that it should not be the default.

Also I see a lot of redundancy between StructureTools and ChemCompTools. Is there a need to keep both of them?, or we can simply deprecate the former for the sake of the later.

StructureTools is older and has many features not included in ChemCompTools. If anything I would deprecate ChemCompTools.

@aalhossary
Copy link
Member Author

Is it possible to write your code to use the Group interface (e.g. Group.getAtom("N") instead of AminoAcid.getN())? I also feel like supporting D-AA is unusual enough that it should not be the default.

Yes. This exactly is how I worked around this problem in my code. However, this does not fix all problems. For example, D-Gly can form Isopeptide ponds just as same as Gly. Handling Gly and D-Gly differently is an unnecessary overhead to handle.

Overall, I -by contrary to your opinion- don't see supporting D-AA that unusual. At the end of the day, they are already present in nature and their use is becoming more, because the immune system does not recognize them as foreign bodies.

StructureTools is older and has many features not included in ChemCompTools. If anything I would deprecate ChemCompTools.

So, you recommend deprecating ChemCompTools for the sake of StructureTools, @sbliven?

@aalhossary
Copy link
Member Author

Sorry closed by mistake

@aalhossary
Copy link
Member Author

aalhossary commented Jan 25, 2023

This conversation had been silent for a wile. Let's revive it. Maybe we can catch the next BioJava 7.0.0 release (#1035):

  • @sbliven Do you recommend deprecating ChemCompTools for the sake of StructureTools?
  • @JonStargaryen It seems here that the current dictionary considers both D and L AminoAcids to be polymers (not nonstandard polymers). Please correct me if I am wrong.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improvement of existing code or method new feature New method or data structure
Projects
None yet
Development

No branches or pull requests

3 participants