def loadOld(self,imgdata):
		partq = appiondata.ApContourData()
		partq['image'] = imgdata
		partd = partq.query()
		try: 
			name = partd[0]['name']
			self.startPoint = name.lstrip('contour')
		except IndexError:
			self.startPoint = 0		
		points = appiondata.ApContourPointData()
		oldPolyPoints = []
		contourPoints = []
		types = []
		singleTypes = []
		singleTargets = []
		tubePoints = []
		self.maxVersion = -1
		bin = float(self.params['bin'])
		for i in partd:
			if not i['version']==None and int(i['version'])>self.maxVersion and i['runname']==self.params['runname']:
				self.maxVersion = int(i['version'])
		for i in partd:
			if not i['version']==None and int(i['version'])==self.maxVersion and not i['method']=='single' and i['runname']==self.params['runname']:
				contourPoints.append((i['x'],i['y']))
				types.append(i['particleType'])
				contour = i['name']
				points['contour'] = i
				point = points.query()
				contourList = []
				for j in point:
					contourList.append((int(j['x']/bin), int(j['y'])/bin))
				oldPolyPoints.append(contourList)
		return self.app.loadOld((contourPoints,oldPolyPoints,types))
 def upgradeAppionDB(self):
     if self.appion_dbupgrade.columnExists('ApContourData', 'runname'):
         if not self.appion_dbupgrade.columnExists(
                 'ApContourData', 'REF|ApSelectionRunData|selectionrun'):
             self.appion_dbupgrade.addColumn(
                 'ApContourData',
                 'REF|ApSelectionRunData|selectionrun',
                 self.appion_dbupgrade.link,
                 index=True)
         contourq = appiondata.ApContourData()
         contours = contourq.query()
         for contourdata in contours:
             if not contourdata['runname']:
                 continue
             selectionrundata = apParticle.getSelectionRunDataFromName(
                 contourdata['image'], contourdata['runname'])
             contourid = contourdata.dbid
             selectionid = selectionrundata.dbid
             if contourid and selectionid:
                 updateq = (
                     "UPDATE ApContourData AS contour " + " SET " +
                     "   contour.`REF|ApSelectionRunData|selectionrun` =  "
                     + " %d " % selectionid +
                     " WHERE contour.`DEF_id` = %d " % contourid)
                 self.appion_dbupgrade.executeCustomSQL(updateq)
def getImagePixelSizeFromContourId(contourid):
        # This returns pixelsize in Angstrom
        q = appiondata.ApSelectionRunData()
        rundata = q.direct_query(contourid)
        q = appiondata.ApContourData(selectionrun=rundata)
        r = q.query(results=1)
        lastimagedata = r[0]['image']
        apix = apDatabase.getPixelSize(lastimagedata)
        return apix
Пример #4
0
    def start(self):
        sessionname = self.params['sessionname']
        runname = self.params['runname']
        preset = self.params['preset']

        sessionq = leginondata.SessionData(name=sessionname)
        presetq = leginondata.PresetData(name=preset)
        imgquery = leginondata.AcquisitionImageData()
        imgquery['preset'] = presetq
        imgquery['session'] = sessionq
        imgtree = imgquery.query(readimages=False)
        partq = appiondata.ApContourData()
        sessiond = sessionq.query()

        file = open('contourpickerTubeCircleData-' + sessionname + '.txt', 'w')
        file.write('experiment_name ' + sessionname + '\n')
        file.write('experiment_description ' + sessiond[0]['comment'] + '\n')

        numimages = 0
        for imgdata in imgtree:
            partq['image'] = imgdata
            partd = partq.query()
            if len(partd) > 0:
                numimages += 1
        file.write('nimages ' + str(numimages) + '\n')

        numparticles = 0.0
        numcircles = 0.0
        numtubes = 0.0
        for imgdata in imgtree:
            partq['image'] = imgdata
            partd = partq.query()
            maxversion = 0
            for part in partd:
                if int(part['version']
                       ) > maxversion and part['runname'] == runname:
                    maxversion = int(part['version'])
            for part in partd:
                if int(part['version']
                       ) == maxversion and part['runname'] == runname:
                    numparticles += 1
                    if part['particleType'] == 'Circle':
                        numcircles += 1
                    if part['particleType'] == 'Tube':
                        numtubes += 1
        file.write('nparticles ' + str(numparticles) + '\n')
        if numparticles == 0:
            precenttubes = 0
            file.write('%tubes ' + str(0.0))
        else:
            percenttubes = numtubes / numparticles
            percent = percenttubes * 100
            percent *= 100
            percent = int(percent)
            percent = percent / 100.0
            file.write('%tubes ' + str(percent))
Пример #5
0
	def upgradeAppionDB(self):
		if self.appion_dbupgrade.columnExists('ApContourData', 'runname'):
			if not self.appion_dbupgrade.columnExists('ApManualParamsData', 'trace'):
				self.appion_dbupgrade.addColumn('ApManualParamsData', 'trace', self.appion_dbupgrade.bool)
			contourq = appiondata.ApContourData()
			contours = contourq.query()
			for contourdata in contours:
				paramid = contourdata['selectionrun']['manparams'].dbid
				if paramid:
					updateq = ("UPDATE ApManualParamsData AS mp "
						+" SET "
						+"  mp.`trace` = 1 "
						+" WHERE mp.`DEF_id` = %d " % paramid
					)
					self.appion_dbupgrade.executeCustomSQL(updateq)
def getContoursFromImageTraceRun(imagedata,tracerundata):
        q = appiondata.ApContourData(image=imagedata,selectionrun=tracerundata)
        r = q.query()
        return r
	def runManualPicker(self, imgdata):
		# Contourpicker does not do assessment.  Setting the current assessment to be
		# the same as the old prevents committing it to the database
		self.assessold = None
		self.assess = self.assessold
		#reset targets
		self.targets = {}
		for label in self.labels:
			self.app.panel.setTargets(label, [])
			self.targets[label] = []

					
		#open new file
		imgname = imgdata['filename']+'.dwn.mrc'
		imgpath = os.path.join(self.params['rundir'],imgname)
		self.app.panel.openImageFile(imgpath)

		self.app.panel.originaltargets = {}

		#set vital stats
		self.app.vitalstats.SetLabel("Vital Stats: Image "+str(self.stats['count'])
			+" of "+str(self.stats['imagecount'])
			+" image name: "+imgdata['filename'])
		#run the picker
		self.loadOld(imgdata)
		self.app.MainLoop()

		#targets are copied to self.targets by app
		#parse and return the targets in peaktree form
		self.app.panel.openImageFile(None)
		peaktree=[]
		for label,targets in self.targets.items():
			for target in targets:
				peaktree.append(self.XY2particle(target.x, target.y, label=label))
		
		targetsList = self.getPolyParticlePoints()
		contourTargets = self.app.panel.getTargets('Auto Create Contours')

		try:
			rundata = apParticle.getSelectionRunDataFromName(imgdata,self.params['runname'])
		except IndexError:
			# the first image does not have rundata in the database, yet
			rundata = self.commitRunToDatabase(imgdata['session'], True)
		bin = rundata['manparams']['bin']
		c = None
		counter = 0
		for i in range(len(targetsList)):
			# safe-guard from 1 or 2 point target
			if len(targetsList[i]) < 3:
				apDisplay.printWarning('contour %d has only %d points....IGNORED' % (i,len(targetsList[i])))
				counter += 1
				continue
			c=appiondata.ApContourData(name="contour"+str(int(self.startPoint)+i), image=imgdata, x=contourTargets[counter].x, y=contourTargets[counter].y,version=self.maxVersion+1, method='auto', particleType=self.app.particleTypeList[counter], selectionrun=rundata)
			c.insert()
			counter += 1
			for point in targetsList[i]:
				# save points in the scale of the original image, like particles
				point1=appiondata.ApContourPointData(x=point[0]*bin, y=point[1]*bin, contour=c)
				point1.insert()

		return peaktree
Пример #8
0
    def start(self):
        sessionname = self.params['sessionname']
        runname = self.params['runname']
        preset = self.params['preset']

        sessionq = leginondata.SessionData(name=sessionname)
        presetq = leginondata.PresetData(name=preset)
        imgquery = leginondata.AcquisitionImageData()
        imgquery['preset'] = presetq
        imgquery['session'] = sessionq
        imgtree = imgquery.query(readimages=False)
        partq = appiondata.ApContourData()
        sessiond = sessionq.query()
        selectionid = apParticle.getSelectionIdFromName(runname, sessionname)
        if not selectionid:
            apDisplay.printWarning(
                'No Object Tracing Run found in database, Skipping.......')
            return
        selectionrundata = apParticle.getSelectionRunDataFromID(selectionid)

        file = open('contourpickerData-' + sessionname + '.txt', 'w')
        file.write('session_id ' + runname + '\n')
        file.write('usr_id ' + os.getlogin() + '\n')
        file.write('experiment_name ' + sessionname + '\n')
        file.write('experiment_description ' + sessiond[0]['comment'].strip() +
                   '\n')
        file.write('nimages ' + str(len(imgtree)) + '\n')

        for imgdata in imgtree:
            file.write('START_IMAGE' + '\n')
            partq['image'] = imgdata
            partq['selectionrun'] = selectionrundata
            partd = partq.query()
            if len(partd) > 0:
                file.write('image_refID ' + str(partd[0]['image'].dbid) + '\n')
            file.write('image_name ' + imgdata['filename'] + '\n')
            if len(partd) > 0:
                file.write('time_roi ' + str(partd[0].timestamp) + '\n')
            #file.write('time_roi ' + partd[0]['DEF_timestamp'] + '\n')
            file.write('dfac = 1\n')
            maxversion = 0
            numparticles = 0
            for part in partd:
                if int(part['version']) > maxversion:
                    maxversion = int(part['version'])
            for part in partd:
                if int(part['version']) == maxversion:
                    numparticles += 1
            file.write('version_id ' + str(maxversion) + '\n')
            file.write('ncontours ' + str(numparticles) + '\n')
            pointq = appiondata.ApContourPointData()
            for part in partd:
                if int(part['version']) == maxversion:
                    #		file.write('contour_number ' + )
                    file.write('method_used ' + part['method'] + ' ')
                    pointq['contour'] = part
                    pointd = pointq.query()
                    for point in pointd:
                        file.write(
                            str(point['x']) + ',' + str(point['y']) + ';')
                    file.write('\n')
            file.write('END_IMAGE' + '\n')