def getCorrectedDataset(self, bpp, snrCutoff, swapchannels=False, verbose=False):
     '''Load mol and lab files into molecule.moleculeDataset,
     call scaleTo500 and filteredSubset in order to apply SNR filter as previously calculated.'''
     scanDset = molecule.moleculeDataset(bpp, molTag=int(self.molTag),numLabelChannels=self.numLabelChannels)
     ret = scanDset.readMolFile(self.molFile)
     if ret != 0 :
         return
     suff = '.0.lab'
     if swapchannels :
         suff = '.1.lab'
     lab2File = self.molFile.replace('.mol', suff)
     scanDset.annotateLabels(lab2File)
     self.Occupancy = scanDset.CalculateOccupancy(1)
     self.Mb = scanDset.MegabasesDetected
     if verbose :
         self.varsP.updateInfoReport("   Prefilter : %s %s" % (self.molTag, scanDset.makeExperimentReport()), printalso=True)
     if self.numLabelChannels > 1:
         lab2File = self.molFile.replace('.mol', '.1.lab')
         scanDset.annotateLabels(lab2File, labelChannel=1)
     scanDset.scaleTo500()
     if verbose :
         self.varsP.updateInfoReport("   Postscale : %s %s" % (self.molTag, scanDset.makeExperimentReport()), printalso=True) #this one is ok
     filt = molecule.filteredSubset(scanDset,minLabSnr=snrCutoff,minLabels=5,minLen=self.minMolLen)
     if verbose :
         self.varsP.updateInfoReport("   Postfilter: %s %s" % (self.molTag, filt.makeExperimentReport()), printalso=True) 
     return filt
    def getLambdaMapJob(self, snrCutoff=0, verbose=False):
        #Note, verbose will print once per job, so use for debugging only
        # add lambda alignment band to this
        lambdaFilter = self.varsP.argData['lambdaFilter']
        lamMinLen = float(lambdaFilter[lambdaFilter.index('-minlen')  +1]) if '-minlen'   in lambdaFilter else 40.
        lamMaxLen = float(lambdaFilter[lambdaFilter.index('-maxlen')  +1]) if '-maxlen'   in lambdaFilter else 60.
        lamMinLab = float(lambdaFilter[lambdaFilter.index('-minsites')+1]) if '-minsites' in lambdaFilter else 6.
        lamMaxLab = float(lambdaFilter[lambdaFilter.index('-maxsites')+1]) if '-maxsites' in lambdaFilter else 10.
        #old format below (dict, not list)
        #lamMinLen = int(lambdaFilter['-minlen'  ]) # 40
        #lamMaxLen = int(lambdaFilter['-maxlen'  ]) # 60
        #lamMinLab = int(lambdaFilter['-minsites']) # 6
        #lamMaxLab = int(lambdaFilter['-maxsites']) # 10
        if verbose :
            self.varsP.updateInfoReport("lamMinLen = %.0f\n" % lamMinLen, printalso=True)
            self.varsP.updateInfoReport("lamMaxLen = %.0f\n" % lamMaxLen, printalso=True)
            self.varsP.updateInfoReport("lamMinLab = %.0f\n" % lamMinLab, printalso=True)
            self.varsP.updateInfoReport("lamMaxLab = %.0f\n" % lamMaxLab, printalso=True)
        
        #need mol file to do this; if doesn't exist, return with warning
        if not(os.path.exists(self.molFile)):
            print "Skipping map lambda job", self.molTag, "because mol file missing:", self.molFile
            self.lambdaErrFile = None
            return

        bnxFileLambda = '%s_lambda.bnx' % self.molTag
        bnxFileLambda = os.path.join(os.path.split(self.molFile)[0], bnxFileLambda)
        #if lambda bnx exists, skip the isolation step
        if os.path.exists(bnxFileLambda) :
            print "Using lambda bnx", bnxFileLambda
        else :
            print '  Isolating Lambda %s' % self.molTag
            lab2File = self.molFile.replace('.mol', '.0.lab')
            scanDset = molecule.moleculeDataset(self.curExp.basesPerPixel, molTag=int(self.molTag))
            scanDset.readMolFile(self.molFile)
            scanDset.annotateLabels(lab2File)
            # Introduce optArguments for Lambda Band
            scanDsetLambda = molecule.filteredSubset(scanDset,snrCutoff,lamMinLab,lamMaxLab,lamMinLen,lamMaxLen,True)
            scanDsetLambda.writeBnxFile(bnxFileLambda, quality=self.quality)

        self.lambdaBnx = bnxFileLambda
        baseArgs = self.varsP.argsListed('mapLambda')
        outputTarget = bnxFileLambda.replace('.bnx', '')
        curArgs = [self.varsP.RefAlignerBin, '-i', bnxFileLambda, '-o', outputTarget, '-ref', self.varsP.lambdaRef] + baseArgs
        if self.varsP.stdoutlog :
            curArgs.extend( ['-stdout', '-stderr'] )
        jobTag = self.molTag + '_lambda'
        self.lambdaErrFile = outputTarget + '.err'

        #if the err file exists, no need to process
        if os.path.exists(self.lambdaErrFile) :
            print "Skipping map lambda job ", jobTag, "because err file exists", self.lambdaErrFile
            return
        
        return mthread.singleJob(curArgs, jobTag, self.lambdaErrFile, jobTag)