def GenerateMACCS166KeysFingerprints(Mols): """Generate MACCS166Keys fingerprints.""" MiscUtil.PrintInfo("\nGenerating MACCS166Keys fingerprints...") # Generate ExplicitBitVect fingerprints... MolsFingerprints = [ rdMolDescriptors.GetMACCSKeysFingerprint(Mol) for Mol in Mols ] return MolsFingerprints
def SetupContoursInfo(): """Setup contour info for generating contour plots.""" MiscUtil.PrintInfo( "\nProcessing phi and psi densities for contour plots...") OptionsInfo["PlotTypesInfo"]["PhiPsiContourInfo"] = {} for PlotType in OptionsInfo["PlotTypesInfo"]["Types"]: PhiPsiContourInfo = SetupPhiAndPsiContourInfo(PlotType) OptionsInfo["PlotTypesInfo"]["PhiPsiContourInfo"][ PlotType] = PhiPsiContourInfo
def ProcessMoleculesUsingSingleProcess(Mols, GroupsPatternMols, Writer, GroupOutfilesWriters): """Process and search molecules using a single process.""" MiscUtil.PrintInfo("\nSearching functional groups...") Compute2DCoords = OptionsInfo["OutfileParams"]["Compute2DCoords"] CombineMatchResults = OptionsInfo["CombineMatchResults"] SetSMILESMolProps = OptionsInfo["OutfileParams"]["SetSMILESMolProps"] GroupsPatternsMatchCountList = [0] * len( OptionsInfo["SpecifiedFunctionalGroups"]) (MolCount, ValidMolCount, RemainingMolCount) = [0] * 3 FirstMol = True for Mol in Mols: MolCount += 1 if Mol is None: continue if RDKitUtil.IsMolEmpty(Mol): MolName = RDKitUtil.GetMolName(Mol, MolCount) MiscUtil.PrintWarning("Ignoring empty molecule: %s" % MolName) continue ValidMolCount += 1 if FirstMol: FirstMol = False if SetSMILESMolProps: if Writer is not None: RDKitUtil.SetWriterMolProps(Writer, Mol) for GroupOutfileWriter in GroupOutfilesWriters: if GroupOutfileWriter is not None: RDKitUtil.SetWriterMolProps(GroupOutfileWriter, Mol) # Match molecule against functional group patterns... MolMatched, GroupsPatternMatchStatusList = MatchMolecule( Mol, GroupsPatternMols) # Update functional group match count... for GroupIndex, MatchStatus in enumerate(GroupsPatternMatchStatusList): if MatchStatus: GroupsPatternsMatchCountList[GroupIndex] += 1 if not MolMatched: continue RemainingMolCount += 1 WriteMolecule(Writer, GroupOutfilesWriters, Mol, Compute2DCoords, CombineMatchResults, GroupsPatternMatchStatusList) return (MolCount, ValidMolCount, RemainingMolCount, GroupsPatternsMatchCountList)
def RemoveSalts(): """Identify and remove salts from molecules""" # Setup a molecule reader... MiscUtil.PrintInfo("\nProcessing file %s..." % OptionsInfo["Infile"]) Mols = RDKitUtil.ReadMolecules(OptionsInfo["Infile"], **OptionsInfo["InfileParams"]) # Set up a molecule writer... Writer = SetupMoleculeWriter() MolCount, ValidMolCount, SaltsMolCount = ProcessMolecules(Mols, Writer) if Writer is not None: Writer.close() MiscUtil.PrintInfo("\nTotal number of molecules: %d" % MolCount) MiscUtil.PrintInfo("Number of valid molecules: %d" % ValidMolCount) MiscUtil.PrintInfo("Number of ignored molecules: %d" % (MolCount - ValidMolCount)) MiscUtil.PrintInfo("\nNumber of molecules coontaining salts: %d" % (SaltsMolCount))
def SetupMoleculeWriter(): """Setup a molecule writer.""" Writer = RDKitUtil.MoleculesWriter(OptionsInfo["Outfile"], **OptionsInfo["OutfileParams"]) if Writer is None: MiscUtil.PrintError("Failed to setup a writer for output fie %s " % OptionsInfo["Outfile"]) MiscUtil.PrintInfo("Generating file %s..." % OptionsInfo["Outfile"]) return Writer
def PerformMutagenesis(): """Mutate specified residues across chains and generate an output file.""" MiscUtil.PrintInfo("\nApplying mutations...") # Load macromolecule from input file... MolName = OptionsInfo["InfileRoot"] LoadMolecule(OptionsInfo["Infile"], MolName) # Apply mutations... for Mutation, ChainID, ResNum, NewBaseName in OptionsInfo["SpecifiedMutationsInfo"] : ApplyMutation(Mutation, MolName, ChainID, ResNum, NewBaseName) # Generate output file... Outfile = OptionsInfo["Outfile"] MiscUtil.PrintInfo("\nGenerating output file %s..." % Outfile) pymol.cmd.save(Outfile, MolName) # Delete macromolecule... DeleteMolecule(MolName)
def SetupPAINSPatternMols(PAINSPatterns): """Set up PAINS pattern mols for substructure search""" MiscUtil.PrintInfo( "\nSetting up PAINS pattern molecules for performins substructure search..." ) PatternMols = [] for Pattern in PAINSPatterns: PatternMol = Chem.MolFromSmarts(Pattern) PatternMols.append(PatternMol) return PatternMols
def main(): """Start execution of the script""" MiscUtil.PrintInfo("\n%s (RDK v%s; %s): Starting...\n" % (ScriptName, rdBase.rdkitVersion, time.asctime())) (WallClockTime, ProcessorTime) = MiscUtil.GetWallClockAndProcessorTime() # Retrieve command line arguments and options... RetrieveOptions() # Process and validate command line arguments and options... ProcessOptions() # Perform actions required by the script... PerformFunctionalGroupsSearch() MiscUtil.PrintInfo("\n%s: Done...\n" % ScriptName) MiscUtil.PrintInfo( "Total time: %s" % MiscUtil.GetFormattedElapsedTime(WallClockTime, ProcessorTime))
def ProcessOptions(): """Process and validate command line arguments and options""" MiscUtil.PrintInfo("Processing options...") # Validate options... ValidateOptions() OptionsInfo["CombineMatches"] = Options["--combineMatches"] OptionsInfo["CombineMatchResults"] = True if re.match("^No$", Options["--combineMatches"], re.I): OptionsInfo["CombineMatchResults"] = False if Options["--outfile"]: FileDir, FileName, FileExt = MiscUtil.ParseFileName( Options["--outfile"]) OptionsInfo["OutfileBasename"] = FileName OptionsInfo["OutfileExt"] = FileExt OptionsInfo["CombineOperator"] = Options["--combineOperator"] OptionsInfo["AndCombineOperatorMode"] = True if re.match("^or$", Options["--combineOperator"], re.I): OptionsInfo["AndCombineOperatorMode"] = False OptionsInfo["GroupNamesFile"] = None if not re.match("^auto$", Options["--groupNamesFile"], re.I): OptionsInfo["GroupNamesFile"] = Options["--groupNamesFile"] OptionsInfo["FunctionalGroups"] = Options["--functionalGroups"] OptionsInfo["Infile"] = Options["--infile"] OptionsInfo["InfileParams"] = MiscUtil.ProcessOptionInfileParameters( "--infileParams", Options["--infileParams"], Options["--infile"]) OptionsInfo["Outfile"] = Options["--outfile"] OptionsInfo["OutfileParams"] = MiscUtil.ProcessOptionOutfileParameters( "--outfileParams", Options["--outfileParams"], Options["--infile"], Options["--outfile"]) OptionsInfo["Overwrite"] = Options["--overwrite"] OptionsInfo["CountMode"] = False if re.match("^count$", Options["--mode"], re.I): OptionsInfo["CountMode"] = True OptionsInfo["MPMode"] = True if re.match("^yes$", Options["--mp"], re.I) else False OptionsInfo["MPParams"] = MiscUtil.ProcessOptionMultiprocessingParameters( "--mpParams", Options["--mpParams"]) OptionsInfo["UseChirality"] = False if re.match("^yes$", Options["--useChirality"], re.I): OptionsInfo["UseChirality"] = True
def SetupMoleculeWriters(): """Setup molecule writers.""" Writer = None WriterFiltered = None if OptionsInfo["CountMode"]: return (Writer, WriterFiltered) Writer = RDKitUtil.MoleculesWriter(OptionsInfo["Outfile"], **OptionsInfo["OutfileParams"]) if Writer is None: MiscUtil.PrintError("Failed to setup a writer for output fie %s " % OptionsInfo["Outfile"]) MiscUtil.PrintInfo("Generating file %s..." % OptionsInfo["Outfile"]) if OptionsInfo["OutfileFilteredMode"]: WriterFiltered = RDKitUtil.MoleculesWriter(OptionsInfo["OutfileFiltered"], **OptionsInfo["OutfileParams"]) if WriterFiltered is None: MiscUtil.PrintError("Failed to setup a writer for output fie %s " % OptionsInfo["OutfileFiltered"]) MiscUtil.PrintInfo("Generating file %s..." % OptionsInfo["OutfileFiltered"]) return (Writer, WriterFiltered)
def PerformCalculations(): """Calculate descriptors for a specified list of descriptors.""" # Setup a molecule reader... MiscUtil.PrintInfo("\nProcessing file %s..." % OptionsInfo["Infile"]) Mols = RDKitUtil.ReadMolecules(OptionsInfo["Infile"], **OptionsInfo["InfileParams"]) # Setup a writer... Writer = SetupMoleculeWriter() # Process molecules... MolCount, ValidMolCount = ProcessMolecules(Mols, Writer) if Writer is not None: Writer.close() MiscUtil.PrintInfo("\nTotal number of molecules: %d" % MolCount) MiscUtil.PrintInfo("Number of valid molecules: %d" % ValidMolCount) MiscUtil.PrintInfo("Number of ignored molecules: %d" % (MolCount - ValidMolCount))
def InitializeWorkerProcess(*EncodedArgs): """Initialize data for a worker process.""" global Options, OptionsInfo MiscUtil.PrintInfo("Starting process (PID: %s)..." % os.getpid()) # Decode Options and OptionInfo... Options = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[0]) OptionsInfo = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[1]) RetrieveMolecularDescriptorsInfo(PrintInfo=False)
def PerformSearch(): """Perform search using specified SMARTS pattern.""" # Set up a pattern molecule... PatternMol = Chem.MolFromSmarts(OptionsInfo["Pattern"]) # Setup a molecule reader... MiscUtil.PrintInfo("\nProcessing file %s..." % OptionsInfo["Infile"]) Mols = RDKitUtil.ReadMolecules(OptionsInfo["Infile"], **OptionsInfo["InfileParams"]) # Set up molecule writers... Writer, WriterFiltered = SetupMoleculeWriters() MolCount, ValidMolCount, RemainingMolCount = ProcessMolecules( Mols, PatternMol, Writer, WriterFiltered) if Writer is not None: Writer.close() if WriterFiltered is not None: WriterFiltered.close() MiscUtil.PrintInfo("\nTotal number of molecules: %d" % MolCount) MiscUtil.PrintInfo("Number of valid molecules: %d" % ValidMolCount) MiscUtil.PrintInfo("Number of ignored molecules: %d" % (MolCount - ValidMolCount)) MiscUtil.PrintInfo("\nNumber of remaining molecules: %d" % RemainingMolCount) MiscUtil.PrintInfo("Number of filtered molecules: %d" % (ValidMolCount - RemainingMolCount))
def ListSelectionResiduesInfo(MolName, ChainIDs, SelectionType): """List residues information for a specified selection type. """ Lines = [] TotalResCount = 0 SelectionLabel = None if not len(ChainIDs): SelectionInfo, SelectionLabel = GetSelectionResiduesInfo( MolName, None, SelectionType) MiscUtil.PrintInfo("\nNumber of %s residues: %s" % (SelectionLabel, TotalResCount)) return for ChainID in ChainIDs: SelectionInfo, SelectionLabel = GetSelectionResiduesInfo( MolName, ChainID, SelectionType) ChainResCount = 0 LineWords = [] SortedResNames = sorted( SelectionInfo["ResNames"], key=lambda ResName: SelectionInfo["ResCount"][ResName], reverse=True) for ResName in SortedResNames: ResCount = SelectionInfo["ResCount"][ResName] LineWords.append("%s - %s" % (ResName, ResCount)) ChainResCount += ResCount TotalResCount += ResCount Line = "; ".join(LineWords) if len(LineWords) else None Lines.append("Chain ID: %s; Count: %s; Names: %s" % (ChainID, ChainResCount, Line)) MiscUtil.PrintInfo("\nNumber of %s residues: %s" % (SelectionLabel, TotalResCount)) for Line in Lines: MiscUtil.PrintInfo("%s" % Line)
def GenerateConformers(): """Generate conformers.""" # Setup a molecule reader... MiscUtil.PrintInfo("\nProcessing file %s..." % OptionsInfo["Infile"]) Mols = RDKitUtil.ReadMolecules(OptionsInfo["Infile"], **OptionsInfo["InfileParams"]) # Set up a molecule writer... Writer = RDKitUtil.MoleculesWriter(OptionsInfo["Outfile"], **OptionsInfo["OutfileParams"]) if Writer is None: MiscUtil.PrintError("Failed to setup a writer for output fie %s " % OptionsInfo["Outfile"]) MiscUtil.PrintInfo("Generating file %s..." % OptionsInfo["Outfile"]) MolCount, ValidMolCount, ConfGenFailedCount = ProcessMolecules( Mols, Writer) if Writer is not None: Writer.close() MiscUtil.PrintInfo("\nTotal number of molecules: %d" % MolCount) MiscUtil.PrintInfo("Number of valid molecules: %d" % ValidMolCount) MiscUtil.PrintInfo( "Number of molecules failed during conformation generation or minimization: %d" % ConfGenFailedCount) MiscUtil.PrintInfo("Number of ignored molecules: %d" % (MolCount - ValidMolCount + ConfGenFailedCount))
def CalculateEnergy(): """Calculate single point energy calculation.""" # Setup a molecule reader... MiscUtil.PrintInfo("\nProcessing file %s..." % OptionsInfo["Infile"]) Mols = RDKitUtil.ReadMolecules(OptionsInfo["Infile"], **OptionsInfo["InfileParams"]) # Set up a molecule writer... Writer = RDKitUtil.MoleculesWriter(OptionsInfo["Outfile"], **OptionsInfo["OutfileParams"]) if Writer is None: MiscUtil.PrintError("Failed to setup a writer for output fie %s " % OptionsInfo["Outfile"]) MiscUtil.PrintInfo("Generating file %s..." % OptionsInfo["Outfile"]) MolCount, ValidMolCount, EnergyFailedCount = ProcessMolecules(Mols, Writer) if Writer is not None: Writer.close() MiscUtil.PrintInfo("\nTotal number of molecules: %d" % MolCount) MiscUtil.PrintInfo("Number of valid molecules: %d" % ValidMolCount) MiscUtil.PrintInfo( "Number of molecules failed during energy calculation: %d" % EnergyFailedCount) MiscUtil.PrintInfo("Number of ignored molecules: %d" % (MolCount - ValidMolCount + EnergyFailedCount))
def WriteAlignedInputObject(FileIndex): """Write out aligned input object""" Outfile = OptionsInfo["InfilesInfo"]["OutfilesNames"][FileIndex] InputName = OptionsInfo["InfilesInfo"]["PyMOLObjectNames"][FileIndex] MiscUtil.PrintInfo("Generating aligned output file %s..." % Outfile) pymol.cmd.save(Outfile, InputName) if not os.path.exists(Outfile): MiscUtil.PrintWarning("Failed to generate aligned output file, %s..." % (Outfile))
def ListBoundingBoxInfo(MolName): """List bounding box information. """ if not (OptionsInfo["All"] or OptionsInfo["BoundingBox"]): return MolSelection = "(%s)" % MolName MolExtents = pymol.cmd.get_extent(MolSelection) XMin, YMin, ZMin = MolExtents[0] XMax, YMax, ZMax = MolExtents[1] XSize = abs(XMax - XMin) YSize = abs(YMax - YMin) ZSize = abs(ZMax - ZMin) MiscUtil.PrintInfo( "\nBounding box coordinates: <XMin, XMax> - <%.3f, %.3f>; <YMin, YMax> - <%.3f, %.3f>; <ZMin, ZMax> - <%.3f, %.3f>" % (XMin, XMax, YMin, YMax, ZMin, ZMax)) MiscUtil.PrintInfo( "Bounding box size in Angstroms: XSize - %.3f; YSize - %.3f; ZSize - %.3f" % (XSize, YSize, ZSize))
def ListHeaderInfo(Infile): """List header information.""" if not (OptionsInfo["All"] or OptionsInfo["Header"]): return FileDir, FileName, FileExt = MiscUtil.ParseFileName(Infile) Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution = [ "Not Available" ] * 5 if re.match("^pdb$", FileExt, re.I): Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution = RetriveHeadAndExperimentalInfoFromPDBFile( Infile) elif re.match("^cif$", FileExt, re.I): Classification, DepositionDate, IDCode, ExperimentalTechnique, Resolution = RetriveHeadAndExperimentalInfoFromCIFFile( Infile) MiscUtil.PrintInfo("\nID: %s\nClassification: %s\nDeposition date: %s" % (IDCode, Classification, DepositionDate)) MiscUtil.PrintInfo("\nExperimental technique: %s\nResolution: %s" % (ExperimentalTechnique, Resolution))
def InitializeWorkerProcess(*EncodedArgs): """Initialize data for a worker process.""" global Options, OptionsInfo MiscUtil.PrintInfo("Starting process (PID: %s)..." % os.getpid()) # Decode Options and OptionInfo... Options = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[0]) OptionsInfo = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[1]) # Set up salt remover... OptionsInfo["SaltRemover"] = SetupSaltRemover()
def ProcessOptions(): """Process and validate command line arguments and options""" MiscUtil.PrintInfo("Processing options...") # Validate options... ValidateOptions() OptionsInfo["Feedback"] = True if re.match("^Yes$", Options["--feedback"], re.I) else False OptionsInfo["Infile"] = Options["--infile"] OptionsInfo["Outfile"] = Options["--outfile"]
def InitializeWorkerProcess(*EncodedArgs): """Initialize data for a worker process.""" global Options, OptionsInfo MiscUtil.PrintInfo("Starting process (PID: %s)..." % os.getpid()) # Decode Options and OptionInfo... Options = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[0]) OptionsInfo = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[1]) # Decode ChEMBLPatternMols... OptionsInfo["ChEMBLPatternMols"] = [RDKitUtil.MolFromBase64EncodedMolString(EncodedMol) for EncodedMol in OptionsInfo["EncodedChEMBLPatternMols"]]
def ListInterfaceChainsAndResiduesInfo(InterfaceID, InterfaceChainIDs, ChainNames, ResiduesInfo): """List interface chains and residues. """ for ChainID in InterfaceChainIDs: if not ChainID in ChainNames: MiscUtil.PrintInfo( "\nInterface chain IDs: %s; ChainID: %s; Number of interface residues: 0" % (InterfaceID, ChainID)) continue for Index in range(0, len(ChainNames)): ChainName = ChainNames[Index] ChainResiduesInfo = ResiduesInfo[Index] if re.match(ChainID, ChainName, re.I): MiscUtil.PrintInfo( "\nInterface chain IDs: %s; ChainID: %s; Number of interface residues: %d" % (InterfaceID, ChainName, ChainResiduesInfo[0])) MiscUtil.PrintInfo( "Residue distribution: %s\nResidue IDs: %s" % (ChainResiduesInfo[1], ChainResiduesInfo[2])) continue
def RetrieveChainsIDs(): """Retrieve chain IDs. """ MolName = OptionsInfo["InfileRoot"] Infile = OptionsInfo["Infile"] MiscUtil.PrintInfo("\nRetrieving chains information for input file %s..." % Infile) LoadMolecule(Infile, MolName) ChainIDs = PyMOLUtil.GetChains(MolName) DeleteMolecule(MolName) if ChainIDs is None: ChainIDs = [] # Print out chain and ligand IDs... ChainInfo = ", ".join(ChainIDs) if len(ChainIDs) else "None" MiscUtil.PrintInfo("Chain IDs: %s" % ChainInfo) OptionsInfo["ChainIDs"] = ChainIDs
def ConvertLigandFileFormat(): """Comvert ligand file format.""" Infile = OptionsInfo["Infile"] Outfile = OptionsInfo["Outfile"] MiscUtil.PrintInfo("\nGenerating file %s..." % Outfile) PyMOLUtil.ConvertFileFormat(Infile, Outfile) if not os.path.exists(Outfile): MiscUtil.PrintWarning("Failed to generate Outfile file, %s..." % (Outfile))
def main(): """Start execution of the script""" MiscUtil.PrintInfo( "\n%s (PyMOL v%s; %s) Starting...\n" % (ScriptName, pymol.cmd.get_version()[1], time.asctime())) (WallClockTime, ProcessorTime) = MiscUtil.GetWallClockAndProcessorTime() # Retrieve command line arguments and options... RetrieveOptions() # Process and validate command line arguments and options... ProcessOptions() # Perform actions required by the script... SplitChainsAndLigands() MiscUtil.PrintInfo("\n%s: Done...\n" % ScriptName) MiscUtil.PrintInfo( "Total time: %s" % MiscUtil.GetFormattedElapsedTime(WallClockTime, ProcessorTime))
def InitializeWorkerProcess(*EncodedArgs): """Initialize data for a worker process.""" global Options, OptionsInfo MiscUtil.PrintInfo("Starting process (PID: %s)..." % os.getpid()) # Decode Options and OptionInfo... Options = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[0]) OptionsInfo = MiscUtil.ObjectFromBase64EncodedString(EncodedArgs[1]) # Decode RefMol... OptionsInfo["RefMol"] = RDKitUtil.MolFromBase64EncodedMolString(OptionsInfo["EncodedRefMol"])
def RetrieveChEMBLFiltersInfo(): """Retrieve information for ChEMBL filters.""" MayaChemToolsDataDir = MiscUtil.GetMayaChemToolsLibDataPath() ChEMBLFiltersFilePath = os.path.join(MayaChemToolsDataDir, "ChEMBLFilters.csv") MiscUtil.PrintInfo("\nRetrieving ChEMBL alerts SMARTS patterns from file %s" % (ChEMBLFiltersFilePath)) Delimiter = ',' QuoteChar = '"' IgnoreHeaderLine = True FilterLinesWords = MiscUtil.GetTextLinesWords(ChEMBLFiltersFilePath, Delimiter, QuoteChar, IgnoreHeaderLine) ChEMBLFiltersMap = {} ChEMBLFiltersMap["FilterTypes"] = [] ChEMBLFiltersMap["ID"] = {} ChEMBLFiltersMap["SMARTS"] = {} for LineWords in FilterLinesWords: FilterType = LineWords[0] ID = LineWords[1] SMARTS = LineWords[2] if not FilterType in ChEMBLFiltersMap["FilterTypes"]: ChEMBLFiltersMap["FilterTypes"].append(FilterType) ChEMBLFiltersMap["ID"][FilterType] = [] ChEMBLFiltersMap["SMARTS"][FilterType] = [] ChEMBLFiltersMap["ID"][FilterType].append(ID) ChEMBLFiltersMap["SMARTS"][FilterType].append(SMARTS) OptionsInfo["ChEMBLFiltersMap"] = ChEMBLFiltersMap MiscUtil.PrintInfo("\nTotal number alerts: %d" % len(FilterLinesWords)) MiscUtil.PrintInfo("Number of filter family types: %d\nFilter familty types: %s\n" % (len(ChEMBLFiltersMap["FilterTypes"]), ", ".join(ChEMBLFiltersMap["FilterTypes"]))) for FilterType in ChEMBLFiltersMap["FilterTypes"]: MiscUtil.PrintInfo("Filter family type: %s; Number of alerts: %d" % (FilterType, len(ChEMBLFiltersMap["ID"][FilterType]))) MiscUtil.PrintInfo("")
def ProcessOptions(): """Process and validate command line arguments and options""" MiscUtil.PrintInfo("Processing options...") # Validate options... ValidateOptions() OptionsInfo["Infile"] = Options["--infile"] OptionsInfo["InfileParams"] = MiscUtil.ProcessOptionInfileParameters( "--infileParams", Options["--infileParams"], Options["--infile"]) OptionsInfo["Outfile"] = Options["--outfile"] OptionsInfo["OutfileParams"] = MiscUtil.ProcessOptionOutfileParameters( "--outfileParams", Options["--outfileParams"]) OptionsInfo["Overwrite"] = Options["--overwrite"] if re.match("^UFF$", Options["--forceField"], re.I): ForceField = "UFF" UseUFF = True UseMMFF = False elif re.match("^MMFF$", Options["--forceField"], re.I): ForceField = "MMFF" UseUFF = False UseMMFF = True else: MiscUtil.PrintError( "The value, %s, specified for \"--forceField\" is not supported." % (Options["--forceField"], )) MMFFVariant = "MMFF94" if re.match( "^MMFF94$", Options["--forceFieldMMFFVariant"], re.I) else "MMFF94s" OptionsInfo["ForceField"] = ForceField OptionsInfo["MMFFVariant"] = MMFFVariant OptionsInfo["UseMMFF"] = UseMMFF OptionsInfo["UseUFF"] = UseUFF if UseMMFF: OptionsInfo["EnergyLabel"] = "%s_Energy" % MMFFVariant else: OptionsInfo["EnergyLabel"] = "%s_Energy" % ForceField OptionsInfo["MPMode"] = True if re.match("^yes$", Options["--mp"], re.I) else False OptionsInfo["MPParams"] = MiscUtil.ProcessOptionMultiprocessingParameters( "--mpParams", Options["--mpParams"]) OptionsInfo["QuietMode"] = True if re.match("^yes$", Options["--quiet"], re.I) else False
def ProcessOptions(): """Process and validate command line arguments and options""" MiscUtil.PrintInfo("Processing options...") # Validate options... ValidateOptions() OptionsInfo["Autocorr2DExclude"] = True if not re.match("^Yes$", Options["--autocorr2DExclude"], re.I): OptionsInfo["Autocorr2DExclude"] = False OptionsInfo["FragmentCount"] = True if not re.match("^Yes$", Options["--fragmentCount"], re.I): OptionsInfo["FragmentCount"] = False OptionsInfo["DescriptorNames"] = Options["--descriptorNames"] OptionsInfo["Mode"] = Options["--mode"] OptionsInfo["Infile"] = Options["--infile"] OptionsInfo["InfileParams"] = MiscUtil.ProcessOptionInfileParameters( "--infileParams", Options["--infileParams"], Options["--infile"]) OptionsInfo["Outfile"] = Options["--outfile"] OptionsInfo["OutfileParams"] = MiscUtil.ProcessOptionOutfileParameters( "--outfileParams", Options["--outfileParams"], Options["--infile"], Options["--outfile"]) OptionsInfo["Overwrite"] = Options["--overwrite"] TextOutFileMode = False TextOutFileDelim = "" if MiscUtil.CheckFileExt(Options["--outfile"], "csv"): TextOutFileMode = True TextOutFileDelim = "," elif MiscUtil.CheckFileExt(Options["--outfile"], "tsv txt"): TextOutFileMode = True TextOutFileDelim = "\t" OptionsInfo["TextOutFileMode"] = TextOutFileMode OptionsInfo["TextOutFileDelim"] = TextOutFileDelim OptionsInfo["MPMode"] = True if re.match("^yes$", Options["--mp"], re.I) else False OptionsInfo["MPParams"] = MiscUtil.ProcessOptionMultiprocessingParameters( "--mpParams", Options["--mpParams"]) OptionsInfo["Precision"] = int(Options["--precision"]) OptionsInfo["SMILESOut"] = False if re.match("^Yes$", Options["--smilesOut"], re.I): OptionsInfo["SMILESOut"] = True