def _precommand_initiation(self, input_fp, output_dir, working_dir, params): if params['chimera_detection_method'] == 'blast_fragments': blast_db, db_files_to_remove = \ build_blast_db_from_fasta_path(params['reference_seqs_fp'], output_dir=working_dir) self.files_to_remove += db_files_to_remove params['blast_db'] = blast_db elif params['chimera_detection_method'] == 'ChimeraSlayer': # copy the reference files to working dir # ChimeraSlayer creates an index file of the ref and # will crash without write permission in the ref seqs dir aligned_reference_seqs_fp = params['aligned_reference_seqs_fp'] _, new_ref_filename = split(aligned_reference_seqs_fp) copy(aligned_reference_seqs_fp, working_dir) aligned_reference_seqs_fp = working_dir + "/" + new_ref_filename self.files_to_remove.append(aligned_reference_seqs_fp) params['aligned_reference_seqs_fp'] = aligned_reference_seqs_fp # if given, also copy the unaligned ref db reference_seqs_fp = params['reference_seqs_fp'] if reference_seqs_fp: _, new_ref_filename = split(reference_seqs_fp) copy(reference_seqs_fp, working_dir) reference_seqs_fp = working_dir + "/" + new_ref_filename else: # otherwise create it reference_seqs_fp = write_degapped_fasta_to_file( parse_fasta(open(aligned_reference_seqs_fp)), tmp_dir=working_dir) # delete it afterwards self.files_to_remove.append(reference_seqs_fp) params['reference_seqs_fp'] = reference_seqs_fp # build blast db of reference, otherwise ChimeraSlayer will do it # and parallel jobs clash _, db_files_to_remove = \ build_blast_db_from_fasta_path(reference_seqs_fp) self.files_to_remove += db_files_to_remove # make the index file globally # Reason: ChimeraSlayer first checks to see if the index file is # there. If not it tries to create it. This can lead to race # condition if several parallel jobs try to create it at the same # time. make_cidx_file(aligned_reference_seqs_fp) self.files_to_remove.append(aligned_reference_seqs_fp + ".cidx") else: raise ValueError("Unrecognized chimera detection method '%s'." % params['chimera_detection_method'])
def _precommand_initiation(self, input_fp, output_dir, working_dir, params): if params['chimera_detection_method'] == 'blast_fragments': blast_db, db_files_to_remove = \ build_blast_db_from_fasta_path(params['reference_seqs_fp'], output_dir=working_dir) self.files_to_remove += db_files_to_remove params['blast_db'] = blast_db elif params['chimera_detection_method'] == 'ChimeraSlayer': #copy the reference files to working dir #ChimeraSlayer creates an index file of the ref and #will crash without write permission in the ref seqs dir aligned_reference_seqs_fp = params['aligned_reference_seqs_fp'] _, new_ref_filename = split(aligned_reference_seqs_fp) copy(aligned_reference_seqs_fp, working_dir) aligned_reference_seqs_fp = working_dir + "/" + new_ref_filename self.files_to_remove.append(aligned_reference_seqs_fp) params['aligned_reference_seqs_fp'] = aligned_reference_seqs_fp #if given, also copy the unaligned ref db reference_seqs_fp = params['reference_seqs_fp'] if reference_seqs_fp: _, new_ref_filename = split(reference_seqs_fp) copy(reference_seqs_fp, working_dir) reference_seqs_fp = working_dir + "/" + new_ref_filename else: #otherwise create it reference_seqs_fp = write_degapped_fasta_to_file( MinimalFastaParser(open(aligned_reference_seqs_fp)), tmp_dir=working_dir) #delete it afterwards self.files_to_remove.append(reference_seqs_fp) params['reference_seqs_fp'] = reference_seqs_fp #build blast db of reference, otherwise ChimeraSlayer will do it #and parallel jobs clash _, db_files_to_remove = \ build_blast_db_from_fasta_path(reference_seqs_fp) self.files_to_remove += db_files_to_remove #make the index file globally #Reason: ChimeraSlayer first checks to see if the index file is #there. If not it tries to create it. This can lead to race #condition if several parallel jobs try to create it at the same #time. make_cidx_file(aligned_reference_seqs_fp) self.files_to_remove.append(aligned_reference_seqs_fp + ".cidx") else: raise ValueError("Unrecognized chimera detection method '%s'." % params['chimera_detection_method'])