def add_contig_structure_data(data_str, structure, ref_contigs, chr_full_names, contig_names_by_refs, used_chromosomes, links_to_chromosomes, chr_names_by_id): for el in structure: if isinstance(el, Alignment): if el.ref_name in ref_contigs: num_chr = ref_contigs.index(el.ref_name) # corr_len = sum(chr_lengths[:num_chr+1]) else: # corr_len = -int(el.end) if el.ref_name not in used_chromosomes: used_chromosomes.append(el.ref_name) if contig_names_by_refs: other_ref_name = contig_names_by_refs[el.ref_name] links_to_chromosomes.append('links_to_chromosomes["' + el.ref_name + '"] = "' + get_html_name(other_ref_name, chr_full_names) + '";') corr_el_start = el.start corr_el_end = el.end data_str.append('{corr_start: ' + str(corr_el_start) + ',corr_end: ' + str(corr_el_end) + ',start:' + str(el.unshifted_start) + ',end:' + str(el.unshifted_end) + ',start_in_contig:' + str(el.start_in_contig) + ',end_in_contig:' + str(el.end_in_contig) + ',IDY:' + el.idy + ',chr: "' + chr_names_by_id[el.ref_name] + '"},') elif type(el) == str: ms_description, ms_type = parse_misassembly_info(el) data_str.append('{contig_type: "M", mstype: "' + ms_type + '", msg: "' + ms_description + '"},') return data_str
def add_contig(cum_length, contig, not_used_nx, assemblies_n50, assembly, contigs, contig_size_lines, num, structures_by_labels, only_nx=False, has_aligned_contigs=True): end_contig = cum_length + contig.size marks = [] align = None for nx in not_used_nx: if assemblies_n50[assembly][nx] == contig.size and \ (num + 1 >= len(contigs) or contigs[num + 1].size != contig.size): marks.append(nx) marks = ', '.join(marks) genes = ['{start:' + str(gene.start) + ',end:' + str(gene.end) + '}' for gene in contig.genes] if marks: not_used_nx = [nx for nx in not_used_nx if nx not in marks] marks = ', marks: "' + marks + '"' if marks else '' if not only_nx or marks: structure = [] if structures_by_labels and assembly in structures_by_labels: assembly_structure = structures_by_labels[assembly] for el in assembly_structure[contig.name]: if isinstance(el, Alignment): structure.append('{contig:"' + contig.name + '",corr_start: ' + str(el.start) + ',corr_end: ' + str(el.end) + ',start:' + str(el.unshifted_start) + ',end:' + str(el.unshifted_end) + ',start_in_contig:' + str(el.start_in_contig) + ',end_in_contig:' + str(el.end_in_contig) + ',size:' + str(contig.size) + ',IDY:' + el.idy + ',chr:"' + el.ref_name + '"},') elif type(el) == str: ms_description, ms_type = parse_misassembly_info(el) structure.append('{contig_type: "M", mstype: "' + ms_type + '", msg: "' + ms_description + '"},') if has_aligned_contigs and not contig.contig_type: contig.contig_type = 'unaligned' align = '{name:"' + contig.name + '",size:' + str(contig.size) + marks + ',contig_type: "' + contig.contig_type + \ '",structure:[' + ''.join(structure) + ']' + (',genes:[' + ','.join(genes) + ']' if qconfig.gene_finding else '') + '},' return end_contig, contig_size_lines, align, not_used_nx