Changeset 3848 for trunk/gui/src/RpPdbToVtk.c
- Timestamp:
- Aug 2, 2013, 6:26:40 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gui/src/RpPdbToVtk.c
r3847 r3848 32 32 double x, y, z; /* Coordinates of atom. */ 33 33 int number; /* Atomic number */ 34 int index;/* Index of the atom in VTK. */34 int ordinal; /* Index of the atom in VTK. */ 35 35 } PdbAtom; 36 36 … … 175 175 176 176 static void 177 ComputeBonds(Tcl_HashTable * serialTablePtr, Tcl_HashTable *conectTablePtr)177 ComputeBonds(Tcl_HashTable *atomTablePtr, Tcl_HashTable *conectTablePtr) 178 178 { 179 179 PdbAtom **array; … … 184 184 #define TOLERANCE 0.45 /* Fuzz factor for comparing distances 185 185 * (in angstroms) */ 186 array = calloc( serialTablePtr->numEntries, sizeof(PdbAtom *));186 array = calloc(atomTablePtr->numEntries, sizeof(PdbAtom *)); 187 187 if (array == NULL) { 188 188 return; 189 189 } 190 for (i = 0, hPtr = Tcl_FirstHashEntry( serialTablePtr, &iter); hPtr != NULL;190 for (i = 0, hPtr = Tcl_FirstHashEntry(atomTablePtr, &iter); hPtr != NULL; 191 191 hPtr = Tcl_NextHashEntry(&iter), i++) { 192 192 PdbAtom *atomPtr; … … 195 195 array[i] = atomPtr; 196 196 } 197 for (i = 0; i < serialTablePtr->numEntries; i++) {197 for (i = 0; i < atomTablePtr->numEntries; i++) { 198 198 PdbAtom *atom1Ptr; 199 199 double r1; … … 202 202 atom1Ptr = array[i]; 203 203 r1 = elements[atom1Ptr->number].radius; 204 for (j = i+1; j < serialTablePtr->numEntries; j++) {204 for (j = i+1; j < atomTablePtr->numEntries; j++) { 205 205 PdbAtom *atom2Ptr; 206 206 double ds2, cut; … … 214 214 cut = (r1 + r2 + TOLERANCE); 215 215 ds2 = (((atom1Ptr->x - atom2Ptr->x) * (atom1Ptr->x - atom2Ptr->x)) + 216 ((atom1Ptr->y - atom2Ptr->y) * (atom1Ptr->y - atom2Ptr->y)) +217 ((atom1Ptr->z - atom2Ptr->z) * (atom1Ptr->z - atom2Ptr->z)));216 ((atom1Ptr->y - atom2Ptr->y) * (atom1Ptr->y - atom2Ptr->y)) + 217 ((atom1Ptr->z - atom2Ptr->z) * (atom1Ptr->z - atom2Ptr->z))); 218 218 219 219 // perform distance test, but ignore pairs between atoms … … 226 226 int isNew; 227 227 228 if (atom1Ptr-> index > atom2Ptr->index) {229 key.from = atom2Ptr-> index;230 key.to = atom1Ptr-> index;228 if (atom1Ptr->ordinal > atom2Ptr->ordinal) { 229 key.from = atom2Ptr->ordinal; 230 key.to = atom1Ptr->ordinal; 231 231 } else { 232 key.from = atom1Ptr-> index;233 key.to = atom2Ptr-> index;232 key.from = atom1Ptr->ordinal; 233 key.to = atom2Ptr->ordinal; 234 234 } 235 235 Tcl_CreateHashEntry(conectTablePtr, (char *)&key, &isNew); … … 343 343 344 344 static PdbAtom * 345 NewAtom(Tcl_Interp *interp, int index, const char *line, int lineLength)345 NewAtom(Tcl_Interp *interp, int ordinal, const char *line, int lineLength) 346 346 { 347 347 PdbAtom *atomPtr; … … 356 356 return NULL; 357 357 } 358 atomPtr-> index = index;358 atomPtr->ordinal = ordinal; 359 359 strncpy(atomName, line + 12, 4); 360 360 atomName[4] = '\0'; … … 458 458 459 459 static int 460 SerialTo Index(Tcl_Interp *interp, Tcl_HashTable *tablePtr, const char *string,461 int * indexPtr)460 SerialToOrdinal(Tcl_Interp *interp, Tcl_HashTable *tablePtr, const char *string, 461 int *ordPtr) 462 462 { 463 463 int serial; … … 481 481 } 482 482 atomPtr = Tcl_GetHashValue(hPtr); 483 * indexPtr = atomPtr->index;483 *ordPtr = atomPtr->ordinal; 484 484 return TCL_OK; 485 485 } 486 486 487 487 /* 488 * PdbToVtk string 488 * PdbToVtk string ?-bonds none|both|auto|conect? 489 489 */ 490 490 static int … … 492 492 Tcl_Obj *const *objv) 493 493 { 494 Tcl_Obj *objPtr, *pointsObjPtr, *atomsObjPtr , *verticesObjPtr;494 Tcl_Obj *objPtr, *pointsObjPtr, *atomsObjPtr; 495 495 const char *p, *pend; 496 c har *string;496 const char *string; 497 497 char mesg[2000]; 498 int length, next Index;499 Tcl_HashTable serialTable, conectTable;498 int length, nextOrdinal; 499 Tcl_HashTable atomTable, conectTable; 500 500 Tcl_HashEntry *hPtr; 501 501 Tcl_HashSearch iter; … … 504 504 505 505 bondFlags = BOND_NONE; 506 lineNum = next Index= 0;506 lineNum = nextOrdinal = 0; 507 507 if ((objc != 2) && (objc != 4)) { 508 508 Tcl_AppendResult(interp, "wrong # arguments: should be \"", … … 538 538 } 539 539 } 540 Tcl_InitHashTable(& serialTable, TCL_ONE_WORD_KEYS);540 Tcl_InitHashTable(&atomTable, TCL_ONE_WORD_KEYS); 541 541 Tcl_InitHashTable(&conectTable, sizeof(ConnectKey) / sizeof(int)); 542 542 string = Tcl_GetStringFromObj(objv[1], &length); 543 543 pointsObjPtr = Tcl_NewStringObj("", -1); 544 544 atomsObjPtr = Tcl_NewStringObj("", -1); 545 verticesObjPtr = Tcl_NewStringObj("", -1);546 545 Tcl_IncrRefCount(pointsObjPtr); 547 546 Tcl_IncrRefCount(atomsObjPtr); 548 Tcl_IncrRefCount(verticesObjPtr);549 547 objPtr = NULL; 550 548 for (p = string, pend = p + length; p < pend; /*empty*/) { … … 587 585 } 588 586 lserial = (long)serialNum; 589 hPtr = Tcl_CreateHashEntry(& serialTable, (char *)lserial, &isNew);587 hPtr = Tcl_CreateHashEntry(&atomTable, (char *)lserial, &isNew); 590 588 if (!isNew) { 591 589 Tcl_AppendResult(interp, "line ", Itoa(lineNum), … … 594 592 goto error; 595 593 } 596 atomPtr = NewAtom(interp, next Index, line, lineLength);594 atomPtr = NewAtom(interp, nextOrdinal, line, lineLength); 597 595 if (atomPtr == NULL) { 598 596 goto error; … … 607 605 Tcl_ListObjAppendElement(interp, atomsObjPtr, 608 606 Tcl_NewIntObj(atomPtr->number)); 609 next Index++;607 nextOrdinal++; 610 608 } else if ((c == 'C') && (strncmp(line, "CONECT", 6) == 0)) { 611 609 int a, i, n; … … 627 625 goto error; 628 626 } 629 if (SerialTo Index(interp, &serialTable, buf, &a) != TCL_OK) {627 if (SerialToOrdinal(interp, &atomTable, buf, &a) != TCL_OK) { 630 628 goto error; 631 629 } … … 642 640 break; /* No more entries */ 643 641 } 644 if (SerialTo Index(interp, &serialTable, buf, &b) != TCL_OK) {642 if (SerialToOrdinal(interp, &atomTable, buf, &b) != TCL_OK) { 645 643 goto error; 646 644 } … … 657 655 } 658 656 if (bondFlags & BOND_COMPUTE) { 659 ComputeBonds(& serialTable, &conectTable);657 ComputeBonds(&atomTable, &conectTable); 660 658 } 661 659 objPtr = Tcl_NewStringObj("# vtk DataFile Version 2.0\n", -1); … … 663 661 Tcl_AppendToObj(objPtr, "ASCII\n", -1); 664 662 Tcl_AppendToObj(objPtr, "DATASET POLYDATA\n", -1); 665 sprintf(mesg, "POINTS %d float\n", serialTable.numEntries);663 sprintf(mesg, "POINTS %d float\n", atomTable.numEntries); 666 664 Tcl_AppendToObj(objPtr, mesg, -1); 667 665 Tcl_AppendObjToObj(objPtr, pointsObjPtr); … … 684 682 Tcl_AppendToObj(objPtr, mesg, -1); 685 683 } 686 sprintf(mesg, "POINT_DATA %d\n", serialTable.numEntries);684 sprintf(mesg, "POINT_DATA %d\n", atomTable.numEntries); 687 685 Tcl_AppendToObj(objPtr, mesg, -1); 688 686 sprintf(mesg, "SCALARS element int\n"); … … 691 689 Tcl_AppendToObj(objPtr, mesg, -1); 692 690 Tcl_AppendObjToObj(objPtr, atomsObjPtr); 693 FreeAtoms(& serialTable);691 FreeAtoms(&atomTable); 694 692 Tcl_DeleteHashTable(&conectTable); 695 693 Tcl_DecrRefCount(pointsObjPtr); 696 694 Tcl_DecrRefCount(atomsObjPtr); 697 Tcl_DecrRefCount(verticesObjPtr);698 695 if (objPtr != NULL) { 699 696 Tcl_SetObjResult(interp, objPtr); … … 702 699 error: 703 700 Tcl_DeleteHashTable(&conectTable); 704 FreeAtoms(& serialTable);701 FreeAtoms(&atomTable); 705 702 Tcl_DecrRefCount(pointsObjPtr); 706 703 Tcl_DecrRefCount(atomsObjPtr); 707 Tcl_DecrRefCount(verticesObjPtr);708 704 return TCL_ERROR; 709 705 }
Note: See TracChangeset
for help on using the changeset viewer.