ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/freemol/trunk/src/mengine/src/xlogp.c
(Generate patch)
# Line 1 | Line 1
1   #define EXTERN extern
2  
3   #include "pcwin.h"
4 #include "pcmod.h"
4  
5 < static int get_hybrid(int);
6 < static int check_ring1(int);
7 < int is_ring31(int);
8 < int is_ring41(int);
9 < int is_ring51(int);
11 < int is_ring61(int);
12 <
13 < void xlogp(float *result)
5 > int get_hybrid(int);
6 > int check_ring1(int);
7 > float xlogp(int natom,int *atomnum,int **iat,int **bo,long int *flags,int *type);
8 > // =========================
9 > float xlogp(int natom,int *atomnum,int **iat,int **bo,long int *flags,int *type)
10   {
11     int i,j,k,ia;
12     int iz,nh,nx,npi,nc,itype,dbond,nox,ndouble,nf;
# Line 18 | Line 14
14     int nhydrophobic, namino_acid, nhbond, n13FX, n13XX;
15     int atype[100];
16     long int pi_mask;
17 <   float total;
17 >   float total,result;
18   //   char astring[60];
19     float datype[] = {
20      0.000, 0.484, 0.168,-0.181, 0.358, 0.009,-0.344,-0.439, 0.051,-0.138,
# Line 39 | Line 35
35   //  loop through atoms and classify
36      for (i=1; i <= natom; i++)
37      {
38 <        if (atom.atomnum[i] == 6) // carbon
38 >        if (atomnum[i] == 6) // carbon
39          {
40              iz = get_hybrid(i);
41              nh = nx = npi = nc = 0;
42              for (j=0; j < MAXIAT; j++)
43              {
44 <                if (atom.iat[i][j] != 0)
44 >                if (iat[i][j] != 0)
45                  {
46 <                    if (atom.atomnum[atom.iat[i][j]] == 1) nh++;
47 <                    if (atom.flags[atom.iat[i][j]] & pi_mask) npi++;
48 <                    itype = atom.atomnum[atom.iat[i][j]];
46 >                    if (atomnum[iat[i][j]] == 1) nh++;
47 >                    if (flags[iat[i][j]] & pi_mask) npi++;
48 >                    itype = atomnum[iat[i][j]];
49                      if (itype == 6) nc++;
50                      if (itype == 7 || itype == 8 || itype == 15 || itype == 16) nx++;
51 <                    itype = atom.mmx_type[atom.iat[i][j]];
51 >                    itype = type[iat[i][j]];
52                      if (itype == 11 || itype == 12 || itype == 13 || itype == 14) nx++;
53                  }
54              }
# Line 100 | Line 96
96                  // find double bond atom
97                  for (j=0; j < 4; j++)
98                  {
99 <                    if (atom.iat[i][j] != 0 && atom.bo[i][j] == 2)
99 >                    if (iat[i][j] != 0 && bo[i][j] == 2)
100                      {
101 <                        dbond = atom.iat[i][j];
101 >                        dbond = iat[i][j];
102                          break;
103                      }
104                  }
# Line 113 | Line 109
109                    goto L_10;
110                  }
111                  // if not a pi atom
112 <                if (!(atom.flags[i] & pi_mask))  // non pi atoms
112 >                if (!(flags[i] & pi_mask))  // non pi atoms
113                  {
114 <                    if (atom.atomnum[dbond] == 6)  // c=c
114 >                    if (atomnum[dbond] == 6)  // c=c
115                      {
116                          if (nh == 1 & nc == 2)
117                          {
# Line 157 | Line 153
153                      npi_x = 0;
154                      for (j = 0; j < 3; j++)
155                      {
156 <                        if (atom.atomnum[atom.iat[i][j]] == 1)
156 >                        if (atomnum[iat[i][j]] == 1)
157                            nh++;
158 <                        if (atom.atomnum[atom.iat[i][j]] == 6)
158 >                        if (atomnum[iat[i][j]] == 6)
159                          {
160                              nc++;
161 <                            if (atom.flags[atom.iat[i][j]] & pi_mask)
161 >                            if (flags[iat[i][j]] & pi_mask)
162                              {
163                                  npi++;
164                                  npi_c++;
165                              }
166                          }
167 <                        if (atom.atomnum[atom.iat[i][j]] >= 6)
167 >                        if (atomnum[iat[i][j]] >= 6)
168                          {
169                            nx++;
170 <                          if (atom.flags[atom.iat[i][j]] & pi_mask)
170 >                          if (flags[iat[i][j]] & pi_mask)
171                            {
172                                npi++;
173                                npi_x++;
# Line 201 | Line 197
197              {
198                  for (j=0; j < 4; j++)
199                  {
200 <                    if (atom.iat[i][j] != 0 && atom.bo[i][j] == 3)
200 >                    if (iat[i][j] != 0 && bo[i][j] == 3)
201                      {
202 <                        if (atom.atomnum[atom.iat[i][j]] == 7)
202 >                        if (atomnum[iat[i][j]] == 7)
203                          {
204                              atype[77]++;
205                              goto L_10;
# Line 215 | Line 211
211                  else if (nc == 1)
212                    atype[36]++;
213              }
214 <        } else if (atom.atomnum[i] == 1) // hydrogen
214 >        } else if (atomnum[i] == 1) // hydrogen
215          {
216              atype[37]++;
217 <        } else if (atom.atomnum[i] == 8) // oxygen
217 >        } else if (atomnum[i] == 8) // oxygen
218          {
219              nh = npi = nx = nc = 0;
220              for (j=0; j < 4; j++)
221              {
222 <                if (atom.atomnum[atom.iat[i][j]] == 1)
222 >                if (atomnum[iat[i][j]] == 1)
223                    nh++;
224 <                if (atom.atomnum[atom.iat[i][j]] == 6)
224 >                if (atomnum[iat[i][j]] == 6)
225                  {
226                      nc++;
227 <                    if (atom.flags[atom.iat[i][j]] & pi_mask) npi++;
227 >                    if (flags[iat[i][j]] & pi_mask) npi++;
228                  }
229 <                if (atom.atomnum[atom.iat[i][j]] > 6)
229 >                if (atomnum[iat[i][j]] > 6)
230                  {
231                      nx++;
232 <                    if (atom.flags[atom.iat[i][j]] & pi_mask) npi++;
232 >                    if (flags[iat[i][j]] & pi_mask) npi++;
233                  }
234              }
235 <            if (atom.mmx_type[i] == 6)
235 >            if (type[i] == 6)
236              {
237                  if (nh == 1 && nc == 1 && npi == 0)
238                    atype[38]++;
# Line 250 | Line 246
246                    atype[42]++;
247                  else if (nc == 2 && npi == 2)
248                    atype[43]++;
249 <            } else if (atom.mmx_type[i] == 7)
249 >            } else if (type[i] == 7)
250              {
251                  if (nc == 1)
252                    atype[44]++;
253                  else if (nx == 1)
254                    atype[45]++;
255              }  
256 <        } else if (atom.atomnum[i] == 7) // nitrogen
256 >        } else if (atomnum[i] == 7) // nitrogen
257          {
258              nh = nx = nc = npi = 0;
259              for (j=0; j < MAXIAT; j++)
260              {
261 <                if (atom.iat[i][j] != 0)
261 >                if (iat[i][j] != 0)
262                  {
263 <                    if (atom.atomnum[atom.iat[i][j]] == 1) nh++;
264 <                    if (atom.atomnum[atom.iat[i][j]] == 6) nc++;
265 <                    if (atom.atomnum[atom.iat[i][j]] > 6) nx++;
266 <                    if (atom.flags[atom.iat[i][j]] & pi_mask) npi++;
263 >                    if (atomnum[iat[i][j]] == 1) nh++;
264 >                    if (atomnum[iat[i][j]] == 6) nc++;
265 >                    if (atomnum[iat[i][j]] > 6) nx++;
266 >                    if (flags[iat[i][j]] & pi_mask) npi++;
267                  }
268              }
269 <            if (atom.mmx_type[i] == 8)
269 >            if (type[i] == 8)
270              {
271                  if (nh == 2 && nc == 1 && npi == 0) atype[46]++;
272                  else if (nh == 2 && nc == 1 && npi > 1)  atype[47]++;
# Line 280 | Line 276
276                  else if (nh == 1 && nx == 2) atype[50]++;
277                  else if (nh == 0 && nc == 3) atype[51]++;
278                  else if (nh == 0 && nx >= 1) atype[52]++;
279 <            } else if (atom.mmx_type[i] == 9)
279 >            } else if (type[i] == 9)
280              {
281                  for (j=0; j < 4; j++)  
282                  {
283 <                    if (atom.iat[i][j] != 0 )
283 >                    if (iat[i][j] != 0 )
284                      {
285 <                        if (atom.bo[i][j] == 2)  // imine type
285 >                        if (bo[i][j] == 2)  // imine type
286                          {
287 <                            if (atom.atomnum[atom.iat[i][j]] == 6)
287 >                            if (atomnum[iat[i][j]] == 6)
288                              {
289                                  if (nx == 0)
290                                     atype[53]++;
291                                  else
292                                     atype[54]++;
293                                  goto L_10;
294 <                            } else if (atom.atomnum[atom.iat[i][j]] > 6)
294 >                            } else if (atomnum[iat[i][j]] > 6)
295                              {
296                                  if (nc == 1)
297                                    atype[55]++;
# Line 308 | Line 304
304                  }
305                  for (j=0; j < 4; j++)  // amides
306                  {
307 <                    if (atom.iat[i][j] != 0 && atom.atomnum[atom.iat[i][j]] == 6)
307 >                    if (iat[i][j] != 0 && atomnum[iat[i][j]] == 6)
308                      {
309 <                        ia = atom.iat[i][j];
309 >                        ia = iat[i][j];
310                          for (k=0; k < 4; k++)
311                          {
312 <                            if (atom.iat[ia][k] != 0 && atom.bo[ia][k] == 2)
312 >                            if (iat[ia][k] != 0 && bo[ia][k] == 2)
313                              {
314 <                                if (atom.atomnum[atom.iat[ia][k]] == 8) // amide
314 >                                if (atomnum[iat[ia][k]] == 8) // amide
315                                  {
316                                      if (nh == 2 && nc == 1) atype[63]++;
317                                      else if (nh == 1) atype[64]++;
# Line 332 | Line 328
328                  else if (nc == 3) atype[61]++;
329                  goto L_10;
330              }
331 <        } else if (atom.atomnum[i] == 16) // sulfur
331 >        } else if (atomnum[i] == 16) // sulfur
332          {
333              nh = 0;
334              nox = 0;
335              ndouble = 0;
336              for (j=0; j < MAXIAT; j++)
337              {
338 <                if (atom.iat[i][j] != 0)
338 >                if (iat[i][j] != 0)
339                  {
340 <                    if (atom.atomnum[atom.iat[i][j]] == 1) nh++;
341 <                    if (atom.atomnum[atom.iat[i][j]] == 8) nox++;
342 <                    if (atom.bo[i][j] == 2) ndouble++;
340 >                    if (atomnum[iat[i][j]] == 1) nh++;
341 >                    if (atomnum[iat[i][j]] == 8) nox++;
342 >                    if (bo[i][j] == 2) ndouble++;
343                  }
344              }
345              if (nox == 2)
# Line 368 | Line 364
364              {
365                  if (check_ring1(i))
366                  {
367 <                    if ((atom.flags[atom.iat[i][0]] & pi_mask) && (atom.flags[atom.iat[i][1]] & pi_mask))
367 >                    if ((flags[iat[i][0]] & pi_mask) && (flags[iat[i][1]] & pi_mask))
368                      {
369                          atype[68]++;
370                          goto L_10;
# Line 379 | Line 375
375                      goto L_10;
376                  }
377              }
378 <        } else if (atom.atomnum[i] == 15) // phosphorus
378 >        } else if (atomnum[i] == 15) // phosphorus
379          {
380              atype[76]++;
381 <        } else if (atom.atomnum[i] == 11) // fluorine
381 >        } else if (atomnum[i] == 11) // fluorine
382          {
383              atype[72]++;
384 <        } else if (atom.atomnum[i] == 17) // chlorine
384 >        } else if (atomnum[i] == 17) // chlorine
385          {
386              atype[73]++;
387 <        } else if (atom.atomnum[i] == 35) // bromine
387 >        } else if (atomnum[i] == 35) // bromine
388          {
389              atype[74]++;
390 <        } else if (atom.atomnum[i] == 53) // iodine
390 >        } else if (atomnum[i] == 53) // iodine
391          {
392              atype[75]++;
397        } else if (atom.mmx_type[i] == 20)
398        {
399            atype[0]++;
393          } else
394          {
395   //            sprintf(astring,"Atom %d type %d not supported\0",i,atom[i].type);
# Line 421 | Line 414
414           {
415               nf = 0;
416               nx = 0;
417 <             if (atom.atomnum[i] == 6)
417 >             if (atomnum[i] == 6)
418               {
419                   for (j=0; j < MAXIAT; j++)
420                   {
421 <                     if (atom.atomnum[atom.iat[i][j]] == 9)
421 >                     if (atomnum[iat[i][j]] == 9)
422                         nf++;
423 <                     if (atom.atomnum[atom.iat[i][j]] == 17)
423 >                     if (atomnum[iat[i][j]] == 17)
424                         nx++;
425 <                     if (atom.atomnum[atom.iat[i][j]] == 35)
425 >                     if (atomnum[iat[i][j]] == 35)
426                         nx++;
427 <                     if (atom.atomnum[atom.iat[i][j]] == 53)
427 >                     if (atomnum[iat[i][j]] == 53)
428                         nx++;
429                   }
430                   if ((nf >= 1 && nx >= 1) || nf >= 2)
# Line 444 | Line 437
437   // hydrogen bonds
438  
439      
440 <    *result = total + nhydrophobic*0.19F + n13FX*0.08 + n13XX*(-0.26F);
440 >    result = total + nhydrophobic*0.19F + n13FX*0.08 + n13XX*(-0.26F);
441 >    return result;
442   }
443   // ==================
450 // ==================================
451 int check_ring1(int ia)
452 {
453    if (is_ring61(ia)) return TRUE;
454    if (is_ring51(ia)) return TRUE;
455    if (is_ring31(ia)) return TRUE;
456    if (is_ring41(ia)) return TRUE;
457    return FALSE;
458 }
459 /* =============================================== */
460 // get hybridization of atom - tetrahedral = 1, planar = 2, linear = 3
461 //
462 int get_hybrid(int ia)
463 {
464    int itype;
465
466    itype = atom.mmx_type[ia];
467    if (itype == 2 || itype == 3 || itype == 7 || itype == 9 || itype == 25 ||
468        itype == 26 || itype == 29 || itype == 30 || itype == 37 || itype == 38 ||
469        itype == 40 || itype == 57 )
470        return 2;
471    else if (itype == 4 || itype == 10)
472        return 3;
473    else
474        return 1;
475 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines