From 4384b499f48003b047454612732ec6b70b85199f Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 26 Oct 2010 14:59:19 +0200 Subject: Make PDB parser less horrendous --- src/sfac.c | 76 ++++++++++++++++++++++++++------------------------------------ 1 file changed, 32 insertions(+), 44 deletions(-) (limited to 'src/sfac.c') diff --git a/src/sfac.c b/src/sfac.c index b5ae7ace..c56097a4 100644 --- a/src/sfac.c +++ b/src/sfac.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "utils.h" #include "sfac.h" @@ -318,8 +319,6 @@ struct molecule *load_molecule(const char *filename) char line[1024]; char *rval; int i; - int nbits; - char **bits; mol = malloc(sizeof(struct molecule)); if ( mol == NULL ) return NULL; @@ -335,9 +334,14 @@ struct molecule *load_molecule(const char *filename) do { - char *el; int j, r; int done = 0; + char xs[8]; + char ys[8]; + char zs[8]; + char occs[6]; + char Bs[6]; + char el[3]; float xf, yf, zf, occf, Bf; double x, y, z, occ, B; @@ -360,50 +364,36 @@ struct molecule *load_molecule(const char *filename) /* Only interested in atoms */ if ( (strncmp(line, "HETATM", 6) != 0) - && (strncmp(line, "ATOM", 4) != 0) ) continue; + && (strncmp(line, "ATOM ", 6) != 0) ) continue; chomp(line); - nbits = assplode(line, " ", &bits, ASSPLODE_NONE); - if ( nbits == 0 ) continue; - - if ( nbits == 11 ) { - - /* Normal case- HETATMnumberstuff */ - r = sscanf(bits[5], "%f", &xf); - r += sscanf(bits[6], "%f", &yf); - r += sscanf(bits[7], "%f", &zf); - r += sscanf(bits[8], "%f", &occf); - r += sscanf(bits[9], "%f", &Bf); - if ( r != 5 ) { - STATUS("PDB read failed (%i)\n", r); - for ( i=0; istuff */ - r = sscanf(bits[4], "%f", &xf); - r += sscanf(bits[5], "%f", &yf); - r += sscanf(bits[6], "%f", &zf); - r += sscanf(bits[7], "%f", &occf); - r += sscanf(bits[8], "%f", &Bf); - if ( r != 5 ) { - STATUS("PDB read failed (%i)\n", r); - for ( i=0; i