code: def make_ef_structure(score_structure, fpf, sort_order):
      
  
      # set variables
      n = len([x[4] for x in score_structure if x[3] == '0']) # Total no. of decoys
  
      # if it wasn't defined, set the false positive fraction to the appropriate default value
      if not fpf:
          fpf = float(1) / n
  
      # if there are an insufficient number of decoys return None
      if n < int(round(1 / fpf)):
          return None
  
      # determine score threshold
      decoy_threshold = int(round(n * fpf))                                               # number of decoys corresponding
                                                                                          # to fpf
      active_list_at_threshold = [x for x in score_structure if x[4] == decoy_threshold]  # actives at ef fpf
      active_list_at_threshold.sort(key=lambda x: x[5], reverse=True)                     # sorted by active count
      score_threshold = float(active_list_at_threshold[0][1])                             # score at max active count
      ef_structure = []
      for mol in score_structure:
          score = float(mol[1])
          if sort_order == 'asc':
              if score <= score_threshold:
                  gamma = 1
              elif score > score_threshold:
                  gamma = 0
          elif sort_order == 'dsc':
              if score >= score_threshold:
                  gamma = 1
              elif score < score_threshold:
                  gamma = 0
          tup = mol[0:4] + (gamma,)
          ef_structure.append(tup)
  
      return ef_structure
docs: Description
      :param score_structure: list [(id, best_score, best_query, status, net decoy count, net active count), ..., ]
      :param fpf: float. False positive fraction at which the enrichment factor will be calculated.
      :param sort_order: string. 'asc' (binding free energy estimate) 'dsc' (probability)
      :return: ef_structure: list [(id, best_score, best_query, status, gamma), ..., ]
      gamma is 1 if the score of the molecule is better than the false positive threshold and 0 otherwise