#include "util.h" #include "pdb.h" void VectorizeAtoms (file_records * f) { int ii; #ifdef OFF /* for (ii=0; iiatomnum; ii++) { atom_record * a = f->atoms[ii]; a->v = &a->x - 1; assert( a->v[1] == a->x && a->v[2] == a->y && a->v[3] == a->z && a->v[4] == a->occ && a->v[5] == a->b ); } Comment from: MBG : 2.II.94 This way doesn't work. I tried defining double v[1] before the x field in the atom_record structure, but it didn't work. Redone on 3 March 1994. */ #endif for (ii=0; iiatomnum; ii++) { atom_record * a = f->atoms[ii]; /* a->v = &a->x - 1; */ a->v[0] = 0; a->footnote = NULL ; a->strg71on = NULL ; assert( a->v[1] == a->x && a->v[2] == a->y && a->v[3] == a->z && &(a->v[4]) == &(a->occ) && &(a->v[5]) == &(a->b) && &(a->v[6]) == &(a->volume) && &(a->v[7]) == &(a->surface) ); } } /* Mark Gerstein 6.XI.93 */ /* Links up residues into a doubly linked list, and */ /* links atoms to residues. */ void LinkUp_OneResidue (residue_record * prev, residue_record * r) { atom_record **atoms = r->file->atoms ; int ii; r->prev = prev ; r->next = NULL ; if (prev != NULL) { prev->next = r ; } for(ii = r->start; ii< r->end ; ii++) { atom_record *atom = atoms[ii] ; atom->InRes = r ; atom->Index = ii ; } } void LinkUp_Residues_Atoms(file_records * f) { if(!f->flag) { fprintf(stderr,"LinkUp_Residues_Atoms(): Residues not set up\n"); } else { int ii,jj; int * resnum_vector = f->resnum ; residue_record ***residues = f->residues ; residue_record * PreviousResidue = NULL ; f->FirstResidue = NULL; f->LinkCount = 0 ; for(ii =0 ; ii< 128; ii++) if(resnum_vector[ii]) { residue_record **chain_residues = residues[ii] ; int limit = resnum_vector[ii] ; # ifdef OFF fprintf(stderr,"ii = %4c = %d limit = %4d\n",ii,ii,limit); # endif for(jj = 0 ; jj< limit ; jj++) { LinkUp_OneResidue(PreviousResidue, chain_residues[jj]); PreviousResidue = chain_residues[jj]; if (f->FirstResidue == NULL) f->FirstResidue = chain_residues[jj] ; f->LinkCount ++ ; } } } f->LinkUpResiduesFlag = 1 ; VectorizeAtoms(f); # ifdef OFF fprintf(stderr,"LinkUp_Residues_Atoms(): VectorizeAtoms() completed\n"); if (f->LinkCount != f->residue_count) fprintf(stderr, "LinkUp_Residues_Atoms(): (%d = f->LinkCount != f->residue_count = %d)\n", f->LinkCount,f->residue_count); # endif } void PrintResidueRecord (residue_record * r) { { # ifdef OFF residue_description * rt = find_residue_type(r->resname); if (rt == NULL) { STDERR("rt == NULL"); return ; } if (rt != r->restype) { STDERR("Not Equal"); PTOD(r->restype); } ITOD(r->index); ATOD(r->resname); ATOD(r->restype->name); PTOD(rt) ; ITOD(rt); ATOD(rt->name); # endif printf("%7s%4d %-4s %-4s%c%4d%c","RESIDUE",r->index, "X",r->resname,r->chain,r->number,r->x_char); printf(" : %6d -> %6d : %8x %8x", r->start,r->end,r->flags,r->file); if (r->restype != NULL) { printf(" : %3s = %3d (%3d atoms)", r->restype->name,r->restype->index,r->restype->atomnum); } printf("\n"); if (r->ca != NULL) write_pdb_record(stdout,r->ca,0); } } void PrintAllResidues(file_records * file) { if(!file->flag) { fprintf(stderr,"PrintAllResidues: Residues not set up\n"); } else { int ii,jj; int * resnum_vector = file->resnum ; residue_record ***residues = file->residues ; for(ii =0 ; ii< 128; ii++) if(resnum_vector[ii]) { residue_record **chain_residues = residues[ii] ; int limit = resnum_vector[ii] ; # ifdef OFF fprintf(stderr,"ii = %4c = %d limit = %4d\n",ii,ii,limit); # endif for(jj = 0 ; jj< limit ; jj++) { PrintResidueRecord(chain_residues[jj]); } } } } void NewPrintResidueRecord (residue_record * r) { atom_record * a = r->file->atoms[r->start]; printf("%7s%4d %-4s %-4s%c%4d%c","RESIDUE",r->index, "X",a->InRes->resname,r->chain,r->number,r->x_char); printf(" : %6d -> %6d : %8x %8x", r->start,r->end,r->flags,r->file); if (r->restype != NULL) { printf(" : %3s = %3d (%3d atoms)", r->restype->name,r->restype->index,r->restype->atomnum); } printf("\n"); write_pdb_record(stdout,a,0); } void NewPrintAllResidues(file_records * file) { if(!file->LinkUpResiduesFlag) { fprintf(stderr,"NewPrintAllResidues: file->LinkUpResiduesFlag != 0\n"); } else { residue_record * r; for (r = file->FirstResidue ; r != NULL ; r = r->next ) NewPrintResidueRecord(r); } }