docs: def get_disorder_subseq_3D(protein,
                                 pdbflex_keys_file,
                                 disorder_cutoff=2,
                                 disorder_condition='>'):
          """DISORDERED REGION 3D"""
          with open(pdbflex_keys_file, 'r') as f:
              pdbflex_keys = json.load(f)
  
          if protein.id not in pdbflex_keys:
              log.warning('{}: no PDBFlex info available'.format(protein.id))
              final_repseq_sub, final_repseq_sub_resnums = (None, [])
  
          else:
              # Gather disordered regions for all mapped PDBFlex keys -- gets maximum disorder
              # TODO: should add option to do the opposite (get consensus disorder)
              repseq_sub_resnums_all = []
              for disorder_prop in pdbflex_keys[protein.id]:
                  repseq_sub_raw, repseq_sub_resnums_raw = protein.representative_sequence.get_subsequence_from_property(
                          property_key=disorder_prop,
                          property_value=disorder_cutoff,
                          condition=disorder_condition,
                          return_resnums=True) or (None, [])
                  repseq_sub_resnums_all.extend(repseq_sub_resnums_raw)
  
              final_repseq_sub_resnums = list(set(repseq_sub_resnums_all))
              final_repseq_sub = protein.representative_sequence.get_subsequence(resnums=final_repseq_sub_resnums)
  
          return {'subseq_len'    : len(final_repseq_sub_resnums), 'subseq': final_repseq_sub,
                  'subseq_resnums': final_repseq_sub_resnums}