There are increasingly many biotechnology protocols which involve hybridizing small fragments of DNA to a large pool – methods that are sensitive to cross-hybridization. (PCR is less sensitive to this because it requires a pair of matches within a reasonable space and correct orientation, and bad matches can get weeded out by the exponential growth involved.)
So how do we check for a close match? Well, usually people run BLAST. But BLAST has been designed to look for evolutionarily close matches to a sequence — not matches close in free energy of hybridization. It’s the wrong tool for the job. It penalizes mismatches too heavily, and it treats A-T and C-G bonding as equivalent.
But I didn’t want to rewrite BLAST. It’d take me months or years. Well, we can hack BLAST to fit our needs. I’ve figured it out and wrote up a little HOWTO guide here.