<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 11/04/2012 10:33 PM, Erik Marklund wrote:
<blockquote
cite="mid:8B613F5F-DE61-486C-9C17-581CDEA83008@xray.bmc.uu.se"
type="cite"><br>
<div>
<div>11 apr 2012 kl. 13.40 skrev Mark Abraham:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">
<div> </div>
<div> </div>
<span>On 11/04/12, <b class="name">Erik Marklund </b><<a
moz-do-not-send="true" href="mailto:erikm@xray.bmc.uu.se">erikm@xray.bmc.uu.se</a>>
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->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> 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> </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>
</blockquote>
<div><br>
</div>
<div>My point exactly. I'm just not seeing the harm in using
macros in cases like these.</div>
</div>
</blockquote>
<br>
Sorry, I read "aren't" in your first sentence when I first read it
:-)<br>
<br>
Sure, these seem benign until someone uses "A2NM" in some other
context ("NMA2NMB" anyone?) and gets a bizarre error message
referring to symbols that don't "exist". You really don't want to
know what the GROMACS macro C0 (defunct in release-4-6 branch) does
to parts of Boost. Also, such macro "symbols" are normally not
available when debugging, and that can make life hard.<br>
<br>
Mark<br>
</body>
</html>