1 #include "bbltyp.h"
2 
ums_to_mini_ums(mini_ums * mini,ums_type * mol)3 void ums_to_mini_ums(mini_ums *mini, ums_type *mol)
4 {
5   int i;
6 
7   mAtoms = Atoms;
8   mini->energy = Energy;
9 
10   if (!mini->atoms)
11     initialize_mini(mini);
12 
13   for (i = 1; i <= Atoms; i++)
14   {
15     mX(i) = X(i);
16     mY(i) = Y(i);
17     mZ(i) = Z(i);
18   }
19 }
20 
copy_coordinates(mini_ums * mini,ums_type * mol)21 void copy_coordinates(mini_ums *mini, ums_type *mol)
22 {
23   int i;
24 
25   Energy = mini->energy;
26 
27   for (i = 1; i <= Atoms; i++)
28   {
29     X(i) = mX(i);
30     Y(i) = mY(i);
31     Z(i) = mZ(i);
32   }
33 }
34 
35 
copy_mini(mini_ums * mini1,mini_ums * mini2)36 void copy_mini(mini_ums *mini1,mini_ums *mini2)
37 {
38   int i;
39 
40   mini1->num_atoms = mini2->num_atoms;
41   mini1->energy = mini2->energy;
42 
43   if (!mini1->atoms)
44     initialize_mini(mini1);
45 
46   for (i = 1;i <= mini1->num_atoms;i++)
47     {
48       mini1->atoms[i].x = mini2->atoms[i].x;
49       mini1->atoms[i].y = mini2->atoms[i].y;
50       mini1->atoms[i].z = mini2->atoms[i].z;
51     }
52 }
53 
initialize_mini(mini_ums * mini)54 void initialize_mini(mini_ums *mini)
55 {
56   int i;
57 
58   mini->atoms = (coord_type *)malloc((mAtoms + 1) * sizeof(coord_type));
59 
60   for (i = 1; i <= mAtoms; i++)
61     {
62       mX(i) = 0.0;
63       mY(i) = 0.0;
64       mZ(i) = 0.0;
65     }
66 }
67 
make_mini_enantiomer(mini_ums * ena,mini_ums * mini)68 void make_mini_enantiomer(mini_ums *ena, mini_ums *mini)
69 {
70   int i;
71 
72   ena->num_atoms = mAtoms;
73   ena->energy = mEnergy;
74 
75   if (!ena->atoms)
76     initialize_mini(ena);
77 
78   copy_mini(ena,mini);
79 
80   for (i = 1; i <= mAtoms; i++)
81     ena->atoms[i].x *= -1;
82 }
83 
print_mini(mini_ums * mini)84 void print_mini(mini_ums *mini)
85 {
86   int i;
87 
88   for (i = 1; i <= mAtoms; i++)
89   {
90     printf("%4d %10.5f%10.5f%10.5f\n",i,mX(i),mY(i),mZ(i));
91   }
92 }
93 
94 
add_mini(mini_ums * mini1,mini_ums * mini2,mini_ums * new_mini)95 void add_mini(mini_ums *mini1, mini_ums *mini2, mini_ums *new_mini)
96 {
97   int i,k;
98 
99   new_mini->num_atoms = mini1->num_atoms + mini2->num_atoms;
100   new_mini->atoms = (coord_type *)malloc((new_mini->num_atoms + 1) * sizeof(coord_type));
101 
102   for (i = 1; i <= mini1->num_atoms; i++)
103   {
104     new_mini->atoms[i].x = mini1->atoms[i].x;
105     new_mini->atoms[i].y = mini1->atoms[i].y;
106     new_mini->atoms[i].z = mini1->atoms[i].z;
107   }
108 
109   k = mini1->num_atoms;
110 
111   for (i = 1; i <= mini2->num_atoms; i++)
112   {
113     new_mini->atoms[i+k].x = mini2->atoms[i].x;
114     new_mini->atoms[i+k].y = mini2->atoms[i].y;
115     new_mini->atoms[i+k].z = mini2->atoms[i].z;
116   }
117 }
118 
mini_to_set(mini_ums * mini,set_type * the_set)119 void mini_to_set(mini_ums *mini, set_type *the_set)
120 {
121   int i;
122 
123   setclear(the_set);
124   for (i = 1; i <= mAtoms; i++)
125   {
126     if (non_zero(&mini->atoms[i]))
127       biton(the_set,i);
128   }
129 }
130 
non_zero(coord_type * pt)131 int non_zero(coord_type *pt)
132 {
133   if ((pt->x == 0.0) && (pt->y == 0.0) && (pt->z == 0.0))
134     return(FALSE);
135   else
136     return(TRUE);
137 }
138 
139 
adjust_mini_vector(mini_ums * mini,int core_atom,int vect_atom,double new_dist)140 void adjust_mini_vector(mini_ums *mini, int core_atom, int vect_atom, double new_dist)
141 {
142   vect_type the_vector;
143 
144   the_vector.x = mX(vect_atom) - mX(core_atom);
145   the_vector.y = mY(vect_atom) - mY(core_atom);
146   the_vector.z = mZ(vect_atom) - mZ(core_atom);
147 
148   normalize_vect(&the_vector);
149   scal_x_vect(&the_vector,new_dist);
150   mPoint(vect_atom) = point_plus_vector(&mPoint(core_atom),&the_vector);
151 }
152 
release_mini(mini_ums * mini)153 void release_mini(mini_ums *mini)
154 {
155   if (mini->atoms)
156     free(mini->atoms);
157 }
158 
zero_mini(mini_ums * mini)159 void zero_mini(mini_ums *mini)
160 {
161   int i;
162 
163   for (i = 1;i <= mAtoms;i++)
164   {
165     mX(i) = 0.0;
166     mY(i) = 0.0;
167     mZ(i) = 0.0;
168   }
169 
170 }
171 
read_mini(FILE * file,mini_ums * mini)172 void read_mini(FILE *file,mini_ums *mini)
173 {
174   int i;
175   char buffer[100];
176 
177   fgets(buffer,sizeof(buffer),file);
178   sscanf(buffer,"%d",&mAtoms);
179   fgets(buffer,sizeof(buffer),file);
180   sscanf(buffer,"%lf",&mEnergy);
181 
182   if (!mini->atoms)
183   initialize_mini(mini);
184 
185   for (i = 1;i <= mAtoms;i++)
186   {
187     fgets(buffer,sizeof(buffer),file);
188     sscanf(buffer,"%lf %lf %lf",&mX(i),&mY(i),&mZ(i));
189   }
190 }
191 
write_mini(FILE * file,mini_ums * mini)192 long int write_mini(FILE *file,mini_ums *mini)
193 {
194   int i;
195 
196   fprintf(file,"%d\n%f\n",mAtoms,mEnergy);
197 
198   for (i = 1;i <= mAtoms;i++)
199     fprintf(file,"%10.5f %10.5f %10.5f\n",mX(i),mY(i),mZ(i));
200 
201   return(ftell(file));
202 }
203