示例#1
0
    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)
示例#2
0
 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
示例#3
0
 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