def epcr_primers(self, primerfile):
        """
        Read in the primer file, and create a properly formatted output file that takes any degenerate bases
        into account
        """
        logging.info('Populating primer dictionaries')
        for record in SeqIO.parse(primerfile, 'fasta'):
            # from https://stackoverflow.com/a/27552377 - find any degenerate bases in the primer sequence, and
            # create all possibilities as a list
            degenerates = Seq.IUPAC.IUPACData.ambiguous_dna_values
            primerlist = list(map(''.join, product(*map(degenerates.get, str(record.seq).upper()))))
            # As the record.id is being updated in the loop below, set the name of the primer here so that will
            # be able to be recalled when setting the new record.ids
            primername = record.id
            # Iterate through all the possible primers created from any degenerate bases
            for primer in primerlist:
                # Split the base name of the target from the direction
                # e.g. vtx1a-F1 is split in vtx1a and F1
                basename, direction = primername.split('-')
                # Populate the dictionaries of forward and reverse primers based on the direction determined above
                if direction.startswith('F'):
                    # Attempt to add the current primer sequence to the dictionary
                    try:
                        self.forward_dict[basename].append(primer)
                    # On a key error, initialise the list of primers
                    except KeyError:
                        self.forward_dict[basename] = list()
                        self.forward_dict[basename].append(primer)
                else:
                    try:
                        self.reverse_dict[basename].append(primer)
                    except KeyError:
                        self.reverse_dict[basename] = list()
                        self.reverse_dict[basename].append(primer)