newgeo
|
clear_screen.c,
filter_atom_type.c,
intgen.c,
newgeo.c,
newgeo.h,
newgeo.make,
read_geo.c,
read_mm2.c,
read_sybyl.c,
valid_atom.c,
write_geo.c,
write_mm2.c,
write_sybyl.c,
|
|
|
#include "utility.h"
#include "newgeo.h"
#define MAX_MM2_ATOM_TYPES 109
int write_sybyl_mol(outfile)
/*============================================================================*/
/* WRITTEN: J.R.HURST
/* LAST MODIFICATION: 5 FEBRUARY 1993 MVG (ADDED ADDITIONAL ATOM TYPES 61-109)
*/
FILE *outfile;
{
int bond_cnt;
int i,j; /* loop variables */
int status; /* RETURN STATUS FROM USER I/O ROUTINES. */
char mol_name[30]; /* MOLECULE NAME. */
/* FORM MOLECULE NAME FROM THE INPUT FILE NAME. */
strcpy(mol_name,input_file_name);
*strrchr(mol_name,'.')=0; /* TRIM OFF EXTENSION. */
mol_name[20] = 0;
fprintf(outfile,"%4d MOL %-20s 0\n",atom_cnt,mol_name);
/* WRITE OUT EACH ATOM AND COUNT THE NUMBER OF BONDS. */
for(bond_cnt = i = 0 ; i < atom_cnt ; i++)
{
fprintf(outfile,"%4d%4d%9.4f%9.4f%9.4f \n",i+1,sybyl_atom_type(i),
intco[i].vector[0],intco[i].vector[1],intco[i].vector[2]);
bond_cnt += intco[i].bond_cnt;
}
/* WRITE OUT THE BONDS. */
fprintf(outfile,"%4d MOL\n",bond_cnt/2);
for(bond_cnt = 1, i = 0 ; i < atom_cnt ; i++)
{
for(j = 0 ; j < intco[i].bond_cnt ; j++,bond_cnt++)
{
if(i < intco[i].bonds[j])
fprintf(outfile,"%4d%4d%4d %4d\n",bond_cnt,i+1,intco[i].bonds[j]+1,1);
}
}
/* NO FEATURES. */
fprintf(outfile," 0 MOL\n");
return(1);
}
int sybyl_atom_type(index)
/*============================================================================*/
/* PURPOSE: DETERMINE THE SYBYL ATOM TYPE FOR THE SPECIFIED ATOM. DEPENDING ON
/* THE GEOMETRY SOURCE, WE CAN EITHER DO A GOOD JOB (MM2/MM3) OR A CRUDE
/* JOB (ALL ELSE).
*/
int index;
{
/* NOTE THAT THE FOLLOWING TRANSLATION TABLE IS SUPERCEDED IN SOME SPECIAL */
/* CASES BY CODE SEGMENTS BELOW; IF NOT A SPECIAL CASE, THE TABLE IS USED. */
static int sybyl_type[MAX_MM2_ATOM_TYPES] =
{
1,2,2,4,13,8,9,5,28,7,
16,15,14,17,10,10,29,30,27,20,
13,1,13,13,12,986,986,13,1,2,
915,931,948,917,933,13,11,2,31,19,
9,18,6,13,7,19,8,13,8,2,
984,987,990,918,934,1,2,2,988,12,
910,910,911,911,906,906,2,4,9,9,
2,6,13,26,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,
9,9,9,10,10,4,19,6,19
};
if (geometry_source==TYPE_MM2_INPUT || geometry_source==TYPE_MM3_INPUT)
{
/* SPECIAL KNOWLEDGE USED FOR MM2/MM3 TYPE SOURCE GEOMETRY. */
if (intco[index].source_type==2)
{
/* SPECIAL CASE: CHECK AROMATICITY OF SP2 CARBON (MM2 TYPE 2). */
if (intco[index].source_aromatic) return(3);
else return(2);
}
else if (intco[index].source_type==37)
{
/* SPECIAL CASE: CHECK AROMATICITY OF NITROGEN (MM2 TYPE 37). */
if (intco[index].source_aromatic) return(11);
else return(6);
}
else if (intco[index].source_type==41)
{
/* SPECIAL CASE: CHECK AROMATICITY OF FURAN OXYGEN (MM2 TYPE 41). */
if (intco[index].source_aromatic) return(9);
else return(8);
}
else return(sybyl_type[intco[index].source_type-1]);
}
else if (geometry_source==TYPE_SYBYL_MOL || geometry_source==TYPE_SYBYL_MOL2)
{
/* ALREADY CORRECT IF SYBYL WAS THE INCOMING TYPE. */
return(intco[index].source_type);
}
else
{
/* ALL NON MM2/MM3 TYPE SOURCE GEOMETRIES; DO A CRUDE TRANSLATION. */
if(strcmp(intco[index].atom_name,"C ") == 0) return(1);
if(strcmp(intco[index].atom_name,"H ") == 0) return(13);
if(strcmp(intco[index].atom_name,"N ") == 0) return(5);
if(strcmp(intco[index].atom_name,"O ") == 0) return(8);
if(strcmp(intco[index].atom_name,"S ") == 0) return(10);
if(strcmp(intco[index].atom_name,"P ") == 0) return(12);
if(strcmp(intco[index].atom_name,"F ") == 0) return(16);
if(strcmp(intco[index].atom_name,"Cl") == 0) return(15);
if(strcmp(intco[index].atom_name,"Br") == 0) return(14);
if(strcmp(intco[index].atom_name,"I ") == 0) return(17);
if(strcmp(intco[index].atom_name,"Si") == 0) return(27);
if(strcmp(intco[index].atom_name,"Na") == 0) return(21);
if(strcmp(intco[index].atom_name,"Li") == 0) return(24);
if(strcmp(intco[index].atom_name,"Al") == 0) return(25);
if(strcmp(intco[index].atom_name,"LP") == 0) return(20);
if(strcmp(intco[index].atom_name,"Du") == 0) return(26);
printf("Atom %s not recognized - assumed to be Carbon.\n",intco[index].atom_name);
return(1);
}
}
int write_sybyl_mol2(outfile)
/*============================================================================*/
/* PURPOSE: WRITE A SYBYL .MOL2 FILE. NOTE WE ONLY HANDLE THREE TYPES OF
/* RECORDS IN THE .MOL2 FILE (MOLECULE, ATOM, AND BOND).
*/
FILE *outfile;
{
int bond_cnt; /* NUMBER OF BONDS IN MOLECULE. */
int natom; /* LOOP INDEX; WHICH ATOM. */
int nbond; /* LOOP INDEX; WHICH BOND. */
int natom_bond; /* LOOP INDEX; WHICH BOND FOR NATOM. */
char *sybyl_mnemonic_type();
/* MAKE A QUICK COUNT OF THE NUMBER OF BONDS IN THE MOLECULE. */
bond_cnt=0;
for (natom=0; natomMOLECULE\n");
fprintf(outfile,"%s\n",source_title); /* NAME. */
fprintf(outfile,"%d %d 0 0 0\n",atom_cnt,bond_cnt); /* NATOMS, NBONDS. */
fprintf(outfile,"SMALL\n"); /* MOL TYPE. */
fprintf(outfile,"NO_CHARGES\n"); /* CHARGE TYPE. */
fprintf(outfile,"****\n"); /* STATUS BITS. */
fprintf(outfile,"%s\n",header_text[0]); /* COMMENT. */
/* CREATE THE ATOM SECTION. */
/* NOTE THAT THE MNEMONIC IS ONLY CORRECT IF THE SOURCE WAS SYBYL!! */
fprintf(outfile,"@ATOM\n");
for (natom=0; natomBOND\n");
nbond=1;
for (natom=0; natom
|