code: def cbk_qptdm_workflow(self, cbk):
          
          scr_input = cbk.data["input"]
          # Use the WFK file produced by the second
          # Task in the first Work (NSCF step).
          nscf_task = self[0][1]
          wfk_file = nscf_task.outdir.has_abiext("WFK")
  
          work = self[1]
          work.set_manager(self.manager)
          work.create_tasks(wfk_file, scr_input)
          work.add_deps(cbk.deps)
  
          work.set_flow(self)
          # Each task has a reference to its work.
          for task in work:
              task.set_work(work)
              # Add the garbage collector.
              if self.gc is not None: task.set_gc(self.gc)
  
          work.connect_signals()
          work.build()
  
          return work
docs: This callback is executed by the flow when bands_work.nscf_task reaches S_OK.
  
          It computes the list of q-points for the W(q,G,G'), creates nqpt tasks
          in the second work (QptdmWork), and connect the signals.