Commit 564cd5b1 authored by Pavel Jedlicka's avatar Pavel Jedlicka
Browse files

added flag for solo ltrs

parent fa95fb13
Loading
Loading
Loading
Loading
+9 −5
Original line number Original line Diff line number Diff line
@@ -27,8 +27,9 @@ from nested.utils.dependency_resolver import DependencyResolver
@click.option('--discovery_tool', '-dt', default=DiscoveryTool.LTR_finder.name,
@click.option('--discovery_tool', '-dt', default=DiscoveryTool.LTR_finder.name,
    type=click.Choice(list(map(lambda val: val, DiscoveryTool.__members__))),
    type=click.Choice(list(map(lambda val: val, DiscoveryTool.__members__))),
    help='Determines which tool is used for retrotransoson discovery. Default: LTR_finder')
    help='Determines which tool is used for retrotransoson discovery. Default: LTR_finder')
@click.option('--solo_ltrs', '-solo', is_flag=True, default=False, help='Run solo LTR module')
def main(input_fasta, sketch, format, output_fasta_offset, output_folder, initial_threshold, 
def main(input_fasta, sketch, format, output_fasta_offset, output_folder, initial_threshold, 
        threshold_multiplier, threads, discovery_tool):
        threshold_multiplier, threads, discovery_tool, solo_ltrs):
    check_ram(input_fasta, threads)
    check_ram(input_fasta, threads)
    check_permissions(output_folder, os.W_OK | os.X_OK)
    check_permissions(output_folder, os.W_OK | os.X_OK)
    number_of_errors = [0]
    number_of_errors = [0]
@@ -41,21 +42,24 @@ def main(input_fasta, sketch, format, output_fasta_offset, output_folder, initia
            futuress.append(executor.submit(process_sequence, sequence, sketcher, 
            futuress.append(executor.submit(process_sequence, sequence, sketcher, 
                sketch, format, output_fasta_offset, output_folder, 
                sketch, format, output_fasta_offset, output_folder, 
                initial_threshold, threshold_multiplier, number_of_errors,
                initial_threshold, threshold_multiplier, number_of_errors,
                dependencyResolver))
                dependencyResolver, solo_ltrs))
        futures.wait(futuress)
        futures.wait(futuress)
    end_time = datetime.now()
    end_time = datetime.now()
    print('Total time: {}'.format(end_time - start_time))
    print('Total time: {}'.format(end_time - start_time))
    print('Number of errors: {}'.format(number_of_errors[0]))
    print('Number of errors: {}'.format(number_of_errors[0]))


def process_sequence(sequence, sketcher, sketch, format, output_fasta_offset, output_folder, initial_threshold, threshold_multiplier, errors, dependency_resolver):
def process_sequence(sequence, sketcher, sketch, format, output_fasta_offset, output_folder, initial_threshold, threshold_multiplier, errors, dependency_resolver, solo_ltrs):
    sequence.id = sequence.id.replace('/', '--')
    sequence.id = sequence.id.replace('/', '--')
    seq_start_time = datetime.now()
    seq_start_time = datetime.now()
    strlen = 15
    strlen = 15
    print("Processing {}".format(sequence.id))
    print("Processing {}".format(sequence.id))
    try:
    try:
        nester = Nester(sequence, initial_threshold, threshold_multiplier, dependency_resolver)
        nester = Nester(sequence, initial_threshold, threshold_multiplier, dependency_resolver, solo_ltrs)
        sketcher.create_gff(nester.nested_element, dirpath=output_folder, output_fasta_offset=output_fasta_offset, format=format)
        sketcher.create_gff(nester.nested_element, dirpath=output_folder, output_fasta_offset=output_fasta_offset, format=format)
        
        if solo_ltrs:
            sketcher.create_solo_ltr_gff(nester.solo_ltrs, dirpath=output_folder)
            sketcher.create_solo_ltr_gff(nester.solo_ltrs, dirpath=output_folder)
            
        sketcher.create_trf_gff(nester.trf, nester.seqid, dirpath=output_folder)
        sketcher.create_trf_gff(nester.trf, nester.seqid, dirpath=output_folder)
        if sketch:
        if sketch:
            if format != 'default':
            if format != 'default':
+7 −4
Original line number Original line Diff line number Diff line
@@ -21,7 +21,7 @@ class Nester(ToolInterface):
        nested_element (NestedElement): nested element
        nested_element (NestedElement): nested element
    """
    """


    def __init__(self, sequence, threshold, multiplier, dependency_resolver):
    def __init__(self, sequence, threshold, multiplier, dependency_resolver, solo):
        self.seqid = sequence.id
        self.seqid = sequence.id
        self.sequence = sequence.seq
        self.sequence = sequence.seq
        self.nested_element = None
        self.nested_element = None
@@ -32,6 +32,7 @@ class Nester(ToolInterface):
        self.multiplier = multiplier
        self.multiplier = multiplier
        self.dependency_resolver = dependency_resolver
        self.dependency_resolver = dependency_resolver
        self.trf = []
        self.trf = []
        self.solo = solo
        self._find_nesting()
        self._find_nesting()


    def _find_nesting(self):
    def _find_nesting(self):
@@ -56,9 +57,11 @@ class Nester(ToolInterface):
        if not candidates:
        if not candidates:
            best_candidate = gene.get_best_candidate()
            best_candidate = gene.get_best_candidate()
            if not best_candidate:
            if not best_candidate:
                if solo:
                    self.solo_ltrs.find_solo_ltrs(sequence)
                    self.solo_ltrs.find_solo_ltrs(sequence)
                    self.solo_ltrs.solo_ltrs.sort(key=lambda x: x.location[0], reverse=True)
                    self.solo_ltrs.solo_ltrs.sort(key=lambda x: x.location[0], reverse=True)
                    return self.solo_ltrs.solo_ltrs
                    return self.solo_ltrs.solo_ltrs
                return []
            candidates = [best_candidate]
            candidates = [best_candidate]


        # sort by score (from highest)
        # sort by score (from highest)