Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions pyprophet/cli/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,13 @@ class GlobalLogLevelGroup(click.Group):

def invoke(self, ctx):
log_level = ctx.params.get("log_level", "INFO").upper()
header = setup_logger(log_level=log_level)
ctx.obj = {"LOG_LEVEL": log_level, "LOG_HEADER": header}
log_colorize = ctx.params.get("log_colorize", True)
header = setup_logger(log_level=log_level, log_colorize=log_colorize)
ctx.obj = {
"LOG_LEVEL": log_level,
"LOG_HEADER": header,
"LOG_COLORIZE": log_colorize,
}
return super().invoke(ctx)


Expand Down Expand Up @@ -274,9 +279,9 @@ def get_execution_context():
return " ".join([sys.executable] + sys.argv)


def setup_logger(log_level):
def setup_logger(log_level, log_colorize):
def formatter(record):
if log_level != "info":
if log_level.lower() != "info":
# Format with module, function, and line number
mod_func_line = f"{record['name']}::{record['function']}:{record['line']}"
return (
Expand Down Expand Up @@ -319,7 +324,7 @@ def formatter(record):

# Main console logger
# logger.remove() # Remove default logger
logger.add(sys.stdout, colorize=True, format=formatter, level=log_level)
logger.add(sys.stdout, colorize=log_colorize, format=formatter, level=log_level)

_LOGGER_INITIALIZED = True

Expand Down
58 changes: 41 additions & 17 deletions pyprophet/io/ipf/osw.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,25 +307,49 @@ def _fetch_alignment_features_duckdb(self, con):
f"Perform feature alignment using ARYCAL, and apply scoring to alignment-level data before running IPF.\nTable Info:\n{self._fetch_tables_duckdb(con)}"
)

subquery = """
SELECT
FEATURE_ID,
MIN(PEP) AS pep
FROM osw.SCORE_ALIGNMENT
GROUP BY FEATURE_ID
"""
query = f"""
SELECT
DENSE_RANK() OVER (ORDER BY fma.PRECURSOR_ID, fma.ALIGNMENT_ID) AS ALIGNMENT_GROUP_ID,
fma.ALIGNED_FEATURE_ID AS FEATURE_ID
FROM osw.FEATURE_MS2_ALIGNMENT AS fma
JOIN (
{subquery}
SELECT
DENSE_RANK() OVER (ORDER BY merged.PRECURSOR_ID, merged.ALIGNMENT_ID) AS ALIGNMENT_GROUP_ID,
merged.ALIGNMENT_ID,
merged.FEATURE_ID,
merged.PRECURSOR_ID,
merged.FEATURE_TYPE
FROM (
SELECT DISTINCT
fma.ALIGNMENT_ID,
fma.REFERENCE_FEATURE_ID AS FEATURE_ID,
fma.PRECURSOR_ID,
'REFERENCE' AS FEATURE_TYPE
FROM osw.FEATURE_MS2_ALIGNMENT AS fma
WHERE fma.LABEL = 1
AND fma.REFERENCE_FEATURE_ID != fma.ALIGNED_FEATURE_ID

UNION

SELECT DISTINCT
fma.ALIGNMENT_ID,
fma.ALIGNED_FEATURE_ID AS FEATURE_ID,
fma.PRECURSOR_ID,
'QUERY' AS FEATURE_TYPE
FROM osw.FEATURE_MS2_ALIGNMENT AS fma
WHERE fma.LABEL = 1
AND fma.REFERENCE_FEATURE_ID != fma.ALIGNED_FEATURE_ID
) AS merged
LEFT JOIN (
SELECT
FEATURE_ID,
MIN(PEP) AS pep
FROM osw.SCORE_ALIGNMENT
WHERE PEP <= {pep_threshold}
GROUP BY FEATURE_ID
) AS sa
ON sa.FEATURE_ID = fma.ALIGNED_FEATURE_ID
WHERE fma.LABEL = 1
AND sa.pep < {pep_threshold}
ORDER BY ALIGNMENT_GROUP_ID
ON merged.FEATURE_ID = sa.FEATURE_ID
ORDER BY
ALIGNMENT_GROUP_ID,
CASE merged.FEATURE_TYPE
WHEN 'REFERENCE' THEN 0
WHEN 'QUERY' THEN 1
END;
"""

df = con.execute(query).fetchdf()
Expand Down
7 changes: 6 additions & 1 deletion pyprophet/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,13 @@ def profile(fun):
),
help="Set global logging level.",
)
@click.option(
"--log-colorize/--no-log-colorize",
default=True,
help="Turn on/off colorized logging output.",
)
@click.pass_context
def cli(ctx, log_level):
def cli(ctx, log_level, log_colorize):
"""
PyProphet: Semi-supervised learning and scoring of OpenSWATH results.

Expand Down