def SetupPlotTypesOutfiles():
    """Setup output file names for plot types """

    OptionsInfo["OutfilesList"] = []
    OptionsInfo["OutfilesList"].append(OptionsInfo["Outfile"])

    OptionsInfo["PlotTypesInfo"]["Outfiles"] = {}
    for PlotType in OptionsInfo["PlotTypesInfo"]["Types"]:
        OptionsInfo["PlotTypesInfo"]["Outfiles"][PlotType] = None

    if not OptionsInfo["MultipleOutFiles"]:
        return

    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Outfile"])
    OutfileRoot = FileName
    OutfileExt = FileExt

    for PlotType in OptionsInfo["PlotTypesInfo"]["Types"]:
        PlotOutfile = "%s_%s.%s" % (OutfileRoot, PlotType, OutfileExt)
        if os.path.exists(PlotOutfile):
            if not OptionsInfo["Overwrite"]:
                MiscUtil.PrintError(
                    "The plot output file, %s, already exist. Use option \"--ov\" or \"--overwrite\" and try again.\n"
                    % (PlotOutfile))

        OptionsInfo["PlotTypesInfo"]["Outfiles"][PlotType] = PlotOutfile
        OptionsInfo["OutfilesList"].append(PlotOutfile)
示例#2
0
def SetupCategoryOutfiles():
    """Setup output file names for different categories of phi and psi angles. """

    # Initialize...
    OptionsInfo["OutfilesList"] = []
    OptionsInfo["OutfilesList"].append(OptionsInfo["Outfile"])
    
    OptionsInfo["Categories"] = ["General", "Glycine", "Proline", "PreProline"]
    OptionsInfo["CategoriesOutfiles"] = {}
    for Category in OptionsInfo["Categories"]:
        OptionsInfo["CategoriesOutfiles"][Category] = None

    if not OptionsInfo["MultipleOutFiles"]:
        return

    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Outfile"])
    OutfileRoot = FileName
    OutfileExt = FileExt
    
    for Category in OptionsInfo["Categories"]:
        CategoryOutfile = "%s_%s.%s" % (OutfileRoot, Category, OutfileExt)
        if os.path.exists(CategoryOutfile):
            if not OptionsInfo["Overwrite"]:
                MiscUtil.PrintError("The category output file, %s, already exist. Use option \"--ov\" or \"--overwrite\" and try again.\n" % (CategoryOutfile))
                
        OptionsInfo["CategoriesOutfiles"][Category] = CategoryOutfile
        OptionsInfo["OutfilesList"].append(CategoryOutfile)
示例#3
0
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"], Options["--infile"], Options["--outfile"])
    
    OptionsInfo["Overwrite"] = Options["--overwrite"]

    OptionsInfo["CountMode"] = False
    if re.match("^count$", Options["--mode"], re.I):
        OptionsInfo["CountMode"] = True
    
    # Setup outfile for writing out duplicates...
    OptionsInfo["DuplicatesOutfile"] = ""
    if not OptionsInfo["CountMode"] :
        FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Outfile"])
        OptionsInfo["DuplicatesOutfile"] = "%sDuplicates.%s" % (FileName, FileExt)

    OptionsInfo["UseChirality"] = False
    if re.match("^yes$", Options["--useChirality"], re.I):
        OptionsInfo["UseChirality"] = True
示例#4
0
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"], Options["--infile"],
        Options["--outfile"])

    OptionsInfo["Overwrite"] = Options["--overwrite"]

    OptionsInfo["CountMode"] = True if re.match("^count$", Options["--mode"],
                                                re.I) else False

    # Setup outfile for writing out molecule number for invalid molecules...
    OptionsInfo["InvalidMolsOutfile"] = ""
    if not OptionsInfo["CountMode"]:
        FileDir, FileName, FileExt = MiscUtil.ParseFileName(
            OptionsInfo["Outfile"])
        OptionsInfo["InvalidMolsOutfile"] = "%sInvalidMols.csv" % (FileName)
示例#5
0
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"], Options["--infile"], Options["--outfile"])
    
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(Options["--outfile"])
    OutfileFiltered = "%s_Filtered.%s" % (FileName, FileExt)
    OptionsInfo["OutfileFiltered"] = OutfileFiltered
    OptionsInfo["OutfileFilteredMode"] = True if re.match("^yes$", Options["--outfileFiltered"], re.I) else False
    
    OptionsInfo["Overwrite"] = Options["--overwrite"]

    OptionsInfo["CountMode"] = True if re.match("^count$", Options["--mode"], re.I) else False
    OptionsInfo["NegateMatch"] = True if re.match("^yes$", Options["--negate"], re.I) else False

    OptionsInfo["MPMode"] = True if re.match("^yes$", Options["--mp"], re.I) else False
    OptionsInfo["MPParams"] = MiscUtil.ProcessOptionMultiprocessingParameters("--mpParams", Options["--mpParams"])
    
    OptionsInfo["AlertsMode"] = Options["--alertsMode"]
    ProcessChEMBLAlertsMode()
def RetrieveRefFileInfo():
    """Retrieve information for ref file."""

    RefFileInfo = {}

    RefFile = OptionsInfo["RefFileName"]

    FileDir, FileName, FileExt = MiscUtil.ParseFileName(RefFile)
    RefFileRoot = FileName

    if re.match("^FirstInputFile$", OptionsInfo["AlignRefFile"], re.I):
        ChainIDs = OptionsInfo["InfilesInfo"]["ChainIDs"][0]
    else:
        MiscUtil.PrintInfo(
            "\nRetrieving chains information for alignment reference file %s..."
            % RefFile)
        ChainIDs = RetrieveChainIDs(RefFile, RefFileRoot)
        if not len(ChainIDs):
            if re.match("^FirstChain$", OptionsInfo["AlignMode"], re.I):
                MiscUtil.PrintError(
                    "The align mode, %s, can't be used for aligning chains: No non-empty chain IDs found in input file."
                    % (OptionsInfo["AlignMode"]))

    RefFileInfo["RefFileName"] = RefFile
    RefFileInfo["RefFileRoot"] = RefFileRoot
    RefFileInfo["PyMOLObjectName"] = "AlignRef_%s" % RefFileRoot
    RefFileInfo["ChainIDs"] = ChainIDs

    OptionsInfo["RefFileInfo"] = RefFileInfo
def ListFileInfo(Infile):
    """List information for macromolecules in a file."""

    FileDir, FileName, FileExt = MiscUtil.ParseFileName(Infile)
    MolName = FileName

    # Load infile...
    pymol.cmd.load(Infile, MolName)

    ChainIDs = PyMOLUtil.GetChains(MolName)
    ListHeaderInfo(Infile)

    ListChainsInfo(MolName, ChainIDs)
    ListChainsResiduesInfo(MolName, ChainIDs)

    ListLigandsInfo(MolName, ChainIDs)
    ListSolventsInfo(MolName, ChainIDs)
    ListInorganicsInfo(MolName, ChainIDs)

    ListPocketsInfo(MolName, ChainIDs)

    ListInterfaceResiduesInfo(MolName, ChainIDs)
    ListSurfaceResiduesInfo(MolName, ChainIDs)
    ListPhiPsiAnglesInfo(MolName, ChainIDs)

    ListBoundingBoxInfo(MolName)

    # Delete infile object...
    pymol.cmd.delete(MolName)

    ListFileSizeAndModificationInfo(Infile)
def ProcessOptions():
    """Process and validate command line arguments and options"""

    MiscUtil.PrintInfo("Processing options...")

    # Validate options...
    ValidateOptions()

    OptionsInfo["Infile"] = Options["--infile"]
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Infile"])
    OptionsInfo["InfileRoot"] = FileName

    OptionsInfo["Outfile"] = Options["--outfile"]
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Outfile"])
    OptionsInfo["OutfileRoot"] = FileName

    OptionsInfo["Overwrite"] = Options["--overwrite"]

    OptionsInfo["OutDelim"] = " "
    if MiscUtil.CheckFileExt(OptionsInfo["Outfile"], "csv"):
        OptionsInfo["OutDelim"] = ","
    elif MiscUtil.CheckFileExt(OptionsInfo["Outfile"], "tsv txt"):
        OptionsInfo["OutDelim"] = "\t"
    else:
        MiscUtil.PrintError(
            "The file name specified , %s, for option \"--outfile\" is not valid. Supported file formats: csv tsv txt\n"
            % (OptionsInfo["Outfile"]))

    OptionsInfo["OutMode"] = Options["--outMode"]
    OptionsInfo["MultipleOutFiles"] = True if re.match(
        "^MultipleFiles$", OptionsInfo["OutMode"], re.I) else False

    OptionsInfo["OutChainID"] = True if re.match(
        "^Yes$", Options["--outChainID"], re.I) else False
    OptionsInfo["OutCategory"] = True if re.match(
        "^Yes$", Options["--outCategory"], re.I) else False

    OptionsInfo["Overwrite"] = Options["--overwrite"]
    OptionsInfo["Precision"] = int(Options["--precision"])

    RetrieveInfileInfo()

    OptionsInfo["ChainIDs"] = Options["--chainIDs"]
    ProcessChainIDs()

    SetupCategoryOutfiles()
示例#9
0
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 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"], Options["--infile"],
        Options["--outfile"])

    OptionsInfo["Overwrite"] = Options["--overwrite"]

    OptionsInfo["Mode"] = Options["--mode"]
    OptionsInfo["UseGraphFrameworks"] = False
    if re.match("^GraphFrameworks$", OptionsInfo["Mode"], re.I):
        OptionsInfo["UseGraphFrameworks"] = True

    OptionsInfo["RemoveDuplicates"] = Options["--removeDuplicates"]
    OptionsInfo["RemoveDuplicateFrameworks"] = False
    if re.match("^Yes$", OptionsInfo["RemoveDuplicates"], re.I):
        OptionsInfo["RemoveDuplicateFrameworks"] = True

    # Setup outfile for writing out duplicates...
    OptionsInfo["DuplicatesOutfile"] = ""
    if OptionsInfo["RemoveDuplicateFrameworks"]:
        FileDir, FileName, FileExt = MiscUtil.ParseFileName(
            OptionsInfo["Outfile"])
        OptionsInfo["DuplicatesOutfile"] = "%sDuplicates.%s" % (FileName,
                                                                FileExt)

    OptionsInfo["Sort"] = Options["--sort"]
    OptionsInfo["SortFrameworks"] = False
    if re.match("^Yes$", OptionsInfo["Sort"], re.I):
        OptionsInfo["SortFrameworks"] = True

    OptionsInfo["SortOrder"] = Options["--sortOrder"]
    OptionsInfo["DescendingSortOrder"] = False
    if re.match("^Descending$", OptionsInfo["SortOrder"], re.I):
        OptionsInfo["DescendingSortOrder"] = True

    OptionsInfo["UseChirality"] = False
    if re.match("^yes$", Options["--useChirality"], re.I):
        OptionsInfo["UseChirality"] = True
示例#11
0
def RetrieveInfilesInfo(InfilesMode):
    """Retrieve information for input files."""

    if re.match("^ProbeFiles$", InfilesMode, re.I):
        MiscUtil.PrintInfo("Retrieving information for probe files...")
        InfilesNames = OptionsInfo["ProbeFilesNames"]
        NameSuffix = "_Probe"
    elif re.match("^RefFiles$", InfilesMode, re.I):
        MiscUtil.PrintInfo("Retrieving information for reference files...")
        InfilesNames = OptionsInfo["RefFilesNames"]
        NameSuffix = "_Ref"
    else:
        MiscUtil.PrintError("Internal Error: Unknown infiles mode: %s" %
                            InfilesMode)

    InfilesInfo = {}

    InfilesInfo["FilesNames"] = []
    InfilesInfo["FilesRoots"] = []
    InfilesInfo["ChainIDs"] = []
    InfilesInfo["PyMOLObjectNames"] = []

    for Infile in InfilesNames:
        MiscUtil.PrintInfo(
            "\nRetrieving chains information for input file %s..." % Infile)

        FileDir, FileName, FileExt = MiscUtil.ParseFileName(Infile)
        InfileRoot = FileName

        ChainIDs = RetrieveChainIDs(Infile, InfileRoot)
        if not len(ChainIDs):
            if re.match("^FirstChain$", OptionsInfo["AlignMode"], re.I):
                MiscUtil.PrintError(
                    "The align mode, %s, can't be used for calculating RMSD: No non-empty chain IDs found in input file."
                    % (OptionsInfo["AlignMode"]))

        InfilesInfo["FilesNames"].append(Infile)
        InfilesInfo["FilesRoots"].append(InfileRoot)
        InfilesInfo["ChainIDs"].append(ChainIDs)

        Name = "%s%s" % (InfileRoot, NameSuffix)
        InfilesInfo["PyMOLObjectNames"].append(Name)

    if re.match("^ProbeFiles$", InfilesMode, re.I):
        OptionsInfo["ProbeFilesInfo"] = InfilesInfo
    elif re.match("^RefFiles$", InfilesMode, re.I):
        OptionsInfo["RefFilesInfo"] = InfilesInfo
示例#12
0
def RetrieveInfilesInfo():
    """Retrieve information for input files."""

    InfilesInfo = {}

    InfilesInfo["InfilesNames"] = []
    InfilesInfo["InfilesRoots"] = []
    InfilesInfo["ChainIDs"] = []
    InfilesInfo["PyMOLObjectNames"] = []

    InfilesInfo["OutfilesNames"] = []

    OutSuffix = OptionsInfo["OutSuffix"]

    for Infile in OptionsInfo["InfilesNames"]:
        MiscUtil.PrintInfo(
            "\nRetrieving chains information for input file %s..." % Infile)

        FileDir, FileName, FileExt = MiscUtil.ParseFileName(Infile)
        InfileRoot = FileName

        ChainIDs = RetrieveChainIDs(Infile, InfileRoot)
        if not len(ChainIDs):
            if re.match("^FirstChain$", OptionsInfo["AlignMode"], re.I):
                MiscUtil.PrintError(
                    "The align mode, %s, can't be used for aligning chains: No non-empty chain IDs found in input file."
                    % (OptionsInfo["AlignMode"]))

        InfilesInfo["InfilesNames"].append(Infile)
        InfilesInfo["InfilesRoots"].append(InfileRoot)
        InfilesInfo["ChainIDs"].append(ChainIDs)

        InfilesInfo["PyMOLObjectNames"].append(InfileRoot)

        # Setup outfile name...
        Outfile = "%s%s.pdb" % (InfileRoot, OutSuffix)
        InfilesInfo["OutfilesNames"].append(Outfile)
        if os.path.exists(Outfile):
            if not OptionsInfo["Overwrite"]:
                MiscUtil.PrintError(
                    "\nThe output file, %s, already exist. Use option \"--ov\" or \"--overwrite\" and try again.\n"
                    % (Outfile))

    OptionsInfo["InfilesInfo"] = InfilesInfo
def RetrieveInfilesInfo():
    """Retrieve information for input files."""

    InfilesInfo = {}
    
    InfilesInfo["InfilesNames"] = []
    InfilesInfo["InfilesRoots"] = []
    InfilesInfo["ChainsAndLigandsInfo"] = []
    
    for Infile in OptionsInfo["InfilesNames"]:
        FileDir, FileName, FileExt = MiscUtil.ParseFileName(Infile)
        InfileRoot = FileName
        ChainsAndLigandInfo = PyMOLUtil.GetChainsAndLigandsInfo(Infile, InfileRoot)
        
        InfilesInfo["InfilesNames"].append(Infile)
        InfilesInfo["InfilesRoots"].append(InfileRoot)
        InfilesInfo["ChainsAndLigandsInfo"].append(ChainsAndLigandInfo)
    
    OptionsInfo["InfilesInfo"] = InfilesInfo
def ProcessOptions():
    """Process and validate command line arguments and options"""

    MiscUtil.PrintInfo("Processing options...")

    # Validate options...
    ValidateOptions()

    OptionsInfo["Mode"] = Options["--mode"]
    OptionsInfo["ChainsMode"] = False
    if re.match("^Chains$", OptionsInfo["Mode"], re.I):
        OptionsInfo["ChainsMode"] = True

    OptionsInfo["LigandFileFormat"] = Options["--ligandFileFormat"]
    LigandFileExt = "mol"
    if re.match("^PDB$", OptionsInfo["LigandFileFormat"], re.I):
        LigandFileExt = "pdb"
    elif re.match("^(SD|SDF)$", OptionsInfo["LigandFileFormat"], re.I):
        LigandFileExt = "sdf"
    elif re.match("^MOL$", OptionsInfo["LigandFileFormat"], re.I):
        LigandFileExt = "mol"
    OptionsInfo["LigandFileExt"] = LigandFileExt

    OptionsInfo["KeepInorganics"] = True if re.match(
        "^Yes$", Options["--keepInorganics"], re.I) else False
    OptionsInfo["KeepSolvents"] = True if re.match(
        "^Yes$", Options["--keepSolvents"], re.I) else False

    OptionsInfo["Infile"] = Options["--infile"]
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Infile"])
    OptionsInfo["InfileRoot"] = FileName

    OptionsInfo["Overwrite"] = Options["--overwrite"]

    OptionsInfo["ChainIDs"] = Options["--chainIDs"]
    OptionsInfo["LigandIDs"] = Options["--ligandIDs"]
    ProcessChainAndLigandIDs()

    SetupChainAndLigandOutfiles()
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))
示例#16
0
def ProcessOptions():
    """Process and validate command line arguments and options"""
    
    MiscUtil.PrintInfo("Processing options...")
    
    # Validate options...
    ValidateOptions()

    OptionsInfo["Infile"] = Options["--infile"]
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Infile"])
    OptionsInfo["InfileRoot"] = FileName

    OptionsInfo["Overwrite"] = Options["--overwrite"]
    OptionsInfo["Outfile"] = Options["--outfile"]

    RetrieveChainsIDs()
    
    Mutations = Options["--mutations"]
    if re.match("^None$", Mutations, re.I):
        MiscUtil.PrintError("No mutations specified using \"-m, --mutations\" option.")
    
    OptionsInfo["Mutations"] = Options["--mutations"]
    ProcessSpecifiedMutations()
def ProcessOptions():
    """Process and validate command line arguments and options"""
    
    MiscUtil.PrintInfo("Processing options...")
    
    # Validate options...
    ValidateOptions()
    
    OptionsInfo["ButinaSimilarityCutoff"] = float(Options["--butinaSimilarityCutoff"])
    OptionsInfo["ButinaReordering"] = False
    if re.match("^Yes$", Options["--butinaReordering"], re.I):
        OptionsInfo["ButinaReordering"] = True
    
    OptionsInfo["Fingerprints"] = Options["--fingerprints"]
    OptionsInfo["FingerprintsType"] = Options["--fingerprintsType"]
    
    OptionsInfo["ClusteringMethod"] = Options["--clusteringMethod"]
    ProcessClusteringMethodParameter()

    OptionsInfo["NumClusters"] = int(Options["--numClusters"])
    
    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["OutFileMode"] = Options["--outfileMode"]
    SingleOutFileMode = True
    if not re.match("^SingleFile$", Options["--outfileMode"], re.I):
        SingleOutFileMode = False
    OptionsInfo["SingleOutFileMode"] = SingleOutFileMode
    
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(Options["--outfile"])
    OptionsInfo["OutfileBasename"] = FileName
    OptionsInfo["OutfileExt"] = FileExt

    TextOutFileMode = False
    TextOutFileDelim = ""
    TextOutFileTitleLine = True
    
    if MiscUtil.CheckFileExt(Options["--outfile"], "csv"):
        TextOutFileMode = True
        TextOutFileDelim = ","
    elif MiscUtil.CheckFileExt(Options["--outfile"], "tsv txt"):
        TextOutFileMode = True
        TextOutFileDelim = "\t"
    elif MiscUtil.CheckFileExt(Options["--outfile"], "smi"):
        TextOutFileMode = True
        TextOutFileDelim = OptionsInfo["OutfileParams"]["SMILESDelimiter"]
        TextOutFileTitleLine = OptionsInfo["OutfileParams"]["SMILESTitleLine"]
        
    OptionsInfo["TextOutFileMode"] = TextOutFileMode
    OptionsInfo["TextOutFileDelim"] = TextOutFileDelim
    OptionsInfo["TextOutFileTitleLine"] = TextOutFileTitleLine
    
    OptionsInfo["SimilarityMetric"] = Options["--similarityMetric"]
    ProcessSimilarityMetricParameter()

    OptionsInfo["ParamsFingerprints"] = Options["--paramsFingerprints"]
    ProcessFingerprintsParameters()
def ProcessOptions():
    """Process and validate command line arguments and options"""

    MiscUtil.PrintInfo("Processing options...")

    # Validate options...
    ValidateOptions()

    OptionsInfo["CoreScaffold"] = Options["--coreScaffold"]

    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"])

    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

    TextOutQuote = False
    if re.match("^auto$", Options["--quote"], re.I):
        if MiscUtil.CheckFileExt(Options["--outfile"], "csv"):
            TextOutQuote = True
    else:
        if re.match("^yes$", Options["--quote"], re.I):
            TextOutQuote = True
    OptionsInfo["TextOutQuote"] = TextOutQuote

    OptionsInfo["Overwrite"] = Options["--overwrite"]

    RemoveUnmatchedMode = False
    UnmatchedOutfile = None
    if re.match("^yes$", Options["--removeUnmatched"], re.I):
        RemoveUnmatchedMode = True
        FileDir, FileName, FileExt = MiscUtil.ParseFileName(
            OptionsInfo["Outfile"])
        UnmatchedOutfile = "%sUnmatched.%s" % (FileName, FileExt)
    OptionsInfo["RemoveUnmatchedMode"] = RemoveUnmatchedMode
    OptionsInfo["UnmatchedOutfile"] = UnmatchedOutfile

    OptionsInfo["SpecifiedDecompositionParams"] = Options[
        "--decompositionParams"]
    ProcessDecompositionParameters()

    OptionsInfo["SpecifiedMCSParams"] = Options["--mcsParams"]
    ProcessMCSParameters()

    SMARTSOrSMILESCoreScaffold = ""
    SMARTSOrSMILESCoreScaffoldList = []
    if not re.match("^none$", Options["--smartsOrSmilesCoreScaffold"],
                    re.I) or len(Options["--smartsOrSmilesCoreScaffold"]):
        if re.match("^(BySMARTS|BySMILES)$", Options["--coreScaffold"], re.I):
            SMARTSOrSMILESCoreScaffold = re.sub(
                " ", "", Options["--smartsOrSmilesCoreScaffold"])
            if not SMARTSOrSMILESCoreScaffold:
                MiscUtil.PrintError(
                    "A non empty value must be specified for \"-s, --smartsOrSmilesCoreScaffold\" during %s value of \"-c, --coreScaffold\" option "
                    % (Options["--coreScaffold"]))
            SMARTSOrSMILESCoreScaffoldList = SMARTSOrSMILESCoreScaffold.split(
                ",")
    OptionsInfo["SMARTSOrSMILESCoreScaffold"] = SMARTSOrSMILESCoreScaffold
    OptionsInfo[
        "SMARTSOrSMILESCoreScaffoldList"] = SMARTSOrSMILESCoreScaffoldList
def ProcessOptions():
    """Process and validate command line arguments and options"""

    MiscUtil.PrintInfo("Processing options...")

    # Validate options...
    ValidateOptions()

    OptionsInfo["OutMode"] = Options["--outMode"]
    OptionsInfo["MultipleOutFiles"] = True if re.match(
        "^MultipleFiles$", OptionsInfo["OutMode"], re.I) else False
    MultipleOutFiles = OptionsInfo["MultipleOutFiles"]

    OptionsInfo["FigDPI"] = int(Options["--figDPI"])

    FigSize = Options["--figSize"]
    Width = 6.4
    Height = 4.8 if MultipleOutFiles else 6.4

    if not re.match("^auto$", FigSize, re.I):
        FigSizeWords = FigSize.split(",")
        Width = float(FigSizeWords[0])
        Height = float(FigSizeWords[1])
    OptionsInfo["FigSize"] = FigSize
    OptionsInfo["FigWidth"] = Width
    OptionsInfo["FigHeight"] = Height

    OptionsInfo["FontFamily"] = Options["--fontFamily"]
    OptionsInfo["FontAxesSize"] = Options["--fontAxesSize"]
    OptionsInfo["FontAxesWeight"] = Options["--fontAxesWeight"]
    OptionsInfo["FontTicksSize"] = Options["--fontTicksSize"]
    OptionsInfo["FontTicksWeight"] = Options["--fontTicksWeight"]
    OptionsInfo["FontTitleSize"] = Options["--fontTitleSize"]
    OptionsInfo["FontTitleWeight"] = Options["--fontTitleWeight"]

    OptionsInfo["Greek"] = True if re.match("^Yes$", Options["--greek"],
                                            re.I) else False

    OptionsInfo["Grid"] = True if re.match("^Yes$", Options["--grid"],
                                           re.I) else False
    OptionsInfo["GridLineColor"] = Options["--gridLineColor"]
    OptionsInfo["GridLineStyle"] = Options["--gridLineStyle"]
    OptionsInfo["GridLineWidth"] = float(Options["--gridLineWidth"])

    OptionsInfo["Infile"] = Options["--infile"]
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Infile"])
    OptionsInfo["InfileRoot"] = FileName

    OptionsInfo["LevelsAndColorsScheme"] = Options["--levelsAndColorsScheme"]

    OptionsInfo["Outfile"] = Options["--outfile"]
    FileDir, FileName, FileExt = MiscUtil.ParseFileName(OptionsInfo["Outfile"])
    OptionsInfo["OutfileRoot"] = FileName

    OptionsInfo["Overwrite"] = Options["--overwrite"]
    OptionsInfo["Precision"] = int(Options["--precision"])

    OptionsInfo["ScatterMarkerColor"] = Options["--scatterMarkerColor"]
    OptionsInfo["ScatterMarkerSize"] = float(Options["--scatterMarkerSize"])
    OptionsInfo["ScatterMarkerStyle"] = Options["--scatterMarkerStyle"]

    TicksMajorInterval = 90 if MultipleOutFiles else 180
    if not re.match("^auto$", Options["--ticksMajorInterval"], re.I):
        TicksMajorInterval = int(Options["--ticksMajorInterval"])
    OptionsInfo["TicksMajorInterval"] = TicksMajorInterval

    OptionsInfo["TicksMinor"] = True if re.match(
        "^Yes$", Options["--ticksMinor"], re.I) else False
    TicksMinorInterval = 10 if MultipleOutFiles else 45
    if not re.match("^auto$", Options["--ticksMinorInterval"], re.I):
        TicksMinorInterval = int(Options["--ticksMinorInterval"])
    OptionsInfo["TicksMinorInterval"] = TicksMinorInterval

    RetrieveInfileInfo()
    OptionsInfo["ChainIDs"] = Options["--chainIDs"]

    ProcessChainIDs()

    OptionsInfo["LevelsAndColors"] = Options["--levelsAndColors"]
    SetupPlotsInfo()