ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/freemol/trunk/src/mengine/src/rings.c
(Generate patch)
# Line 10 | Line 10
10   int have_ring6(void);
11   int isbond(int, int);
12   int is_ring31(int);
13 + int is_ring33(int *);
14   int is_ring41(int);
15   int is_ring42(int,int);
16   int is_ring43(int, int, int);
# Line 308 | Line 309
309      return(found);
310   }
311   /* -------------------------------------------------------- */    
312 + int is_ring33(int *array)
313 + {
314 +    int i;
315 +    for (i=0; i < rings.nring3; i++)
316 +    {
317 +        if (array[0] == rings.r13[i][0] && array[1] == rings.r13[i][1] && array[2] == rings.r13[i][2])
318 +            return(TRUE);
319 +    }
320 +    return FALSE;
321 + }
322 + /* -------------------------------------------------------- */    
323   int is_ring44(int *array)
324   {
325      int i;
# Line 557 | Line 569
569   /* -------------------------------------------------------- */    
570   void get_rings(int natom,long int *flags,int *atomnum,int **iat,int **bo)
571   {
572 <  int i,j, add_ring, k, l, m, n,ij,isix;
572 >  int i,j, k, l, m, n,ij,isix;
573     int jatm,katm,latm,xatm;
574 <   int array[6];
574 >   int array[7];
575     long int aromatic_mask;
576  
577     rings.nring3 = 0;
# Line 586 | Line 598
598                             array[1] = jatm;
599                             array[2] = iat[jatm][k];
600                             ksort(3,array);
601 <                           add_ring = TRUE;
590 <                           for (j = 0; j < rings.nring3; j++)
591 <                             {
592 <                               if (array[0] == rings.r13[j][0] && array[1] == rings.r13[j][1]
593 <                                   && array[2] == rings.r13[j][2])
594 <                                 {
595 <                                   add_ring = FALSE;
596 <                                   break;
597 <                                 }
598 <                             }
599 <                           if (add_ring == TRUE)
601 >                           if (is_ring33(array) == FALSE)
602                               {                              
603                                 rings.r13[rings.nring3][0] = array[0];
604                                 rings.r13[rings.nring3][1] = array[1];
# Line 628 | Line 630
630                         {
631                             for(l=0; l < MAXIAT; l++)
632                             {
633 <                               if (iat[katm][l] != 0 && iat[katm][l] != jatm)
633 >                               if (iat[katm][l] != 0 && iat[katm][l] != jatm && iat[katm][l] != i)
634                                 {
635                                     if (isbond(i,iat[katm][l]) )
636                                     {
# Line 729 | Line 731
731                     if (iat[jatm][k] != 0 && iat[jatm][k] != i)
732                     {
733                         katm = iat[jatm][k];
734 <                       if (!(isbond(katm,i)))
734 >                       if (!(isbond(katm,i)))  // not three
735                         {
736                             for(l=0; l < MAXIAT; l++)
737                             {
738 <                               if (iat[katm][l] != 0 && iat[katm][l] != jatm)
738 >                               if (iat[katm][l] != 0 && iat[katm][l] != jatm && iat[katm][l] != i)
739                                 {
740                                   latm = iat[katm][l];
741 <                                 for (m=0; m < MAXIAT; m++)
741 >                                 if (!(isbond(i,latm))) // not four
742                                     {
743 <                                     if (iat[latm][m] != 0 && iat[latm][m] != katm && iat[latm][m] != jatm)
743 >                                     for (m=0; m < MAXIAT; m++)
744                                         {
745 <                                         xatm = iat[latm][m];
744 <                                         for (n = 0; n < MAXIAT; n++)
745 >                                         if (iat[latm][m] != 0 && iat[latm][m] != katm && iat[latm][m] != jatm && iat[latm][m] != i)
746                                             {
747 <                                             if (iat[xatm][n] != 0 && iat[xatm][n] != latm && iat[xatm][n] != katm)
748 <                                               if (isbond(i,iat[xatm][n]))
749 <                                                 {
750 <                                                   array[0] = i;
751 <                                                   array[1] = jatm;
752 <                                                   array[2] = katm;
753 <                                                   array[3] = latm;
753 <                                                   array[4] = xatm;
754 <                                                   array[5] = iat[xatm][n];
755 <                                                   ksort(6,array);
756 <                                                   if (is_ring66(array) == FALSE)
757 <                                                     {
758 <                                                       rings.r16[rings.nring6][0] = array[0];
759 <                                                       rings.r16[rings.nring6][1] = array[1];
760 <                                                       rings.r16[rings.nring6][2] = array[2];
761 <                                                       rings.r16[rings.nring6][3] = array[3];
762 <                                                       rings.r16[rings.nring6][4] = array[4];
763 <                                                       rings.r16[rings.nring6][5] = array[5];
764 <                                                       rings.nring6++;
765 <                                                       if (rings.nring6 >= MAXATOM/6)
766 <                                                         message_alert("Error. Too many 6 membered rings!","ERROR");
767 <                                                       isix = aromatic_6(array,flags,atomnum,iat,bo);
768 <                                                       if (isix == TRUE)
747 >                                             xatm = iat[latm][m];
748 >                                             if (!(isbond(i,xatm))) // not five
749 >                                               {
750 >                                                 for (n = 0; n < MAXIAT; n++)
751 >                                                   {
752 >                                                     if (iat[xatm][n] != 0 && iat[xatm][n] != latm && iat[xatm][n] != katm && iat[xatm][n] != jatm && iat[xatm][n] != i)
753 >                                                       if (isbond(i,iat[xatm][n]))
754                                                           {
755 <                                                           for (ij = 0; ij < 6; ij++)
756 <                                                             flags[array[ij]] |= aromatic_mask;
755 >                                                           array[0] = i;
756 >                                                           array[1] = jatm;
757 >                                                           array[2] = katm;
758 >                                                           array[3] = latm;
759 >                                                           array[4] = xatm;
760 >                                                           array[5] = iat[xatm][n];
761 >                                                           ksort(6,array);
762 >                                                           if (is_ring66(array) == FALSE)
763 >                                                             {
764 >                                                               rings.r16[rings.nring6][0] = array[0];
765 >                                                               rings.r16[rings.nring6][1] = array[1];
766 >                                                               rings.r16[rings.nring6][2] = array[2];
767 >                                                               rings.r16[rings.nring6][3] = array[3];
768 >                                                               rings.r16[rings.nring6][4] = array[4];
769 >                                                               rings.r16[rings.nring6][5] = array[5];
770 >                                                               rings.nring6++;
771 >                                                               if (rings.nring6 >= MAXATOM/2)
772 >                                                                 message_alert("Error. Too many 6 membered rings!","ERROR");
773 >                                                               isix = aromatic_6(array,flags,atomnum,iat,bo);
774 >                                                               if (isix == TRUE)
775 >                                                                 {
776 >                                                                   for (ij = 0; ij < 6; ij++)
777 >                                                                     flags[array[ij]] |= aromatic_mask;
778 >                                                                 }
779 >                                                             }
780                                                           }
781 <                                                     }
782 <                                                 }
781 >                                                   }
782 >                                               }
783                                             }
784                                         }
785                                     }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines