code: def create_tasks(self, wfk_file, scr_input):
          
          assert len(self) == 0
          wfk_file = self.wfk_file = os.path.abspath(wfk_file)
  
          # Build a temporary work in the tmpdir that will use a shell manager
          # to run ABINIT in order to get the list of q-points for the screening.
          shell_manager = self.manager.to_shell_manager(mpi_procs=1)
  
          w = Work(workdir=self.tmpdir.path_join("_qptdm_run"), manager=shell_manager)
  
          fake_input = scr_input.deepcopy()
          fake_task = w.register(fake_input)
          w.allocate()
          w.build()
  
          # Create the symbolic link and add the magic value
          # nqpdm = -1 to the input to get the list of q-points.
          fake_task.inlink_file(wfk_file)
          fake_task.set_vars({"nqptdm": -1})
          fake_task.start_and_wait()
  
          # Parse the section with the q-points
          with NetcdfReader(fake_task.outdir.has_abiext("qptdms.nc")) as reader:
              qpoints = reader.read_value("reduced_coordinates_of_kpoints")
          #print("qpoints)
  
          # Now we can register the task for the different q-points
          for qpoint in qpoints:
              qptdm_input = scr_input.deepcopy()
              qptdm_input.set_vars(nqptdm=1, qptdm=qpoint)
              new_task = self.register_scr_task(qptdm_input, manager=self.manager)
              # Add the garbage collector.
              if self.flow.gc is not None:
                  new_task.set_gc(self.flow.gc)
  
          self.allocate()
docs: Create the SCR tasks and register them in self.
  
          Args:
              wfk_file: Path to the ABINIT WFK file to use for the computation of the screening.
              scr_input: Input for the screening calculation.