steric_1.11
|
Makefile,
Makefile.sgi,
README.steric,
contplot,
craig.c,
craig.h,
crystal.c,
crystal.h,
integrat.c,
integrat.h,
leach.c,
leach.h,
long_steric,
makeit,
mapcont,
mapcont.c,
mapprof,
mapprof.c,
profplot,
proja.c,
proja.h,
ryan.c,
ryan.h,
ryan_perm.c,
ryan_perm.h,
ryan_quad.c,
ryan_quad.h,
steraid.c,
steraid.h,
stercalc.c,
stercalc.h,
stercomm.c,
stercomm.h,
sterdefn.h,
stererr.h,
sterfile.c,
sterfile.h,
stergrap.c,
stergrap.h,
stergrp.c,
stergrp.h,
steric,
steric.TeX,
steric.err,
steric.grp,
steric.hlp,
steric.ini,
steric.par,
stermain.c,
stermem.c,
stermem.h,
sterover.c,
sterover.h,
sterplot,
stertext.c,
stertext.h,
test.bgf,
test.inp,
vectors.c,
vectors.h,
|
|
|
/**************************************************************************/
/**************************************************************************/
/************************** "steric" **********************************/
/**************************************************************************/
/************* Program to calculate ligand cone ********************/
/************* angles as a measure of steric size ********************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/****************** Graphics Functions **************************/
/**************************************************************************/
/****************** This module is **************************/
/****************** system independant **************************/
/**************************************************************************/
#include
#include
#include
#include
#include "sterdefn.h" /* declaration of structures and globals */
#include "stergrap.h" /* functions for all graphical visualisations */
#include "sterfile.h" /* functions for all file manipulations */
#include "stermem.h" /* dynamic memory management module */
#include "steraid.h" /* additional functions needed */
#include "stertext.h" /* all text functions for text mode */
#include "stercomm.h" /* command menu options */
#include "stercalc.h" /* commands associated with calculations */
/**************************************************************************/
/**************************************************************************/
int Draw_Steric_Profile(char *args, Mol *M, Set *set, char mode)
{
FILE *MF=NULL;
Ster *ster=NULL;
char line[LINELEN];
double rad=0.0;
double gap=0.0;
int i,len,j;
char fname[100];
char pname[100];
char tname[100];
char lname[100];
if(M==NULL) return(0);
if((len=strlen(args))<1) return(0);
strcpy(fname,M->Fname);
if((len==1)&&(args[0]==ANGU))
{
New_Extension(fname,".ang");
sprintf(line,"Plotting molecule angular profile to file %s",fname);
}
else
{
New_Extension(fname,".rad");
if(len==1) sprintf(line,"Plotting molecule radial profile to file %s",fname);
else sprintf(line,"Plotting molecule radial profiles to file %s",fname);
}
Out_Message(line,O_NEWLN);
if((MF=fopen(fname,"wt"))==NULL)
{
Error_Message(E_OPNOUT,"Draw Steric Profile");
}
else
{
for(i=0;iname);
ster=Which_Ster(args[i],M->ster,set);
if(ster!=NULL)
{
fprintf(MF,"#STERIC %c %10.6f%10.6f%10.6f%10.6f%10.6f %s\n",ster->type
,ster->tot_val,ster->err_val
,ster->tot_con,ster->err_con
,ster->max_val,ster->name);
if(ster->val!=NULL)
{
fprintf(MF,"#PROFIL %10.6f%10.6f%6d %s\n"
,ster->min,ster->max,ster->size,ster->name);
rad=ster->min;
gap=(ster->max-ster->min)/ster->size;
for(j=0;jsize;j++,rad+=gap)
{
fprintf(MF,"%10.6f %10.6f\n",rad,ster->val[j]);
}
fprintf(MF,"\n");
}
}
}
fclose(MF);
strcpy(pname,fname);
New_Extension(pname,".plt");
strcpy(tname,fname);
New_Extension(tname,".TeX");
strcpy(lname,fname);
New_Extension(lname,"");
if((MF=fopen(pname,"wt"))==NULL)
{
Error_Message(E_OPNOUT,"Draw Steric Profile");
return(0);
}
else
{
if(mode==POLA) fprintf(MF,"set polar\n");
fprintf(MF,"set title \"\\LARGE %s profile of %s\" , 4\n",ster->name,lname);
fprintf(MF,"set terminal latex courier 12\n");
fprintf(MF,"set output \"%s\"\n",tname);
fprintf(MF,"plot \"%s\" with lines\n",fname);
fprintf(MF,"exit\n");
fclose(MF);
sprintf(line,"sterplot %s",lname); system(line);
if((set->plot==NULL)&&((set->plot=(FILE *)popen("gnuplot","w"))==NULL))
{
Error_Message(E_BADFRK,"Draw Steric Profile");
return(0);
}
}
}
return(1);
}
/**************************************************************************/
int Draw_Steric_Parameter(char *args, Mol *molecule, Set *set)
{
FILE *MF=NULL;
Mol *M=NULL;
Ster *ster=NULL;
char line[LINELEN];
int i,n,j,m=0;
char fname[100];
char pname[100];
char tname[100];
char lname[100];
if(molecule==NULL) return(0);
strcpy(fname,"sterpar.val");
sprintf(line,"Plotting steric values to file %s",fname);
Out_Message(line,O_NEWLN);
if((MF=fopen(fname,"wt"))==NULL)
{
Error_Message(E_OPNOUT,"Draw Steric Parameter");
}
else
{
fprintf(MF,"#STERIC Parameter Table for Statistics\n");
for(i=0,M=First_Molecule(molecule);M!=NULL;M=M->next,i++)
{
for(j=0,ster=First_Steric(M->ster);ster!=NULL;ster=ster->next,j++)
{
if(ster->type==args[0]) m=j;
fprintf(MF," %14s %c %10.6f%10.6f%10.6f%10.6f"
,M->name,ster->type
,ster->tot_val,ster->tot_con
,ster->max_val,ster->pr_area);
}
fprintf(MF,"\n");
}
fclose(MF);
strcpy(pname,fname);
New_Extension(pname,".plt");
strcpy(tname,fname);
New_Extension(tname,".TeX");
strcpy(lname,fname);
New_Extension(lname,"");
if((j>0)&&((MF=fopen(pname,"wt"))==NULL))
{
Error_Message(E_OPNOUT,"Draw Steric Parameter");
return(0);
}
else
{
fprintf(MF,"set title \"\\LARGE Steric Parameters\" , 4\n");
fprintf(MF,"set terminal latex courier 12\n");
fprintf(MF,"set output \"%s\"\n",tname);
if((set->plot==NULL)&&((set->plot=(FILE *)popen("gnuplot","w"))==NULL))
{
Error_Message(E_BADFRK,"Draw Steric Profile");
return(0);
}
fprintf(set->plot,"set title \"Steric Parameters\" , 4\n");
if(j==1)
{
ster=molecule->ster;
fprintf(set->plot,"set ylabel \"%s\"\n",ster->name);
fprintf(set->plot,"set xlabel \"Molecules\"\n");
fprintf(set->plot,"plot \"%s\" using 3",fname);
fprintf(MF,"set ylabel \"%s\"\n",ster->name);
fprintf(MF,"set xlabel \"Molecules\"\n");
fprintf(MF,"plot \"%s\" using 3",fname);
}
else
{
ster=Goto_Steric(molecule->ster,m+1);
fprintf(set->plot,"set xlabel \"%s\"\n",ster->name);
fprintf(set->plot,"set ylabel \"Steric Parameter\"\n");
fprintf(MF,"set xlabel \"%s\"\n",ster->name);
fprintf(MF,"set ylabel \"Steric Parameter\"\n");
}
for(n=0;nplot,"plot "); fprintf(MF,"plot "); }
if(n==m) continue;
ster=Goto_Steric(molecule->ster,n+1);
fprintf(set->plot,"\"%s\" using %d:%d title \"Total %s\"",fname,3+6*m,3+6*n,ster->name);
fprintf(MF,"\"%s\" using %d:%d title \"Total %s\"",fname,3+6*m,3+6*n,ster->name);
if(nplot,", ");fprintf(MF,", ");}
}
fprintf(set->plot,"\n");
fflush(set->plot);
fprintf(MF,"\nexit\n");
fclose(MF);
sprintf(line,"sterplot %s",lname); system(line);
}
}
return(1);
}
/**************************************************************************/
int Draw_Molecule_Contour(Mol *M, Set *set, char *script)
{
char line[LINELEN];
char fname[LINELEN];
char mode='c';
if(set->mode&PERS_BIT) mode='p';
else mode='c';
strcpy(fname,M->Fname);
if(fname[0]==0) sprintf(fname,"M%d",Get_Molecule_Number(M));
sprintf(line,"Loading gnuplot to plot %s to postscript",fname);
Out_Message(line,O_NEWLN);
sprintf(line,"%s %s %c r %f s %d &"
,script,fname,mode,set->rotation,set->c_size);
return(system(line));
}
/**************************************************************************/
int Draw_Special_View(Mol *M, Set *set)
{
FILE *MF=NULL;
char line[LINELEN];
char fname[100];
char pname[100];
char tname[100];
char lname[100];
struct vector Mv[100];
double radius[100];
struct vector v;
struct matrix Rotation;
int count, found, x, y;
double xm, ym;
Atms *atom=NULL;
if(M==NULL) return(0);
strcpy(fname,M->Fname);
New_Extension(fname,".view");
sprintf(line,"Plotting molecule special view to file %s",fname);
Out_Message(line,O_NEWLN);
if((MF=fopen(fname,"wt"))==NULL)
{
Error_Message(E_OPNOUT,"Draw Special View");
}
else
{
fprintf(MF,"#STERIC %s\n",M->name);
v=VequalV(M->basis_z);
Rotation.x=VequalV(M->basis_x);
Rotation.y=VequalV(M->basis_y);
Rotation.z=VequalV(M->basis_z);
v=Mtransform(Rotation,v);
for(found=0,atom=First_Atom(M->atoms);atom!=NULL;atom=atom->next)
{
if(atom->stat&MAIN_BIT)
{
Mv[found]=Mtransform(Rotation,atom->v);
radius[found]=atom->radius;
if(found>=100) break;
found++;
}
}
for(x=-set->x_ran;x<=set->x_ran;x++)
{
xm=(double)x/(double)set->x_ran;
for(y=-set->y_ran;y<=set->y_ran;y++)
{
ym=(double)y/(double)set->y_ran;
for(count=0;countplot==NULL)&&((set->plot=(FILE *)popen("gnuplot","w"))==NULL))
{
Error_Message(E_BADFRK,"Draw Special View");
return(0);
}
fprintf(set->plot,"set nopolar\n");
fprintf(set->plot,"plot \"%s\"\n",fname);
fflush(set->plot);
}
}
return(1);
}
/**************************************************************************/
int Draw_Projected_View(Mol *M, Set *set)
{
FILE *MF=NULL;
char line[LINELEN];
char fname[100];
char pname[100];
char tname[100];
char lname[100];
char mode=0;
double angle=0.0, gap=0.0;
int a=0;
double x, y;
Atms *atom=NULL;
if(M==NULL) return(0);
strcpy(fname,M->Fname);
New_Extension(fname,".proj");
sprintf(line,"Plotting molecule projected view to file %s",fname);
Out_Message(line,O_NEWLN);
if((MF=fopen(fname,"wt"))==NULL)
{
Error_Message(E_OPNOUT,"Draw Projected View");
}
else
{
gap=2*PI/(double)PROJ_RAN;
fprintf(MF,"#STERIC %s\n",M->name);
for(atom=First_Atom(M->atoms);atom!=NULL;atom=atom->next)
{
if(atom->stat&MAIN_BIT)
{
if(atom->stat&CALC_BIT) mode=1;
for(a=0;a<=PROJ_RAN;a++)
{
angle=(double)a*gap;
x=atom->tv.x+atom->radius*cos(angle);
y=atom->tv.y+atom->radius*sin(angle);
fprintf(MF,"%10.5f %10.5f\n",x,y);
if((set->modev&FADE_BIT)&&(mode==0)) fprintf(MF,"\n");
}
fprintf(MF,"\n");
}
}
fclose(MF);
sprintf(line,"Loading gnuplot to plot file %s",fname);
Out_Message(line,O_NEWLN);
strcpy(pname,fname);
New_Extension(pname,".plt");
strcpy(tname,fname);
New_Extension(tname,".TeX");
strcpy(lname,fname);
New_Extension(lname,"");
if((MF=fopen(pname,"wt"))==NULL)
{
Error_Message(E_OPNOUT,"Draw Projected View");
return(0);
}
else
{
fprintf(MF,"set title \"\\LARGE Projected view of %s\" , 4\n",lname);
fprintf(MF,"set terminal latex courier 12\n");
fprintf(MF,"set output \"%s\"\n",tname);
fprintf(MF,"plot \"%s\"\n",fname);
fprintf(MF,"exit\n");
fclose(MF);
sprintf(line,"sterplot %s",lname); system(line);
if((set->plot==NULL)&&((set->plot=(FILE *)popen("gnuplot","w"))==NULL))
{
Error_Message(E_BADFRK,"Draw Projected View");
return(0);
}
fprintf(set->plot,"set nopolar\n");
fprintf(set->plot,"plot \"%s\" with lines\n",fname);
fflush(set->plot);
}
}
return(1);
}
/**************************************************************************/
/**************************************************************************/
/************************* The End ... ***********************************/
/**************************************************************************/
|