Subject: Inquiry About Favorable Contacts and Display Methods in ChimeraX
Dear ChimeraX Developers,
My name is Kenshiro Tabata. I hope this email finds you well. I am currently using ChimeraX to analyze the effects of point mutations on protein structure, particularly in cases where a
larger side chain (e.g., methionine) is replaced by a smaller one (e.g., valine). In such cases, I expect that
interactions with the opposing amino acids may be reduced due to the decreased side-chain volume. To investigate this, I would like to ask for your guidance regarding the interpretation and visualization of favorable contacts.
1) Understanding Favorable Contacts
I understand that the contacts
command identifies all types of interactions, whereas the
clashes
command detects only unfavorable interactions. Based on this, I interpreted the
positive VDW overlap as indicating unfavorable (repulsive) interactions, while an
overlap between 0 and -0.4 represents favorable (attractive) interactions.
Could you confirm if this understanding is correct?
2) Best Approach for Displaying Only Favorable Contacts
To analyze how the mutation affects interactions, I would like to display only favorable contacts. Below is the approach I have considered:
Proposed Approach
-
Retrieve all interactions (favorable, neutral, and unfavorable) using the
contacts
command
contacts overlapCutoff -0.4 saveFile all_contacts.txt
-
Retrieve only neutral and unfavorable interactions
contacts overlapCutoff 0 saveFile non_favorable_contacts.txt
-
Compute the difference between these two sets using Python, extract only favorable contacts, and format them into a ChimeraX pseudobond file
# File paths
all_contacts_path = "all_contacts.txt"
non_favorable_contacts_path = "non_favorable_contacts.txt"
favorable_contacts_path = "favorable_contacts.pb"
# Read files
with open(all_contacts_path, "r") as f:
all_contacts = set(f.readlines())
with open(non_favorable_contacts_path, "r") as f:
non_favorable_contacts = set(f.readlines())
# Extract favorable contacts
favorable_contacts = all_contacts - non_favorable_contacts
# Convert to ChimeraX pseudobond file format
with open(favorable_contacts_path, "w") as f:
f.write("; Pseudobond file for favorable contacts\n")
f.write("; radius = 0.1\n; color = green\n; dashes = 6\n")
for line in favorable_contacts:
parts = line.strip().split()
if len(parts) >= 4:
atom1 = f"/{parts[0]}:{parts[1]}@{parts[2]}"
atom2 = f"/{parts[3]}:{parts[4]}@{parts[5]}"
f.write(f"{atom1} {atom2}\n")
-
Load the extracted favorable contacts into ChimeraX for visualization
open favorable_contacts.pb
Would this be an appropriate approach? Alternatively, is there a simpler or more precise way to achieve this in ChimeraX?
I appreciate your time and assistance, and I look forward to your advice.
Best regards,
Kenshiro Tabata