code: def rank_queries(molecules, ensemble, sort_order, options):
      
  
      # generate query list
      query_list = [x for x in list(molecules[0].scores.keys()) if x not in ensemble]
  
      results = {}
  
      for query in query_list:
          es = EnsembleStorage() # an ensemble storage project
  
          # generate test_ensemble
          test_ensemble = ensemble[0:]
          test_ensemble.append(query)
          test_ensemble = tuple(test_ensemble)
          es.set_prop('ensemble', test_ensemble)
  
          # calculate its performance
          score_structure = classification.make_score_structure(molecules, test_ensemble)
  
          # determine auc value
          auc_structure = classification.make_auc_structure(score_structure)
          auc = classification.calculate_auc(auc_structure, sort_order, 'no stats')
          es.set_prop('auc', auc)
  
          # if the enrichment factor was set to anything other than 1, then we're training to maximize the corresponding
          # enrichment factor
          for fpf in classification.make_fpfList(options, score_structure):
              fpf = float(fpf)
              ef_structure = classification.make_ef_structure(score_structure, fpf, sort_order)
              if ef_structure:
                  ef = classification.calculate_ef(ef_structure, fpf)
                  es.set_prop(ef[0], ef[1], 'ef')
  
          # append results to metric list
          results[test_ensemble] = es
  
      # peel away the best performing ensemble
      best_ensemble = screener.find_best_ensemble(results, options)
  
      return list(best_ensemble)
docs: rank queries by value added to existing ensemble
      :param molecules:
      :param score_field:
      :param ensemble:
      :param sort_order:
      :param options:
      :return: