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

π-stacking analysis and RingGroup #2188

Open
micaela-matta opened this issue Jan 28, 2019 · 8 comments
Open

π-stacking analysis and RingGroup #2188

micaela-matta opened this issue Jan 28, 2019 · 8 comments
Labels

Comments

@micaela-matta
Copy link
Contributor

I work on highly conjugated systems with varying degrees of order and quantifying π-stacking is a core element of my analysis. I have worked with @richardjgowers on an algorithm that uses networkx features to find all rings in a Universe, and then analyzes the contacts between them. Briefly, two rings are π-stacking if:
i) their centers of mass are close enough
ii) the angle between their normal vectors is roughly parallel
iii) any pair of atoms in the rings is 3-4 Å away (to account for staggered interactions)

An important point is that the rings can have any number of atoms (5, 6 or more.. I deal with organic semiconductors that almost always feature fused rings).

While this works for me at the moment, there is definitely room for improvement. I have not seen this feature implemented elsewhere except here, but this is not super efficiently coded and only works for benzene - sigh..

@richardjgowers
Copy link
Member

I think RingGroup would be a nice extension of ÜberGroup (see #1861). So UberGroup has .positions attributes which aggregates the positions, then RingGroup would have maybe a .vectors attribute which returns the normal vector for each ring. These would make nice .core additions.

Then analysis.pi could hold things which operate on these.

@jbarnoud
Copy link
Contributor

I think it would be a very nice thing to have, indeed. Though I would be careful to well separate the ring detection from the RingGroup itself. Users who want to work on a specific ring should be able to create a RingGroup for that ring without going through the detection process.

For the π-stacking, I'd be careful not to hard code the cut-offs. I think the tool would interest some members of my group, but only if they can use it on coarse-grained simulations.

@richardjgowers
Copy link
Member

@jbarnoud yep, double agreement.

Ring detection should just be a convenient way to make rings, but not the only way. I imagine plenty of people who know their topology well will be able to select via atom types.

pi stacking can be as flexible as rdf/hbond tools where we have the geometry have customisable criteria (with sensible defaults)

Thinking about it, a ring Group would need (positions of) atoms that make the ring, then (positions of) atoms that form the defining plane (ie only 3)

@Shlokatadistance
Copy link

I think it will also be great if we define a vector giving the position of all these centre of masses, for like a larger and more broader analysis, what it will ensure is that any activity that is very specific in its nature of orientation can be implemented properly onto the system of these centres
(P.S. I look forward to taking part in GSoc2020 and working on the issues)

@Shlokatadistance
Copy link

@micaela-matta since the code works only on benzene, maybe for other aromatic structures we can define the position of the functional group attached and then make the decision? Or choose one particular position (ortho, meta or para) and then define the orientation, cause those will then be uniform across all the aromatic structures?

@RMeli
Copy link
Member

RMeli commented Jul 30, 2020

ODDT seems to have functionality do detect pi stacking, which might be relevant to this issue.

@Jacob608
Copy link

Hi everyone. I too would benefit from a RingGroup function in MDAnalysis. The protein that I have been studying recently relies strongly on pi-pi stacking and cation-pi bonds so I wrote a couple of MDAnalysis classes inspired by hbond_analysis.py which detect, store, and output bonds in a similar way. This code would definitely benefit from a RingGroup extension since the atom selection is currently hard-coded for the aromatic sidechain of tyrosine and not suitable for any sort of automatic ring detection. Please take a look at the demo that I put together and let me know if there has been any further discussion regarding development of RingGroup.

@micaela-matta
Copy link
Contributor Author

micaela-matta commented Sep 19, 2023

Hi @Jacob608 - thanks for reviving the discussion. There haven't been many developments to report.. A student in my group started working on a π-stacking tool but, while their implementation work for general rings, it does not have a RingGroup class.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants