code: def available_dataset_ids(self, reader_name=None, composites=False):
          
          try:
              if reader_name:
                  readers = [self.readers[reader_name]]
              else:
                  readers = self.readers.values()
          except (AttributeError, KeyError):
              raise KeyError("No reader '%s' found in scene" % reader_name)
  
          available_datasets = sorted([dataset_id
                                       for reader in readers
                                       for dataset_id in reader.available_dataset_ids])
          if composites:
              available_datasets += sorted(self.available_composite_ids(
                  available_datasets))
          return available_datasets
docs: Get names of available datasets, globally or just for *reader_name*
          if specified, that can be loaded.
  
          Available dataset names are determined by what each individual reader
          can load. This is normally determined by what files are needed to load
          a dataset and what files have been provided to the scene/reader.
  
          :return: list of available dataset names