OSDN Git Service

CIF import is improved, so that bonds including the calculated hydrogen atoms are...
authortoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Mon, 31 Oct 2011 06:10:41 +0000 (06:10 +0000)
committertoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Mon, 31 Oct 2011 06:10:41 +0000 (06:10 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@149 a2be9bc6-48de-4e38-9406-05402d4bc13c

Scripts/loadsave.rb

index 7828349..fab6715 100755 (executable)
@@ -648,6 +648,7 @@ end_of_header
        cell = []
        token = getciftoken(fp)
        pardigits_re = /\(\d+\)/
+       calculated_atoms = []
        while token != nil
          if token =~ /^_cell/
                val = getciftoken(fp)
@@ -740,6 +741,7 @@ end_of_header
                          uiso = d[hlabel["_atom_site_U_iso_or_equiv"]]
                          biso = d[hlabel["_atom_site_B_iso_or_equiv"]]
                          occ = d[hlabel["_atom_site_occupancy"]]
+                         calc = d[hlabel["_atom_site_calc_flag"]]
                          ap = self.add_atom(name, elem, elem)
                          ap.fract_x = float_strip_rms(fx)
                          ap.fract_y = float_strip_rms(fy)
@@ -750,6 +752,9 @@ end_of_header
                            ap.temp_factor = float_strip_rms(uiso) * 78.9568352087149 #  8*pi*pi
                          end
                          ap.occupancy = float_strip_rms(occ)
+                         if calc == "c" || calc == "calc"
+                           calculated_atoms.push(ap.index)
+                     end
                        }
                        puts "#{self.natoms} atoms are created."
                  elsif labels[0] =~ /^_atom_site_aniso_label/
@@ -786,6 +791,21 @@ end_of_header
                            self.create_bond(n1, n2)
                          end
                    }
+                       puts "#{self.nbonds} bonds are created."
+                       if calculated_atoms.length > 0
+                         #  Guess bonds for calculated hydrogen atoms
+                         n1 = 0
+                         calculated_atoms.each { |ai|
+                           if atoms[ai].connects.length == 0
+                                 as = find_close_atoms(ai)
+                                 as.each { |aj|
+                                   self.create_bond(ai, aj)
+                                       n1 += 1
+                                 }
+                               end
+                         }
+                         puts "#{n1} bonds are guessed."
+                       end
                        if exbonds.length > 0
                          h = Dialog.run {
                            layout(1,