[gmx-users] centering a bilayer at a cartesian coordinate

chris.neale at utoronto.ca chris.neale at utoronto.ca
Wed Jun 15 22:35:41 CEST 2011


I solved it. It was my own error to assume that trjconv -center  
centers the COM. Actually, it centers the value of (min+max)/2 in each  
dimension.

I can modify trjconv locally to do what I want.

Thank you,
Chris.

static void center_x(int ecenter,rvec x[],matrix box,int n,int  
nc,atom_id ci[])
{
     int i,m,ai;
     rvec cmin,cmax,box_center,dx;

     if (nc > 0) {
         copy_rvec(x[ci[0]],cmin);
         copy_rvec(x[ci[0]],cmax);
         for(i=0; i<nc; i++) {
             ai=ci[i];
             for(m=0; m<DIM; m++) {
                 if (x[ai][m] < cmin[m])
                     cmin[m]=x[ai][m];
                 else if (x[ai][m] > cmax[m])
                     cmax[m]=x[ai][m];
             }
         }
         calc_box_center(ecenter,box,box_center);
         for(m=0; m<DIM; m++)
             dx[m] = box_center[m]-(cmin[m]+cmax[m])*0.5;

         for(i=0; i<n; i++)
             rvec_inc(x[i],dx);
     }
}


Quoting chris.neale at utoronto.ca:

> Dear users:
>
> I am trying to process a trajectory so that a group of molecules has
> their center of mass at a constant position in Cartesian space. I have
> not been able to figure out how to do this.
>
> The reason that I would like this is that I have conducted umbrella
> sampling of a solute along the normal to a lipid bilayer and I would
> like to create a movie of a false-trajectory of the immersion profile.
> Such processing is also important for generating SDFs and for use with
> g_density.
>
> I expect that the problems that I am having are due to volume
> fluctuations in the NPT ensemble.
>
> The best idea that I have tried was (gromacs 4.5.3):
>
> trjconv -center -box 10 10 15
>
> where the original dimensions are much less that 10 10 15
>
> But still, when I run g_traj on the processed .gro file I do not get
> similar values for the COM.
>
> In more detail:
>
> echo 0 | trjconv -s md1.tpr -f md1_50ps_md1.part0001.xtc -o tmp.xtc -e
> 100000 -pbc mol
> # select POPC for centering and System for output and use a .tpr with pbc=no
> echo -e "13\n0\n" | trjconv -s empty.tpr -f tmp.xtc -box 10 10 15
> -center -pbc none -o tmp2.xtc
> # select POPC for coordinate output
> echo 13 | g_traj  -s empty.tpr -f tmp2.xtc -ox -com -nopbc
>
>   99550	4.8424	5.00025	7.49519
>   99600	4.79691	4.94304	7.39868
>   99650	4.75789	4.85189	7.41581
>   99700	4.74974	4.80423	7.48257
>   99750	5.07858	5.04788	7.51654
>   99800	4.99091	4.78976	7.47778
>   99850	5.11406	4.84656	7.48769
>   99900	5.09739	5.12395	7.47889
>   99950	5.0411	4.88659	7.52737
>   100000	4.91271	5.07101	7.50397
>
> For Z, the value is 7.48037+/-0.072562 (MIN=7.3 and MAX=7.8)
>
> If I look at the frames from the min and max z values, they do clearly
> differ in the placement of the bilayer along z.
>
> ###################
>
> To simplify things, I redid this while only using the phosphorous
> atoms (1 per lipid) in the centering and coordinate output.
>
> Here, Z=7.49323+/-0.0658727 (MIN=7.3 and MAX=7.7)
>
> To verify this and since all the atoms have the same mass, I checked
> it with awk:
>
> echo 0 | trjconv -s empty.tpr -f tmp2.xtc -dump 47550 -b 40000 -o   
> look_low.gro
> echo 0 | trjconv -s empty.tpr -f tmp2.xtc -dump 80750 -b 80000 -o
> look_high.gro
> cat look_low.gro|grep P8|awk '{s+=$NF;n++} END{print s/n}'
> 7.39197
> cat look_high.gro|grep P8|awk '{s+=$NF;n++} END{print s/n}'
> 7.62207
>
> ###################
>
> Finally, I rechecked with a single atom and here it worked exactly as
> expected. The atoms is placed at 5 5 7.5 in every single frame.
>
> ###################
>
> Then I checked using 2 phosphorous atoms from the same (or,
> separately, different) leaflets, and the result was the same:
>
> $ tail coord.xvg
>   99550	5	5	7.5
>   99600	5	5.0005	7.5
>   99650	5.0005	5.0005	7.5005
>   99700	5	5.0005	7.5
>   99750	5.0005	5	7.5005
>   99800	5	5.0005	7.5005
>   99850	5	5	7.5005
>   99900	5.0005	5	7.5005
>   99950	5.0005	5	7.4995
>   100000	5	5	7.5
>
>
> Then using 3 phosphorous atoms from (containing atoms from both
> leaflets), and now there is more deviation:
>
> $ tail coord.xvg
>   99550	5.48833	5.30233	6.972
>   99600	5.48733	5.29233	6.97167
>   99650	5.50033	5.29567	6.93467
>   99700	5.52133	5.27433	6.93967
>   99750	5.489	5.253	6.99133
>   99800	5.481	5.319	6.91533
>   99850	5.47867	5.309	6.827
>   99900	5.48733	5.292	6.83133
>   99950	5.52767	5.27	6.86867
>   100000	5.518	5.319	6.89167
>
> (MIN=6.7 and MAX=7.1)
>
> I originally had problems with pbc during trjconv in which the -center
> option would place the bilayer at the peripheries of the unit cell in
> some frames (COM should still be at the center). This is what lead me
> to the route that I have used above (a .tpr that was generated with
> pbc=no and trjconv -pbc none -center). Nevertheless, I think that
> perhaps trjconv is using pbc information even in this case where ti
> should not.
>
> ##############################################
>
> If anybody can see what I am doing wrong or has a method to center a
> bilayer at a cartesian coordinate, then I am very interested.
>
> Thank you for your time,
> Chris.
>
>
>






More information about the gromacs.org_gmx-users mailing list