From da02ce1a841b725cb5f29f6dab766e58b269c127 Mon Sep 17 00:00:00 2001 From: Majid Mosayebi Date: Wed, 25 Dec 2024 19:26:29 +0000 Subject: [PATCH 1/4] automatic detection of bfactor range for each object --- coloraf.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/coloraf.py b/coloraf.py index f631fbd..8f1a08e 100644 --- a/coloraf.py +++ b/coloraf.py @@ -1,29 +1,36 @@ -from pymol import cmd - - def coloraf(selection="all"): - """ AUTHOR Christian Balbin DESCRIPTION - Colors Alphafold structures by pLDDT + Colors structures by pLDDT, automatically detecting if values are in [0,1] or [0,100] range + Handles multiple objects independently USAGE coloraf sele PARAMETERS - sele (string) The name of the selection/object to color by pLDDT. Default: all """ - - cmd.color("blue", f"({selection}) and b > 90") - cmd.color("cyan", f"({selection}) and b < 90 and b > 70") - cmd.color("yellow", f"({selection}) and b < 70 and b > 50") - cmd.color("orange", f"({selection}) and b < 50") - + objects = set(cmd.get_object_list(selection)) + # Process each object separately + for obj in objects: + stored.b = [] + cmd.iterate(obj, "stored.b.append(b)") + max_bfactor = max(stored.b) + print(f"Object {obj}: Maximum B-factor = {max_bfactor:.3f}") + if max_bfactor <= 1.0: + cmd.color("blue", f"({obj}) and b > 0.90") + cmd.color("cyan", f"({obj}) and b < 0.90 and b > 0.70") + cmd.color("yellow", f"({obj}) and b < 0.70 and b > 0.50") + cmd.color("orange", f"({obj}) and b < 0.50") + else: + cmd.color("blue", f"({obj}) and b > 90") + cmd.color("cyan", f"({obj}) and b < 90 and b > 70") + cmd.color("yellow", f"({obj}) and b < 70 and b > 50") + cmd.color("orange", f"({obj}) and b < 50") cmd.extend("coloraf", coloraf) cmd.auto_arg[0]["coloraf"] = [cmd.object_sc, "object", ""] From 8411b907997dae68a3da9a330c3bf84eaf5e5e9d Mon Sep 17 00:00:00 2001 From: Majid Mosayebi Date: Wed, 25 Dec 2024 19:30:44 +0000 Subject: [PATCH 2/4] clean-up --- coloraf.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/coloraf.py b/coloraf.py index 8f1a08e..c08e4f7 100644 --- a/coloraf.py +++ b/coloraf.py @@ -1,3 +1,6 @@ +from pymol import cmd + + def coloraf(selection="all"): """ AUTHOR @@ -14,13 +17,13 @@ def coloraf(selection="all"): sele (string) The name of the selection/object to color by pLDDT. Default: all """ - objects = set(cmd.get_object_list(selection)) - # Process each object separately - for obj in objects: + for obj in set(cmd.get_object_list(selection)): + stored.b = [] cmd.iterate(obj, "stored.b.append(b)") max_bfactor = max(stored.b) print(f"Object {obj}: Maximum B-factor = {max_bfactor:.3f}") + if max_bfactor <= 1.0: cmd.color("blue", f"({obj}) and b > 0.90") cmd.color("cyan", f"({obj}) and b < 0.90 and b > 0.70") @@ -32,5 +35,6 @@ def coloraf(selection="all"): cmd.color("yellow", f"({obj}) and b < 70 and b > 50") cmd.color("orange", f"({obj}) and b < 50") + cmd.extend("coloraf", coloraf) cmd.auto_arg[0]["coloraf"] = [cmd.object_sc, "object", ""] From 22f54619b01c3fd3ffd46f3ba5a2aeefa2824856 Mon Sep 17 00:00:00 2001 From: Majid Mosayebi Date: Wed, 25 Dec 2024 21:53:15 +0000 Subject: [PATCH 3/4] clean-up --- coloraf.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/coloraf.py b/coloraf.py index c08e4f7..8c1767d 100644 --- a/coloraf.py +++ b/coloraf.py @@ -25,14 +25,14 @@ def coloraf(selection="all"): print(f"Object {obj}: Maximum B-factor = {max_bfactor:.3f}") if max_bfactor <= 1.0: - cmd.color("blue", f"({obj}) and b > 0.90") - cmd.color("cyan", f"({obj}) and b < 0.90 and b > 0.70") - cmd.color("yellow", f"({obj}) and b < 0.70 and b > 0.50") + cmd.color("blue", f"({obj}) and b >= 0.90") + cmd.color("cyan", f"({obj}) and b < 0.90 and b >= 0.70") + cmd.color("yellow", f"({obj}) and b < 0.70 and b >= 0.50") cmd.color("orange", f"({obj}) and b < 0.50") else: - cmd.color("blue", f"({obj}) and b > 90") - cmd.color("cyan", f"({obj}) and b < 90 and b > 70") - cmd.color("yellow", f"({obj}) and b < 70 and b > 50") + cmd.color("blue", f"({obj}) and b >= 90") + cmd.color("cyan", f"({obj}) and b < 90 and b >= 70") + cmd.color("yellow", f"({obj}) and b < 70 and b >= 50") cmd.color("orange", f"({obj}) and b < 50") From 973ebe8e14934df8d15b16af79cdda30e4527c32 Mon Sep 17 00:00:00 2001 From: Majid Mosayebi Date: Wed, 25 Dec 2024 23:48:54 +0000 Subject: [PATCH 4/4] fix conditions --- coloraf.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/coloraf.py b/coloraf.py index 8c1767d..dfd3d47 100644 --- a/coloraf.py +++ b/coloraf.py @@ -25,14 +25,14 @@ def coloraf(selection="all"): print(f"Object {obj}: Maximum B-factor = {max_bfactor:.3f}") if max_bfactor <= 1.0: - cmd.color("blue", f"({obj}) and b >= 0.90") - cmd.color("cyan", f"({obj}) and b < 0.90 and b >= 0.70") - cmd.color("yellow", f"({obj}) and b < 0.70 and b >= 0.50") + cmd.color("blue", f"({obj}) and (b > 0.90 or b = 0.90)") + cmd.color("cyan", f"({obj}) and ((b < 0.90 and b > 0.70) or b = 0.70)") + cmd.color("yellow", f"({obj}) and ((b < 0.70 and b > 0.50) or b = 0.50)") cmd.color("orange", f"({obj}) and b < 0.50") else: - cmd.color("blue", f"({obj}) and b >= 90") - cmd.color("cyan", f"({obj}) and b < 90 and b >= 70") - cmd.color("yellow", f"({obj}) and b < 70 and b >= 50") + cmd.color("blue", f"({obj}) and (b > 90 or b = 90)") + cmd.color("cyan", f"({obj}) and ((b < 90 and b > 70) or b = 70)") + cmd.color("yellow", f"({obj}) and ((b < 70 and b > 50) or b = 50)") cmd.color("orange", f"({obj}) and b < 50")