def run(self): """ The main function, it is called by PBToolRunner.start(). """ startTime = time.time() logging.info("pbalign version: %s", get_version()) #logging.debug("Original arguments: " + str(self._argumentList)) # Create an AlignService by algorithm name. self._alnService = self._createAlignService(self.args.algorithm, self.args, self.fileNames, self._tempFileManager) # Make sane. self._makeSane(self.args, self.fileNames) # Run align service. self._alnService.run() # Create a temporary filtered SAM/BAM file as output for FilterService. outFormat = getFileFormat(self.fileNames.outputFileName) suffix = ".bam" if outFormat in \ [FILE_FORMATS.BAM, FILE_FORMATS.XML] else ".sam" self.fileNames.filteredSam = self._tempFileManager.\ RegisterNewTmpFile(suffix=suffix) # Call filter service on SAM or BAM file. self._filterService = FilterService( self.fileNames.alignerSamOut, self.fileNames.targetFileName, self.fileNames.filteredSam, self.args.algorithm, #self._alnService.name, self._alnService.scoreSign, self.args, self.fileNames.adapterGffFileName) self._filterService.run() # Sort bam before output if outFormat in [FILE_FORMATS.BAM, FILE_FORMATS.XML]: # Sort/make index for BAM output. BamPostService(filenames=self.fileNames, nproc=self.args.nproc).run() # Output all hits in SAM, BAM. self._output(inSam=self.fileNames.filteredSam, refFile=self.fileNames.targetFileName, outFile=self.fileNames.outputFileName, readType=self.args.readType) # Delete temporay files anyway to make self._cleanUp(False if (hasattr(self.args, "keepTmpFiles") and self.args.keepTmpFiles is True) else True) endTime = time.time() logging.info("Total time: {:.2f} s.".format(float(endTime - startTime))) return 0
def test_run(self): """Test FilterService.run().""" options = Opt(30, 70, 50, 1, None, "random") obj = FilterService(self.alignedSam, self.targetFileName, self.filteredSam, "BlasrService", -1, options) _output, errCode, _errMsg = obj.run() self.assertEqual(errCode, 0)
def test_init(self): """Test FilterService.__init__().""" options = Opt(30, 70, 50, 1, None, "random") obj = FilterService(self.alignedSam, self.targetFileName, self.filteredSam, "BlasrService", -1, options) self.assertTrue(obj.availability) # samFilter should be available self.assertIn("-minPctSimilarity 70", obj.cmd) self.assertIn("-minAccuracy 70", obj.cmd) self.assertIn("-scoreSign -1", obj.cmd)
def test_run_without_scoreCutoff(self): """Test FilterService.run() without score cutoff.""" options2 = Opt(40, 50, None, None, None, "allbest") obj2 = FilterService(self.alignedSam, self.targetFileName, self.filteredSam, "BowtieService", 1, options2) self.assertNotIn("-seed", obj2.cmd) self.assertNotIn("-scoreCutoff", obj2.cmd) self.assertIn("-scoreSign 1", obj2.cmd) _output, errCode, _errMsg = obj2.run() self.assertEqual(errCode, 0)
def run(self): """ The main function, it is called by PBToolRunner.start(). """ startTime = time.time() logging.info( "pbalign version: {version}".format(version=get_version())) # FIXME #logging.debug("Original arguments: " + str(self._argumentList)) # Create an AlignService by algorithm name. self._alnService = self._createAlignService(self.args.algorithm, self.args, self.fileNames, self._tempFileManager) # Make sane. self._makeSane(self.args, self.fileNames) # Run align service. try: self._alnService.run() except RuntimeError: return 1 # Create a temporary filtered SAM/BAM file as output for FilterService. outFormat = getFileFormat(self.fileNames.outputFileName) suffix = ".bam" if outFormat in \ [FILE_FORMATS.BAM, FILE_FORMATS.XML] else ".sam" self.fileNames.filteredSam = self._tempFileManager.\ RegisterNewTmpFile(suffix=suffix) # Call filter service on SAM or BAM file. self._filterService = FilterService( self.fileNames.alignerSamOut, self.fileNames.targetFileName, self.fileNames.filteredSam, self.args.algorithm, #self._alnService.name, self._alnService.scoreSign, self.args, self.fileNames.adapterGffFileName) try: self._filterService.run() except RuntimeError: return 1 # Sort bam before output if outFormat in [FILE_FORMATS.BAM, FILE_FORMATS.XML]: # Sort/make index for BAM output. try: BamPostService(self.fileNames).run() except RuntimeError: return 1 # Output all hits in SAM, BAM or CMP.H5. try: useSmrtTitle = False if (self.args.algorithm != "blasr" or self.fileNames.inputFileFormat == FILE_FORMATS.FASTA): useSmrtTitle = True self._output(inSam=self.fileNames.filteredSam, refFile=self.fileNames.targetFileName, outFile=self.fileNames.outputFileName, readType=self.args.readType, smrtTitle=useSmrtTitle) except RuntimeError: return 1 # Load QVs to cmp.h5 for Quiver if outFormat == FILE_FORMATS.CMP and \ self.args.forQuiver or self.args.loadQVs: # Call post service for quiver. try: ForQuiverService(self.fileNames, self.args).run() except RuntimeError: return 1 # Delete temporay files anyway to make self._cleanUp(False if (hasattr(self.args, "keepTmpFiles") and self.args.keepTmpFiles is True) else True) endTime = time.time() logging.info("Total time: {:.2f} s.".format(float(endTime - startTime))) return 0