sys.stderr.write('Failed to get genome using reference %s\n' %(args.genomeref))
        exit(1)

    # Create a worker for running the algorithm.
    worker = ProbAnnotationWorker(genome['id'])
        
    # Run the probabilistic annotation algorithm.
    try:
        # Convert the features in the genome object to a fasta file.
        fastaFile = worker.genomeToFasta(genome['features'])
        
        # Run blast using the fasta file.
        blastResultFile = worker.runBlast(fastaFile)
        
        # Calculate roleset probabilities.
        rolestringTuples = worker.rolesetProbabilitiesMarble(blastResultFile)
        
        # Calculate per-gene role probabilities.
        roleProbs = worker.rolesetProbabilitiesToRoleProbabilities(rolestringTuples)
        
        # Calculate whole cell role probabilities.
        totalRoleProbs = worker.totalRoleProbabilities(roleProbs)

        # Calculate complex probabilities.
        complexProbs = worker.complexProbabilities(totalRoleProbs)
 
        # Calculate reaction probabilities.
        reactionProbs = worker.reactionProbabilities(complexProbs) 

        # Cleanup work directory.
        worker.cleanup()
                reactionsToComplexes[reactionId].append(
                    complexRef.split('/')[-1])

    # Create a worker for running the algorithm.
    worker = ProbAnnotationWorker(genome['id'])

    # Run the probabilistic annotation algorithm.
    try:
        # Convert the features in the genome object to a fasta file.
        fastaFile = worker.genomeToFasta(genome['features'])

        # Run blast using the fasta file.
        blastResultFile = worker.runBlast(fastaFile)

        # Calculate roleset probabilities.
        rolestringTuples = worker.rolesetProbabilitiesMarble(blastResultFile)

        # Calculate per-gene role probabilities.
        roleProbs = worker.rolesetProbabilitiesToRoleProbabilities(
            rolestringTuples)

        # Calculate whole cell role probabilities.
        totalRoleProbs = worker.totalRoleProbabilities(roleProbs)

        # Calculate complex probabilities.
        complexProbs = worker.complexProbabilities(
            totalRoleProbs, complexesToRequiredRoles=complexesToRoles)

        # Calculate reaction probabilities.
        reactionProbs = worker.reactionProbabilities(
            complexProbs, rxnsToComplexes=reactionsToComplexes)