#!/usr/bin/perl -w # Brian Mattioni # # #_____________________________________________________________________________ # SCRIPT EXLOGP.PERL #_____________________________________________________________________________ # # Perl script to extract atomic hydrophobicity values for each atom in a # molecule. # # (1) Sums the hydrophobic and molar refractivity atomic contributions # for each atom to calculate a logP and molar refractivity value for # each molecule in a study (see below for atom labels and logP/MR # constants. LogP and molar refractivities will be printed out to # 'exlogp.out' where they can be used as descriptors if desired. # # (2) Stores and writes out individual hydrophobicity constants for each # atom in a molecule to 'hydro.out' (analogous to how charge information # gets written out to be used with SURCHG). Hydrophobicity information # can be combined with surface area using SURLOGP to produce a # 'surlogp.out' file. This file is needed by HPSA to calculate the # new hydrophobic partial surface area descriptors. # # LogP and molar refractivity constants were taken from: # ------------------------------------------------------ # # Wildman, S.A.; Crippen, G.M. "Prediction of Physicochemical Parameters # by Atomic Contributions" J. Chem. Inf. Comput. Sci., 1999, 39, 868-873. #_____________________________________________________________________________ # # ----------- # SUBROUTINES # ----------- # ---------------------------- # Start of SUBROUTINE READFILE # ---------------------------- # Purpose -- Reads directly from .hin files for each dan and stores # appropriate atom and connection table information. # # VARIABLES: # ---------- # $anum = atom number from numbering scheme in HyperChem Lite # $atype = atom type (H,C,N,O,F,P,S,Cl,Br,I) # $nbonds = number of bonds # $neighbor1, $btype1 = atom number of, bond type to, 1st neighbor # # If additional bound neighbors exist: # # $neighbor2, $btype2 = atom number of, bond type to, 2nd neighbor # $neighbor3, $btype3 = atom number of, bond type to, 3rd neighbor # $neighbor4, $btype4 = atom number of, bond type to, 4th neighbor # $neighbor5, $btype5 = atom number of, bond type to, 5th neighbor (P atom) # sub READFILE { my ($i); $i = 1; foreach $atomline (@wantedlines) { undef @linesplit; @linesplit = split (/\s+/,$atomline); $anum[$i] = $linesplit[1]; $atype[$i] = $linesplit[3]; $nbonds[$i] = $linesplit[10]; if ($nbonds[$i] == '5') { $neighbor1[$i] = $linesplit[11]; $btype1[$i] = $linesplit[12]; $neighbor2[$i] = $linesplit[13]; $btype2[$i] = $linesplit[14]; $neighbor3[$i] = $linesplit[15]; $btype3[$i] = $linesplit[16]; $neighbor4[$i] = $linesplit[17]; $btype4[$i] = $linesplit[18]; $neighbor5[$i] = $linesplit[19]; $btype5[$i] = $linesplit[20]; } elsif ($nbonds[$i] == '4') { $neighbor1[$i] = $linesplit[11]; $btype1[$i] = $linesplit[12]; $neighbor2[$i] = $linesplit[13]; $btype2[$i] = $linesplit[14]; $neighbor3[$i] = $linesplit[15]; $btype3[$i] = $linesplit[16]; $neighbor4[$i] = $linesplit[17]; $btype4[$i] = $linesplit[18]; } elsif ($nbonds[$i] == '3') { $neighbor1[$i] = $linesplit[11]; $btype1[$i] = $linesplit[12]; $neighbor2[$i] = $linesplit[13]; $btype2[$i] = $linesplit[14]; $neighbor3[$i] = $linesplit[15]; $btype3[$i] = $linesplit[16]; $neighbor4[$i] = 0; } elsif ($nbonds[$i] == '2') { $neighbor1[$i] = $linesplit[11]; $btype1[$i] = $linesplit[12]; $neighbor2[$i] = $linesplit[13]; $btype2[$i] = $linesplit[14]; $neighbor3[$i] = 0; $neighbor4[$i] = 0; } else { $neighbor1[$i] = $linesplit[11]; $btype1[$i] = $linesplit[12]; $neighbor2[$i] = 0; $neighbor3[$i] = 0; $neighbor4[$i] = 0; } $i = $i + 1; } } # -------------------------- # End of SUBROUTINE READFILE # -------------------------- # # ---------------------------- # Start of SUBROUTINE ATOMTYPE # ---------------------------- # Purpose -- Examine each atom in a structure and assign the appropriate # hydrophobicity and molar refractivity constant according to # its molecular environment. # # VARIABLES: # ---------- # @logP = Array of logP constants for each atom in the molecule. # @molref = Array of molar refractivity constants for each atom # in the molecule. # sub ATOMTYPE { my ($i); $i = 0; foreach $atomnumber (1 .. $#anum) { ######################## # HYDROGEN # ######################## if ($atype[$atomnumber] eq 'H') { # ----- # FIRST, label simple environments (hydrogen attached directly to # a carbon, phosphorous, sulfur, or nitrogen. # # --------------------------------- # Check for 'H-C' (H1, hydrocarbon) # --------------------------------- if ($atype[$neighbor1[$atomnumber]] eq 'C') { $logP[$i] = $H1LP; $alabels[$i] = 1; $molref[$i] = $H1MR; } # ----------------------------- # Check for 'H-P' (H2, alcohol) # ----------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'P') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # ----------------------------- # Check for 'H-S' (H2, alcohol) # ----------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'S') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # --------------------------- # Check for 'H-N' (H3, amine) # --------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'N') { $logP[$i] = $H3LP; $alabels[$i] = 3; $molref[$i] = $H3MR; } # ------ # SECOND, label environments with 'H-OR' bond (where R is a phosphorous, # nitrogen, oxygen, or sulfur, NOT carbon) # elsif ($atype[$neighbor1[$atomnumber]] eq 'O') { # ---------------------------------- # Check for water, H2O (H2, alcohol) # ---------------------------------- if ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'H' && $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'H') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # ------------------------------ # Check for 'H-OP' (H2, alcohol) # ------------------------------ elsif ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'P' || $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'P') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # ---------------------------- # Check for 'H-ON' (H3, amine) # ---------------------------- elsif ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'N' || $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'N') { $logP[$i] = $H3LP; $alabels[$i] = 3; $molref[$i] = $H3MR; } # --------------------------- # Check for 'H-OO' (H4, acid) # --------------------------- elsif ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'O' || $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'O') { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for 'H-OS' (H4, acid) # --------------------------- elsif ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'S' || $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'S') { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # ----- # THIRD, label environments with 'H-OC' ONLY a carbon: (1) carbon # with 4 bonds, (2) aromatic carbon, (3) carbon double-bound to another carbon, # (4) carbon double-bound to an oxygen, (5) carbon double-bound to a nitrogen, # or (6) carbon double-bound to a sulfur. # # If neighbor 1 of oxygen is a C or ... # elsif ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'C') { # ---------------------------------------------------------- # Check for H-OC where C has 4 bonds, H-O(CX4) (H2, alcohol) # ---------------------------------------------------------- if ($nbonds[$neighbor1[$neighbor1[$atomnumber]]] == '4') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # # Check for H-OC where C has 3 bonds # elsif ($nbonds[$neighbor1[$neighbor1[$atomnumber]]] == '3') { # ------------------------------------------------ # Check for H-Oc where c is aromatic (H2, alcohol) # ------------------------------------------------ if ($btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'a' || $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'a' || $btype3[$neighbor1[$neighbor1[$atomnumber]]] eq 'a') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # --------------------------- # Check for H-OC=N (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor1[$neighbor1[$atomnumber]]]] eq 'N' && $btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor1[$neighbor1[$atomnumber]]]] eq 'N' && $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor1[$neighbor1[$atomnumber]]]] eq 'N' && $btype3[$neighbor1[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for H-OC=O (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor1[$neighbor1[$atomnumber]]]] eq 'O' && $btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor1[$neighbor1[$atomnumber]]]] eq 'O' && $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor1[$neighbor1[$atomnumber]]]] eq 'O' && $btype3[$neighbor1[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for H-OC=S (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor1[$neighbor1[$atomnumber]]]] eq 'S' && $btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor1[$neighbor1[$atomnumber]]]] eq 'S' && $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor1[$neighbor1[$atomnumber]]]] eq 'S' && $btype3[$neighbor1[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for H-OC=C (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor1[$neighbor1[$atomnumber]]]] eq 'C' && $btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor1[$neighbor1[$atomnumber]]]] eq 'C' && $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor1[$neighbor1[$atomnumber]]]] eq 'C' && $btype3[$neighbor1[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # # Check for H-OC=P (HS, suppl. H) # elsif (($atype[$neighbor1[$neighbor1[$neighbor1[$atomnumber]]]] eq 'P' && $btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor1[$neighbor1[$atomnumber]]]] eq 'P' && $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor1[$neighbor1[$atomnumber]]]] eq 'P' && $btype3[$neighbor1[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $HSLP; $alabels[$i] = 5; $molref[$i] = $HSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } # # Check for H-OC where C has 2 bonds, H-O(CX2) (e.g. cyanic acid, suppl. H) # elsif ($nbonds[$neighbor1[$neighbor1[$atomnumber]]] == '2') { $logP[$i] = $HSLP; $alabels[$i] = 5; $molref[$i] = $HSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } # # ... or if neighbor 2 of oxygen is a C. # elsif ($atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'C') { # ---------------------------------------------------------- # Check for H-OC where C has 4 bonds, H-O(CX4) (H2, alcohol) # ---------------------------------------------------------- if ($nbonds[$neighbor2[$neighbor1[$atomnumber]]] == '4') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # # Check for H-OC where C has 3 bonds # elsif ($nbonds[$neighbor2[$neighbor1[$atomnumber]]] == '3') { # ------------------------------------------------ # Check for H-Oc where c is aromatic (H2, alcohol) # ------------------------------------------------ if ($btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'a' || $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'a' || $btype3[$neighbor2[$neighbor1[$atomnumber]]] eq 'a') { $logP[$i] = $H2LP; $alabels[$i] = 2; $molref[$i] = $H2MR; } # --------------------------- # Check for H-OC=N (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor2[$neighbor1[$atomnumber]]]] eq 'N' && $btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor2[$neighbor1[$atomnumber]]]] eq 'N' && $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor2[$neighbor1[$atomnumber]]]] eq 'N' && $btype3[$neighbor2[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for H-OC=O (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor2[$neighbor1[$atomnumber]]]] eq 'O' && $btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor2[$neighbor1[$atomnumber]]]] eq 'O' && $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor2[$neighbor1[$atomnumber]]]] eq 'O' && $btype3[$neighbor2[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for H-OC=S (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor2[$neighbor1[$atomnumber]]]] eq 'S' && $btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor2[$neighbor1[$atomnumber]]]] eq 'S' && $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor2[$neighbor1[$atomnumber]]]] eq 'S' && $btype3[$neighbor2[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # --------------------------- # Check for H-OC=C (H4, acid) # --------------------------- elsif (($atype[$neighbor1[$neighbor2[$neighbor1[$atomnumber]]]] eq 'C' && $btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor2[$neighbor1[$atomnumber]]]] eq 'C' && $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor2[$neighbor1[$atomnumber]]]] eq 'C' && $btype3[$neighbor2[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $H4LP; $alabels[$i] = 4; $molref[$i] = $H4MR; } # # Check for H-OC=P (HS, suppl. H) # elsif (($atype[$neighbor1[$neighbor2[$neighbor1[$atomnumber]]]] eq 'P' && $btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor2[$neighbor2[$neighbor1[$atomnumber]]]] eq 'P' && $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'd') || ($atype[$neighbor3[$neighbor2[$neighbor1[$atomnumber]]]] eq 'P' && $btype3[$neighbor2[$neighbor1[$atomnumber]]] eq 'd')) { $logP[$i] = $HSLP; $alabels[$i] = 5; $molref[$i] = $HSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } # # Check for H-OC where C has 2 bonds, H-O(CX2) (e.g. cyanic acid, suppl. H) # elsif ($nbonds[$neighbor2[$neighbor1[$atomnumber]]] == '2') { $logP[$i] = $HSLP; $alabels[$i] = 5; $molref[$i] = $HSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } } else { $logP[$i] = $HSLP; $alabels[$i] = 5; $molref[$i] = $HSMR; } } ######################## # FLUORINE # ######################## elsif ($atype[$atomnumber] eq 'F') { $logP[$i] = $Hal1LP; $alabels[$i] = 52; $molref[$i] = $Hal1MR; } ######################## # CHLORINE # ######################## elsif ($atype[$atomnumber] eq 'Cl') { $logP[$i] = $Hal2LP; $alabels[$i] = 53; $molref[$i] = $Hal2MR; } ####################### # BROMINE # ####################### elsif ($atype[$atomnumber] eq 'Br') { $logP[$i] = $Hal3LP; $alabels[$i] = 54; $molref[$i] = $Hal3MR; } ###################### # IODINE # ###################### elsif ($atype[$atomnumber] eq 'I') { $logP[$i] = $Hal4LP; $alabels[$i] = 55; $molref[$i] = $Hal4MR; } ########################### # PHOSPHOROUS # ########################### elsif ($atype[$atomnumber] eq 'P') { $logP[$i] = $P1LP; $alabels[$i] = 56; $molref[$i] = $P1MR; } ###################### # SULFUR # ###################### elsif ($atype[$atomnumber] eq 'S') { # ------------------------------------------ # Check for aromatic sulfur, s(:a)(:a) (S2) # ------------------------------------------ if ($nbonds[$atomnumber] != 1) { if ($btype1[$atomnumber] eq 'a' && $btype2[$atomnumber] eq 'a') { $logP[$i] = $S2LP; $alabels[$i] = 58; $molref[$i] = $S2MR; } else { $logP[$i] = $S1LP; $alabels[$i] = 57; $molref[$i] = $S1MR; } } # ---------------------------- # Else, aliphatic sulfur (S1) # ---------------------------- else { $logP[$i] = $S1LP; $alabels[$i] = 57; $molref[$i] = $S1MR; } } ######################## # NITROGEN # ######################## elsif ($atype[$atomnumber] eq 'N') { # ----- # FIRST, check for nitrogen bound to only one other atom ($N9, nitrile). # if ($nbonds[$atomnumber] == '1') { if ($btype1[$atomnumber] eq 't') { $logP[$i] = $N9LP; $alabels[$i] = 40; $molref[$i] = $N9MR; } } # ------ # SECOND, check for nitrogen bound to two other atoms (imines, aromatic # (6m ring)). # elsif ($nbonds[$atomnumber] == '2') { # --------------------------------------------------------------------- # Check for nitrogen double-bound to a non-hydrogen atom and # single-bound to a non-hydrogen atom, N(=A)(-A/a) (N6, subst. imine) # --------------------------------------------------------------------- if (($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H') && ($btype1[$atomnumber] ne 'a' && $btype2[$atomnumber] ne 'a')) { $logP[$i] = $N6LP; $alabels[$i] = 37; $molref[$i] = $N6MR; } # ----------------------------------------------------------------------------- # Check for nitrogen double-bound to a non-hydrogen atom and # single-bound to a hydrogen atom, NH=A (N5, $imine) # ----------------------------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'H' || $atype[$neighbor2[$atomnumber]] eq 'H') { $logP[$i] = $N5LP; $alabels[$i] = 36; $molref[$i] = $N5MR; } # ---------------------------------------------------------------- # Check for aromatic nitrogen in 6-membered ring, n(:a)(:a) (N10) # ---------------------------------------------------------------- elsif ($btype1[$atomnumber] eq 'a' && $btype2[$atomnumber] eq 'a') { $logP[$i] = $N10LP; $alabels[$i] = 41; $molref[$i] = $N10MR; } } # ----- # THIRD, look at nitrogen bound to three other atoms (primary, secondary, # primary aromatic, secondary aromatic, tertiary, tertiary aromatic, # aromatic). elsif ($nbonds[$atomnumber] == '3') { # ---------------------------- # Check for ammonia, NH3 ($NS) # ---------------------------- if ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H') { $logP[$i] = $NSLP; $alabels[$i] = 42; $molref[$i] = $NSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } # ------------------------------------------------ # Check for nitrogen in a nitro group, N+ ($Nitro) # ------------------------------------------------ if ($btype1[$atomnumber] eq 'd' || $btype2[$atomnumber] eq 'd' || $btype3[$atomnumber] eq 'd') { $logP[$i] = $NitroLP; $alabels[$i] = 59; $molref[$i] = $NitroMR; } # -------------------------------------------------------------------- # Check for aromatic nitrogen in 5-membered ring, n(:a)(:a)(-A) (N10) # -------------------------------------------------------------------- elsif ($btype1[$atomnumber] eq 'a' || $btype2[$atomnumber] eq 'a' || $btype3[$atomnumber] eq 'a') { $logP[$i] = $N10LP; $alabels[$i] = 41; $molref[$i] = $N10MR; } # # Primary nitrogen, check for when neighbors 1 & 2 are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] eq 'H') { # ------------------------------------------------- # Check for primary aromatic nitrogen, NH2-a (N3) # ------------------------------------------------- if (($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a'))) { $logP[$i] = $N3LP; $alabels[$i] = 34; $molref[$i] = $N3MR; } # ----------------------------------- # Else primary nitrogen, NH2-A (N1) # ----------------------------------- else { $logP[$i] = $N1LP; $alabels[$i] = 32; $molref[$i] = $N1MR; } } # # ... or neighbors 1 & 3 are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H') { # ------------------------------------------------- # Check for primary aromatic nitrogen, NH2-a (N3) # ------------------------------------------------- if (($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a'))) { $logP[$i] = $N3LP; $alabels[$i] = 34; $molref[$i] = $N3MR; } # ----------------------------------- # Else primary nitrogen, NH2-A (N1) # ----------------------------------- else { $logP[$i] = $N1LP; $alabels[$i] = 32; $molref[$i] = $N1MR; } } # # ... or neighbor 2 & 3 are hydrogen. # elsif ($atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H') { # ------------------------------------------------- # Check for primary aromatic nitrogen, NH2-a (N3) # ------------------------------------------------- if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a'))) { $logP[$i] = $N3LP; $alabels[$i] = 34; $molref[$i] = $N3MR; } # ----------------------------------- # Else primary nitrogen, NH2-A (N1) # ----------------------------------- else { $logP[$i] = $N1LP; $alabels[$i] = 32; $molref[$i] = $N1MR; } } # --------------------------------------------------------------- # Secondary nitrogen, check for when neighbor 1 is a hydrogen ... # --------------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] ne 'H') { # -------------------------------------------------- # Check for secondary aromatic nitrogen, NH-a (N4) # -------------------------------------------------- if ((($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')))) { $logP[$i] = $N4LP; $alabels[$i] = 35; $molref[$i] = $N4MR; } # ----------------------------------------- # Else secondary nitrogen, NH(-A)(-A) (N2) # ----------------------------------------- else { $logP[$i] = $N2LP; $alabels[$i] = 33; $molref[$i] = $N2MR; } } # # ... or neighbor 2 is a hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] ne 'H') { # -------------------------------------------------- # Check for secondary aromatic nitrogen, NH-a (N4) # -------------------------------------------------- if ((($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')))) { $logP[$i] = $N4LP; $alabels[$i] = 35; $molref[$i] = $N4MR; } # --------------------------------------- # Else secondary nitrogen, NH(-A)(-A) (N2) # --------------------------------------- else { $logP[$i] = $N2LP; $alabels[$i] = 33; $molref[$i] = $N2MR; } } # # ... or neighbor 3 is a hydrogen. # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] eq 'H') { # -------------------------------------------------- # Check for secondary aromatic nitrogen, NH-a (N4) # -------------------------------------------------- if ((($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')))) { $logP[$i] = $N4LP; $alabels[$i] = 35; $molref[$i] = $N4MR; } # --------------------------------------- # Else secondary nitrogen, NH(-A)(-A) (N2) # --------------------------------------- else { $logP[$i] = $N2LP; $alabels[$i] = 33; $molref[$i] = $N2MR; } } # ----------------- # Tertiary nitrogen # ----------------- elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] ne 'H') { # ------------------------------------------------ # Check for tertiary aromatic nitrogen, N-a (N8) # ------------------------------------------------ if ((($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')))) { $logP[$i] = $N8LP; $alabels[$i] = 39; $molref[$i] = $N8MR; } # ---------------------------------------- # Else tertiary nitrogen, N(-A)(-A)(-A) (N7) # ---------------------------------------- else { $logP[$i] = $N7LP; $alabels[$i] = 38; $molref[$i] = $N7MR; } } } else { $logP[$i] = $NSLP; $alabels[$i] = 42; $molref[$i] = $NSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } ###################### # OXYGEN # ###################### elsif ($atype[$atomnumber] eq 'O') { # ----- # FIRST, check for oxygens bound to two other atoms (aromatic, alcohol, # aliphatic ether, aromatic ether). # if ($nbonds[$atomnumber] == '2') { # ------------------------------------------ # Check for aromatic oxygen, o(:a)(:a) (O1) # ------------------------------------------ if ($btype1[$atomnumber] eq 'a' && $btype2[$atomnumber] eq 'a') { $logP[$i] = $O1LP; $alabels[$i] = 43; $molref[$i] = $O1MR; } # ----------------------------------- # Check for alcohol oxygen, O-H (O2) # ----------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'H' || $atype[$neighbor2[$atomnumber]] eq 'H') { $logP[$i] = $O2LP; $alabels[$i] = 44; $molref[$i] = $O2MR; } # ------------------------------------------- # Check for aromatic ether oxygen, O-a (O4) # ------------------------------------------- elsif (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a'))) { $logP[$i] = $O4LP; $alabels[$i] = 46; $molref[$i] = $O4MR; } # ------------------------------------------------- # Check for aliphatic ether oxygen. O(-A)(-A) (O3) # ------------------------------------------------- elsif (($nbonds[$neighbor1[$atomnumber]] == '1' || ($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] ne 'a' || $btype2[$neighbor1[$atomnumber]] ne 'a'))) && ($nbonds[$neighbor2[$atomnumber]] == '1' || ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] ne 'a' || $btype2[$neighbor2[$atomnumber]] ne 'a')))) { $logP[$i] = $O3LP; $alabels[$i] = 45; $molref[$i] = $O3MR; } } # ------ # SECOND, check for oxygens bound to one other atom (oxide, aliphatic # carbonyl, aromatic carbonyl, heteroatom carbonyl) # elsif ($nbonds[$atomnumber] == '1') { # ------------------- # Check for O=N (O5) # ------------------- if ($atype[$neighbor1[$atomnumber]] eq 'N') { $logP[$i] = $O5LP; $alabels[$i] = 47; $molref[$i] = $O5MR; } # # Check for O=S or O=P (OS) # elsif ($atype[$neighbor1[$atomnumber]] eq 'S') { $logP[$i] = $OSLP; $alabels[$i] = 51; $molref[$i] = $OSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } elsif ($atype[$neighbor1[$atomnumber]] eq 'P') { $logP[$i] = $OSLP; $alabels[$i] = 51; $molref[$i] = $OSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } # # Couple different configurations of O=C # elsif ($atype[$neighbor1[$atomnumber]] eq 'C') { # # Check for O=C where C is double-bound to another atom, O=C=C # or O=C=N (OS, suppl.) # if ($nbonds[$neighbor1[$atomnumber]] == '2') { $logP[$i] = $OSLP; $alabels[$i] = 51; $molref[$i] = $OSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } elsif ($nbonds[$neighbor1[$atomnumber]] == '3') { # ------------------------------------------------------------------------- # Check for O=C where C is bound to only heteroatoms, O=C(-A/a)(-A/a) (O8) # ------------------------------------------------------------------------- if ($atype[$neighbor1[$neighbor1[$atomnumber]]] ne 'C' && $atype[$neighbor2[$neighbor1[$atomnumber]]] ne 'C' && $atype[$neighbor3[$neighbor1[$atomnumber]]] ne 'C' && $atype[$neighbor1[$neighbor1[$atomnumber]]] ne 'H' && $atype[$neighbor2[$neighbor1[$atomnumber]]] ne 'H' && $atype[$neighbor3[$neighbor1[$atomnumber]]] ne 'H') { $logP[$i] = $O8LP; $alabels[$i] = 50; $molref[$i] = $O8MR; } # # Check for O=C where C is bound to either another carbon or hydrogen # elsif ($atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'C' || $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'C' || $atype[$neighbor3[$neighbor1[$atomnumber]]] eq 'C' || $atype[$neighbor1[$neighbor1[$atomnumber]]] eq 'H' || $atype[$neighbor2[$neighbor1[$atomnumber]]] eq 'H' || $atype[$neighbor3[$neighbor1[$atomnumber]]] eq 'H') { # ----------------------------------------------------- # Check for O=C where C is bound to at least one carbon # or hydrogen and one aromatic atom (O7) # ----------------------------------------------------- if (($nbonds[$neighbor1[$neighbor1[$atomnumber]]] != '1' && ($btype1[$neighbor1[$neighbor1[$atomnumber]]] eq 'a' || $btype2[$neighbor1[$neighbor1[$atomnumber]]] eq 'a'))) { $logP[$i] = $O7LP; $alabels[$i] = 49; $molref[$i] = $O7MR; } elsif (($nbonds[$neighbor2[$neighbor1[$atomnumber]]] != '1' && ($btype1[$neighbor2[$neighbor1[$atomnumber]]] eq 'a' || $btype2[$neighbor2[$neighbor1[$atomnumber]]] eq 'a'))) { $logP[$i] = $O7LP; $alabels[$i] = 49; $molref[$i] = $O7MR; } elsif (($nbonds[$neighbor3[$neighbor1[$atomnumber]]] != '1' && ($btype1[$neighbor3[$neighbor1[$atomnumber]]] eq 'a' || $btype2[$neighbor3[$neighbor1[$atomnumber]]] eq 'a'))) { $logP[$i] = $O7LP; $alabels[$i] = 49; $molref[$i] = $O7MR; } else { $logP[$i] = $O6LP; $alabels[$i] = 48; $molref[$i] = $O6MR; } } } } } else { $logP[$i] = $OSLP; $alabels[$i] = 51; $molref[$i] = $OSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } ###################### # CARBON # ###################### elsif ($atype[$atomnumber] eq 'C') { # ----- # FIRST, check for carbon with 2 bonds # if ($nbonds[$atomnumber] == '2') { # -------------------------------------------------- # Check for carbon triple-bound to another carbon # or nitrogen, C#C or C#N (acetylene derivatives, # nitriles, C7) # -------------------------------------------------- if ($btype1[$atomnumber] eq 't' || $btype2[$atomnumber] eq 't') { $logP[$i] = $C7LP; $alabels[$i] = 12; $molref[$i] = $C7MR; } # --------------------------------------------------------- # Check for carbon double-bound to two carbons (C=C=C, C6) # --------------------------------------------------------- elsif (($btype1[$atomnumber] eq 'd' && $atype[$neighbor1[$atomnumber]] eq 'C') && ($btype2[$atomnumber] eq 'd' && $atype[$neighbor2[$atomnumber]] eq 'C')) { $logP[$i] = $C6LP; $alabels[$i] = 11; $molref[$i] = $C6MR; } # --------------------------------------------------------------- # Check for carbon double-bound at least one heteroatom (C=C=N or # N=C=N, C5) # --------------------------------------------------------------- elsif (($btype1[$atomnumber] eq 'd' && $atype[$neighbor1[$atomnumber]] ne 'C') || ($btype2[$atomnumber] eq 'd' && $atype[$neighbor2[$atomnumber]] ne 'C')) { $logP[$i] = $C5LP; $alabels[$i] = 10; $molref[$i] = $C5MR; } } # ------ # SECOND, Check for carbon with 3 bonds # elsif ($nbonds[$atomnumber] == '3') { # ------------------------------------------------------------- # Check for aliphatic carbon double-bound to a heteroatom (C=O, # C=N, C=S, C=P, C5) # ------------------------------------------------------------- if (($btype1[$atomnumber] eq 'd' && $atype[$neighbor1[$atomnumber]] ne 'C') || ($btype2[$atomnumber] eq 'd' && $atype[$neighbor2[$atomnumber]] ne 'C') || ($btype3[$atomnumber] eq 'd' && $atype[$neighbor3[$atomnumber]] ne 'C')) { $logP[$i] = $C5LP; $alabels[$i] = 10; $molref[$i] = $C5MR; } # --------------------------------------------------------- # Check for aliphatic carbon double-bound to another carbon # (C=C, C6 (aliph.) or C25 (aro.)) # --------------------------------------------------------- elsif (($btype1[$atomnumber] eq 'd' && $atype[$neighbor1[$atomnumber]] eq 'C') || ($btype2[$atomnumber] eq 'd' && $atype[$neighbor2[$atomnumber]] eq 'C') || ($btype3[$atomnumber] eq 'd' && $atype[$neighbor3[$atomnumber]] eq 'C')) { if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a'))) { $logP[$i] = $C25LP; $alabels[$i] = 30; $molref[$i] = $C25MR; } else { $logP[$i] = $C6LP; $alabels[$i] = 11; $molref[$i] = $C6MR; } } # # Aromatic carbon, check for carbon with two aromatic bonds to # neighbors 1 and 2 and single bond to neighbor 3 ... # elsif ($btype1[$atomnumber] eq 'a' && $btype2[$atomnumber] eq 'a' && $btype3[$atomnumber] eq 's') { # ----------------------------------------------------------- # Check for when neighbor 3 is phosphorus, c(:a)(:a)-P (C13) # ----------------------------------------------------------- if ($atype[$neighbor3[$atomnumber]] eq 'P') { $logP[$i] = $C13LP; $alabels[$i] = 18; $molref[$i] = $C13MR; } # --------------------------------------------------------- # Check for when neighbor 3 is fluorine, c(:a)(:a)-F (C14) # --------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'F') { $logP[$i] = $C14LP; $alabels[$i] = 19; $molref[$i] = $C14MR; } # ---------------------------------------------------------- # Check for when neighbor 3 is chlorine, c(:a)(:a)-Cl (C15) # ---------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'Cl') { $logP[$i] = $C15LP; $alabels[$i] = 20; $molref[$i] = $C15MR; } # --------------------------------------------------------- # Check for when neighbor 3 is bromine, c(:a)(:a)-Br (C16) # --------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'Br') { $logP[$i] = $C16LP; $alabels[$i] = 21; $molref[$i] = $C16MR; } # ------------------------------------------------------- # Check for when neighbor 3 is iodine, c(:a)(:a)-I (C17) # ------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'I') { $logP[$i] = $C17LP; $alabels[$i] = 22; $molref[$i] = $C17MR; } # --------------------------------------------------------- # Check for when neighbor 3 is hydrogen, c(:a)(:a)-H (C18) # --------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'H') { $logP[$i] = $C18LP; $alabels[$i] = 23; $molref[$i] = $C18MR; } # --------------------------------------------------------- # Check for when neighbor 3 is aromatic, c(:a)(:a)-a (C20) # --------------------------------------------------------- elsif ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')) { $logP[$i] = $C20LP; $alabels[$i] = 25; $molref[$i] = $C20MR; } # -------------------------------------------------------------------- # Check for when neighbor 3 is non-aromatic carbon, c(:a)(:a)-C (C21) # -------------------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'C' && ($btype1[$neighbor3[$atomnumber]] ne 'a' && $btype2[$neighbor3[$atomnumber]] ne 'a')) { $logP[$i] = $C21LP; $alabels[$i] = 26; $molref[$i] = $C21MR; } # ---------------------------------------------------------------------- # Check for when neighbor 3 is non-aromatic nitrogen, c(:a)(:a)-N (C22) # ---------------------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'N' && ($btype1[$neighbor3[$atomnumber]] ne 'a' && $btype2[$neighbor3[$atomnumber]] ne 'a')) { $logP[$i] = $C22LP; $alabels[$i] = 27; $molref[$i] = $C22MR; } # -------------------------------------------------------------------- # Check for when neighbor 3 is non-aromatic oxygen, c(:a)(:a)-O (C23) # -------------------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'O' && ($btype1[$neighbor3[$atomnumber]] ne 'a' && $btype2[$neighbor3[$atomnumber]] ne 'a')) { $logP[$i] = $C23LP; $alabels[$i] = 28; $molref[$i] = $C23MR; } # -------------------------------------------------------------------- # Check for when neighbor 3 is non-aromatic sulfur, c(:a)(:a)-S (C24) # -------------------------------------------------------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'S' && ($btype1[$neighbor3[$atomnumber]] ne 'a' && $btype2[$neighbor3[$atomnumber]] ne 'a')) { $logP[$i] = $C24LP; $alabels[$i] = 29; $molref[$i] = $C24MR; } } # # ... or carbon with two aromatic bonds to neighbors 1 and 3 and # single bond to neighbor 2 ... # elsif ($btype1[$atomnumber] eq 'a' && $btype2[$atomnumber] eq 's' && $btype3[$atomnumber] eq 'a') { # ----------------------------------------------------------- # Check for when neighbor 2 is phosphorus, c(:a)(:a)-P (C13) # ----------------------------------------------------------- if ($atype[$neighbor2[$atomnumber]] eq 'P') { $logP[$i] = $C13LP; $alabels[$i] = 18; $molref[$i] = $C13MR; } # --------------------------------------------------------- # Check for when neighbor 2 is fluorine, c(:a)(:a)-F (C14) # --------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'F') { $logP[$i] = $C14LP; $alabels[$i] = 19; $molref[$i] = $C14MR; } # ---------------------------------------------------------- # Check for when neighbor 2 is chlorine, c(:a)(:a)-Cl (C15) # ---------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'Cl') { $logP[$i] = $C15LP; $alabels[$i] = 20; $molref[$i] = $C15MR; } # --------------------------------------------------------- # Check for when neighbor 2 is bromine, c(:a)(:a)-Br (C16) # --------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'Br') { $logP[$i] = $C16LP; $alabels[$i] = 21; $molref[$i] = $C16MR; } # ------------------------------------------------------- # Check for when neighbor 2 is iodine, c(:a)(:a)-I (C17) # ------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'I') { $logP[$i] = $C17LP; $alabels[$i] = 22; $molref[$i] = $C17MR; } # --------------------------------------------------------- # Check for when neighbor 2 is hydrogen, c(:a)(:a)-H (C18) # --------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'H') { $logP[$i] = $C18LP; $alabels[$i] = 23; $molref[$i] = $C18MR; } # --------------------------------------------------------- # Check for when neighbor 2 is aromatic, c(:a)(:a)-a (C20) # --------------------------------------------------------- elsif ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) { $logP[$i] = $C20LP; $alabels[$i] = 25; $molref[$i] = $C20MR; } # -------------------------------------------------------------------- # Check for when neighbor 2 is non-aromatic carbon, c(:a)(:a)-C (C21) # -------------------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'C' && ($btype1[$neighbor2[$atomnumber]] ne 'a' && $btype2[$neighbor2[$atomnumber]] ne 'a')) { $logP[$i] = $C21LP; $alabels[$i] = 26; $molref[$i] = $C21MR; } # ---------------------------------------------------------------------- # Check for when neighbor 2 is non-aromatic nitrogen, c(:a)(:a)-N (C22) # ---------------------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'N' && ($btype1[$neighbor2[$atomnumber]] ne 'a' && $btype2[$neighbor2[$atomnumber]] ne 'a')) { $logP[$i] = $C22LP; $alabels[$i] = 27; $molref[$i] = $C22MR; } # -------------------------------------------------------------------- # Check for when neighbor 2 is non-aromatic oxygen, c(:a)(:a)-O (C23) # -------------------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'O' && ($btype1[$neighbor2[$atomnumber]] ne 'a' && $btype2[$neighbor2[$atomnumber]] ne 'a')) { $logP[$i] = $C23LP; $alabels[$i] = 28; $molref[$i] = $C23MR; } # -------------------------------------------------------------------- # Check for when neighbor 2 is non-aromatic sulfur, c(:a)(:a)-S (C24) # -------------------------------------------------------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'S' && ($btype1[$neighbor2[$atomnumber]] ne 'a' && $btype2[$neighbor2[$atomnumber]] ne 'a')) { $logP[$i] = $C24LP; $alabels[$i] = 29; $molref[$i] = $C24MR; } } # # ... or carbon with two aromatic bonds to neighbors 2 and 3 # and single bond to neighbor 1. # elsif ($btype1[$atomnumber] eq 's' && $btype2[$atomnumber] eq 'a' && $btype3[$atomnumber] eq 'a') { # ----------------------------------------------------------- # Check for when neighbor 1 is phosphorus, c(:a)(:a)-P (C13) # ----------------------------------------------------------- if ($atype[$neighbor1[$atomnumber]] eq 'P') { $logP[$i] = $C13LP; $alabels[$i] = 18; $molref[$i] = $C13MR; } # --------------------------------------------------------- # Check for when neighbor 1 is fluorine, c(:a)(:a)-F (C14) # --------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'F') { $logP[$i] = $C14LP; $alabels[$i] = 19; $molref[$i] = $C14MR; } # ---------------------------------------------------------- # Check for when neighbor 1 is chlorine, c(:a)(:a)-Cl (C15) # ---------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'Cl') { $logP[$i] = $C15LP; $alabels[$i] = 20; $molref[$i] = $C15MR; } # --------------------------------------------------------- # Check for when neighbor 1 is bromine, c(:a)(:a)-Br (C16) # --------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'Br') { $logP[$i] = $C16LP; $alabels[$i] = 21; $molref[$i] = $C16MR; } # ------------------------------------------------------- # Check for when neighbor 1 is iodine, c(:a)(:a)-I (C17) # ------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'I') { $logP[$i] = $C17LP; $alabels[$i] = 22; $molref[$i] = $C17MR; } # --------------------------------------------------------- # Check for when neighbor 1 is hydrogen, c(:a)(:a)-H (C18) # --------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'H') { $logP[$i] = $C18LP; $alabels[$i] = 23; $molref[$i] = $C18MR; } # --------------------------------------------------------- # Check for when neighbor 1 is aromatic, c(:a)(:a)-a (C20) # --------------------------------------------------------- elsif ($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) { $logP[$i] = $C20LP; $alabels[$i] = 25; $molref[$i] = $C20MR; } # -------------------------------------------------------------------- # Check for when neighbor 1 is non-aromatic carbon, c(:a)(:a)-C (C21) # -------------------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && ($btype1[$neighbor1[$atomnumber]] ne 'a' && $btype2[$neighbor1[$atomnumber]] ne 'a')) { $logP[$i] = $C21LP; $alabels[$i] = 26; $molref[$i] = $C21MR; } # ---------------------------------------------------------------------- # Check for when neighbor 1 is non-aromatic nitrogen, c(:a)(:a)-N (C22) # ---------------------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'N' && ($btype1[$neighbor1[$atomnumber]] ne 'a' && $btype2[$neighbor1[$atomnumber]] ne 'a')) { $logP[$i] = $C22LP; $alabels[$i] = 27; $molref[$i] = $C22MR; } # -------------------------------------------------------------------- # Check for when neighbor 1 is non-aromatic oxygen, c(:a)(:a)-O (C23) # -------------------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'O' && ($btype1[$neighbor1[$atomnumber]] ne 'a' && $btype2[$neighbor1[$atomnumber]] ne 'a')) { $logP[$i] = $C23LP; $alabels[$i] = 28; $molref[$i] = $C23MR; } # -------------------------------------------------------------------- # Check for when neighbor 1 is non-aromatic sulfur, c(:a)(:a)-S (C24) # -------------------------------------------------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'S' && ($btype1[$neighbor1[$atomnumber]] ne 'a' && $btype2[$neighbor1[$atomnumber]] ne 'a')) { $logP[$i] = $C24LP; $alabels[$i] = 29; $molref[$i] = $C24MR; } } # ------------------------------------------------------- # Check for carbon with aromatic bond to all 3 neighbors, # c(:a)(:a)(:a) (aromatic bridgehead, C19) # ------------------------------------------------------- elsif ($btype1[$atomnumber] eq 'a' && $btype2[$atomnumber] eq 'a' && $btype3[$atomnumber] eq 'a') { $logP[$i] = $C19LP; $alabels[$i] = 24; $molref[$i] = $C19MR; } } # ----- # THIRD, check for carbons with 4 bonds # elsif ($nbonds[$atomnumber] == '4') { # # Check for methane (CH4, C1) # if ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } # # Check for several types of primary carbons when neighbors 1, 2, and # 3 are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # # Check for when neighbor 4 is a carbon # if ($atype[$neighbor4[$atomnumber]] eq 'C') { # ----------------------- # Check for 'CH3-c' (C8) # ----------------------- if ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a') { $logP[$i] = $C8LP; $alabels[$i] = 13; $molref[$i] = $C8MR; } # ------------------ # Else 'CH3-C' (C1) # ------------------ else { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } # # Check for when neighbor 4 is a heteroatom # elsif ($atype[$neighbor4[$atomnumber]] ne 'C') { # --------------------------- # Check for 'CH3-a' (C9) # --------------------------- if ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a')) { $logP[$i] = $C9LP; $alabels[$i] = 14; $molref[$i] = $C9MR; } # ----------------- # Else 'CH3-A' (C3) # ----------------- else { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } } } # # ... or neighbors 1, 2, and 4 are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # # Check for when neighbor 3 is a carbon # if ($atype[$neighbor3[$atomnumber]] eq 'C') { # ---------------------- # Check for 'CH3-c' (C8) # ---------------------- if ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a') { $logP[$i] = $C8LP; $alabels[$i] = 13; $molref[$i] = $C8MR; } # ------------------ # Else, 'CH3-C' (C1) # ------------------ else { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } # # Check for when neighbor 3 is a heteroatom # elsif ($atype[$neighbor3[$atomnumber]] ne 'C') { # ---------------------- # Check for 'CH3-a' (C9) # ---------------------- if ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')) { $logP[$i] = $C9LP; $alabels[$i] = 14; $molref[$i] = $C9MR; } # ------------------ # Else, 'CH3-A' (C3) # ------------------ else { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } } } # # ... neighbors 1, 3, and 4 are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # # Check for when neighbor 2 is a carbon # if ($atype[$neighbor2[$atomnumber]] eq 'C') { # ---------------------- # Check for 'CH3-c' (C8) # ---------------------- if ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a') { $logP[$i] = $C8LP; $alabels[$i] = 13; $molref[$i] = $C8MR; } # ------------------ # Else, 'CH3-C' (C1) # ------------------ else { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } # # Check for when neighbor 2 is a heteroatom # elsif ($atype[$neighbor2[$atomnumber]] ne 'C') { # ---------------------- # Check for 'CH3-a' (C9) # ---------------------- if ($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) { $logP[$i] = $C9LP; $alabels[$i] = 14; $molref[$i] = $C9MR; } # ------------------ # Else, 'CH3-A' (C3) # ------------------ else { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } } } # # ... neighbors 2, 3, and 4 are hydrogen. # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # # Check for when neighbor 1 is a carbon # if ($atype[$neighbor1[$atomnumber]] eq 'C') { # ---------------------- # Check for 'CH3-c' (C8) # ---------------------- if ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a') { $logP[$i] = $C8LP; $alabels[$i] = 13; $molref[$i] = $C8MR; } # ------------------ # Else, 'CH3-C' (C1) # ------------------ else { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } # # Check for when neighbor 1 is a heteroatom # elsif ($atype[$neighbor1[$atomnumber]] ne 'C') { # ---------------------- # Check for 'CH3-a' (C9) # ---------------------- if ($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) { $logP[$i] = $C9LP; $alabels[$i] = 14; $molref[$i] = $C9MR; } # ------------------ # Else, 'CH3-A' (C3) # ------------------ else { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } } } # # Check for several types of secondary carbons when neighbors 1 and 2 # are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ------------------------------------------------------------ # Check for when neighbors 3 and/or 4 are aromatic atoms (C10) # ------------------------------------------------------------ if (($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')) || ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C10LP; $alabels[$i] = 15; $molref[$i] = $C10MR; } # # Else, aliphatic secondary carbon attached to two carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH2-A' (C3) # ---------------------- if ($atype[$neighbor3[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } # ---------------------- # Else, 'CH2(C)(C)' (C1) # ---------------------- elsif ($atype[$neighbor3[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } } # # ... or neighbors 1 and 3 are hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ------------------------------------------------------------ # Check for when neighbors 2 and/or 4 are aromatic atoms (C10) # ------------------------------------------------------------ if (($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C10LP; $alabels[$i] = 15; $molref[$i] = $C10MR; } # # Else, aliphatic secondary carbon attached to two carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH2-A' (C3) # ---------------------- if ($atype[$neighbor2[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } # ---------------------- # Else, 'CH2(C)(C)' (C1) # ---------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } } # # ... or neighbors 1 and 4 are hydrogens ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # ------------------------------------------------------------ # Check for when neighbors 2 and/or 3 are aromatic atoms (C10) # ------------------------------------------------------------ if (($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a'))) { $logP[$i] = $C10LP; $alabels[$i] = 15; $molref[$i] = $C10MR; } # # Else, aliphatic secondary carbon attached to two carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH2-A' (C3) # ---------------------- if ($atype[$neighbor2[$atomnumber]] ne 'C' || $atype[$neighbor3[$atomnumber]] ne 'C') { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } # ---------------------- # Else, 'CH2(C)(C)' (C1) # ---------------------- elsif ($atype[$neighbor2[$atomnumber]] eq 'C' && $atype[$neighbor3[$atomnumber]] eq 'C') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } } # # ... or neighbors 2 and 3 are hydrogens ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ------------------------------------------------------------ # Check for when neighbors 1 and/or 4 are aromatic atoms (C10) # ------------------------------------------------------------ if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C10LP; $alabels[$i] = 15; $molref[$i] = $C10MR; } # # Else, aliphatic secondary carbon attached to two carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH2-A' (C3) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } # ---------------------- # Else, 'CH2(C)(C)' (C1) # ---------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } } # # ... or neighbors 2 and 4 are hydrogens ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # ------------------------------------------------------------ # Check for when neighbors 1 and/or 3 are aromatic atoms (C10) # ------------------------------------------------------------ if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a'))) { $logP[$i] = $C10LP; $alabels[$i] = 15; $molref[$i] = $C10MR; } # # Else, aliphatic secondary carbon attached to two carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH2-A' (C3) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor3[$atomnumber]] ne 'C') { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } # ---------------------- # Else, 'CH2(C)(C)' (C1) # ---------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor3[$atomnumber]] eq 'C') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } } # # ... or neighbors 3 and 4 are hydrogens ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # ------------------------------------------------------------ # Check for when neighbors 1 and/or 2 are aromatic atoms (C10) # ------------------------------------------------------------ if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a'))) { $logP[$i] = $C10LP; $alabels[$i] = 15; $molref[$i] = $C10MR; } # # Else, aliphatic secondary carbon attached to two carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH2-A' (C3) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor2[$atomnumber]] ne 'C') { $logP[$i] = $C3LP; $alabels[$i] = 8; $molref[$i] = $C3MR; } # ---------------------- # Else, 'CH2(C)(C)' (C1) # ---------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor2[$atomnumber]] eq 'C') { $logP[$i] = $C1LP; $alabels[$i] = 6; $molref[$i] = $C1MR; } } } # # Check for several types of tertiary carbons when neighbor 1 # is a hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] eq 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ---------------------------------------------------------------- # Check for when neighbors 2, 3, and/or 4 are aromatic atoms (C11) # ---------------------------------------------------------------- if (($nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')) || ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C11LP; $alabels[$i] = 16; $molref[$i] = $C11MR; } # # Else, aliphatic tertiary carbon attached to three carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH-A' (C4) # ---------------------- if ($atype[$neighbor2[$atomnumber]] ne 'C' || $atype[$neighbor3[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C4LP; $alabels[$i] = 9; $molref[$i] = $C4MR; } # ------------------------ # Else, 'CH(C)(C)(C)' (C2) # ------------------------ elsif ($atype[$neighbor2[$atomnumber]] eq 'C' && $atype[$neighbor3[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C2LP; $alabels[$i] = 7; $molref[$i] = $C2MR; } } } # # ... or neighbor 2 is a hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] eq 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ---------------------------------------------------------------- # Check for when neighbors 1, 3, and/or 4 are aromatic atoms (C11) # ---------------------------------------------------------------- if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')) || ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C11LP; $alabels[$i] = 16; $molref[$i] = $C11MR; } # # Else, aliphatic tertiary carbon attached to three carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH-A' (C4) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor3[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C4LP; $alabels[$i] = 9; $molref[$i] = $C4MR; } # ------------------------ # Else, 'CH(C)(C)(C)' (C2) # ------------------------ elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor3[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C2LP; $alabels[$i] = 7; $molref[$i] = $C2MR; } } } # # ... or neighbor 3 is a hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] eq 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ---------------------------------------------------------------- # Check for when neighbors 1, 2, and/or 4 are aromatic atoms (C11) # ---------------------------------------------------------------- if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C11LP; $alabels[$i] = 16; $molref[$i] = $C11MR; } # # Else, aliphatic tertiary carbon attached to three carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH-A' (C4) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor2[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C4LP; $alabels[$i] = 9; $molref[$i] = $C4MR; } # ------------------------ # Else, 'CH(C)(C)(C)' (C2) # ------------------------ elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor2[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C2LP; $alabels[$i] = 7; $molref[$i] = $C2MR; } } } # # ... or neighbor 4 is a hydrogen ... # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] eq 'H') { # ---------------------------------------------------------------- # Check for when neighbors 1, 2, and/or 3 are aromatic atoms (C11) # ---------------------------------------------------------------- if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a'))) { $logP[$i] = $C11LP; $alabels[$i] = 16; $molref[$i] = $C11MR; } # # Else, aliphatic tertiary carbon attached to three carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'CH-A' (C4) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor2[$atomnumber]] ne 'C' || $atype[$neighbor3[$atomnumber]] ne 'C') { $logP[$i] = $C4LP; $alabels[$i] = 9; $molref[$i] = $C4MR; } # ------------------------ # Else, 'CH(C)(C)(C)' (C2) # ------------------------ elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor2[$atomnumber]] eq 'C' && $atype[$neighbor3[$atomnumber]] eq 'C') { $logP[$i] = $C2LP; $alabels[$i] = 7; $molref[$i] = $C2MR; } } } # # Check for several types of quaternary carbons # elsif ($atype[$neighbor1[$atomnumber]] ne 'H' && $atype[$neighbor2[$atomnumber]] ne 'H' && $atype[$neighbor3[$atomnumber]] ne 'H' && $atype[$neighbor4[$atomnumber]] ne 'H') { # ------------------------------------------------------------------- # Check for when neighbors 1, 2, 3, and/or 4 are aromatic atoms (C12) # ------------------------------------------------------------------- if (($nbonds[$neighbor1[$atomnumber]] != '1' && ($btype1[$neighbor1[$atomnumber]] eq 'a' || $btype2[$neighbor1[$atomnumber]] eq 'a')) || ($ nbonds[$neighbor2[$atomnumber]] != '1' && ($btype1[$neighbor2[$atomnumber]] eq 'a' || $btype2[$neighbor2[$atomnumber]] eq 'a')) || ($nbonds[$neighbor3[$atomnumber]] != '1' && ($btype1[$neighbor3[$atomnumber]] eq 'a' || $btype2[$neighbor3[$atomnumber]] eq 'a')) || ($nbonds[$neighbor4[$atomnumber]] != '1' && ($btype1[$neighbor4[$atomnumber]] eq 'a' || $btype2[$neighbor4[$atomnumber]] eq 'a'))) { $logP[$i] = $C12LP; $alabels[$i] = 17; $molref[$i] = $C12MR; } # # Else, aliphatic tertiary carbon attached to three carbon atoms # or at least one heteroatom # else { # ---------------------- # Check for 'C-A' (C4) # ---------------------- if ($atype[$neighbor1[$atomnumber]] ne 'C' || $atype[$neighbor2[$atomnumber]] ne 'C' || $atype[$neighbor3[$atomnumber]] ne 'C' || $atype[$neighbor4[$atomnumber]] ne 'C') { $logP[$i] = $C4LP; $alabels[$i] = 9; $molref[$i] = $C4MR; } # -------------------------- # Else, 'C(C)(C)(C)(C)' (C2) # -------------------------- elsif ($atype[$neighbor1[$atomnumber]] eq 'C' && $atype[$neighbor2[$atomnumber]] eq 'C' && $atype[$neighbor3[$atomnumber]] eq 'C' && $atype[$neighbor4[$atomnumber]] eq 'C') { $logP[$i] = $C2LP; $alabels[$i] = 7; $molref[$i] = $C2MR; } } } } else { $logP[$i] = $CSLP; $alabels[$i] = 31; $molref[$i] = $CSMR; print "\n** WARNING ** Atom $atomnumber in $file has a supplementary constant - Use caution!\n"; } } else { $logP[$i] = 0; $molref[$i] = 0; } $i = $i +1; } } # -------------------------- # End of SUBROUTINE ATOMTYPE # -------------------------- # # -------------------------------------------------------- # ----------- START OF MAIN ROUTINE ------------ # -------------------------------------------------------- # # Get original directory listing so we know which .hin files to use. # chomp (@dir = `ls *.hin`); # # Open 'exlogp.out' file. LogP and molar refractivity values will be # written here for each compound. # open (EXLOGP, ">exlogp.out") || die; print EXLOGP " Compound\t LogP\t Mol. Ref.\n"; print EXLOGP " ---------\t -------\t---------\n\n"; # # Open 'hydro.out' file. Individual atom constants will be # written here analogous to how charge information is written out in # exchg.out # open (HYDRO, ">hydro.out") || die; print HYDRO "*** HYDROPHOBICITY DATA *** FOR SURLOGP\n"; # # Keep count of the number of compounds with $index. # $index = 0; # foreach $file (@dir) { $index = $index + 1; # # Remove unwanted lines for each compound by pushing lines # containing /atom/ into @wantedlines() array, # undef @rawData; undef @wantedlines; open (FILE, "$file") || die; chomp (@rawData = ); close (FILE); foreach $line (@rawData) { if ($line =~ /atom/) { push @wantedlines, $line; } } # # Zero arrays before examining each compound to (1) reduce # memory needed to store information and (2) to make sure that # residual information from previous compounds is removed. # undef @anum; undef @atype; undef @nbonds; undef @neighbor1; undef @btype1; undef @neighbor2; undef @btype2; undef @neighbor3; undef @btype3; undef @neighbor4; undef @btype4; undef @neighbor5; undef @btype5; # # Subroutine &READFILE to read in atom number, type, and # connectivity information for each compound. # &READFILE(); # # Define atom labels depending on molecular environment. # ###################### # Hydrogen Info. # ###################### # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $H1LP = 0.123; $H1MR = 1.057; # hydrocarbon # 1 $H2LP = -0.2677; $H2MR = 1.395; # alcohol # 2 $H3LP = 0.2142; $H3MR = 0.9627; # amine # 3 $H4LP = 0.298; $H4MR = 1.805; # acid # 4 $HSLP = 0.1125; $HSMR = 1.112; # supplemental # 5 #################### # Carbon Info. # #################### # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $C1LP = 0.1441; $C1MR = 2.503; # prim./sec. aliphatic # 6 $C2LP = 0; $C2MR = 2.433; # tert./quat. aliphatic # 7 $C3LP = -0.2035; $C3MR = 2.753; # prim./sec. heteroatom # 8 $C4LP = -0.2051; $C4MR = 2.731; # tert./quat. heteroatom # 9 $C5LP = -0.2783; $C5MR = 5.007; # carbon double-bound to heteroatom # 10 $C6LP = 0.1551; $C6MR = 3.513; # C=C aliphatic # 11 $C7LP = 0.00170; $C7MR = 3.888; # acetylene, nitrile # 12 $C8LP = 0.08452; $C8MR = 2.464; # prim. aromatic (carbon) # 13 $C9LP = -0.1444; $C9MR = 2.412; # prim. aromatic heteroatom # 14 $C10LP = -0.0516; $C10MR = 2.488; # sec. aromatic # 15 $C11LP = 0.1193; $C11MR = 2.582; # tert. aromatic # 16 $C12LP = -0.0967; $C12MR = 2.576; # quat. aromatic # 17 $C13LP = -0.5443; $C13MR = 4.041; # aromatic single-bound to P # 18 $C14LP = 0; $C14MR = 3.257; # aromatic single-bound to F # 19 $C15LP = 0.2450; $C15MR = 3.564; # aromatic single-bound to Cl # 20 $C16LP = 0.1980; $C16MR = 3.180; # aromatic single-bound to Br # 21 $C17LP = 0; $C17MR = 3.104; # aromatic single-bound to I # 22 $C18LP = 0.1581; $C18MR = 3.350; # aromatic (single-bound to H) # 23 $C19LP = 0.2955; $C19MR = 4.346; # aromatic bridgehead # 24 $C20LP = 0.2713; $C20MR = 3.904; # aromatic single-bound to aromatic # 25 $C21LP = 0.1360; $C21MR = 3.509; # aromatic single-bound to C # 26 $C22LP = 0.4619; $C22MR = 4.067; # aromatic single-bound to N # 27 $C23LP = 0.5437; $C23MR = 3.853; # aromatic single-bound to O # 28 $C24LP = 0.1893; $C24MR = 2.673; # aromatic single-bound to S # 29 $C25LP = 0.2640; $C25MR = 4.305; # C=C aromatic # 30 $CSLP = 0.08129; $CSMR = 3.243; # supplemental # 31 ###################### # Nitrogen Info. # ###################### # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $N1LP = -1.019; $N1MR = 2.262; # primary # 32 $N2LP = -0.7096; $N2MR = 2.173; # secondary # 33 $N3LP = -1.027; $N3MR = 2.827; # prim. aromatic # 34 $N4LP = -0.5188; $N4MR = 3; # sec. aromatic # 35 $N5LP = 0.08387; $N5MR = 1.757; # imine # 36 $N6LP = 0.1836; $N6MR = 2.428; # substituted imine # 37 $N7LP = -0.3187; $N7MR = 1.839; # tertiary # 38 $N8LP = -0.4458; $N8MR = 2.819; # tert. aromatic # 39 $N9LP = 0.01508; $N9MR = 1.725; # nitrile # 40 $N10LP = -0.3239; $N10MR = 2.202; # aromatic # 41 $NSLP = -0.4806; $NSMR = 2.134; # supplemental # 42 #################### # Oxygen Info. # #################### # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $O1LP = 0.1552; $O1MR = 1.08; # aromatic # 43 $O2LP = -0.2893; $O2MR = 0.8238; # alcohol # 44 $O3LP = -0.0684; $O3MR = 1.085; # aliphatic ether # 45 $O4LP = -0.4195; $O4MR = 1.182; # aromatic ether # 46 $O5LP = 0.0335; $O5MR = 3.367; # oxide, N/O # 47 $O6LP = -0.1526; $O6MR = 0; # carbonyl aliphatic # 48 $O7LP = 0.1129; $O7MR = 0.2215; # carbonyl aromatic # 49 $O8LP = 0.4833; $O8MR = 0.389; # carbonyl heteroatom # 50 $OSLP = -0.1188; $OSMR = 0.6865; # supplemental # 51 ##################### # Halogen Info. # ##################### # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $Hal1LP = 0.4202; $Hal1MR = 1.108; # fluorine # 52 $Hal2LP = 0.6895; $Hal2MR = 5.853; # chlorine # 53 $Hal3LP = 0.8456; $Hal3MR = 8.927; # bromine # 54 $Hal4LP = 0.8857; $Hal4MR = 14.02; # iodine # 55 ############################### # Phosphorus/Sulfur Info. # ############################### # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $P1LP = 0.8612; $P1MR = 6.92; # phosphorus # 56 $S1LP = 0.6482; $S1MR = 7.591; # aliphatic sulfur # 57 $S2LP = 0.6237; $S2MR = 6.691; # aromatic sulfur # 58 ############################# # Nitro group nitrogens # ############################# # # LogP constant MolRef constant Substructure Type Atom Label # ---------------- --------------- ----------------------------------------- ---------- $NitroLP = -0.3396;$NitroMR = 0.2604; # nitro group nitrogen # 59 # undef @logP; undef @alabels; undef @molref; # # Subroutine &ATOMTYPE(), figure out appropriate hydrophobicity and # molar refractivity constant for each atom. # &ATOMTYPE(); # # Sum up atomic contributions to calculate a logP and molar refractivity # value for each compound and write out to exlogp.out file. # $tot_logP = 0; $tot_molref = 0; foreach (@logP) { $tot_logP = $tot_logP + $_; } foreach (@molref) { $tot_molref = $tot_molref + $_; } printf EXLOGP "%12s\t%7.3f\t%16.3f\n", $file, $tot_logP, $tot_molref; # # Print out individual atomic contributions for each atom to # hydrophobicity.out file. # printf HYDRO "%5.0f%5.0f\n", $index, $anum[$#anum]; # foreach $atom (1 .. $#anum) { printf HYDRO "%5.0f%5.0f %17.10E%10.0f%5.0f%5.0f%5.0f\n", $atom, $alabels[$atom-1], $logP[$atom-1], $neighbor1[$atom], $neighbor2[$atom], $neighbor3[$atom], $neighbor4[$atom]; } # } close (EXLOGP); print HYDRO "9999 1\n"; close (HYDRO);