[gmx-users] Computing vectors normal (perpendicular) to molecules

Mark Abraham Mark.Abraham at anu.edu.au
Mon Jul 2 03:54:33 CEST 2012

On 2/07/2012 11:51 AM, Mark Abraham wrote:
> On 2/07/2012 6:50 AM, Andrew DeYoung wrote:
>> Hi,
>> Suppose that I have a system of benzene molecules (in reality, my 
>> system is
>> more complicated, but for my question, it will be simpler to consider 
>> just
>> an ensemble of benzene molecules).
>> I would like to find a vector normal (i.e., perpendicular) to the 
>> plane of
>> each benzene molecule in my system.  I want to track these "normal 
>> vectors"
>> over time; eventually, I would like to calculate a histogram of 
>> angles theta
>> between the vectors normal to the benzene molecules and some fixed
>> "laboratory" axis.
>> If you have time, can you please tell me if there is any Gromacs utility
>> that already does this -- i.e., computes normal vectors like this?  
>> It does
>> not seem so, even with the functionalities provided by g_angle.
>> This may not be the most rigorous idea, but one way to do this might 
>> be to
>> compute the vector cross product of two vectors.  Suppose that a benzene
>> molecule has carbon atoms named C1, C2, C3, C4, C5, and C6 (arranged 
>> in that
>> order around the ring). Then I could, for example, find two vectors:
>> \vec{C2-C1}
>> \vec{C2-C3}
>> where \vec{C2-C1} is the vector from C2 to C1, and \vec{C2-C3} is the 
>> vector
>> from C2 to C3.
>> The cross product of those two vectors gives a vector that is 
>> perpendicular
>> to both vectors.
>> Is there any way to compute cross products in the Gromacs utilities?  It
>> does not seem so, but I am not certain.
> Yes there are tools that can do this, e.g. g_sgangle or perhaps 
> others. Manual 7.4 is a good place to start your search, then to 

...chapter 8, and then to...

> appendix D.
>> So, I am thinking that I will need to use g_traj to extract the x, y, 
>> and z
>> coordinates of the atoms of interest (i.e., C1, C2, and C3 in each of 
>> the
>> many benzene molecules in the system).  Then I will need to write a C or
>> Fortran script to find the relevant vectors and compute their cross
>> products, at every timestep in the trajectory.
>> However, to complicate things even more, I may in the future wish to 
>> make
>> dynamic selections of benzene molecules, using g_select.  I may want to
>> consider only the benzene molecules satisfying z<12, for example.  
>> Since the
>> benzene molecules obviously move, the particular benzene molecules 
>> that I
>> consider for the vector/cross product calculation will change over 
>> time. I
>> am able (using the -oi option in g_select in conjunction with a 
>> script of my
>> own) to generate an index file with the indices (whose groups 
>> correspond to
>> the simulation timestep number) of the C1, C2, and C3 atoms in benzene
>> molecules whose centers-of-mass satisfy z<12.  But is there any way I 
>> can
>> feed this index file to g_traj without having to call g_traj as many 
>> times
>> as I have timesteps in my trajectory?
> Not until GROMACS 5.
> Mark

More information about the gromacs.org_gmx-users mailing list