omics.co.in logo omics.co.in

Day 5: In Silico Restriction Mapping & Recombinant Molecular Cloning

Tested Stacks: GATK 4.6.1 Samtools 1.21 Nextflow 24.10 Seurat v5.1 Python 3.12
Prerequisites: Basic Linux CLI & Sequencing Formats
📚 Chapter 5 of 15 0% Course Completed

1. Mechanisms of Bacterial Restriction Endonucleases

Restriction Endonucleases (REases) are bacterial defense enzymes that recognize specific, typically palindromic DNA sequences (4–8 bp in length) and catalyze double-stranded phosphodiester bond cleavage. In molecular biology and recombinant DNA technology, Type II restriction enzymes are universally utilized because their recognition and cleavage sites are strictly identical and require only $Mg^{2+}$ as a cofactor without ATP hydrolysis.

Enzyme NameMicrobial SourceRecognition Sequence & Cleavage SiteOverhang GeometryLigation Characteristics
EcoRIEscherichia coli RY135'-G | A A T T C-3'
3'-C T T A A | G-5'
5' sticky overhang (4-nt: 5'-AATT-3')High-efficiency directional cohesive ligation with T4 DNA ligase.
PstIProvidencia stuartii5'-C T G C A | G-3'
3'-G | A C G T C-5'
3' sticky overhang (4-nt: 3'-ACGT-5')Cohesive ligation; incompatible with 5' overhangs.
EcoRVEscherichia coli J625'-G A T | A T C-3'
3'-C T A | T A G-5'
Blunt end (flush double-strand cut)Universal compatibility with any blunt-ended insert; requires high T4 ligase concentrations; lacks directionality unless combined with cohesive enzymes.
BamHIBacillus amyloliquefaciens5'-G | G A T C C-3'
3'-C C T A G | G-5'
5' sticky overhang (4-nt: 5'-GATC-3')Isocaudomer with BglII (5'-A|GATCT-3'); ligation generates non-cleavable hybrid site.
NotINocardia otitidis-caviarum5'-G C | G G C C G C-3'
3'-C G C C G G | C G-5'
8-base rare cutter (5' overhang)Cuts on average once every $4^8 = 65,536\text{ bp}$; ideal for genomic BAC library cloning and mammalian vector linearization.

2. Directional Cloning & Vector Expression Strategy

To express a recombinant gene in an expression host (such as E. coli BL21(DE3) with a pET vector), the insert must be inserted in the correct $5' \to 3'$ orientation relative to the bacteriophage T7 promoter and maintaining the open reading frame across any amino-terminal polyhistidine purification tags (e.g. His6-tag). Directional cloning achieves this by cutting the plasmid's Multiple Cloning Site (MCS) and the PCR insert with two distinct, non-compatible restriction enzymes (e.g. NdeI at the 5' end and XhoI at the 3' end).

3. Production Python Script: In Silico Restriction Digestion & Agarose Band Simulator

#!/usr/bin/env python3
"""
Day 5 Practical: In Silico Restriction Digest & Gel Electrophoresis Simulation
Identifies restriction cut sites, fragment lengths, and simulated migration.
"""

from Bio.Seq import Seq
from Bio.Restriction import EcoRI, BamHI, HindIII, PstI, NotI, RestrictionBatch

def perform_restriction_digest(plasmid_seq: str, enzyme_list, is_circular=True):
    """Simulate complete restriction endonuclease digestion."""
    seq = Seq(plasmid_seq.upper())
    batch = RestrictionBatch(enzyme_list)
    results = batch.search(seq, linear=not is_circular)
    
    print("=== RESTRICTION SITE MAP ===")
    for enzyme, cut_sites in results.items():
        print(f"Enzyme {enzyme}: {len(cut_sites)} cut(s) at positions: {cut_sites}")
        
    # Calculate fragment sizes for a double digest (e.g., EcoRI + HindIII)
    all_cuts = sorted(results[EcoRI] + results[HindIII])
    if not all_cuts:
        fragments = [len(seq)]
    elif is_circular:
        fragments = []
        for i in range(len(all_cuts)):
            if i < len(all_cuts) - 1:
                fragments.append(all_cuts[i+1] - all_cuts[i])
            else:
                fragments.append((len(seq) - all_cuts[-1]) + all_cuts[0])
    else:
        # Linear fragment calculation
        cuts = [0] + all_cuts + [len(seq)]
        fragments = [cuts[i+1] - cuts[i] for i in range(len(cuts)-1)]
        
    fragments.sort(reverse=True)
    return results, fragments

if __name__ == "__main__":
    # Simulated 4,361 bp pBR322-like plasmid sequence containing EcoRI and HindIII sites
    # EcoRI site: GAATTC (pos ~ 1000), HindIII site: AAGCTT (pos ~ 2500)
    fake_plasmid = "A" * 999 + "GAATTC" + "C" * 1494 + "AAGCTT" + "T" * 1860
    
    print(f"Total Plasmid Length: {len(fake_plasmid)} bp")
    enzymes = [EcoRI, HindIII]
    sites, frags = perform_restriction_digest(fake_plasmid, enzymes, is_circular=True)
    
    print("
=== VIRTUAL AGAROSE GEL ELECTROPHORESIS ===")
    print("Fragment Sizes (bp, sorted from slowest to fastest migration):")
    for idx, f_size in enumerate(frags, 1):
        print(f"  Band {idx}: {f_size} bp")
⚠️

Common Pitfalls & Troubleshooting Checklist

  • Java Heap Exhaustion (GATK / Picard): If processes terminate with java.lang.OutOfMemoryError, set your environment variable explicitly: export _JAVA_OPTIONS="-Xmx16g -Djava.io.tmpdir=/tmp".
  • Index Timestamp Mismatch: If tools complain that a BAM index is missing or out of date, regenerate with samtools index -@ 4 sample.bam.
  • Conda Channel Conflicts: Avoid ABI incompatibilities between bioconda and conda-forge by setting strict priority: conda config --set channel_priority strict.
  • Chromosome Naming Contamination: Always verify whether reference FASTA headers use chr1 or 1; divergent naming causes silent alignment drops.
Was this guide helpful to your research?
Help us maintain 100% accurate, peer-reviewed bioinformatics standards.
📝 Propose Edit on GitHub ↗