code: def align_transcriptome(fastq_file, pair_file, ref_file, data):
      
      work_bam = dd.get_work_bam(data)
      base, ext = os.path.splitext(work_bam)
      out_file = base + ".transcriptome" + ext
      if utils.file_exists(out_file):
          data = dd.set_transcriptome_bam(data, out_file)
          return data
      bowtie2 = config_utils.get_program("bowtie2", data["config"])
      gtf_file = dd.get_gtf_file(data)
      gtf_index = index_transcriptome(gtf_file, ref_file, data)
      num_cores = data["config"]["algorithm"].get("num_cores", 1)
      fastq_cmd = "-1 %s" % fastq_file if pair_file else "-U %s" % fastq_file
      pair_cmd = "-2 %s " % pair_file if pair_file else ""
      cmd = ("{bowtie2} -p {num_cores} -a -X 600 --rdg 6,5 --rfg 6,5 --score-min L,-.6,-.4 --no-discordant --no-mixed -x {gtf_index} {fastq_cmd} {pair_cmd} ")
      with file_transaction(data, out_file) as tx_out_file:
          message = "Aligning %s and %s to the transcriptome." % (fastq_file, pair_file)
          cmd += "| " + postalign.sam_to_sortbam_cl(data, tx_out_file, name_sort=True)
          do.run(cmd.format(**locals()), message)
      data = dd.set_transcriptome_bam(data, out_file)
      return data
docs: bowtie2 with settings for aligning to the transcriptome for eXpress/RSEM/etc