Esempio n. 1
0
 def target(self, dxyz):
     self.move_on = False
     chi_score = 1e30
     if (True):
         for ii in range(50):
             dxyz = self.pdb_obj.beads.relax(self.restraints, dxyz)
             print ii, ' ',
             if (self.pdb_obj.beads.restraint(self.restraints, dxyz) <
                     self.threshold):
                 self.new_xyz = self.pdb_obj.perturb(dxyz)
                 self.move_on = True
                 break
     if (self.move_on):
         t1 = time.time()
         self.she_engine.engine.update_coord(self.new_xyz, self.new_indx)
         new_I = self.she_engine.engine.I()
         self.time_she += (time.time() - t1)
         var = self.expt_s
         s, o = she.linear_fit(new_I, self.expt_I, var)
         chi_score = flex.sum(
             flex.pow2((self.expt_I - (s * new_I + o))) / self.expt_s)
         #restraint=self.pdb_obj.beads.restraint(self.restraints, self.new_xyz)
     #tot = chi_score + restraint*self.restraint_weight
     print chi_score
     self.counter += 1
     return chi_score
Esempio n. 2
0
 def compute_score(self, nstruct, prefix):
   new_indx = flex.int(self.she_obj.natom)
   files = []
   results = flex.double()
   pdb_files = glob.glob(prefix+"*.pdb") # including the input pdb model, avoiding no entry case
   for pdb_file_name in pdb_files:
     new_xyz = extract_xyz(pdb_file_name)
     self.she_obj.engine.update_coord(new_xyz,new_indx)
     new_i = self.she_obj.engine.I()
     s,o = she.linear_fit(new_i, self.obs.i, self.obs.s)
     chi2= flex.mean( flex.pow2( (self.obs.i-(s*new_i+o))  /self.obs.s ))
     files.append( pdb_file_name )
     results.append( chi2 )
   self.min_indx = flex.min_index( results )
   self.min_file = files[ self.min_indx ]
   self.min_score= results[ self.min_indx ]
   return files, results
Esempio n. 3
0
 def compute_score(self, nstruct, prefix):
     new_indx = flex.int(self.she_obj.natom)
     files = []
     results = flex.double()
     for ii in range(1, nstruct + 1):
         pdb_file_name = prefix + str(ii) + '.pdb'
         while (not os.path.exists(pdb_file_name)):
             time.sleep(0.02)
         time.sleep(0.05)
         new_xyz = extract_xyz(pdb_file_name)
         self.she_obj.engine.update_coord(new_xyz, new_indx)
         new_i = self.she_obj.engine.I()
         s, o = she.linear_fit(new_i, self.obs.i, self.obs.s)
         chi2 = flex.mean(
             flex.pow2((self.obs.i - (s * new_i + o)) / self.obs.s))
         files.append(pdb_file_name)
         results.append(chi2)
     return files, results
Esempio n. 4
0
 def target(self, vector):
     self.counter += 1
     result = 0
     length = flex.sum(flex.pow(vector, 2))
     if (length > self.Rmax2):
         result = 1e30
     else:
         new_coord = self.pdb.NMPerturb(self.modes, vector)
         t1 = time.time()
         self.she_engine.engine.update_coord(flex.vec3_double(new_coord),
                                             self.new_indx)
         new_I = self.she_engine.engine.I()
         self.time_she += (time.time() - t1)
         var = self.expt_s
         s, o = she.linear_fit(new_I, self.expt_I, var)
         result = flex.sum(
             flex.pow2((self.expt_I - (s * new_I + o)) / self.expt_s))
     return result
Esempio n. 5
0
    def target(self, vector):
        self.counter += 1
        result = 0
        length = flex.sum_sq(vector)
        if (length > self.Rmax2):
            result = 1e30
        else:
            new_coord = self.pdb.NMPerturb(self.modes, vector)
            self.she_engine.engine.update_coord(new_coord, self.new_indx)
            new_I = self.she_engine.engine.I()
            var = self.expt_s
            s, o = she.linear_fit(new_I[:5], self.expt_I[:5], var[:5])
            result = flex.sum(
                flex.pow2((self.expt_I - (s * new_I + o)) / self.expt_s))


#      result = flex.sum_sq( (self.expt_I-new_I) /self.expt_s )
#print self.pdb.r, result
        return result
Esempio n. 6
0
    def estimate_init_weight(self):
        ## initial chi-score ##
        new_I = self.she_engine.engine.I()
        var = self.expt_s
        s, o = she.linear_fit(new_I, self.expt_I, var)
        chi_score = flex.sum(
            flex.pow2((self.expt_I - (s * new_I + o)) / self.expt_s))

        n_restraint = self.nbeads**2 / 20
        tot_res = 0
        for ii in range(
                10):  ## perturb 10 times to estimate initial restraint ##
            vector = flex.random_double(self.nbeads * 3) * self.step_size
            self.restraints = self.build_restraint(n_restraint)
            self.new_xyz = self.pdb_obj.perturb(vector)
            restraint = self.pdb_obj.beads.restraint(self.restraints,
                                                     self.new_xyz)
            tot_res += restraint
        mean_res = tot_res / 10.0
        self.restraint_weight = chi_score / mean_res