From 5948c1cdb1166475f6be900b00ea663dca77d8c3 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 9 Dec 2010 13:44:34 -0700 Subject: Read fixed-width fields properly in load_cell_from_pdb() --- src/cell.c | 24 +++++++++++++++++++----- src/sfac.c | 16 +--------------- 2 files changed, 20 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/cell.c b/src/cell.c index c1dce498..826b003e 100644 --- a/src/cell.c +++ b/src/cell.c @@ -867,14 +867,28 @@ UnitCell *load_cell_from_pdb(const char *filename) if ( strncmp(line, "CRYST1", 6) == 0 ) { float a, b, c, al, be, ga; - int r; + char as[10], bs[10], cs[10]; + char als[8], bes[8], gas[8]; char *sym; + int r; + + memcpy(as, line+6, 9); as[9] = '\0'; + memcpy(bs, line+15, 9); bs[9] = '\0'; + memcpy(cs, line+24, 9); cs[9] = '\0'; + memcpy(als, line+33, 7); als[7] = '\0'; + memcpy(bes, line+40, 7); bes[7] = '\0'; + memcpy(gas, line+47, 7); gas[7] = '\0'; + + r = sscanf(as, "%f", &a); + r += sscanf(bs, "%f", &b); + r += sscanf(cs, "%f", &c); + r += sscanf(als, "%f", &al); + r += sscanf(bes, "%f", &be); + r += sscanf(gas, "%f", &ga); - r = sscanf(line+7, "%f %f %f %f %f %f\n", - &a, &b, &c, &al, &be, &ga); if ( r != 6 ) { - ERROR("Couldn't understand CRYST1 line\n"); - return NULL; + STATUS("Couldn't understand CRYST1 line.\n"); + continue; } cell = cell_new_from_parameters(a*1e-10, diff --git a/src/sfac.c b/src/sfac.c index c56097a4..436544c8 100644 --- a/src/sfac.c +++ b/src/sfac.c @@ -347,21 +347,6 @@ struct molecule *load_molecule(const char *filename) rval = fgets(line, 1023, fh); - if ( strncmp(line, "CRYST1", 6) == 0 ) { - - float a, b, c, al, be, ga; - - r = sscanf(line+7, "%f %f %f %f %f %f", - &a, &b, &c, &al, &be, &ga); - - mol->cell = cell_new_from_parameters(a*1e-10, - b*1e-10, c*1e-10, - deg2rad(al), - deg2rad(be), - deg2rad(ga)); - - } - /* Only interested in atoms */ if ( (strncmp(line, "HETATM", 6) != 0) && (strncmp(line, "ATOM ", 6) != 0) ) continue; @@ -456,6 +441,7 @@ struct molecule *load_molecule(const char *filename) mol->species[i]->n_atoms); } + mol->cell = load_cell_from_pdb(filename); if ( mol->cell == NULL ) { ERROR("No unit cell found in PDB file\n"); return NULL; -- cgit v1.2.3