def insertAnalysis(self, imagicstack, runtime, insert=False): ### create MSAParam object msaq = appiondata.ApImagicAlignAnalysisData() msaq['runname'] = self.params['runname'] msaq['run_seconds'] = runtime msaq['bin'] = self.params['bin'] msaq['highpass'] = self.params['hpfilt'] msaq['lowpass'] = self.params['lpfilt'] msaq['mask_radius'] = self.params['mask_radius'] msaq['mask_dropoff'] = self.params['mask_dropoff'] msaq['numiters'] = self.params['numiters'] msaq['overcorrection'] = self.params['overcorrection'] msaq['MSAdistance'] = self.params['MSAdistance'] msaq['eigenimages'] = "eigenimages" ### finish analysis run analysisrunq = appiondata.ApAlignAnalysisRunData() analysisrunq['runname'] = self.params['runname'] analysisrunq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir'])) analysisrunq['imagicMSArun'] = msaq analysisrunq['alignstack'] = self.alignstackdata analysisrunq['hidden'] = False analysisrunq['description'] = self.params['description'] apDisplay.printMsg("inserting Align Analysis Run parameters into database") if insert is True: analysisrunq.insert() return
def checkAnalysisRun(self): # create a norefParam object analysisrunq = appiondata.ApAlignAnalysisRunData() analysisrunq['runname'] = self.params['runname'] analysisrunq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir'])) # ... path makes the run unique: uniquerun = analysisrunq.query(results=1) if uniquerun: apDisplay.printError("Run name '"+self.params['runname']+"' for stackid="+\ str(self.params['alignid'])+"\nis already in the database")
def insertCoranRun(self, insert=False): # create a AlignAnalysisRun object analysisq = appiondata.ApAlignAnalysisRunData() analysisq['runname'] = self.params['runname'] analysisq['path'] = appiondata.ApPathData( path=os.path.abspath(self.params['rundir'])) # ... path makes the run unique: uniquerun = analysisq.query(results=1) if uniquerun and insert is True: apDisplay.printError("Run name '"+self.params['runname']+"' for align stack id="+\ str(self.params['alignstackid'])+"\nis already in the database") coranq = appiondata.ApCoranRunData() coranq['num_factors'] = self.params['numfactors'] coranq['mask_diam'] = 2.0 * self.params['maskrad'] coranq['run_seconds'] = self.runtime # finish AlignAnalysisRun object analysisq['description'] = self.params['description'] analysisq['alignstack'] = self.alignstackdata analysisq['hidden'] = False analysisq['coranrun'] = coranq apDisplay.printMsg( "inserting Align Analysis Run parameters into database") if insert is True: analysisq.insert() ### eigen data for i in range(self.params['numfactors']): factnum = i + 1 eigenq = appiondata.ApCoranEigenImageData() eigenq['coranRun'] = coranq eigenq['factor_num'] = factnum path = os.path.join(self.params['rundir'], "coran") eigenq['path'] = appiondata.ApPathData(path=os.path.abspath(path)) imgname = ("eigenimg%02d.png" % (factnum)) eigenq['image_name'] = imgname if not os.path.isfile(os.path.join(path, imgname)): apDisplay.printWarning(imgname + " does not exist") continue if insert is True: eigenq['percent_contrib'] = self.contriblist[i] eigenq.insert() return
def insertAffinityPropagationRun(self, classes): ### Preliminary data numclass = len(classes.keys()) projectid = apProject.getProjectIdFromAlignStackId(self.params['alignstackid']) alignstackdata = appiondata.ApAlignStackData.direct_query(self.params['alignstackid']) pathdata = appiondata.ApPathData(path=os.path.abspath(self.params['rundir'])) ### Affinity Propagation Params object affpropq = appiondata.ApAffinityPropagationClusterParamsData() affpropq['mask_diam'] = 2.0*self.params['maskrad'] affpropq['run_seconds'] = time.time()-self.t0 affpropq['preference_type'] = self.params['preftype'] ### Align Analysis Run object analysisq = appiondata.ApAlignAnalysisRunData() analysisq['runname'] = self.params['runname'] analysisq['path'] = pathdata analysisq['description'] = self.params['description'] analysisq['alignstack'] = alignstackdata analysisq['hidden'] = False ### linked through cluster not analysis ### Clustering Run object clusterrunq = appiondata.ApClusteringRunData() clusterrunq['runname'] = self.params['runname'] clusterrunq['description'] = self.params['description'] clusterrunq['boxsize'] = alignstackdata['boxsize'] clusterrunq['pixelsize'] = alignstackdata['pixelsize'] clusterrunq['num_particles'] = self.params['numpart'] clusterrunq['alignstack'] = alignstackdata clusterrunq['analysisrun'] = analysisq clusterrunq['affpropparams'] = affpropq ### Clustering Stack object clusterstackq = appiondata.ApClusteringStackData() clusterstackq['avg_imagicfile'] = "classaverage-"+self.timestamp+".hed" clusterstackq['num_classes'] = numclass clusterstackq['clusterrun'] = clusterrunq clusterstackq['path'] = pathdata clusterstackq['hidden'] = False imagicfile = os.path.join(self.params['rundir'], clusterstackq['avg_imagicfile']) if not os.path.isfile(imagicfile): apDisplay.printError("could not find average stack file: "+imagicfile) ### looping over clusters apDisplay.printColor("Inserting particle classification data, please wait", "cyan") for i,classkey in enumerate(classes.keys()): classnum = i+1 partlist = classes[classkey] #print "MINIMUM: ", min(partlist) classroot = "%s.%d"% (self.timestamp, classnum-1) classdocfile = os.path.join(self.params['rundir'], classroot) ### Clustering Particle object clusterrefq = appiondata.ApClusteringReferenceData() clusterrefq['refnum'] = classnum clusterrefq['clusterrun'] = clusterrunq clusterrefq['path'] = pathdata clusterrefq['num_particles'] = len(partlist) #clusterrefq['ssnr_resolution'] = self.cluster_resolution[i] ### looping over particles sys.stderr.write(".") for partnum in partlist: alignpartdata = self.getAlignParticleData(partnum, alignstackdata) ### Clustering Particle objects clusterpartq = appiondata.ApClusteringParticleData() clusterpartq['clusterstack'] = clusterstackq clusterpartq['alignparticle'] = alignpartdata clusterpartq['partnum'] = partnum clusterpartq['refnum'] = classnum clusterpartq['clusterreference'] = clusterrefq ### finally we can insert parameters if self.params['commit'] is True: clusterpartq.insert() return
def insertKerDenSOM(self, binned=None): ### Preliminary data projectid = apProject.getProjectIdFromAlignStackId(self.params['alignstackid']) alignstackdata = appiondata.ApAlignStackData.direct_query(self.params['alignstackid']) numclass = self.params['xdim']*self.params['ydim'] pathdata = appiondata.ApPathData(path=os.path.abspath(self.params['rundir'])) ### KerDen SOM Params object kerdenq = appiondata.ApKerDenSOMParamsData() kerdenq['mask_diam'] = 2.0*self.params['maskrad'] kerdenq['x_dimension'] = self.params['xdim'] kerdenq['y_dimension'] = self.params['ydim'] kerdenq['convergence'] = self.params['converge'] kerdenq['run_seconds'] = time.time()-self.t0 ### Align Analysis Run object analysisq = appiondata.ApAlignAnalysisRunData() analysisq['runname'] = self.params['runname'] analysisq['path'] = pathdata analysisq['description'] = self.params['description'] analysisq['alignstack'] = alignstackdata analysisq['hidden'] = False ### linked through cluster not analysis #analysisq['kerdenparams'] = kerdenq ### Clustering Run object clusterrunq = appiondata.ApClusteringRunData() clusterrunq['runname'] = self.params['runname'] clusterrunq['description'] = self.params['description'] # what if we binned the aligned stack to get the new one if binned is None: boxsize = alignstackdata['boxsize'] pixelsize = alignstackdata['pixelsize'] else: boxsize = alignstackdata['boxsize'] / binned pixelsize = alignstackdata['pixelsize'] * binned clusterrunq['boxsize'] = boxsize clusterrunq['pixelsize'] = pixelsize clusterrunq['num_particles'] = self.params['numpart'] clusterrunq['alignstack'] = alignstackdata clusterrunq['analysisrun'] = analysisq clusterrunq['kerdenparams'] = kerdenq ### Clustering Stack object clusterstackq = appiondata.ApClusteringStackData() clusterstackq['avg_imagicfile'] = "kerdenstack"+self.timestamp+".hed" clusterstackq['num_classes'] = numclass clusterstackq['clusterrun'] = clusterrunq clusterstackq['path'] = pathdata clusterstackq['hidden'] = False imagicfile = os.path.join(self.params['rundir'], clusterstackq['avg_imagicfile']) if not os.path.isfile(imagicfile): apDisplay.printError("could not find average stack file: "+imagicfile) ### looping over clusters apDisplay.printColor("Inserting particle classification data, please wait", "cyan") for i in range(numclass): classnum = i+1 classroot = "%s.%d"% (self.timestamp, classnum-1) classdocfile = os.path.join(self.params['rundir'], classroot) partlist = self.readClassDocFile(classdocfile) ### Clustering Particle object clusterrefq = appiondata.ApClusteringReferenceData() clusterrefq['refnum'] = classnum clusterrefq['avg_mrcfile'] = classroot+".mrc" clusterrefq['clusterrun'] = clusterrunq clusterrefq['path'] = pathdata clusterrefq['num_particles'] = len(partlist) clusterrefq['ssnr_resolution'] = self.cluster_resolution[i] ### looping over particles sys.stderr.write(".") for partnum in partlist: alignpartdata = self.getAlignParticleData(partnum, alignstackdata) ### Clustering Particle objects clusterpartq = appiondata.ApClusteringParticleData() clusterpartq['clusterstack'] = clusterstackq clusterpartq['alignparticle'] = alignpartdata clusterpartq['partnum'] = partnum clusterpartq['refnum'] = classnum clusterpartq['clusterreference'] = clusterrefq ### finally we can insert parameters if self.params['commit'] is True: clusterpartq.insert()
def insertRotKerDenSOM(self): inserttime = time.time() ### Preliminary data projectid = apProject.getProjectIdFromAlignStackId( self.params['alignstackid']) alignstackdata = appiondata.ApAlignStackData.direct_query( self.params['alignstackid']) numclass = self.params['xdim'] * self.params['ydim'] pathdata = appiondata.ApPathData( path=os.path.abspath(self.params['rundir'])) ### rotKerDen SOM Params object rotkerdenson = appiondata.ApRotKerDenSOMParamsData() #rotkerdenson['mask_diam'] = 2.0*self.params['maskrad'] rotkerdenson['x_dimension'] = self.params['xdim'] rotkerdenson['y_dimension'] = self.params['ydim'] #rotkerdenson['convergence'] = self.params['converge'] rotkerdenson['run_seconds'] = time.time() - self.t0 rotkerdenson['initregulfact'] = self.params['initregulfact'] rotkerdenson['finalregulfact'] = self.params['finalregulfact'] rotkerdenson['incrementregulfact'] = self.params['incrementregulfact'] rotkerdenson['spectrainnerradius'] = self.params['spectrainnerradius'] rotkerdenson['spectraouterradius'] = self.params['spectraouterradius'] rotkerdenson['spectralowharmonic'] = self.params['spectralowharmonic'] rotkerdenson['spectrahighharmonic'] = self.params[ 'spectrahighharmonic'] ### Analysis Run object analysisq = appiondata.ApAlignAnalysisRunData() analysisq['runname'] = self.params['runname'] analysisq['path'] = pathdata analysisq['description'] = self.params['description'] analysisq['alignstack'] = alignstackdata analysisq['hidden'] = False ### Clustering Run object clusterrunq = appiondata.ApClusteringRunData() clusterrunq['runname'] = self.params['runname'] clusterrunq['description'] = self.params['description'] clusterrunq['boxsize'] = alignstackdata['boxsize'] clusterrunq['pixelsize'] = alignstackdata['pixelsize'] clusterrunq['num_particles'] = self.params['numpart'] clusterrunq['alignstack'] = alignstackdata clusterrunq['analysisrun'] = analysisq clusterrunq['rotkerdenparams'] = rotkerdenson ### Clustering Stack object #Stack with cluster averages?????? template = os.path.join(self.params['rundir'], self.spectraTemporalFilesMask + ".png") files = glob.glob(template) imglist = [] for listname in files: a = apImage.readPNG(listname) imglist.append(a) apImagicFile.writeImagic(imglist, "rotkerdenstack" + self.timestamp + ".hed") clusterstackq = appiondata.ApClusteringStackData() clusterstackq[ 'avg_imagicfile'] = "rotkerdenstack" + self.timestamp + ".hed" clusterstackq['num_classes'] = numclass clusterstackq['clusterrun'] = clusterrunq clusterstackq['path'] = pathdata clusterstackq['hidden'] = False imagicfile = os.path.join(self.params['rundir'], clusterstackq['avg_imagicfile']) if not os.path.isfile(imagicfile): apDisplay.printError("could not find average stack file: " + imagicfile) ### looping over clusters apDisplay.printColor( "Inserting particle classification data, please wait", "cyan") numclass = self.params['xdim'] * self.params['ydim'] for i in range(numclass): classnum = i + 1 classroot = "%s.%d" % (self.timestamp, classnum - 1) classdocfile = os.path.join(self.params['rundir'], classroot) partlist = self.readClassDocFile(classdocfile) ### Clustering Particle object # MRC image for each code node but plot or image clusterrefq = appiondata.ApClusteringReferenceData() clusterrefq['refnum'] = classnum clusterrefq['avg_mrcfile'] = classroot + ".mrc" clusterrefq['clusterrun'] = clusterrunq clusterrefq['path'] = pathdata clusterrefq['num_particles'] = len(partlist) ### looping over particles #which particles belong to which code node sys.stderr.write(".") for partnum in partlist: alignpartdata = self.getAlignParticleData( partnum, alignstackdata) ### Clustering Particle objects clusterpartq = appiondata.ApClusteringParticleData() clusterpartq['clusterstack'] = clusterstackq clusterpartq['alignparticle'] = alignpartdata clusterpartq['partnum'] = partnum clusterpartq['refnum'] = classnum clusterpartq['clusterreference'] = clusterrefq ### finally we can insert parameters if self.params['commit'] is True: clusterpartq.insert() sys.stderr.write("\n") apDisplay.printMsg("Insertion complete in %s" % (apDisplay.timeString(time.time() - inserttime)))