Skip to content

Introduction to Structural Biology

Structural biology is a branch of molecular biology, biochemistry, and biophysics concerned with the molecular structure of biological macromolecules, especially proteins and nucleic acids, how they acquire the structures they have, and how alterations in their structures affect their function.

Techniques in Structural Biology

X-ray Crystallography

Technique for determining atomic and molecular structure of crystals:

  • X-ray Diffraction: Specific diffraction patterns
  • Atomic Resolution: Visualization of individual atoms
  • 3D Structure: Accurate three-dimensional models
  • Limitations: Need for high-quality crystals

Nuclear Magnetic Resonance (NMR)

Spectroscopic technique that observes local magnetic fields:

  • Solution Structure: Proteins in native environment
  • Molecular Dynamics: Movement and flexibility
  • Interactions: Ligand and drug binding
  • Size: Limited to smaller proteins

Cryo-Electron Microscopy (Cryo-EM)

Method for high-resolution imaging of vitrified specimens:

  • High Resolution: Near-atomic structures
  • No Crystallization: Proteins in native state
  • Large Complexes: Macromolecular assemblies
  • Emerging Technology: Rapid advances in resolution

Relevance to Cancer

By determining the three-dimensional structure of oncogenic proteins, researchers can design drugs that bind to specific sites on the protein and inhibit its function.

Therapeutic Applications

  • Drug Design: Specific ligands for active sites
  • Targeted Therapies: Selective protein inhibition
  • Drug Resistance: Understanding mutations
  • New Targets: Identification of binding sites

Computational Applications

Protein Structure Analysis

python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def analyze_protein_structure(pdb_file):
    """Analyzes protein structure from PDB file."""
    
    # Simulate atom coordinates (in real case, use library like BioPython)
    # Example: coordinates of a fictional protein
    coordinates = np.random.rand(100, 3) * 20  # 100 atoms in 3D
    
    # Calculate distances between atoms
    distances = []
    for i in range(len(coordinates)):
        for j in range(i+1, len(coordinates)):
            dist = np.linalg.norm(coordinates[i] - coordinates[j])
            if dist < 5:  # Close distances (bonds, interactions)
                distances.append(dist)
    
    # Structure analysis
    structure_info = {
        'total_atoms': len(coordinates),
        'short_contacts': len(distances),
        'avg_distance': np.mean(distances) if distances else 0,
        'compactness': np.std(coordinates)
    }
    
    return coordinates, structure_info

def visualize_protein_3d(coordinates, title="Protein Structure"):
    """Visualizes protein structure in 3D."""
    
    fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    
    # Plot atoms
    ax.scatter(coordinates[:, 0], coordinates[:, 1], coordinates[:, 2], 
               c='blue', alpha=0.6, s=20)
    
    # Configure visualization
    ax.set_xlabel('X (Å)')
    ax.set_ylabel('Y (Å)')
    ax.set_zlabel('Z (Å)')
    ax.set_title(title)
    
    # Add grid
    ax.grid(True)
    
    plt.show()

# Usage example
coordinates, info = analyze_protein_structure("protein.pdb")
print(f"Total atoms: {info['total_atoms']}")
print(f"Close contacts: {info['short_contacts']}")
print(f"Average distance: {info['avg_distance']:.2f} Å")

visualize_protein_3d(coordinates, "Oncogenic Protein")

Binding Site Analysis

python
def find_binding_sites(coordinates, ligand_coords, cutoff=5.0):
    """Identifies potential binding sites."""
    
    binding_sites = []
    
    for i, atom_coord in enumerate(coordinates):
        # Calculate distance to ligand
        distances_to_ligand = [np.linalg.norm(atom_coord - lig_coord) 
                              for lig_coord in ligand_coords]
        
        min_distance = min(distances_to_ligand)
        
        if min_distance < cutoff:
            binding_sites.append({
                'atom_index': i,
                'coordinates': atom_coord,
                'distance_to_ligand': min_distance,
                'binding_strength': 1.0 / (1.0 + min_distance)  # Simple score
            })
    
    # Sort by binding strength
    binding_sites.sort(key=lambda x: x['binding_strength'], reverse=True)
    
    return binding_sites

def analyze_protein_ligand_interaction(protein_coords, ligand_coords):
    """Analyzes protein-ligand interaction."""
    
    # Find binding sites
    binding_sites = find_binding_sites(protein_coords, ligand_coords)
    
    # Calculate interaction energy (simplified)
    total_energy = sum(site['binding_strength'] for site in binding_sites)
    
    # Complementarity analysis
    complementarity_score = len(binding_sites) / len(ligand_coords)
    
    return {
        'binding_sites': binding_sites,
        'total_energy': total_energy,
        'complementarity': complementarity_score,
        'strongest_site': binding_sites[0] if binding_sites else None
    }

# Analysis example
protein_coords = np.random.rand(200, 3) * 15
ligand_coords = np.random.rand(10, 3) * 10

interaction = analyze_protein_ligand_interaction(protein_coords, ligand_coords)

print(f"Binding sites found: {len(interaction['binding_sites'])}")
print(f"Total interaction energy: {interaction['total_energy']:.2f}")
print(f"Complementarity score: {interaction['complementarity']:.2f}")

Advanced Techniques

  • Electron Crystallography: Membrane protein structures
  • Mass Spectrometry: Protein complex analysis
  • Circular Dichroism: Protein secondary structure
  • Fluorescence: Real-time protein dynamics

Learning Resources


This is the principle behind many targeted cancer therapies.

Early public release. Content evolves through continuous review. Questions: [email protected] · CC BY 4.0 where applicable.