def __init__(self, name='Lone Pair Merger', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='MoleculeSet', name='mols')
        ip.append(datatype='int',
                  required=False,
                  name='renumber',
                  defaultValue=1)

        op = self.outputPortsDescr
        op.append(datatype='MoleculeSet', name='mols')
        op.append(datatype='int', name='num_lps')

        code = """def doit(self,mols, renumber):
    if mols:
        lps_merger = LonepairMerger()
        num_lps = 0
        for mol in mols:
            if not len(mol.allAtoms.bonds[0]):
                mol.buildBondsByDistance()
            lps = lps_merger.mergeLPS(mol.allAtoms, renumber=renumber)
            num_lps += len(lps)
        self.outputData(mols=mols, num_lps=num_lps)\n"""

        self.setFunction(code)
    def __init__(self, name='Ligand_Writer_AD4', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        fileTypes = [('pdbqt', '*.pdbqt'), ('all', '*')]

        self.widgetDescr['output_filename'] = {
            'class': 'NEEntryWithFileSaver',
            'master': 'node',
            'filetypes': fileTypes,
            'title': 'save AD4 Ligand',
            'width': 10,
            'labelCfg': {
                'text': 'file:'
            },
        }

        ip = self.inputPortsDescr
        ip.append(datatype='Molecule', name='mol')
        ip.append(datatype='string', name='output_filename')

        op = self.outputPortsDescr
        op.append(datatype='Molecule', name='mol')
        op.append(datatype='string', name='output_filename')

        code = """def doit(self, mol, output_filename):
    if mol:
        writer = AD4LigandWriter()
        writer.write(mol, output_filename)
        self.outputData(mol=mol, output_filename=output_filename)\n"""
        self.setFunction(code)
    def __init__(self, name='Docking Parameter File Browser', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        #self.readOnly = 1
        code = """def doit(self, filename):
    if filename:
        self.outputData(filename=filename)
"""

        self.setFunction(code)

        # show the entry widget by default
        self.inNodeWidgetVisibleByDefault = True

        fileTypes = [('dpf', '*')]

        self.widgetDescr['filename'] = {
            'class': 'NEEntryWithFileBrowser',
            'master': 'node',
            'filetypes': fileTypes,
            'title': 'read file',
            'width': 16,
            'labelCfg': {
                'text': 'dpf file:'
            },
        }

        self.inputPortsDescr.append(datatype='string', name='filename')

        self.outputPortsDescr.append(datatype='string', name='filename')
Пример #4
0
    def __init__(self, name='AutogridResURL', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='string', name='url')

        self.widgetDescr['url'] = {
            'class': 'NEEntry',
            'master': 'node',
            'width': 40,
            'labelCfg': {
                'text': 'URL to Autogrid Results: '
            }
        }

        op = self.outputPortsDescr
        op.append(datatype='autogrid_results', name='autogrid_res_obj')

        code = """def doit(self, url):
    autogrid_res_obj=autogrid_results(url, "url")

    self.outputData(autogrid_res_obj=autogrid_res_obj)
"""
        self.setFunction(code)
    def __init__(self, name='StructureBrowser', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self,), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self,), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='string', name='receptor_file')

        filetypes = [('All supported files', '*.pdb *.pqr *.pdbqt')]

        self.widgetDescr['receptor_file'] = {
            'class':'NEEntryWithFileBrowser', 'master':'node', 'width':20,
            'filetypes':filetypes,
            'initialValue':'', 'labelCfg':{'text':'Structure file: '}
            }

        op = self.outputPortsDescr
        op.append(datatype='receptor', name='receptor_obj')

        code = """def doit(self, receptor_file):
    import os

    receptor_file = os.path.abspath(receptor_file)

    if not(os.path.exists(receptor_file)):
        print "ERROR: structure file " + receptor_file + " does not exist!"
        return 'stop'

    receptor_obj = receptor(receptor_file)

    self.outputData(receptor_obj=receptor_obj)
"""
        self.setFunction(code)
    def __init__(self, name='AutogridResDirectoryBrowser', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self,), **kw)


        kw['name'] = name
        NetworkNode.__init__(*(self,), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='string', name='directory')

        self.widgetDescr['directory'] = {
            'class':'NEEntryWithDirectoryBrowser', 'master':'node', 'width':16,
            'initialValue':'', 'labelCfg':{'text':'Autogrid result directory: '}
            }

        op = self.outputPortsDescr
        op.append(datatype='autogrid_results', name='autogrid_result')
        op = self.outputPortsDescr
        op.append(datatype='string', name='zip_file_path')

        code = """def doit(self, directory):
    autogrid_result = autogrid_results(directory, "local")
          
    self.outputData(autogrid_result=autogrid_result, zip_file_path=autogrid_result.path)
"""
        self.setFunction(code)
    def __init__(self, name='AD4_typer', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='MoleculeSet', name='mols')
        ip.append(datatype='int',
                  required=False,
                  name='set_aromatic_carbons',
                  defaultValue=1)
        ip.append(datatype='int',
                  required=False,
                  name='reassign',
                  defaultValue=1)
        ip.append(datatype='int',
                  required=False,
                  name='renameAtoms',
                  defaultValue=0)

        op = self.outputPortsDescr
        op.append(datatype='MoleculeSet', name='typed_mols')

        code = """def doit(self,mols, set_aromatic_carbons=1, reassign=1, renameAtoms=0):
    if mols:
        at_typer = AutoDock4_AtomTyper(set_aromatic_carbons=1, renameAtoms=renameAtoms)
        for mol in mols:
            if not len(mol.allAtoms.bonds[0]):
                mol.buildBondsByDistance()
            at_typer.setAutoDockElements(mol, reassign=reassign)
        self.outputData(typed_mols=mols)\n"""

        self.setFunction(code)
    def __init__(self, constrkw={}, name='ADTFileNames', **kw):
        kw['constrkw'] = constrkw
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        ip = self.inputPortsDescr
        ip.append({'name': 'recpetor_obj', 'datatype': 'receptor'})

        op = self.outputPortsDescr
        op.append({'name': 'GPF_template', 'datatype': 'gpf_template'})
        op.append({'name': 'DPF_template', 'datatype': 'dpf_template'})
        op.append({'name': 'result_dir', 'datatype': 'string'})

        code = """def doit(self, receptor_obj):
        import os
        from AutoDockTools.VisionInterface.Adt.receptor import receptor
        from AutoDockTools.VisionInterface.Adt.dpf_template import dpf_template
        from AutoDockTools.VisionInterface.Adt.gpf_template import gpf_template

        receptor_id = receptor_obj.get_id()
        receptor_dir = receptor_obj.get_workdir() 

        gpf_file = receptor_dir + os.sep + receptor_id + '.gpf'
        dpf_file = receptor_dir + os.sep + receptor_id + '.dpf'
        GPF_template = gpf_template(gpf_file)
        DPF_template = dpf_template(dpf_file)
        result_dir = os.path.abspath(receptor_dir + os.sep + '..' + os.sep + receptor_id)

        if not(os.path.exists(gpf_file)):
            print "ERROR: GPF template " + gpf_file + " does not exist!"
            return 'stop'
        elif not(os.path.exists(dpf_file)):
            print "ERROR: DPF template " + dpf_file + " does not exist!"
            return 'stop'

        pdbqt_loc = receptor_obj.get_ext_loc('pdbqt')
        pqr_loc = receptor_obj.get_ext_loc('pqr')
        pdb_loc = receptor_obj.get_ext_loc('pdb')
            
        if pdbqt_loc == None and pqr_loc == None and pdb_loc == None:
            print "ERROR: No valid structure file found, none of the following exist"
            print "    " + pdbqt_loc + ", " + pqr_loc + ", " + pdb_loc
            return 'stop'
        
        print "-------------------------------------------------------"
        print "     INPUTS THAT WILL BE USED FOR VIRTUAL SCREENING    "
        print "GPF Template:                  " + GPF_template.fullpath
        print "DPF Template:                  " + DPF_template.fullpath
        print "Results will be downloaded to: " + result_dir
        print "-------------------------------------------------------"
        
        pass
        self.outputData(GPF_template=GPF_template, DPF_template=DPF_template, result_dir=result_dir)
"""
        self.configure(function=code)
Пример #9
0
    def __init__(self, constrkw={}, name='Docking', **kw):
        kw['constrkw'] = constrkw
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        code = """def doit(self, docking_logs, rmsTool):
        from AutoDockTools.Docking import Docking
        d = Docking()
        for f in docking_logs:
                d.readDlg(f)
        d.clusterer.rmsTool = rmsTool
        self.outputData(docking = d)           
                    
        
## to ouput data on port docking use
## self.outputData(docking=data)


"""
        self.configure(function=code)
        self.inputPortsDescr.append({
            'name': 'docking_logs',
            'cast': True,
            'datatype': 'list',
            'balloon':
            'list of docking log files to be read into as a single Docking',
            'height': 12,
            'width': 12,
            'shape': 'oval',
            'color': 'cyan'
        })
        self.inputPortsDescr.append({
            'name': 'rmsTool',
            'cast': True,
            'datatype': 'None',
            'balloon': 'rmsTool to be used for clustering',
            'height': 8,
            'width': 12,
            'shape': 'diamond',
            'color': 'white'
        })
        self.outputPortsDescr.append({
            'name': 'docking',
            'datatype': 'None',
            'balloon': 'docking instance',
            'height': 8,
            'width': 12,
            'shape': 'diamond',
            'color': 'white'
        })
    def __init__(self, name='RemoveWaters', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='MoleculeSet', name='molecules')
        ip.append(datatype='str',
                  required=False,
                  name='residue_type_str',
                  defaultValue='HOH')
        op = self.outputPortsDescr
        op.append(datatype='MoleculeSet',
                  name='molecules_with_no_water_residues')
        op.append(datatype='int', name='num_water_res')

        code = """def doit(self, molecules, residue_type_str):
    if molecules:
        from MolKit.molecule import BondSet
        lenHOHs = 0
        for mol in molecules:
            hohs = mol.allAtoms.get(lambda x: x.parent.type==residue_type_str)
            if hohs:
                #remove(hohs)
                lenHOHs = len(hohs)
                for h in hohs:
                    for b in h.bonds:
                        c = b.atom1
                        if c==h:
                            c = b.atom2
                        c.bonds.remove(b)
                    h.bonds = BondSet()
                    res = h.parent
                    h.parent.remove(h)
                    if len(h.parent.children)==0:
                        res = h.parent
                        chain = res.parent
                        #print 'removing residue: ', res.name
                        chain.remove(res)
                        if len(chain.children)==0:
                            mol = chain.parent
                            print 'removing chain', chain.id
                            mol.remove(chain)
                            del chain
                        del res
                    del h 
                #fix allAtoms short cut
                mol.allAtoms = mol.chains.residues.atoms    
    self.outputData(molecules_with_no_water_residues=molecules, num_water_res=lenHOHs)"""
        self.setFunction(code)
Пример #11
0
    def __init__(self, name='UrlLigandDB', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='string', name='url')
        #        ip.append(datatype='string', name='local_dir')

        self.widgetDescr['url'] = {
            'class': 'NEEntry',
            'master': 'node',
            'width': 40,
            'labelCfg': {
                'text': 'URL to ligands: '
            }
        }
        #        self.widgetDescr['local_dir'] = {
        #            'class':'NEEntryWithDirectoryBrowser', 'master':'node', 'width':30,
        #            'labelCfg':{'text':'Local directory to save ligands: '}
        #            }

        op = self.outputPortsDescr
        op.append(datatype='LigandDB', name='ligDB')

        #        code = """def doit(self, url, local_dir):
        code = """def doit(self, url):
#    ligDB = LigandDB(url_compressed_file=url)
    ligDB = LigandDB(url_lib=url)

    bname = os.path.basename(url)

#    if bname.endwith('.tar.gz'):
#        print "TEST tar.gz"
#    elif bname.endswith('.zip'):
#        print "TEST ZIP"

    if not(url.startswith('http://kryptonite.nbcr.net/app')):
         print "ERROR: the URL must be a directory on kryptonite.nbcr.net"
         sys.exit()  
 
    

    self.outputData(ligDB=ligDB)
"""
        self.setFunction(code)
Пример #12
0
    def __init__(self, name='MakeDPFCopies', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='dpf_template', name='dpf_file')
        ip.append(datatype='string', name='struct_dir')

        op = self.outputPortsDescr
        op.append(datatype='list', name='dpf_list')

        code = """def doit(self, dpf_file, struct_dir):
    import os
    import shutil
    from AutoDockTools.VisionInterface.Adt.dpf_template import dpf_template

    file_path = dpf_file.fullpath

    if not(os.path.exists(file_path)):
        print "ERROR: DPF template file " + file_path + " does not exist!"
        return 'stop'

    name_list = set()
    dpf_list = []

    d = os.path.abspath(struct_dir)

    for i in os.listdir(struct_dir):
        if i.endswith(".pdbqt") or i.endswith(".pdb") or i.endswith(".pqr"):
            name_list.add(i.split('.')[0])

    for i in name_list:
        dst = os.path.join(d, i + '.dpf')
        dpf_list.append(dst)       

        if not(os.path.exists(dst)):
            shutil.copyfile(file_path, dst)
  

    self.outputData(dpf_list=dpf_list)
"""
        self.setFunction(code)
    def __init__(self, name='Manage Aromatic Carbons', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        self.widgetDescr['cutoff'] = {
            'class': 'NEDial',
            'size': 50,
            'oneTurn': 5.0,
            'min': 1.0,
            'lockMin': 1,
            'type': 'float',
            'initialValue': 7.5,
            'labelGridCfg': {
                'sticky': 'w'
            },
            'labelCfg': {
                'text': 'cutoff'
            },
        }

        ip = self.inputPortsDescr
        ip.append(datatype='MoleculeSet', name='mols')
        ip.append(datatype='float',
                  required=False,
                  name='cutoff',
                  defaultValue=7.5)

        op = self.outputPortsDescr
        op.append(datatype='MoleculeSet', name='mols')
        op.append(datatype='int', name='num_aromaticCs')

        code = """def doit(self, mols, cutoff):
    if mols:
        aromC_manager = AromaticCarbonManager(cutoff=cutoff)
        num_aromCs = 0
        for mol in mols:
            if not len(mol.allAtoms.bonds[0]):
                mol.buildBondsByDistance()
            aromCs = aromC_manager.setAromaticCarbons(mol, cutoff=cutoff)
            num_aromCs+=len(aromCs)
        self.outputData(mols=mols, num_aromaticCs=num_aromCs)\n"""

        self.setFunction(code)
    def __init__(self, name='AD4_SolvationParameterizer', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='MoleculeSet', name='mols')

        op = self.outputPortsDescr
        op.append(datatype='MoleculeSet', name='typed_mols')
        op.append(datatype='list', name='AtSolPar')

        code = """def doit(self,mols):
    if mols:
        SP = SolvationParameterizer()
        for mol in mols:
            unknown_atoms = SP.addParameters(mol.chains.residues.atoms)
            #?keep information about unknown_atoms?
            if unknown_atoms is not None: mol.unknown_atoms = len(unknown_atoms)
        self.outputData(typed_mols=mols, AtSolPar=mols.allAtoms.AtSolPar)\n"""
        self.setFunction(code)
    def __init__(self, name='Manage Rotatable Bonds', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='MoleculeSet', name='mols', defaultValue='auto')
        ip.append(datatype='string', required=False, name='root')
        ip.append(datatype='string',
                  required=False,
                  name='allowed_bonds',
                  defaultValue='backbone')
        ip.append(datatype='int',
                  required=False,
                  name='check_for_fragments',
                  defaultValue=0)
        ip.append(datatype='string',
                  required=False,
                  name='bonds_to_inactivate',
                  defaultValue='')
        ip.append(datatype='string',
                  required=False,
                  name='limit_torsions',
                  defaultValue='')

        op = self.outputPortsDescr
        op.append(datatype='MoleculeSet', name='mols')

        code = """def doit(self, mols, root, allowed_bonds, check_for_fragments,
bonds_to_inactivate, limit_torsions):
    if mols:
        #mol = mols[0]
        for mol in mols:
            if not len(mol.allAtoms.bonds[0]):
                mol.buildBondsByDistance()
            print "root=", root
            mol.RBM = RotatableBondManager(mol, allowed_bonds, root,
                            check_for_fragments=check_for_fragments,
                            bonds_to_inactivate=bonds_to_inactivate)
            if limit_torsions:
                mol.RBM.limit_torsions(limit_torsions)
        self.outputData(mols=mols)\n"""

        self.setFunction(code)
Пример #16
0
    def __init__(self, name='DPFTemplateBrowser', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='string', name='dpf_template_file')

        filetypes = [('All supported files', '*.dpf')]

        self.widgetDescr['dpf_template_file'] = {
            'class': 'NEEntryWithFileBrowser',
            'master': 'node',
            'width': 20,
            'filetypes': filetypes,
            'initialValue': '',
            'labelCfg': {
                'text': 'DPF template file: '
            }
        }

        op = self.outputPortsDescr
        op.append(datatype='dpf_template', name='dpf_template')

        code = """def doit(self, dpf_template_file):
    import os
    from AutoDockTools.VisionInterface.Adt.dpf_template import dpf_template

    dpf_template_file = os.path.abspath(dpf_template_file)

    if not(os.path.exists(dpf_template_file)):
        print "ERROR: DPF template file " + dpf_template_file + " does not exist!"
        return 'stop'

    dpf_template = dpf_template(dpf_template_file)

    self.outputData(dpf_template=dpf_template)
"""
        self.setFunction(code)
    def __init__(self, name='Prepare Autodock3 Dpf', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        ip = self.inputPortsDescr
        ip.append(datatype='string', name='ligand_filename')
        ip.append(datatype='string', name='receptor_filename')
        ip.append(datatype='string',
                  required=False,
                  name='dpf_filename',
                  defaultValue='')
        ip.append(datatype='dict',
                  required=False,
                  name='parameters',
                  defaultValue={})
        ip.append(datatype='string',
                  required=False,
                  name='outputfilename',
                  defaultValue='')

        op = self.outputPortsDescr
        op.append(datatype='string', name='ad3_parameter_file')

        code = """def doit(self, ligand_filename, receptor_filename, dpf_filename, parameters, outputfilename):
    if ligand_filename and receptor_filename:
        from AutoDockTools.DockingParameters import DockingParameterFileMaker
        dpfm = DockingParameterFileMaker()
        dpfm.set_ligand(ligand_filename)
        dpfm.set_receptor(receptor_filename)
        if dpf_filename:
            dpfm.read_reference(dpf_filename)
        if len(parameters):
            dpfm.set_docking_parameters(parameters)
        if not outputfilename:
            outputfilename = dpfm.ligand.name+'_'+dpfm.receptor_stem + ".dpf"
        dpfm.write_dpf(outputfilename)
        self.outputData(ad3_parameter_file=outputfilename)\n"""

        self.setFunction(code)
    def __init__(self, name='Prepare Autogrid4 Gpf', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        ip = self.inputPortsDescr
        ip.append(datatype='string', name='ligand_filename')
        ip.append(datatype='string', name='receptor_filename')
        ip.append(datatype='string',
                  required=False,
                  name='gpf_filename',
                  defaultValue='')
        ip.append(datatype='dict',
                  required=False,
                  name='parameters',
                  defaultValue={})
        ip.append(datatype='string',
                  required=False,
                  name='outputfilename',
                  defaultValue='')

        op = self.outputPortsDescr
        op.append(datatype='string', name='ag4_parameter_file')

        code = """def doit(self, ligand_filename, receptor_filename, gpf_filename, parameters, outputfilename):
    if ligand_filename and receptor_filename:
        from AutoDockTools.GridParameters import GridParameter4FileMaker
        gpfm = GridParameter4FileMaker()
        gpfm.set_ligand(ligand_filename)
        gpfm.set_receptor(receptor_filename)
        if gpf_filename:
            gpfm.read_reference(gpf_filename)
        if len(parameters):
            gpfm.set_grid_parameters(parameters)
        if not outputfilename:
            outputfilename = gpfm.ligand.name+'_'+gpfm.receptor_stem + ".gpf"
        gpfm.write_gpf(outputfilename)
        self.outputData(ag4_parameter_file=outputfilename)\n"""

        self.setFunction(code)
    def __init__(self, constrkw = {},  name='ADTFileNames', **kw):
        kw['constrkw'] = constrkw
        kw['name'] = name
        NetworkNode.__init__(*(self,), **kw)

        ip = self.inputPortsDescr
        ip.append({'name': 'recpetor_obj', 'datatype': 'receptor'})

        op = self.outputPortsDescr
        op.append({'name': 'GPF_template', 'datatype': 'gpf_template'})
        op.append({'name': 'DPF_template', 'datatype': 'dpf_template'})
        op.append({'name': 'result_dir', 'datatype': 'string'})


        code = """def doit(self, receptor_obj):
        import os
        from AutoDockTools.VisionInterface.Adt.receptor import receptor
        from AutoDockTools.VisionInterface.Adt.dpf_template import dpf_template
        from AutoDockTools.VisionInterface.Adt.gpf_template import gpf_template

        receptor_id = receptor_obj.get_id()
        receptor_dir = receptor_obj.get_workdir() 

        GPF_template = gpf_template(receptor_dir + os.sep + receptor_id + '.gpf')
        DPF_template = dpf_template(receptor_dir + os.sep + receptor_id + '.dpf')
        result_dir = os.path.abspath(receptor_dir + os.sep + '..' + os.sep + receptor_id)

        print "-------------------------------------------------------"
        print "     INPUTS THAT WILL BE USED FOR VIRTUAL SCREENING    "
        print "GPF Template:                  " + GPF_template.fullpath
        print "DPF Template:                  " + DPF_template.fullpath
        print "Results will be downloaded to: " + result_dir
        print "-------------------------------------------------------"
        
        pass
        self.outputData(GPF_template=GPF_template, DPF_template=DPF_template, result_dir=result_dir)
"""
        self.configure(function=code)
    def __init__(self, name='Ligand_Writer', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        fileTypes = [('pdbq', '*.pdbq'), ('all', '*')]

        self.widgetDescr['output_filename'] = {
            'class': 'NEEntryWithFileSaver',
            'master': 'node',
            'filetypes': fileTypes,
            'title': 'save AD3 Ligand',
            'width': 10,
            'labelCfg': {
                'text': 'file:'
            },
        }

        ip = self.inputPortsDescr
        ip.append(datatype='Molecule', name='mol')
        ip.append(datatype='string', name='output_filename')

        op = self.outputPortsDescr
        op.append(datatype='Molecule', name='mol')

        code = """def doit(self, mol, output_filename):
    if mol:
        #mol = mols[0]
        #check for bonds with 'possibleTors/activeTOrs keys'
        #check for root
        #check for TORSDOF
        #check for charges
        writer = LigandWriter()
        writer.write(mol, output_filename)
        self.outputData(mol=mol)\n"""

        self.setFunction(code)
    def __init__(self, name='MakeDPFCopies', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(datatype='gpf_template', name='gpf_file', required=False)
        ip.append(datatype='dpf_template', name='dpf_file', required=False)
        ip.append(datatype='string', name='struct_dir', required=True)

        op = self.outputPortsDescr
        op.append(datatype='list', name='gpf_list')
        op.append(datatype='list', name='dpf_list')
        op.append(datatype='string', name='struct_dir')

        code = """def doit(self, gpf_file, dpf_file, struct_dir):
    import os
    import shutil
    from AutoDockTools.VisionInterface.Adt.dpf_template import dpf_template
    from AutoDockTools.VisionInterface.Adt.gpf_template import gpf_template

    if dpf_file == None and gpf_file == None:
        print "ERROR: DPF and GPF input missing"
        return 'stop'


    if dpf_file != None:
        dpf_file_path = dpf_file.fullpath

        if not(os.path.exists(dpf_file_path)):
            print "ERROR: DPF template file " + dpf_file_path + " does not exist!"
            return 'stop'

    if gpf_file != None:
        gpf_file_path = gpf_file.fullpath

        if not(os.path.exists(gpf_file_path)):
            print "ERROR: GPF template file " + gpf_file_path + " does not exist!"
            return 'stop'

    name_list = set()
    d = os.path.abspath(struct_dir)

    for i in os.listdir(struct_dir):
        if i.endswith(".pdbqt") or i.endswith(".pdb") or i.endswith(".pqr"):
            name_list.add(i.split('.')[0])

    dpf_list = []
    gpf_list = []

    if dpf_file != None:
        for i in name_list:
            d_dst = os.path.join(d, i + '.dpf')
            dpf_list.append(d_dst)       

            if not(os.path.exists(d_dst)):
                shutil.copyfile(dpf_file_path, d_dst)

    if gpf_file != None:
        for i in name_list:
            g_dst = os.path.join(d, i + '.gpf')
            gpf_list.append(g_dst)       

            if not(os.path.exists(g_dst)):
                shutil.copyfile(gpf_file_path, g_dst)
  

    self.outputData(dpf_list=dpf_list, gpf_list=gpf_list, struct_dir=struct_dir)
"""
        self.setFunction(code)
Пример #22
0
    def __init__(self, constrkw={}, name='GetStructuresFromDir', **kw):
        kw['constrkw'] = constrkw
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        ip = self.inputPortsDescr
        ip.append({'name': 'directory', 'datatype': 'string'})

        self.widgetDescr['directory'] = {
            'class': 'NEEntryWithDirectoryBrowser',
            'master': 'node',
            'width': 20,
            'initialValue': '',
            'labelCfg': {
                'text': 'Structure Directory: '
            }
        }

        op = self.outputPortsDescr
        op.append({'name': 'structure_list_obj', 'datatype': 'list'})

        #        op = self.outputPortsDescr
        #        op.append({'name': 'structure_list', 'datatype': 'list'})

        code = """def doit(self, directory):
        import glob, os
        from AutoDockTools.VisionInterface.Adt.receptor import receptor

        directory = os.path.abspath(directory)

        if directory == None:
            return 'stop'

        if directory is not None:
            cwd = os.getcwd()
            os.chdir(directory)
        try:
            filenames_pdbqt = glob.glob('*.pdbqt')
            filenames_pqr = glob.glob('*.pqr')
            filenames_pdb = glob.glob('*.pdb')

            structure_list = filenames_pdbqt

            for f in filenames_pqr:
                sid = f.rstrip('.pqr')
                s = sid + '.pdbqt'
                found = False
 
                for i in structure_list:
                    if i == s:
                        found = True        
                        break

                if found == False:
                    structure_list.append(f)

            for f in filenames_pdb:
                sid = f.rstrip('.pdb')
                found = False
 
                for i in structure_list:
                    if i == sid + '.pdb' or i == sid + '.pdbqt':
                        found = True        
                        break

                if found == False:
                    structure_list.append(f)

            structure_list = [os.path.join(directory, x) for x in filenames_pdbqt]
            structure_list_obj = [receptor(x) for x in structure_list]
        finally:
            if directory is not None:
                os.chdir(cwd)

        print "--------------------------------------------------------------"
        print "The following structures are found in the structure directory:"

        count = 0

        for i in structure_list:
            count = count + 1
            print str(count) + '. ' + i
           
        print "--------------------------------------------------------------"
        
        pass
#        self.outputData(structure_list_obj=structure_list_obj, structure_list=structure_list)
        self.outputData(structure_list_obj=structure_list_obj)
"""
        self.configure(function=code)
    def __init__(self, name='PublicServerLigandDB', **kw):
        import urllib.request, urllib.parse, urllib.error

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        ip = self.inputPortsDescr
        ip.append(
            datatype='string',
            name='server_lib',
            required=True,
        )

        fqdn = "kryptonite.nbcr.net"
        url = "http://" + fqdn + "/pub_ligand_libs.txt"

        publibdir = os.path.join(getResourceFolderWithVersion(), 'ws')

        if not (os.path.exists(publibdir)):
            os.mkdir(publibdir)

        publiblocal = os.path.join(publibdir, 'publibs.txt')

        lock = publiblocal + '.lock'

        if os.path.exists(lock) and time.time() - os.path.getmtime(lock) > 15:
            os.remove(lock)

        try:
            if not (os.path.exists(lock)):
                open(lock, 'w').close()
                publibweb = urllib.request.urlopen(url)
                outfile = open(publiblocal, 'w')
                outfile.write(publibweb.read())
                outfile.close()
                os.remove(lock)
        except:
            print("[INFO]: Getting list of public server libs from cache")
            pass

        try:
            f = open(publiblocal, 'r')
            self.choices = f.read().split()
            f.close()
        except:
            self.choices = []
            print(
                "[ERROR]: Unable to public server libs from the web and from cache"
            )

        self.widgetDescr['server_lib'] = {
            'class': 'NEComboBox',
            'master': 'node',
            'choices': self.choices,
            'fixedChoices': True,
            'entryfield_entry_width': 18,
            'labelGridCfg': {
                'sticky': 'w'
            },
            'widgetGridCfg': {
                'sticky': 'w'
            },
            'labelCfg': {
                'text': 'Server Libraries:'
            }
        }

        op = self.outputPortsDescr
        op.append(datatype='LigandDB', name='ligDB')

        code = """def doit(self, server_lib):
    ligDB = LigandDB(server_lib=server_lib)

    self.outputData(ligDB=ligDB)
"""
        self.setFunction(code)
    def __init__(self, constrkw={}, name='ReadDockingParameterFile', **kw):
        kw['constrkw'] = constrkw
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)
        fileTypes = [('dpf', '*')]

        self.widgetDescr['filename'] = {
            'class': 'NEEntryWithFileBrowser',
            'master': 'node',
            'filetypes': fileTypes,
            'title': 'read file',
            'width': 16,
            'labelCfg': {
                'text': 'file:'
            },
        }

        code = """def doit(self, template_dpf_filename):
    if template_dpf_filename:
            from AutoDockTools.DockingParameters import DockingParameters
            gpo = DockingParameters()
            gpo.read(template_dpf_filename)
            self.outputData(gpo=gpo)
"""
        self.configure(function=code)

        self.inputPortsDescr.append({
            'name': 'template_dpf_filename',
            'cast': True,
            'datatype': 'string',
            'balloon': 'template grid parameter filename',
            'required': False,
            'height': 8,
            'width': 12,
            'shape': 'oval',
            'color': 'white'
        })
        self.outputPortsDescr.append({
            'name': 'gpo',
            'datatype': 'None',
            'balloon':
            'gpo,  grid parameter object,  instance of AutoDockTools.DockingParameters',
            'height': 8,
            'width': 12,
            'shape': 'diamond',
            'color': 'white'
        })
        self.widgetDescr['template_dpf_filename'] = {
            'initialValue': '',
            'labelGridCfg': {
                'column': 0,
                'row': 0
            },
            'master': 'node',
            'widgetGridCfg': {
                'labelSide': 'left',
                'column': 1,
                'row': 0
            },
            'labelCfg': {
                'text': ''
            },
            'class': 'NEEntryWithFileBrowser'
        }
Пример #25
0
    def __init__(self, name='filterLigands', **kw):
        kw['name'] = name
        NetworkNode.__init__(*(self, ), **kw)

        # create filter object
        lfilter = self.lfilter = FilterLigands()
        lfilter.setFilter('default')

        ip = self.inputPortsDescr
        ip.append(datatype='LigandDB', name='ligands')
        ip.append(datatype='string', name='filterMode')

        self.widgetDescr['filterMode'] = {
            'class':
            'NEComboBox',
            'master':
            'node',
            'choices': [
                'None', 'default', 'Lipinski-like', 'Drug-like',
                'Drug-like frag', 'Custom'
            ],
            'fixedChoices':
            True,
            'initialValue':
            'default',
            'entryfield_entry_width':
            8,
            'labelGridCfg': {
                'sticky': 'w'
            },
            'widgetGridCfg': {
                'sticky': 'w'
            },
            'labelCfg': {
                'text': 'filter type:'
            }
        }

        labels = [
            'Min num. of h-bond donors:', 'Max num. of h-bond donors:',
            'Min num. of h-bond acceptors', 'Max num. of h-bond acceptors',
            'Min molecular weight', 'Max molecular weight',
            'Min num. of heavy atoms', 'Max num. of heavy atoms',
            'Min num. of rotatable bonds', 'Max num. of rotatable bonds'
        ]

        for i, param in enumerate([
                'hbd_min', 'hbd_max', 'hba_min', 'hba_max', 'mw_min', 'mw_max',
                'nat_min', 'nat_max', 'torsdof_min', 'torsdof_max'
        ]):
            ip.append(datatype='int', name=param)
            value = getattr(lfilter, self.attr[i])

            self.widgetDescr[param] = {
                'class': 'NEThumbWheel',
                'master': 'ParamPanel',
                'width': 75,
                'height': 12,
                'oneTurn': 10,
                'type': 'int',
                'wheelPad': 0,
                'initialValue': value,
                'min': 0,
                'labelCfg': {
                    'text': labels[i]
                }
            }

        op = self.outputPortsDescr
        op.append(datatype='LigandDB', name='ligands')
        op.append(datatype='int', name='num_accepted')
        op.append(datatype='int', name='num_rejected')

        code = """def doit(self, ligands, filterMode='default', hbd_min=None, hbd_max=None, hba_min=None, hba_max=None, mw_min=None, mw_max=None, nat_min=None, nat_max=None, torsdof_min=None, torsdof_max=None):

    lfilter = self.lfilter

    if filterMode != "Custom":
        lfilter.setFilter(filterMode)
    else:
        kwargs = {"HbDMin": hbd_min,
                  "HbDMax": hbd_max,
                  "HbAMin": hba_min,
                  "HbAMax": hba_max,
                  "MWMin": mw_min,
                  "MWMax": mw_max,
                  "NatMin": nat_min,
                  "NatMax": nat_max,
                  "TORSDOFMin": torsdof_min,
                  "TORSDOFMax": torsdof_max}
        lfilter.setFilterRanges('Custom', **kwargs)

    if self.inputPorts[1].hasNewValidData(): # new mode -> update widgets
        self.setParamPanelWidget(lfilter)

    print "Running Filter node with parameters:"
    print "min number of hydrogen bond donors: " + str(lfilter.HbDMin)
    print "max number of hydrogen bond donors: " + str(lfilter.HbDMax)
    print "min number of hydrogen bond acceptors: " + str(lfilter.HbAMin)
    print "max number of hydrogen bond acceptors: " + str(lfilter.HbAMax)
    print "min molecular weight: " + str(lfilter.MWMin)
    print "max molecular weight: " + str(lfilter.MWMax)
    print "min number of heavy atoms: " + str(lfilter.NatMin)
    print "max number of heavy atoms: " + str(lfilter.NatMax)
    print "min number of rotatable bonds: " + str(lfilter.TORSDOFMin)
    print "max number of rotatable bonds: " + str(lfilter.TORSDOFMax)

#    accepted, rejected = lfilter.filterTable(ligands.propertyTable)

    accepted, rejected = lfilter.filterTable(ligands.propertyTable, ligands.accepted)

    ligands.SetAcceptedLigands(accepted.filenames)

    if len(accepted.filenames) > 2500:
        print "ERROR: Sorry, we cannot send your virtual screening job to the server because the number of accepted ligands from the filter is greater than the maximum number of ligands (2500) the server can support"
        return 'stop'

    self.outputData(ligands=ligands, num_accepted = len(accepted.filenames), num_rejected=len(rejected))
"""
        self.setFunction(code)