content: from batchgenerators.utilities.file_and_folder_operations import *
  import shutil
  from nnunetv2.dataset_conversion.generate_dataset_json import generate_dataset_json
  from nnunetv2.paths import nnUNet_raw, nnUNet_preprocessed
  
  
  def convert_autopet(autopet_base_dir:str = '/media/isensee/My Book1/AutoPET/nifti/FDG-PET-CT-Lesions',
                       nnunet_dataset_id: int = 221):
      task_name = "AutoPETII_2023"
  
      foldername = "Dataset%03.0d_%s" % (nnunet_dataset_id, task_name)
  
      # setting up nnU-Net folders
      out_base = join(nnUNet_raw, foldername)
      imagestr = join(out_base, "imagesTr")
      labelstr = join(out_base, "labelsTr")
      maybe_mkdir_p(imagestr)
      maybe_mkdir_p(labelstr)
  
      patients = subdirs(autopet_base_dir, prefix='PETCT', join=False)
      n = 0
      identifiers = []
      for pat in patients:
          patient_acquisitions = subdirs(join(autopet_base_dir, pat), join=False)
          for pa in patient_acquisitions:
              n += 1
              identifier = f"{pat}_{pa}"
              identifiers.append(identifier)
              if not isfile(join(imagestr, f'{identifier}_0000.nii.gz')):
                  shutil.copy(join(autopet_base_dir, pat, pa, 'CTres.nii.gz'), join(imagestr, f'{identifier}_0000.nii.gz'))
              if not isfile(join(imagestr, f'{identifier}_0001.nii.gz')):
                  shutil.copy(join(autopet_base_dir, pat, pa, 'SUV.nii.gz'), join(imagestr, f'{identifier}_0001.nii.gz'))
              if not isfile(join(imagestr, f'{identifier}.nii.gz')):
                  shutil.copy(join(autopet_base_dir, pat, pa, 'SEG.nii.gz'), join(labelstr, f'{identifier}.nii.gz'))
  
      generate_dataset_json(out_base, {0: "CT", 1:"CT"},
                            labels={
                                "background": 0,
                                "tumor": 1
                            },
                            num_training_cases=n, file_ending='.nii.gz',
                            dataset_name=task_name, reference='https://autopet-ii.grand-challenge.org/',
                            release='release',
                            # overwrite_image_reader_writer='NibabelIOWithReorient',
                            description=task_name)
  
      # manual split
      splits = []
      for fold in range(5):
          val_patients = patients[fold :: 5]
          splits.append(
              {
                  'train': [i for i in identifiers if not any([i.startswith(v) for v in val_patients])],
                  'val': [i for i in identifiers if any([i.startswith(v) for v in val_patients])],
              }
          )
      pp_out_dir = join(nnUNet_preprocessed, foldername)
      maybe_mkdir_p(pp_out_dir)
      save_json(splits, join(pp_out_dir, 'splits_final.json'), sort_keys=False)
  
  
  if __name__ == '__main__':
      import argparse
      parser = argparse.ArgumentParser()
      parser.add_argument('input_folder', type=str,
                          help="The downloaded and extracted autopet dataset (must have PETCT_XXX subfolders)")
      parser.add_argument('-d', required=False, type=int, default=221, help='nnU-Net Dataset ID, default: 221')
      args = parser.parse_args()
      amos_base = args.input_folder
      convert_autopet(amos_base, args.d)
  