<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>11 apr 2012 kl. 13.40 skrev Mark Abraham:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>&nbsp;</div><div>&nbsp;</div><span>On 11/04/12, <b class="name">Erik Marklund </b>&lt;<a href="mailto:erikm@xray.bmc.uu.se">erikm@xray.bmc.uu.se</a>&gt; wrote:</span>
<blockquote style="BORDER-LEFT: #00f 1px solid; PADDING-LEFT: 13px; MARGIN-LEFT: 0px" class="iwcQuote" cite="mid:16741CBC-0C4C-446D-8405-0D3B5A4C4938@xray.bmc.uu.se" type="cite">
<table>
<tbody>
<tr>
<td style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"><p><br>
</p><div>
<div>11 apr 2012 kl. 01.38 skrev Mark Abraham:</div><br class="Apple-interchange-newline">
<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'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'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 == '\0') ? ' ' : 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'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'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't function-like macros the ones to kill in the first place?</div></div></td></tr></tbody></table></blockquote>
<div>&nbsp;They're taking no parameters, so they're hardly function-like. The code fragments above are compiled into constants by the pre-processor. A macro that is used as</div><div>&nbsp;</div><div>dist_in_nm&nbsp;= dist_in_angstrom * A2NM;</div><div>&nbsp;</div><div>is much less evil than a macro&nbsp;</div><div>&nbsp;</div><div>dist_in_nm&nbsp;= A2NM(dist_in_angstrom);</div></blockquote><div><br></div><div>My point exactly. I'm just not seeing the harm in using macros in cases like these.</div><div><br></div><div>Erik</div><br><blockquote type="cite"><div>&nbsp;</div><div>and physics.h has only the first type. Inlined functions of the second type&nbsp;would be best of all, of&nbsp;course.&nbsp;</div><div>&nbsp;</div><div>Mark&nbsp;</div>
-- <br>gmx-developers mailing list<br><a href="mailto:gmx-developers@gromacs.org">gmx-developers@gromacs.org</a><br>http://lists.gromacs.org/mailman/listinfo/gmx-developers<br>Please don't post (un)subscribe requests to the list. Use the <br>www interface or send it to gmx-developers-request@gromacs.org.</blockquote></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>-----------------------------------------------</div><div>Erik Marklund, PhD</div><div>Dept. of Cell and Molecular Biology, Uppsala University.</div><div>Husargatan 3, Box 596, &nbsp; &nbsp;75124 Uppsala, Sweden</div><div>phone: &nbsp; &nbsp;+46 18 471 6688 &nbsp; &nbsp; &nbsp; &nbsp;fax: +46 18 511 755</div><div><a href="mailto:erikm@xray.bmc.uu.se">erikm@xray.bmc.uu.se</a></div><div><a href="http://www2.icm.uu.se/molbio/elflab/index.html">http://www2.icm.uu.se/molbio/elflab/index.html</a></div></div></span></div></span></span>
</div>
<br></body></html>