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 commitToDatabase(self, imgdata): # if a kept mask was created in a previous mask run and the # assess flag was used (basically combining the 2 runs) there is # nothing new to commit. if self.useAcceptedMask: return sessiondata = imgdata['session'] rundir = self.params['rundir'] maskname = self.params['runname'] assessname = self.params['assessname'] bin = self.params['bin'] maskdir = os.path.join(rundir, "masks") maskrundata, maskparamsdata = apMask.getMaskParamsByRunName( maskname, sessiondata) if not maskrundata: apMask.insertManualMaskRun(sessiondata, rundir, maskname, bin) maskrundata, maskparamsdata = apMask.getMaskParamsByRunName( maskname, sessiondata) try: apParam.createDirectory(maskdir) except: apDisplay.printWarning('can not create mask directory') massessrundata, exist = apMask.insertMaskAssessmentRun( sessiondata, maskrundata, assessname) mask = self.maskimg maskfilename = imgdata['filename'] + '_mask.png' image = self.image labeled_regions, clabels = nd.label(mask) testlog = [False, 0, ""] infos = {} infos, testlog = apCrud.getLabeledInfo(image, mask, labeled_regions, range(1, clabels + 1), False, infos, testlog) offset = 1 for l1 in range(0, len(infos)): l = l1 + offset info = infos[l] info.append(l) regiondata = apMask.insertMaskRegion(maskrundata, imgdata, info) print "Inserting mask region in database" # PIL alpha channel read does not work #apImage.arrayMaskToPngAlpha(mask, os.path.join(maskdir,maskfilename)) apImage.arrayMaskToPng(mask, os.path.join(maskdir, maskfilename)) allregiondata = apMask.getMaskRegions(maskrundata, imgdata) for regiondata in allregiondata: apMask.insertMaskAssessment(massessrundata, regiondata, 1) print "Inserting mask assessment in database." if self.assess != self.assessold and self.assess is not None: #imageaccessor run is always named run1 apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess) return
def commitToDatabase(self,imgdata): # if a kept mask was created in a previous mask run and the # assess flag was used (basically combining the 2 runs) there is # nothing new to commit. if self.useAcceptedMask: return sessiondata = imgdata['session'] rundir = self.params['rundir'] maskname = self.params['runname'] assessname = self.params['assessname'] bin = self.params['bin'] maskdir=os.path.join(rundir,"masks") maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata) if not maskrundata: apMask.insertManualMaskRun(sessiondata,rundir,maskname,bin) maskrundata,maskparamsdata = apMask.getMaskParamsByRunName(maskname,sessiondata) try: apParam.createDirectory(maskdir) except: apDisplay.printWarning('can not create mask directory') massessrundata,exist = apMask.insertMaskAssessmentRun(sessiondata,maskrundata,assessname) mask = self.maskimg maskfilename = imgdata['filename']+'_mask.png' image = self.image labeled_regions,clabels=nd.label(mask) testlog = [False,0,""] infos={} infos,testlog=apCrud.getLabeledInfo(image,mask,labeled_regions,range(1,clabels+1),False,infos,testlog) offset=1 for l1 in range(0,len(infos)): l=l1+offset info=infos[l] info.append(l) regiondata= apMask.insertMaskRegion(maskrundata,imgdata,info) print "Inserting mask region in database" # PIL alpha channel read does not work #apImage.arrayMaskToPngAlpha(mask, os.path.join(maskdir,maskfilename)) apImage.arrayMaskToPng(mask, os.path.join(maskdir,maskfilename)) allregiondata = apMask.getMaskRegions(maskrundata,imgdata) for regiondata in allregiondata: apMask.insertMaskAssessment(massessrundata,regiondata,1) print "Inserting mask assessment in database." if self.assess != self.assessold and self.assess is not None: #imageaccessor run is always named run1 apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess) return
def commitToDatabase(self, imgdata): """ Uses the appionLoop commit """ msg = not self.params['background'] ### insert False values if self.imgassess is False: time.sleep(0.1) self.reject += 1 apDatabase.insertImgAssessmentStatus(imgdata, self.params['runname'], False, msg=True) f = open("imageRejectList-"+self.timestamp+".txt", "a") f.write(imgdata['filename']+"\n") f.close()
def commitToDatabase(self, imgdata): """ Uses the appionLoop commit """ msg = not self.params['background'] ### insert False values if self.imgassess is False: time.sleep(0.1) self.reject += 1 apDatabase.insertImgAssessmentStatus(imgdata, self.params['runname'], False, msg=True) f = open("imageRejectList-" + self.timestamp + ".txt", "a") f.write(imgdata['filename'] + "\n") f.close()
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 commitToDatabase(self, imgdata, rundata): if self.assess != self.assessold and self.assess is not None: #imageaccessor run is always named run1 apDatabase.insertImgAssessmentStatus(imgdata, 'run1', self.assess) return
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