code: def run_align(*data):
      
      work_dir = dd.get_work_dir(data[0][0])
      out_dir = op.join(work_dir, "seqcluster", "prepare")
      seq_out = op.join(out_dir, "seqs.fastq")
      bam_dir = op.join(work_dir, "align")
      new_bam_file = op.join(bam_dir, "seqs.bam")
      tools = dd.get_expression_caller(data[0][0])
      if not file_exists(new_bam_file):
          sample = process_alignment(data[0][0], [seq_out, None])
          bam_file = dd.get_work_bam(sample[0][0])
          shutil.move(bam_file, new_bam_file)
          shutil.move(bam_file + ".bai", new_bam_file + ".bai")
          shutil.rmtree(op.join(bam_dir, sample[0][0]["rgnames"]['sample']))
      for sample in data:
          # sample[0]["align_bam"] = sample[0]["clean_fastq"]
          sample[0]["cluster_bam"] = new_bam_file
  
      if "mirdeep2" in tools:
          novel_db = mirdeep.run(data)
      return data
docs: Prepare data to run alignment step, only once for each project