def run(self): sqlite = ( 'select' ' CrystalName,' ' PANDDA_site_event_map,' ' PANDDA_site_ligand_resname,' ' PANDDA_site_ligand_chain,' ' PANDDA_site_ligand_sequence_number,' ' PANDDA_site_ligand_altLoc ' 'from panddaTable ' 'where PANDDA_site_event_map not like "event%"' ) query=self.db.execute_statement(sqlite) progress_step=1 if len(query) != 0: progress_step=100/float(len(query)) else: progress_step=1 progress=0 self.emit(QtCore.SIGNAL('update_progress_bar'), progress) for item in query: xtalID=str(item[0]) event_map=str(item[1]) resname=str(item[2]) chainID=str(item[3]) resseq=str(item[4]) altLoc=str(item[5]) if os.path.isfile(os.path.join(self.initial_model_directory,xtalID,'refine.pdb')): os.chdir(os.path.join(self.initial_model_directory,xtalID)) self.Logfile.insert('extracting ligand (%s,%s,%s,%s) from refine.pdb' %(str(resname),str(chainID),str(resseq),str(altLoc))) XChemUtils.pdbtools('refine.pdb').save_specific_ligands_to_pdb(resname,chainID,resseq,altLoc) if os.path.isfile('ligand_%s_%s_%s_%s.pdb' %(str(resname),str(chainID),str(resseq),str(altLoc))): ligand_pdb='ligand_%s_%s_%s_%s.pdb' %(str(resname),str(chainID),str(resseq),str(altLoc)) print os.path.join(self.initial_model_directory,xtalID,ligand_pdb) else: self.Logfile.insert('could not extract ligand; trying next...') continue else: self.Logfile.insert('directory: '+os.path.join(self.initial_model_directory,xtalID)+' -> cannot find refine.pdb; trying next') continue if os.path.isfile(os.path.join(self.initial_model_directory,xtalID,'refine.mtz')): resolution=XChemUtils.mtztools(os.path.join(self.initial_model_directory,xtalID,'refine.mtz')).get_high_resolution_from_mtz() else: self.Logfile.insert('directory: '+os.path.join(self.initial_model_directory,xtalID)+' -> cannot find refine.mtz; trying next') continue convert_event_map_to_SF(self.initial_model_directory,xtalID,event_map,ligand_pdb,self.xce_logfile,self.datasource,resolution).run() progress += progress_step self.emit(QtCore.SIGNAL('update_progress_bar'), progress)
def get_datasets_which_fit_to_reference_file(self,ref,reference_directory,cluster_dict,allowed_unitcell_difference_percent): refStructure=XChemUtils.pdbtools(os.path.join(reference_directory,ref+'.pdb')) symmRef=refStructure.get_spg_number_from_pdb() ucVolRef=refStructure.calc_unitcell_volume_from_pdb() cluster_dict[ref]=[] cluster_dict[ref].append(os.path.join(reference_directory,ref+'.pdb')) for dataset in glob.glob(os.path.join(self.data_directory,self.pdb_style)): datasetStructure=XChemUtils.pdbtools(dataset) symmDataset=datasetStructure.get_spg_number_from_pdb() ucVolDataset=datasetStructure.calc_unitcell_volume_from_pdb() if symmDataset == symmRef: try: difference=math.fabs(1-(float(ucVolRef)/float(ucVolDataset)))*100 if difference < allowed_unitcell_difference_percent: sampleID=dataset.replace('/'+self.pdb_style,'')[dataset.replace('/'+self.pdb_style,'').rfind('/')+1:] cluster_dict[ref].append(sampleID) except ZeroDivisionError: continue return cluster_dict
def compare_number_of_atoms_in_reference_vs_all_datasets(self,refData,dataset_list): mismatched_datasets=[] pdbtools=XChemUtils.pdbtools(refData) refPDB=refData[refData.rfind('/')+1:] refPDBlist=pdbtools.get_init_pdb_as_list() n_atom_ref=len(refPDBlist) for n_datasets,dataset in enumerate(dataset_list): if os.path.isfile(os.path.join(self.data_directory.replace('*',''),dataset,self.pdb_style)): n_atom=len(pdbtools.get_pdb_as_list(os.path.join(self.data_directory.replace('*',''),dataset,self.pdb_style))) if n_atom_ref == n_atom: self.Logfile.insert('%s: atoms in PDB file (%s): %s; atoms in Reference file: %s ===> OK' %(dataset,self.pdb_style,str(n_atom),str(n_atom_ref))) if n_atom_ref != n_atom: self.Logfile.insert('%s: atoms in PDB file (%s): %s; atoms in Reference file: %s ===> ERROR' %(dataset,self.pdb_style,str(n_atom),str(n_atom_ref))) mismatched_datasets.append(dataset) return n_datasets,mismatched_datasets