@@ -94,7 +94,6 @@ def interval_extract(L, r=20):
9494
9595rule all:
9696 input:
97- # [config['references'][s]['desalt_idx'] for s in config['references']],
9897 expand('{}/{{sample}}.{{mapper}}.{{extension}}'.format(preprocess_d),
9998 sample=config['samples'],
10099 mapper=config['mappers'],
@@ -244,7 +243,7 @@ rule freddie_split:
244243 conda:
245244 config['conda_env_names']['freddie']
246245 threads:
247- 64
246+ 32
248247 wildcard_constraints:
249248 mapper='desalt|minimap2'
250249 shell:
@@ -261,7 +260,7 @@ rule freddie_segment:
261260 conda:
262261 config['conda_env_names']['freddie']
263262 threads:
264- 64
263+ 32
265264 wildcard_constraints:
266265 mapper='desalt|minimap2'
267266 shell:
@@ -280,7 +279,7 @@ rule freddie_cluster:
280279 conda:
281280 config['conda_env_names']['freddie']
282281 threads:
283- 64
282+ 32
284283 wildcard_constraints:
285284 mapper='desalt|minimap2'
286285 shell:
@@ -438,114 +437,6 @@ rule tool_bed:
438437 bed_file.close()
439438
440439
441- # rule segment_bed:
442- # input:
443- # segment_dir = '{}/{{sample}}/{{mapper}}/freddie/segment'.format(workspace_d),
444- # output:
445- # bed = '{}/{{sample}}/{{mapper}}/segment.bed'.format(graphs_d)
446- # resources:
447- # mem = "64G",
448- # time = 179,
449- # run:
450- # segment_isoforms = dict()
451- # tint_segs = dict()
452- # for segment_tsv in glob.iglob('{}/*/segment_*.tsv'.format(input.segment_dir)):
453- # for line in open(segment_tsv):
454- # line = line.rstrip().split('\t')
455- # if line[0][0]=='#':
456- # segs = [int(i) for i in line[2].split(',')]
457- # segs = list(zip(segs[:-1],segs[1:]))
458- # contig = line[0][1:]
459- # if not contig in tint_segs:
460- # segment_isoforms[contig] = dict()
461- # tint_segs[contig] = dict()
462- # tint = line[1]
463- # tint_segs[contig][tint] = segs
464- # continue
465- # rname = line[1]
466- # contig = line[2]
467- # tint = line[4]
468- # iid = rname.split('_')[0]
469- # data = line[5]
470- # if not tint in segment_isoforms[contig]:
471- # segment_isoforms[contig][tint] = dict()
472- # if not iid in segment_isoforms[contig][tint]:
473- # segment_isoforms[contig][tint][iid] = dict(cov=[0 for _ in data], count=0)
474- # assert len(data) == len(segment_isoforms[contig][tint][iid]['cov'])
475- # segment_isoforms[contig][tint][iid]['count']+=1
476- # for idx,d in enumerate(data):
477- # segment_isoforms[contig][tint][iid]['cov'][idx] += (d =='1')
478- # bed_file = open(output.bed, 'w+')
479- # for contig,tints in segment_isoforms.items():
480- # for tint,isoforms in tints.items():
481- # for iid,isoform in isoforms.items():
482- # if isoform['count'] < 3:
483- # continue
484- # cons = [(c/isoform['count'])>0.3 for c in isoform['cov']]
485- # assert len(tint_segs[contig][tint])==len(cons)
486- # for d, group in itertools.groupby(enumerate(cons), lambda x: x[1]):
487- # if d != True:
488- # continue
489- # group = list(group)
490- # f_seg_idx = group[0][0]
491- # l_seg_idx = group[-1][0]
492- # s = tint_segs[contig][tint][f_seg_idx][0]
493- # e = tint_segs[contig][tint][l_seg_idx][1]
494- # bed_file.write('{}\t{}\t{}\tsegment_{}_{}_{}\n'.format(contig, s, e, contig, tint, iid))
495- # bed_file.close()
496-
497- # rule genome_bed:
498- # input:
499- # bam = '{}/{{sample}}.{{mapper}}.bam'.format(preprocess_d),
500- # genome = lambda wildcards: config['references'][config['samples'][wildcards.sample]['ref']]['genome'],
501- # output:
502- # bed = temp('{}/{{sample}}/{{mapper}}/genome.{{contig}}.bed'.format(graphs_d))
503- # resources:
504- # mem_mb = 16384,
505- # time = 59,
506- # run:
507- # contig = wildcards.contig
508- # isoforms = dict()
509- # for read in pysam.AlignmentFile(input.bam).fetch(contig=contig):
510- # if read.is_unmapped:
511- # continue
512- # iid = read.query_name.split('_')[0]
513- # if not iid in isoforms:
514- # isoforms[iid] = dict(read_count=0, pos_count=dict(), intervals=list())
515- # isoforms[iid]['read_count']+=1
516- # intervals = list(interval_extract(read.get_reference_positions(), r=20))
517- # assert len(read.get_reference_positions())<=sum(e-s+1 for s,e in intervals) <= read.reference_end-read.reference_start, (
518- # len(read.get_reference_positions()),
519- # sum(e-s+1 for s,e in intervals),
520- # read.reference_end-read.reference_start,
521- # read.cigartuples,
522- # read.query_name,
523- # )
524- # for s,e in intervals:
525- # for p in range(s,e+1):
526- # isoforms[iid]['pos_count'][p] = isoforms[iid]['pos_count'].get(p,0) + 1
527-
528- # bed_file = open(output.bed, 'w+')
529- # for iid,isoform in isoforms.items():
530- # if isoform['read_count'] < 3:
531- # continue
532- # positions = list()
533- # for p,c in isoform['pos_count'].items():
534- # if c > isoform['read_count']/3.0:
535- # positions.append(p)
536- # positions.sort()
537- # for k, g in itertools.groupby(enumerate(positions), lambda t: t[1] - t[0]):
538- # g = list(g)
539- # isoform['intervals'].append((g[0][1], g[-1][1]+1))
540- # isoform['intervals'] = isoform['intervals']
541- # if len(isoform['intervals']) == 0:
542- # continue
543- # isoform_name = 'genome_{}_{}'.format(contig, iid)
544- # for s,e in isoform['intervals']:
545- # bed_file.write('{}\t{}\t{}\t{}\n'.format(contig, s, e, isoform_name))
546- # bed_file.close()
547-
548-
549440
550441rule truth_and_isoform_baselines:
551442 input:
@@ -734,82 +625,6 @@ rule bed_overlaps_truth:
734625 ' cut -f1,4,8 | '
735626 ' sort -u > {output.overlaps_tsv}'
736627
737- # rule bed_overlaps_troth:
738- # input:
739- # tool_bed = '{}/{{sample}}/{{mapper}}/{{tool}}.bed'.format(graphs_d),
740- # truth_bed = '{}/{{sample}}/{{mapper}}/troth.bed'.format(graphs_d),
741- # output:
742- # overlaps_tsv = '{}/{{sample}}/{{mapper}}/{{tool}}.overlaps.tsv'.format(graphs_d),
743- # wildcard_constraints:
744- # sample = '$^|'+'|'.join(re.escape(s) for s in real_samples)
745- # shell:
746- # 'bedtools intersect -a {input.tool_bed} -b <(cat {input.tool_bed} {input.truth_bed}) -wa -wb | '
747- # ' cut -f1,4,8 | '
748- # ' sort -u > {output.overlaps_tsv}'
749-
750- # rule troth:
751- # input:
752- # bam = '{}/{{sample}}.{{mapper}}.bam'.format(preprocess_d),
753- # gtf = lambda wildcards: config['references'][config['samples'][wildcards.sample]['ref']]['annot'],
754- # genome = lambda wildcards: config['references'][config['samples'][wildcards.sample]['ref']]['genome'],
755- # output:
756- # truth_bed = temp('{}/{{sample}}/{{mapper}}/troth.{{contig}}.bed'.format(graphs_d)),
757- # run:
758- # dna = pyfasta.Fasta(input.genome)
759- # contig_to_key = {k.split()[0]:k for k in dna.keys()}
760- # pos_to_cov = [0 for _ in range(len(dna[contig_to_key[wildcards.contig]]))]
761- # for read in pysam.AlignmentFile(input.bam, 'rb').fetch(contig=wildcards.contig):
762- # for p in read.get_reference_positions():
763- # pos_to_cov[p]+=1
764- # tids = dict()
765- # for l in open(input.gtf):
766- # if l[0]=='#':
767- # continue
768- # l = l.rstrip().split('\t')
769- # if l[0] != wildcards.contig:
770- # continue
771- # start = int(l[3])
772- # end = int(l[4])
773- # strand = l[6]
774- # info = l[8]
775- # info = [x.strip().split(' ') for x in info.strip(';').split(';')]
776- # info = {x[0]:x[1].strip('"') for x in info}
777- # if l[2]=='transcript':
778- # tids[info['transcript_id']]= dict(
779- # exons = list(),
780- # contig= l[0],
781- # strand= strand,
782- # )
783- # elif l[2] == 'exon' and info['transcript_id'] in tids:
784- # tids[info['transcript_id']]['exons'].append((start,end))
785-
786- # final_tids = list()
787- # for tid,d in tids.items():
788- # covered = 0
789- # length = 1
790- # for s,e in d['exons']:
791- # length += (e-s)
792- # for p in range(s,e):
793- # covered += pos_to_cov[p] >= 3
794- # if covered/length > .90:
795- # final_tids.append((tid,d))
796- # tids = sorted((
797- # v['contig'],
798- # v['exons'][0][0],
799- # k,
800- # sorted(v['exons'])
801- # ) for k,v in final_tids)
802- # out_bed = open(output.truth_bed, 'w+')
803- # for c,_,tid,exons in tids:
804- # for s,e in exons:
805- # out_bed.write('{}\t{}\t{}\ttroth_{}\n'.format(
806- # c,
807- # s,
808- # e,
809- # tid,
810- # ))
811- # out_bed.close()
812-
813628rule bed_merge:
814629 input:
815630 lambda wildcards: ['{}/{{sample}}/{{mapper}}/{{tool}}.{}.bed'.format(graphs_d,c)
0 commit comments