<div class="gmail_quote">On Wed, Apr 11, 2012 at 1:40 PM, Mark Abraham <span dir="ltr">&lt;<a href="mailto:mark.abraham@anu.edu.au">mark.abraham@anu.edu.au</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div></div><div class="h5"><div> </div><div> </div><span>On 11/04/12, <b>Erik Marklund </b>&lt;<a href="mailto:erikm@xray.bmc.uu.se" target="_blank">erikm@xray.bmc.uu.se</a>&gt; wrote:</span>
<blockquote style="BORDER-LEFT:#00f 1px solid;PADDING-LEFT:13px;MARGIN-LEFT:0px" type="cite">
<table>
<tbody>
<tr>
<td style="WORD-WRAP:break-word">
<p><br>
</p><div>
<div>11 apr 2012 kl. 01.38 skrev Mark Abraham:</div><br>
<blockquote type="cite">
<div>On 11/04/2012 5:21 AM, David van der Spoel wrote:<br>
<blockquote type="cite">On 2012-04-10 21:10, Anton Feenstra wrote:<br></blockquote>
<blockquote type="cite">
<blockquote type="cite">On 09/04/12 21:47, Justin A. Lemkul wrote:<br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">Radhakrishna Bettadapura wrote:<br></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">All,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">I&#39;m trying to figure out why a pdb input to pdb2gmx results in<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">coordinates that are scaled by a factor of 0.1. That is, if a line in<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">the PDB file reads<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">ATOM 1 N ALA B 3 -1.221 20.481 12.450 1.00 34.64 N<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">then the corresponding line in the .gro file reads<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">3ALA N 1 -0.122 2.048 1.245<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">The culprit seems to be the following lines in pdbio.c:<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">static int read_atom(t_symtab *symtab,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">char line[],int type,int natom,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">t_atoms *atoms,rvec x[],int chainnum,gmx_bool bChange)<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">{<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">// do stuff<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">x[natom][XX]=strtod(xc,NULL)*0.1; /*all coordinates scaled by 0.1...<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">why?*/<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">x[natom][YY]=strtod(yc,NULL)*0.1;<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">x[natom][ZZ]=strtod(zc,NULL)*0.1;<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">//do more stuff<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">}<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">There&#39;s also a line in the output function that multiplies all<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">incoming coordinates by 10 before writing it to output:<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">void write_pdbfile_indexed(FILE *out,const char *title,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">t_atoms *atoms,rvec x[],<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">int ePBC,matrix box,char chainid,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">int model_nr, atom_id nindex, atom_id index[],<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">gmx_conect conect, gmx_bool bTerSepChains)<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">{<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">//do stuff...<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">fprintf(out,pdbform,pdbtp[type],(i+1)%100000,nm,resnm,ch,resnr,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">(resic == &#39;\0&#39;) ? &#39; &#39; : resic,<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">10*x[i][XX],10*x[i][YY],10*x[i][ZZ],occup,bfac,atoms-&gt;atom[i].elem);<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">// do more stuff...<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">}<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">Can someone tell me why this coordinate scaling occurs? And why the<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">scale factor is a single hard-coded number than, say, something that<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">depends on the input?<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">PDB coordinates are in Angstrom, while .gro coordinates are in nm. Hence<br></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">
<blockquote type="cite">the conversion factor of 0.1.<br></blockquote></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">What happened to A2NM and NM2A?<br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">In my (4.0.5, yes that is very old) includes/physics.h I still see:<br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">#define A2NM (ANGSTROM/NANO) /* NANO */<br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">#define NM2A (NANO/ANGSTROM) /* 10.0 */<br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite">Why aren&#39;t these still used for that?<br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote>
<blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote>
<blockquote type="cite">At some stage macros were removed from the code, even though these seem rather harmless. I agree that it is confusing to hard code these numbers. If we cannot use macro&#39;s like this we should probably replace them by<br>
</blockquote>
<blockquote type="cite">static const real ANGSTROM=1e-10;<br></blockquote>
<blockquote type="cite">static const real NANO=1e-9;<br></blockquote>
<blockquote type="cite"><br></blockquote>
<blockquote type="cite">etc.<br></blockquote>
<blockquote type="cite"><br></blockquote>
<blockquote type="cite">Comments?<br></blockquote><br>include/physics.h still has these macros. IMO, hard-coded constants are a greater evil than macros to prevent that, though I expect we will transition to const values at some stage soon.<br>
</div></blockquote>
<div><br></div><div>But are these the kind of macros we want to avoid? Aren&#39;t function-like macros the ones to kill in the first place?</div></div><p></p></td></tr></tbody></table></blockquote>
</div></div><div> They&#39;re taking no parameters, so they&#39;re hardly function-like. The code fragments above are compiled into constants by the pre-processor. A macro that is used as</div><div> </div><div>dist_in_nm = dist_in_angstrom * A2NM;</div>
<div> </div><div>is much less evil than a macro </div><div> </div><div>dist_in_nm = A2NM(dist_in_angstrom);</div><div> </div><div>and physics.h has only the first type. Inlined functions of the second type would be best of all, of course. </div>
</blockquote><div><br></div><div>Agreed, in fact literal constants should be avoided as much as possible, a macro (which has a name is always more verbose).</div><div><br></div><div>--<br>Szilárd<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<font color="#888888"><div>Mark </div>
</font><br>--<br>
gmx-developers mailing list<br>
<a href="mailto:gmx-developers@gromacs.org">gmx-developers@gromacs.org</a><br>
<a href="http://lists.gromacs.org/mailman/listinfo/gmx-developers" target="_blank">http://lists.gromacs.org/mailman/listinfo/gmx-developers</a><br>
Please don&#39;t post (un)subscribe requests to the list. Use the<br>
www interface or send it to <a href="mailto:gmx-developers-request@gromacs.org">gmx-developers-request@gromacs.org</a>.<br></blockquote></div><br>