def commitToDatabase(self, imgdata): """ Uses the appionLoop commit """ imgassess = apDatabase.getImgCompleteStatus(imgdata) tiltdata = apTiltPair.getTiltPair(imgdata) msg = not self.params['background'] if tiltdata is None: if imgassess is not False: apDisplay.printColor("\nrejecting unpaired image: "+apDisplay.short(imgdata['filename']), "red") apDatabase.insertImgAssessmentStatus(imgdata, self.params['runid'], False, msg=msg) self.reject+=1 return if self.params['background'] is False: apDisplay.printMsg("tiltpair: "+apDisplay.short(tiltdata['filename'])) tiltassess = apDatabase.getImgCompleteStatus(tiltdata) if imgassess is False or tiltassess is False: if imgassess is not False: apDisplay.printColor("\nrejecting bad tilt images: "+apDisplay.short(imgdata['filename']), "magenta") if tiltassess is not False: apDisplay.printColor("\nrejecting bad tilt images: "+apDisplay.short(tiltdata['filename']), "magenta") apDatabase.insertImgAssessmentStatus(imgdata, self.params['runid'], False, msg=msg) apDatabase.insertImgAssessmentStatus(tiltdata, self.params['runid'], False, msg=msg) self.reject+=2 if self.params['background'] is False: print "Assessment:", imgassess, tiltassess return
def commitToDatabase(self, imgdata): """ Uses the appionLoop commit """ imgassess = apDatabase.getImgCompleteStatus(imgdata) tiltdata = apTiltPair.getTiltPair(imgdata) msg = not self.params['background'] if tiltdata is None: if imgassess is not False: apDisplay.printColor("\nrejecting unpaired image: "+apDisplay.short(imgdata['filename']), "red") apDatabase.insertImgAssessmentStatus(imgdata, self.params['runid'], False, msg=msg) self.reject+=1 return if self.params['background'] is False: apDisplay.printMsg("tiltpair: "+apDisplay.short(tiltdata['filename'])) tiltassess = apDatabase.getImgCompleteStatus(tiltdata) if imgassess is False or tiltassess is False: if imgassess is not False: apDisplay.printColor("\nrejecting bad tilt images: "+apDisplay.short(imgdata['filename']), "magenta") if tiltassess is not False: apDisplay.printColor("\nrejecting bad tilt images: "+apDisplay.short(tiltdata['filename']), "magenta") apDatabase.insertImgAssessmentStatus(imgdata, self.params['runid'], False, msg=msg) apDatabase.insertImgAssessmentStatus(tiltdata, self.params['runid'], False, msg=msg) self.reject+=2 if self.params['background'] is False: print "Assessment:", imgassess, tiltassess return
def loopCommitToDatabase(self, imgdata): """ Over-writes the particleLoop commit and uses the appionLoop commit """ tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: apDisplay.printWarning("Tilt data not found; not commiting data") return False ### insert the runid self.commitRunToDatabase(imgdata['session'], True) if self.assess is not None: #note runid is overrided to be 'run1' apDatabase.insertImgAssessmentStatus(imgdata, self.params['runname'], self.assess) apDatabase.insertImgAssessmentStatus(tiltdata, self.params['runname'], self.assess) if len(self.peaktree1) < 3 or len(self.peaktree1) < 3: apDisplay.printWarning("Not enough particle picks; not commiting transform or particle data") return False ### insert the transform transdata = apTiltPair.insertTiltTransform(imgdata, tiltdata, self.tiltparams, self.params) ### insert the particles self.insertParticlePeakPairs(imgdata, tiltdata, transdata)
def rejectTiltPairs(self, imgdata): tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: apDisplay.printColor("\nrejecting unpaired image: "+apDisplay.short(imgdata['filename']), "red") return False tiltassess = apDatabase.getImgCompleteStatus(tiltdata) if tiltassess is False: apDisplay.printColor("\nrejecting bad tilt images: "+apDisplay.short(imgdata['filename']), "magenta") return False return True
def rejectTiltPairs(self, imgdata): tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: apDisplay.printColor( "\nrejecting unpaired image: " + apDisplay.short(imgdata['filename']), "red") return False tiltassess = apDatabase.getImgCompleteStatus(tiltdata) if tiltassess is False: apDisplay.printColor( "\nrejecting bad tilt images: " + apDisplay.short(imgdata['filename']), "magenta") return False return True
def loopProcessImage(self, imgdata): """ Over-writes the particleLoop processImage and uses the appionLoop processImage """ #GET THE TILT PAIR tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: return ### process images procimgpath = os.path.join(self.params['rundir'], imgdata['filename'] + '.dwn.mrc') if not os.path.isfile(procimgpath): apDisplay.printMsg("processing mrc for first image") apFindEM.processAndSaveImage(imgdata, params=self.params) procimg1 = apImage.mrcToArray(procimgpath, msg=False) procimgpath = os.path.join(self.params['rundir'], tiltdata['filename'] + '.dwn.mrc') if not os.path.isfile(procimgpath): apDisplay.printMsg("processing mrc for second image") apFindEM.processAndSaveImage(tiltdata, params=self.params) procimg2 = apImage.mrcToArray(procimgpath, msg=False) #RUN THE ALIGNER GUI result = self.runTiltAligner(imgdata, tiltdata) if self.badprocess is True: return numpeaks = len(self.peaktree1) #apDisplay.printMsg("Found "+str(numpeaks)+" particles for "+apDisplay.shortenImageName(imgdata['filename'])) self.stats['lastpeaks'] = numpeaks ### mask the images procimg1, procimg2 = apTiltTransform.maskOverlapRegion( procimg1, procimg2, self.data) #CREATE PEAK JPEG if self.threadJpeg is True: threading.Thread(target=apPeaks.createTiltedPeakJpeg, args=(imgdata, tiltdata, self.peaktree1, self.peaktree2, self.params, procimg1, procimg2)).start() else: apPeaks.createTiltedPeakJpeg(imgdata, tiltdata, self.peaktree1, self.peaktree2, self.params, procimg1, procimg2) #EXTRA DONE DICT CALL self._writeDoneDict(tiltdata['filename'])
def loopProcessImage(self, imgdata): """ Over-writes the particleLoop processImage and uses the appionLoop processImage """ #GET THE TILT PAIR tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: return ### process images procimgpath = os.path.join(self.params['rundir'], imgdata['filename']+'.dwn.mrc') if not os.path.isfile(procimgpath): apDisplay.printMsg("processing mrc for first image") apFindEM.processAndSaveImage(imgdata, params=self.params) procimg1 = apImage.mrcToArray(procimgpath, msg=False) procimgpath = os.path.join(self.params['rundir'], tiltdata['filename']+'.dwn.mrc') if not os.path.isfile(procimgpath): apDisplay.printMsg("processing mrc for second image") apFindEM.processAndSaveImage(tiltdata, params=self.params) procimg2 = apImage.mrcToArray(procimgpath, msg=False) #RUN THE ALIGNER GUI result = self.runTiltAligner(imgdata, tiltdata) if self.badprocess is True: return numpeaks = len(self.peaktree1) #apDisplay.printMsg("Found "+str(numpeaks)+" particles for "+apDisplay.shortenImageName(imgdata['filename'])) self.stats['lastpeaks'] = numpeaks ### mask the images procimg1, procimg2 = apTiltTransform.maskOverlapRegion(procimg1, procimg2, self.data) #CREATE PEAK JPEG if self.threadJpeg is True: threading.Thread(target=apPeaks.createTiltedPeakJpeg, args=(imgdata, tiltdata, self.peaktree1, self.peaktree2, self.params, procimg1, procimg2)).start() else: apPeaks.createTiltedPeakJpeg(imgdata, tiltdata, self.peaktree1, self.peaktree2, self.params, procimg1, procimg2) #EXTRA DONE DICT CALL self._writeDoneDict(tiltdata['filename'])
def loopCommitToDatabase(self, imgdata): """ Over-writes the particleLoop commit and uses the appionLoop commit """ tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: apDisplay.printWarning("Tilt data not found; not commiting data") return False ### insert the runid self.commitRunToDatabase(imgdata['session'], True) if len(self.peaktree1) < 3 or len(self.peaktree2) < 3: apDisplay.printWarning("Not enough particle picks; not commiting transform or particle data") return False ### insert the transform transdata = apTiltPair.insertTiltTransform(imgdata, tiltdata, self.data, self.params) ### insert the particles self.insertParticlePeakPairs(imgdata, tiltdata, transdata)
def processAndSaveAllImages(self): print "Pre-processing images before picking\nNow is a good time to go get a candy bar" count = 0 total = len(self.imgtree) for imgdata in self.imgtree: count += 1 tiltdata = apTiltPair.getTiltPair(imgdata) if tiltdata is None: #reject it apDatabase.insertImgAssessmentStatus(imgdata, "notiltpair", False) continue #First the image imgpath = os.path.join(self.params['rundir'], imgdata['filename']+'.dwn.mrc') if os.path.isfile(imgpath): sys.stderr.write(".") #print "already processed: ",apDisplay.short(imgdata['filename']) else: sys.stderr.write("#") #print "processing: ",apDisplay.short(imgdata['filename']) apFindEM.processAndSaveImage(imgdata, params=self.params) #Now for its tilt pair tiltpath = os.path.join(self.params['rundir'], tiltdata['filename']+'.dwn.mrc') if os.path.isfile(tiltpath): sys.stderr.write(".") #print "already processed: ",apDisplay.short(tiltdata['filename']) else: sys.stderr.write("#") #print "processing: ",apDisplay.short(tiltdata['filename']) apFindEM.processAndSaveImage(tiltdata, params=self.params) if count % 30 == 0: sys.stderr.write(" %d left\n" % (total-count)) ### check if automation was already run outname1 = os.path.basename(imgdata['filename'])+"."+self.getExtension() outname2 = os.path.basename(tiltdata['filename'])+"."+self.getExtension() outfile1 = os.path.join(self.params['pickdatadir'], outname1) outfile2 = os.path.join(self.params['pickdatadir'], outname2) if os.path.isfile(outfile1): sys.stderr.write(",") else: ### set important parameters picks1 = self.getParticlePicks(imgdata, False) picks2 = self.getParticlePicks(tiltdata, False) pixdiam = self.params['diam']/self.params['apix']/self.params['bin'] tilt1 = apDatabase.getTiltAngleDeg(imgdata) tilt2 = apDatabase.getTiltAngleDeg(tiltdata) tiltdiff = abs(tilt2) - abs(tilt1) tiltaxis = self.params['inittiltaxis'] ### run tilt automation if self.params['autopick'] is True and self.params['importalign'] is False: if len(picks1) > 0 and len(picks2) > 0: autotilter = autotilt.autoTilt() result = autotilter.processTiltPair(imgpath, tiltpath, picks1, picks2, tiltdiff, outfile1, pixdiam, tiltaxis, msg=False) if os.path.isfile(outfile1): if os.path.exists(outfile2): os.remove(outfile2) os.symlink(os.path.basename(outfile1), outfile2) sys.stderr.write("%") apDisplay.printMsg("done") return