static gmx_bool read_atoms(FILE *in, char *line, t_restp *r0, t_symtab *tab, gpp_atomtype_t atype) { int i, j, cg, maxentries; char buf[256], buf1[256]; double q; /* Read Atoms */ maxentries = 0; r0->atom = NULL; r0->atomname = NULL; r0->cgnr = NULL; i = 0; while (get_a_line(in, line, STRLEN) && (strchr(line, '[') == NULL)) { if (sscanf(line, "%s%s%lf%d", buf, buf1, &q, &cg) != 4) { return FALSE; } if (i >= maxentries) { maxentries += 100; srenew(r0->atom, maxentries); srenew(r0->atomname, maxentries); srenew(r0->cgnr, maxentries); } r0->atomname[i] = put_symtab(tab, buf); r0->atom[i].q = q; r0->cgnr[i] = cg; j = get_atomtype_type(buf1, atype); if (j == NOTSET) { gmx_fatal(FARGS, "Atom type %s (residue %s) not found in atomtype " "database", buf1, r0->resname); } r0->atom[i].type = j; r0->atom[i].m = get_atomtype_massA(j, atype); i++; } r0->natom = i; srenew(r0->atom, i); srenew(r0->atomname, i); srenew(r0->cgnr, i); return TRUE; }
static int name2type(t_atoms *at, int **cgnr, gpp_atomtype_t atype, t_restp restp[]) { int i,j,prevresind,resind,i0,prevcg,cg,curcg; char *name; gmx_bool bProt, bNterm; double qt; int nmissat; gmx_residuetype_t rt; nmissat = 0; resind=-1; bProt=FALSE; bNterm=FALSE; i0=0; snew(*cgnr,at->nr); qt=0; prevcg=NOTSET; curcg=0; cg=-1; j=NOTSET; gmx_residuetype_init(&rt); for(i=0; (i<at->nr); i++) { prevresind=resind; if (at->atom[i].resind != resind) { resind = at->atom[i].resind; bProt = gmx_residuetype_is_protein(rt,*(at->resinfo[resind].name)); bNterm=bProt && (resind == 0); if (resind > 0) { nmissat += missing_atoms(&restp[prevresind],prevresind,at,i0,i); } i0=i; } if (at->atom[i].m == 0) { if (debug) fprintf(debug,"atom %d%s: curcg=%d, prevcg=%d, cg=%d\n", i+1,*(at->atomname[i]),curcg,prevcg, j==NOTSET ? NOTSET : restp[resind].cgnr[j]); qt=0; prevcg=cg; name=*(at->atomname[i]); j=search_jtype(&restp[resind],name,bNterm); at->atom[i].type = restp[resind].atom[j].type; at->atom[i].q = restp[resind].atom[j].q; at->atom[i].m = get_atomtype_massA(restp[resind].atom[j].type, atype); cg = restp[resind].cgnr[j]; /* A charge group number -1 signals a separate charge group * for this atom. */ if ( (cg == -1) || (cg != prevcg) || (resind != prevresind) ) { curcg++; } } else { if (debug) fprintf(debug,"atom %d%s: curcg=%d, qt=%g, is_int=%d\n", i+1,*(at->atomname[i]),curcg,qt,is_int(qt)); cg=-1; if (is_int(qt)) { qt=0; curcg++; } qt+=at->atom[i].q; } (*cgnr)[i]=curcg; at->atom[i].typeB = at->atom[i].type; at->atom[i].qB = at->atom[i].q; at->atom[i].mB = at->atom[i].m; } nmissat += missing_atoms(&restp[resind],resind,at,i0,i); gmx_residuetype_destroy(rt); return nmissat; }