def translateDNA(sequence, frame = 'f1', translTable_id='default') :
	"""Translates DNA code, frame : fwd1, fwd2, fwd3, rev1, rev2, rev3"""

	protein = ""

	if frame == 'f1' :
		dna = sequence
	elif frame == 'f2':
		dna = sequence[1:]
	elif frame == 'f3' :
		dna = sequence[2:]
	elif frame == 'r1' :
		dna = reverseComplement(sequence)
	elif frame == 'r2' :
		dna = reverseComplement(sequence)
		dna = dna[1:]
	elif frame == 'r3' :
		dna = reverseComplement(sequence)
		dna = dna[2:]
	else :
		raise ValueError('unknown reading frame: %s, should be one of the following: fwd1, fwd2, fwd3, rev1, rev2, rev3' % frame)

	for i in range(0, len(dna),  3) :
		codon = dna[i:i+3]

		# Check if variant messed with selenocysteine codon
		if '!' in codon and codon != '!GA':
			codon = codon.replace('!', 'T')

		if (len(codon) == 3) :
			try :
				# MC
				protein += translTable[translTable_id][codon]
			except KeyError :
				combinaisons = polymorphicCodonCombinaisons(list(codon))
				translations = set()
				for ci in range(len(combinaisons)):
					translations.add(translTable[translTable_id][combinaisons[ci]])
				protein += '/'.join(translations)

	return protein