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
  1. Retrieve all interactions (favorable, neutral, and unfavorable) using the contacts command
    contacts overlapCutoff -0.4 saveFile all_contacts.txt
  2. Retrieve only neutral and unfavorable interactions
    contacts overlapCutoff 0 saveFile non_favorable_contacts.txt
  3. 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")
  4. 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