hdiff output

r33110/aa_ringdata.py 2017-08-03 17:31:01.751641368 +0100 r33109/aa_ringdata.py 2017-08-03 17:31:10.955763967 +0100
  1: axis = dict()  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/aa_ringdata.py' in revision 33109
  2: ring_atoms = dict() 
  3: #CB,CG 
  4: axis['HIS'] = [[3.576965, 3.653838, 1.232143] , [4.200813, 5.026064, 1.321087]] 
  5: ring_atoms['HIS'] = {"ND1" : [3.942782, 5.885086, 2.382972], 
  6:                      "CE1" : [4.624274, 6.997642, 2.182500], 
  7:                      "HE1" : [4.563048, 7.811875, 2.904563], 
  8:                      "NE2" : [5.294011, 6.891451, 1.061663], 
  9:                      "CD2" : [5.058974, 5.678868, 0.492453], 
 10:                      "HD2" : [5.537741, 5.417846, -0.451343] 
 11:                      } 
 12:  
 13: axis['HID'] = [[3.576965, 3.653838, 1.232143] , [4.200813, 5.026064, 1.321087]] 
 14: ring_atoms['HID'] = {"ND1" : [3.942782, 5.885086, 2.382972], 
 15:                      "CE1" : [4.624274, 6.997642, 2.182500], 
 16:                      "HE1" : [4.563048, 7.811875, 2.904563], 
 17:                      "NE2" : [5.294011, 6.891451, 1.061663], 
 18:                      "CD2" : [5.058974, 5.678868, 0.492453], 
 19:                      "HD2" : [5.537741, 5.417846, -0.451343] 
 20:                      } 
 21:  
 22: axis['HIE'] = [[3.576965, 3.653838, 1.232143] , [4.200813, 5.026064, 1.321087]] 
 23: ring_atoms['HIE'] = {"ND1" : [3.942782, 5.885086, 2.382972], 
 24:                      "CE1" : [4.624274, 6.997642, 2.182500], 
 25:                      "HE1" : [4.563048, 7.811875, 2.904563], 
 26:                      "NE2" : [5.294011, 6.891451, 1.061663], 
 27:                      "CD2" : [5.058974, 5.678868, 0.492453], 
 28:                      "HD2" : [5.537741, 5.417846, -0.451343] 
 29:                      } 
 30:  
 31: axis['HIP'] = [[3.576965, 3.653838, 1.232143] , [4.200813, 5.026064, 1.321087]] 
 32: ring_atoms['HIP'] = {"ND1" : [3.942782, 5.885086, 2.382972], 
 33:                      "CE1" : [4.624274, 6.997642, 2.182500], 
 34:                      "HE1" : [4.563048, 7.811875, 2.904563], 
 35:                      "NE2" : [5.294011, 6.891451, 1.061663], 
 36:                      "CD2" : [5.058974, 5.678868, 0.492453], 
 37:                      "HD2" : [5.537741, 5.417846, -0.451343] 
 38:                      }                     
 39:  
 40: axis['PHE'] = [[3.576965, 3.653838, 1.232143] , [4.200813, 5.026064, 1.321087]] 
 41: ring_atoms['PHE'] = {"CD1" : [3.911613, 5.857250, 2.409890], 
 42:                      "HD1" : [3.236123, 5.513843, 3.193398], 
 43:                      "CE1" : [4.490014, 7.129513, 2.492354], 
 44:                      "HE1" : [4.264853, 7.776651, 3.340066], 
 45:                      "CZ"  : [5.357616, 7.570591, 1.486016], 
 46:                      "HZ"  : [5.807943, 8.561138, 1.550220], 
 47:                      "CE2" : [5.646818, 6.739407, 0.397211], 
 48:                      "HE2" : [6.322309, 7.082817, -0.386295], 
 49:                      "CD2" : [5.068419, 5.467143, 0.314744], 
 50:                      "HD2" : [5.293584, 4.820007, -0.532968] 
 51:                      } 
 52:                       
 53: axis['TRP'] = [[3.576965, 3.653838, 1.232143] , [4.200813, 5.026064, 1.321087]]  
 54: ring_atoms['TRP'] = {"CD1" : [4.023453, 5.931084, 2.293240], 
 55:                      "HD1" : [3.368841, 5.705466, 3.135071], 
 56:                      "NE1" : [4.811943, 7.073555, 1.949808], 
 57:                      "HE1" : [4.882921, 7.922010, 2.493118], 
 58:                      "CE2" : [5.427347, 6.842060, 0.816764], 
 59:                      "CZ2" : [6.297161, 7.689052, 0.119605], 
 60:                      "HZ2" : [6.531230, 8.676649, 0.517050], 
 61:                      "CH2" : [6.814091, 7.187011, -1.069023], 
 62:                      "HH2" : [7.498074, 7.791857, -1.664362], 
 63:                      "CZ3" : [6.482659, 5.953119, -1.505101], 
 64:                      "HZ3" : [6.897660, 5.575648, -2.439654], 
 65:                      "CE3" : [5.604041, 5.117355, -0.785636], 
 66:                      "HE3" : [5.358720, 4.126570, -1.168080], 
 67:                      "CD2" : [5.083390, 5.623004, 0.411545] 
 68:                      } 
 69:                       
 70: axis['TYR'] = [[3.576965, 3.653838, 1.232143] , [4.267328, 4.996267, 1.194946]] 
 71: ring_atoms['TYR'] = {"CD1" : [4.059927, 5.918911, 2.227280], 
 72:                      "HD1" : [3.400108, 5.668218, 3.057877], 
 73:                      "CE1" : [4.699998, 7.163547, 2.192791], 
 74:                      "HE1" : [4.538522, 7.881891, 2.996538], 
 75:                      "CZ"  : [5.547471, 7.485542, 1.125970], 
 76:                      "OH"  : [6.169255, 8.694617, 1.092468], 
 77:                      "HH"  : [5.956327, 9.246984, 1.848214], 
 78:                      "CE2" : [5.754875, 6.562900, 0.093635], 
 79:                      "HE2" : [6.414694, 6.813595, -0.736962], 
 80:                      "CD2" : [5.114806, 5.318263, 0.128119], 
 81:                      "HD2" : [5.276286, 4.599920, -0.675627] 
 82:                      } 
 83:  
 84: ring_atoms['PRO'] = {"N"   : [3.326834, 1.557389, -1.603945E-06], 
 85:                      "CD"  : [4.302147, 0.476598, 0.080119], 
 86:                      "CG"  : [5.547126, 1.172441, 0.544693], 
 87:                      "CB"  : [5.369091, 2.628184, 0.185227], 
 88:                      "CA"  : [3.933610, 2.871277, -0.104508], 
 89:                      "C"   : [3.505164, 3.526392, -1.409783]} 
 90:  
 91:  
 92: ring_atoms['HYP'] = {"N"   : [3.326834, 1.557389, -1.603945E-06], 
 93:                      "CD"  : [4.302147, 0.476598, 0.080119], 
 94:                      "CG"  : [5.547126, 1.172441, 0.544693], 
 95:                      "OD1" : [5.687901, 1.006813, 1.978308], 
 96:                      "CB"  : [5.369091, 2.628184, 0.185227], 
 97:                      "CA"  : [3.933610, 2.871277, -0.104508], 
 98:                      "C"   : [3.505164, 3.526392, -1.409783]} 
 99:                       
100:   
101:  


r33110/amber12_interface.F90 2017-08-03 17:30:56.395570028 +0100 r33109/amber12_interface.F90 2017-08-03 17:31:05.515691500 +0100
203:   inpcrd_name = 'coords.inpcrd'203:   inpcrd_name = 'coords.inpcrd'
204:   prmtop_name = 'coords.prmtop'204:   prmtop_name = 'coords.prmtop'
205:   restrt_name = 'min.rst' 205:   restrt_name = 'min.rst' 
206:   refc_name   = 'refc'206:   refc_name   = 'refc'
207:   mdvel_name  = 'mdvel'207:   mdvel_name  = 'mdvel'
208:   mden_name   = 'mden'208:   mden_name   = 'mden'
209:   mdcrd_name  = 'mdcrd'209:   mdcrd_name  = 'mdcrd'
210:   mdinfo_name = 'mdinfo'210:   mdinfo_name = 'mdinfo'
211:   logfile_name = 'amberlogfile'211:   logfile_name = 'amberlogfile'
212: 212: 
213: !needed for reinitialisation for mutations 
214:   num_ints=0 
215:   num_reals=0 
216:  
217: ! First check whether we're dealing with a C or Fortran string and set the213: ! First check whether we're dealing with a C or Fortran string and set the
218: ! length accordingly.214: ! length accordingly.
219:   if (inpcrd_name_input(inpcrd_name_length) == c_null_char) then215:   if (inpcrd_name_input(inpcrd_name_length) == c_null_char) then
220:     do i = 1, inpcrd_name_length - 1216:     do i = 1, inpcrd_name_length - 1
221:       inpcrd_name_string(i:i) = inpcrd_name_input(i)217:       inpcrd_name_string(i:i) = inpcrd_name_input(i)
222:     end do218:     end do
223:     inpcrd_name_string(inpcrd_name_length:80)     = " "219:     inpcrd_name_string(inpcrd_name_length:80)     = " "
224:   else220:   else
225:     do i = 1, inpcrd_name_length221:     do i = 1, inpcrd_name_length
226:       inpcrd_name_string(i:i) = inpcrd_name_input(i)222:       inpcrd_name_string(i:i) = inpcrd_name_input(i)
593:   close(mdout)589:   close(mdout)
594: 590: 
595: #ifdef CUDA591: #ifdef CUDA
596: ! Shut down GPU592: ! Shut down GPU
597:   call gpu_shutdown()593:   call gpu_shutdown()
598: #endif594: #endif
599: 595: 
600: #ifdef AMBMPI596: #ifdef AMBMPI
601:   call free_comms               ! free MPI communicators597:   call free_comms               ! free MPI communicators
602: #endif598: #endif
603:   !call mexit(6, 0)599:   call mexit(6, 0)
604:   600:   
605: ! Deallocate arrays allocated by AMBER12 interface 601: ! Deallocate arrays allocated by AMBER12 interface 
606:   if (allocated(amber12_atoms)) deallocate(amber12_atoms)602:   if (allocated(amber12_atoms)) deallocate(amber12_atoms)
607:   if (allocated(amber12_residues)) deallocate(amber12_residues)603:   if (allocated(amber12_residues)) deallocate(amber12_residues)
608:   if (allocated(amber12_masses)) deallocate(amber12_masses)604:   if (allocated(amber12_masses)) deallocate(amber12_masses)
609:   return605:   return
610: #endif /* DUMMY_AMBER12 */606: #endif /* DUMMY_AMBER12 */
611: end subroutine amber12_finish607: end subroutine amber12_finish
612: 608: 
613: subroutine amber12_mut_finish() bind(C, name='amber12_mut_finish') 
614: #ifndef DUMMY_AMBER12 
615: #ifdef AMBMPI 
616:   use parallel_dat_mod 
617:   use bintraj_mod 
618:   use pme_force_mod,  only : dealloc_force_mem 
619:   use remd_mod,       only : remd_cleanup 
620:   use multipmemd_mod, only : free_comms 
621: #endif 
622:   use inpcrd_dat_mod,      only : dealloc_inpcrd_dat 
623:   use prmtop_dat_mod,      only : dealloc_prmtop_dat 
624:   use extra_pnts_nb14_mod, only : dealloc_extra_pnts_nb14 
625:   use dynamics_dat_mod,    only : dealloc_dynamics_dat 
626:   use gb_ene_mod,          only : dealloc_gb_ene 
627:   use pmemd_lib_mod 
628: #ifdef AMBMPI 
629:    
630:   implicit none 
631:  
632:   call dealloc_force_mem(ips) 
633:  
634:   ioutfm = 1 
635:  
636:   if (imin .eq. 0) then 
637:     call remd_cleanup 
638:   end if 
639:  
640:   if (master) then  
641:     if (ioutfm .eq. 1) then 
642:       call close_binary_files 
643:     else 
644:       if (ntwx .gt. 0) close(mdcrd) 
645:       if (ntwv .gt. 0) close(mdvel) 
646:     end if 
647:     if (ntwe .gt. 0) close(mden) 
648:   else 
649:  
650: #ifdef CUDA 
651: ! Shut down GPU 
652:   call gpu_shutdown() 
653: #endif 
654:     call free_comms 
655:     call mexit(0, 0) 
656:   endif 
657: #endif /* end AMBMPI */ 
658:  
659:   close(mdout) 
660:  
661: #ifdef CUDA 
662: ! Shut down GPU 
663:   call gpu_shutdown() 
664: #endif 
665:  
666: #ifdef AMBMPI 
667:   call free_comms               ! free MPI communicators 
668: #endif 
669:   close(unit=6) 
670:  
671: ! Deallocate all arrays in modules and reset saved counters 
672:   call dealloc_inpcrd_dat()  
673:   call dealloc_prmtop_dat() 
674:   call dealloc_extra_pnts_nb14() 
675:   call dealloc_dynamics_dat() 
676:   call dealloc_gb_ene() 
677:    
678: ! Deallocate arrays allocated by AMBER12 interface  
679:   if (allocated(amber12_atoms)) deallocate(amber12_atoms) 
680:   if (allocated(amber12_residues)) deallocate(amber12_residues) 
681:   if (allocated(amber12_masses)) deallocate(amber12_masses) 
682:   return 
683: #endif /* DUMMY_AMBER12 */ 
684: end subroutine amber12_mut_finish 
685:  
686: subroutine amber12_write_restart(coords, rst_name, rst_name_length) bind(C, name='amber12_write_restart')609: subroutine amber12_write_restart(coords, rst_name, rst_name_length) bind(C, name='amber12_write_restart')
687: !610: !
688: ! Writes a restart file containing the coordinates provided in the coords array.611: ! Writes a restart file containing the coordinates provided in the coords array.
689: !612: !
690: ! Arguments613: ! Arguments
691: ! ---------614: ! ---------
692: !615: !
693: ! coords(in): coordinates of the atoms616: ! coords(in): coordinates of the atoms
694: ! rst_name(in): file name for the output restart file.617: ! rst_name(in): file name for the output restart file.
695: ! rst_name_length(in): length of the file name618: ! rst_name_length(in): length of the file name
772:     call write_restart(rst_file_unit, natom, coords, zero_velocities, &695:     call write_restart(rst_file_unit, natom, coords, zero_velocities, &
773:                      & 0.0d0, is_main, "not_needed")696:                      & 0.0d0, is_main, "not_needed")
774:     close(unit = rst_file_unit)697:     close(unit = rst_file_unit)
775:   else698:   else
776:     call write_restart(rst_file_unit, natom, coords, zero_velocities, &699:     call write_restart(rst_file_unit, natom, coords, zero_velocities, &
777:                      & 0.0d0, is_main, "not_needed")700:                      & 0.0d0, is_main, "not_needed")
778:   end if701:   end if
779: #endif /* DUMMY_AMBER12 */702: #endif /* DUMMY_AMBER12 */
780: end subroutine amber12_write_restart703: end subroutine amber12_write_restart
781: 704: 
782: subroutine amber12_write_restart_mut(coords, newatoms , rst_name, rst_name_length) bind(C, name='amber12_write_restart_mut') 
783: ! 
784: ! Writes a restart file containing the coordinates provided in the coords array. 
785: ! For mutational changes 
786: ! 
787: #ifndef DUMMY_AMBER12 
788:   use iso_c_binding, only : c_int, c_double, c_char, c_null_char 
789:   use runfiles_mod, only : write_restart 
790: #else 
791:   use iso_c_binding, only : c_int, c_double, c_char  
792: #endif 
793:  
794:   implicit none 
795: ! Arguments 
796: #ifndef DUMMY_AMBER12 
797:   real(c_double), intent(in)              :: coords(3 * natom) 
798: #else 
799:   real(c_double), intent(in)              :: coords(1) 
800: #endif 
801:   integer(c_int), intent(in)              :: rst_name_length 
802:   integer(c_int), intent(in)              :: newatoms 
803:   character(kind=c_char, len=1), & 
804:             dimension(rst_name_length), & 
805:             intent(in)                    :: rst_name 
806: #ifndef DUMMY_AMBER12 
807: ! Parameters 
808:   logical, parameter                      :: is_main = .true. 
809: ! Variables 
810:   double precision                        :: zero_velocities(3 * natom) 
811:   integer                                 :: rst_file_unit 
812:   logical                                 :: unit_open 
813:   character(len=80)                       :: rst_name_string 
814:   integer                                 :: i 
815:  
816: ! First check whether we're dealing with a C or Fortran string and set the 
817: ! length accordingly. 
818:   if (rst_name(rst_name_length) == c_null_char) then 
819:     do i = 1, rst_name_length - 1 
820:       rst_name_string(i:i) = rst_name(i) 
821:     end do 
822:     rst_name_string(rst_name_length:80)     = " " 
823:   else  
824:     do i = 1, rst_name_length 
825:       rst_name_string(i:i) = rst_name(i) 
826:     end do 
827:     rst_name_string(rst_name_length + 1:80) = " " 
828:   end if 
829:  
830: ! Set the zero_velocities array to 0.0d0. 
831:   zero_velocities(:) = 0.0d0 
832:  
833: ! If the filename is already attached to a unit number, use that, otherwise 
834: ! check the availability of unit numbers and choose one for the rst file. 
835:   inquire(file = rst_name_string, opened = unit_open, number = rst_file_unit) 
836:   if (.not. unit_open) then 
837:     do rst_file_unit = 2000, 2999 
838:       inquire(unit = rst_file_unit, opened = unit_open) 
839:       if (.not. unit_open) exit 
840:     end do  
841:   ! Call the write_restart subroutine from the runfiles_mod. 0.0d0 refers to the 
842:   ! tt variable, which is not used for minimisation and is_main to whether it is 
843:   ! the main restart file for NetCDF formatted writes (i.e. we don't need it). 
844:   ! 
845:   ! We must also open and close the restart file, since AMBER assumes that the  
846:   ! file unit is already connected. 
847:     open(unit = rst_file_unit, file = trim(adjustl(rst_name_string)), action = 'write') 
848:     call write_restart(rst_file_unit, newatoms, coords, zero_velocities, & 
849:                      & 0.0d0, is_main, "not_needed") 
850:     close(unit = rst_file_unit) 
851:   else 
852:     call write_restart(rst_file_unit, newatoms, coords, zero_velocities, & 
853:                      & 0.0d0, is_main, "not_needed") 
854:   end if 
855: #endif /* DUMMY_AMBER12 */ 
856: end subroutine amber12_write_restart_mut 
857:  
858: subroutine amber12_write_pdb(coords, pdb_name, pdb_name_length) bind(C, name='amber12_write_pdb')705: subroutine amber12_write_pdb(coords, pdb_name, pdb_name_length) bind(C, name='amber12_write_pdb')
859: !706: !
860: ! Writes a PDB file containing the coordinates provided in the coords array.707: ! Writes a PDB file containing the coordinates provided in the coords array.
861: !708: !
862: ! Arguments709: ! Arguments
863: ! ---------710: ! ---------
864: !711: !
865: ! coords(in): coordinates of the atoms712: ! coords(in): coordinates of the atoms
866: ! pdb_name(in): file name for the output PDB file713: ! pdb_name(in): file name for the output PDB file
867: ! pdb_name_length(in): length of the file name714: ! pdb_name_length(in): length of the file name


r33110/amber_mutations.F90 2017-08-03 17:30:59.371609667 +0100 r33109/amber_mutations.F90 2017-08-03 17:31:08.475730934 +0100
  1: !Subroutines to set up and use mutations as moves in a general BH run  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/GMIN/source/amber_mutations.F90' in revision 33109
  2: MODULE AMBER12_MUTATIONS 
  3:   USE COMMONS 
  4:   USE PORFUNCS 
  5:   USE CHIRALITY, ONLY: DEALLOC_STATES_MUTATION 
  6:   USE AMBER12_INTERFACE_MOD 
  7:   USE QMODULE 
  8:   IMPLICIT NONE 
  9:  
 10:  
 11: !****************************************************************************** 
 12: ! Types to represent mutation information. 
 13:   TYPE RESIDUE_MUTATION 
 14:      INTEGER                           :: RESNUM          !residue number 
 15:      INTEGER                           :: NMUTATIONS      !number of mutations so far 
 16:      INTEGER                           :: NENTRIES        !number of possible residues 
 17:      CHARACTER(LEN=4)                  :: CURRENT_RES     !current residue 
 18:      CHARACTER(LEN=4) , DIMENSION(:) , ALLOCATABLE :: RESCHOICE       !residues to choose for mutations 
 19:      DOUBLE PRECISION , DIMENSION(:) , ALLOCATABLE :: PROBABILITIES   !selection probability for selection 
 20:   END TYPE RESIDUE_MUTATION 
 21:  
 22:   CHARACTER(LEN=4), ALLOCATABLE , SAVE :: AMBER12_RESNAME(:) 
 23:   INTEGER , SAVE :: NRESIDUES , NRESMUT , MUNIT 
 24:   INTEGER , ALLOCATABLE , SAVE :: TERMINI_RES(:), AMBER12_RESSTART(:), AMBER12_RESEND(:), AMBER12_RESNATOM(:) 
 25:   TYPE(RESIDUE_MUTATION) , DIMENSION(:) , ALLOCATABLE ,SAVE :: MUTATION_INFO , PREVIOUS_MUTATION 
 26:  
 27:   CONTAINS 
 28:   !setup mutational system, initialise coordinates correctly, and according to the right size 
 29:   SUBROUTINE AMBERMUTATION_SETUP()   
 30:      IMPLICIT NONE 
 31:      INTEGER :: MIUNIT,GETUNIT,J1,J2,NENTRIES,NTERMINI,TESTINT 
 32:      LOGICAL :: YESNO , NTERT 
 33:      CHARACTER(200) ENTRY_ 
 34:      CHARACTER(25) , DIMENSION(:) , ALLOCATABLE :: ENTRIES 
 35:  
 36:      !check there is a file contianing the mutational information 
 37:      YESNO = .FALSE. 
 38:      INQUIRE(FILE='amber_mutations',EXIST=YESNO) 
 39:      IF (.NOT.YESNO) THEN 
 40:         WRITE(MYUNIT,'(A)') ' ambermut> No mutation information given' 
 41:         STOP 
 42:      ENDIF 
 43:      !get the number of residues, and their atom positions 
 44:      CALL TOPOLOGY_READER() 
 45:      !open the mutation information 
 46:      MIUNIT = GETUNIT() 
 47:      OPEN(UNIT=MIUNIT,FILE='amber_mutations',status='unknown') 
 48:      WRITE(MYUNIT,*) 'ambermut> Reading in mutations allowed' 
 49:      READ(MIUNIT,*) NRESMUT 
 50:      WRITE(MYUNIT,*) 'ambermut> ',NRESIDUES,' residues, of which ',NRESMUT,'can be mutated' 
 51:      !all allocations and reallocations are taken care of here, as we will not chnage the number of residues 
 52:      ALLOCATE(TERMINI_RES(NRESIDUES)) 
 53:      IF (ALLOCATED(MUTATION_INFO)) DEALLOCATE(MUTATION_INFO) 
 54:      ALLOCATE(MUTATION_INFO(NRESMUT)) 
 55:      IF (ALLOCATED(PREVIOUS_MUTATION)) DEALLOCATE(PREVIOUS_MUTATION) 
 56:      ALLOCATE(PREVIOUS_MUTATION(NRESMUT)) 
 57:      IF (ALLOCATED(TERMINI_RES)) DEALLOCATE(TERMINI_RES) 
 58:      ALLOCATE(TERMINI_RES(NRESIDUES)) 
 59:      TERMINI_RES(:) = 0 
 60:      !read next line, this contains the terminal residues 
 61:      READ(MIUNIT,*) NTERMINI 
 62:      READ(MIUNIT,'(A)',END=101) ENTRY_               !read line 
 63:      ALLOCATE(ENTRIES(NTERMINI)) 
 64:      ENTRIES(:)='' 
 65:      CALL READ_LINE(ENTRY_,NTERMINI,ENTRIES) 
 66:      !entries now contains the information about the termini, we need to differentiate between C and N termini 
 67:      !the first entry ought to be the N terminus and then we switch between then, this might cause problems for ACE, NME, NHE!!! 
 68:      NTERT = .TRUE. 
 69:      DO J1=1,NRESIDUES 
 70:         DO J2=1,NTERMINI 
 71:            READ(ENTRIES(J2),'(I8)') TESTINT 
 72:            IF (TESTINT.EQ.J1) THEN 
 73:               IF (NTERT) THEN 
 74:                  TERMINI_RES(J1)=1 
 75:                  NTERT = .FALSE. 
 76:               ELSE 
 77:                  TERMINI_RES(J1)=2 
 78:                  NTERT = .TRUE. 
 79:               ENDIF 
 80:            ENDIF 
 81:         ENDDO 
 82:      ENDDO 
 83:      !now we get to actual mutation information 
 84:      !line 1: RESNUM NENTRIES CURRENT_RES 
 85:      !line 2: RESNAME1 RESNAME2 RESNAME3 ... 
 86:      !line 3: PROB1 PROB2 PROB3 ... 
 87:      ! we can give the probabilities as any series of numbers, they are normalised later, as we need to discount the residue that we currently have 
 88:      !i.e. if we try to mutate we will mutate, and then check after some more group rotation steps in mc.F whether the energy is lower or not  
 89:      DO J1=1,NRESMUT 
 90:         READ(MIUNIT,'(A)',END=101) ENTRY_               !read line 
 91:         !reallocate the length of the entries list 
 92:         DEALLOCATE(ENTRIES) 
 93:         ALLOCATE(ENTRIES(3)) 
 94:         ENTRIES(:)='' 
 95:         CALL READ_LINE(ENTRY_,3,ENTRIES) 
 96:         READ(ENTRIES(1),'(I8)') MUTATION_INFO(J1)%RESNUM 
 97:         READ(ENTRIES(2),'(I8)') MUTATION_INFO(J1)%NENTRIES 
 98:         READ(ENTRIES(3),'(A)') MUTATION_INFO(J1)%CURRENT_RES 
 99:         MUTATION_INFO(J1)%NMUTATIONS = 0 
100:         NENTRIES=MUTATION_INFO(J1)%NENTRIES 
101:         ALLOCATE(MUTATION_INFO(J1)%RESCHOICE(NENTRIES)) 
102:         ALLOCATE(MUTATION_INFO(J1)%PROBABILITIES(NENTRIES)) 
103:         ALLOCATE(PREVIOUS_MUTATION(J1)%RESCHOICE(NENTRIES)) 
104:         ALLOCATE(PREVIOUS_MUTATION(J1)%PROBABILITIES(NENTRIES)) 
105:         !reallocate the length of the entries list 
106:         READ(MIUNIT,'(A)',END=101) ENTRY_ 
107:         DEALLOCATE(ENTRIES) 
108:         ALLOCATE(ENTRIES(MUTATION_INFO(J1)%NENTRIES)) 
109:         ENTRIES(:)='' 
110:         CALL READ_LINE(ENTRY_,MUTATION_INFO(J1)%NENTRIES,ENTRIES) 
111:         DO J2=1,MUTATION_INFO(J1)%NENTRIES 
112:            MUTATION_INFO(J1)%RESCHOICE(J2)=ENTRIES(J2) 
113:         ENDDO 
114:         READ(MIUNIT,'(A)',END=101) ENTRY_ 
115:         ENTRIES(:)='' 
116:         CALL READ_LINE(ENTRY_,MUTATION_INFO(J1)%NENTRIES,ENTRIES) 
117:         DO J2=1,MUTATION_INFO(J1)%NENTRIES 
118:            READ(ENTRIES(J2),*) MUTATION_INFO(J1)%PROBABILITIES(J2) 
119:         ENDDO 
120:      ENDDO 
121: 101  CONTINUE 
122:      CLOSE(MIUNIT) 
123:      !call the grouprotation set up here (not in keywords) 
124:      CALL MUT_SETUP_GROUPROTATION(1,.FALSE.,.FALSE.,0)          
125:      RETURN 
126:   END SUBROUTINE AMBERMUTATION_SETUP 
127:    
128:   !mutate protein 
129:   SUBROUTINE AMBERMUT_STEP(COORDINATES) 
130:      INTEGER :: RESNUMBER 
131:      CHARACTER(LEN=4) :: OLDRES , OLDRES1 , NEWRES , NEWRES1 
132:      CHARACTER(LEN=6) :: NMUT_STRING , STARTINDEX_STRING 
133:      CHARACTER(LEN=25) :: OPTION_STRING 
134:      DOUBLE PRECISION :: COORDINATES(3*NATOMS) 
135:   
136:      !let's store all information first in case we have to go back! 
137:      PREVIOUS_MUTATION = MUTATION_INFO 
138:      !we have a new mutation 
139:      NMUTATION = NMUTATION + 1 
140:      WRITE(NMUT_STRING,'(I6)') NMUTATION - 1  
141:      !before we do anything, we save the old lowest minima 
142:      CALL AMBERMUT_CURR_LOWEST() 
143:      !select a residue to mutate 
144:      CALL SELECT_MUTATION(RESNUMBER , OLDRES1 , NEWRES1) 
145:      !if it is a terminal residue, we need to go for a different set of atoms and coordinates in the coordinate creation script 
146:      IF (TERMINI_RES(RESNUMBER).EQ.1) THEN 
147:         OLDRES = "C" // OLDRES1 
148:         NEWRES = "C" // NEWRES1 
149:      ELSE IF (TERMINI_RES(RESNUMBER).EQ.2) THEN 
150:         OLDRES = "N" // OLDRES1 
151:         NEWRES = "N" // NEWRES1 
152:      ELSE 
153:         OLDRES = OLDRES1 
154:         NEWRES = NEWRES1 
155:      ENDIF                 
156:      WRITE(MUTUNIT,'(A,I6,4A)') 'Mutate residue ' , RESNUMBER , ' from ' , OLDRES , ' to ' , NEWRES 
157:      WRITE(STARTINDEX_STRING,'(I6)') AMBER12_RESSTART(RESNUMBER) 
158:  
159:      !dump the coordinates for the old residue, and move things to safety 
160:      CALL DUMP_RESIDUE_COORDS(RESNUMBER , COORDINATES) 
161:      CALL SYSTEM('mv coords.prmtop coords.prmtop.'//TRIM(ADJUSTL(NMUT_STRING))) 
162:      CALL SYSTEM('mv coords.inpcrd coords.inpcrd.'//TRIM(ADJUSTL(NMUT_STRING))) 
163:      CALL SYSTEM('mv start start.'//TRIM(ADJUSTL(NMUT_STRING))) 
164:      CALL SYSTEM('mv atomgroups atomgroups.'//TRIM(ADJUSTL(NMUT_STRING))) 
165:      !create mutated coordinates and a new perm.allow file 
166:      OPTION_STRING=OLDRES//' '//NEWRES//' '//STARTINDEX_STRING 
167: #ifdef _SVN_ROOT_ 
168:      CALL SYSTEM('python '//_SVN_ROOT_//'/SCRIPTS/AMBER/BHmutation_steps/mutate_aa.py '//OLDRES//' '//NEWRES) 
169:      CALL SYSTEM('python '//_SVN_ROOT_//'/SCRIPTS/AMBER/BHmutation_steps/perm_allow.py '//OPTION_STRING) 
170: #else 
171:      CALL SYSTEM('python ' // mutation_script // OLDRES // ' ' // NEWRES ) 
172:      CALL SYSTEM('python ' // perm_allow_script //OPTION_STRING) 
173: #endif 
174:      CALL SYSTEM('mv perm.allow perm.allow.'//TRIM(ADJUSTL(NMUT_STRING))) 
175:      CALL SYSTEM('mv perm.allow.new perm.allow') 
176:      !create a new topology, update the residue information and adjust coordinates for unchanged residues 
177:      CALL CREATE_NEW_TOPOLOGY(RESNUMBER ,  NEWRES , COORDS) 
178:      !create new atom groups 
179: #ifdef _SVN_ROOT_ 
180:      CALL SYSTEM('python ' // _SVN_ROOT_ // '/SCRIPTS/AMBER/BHmutation_steps/grouprotations.py tmp.pdb') 
181: #else 
182:      CALL SYSTEM('python ' // grouprotation_script // ' tmp.pdb') 
183: #endif 
184:      CALL SYSTEM('rm tmp.pdb') 
185:      !finally reinitialise AMBER with new groups, coordinates and topology 
186:      CALL REINITIALISE_AMBER() 
187:      !now remove old chiral states used for checking (the rest is done when we initialise the chirality in mc.F) 
188:      CALL DEALLOC_STATES_MUTATION() 
189:      RETURN 
190:   END SUBROUTINE AMBERMUT_STEP 
191:  
192:   SUBROUTINE SELECT_MUTATION(RESNUMBER , OLDRES , NEWRES) 
193:      INTEGER , INTENT(OUT) :: RESNUMBER 
194:      CHARACTER(LEN=4) , INTENT(OUT) :: OLDRES , NEWRES  
195:      CHARACTER(LEN=4) :: SELECTED_MUT 
196:      INTEGER :: ENTRIES , NCURR , J1 , SELECTED_ID , SELECTED_RES 
197:      DOUBLE PRECISION :: PROB_RES_SELECT(NRESMUT,2) , NMUTATED , PROB , PROBTOT , RANDOM, DPRAND 
198:      DOUBLE PRECISION , ALLOCATABLE :: PROB_MUT_SELECT(:,:) 
199:      !create probability array to select residue id 
200:      NMUTATED = 0.0 
201:      DO J1 = 1,NRESMUT 
202:         !We take the number of previous mutations plus 1 (otherwise we are at zeros to start with ...) 
203:         NMUTATED = NMUTATED + 1.0/((MUTATION_INFO(J1)%NMUTATIONS) + 1) 
204:      ENDDO 
205:      DO J1 = 1,NRESMUT 
206:         PROB = 1.0/(NMUTATED * ((MUTATION_INFO(J1)%NMUTATIONS) + 1)) 
207:         IF (J1.EQ.1) THEN 
208:            !for the first choice we go from zero to prob 
209:            PROB_RES_SELECT(J1,1) = 0.0 
210:            PROB_RES_SELECT(J1,2) = PROB 
211:         ELSE IF (J1.LT.NRESMUT) THEN 
212:            !then we go in intervalls 
213:            PROB_RES_SELECT(J1,1) = PROB_RES_SELECT((J1-1),2) 
214:            PROB_RES_SELECT(J1,2) = PROB_RES_SELECT(J1,1) + PROB 
215:         ELSE 
216:            !finally making sure the array stretches to 1.0 
217:            PROB_RES_SELECT(J1,1) = PROB_RES_SELECT((J1-1),2) 
218:            PROB_RES_SELECT(J1,2) = 1.0 
219:         ENDIF 
220:      ENDDO 
221:      !select residue 
222:      RANDOM=DPRAND() 
223:      DO J1 = 1,NRESMUT 
224:         IF ((PROB_RES_SELECT(J1,1).LT.RANDOM).AND.(RANDOM.LE.PROB_RES_SELECT(J1,2))) THEN 
225:            SELECTED_RES = MUTATION_INFO(J1) % RESNUM 
226:            SELECTED_ID = J1 
227:            WRITE(MYUNIT,'(A,I6)') ' ambermut> Selected residue for mutation: ' , SELECTED_RES 
228:            GOTO 20 
229:         ENDIF 
230:      ENDDO 
231:      !independent of whether we accept or reject the mutation attempt later, we store that it has occured 
232: 20   CONTINUE 
233:      MUTATION_INFO(J1)%NMUTATIONS = (MUTATION_INFO(J1)%NMUTATIONS)+1 
234:      PREVIOUS_MUTATION(J1)%NMUTATIONS = (PREVIOUS_MUTATION(J1)%NMUTATIONS)+1  
235:  
236:      !create normalisation for probabilities, same procedure as for the residue 
237:      ENTRIES = MUTATION_INFO(SELECTED_ID)%NENTRIES 
238:      IF (ALLOCATED(PROB_MUT_SELECT)) DEALLOCATE(PROB_MUT_SELECT) 
239:      ALLOCATE(PROB_MUT_SELECT(ENTRIES,2)) 
240:      PROB_MUT_SELECT(:,:) = 0.0D0 
241:      PROBTOT = 0.0 
242:      DO J1 = 1,ENTRIES 
243:         IF (.NOT.((MUTATION_INFO(SELECTED_ID)%CURRENT_RES).EQ.(MUTATION_INFO(SELECTED_ID)%RESCHOICE(J1)))) THEN 
244:            PROBTOT = PROBTOT + MUTATION_INFO(SELECTED_ID)%PROBABILITIES(J1) 
245:         ELSE 
246:            NCURR = J1 
247:         ENDIF 
248:      ENDDO 
249:      !create probabilities (making sure we actually mutate) 
250:      DO J1 = 1,ENTRIES 
251:         PROB = (MUTATION_INFO(SELECTED_ID)%PROBABILITIES(J1))/PROBTOT 
252:         IF (J1.EQ.1) THEN 
253:            PROB_MUT_SELECT(J1,1) = 0.0 
254:            IF (J1.EQ.NCURR) THEN 
255:               PROB_MUT_SELECT(J1,2) = 0.0 
256:            ELSE 
257:               PROB_MUT_SELECT(J1,2) = PROB 
258:            ENDIF 
259:         ELSE IF (J1.LT.ENTRIES) THEN 
260:            PROB_MUT_SELECT(J1,1) = PROB_MUT_SELECT((J1-1),2) 
261:            IF (J1.EQ.NCURR) THEN 
262:               PROB_MUT_SELECT(J1,2) = PROB_MUT_SELECT(J1,1) 
263:            ELSE 
264:               PROB_MUT_SELECT(J1,2) = PROB_MUT_SELECT(J1,1) + PROB 
265:            ENDIF 
266:         ELSE 
267:            IF (J1.EQ.NCURR) THEN 
268:               PROB_MUT_SELECT(J1,1) = 1.0 
269:               PROB_MUT_SELECT(J1-1,2) = 1.0 
270:            ELSE 
271:               PROB_MUT_SELECT(J1,1) = PROB_MUT_SELECT(J1-1,2) 
272:            ENDIF 
273:            PROB_MUT_SELECT(J1,2) = 1.0 
274:         ENDIF 
275:      ENDDO 
276:      PROB_MUT_SELECT(NCURR,1) = -1.0 
277:      PROB_MUT_SELECT(NCURR,2) = -1.0 
278:      !select mutation 
279:      RANDOM=DPRAND() 
280:      DO J1 = 1,ENTRIES 
281:      IF ((PROB_MUT_SELECT(J1,1).LT.RANDOM).AND.(RANDOM.LE.PROB_MUT_SELECT(J1,2))) THEN 
282:            SELECTED_MUT = MUTATION_INFO(SELECTED_ID)%RESCHOICE(J1) 
283:            WRITE(MYUNIT,'(A,A)') ' ambermut> Mutate to: ' , SELECTED_MUT 
284:            GOTO 30 
285:         ENDIF 
286:      ENDDO        
287: 30   CONTINUE 
288:      !assign everything to our intent out variables 
289:      RESNUMBER = SELECTED_RES 
290:      OLDRES = MUTATION_INFO(SELECTED_ID)%CURRENT_RES 
291:      NEWRES = SELECTED_MUT   
292:      MUTATION_INFO(SELECTED_ID)%CURRENT_RES =  NEWRES 
293:   END SUBROUTINE SELECT_MUTATION 
294:  
295:   SUBROUTINE DUMP_RESIDUE_COORDS(RESNUMBER , COORD) 
296:      INTEGER , INTENT(IN) :: RESNUMBER 
297:      DOUBLE PRECISION , INTENT(IN) :: COORD(3*NATOMS) 
298:      INTEGER :: STARTATOM , NRESATOM , CUNIT , GETUNIT , J1 
299:       
300:      !simply dump the coordinates of the residue we want to mutate 
301:      STARTATOM = AMBER12_RESSTART(RESNUMBER) 
302:      NRESATOM = AMBER12_RESNATOM(RESNUMBER) 
303:      CUNIT = GETUNIT() 
304:      OPEN(UNIT=CUNIT , FILE='coords.oldres' , STATUS='NEW') 
305:      DO J1 = 1,NRESATOM 
306:         WRITE(CUNIT,'(3F20.10)') COORD(3*(STARTATOM+J1-1)-2),COORD(3*(STARTATOM+J1-1)-1),COORD(3*(STARTATOM+J1-1)) 
307:      ENDDO 
308:      CLOSE(CUNIT) 
309:   END SUBROUTINE DUMP_RESIDUE_COORDS 
310:  
311:   SUBROUTINE CREATE_NEW_TOPOLOGY(RESNUMBER , NEWRES , COORDS_OLD) 
312:      INTEGER , INTENT(IN) :: RESNUMBER 
313:      CHARACTER(LEN=4) , INTENT(IN) :: NEWRES 
314:      DOUBLE PRECISION , INTENT(IN) :: COORDS_OLD(3*NATOMS) 
315:      DOUBLE PRECISION , ALLOCATABLE :: COORDS_NEW(:) , COORDS_NEWRES(:,:) 
316:      DOUBLE PRECISION , ALLOCATABLE :: COORDS_RES(:) 
317:      INTEGER :: J1 , TUNIT , CUNIT , CUNIT2 , GETUNIT , STARTATOM , FINALATOM_OLD , FINALATOM_NEW , SHIFT  
318:      CHARACTER(LEN=4) :: RESNAMES(NRESIDUES) 
319:  
320:      TUNIT = GETUNIT() 
321:      DO J1=1,NRESIDUES 
322:         RESNAMES(J1) = AMBER12_RESNAME(J1) 
323:      ENDDO 
324:      !create a leap.in file 
325:      OPEN(TUNIT , FILE='leap.in' , STATUS='NEW') 
326:      !currently we either go for ff14SB or ff99SB 
327:      IF (AMBERMUTFF.EQ.14) THEN 
328:         WRITE(TUNIT,'(A)') 'source leaprc.ff14SB' 
329:      ELSE IF (AMBERMUTFF.EQ.99) THEN 
330:         WRITE(TUNIT,'(A)') 'source oldff/leaprc.ff99SB' 
331:      ENDIF 
332:      !make sure we use the correct adjustment of radii for the solvent model used 
333:      IF (AMBERMUTIGB.EQ.2) THEN 
334:         WRITE(TUNIT,'(A)') 'set default PBradii mbondi2' 
335:      ELSE IF (AMBERMUTIGB.EQ.8) THEN 
336:         WRITE(TUNIT,'(A)') 'set default PBradii mbondi3' 
337:      ENDIF 
338:      !write the sequence including the correct termini (all stored residues have len=3, but the newres is already adjusted to len=4!) 
339:      WRITE(TUNIT,'(A)',ADVANCE='NO') 'mol = sequence {' 
340:      DO J1=1,NRESIDUES 
341:         IF (J1.EQ.RESNUMBER) THEN 
342:            WRITE(TUNIT,'(A)',ADVANCE='NO') NEWRES // " " 
343:         ELSE IF (TERMINI_RES(J1).EQ.2) THEN 
344:            WRITE(TUNIT,'(A)',ADVANCE='NO') "C" // RESNAMES(J1) 
345:         ELSE IF (TERMINI_RES(J1).EQ.1) THEN 
346:            WRITE(TUNIT,'(A)',ADVANCE='NO') "N" // RESNAMES(J1) 
347:         ELSE 
348:            WRITE(TUNIT,'(A)',ADVANCE='NO') RESNAMES(J1) 
349:         ENDIF  
350:      ENDDO 
351:      WRITE(TUNIT,'(A)') '}' 
352:      WRITE(TUNIT,'(A)') 'saveamberparm mol coords.prmtop tmp.inpcrd' 
353:      WRITE(TUNIT,'(A)') 'savepdb mol tmp.pdb' 
354:      WRITE(TUNIT,'(A)') 'quit' 
355:      CLOSE(TUNIT) 
356:      !finished creating leap input, now run leap and get the right coordinates      
357:      CALL SYSTEM('tleap -f leap.in >> output') 
358:      !save the old information 
359:      STARTATOM = AMBER12_RESSTART(RESNUMBER) 
360:      FINALATOM_OLD = AMBER12_RESEND(RESNUMBER) 
361:      CALL TOPOLOGY_READER() 
362:      !get the changed number of atoms 
363:      FINALATOM_NEW = AMBER12_RESEND(RESNUMBER) 
364:      SHIFT = FINALATOM_NEW - FINALATOM_OLD 
365:      !correct wrong information (we havent reinitialised yet, so NATOMS is still wrong) 
366:      AMBER12_RESEND(NRESIDUES) = AMBER12_RESEND(NRESIDUES) + SHIFT 
367:      AMBER12_RESNATOM(NRESIDUES) = AMBER12_RESNATOM(NRESIDUES) + SHIFT 
368:      !create final input files needed 
369:      IF (ALLOCATED(COORDS_NEW)) DEALLOCATE(COORDS_NEW) 
370:      ALLOCATE(COORDS_NEW(3*(NATOMS+SHIFT))) 
371:      IF (ALLOCATED(COORDS_NEWRES)) DEALLOCATE(COORDS_NEWRES) 
372:      ALLOCATE(COORDS_NEWRES(AMBER12_RESNATOM(RESNUMBER),3)) 
373:      IF (ALLOCATED(COORDS_RES)) DEALLOCATE(COORDS_RES) 
374:      ALLOCATE(COORDS_RES(3*AMBER12_RESNATOM(RESNUMBER))) 
375:      !fill the new coordinates array  
376:      COORDS_NEW(:) = 0.0D0 
377:      DO J1 = 1,3*(STARTATOM-1) 
378:         COORDS_NEW(J1) = COORDS_OLD(J1) 
379:      ENDDO 
380:  
381:      CUNIT = GETUNIT() 
382:      OPEN(CUNIT , FILE='coords.newres' , STATUS='OLD') 
383:      READ(CUNIT,*) COORDS_NEWRES 
384:      COORDS_RES(:) = RESHAPE(COORDS_NEWRES,(/3*AMBER12_RESNATOM(RESNUMBER)/)) 
385:      DO J1 = 1,AMBER12_RESNATOM(RESNUMBER) 
386:         COORDS_NEW(3*(STARTATOM+(J1-1))-2) = COORDS_RES(3*J1-2) 
387:         COORDS_NEW(3*(STARTATOM+(J1-1))-1) = COORDS_RES(3*J1-1) 
388:         COORDS_NEW(3*(STARTATOM+(J1-1))) = COORDS_RES(3*J1) 
389:      ENDDO 
390: 40   CLOSE(CUNIT) 
391:     
392:      DO J1 = 1,(3*(NATOMS-FINALATOM_OLD)) 
393:         COORDS_NEW(3*FINALATOM_NEW + J1) = COORDS_OLD(3*FINALATOM_OLD + J1) 
394:      ENDDO 
395:      !we can't write to coords.inpcrd (as this is protected by the interface) 
396:      !hence we trick the program by writing it to a different name and using a system call to move it 
397:      CALL AMBER12_WRITE_RESTART_MUT(COORDS_NEW, AMBER12_RESEND(NRESIDUES),& 
398:                   &'coords.inpcrd.xxx',LEN('coords.inpcrd.xxx')) 
399:      CALL SYSTEM('mv coords.inpcrd.xxx coords.inpcrd') 
400:      CUNIT2 = GETUNIT() 
401:      !create a start file (format specifications are less strict here) 
402:      OPEN(CUNIT2 , FILE='start' , STATUS='NEW') 
403:      DO J1 = 1,NATOMS+SHIFT 
404:         WRITE(CUNIT2 , '(3f12.7)') COORDS_NEW(3*J1-2) , COORDS_NEW(3*J1-1) , COORDS_NEW(3*J1) 
405:      ENDDO 
406:      CLOSE(CUNIT2) 
407:      !finally remove the files we dont need, except if we are in DEBUG mode 
408:      IF (.NOT.DEBUG) CALL SYSTEM('rm coords.newres coords.oldres leap.in leap.log tmp.inpcrd') 
409:   END SUBROUTINE CREATE_NEW_TOPOLOGY 
410:  
411:   SUBROUTINE REINITIALISE_AMBER() 
412:         INTEGER :: NUMBER_OF_ATOMS , J1 
413:         CHARACTER(LEN=20) OSTRING 
414:         DOUBLE PRECISION , ALLOCATABLE :: COORDS1(:) 
415:  
416:         !first of all we close all open AMBER files, deallocate all internal arrays, and remove traces from the previous initialisation 
417:         CALL AMBER12_MUT_FINISH() 
418:         !new number of atoms and amber setup 
419:         NUMBER_OF_ATOMS=AMBER12_RESEND(NRESIDUES) 
420:         WRITE(OSTRING,'(A)') 'coords.inpcrd' 
421:         !reinitialise AMBER with the new information 
422:         CALL AMBER12_SETUP(NUMBER_OF_ATOMS, OSTRING, LEN(OSTRING)) 
423:         NATOMS = NUMBER_OF_ATOMS 
424:         NATOMSALLOC = NUMBER_OF_ATOMS 
425:         WRITE(MYUNIT,'(A,I8)') ' ambermut> new number of atoms: ',NATOMS 
426:         !new coordinates 
427:         IF(ALLOCATED(COORDS1)) DEALLOCATE(COORDS1) 
428:         ALLOCATE(COORDS1(3*NATOMS)) 
429:         IF(ALLOCATED(COORDS)) DEALLOCATE(COORDS) 
430:         ! Read the coords from AMBER12 into COORDS1(:) 
431:         CALL AMBER12_GET_COORDS(NATOMS, COORDS1(:)) 
432:         ALLOCATE(COORDS(3*NATOMS,NPAR)) 
433:         DO J1=1,NPAR 
434:            COORDS(:,J1) = COORDS1(:) 
435:         END DO 
436:         !setup the new group rotation information 
437:         CALL MUT_SETUP_GROUPROTATION(1,.FALSE.,.FALSE.,0) 
438:         !deallocate, reallocate and initialise a bunch of globals that we need to reset 
439:         DEALLOCATE(QMINP) 
440:         ALLOCATE(QMINP(NSAVE,3*NATOMS)) 
441:         DEALLOCATE(QMINT) 
442:         ALLOCATE(QMINT(NSAVE,NATOMS)) 
443:         DEALLOCATE(COORDSO) 
444:         ALLOCATE(COORDSO(3*NATOMS,NPAR)) 
445:         DEALLOCATE(VT) 
446:         ALLOCATE(VT(NATOMS)) 
447:         DEALLOCATE(VAT) 
448:         ALLOCATE(VAT(NATOMS,NPAR)) 
449:         DEALLOCATE(VATO) 
450:         ALLOCATE(VATO(NATOMS,NPAR)) 
451:         DEALLOCATE(LABELS) 
452:         ALLOCATE(LABELS(NATOMS,NPAR)) 
453:         DEALLOCATE(LABELSO) 
454:         ALLOCATE(LABELSO(NATOMS,NPAR)) 
455:         QMINP(1:NSAVE,1:3*NATOMS)=0.0D0 ! to prevent reading from uninitialised memory 
456:         QMINT(1:NSAVE,1:NATOMS)=1 ! to prevent reading from uninitialised memory 
457:         QMINNATOMS(1:NSAVE)=NATOMS ! to prevent reading from uninitialised memory 
458:         COORDSO(1:3*NATOMS,1:NPAR)=0.0D0 
459:         VT(1:NATOMS)=0.0D0 
460:         VAT(1:NATOMS,1:NPAR)=0.0D0 
461:         DO J1=1,NSAVE 
462:            QMIN(J1)=1.0D10 
463:            NPCALL_QMIN(J1)=0 
464:         ENDDO 
465:   END SUBROUTINE REINITIALISE_AMBER 
466:  
467:   SUBROUTINE REVERSE_MUTATION() 
468:      CHARACTER(LEN=6) :: NMUT_STRING      
469:       
470:      !reload the correct information into MUTATION_INFO 
471:      MUTATION_INFO = PREVIOUS_MUTATION  
472:      WRITE(NMUT_STRING,'(I6)') NMUTATION - 1 
473:      !move all the files we need back into place (we use the lowest previous minimum to restart) 
474:      CALL SYSTEM('cp coords.prmtop.'//TRIM(ADJUSTL(NMUT_STRING))//' coords.prmtop') 
475:      CALL SYSTEM('cp coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.1.rst coords.inpcrd') 
476:      CALL SYSTEM('cp start.'//TRIM(ADJUSTL(NMUT_STRING))//' start')  !this one is the wrong file? 
477:      CALL SYSTEM('cp atomgroups.'//TRIM(ADJUSTL(NMUT_STRING))//' ambergroups') 
478:      CALL SYSTEM('cp perm.allow.'//TRIM(ADJUSTL(NMUT_STRING))//' perm.allow') 
479:      !now reinitialise once more 
480:      CALL REINITIALISE_AMBER() 
481:   END SUBROUTINE REVERSE_MUTATION 
482:  
483:   !scoring function to judge how good mutation is 
484:   SUBROUTINE MUTATION_E(SCORE,COORDS) 
485:      DOUBLE PRECISION, INTENT(OUT) :: SCORE 
486:      DOUBLE PRECISION, INTENT(IN) :: COORDS(3*NATOMS)      
487:      DOUBLE PRECISION :: DPRAND 
488:     
489:      SCORE=DPRAND() 
490:   END SUBROUTINE MUTATION_E 
491:  
492:   SUBROUTINE AMBERMUT_CURR_LOWEST() 
493:      CHARACTER(LEN=6) :: J1_STRING, NMUT_STRING 
494:      INTEGER :: J1     
495:   
496:      !to save the previous best strutures  
497:      DO J1=1,NSAVE 
498:         WRITE(J1_STRING,'(I6)') J1 
499:         WRITE(NMUT_STRING,'(I6)') NMUTATION - 1 
500:         CALL AMBER12_WRITE_RESTART(QMINP(J1,:), 'coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//& 
501:                    &TRIM(ADJUSTL(J1_STRING))//'.rst', & 
502:                    & LEN('coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//TRIM(ADJUSTL(J1_STRING))//'.rst')) 
503:         CALL AMBER12_WRITE_PDB(QMINP(J1,:), 'coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//& 
504:                    &TRIM(ADJUSTL(J1_STRING))//'.pdb', & 
505:                    & LEN('coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//TRIM(ADJUSTL(J1_STRING))//'.pdb')) 
506:      ENDDO 
507:   END SUBROUTINE AMBERMUT_CURR_LOWEST 
508:    
509:   !tidy up after run is complete 
510:   SUBROUTINE FINISH_AMBERMUT() 
511:      CHARACTER(LEN=6) :: J1_STRING, NMUT_STRING 
512:      INTEGER :: J1     
513:   
514:      !to save the previous best strutures  
515:      DO J1=1,NSAVE 
516:         WRITE(J1_STRING,'(I6)') J1 
517:         WRITE(NMUT_STRING,'(I6)') NMUTATION 
518:         CALL AMBER12_WRITE_RESTART(QMINP(J1,:), 'coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//& 
519:                    &TRIM(ADJUSTL(J1_STRING))//'.rst', & 
520:                    & LEN('coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//TRIM(ADJUSTL(J1_STRING))//'.rst')) 
521:         CALL AMBER12_WRITE_PDB(QMINP(J1,:), 'coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//& 
522:                    &TRIM(ADJUSTL(J1_STRING))//'.pdb', & 
523:                    & LEN('coords.'//TRIM(ADJUSTL(NMUT_STRING))//'.'//TRIM(ADJUSTL(J1_STRING))//'.pdb')) 
524:      ENDDO 
525:  
526:      IF (ALLOCATED(AMBER12_RESNAME)) DEALLOCATE(AMBER12_RESNAME) 
527:      IF (ALLOCATED(AMBER12_RESSTART)) DEALLOCATE(AMBER12_RESSTART) 
528:      IF (ALLOCATED(AMBER12_RESEND)) DEALLOCATE(AMBER12_RESEND) 
529:      IF (ALLOCATED(AMBER12_RESNATOM)) DEALLOCATE(AMBER12_RESNATOM) 
530:      IF (ALLOCATED(TERMINI_RES)) DEALLOCATE(TERMINI_RES) 
531:      IF (ALLOCATED(MUTATION_INFO)) DEALLOCATE(MUTATION_INFO) 
532:      IF (ALLOCATED(PREVIOUS_MUTATION)) DEALLOCATE(PREVIOUS_MUTATION) 
533:      CLOSE(MUTUNIT) 
534:   END SUBROUTINE FINISH_AMBERMUT 
535:  
536:  
537:   SUBROUTINE MUT_SETUP_GROUPROTATION(GROUPROTFREQ,GR_SCALEROT,GR_SCALEPROB,GROUPOFFSET) 
538:      INTEGER, INTENT(IN) :: GROUPROTFREQ , GROUPOFFSET 
539:      LOGICAL, INTENT(IN) :: GR_SCALEROT , GR_SCALEPROB 
540:      INTEGER ::  GROUPSIZE , GROUPATOM , AXIS1 , AXIS2 , IOSTATUS, J1,J2 
541:      CHARACTER(LEN=10) :: CHECK1 
542:      LOGICAL :: YESNO 
543:  
544:      !check we actually have a grouprotation file! 
545:      YESNO=.FALSE. 
546:      INQUIRE(FILE='atomgroups',EXIST=YESNO) 
547:      IF (YESNO) THEN 
548:         GROUPROTT=.TRUE. 
549:         WRITE(MYUNIT,'(A)') ' ambermut> AMBER group rotation moves enabled for new sequence' 
550:      ELSE 
551:         WRITE(MYUNIT,'(A)') ' keyword> ERROR: atom groups must be defined in atomgroups file' 
552:         STOP 
553:      ENDIF 
554:      !check the grouprotation frequency 
555:      IF(GROUPROTFREQ.EQ.0) THEN 
556:         GROUPROTT=.FALSE. 
557:         WRITE(MYUNIT,'(A)') ' keyword> WARNING: frequency of GROUPROTATION moves set to 0 - moves DISABLED!' 
558:      ENDIF 
559:      !kr366> copy ffrom keywords.f 
560:      !csw34> Figure out how many atom groups have been defined 
561:      NGROUPS=0 
562:      OPEN(UNIT=222,FILE='atomgroups',status='old') 
563:      DO 
564:         READ(222,*,IOSTAT=iostatus) CHECK1 
565:         IF (iostatus<0) THEN 
566:            CLOSE(222) 
567:            EXIT 
568:         ELSE IF (TRIM(ADJUSTL(check1)).EQ.'GROUP') then 
569:            NGROUPS=NGROUPS+1 
570:         ENDIF 
571:      END DO 
572:      CLOSE(222) 
573:      !DEALLOCATE old arrays first 
574:      DEALLOCATE(ATOMGROUPNAMES) 
575:      DEALLOCATE(ATOMGROUPAXIS) 
576:      DEALLOCATE(ATOMGROUPPSELECT) 
577:      DEALLOCATE(ATOMGROUPSCALING) 
578:      DEALLOCATE(ATOMGROUPS) 
579:      !Allocate atom group info arrays appropriately 
580:      ALLOCATE(ATOMGROUPNAMES(NGROUPS)) 
581:      ALLOCATE(ATOMGROUPAXIS(NGROUPS,2)) 
582:      ALLOCATE(ATOMGROUPPSELECT(NGROUPS)) 
583:      ALLOCATE(ATOMGROUPSCALING(NGROUPS)) 
584:      ALLOCATE(ATOMGROUPS(NGROUPS,NATOMSALLOC)) 
585:      !Set safe defaults 
586:      ATOMGROUPS(:,:)=.FALSE. 
587:      ATOMGROUPNAMES(:)='EMPTY' 
588:      ATOMGROUPAXIS(:,:)=0 
589:      ATOMGROUPSCALING(:)=1.0D0 
590:      ATOMGROUPPSELECT(:)=1.0D0 
591:      ! Read in group info 
592:      ! Here is an example entry: 
593:      ! GROUP OME 6 5 4 1.0 
594:      ! 1 
595:      ! 2 
596:      ! 3 
597:      ! 4 
598:      ! This says that group OME is to be rotated about the bond from atom 6->5. 
599:      ! There are 4 atoms in the OME group. Rotations of -pi->+pi are to be scaled by 1.0. 
600:      ! Finally, the group members are specified one per line 
601:      OPEN(UNIT=222,FILE='atomgroups',status='unknown') 
602:      WRITE(MYUNIT,*) 'keyword> Reading in atom groups for GROUPROTATION' 
603:      IF(GROUPOFFSET.NE.0) WRITE(MYUNIT,*) 'keyword> Group atom numbering offset by ',GROUPOFFSET 
604:      DO J1=1,NGROUPS 
605:         READ(222,*) CHECK1,ATOMGROUPNAMES(J1),AXIS1,AXIS2,GROUPSIZE,ATOMGROUPSCALING(J1),& 
606:      &                ATOMGROUPPSELECT(J1) 
607:         ATOMGROUPAXIS(J1,1)=AXIS1+GROUPOFFSET 
608:         ATOMGROUPAXIS(J1,2)=AXIS2+GROUPOFFSET 
609:         CALL FLUSH(MYUNIT) 
610:         IF (TRIM(ADJUSTL(CHECK1)).EQ.'GROUP') THEN 
611:            DO J2=1,GROUPSIZE 
612:               READ(222,*) GROUPATOM 
613:               IF(GROUPOFFSET.GT.0) GROUPATOM=GROUPATOM+GROUPOFFSET 
614:               !add bound checks 
615:               IF (GROUPATOM > NATOMSALLOC) THEN 
616:                 WRITE(MYUNIT,'(A)') 'ambermut> ERROR! GROUPATOM > NATOMSALLOC' 
617:               ENDIF 
618:               ATOMGROUPS(J1,GROUPATOM)=.TRUE. 
619:            END DO 
620:         ELSE 
621:            WRITE(MYUNIT,'(A)') ' keyword: ERROR! Group file not formatted correctly!' 
622:            STOP 
623:         ENDIF 
624:         WRITE(MYUNIT,'(3A)') '<GROUP ',TRIM(ADJUSTL(ATOMGROUPNAMES(J1))),'>' 
625:         WRITE(MYUNIT,'(A,I3)') 'Index: ',J1 
626:         WRITE(MYUNIT,'(A,I4)') 'Size: ',GROUPSIZE 
627:         WRITE(MYUNIT,'(A,2I6)') 'Atoms defining axis: ',ATOMGROUPAXIS(J1,1),ATOMGROUPAXIS(J1,2) 
628:         WRITE(MYUNIT,'(A,F5.2)') 'Rotation scaling: ',ATOMGROUPSCALING(J1) 
629:         WRITE(MYUNIT,'(A,F5.4)') 'Selection probablity: ',ATOMGROUPPSELECT(J1) 
630:         WRITE(MYUNIT,'(A)') 'Members:' 
631:         DO J2=1,NATOMSALLOC 
632:            IF(ATOMGROUPS(J1,J2)) WRITE(MYUNIT,*) J2 
633:         ENDDO 
634:      ENDDO 
635:      CLOSE(222) 
636:   END SUBROUTINE MUT_SETUP_GROUPROTATION  
637:  
638:   SUBROUTINE TOPOLOGY_READER() 
639:  
640:      IMPLICIT NONE 
641:      CHARACTER(200) ENTRY_ 
642:      INTEGER :: MYUNIT2,GETUNIT 
643:      INTEGER :: HENTRIES,J3,J4,NDUMMY 
644:      INTEGER , PARAMETER :: NWORDS=20 
645:      CHARACTER(25) :: ENTRIES(NWORDS)='' 
646:      CHARACTER(LEN=4) :: WORD 
647:  
648:      MYUNIT2=GETUNIT() 
649:      OPEN(MYUNIT2,FILE='coords.prmtop',STATUS='OLD') 
650:      reading:DO 
651: 98      ENTRIES(:)='' 
652:         READ(MYUNIT2,'(A)',END=99) ENTRY_ 
653:         CALL READ_LINE(ENTRY_,NWORDS,ENTRIES)      !get all words in line 
654:         IF (ENTRIES(2).EQ.'POINTERS') THEN        !get number of residues here 
655:            READ(MYUNIT2,*)                          !ignore format identifier after flag 
656:            READ(MYUNIT2,*)                          !ignore first line, no information we need in here 
657:            READ(MYUNIT2,'(A)',END=99) ENTRY_ 
658:            ENTRIES(:)='' 
659:            CALL READ_LINE(ENTRY_,NWORDS,ENTRIES) 
660:            READ(ENTRIES(2),'(I8)') NRESIDUES 
661:            WRITE(MYUNIT,'(A,I8)') 'ambermut> reading topology - Number of residues:' , NRESIDUES 
662:            IF (ALLOCATED(AMBER12_RESNAME)) DEALLOCATE(AMBER12_RESNAME) 
663:            ALLOCATE(AMBER12_RESNAME(NRESIDUES)) 
664:            AMBER12_RESNAME(:) = "    " 
665:            IF (ALLOCATED(AMBER12_RESSTART)) DEALLOCATE(AMBER12_RESSTART) 
666:            ALLOCATE(AMBER12_RESSTART(NRESIDUES)) 
667:            AMBER12_RESSTART(:) = 0 
668:            IF (ALLOCATED(AMBER12_RESEND)) DEALLOCATE(AMBER12_RESEND) 
669:            ALLOCATE(AMBER12_RESEND(NRESIDUES)) 
670:            AMBER12_RESEND(:) = 0 
671:            IF (ALLOCATED(AMBER12_RESNATOM)) DEALLOCATE(AMBER12_RESNATOM) 
672:            ALLOCATE(AMBER12_RESNATOM(NRESIDUES)) 
673:            AMBER12_RESNATOM(:) = 0 
674:         ENDIF 
675:         IF (ENTRIES(2).EQ. 'RESIDUE_LABEL') THEN 
676:            READ(MYUNIT2,*)                        !ignore format identifier after flag 
677:            IF (MOD(NRESIDUES,20).EQ.0) THEN       !get the number of lines (20 entries per line!) 
678:               HENTRIES=NRESIDUES/20 
679:            ELSE 
680:               HENTRIES=NRESIDUES/20 + 1 
681:            ENDIF 
682:            !We leave th complication of terminal residues out here and take care of it in the atom mapping when taking a step  
683:            NDUMMY=1 
684:            DO J3=1,HENTRIES                             !go through all lines 
685:               READ(MYUNIT2,'(A)',END=99) ENTRY_               !read line 
686:               ENTRIES(:)='' 
687:               CALL READ_LINE(ENTRY_,NWORDS,ENTRIES) 
688:               J4=1 
689:               DO WHILE(J4.LE.20) 
690:                  IF (NDUMMY.LE.NRESIDUES) THEN 
691:                     WORD = ENTRIES(J4)(1:3) 
692:                     AMBER12_RESNAME(NDUMMY) = WORD 
693:                     NDUMMY = NDUMMY + 1 
694:                  ELSE 
695:                     GOTO 98 
696:                  ENDIF 
697:                  J4=J4+1 
698:               ENDDO 
699:            ENDDO 
700:         ENDIF 
701:         IF (ENTRIES(2).EQ. 'RESIDUE_POINTER') THEN 
702:            READ(MYUNIT2,*)                             !ignore format identifier after flag 
703:            IF (MOD(NRESIDUES,10).EQ.0) THEN       !get the number of lines (10 entries per line!) 
704:               HENTRIES=NRESIDUES/10 
705:            ELSE 
706:               HENTRIES=NRESIDUES/10 + 1 
707:            ENDIF 
708:            NDUMMY=1 
709:            DO J3=1,HENTRIES                             !go through all lines 
710:               READ(MYUNIT2,'(A)',END=99) ENTRY_               !read line 
711:               CALL READ_LINE(ENTRY_,NWORDS,ENTRIES) 
712:               J4=1 
713:               DO WHILE(J4.LE.10) 
714:                  IF (NDUMMY.LE.NRESIDUES) THEN 
715:                     READ(ENTRIES(J4),'(I8)') AMBER12_RESSTART(NDUMMY) 
716:                     NDUMMY = NDUMMY + 1 
717:                  ELSE 
718:                     GOTO 98 
719:                  ENDIF 
720:                  J4=J4+1 
721:               ENDDO 
722:            ENDDO 
723:         ENDIF 
724:      ENDDO reading 
725: 99   CLOSE(MYUNIT2) 
726:      DO J4=1,NRESIDUES-1 
727:         AMBER12_RESEND(J4) = AMBER12_RESSTART(J4+1) - 1 
728:         AMBER12_RESNATOM(J4) = AMBER12_RESEND(J4) - AMBER12_RESSTART(J4) + 1 
729:      ENDDO 
730:      AMBER12_RESEND(NRESIDUES) = NATOMS 
731:      AMBER12_RESNATOM(NRESIDUES) = AMBER12_RESEND(NRESIDUES) - AMBER12_RESSTART(NRESIDUES) + 1 
732:      IF (DEBUG) THEN 
733:         WRITE(MUTUNIT,'(A)') 'Residue names, start index, end index and number of atoms' 
734:         WRITE(MUTUNIT,*) AMBER12_RESNAME 
735:         WRITE(MUTUNIT,*) AMBER12_RESSTART 
736:         WRITE(MUTUNIT,*) AMBER12_RESEND 
737:         WRITE(MUTUNIT,*) AMBER12_RESNATOM 
738:     ENDIF 
739:   END SUBROUTINE TOPOLOGY_READER 
740:    
741:   SUBROUTINE READ_LINE(LINE,NWORDS,WORDSOUT) 
742:       CHARACTER(*), INTENT(IN) :: LINE 
743:       INTEGER, INTENT(IN) :: NWORDS 
744:       CHARACTER(*), DIMENSION(NWORDS), INTENT(OUT) :: WORDSOUT 
745:       INTEGER:: J1,START_IND,END_IND,J2 
746:       CHARACTER(25) :: WORD 
747:       START_IND=0 
748:       END_IND=0 
749:       J1=1 
750:       J2=0 
751:       DO WHILE(J1.LE.LEN(LINE)) 
752:           IF ((START_IND.EQ.0).AND.(LINE(J1:J1).NE.' ')) THEN 
753:              START_IND=J1 
754:           ENDIF 
755:           IF (START_IND.GT.0) THEN 
756:              IF (LINE(J1:J1).EQ.' ') END_IND=J1-1 
757:              IF (J1.EQ.LEN(LINE)) END_IND=J1 
758:              IF (END_IND.GT.0) THEN 
759:                 J2=J2+1 
760:                 WORD=LINE(START_IND:END_IND) 
761:                 WORDSOUT(J2)=TRIM(WORD) 
762:                 START_IND=0 
763:                 END_IND=0 
764:              ENDIF 
765:           ENDIF 
766:           J1=J1+1 
767:       ENDDO 
768:   END SUBROUTINE READ_LINE 
769:  
770: END MODULE AMBER12_MUTATIONS 


r33110/amino_acids.py 2017-08-03 17:31:02.259648134 +0100 r33109/amino_acids.py 2017-08-03 17:31:11.475770889 +0100
  1: atomdata = dict()  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/amino_acids.py' in revision 33109
  2: bonddata = dict() 
  3:  
  4: atomdata['ALA'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
  5:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
  6:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB1" , "H" , "H"] , 
  7:                    [7 , "HB2" , "H" , "H"] , [8 , "HB3" , "H" , "H"] , 
  8:                    [9 , "C" , "C" , "sp2"] , [10 , "O" , "O" , "sp2" ]] 
  9: bonddata['ALA'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,9) , (5,6) , (5,7) ,  
 10:                    (5,8) , (9,10)] 
 11:                     
 12: atomdata['CALA'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
 13:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
 14:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB1" , "H" , "H"] , 
 15:                    [7 , "HB2" , "H" , "H"] , [8 , "HB3" , "H" , "H"] , 
 16:                    [9 , "C" , "C" , "sp2"] , [10 , "O" , "O" , "sp2" ], 
 17:                    [11 , "OXT" , "O" , "sp2"]] 
 18: bonddata['CALA'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,9) , (5,6) , (5,7) ,  
 19:                    (5,8) , (9,10) , (9,11)] 
 20:  
 21: atomdata['NALA'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
 22:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
 23:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
 24:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB1" , "H" , "H"] , 
 25:                    [9 , "HB2" , "H" , "H"] , [10 , "HB3" , "H" , "H"] , 
 26:                    [11 , "C" , "C" , "sp2"] , [12 , "O" , "O" , "sp2" ]] 
 27: bonddata['NALA'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,11) ,  
 28:                     (7,8) , (7,9) , (7,10) , (11,12)]                    
 29:  
 30: atomdata['ARG'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
 31:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
 32:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
 33:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
 34:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
 35:                    [11 , "CD" , "C" , "sp3"] , [12 , "HD2" , "H" , "H"] , 
 36:                    [13 , "HD3" , "H" , "H"] , [14 , "NE" , "N" , "sp3"] , 
 37:                    [15 , "HE" , "H" , "H"] , [16 , "CZ" , "C" , "sp2"] , 
 38:                    [17 , "NH1" , "N" , "sp2"] , [18 , "HH11" , "H" , "H"] ,  
 39:                    [19 , "HH12" , "H" , "H"] , [20 , "NH2" , "N" , "sp2"] , 
 40:                    [21 , "HH21" , "H" , "H"] , [22 , "HH22" , "H" , "H"] , 
 41:                    [23 , "C" , "C" , "sp2"] , [24 , "O" , "O" , "sp2" ]] 
 42: bonddata['ARG']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,23) , (5,6) , (5,7) ,  
 43:                   (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) , (11,14), 
 44:                   (14,15) , (14,16) , (16,17) , (16,20) , (17,18) , (17,19), 
 45:                   (20,21) , (20,22) , (23,24)] 
 46:  
 47: atomdata['CARG'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
 48:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
 49:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
 50:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
 51:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
 52:                    [11 , "CD" , "C" , "sp3"] , [12 , "HD2" , "H" , "H"] , 
 53:                    [13 , "HD3" , "H" , "H"] , [14 , "NE" , "N" , "sp3"] , 
 54:                    [15 , "HE" , "H" , "H"] , [16 , "CZ" , "C" , "sp2"] , 
 55:                    [17 , "NH1" , "N" , "sp2"] , [18 , "HH11" , "H" , "H"] ,  
 56:                    [19 , "HH12" , "H" , "H"] , [20 , "NH2" , "N" , "sp2"] , 
 57:                    [21 , "HH21" , "H" , "H"] , [22 , "HH22" , "H" , "H"] , 
 58:                    [23 , "C" , "C" , "sp2"] , [24 , "O" , "O" , "sp2" ], 
 59:                    [25 , "OXT" , "O" , "sp2"]] 
 60: bonddata['CARG']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,23) , (5,6) , (5,7) ,  
 61:                   (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) , (11,14), 
 62:                   (14,15) , (14,16) , (16,17) , (16,20) , (17,18) , (17,19), 
 63:                   (20,21) , (20,22) , (23,24) , (23,25)] 
 64:  
 65: atomdata['NARG'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
 66:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
 67:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
 68:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
 69:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp3"] , 
 70:                    [11 , "HG2" , "H" , "H"] , [12 , "HG3" , "H" , "H"] , 
 71:                    [13 , "CD" , "C" , "sp3"] , [14 , "HD2" , "H" , "H"] , 
 72:                    [15 , "HD3" , "H" , "H"] , [16 , "NE" , "N" , "sp3"] , 
 73:                    [17 , "HE" , "H" , "H"] , [18 , "CZ" , "C" , "sp2"] , 
 74:                    [19 , "NH1" , "N" , "sp2"] , [20 , "HH11" , "H" , "H"] ,  
 75:                    [21 , "HH12" , "H" , "H"] , [22 , "NH2" , "N" , "sp2"] , 
 76:                    [23 , "HH21" , "H" , "H"] , [24 , "HH22" , "H" , "H"] , 
 77:                    [25 , "C" , "C" , "sp2"] , [26 , "O" , "O" , "sp2" ]] 
 78: bonddata['NARG']=[(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,25) , (7,8) , (7,9) ,  
 79:                   (7,10) , (10,11) , (10,12) , (10,13) , (13,14) , (13,15) , (13,16), 
 80:                   (16,17) , (16,18) , (18,19) , (18,22) , (19,20) , (19,21), 
 81:                   (22,23) , (22,24) , (25,26)] 
 82:  
 83: atomdata['ASH'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
 84:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
 85:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
 86:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
 87:                    [9 , "OD1" , "O" , "sp2"] , [10 , "OD2" , "O" , "sp3"] , 
 88:                    [11 , "HD2" , "H" , "H"] , [12 , "C" , "C" , "sp2"] , 
 89:                    [13 , "O" , "O" , "sp2" ]] 
 90: bonddata['ASH'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,12) , (5,6) , (5,7) ,  
 91:                    (5,8) , (8,9) , (8,10) , (10,11) , (12,13)] 
 92:                    
 93: atomdata['ASN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
 94:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
 95:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
 96:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
 97:                    [9 , "OD1" , "O" , "sp2"] , [10 , "ND2" , "N" , "sp2"] , 
 98:                    [11 , "HD21" , "H" , "H"] , [12 , "HD22" , "H" , "H"] , 
 99:                    [13 , "C" , "C" , "sp2"] , [14 , "O" , "O" , "sp2" ]] 
100: bonddata['ASN'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,13) , (5,6) , (5,7) ,  
101:                    (5,8) , (8,9) , (8,10) , (10,11) , (10,12) , (13,14)]                   
102:  
103: atomdata['CASN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
104:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
105:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
106:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
107:                    [9 , "OD1" , "O" , "sp2"] , [10 , "ND2" , "N" , "sp2"] , 
108:                    [11 , "HD21" , "H" , "H"] , [12 , "HD22" , "H" , "H"] , 
109:                    [13 , "C" , "C" , "sp2"] , [14 , "O" , "O" , "sp2" ], 
110:                    [15 , "OXT" , "O" , "sp2"]] 
111: bonddata['CASN'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,13) , (5,6) , (5,7) ,  
112:                    (5,8) , (8,9) , (8,10) , (10,11) , (10,12) , (13,14) , (13,15)]  
113:  
114: atomdata['NASN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
115:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
116:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
117:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
118:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
119:                    [11 , "OD1" , "O" , "sp2"] , [12 , "ND2" , "N" , "sp2"] , 
120:                    [13 , "HD21" , "H" , "H"] , [14 , "HD22" , "H" , "H"] , 
121:                    [15 , "C" , "C" , "sp2"] , [16 , "O" , "O" , "sp2" ]] 
122: bonddata['NASN'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,15) , (7,8) , (7,9) ,  
123:                    (7,10) , (10,11) , (10,12) , (12,13) , (12,14) , (15,16)] 
124:  
125: atomdata['ASP'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
126:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
127:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
128:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
129:                    [9 , "OD1" , "O" , "sp2"] , [10 , "OD2" , "O" , "sp3"] , 
130:                    [11 , "C" , "C" , "sp2"] , [12 , "O" , "O" , "sp2"]] 
131: bonddata['ASP'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,11) , (5,6) , (5,7) ,  
132:                    (5,8) , (8,9) , (8,10) , (11,12)] 
133:                     
134: atomdata['CASP'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
135:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
136:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
137:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
138:                    [9 , "OD1" , "O" , "sp2"] , [10 , "OD2" , "O" , "sp3"] , 
139:                    [11 , "C" , "C" , "sp2"] , [12 , "O" , "O" , "sp2"], 
140:                    [13 , "OXT" , "O" , "sp2"]] 
141: bonddata['CASP'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,11) , (5,6) , (5,7) ,  
142:                    (5,8) , (8,9) , (8,10) , (11,12) , (11,13)]                    
143:  
144: atomdata['NASP'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
145:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
146:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
147:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
148:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
149:                    [11 , "OD1" , "O" , "sp2"] , [12 , "OD2" , "O" , "sp3"] , 
150:                    [13 , "C" , "C" , "sp2"] , [14 , "O" , "O" , "sp2"]] 
151: bonddata['NASP'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,13) , (7,8) , (7,9) ,  
152:                    (7,10) , (10,11) , (10,12) , (13,14)] 
153:  
154: atomdata['CYM'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
155:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
156:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB3" , "H" , "H"] , 
157:                    [7 , "HB2" , "H" , "H"] , [8 , "SG" , "S" , "sp3"] , 
158:                    [9 , "C" , "C" , "sp2"] , [10 , "O" , "O" , "sp2" ]] 
159: bonddata['CYM'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,9) , (5,6) , (5,7) ,  
160:                    (5,8) , (9,10)] 
161:                     
162: atomdata['CYS'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
163:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
164:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
165:                    [7 , "HB3" , "H" , "H"] , [8 , "SG" , "S" , "sp3"] , 
166:                    [9 , "HG" , "H" , "H"] , [10 , "C" , "C" , "sp2" ] , 
167:                    [11 , "O" , "O" , "sp2"]] 
168: bonddata['CYS'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,10) , (5,6) , (5,7) ,  
169:                    (5,8) , (8,9) , (10,11)] 
170:  
171: atomdata['CCYS'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
172:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
173:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
174:                    [7 , "HB3" , "H" , "H"] , [8 , "SG" , "S" , "sp3"] , 
175:                    [9 , "HG" , "H" , "H"] , [10 , "C" , "C" , "sp2" ] , 
176:                    [11 , "O" , "O" , "sp2"] , [12, "OXT" , "O" , "sp2"]] 
177: bonddata['CCYS'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,10) , (5,6) , (5,7) ,  
178:                    (5,8) , (8,9) , (10,11) , (10,12)] 
179:  
180: atomdata['NCYS'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
181:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,           
182:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
183:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
184:                    [9 , "HB3" , "H" , "H"] , [10 , "SG" , "S" , "sp3"] , 
185:                    [11 , "HG" , "H" , "H"] , [12 , "C" , "C" , "sp2" ] , 
186:                    [13 , "O" , "O" , "sp2"]] 
187: bonddata['NCYS'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,12) , (7,8) , (7,9) ,  
188:                    (7,10) , (10,11) , (12,13)] 
189:  
190: atomdata['CYX'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
191:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
192:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
193:                    [7 , "HB3" , "H" , "H"] , [8 , "SG" , "S" , "sp3"] , 
194:                    [9 , "C" , "C" , "sp2"] , [10 , "O" , "O" , "sp2" ]] 
195: bonddata['CYX'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,9) , (5,6) , (5,7) ,  
196:                    (5,8) , (9,10)] 
197:  
198: atomdata['CCYX'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
199:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
200:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
201:                    [7 , "HB3" , "H" , "H"] , [8 , "SG" , "S" , "sp3"] , 
202:                    [9 , "C" , "C" , "sp2"] , [10 , "O" , "O" , "sp2" ], 
203:                    [11 , "OXT" , "O" , "sp2"]] 
204: bonddata['CCYX'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,9) , (5,6) , (5,7) ,  
205:                    (5,8) , (9,10) , (9,11)] 
206:                     
207: atomdata['NCYX'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
208:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,            
209:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
210:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
211:                    [9 , "HB3" , "H" , "H"] , [10 , "SG" , "S" , "sp3"] , 
212:                    [11 , "C" , "C" , "sp2"] , [12 , "O" , "O" , "sp2" ]] 
213: bonddata['NCYX'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,11) , (7,8) , (7,9) ,  
214:                    (7,10) , (11,12)]                    
215:  
216: atomdata['GLH'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
217:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
218:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
219:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
220:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
221:                    [11 , "CD" , "C" , "sp2"] , [12 , "OE1" , "O" , "sp2"] , 
222:                    [13 , "OE2" , "O" , "sp3"] , [14 , "HE2" , "H" , "H"] , 
223:                    [15 , "C" , "C" , "sp2" ] , [16 , "O" , "O" , "sp2"]] 
224: bonddata['GLH'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,15) , (5,6) , (5,7) ,  
225:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
226:                    (13,14) , (15,16)]                    
227:  
228: atomdata['GLN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
229:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
230:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
231:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
232:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
233:                    [11 , "CD" , "C" , "sp2"] , [12 , "OE1" , "O" , "sp2"] , 
234:                    [13 , "NE2" , "N" , "sp2"] , [14 , "HE21" , "H" , "H"] , 
235:                    [15 , "HE22" , "H" , "H"] , [16 , "C" , "C" , "sp2"] , 
236:                    [17 , "O" , "O" , "sp2"]] 
237: bonddata['GLN'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
238:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
239:                    (13,14) , (13,15) , (16,17)] 
240:                     
241: atomdata['CGLN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
242:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
243:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
244:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
245:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
246:                    [11 , "CD" , "C" , "sp2"] , [12 , "OE1" , "O" , "sp2"] , 
247:                    [13 , "NE2" , "N" , "sp2"] , [14 , "HE21" , "H" , "H"] , 
248:                    [15 , "HE22" , "H" , "H"] , [16 , "C" , "C" , "sp2"] , 
249:                    [17 , "O" , "O" , "sp2"] , [18, "OXT" , "O" , "sp2"]] 
250: bonddata['CGLN'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
251:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
252:                    (13,14) , (13,15) , (16,17) , (16,18)]  
253:                     
254: atomdata['NGLN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
255:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
256:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
257:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
258:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp3"] , 
259:                    [11 , "HG2" , "H" , "H"] , [12 , "HG3" , "H" , "H"] , 
260:                    [13 , "CD" , "C" , "sp2"] , [14 , "OE1" , "O" , "sp2"] , 
261:                    [15 , "NE2" , "N" , "sp2"] , [16 , "HE21" , "H" , "H"] , 
262:                    [17 , "HE22" , "H" , "H"] , [18 , "C" , "C" , "sp2"] , 
263:                    [19 , "O" , "O" , "sp2"]] 
264: bonddata['NGLN'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,18) , (7,8) , (7,9) ,  
265:                    (7,10) , (10,11) , (10,12) , (10,13) , (13,14) , (14,15) ,  
266:                    (15,16) , (15,17) , (18,19)]                    
267:  
268: atomdata['GLU'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
269:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
270:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
271:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
272:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
273:                    [11 , "CD" , "C" , "sp2"] , [12 , "OE1" , "O" , "sp2"] , 
274:                    [13 , "OE2" , "O" , "sp2"] , [14 , "C" , "C" , "sp2"] , 
275:                    [15 , "O" , "O" , "sp2"]] 
276: bonddata['GLU'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,14) , (5,6) , (5,7) ,  
277:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
278:                    (14,15)]  
279:                     
280: atomdata['CGLU'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
281:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
282:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
283:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
284:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
285:                    [11 , "CD" , "C" , "sp2"] , [12 , "OE1" , "O" , "sp2"] , 
286:                    [13 , "OE2" , "O" , "sp2"] , [14 , "C" , "C" , "sp2"] , 
287:                    [15 , "O" , "O" , "sp2"] , [16 , "OXT" , "O" , "sp2"]] 
288: bonddata['CGLU'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,14) , (5,6) , (5,7) ,  
289:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
290:                    (14,15) , (14,16)] 
291:                     
292: atomdata['NGLU'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
293:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
294:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
295:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
296:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp3"] , 
297:                    [11 , "HG2" , "H" , "H"] , [12 , "HG3" , "H" , "H"] , 
298:                    [13 , "CD" , "C" , "sp2"] , [14 , "OE1" , "O" , "sp2"] , 
299:                    [15 , "OE2" , "O" , "sp2"] , [16 , "C" , "C" , "sp2"] , 
300:                    [17 , "O" , "O" , "sp2"]] 
301: bonddata['NGLU'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,16) , (7,8) , (7,9) ,  
302:                    (7,10) , (10,11) , (10,12) , (10,13) , (13,14) , (13,15) ,  
303:                    (16,17)]                   
304:                     
305: atomdata['GLY'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
306:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA2" , "H" , "H"] , 
307:                    [5 , "HA3" , "H" , "H"] , [6 , "C" , "C" , "sp2"] , 
308:                    [7 , "O" , "O" , "sp2" ]] 
309: bonddata['GLY'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,6) , (6,7)] 
310:  
311: atomdata['CGLY'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
312:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA2" , "H" , "H"] , 
313:                    [5 , "HA3" , "H" , "H"] , [6 , "C" , "C" , "sp2"] , 
314:                    [7 , "O" , "O" , "sp2" ] , [8 , "OXT" , "O" , "sp2"]] 
315: bonddata['CGLY'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,6) , (6,7) , (6,8)]  
316:  
317: atomdata['NGLY'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
318:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
319:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA2" , "H" , "H"] , 
320:                    [7 , "HA3" , "H" , "H"] , [8 , "C" , "C" , "sp2"] , 
321:                    [9 , "O" , "O" , "sp2" ]] 
322: bonddata['NGLY'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,8) , (8,9)] 
323:  
324: atomdata['HID'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
325:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
326:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
327:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
328:                    [9 , "ND1" , "N" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
329:                    [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
330:                    [13 , "NE2" , "N" , "sp2"] , [14 , "CD2" , "C" , "sp2"] , 
331:                    [15 , "HD2" , "H" , "H" ] , [16 , "C" , "C" , "sp2"] , 
332:                    [17 , "O" , "O" , "sp2"]] 
333: bonddata['HID'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
334:                    (5,8) , (8,9) , (8,14) , (9,10) , (9,11) , (11,12) ,  
335:                    (11,13) , (13,14) , (14,15) , (16,17)]  
336:                     
337: atomdata['CHID'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
338:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
339:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
340:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
341:                    [9 , "ND1" , "N" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
342:                    [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
343:                    [13 , "NE2" , "N" , "sp2"] , [14 , "CD2" , "C" , "sp2"] , 
344:                    [15 , "HD2" , "H" , "H" ] , [16 , "C" , "C" , "sp2"] , 
345:                    [17 , "O" , "O" , "sp2"] , [18 , "OXT" , "O" , "sp2"]] 
346: bonddata['CHID'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
347:                    (5,8) , (8,9) , (8,14) , (9,10) , (9,11) , (11,12) ,  
348:                    (11,13) , (13,14) , (14,15) , (16,17) , (16,18)]  
349:  
350: atomdata['NHID'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
351:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
352:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
353:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
354:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
355:                    [11 , "ND1" , "N" , "sp2"] , [12 , "HD1" , "H" , "H"] , 
356:                    [13 , "CE1" , "C" , "sp2"] , [14 , "HE1" , "H" , "H"] , 
357:                    [15 , "NE2" , "N" , "sp2"] , [16 , "CD2" , "C" , "sp2"] , 
358:                    [17 , "HD2" , "H" , "H" ] , [18 , "C" , "C" , "sp2"] , 
359:                    [19 , "O" , "O" , "sp2"]] 
360: bonddata['NHID'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,18) , (7,8) , (7,9) ,  
361:                    (7,10) , (10,11) , (10,16) , (11,12) , (11,13) , (13,14) ,  
362:                    (13,15) , (15,16) , (16,17) , (18,19)]               
363:                     
364: atomdata['HIE'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
365:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
366:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
367:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
368:                    [9 , "ND1" , "N" , "sp2"] , [10 , "CE1" , "C" , "sp2"] , 
369:                    [11 , "HE1" , "H" , "H"] , [12 , "NE2" , "N" , "sp2"] , 
370:                    [13 , "HE2" , "H" , "H"] , [14 , "CD2" , "C" , "sp2"] , 
371:                    [15 , "HD2" , "H" , "H" ] , [16 , "C" , "C" , "sp2"] , 
372:                    [17 , "O" , "O" , "sp2"]] 
373: bonddata['HIE'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
374:                    (5,8) , (8,9) , (8,14) , (9,10) , (10,11) , (10,12) ,  
375:                    (12,13) , (12,14) , (14,15) , (16,17)]  
376:                     
377: atomdata['CHIE'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
378:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
379:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
380:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
381:                    [9 , "ND1" , "N" , "sp2"] , [10 , "CE1" , "C" , "sp2"] , 
382:                    [11 , "HE1" , "H" , "H"] , [12 , "NE2" , "N" , "sp2"] , 
383:                    [13 , "HE2" , "H" , "H"] , [14 , "CD2" , "C" , "sp2"] , 
384:                    [15 , "HD2" , "H" , "H" ] , [16 , "C" , "C" , "sp2"] , 
385:                    [17 , "O" , "O" , "sp2"] , [18 , "OXT" , "O" , "sp2"]] 
386: bonddata['CHIE'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
387:                    (5,8) , (8,9) , (8,14) , (9,10) , (10,11) , (10,12) ,  
388:                    (12,13) , (12,14) , (14,15) , (16,17) , (16,18)]                     
389:  
390: atomdata['NHIE'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
391:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,           
392:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
393:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
394:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
395:                    [11 , "ND1" , "N" , "sp2"] , [12 , "CE1" , "C" , "sp2"] , 
396:                    [13 , "HE1" , "H" , "H"] , [14 , "NE2" , "N" , "sp2"] , 
397:                    [15 , "HE2" , "H" , "H"] , [16 , "CD2" , "C" , "sp2"] , 
398:                    [17 , "HD2" , "H" , "H" ] , [18 , "C" , "C" , "sp2"] , 
399:                    [19 , "O" , "O" , "sp2"]] 
400: bonddata['NHIE'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,18) , (7,8) , (7,9) ,  
401:                    (7,10) , (10,11) , (10,16) , (11,12) , (12,13) , (12,14) ,  
402:                    (14,15) , (14,16) , (16,17) , (18,19)] 
403:  
404: atomdata['HIP'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
405:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
406:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
407:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
408:                    [9 , "ND1" , "N" , "sp2"] , [10 , "HD1" , "H" , "H"] ,  
409:                    [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
410:                    [13 , "NE2" , "N" , "sp2"] , [14 , "HE2" , "H" , "H"] ,  
411:                    [15 , "CD2" , "C" , "sp2"] , [16 , "HD2" , "H" , "H" ] ,  
412:                    [17 , "C" , "C" , "sp2"] , [18 , "O" , "O" , "sp2"]] 
413: bonddata['HIP'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,17) , (5,6) , (5,7) ,  
414:                    (5,8) , (8,9) , (8,15) , (9,10) , (9,11) , (11,12) ,  
415:                    (11,13) , (13,14) , (13,15) ,(15,16) , (17,18)] 
416:                     
417: atomdata['CHIP'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
418:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
419:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
420:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
421:                    [9 , "ND1" , "N" , "sp2"] , [10 , "HD1" , "H" , "H"] ,  
422:                    [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
423:                    [13 , "NE2" , "N" , "sp2"] , [14 , "HE2" , "H" , "H"] ,  
424:                    [15 , "CD2" , "C" , "sp2"] , [16 , "HD2" , "H" , "H" ] ,  
425:                    [17 , "C" , "C" , "sp2"] , [18 , "O" , "O" , "sp2"] , 
426:                    [19 , "OXT" , "O" , "sp2"]] 
427: bonddata['CHIP'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,17) , (5,6) , (5,7) ,  
428:                    (5,8) , (8,9) , (8,15) , (9,10) , (9,11) , (11,12) ,  
429:                    (11,13) , (13,14) , (13,15) ,(15,16) , (17,18) , (17,19)]                    
430:  
431: atomdata['NHIP'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
432:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
433:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
434:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
435:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
436:                    [11 , "ND1" , "N" , "sp2"] , [12 , "HD1" , "H" , "H"] ,  
437:                    [13 , "CE1" , "C" , "sp2"] , [14 , "HE1" , "H" , "H"] , 
438:                    [15 , "NE2" , "N" , "sp2"] , [16 , "HE2" , "H" , "H"] ,  
439:                    [17 , "CD2" , "C" , "sp2"] , [18 , "HD2" , "H" , "H" ] ,  
440:                    [19 , "C" , "C" , "sp2"] , [20 , "O" , "O" , "sp2"]] 
441: bonddata['NHIP'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,19) , (7,8) , (7,9) ,  
442:                    (7,10) , (10,11) , (8,17) , (11,12) , (11,13) , (13,14) ,  
443:                    (13,15) , (15,16) , (15,17) ,(17,18) , (19,20)] 
444:  
445: atomdata['HYP'] = [[1 , "N" , "N" , "sp2"] , [2 , "CD" , "C" , "sp3"] , 
446:                    [3 , "HD22" , "H" , "H"] , [4 , "HD23" , "H" , "H"] , 
447:                    [5 , "CG" , "C" , "sp3"] , [6 , "HG" , "H" , "H"] , 
448:                    [7 , "OD1" , "O" , "sp3"] , [8 , "HD1" , "H" , "H"] , 
449:                    [9 , "CB" , "C" , "sp3"] , [10 , "HB2" , "H" , "H"] , 
450:                    [11 , "HB3" , "H" , "H"] , [12 , "CA" , "C" , "sp3"] , 
451:                    [13 , "HA" , "H" , "H"] , [14 , "C" , "C" , "sp2"] ,  
452:                    [15 , "O" , "O" , "sp2"]]              
453: bonddata['HYP'] = [(1,2) , (1,12) , (2,3) , (2,4) , (2,5) , (5,6) , (5,7) ,  
454:                    (5,9) , (7,8) , (9,10) , (9,11) , (9,12) , (12,13) ,  
455:                    (12,14) , (14,15)]        
456:                     
457: atomdata['CHYP'] = [[1 , "N" , "N" , "sp2"] , [2 , "CD" , "C" , "sp3"] , 
458:                    [3 , "HD22" , "H" , "H"] , [4 , "HD23" , "H" , "H"] , 
459:                    [5 , "CG" , "C" , "sp3"] , [6 , "HG" , "H" , "H"] , 
460:                    [7 , "OD1" , "O" , "sp3"] , [8 , "HD1" , "H" , "H"] , 
461:                    [9 , "CB" , "C" , "sp3"] , [10 , "HB2" , "H" , "H"] , 
462:                    [11 , "HB3" , "H" , "H"] , [12 , "CA" , "C" , "sp3"] , 
463:                    [13 , "HA" , "H" , "H"] , [14 , "C" , "C" , "sp2"] ,  
464:                    [15 , "O" , "O" , "sp2"] , [16 , "O" , "OXT" , "sp2"]]              
465: bonddata['CHYP'] = [(1,2) , (1,12) , (2,3) , (2,4) , (2,5) , (5,6) , (5,7) ,  
466:                    (5,9) , (7,8) , (9,10) , (9,11) , (9,12) , (12,13) ,  
467:                    (12,14) , (14,15) , (14,16)]                       
468:  
469: atomdata['ILE'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
470:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
471:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB" , "H" , "H"] , 
472:                    [7 , "CG2" , "C" , "sp3"] , [8 , "HG21" , "H" , "H"] , 
473:                    [9 , "HG22" , "H" , "H"] , [10 , "HG23" , "H" , "H"] , 
474:                    [11 , "CG1" , "C" , "sp3"] , [12 , "HG12" , "H" , "H"] , 
475:                    [13 , "HG13" , "H" , "H"] , [14 , "CD1" , "C" , "sp3"] , 
476:                    [15 , "HD11" , "H" , "H"] , [16 , "HD12" , "H" , "H"] , 
477:                    [17 , "HD13" , "H" , "H"] , [18 , "C" , "C" , "sp2"] , 
478:                    [19 , "O" , "O" , "sp2" ]] 
479: bonddata['ILE'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,18) , (5,6) , (5,7) ,  
480:                    (5,11) , (7,8) , (7,9) , (7,10) , (11,12) , (11,13) ,  
481:                    (11,14) , (14,15) , (14,16) , (14,17) ,  (18,19)] 
482:                     
483: atomdata['CILE'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
484:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
485:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB" , "H" , "H"] , 
486:                    [7 , "CG2" , "C" , "sp3"] , [8 , "HG21" , "H" , "H"] , 
487:                    [9 , "HG22" , "H" , "H"] , [10 , "HG23" , "H" , "H"] , 
488:                    [11 , "CG1" , "C" , "sp3"] , [12 , "HG12" , "H" , "H"] , 
489:                    [13 , "HG13" , "H" , "H"] , [14 , "CD1" , "C" , "sp3"] , 
490:                    [15 , "HD11" , "H" , "H"] , [16 , "HD12" , "H" , "H"] , 
491:                    [17 , "HD13" , "H" , "H"] , [18 , "C" , "C" , "sp2"] , 
492:                    [19 , "O" , "O" , "sp2" ] , [20 , "OXT" , "O" , "sp2"]] 
493: bonddata['CILE'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,18) , (5,6) , (5,7) ,  
494:                    (5,11) , (7,8) , (7,9) , (7,10) , (11,12) , (11,13) ,  
495:                    (11,14) , (14,15) , (14,16) , (14,17) , (18,19) , (18,20)]                    
496:  
497: atomdata['NILE'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
498:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
499:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
500:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB" , "H" , "H"] , 
501:                    [9 , "CG2" , "C" , "sp3"] , [10 , "HG21" , "H" , "H"] , 
502:                    [11 , "HG22" , "H" , "H"] , [12 , "HG23" , "H" , "H"] , 
503:                    [13 , "CG1" , "C" , "sp3"] , [14 , "HG12" , "H" , "H"] , 
504:                    [15 , "HG13" , "H" , "H"] , [14 , "CD1" , "C" , "sp3"] , 
505:                    [17 , "HD11" , "H" , "H"] , [18 , "HD12" , "H" , "H"] , 
506:                    [19 , "HD13" , "H" , "H"] , [20 , "C" , "C" , "sp2"] , 
507:                    [21 , "O" , "O" , "sp2" ]] 
508: bonddata['NILE'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,20) , (7,8) , (7,9) ,  
509:                    (7,13) , (9,10) , (9,11) , (9,12) , (13,14) , (13,15) ,  
510:                    (13,16) , (16,17) , (16,18) , (16,19) ,  (20,21)] 
511:                   
512: atomdata['LEU'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
513:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
514:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
515:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
516:                    [9 , "HG" , "H" , "H"] , [10 , "CD1" , "C" , "sp3"] , 
517:                    [11 , "HD11" , "H" , "H"] , [12 , "HD12" , "H" , "H"] , 
518:                    [13 , "HD13" , "H" , "H"] , [14 , "CD2" , "C" , "sp3"] , 
519:                    [15 , "HD21" , "H" , "H"] , [16 , "HD22" , "H" , "H"] , 
520:                    [17 , "HD23" , "H" , "H"] , [18 , "C" , "C" , "sp2"] , 
521:                    [19 , "O" , "O" , "sp2" ]] 
522: bonddata['LEU'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,18) , (5,6) , (5,7) ,  
523:                    (5,8) , (8,9) , (8,10) , (8,14) , (10,11) , (10,12) ,  
524:                    (10,13) , (14,15) , (14,16) , (14,17) ,  (18,19)] 
525:                     
526: atomdata['CLEU'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
527:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
528:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
529:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
530:                    [9 , "HG" , "H" , "H"] , [10 , "CD1" , "C" , "sp3"] , 
531:                    [11 , "HD11" , "H" , "H"] , [12 , "HD12" , "H" , "H"] , 
532:                    [13 , "HD13" , "H" , "H"] , [14 , "CD2" , "C" , "sp3"] , 
533:                    [15 , "HD21" , "H" , "H"] , [16 , "HD22" , "H" , "H"] , 
534:                    [17 , "HD23" , "H" , "H"] , [18 , "C" , "C" , "sp2"] , 
535:                    [19 , "O" , "O" , "sp2" ] , [20 , "OXT" , "O" , "sp2"]] 
536: bonddata['CLEU'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,18) , (5,6) , (5,7) ,  
537:                    (5,8) , (8,9) , (8,10) , (8,14) , (10,11) , (10,12) ,  
538:                    (10,13) , (14,15) , (14,16) , (14,17) , (18,19) , (18,20)]                    
539:  
540: atomdata['NLEU'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
541:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
542:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
543:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
544:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp3"] , 
545:                    [11 , "HG" , "H" , "H"] , [12 , "CD1" , "C" , "sp3"] , 
546:                    [13 , "HD11" , "H" , "H"] , [14 , "HD12" , "H" , "H"] , 
547:                    [15 , "HD13" , "H" , "H"] , [16 , "CD2" , "C" , "sp3"] , 
548:                    [17 , "HD21" , "H" , "H"] , [18 , "HD22" , "H" , "H"] , 
549:                    [19 , "HD23" , "H" , "H"] , [20 , "C" , "C" , "sp2"] , 
550:                    [21 , "O" , "O" , "sp2" ]] 
551: bonddata['NLEU'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,20) , (7,8) , (7,9) ,  
552:                    (7,10) , (10,11) , (10,12) , (10,16) , (12,13) , (12,14) ,  
553:                    (12,15) , (16,17) , (16,18) , (16,19) ,  (20,21)] 
554:  
555: atomdata['LYN'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
556:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
557:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
558:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
559:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
560:                    [11 , "CD" , "C" , "sp3"] , [12 , "HD2" , "H" , "H"] , 
561:                    [13 , "HD3" , "H" , "H"] , [14 , "CE" , "C" , "sp3"] , 
562:                    [15 , "HE2" , "H" , "H"] , [16 , "HE3" , "H" , "H"] , 
563:                    [17 , "NZ" , "N" , "sp3"] , [18 , "HZ2" , "H" , "H"] , 
564:                    [19 , "HZ3" , "H" , "H"] , [20 , "C" , "C" , "sp2"] , 
565:                    [21 , "O" , "O" , "sp2"]] 
566: bonddata['LYN'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,20) , (5,6) , (5,7) ,  
567:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
568:                    (11,14) , (14,15) , (14,16) , (14,17) ,(17,18) , (17,19) , 
569:                    (20,21)] 
570:  
571: atomdata['LYS'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
572:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
573:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
574:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
575:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
576:                    [11 , "CD" , "C" , "sp3"] , [12 , "HD2" , "H" , "H"] , 
577:                    [13 , "HD3" , "H" , "H"] , [14 , "CE" , "C" , "sp3"] , 
578:                    [15 , "HE2" , "H" , "H"] , [16 , "HE3" , "H" , "H"] , 
579:                    [17 , "NZ" , "N" , "sp3"] , [18 , "HZ1" , "H" , "H"] , 
580:                    [19 , "HZ2" , "H" , "H"] , [20 , "HZ3" , "H" , "H"] , 
581:                    [21 , "C" , "C" , "sp2"] , [22 , "O" , "O" , "sp2"]] 
582: bonddata['LYS'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,21) , (5,6) , (5,7) ,  
583:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
584:                    (11,14) , (14,15) , (14,16) , (14,17) ,(17,18) , (17,19) , 
585:                    (17,20) , (21,22)] 
586:                     
587: atomdata['CLYS'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
588:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
589:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
590:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
591:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
592:                    [11 , "CD" , "C" , "sp3"] , [12 , "HD2" , "H" , "H"] , 
593:                    [13 , "HD3" , "H" , "H"] , [14 , "CE" , "C" , "sp3"] , 
594:                    [15 , "HE2" , "H" , "H"] , [16 , "HE3" , "H" , "H"] , 
595:                    [17 , "NZ" , "N" , "sp3"] , [18 , "HZ1" , "H" , "H"] , 
596:                    [19 , "HZ2" , "H" , "H"] , [20 , "HZ3" , "H" , "H"] , 
597:                    [21 , "C" , "C" , "sp2"] , [22 , "O" , "O" , "sp2"] , 
598:                    [23 , "OXT" , "O" , "sp2"]] 
599: bonddata['CLYS'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,21) , (5,6) , (5,7) ,  
600:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,  
601:                    (11,14) , (14,15) , (14,16) , (14,17) ,(17,18) , (17,19) , 
602:                    (17,20) , (21,22) , (21,23)]    
603:                     
604: atomdata['NLYS'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
605:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
606:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
607:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
608:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp3"] , 
609:                    [11 , "HG2" , "H" , "H"] , [12 , "HG3" , "H" , "H"] , 
610:                    [13 , "CD" , "C" , "sp3"] , [14 , "HD2" , "H" , "H"] , 
611:                    [15 , "HD3" , "H" , "H"] , [16 , "CE" , "C" , "sp3"] , 
612:                    [17 , "HE2" , "H" , "H"] , [18 , "HE3" , "H" , "H"] , 
613:                    [19 , "NZ" , "N" , "sp3"] , [20 , "HZ1" , "H" , "H"] , 
614:                    [21 , "HZ2" , "H" , "H"] , [22 , "HZ3" , "H" , "H"] , 
615:                    [23 , "C" , "C" , "sp2"] , [24 , "O" , "O" , "sp2"]] 
616: bonddata['NLYS'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,23) , (7,8) , (7,9) ,  
617:                    (7,10) , (10,11) , (10,12) , (10,13) , (13,14) , (13,15) ,  
618:                    (13,16) , (16,17) , (16,18) , (16,19) ,(19,20) , (19,21) , 
619:                    (19,22) , (23,24)]                    
620:                     
621: atomdata['MET'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
622:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
623:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
624:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
625:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
626:                    [11 , "SD" , "S" , "sp3"] , [12 , "CE" , "C" , "sp3"] , 
627:                    [13 , "HE1" , "H" , "H"] , [14 , "HE2" , "H" , "H"] , 
628:                    [15 , "HE3" , "H" , "H"] , [16 , "C" , "C" , "sp2"] ,  
629:                    [17 , "O" , "O" , "sp2"]] 
630: bonddata['MET'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
631:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (12,13) ,  
632:                    (12,14) , (12,15) , (16,17)]    
633:                     
634: atomdata['CMET'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
635:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
636:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
637:                    [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp3"] , 
638:                    [9 , "HG2" , "H" , "H"] , [10 , "HG3" , "H" , "H"] , 
639:                    [11 , "SD" , "S" , "sp3"] , [12 , "CE" , "C" , "sp3"] , 
640:                    [13 , "HE1" , "H" , "H"] , [14 , "HE2" , "H" , "H"] , 
641:                    [15 , "HE3" , "H" , "H"] , [16 , "C" , "C" , "sp2"] ,  
642:                    [17 , "O" , "O" , "sp2"] , [18 , "OXT" , "O" , "sp2"]] 
643: bonddata['CMET'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,16) , (5,6) , (5,7) ,  
644:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (12,13) ,  
645:                    (12,14) , (12,15) , (16,17) , (16,18)]                     
646:  
647: atomdata['NMET'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
648:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
649:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
650:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
651:                    [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp3"] , 
652:                    [11 , "HG2" , "H" , "H"] , [12 , "HG3" , "H" , "H"] , 
653:                    [13 , "SD" , "S" , "sp3"] , [14 , "CE" , "C" , "sp3"] , 
654:                    [15 , "HE1" , "H" , "H"] , [16 , "HE2" , "H" , "H"] , 
655:                    [17 , "HE3" , "H" , "H"] , [18 , "C" , "C" , "sp2"] ,  
656:                    [19 , "O" , "O" , "sp2"]] 
657: bonddata['NMET'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,18) , (7,8) , (7,9) ,  
658:                    (7,10) , (10,11) , (10,12) , (10,13) , (13,14) , (14,15) ,  
659:                    (14,16) , (14,17) , (18,19)] 
660:  
661: atomdata['PHE'] =[[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
662:                   [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
663:                   [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
664:                   [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
665:                   [9 , "CD1" , "C" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
666:                   [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
667:                   [13 , "CZ" , "C" , "sp2"] , [14 , "HZ" , "H" , "H"] , 
668:                   [15 , "CE2" , "C" , "sp2"] , [16 , "HE2" , "H" , "H"] , 
669:                   [17 , "CD2" , "C" , "sp2"] , [18 , "HD2" , "H" , "H"] , 
670:                   [19 , "C" , "C" , "sp2"] , [20 , "O" , "O" , "sp2" ]]   
671: bonddata['PHE']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,19) , (5,6) , (5,7) ,  
672:                   (5,8) , (8,9) , (8,17) , (9,10) , (9,11) , (11,12) , (11,13), 
673:                   (13,14) , (13,15) , (15,16) , (15,17) , (17,18) , (19,20)] 
674:                    
675: atomdata['CPHE'] =[[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
676:                   [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
677:                   [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
678:                   [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
679:                   [9 , "CD1" , "C" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
680:                   [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
681:                   [13 , "CZ" , "C" , "sp2"] , [14 , "HZ" , "H" , "H"] , 
682:                   [15 , "CE2" , "C" , "sp2"] , [16 , "HE2" , "H" , "H"] , 
683:                   [17 , "CD2" , "C" , "sp2"] , [18 , "HD2" , "H" , "H"] , 
684:                   [19 , "C" , "C" , "sp2"] , [20 , "O" , "O" , "sp2" ] ,  
685:                   [21 , "OXT" , "O" , "sp2"]]   
686: bonddata['CPHE']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,19) , (5,6) , (5,7) ,  
687:                   (5,8) , (8,9) , (8,17) , (9,10) , (9,11) , (11,12) , (11,13), 
688:                   (13,14) , (13,15) , (15,16) , (15,17) , (17,18) , (19,20), 
689:                   (19,21)]                   
690:  
691: atomdata['NPHE'] =[[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
692:                   [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
693:                   [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
694:                   [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
695:                   [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
696:                   [11 , "CD1" , "C" , "sp2"] , [12 , "HD1" , "H" , "H"] , 
697:                   [13 , "CE1" , "C" , "sp2"] , [14 , "HE1" , "H" , "H"] , 
698:                   [15 , "CZ" , "C" , "sp2"] , [16 , "HZ" , "H" , "H"] , 
699:                   [17 , "CE2" , "C" , "sp2"] , [18 , "HE2" , "H" , "H"] , 
700:                   [19 , "CD2" , "C" , "sp2"] , [20 , "HD2" , "H" , "H"] , 
701:                   [21 , "C" , "C" , "sp2"] , [22 , "O" , "O" , "sp2" ]]   
702: bonddata['NPHE']=[(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,21) , (7,8) , (7,9) ,  
703:                   (7,10) , (10,11) , (10,19) , (11,12) , (11,13) , (13,14) , (13,15), 
704:                   (15,16) , (15,17) , (17,18) , (17,19) , (19,20) , (21,22)] 
705:  
706: atomdata['PRO'] = [[1 , "N" , "N" , "sp2"] , [2 , "CD" , "C" , "sp3"] , 
707:                    [3 , "HD2" , "H" , "H"] , [4 , "HD3" , "H" , "H"] , 
708:                    [5 , "CG" , "C" , "sp3"] , [6 , "HG2" , "H" , "H"] , 
709:                    [7 , "HG3" , "H" , "H"] , [8 , "CB" , "C" , "sp3"] , 
710:                    [9 , "HB2" , "H" , "H"] , [10 , "HB3" , "H" , "H"] , 
711:                    [11 , "CA" , "C" , "sp3"] ,[12 , "HA" , "H" , "H"] , 
712:                    [13 , "C" , "C" , "sp2"] , [14 , "O" , "O" , "sp2"]]                                 
713: bonddata['PRO'] = [(1,2) , (1,11) , (2,3) , (2,4) , (2,5) , (5,6) , (5,7) ,  
714:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) ,(13,14)]  
715:  
716: atomdata['CPRO'] = [[1 , "N" , "N" , "sp2"] , [2 , "CD" , "C" , "sp3"] , 
717:                    [3 , "HD2" , "H" , "H"] , [4 , "HD3" , "H" , "H"] , 
718:                    [5 , "CG" , "C" , "sp3"] , [6 , "HG2" , "H" , "H"] , 
719:                    [7 , "HG3" , "H" , "H"] , [8 , "CB" , "C" , "sp3"] , 
720:                    [9 , "HB2" , "H" , "H"] , [10 , "HB3" , "H" , "H"] , 
721:                    [11 , "CA" , "C" , "sp3"] ,[12 , "HA" , "H" , "H"] , 
722:                    [13 , "C" , "C" , "sp2"] , [14 , "O" , "O" , "sp2"] , 
723:                    [15 , "OXT" , "O" , "sp2"]]                                 
724: bonddata['CPRO'] = [(1,2) , (1,11) , (2,3) , (2,4) , (2,5) , (5,6) , (5,7) ,  
725:                    (5,8) , (8,9) , (8,10) , (8,11) , (11,12) , (11,13) , 
726:                    (13,14) , (13,15)]  
727:                     
728: atomdata['NPRO'] = [[1 , "N" , "N" , "sp2"] , [2 , "H2" , "H" , "H"] , 
729:                    [3 , "H3" , "H" , "H"] , [4 , "CD" , "C" , "sp3"] , 
730:                    [5 , "HD2" , "H" , "H"] , [6 , "HD3" , "H" , "H"] , 
731:                    [7 , "CG" , "C" , "sp3"] , [8 , "HG2" , "H" , "H"] , 
732:                    [9 , "HG3" , "H" , "H"] , [10 , "CB" , "C" , "sp3"] , 
733:                    [11 , "HB2" , "H" , "H"] , [12 , "HB3" , "H" , "H"] , 
734:                    [13 , "CA" , "C" , "sp3"] ,[14 , "HA" , "H" , "H"] , 
735:                    [15 , "C" , "C" , "sp2"] , [16 , "O" , "O" , "sp2"]]                                 
736: bonddata['NPRO'] = [(1,2) , (1,3) , (1,4) , (1,13) , (4,5) , (4,6) , (4,7) , (7,8) , (7,9) ,  
737:                    (7,10) , (10,11) , (10,12) , (10,13) , (13,14) , (13,15) ,(15,16)]                    
738:  
739: atomdata['SER'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
740:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
741:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
742:                    [7 , "HB3" , "H" , "H"] , [8 , "OG" , "O" , "sp3"] , 
743:                    [9 , "HG" , "H" , "H"] , [10 , "C" , "C" , "sp2" ] , 
744:                    [11 , "O" , "O" , "sp2"]] 
745: bonddata['SER'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,10) , (5,6) , (5,7) ,  
746:                    (5,8) , (8,9) , (10,11)] 
747:                     
748: atomdata['CSER'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
749:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
750:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
751:                    [7 , "HB3" , "H" , "H"] , [8 , "OG" , "O" , "sp3"] , 
752:                    [9 , "HG" , "H" , "H"] , [10 , "C" , "C" , "sp2" ] , 
753:                    [11 , "O" , "O" , "sp2"] , [12 , "OXT" , "O" , "sp2"]] 
754: bonddata['CSER'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,10) , (5,6) , (5,7) ,  
755:                    (5,8) , (8,9) , (10,11) , (10,12)]                    
756:  
757: atomdata['NSER'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
758:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
759:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
760:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
761:                    [9 , "HB3" , "H" , "H"] , [10 , "OG" , "O" , "sp3"] , 
762:                    [11 , "HG" , "H" , "H"] , [12 , "C" , "C" , "sp2" ] , 
763:                    [13 , "O" , "O" , "sp2"]] 
764: bonddata['NSER'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,12) , (7,8) , (7,9) ,  
765:                    (7,10) , (10,11) , (12,13)] 
766:  
767: atomdata['THR'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
768:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
769:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB" , "H" , "H"] , 
770:                    [7 , "CG2" , "C" , "sp3"] , [8 , "HG21" , "H" , "H"] , 
771:                    [9 , "HG22" , "H" , "H"] , [10 , "HG23" , "H" , "H"] , 
772:                    [11 , "OG1" , "O" , "sp3"] , [12 , "HG1" , "H" , "H"] , 
773:                    [13 , "C" , "C" , "sp2" ] , [14 , "O" , "O" , "sp2"]] 
774: bonddata['THR'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,13) , (5,6) , (5,7) ,  
775:                    (5,11) , (7,8) , (7,9) , (7,10) , (11,12) , (13,14)] 
776:                     
777: atomdata['CTHR'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
778:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
779:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB" , "H" , "H"] , 
780:                    [7 , "CG2" , "C" , "sp3"] , [8 , "HG21" , "H" , "H"] , 
781:                    [9 , "HG22" , "H" , "H"] , [10 , "HG23" , "H" , "H"] , 
782:                    [11 , "OG1" , "O" , "sp3"] , [12 , "HG1" , "H" , "H"] , 
783:                    [13 , "C" , "C" , "sp2" ] , [14 , "O" , "O" , "sp2"] , 
784:                    [15 , "OXT" , "O" , "sp2"]] 
785: bonddata['CTHR'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,13) , (5,6) , (5,7) ,  
786:                    (5,11) , (7,8) , (7,9) , (7,10) , (11,12) , (13,14) , (13,15)]                    
787:  
788: atomdata['NTHR'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
789:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
790:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
791:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB" , "H" , "H"] , 
792:                    [9 , "CG2" , "C" , "sp3"] , [10 , "HG21" , "H" , "H"] , 
793:                    [11 , "HG22" , "H" , "H"] , [12 , "HG23" , "H" , "H"] , 
794:                    [13 , "OG1" , "O" , "sp3"] , [14 , "HG1" , "H" , "H"] , 
795:                    [15 , "C" , "C" , "sp2" ] , [16 , "O" , "O" , "sp2"]] 
796: bonddata['NTHR'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,15) , (7,8) , (7,9) ,  
797:                    (7,13) , (9,10) , (9,11) , (9,12) , (13,14) , (15,16)] 
798:                     
799: atomdata['TRP'] =[[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
800:                   [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
801:                   [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
802:                   [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
803:                   [9 , "CD1" , "C" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
804:                   [11 , "NE1" , "N" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
805:                   [13 , "CE2" , "C" , "sp2"] , [14 , "CZ2" , "C" , "sp2"] , 
806:                   [15 , "HZ2" , "H" , "H"] , [16 , "CH2" , "C" , "sp2"] , 
807:                   [17 , "HH2" , "H" , "H"] , [18 , "CZ3" , "C" , "sp2"] , 
808:                   [19 , "HZ3" , "H" , "H"] , [20 , "CE3" , "C" , "sp2"] , 
809:                   [21 , "HE3" , "H" , "H"] , [22 , "CD2" , "C" , "sp2"] , 
810:                   [23 , "C" , "C" , "sp2"] , [24 , "O" , "O" , "sp2" ]]   
811: bonddata['TRP']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,23) , (5,6) , (5,7) ,  
812:                  (5,8) , (8,9) , (8,22) , (9,10) , (9,11) , (11,12) , (11,13), 
813:                  (13,14) , (13,22) , (14,15) , (14,16) , (16,17) , (16,18) , 
814:                  (18,19) , (18,20) , (20,21) , (20,22) , (23,24)] 
815:                   
816: atomdata['CTRP'] =[[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
817:                   [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
818:                   [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
819:                   [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
820:                   [9 , "CD1" , "C" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
821:                   [11 , "NE1" , "N" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
822:                   [13 , "CE2" , "C" , "sp2"] , [14 , "CZ2" , "C" , "sp2"] , 
823:                   [15 , "HZ2" , "H" , "H"] , [16 , "CH2" , "C" , "sp2"] , 
824:                   [17 , "HH2" , "H" , "H"] , [18 , "CZ3" , "C" , "sp2"] , 
825:                   [19 , "HZ3" , "H" , "H"] , [20 , "CE3" , "C" , "sp2"] , 
826:                   [21 , "HE3" , "H" , "H"] , [22 , "CD2" , "C" , "sp2"] , 
827:                   [23 , "C" , "C" , "sp2"] , [24 , "O" , "O" , "sp2" ] , 
828:                   [25 , "OXT" , "O" , "sp2"]]   
829: bonddata['CTRP']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,23) , (5,6) , (5,7) ,  
830:                  (5,8) , (8,9) , (8,22) , (9,10) , (9,11) , (11,12) , (11,13), 
831:                  (13,14) , (13,22) , (14,15) , (14,16) , (16,17) , (16,18) , 
832:                  (18,19) , (18,20) , (20,21) , (20,22) , (23,24) , (23,25)]                  
833:  
834: atomdata['NTRP'] =[[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
835:                   [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
836:                   [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
837:                   [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
838:                   [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
839:                   [11 , "CD1" , "C" , "sp2"] , [12 , "HD1" , "H" , "H"] , 
840:                   [13 , "NE1" , "N" , "sp2"] , [14 , "HE1" , "H" , "H"] , 
841:                   [15 , "CE2" , "C" , "sp2"] , [16 , "CZ2" , "C" , "sp2"] , 
842:                   [17 , "HZ2" , "H" , "H"] , [18 , "CH2" , "C" , "sp2"] , 
843:                   [19 , "HH2" , "H" , "H"] , [20 , "CZ3" , "C" , "sp2"] , 
844:                   [21 , "HZ3" , "H" , "H"] , [22 , "CE3" , "C" , "sp2"] , 
845:                   [23 , "HE3" , "H" , "H"] , [24 , "CD2" , "C" , "sp2"] , 
846:                   [25 , "C" , "C" , "sp2"] , [26 , "O" , "O" , "sp2" ]]   
847: bonddata['NTRP']=[(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,25) , (7,8) , (7,9) ,  
848:                  (7,10) , (10,11) , (8,24) , (11,12) , (11,13) , (13,14) , (13,15), 
849:                  (15,16) , (15,24) , (16,17) , (16,18) , (18,19) , (18,20) , 
850:                  (20,21) , (20,22) , (22,23) , (22,24) , (25,26)] 
851:                   
852: atomdata['TYR'] =[[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
853:                   [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
854:                   [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
855:                   [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
856:                   [9 , "CD1" , "C" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
857:                   [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
858:                   [13 , "CZ" , "C" , "sp2"] , [14 , "OH" , "O" , "sp3"] , 
859:                   [15 , "HH" , "H" , "H"] , [16 , "CE2" , "C" , "sp2"] , 
860:                   [17 , "HE2" , "H" , "H"] , [18 , "CD2" , "C" , "sp2"] , 
861:                   [19 , "HD2" , "H" , "H"] , [20 , "C" , "C" , "sp2"] , 
862:                   [21 , "O" , "O" , "sp2"]]   
863: bonddata['TYR']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,20) , (5,6) , (5,7) ,  
864:                  (5,8) , (8,9) , (8,18) , (9,10) , (9,11) , (11,12) , (11,13), 
865:                  (13,14) , (13,16) , (14,15) , (16,17) , (16,18) , (18,19) , 
866:                  (20,21)]  
867:                   
868: atomdata['CTYR'] =[[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
869:                   [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
870:                   [5 , "CB" , "C" , "sp3"] , [6 , "HB2" , "H" , "H"] , 
871:                   [7 , "HB3" , "H" , "H"] , [8 , "CG" , "C" , "sp2"] , 
872:                   [9 , "CD1" , "C" , "sp2"] , [10 , "HD1" , "H" , "H"] , 
873:                   [11 , "CE1" , "C" , "sp2"] , [12 , "HE1" , "H" , "H"] , 
874:                   [13 , "CZ" , "C" , "sp2"] , [14 , "OH" , "O" , "sp3"] , 
875:                   [15 , "HH" , "H" , "H"] , [16 , "CE2" , "C" , "sp2"] , 
876:                   [17 , "HE2" , "H" , "H"] , [18 , "CD2" , "C" , "sp2"] , 
877:                   [19 , "HD2" , "H" , "H"] , [20 , "C" , "C" , "sp2"] , 
878:                   [21 , "O" , "O" , "sp2"] , [22 , "OXT" , "O" , "sp2"]]   
879: bonddata['CTYR']=[(1,2) , (1,3) , (3,4) , (3,5) , (3,20) , (5,6) , (5,7) ,  
880:                  (5,8) , (8,9) , (8,18) , (9,10) , (9,11) , (11,12) , (11,13), 
881:                  (13,14) , (13,16) , (14,15) , (16,17) , (16,18) , (18,19) , 
882:                  (20,21) , (20,22)]  
883:  
884: atomdata['NTYR'] =[[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] ,  
885:                   [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
886:                   [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
887:                   [7 , "CB" , "C" , "sp3"] , [8 , "HB2" , "H" , "H"] , 
888:                   [9 , "HB3" , "H" , "H"] , [10 , "CG" , "C" , "sp2"] , 
889:                   [11 , "CD1" , "C" , "sp2"] , [12 , "HD1" , "H" , "H"] , 
890:                   [13 , "CE1" , "C" , "sp2"] , [14 , "HE1" , "H" , "H"] , 
891:                   [15 , "CZ" , "C" , "sp2"] , [16 , "OH" , "O" , "sp3"] , 
892:                   [17 , "HH" , "H" , "H"] , [18 , "CE2" , "C" , "sp2"] , 
893:                   [19 , "HE2" , "H" , "H"] , [20 , "CD2" , "C" , "sp2"] , 
894:                   [21 , "HD2" , "H" , "H"] , [22 , "C" , "C" , "sp2"] , 
895:                   [23 , "O" , "O" , "sp2"]]   
896: bonddata['NTYR']=[(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,22) , (7,8) , (7,9) ,  
897:                  (7,10) , (10,11) , (10,20) , (11,12) , (11,13) , (13,14) , (13,15), 
898:                  (15,16) , (15,18) , (16,17) , (17,18) , (18,20) , (20,21) , 
899:                  (22,23)]               
900:                   
901: atomdata['VAL'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
902:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
903:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB" , "H" , "H"] , 
904:                    [7 , "CG1" , "C" , "sp3"] , [8 , "HG11" , "H" , "H"] , 
905:                    [9 , "HG12" , "H" , "H"] , [10 , "HG13" , "H" , "H"] , 
906:                    [11 , "CG2" , "C" , "sp3"] , [12 , "HG21" , "H" , "H"] , 
907:                    [13 , "HG22" , "H" , "H"] , [14 , "HG23" , "H" , "sp3"] , 
908:                    [15 , "C" , "C" , "sp2"] ,  [16 , "O" , "O" , "sp2" ]] 
909: bonddata['VAL'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,15) , (5,6) , (5,7) ,  
910:                    (5,11) , (7,8) , (7,9) , (7,10) , (11,12) , (11,13) ,  
911:                    (11,14) , (15,16)]  
912:                     
913: atomdata['CVAL'] = [[1 , "N" , "N" , "sp2"] , [2 , "H" , "H" , "H"] ,  
914:                    [3 , "CA" , "C" , "sp3"] , [4 , "HA" , "H" , "H"] , 
915:                    [5 , "CB" , "C" , "sp3"] , [6 , "HB" , "H" , "H"] , 
916:                    [7 , "CG1" , "C" , "sp3"] , [8 , "HG11" , "H" , "H"] , 
917:                    [9 , "HG12" , "H" , "H"] , [10 , "HG13" , "H" , "H"] , 
918:                    [11 , "CG2" , "C" , "sp3"] , [12 , "HG21" , "H" , "H"] , 
919:                    [13 , "HG22" , "H" , "H"] , [14 , "HG23" , "H" , "sp3"] , 
920:                    [15 , "C" , "C" , "sp2"] ,  [16 , "O" , "O" , "sp2" ] , 
921:                    [17 , "OXT" , "O" , "sp2"]] 
922: bonddata['CVAL'] = [(1,2) , (1,3) , (3,4) , (3,5) , (3,15) , (5,6) , (5,7) ,  
923:                    (5,11) , (7,8) , (7,9) , (7,10) , (11,12) , (11,13) ,  
924:                    (11,14) , (15,16) , (15,17)] 
925:                     
926: atomdata['NVAL'] = [[1 , "N" , "N" , "sp2"] , [2 , "H1" , "H" , "H"] , 
927:                    [3 , "H2" , "H" , "H"] , [4 , "H3" , "H" , "H"] ,          
928:                    [5 , "CA" , "C" , "sp3"] , [6 , "HA" , "H" , "H"] , 
929:                    [7 , "CB" , "C" , "sp3"] , [8 , "HB" , "H" , "H"] , 
930:                    [9 , "CG1" , "C" , "sp3"] , [10 , "HG11" , "H" , "H"] , 
931:                    [11 , "HG12" , "H" , "H"] , [12 , "HG13" , "H" , "H"] , 
932:                    [13 , "CG2" , "C" , "sp3"] , [14 , "HG21" , "H" , "H"] , 
933:                    [15 , "HG22" , "H" , "H"] , [16 , "HG23" , "H" , "sp3"] , 
934:                    [17 , "C" , "C" , "sp2"] ,  [18 , "O" , "O" , "sp2" ]] 
935: bonddata['NVAL'] = [(1,2) , (1,3) , (1,4) , (1,5) , (5,6) , (5,7) , (5,17) , (7,8) , (7,9) ,  
936:                    (7,13) , (9,10) , (9,11) , (9,12) , (13,14) , (13,15) ,  
937:                    (13,16) , (17,18)]                    


r33110/BHmutation_steps 2017-08-03 17:31:01.527638382 +0100 r33109/BHmutation_steps 2017-08-03 17:31:10.691760447 +0100
  1: svn: warning: W195007: URL 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps' refers to a directory  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps' in revision 33109
  2: svn: E200009: Could not cat all targets because some targets are directories 
  3: svn: E200009: Illegal target for the requested operation 


r33110/bonds.F90 2017-08-03 17:30:56.663573598 +0100 r33109/bonds.F90 2017-08-03 17:31:05.787695127 +0100
 47:   integer                       :: use_atm_map(natom) 47:   integer                       :: use_atm_map(natom)
 48:  48: 
 49: ! Local variables: 49: ! Local variables:
 50:  50: 
 51:   integer               :: alloc_failed 51:   integer               :: alloc_failed
 52:   type(bond_rec)        :: bonds_copy(nbonh + nbona) 52:   type(bond_rec)        :: bonds_copy(nbonh + nbona)
 53:  53: 
 54:   ! This routine can handle reallocation, and thus can be called multiple 54:   ! This routine can handle reallocation, and thus can be called multiple
 55:   ! times. 55:   ! times.
 56:  56: 
 57:   call find_my_bonds(nbonh, natom, gbl_bond, cit_nbonh, bonds_copy, use_atm_map) 57:   call find_my_bonds(nbonh, gbl_bond, cit_nbonh, bonds_copy, use_atm_map)
 58:  58: 
 59:   if (cit_nbonh .gt. 0) then 59:   if (cit_nbonh .gt. 0) then
 60:     if (allocated(cit_h_bond)) then 60:     if (allocated(cit_h_bond)) then
 61:       if (size(cit_h_bond) .lt. cit_nbonh) then 61:       if (size(cit_h_bond) .lt. cit_nbonh) then
 62:         num_ints = num_ints - size(cit_h_bond) * bond_rec_ints 62:         num_ints = num_ints - size(cit_h_bond) * bond_rec_ints
 63:         deallocate(cit_h_bond) 63:         deallocate(cit_h_bond)
 64:         allocate(cit_h_bond(cit_nbonh), stat = alloc_failed) 64:         allocate(cit_h_bond(cit_nbonh), stat = alloc_failed)
 65:         if (alloc_failed .ne. 0) call setup_alloc_error 65:         if (alloc_failed .ne. 0) call setup_alloc_error
 66:         num_ints = num_ints + size(cit_h_bond) * bond_rec_ints 66:         num_ints = num_ints + size(cit_h_bond) * bond_rec_ints
 67:       end if 67:       end if
 68:     else 68:     else
 69:       allocate(cit_h_bond(cit_nbonh), stat = alloc_failed) 69:       allocate(cit_h_bond(cit_nbonh), stat = alloc_failed)
 70:       if (alloc_failed .ne. 0) call setup_alloc_error 70:       if (alloc_failed .ne. 0) call setup_alloc_error
 71:       num_ints = num_ints + size(cit_h_bond) * bond_rec_ints 71:       num_ints = num_ints + size(cit_h_bond) * bond_rec_ints
 72:     end if 72:     end if
 73:     cit_h_bond(1:cit_nbonh) = bonds_copy(1:cit_nbonh) 73:     cit_h_bond(1:cit_nbonh) = bonds_copy(1:cit_nbonh)
 74:   end if 74:   end if
 75:  75: 
 76:   call find_my_bonds(nbona, natom, gbl_bond(bonda_idx), cit_nbona, bonds_copy, & 76:   call find_my_bonds(nbona, gbl_bond(bonda_idx), cit_nbona, bonds_copy, &
 77:                          use_atm_map) 77:                          use_atm_map)
 78:  78: 
 79:   if (cit_nbona .gt. 0) then 79:   if (cit_nbona .gt. 0) then
 80:     if (allocated(cit_a_bond)) then 80:     if (allocated(cit_a_bond)) then
 81:       if (size(cit_a_bond) .lt. cit_nbona) then 81:       if (size(cit_a_bond) .lt. cit_nbona) then
 82:         num_ints = num_ints - size(cit_a_bond) * bond_rec_ints 82:         num_ints = num_ints - size(cit_a_bond) * bond_rec_ints
 83:         deallocate(cit_a_bond) 83:         deallocate(cit_a_bond)
 84:         allocate(cit_a_bond(cit_nbona), stat = alloc_failed) 84:         allocate(cit_a_bond(cit_nbona), stat = alloc_failed)
 85:         if (alloc_failed .ne. 0) call setup_alloc_error 85:         if (alloc_failed .ne. 0) call setup_alloc_error
 86:         num_ints = num_ints + size(cit_a_bond) * bond_rec_ints 86:         num_ints = num_ints + size(cit_a_bond) * bond_rec_ints
102: end subroutine bonds_setup102: end subroutine bonds_setup
103: 103: 
104: !*******************************************************************************104: !*******************************************************************************
105: !105: !
106: ! Subroutine:  find_my_bonds106: ! Subroutine:  find_my_bonds
107: !107: !
108: ! Description:  <TBS>108: ! Description:  <TBS>
109: !109: !
110: !*******************************************************************************110: !*******************************************************************************
111: 111: 
112: subroutine find_my_bonds(bond_cnt, atm_cnt, bonds, my_bond_cnt, my_bonds, &112: subroutine find_my_bonds(bond_cnt, bonds, my_bond_cnt, my_bonds, &
113:                              use_atm_map)113:                              use_atm_map)
114: 114: 
115:   use parallel_dat_mod115:   use parallel_dat_mod
116: 116: 
117:   implicit none117:   implicit none
118: 118: 
119: ! Formal arguments:119: ! Formal arguments:
120: 120: 
121:   integer               :: bond_cnt121:   integer               :: bond_cnt
122:   integer               :: atm_cnt 
123:   type(bond_rec)        :: bonds(bond_cnt)122:   type(bond_rec)        :: bonds(bond_cnt)
124:   integer               :: my_bond_cnt123:   integer               :: my_bond_cnt
125:   type(bond_rec)        :: my_bonds(bond_cnt)124:   type(bond_rec)        :: my_bonds(*)
126:   integer               :: use_atm_map(atm_cnt)125:   integer               :: use_atm_map(*)
127: 126: 
128: ! Local variables:127: ! Local variables:
129: 128: 
130:   integer               :: atm_i, atm_j, bonds_idx129:   integer               :: atm_i, atm_j, bonds_idx
131: 130: 
132: ! Find all bonds for which this process owns either atom:131: ! Find all bonds for which this process owns either atom:
133: 132: 
134:   my_bond_cnt = 0133:   my_bond_cnt = 0
135: 134: 
136:   do bonds_idx = 1, bond_cnt135:   do bonds_idx = 1, bond_cnt
166: !*******************************************************************************165: !*******************************************************************************
167: !166: !
168: ! Subroutine:  get_bond_energy167: ! Subroutine:  get_bond_energy
169: !168: !
170: ! Description:169: ! Description:
171: !              170: !              
172: ! Routine to get bond energy and forces for the potential of cb*(b-b0)**2.171: ! Routine to get bond energy and forces for the potential of cb*(b-b0)**2.
173: !172: !
174: !*******************************************************************************173: !*******************************************************************************
175: 174: 
176: subroutine get_bond_energy(bond_cnt, atm_cnt, bond, x, frc, bond_energy)175: subroutine get_bond_energy(bond_cnt, bond, x, frc, bond_energy)
177:  176: 
178:   use nmr_calls_mod177:   use nmr_calls_mod
179:   use parallel_dat_mod178:   use parallel_dat_mod
180:   use prmtop_dat_mod179:   use prmtop_dat_mod
181: 180: 
182:   implicit none181:   implicit none
183: 182: 
184: ! Formal arguments:183: ! Formal arguments:
185: 184: 
186:   integer               :: bond_cnt185:   integer               :: bond_cnt
187:   integer               :: atm_cnt186:   type(bond_rec)        :: bond(*)
188:   type(bond_rec)        :: bond(bond_cnt) 
189:   double precision      :: x(3, *)187:   double precision      :: x(3, *)
190:   double precision      :: frc(3, atm_cnt)188:   double precision      :: frc(3, *)
191:   double precision      :: bond_energy189:   double precision      :: bond_energy
192: 190: 
193: ! Local variables:191: ! Local variables:
194: 192: 
195:   double precision      :: da193:   double precision      :: da
196:   double precision      :: df194:   double precision      :: df
197:   double precision      :: dfw195:   double precision      :: dfw
198:   integer               :: i, j, ic, jn196:   integer               :: i, j, ic, jn
199:   double precision      :: lcl_bond_energy197:   double precision      :: lcl_bond_energy
200:   double precision      :: xa, ya, za198:   double precision      :: xa, ya, za


r33110/chirality.F90 2017-08-03 17:30:59.603612757 +0100 r33109/chirality.F90 2017-08-03 17:31:08.763734766 +0100
195:    integer                                      :: file_length195:    integer                                      :: file_length
196: 196: 
197: #ifdef _SVN_ROOT_197: #ifdef _SVN_ROOT_
198:    call system('python ' // _SVN_ROOT_ // '/SCRIPTS/AMBER/chirality/chirality.py' // ' coords.prmtop')198:    call system('python ' // _SVN_ROOT_ // '/SCRIPTS/AMBER/chirality/chirality.py' // ' coords.prmtop')
199: #else199: #else
200:    call system('python ' // chirality_script // ' coords.prmtop')200:    call system('python ' // chirality_script // ' coords.prmtop')
201: #endif201: #endif
202: 202: 
203: ! Work out the number of chiral centres by reading the .chirality_list file 203: ! Work out the number of chiral centres by reading the .chirality_list file 
204:    num_chiral_centres = file_length('.chirality_list')204:    num_chiral_centres = file_length('.chirality_list')
205:    if (allocated(sr_atoms)) deallocate(sr_atoms)205:    if (.not. allocated(sr_atoms)) allocate(sr_atoms(num_chiral_centres, 5))
206:    allocate(sr_atoms(num_chiral_centres, 5)) 
207: 206: 
208: ! Now read the chiral centres into sr_atoms207: ! Now read the chiral centres into sr_atoms
209:    call file_open('.chirality_list', file_unit, .false.)208:    call file_open('.chirality_list', file_unit, .false.)
210:    do i = 1, num_chiral_centres209:    do i = 1, num_chiral_centres
211:       read(file_unit, '(5i8)') sr_atoms(i, :)210:       read(file_unit, '(5i8)') sr_atoms(i, :)
212:    end do211:    end do
213:    close(file_unit)212:    close(file_unit)
214: 213: 
215: ! Print a test copy214: ! Print a test copy
216: !   call file_open('chirality_list_copy', file_unit, .false.)215: !   call file_open('chirality_list_copy', file_unit, .false.)
217: !   do i = 1, num_chiral_centres216: !   do i = 1, num_chiral_centres
218: !      write(file_unit, '(5i10)') sr_atoms(i, :)217: !      write(file_unit, '(5i10)') sr_atoms(i, :)
219: !   end do218: !   end do
220: !   close(file_unit)219: !   close(file_unit)
221: 220: 
222: ! Now calculate the chirality of the centres and save it in sr_states_initial221: ! Now calculate the chirality of the centres and save it in sr_states_initial
223:    if (allocated(sr_states_initial)) deallocate(sr_states_initial)222:    if (.not. allocated(sr_states_initial)) allocate(sr_states_initial(num_chiral_centres))
224:    allocate(sr_states_initial(num_chiral_centres)) 
225:    do i = 1, num_chiral_centres223:    do i = 1, num_chiral_centres
226:       atom_number = sr_atoms(i, 1)224:       atom_number = sr_atoms(i, 1)
227:       centre_coords(1) = coords(3 * atom_number - 2)225:       centre_coords(1) = coords(3 * atom_number - 2)
228:       centre_coords(2) = coords(3 * atom_number - 1)226:       centre_coords(2) = coords(3 * atom_number - 1)
229:       centre_coords(3) = coords(3 * atom_number    )227:       centre_coords(3) = coords(3 * atom_number    )
230:       do j = 1, 4228:       do j = 1, 4
231:          atom_number = sr_atoms(i, j + 1) 229:          atom_number = sr_atoms(i, j + 1) 
232:          neighbour_coords(3 * j - 2) = coords(3 * atom_number - 2)230:          neighbour_coords(3 * j - 2) = coords(3 * atom_number - 2)
233:          neighbour_coords(3 * j - 1) = coords(3 * atom_number - 1)231:          neighbour_coords(3 * j - 1) = coords(3 * atom_number - 1)
234:          neighbour_coords(3 * j    ) = coords(3 * atom_number    )232:          neighbour_coords(3 * j    ) = coords(3 * atom_number    )
271:    integer                                      :: file_length269:    integer                                      :: file_length
272: 270: 
273: #ifdef _SVN_ROOT_271: #ifdef _SVN_ROOT_
274:    call system('python ' // _SVN_ROOT_ // '/SCRIPTS/AMBER/chirality/cistrans.py' // ' coords.prmtop')272:    call system('python ' // _SVN_ROOT_ // '/SCRIPTS/AMBER/chirality/cistrans.py' // ' coords.prmtop')
275: #else273: #else
276:    call system('python ' // cis_trans_script // ' coords.prmtop')274:    call system('python ' // cis_trans_script // ' coords.prmtop')
277: #endif275: #endif
278: 276: 
279: ! Work out the number of peptide bonds by reading the .cis_trans_list file 277: ! Work out the number of peptide bonds by reading the .cis_trans_list file 
280:    num_peptide_bonds = file_length('.cis_trans_list')278:    num_peptide_bonds = file_length('.cis_trans_list')
281:    if (allocated(cis_trans_atoms)) deallocate(cis_trans_atoms)279:    if (.not. allocated(cis_trans_atoms)) allocate(cis_trans_atoms(num_peptide_bonds, 4))
282:    allocate(cis_trans_atoms(num_peptide_bonds, 4)) 
283: 280: 
284: ! Now read the chiral centres into cis_trans_atoms281: ! Now read the chiral centres into cis_trans_atoms
285:    call file_open('.cis_trans_list', file_unit, .false.)282:    call file_open('.cis_trans_list', file_unit, .false.)
286:    do i = 1, num_peptide_bonds283:    do i = 1, num_peptide_bonds
287:       read(file_unit, '(4i8)') cis_trans_atoms(i, :)284:       read(file_unit, '(4i8)') cis_trans_atoms(i, :)
288:    end do285:    end do
289:    close(file_unit)286:    close(file_unit)
290: 287: 
291: ! Print a test copy288: ! Print a test copy
292: !   call file_open('cis_trans_list_copy', file_unit, .false.)289: !   call file_open('cis_trans_list_copy', file_unit, .false.)
293: !   do i = 1, num_peptide_bonds290: !   do i = 1, num_peptide_bonds
294: !      write(file_unit, '(4i8)') cis_trans_atoms(i, :)291: !      write(file_unit, '(4i8)') cis_trans_atoms(i, :)
295: !   end do292: !   end do
296: !   close(file_unit)293: !   close(file_unit)
297: 294: 
298: ! Now calculate the isomerism of the peptide bonds and save it in cis_trans_states_initial295: ! Now calculate the isomerism of the peptide bonds and save it in cis_trans_states_initial
299:    if (allocated(cis_trans_states_initial)) deallocate(cis_trans_states_initial)296:    if (.not. allocated(cis_trans_states_initial)) allocate(cis_trans_states_initial(num_peptide_bonds))
300:    allocate(cis_trans_states_initial(num_peptide_bonds)) 
301:    do i = 1, num_peptide_bonds297:    do i = 1, num_peptide_bonds
302:       do j = 1, 4298:       do j = 1, 4
303:          atom_number = cis_trans_atoms(i, j) 299:          atom_number = cis_trans_atoms(i, j) 
304:          peptide_coords(3 * j - 2) = coords(3 * atom_number - 2)300:          peptide_coords(3 * j - 2) = coords(3 * atom_number - 2)
305:          peptide_coords(3 * j - 1) = coords(3 * atom_number - 1)301:          peptide_coords(3 * j - 1) = coords(3 * atom_number - 1)
306:          peptide_coords(3 * j    ) = coords(3 * atom_number    )302:          peptide_coords(3 * j    ) = coords(3 * atom_number    )
307:       end do303:       end do
308:       cis_trans_states_initial(i) = cis_trans(peptide_coords)304:       cis_trans_states_initial(i) = cis_trans(peptide_coords)
309:    end do 305:    end do 
310: 306: 
548: 544: 
549:    print *, "Angle:" , 180.0 * dihedral(plane_coords_1) / pi545:    print *, "Angle:" , 180.0 * dihedral(plane_coords_1) / pi
550:    print *, "Angle:" , 180.0 * dihedral(plane_coords_2) / pi546:    print *, "Angle:" , 180.0 * dihedral(plane_coords_2) / pi
551:    print *, "Angle:", 180.0 * dihedral(right_angle_coords_1) / pi547:    print *, "Angle:", 180.0 * dihedral(right_angle_coords_1) / pi
552:    print *, "Angle:", 180.0 * dihedral(right_angle_coords_2) / pi548:    print *, "Angle:", 180.0 * dihedral(right_angle_coords_2) / pi
553: 549: 
554:    print *, "Right angle cis/trans: ", cis_trans(right_angle_coords_1)550:    print *, "Right angle cis/trans: ", cis_trans(right_angle_coords_1)
555: 551: 
556: end subroutine test_chirality552: end subroutine test_chirality
557: 553: 
558: subroutine dealloc_states_mutation() 
559:    if (allocated(sr_states)) deallocate(sr_states) 
560: end subroutine dealloc_states_mutation 
561:  
562: end module chirality554: end module chirality


r33110/commons.f90 2017-08-03 17:30:59.875616380 +0100 r33109/commons.f90 2017-08-03 17:31:09.019738176 +0100
652:       INTEGER, ALLOCATABLE ::  MLPOUTCOME(:)652:       INTEGER, ALLOCATABLE ::  MLPOUTCOME(:)
653:       DOUBLE PRECISION, ALLOCATABLE ::  MLQDAT(:,:)653:       DOUBLE PRECISION, ALLOCATABLE ::  MLQDAT(:,:)
654:       INTEGER, ALLOCATABLE ::  MLQOUTCOME(:)654:       INTEGER, ALLOCATABLE ::  MLQOUTCOME(:)
655:       INTEGER, ALLOCATABLE ::  LJADDNN(:,:)655:       INTEGER, ALLOCATABLE ::  LJADDNN(:,:)
656: 656: 
657:       INTEGER, DIMENSION(:,:), ALLOCATABLE :: BONDS !for QCIAMBER657:       INTEGER, DIMENSION(:,:), ALLOCATABLE :: BONDS !for QCIAMBER
658: 658: 
659: !OPEP interface659: !OPEP interface
660:       LOGICAL :: OPEPT, OPEP_RNAT660:       LOGICAL :: OPEPT, OPEP_RNAT
661: 661: 
662: !AMBER mutational steps 
663:       LOGICAL :: AMBERMUTATIONT 
664:       INTEGER :: MUTUNIT,NMUTATION,MUTATIONFREQ,MUTTESTSTEPS,AMBERMUTFF,AMBERMUTIGB 
665:  
666: !Orbital variables662: !Orbital variables
667:       LOGICAL :: ORBITALS663:       LOGICAL :: ORBITALS
668:       INTEGER :: NROTS, NORBS, ORBVAREXPONENT664:       INTEGER :: NROTS, NORBS, ORBVAREXPONENT
669:       DOUBLE PRECISION, ALLOCATABLE :: R2INTS(:,:), DIPINTS(:,:,:)665:       DOUBLE PRECISION, ALLOCATABLE :: R2INTS(:,:), DIPINTS(:,:,:)
670: END MODULE COMMONS666: END MODULE COMMONS


r33110/coordinates_mut.py 2017-08-03 17:31:02.775655007 +0100 r33109/coordinates_mut.py 2017-08-03 17:31:12.011778029 +0100
  1: import amino_acids as aa  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/coordinates_mut.py' in revision 33109
  2: import aa_ringdata as rings 
  3: import numpy as np 
  4: import networkx as nx 
  5: from scipy.linalg import expm3, norm 
  6:  
  7:  
  8: ############################################################################### 
  9: # graph setup for amino acids and coordinate assignments for conserved atoms  # 
 10: ############################################################################### 
 11: #Create graph for amino acid from library data  
 12: def create_tree_for_aa(aa_name): 
 13:     aa_tree = nx.Graph() 
 14:     for atom in aa.atomdata[aa_name]: 
 15:         aa_tree.add_node(atom[0],name=atom[1],element=atom[2],hybrid=atom[3]) 
 16:     aa_tree.add_edges_from(aa.bonddata[aa_name]) 
 17:     return aa_tree 
 18:  
 19: #Assign a given set of coordinates to an amino acid 
 20: def add_coordinates_to_residue(aa_tree , coords): 
 21:     for atom in aa_tree.nodes(): 
 22:         aa_tree.node[atom]['XYZ'] = coords[atom-1] 
 23:  
 24: #Find all atoms that are the side chain 
 25: def find_subgraph_sidechain(aa_tree): 
 26:     atoms_sidechain = list() 
 27:     atoms_backbones = ['N' , 'H' , 'H1' , 'H2' , 'H3' , 'CA' , 'HA' , 'C' , 
 28:                        'O' , 'OXT'] 
 29:     for atom in aa_tree.nodes(): 
 30:         if aa_tree.node[atom]['name'] not in atoms_backbones: 
 31:             atoms_sidechain.append(atom) 
 32:     return nx.subgraph(aa_tree , atoms_sidechain) 
 33:  
 34: #Find all atoms that two amino acids have in common 
 35: def find_identical_atoms(tree1 , tree2): 
 36:     identical_atoms = list() 
 37:     for atom1 in tree1.nodes(): 
 38:         for atom2 in tree2.nodes(): 
 39:             if ((tree1.node[atom1]['name'] == tree2.node[atom2]['name']) and  
 40:                 (tree1.node[atom1]['hybrid'] == tree2.node[atom2]['hybrid'])): 
 41:                     if tree1.node[atom1]['element'] != 'H': 
 42:                         identical_atoms.append((atom1 , atom2)) 
 43:                     else: 
 44:                         host1 = find_all_bonded_neighbours(tree1 , atom1) 
 45:                         host2 = find_all_bonded_neighbours(tree2 , atom2)                        
 46:                         if (len(host1) == 1) and (len(host2) == 1): 
 47:                             host_atom1 = host1[0] 
 48:                             host_atom2 = host2[0] 
 49:                             if ((tree1.node[host_atom1]['name'] == tree2.node[host_atom2]['name']) and  
 50:                                 (tree1.node[host_atom1]['hybrid'] == tree2.node[host_atom2]['hybrid'])): 
 51:                                    identical_atoms.append((atom1 , atom2))                                    
 52:     return identical_atoms 
 53:  
 54: #Assign the coordinates of the backbone atoms (this will always be unchanged!) 
 55: def assign_coordinates_backbone(aa_tree1 , aa_tree2): 
 56:     atoms_backbone = ['N' , 'H' , 'H1' , 'H2' , 'H3' , 'CA' , 'HA' , 'C' , 
 57:                        'O' , 'OXT']    
 58:     for atom1 in aa_tree1.nodes(): 
 59:         if aa_tree1.node[atom1]['name'] in atoms_backbone: 
 60:             for atom2 in aa_tree2.nodes(): 
 61:                 if aa_tree1.node[atom1]['name'] == aa_tree2.node[atom2]['name']: 
 62:                     aa_tree2.node[atom2]['XYZ'] = aa_tree1.node[atom1]['XYZ'] 
 63:  
 64: #Assign the coordinates for all identical atoms (keep as much data as we can!) 
 65: def assign_coordinates_identical_atoms(aa_tree1 , aa_tree2): 
 66:     tree1 = find_subgraph_sidechain(aa_tree1) 
 67:     tree2 = find_subgraph_sidechain(aa_tree2) 
 68:     identical_atoms = find_identical_atoms(tree1 , tree2) 
 69:     for match in identical_atoms: 
 70:         aa_tree2.node[match[1]]['XYZ'] = aa_tree1.node[match[0]]['XYZ'] 
 71:  
 72: #Find all atoms without coordinates 
 73: def find_atoms_without_coords(aa_tree): 
 74:     atoms_unassigned = list() 
 75:     assigned_coordinates = nx.get_node_attributes(aa_tree ,'XYZ') 
 76:     for atom in aa_tree.nodes(): 
 77:         try: 
 78:             assigned_coordinates[atom] 
 79:         except KeyError: 
 80:             atoms_unassigned.append(atom) 
 81:     return atoms_unassigned 
 82:  
 83:  
 84: def get_number_from_name(aa_tree , atomname): 
 85:     return filter(lambda (n, d): d['name'] == atomname, aa_tree.nodes(data=True))[0][0] 
 86:  
 87: def get_bondlength(aa_tree , atom1 , atom2): 
 88:     element1 = aa_tree.node[atom1]['element'] 
 89:     element2 = aa_tree.node[atom2]['element'] 
 90:     hybrid1 = aa_tree.node[atom1]['hybrid'] 
 91:     hybrid2 = aa_tree.node[atom2]['hybrid'] 
 92:     if (element1 == "C") and (element2 == "C"): 
 93:         if (hybrid1 == "sp2") and (hybrid2 == "sp2"): 
 94:             #only in benzene in amino acids 
 95:             return 1.396 
 96:         elif (hybrid1 == "sp2") or (hybrid2 == "sp2"): 
 97:             return 1.500 
 98:         else: 
 99:             return 1.540 
100:     elif (element1 == "H") or (element2 == "H"): 
101:         if (element1 == "C") or (element2 == "C"): 
102:             return 1.090 
103:         elif (element1 == "O") or (element2 == "O"): 
104:             return 0.960 
105:         elif (element1 == "N") or (element2 == "N"): 
106:             return 1.010 
107:         elif (element1 == "S") or (element2 == "S"): 
108:             return 1.340 
109:     elif (element1 == "N") or (element2 == "N"): 
110:         if (hybrid1 == "sp3") and (hybrid2 == "sp3"): 
111:             return 1.470 
112:         elif (hybrid1 == "sp2") and (hybrid2 == "sp2"): 
113:             return 1.335 
114:         else: 
115:             return 1.449 
116:     elif (element1 == "O") or (element2 == "O"): 
117:         if (hybrid1 == "sp3") and (hybrid2 == "sp3"): 
118:             return 1.440 
119:         elif (hybrid1 == "sp2") and (hybrid2 == "sp2"): 
120:             return 1.229 
121:         else: 
122:             return 1.440 
123:     elif (element1 == "S") or (element2 == "S"): 
124:         if (hybrid1 == "sp3") and (hybrid2 == "sp3"): 
125:             return 1.819 
126:         elif (hybrid1 == "sp2") and (hybrid2 == "sp2"): 
127:             return 1.553 
128:         else: 
129:             return 1.800 
130:     else: 
131:         return 1.00 
132:  
133: ############################################################################### 
134: # Vector, matrix and search functions to create coordinates for atoms         # 
135: ############################################################################### 
136: #Find neighbours that are bonded to atoms    
137: def find_all_bonded_neighbours(aa_tree , atom): 
138:     bonds = aa_tree.edges(nbunch = atom) 
139:     neighbouring_atoms = list() 
140:     for bond in bonds: 
141:         if bond[0] != atom: 
142:             neighbouring_atoms.append(bond[0]) 
143:         else: 
144:             neighbouring_atoms.append(bond[1]) 
145:     return neighbouring_atoms 
146:  
147: #Find bonded atoms that have assigned coordinates 
148: def find_neighbours_with_coords(aa_tree , atom): 
149:     neighbours = find_all_bonded_neighbours(aa_tree , atom) 
150:     neighbours_with_coords = list() 
151:     assigned_coordinates = nx.get_node_attributes(aa_tree , 'XYZ') 
152:     for neighbour in neighbours: 
153:         try: 
154:             assigned_coordinates[neighbour] 
155:             neighbours_with_coords.append(neighbour) 
156:         except KeyError: 
157:             pass 
158:     return neighbours_with_coords 
159:  
160: #Derive geometry from element and hybridisation 
161: def vacancy_from_hybrid(aa_tree , atom): 
162:     hybrid = aa_tree.node[atom]['hybrid'] 
163:     element = aa_tree.node[atom]['element'] 
164:     if element == 'C': 
165:         if hybrid == 'sp2': 
166:             return (False , True , False) 
167:         elif hybrid == 'sp3': 
168:             return (True , False , False) 
169:         else: 
170:             raise NameError('C should be sp2 or sp3') 
171:     elif element == 'O': 
172:         if hybrid == 'sp2': 
173:             return (False , False , True) 
174:         elif hybrid == 'sp3': 
175:             return (False , True , False) 
176:         else: 
177:             raise NameError('O should be sp2 or sp3') 
178:     elif element == 'N': 
179:         if hybrid == 'sp2': 
180:             return (False , True , False) 
181:         elif hybrid == 'sp3': 
182:             return (True , False , False) 
183:         else: 
184:             raise NameError('N should be sp2 or sp3') 
185:     elif element == 'H': 
186:         return (False , False , True) 
187:     elif element == 'S': 
188:         if hybrid == 'sp3': 
189:             return (True , False , True) 
190:         else: 
191:             raise NameError('S should be sp3') 
192:     else: 
193:         raise NameError('Element not programmed') 
194:  
195: #Normalisation of vectors 
196: def normalise_vector(vector): 
197:     return vector/np.linalg.norm(vector) 
198:  
199: #Find any perpendicular vector 
200: def find_normal_vector(vector): 
201:     #define a perpendicular vector (at this stage any perpendicular vector is fine) 
202:     if (vector[0] != 0.0 and vector[1] != 0.0):  
203:         perp_vector = np.asarray([vector[1],-vector[0],0.0]) 
204:     elif (vector[0] != 0.0 and vector[2] != 0.0): 
205:         perp_vector = np.asarray([vector[2],0.0,-vector[0]]) 
206:     elif (vector[1] != 0.0 and vector[2] != 0.0): 
207:         perp_vector = np.asarray([0.0,vector[2],-vector[1]]) 
208:     elif (vector == np.asarray([0.0,0.0,0.0])): 
209:         raise NameError('Bonded atoms are on top of each other') 
210:     else: 
211:         if (vector[0] != 0.0): 
212:             perp_vector = np.asarray([0.0,1.0,0.0]) 
213:         else: 
214:             perp_vector = np.asarray([1.0,0.0,0.0]) 
215:     return normalise_vector(perp_vector) 
216:  
217:  
218: #Rotate vector around axis 
219: def rotate_vector(vector , axis , angle): 
220:     theta = np.radians(angle) 
221:     rotmat = expm3(np.cross(np.eye(3), axis/norm(axis)*theta)) 
222:     return np.dot(rotmat,vector) 
223:  
224: def Gram_Schmidt_vector(vec1 , vec2): 
225:     return vec2 - (np.dot(vec1,vec2)/np.dot(vec1,vec1)) * vec1 
226:  
227: def angle_between_vectors(v0 , v1): 
228:     if ((abs(v0[0] - v1[0]) <= 1.0e-6) and (abs(v0[1] - v1[1]) <= 1.0e-6) and  
229:         (abs(v0[2] - v1[2]) <= 1.0e-6)): 
230:         return 0.000 
231:     else: 
232:         plane_normal = normalise_vector(np.cross(v0,v1)) 
233:         angle= np.math.atan2(np.dot(np.cross(v1,v0),plane_normal),np.dot(v0,v1)) 
234:         return np.degrees(angle) 
235:  
236:  
237: ############################################################################### 
238: # Functions relating to cyclic structures                                     # 
239: ###############################################################################      
240: #Find rings in amino acid 
241: def check_for_rings(aa_tree): 
242:     length = len(nx.cycle_basis(aa_tree)) 
243:     if length == 0: 
244:         return False 
245:     else: 
246:         return True 
247:  
248: #Check if all atoms in the ring are sp2 - then we have a planar ring 
249: def check_planarity_ring(aa_tree , ring_atoms): 
250:     for atom in ring_atoms: 
251:         if aa_tree.node[atom]['hybrid'] != 'sp2': 
252:             return False 
253:         else: 
254:             return True 
255:  
256: #Are there any assigned coordinates in the ring? 
257: def get_existing_coords_ring(aa_tree , ring_atoms): 
258:     existing_coords = list() 
259:     ncoords = 0 
260:     for atom in ring_atoms: 
261:         try: 
262:             aa_tree.node[atom]['XYZ'] 
263:             existing_coords.append(atom) 
264:             ncoords += 1 
265:         except KeyError: 
266:             pass 
267:     return ncoords , existing_coords 
268:  
269: def get_atom_list_upto_ring(aa_tree , first_atom): 
270:     atoms_unassigned = find_atoms_without_coords(aa_tree) 
271:     chain_atoms = list() 
272:     for atom in atoms_unassigned: 
273:         if atom <= first_atom: 
274:             chain_atoms.append(atom) 
275:     return chain_atoms 
276:  
277: def assign_coordinates_ring(aa_tree , resname): 
278:     #we assume that only the first C atom is assigned 
279:     CA = get_number_from_name(aa_tree , "CA") 
280:     CB = get_number_from_name(aa_tree , "CB") 
281:     CG = get_number_from_name(aa_tree , "CG") 
282:     CA_coords = np.asarray(aa_tree.node[CA]['XYZ']) 
283:     CB_coords = np.asarray(aa_tree.node[CB]['XYZ']) 
284:     CG_coords = np.asarray(aa_tree.node[CG]['XYZ']) 
285:     CB_lib = np.asarray(rings.axis[resname][0]) 
286:     CG_lib = np.asarray(rings.axis[resname][1]) 
287:     diff_CB = CB_coords - CB_lib 
288:     CG_lib = CG_lib + diff_CB 
289:     CA_CB = CB_coords - CA_coords 
290:     CB_CG_lib = CG_lib - CB_coords 
291:     CB_CG_mol = CG_coords - CB_coords 
292:     lib_vec = Gram_Schmidt_vector(CA_CB , CB_CG_lib) 
293:     mol_vec = Gram_Schmidt_vector(CA_CB , CB_CG_mol) 
294:     angle = angle_between_vectors(lib_vec , mol_vec) 
295:     for atom in rings.ring_atoms[resname].keys(): 
296:         number = get_number_from_name(aa_tree , atom) 
297:         atom_lib = np.asarray(rings.ring_atoms[resname][atom]) 
298:         atom_lib = atom_lib + diff_CB 
299:         position_lib = atom_lib - CB_coords 
300:         new_position = rotate_vector(position_lib , CA_CB , angle) 
301:         aa_tree.node[number]['XYZ'] = new_position + CB_coords 
302:     return 
303:  
304: def position_CG_for_TRP(old_tree , new_tree, oldname): 
305:     if oldname == 'ILE' or oldname == 'CILE' or oldname == 'NILE': 
306:         old_CG1 = get_number_from_name(old_tree , 'CG1') 
307:         new_CG = get_number_from_name(new_tree , 'CG') 
308:         new_tree.node[new_CG]['XYZ'] = old_tree.node[old_CG1]['XYZ'] 
309:     elif oldname == 'THR' or oldname == 'CTHR' or oldname == 'NTHR': 
310:         old_CB = get_number_from_name(old_tree , 'CB') 
311:         old_HB = get_number_from_name(old_tree , 'HB') 
312:         new_CG = get_number_from_name(new_tree , 'CG') 
313:         bond_old = np.asarray(old_tree.node[old_HB]['XYZ']) - np.asarray(old_tree.node[old_CB]['XYZ']) 
314:         new_bond = 1.50 * normalise_vector(bond_old) 
315:         new_tree.node[new_CG]['XYZ'] = np.asarray(old_tree.node[old_CB]['XYZ']) + new_bond 
316:     elif oldname == 'VAL' or oldname == 'CVAL' or oldname == 'NVAL': 
317:         old_CG2 = get_number_from_name(old_tree , 'CG2') 
318:         new_CG = get_number_from_name(new_tree , 'CG') 
319:         new_tree.node[new_CG]['XYZ'] = old_tree.node[old_CG2]['XYZ']         
320:     return 
321:  
322: def check_special_assignment(resname1 , resname2): 
323:     if len(resname1) == 4: 
324:         resname1_ = resname1[1:] 
325:         resname2_ = resname2[1:] 
326:     else: 
327:         resname1_ = resname1 
328:         resname2_ = resname2 
329:     if resname1_ in ['HIS' , 'HID' , 'HIE' , 'HIP']: 
330:         resname1_ = 'HIS' 
331:     if resname2_ in ['HIS' , 'HID' , 'HIE' , 'HIP']: 
332:         resname2_ = 'HIS'    
333:     if (((resname1_ == 'PHE') and (resname2_ == 'TYR')) or  
334:         ((resname2_ == 'PHE') and (resname1_ == 'TYR')) or 
335:         ((resname1_ == 'HIS') and (resname2_ == 'TRP')) or 
336:         ((resname2_ == 'TRP') and (resname1_ == 'HIS'))): 
337:         return True 
338:     else: 
339:         return False 
340:       
341: def special_assignment(aa_trees , resnames): 
342:     aa_tree_old , aa_tree_new = aa_trees 
343:     oldname , newname = resnames 
344:     if len(oldname) == 4: 
345:         oldname_ = oldname[1:] 
346:         newname_ = newname[1:] 
347:     else: 
348:         oldname_ = oldname 
349:         newname_ = newname 
350:     if (((oldname_ == 'PHE') and (newname_ == 'TYR')) or  
351:         ((oldname_ == 'TYR') and (newname_ == 'PHE'))): 
352:         return #basically identical, so the assignment is done already 
353:     #must be TRP <--> HIS in some form, want to assign the five memebered ring 
354:     else: 
355:         if oldname_ == 'TRP': 
356:     #assign all atoms correctly that we have in both/that will be near identical 
357:             old_CD2 = get_number_from_name(aa_tree_old , "CD2") 
358:             old_CD1 = get_number_from_name(aa_tree_old , "CD1") 
359:             old_CE2 = get_number_from_name(aa_tree_old , "CE2") 
360:             old_NE1 = get_number_from_name(aa_tree_old , "NE1") 
361:             old_HD1 = get_number_from_name(aa_tree_old , "HD1") 
362:             old_HE1 = get_number_from_name(aa_tree_old , "HE1")            
363:             new_ND1 = get_number_from_name(aa_tree_new , "ND1") 
364:             new_CD2 = get_number_from_name(aa_tree_new , "CD2") 
365:             new_CE1 = get_number_from_name(aa_tree_new , "CE1") 
366:             new_NE2 = get_number_from_name(aa_tree_new , "NE2") 
367:             new_HD2 = get_number_from_name(aa_tree_new , "HD2") 
368:             new_HE2 = get_number_from_name(aa_tree_new , "HE2")             
369:             aa_tree_new.node[new_ND1]['XYZ'] = aa_tree_old.node[old_CD2]['XYZ'] 
370:             aa_tree_new.node[new_CD2]['XYZ'] = aa_tree_old.node[old_CD1]['XYZ'] 
371:             aa_tree_new.node[new_CE1]['XYZ'] = aa_tree_old.node[old_CE2]['XYZ'] 
372:             aa_tree_new.node[new_NE2]['XYZ'] = aa_tree_old.node[old_NE1]['XYZ'] 
373:             aa_tree_new.node[new_HD2]['XYZ'] = aa_tree_old.node[old_HD1]['XYZ'] 
374:             aa_tree_new.node[new_HE2]['XYZ'] = aa_tree_old.node[old_HE1]['XYZ']                   
375:         else: 
376:     #assign all atoms correctly that we have in both/that will be near identical            
377:             old_ND1 = get_number_from_name(aa_tree_old , "ND1") 
378:             old_CD2 = get_number_from_name(aa_tree_old , "CD2") 
379:             old_CE1 = get_number_from_name(aa_tree_old , "CE1") 
380:             old_NE2 = get_number_from_name(aa_tree_old , "NE2") 
381:             old_HD2 = get_number_from_name(aa_tree_old , "HD2") 
382:             new_CD2 = get_number_from_name(aa_tree_new , "CD2") 
383:             new_CD1 = get_number_from_name(aa_tree_new , "CD1") 
384:             new_CE2 = get_number_from_name(aa_tree_new , "CE2") 
385:             new_NE1 = get_number_from_name(aa_tree_new , "NE1") 
386:             new_HD1 = get_number_from_name(aa_tree_new , "HD1")           
387:             aa_tree_new.node[new_CD2]['XYZ'] = aa_tree_old.node[old_ND1]['XYZ'] 
388:             aa_tree_new.node[new_CD1]['XYZ'] = aa_tree_old.node[old_CD2]['XYZ'] 
389:             aa_tree_new.node[new_CE2]['XYZ'] = aa_tree_old.node[old_CE1]['XYZ'] 
390:             aa_tree_new.node[new_NE1]['XYZ'] = aa_tree_old.node[old_NE2]['XYZ'] 
391:             aa_tree_new.node[new_HD1]['XYZ'] = aa_tree_old.node[old_HD2]['XYZ'] 
392:             try: 
393:                 old_HE2 = get_number_from_name(aa_tree_old , "HE2") 
394:                 new_HE1 = get_number_from_name(aa_tree_new , "HE1")  
395:                 aa_tree_new.node[new_HE1]['XYZ'] = aa_tree_old.node[old_HE2]['XYZ'] 
396:             except IndexError:  
397:                 pass 
398:             #assign ring atoms for TRP 
399:             old_HE1 = get_number_from_name(aa_tree_old , "HE1") 
400:             H_coords = np.asarray(aa_tree_old.node[old_HE1]['XYZ']) 
401:             #HE1 is essentially where the next C is 
402:             host_coords = np.asarray(aa_tree_new.node[new_CE2]['XYZ']) 
403:             bond_vector = H_coords - host_coords 
404:             new_bond_vector = 1.39 * normalise_vector(bond_vector) 
405:             new_CZ2 = get_number_from_name(aa_tree_new , "CZ2") 
406:             aa_tree_new.node[new_CZ2]['XYZ'] = host_coords + new_bond_vector 
407:             #now go for CE3 --> rotation of CZ2 
408:             CE2_CD2 = np.asarray(aa_tree_new.node[new_CD2]['XYZ']) - np.asarray(aa_tree_new.node[new_CE2]['XYZ'])          
409:             CE2_CZ2 = np.asarray(aa_tree_new.node[new_CZ2]['XYZ']) - np.asarray(aa_tree_new.node[new_CE2]['XYZ']) 
410:             normal = Gram_Schmidt_vector(CE2_CD2 , CE2_CZ2) 
411:             midpoint = 0.5 * (np.asarray(aa_tree_new.node[new_CD2]['XYZ']) + np.asarray(aa_tree_new.node[new_CE2]['XYZ'])) 
412:             CZ2_mid = np.asarray(aa_tree_new.node[new_CZ2]['XYZ']) - midpoint 
413:             CE3_mid = rotate_vector(CZ2_mid , normal , 180.0) 
414:             new_CE3 = get_number_from_name(aa_tree_new , "CE3") 
415:             aa_tree_new.node[new_CE3]['XYZ'] = midpoint + CE3_mid 
416:             #now do the last two by rotations 
417:             new_CZ3 = get_number_from_name(aa_tree_new , "CZ3") 
418:             new_CH2 = get_number_from_name(aa_tree_new , "CH2") 
419:             CE3_CZ2 = np.asarray(aa_tree_new.node[new_CZ2]['XYZ']) - np.asarray(aa_tree_new.node[new_CE3]['XYZ']) 
420:             CE3_CD2 = np.asarray(aa_tree_new.node[new_CD2]['XYZ']) - np.asarray(aa_tree_new.node[new_CE3]['XYZ']) 
421:             CZ2_CE2 = np.asarray(aa_tree_new.node[new_CE2]['XYZ']) - np.asarray(aa_tree_new.node[new_CZ2]['XYZ']) 
422:             perp_CH2 = Gram_Schmidt_vector(CE3_CZ2 , -CZ2_CE2) 
423:             par_CH2 = -CZ2_CE2 - perp_CH2 
424:             perp_CZ3 = Gram_Schmidt_vector(CE3_CZ2 , -CE3_CD2) 
425:             par_CZ3 = -CE3_CD2 - perp_CZ3 
426:             aa_tree_new.node[new_CH2]['XYZ'] = aa_tree_new.node[new_CZ2]['XYZ'] + perp_CH2 - par_CH2 
427:             aa_tree_new.node[new_CZ3]['XYZ'] = aa_tree_new.node[new_CE3]['XYZ'] + perp_CZ3 - par_CZ3 
428:         return 
429:   
430: def mutate_GLY_chiral(aa_tree_old , aa_tree_new): 
431:     N = np.asarray(aa_tree_old.node[get_number_from_name(aa_tree_old,'N')]['XYZ']) 
432:     CA = np.asarray(aa_tree_old.node[get_number_from_name(aa_tree_old,'CA')]['XYZ']) 
433:     HA2 = np.asarray(aa_tree_old.node[get_number_from_name(aa_tree_old,'HA2')]['XYZ']) 
434:     HA3 = np.asarray(aa_tree_old.node[get_number_from_name(aa_tree_old,'HA3')]['XYZ']) 
435:     C = np.asarray(aa_tree_old.node[get_number_from_name(aa_tree_old,'C')]['XYZ']) 
436:     normal = normalise_vector(np.cross((N - CA) , (N - C))) 
437:     HA2_HA3 = normalise_vector(HA2 - HA3) 
438:     dotp = np.dot(normal , HA2_HA3) 
439:     CA = get_number_from_name(aa_tree_old , 'CA') 
440:     HA2 = get_number_from_name(aa_tree_old , 'HA2') 
441:     HA3 = get_number_from_name(aa_tree_old , 'HA3') 
442:     HA = get_number_from_name(aa_tree_new , 'HA') 
443:     CB = get_number_from_name(aa_tree_new , 'CB') 
444:     if dotp > 0.0:        
445:         aa_tree_new.node[HA]['XYZ'] = aa_tree_old.node[HA2]['XYZ'] 
446:         bond = np.asarray(aa_tree_old.node[HA3]['XYZ']) - np.asarray(aa_tree_old.node[CA]['XYZ']) 
447:         aa_tree_new.node[CB]['XYZ'] = np.asarray(aa_tree_old.node[CA]['XYZ']) + 1.540 * bond 
448:     else: 
449:         aa_tree_new.node[HA]['XYZ'] = aa_tree_old.node[HA3]['XYZ'] 
450:         bond = np.asarray(aa_tree_old.node[HA2]['XYZ']) - np.asarray(aa_tree_old.node[CA]['XYZ']) 
451:         aa_tree_new.node[CB]['XYZ'] = np.asarray(aa_tree_old.node[CA]['XYZ']) + 1.540 * bond         
452:     return 
453:  
454: def mutate_HYP_from_PRO(aa_tree_old , aa_tree_new): 
455:     CG_old  = get_number_from_name(aa_tree_old , 'CG' ) 
456:     HG2_old = get_number_from_name(aa_tree_old , 'HG2') 
457:     HG3_old = get_number_from_name(aa_tree_old , 'HG3') 
458:     CG_new  = get_number_from_name(aa_tree_new , 'CG' ) 
459:     HG_new  = get_number_from_name(aa_tree_new , 'HG' ) 
460:     OD1_new = get_number_from_name(aa_tree_new , 'OD1') 
461:     aa_tree_new.node[HG_new]['XYZ'] = aa_tree_old.node[HG2_old]['XYZ'] 
462:     CG_HG3 = np.asarray(aa_tree_old.node[HG3_old]['XYZ']) - np.asarray(aa_tree_old.node[CG_old]['XYZ']) 
463:     CG_coords = aa_tree_new.node[CG_new]['XYZ'] 
464:     aa_tree_new.node[OD1_new]['XYZ'] = CG_coords + 1.440 * normalise_vector(CG_HG3) 
465:     return 
466:           
467:  
468: def check_chirality_ILE(aa_tree_new): 
469:     CB  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CB')]['XYZ']) 
470:     CA  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CA')]['XYZ']) 
471:     HB  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'HB')]['XYZ']) 
472:     CG1 = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CG1')]['XYZ']) 
473:     CG2 = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CG2')]['XYZ']) 
474:     normal = normalise_vector(np.cross((CG1 - CB) , (CA - CB))) 
475:     CG2_HB = normalise_vector(CG2 - HB) 
476:     if np.dot(normal , CG2_HB) > 0.0: #wronmg chirality 
477:         #switch HB and CG2, and then delete H 
478:         HB = get_number_from_name(aa_tree_new , 'HB') 
479:         CG2 = get_number_from_name(aa_tree_new , 'CG2') 
480:         CB = get_number_from_name(aa_tree_new , 'CB') 
481:         HB_coords = np.asarray(aa_tree_new.node[HB]['XYZ']) 
482:         CB_coords = np.asarray(aa_tree_new.node[CB]['XYZ']) 
483:         CG2_coords = np.asarray(aa_tree_new.node[CG2]['XYZ'])         
484:         bond_CC = np.linalg.norm(CG2_coords - CB_coords) 
485:         bond_CH = np.linalg.norm(HB_coords - CB_coords) 
486:         aa_tree_new.node[CG2]['XYZ'] = CB_coords + bond_CC * normalise_vector(HB_coords - CB_coords) 
487:         aa_tree_new.node[HB]['XYZ'] = CB_coords + bond_CH * normalise_vector(CG2_coords - CB_coords) 
488:         try: 
489:             del aa_tree_new.node[CG2 + 1]['XYZ'] 
490:             del aa_tree_new.node[CG2 + 2]['XYZ'] 
491:             del aa_tree_new.node[CG2 + 3]['XYZ'] 
492:         except KeyError: 
493:             pass 
494:     return 
495:  
496: def check_chirality_THR(aa_tree_new): 
497:     CB  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CB')]['XYZ']) 
498:     CA  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CA')]['XYZ']) 
499:     HB  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'HB')]['XYZ']) 
500:     OG1 = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'OG1')]['XYZ']) 
501:     CG2 = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CG2')]['XYZ']) 
502:     normal = normalise_vector(np.cross((CG2 - CB) , (CA - CB))) 
503:     OG1_HB = normalise_vector(OG1 - HB) 
504:     if np.dot(normal , OG1_HB) < 0.0: #wronmg chirality 
505:         #switch HB and OG1, and then delete H 
506:         HB = get_number_from_name(aa_tree_new , 'HB') 
507:         OG1 = get_number_from_name(aa_tree_new , 'OG1') 
508:         CB = get_number_from_name(aa_tree_new , 'CB') 
509:         HB_coords = np.asarray(aa_tree_new.node[HB]['XYZ']) 
510:         CB_coords = np.asarray(aa_tree_new.node[CB]['XYZ']) 
511:         OG1_coords = np.asarray(aa_tree_new.node[OG1]['XYZ'])         
512:         bond_CO = np.linalg.norm(OG1_coords - CB_coords) 
513:         bond_CH = np.linalg.norm(HB_coords - CB_coords) 
514:         aa_tree_new.node[OG1]['XYZ'] = CB_coords + bond_CO * normalise_vector(HB_coords - CB_coords) 
515:         aa_tree_new.node[HB]['XYZ'] = CB_coords + bond_CH * normalise_vector(OG1_coords - CB_coords) 
516:         try: 
517:             del aa_tree_new.node[OG1 + 1]['XYZ'] 
518:         except KeyError: 
519:             pass 
520:     return 
521:  
522: def check_chirality_HYP(aa_tree_new):    
523:     CG  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CG')]['XYZ']) 
524:     CB  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CB')]['XYZ']) 
525:     CD  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'CD')]['XYZ']) 
526:     OD1 = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'OD1')]['XYZ']) 
527:     HG  = np.asarray(aa_tree_new.node[get_number_from_name(aa_tree_new,'HG')]['XYZ']) 
528:     normal = normalise_vector(np.cross((CD - CG) , (CB - CG))) 
529:     OD1_HG = normalise_vector(OD1 - HG) 
530:     if np.dot(normal , OD1_HG) > 0.0: #wrong chirality 
531:         #switch HG and OD1, and then delete H 
532:         HG = get_number_from_name(aa_tree_new , 'HG') 
533:         OD1 = get_number_from_name(aa_tree_new , 'OD1') 
534:         CG = get_number_from_name(aa_tree_new , 'CG') 
535:         HG_coords = np.asarray(aa_tree_new.node[HG]['XYZ']) 
536:         CG_coords = np.asarray(aa_tree_new.node[CG]['XYZ']) 
537:         OD1_coords = np.asarray(aa_tree_new.node[OD1]['XYZ'])         
538:         bond_CO = np.linalg.norm(OD1_coords - CG_coords) 
539:         bond_CH = np.linalg.norm(HG_coords - CG_coords) 
540:         aa_tree_new.node[OD1]['XYZ'] = CG_coords + bond_CO * normalise_vector(HG_coords - CG_coords) 
541:         aa_tree_new.node[HG]['XYZ'] = CG_coords + bond_CH * normalise_vector(OD1_coords - CG_coords) 
542:         try: 
543:             del aa_tree_new.node[OD1 + 1]['XYZ'] 
544:         except KeyError: 
545:             pass 
546:     return 
547:  
548:  
549: def create_proline_coords(aa_tree): 
550:     CA = get_number_from_name(aa_tree , "CA") 
551:     N  = get_number_from_name(aa_tree , "N") 
552:     CB = get_number_from_name(aa_tree , "CB") 
553:     CG = get_number_from_name(aa_tree , "CG") 
554:     CD = get_number_from_name(aa_tree , "CD") 
555:     CA_coords = np.asarray(aa_tree.node[CA]['XYZ']) 
556:     N_coords  = np.asarray(aa_tree.node[N]['XYZ']) 
557:     CB_coords  = np.asarray(aa_tree.node[CB]['XYZ']) 
558:  
559:     N_CA = CB_coords - N_coords 
560:     N_CB = CA_coords - N_coords 
561:     perp_1 = Gram_Schmidt_vector(N_CB , N_CA) 
562:     midpoint1 = 0.5 * (N_coords + CA_coords) 
563:     midpoint2 = midpoint1 + perp_1 
564:     CD_coords = midpoint2 + (midpoint2 - CB_coords) 
565:     perp_2 = np.cross(perp_1 , midpoint2 - CB_coords) 
566:     CG_coords = midpoint2 + 0.5 * perp_1 + 0.33 * perp_2 
567:     aa_tree.node[CG]['XYZ'] = CG_coords 
568:     aa_tree.node[CD]['XYZ'] = CD_coords     
569:     return    
570:  
571:  
572: ############################################################################### 
573: # Create coordinates given we have one bonded neighbour with coordinates(host)# 
574: ############################################################################### 
575: def create_new_coords_one_host(aa_tree , new_atom , host_atom): 
576:     neighbours_host = find_neighbours_with_coords(aa_tree , host_atom) 
577:     host_coords = np.asarray(aa_tree.node[host_atom]['XYZ']) 
578:     neighbours_coords = [np.asarray(aa_tree.node[x]['XYZ']) for x in neighbours_host] 
579:     bondlength = get_bondlength(aa_tree , new_atom , host_atom) 
580:     tetrahedral , planar , terminal = vacancy_from_hybrid(aa_tree , host_atom) 
581:     if len(neighbours_host) == 0: 
582:         del aa_tree.node[host_atom]['XYZ'] 
583:     elif tetrahedral: 
584:         if len(neighbours_host) == 1: 
585:             #find vector along bond 
586:             bond_vector = np.asarray(host_coords) - np.asarray(neighbours_coords[0]) 
587:             perp_unit = find_normal_vector(bond_vector) 
588:             new_bond_vector = -(rotate_vector(bond_vector , perp_unit , 109.5)) 
589:             new_bond_vector = bondlength * normalise_vector(new_bond_vector) 
590:             aa_tree.node[new_atom]['XYZ'] = host_coords + new_bond_vector 
591:         elif len(neighbours_host) == 2: 
592:             neighbour1 = np.asarray(neighbours_coords[0]) 
593:             neighbour2 = np.asarray(neighbours_coords[1]) 
594:             bond1 = np.asarray(neighbour1 - host_coords) 
595:             bond2 = np.asarray(neighbour2 - host_coords) 
596:             perp_1 = Gram_Schmidt_vector(bond2 , bond1) 
597:             para_1 = bond1 - perp_1 
598:             new_perp = rotate_vector(perp_1 , bond2 , -120.0) 
599:             new_bond = new_perp + para_1 
600:             new_bond = bondlength * normalise_vector(new_bond) 
601:             aa_tree.node[new_atom]['XYZ'] = host_coords + new_bond 
602:         elif len(neighbours_host) == 3: 
603:             centroid = np.asarray([0.0 , 0.0 , 0.0]) 
604:             for atom in neighbours_host: 
605:                 centroid += aa_tree.node[atom]['XYZ'] 
606:             centroid = np.asarray([centroid[0]/3.0 , centroid[1]/3.0 , centroid[2]/3.0]) 
607:             new_bond_vector= host_coords - centroid 
608:             new_bond_vector = bondlength * normalise_vector(new_bond_vector) 
609:             aa_tree.node[new_atom]['XYZ'] = host_coords + new_bond_vector 
610:         else: 
611:             raise NameError('''Too few or many neighbours known for creating a  
612:                                tetrahedral centre''') 
613:     elif planar: 
614:         if len(neighbours_host) == 1: 
615:             bond_vector = host_coords - neighbours_coords[0] 
616:             perp_unit = find_normal_vector(bond_vector) 
617:             new_bond_vector = -(rotate_vector(bond_vector , perp_unit , 120.0)) 
618:             new_bond_vector = bondlength * normalise_vector(new_bond_vector) 
619:             aa_tree.node[new_atom]['XYZ'] = host_coords + new_bond_vector 
620:         elif len(neighbours_host) == 2: 
621:             bond1 = host_coords - neighbours_coords[0] 
622:             bond2 = host_coords - neighbours_coords[1] 
623:             perp_1 = Gram_Schmidt_vector(bond2 , bond1) 
624:             para_1 = bond1 - perp_1 
625:             new_bond_vector = perp_1 - para_1 
626:             new_bond_vector = bondlength * normalise_vector(new_bond_vector) 
627:             aa_tree.node[new_atom]['XYZ'] = host_coords + new_bond_vector 
628:         else: 
629:             raise NameError('''Too few or many neighbours known for creating a  
630:                                planar centre''') 
631:     else: 
632:         raise NameError('Cannot create new bond with terminal atom') 
633:  
634: ############################################################################### 
635: # Create coordinates given we have more than one host                         # 
636: ############################################################################### 
637: def remove_multiple_hosts(aa_tree , hosts): 
638:     for host in hosts: 
639:         if aa_tree.node[host]["element"] == "H": 
640:             del aa_tree.node[host]['XYZ'] 
641:     if len(hosts) == 2: 
642:         atom1 = hosts[0] 
643:         atom2 = hosts[1] 
644:         if atom1 > atom2: 
645:             try: 
646:                 del aa_tree.node[atom1]['XYZ'] 
647:             except KeyError: 
648:                 pass 
649:         else: 
650:             try: 
651:                 del aa_tree.node[atom2]['XYZ'] 
652:             except KeyError: 
653:                 pass                 
654:     return 


r33110/disconnectionDPS.f90 2017-08-03 17:30:59.099606043 +0100 r33109/disconnectionDPS.f90 2017-08-03 17:31:08.211727413 +0100
249: ! MAXTSBARRIER <threshold> ignore transition states with both barriers above this threshold.249: ! MAXTSBARRIER <threshold> ignore transition states with both barriers above this threshold.
250: !250: !
251: ! MINBARRIER <threshold> ignore transition states with either barrier below this threshold.251: ! MINBARRIER <threshold> ignore transition states with either barrier below this threshold.
252: ! Default is -1.0D100252: ! Default is -1.0D100
253: !253: !
254: ! WEIGHTS <file>254: ! WEIGHTS <file>
255: ! If present, use weights in <file> to scale the horizontal width. The expected 255: ! If present, use weights in <file> to scale the horizontal width. The expected 
256: ! format of <file> is 256: ! format of <file> is 
257: ! bin number  Vmin   Vmax  ln weight257: ! bin number  Vmin   Vmax  ln weight
258: !258: !
259: ! WIDELINECOL  
260: ! To use with TRMIN. To highlight the coloured branches of the disconnectivity graph their width is set  
261: ! to twice the normal line width.  
262: ! 
263: ! ZEROGM259: ! ZEROGM
264: ! Shift all energies so that the global minimum (or the lowest-energy minimum in the connected 260: ! Shift all energies so that the global minimum (or the lowest-energy minimum in the connected 
265: ! component to be plotted) is at 0.261: ! component to be plotted) is at 0.
266: !262: !
267: ! COLOURFRONT263: ! COLOURFRONT
268: ! put the coloured brances in the front of default black branches.264: ! put the coloured brances in the front of default black branches.
269: 265: 
270: !................................................................................!266: !................................................................................!
271: 267: 
272: !!!268: !!!
596:    LOGICAL :: TRVALT=.FALSE.592:    LOGICAL :: TRVALT=.FALSE.
597:    LOGICAL :: PAIRST=.FALSE.593:    LOGICAL :: PAIRST=.FALSE.
598:    LOGICAL :: PAIRSF=.TRUE.594:    LOGICAL :: PAIRSF=.TRUE.
599:    LOGICAL :: PAIRSSWITCH=.FALSE.595:    LOGICAL :: PAIRSSWITCH=.FALSE.
600:    LOGICAL :: BASINT=.FALSE.596:    LOGICAL :: BASINT=.FALSE.
601:    LOGICAL :: WEIGHTLOWER=.FALSE.597:    LOGICAL :: WEIGHTLOWER=.FALSE.
602:    LOGICAL :: TRVALSCALET=.FALSE.598:    LOGICAL :: TRVALSCALET=.FALSE.
603:    LOGICAL :: MATCHMIN=.FALSE.599:    LOGICAL :: MATCHMIN=.FALSE.
604:    LOGICAL :: COLOURFRONTT=.FALSE.600:    LOGICAL :: COLOURFRONTT=.FALSE.
605:    LOGICAL :: CHOOSECOLOURST=.FALSE.601:    LOGICAL :: CHOOSECOLOURST=.FALSE.
606:    LOGICAL :: WIDELINECOLT=.FALSE. 
607:    INTEGER, ALLOCATABLE :: NCONN(:)602:    INTEGER, ALLOCATABLE :: NCONN(:)
608:    INTEGER, ALLOCATABLE :: JOINED(:,:)603:    INTEGER, ALLOCATABLE :: JOINED(:,:)
609: 604: 
610: END MODULE VARS605: END MODULE VARS
611: !................................................................................!606: !................................................................................!
612: !MODULE PAGE607: !MODULE PAGE
613: MODULE PAGE608: MODULE PAGE
614: 609: 
615:    IMPLICIT NONE610:    IMPLICIT NONE
616:    INTEGER :: PAGE_X=595,  PAGE_Y=842611:    INTEGER :: PAGE_X=595,  PAGE_Y=842
1726:                   IF (MARKNODE(I,K) ==1)  WRITE (20, '(A)') '1 0 0  setrgbcolor' !red1721:                   IF (MARKNODE(I,K) ==1)  WRITE (20, '(A)') '1 0 0  setrgbcolor' !red
1727:                   IF (MARKNODE(I,K) ==3)  WRITE (20, '(A)') '0 1 0 setrgbcolor'  !green1722:                   IF (MARKNODE(I,K) ==3)  WRITE (20, '(A)') '0 1 0 setrgbcolor'  !green
1728:                   IF (MARKNODE(I,K) ==2)  WRITE (20, '(A)') '0 0 1 setrgbcolor'  !blue1723:                   IF (MARKNODE(I,K) ==2)  WRITE (20, '(A)') '0 0 1 setrgbcolor'  !blue
1729:                   IF (MARKNODE(I,K) ==4)  WRITE (20, '(A)') '1 0 1 setrgbcolor' !magenta1724:                   IF (MARKNODE(I,K) ==4)  WRITE (20, '(A)') '1 0 1 setrgbcolor' !magenta
1730:                   IF (MARKNODE(I,K) ==5)  WRITE (20, '(A)') '1 0.5 0 setrgbcolor' !orange1725:                   IF (MARKNODE(I,K) ==5)  WRITE (20, '(A)') '1 0.5 0 setrgbcolor' !orange
1731:                   IF (MARKNODE(I,K) ==6)  WRITE (20, '(A)') '1.0 0.2 0.2 setrgbcolor'1726:                   IF (MARKNODE(I,K) ==6)  WRITE (20, '(A)') '1.0 0.2 0.2 setrgbcolor'
1732:                   IF (MARKNODE(I,K) ==7)  WRITE (20, '(A)') '0 0 0 setrgbcolor'    !black1727:                   IF (MARKNODE(I,K) ==7)  WRITE (20, '(A)') '0 0 0 setrgbcolor'    !black
1733:                   IF (MARKNODE(I,K) ==8)  WRITE (20, '(A)') '1 0.5 1 setrgbcolor'  1728:                   IF (MARKNODE(I,K) ==8)  WRITE (20, '(A)') '1 0.5 1 setrgbcolor'  
1734:                   IF (MARKNODE(I,K) ==9)  WRITE (20, '(A)') '1 0 0.5 setrgbcolor'  1729:                   IF (MARKNODE(I,K) ==9)  WRITE (20, '(A)') '1 0 0.5 setrgbcolor'  
1735:                  ENDIF1730:                  ENDIF
1736:                  IF (WIDELINECOLT) WRITE (20,'(A)') '4.5 setlinewidth' 
1737:                  WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x3, y3, ' ls'1731:                  WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x3, y3, ' ls'
1738:                  WRITE (20, '(A)') '0 0 0 setrgbcolor'1732:                  WRITE (20, '(A)') '0 0 0 setrgbcolor'
1739:                  IF (WIDELINECOLT) WRITE (20,'(A)') '1.5 setlinewidth' 
1740:                ELSE1733:                ELSE
1741:                  WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x3, y3, ' ls'1734:                  WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x3, y3, ' ls'
1742:                ENDIF1735:                ENDIF
1743:             ELSE IF (TRVALT) THEN ! otherwise DPMARKNODE is not allocated1736:             ELSE IF (TRVALT) THEN ! otherwise DPMARKNODE is not allocated
1744:                IF (DPMARKNODE(I,K).GE.0.0D0) THEN1737:                IF (DPMARKNODE(I,K).GE.0.0D0) THEN
1745:                   R2=(CSHIFT+DPMARKNODE(I,K)*CSCALE)*3.0D01738:                   R2=(CSHIFT+DPMARKNODE(I,K)*CSCALE)*3.0D0
1746:                   IF (R2.GT.3.0D0) THEN1739:                   IF (R2.GT.3.0D0) THEN
1747:                      WRITE(6,*) 'WARNING: value of DPMARKNODE is ',DPMARKNODE(I,K),' for ',i,k1740:                      WRITE(6,*) 'WARNING: value of DPMARKNODE is ',DPMARKNODE(I,K),' for ',i,k
1748:                      R2=3.0D01741:                      R2=3.0D0
1749:                   END IF1742:                   END IF
1833:                    IF (MARKNODE(I,K) ==1)  WRITE (20, '(A)') '1 0 0  setrgbcolor' !red1826:                    IF (MARKNODE(I,K) ==1)  WRITE (20, '(A)') '1 0 0  setrgbcolor' !red
1834:                    IF (MARKNODE(I,K) ==3)  WRITE (20, '(A)') '0 1 0 setrgbcolor'  !green1827:                    IF (MARKNODE(I,K) ==3)  WRITE (20, '(A)') '0 1 0 setrgbcolor'  !green
1835:                    IF (MARKNODE(I,K) ==2)  WRITE (20, '(A)') '0 0 1 setrgbcolor'  !blue1828:                    IF (MARKNODE(I,K) ==2)  WRITE (20, '(A)') '0 0 1 setrgbcolor'  !blue
1836:                    IF (MARKNODE(I,K) ==4)  WRITE (20, '(A)') '1 0 1 setrgbcolor' !magenta1829:                    IF (MARKNODE(I,K) ==4)  WRITE (20, '(A)') '1 0 1 setrgbcolor' !magenta
1837:                    IF (MARKNODE(I,K) ==5)  WRITE (20, '(A)') '1 0.5 0 setrgbcolor' !orange1830:                    IF (MARKNODE(I,K) ==5)  WRITE (20, '(A)') '1 0.5 0 setrgbcolor' !orange
1838:                    IF (MARKNODE(I,K) ==6)  WRITE (20, '(A)') '1.0 0.2 0.2 setrgbcolor'1831:                    IF (MARKNODE(I,K) ==6)  WRITE (20, '(A)') '1.0 0.2 0.2 setrgbcolor'
1839:                    IF (MARKNODE(I,K) ==7)  WRITE (20, '(A)') '0 0 0 setrgbcolor'    !black1832:                    IF (MARKNODE(I,K) ==7)  WRITE (20, '(A)') '0 0 0 setrgbcolor'    !black
1840:                    IF (MARKNODE(I,K) ==8)  WRITE (20, '(A)') '1 0.5 1 setrgbcolor'  1833:                    IF (MARKNODE(I,K) ==8)  WRITE (20, '(A)') '1 0.5 1 setrgbcolor'  
1841:                    IF (MARKNODE(I,K) ==9)  WRITE (20, '(A)') '1 0 0.5 setrgbcolor'  1834:                    IF (MARKNODE(I,K) ==9)  WRITE (20, '(A)') '1 0 0.5 setrgbcolor'  
1842:                   ENDIF1835:                   ENDIF
1843:                   IF (WIDELINECOLT) WRITE (20, '(A)') '4.5 setlinewidth' 1836:  
1844: !                 IF (MARKNODE(I,K) ==1)  WRITE (20, '(A)') '1 0 0  setrgbcolor'1837: !                 IF (MARKNODE(I,K) ==1)  WRITE (20, '(A)') '1 0 0  setrgbcolor'
1845: !                 IF (MARKNODE(I,K) ==2)  WRITE (20, '(A)') '1 0.5 0 setrgbcolor'1838: !                 IF (MARKNODE(I,K) ==2)  WRITE (20, '(A)') '1 0.5 0 setrgbcolor'
1846: !                 IF (MARKNODE(I,K) ==3)  WRITE (20, '(A)') '1 1 0 setrgbcolor'1839: !                 IF (MARKNODE(I,K) ==3)  WRITE (20, '(A)') '1 1 0 setrgbcolor'
1847: !                 IF (MARKNODE(I,K) ==4)  WRITE (20, '(A)') '0.5 1 0 setrgbcolor'1840: !                 IF (MARKNODE(I,K) ==4)  WRITE (20, '(A)') '0.5 1 0 setrgbcolor'
1848: !                 IF (MARKNODE(I,K) ==5)  WRITE (20, '(A)') '0 1 0 setrgbcolor'1841: !                 IF (MARKNODE(I,K) ==5)  WRITE (20, '(A)') '0 1 0 setrgbcolor'
1849: !                 IF (MARKNODE(I,K) ==6)  WRITE (20, '(A)') '0 1 0.5 setrgbcolor'1842: !                 IF (MARKNODE(I,K) ==6)  WRITE (20, '(A)') '0 1 0.5 setrgbcolor'
1850: !                 IF (MARKNODE(I,K) ==7)  WRITE (20, '(A)') '0 1 1 setrgbcolor'1843: !                 IF (MARKNODE(I,K) ==7)  WRITE (20, '(A)') '0 1 1 setrgbcolor'
1851: !                 IF (MARKNODE(I,K) ==8)  WRITE (20, '(A)') '0 0.5 1 setrgbcolor'1844: !                 IF (MARKNODE(I,K) ==8)  WRITE (20, '(A)') '0 0.5 1 setrgbcolor'
1852: !                 IF (MARKNODE(I,K) ==9)  WRITE (20, '(A)') '0 0 1 setrgbcolor'1845: !                 IF (MARKNODE(I,K) ==9)  WRITE (20, '(A)') '0 0 1 setrgbcolor'
1853: !                 IF (MARKNODE(I,K) ==10)  WRITE (20, '(A)') '0.5 0 1 setrgbcolor'1846: !                 IF (MARKNODE(I,K) ==10)  WRITE (20, '(A)') '0.5 0 1 setrgbcolor'
1854:                   WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x2, y2, ' ls'1847:                   WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x2, y2, ' ls'
1855:                   WRITE (20, '(A)') '0 0 0 setrgbcolor'1848:                   WRITE (20, '(A)') '0 0 0 setrgbcolor'
1856:                   IF (WIDELINECOLT) WRITE (20, '(A)') '1.5 setlinewidth' 
1857:                ELSE1849:                ELSE
1858:                   WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x2, y2, ' ls'1850:                   WRITE (20, '(2F7.2, A, 2F7.2, A)') x1, y1, ' mt ', x2, y2, ' ls'
1859:                ENDIF1851:                ENDIF
1860:             ELSE IF (TRVALT) THEN1852:             ELSE IF (TRVALT) THEN
1861:                IF (DPMARKNODE(I,K).GE.0.0D0) THEN1853:                IF (DPMARKNODE(I,K).GE.0.0D0) THEN
1862:                    R2=(CSHIFT+DPMARKNODE(I,K)*CSCALE)*3.0D01854:                    R2=(CSHIFT+DPMARKNODE(I,K)*CSCALE)*3.0D0
1863:                    IF (R2.GT.3.0D0) THEN1855:                    IF (R2.GT.3.0D0) THEN
1864:                       WRITE(6,*) 'WARNING: value of DPMARKNODE is ',DPMARKNODE(I,K),' for ',i,k1856:                       WRITE(6,*) 'WARNING: value of DPMARKNODE is ',DPMARKNODE(I,K),' for ',i,k
1865:                       R2=3.0D01857:                       R2=3.0D0
1866:                    END IF1858:                    END IF
2514:          WEIGHTS=.TRUE.2506:          WEIGHTS=.TRUE.
2515:       CASE ('BASINT')2507:       CASE ('BASINT')
2516:          BASINT = .TRUE.2508:          BASINT = .TRUE.
2517:          CALL GET_DP(BENERGY)2509:          CALL GET_DP(BENERGY)
2518:       CASE ('ZEROGM')2510:       CASE ('ZEROGM')
2519:          ZEROGM = .TRUE.2511:          ZEROGM = .TRUE.
2520:       CASE ('COLOURFRONT')2512:       CASE ('COLOURFRONT')
2521:          COLOURFRONTT=.TRUE.2513:          COLOURFRONTT=.TRUE.
2522:       CASE ('CHOOSECOLOURS')2514:       CASE ('CHOOSECOLOURS')
2523:          CHOOSECOLOURST=.TRUE.2515:          CHOOSECOLOURST=.TRUE.
2524:       CASE ('WIDELINECOL') 
2525:          WIDELINECOLT=.TRUE. 
2526:       CASE DEFAULT2516:       CASE DEFAULT
2527:          WRITE (6, '(2A)') 'Keyword not recognised in dinfo: ', TRIM(keyword)2517:          WRITE (6, '(2A)') 'Keyword not recognised in dinfo: ', TRIM(keyword)
2528:          STOP2518:          STOP
2529:       END SELECT2519:       END SELECT
2530:    END DO2520:    END DO
2531:    CLOSE (20)2521:    CLOSE (20)
2532: 2522: 
2533:    IF (.NOT. ALLOCATED(MINTRS)) ALLOCATE(MINTRS(1))2523:    IF (.NOT. ALLOCATED(MINTRS)) ALLOCATE(MINTRS(1))
2534: 2524: 
2535:    IF (DELTA_E <= 0.0D0) THEN2525:    IF (DELTA_E <= 0.0D0) THEN


r33110/dynamics_dat.F90 2017-08-03 17:30:56.935577221 +0100 r33109/dynamics_dat.F90 2017-08-03 17:31:06.047698592 +0100
622:       atm_id = gbl_mol_atms_lists(i)622:       atm_id = gbl_mol_atms_lists(i)
623:       com(:) = com(:) + mass(atm_id) * crd(:, atm_id)623:       com(:) = com(:) + mass(atm_id) * crd(:, atm_id)
624:     end do624:     end do
625:     mol_com(:, mol_id) = com(:) * mol_mass_inv(mol_id)625:     mol_com(:, mol_id) = com(:) * mol_mass_inv(mol_id)
626:   end do626:   end do
627: 627: 
628:   return628:   return
629: 629: 
630: end subroutine get_all_mol_com630: end subroutine get_all_mol_com
631: 631: 
632:  
633: subroutine dealloc_dynamics_dat() 
634:  
635:   my_mol_cnt = 0 
636:   if (allocated(atm_rel_crd)) deallocate(atm_rel_crd) 
637:   if (allocated(atm_mass_inv)) deallocate(atm_mass_inv) 
638:   if (allocated(gbl_mol_mass_inv)) deallocate(gbl_mol_mass_inv) 
639:   if (allocated(gbl_mol_com)) deallocate(gbl_mol_com) 
640:   if (allocated(gbl_my_mol_lst)) deallocate(gbl_my_mol_lst) 
641:  
642: end subroutine dealloc_dynamics_dat 
643:  
644: end module dynamics_dat_mod632: end module dynamics_dat_mod


r33110/extra_pnts_nb14.F90 2017-08-03 17:30:57.179580471 +0100 r33109/extra_pnts_nb14.F90 2017-08-03 17:31:06.307702054 +0100
2676:   do n = 1, atm_cnt2676:   do n = 1, atm_cnt
2677:     if (epowner(n) .ne. 0) then2677:     if (epowner(n) .ne. 0) then
2678:       amass(n) = 0.d02678:       amass(n) = 0.d0
2679:     end if2679:     end if
2680:   end do2680:   end do
2681:    2681:    
2682:   return2682:   return
2683: 2683: 
2684: end subroutine fix_masses 2684: end subroutine fix_masses 
2685: 2685: 
2686: subroutine dealloc_extra_pnts_nb14() 
2687:   cit_nb14_cnt = 0 
2688:   if (allocated(gbl_nb14)) deallocate(gbl_nb14) 
2689:   if (allocated(cit_nb14)) deallocate(cit_nb14) 
2690:   if (allocated(ep_frames)) deallocate(ep_frames) 
2691:   if (allocated(ep_lcl_crd)) deallocate(ep_lcl_crd) 
2692:  
2693:  
2694: end subroutine dealloc_extra_pnts_nb14 
2695:  
2696: end module extra_pnts_nb14_mod2686: end module extra_pnts_nb14_mod


r33110/finalio.f90 2017-08-03 17:31:00.163620218 +0100 r33109/finalio.f90 2017-08-03 17:31:09.295741852 +0100
 16: !   along with this program; if not, write to the Free Software 16: !   along with this program; if not, write to the Free Software
 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 18: ! 18: !
 19: SUBROUTINE FINALIO 19: SUBROUTINE FINALIO
 20:   USE COMMONS 20:   USE COMMONS
 21:   USE GENRIGID, ONLY : RIGIDINIT, NRIGIDBODY, NSITEPERBODY 21:   USE GENRIGID, ONLY : RIGIDINIT, NRIGIDBODY, NSITEPERBODY
 22:   USE MODAMBER 22:   USE MODAMBER
 23:   USE MODAMBER9, ONLY : COORDS1,IH,M04,AMBFINALIO_NODE 23:   USE MODAMBER9, ONLY : COORDS1,IH,M04,AMBFINALIO_NODE
 24:   USE AMBER12_INTERFACE_MOD, ONLY : AMBER12_FINISH, AMBER12_WRITE_RESTART, AMBER12_WRITE_PDB, & 24:   USE AMBER12_INTERFACE_MOD, ONLY : AMBER12_FINISH, AMBER12_WRITE_RESTART, AMBER12_WRITE_PDB, &
 25:        AMBER12_WRITE_XYZ 25:        AMBER12_WRITE_XYZ
 26:   USE AMBER12_MUTATIONS, ONLY : FINISH_AMBERMUT 
 27:   USE OPEP_INTERFACE_MOD, ONLY: OPEP_FINISH, OPEP_WRITE_PDB 26:   USE OPEP_INTERFACE_MOD, ONLY: OPEP_FINISH, OPEP_WRITE_PDB
 28:   USE QMODULE 27:   USE QMODULE
 29:   USE MODCHARMM 28:   USE MODCHARMM
 30:   USE AMHGLOBALS, ONLY:NMRES,IRES 29:   USE AMHGLOBALS, ONLY:NMRES,IRES
 31:   USE BGUPMOD 30:   USE BGUPMOD
 32:   USE PERMU 31:   USE PERMU
 33:   USE MODHESS, ONLY : HESS, MASSWT 32:   USE MODHESS, ONLY : HESS, MASSWT
 34:   USE CONVEX_POLYHEDRA_MODULE, ONLY: VIEW_POLYHEDRA 33:   USE CONVEX_POLYHEDRA_MODULE, ONLY: VIEW_POLYHEDRA
 35:   USE LJ_GAUSS_MOD, ONLY: VIEW_LJ_GAUSS 34:   USE LJ_GAUSS_MOD, ONLY: VIEW_LJ_GAUSS
 36:   USE OPP_MOD, ONLY: VIEW_OPP 35:   USE OPP_MOD, ONLY: VIEW_OPP
1743:               WRITE(LUNIT,'(A4,3F20.10)') 'LA ',RBCOORDS(3*(J3-1)+1),RBCOORDS(3*(J3-1)+2),RBCOORDS(3*(J3-1)+3)1742:               WRITE(LUNIT,'(A4,3F20.10)') 'LA ',RBCOORDS(3*(J3-1)+1),RBCOORDS(3*(J3-1)+2),RBCOORDS(3*(J3-1)+3)
1744:            ENDDO1743:            ENDDO
1745:         ENDDO1744:         ENDDO
1746:      ENDDO1745:      ENDDO
1747:      CLOSE(LUNIT)1746:      CLOSE(LUNIT)
1748: 1747: 
1749:   ENDIF1748:   ENDIF
1750: 1749: 
1751:   IF(ALLOCATED(DBNAME)) DEALLOCATE(DBNAME)1750:   IF(ALLOCATED(DBNAME)) DEALLOCATE(DBNAME)
1752: 1751: 
1753:   IF (AMBER12T.AND.(.NOT.(AMBERMUTATIONT))) THEN1752:   IF (AMBER12T) THEN
1754:      CALL AMBER12_FINISH()1753:      CALL AMBER12_FINISH()
1755:   END IF1754:   END IF
1756: 1755: 
1757:   IF (OPEPT) CALL OPEP_FINISH()1756:   IF (OPEPT) CALL OPEP_FINISH()
1758: 1757: 
1759:   IF (ORBITALS) CALL ORBITALS_FINISH()1758:   IF (ORBITALS) CALL ORBITALS_FINISH()
1760: 1759: 
1761:   CALL CPU_TIME(TEND)1760:   CALL CPU_TIME(TEND)
1762:   WRITE(MYUNIT,"(A,F18.1,A)") "time elapsed ", TEND - TSTART, " seconds"1761:   WRITE(MYUNIT,"(A,F18.1,A)") "time elapsed ", TEND - TSTART, " seconds"
1763:   WRITE(MYUNIT,"(A,I18)") "Number of potential calls ", NPCALL1762:   WRITE(MYUNIT,"(A,I18)") "Number of potential calls ", NPCALL


r33110/gb_ene.F90 2017-08-03 17:30:57.451584092 +0100 r33109/gb_ene.F90 2017-08-03 17:31:06.583705731 +0100
518:   use parallel_dat_mod518:   use parallel_dat_mod
519:   use prmtop_dat_mod519:   use prmtop_dat_mod
520:   use timers_mod520:   use timers_mod
521: ! khs26> Added use smooth_cutoff_mod521: ! khs26> Added use smooth_cutoff_mod
522:   use smooth_cutoff_mod522:   use smooth_cutoff_mod
523: 523: 
524:   implicit none524:   implicit none
525: 525: 
526: ! Formal arguments:526: ! Formal arguments:
527: 527: 
528:   integer               :: atm_cnt528:   double precision      :: crd(*)
529:   double precision      :: crd(3*atm_cnt)529:   double precision      :: frc(*)
530:   double precision      :: frc(3*atm_cnt)530:   double precision      :: rborn(*)
531:   double precision      :: rborn(atm_cnt)531:   double precision      :: fs(*)
532:   double precision      :: fs(atm_cnt)532:   double precision      :: charge(*)
533:   double precision      :: charge(atm_cnt) 
534:   integer               :: iac(*)533:   integer               :: iac(*)
535:   integer               :: ico(*)534:   integer               :: ico(*)
536:   integer               :: numex(*)535:   integer               :: numex(*)
537:   integer               :: natex(*)536:   integer               :: natex(*)
 537:   integer               :: atm_cnt
538:   integer               :: natbel538:   integer               :: natbel
539:   double precision      :: egb, eelt, evdw, esurf539:   double precision      :: egb, eelt, evdw, esurf
540:   integer, intent(in)   :: irespa540:   integer, intent(in)   :: irespa
541: 541: 
542: ! Local variables:542: ! Local variables:
543: 543: 
544:   double precision      :: cut2, cut_inner2             !544:   double precision      :: cut2, cut_inner2             !
545:   double precision      :: extdiel_inv                  !545:   double precision      :: extdiel_inv                  !
546:   double precision      :: intdiel_inv                  !546:   double precision      :: intdiel_inv                  !
547:   double precision      :: ri, rj                       !547:   double precision      :: ri, rj                       !
1222:   use mdin_ctrl_dat_mod1222:   use mdin_ctrl_dat_mod
1223:   use parallel_dat_mod1223:   use parallel_dat_mod
1224:   use prmtop_dat_mod1224:   use prmtop_dat_mod
1225:   use timers_mod1225:   use timers_mod
1226: 1226: 
1227:   implicit none1227:   implicit none
1228: 1228: 
1229: ! Formal arguments:1229: ! Formal arguments:
1230: 1230: 
1231:   integer               :: atm_cnt1231:   integer               :: atm_cnt
1232:   double precision      :: crd(3*atm_cnt)1232:   double precision      :: crd(*)
1233:   double precision      :: fs(atm_cnt)1233:   double precision      :: fs(atm_cnt)
1234:   double precision      :: rborn(atm_cnt)1234:   double precision      :: rborn(atm_cnt)
1235: 1235: 
1236: ! Local variables:1236: ! Local variables:
1237: 1237: 
1238:   double precision      :: ri, rj1238:   double precision      :: ri, rj
1239:   double precision      :: ri1i, rj1i1239:   double precision      :: ri1i, rj1i
1240:   double precision      :: xij, yij, zij1240:   double precision      :: xij, yij, zij
1241:   double precision      :: dij1i, dij2i1241:   double precision      :: dij1i, dij2i
1242:   double precision      :: r21242:   double precision      :: r2
1591:       if (gbl_rbmin(i) .ge. reff(i)) gbl_rbmin(i) = reff(i)1591:       if (gbl_rbmin(i) .ge. reff(i)) gbl_rbmin(i) = reff(i)
1592:     end do1592:     end do
1593:   end if1593:   end if
1594: 1594: 
1595:   call update_gb_time(calc_gb_rad_timer)1595:   call update_gb_time(calc_gb_rad_timer)
1596:    1596:    
1597:   return1597:   return
1598: 1598: 
1599: end subroutine calc_born_radii1599: end subroutine calc_born_radii
1600: 1600: 
1601:  
1602: subroutine dealloc_gb_ene() 
1603:  
1604:   if (allocated(gbl_rbmax)) deallocate(gbl_rbmax) 
1605:   if (allocated(gbl_rbmin)) deallocate(gbl_rbmin) 
1606:   if (allocated(gbl_rbave)) deallocate(gbl_rbave) 
1607:   if (allocated(gbl_rbfluct)) deallocate(gbl_rbfluct) 
1608:   if (allocated(r2x)) deallocate(r2x) 
1609:   if (allocated(jj)) deallocate(jj) 
1610:   if (allocated(reff)) deallocate(reff) 
1611:   if (allocated(psi)) deallocate(psi) 
1612:   if (allocated(rjx)) deallocate(rjx) 
1613:   if (allocated(sumdeijda)) deallocate(sumdeijda) 
1614:   if (allocated(vectmp1)) deallocate(vectmp1) 
1615:   if (allocated(vectmp2)) deallocate(vectmp2) 
1616:   if (allocated(vectmp3)) deallocate(vectmp3) 
1617:   if (allocated(vectmp4)) deallocate(vectmp4) 
1618:   if (allocated(vectmp5)) deallocate(vectmp5) 
1619:   if (allocated(gb_alpha_arry)) deallocate(gb_alpha_arry) 
1620:   if (allocated(gb_beta_arry)) deallocate(gb_beta_arry) 
1621:   if (allocated(gb_gamma_arry)) deallocate(gb_gamma_arry) 
1622:   if (allocated(term1)) deallocate(term1) 
1623:   if (allocated(term2)) deallocate(term2) 
1624:   if (allocated(term3)) deallocate(term3) 
1625:   if (allocated(skipv)) deallocate(skipv) 
1626:   if (allocated(neck_idx)) deallocate(neck_idx) 
1627:  
1628: end subroutine dealloc_gb_ene 
1629:  
1630: end module gb_ene_mod1601: end module gb_ene_mod
1631: ! End of Original GB code1602: ! End of Original GB code


r33110/gb_force.F90 2017-08-03 17:30:57.719587663 +0100 r33109/gb_force.F90 2017-08-03 17:31:06.847709247 +0100
240:   else240:   else
241:     call get_nb14_energy(atm_qterm, crd, frc, atm_iac, typ_ico, &241:     call get_nb14_energy(atm_qterm, crd, frc, atm_iac, typ_ico, &
242:                          gbl_cn1, gbl_cn2, cit_nb14, cit_nb14_cnt, &242:                          gbl_cn1, gbl_cn2, cit_nb14, cit_nb14_cnt, &
243:                          pot_ene%elec_14, pot_ene%vdw_14)243:                          pot_ene%elec_14, pot_ene%vdw_14)
244:   endif 244:   endif 
245: 245: 
246:   call update_time(nonbond_time)246:   call update_time(nonbond_time)
247:   247:   
248: ! Calculate the other contributions:248: ! Calculate the other contributions:
249: 249: 
250:   call gb_bonded_force(atm_cnt, crd, frc, pot_ene)250:   call gb_bonded_force(crd, frc, pot_ene)
251: 251: 
252:   ! Sum up total potential energy for this task:252:   ! Sum up total potential energy for this task:
253: 253: 
254:   pot_ene%total = pot_ene%vdw_tot + &254:   pot_ene%total = pot_ene%vdw_tot + &
255:                   pot_ene%elec_tot + &255:                   pot_ene%elec_tot + &
256:                   pot_ene%gb + &256:                   pot_ene%gb + &
257:                   pot_ene%surf + &257:                   pot_ene%surf + &
258:                   pot_ene%bond + &258:                   pot_ene%bond + &
259:                   pot_ene%angle + &259:                   pot_ene%angle + &
260:                   pot_ene%dihedral + &260:                   pot_ene%dihedral + &
413:   else413:   else
414:     call get_nb14_energy(atm_qterm, crd, frc, atm_iac, typ_ico, &414:     call get_nb14_energy(atm_qterm, crd, frc, atm_iac, typ_ico, &
415:                          gbl_cn1, gbl_cn2, cit_nb14, cit_nb14_cnt, &415:                          gbl_cn1, gbl_cn2, cit_nb14, cit_nb14_cnt, &
416:                          pot_ene%elec_14, pot_ene%vdw_14)416:                          pot_ene%elec_14, pot_ene%vdw_14)
417:   endif417:   endif
418: 418: 
419:   call update_time(nonbond_time)419:   call update_time(nonbond_time)
420: 420: 
421: ! Calculate the other contributions:421: ! Calculate the other contributions:
422: 422: 
423:   call gb_bonded_force(atm_cnt, crd, frc, pot_ene)423:   call gb_bonded_force(crd, frc, pot_ene)
424: 424: 
425:   ! Sum up total potential energy for this task:425:   ! Sum up total potential energy for this task:
426: 426: 
427:   pot_ene%total = pot_ene%vdw_tot + &427:   pot_ene%total = pot_ene%vdw_tot + &
428:                   pot_ene%elec_tot + &428:                   pot_ene%elec_tot + &
429:                   pot_ene%gb + &429:                   pot_ene%gb + &
430:                   pot_ene%surf + &430:                   pot_ene%surf + &
431:                   pot_ene%bond + &431:                   pot_ene%bond + &
432:                   pot_ene%angle + &432:                   pot_ene%angle + &
433:                   pot_ene%dihedral + &433:                   pot_ene%dihedral + &
494: end subroutine gb_force_cpu494: end subroutine gb_force_cpu
495: 495: 
496: !*******************************************************************************496: !*******************************************************************************
497: !497: !
498: ! Subroutine:  gb_bonded_force498: ! Subroutine:  gb_bonded_force
499: !499: !
500: ! Description: <TBS>500: ! Description: <TBS>
501: !              501: !              
502: !*******************************************************************************502: !*******************************************************************************
503: 503: 
504: subroutine gb_bonded_force(atm_cnt, crd, frc, pot_ene)504: subroutine gb_bonded_force(crd, frc, pot_ene)
505: 505: 
506:   use angles_mod506:   use angles_mod
507:   use angles_ub_mod507:   use angles_ub_mod
508:   use bonds_mod508:   use bonds_mod
509:   use constraints_mod509:   use constraints_mod
510:   use dihedrals_mod510:   use dihedrals_mod
511:   use dihedrals_imp_mod511:   use dihedrals_imp_mod
512:   use cmap_mod512:   use cmap_mod
513:   use dynamics_dat_mod513:   use dynamics_dat_mod
514:   use mdin_ctrl_dat_mod514:   use mdin_ctrl_dat_mod
515:   use nmr_calls_mod515:   use nmr_calls_mod
516:   use timers_mod516:   use timers_mod
517: 517: 
518:   implicit none518:   implicit none
519: 519: 
520: ! Formal arguments:520: ! Formal arguments:
521: 521: 
522:   integer                       :: atm_cnt522:   double precision              :: crd(3, *)
523:   double precision              :: crd(3, atm_cnt)523:   double precision              :: frc(3, *)
524:   double precision              :: frc(3, atm_cnt) 
525:   type(gb_pot_ene_rec)          :: pot_ene524:   type(gb_pot_ene_rec)          :: pot_ene
526: 525: 
527: ! Local variables:526: ! Local variables:
528: 527: 
529:   ! These energy variables are temporaries, for summing. DON'T use otherwise!528:   ! These energy variables are temporaries, for summing. DON'T use otherwise!
530: 529: 
531:   double precision              :: bond_ene530:   double precision              :: bond_ene
532:   double precision              :: angle_ene531:   double precision              :: angle_ene
533:   double precision              :: dihedral_ene532:   double precision              :: dihedral_ene
534:   double precision              :: ub_ene533:   double precision              :: ub_ene
542: 541: 
543: ! The ebdev/eadev stuff currently only is output under nmr_calls for non-mpi542: ! The ebdev/eadev stuff currently only is output under nmr_calls for non-mpi
544: ! code, so we basically drop it here under mpi.543: ! code, so we basically drop it here under mpi.
545: 544: 
546: #ifdef AMBMPI545: #ifdef AMBMPI
547: #else546: #else
548:   ebdev = 0.d0547:   ebdev = 0.d0
549: #endif548: #endif
550:   if (ntf .le. 1) then549:   if (ntf .le. 1) then
551:     if (cit_nbonh .gt. 0) then550:     if (cit_nbonh .gt. 0) then
552:       call get_bond_energy(cit_nbonh, atm_cnt, cit_h_bond, crd, frc, bond_ene)551:       call get_bond_energy(cit_nbonh, cit_h_bond, crd, frc, bond_ene)
553:       pot_ene%bond = bond_ene552:       pot_ene%bond = bond_ene
554:     end if553:     end if
555:   end if554:   end if
556: 555: 
557:   if (ntf .le. 2) then556:   if (ntf .le. 2) then
558:     if (cit_nbona .gt. 0) then557:     if (cit_nbona .gt. 0) then
559:       call get_bond_energy(cit_nbona, atm_cnt, cit_a_bond, crd, frc, bond_ene)558:       call get_bond_energy(cit_nbona, cit_a_bond, crd, frc, bond_ene)
560:       pot_ene%bond = pot_ene%bond + bond_ene559:       pot_ene%bond = pot_ene%bond + bond_ene
561:     end if560:     end if
562:   end if561:   end if
563: #ifdef AMBMPI562: #ifdef AMBMPI
564: #else563: #else
565:     if (cit_nbonh + cit_nbona .gt. 0) &564:     if (cit_nbonh + cit_nbona .gt. 0) &
566:       ebdev = sqrt(ebdev / (cit_nbonh + cit_nbona))565:       ebdev = sqrt(ebdev / (cit_nbonh + cit_nbona))
567: #endif566: #endif
568: 567: 
569:   call update_time(bond_time)568:   call update_time(bond_time)


r33110/grouprotations.py 2017-08-03 17:31:03.651666675 +0100 r33109/grouprotations.py 2017-08-03 17:31:12.771788152 +0100
  1: import sys  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/grouprotations.py' in revision 33109
  2:  
  3: class protein(): 
  4:     def __init__(self, atom_dic, res_dic): 
  5:         self.atom_dic = atom_dic  # dictionary of all atoms with x,y,z coordinates and res id and name and atom name 
  6:         self.res_dic = res_dic  # dictionary containing a list of atom ids for all residues 
  7:  
  8:     def num_atoms(self):  # number of atoms 
  9:         return len(self.atom_dic) 
 10:  
 11:     def num_res(self):  # number of residues 
 12:         return len(self.res_dic) 
 13:  
 14:     # returns the name of a given residue 
 15:     def get_residue_name(self, residue): 
 16:         return atom_dic[res_dic[residue][0]][1] 
 17:  
 18:     # atom id from atom name given a residue id 
 19:     def get_atom_id_from_name(self, atom_name, res_num): 
 20:         for i in self.res_dic[res_num]: 
 21:             if self.atom_dic[i][0] == atom_name: 
 22:                 return i 
 23:  
 24:     # returns a list of atoms in a residue 
 25:     def get_atom_list(self, residue): 
 26:         all_atoms = self.atom_dic.keys() 
 27:         atomlist = [] 
 28:         for i in range(1, len(self.atom_dic) + 1): 
 29:             atom = self.atom_dic[i] 
 30:             if residue == atom[2]: 
 31:                 atomlist.append(all_atoms[i - 1]) 
 32:         return atomlist 
 33:  
 34: ################################################# 
 35: def reading_pdb(pdb): 
 36:     dic = {} 
 37:     atom_list = [] 
 38:     with open(pdb, 'r') as f_pdb: 
 39:         for line in f_pdb: 
 40:             if line.split()[0] == 'ATOM': 
 41:                 atom_list.append((line[12:16].strip(), line[17:20].strip(), int(line[22:26]))) 
 42:     for i in range(1, len(atom_list) + 1): 
 43:         dic[i] = atom_list[i - 1] 
 44:     return dic 
 45:  
 46: def create_res_dic(atom_dic): 
 47:     res_dic = {} 
 48:     res_list = [] 
 49:     for i in atom_dic.keys(): 
 50:         res_list.append(atom_dic[i][2]) 
 51:     res_list = list(set(res_list)) 
 52:     for j in res_list: 
 53:         res_dic[j] = [] 
 54:     for k in atom_dic.keys(): 
 55:         res_dic[atom_dic[k][2]].append(k) 
 56:     return res_dic 
 57:  
 58: #################################################        
 59:  
 60: prob_uni = 0.025 
 61:  
 62: pdb_file = sys.argv[1] 
 63: atom_dic = reading_pdb(pdb_file) 
 64: res_dic = create_res_dic(atom_dic) 
 65: loaded_mol = protein(atom_dic, res_dic) 
 66:  
 67: amp_dic = {'ALA': (1.0,), 
 68:            'ASN': (0.5, 1.0), 
 69:            'ARG': (0.2, 0.3, 0.5), 
 70:            'ASP': (0.5, 1.0, 0.0), 
 71:            'CYS': (1.0,), 
 72:            'GLN': (0.3, 0.5, 1.0), 
 73:            'GLU': (0.3, 0.5, 1.0), 
 74:            'HIS': (0.3, 0.5), 
 75:            'HIE': (0.3, 0.5), 
 76:            'HIP': (0.3, 0.5), 
 77:            'HID': (0.3, 0.5), 
 78:            'ILE': (0.5, 1.0), 
 79:            'LEU': (0.5, 1.0), 
 80:            'LYS': (0.2, 0.3, 0.5), 
 81:            'MET': (0.5, 0.7), 
 82:            'PHE': (0.3, 0.5), 
 83:            'SER': (1.0,), 
 84:            'THR': (1.0,), 
 85:            'TRP': (0.3, 0.4), 
 86:            'TYR': (0.3, 0.5), 
 87:            'VAL': (1.0,), 
 88:            'AMB0': (0.1,)  # default for all non residue specific rotations 
 89:           } 
 90:  
 91:  
 92: # number: [name, ax_atom1, ax_atom2, natom, amp, prob, [atom1, atom2, ...]] 
 93: grot_dic = {} 
 94: residues = res_dic.keys() 
 95: for res in residues: 
 96:     gr_res_name = loaded_mol.get_residue_name(res) 
 97:     if gr_res_name not in ['PRO' , 'HYP']: 
 98:         #N-CA rotation 
 99:         prob = prob_uni 
100:         amp = 0.1  # use default amplitude 
101:  
102:         ax1 = loaded_mol.get_atom_id_from_name('N', res) 
103:         ax2 = loaded_mol.get_atom_id_from_name('CA', res) 
104:         gr_name = 'NCA' + str(res) 
105:         gr_atoms = [] 
106:         for gr_atom in loaded_mol.get_atom_list(res): 
107:             if atom_dic[gr_atom][0] not in ['N',  'C', 'CA', 'HA', 'O', 'OXT', 'H1', 'H2', 'H3']: 
108:                 gr_atoms.append(gr_atom) 
109:         grot_dic[len(grot_dic) + 1] = [gr_name, ax1, ax2, len(gr_atoms), amp, prob, gr_atoms] 
110:  
111:     if gr_res_name not in ['PRO' , 'HYP']: 
112:         #C-CA rotation 
113:         prob = prob_uni 
114:         amp = 0.1  # use default amplitude 
115:         ax1 = loaded_mol.get_atom_id_from_name('C', res) 
116:         ax2 = loaded_mol.get_atom_id_from_name('CA', res) 
117:         gr_name = 'CCA' + str(res) 
118:         gr_atoms = [] 
119:         for gr_atom in loaded_mol.get_atom_list(res): 
120:             if atom_dic[gr_atom][0] not in ['N',  'C', 'CA', 'HA', 'O', 'OXT', 'H1', 'H2', 'H3']: 
121:                 gr_atoms.append(gr_atom) 
122:         grot_dic[len(grot_dic) + 1] = [gr_name, ax1, ax2, len(gr_atoms), amp, prob, gr_atoms] 
123:  
124:     if gr_res_name not in ['PRO', 'HYP' , 'ALA', 'GLY']: 
125:         # CA-CB rotation 
126:         prob = prob_uni 
127:         try: 
128:             amp = amp_dic[gr_res_name][0]  # use default amplitude 
129:         except KeyError: 
130:             amp = 0.1 
131:         ax1 = loaded_mol.get_atom_id_from_name('CA', res) 
132:         ax2 = loaded_mol.get_atom_id_from_name('CB', res) 
133:         gr_name = 'CACB' + str(res) 
134:         gr_atoms = [] 
135:         for gr_atom in loaded_mol.get_atom_list(res): 
136:             if atom_dic[gr_atom][0] not in ['N', 'H', 'C', 'CA', 'HA', 'CB', 'O', 'OXT', 'H1', 'H2', 'H3']: 
137:                 gr_atoms.append(gr_atom) 
138:         grot_dic[len(grot_dic) + 1] = [gr_name, ax1, ax2, len(gr_atoms), amp, prob, gr_atoms] 
139:  
140:     if gr_res_name not in ['PRO', 'HYP' , 'ILE', 'ALA', 'GLY', 'SER', 'CYS', 'THR', 'VAL']: 
141:         # CB-CG rotation 
142:         prob = prob_uni 
143:         try: 
144:             amp = amp_dic[gr_res_name][1]  # use default amplitude 
145:         except KeyError: 
146:             amp = 0.1 
147:         ax1 = loaded_mol.get_atom_id_from_name('CB', res) 
148:         ax2 = loaded_mol.get_atom_id_from_name('CG', res) 
149:         gr_name = 'CBCG' + str(res) 
150:         gr_atoms = [] 
151:         for gr_atom in loaded_mol.get_atom_list(res): 
152:             if atom_dic[gr_atom][0] not in ['N', 'H', 'C', 'CA', 'HA', 'CB', 'CG', 'HB', 'HB1', 'HB2', 
153:                                             'HB3', 'O', 'OXT', 'H1', 'H2', 'H3']: 
154:                 gr_atoms.append(gr_atom) 
155:         grot_dic[len(grot_dic) + 1] = [gr_name, ax1, ax2, len(gr_atoms), amp, prob, gr_atoms] 
156:  
157:     if gr_res_name in ['ARG', 'LYS', 'GLU', 'GLN']: 
158:         # CG-CD rotation 
159:         prob = prob_uni 
160:         try: 
161:             amp = amp_dic[gr_res_name][2]  # use default amplitude 
162:         except KeyError: 
163:             amp = 0.1 
164:         ax1 = loaded_mol.get_atom_id_from_name('CG', res) 
165:         ax2 = loaded_mol.get_atom_id_from_name('CD', res) 
166:         gr_name = 'CGCD' + str(res) 
167:         gr_atoms = [] 
168:         atom_exc = ['N', 'H', 'C', 'CA', 'HA', 'CB', 'CG', 'HB', 'HB1', 'HB2', 'HB3', 'O', 'OXT', 'H1', 
169:                     'H2', 'H3', 'CD', 'HG1', 'HG2', 'HG11', 'HG12', 'HG13', 'HG21', 'HG22', 'HG23'] 
170:         for gr_atom in loaded_mol.get_atom_list(res): 
171:             if atom_dic[gr_atom][0] not in atom_exc: 
172:                 gr_atoms.append(gr_atom) 
173:         grot_dic[len(grot_dic) + 1] = [gr_name, ax1, ax2, len(gr_atoms), amp, prob, gr_atoms] 
174:  
175:    
176: # write output for group rotation files 
177: groups_file = open('atomgroups', 'w') 
178: for group in range(1, len(grot_dic.keys()) + 1): 
179:     string = 'GROUP ' + grot_dic[group][0] + ' ' + str(grot_dic[group][1]) + ' ' + str(grot_dic[group][2]) 
180:     string += ' ' + str(grot_dic[group][3]) + ' ' + str(grot_dic[group][4]) + ' ' + str(grot_dic[group][5]) + "\n" 
181:     for atom in grot_dic[group][6]: 
182:         string += str(atom) + "\n" 
183:     groups_file.write(string) 
184: groups_file.close() 
185:  


r33110/inpcrd_dat.F90 2017-08-03 17:30:57.967590966 +0100 r33109/inpcrd_dat.F90 2017-08-03 17:31:07.119712868 +0100
341: 9008 format(a80)341: 9008 format(a80)
342: 9018 format(i5, 5e15.7)342: 9018 format(i5, 5e15.7)
343: 9019 format(i6, 5e15.7)343: 9019 format(i6, 5e15.7)
344: 9020 format(i7, 5e15.7)344: 9020 format(i7, 5e15.7)
345: 9021 format(i8, 5e15.7)345: 9021 format(i8, 5e15.7)
346: 9028 format(6f12.7)346: 9028 format(6f12.7)
347: 9038 format(3f12.7)347: 9038 format(3f12.7)
348: 348: 
349: end subroutine init_inpcrd_dat349: end subroutine init_inpcrd_dat
350: 350: 
351: !kr366> added as reallocations are needed for mutational steps 
352: subroutine dealloc_inpcrd_dat() 
353:   if (allocated(atm_crd)) deallocate(atm_crd) 
354:   if (allocated(atm_frc)) deallocate(atm_frc) 
355:   if (allocated(atm_vel)) deallocate(atm_vel) 
356:   if (allocated(atm_last_vel)) deallocate(atm_last_vel) 
357: end subroutine dealloc_inpcrd_dat 
358:  
359: !*******************************************************************************351: !*******************************************************************************
360: !352: !
361: ! Subroutine:  alloc_inpcrd_mem353: ! Subroutine:  alloc_inpcrd_mem
362: !354: !
363: ! Description: <TBS>355: ! Description: <TBS>
364: !              356: !              
365: !*******************************************************************************357: !*******************************************************************************
366: 358: 
367: subroutine alloc_inpcrd_mem(num_ints, num_reals, inpcrd_natom)359: subroutine alloc_inpcrd_mem(num_ints, num_reals, inpcrd_natom)
368: 360: 


r33110/keywords.f 2017-08-03 17:31:00.415623573 +0100 r33109/keywords.f 2017-08-03 17:31:09.587745742 +0100
 27:       USE TWIST_MOD 27:       USE TWIST_MOD
 28: !       sf344> AMBER additions 28: !       sf344> AMBER additions
 29:       USE modamber9, only : coords1,amberstr,amberstr1,mdstept,inpcrd,amberenergiest, nocistransdna, nocistransrna, 29:       USE modamber9, only : coords1,amberstr,amberstr1,mdstept,inpcrd,amberenergiest, nocistransdna, nocistransrna,
 30:      &                      uachiral, ligrotscale, setchiral, STEEREDMINT, SMINATOMA, SMINATOMB, SMINK, SMINKINC, 30:      &                      uachiral, ligrotscale, setchiral, STEEREDMINT, SMINATOMA, SMINATOMB, SMINK, SMINKINC,
 31:      &                      SMINDISTSTART, SMINDISTFINISH, natomsina, natomsinb, natomsinc, atomsinalist, atomsinblist, 31:      &                      SMINDISTSTART, SMINDISTFINISH, natomsina, natomsinb, natomsinc, atomsinalist, atomsinblist,
 32:      &                      atomsinclist, atomsinalistlogical, atomsinblistlogical, atomsinclistlogical, ligcartstep, 32:      &                      atomsinclist, atomsinalistlogical, atomsinblistlogical, atomsinclistlogical, ligcartstep,
 33:      &                      ligtransstep, ligmovefreq, amchnmax, amchnmin, amchpmax, amchpmin, rotamert, rotmaxchange, 33:      &                      ligtransstep, ligmovefreq, amchnmax, amchnmin, amchpmax, amchpmin, rotamert, rotmaxchange,
 34:      &                      rotcentre, rotpselect, rotoccuw, rotcutoff, setchiralgeneric, PRMTOP, IGB, RGBMAX, CUT, 34:      &                      rotcentre, rotpselect, rotoccuw, rotcutoff, setchiralgeneric, PRMTOP, IGB, RGBMAX, CUT,
 35:      &                      SALTCON, macroiont, nmacroions, macroiondist 35:      &                      SALTCON, macroiont, nmacroions, macroiondist
 36:       USE modamber 36:       USE modamber
 37:       USE AMBER12_MUTATIONS, ONLY : AMBERMUTATION_SETUP 
 38:       USE PORFUNCS 37:       USE PORFUNCS
 39:       USE MYGA_PARAMS 38:       USE MYGA_PARAMS
 40:       USE BGUPMOD 39:       USE BGUPMOD
 41:       USE GLJYMOD 40:       USE GLJYMOD
 42:       USE CHIRO_MODULE, ONLY: CHIRO_SIGMA, CHIRO_MU, CHIRO_GAMMA, CHIRO_L 41:       USE CHIRO_MODULE, ONLY: CHIRO_SIGMA, CHIRO_MU, CHIRO_GAMMA, CHIRO_L
 43:       USE CONVEX_POLYHEDRA_MODULE, ONLY: INITIALISE_POLYHEDRA, K_COMPRESS, K_OVERLAP 42:       USE CONVEX_POLYHEDRA_MODULE, ONLY: INITIALISE_POLYHEDRA, K_COMPRESS, K_OVERLAP
 44:       USE LJ_GAUSS_MOD, ONLY: LJ_GAUSS_MODE, LJ_GAUSS_RCUT, LJ_GAUSS_EPS, 43:       USE LJ_GAUSS_MOD, ONLY: LJ_GAUSS_MODE, LJ_GAUSS_RCUT, LJ_GAUSS_EPS,
 45:      &                        LJ_GAUSS_R0, LJ_GAUSS_SIGMASQ, LJ_GAUSS_PARAMS, 44:      &                        LJ_GAUSS_R0, LJ_GAUSS_SIGMASQ, LJ_GAUSS_PARAMS,
 46:      &                        LJ_GAUSS_INITIALISE 45:      &                        LJ_GAUSS_INITIALISE
 47:       USE OPP_MOD, ONLY: OPP_MODE, OPP_RCUT, OPP_K, OPP_PHI, OPP_PARAMS, 46:       USE OPP_MOD, ONLY: OPP_MODE, OPP_RCUT, OPP_K, OPP_PHI, OPP_PARAMS,
1230:       SQNM_BIOT=.TRUE.1229:       SQNM_BIOT=.TRUE.
1231: 1230: 
1232: ! OPEP stuff1231: ! OPEP stuff
1233:       OPEPT = .FALSE.1232:       OPEPT = .FALSE.
1234:       OPEP_RNAT = .FALSE.1233:       OPEP_RNAT = .FALSE.
1235: 1234: 
1236: ! cs675 ORBITALS stuff1235: ! cs675 ORBITALS stuff
1237:       ORBITALS = .FALSE.1236:       ORBITALS = .FALSE.
1238:       ORBVAREXPONENT = -1!default to easily identifiable (quasi-)nonsense value.1237:       ORBVAREXPONENT = -1!default to easily identifiable (quasi-)nonsense value.
1239: 1238: 
1240: ! AMBER mutations 
1241:       AMBERMUTATIONT = .FALSE. 
1242:       MUTATIONFREQ = 1000 
1243:       MUTTESTSTEPS = 50 
1244:       NMUTATION = 0 
1245:       MUTUNIT = GETUNIT() 
1246:       AMBERMUTIGB = 2 
1247:       AMBERMUTFF = 14 
1248:  
1249:       CALL FILE_OPEN('data', DATA_UNIT, .FALSE.)1239:       CALL FILE_OPEN('data', DATA_UNIT, .FALSE.)
1250: 1240: 
1251: !      OPEN (5,FILE='data',STATUS='OLD')1241: !      OPEN (5,FILE='data',STATUS='OLD')
1252: 1242: 
1253: !190   CALL INPUT(END,5)1243: !190   CALL INPUT(END,5)
1254: 190   CALL INPUT(END, DATA_UNIT)1244: 190   CALL INPUT(END, DATA_UNIT)
1255:       IF (.NOT. END) THEN1245:       IF (.NOT. END) THEN
1256:         CALL READU(WORD)1246:         CALL READU(WORD)
1257:       ENDIF1247:       ENDIF
1258:       IF (END .OR. WORD .EQ. 'STOP') THEN1248:       IF (END .OR. WORD .EQ. 'STOP') THEN
2055:         AMBER12T = .TRUE.2045:         AMBER12T = .TRUE.
2056:         SETCHIRAL = .TRUE.2046:         SETCHIRAL = .TRUE.
2057:         IF(.NOT.ALLOCATED(COORDS1)) ALLOCATE(COORDS1(3*NATOMS))2047:         IF(.NOT.ALLOCATED(COORDS1)) ALLOCATE(COORDS1(3*NATOMS))
2058:         IF(ALLOCATED(COORDS)) DEALLOCATE(COORDS)2048:         IF(ALLOCATED(COORDS)) DEALLOCATE(COORDS)
2059:         ! Read the coords from AMBER12 into COORDS1(:)2049:         ! Read the coords from AMBER12 into COORDS1(:)
2060:         CALL AMBER12_GET_COORDS(NATOMS, COORDS1(:))2050:         CALL AMBER12_GET_COORDS(NATOMS, COORDS1(:))
2061:         ALLOCATE(COORDS(3*NATOMS,NPAR))2051:         ALLOCATE(COORDS(3*NATOMS,NPAR))
2062:         DO J1=1,NPAR2052:         DO J1=1,NPAR
2063:            COORDS(:,J1) = COORDS1(:)2053:            COORDS(:,J1) = COORDS1(:)
2064:         END DO2054:         END DO
2065: ! 
2066: ! kr366> AMBER mutation steps 
2067: ! 
2068:       ELSE IF (WORD.EQ.'AMBERMUTATION') THEN 
2069:         AMBERMUTATIONT = .TRUE. 
2070:         CALL READI(MUTATIONFREQ) 
2071:         CALL READI(MUTTESTSTEPS) 
2072:         AMBER12T=.TRUE. 
2073:         SETCHIRAL=.TRUE. 
2074:         IF(.NOT.ALLOCATED(COORDS1)) ALLOCATE(COORDS1(3*NATOMS)) 
2075:         IF(ALLOCATED(COORDS)) DEALLOCATE(COORDS) 
2076:         ALLOCATE(COORDS(3*NATOMS,NPAR)) 
2077:         CALL AMBER12_GET_COORDS(NATOMS,COORDS1(:)) 
2078:         DO J1=1,NPAR 
2079:            COORDS(:,J1) = COORDS1(:) 
2080:         END DO 
2081:         OPEN(MUTUNIT,FILE='BHmutation.log',STATUS='UNKNOWN') 
2082:         CALL AMBERMUTATION_SETUP()  !we initialise the group rotations here as well 
2083:          
2084:       ELSE IF (WORD.EQ.'AMBERMUTIGB') THEN 
2085:         CALL READI(AMBERMUTIGB) 
2086:         IF (AMBERMUTIGB.EQ.2) THEN 
2087:            WRITE(MYUNIT,'(A)') 'keyword> use igb2 with mbondi2 to create topology files for mutations' 
2088:         ELSE IF (AMBERMUTIGB.EQ.8) THEN 
2089:            WRITE(MYUNIT,'(A)') 'keyword> use igb8 with mbondi3 to create topology files for mutations' 
2090:         ELSE 
2091:            WRITE(MYUNIT,'(A)') 'keyword> invalid choice for igb' 
2092:            STOP 
2093:         ENDIF 
2094:  
2095:       ELSE IF (WORD.EQ.'AMBERMUTFF') THEN 
2096:         CALL READI(AMBERMUTFF) 
2097:         IF (AMBERMUTFF.EQ.14) THEN 
2098:            WRITE(MYUNIT,'(A)') 'keyword> use ff14SB force field for mutations' 
2099:         ELSE IF (AMBERMUTFF.EQ.99) THEN 
2100:            WRITE(MYUNIT,'(A)') 'keyword> use ff99SB force field for mutations' 
2101:         ELSE 
2102:            WRITE(MYUNIT,'(A)') 'keyword> invalid force field choice' 
2103:            STOP 
2104:         ENDIF 
2105:         
2106:  
2107: 2055: 
2108:       ELSE IF (WORD.EQ.'AMBER9') THEN2056:       ELSE IF (WORD.EQ.'AMBER9') THEN
2109:         AMBERT=.TRUE.2057:         AMBERT=.TRUE.
2110:         WRITE(MYUNIT,'(A)') 'keyword> RADIUS set to 999 for AMBER9 run'2058:         WRITE(MYUNIT,'(A)') 'keyword> RADIUS set to 999 for AMBER9 run'
2111:         RADIUS=9992059:         RADIUS=999
2112: 2060: 
2113: !2061: !
2114: ! csw34> if residues are frozen with FREEZERES, call the amber routine2062: ! csw34> if residues are frozen with FREEZERES, call the amber routine
2115: ! to fill the FROZEN array correctly (in amberinterface.f)2063: ! to fill the FROZEN array correctly (in amberinterface.f)
2116: !2064: !
2140:              WRITE(MYUNIT,'(A)') 'keywords> input coordinates for AMBER9 system will be read from ', trim(adjustl(amberstr))2088:              WRITE(MYUNIT,'(A)') 'keywords> input coordinates for AMBER9 system will be read from ', trim(adjustl(amberstr))
2141:              CALL amber_readcoords(amberstr)2089:              CALL amber_readcoords(amberstr)
2142:          END IF2090:          END IF
2143:         ELSE IF(NITEMS==3) then2091:         ELSE IF(NITEMS==3) then
2144:          CALL READA(amberstr)2092:          CALL READA(amberstr)
2145:          CALL READA(amberstr1)2093:          CALL READA(amberstr1)
2146:          WRITE(MYUNIT,'(A)') 'keywords> input coordinates for AMBER9 system will be read from ', trim(adjustl(amberstr)),2094:          WRITE(MYUNIT,'(A)') 'keywords> input coordinates for AMBER9 system will be read from ', trim(adjustl(amberstr)),
2147:      &                              'type: ', trim(adjustl(amberstr1))2095:      &                              'type: ', trim(adjustl(amberstr1))
2148:           IF(trim(adjustl(amberstr1)).EQ.'inpcrd') then2096:           IF(trim(adjustl(amberstr1)).EQ.'inpcrd') then
2149:                inpcrd=amberstr2097:                inpcrd=amberstr
2150:               call amberinterface(natom,2,inpcrd,MYUNIT)2098:                call amberinterface(natom,2,inpcrd,MYUNIT)
2151:            WRITE(MYUNIT,'(A)') 'keywords> reading AMBER inpcrd coordinate format'2099:            WRITE(MYUNIT,'(A)') 'keywords> reading AMBER inpcrd coordinate format'
2152:           ELSE2100:           ELSE
2153:            WRITE(MYUNIT,'(A)') 'keywords> ERROR - no other types defined currently than inpcrd'2101:            WRITE(MYUNIT,'(A)') 'keywords> ERROR - no other types defined currently than inpcrd'
2154:            STOP2102:            STOP
2155:           END IF2103:           END IF
2156:         END IF2104:         END IF
2157:                IF(.NOT.ALLOCATED(COORDS1)) ALLOCATE(COORDS1(3*NATOM))2105:                IF(.NOT.ALLOCATED(COORDS1)) ALLOCATE(COORDS1(3*NATOM))
2158:                IF(.NOT.ALLOCATED(MOVABLEATOMLIST)) ALLOCATE(MOVABLEATOMLIST(NATOMS))2106:                IF(.NOT.ALLOCATED(MOVABLEATOMLIST)) ALLOCATE(MOVABLEATOMLIST(NATOMS))
2159:                IF(ALLOCATED(COORDS)) DEALLOCATE(COORDS)2107:                IF(ALLOCATED(COORDS)) DEALLOCATE(COORDS)
2160:                ALLOCATE(COORDS(3*NATOM,NPAR))2108:                ALLOCATE(COORDS(3*NATOM,NPAR))


r33110/mc.F 2017-08-03 17:31:00.695627303 +0100 r33109/mc.F 2017-08-03 17:31:09.847749205 +0100
 25:       use mbpolmod, only: mbpolstep 25:       use mbpolmod, only: mbpolstep
 26:  26: 
 27:       USE QMODULE , ONLY : QMIN, QMINP, INTEQMIN 27:       USE QMODULE , ONLY : QMIN, QMINP, INTEQMIN
 28:       USE modcharmm 28:       USE modcharmm
 29:       USE MODAMBER9, ONLY : MDSTEPT,CISARRAY1,CHIARRAY1,NOCISTRANSDNA,NOCISTRANSRNA, 29:       USE MODAMBER9, ONLY : MDSTEPT,CISARRAY1,CHIARRAY1,NOCISTRANSDNA,NOCISTRANSRNA,
 30:      &                      SETCHIRAL,AMCHPMAX,DOLIGMOVE,LIGMOVEFREQ, AMCHNMAX, ROTAMERT, 30:      &                      SETCHIRAL,AMCHPMAX,DOLIGMOVE,LIGMOVEFREQ, AMCHNMAX, ROTAMERT,
 31:      &                      E_IGB, E_BOND, E_ANGLE, E_DIHEDRAL, 31:      &                      E_IGB, E_BOND, E_ANGLE, E_DIHEDRAL,
 32:      &                      E_VDW, E_14_VDW, E_ELEC, E_14_ELEC, IGB, MACROIONT 32:      &                      E_VDW, E_14_VDW, E_ELEC, E_14_ELEC, IGB, MACROIONT
 33:       USE AMBER12_INTERFACE_MOD, ONLY : AMBER12_WRITE_RESTART, AMBER12_WRITE_PDB, POT_ENE_REC_C 33:       USE AMBER12_INTERFACE_MOD, ONLY : AMBER12_WRITE_RESTART, AMBER12_WRITE_PDB, POT_ENE_REC_C
 34:       USE CHIRALITY, ONLY : INIT_CHIRAL, INIT_CIS_TRANS 34:       USE CHIRALITY, ONLY : INIT_CHIRAL, INIT_CIS_TRANS
 35:       USE AMBER12_MUTATIONS, ONLY: AMBERMUT_STEP, REVERSE_MUTATION , MUTATION_E 
 36:       USE porfuncs 35:       USE porfuncs
 37:       USE AMHGLOBALS, ONLY: NMRES,OMOVI,AVEP,NUMPRO,IRES 36:       USE AMHGLOBALS, ONLY: NMRES,OMOVI,AVEP,NUMPRO,IRES
 38:       USE AMH_INTERFACES, ONLY:E_WRITE 37:       USE AMH_INTERFACES, ONLY:E_WRITE
 39:       USE ROTAMER 38:       USE ROTAMER
 40:       USE LJ_GAUSS_MOD, ONLY: LJ_GAUSS_TAKESTEP 39:       USE LJ_GAUSS_MOD, ONLY: LJ_GAUSS_TAKESTEP
 41:       USE OPP_MOD, ONLY: OPP_TAKESTEP 40:       USE OPP_MOD, ONLY: OPP_TAKESTEP
 42:  41: 
 43:       IMPLICIT NONE 42:       IMPLICIT NONE
 44: #ifdef MPI 43: #ifdef MPI
 45:       INCLUDE 'mpif.h' 44:       INCLUDE 'mpif.h'
 46:       INTEGER MPIERR 45:       INTEGER MPIERR
 47:       LOGICAL HITANY,MPI_FINT 46:       LOGICAL HITANY,MPI_FINT
 48: #endif 47: #endif
 49:  48: 
 50:       INTEGER J1, NSUCCESS(NPAR), NFAIL(NPAR), NFAILT(NPAR), NSUCCESST(NPAR), J2, NSTEPS, JP, REJSTREAK, 49:       INTEGER J1, NSUCCESS(NPAR), NFAIL(NPAR), NFAILT(NPAR), NSUCCESST(NPAR), J2, NSTEPS, JP, REJSTREAK,
 51:      1        UNT, ITERATIONS, NSUPERCOUNT, NQTOT, JACCPREV, NREN, NLAST, NSTEPREN, BRUN,QDONE,JBEST(NPAR),GCJBEST(NPAR), 50:      1        UNT, ITERATIONS, NSUPERCOUNT, NQTOT, JACCPREV, NREN, NLAST, NSTEPREN, BRUN,QDONE,JBEST(NPAR),GCJBEST(NPAR),
 52:      2        NRMS, NDONE, I, RNDSEED, J, NTOT, ITRAJ, NEACCEPT, J3, J4, ISTAT, LOCALCOUNT, QNEWRES, QGCBH, GCNATOMSBEST(NPAR), 51:      2        NRMS, NDONE, I, RNDSEED, J, NTOT, ITRAJ, NEACCEPT, J3, J4, ISTAT, LOCALCOUNT, QNEWRES, QGCBH, GCNATOMSBEST(NPAR),
 53:      &        GCJESTP(NPAR), GCNATOMSBESTP(NPAR), GCJBESTP(NPAR) 52:      &        GCJESTP(NPAR), GCNATOMSBESTP(NPAR), GCJBESTP(NPAR)
 54:       INTEGER :: NSYMCALL=0, NULLMOVES(NPAR), NULLMOVEST(NPAR), NSWAPS=0 53:       INTEGER :: NSYMCALL=0, NULLMOVES(NPAR), NULLMOVEST(NPAR), NSWAPS=0
 55:       DOUBLE PRECISION POTEL, SCALEFAC, RANDOM, DPRAND, DPRAND_UNIVERSAL,  54:       DOUBLE PRECISION POTEL, SCALEFAC, RANDOM, DPRAND, DPRAND_UNIVERSAL, SAVECOORDS(3*NATOMSALLOC), TEMPCOORDS(3*NATOMSALLOC),
 56:      1                 TIME, SPOTEL(NSUPER), SCOORDS(3*NATOMSALLOC,NSUPER), 55:      1                 TIME, SPOTEL(NSUPER), SCOORDS(3*NATOMSALLOC,NSUPER), SCREENC(3*NATOMSALLOC),
 57:      2                 EPPREV(NPAR), QSTART, QFINISH, RANNJ, RMIN, RMINO, RCOORDS(3*NATOMSALLOC),ELASTSYM(NPAR), 56:      2                 EPPREV(NPAR), QSTART, QFINISH, RANNJ, RMIN, RMINO, RCOORDS(3*NATOMSALLOC),ELASTSYM(NPAR),
 58:      3                 RCOORDSO(3*NATOMSALLOC), RVAT(NATOMSALLOC), RVATO(NATOMSALLOC), EPSSAVE, EBEST(NPAR), GCEBEST(NPAR),  57:      3                 RCOORDSO(3*NATOMSALLOC), RVAT(NATOMSALLOC), RVATO(NATOMSALLOC), EPSSAVE, EBEST(NPAR), GCEBEST(NPAR), 
 59:      4                 GCEBESTP(NPAR),  58:      4                 GCEBESTP(NPAR), 
 60:      4                 RMSD, VINIT, CTE, TEMPTRAJ(0:NPAR-1), GCBESTCOORDS(3*NATOMSALLOC,NPAR), 59:      4                 BESTCOORDS(3*NATOMSALLOC,NPAR), RMSD, VINIT, CTE, TEMPTRAJ(0:NPAR-1), GCBESTCOORDS(3*NATOMSALLOC,NPAR),
 61:      5                 T, BETA(0:NPAR-1), GRAD(3*NATOMSALLOC), E, W, GCBESTCOORDSP(3*NATOMSALLOC,NPAR), 60:      5                 T, BETA(0:NPAR-1), GRAD(3*NATOMSALLOC), E, W, GCBESTCOORDSP(3*NATOMSALLOC,NPAR),
 62:      &                 DUMMY1, DUMMY2, DUMMY3, INTE, OPOTEL, GCBESTVAT(NATOMSALLOC,NPAR), GCBESTVATP(NATOMSALLOC,NPAR),  61:      &                 DUMMY1, DUMMY2, DUMMY3, INTE, OPOTEL, GCBESTVAT(NATOMSALLOC,NPAR), GCBESTVATP(NATOMSALLOC,NPAR), 
 63:      &                 XMASS, YMASS, ZMASS, CMMAX 62:      &                 XMASS, YMASS, ZMASS, CMMAX
 64:       DOUBLE PRECISION, ALLOCATABLE :: BESTCOORDS(:,:) , SAVECOORDS(:), TEMPCOORDS(:), SCREENC(:) 
 65:       LOGICAL CHANGEDE, RES1, RES2, COMPON, QUENCHCOMP, MARKOVSTEP 63:       LOGICAL CHANGEDE, RES1, RES2, COMPON, QUENCHCOMP, MARKOVSTEP
 66:       LOGICAL CHIRALFAIL,AMIDEFAIL, LOGDUMMY, DISTOK 64:       LOGICAL CHIRALFAIL,AMIDEFAIL, LOGDUMMY, DISTOK
 67:       CHARACTER FNAME*9 65:       CHARACTER FNAME*9
 68:       CHARACTER (LEN= 3)  ISTR 66:       CHARACTER (LEN= 3)  ISTR
 69:       CHARACTER (LEN=20) QUENCHNUM, QUNAME , FMUTNAMEPDB , FMUTNAMERST 67:       CHARACTER (LEN=20) QUENCHNUM, QUNAME
 70:       CHARACTER (LEN=20) BESTNAME 68:       CHARACTER (LEN=20) BESTNAME
 71:       LOGICAL  CHANGED 69:       LOGICAL  CHANGED
 72: c  AMH  70: c  AMH 
 73:       INTEGER :: GLY_COUNT,III,I2,I500,SNAPCOUNT 71:       INTEGER :: GLY_COUNT,III,I2,I500,SNAPCOUNT
 74:       DOUBLE PRECISION prcord(NATOMSALLOC,3,3,3) 72:       DOUBLE PRECISION prcord(NATOMSALLOC,3,3,3)
 75:       DOUBLE PRECISION :: mctemp 73:       DOUBLE PRECISION :: mctemp
 76: !  csw34> PAIRDIST variables 74: !  csw34> PAIRDIST variables
 77:       INTEGER :: PAIRCOUNTER 75:       INTEGER :: PAIRCOUNTER
 78:       DOUBLE PRECISION, EXTERNAL :: PAIRDISTANCE 76:       DOUBLE PRECISION, EXTERNAL :: PAIRDISTANCE
 79:       DOUBLE PRECISION :: ATOM1(3),ATOM2(3) 77:       DOUBLE PRECISION :: ATOM1(3),ATOM2(3)
 93:       INTEGER DUMPUNIQUEUNIT 91:       INTEGER DUMPUNIQUEUNIT
 94:  92: 
 95: ! khs26> Energy decomposition for AMBER 12 93: ! khs26> Energy decomposition for AMBER 12
 96: !      TYPE(POT_ENE_REC_C) :: AMBER12_ENERGY_DECOMP 94: !      TYPE(POT_ENE_REC_C) :: AMBER12_ENERGY_DECOMP
 97:  95: 
 98: ! ds656 > energy before and after BGUPTA swap (without relaxation) 96: ! ds656 > energy before and after BGUPTA swap (without relaxation)
 99:       DOUBLE PRECISION :: EBSWAP=0.0D0, EASWAP=0.0D0, EASWAPQ=0.0D0, DE1=0.0D0, DE2=0.0D0 97:       DOUBLE PRECISION :: EBSWAP=0.0D0, EASWAP=0.0D0, EASWAPQ=0.0D0, DE1=0.0D0, DE2=0.0D0
100:  98: 
101:       DOUBLE PRECISION QTEMP(3,NATOMSALLOC), Q4, Q6 99:       DOUBLE PRECISION QTEMP(3,NATOMSALLOC), Q4, Q6
102: 100: 
103: ! kr366> AMBER mutation steps 
104:       DOUBLE PRECISION :: EMUTP = 0.0D0 , EMUTN=0.0D0 
105:       LOGICAL :: MUTATEDT=.FALSE. , DOMUTATIONSTEPT=.FALSE. 
106:       CHARACTER(LEN=10) :: NMUT_STRING 
107:  
108: !kr366> as we may need to change the size of the coordinate arrays for mutational steps they are now allocatable 
109:       ALLOCATE(BESTCOORDS(3*NATOMSALLOC,NPAR)) 
110:       ALLOCATE(SAVECOORDS(3*NATOMSALLOC)) 
111:       ALLOCATE(TEMPCOORDS(3*NATOMSALLOC)) 
112:       ALLOCATE(SCREENC(3*NATOMSALLOC)) 
113:  
114:       QNEWRES=0101:       QNEWRES=0
115:       QGCBH=0102:       QGCBH=0
116: 103: 
117: ! sf344> selectively unfreeze the last added building blocks (MODULARNINCR)104: ! sf344> selectively unfreeze the last added building blocks (MODULARNINCR)
118: !        for sequential MC loops in modular global optimization105: !        for sequential MC loops in modular global optimization
119:       IF(MODULART) THEN106:       IF(MODULART) THEN
120:         FROZEN(:)=.TRUE.107:         FROZEN(:)=.TRUE.
121:            IF(MODULARCURRENTN==MODULARNMIN) THEN   ! unfreeze every atom in the first step of MODULARNMIN molecules108:            IF(MODULARCURRENTN==MODULARNMIN) THEN   ! unfreeze every atom in the first step of MODULARNMIN molecules
122:                 J6=0109:                 J6=0
123:            ELSE110:            ELSE
835:                        DOROTATERIGID=.TRUE.822:                        DOROTATERIGID=.TRUE.
836:                ENDIF823:                ENDIF
837: ! mo361> rigid body rotation move switch824: ! mo361> rigid body rotation move switch
838:                IF(TRANSLATERIGIDT.AND.MOD(J1,TRANSLATERIGIDFREQ).EQ.0) THEN825:                IF(TRANSLATERIGIDT.AND.MOD(J1,TRANSLATERIGIDFREQ).EQ.0) THEN
839:                        DOTRANSLATERIGID=.TRUE.826:                        DOTRANSLATERIGID=.TRUE.
840:                ENDIF827:                ENDIF
841: 828: 
842:                IF(ROTATEHINGET .AND. MOD(J1,ROTATEHINGEFREQ).EQ.0) THEN829:                IF(ROTATEHINGET .AND. MOD(J1,ROTATEHINGEFREQ).EQ.0) THEN
843:                        DOROTATEHINGE=.TRUE.830:                        DOROTATEHINGE=.TRUE.
844:                ENDIF831:                ENDIF
845: ! kr366> mutation moves for AMBER12                
846:                IF(AMBERMUTATIONT.AND.(MOD(J1,MUTATIONFREQ).EQ.0).AND.(J1.GT.0)) THEN 
847:                        WRITE(MUTUNIT,'(A,I10,A)') 'Mutational step after ',J1,' steps' 
848:                        DOMUTATIONSTEPT=.TRUE. 
849:                        MUTATEDT=.TRUE.        !as we need to consider different tests if we mutate! 
850:                ELSE IF (AMBERMUTATIONT.AND..NOT.MOD(J1,MUTATIONFREQ).EQ.0) THEN 
851:                       DOGROUPROT=.TRUE. 
852:                ENDIF 
853: 832: 
854: !833: !
855: ! csw34> Coordinates are saved so that moves can be undone834: ! csw34> Coordinates are saved so that moves can be undone
856: !835: !
857:                SAVECOORDS(1:3*NATOMS)=COORDS(1:3*NATOMS,JP)836:                SAVECOORDS(1:3*NATOMS)=COORDS(1:3*NATOMS,JP)
858: ! csw34> If you want to look at the effect of moves, you can dump out837: ! csw34> If you want to look at the effect of moves, you can dump out
859: ! the structure BEFORE the move here.838: ! the structure BEFORE the move here.
860: !                 CALL A9DUMPPDB(COORDS(:,JP),"beforemove")839: !                 CALL A9DUMPPDB(COORDS(:,JP),"beforemove")
861: !                 CALL CHARMMDUMP(COORDS(:,JP),'beforemove')840: !                 CALL CHARMMDUMP(COORDS(:,JP),'beforemove')
862:                IF (MACROIONT) THEN841:                IF (MACROIONT) THEN
1195:                   ENDDO1174:                   ENDDO
1196: ! AMBER12 step taking1175: ! AMBER12 step taking
1197: ! with macroion model1176: ! with macroion model
1198:                ELSE IF (AMBER12T.AND.MACROIONT) THEN1177:                ELSE IF (AMBER12T.AND.MACROIONT) THEN
1199:                IF (MACROIONT) THEN1178:                IF (MACROIONT) THEN
1200:                 CALL MACROION_MOVES(J1,COORDS(:,JP),movableatomlist,nmovableatoms,ligmovet,blockmovet,nblocks,1179:                 CALL MACROION_MOVES(J1,COORDS(:,JP),movableatomlist,nmovableatoms,ligmovet,blockmovet,nblocks,
1201:      1                              atomsinblock,STEP(JP))1180:      1                              atomsinblock,STEP(JP))
1202:                END IF1181:                END IF
1203: ! normal AMBER12 step taking (without MACROION model)              1182: ! normal AMBER12 step taking (without MACROION model)              
1204:                ELSE IF (AMBER12T.AND..NOT.MACROIONT) THEN1183:                ELSE IF (AMBER12T.AND..NOT.MACROIONT) THEN
1205:                   !kr366> mutational step,  otherwise continue with the normal steps  
1206:                   IF (AMBERMUTATIONT.AND.DOMUTATIONSTEPT) THEN 
1207:                      WRITE(MUTUNIT,'(A,I8)') 'Number of atoms before mutation: ',NATOMS 
1208:                      WRITE(MYUNIT,'(A,I8)') ' mc> Number of atoms before mutation: ',NATOMS 
1209:                      CALL MUTATION_E(EMUTP,COORDS(:,JP)) !get the energy for the old molecule before we reinitialise AMBER! 
1210:                      CALL AMBERMUT_STEP(COORDS(:,JP)) 
1211:                      IF (SETCHIRAL) THEN 
1212:                         WRITE(MYUNIT,'(A)') ' mc> Storing chiral information for initial (mutated) structure' 
1213:                         CALL INIT_CHIRAL(COORDS(:,1)) 
1214:                      END IF 
1215:                      IF (NOCISTRANS) THEN 
1216:                         WRITE(MYUNIT,'(A)') ' mc> Storing cis/trans information for initial (mutated) structure' 
1217:                         CALL INIT_CIS_TRANS(COORDS(:,1)) 
1218:                      ENDIF 
1219:                      WRITE(MUTUNIT,'(A,I8)') 'Number of atoms after mutation: ',NATOMS   
1220:                      WRITE(MYUNIT,'(A,I8)') ' mc> Number of atoms after mutation: ',NATOMS                     
1221:                      WRITE(MYUNIT, '(A)')  'Calculating initial energy after mutation' 
1222:                      EPSSAVE=EPSSPHERE 
1223:                      EPSSPHERE=0.0D0 
1224:                      IF (ALLOCATED(SCREENC)) DEALLOCATE(SCREENC) 
1225:                      ALLOCATE(SCREENC(3*NATOMS)) 
1226:                      SCREENC(1:3*NATOMS)=COORDS(1:3*NATOMS,1) 
1227:                      CALL QUENCH(.FALSE.,JP,ITERATIONS,TIME,BRUN,QDONE,SCREENC) 
1228:                      NQTOT=NQTOT+1 
1229:                      WRITE(MYUNIT,'(A,I10,A,G20.10,A,I5,A,G12.5,A,G20.10,A,F11.1)') 'Qu ',NQ(JP),' E=', 
1230:      1                     POTEL,' steps=',ITERATIONS,' RMS=',RMS,' Markov E=',POTEL,' t=',TIME-TSTART 
1231:                      CALL FLUSH(MYUNIT) 
1232:                      EPREV(JP)=POTEL 
1233:                      COORDSO(1:3*NATOMS,JP)=COORDS(1:3*NATOMS,JP) 
1234:                      IF (ALLOCATED(BESTCOORDS)) DEALLOCATE(BESTCOORDS) 
1235:                      ALLOCATE(BESTCOORDS(3*NATOMS,NPAR)) 
1236:                      IF (ALLOCATED(SAVECOORDS)) DEALLOCATE(SAVECOORDS) 
1237:                      ALLOCATE(SAVECOORDS(3*NATOMS)) 
1238:                      IF (ALLOCATED(TEMPCOORDS)) DEALLOCATE(TEMPCOORDS) 
1239:                      ALLOCATE(TEMPCOORDS(3*NATOMS)) 
1240:                      BESTCOORDS(1:3*NATOMS,1:NPAR)=0.0D0 
1241:                      BESTCOORDS(1:3*NATOMS,JP)=COORDS(1:3*NATOMS,JP) 
1242:                      WRITE(NMUT_STRING,'(I6)') NMUTATION 
1243:                      FMUTNAMEPDB='init.'//TRIM(ADJUSTL(NMUT_STRING))//'.pdb' 
1244:                      FMUTNAMERST='init.'//TRIM(ADJUSTL(NMUT_STRING))//'.rst' 
1245:                      CALL AMBER12_WRITE_RESTART(COORDS(:,1),FMUTNAMERST,LEN(FMUTNAMERST))  
1246:                      CALL AMBER12_WRITE_PDB(COORDS(:,1),FMUTNAMEPDB,LEN(FMUTNAMEPDB))  
1247:                   ELSE 
1248: ! Do group rotation moves1184: ! Do group rotation moves
1249:                      CALL CARTESIAN_SPHERE(COORDS(:,JP), STEP(JP))1185:                   CALL CARTESIAN_SPHERE(COORDS(:,JP), STEP(JP))
1250:                      IF (GROUPROTT.AND.DOGROUPROT) CALL GROUPROTSTEP(JP)1186:                   IF (GROUPROTT.AND.DOGROUPROT) CALL GROUPROTSTEP(JP)
1251:                      IF (DIHEDRALROTT.AND.DODIHEDRALROT) CALL DIHEDRALROTSTEP(DUMMY1,JP,DUMMY2,DUMMY3)1187:                   IF (DIHEDRALROTT.AND.DODIHEDRALROT) CALL DIHEDRALROTSTEP(DUMMY1,JP,DUMMY2,DUMMY3)
1252:                      IF (ROTAMER_MOVET) CALL ROTAMER_STEP(COORDS(:, JP))1188:                   IF (ROTAMER_MOVET) CALL ROTAMER_STEP(COORDS(:, JP))
1253:                   ENDIF 
1254: ! jdf43> MWFILM1189: ! jdf43> MWFILM
1255:                ELSE IF ((MWFILMT).AND.(PERIODIC)) THEN1190:                ELSE IF ((MWFILMT).AND.(PERIODIC)) THEN
1256:                   CALL MWSTEP(COORDS,JP,NPAR,NATOMS,STEP(JP),BOXLX,BOXLY,BOXLZ,LAT)1191:                   CALL MWSTEP(COORDS,JP,NPAR,NATOMS,STEP(JP),BOXLX,BOXLY,BOXLZ,LAT)
1257: ! vr274> DMACRYS steps taking1192: ! vr274> DMACRYS steps taking
1258:                ELSE IF (DMACRYST) THEN1193:                ELSE IF (DMACRYST) THEN
1259:                   call DMACRYS_TAKESTEP(JP)1194:                   call DMACRYS_TAKESTEP(JP)
1260: !ds656> Enumerate permutations1195: !ds656> Enumerate permutations
1261:                ELSE IF (ENPERMST) THEN1196:                ELSE IF (ENPERMST) THEN
1262:                   CALL ENPERMS_TAKESTEP(JP,COMPLETE)1197:                   CALL ENPERMS_TAKESTEP(JP,COMPLETE)
1263:                   !write(*,*) COMPLETE1198:                   !write(*,*) COMPLETE
1476:                ENDIF 1411:                ENDIF 
1477:  1412:  
1478: !1413: !
1479: ! Reset switch variables for steps not done every time1414: ! Reset switch variables for steps not done every time
1480: !1415: !
1481:                DOGROUPROT=.FALSE.1416:                DOGROUPROT=.FALSE.
1482:                DODGROUPMOVET=.FALSE.1417:                DODGROUPMOVET=.FALSE.
1483:                DOEXPANDRIGID=.FALSE.1418:                DOEXPANDRIGID=.FALSE.
1484:                DOROTATERIGID=.FALSE.1419:                DOROTATERIGID=.FALSE.
1485:                DOTRANSLATERIGID=.FALSE.1420:                DOTRANSLATERIGID=.FALSE.
1486:                DOMUTATIONSTEPT=.FALSE. !kr366> MUTATEDT is still set for the rest of the routine! 
1487: !!!!!!!!!!!!!!!!!!!!!!!!!!!1421: !!!!!!!!!!!!!!!!!!!!!!!!!!!
1488: ! END OF STEP TAKING CALLS!1422: ! END OF STEP TAKING CALLS!
1489: !!!!!!!!!!!!!!!!!!!!!!!!!!!1423: !!!!!!!!!!!!!!!!!!!!!!!!!!!
1490: ! csw34> end of temporary IF block for new moves - look for NEWMOVEST1424: ! csw34> end of temporary IF block for new moves - look for NEWMOVEST
1491:             ENDIF1425:             ENDIF
1492:             1426:             
1493: ! ds656> Translate centre of geometry (COG) if needed1427: ! ds656> Translate centre of geometry (COG) if needed
1494:             IF(BOXCENTROIDT) CALL BOXCENTROID(COORDS(:,JP))1428:             IF(BOXCENTROIDT) CALL BOXCENTROID(COORDS(:,JP))
1495: 1429: 
1496: ! csw34> If you want to look at the effect of moves, you can dump out1430: ! csw34> If you want to look at the effect of moves, you can dump out
2303:                   COORDS(1:3*GCNATOMSBEST(JP),JP)=GCBESTCOORDS(1:3*GCNATOMSBEST(JP),JP)2237:                   COORDS(1:3*GCNATOMSBEST(JP),JP)=GCBESTCOORDS(1:3*GCNATOMSBEST(JP),JP)
2304:                   COORDSO(1:3*GCNATOMSBEST(JP),JP)=GCBESTCOORDS(1:3*GCNATOMSBEST(JP),JP)2238:                   COORDSO(1:3*GCNATOMSBEST(JP),JP)=GCBESTCOORDS(1:3*GCNATOMSBEST(JP),JP)
2305:                   VAT(1:GCNATOMSBEST(JP),JP)=GCBESTVAT(1:GCNATOMSBEST(JP),JP)2239:                   VAT(1:GCNATOMSBEST(JP),JP)=GCBESTVAT(1:GCNATOMSBEST(JP),JP)
2306:                   VATO(1:GCNATOMSBEST(JP),JP)=GCBESTVAT(1:GCNATOMSBEST(JP),JP)2240:                   VATO(1:GCNATOMSBEST(JP),JP)=GCBESTVAT(1:GCNATOMSBEST(JP),JP)
2307:                   POTEL=GCEBEST(JP)2241:                   POTEL=GCEBEST(JP)
2308:                   EPREV(JP)=GCEBEST(JP)2242:                   EPREV(JP)=GCEBEST(JP)
2309:                   IF (DEBUG) WRITE(MYUNIT,'(A,G20.10)') 'mc> potel and eprev reset to ',GCEBEST(JP)2243:                   IF (DEBUG) WRITE(MYUNIT,'(A,G20.10)') 'mc> potel and eprev reset to ',GCEBEST(JP)
2310:                   IF (DEBUG) WRITE(MYUNIT,'(A,I6)') 'mc> number of atoms reset to ',NATOMS2244:                   IF (DEBUG) WRITE(MYUNIT,'(A,I6)') 'mc> number of atoms reset to ',NATOMS
2311:                ENDIF2245:                ENDIF
2312:             ENDIF2246:             ENDIF
2313:  
2314:             !the mutational steps are accepted for better bonding properties, but the energies used  
2315:             !otherwise refer to the best potential energies for one sequence 
2316:             IF (MUTATEDT.AND.(MOD((J1-MUTTESTSTEPS),MUTATIONFREQ).EQ.0)) THEN !kr366> here we check our mutational step                
2317:                CALL MUTATION_E(EMUTN,TEMPCOORDS) !get the energy for the new molecule 
2318:                WRITE(MYUNIT, '(2(A,F15.8))') ' mc> Energy before mutation: ',EMUTP,' | energy after mutation: ',EMUTN 
2319:                WRITE(MUTUNIT, '(2(A,F15.8))') 'Energy before mutation: ',EMUTP,' | energy after mutation: ',EMUTN 
2320:                IF (EMUTN.LT.EMUTP) THEN 
2321:                   RANDOM=0.0D0 
2322:                   ATEST=.TRUE. 
2323:                ELSE 
2324:                   RANDOM=DPRAND() 
2325:                   DUMMY = EMUTN - EMUTP 
2326:                   DUMMY=EXP(-DUMMY/MAX(MCTEMP,1.0D-100)) 
2327:                   IF (DUMMY.GT.RANDOM) THEN 
2328:                      ATEST=.TRUE. 
2329:                   ELSE 
2330:                      ATEST=.FALSE. 
2331:                   ENDIF 
2332:                ENDIF 
2333:                IF (ATEST) THEN 
2334:                   WRITE(MUTUNIT,'(A)') 'Mutation accpeted' 
2335:                   WRITE(MYUNIT, '(A)') ' mc> Mutation accepted' 
2336:                ELSE 
2337:                   CALL REVERSE_MUTATION() 
2338:                   IF (SETCHIRAL) THEN 
2339:                      WRITE(MYUNIT,'(A)') ' mc> Storing chiral information for initial (mutated) structure' 
2340:                      CALL INIT_CHIRAL(COORDS(:,1)) 
2341:                   END IF 
2342:                   IF (NOCISTRANS) THEN 
2343:                      WRITE(MYUNIT,'(A)') ' mc> Storing cis/trans information for initial (mutated) structure' 
2344:                      CALL INIT_CIS_TRANS(COORDS(:,1)) 
2345:                   ENDIF 
2346:                   WRITE(MYUNIT, '(A)')  ' mc> Calculating initial energy after reversing mutation' 
2347:                   EPSSAVE=EPSSPHERE 
2348:                   EPSSPHERE=0.0D0 
2349:                   CALL QUENCH(.FALSE.,JP,ITERATIONS,TIME,BRUN,QDONE,SCREENC) 
2350:                   NQTOT=NQTOT+1 
2351:                   WRITE(MYUNIT,'(A,I10,A,G20.10,A,I5,A,G12.5,A,G20.10,A,F11.1)') 'Qu ',NQ(JP),' E=', 
2352:      1                     POTEL,' steps=',ITERATIONS,' RMS=',RMS,' Markov E=',POTEL,' t=',TIME-TSTART 
2353:                   CALL FLUSH(MYUNIT) 
2354:                   EPREV(JP)=POTEL 
2355:                   COORDSO(1:3*NATOMS,JP)=COORDS(1:3*NATOMS,JP) 
2356:                   IF (ALLOCATED(BESTCOORDS)) DEALLOCATE(BESTCOORDS) 
2357:                   ALLOCATE(BESTCOORDS(3*NATOMS,NPAR)) 
2358:                   IF (ALLOCATED(SAVECOORDS)) DEALLOCATE(SAVECOORDS) 
2359:                   ALLOCATE(SAVECOORDS(3*NATOMS)) 
2360:                   IF (ALLOCATED(TEMPCOORDS)) DEALLOCATE(TEMPCOORDS) 
2361:                   ALLOCATE(TEMPCOORDS(3*NATOMS)) 
2362:                   BESTCOORDS(1:3*NATOMS,1:NPAR)=0.0D0 
2363:                   BESTCOORDS(1:3*NATOMS,JP)=COORDS(1:3*NATOMS,JP) 
2364:                   WRITE(MUTUNIT,'(A,I8,A)') 'Mutation ',NMUTATION ,' rejected' 
2365:                   IF (DEBUG) WRITE(MUTUNIT,'(2(A,F20.10))') 'EMUTP: ' , EMUTP , ' and EMUTN: ' , EMUTN 
2366:                   WRITE(MYUNIT,'(A,I8,A)') ' mc> Mutation ',NMUTATION,' rejected' 
2367:                ENDIF 
2368:                MUTATEDT=.FALSE. 
2369:                EMUTP = 0.0D0 
2370:                EMUTN = 0.0D0 
2371:            ENDIF 
2372:                  
2373: #ifdef MPI2247: #ifdef MPI
2374:             IF (TARGET) CALL BHPT_TARGET(HITANY)2248:             IF (TARGET) CALL BHPT_TARGET(HITANY)
2375:             IF (HITANY) GOTO 372249:             IF (HITANY) GOTO 37
2376:             CALL BHPT_EXCHANGE(BETA,J1,NTOT,NEACCEPT)2250:             CALL BHPT_EXCHANGE(BETA,J1,NTOT,NEACCEPT)
2377: !2251: !
2378: !  When SYMMETRISE is turned on we can have multiple quenches on each pass through the main2252: !  When SYMMETRISE is turned on we can have multiple quenches on each pass through the main
2379: !  basin-hopping loop. If we really want to limit the number of quenches to NSTEPS then we2253: !  basin-hopping loop. If we really want to limit the number of quenches to NSTEPS then we
2380: !  need to test NQ(JP) as well.2254: !  need to test NQ(JP) as well.
2381: !2255: !
2382:   2256:   
2461:                CALL FINALRATIO(NULLMOVEST,NSUCCESST,JP,SUM(NQ(:)))2335:                CALL FINALRATIO(NULLMOVEST,NSUCCESST,JP,SUM(NQ(:)))
2462:             ENDIF2336:             ENDIF
2463:             WRITE(MYUNIT,21) NSUCCESST(JP)*1.0D0/MAX(1.0D0,1.0D0*(NSUCCESST(JP)+NFAILT(JP))),2337:             WRITE(MYUNIT,21) NSUCCESST(JP)*1.0D0/MAX(1.0D0,1.0D0*(NSUCCESST(JP)+NFAILT(JP))),
2464:      1               STEP(JP),ASTEP(JP),TEMP(JP)2338:      1               STEP(JP),ASTEP(JP),TEMP(JP)
2465: 21          FORMAT('Acceptance ratio for run=',F12.5,' Step=',F12.5,' Angular step factor=',F12.5,' T=',F12.5)2339: 21          FORMAT('Acceptance ratio for run=',F12.5,' Step=',F12.5,' Angular step factor=',F12.5,' T=',F12.5)
2466:          ENDIF2340:          ENDIF
2467:          IF (RIGID) WRITE(MYUNIT,'(A,F12.5)') 'Rigid body orientational step=',OSTEP(JP)2341:          IF (RIGID) WRITE(MYUNIT,'(A,F12.5)') 'Rigid body orientational step=',OSTEP(JP)
2468:       ENDDO2342:       ENDDO
2469: #endif2343: #endif
2470: !mo361>Deallocating these arrays to cope with multiple runs of this subroutine in GA2344: !mo361>Deallocating these arrays to cope with multiple runs of this subroutine in GA
2471:       IF (ALLOCATED(TMOVE)) DEALLOCATE(TMOVE)2345:       DEALLOCATE(TMOVE)
2472:       IF (ALLOCATED(OMOVE)) DEALLOCATE(OMOVE)2346:       DEALLOCATE(OMOVE)
2473:       IF ( DUMPUNIQUE ) CLOSE(DUMPUNIQUEUNIT)2347:       IF ( DUMPUNIQUE ) CLOSE(DUMPUNIQUEUNIT)
2474:       2348:       
2475: ! beh35 > mlowest addition2349: ! beh35 > mlowest addition
2476: 2350: 
2477:       IF (TARGET .OR. MLOWEST) THEN2351:       IF (TARGET .OR. MLOWEST) THEN
2478: 2352: 
2479:          IF (HIT) THEN2353:          IF (HIT) THEN
2480:             WRITE(MYUNIT,'(I0,1X,I0,1X,I0,1X,F20.10)')1,NQTOT,NPCALL,TIME-TSTART2354:             WRITE(MYUNIT,'(I0,1X,I0,1X,I0,1X,F20.10)')1,NQTOT,NPCALL,TIME-TSTART
2481:          ELSE2355:          ELSE
2482:             WRITE(MYUNIT,'(I0,1X,I0,1X,I0,1X,F20.10)')0,NQTOT,NPCALL,TIME-TSTART2356:             WRITE(MYUNIT,'(I0,1X,I0,1X,I0,1X,F20.10)')0,NQTOT,NPCALL,TIME-TSTART
2483:          ENDIF2357:          ENDIF
2484: 2358: 
2485:       ENDIF2359:       ENDIF
2486:       !kr366> deallocate arrays at the end 
2487:       IF (ALLOCATED(BESTCOORDS)) DEALLOCATE(BESTCOORDS) 
2488: 2360: 
2489:       RETURN2361:       RETURN
2490:       END2362:       END
2491: C     2363: C     
2492: C2364: C
2493: ! csw34> Subroutine to dump the current lowest interaction energy structure 2365: ! csw34> Subroutine to dump the current lowest interaction energy structure 
2494: !> \brief Subroutine to dump the current lowest interaction energy structure 2366: !> \brief Subroutine to dump the current lowest interaction energy structure 
2495: !> \author Chris Whittleston, csw34@cam.ac.uk2367: !> \author Chris Whittleston, csw34@cam.ac.uk
2496: !2368: !
2497:       SUBROUTINE A9INTEDUMPLOWEST()2369:       SUBROUTINE A9INTEDUMPLOWEST()


r33110/mcruns.f90 2017-08-03 17:31:00.963630872 +0100 r33109/mcruns.f90 2017-08-03 17:31:10.123752881 +0100
 11: !   but WITHOUT ANY WARRANTY; without even the implied warranty of 11: !   but WITHOUT ANY WARRANTY; without even the implied warranty of
 12: !   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 12: !   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13: !   GNU General Public License for more details. 13: !   GNU General Public License for more details.
 14: ! 14: !
 15: !   You should have received a copy of the GNU General Public License 15: !   You should have received a copy of the GNU General Public License
 16: !   along with this program; if not, write to the Free Software 16: !   along with this program; if not, write to the Free Software
 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 18: ! 18: !
 19: SUBROUTINE MCRUNS(SCREENC) 19: SUBROUTINE MCRUNS(SCREENC)
 20:    USE COMMONS, ONLY: NATOMS, PTMC, BSPT, ONE_ATOM_TAKESTEP, CHECKDT, COORDS, & 20:    USE COMMONS, ONLY: NATOMS, PTMC, BSPT, ONE_ATOM_TAKESTEP, CHECKDT, COORDS, &
 21:                       NRUNS, MCSTEPS, TFAC, RELAXFQ, NSAVE, GBHT, AMBERMUTATIONT, & 21:                       NRUNS, MCSTEPS, TFAC, RELAXFQ, NSAVE, GBHT
 22:                       NMUTATION 
 23:    USE GENRIGID, ONLY: RIGIDINIT 22:    USE GENRIGID, ONLY: RIGIDINIT
 24:    USE QMODULE, ONLY: QMINP 23:    USE QMODULE, ONLY: QMINP
 25:    USE PREC, ONLY: INT32, REAL64 24:    USE PREC, ONLY: INT32, REAL64
 26:    USE AMBER12_MUTATIONS, ONLY: AMBERMUT_CURR_LOWEST,FINISH_AMBERMUT 
 27:    USE AMBER12_INTERFACE_MOD, ONLY: AMBER12_FINISH 
 28:    IMPLICIT NONE 25:    IMPLICIT NONE
 29: ! Arguments (what intent for SCREENC?) 26: ! Arguments (what intent for SCREENC?)
 30:    REAL(REAL64)               :: SCREENC(3*NATOMS) 27:    REAL(REAL64)               :: SCREENC(3*NATOMS)
 31: ! Variables 28: ! Variables
 32:    LOGICAL                    :: LOPEN 29:    LOGICAL                    :: LOPEN
 33:    REAL(REAL64), ALLOCATABLE  :: QMINPTMP(:, :) 30:    REAL(REAL64), ALLOCATABLE  :: QMINPTMP(:, :)
 34:    INTEGER(INT32)             :: I 31:    INTEGER(INT32)             :: I
 35:  32: 
 36:    IF (PTMC .OR. BSPT) THEN 33:    IF (PTMC .OR. BSPT) THEN
 37:       IF (ONE_ATOM_TAKESTEP) THEN 34:       IF (ONE_ATOM_TAKESTEP) THEN
 73:    DO I = 1, NRUNS 70:    DO I = 1, NRUNS
 74:       CALL MC(MCSTEPS(I), TFAC(I), SCREENC(:)) 71:       CALL MC(MCSTEPS(I), TFAC(I), SCREENC(:))
 75:    END DO 72:    END DO
 76:  73: 
 77: !     DO J1=1,NPAR 74: !     DO J1=1,NPAR
 78: !        CLOSE(DUMPVUNIT(J1)) 75: !        CLOSE(DUMPVUNIT(J1))
 79: !        CLOSE(DUMPXYZUNIT(J1)) 76: !        CLOSE(DUMPXYZUNIT(J1))
 80: !     ENDDO 77: !     ENDDO
 81: !     DUMPT=.FALSE. 78: !     DUMPT=.FALSE.
 82:  79: 
 83:    IF (AMBERMUTATIONT) THEN 
 84:       CALL FINISH_AMBERMUT() 
 85:       CALL AMBER12_FINISH() 
 86:       RETURN 
 87:    ENDIF 
 88:  
 89:    IF (RELAXFQ) THEN 80:    IF (RELAXFQ) THEN
 90:       ALLOCATE(QMINPTMP(NSAVE, 3*NATOMS)) 81:       ALLOCATE(QMINPTMP(NSAVE, 3*NATOMS))
 91:       QMINPTMP(:,:) = QMINP(:,:) 82:       QMINPTMP(:,:) = QMINP(:,:)
 92:       RELAXFQ = .FALSE. 83:       RELAXFQ = .FALSE.
 93:       RIGIDINIT = .TRUE. 84:       RIGIDINIT = .TRUE.
 94:       CALL FINALQ() 85:       CALL FINALQ()
 95:       CALL FINALIO() 86:       CALL FINALIO()
 96:       QMINP(:,:) = QMINPTMP(:,:) 87:       QMINP(:,:) = QMINPTMP(:,:)
 97:       DEALLOCATE(QMINPTMP) 88:       DEALLOCATE(QMINPTMP)
 98:       RELAXFQ = .TRUE. 89:       RELAXFQ = .TRUE.


r33110/mutate_aa.py 2017-08-03 17:31:03.907670088 +0100 r33109/mutate_aa.py 2017-08-03 17:31:13.019791451 +0100
  1: import coordinates_mut as cmut  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/mutate_aa.py' in revision 33109
  2: import numpy as np 
  3: import sys 
  4:  
  5: def assignment_from_list(aa_tree , atomlist): 
  6:     for atom in atomlist: 
  7:         hosts = cmut.find_neighbours_with_coords(aa_tree , atom) 
  8:         if len(hosts) == 1: 
  9:             cmut.create_new_coords_one_host(aa_tree, atom, hosts[0]) 
 10:         else: 
 11:             cmut.remove_multiple_hosts(aa_tree, hosts) 
 12:  
 13: oldname = sys.argv[1] 
 14: newname = sys.argv[2] 
 15:   
 16: coords = np.genfromtxt("coords.oldres")  
 17: #coords = coord.coords_aa[oldname] 
 18:  
 19: #Create graphs for old and new residue and reassign the conserved coordinates 
 20: old_residue = cmut.create_tree_for_aa(oldname) 
 21: cmut.add_coordinates_to_residue(old_residue , coords) 
 22: new_residue = cmut.create_tree_for_aa(newname) 
 23: cmut.assign_coordinates_backbone(old_residue , new_residue) 
 24: cmut.assign_coordinates_identical_atoms(old_residue , new_residue) 
 25: #set correct chirality for GLY 
 26: if ((oldname == 'GLY' and newname != 'GLY') or  
 27:     (oldname == 'CGLY' and newname != 'CGLY') or  
 28:     (oldname == 'NGLY' and newname != 'NGLY')): 
 29:     cmut.mutate_GLY_chiral(old_residue , new_residue) 
 30: #remove crowding for PRO and HYP 
 31: if (((oldname in ['PRO','HYP']) and (newname not in ['HYP' , 'PRO'])) or  
 32:     ((oldname in ['CPRO','CHYP']) and (newname not in ['CHYP' , 'CPRO']))): 
 33:     try: 
 34:         CG = cmut.get_number_from_name(new_residue , 'CG') 
 35:         del new_residue.node[CG]['XYZ'] 
 36:         CD = cmut.get_number_from_name(new_residue , 'CD') 
 37:         del new_residue.node[CD]['XYZ'] 
 38:     except (IndexError , KeyError): 
 39:         pass 
 40:  
 41: if (((newname in ['PRO' , 'HYP']) and (oldname not in ['HYP' , 'PRO'])) or 
 42:     ((newname in ['CPRO' , 'CHYP']) and (oldname not in ['CHYP' , 'CPRO']))): 
 43:     for atom in ['CG' , 'CD' , 'HG' ,'HG2' , 'HG3' , 'HD2' , 'HD3' , 'OD1' , 'HD1']: 
 44:         try: 
 45:             id = cmut.get_number_from_name(new_residue , atom) 
 46:             del new_residue.node[id]['XYZ'] 
 47:         except (IndexError , KeyError): 
 48:             pass 
 49:  
 50: #remove clashes due to position of CG (this may not be necessary ...) 
 51: if ((newname == 'TRP') or (newname == 'TYR') or 
 52:     (newname == 'CTRP') or (newname == 'CTYR') or 
 53:     (newname == 'NTRP') or (newname == 'NTYR')): 
 54:     cmut.position_CG_for_TRP(old_residue , new_residue , oldname) 
 55:  
 56: #Now check for rings in the amino acid 
 57: ringt = cmut.check_for_rings(new_residue) 
 58: atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 59: if not ringt: 
 60:     while len(atoms_unassigned) > 0: 
 61:         assignment_from_list(new_residue , atoms_unassigned) 
 62:         atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 63:         if (newname == 'ILE') and (len(atoms_unassigned) == 0):             
 64:             cmut.check_chirality_ILE(new_residue) 
 65:             atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 66:         if (newname == 'THR') and (len(atoms_unassigned) == 0):             
 67:             cmut.check_chirality_THR(new_residue) 
 68:             atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 69:  
 70: elif len(atoms_unassigned) > 0: 
 71:     #PHE <--> TYR and TRP <--> HIS 
 72:     specialmutt = cmut.check_special_assignment(oldname,newname) 
 73:     if specialmutt: 
 74:         cmut.special_assignment((old_residue,new_residue) , (oldname,newname)) 
 75:         atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 76:         while len(atoms_unassigned) > 0: 
 77:             assignment_from_list(new_residue , atoms_unassigned) 
 78:             atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 79:     elif newname not in ["PRO" , "HYP" , "CPRO" , "CHYP" , "NPRO"]: 
 80:         #locate first atom belonging to ring ("CG" for everything but proline)  
 81:         for atom in new_residue.nodes(): 
 82:             if new_residue.node[atom]['name'] == "CG": 
 83:                 first_ring_atom = atom 
 84:         atoms_to_assign = cmut.get_atom_list_upto_ring(new_residue , first_ring_atom) 
 85:         while len(atoms_to_assign) > 0: 
 86:             assignment_from_list(new_residue , atoms_to_assign) 
 87:             atoms_to_assign = cmut.get_atom_list_upto_ring(new_residue , first_ring_atom) 
 88:         cmut.assign_coordinates_ring(new_residue , newname) 
 89:         atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 90:         while len(atoms_unassigned) > 0: 
 91:             assignment_from_list(new_residue , atoms_unassigned) 
 92:             atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
 93:     else: 
 94:         if (((oldname == 'PRO') and (newname == 'HYP')) or 
 95:             ((oldname == 'CPRO') and (newname == 'CHYP'))): 
 96:             cmut.mutate_HYP_from_PRO(old_residue , new_residue)   
 97:         elif (((oldname == 'HYP') and (newname == 'PRO')) or 
 98:               ((oldname == 'CHYP') and (newname == 'CPRO'))): 
 99:             pass     
100:         else: 
101:             cmut.create_proline_coords(new_residue) 
102:         atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
103:         while len(atoms_unassigned) > 0: 
104:             assignment_from_list(new_residue , atoms_unassigned) 
105:             atoms_unassigned = cmut.find_atoms_without_coords(new_residue) 
106:             if ((newname == 'HYP') or (newname == 'CHYP')) and (len(atoms_unassigned) == 0):             
107:                 cmut.check_chirality_HYP(new_residue) 
108:                 atoms_unassigned = cmut.find_atoms_without_coords(new_residue)             
109:  
110: output_file = open("coords.newres" , "w") 
111: for atom in new_residue.nodes(): 
112:     coords = new_residue.node[atom]['XYZ'] 
113:     output_file.write("%14.7f %14.7f %14.7f \n" %(coords[0] , coords[1] , coords[2])) 
114: output_file.close()     
115:      


r33110/mymylbfgs.f 2017-08-03 17:31:01.219634284 +0100 r33109/mymylbfgs.f 2017-08-03 17:31:10.427756931 +0100
 72:          IF (GCBHT) THEN 72:          IF (GCBHT) THEN
 73:             DEALLOCATE(W) 73:             DEALLOCATE(W)
 74:             ALLOCATE(W(N*(2*M+1)+2*M)) 74:             ALLOCATE(W(N*(2*M+1)+2*M))
 75:             DEALLOCATE(DIAG) 75:             DEALLOCATE(DIAG)
 76:             ALLOCATE(DIAG(N))   76:             ALLOCATE(DIAG(N))  
 77: ! 77: !
 78: ! We cannot change RESET itself - it gives a segmentation fault because MYLBFGS is called 78: ! We cannot change RESET itself - it gives a segmentation fault because MYLBFGS is called
 79: ! with fixed values in this argument, not variables. 79: ! with fixed values in this argument, not variables.
 80: ! 80: !
 81:             LRESET=.TRUE. 81:             LRESET=.TRUE.
 82:          ELSE IF (AMBERMUTATIONT) THEN 
 83:             DEALLOCATE(W) 
 84:             ALLOCATE(W(N*(2*M+1)+2*M)) 
 85:             DEALLOCATE(DIAG) 
 86:             ALLOCATE(DIAG(N))   
 87: ! 
 88: ! We cannot change RESET itself - it gives a segmentation fault because MYLBFGS is called 
 89: ! with fixed values in this argument, not variables. 
 90: ! 
 91:             LRESET=.TRUE. 
 92:          ELSE 82:          ELSE
 93:             WRITE(MYUNIT, '(A,I10,A,I10,A)') 'ERROR, dimension of W=',SIZE(W,1),' but N*(2*M+1)+2*M=',N*(2*M+1)+2*M,' in mylbfgs' 83:             WRITE(MYUNIT, '(A,I10,A,I10,A)') 'ERROR, dimension of W=',SIZE(W,1),' but N*(2*M+1)+2*M=',N*(2*M+1)+2*M,' in mylbfgs'
 94:             call EXIT(10) 84:             call EXIT(10)
 95:          ENDIF 85:          ENDIF
 96:       ENDIF 86:       ENDIF
 97:       COREDONE=.FALSE. 87:       COREDONE=.FALSE.
 98:       SMINKCHANGET=.FALSE. 88:       SMINKCHANGET=.FALSE.
 99:       SMINKCURRENT=0.0D0 89:       SMINKCURRENT=0.0D0
100:       SMINKCURRENTP=0.0D0 90:       SMINKCURRENTP=0.0D0
101:       LOCALSTEEREDMINT=.FALSE. 91:       LOCALSTEEREDMINT=.FALSE.


r33110/nextprmtop_section.F90 2017-08-03 17:30:58.243594640 +0100 r33109/nextprmtop_section.F90 2017-08-03 17:31:07.403716651 +0100
  1: !*******************************************************************************!  1: !*******************************************************************************!
  2: ! Module: nextprmtop_section_mod  2: ! Module: nextprmtop_section_mod
  3: !  3: !
  4: ! Description: <TBS>  4: ! Description: <TBS>
  5: !  5: !
  6: !*******************************************************************************                                                                                  6: !*******************************************************************************                                                                                
  7: module nextprmtop_section_mod  7: module nextprmtop_section_mod
  8:   8: 
  9:   integer, save         :: iblock  9:   integer, save         :: iblock
 10:   logical, save         :: first = .true. 
 11:  10: 
 12:   private nnbchr, iblock 11:   private nnbchr, iblock
 13:  12: 
 14: contains 13: contains
 15:  14: 
 16: !*******************************************************************************! 15: !*******************************************************************************!
 17: ! Subroutine:  nxtsec (NeXT SECtion) 16: ! Subroutine:  nxtsec (NeXT SECtion)
 18: ! 17: !
 19: ! Description: 18: ! Description:
 20: ! 19: !
131:   integer               :: il2us130:   integer               :: il2us
132:   integer               :: ifind131:   integer               :: ifind
133:   integer               :: mblock132:   integer               :: mblock
134:   integer               :: ilfo133:   integer               :: ilfo
135: 134: 
136:   character*255         :: aa135:   character*255         :: aa
137:   character*80, save    :: nxtflg(mxnxfl)136:   character*80, save    :: nxtflg(mxnxfl)
138:   character*8, save     :: prdat, prtim137:   character*8, save     :: prdat, prtim
139: 138: 
140:   integer, save         :: inxtfl(2, mxnxfl), iprvrr, numflg139:   integer, save         :: inxtfl(2, mxnxfl), iprvrr, numflg
141:   !logical, save         :: first = .true.140:   logical, save         :: first = .true.
142:   real, save            :: rpver141:   real, save            :: rpver
143: 142: 
144:   iok = 0143:   iok = 0
145: 144: 
146:  
147:   if (first) then145:   if (first) then
148: 146: 
149:     rewind(iunit)147:     rewind(iunit)
150: 148: 
151:     ! First, see if this is a new format PARM file. That is, if the %VERSION149:     ! First, see if this is a new format PARM file. That is, if the %VERSION
152:     ! line exists. If not, then we assume it's an old format PARM file. In150:     ! line exists. If not, then we assume it's an old format PARM file. In
153:     ! this case, every call to NXTSEC will simply result in an immediate151:     ! this case, every call to NXTSEC will simply result in an immediate
154:     ! return. This means all reads from the calling routine will be done152:     ! return. This means all reads from the calling routine will be done
155:     ! sequentially from the PARM file. Store the version number as a real153:     ! sequentially from the PARM file. Store the version number as a real
156:     ! in RPVER. Store the date and time strings as character strings in154:     ! in RPVER. Store the date and time strings as character strings in
454: subroutine nxtsec_reset()452: subroutine nxtsec_reset()
455: 453: 
456:   implicit none454:   implicit none
457: 455: 
458:   iblock = 0456:   iblock = 0
459: 457: 
460:   return458:   return
461: 459: 
462: end subroutine nxtsec_reset460: end subroutine nxtsec_reset
463: 461: 
464: !added to be able to reinitialise AMBER 
465: subroutine nxtsec_reset_mut() 
466:   first = .true. 
467: end subroutine nxtsec_reset_mut 
468:  
469: end module nextprmtop_section_mod462: end module nextprmtop_section_mod
470:  


r33110/perm_allow.py 2017-08-03 17:31:04.443677225 +0100 r33109/perm_allow.py 2017-08-03 17:31:13.547798488 +0100
  1: import perm_data_amino_acids as perm  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/perm_allow.py' in revision 33109
  2: import sys 
  3:  
  4: oldname = sys.argv[1] 
  5: newname = sys.argv[2] 
  6: start_atom = int(sys.argv[3]) 
  7:  
  8: perm_old = dict() 
  9: perm_new = dict() 
 10: perm_shift = dict() 
 11: perm_add = dict() 
 12: perm_add_new = dict() 
 13: perm_add_shift = dict() 
 14: with open("perm.allow" , "r") as f: 
 15:     next(f) 
 16:     for line in f: 
 17:         perm_add[len(perm_add) + 1] = line 
 18:         line = f.next() 
 19:         perm_old[len(perm_old) + 1] = [int(x) for x in line.split()] 
 20:  
 21: n_old = perm.atomdata[oldname][0] 
 22: groups_old = perm.atomdata[oldname][1:] 
 23: n_new = perm.atomdata[newname][0] 
 24: groups_new = perm.atomdata[newname][1:] 
 25:  
 26: shift = n_new - n_old 
 27: final_atom = start_atom + n_old - 1 
 28:  
 29: groupt = False 
 30: shiftt = False 
 31:  
 32: for key in perm_old.keys(): 
 33:     for atom in perm_old[key]: 
 34:         if atom > start_atom: 
 35:             groupt = True 
 36:         if atom > final_atom: 
 37:             shiftt = True 
 38:     if not groupt: 
 39:         perm_new[key] = perm_old[key] 
 40:         perm_add_new[key] = perm_add[key] 
 41:     if groupt and shiftt: 
 42:         perm_shift[key] = perm_old[key] 
 43:         perm_add_shift[key] = perm_add[key] 
 44:  
 45: for group in groups_new: 
 46:     if isinstance(group[-1] , tuple): 
 47:         perm_add_new[len(perm_add_new) + 1] = str(group[-1][0]) + ' ' + str(group[-1][1]) + "\n" 
 48:         perm_new[len(perm_new) + 1] = [(start_atom - 1 + x) for x in group[0]] 
 49:     else: 
 50:         perm_add_new[len(perm_add_new) + 1] = str(len(group)) + ' 0' +"\n"        
 51:         perm_new[len(perm_new) + 1] = [(start_atom - 1 + x) for x in group] 
 52:      
 53: for key in perm_shift.keys(): 
 54:     perm_new[len(perm_new) + 1] = [(x + shift) for x in perm_shift[key]]         
 55:     perm_add_new[len(perm_add_new) + 1] = perm_add_shift[key] 
 56:  
 57: output = open("perm.allow.new" , "w")     
 58: output.write(str(len(perm_new.keys())) + "\n") 
 59: for key in perm_new.keys(): 
 60:     output.write(perm_add_new[key])  
 61:     atoms = perm_new[key] 
 62:     string = str() 
 63:     for atom in atoms: 
 64:         string += ' ' + str(atom) 
 65:     string += "\n"         
 66:     output.write(string) 
 67:  
 68: output.close() 
 69:          
 70:      


r33110/perm_data_amino_acids.py 2017-08-03 17:31:04.975684319 +0100 r33109/perm_data_amino_acids.py 2017-08-03 17:31:14.071805471 +0100
  1: atomdata = dict()  1: svn: E195012: Unable to find repository location for 'svn+ssh://svn.ch.private.cam.ac.uk/groups/wales/trunk/SCRIPTS/AMBER/BHmutation_steps/perm_data_amino_acids.py' in revision 33109
  2:  
  3: atomdata['ALA'] = [10 , [6,7,8]] 
  4:                     
  5: atomdata['CALA'] = [11 , [6,7,8] , [10,11]]  
  6:  
  7: atomdata['NALA'] = [12 , [2,3,4] , [8,9,10]] 
  8:                    
  9:  
 10: atomdata['ARG'] = [24 , [6,7] , [9,10] , [12,13] , [[17,20,18,21,19,22],(2,2)] , [18,19] , [21,22]] 
 11:  
 12: atomdata['CARG'] = [25 , [6,7] , [9,10] , [12,13] , [[17,20,18,21,19,22],(2,2)] , [18,19] , [21,22] , [24,25]] 
 13:   
 14: atomdata['NARG'] = [26 , [2,3,4] , [8,9] , [11,12] , [14,15] , [[19,22,20,23,21,24],(2,2)] , [20,21] , [23,24]] 
 15:  
 16:  
 17: atomdata['ASH'] = [13 , [6,7]] 
 18:   
 19:                   
 20: atomdata['ASN'] = [14 , [6,7] , [11,12]] 
 21:  
 22: atomdata['CASN'] = [15 , [6,7] , [11,12] , [14,15]] 
 23:  
 24: atomdata['NASN'] = [16 , [2,3,4] , [8,9] , [13,14]] 
 25:  
 26:  
 27: atomdata['ASP'] = [12 , [6,7] , [9,10]] 
 28:                     
 29: atomdata['CASP'] = [13 , [6,7] , [9,10] , [12,13]]               
 30:  
 31: atomdata['NASP'] = [14 , [2,3,4] , [8,9] , [11,12]] 
 32:  
 33:  
 34: atomdata['CYM'] = [10 , [6,7]] 
 35:                     
 36: atomdata['CYS'] = [11 , [6,7]] 
 37:  
 38: atomdata['CCYS'] = [12 , [6,7] , [11,12]] 
 39:  
 40: atomdata['NCYS'] = [13 , [2,3,4] , [8,9]] 
 41:  
 42:  
 43: atomdata['CYX'] = [10 , [6,7]] 
 44:  
 45: atomdata['CCYX'] = [11 , [6,7] , [10,11]] 
 46:                     
 47: atomdata['NCYX'] = [12 , [2,3,4] , [8,9]] 
 48:                  
 49:  
 50: atomdata['GLH'] = [16 , [6,7] , [9,10]] 
 51:  
 52: atomdata['GLN'] = [17 , [6,7] , [9,10] , [14,15]] 
 53:                     
 54: atomdata['CGLN'] =[18 , [6,7] , [9,10] , [14,15] , [17,18]]  
 55:                     
 56: atomdata['NGLN'] = [19 , [2,3,4] , [8,9] , [11,12] , [16,17]] 
 57:                    
 58:  
 59: atomdata['GLU'] = [15 , [6,7] , [9,10] , [12,13]] 
 60:                     
 61: atomdata['CGLU'] = [16 , [6,7] , [9,10] , [12,13] , [15,16]] 
 62:  
 63: atomdata['NGLU'] = [17 , [2,3,4] , [8,9] , [11,12] , [14,15]] 
 64:                   
 65:                     
 66: atomdata['GLY'] = [7 , [4,5]] 
 67:  
 68: atomdata['CGLY'] = [8 , [4,5] , [7,8]] 
 69:  
 70: atomdata['NGLY'] = [9 , [2,3,4] , [6,7]] 
 71:  
 72:  
 73: atomdata['HID'] = [17 , [6,7]] 
 74:                     
 75: atomdata['CHID'] = [18 , [6,7] , [17,18]] 
 76:  
 77: atomdata['NHID'] = [19 , [2,3,4] , [8,9]] 
 78:   
 79: atomdata['HIE'] = [17 , [6,7]] 
 80:                     
 81: atomdata['CHIE'] = [18 , [6,7] , [17,18]] 
 82:  
 83: atomdata['NHIE'] = [19 , [2,3,4] , [8,9]] 
 84:  
 85: atomdata['HIP'] = [18 , [6,7]] 
 86:                     
 87: atomdata['CHIP'] = [19 , [6,7] , [18,19]] 
 88:  
 89: atomdata['NHIP'] = [20 , [2,3,4] , [8,9]] 
 90:                     
 91:  
 92: atomdata['HYP'] = [15 , [3,4] , [10,11]]       
 93:                     
 94: atomdata['CHYP'] = [16 , [3,4] , [10,11] , [15,16]] 
 95:  
 96:  
 97: atomdata['ILE'] = [19 , [8,9,10] , [12,13] , [15,16,17]] 
 98:                     
 99: atomdata['CILE'] = [20 , [8,9,10] , [12,13] , [15,16,17] , [19,20]]        
100:  
101: atomdata['NILE'] = [21 , [2,3,4] , [10,11,12] , [14,15] , [17,18,19]] 
102:  
103:                   
104: atomdata['LEU'] = [19 , [6,7] , [[10,14,11,17,12,16,13,15],(2,3)] , [11,12,13] , [15,16,17]] 
105:             
106: atomdata['CLEU'] = [20 , [6,7] , [[10,14,11,17,12,16,13,15],(2,3)] , [11,12,13] , [15,16,17] , [19,20]] 
107:  
108: atomdata['NLEU'] = [21 , [2,3,4] , [8,9] , [[12,16,13,19,14,18,15,17],(2,3)] , [13,14,15] , [17,18,19]] 
109:  
110:  
111: atomdata['LYN'] = [21 , [6,7] , [9,10] , [12,13] , [15,16] , [18,19]] 
112:  
113: atomdata['LYS'] = [22 , [6,7] , [9,10] , [12,13] , [15,16] , [18,19,20]] 
114:                     
115: atomdata['CLYS'] = [23 , [6,7] , [9,10] , [12,13] , [15,16] , [18,19,20] , [22,23]] 
116:        
117: atomdata['NLYS'] = [24 , [2,3,4] , [8,9] , [11,12] , [14,15] , [17,18] , [20,21,22]] 
118:                 
119:                     
120: atomdata['MET'] = [17 , [6,7] , [9,10] , [13,14,15]] 
121:                     
122: atomdata['CMET'] = [18 , [6,7] , [9,10] , [13,14,15] , [17,18]] 
123:  
124: atomdata['NMET'] = [19 , [2,3,4] , [8,9] , [11,12] , [15,16,17]] 
125:  
126:  
127: atomdata['PHE'] = [20 , [6,7] , [[9,17,11,15,10,18,12,16],(2,3)]] 
128:  
129: atomdata['CPHE'] = [21 , [6,7] , [[9,17,11,15,10,18,12,16],(2,3)] , [20,21]] 
130:  
131: atomdata['NPHE'] = [22 , [2,3,4] , [8,9] , [[11,19,13,17,12,20,14,18],(2,3)]] 
132:  
133:  
134: atomdata['PRO'] = [14 , [3,4] , [6,7] , [9,10]] 
135:  
136: atomdata['CPRO'] = [15 , [3,4] , [6,7] , [9,10] , [14,15]] 
137:                     
138: atomdata['NPRO'] = [16 , [2,3] , [5,6] , [8,9] , [11,12]] 
139:  
140:  
141: atomdata['SER'] = [11 , [6,7]] 
142:  
143: atomdata['CSER'] =  [12 , [6,7] , [11,12]] 
144:                 
145: atomdata['NSER'] = [13 , [2,3,4] , [8,9]] 
146:  
147:  
148: atomdata['THR'] = [14 , [8,9,10]] 
149:  
150: atomdata['CTHR'] = [15 , [8,9,10] , [14,15]] 
151:  
152: atomdata['NTHR'] = [16 , [2,3,4] , [10,11,12]] 
153:  
154:                     
155: atomdata['TRP'] = [24 , [6,7]] 
156:                   
157: atomdata['CTRP'] =[25 , [6,7] , [24,25]] 
158:   
159: atomdata['NTRP'] = [26 , [2,3,4] , [8,9]] 
160:  
161:                   
162: atomdata['TYR'] = [21 , [6,7] , [[9,18,11,16,10,19,12,17],(2,3)]] 
163:          
164: atomdata['CTYR'] =[22 , [6,7] , [[9,18,11,16,10,19,12,17],(2,3)] , [21,22]] 
165:  
166: atomdata['NTYR'] =[23 , [2,3,4] , [8,9] ,[[11,20,13,18,12,21,14,19],(2,3)]] 
167:  
168:  
169: atomdata['VAL'] = [16 , [[7,11,8,14,9,13,10,12],(2,3)], [8,9,10] , [12,13,14]] 
170:  
171: atomdata['CVAL'] = [17 , [[7,11,8,14,9,13,10,12],(2,3)], [8,9,10] , [12,13,14] , [16,17]] 
172:     
173: atomdata['NVAL'] = [18 , [2,3,4] , [[9,13,10,16,11,15,12,14],(2,3)] , [10,11,12] , [14,15,16]] 
174:  


r33110/pme_force.F90 2017-08-03 17:30:58.551598745 +0100 r33109/pme_force.F90 2017-08-03 17:31:07.671720228 +0100
682:   if (need_virials) then682:   if (need_virials) then
683:     call get_atm_rel_crd(my_mol_cnt, gbl_mol_com, crd, atm_rel_crd, &683:     call get_atm_rel_crd(my_mol_cnt, gbl_mol_com, crd, atm_rel_crd, &
684:                          gbl_my_mol_lst)684:                          gbl_my_mol_lst)
685:   end if685:   end if
686: 686: 
687:   call update_pme_time(pme_misc_timer)687:   call update_pme_time(pme_misc_timer)
688:   call update_time(nonbond_time)688:   call update_time(nonbond_time)
689: 689: 
690: ! Calculate the other contributions:690: ! Calculate the other contributions:
691: 691: 
692:   call pme_bonded_force(atm_cnt, crd, frc, pot_ene)692:   call pme_bonded_force(crd, frc, pot_ene)
693: 693: 
694: ! The above stuff gets lumped as "other time"...694: ! The above stuff gets lumped as "other time"...
695: 695: 
696:   ! Sum up total potential energy for this task:696:   ! Sum up total potential energy for this task:
697: 697: 
698:   pot_ene%total = pot_ene%vdw_tot + &698:   pot_ene%total = pot_ene%vdw_tot + &
699:                   pot_ene%elec_tot + &699:                   pot_ene%elec_tot + &
700:                   pot_ene%hbond + &700:                   pot_ene%hbond + &
701:                   pot_ene%bond + &701:                   pot_ene%bond + &
702:                   pot_ene%angle + &702:                   pot_ene%angle + &
1275: 1275: 
1276:     call get_ekcom(my_mol_cnt, gbl_mol_mass_inv, ekcmt, atm_vel, atm_mass)1276:     call get_ekcom(my_mol_cnt, gbl_mol_mass_inv, ekcmt, atm_vel, atm_mass)
1277: 1277: 
1278:   end if1278:   end if
1279: 1279: 
1280:   call update_time(nonbond_time)1280:   call update_time(nonbond_time)
1281:   call update_pme_time(pme_misc_timer)1281:   call update_pme_time(pme_misc_timer)
1282: 1282: 
1283:   ! Calculate the other contributions:1283:   ! Calculate the other contributions:
1284: 1284: 
1285:   call pme_bonded_force(atm_cnt, crd, frc, pot_ene)1285:   call pme_bonded_force(crd, frc, pot_ene)
1286: 1286: 
1287:   ! Sum up total potential energy for this task:1287:   ! Sum up total potential energy for this task:
1288: 1288: 
1289:   pot_ene%total = pot_ene%vdw_tot + &1289:   pot_ene%total = pot_ene%vdw_tot + &
1290:                   pot_ene%elec_tot + &1290:                   pot_ene%elec_tot + &
1291:                   pot_ene%hbond + &1291:                   pot_ene%hbond + &
1292:                   pot_ene%bond + &1292:                   pot_ene%bond + &
1293:                   pot_ene%angle + &1293:                   pot_ene%angle + &
1294:                   pot_ene%dihedral + &1294:                   pot_ene%dihedral + &
1295:                   pot_ene%vdw_14 + &1295:                   pot_ene%vdw_14 + &
1705:   if (need_virials) then1705:   if (need_virials) then
1706:     call get_atm_rel_crd(my_mol_cnt, gbl_mol_com, crd, atm_rel_crd, &1706:     call get_atm_rel_crd(my_mol_cnt, gbl_mol_com, crd, atm_rel_crd, &
1707:                          gbl_my_mol_lst)1707:                          gbl_my_mol_lst)
1708:   end if1708:   end if
1709: 1709: 
1710:   call update_pme_time(pme_misc_timer)1710:   call update_pme_time(pme_misc_timer)
1711:   call update_time(nonbond_time)1711:   call update_time(nonbond_time)
1712: 1712: 
1713: ! Calculate the other contributions:1713: ! Calculate the other contributions:
1714: 1714: 
1715:   call pme_bonded_force(atm_cnt, crd, frc, pot_ene)1715:   call pme_bonded_force(crd, frc, pot_ene)
1716: 1716: 
1717: ! The above stuff gets lumped as "other time"...1717: ! The above stuff gets lumped as "other time"...
1718: 1718: 
1719:   ! Sum up total potential energy for this task:1719:   ! Sum up total potential energy for this task:
1720: 1720: 
1721:   pot_ene%total = pot_ene%vdw_tot + &1721:   pot_ene%total = pot_ene%vdw_tot + &
1722:                   pot_ene%elec_tot + &1722:                   pot_ene%elec_tot + &
1723:                   pot_ene%hbond + &1723:                   pot_ene%hbond + &
1724:                   pot_ene%bond + &1724:                   pot_ene%bond + &
1725:                   pot_ene%angle + &1725:                   pot_ene%angle + &
2249: 2249: 
2250:     call get_ekcom(my_mol_cnt, gbl_mol_mass_inv, ekcmt, atm_vel, atm_mass)2250:     call get_ekcom(my_mol_cnt, gbl_mol_mass_inv, ekcmt, atm_vel, atm_mass)
2251: 2251: 
2252:   end if2252:   end if
2253: 2253: 
2254:   call update_time(nonbond_time)2254:   call update_time(nonbond_time)
2255:   call update_pme_time(pme_misc_timer)2255:   call update_pme_time(pme_misc_timer)
2256: 2256: 
2257:   ! Calculate the other contributions:2257:   ! Calculate the other contributions:
2258: 2258: 
2259:   call pme_bonded_force(atm_cnt, crd, frc, pot_ene)2259:   call pme_bonded_force(crd, frc, pot_ene)
2260: 2260: 
2261:   ! Sum up total potential energy for this task:2261:   ! Sum up total potential energy for this task:
2262: 2262: 
2263:   pot_ene%total = pot_ene%vdw_tot + &2263:   pot_ene%total = pot_ene%vdw_tot + &
2264:                   pot_ene%elec_tot + &2264:                   pot_ene%elec_tot + &
2265:                   pot_ene%hbond + &2265:                   pot_ene%hbond + &
2266:                   pot_ene%bond + &2266:                   pot_ene%bond + &
2267:                   pot_ene%angle + &2267:                   pot_ene%angle + &
2268:                   pot_ene%dihedral + &2268:                   pot_ene%dihedral + &
2269:                   pot_ene%vdw_14 + &2269:                   pot_ene%vdw_14 + &
2677: end subroutine respa_scale2677: end subroutine respa_scale
2678: 2678: 
2679: !*******************************************************************************2679: !*******************************************************************************
2680: !2680: !
2681: ! Subroutine:  pme_bonded_force2681: ! Subroutine:  pme_bonded_force
2682: !2682: !
2683: ! Description: <TBS>2683: ! Description: <TBS>
2684: !              2684: !              
2685: !*******************************************************************************2685: !*******************************************************************************
2686: 2686: 
2687: subroutine pme_bonded_force(atm_cnt, crd, frc, pot_ene)2687: subroutine pme_bonded_force(crd, frc, pot_ene)
2688: 2688: 
2689:   use angles_mod2689:   use angles_mod
2690:   use angles_ub_mod2690:   use angles_ub_mod
2691:   use bonds_mod2691:   use bonds_mod
2692:   use constraints_mod2692:   use constraints_mod
2693:   use dihedrals_mod2693:   use dihedrals_mod
2694:   use dihedrals_imp_mod2694:   use dihedrals_imp_mod
2695:   use cmap_mod2695:   use cmap_mod
2696:   use dynamics_mod2696:   use dynamics_mod
2697:   use dynamics_dat_mod2697:   use dynamics_dat_mod
2698:   use mdin_ctrl_dat_mod2698:   use mdin_ctrl_dat_mod
2699:   use nmr_calls_mod2699:   use nmr_calls_mod
2700:   use parallel_dat_mod2700:   use parallel_dat_mod
2701:   use timers_mod2701:   use timers_mod
2702: 2702: 
2703:   implicit none2703:   implicit none
2704: 2704: 
2705: ! Formal arguments:2705: ! Formal arguments:
2706: 2706: 
2707:   integer                       :: atm_cnt2707:   double precision              :: crd(3, *)
2708:   double precision              :: crd(3, atm_cnt)2708:   double precision              :: frc(3, *)
2709:   double precision              :: frc(3, atm_cnt) 
2710:   type(pme_pot_ene_rec)         :: pot_ene2709:   type(pme_pot_ene_rec)         :: pot_ene
2711: 2710: 
2712:   ! These energy variables are temporaries, for summing. DON'T use otherwise!2711:   ! These energy variables are temporaries, for summing. DON'T use otherwise!
2713: 2712: 
2714:   double precision              :: bond_ene2713:   double precision              :: bond_ene
2715:   double precision              :: ub_ene2714:   double precision              :: ub_ene
2716:   double precision              :: angle_ene2715:   double precision              :: angle_ene
2717:   double precision              :: dihedral_ene2716:   double precision              :: dihedral_ene
2718:   double precision              :: dihedral_imp_ene2717:   double precision              :: dihedral_imp_ene
2719:   double precision              :: cmap_ene2718:   double precision              :: cmap_ene
2726: 2725: 
2727: ! The ebdev/eadev stuff currently only is output under nmr_calls for non-mpi2726: ! The ebdev/eadev stuff currently only is output under nmr_calls for non-mpi
2728: ! code, so we basically drop it here under mpi.2727: ! code, so we basically drop it here under mpi.
2729: 2728: 
2730: #ifdef AMBMPI2729: #ifdef AMBMPI
2731: #else2730: #else
2732:   ebdev = 0.d02731:   ebdev = 0.d0
2733: #endif2732: #endif
2734:   if (ntf .le. 1) then2733:   if (ntf .le. 1) then
2735:     if (cit_nbonh .gt. 0) then2734:     if (cit_nbonh .gt. 0) then
2736:       call get_bond_energy(cit_nbonh, atm_cnt, cit_h_bond, crd, frc, bond_ene)2735:       call get_bond_energy(cit_nbonh, cit_h_bond, crd, frc, bond_ene)
2737:       pot_ene%bond = bond_ene2736:       pot_ene%bond = bond_ene
2738:     end if2737:     end if
2739:   end if2738:   end if
2740: 2739: 
2741:   if (ntf .le. 2) then2740:   if (ntf .le. 2) then
2742:     if (cit_nbona .gt. 0) then2741:     if (cit_nbona .gt. 0) then
2743:       call get_bond_energy(cit_nbona, atm_cnt, cit_a_bond, crd, frc, bond_ene)2742:       call get_bond_energy(cit_nbona, cit_a_bond, crd, frc, bond_ene)
2744:       pot_ene%bond = pot_ene%bond + bond_ene2743:       pot_ene%bond = pot_ene%bond + bond_ene
2745:     end if2744:     end if
2746:   end if2745:   end if
2747: #ifdef AMBMPI2746: #ifdef AMBMPI
2748: #else2747: #else
2749:     if (cit_nbonh + cit_nbona .gt. 0) &2748:     if (cit_nbonh + cit_nbona .gt. 0) &
2750:       ebdev = sqrt(ebdev / (cit_nbonh + cit_nbona))2749:       ebdev = sqrt(ebdev / (cit_nbonh + cit_nbona))
2751: #endif2750: #endif
2752: 2751: 
2753:   call update_time(bond_time)2752:   call update_time(bond_time)


r33110/prmtop_dat.F90 2017-08-03 17:30:58.811602208 +0100 r33109/prmtop_dat.F90 2017-08-03 17:31:07.935723737 +0100
237: 237: 
238:   integer               :: ifpert, mbper, mdper, mgper, nbper, ndper, ngper238:   integer               :: ifpert, mbper, mdper, mgper, nbper, ndper, ngper
239: 239: 
240: ! BEGIN DBG240: ! BEGIN DBG
241: ! integer               :: nxt_atm241: ! integer               :: nxt_atm
242: ! END DBG       242: ! END DBG       
243: 243: 
244: ! Initialize stuff used in support of the amber 7 prmtop format:244: ! Initialize stuff used in support of the amber 7 prmtop format:
245: 245: 
246:   afmt = '(20A4)'246:   afmt = '(20A4)'
247:   ifmt = '(10I6)'247:   ifmt = '(12I6)'
248:   rfmt = '(5E16.8)'248:   rfmt = '(5E16.8)'
249: 249: 
250: ! Formatted input:250: ! Formatted input:
251: 251: 
252:   call amopen(prmtop, prmtop_name, 'O', 'F', 'R')252:   call amopen(prmtop, prmtop_name, 'O', 'F', 'R')
253:   call nxtsec_reset()   ! insurance; the nextprmtop stuff caches the fileptr.253:   call nxtsec_reset()   ! insurance; the nextprmtop stuff caches the fileptr.
254: 254: 
255:   ! Support both TITLE and CTITLE - CTITLE is used for a chamber255:   ! Support both TITLE and CTITLE - CTITLE is used for a chamber
256:   ! prmtop file. Essentially to prevent earlier versions of the code256:   ! prmtop file. Essentially to prevent earlier versions of the code
257:   ! from loading such files.257:   ! from loading such files.
1992:     fmn(i) = one1992:     fmn(i) = one
1993:     if (pn(i) .le. zero) fmn(i) = zero1993:     if (pn(i) .le. zero) fmn(i) = zero
1994:     pn(i) = abs(pn(i))1994:     pn(i) = abs(pn(i))
1995:     ipn(i) = int(pn(i) + tenm3)1995:     ipn(i) = int(pn(i) + tenm3)
1996:   end do1996:   end do
1997: 1997: 
1998:   return1998:   return
1999: 1999: 
2000: end subroutine calc_dihedral_parms2000: end subroutine calc_dihedral_parms
2001: 2001: 
2002: subroutine dealloc_prmtop_dat() 
2003:    use nextprmtop_section_mod 
2004:  
2005:    loaded_atm_atomicnumber = 0 
2006:    if (allocated(atm_qterm)) deallocate(atm_qterm) 
2007:    if (allocated(atm_atomicnumber)) deallocate(atm_atomicnumber) 
2008:    if (allocated(atm_mass)) deallocate(atm_mass) 
2009:    if (allocated(atm_iac)) deallocate(atm_iac) 
2010:    if (allocated(typ_ico)) deallocate(typ_ico) 
2011:    if (allocated(gbl_cn1)) deallocate(gbl_cn1) 
2012:    if (allocated(gbl_cn2)) deallocate(gbl_cn2) 
2013:    if (allocated(gbl_cn114)) deallocate(gbl_cn114) 
2014:    if (allocated(gbl_cn214)) deallocate(gbl_cn214) 
2015:    if (allocated(gbl_rk)) deallocate(gbl_rk) 
2016:    if (allocated(gbl_req)) deallocate(gbl_req) 
2017:    if (allocated(gbl_ub_rk)) deallocate(gbl_ub_rk) 
2018:    if (allocated(gbl_ub_r0)) deallocate(gbl_ub_r0) 
2019:    if (allocated(gbl_tk)) deallocate(gbl_tk) 
2020:    if (allocated(gbl_teq)) deallocate(gbl_teq) 
2021:    if (allocated(gbl_asol)) deallocate(gbl_asol) 
2022:    if (allocated(gbl_bsol)) deallocate(gbl_bsol) 
2023:    if (allocated(gbl_pk)) deallocate(gbl_pk) 
2024:    if (allocated(gbl_pn)) deallocate(gbl_pn) 
2025:    if (allocated(gbl_phase)) deallocate(gbl_phase) 
2026:    if (allocated(gbl_imp_pk)) deallocate(gbl_imp_pk) 
2027:    if (allocated(gbl_imp_phase)) deallocate(gbl_imp_phase) 
2028:    if (allocated(gbl_one_scee)) deallocate(gbl_one_scee) 
2029:    if (allocated(gbl_one_scnb)) deallocate(gbl_one_scnb) 
2030:    if (allocated(gbl_cmap_grid)) deallocate(gbl_cmap_grid) 
2031:    if (allocated(gbl_cmap_dPhi)) deallocate(gbl_cmap_dPhi) 
2032:    if (allocated(gbl_cmap_dPsi)) deallocate(gbl_cmap_dPsi) 
2033:    if (allocated(gbl_cmap_dPhi_dPsi)) deallocate(gbl_cmap_dPhi_dPsi) 
2034:    if (allocated(gbl_gamc)) deallocate(gbl_gamc) 
2035:    if (allocated(gbl_gams)) deallocate(gbl_gams) 
2036:    if (allocated(gbl_fmn)) deallocate(gbl_fmn) 
2037:    if (allocated(gbl_ipn)) deallocate(gbl_ipn) 
2038:    if (allocated(gbl_cmap_res)) deallocate(gbl_cmap_res) 
2039:    if (allocated(gbl_cmap_grid_step_size)) deallocate(gbl_cmap_grid_step_size) 
2040:    if (allocated(atm_igraph)) deallocate(atm_igraph) 
2041:    if (allocated(gbl_res_atms)) deallocate(gbl_res_atms) 
2042:    if (allocated(gbl_labres)) deallocate(gbl_labres) 
2043:    if (allocated(atm_nsp)) deallocate(atm_nsp) 
2044:    if (allocated(atm_gb_fs)) deallocate(atm_gb_fs) 
2045:    if (allocated(atm_gb_radii)) deallocate(atm_gb_radii) 
2046:    if (allocated(gbl_bond)) deallocate(gbl_bond) 
2047:    if (allocated(gbl_angle)) deallocate(gbl_angle) 
2048:    if (allocated(gbl_angle_ub)) deallocate(gbl_angle_ub) 
2049:    if (allocated(gbl_dihed)) deallocate(gbl_dihed) 
2050:    if (allocated(gbl_dihed_imp)) deallocate(gbl_dihed_imp) 
2051:    if (allocated(gbl_cmap)) deallocate(gbl_cmap) 
2052:    if (allocated(atm_numex)) deallocate(atm_numex) 
2053:    if (allocated(gbl_natex)) deallocate(gbl_natex) 
2054:    if (allocated(atm_isymbl)) deallocate(atm_isymbl) 
2055:    if (allocated(atm_itree)) deallocate(atm_itree) 
2056:    call nxtsec_reset_mut() 
2057:    call nxtsec_reset() 
2058:  
2059: end subroutine dealloc_prmtop_dat 
2060:  
2061: end module prmtop_dat_mod2002: end module prmtop_dat_mod


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0