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
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
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
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
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
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