Пример #1
0
    def parseOptions(self, options ):
        timer = gtime.TimeKeeper()
        if(options.subparser_name == 'parse'):
            # parse raw input
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in data parsing mode..." % self.GMVersion
            print "*******************************************************************************"
            # check this here:
            if len(options.bamfiles) < 3:
                print "Sorry, You must supply at least 3 bamFiles to use GroopM. (You supplied %d)\n Exiting..." % len(options.bamfiles)
                return
            GMdata = mstore.GMDataManager()
            success = GMdata.createDB(options.bamfiles,
                                      options.reference,
                                      options.dbname,
                                      options.cutoff,
                                      timer,
                                      force=options.force,
                                      threads=options.threads)
            if not success:
                print options.dbname,"not updated"

        elif(options.subparser_name == 'core'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in core creation mode..." % self.GMVersion
            print "*******************************************************************************"
            CE = cluster.ClusterEngine(options.dbname,
                                       timer,
                                       force=options.force,
                                       finalPlot=options.plot,
                                       plot=options.multiplot,
                                       minSize=options.size,
                                       minVol=options.bp)
            if options.graphfile is None:
                gf = ""
            else:
                gf=options.graphfile
            CE.makeCores(coreCut=options.cutoff,
                         gf=gf)

        elif(options.subparser_name == 'refine'):
            # refine bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in core refining mode..." % self.GMVersion
            print "*******************************************************************************"
            bids = []
            #if options.bids is not None:
            #    bids = options.bids
            auto = options.auto
            transform=True^options.no_transform

            RE = refine.RefineEngine(timer,
                                     dbFileName=options.dbname,
                                     transform=transform,
                                     bids=bids,
                                     loadContigNames=True)

            if options.plot:
                pfx="REFINED"
            else:
                pfx=""
            print "Refine bins"

            RE.refineBins(timer,
                          auto=auto,
                          saveBins=True,
                          plotFinal=pfx)

        elif(options.subparser_name == 'recruit'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin expansion mode..." % self.GMVersion
            print "*******************************************************************************"
            RE = refine.RefineEngine(timer,
                                     dbFileName=options.dbname,
                                     getUnbinned=True,
                                     loadContigNames=False,
                                     cutOff=options.cutoff)

            RE.recruitWrapper(timer,
                              inclusivity=options.inclusivity,
                              step=options.step,
                              saveBins=True)

        elif(options.subparser_name == 'extract'):
            # Extract data
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in '%s' extraction mode..." % (self.GMVersion, options.mode)
            print "*******************************************************************************"
            bids = []
            if options.bids is not None:
                bids = options.bids
            BX = groopmUtils.GMExtractor(options.dbname,
                                          bids=bids,
                                          folder=options.out_folder
                                          )
            if(options.mode=='contigs'):
                BX.extractContigs(timer,
                                  fasta=options.data,
                                  prefix=options.prefix,
                                  cutoff=options.cutoff)

            elif(options.mode=='reads'):
                BX.extractReads(timer,
                                bams=options.data,
                                prefix=options.prefix,
                                mixBams=options.mix_bams,
                                mixGroups=options.mix_groups,
                                mixReads=options.mix_reads,
                                interleaved=options.interleave,
                                bigFile=options.no_gzip,
                                headersOnly=options.headers_only,
                                minMapQual=options.mapping_quality,
                                maxMisMatches=options.max_distance,
                                useSuppAlignments=options.use_supplementary,
                                useSecondaryAlignments=options.use_secondary,
                                verbose=options.verbose,
                                threads=options.threads)

            else:
                raise ExtractModeNotAppropriateException("mode: "+ options.mode + " is unknown")
        elif(options.subparser_name == 'merge'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin merging mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)
            BM.loadBins(timer, makeBins=True, silent=False)
            BM.merge(options.bids, options.force, saveBins=True)

        elif(options.subparser_name == 'split'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin splitting mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)
            BM.loadBins(timer, makeBins=True, silent=False)
            BM.split(options.bid, options.parts, mode=options.mode, saveBins=True, auto=options.force)

        elif(options.subparser_name == 'delete'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin deleting mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)
            BM.loadBins(timer, makeBins=True, silent=True)#, bids=options.bids)
            BM.deleteBins(options.bids, force=options.force, saveBins=True, freeBinnedRowIndices=True)

        elif(options.subparser_name == 'plot'):
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin plotting mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)

            if options.bids is None:
                bids = []
            else:
                bids = options.bids
            BM.loadBins(timer, makeBins=True, silent=False, bids=bids, loadContigNames=False)

            BM.setColorMap(options.cm)

            BM.plotBins(FNPrefix=options.tag,
                        plotEllipsoid=True,
                        ignoreContigLengths=options.points,
                        folder=options.folder)

        elif(options.subparser_name == 'explore'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin '%s' explorer mode..." % (self.GMVersion, options.mode)
            print "*******************************************************************************"
            transform=True^options.no_transform
            bids = []
            if options.bids is not None:
                bids = options.bids
            BE = groopmUtils.BinExplorer(options.dbname,
                                         bids=bids,
                                         transform=transform,
                                         cmstring=options.cm,
                                         ignoreContigLengths=options.points)
            if(options.mode == 'binpoints'):
                BE.plotPoints(timer)
            elif(options.mode == 'binids'):
                BE.plotIds(timer)
            elif(options.mode == 'allcontigs'):
                BE.plotContigs(timer, coreCut=options.cutoff, all=True)
            elif(options.mode == 'unbinnedcontigs'):
                BE.plotUnbinned(timer, coreCut=options.cutoff)
            elif(options.mode == 'binnedcontigs'):
                BE.plotContigs(timer, coreCut=options.cutoff)
            elif(options.mode == 'binassignments'):
                BE.plotBinAssignents(timer, coreCut=options.cutoff)
            elif(options.mode == 'compare'):
                BE.plotCompare(timer, coreCut=options.cutoff)
            elif (options.mode == 'together'):
                BE.plotTogether(timer, coreCut=options.cutoff, doMers=options.kmers)
            elif (options.mode == 'sidebyside'):
                BE.plotSideBySide(timer, coreCut=options.cutoff)
            else:
                print "**Error: unknown mode:",options.mode

        elif(options.subparser_name == 'flyover'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Making a flyover..." % self.GMVersion
            print "*******************************************************************************"
            bids = []
            if options.bids is not None:
                bids = options.bids
            BE = groopmUtils.BinExplorer(options.dbname,
                                         bids=bids,
                                         transform=True,
                                         ignoreContigLengths=options.points)
            BE.plotFlyOver(timer,
                           fps=options.fps,
                           totalTime=options.totalTime,
                           percentFade=options.firstFade,
                           prefix=options.prefix,
                           showColorbar=options.colorbar,
                           title=options.title,
                           coreCut=options.cutoff,
                           format=options.format)

        elif(options.subparser_name == 'highlight'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in highlighter mode..." % self.GMVersion
            print "*******************************************************************************"
            bids = []
            if options.bids is not None:
                bids = options.bids
            BE = groopmUtils.BinExplorer(options.dbname,
                                         bids=bids,
                                         binLabelsFile = options.binlabels,
                                         contigColorsFile = options.contigcolors,
                                         ignoreContigLengths=options.points)
            BE.plotHighlights(timer,
                              options.elevation,
                              options.azimuth,
                              options.file,
                              options.filetype,
                              options.dpi,
                              drawRadius=options.radius,
                              show=options.show,
                              coreCut=options.cutoff,
                              testing=options.place
                              )

        elif(options.subparser_name == 'print'):
            BM = binManager.BinManager(dbFileName=options.dbname)
            bids = []
            if options.bids is not None:
                bids = options.bids
            BM.loadBins(timer, getUnbinned=options.unbinned, makeBins=True, silent=True, bids=bids)
            BM.printBins(options.format, fileName=options.outfile)

        elif(options.subparser_name == 'dump'):
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in data dumping mode..." % self.GMVersion
            print "*******************************************************************************"

            # prep fields. Do this first cause users are mot likely to
            # mess this part up!
            allowable_fields = ['names', 'mers', 'gc', 'coverage', 'tcoverage', 'ncoverage', 'lengths', 'bins', 'all']
            fields = options.fields.split(',')
            for field in fields:
                if field not in allowable_fields:
                    print "ERROR: field '%s' not recognised. Allowable fields are:" % field
                    print '\t',",".join(allowable_fields)
                    return
            if options.separator == '\\t':
                separator = '\t'
            else:
                separator = options.separator

            DM = GMDataManager()
            DM.dumpData(options.dbname,
                        fields,
                        options.outfile,
                        separator,
                        not options.no_headers)

        return 0
Пример #2
0
    def parseOptions(self, options):
        timer = gtime.TimeKeeper()
        if (options.subparser_name == 'parse'):
            # parse raw input
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in data parsing mode..." % self.GMVersion
            print "*******************************************************************************"
            # check this here:
            if len(options.bamfiles) < 3:
                print "Sorry, You must supply at least 3 bamFiles to use GroopM. (You supplied %d)\n Exiting..." % len(
                    options.bamfiles)
                return
            GMdata = mstore.GMDataManager()
            success = GMdata.createDB(options.bamfiles,
                                      options.reference,
                                      options.dbname,
                                      options.cutoff,
                                      timer,
                                      force=options.force,
                                      threads=options.threads)
            if not success:
                print options.dbname, "not updated"

        elif (options.subparser_name == 'core'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in core creation mode..." % self.GMVersion
            print "*******************************************************************************"
            CE = cluster.ClusterEngine(options.dbname,
                                       timer,
                                       force=options.force,
                                       finalPlot=options.plot,
                                       plot=options.multiplot,
                                       minSize=options.size,
                                       minVol=options.bp)
            if options.graphfile is None:
                gf = ""
            else:
                gf = options.graphfile
            CE.makeCores(coreCut=options.cutoff, gf=gf)

        elif (options.subparser_name == 'refine'):
            # refine bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in core refining mode..." % self.GMVersion
            print "*******************************************************************************"
            bids = []
            #if options.bids is not None:
            #    bids = options.bids
            auto = options.auto
            transform = True ^ options.no_transform

            RE = refine.RefineEngine(timer,
                                     dbFileName=options.dbname,
                                     transform=transform,
                                     bids=bids,
                                     loadContigNames=True)

            if options.plot:
                pfx = "REFINED"
            else:
                pfx = ""
            print "Refine bins"

            RE.refineBins(timer, auto=auto, saveBins=True, plotFinal=pfx)

        elif (options.subparser_name == 'recruit'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin expansion mode..." % self.GMVersion
            print "*******************************************************************************"
            RE = refine.RefineEngine(timer,
                                     dbFileName=options.dbname,
                                     getUnbinned=True,
                                     loadContigNames=False,
                                     cutOff=options.cutoff)

            RE.recruitWrapper(timer,
                              inclusivity=options.inclusivity,
                              step=options.step,
                              saveBins=True)

        elif (options.subparser_name == 'extract'):
            # Extract data
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in '%s' extraction mode..." % (
                self.GMVersion, options.mode)
            print "*******************************************************************************"
            bids = []
            if options.bids is not None:
                bids = options.bids
            BX = groopmUtils.GMExtractor(options.dbname,
                                         bids=bids,
                                         folder=options.out_folder)
            if (options.mode == 'contigs'):
                BX.extractContigs(timer,
                                  fasta=options.data,
                                  prefix=options.prefix,
                                  cutoff=options.cutoff)

            elif (options.mode == 'reads'):
                BX.extractReads(timer,
                                bams=options.data,
                                prefix=options.prefix,
                                mixBams=options.mix_bams,
                                mixGroups=options.mix_groups,
                                mixReads=options.mix_reads,
                                interleaved=options.interleave,
                                bigFile=options.no_gzip,
                                headersOnly=options.headers_only,
                                minMapQual=options.mapping_quality,
                                maxMisMatches=options.max_distance,
                                useSuppAlignments=options.use_supplementary,
                                useSecondaryAlignments=options.use_secondary,
                                verbose=options.verbose,
                                threads=options.threads)

            else:
                raise ExtractModeNotAppropriateException("mode: " +
                                                         options.mode +
                                                         " is unknown")
        elif (options.subparser_name == 'merge'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin merging mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)
            BM.loadBins(timer, makeBins=True, silent=False)
            BM.merge(options.bids, options.force, saveBins=True)

        elif (options.subparser_name == 'split'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin splitting mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)
            BM.loadBins(timer, makeBins=True, silent=False)
            BM.split(options.bid,
                     options.parts,
                     mode=options.mode,
                     saveBins=True,
                     auto=options.force)

        elif (options.subparser_name == 'delete'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin deleting mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)
            BM.loadBins(timer, makeBins=True,
                        silent=True)  #, bids=options.bids)
            BM.deleteBins(options.bids,
                          force=options.force,
                          saveBins=True,
                          freeBinnedRowIndices=True)

        elif (options.subparser_name == 'plot'):
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin plotting mode..." % self.GMVersion
            print "*******************************************************************************"
            BM = binManager.BinManager(dbFileName=options.dbname)

            if options.bids is None:
                bids = []
            else:
                bids = options.bids
            BM.loadBins(timer,
                        makeBins=True,
                        silent=False,
                        bids=bids,
                        loadContigNames=False)

            BM.setColorMap(options.cm)

            BM.plotBins(FNPrefix=options.tag,
                        plotEllipsoid=True,
                        ignoreContigLengths=options.points,
                        folder=options.folder)

        elif (options.subparser_name == 'explore'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in bin '%s' explorer mode..." % (
                self.GMVersion, options.mode)
            print "*******************************************************************************"
            transform = True ^ options.no_transform
            bids = []
            if options.bids is not None:
                bids = options.bids
            BE = groopmUtils.BinExplorer(options.dbname,
                                         bids=bids,
                                         transform=transform,
                                         cmstring=options.cm,
                                         ignoreContigLengths=options.points)
            if (options.mode == 'binpoints'):
                BE.plotPoints(timer)
            elif (options.mode == 'binids'):
                BE.plotIds(timer)
            elif (options.mode == 'allcontigs'):
                BE.plotContigs(timer, coreCut=options.cutoff, all=True)
            elif (options.mode == 'unbinnedcontigs'):
                BE.plotUnbinned(timer, coreCut=options.cutoff)
            elif (options.mode == 'binnedcontigs'):
                BE.plotContigs(timer, coreCut=options.cutoff)
            elif (options.mode == 'binassignments'):
                BE.plotBinAssignents(timer, coreCut=options.cutoff)
            elif (options.mode == 'compare'):
                BE.plotCompare(timer, coreCut=options.cutoff)
            elif (options.mode == 'together'):
                BE.plotTogether(timer,
                                coreCut=options.cutoff,
                                doMers=options.kmers)
            elif (options.mode == 'sidebyside'):
                BE.plotSideBySide(timer, coreCut=options.cutoff)
            else:
                print "**Error: unknown mode:", options.mode

        elif (options.subparser_name == 'flyover'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Making a flyover..." % self.GMVersion
            print "*******************************************************************************"
            bids = []
            if options.bids is not None:
                bids = options.bids
            BE = groopmUtils.BinExplorer(options.dbname,
                                         bids=bids,
                                         transform=True,
                                         ignoreContigLengths=options.points)
            BE.plotFlyOver(timer,
                           fps=options.fps,
                           totalTime=options.totalTime,
                           percentFade=options.firstFade,
                           prefix=options.prefix,
                           showColorbar=options.colorbar,
                           title=options.title,
                           coreCut=options.cutoff,
                           format=options.format)

        elif (options.subparser_name == 'highlight'):
            # make bin cores
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in highlighter mode..." % self.GMVersion
            print "*******************************************************************************"
            bids = []
            if options.bids is not None:
                bids = options.bids
            BE = groopmUtils.BinExplorer(options.dbname,
                                         bids=bids,
                                         binLabelsFile=options.binlabels,
                                         contigColorsFile=options.contigcolors,
                                         ignoreContigLengths=options.points)
            BE.plotHighlights(timer,
                              options.elevation,
                              options.azimuth,
                              options.file,
                              options.filetype,
                              options.dpi,
                              drawRadius=options.radius,
                              show=options.show,
                              coreCut=options.cutoff,
                              testing=options.place)

        elif (options.subparser_name == 'print'):
            BM = binManager.BinManager(dbFileName=options.dbname)
            bids = []
            if options.bids is not None:
                bids = options.bids
            BM.loadBins(timer,
                        getUnbinned=options.unbinned,
                        makeBins=True,
                        silent=True,
                        bids=bids)
            BM.printBins(options.format, fileName=options.outfile)

        elif (options.subparser_name == 'dump'):
            print "*******************************************************************************"
            print " [[GroopM %s]] Running in data dumping mode..." % self.GMVersion
            print "*******************************************************************************"

            # prep fields. Do this first cause users are mot likely to
            # mess this part up!
            allowable_fields = [
                'names', 'mers', 'gc', 'coverage', 'tcoverage', 'ncoverage',
                'lengths', 'bins', 'all'
            ]
            fields = options.fields.split(',')
            for field in fields:
                if field not in allowable_fields:
                    print "ERROR: field '%s' not recognised. Allowable fields are:" % field
                    print '\t', ",".join(allowable_fields)
                    return
            if options.separator == '\\t':
                separator = '\t'
            else:
                separator = options.separator

            DM = GMDataManager()
            DM.dumpData(options.dbname, fields, options.outfile, separator,
                        not options.no_headers)

        return 0