def convertSQLtoEulerTree(self, results):
		t0 = time.time()
		eulertree = []
		for row in results:
			if len(row) < 11:
				apDisplay.printError("delete MySQL cache file and run again")
			try:
				eulerpair = { 'part1': {}, 'part2': {} }
				eulerpair['part1']['partid'] = int(row[0])
				eulerpair['part1']['dbid']   = int(row[1])
				eulerpair['part1']['euler1'] = float(row[2])
				eulerpair['part1']['euler2'] = float(row[3])
				eulerpair['part1']['euler3'] = float(row[4])
				eulerpair['part1']['mirror'] = self.nullOrValue(row[5])
				eulerpair['part1']['reject'] = not self.nullOrValue(row[6])
				eulerpair['part1']['tilt']   = apStack.getStackParticleTilt(eulerpair['part1']['dbid'])

				eulerpair['part2']['partid'] = int(row[7])
				eulerpair['part2']['dbid']   = int(row[8])
				eulerpair['part2']['euler1'] = float(row[9])
				eulerpair['part2']['euler2'] = float(row[10])
				eulerpair['part2']['euler3'] = float(row[11])
				eulerpair['part2']['mirror'] = self.nullOrValue(row[12])
				eulerpair['part2']['reject'] = not self.nullOrValue(row[13])
				eulerpair['part2']['tilt']   = apStack.getStackParticleTilt(eulerpair['part2']['dbid'])
				eulertree.append(eulerpair)
			except:
				print row
				apDisplay.printError("bad row entry")

		apDisplay.printMsg("Converted "+str(len(eulertree))+" eulers in "+apDisplay.timeString(time.time()-t0))
		return eulertree
Example #2
0
    def convertSQLtoEulerTree(self, results):
        t0 = time.time()
        eulertree = []
        for row in results:
            if len(row) < 11:
                apDisplay.printError("delete MySQL cache file and run again")
            try:
                eulerpair = {'part1': {}, 'part2': {}}
                eulerpair['part1']['partid'] = int(row[0])
                eulerpair['part1']['dbid'] = int(row[1])
                eulerpair['part1']['euler1'] = float(row[2])
                eulerpair['part1']['euler2'] = float(row[3])
                eulerpair['part1']['euler3'] = float(row[4])
                eulerpair['part1']['mirror'] = self.nullOrValue(row[5])
                eulerpair['part1']['reject'] = not self.nullOrValue(row[6])
                eulerpair['part1']['tilt'] = apStack.getStackParticleTilt(
                    eulerpair['part1']['dbid'])

                eulerpair['part2']['partid'] = int(row[7])
                eulerpair['part2']['dbid'] = int(row[8])
                eulerpair['part2']['euler1'] = float(row[9])
                eulerpair['part2']['euler2'] = float(row[10])
                eulerpair['part2']['euler3'] = float(row[11])
                eulerpair['part2']['mirror'] = self.nullOrValue(row[12])
                eulerpair['part2']['reject'] = not self.nullOrValue(row[13])
                eulerpair['part2']['tilt'] = apStack.getStackParticleTilt(
                    eulerpair['part2']['dbid'])
                eulertree.append(eulerpair)
            except:
                print row
                apDisplay.printError("bad row entry")

        apDisplay.printMsg("Converted " + str(len(eulertree)) + " eulers in " +
                           apDisplay.timeString(time.time() - t0))
        return eulertree
	def getEulersForIteration2(self, reconid, tiltrunid, stackid, iteration=1):
		"""
		returns all classdata for a particular refinement iteration
		"""
		#get mirror and good/bad
		t0 = time.time()

		cachefile = "mysql_cache-recon"+str(reconid)+"-iter"+str(iteration)+".pickle"
		if os.path.isfile(cachefile):
			apDisplay.printColor("Using cached MySQL query data at "+time.asctime(), "cyan")
			cachef = open(cachefile, 'r')
			eulertree = cPickle.load(cachef)
			cachef.close()
			apDisplay.printMsg("\nFetched "+str(len(eulertree))+" rows in "+apDisplay.timeString(time.time()-t0))
			return eulertree

		query = (
			"SELECT \n"
				+"  tiltd.`REF|ApParticleData|particle1` AS partnum1, \n"
				+"  tiltd.`REF|ApParticleData|particle2` AS partnum2 \n"
				+"FROM `ApTiltParticlePairData` AS tiltd \n"
				+"LEFT JOIN `ApImageTiltTransformData` as transform \n"
				+"  ON tiltd.`REF|ApImageTiltTransformData|transform` = transform.`DEF_id` \n"
				+"LEFT JOIN `ApStackParticleData` AS stpart1 \n"
				+"  ON stpart1.`REF|ApParticleData|particle` = tiltd.`REF|ApParticleData|particle1` \n"
				+"LEFT JOIN `ApStackParticleData` AS stpart2 \n"
				+"  ON stpart2.`REF|ApParticleData|particle` = tiltd.`REF|ApParticleData|particle2` \n"
				+"WHERE \n"
				#+"  transform.`REF|ApSelectionRunData|tiltrun` = "+str(tiltrunid)+" \n"
				#+"AND \n"
				+"  stpart1.`REF|ApStackData|stack` = "+str(stackid)+" \n"
				+"AND \n"
				+"  stpart2.`REF|ApStackData|stack` = "+str(stackid)+" \n"
				#+"LIMIT 50 \n"
			)
		#print query
		apDisplay.printColor("Getting all particles via MySQL query at "+time.asctime(), "yellow")
		self.cursor.execute(query)
		numrows = int(self.cursor.rowcount)
		results = self.cursor.fetchall()
		apDisplay.printMsg("Fetched "+str(len(results))+" rows in "+apDisplay.timeString(time.time()-t0))

		if len(results) < 3:
			print query
			apDisplay.printError("No tilt pairs found in this stackid="+str(stackid))

		t0 = time.time()
		eulertree = []
		apDisplay.printColor("Getting individual particle info at "+time.asctime(), "yellow")
		count = 0
		for row in results:
			count += 1
			if count % 500 == 0:
				sys.stderr.write(".")
			eulerpair = { 'part1': {}, 'part2': {} }
			partid1 = int(row[0])
			partid2 = int(row[1])
			query = (
				"SELECT \n"
					+"  stpart.`particleNumber` AS partnum, \n"
					+"  stpart.`DEF_id` AS dbid, \n"
					+"  partclass.`euler1` AS alt, partclass.`euler2` AS az, partclass.`euler3` AS phi, \n"
					+"  partclass.`mirror` AS mirror, partclass.`refine_keep` AS reject \n"
					+"FROM `ApStackParticleData` AS stpart \n"
					+"LEFT JOIN `ApRefineParticleData` AS partclass \n"
					+"  ON partclass.`REF|ApStackParticleData|particle` = stpart.`DEF_id` \n"
					+"LEFT JOIN `ApRefineIterData` AS refd \n"
					+"  ON partclass.`REF|ApRefineIterData|refineIter` = refd.`DEF_id` \n"
					+"WHERE "
					+"  stpart.`REF|ApParticleData|particle` = "+str(partid1)+" \n"
					+"AND \n"
					+"  refd.`REF|ApRefineRunData|refineRun` = "+str(reconid)+" \n"
					+"AND \n"
					+"  refd.`iteration` = "+str(iteration)+" \n"
					+"LIMIT 1 \n"
			)
			#print query
			self.cursor.execute(query)
			row = self.cursor.fetchone()
			if not row:
				continue
			eulerpair['part1']['partid'] = int(row[0])
			eulerpair['part1']['dbid']   = int(row[1])
			eulerpair['part1']['euler1'] = float(row[2])
			eulerpair['part1']['euler2'] = float(row[3])
			eulerpair['part1']['euler3'] = float(row[4])
			eulerpair['part1']['mirror'] = self.nullOrValue(row[5])
			eulerpair['part1']['reject'] = not self.nullOrValue(row[6])
			eulerpair['part1']['tilt']   = apStack.getStackParticleTilt(eulerpair['part1']['dbid'])
			query = (
				"SELECT \n"
					+"  stpart.`particleNumber` AS partnum, \n"
					+"  stpart.`DEF_id` AS dbid, \n"
					+"  partclass.`euler1` AS alt, partclass.`euler2` AS az, partclass.`euler3` AS phi, \n"
					+"  partclass.`mirror` AS mirror, partclass.`refine_keep` AS reject \n"
					+"FROM `ApStackParticleData` AS stpart \n"
					+"LEFT JOIN `ApRefineParticleData` AS partclass \n"
					+"  ON partclass.`REF|ApStackParticleData|particle` = stpart.`DEF_id` \n"
					+"LEFT JOIN `ApRefineIterData` AS refd \n"
					+"  ON partclass.`REF|ApRefineIterData|refineIter` = refd.`DEF_id` \n"
					+"WHERE "
					+"  stpart.`REF|ApParticleData|particle` = "+str(partid2)+" \n"
					+"AND \n"
					+"  refd.`REF|ApRefineRunData|refineRun` = "+str(reconid)+" \n"
					+"AND \n"
					+"  refd.`iteration` = "+str(iteration)+" \n"
					+"LIMIT 1 \n"
			)
			#print query
			self.cursor.execute(query)
			row = self.cursor.fetchone()
			if not row:
				continue
			eulerpair['part2']['partid'] = int(row[0])
			eulerpair['part2']['dbid']   = int(row[1])
			eulerpair['part2']['euler1'] = float(row[2])
			eulerpair['part2']['euler2'] = float(row[3])
			eulerpair['part2']['euler3'] = float(row[4])
			eulerpair['part2']['mirror'] = self.nullOrValue(row[5])
			eulerpair['part2']['reject'] = not self.nullOrValue(row[6])
			eulerpair['part2']['tilt']   = apStack.getStackParticleTilt(eulerpair['part2']['dbid'])
			eulertree.append(eulerpair)
			#end loop
		cachef = open(cachefile, 'w', 0666)
		cPickle.dump(eulertree, cachef)
		cachef.close()
		apDisplay.printMsg("\nFetched "+str(len(eulertree))+" rows in "+apDisplay.timeString(time.time()-t0))
		return eulertree
Example #4
0
    def getEulersForIteration2(self, reconid, tiltrunid, stackid, iteration=1):
        """
		returns all classdata for a particular refinement iteration
		"""
        #get mirror and good/bad
        t0 = time.time()

        cachefile = "mysql_cache-recon" + str(reconid) + "-iter" + str(
            iteration) + ".pickle"
        if os.path.isfile(cachefile):
            apDisplay.printColor(
                "Using cached MySQL query data at " + time.asctime(), "cyan")
            cachef = open(cachefile, 'r')
            eulertree = cPickle.load(cachef)
            cachef.close()
            apDisplay.printMsg("\nFetched " + str(len(eulertree)) +
                               " rows in " +
                               apDisplay.timeString(time.time() - t0))
            return eulertree

        query = (
            "SELECT \n" +
            "  tiltd.`REF|ApParticleData|particle1` AS partnum1, \n" +
            "  tiltd.`REF|ApParticleData|particle2` AS partnum2 \n" +
            "FROM `ApTiltParticlePairData` AS tiltd \n" +
            "LEFT JOIN `ApImageTiltTransformData` as transform \n" +
            "  ON tiltd.`REF|ApImageTiltTransformData|transform` = transform.`DEF_id` \n"
            + "LEFT JOIN `ApStackParticleData` AS stpart1 \n" +
            "  ON stpart1.`REF|ApParticleData|particle` = tiltd.`REF|ApParticleData|particle1` \n"
            + "LEFT JOIN `ApStackParticleData` AS stpart2 \n" +
            "  ON stpart2.`REF|ApParticleData|particle` = tiltd.`REF|ApParticleData|particle2` \n"
            + "WHERE \n"
            #+"  transform.`REF|ApSelectionRunData|tiltrun` = "+str(tiltrunid)+" \n"
            #+"AND \n"
            + "  stpart1.`REF|ApStackData|stack` = " + str(stackid) + " \n" +
            "AND \n" + "  stpart2.`REF|ApStackData|stack` = " + str(stackid) +
            " \n"
            #+"LIMIT 50 \n"
        )
        #print query
        apDisplay.printColor(
            "Getting all particles via MySQL query at " + time.asctime(),
            "yellow")
        self.cursor.execute(query)
        numrows = int(self.cursor.rowcount)
        results = self.cursor.fetchall()
        apDisplay.printMsg("Fetched " + str(len(results)) + " rows in " +
                           apDisplay.timeString(time.time() - t0))

        if len(results) < 3:
            print query
            apDisplay.printError("No tilt pairs found in this stackid=" +
                                 str(stackid))

        t0 = time.time()
        eulertree = []
        apDisplay.printColor(
            "Getting individual particle info at " + time.asctime(), "yellow")
        count = 0
        for row in results:
            count += 1
            if count % 500 == 0:
                sys.stderr.write(".")
            eulerpair = {'part1': {}, 'part2': {}}
            partid1 = int(row[0])
            partid2 = int(row[1])
            query = (
                "SELECT \n" + "  stpart.`particleNumber` AS partnum, \n" +
                "  stpart.`DEF_id` AS dbid, \n" +
                "  partclass.`euler1` AS alt, partclass.`euler2` AS az, partclass.`euler3` AS phi, \n"
                +
                "  partclass.`mirror` AS mirror, partclass.`refine_keep` AS reject \n"
                + "FROM `ApStackParticleData` AS stpart \n" +
                "LEFT JOIN `ApRefineParticleData` AS partclass \n" +
                "  ON partclass.`REF|ApStackParticleData|particle` = stpart.`DEF_id` \n"
                + "LEFT JOIN `ApRefineIterData` AS refd \n" +
                "  ON partclass.`REF|ApRefineIterData|refineIter` = refd.`DEF_id` \n"
                + "WHERE " + "  stpart.`REF|ApParticleData|particle` = " +
                str(partid1) + " \n" + "AND \n" +
                "  refd.`REF|ApRefineRunData|refineRun` = " + str(reconid) +
                " \n" + "AND \n" + "  refd.`iteration` = " + str(iteration) +
                " \n" + "LIMIT 1 \n")
            #print query
            self.cursor.execute(query)
            row = self.cursor.fetchone()
            if not row:
                continue
            eulerpair['part1']['partid'] = int(row[0])
            eulerpair['part1']['dbid'] = int(row[1])
            eulerpair['part1']['euler1'] = float(row[2])
            eulerpair['part1']['euler2'] = float(row[3])
            eulerpair['part1']['euler3'] = float(row[4])
            eulerpair['part1']['mirror'] = self.nullOrValue(row[5])
            eulerpair['part1']['reject'] = not self.nullOrValue(row[6])
            eulerpair['part1']['tilt'] = apStack.getStackParticleTilt(
                eulerpair['part1']['dbid'])
            query = (
                "SELECT \n" + "  stpart.`particleNumber` AS partnum, \n" +
                "  stpart.`DEF_id` AS dbid, \n" +
                "  partclass.`euler1` AS alt, partclass.`euler2` AS az, partclass.`euler3` AS phi, \n"
                +
                "  partclass.`mirror` AS mirror, partclass.`refine_keep` AS reject \n"
                + "FROM `ApStackParticleData` AS stpart \n" +
                "LEFT JOIN `ApRefineParticleData` AS partclass \n" +
                "  ON partclass.`REF|ApStackParticleData|particle` = stpart.`DEF_id` \n"
                + "LEFT JOIN `ApRefineIterData` AS refd \n" +
                "  ON partclass.`REF|ApRefineIterData|refineIter` = refd.`DEF_id` \n"
                + "WHERE " + "  stpart.`REF|ApParticleData|particle` = " +
                str(partid2) + " \n" + "AND \n" +
                "  refd.`REF|ApRefineRunData|refineRun` = " + str(reconid) +
                " \n" + "AND \n" + "  refd.`iteration` = " + str(iteration) +
                " \n" + "LIMIT 1 \n")
            #print query
            self.cursor.execute(query)
            row = self.cursor.fetchone()
            if not row:
                continue
            eulerpair['part2']['partid'] = int(row[0])
            eulerpair['part2']['dbid'] = int(row[1])
            eulerpair['part2']['euler1'] = float(row[2])
            eulerpair['part2']['euler2'] = float(row[3])
            eulerpair['part2']['euler3'] = float(row[4])
            eulerpair['part2']['mirror'] = self.nullOrValue(row[5])
            eulerpair['part2']['reject'] = not self.nullOrValue(row[6])
            eulerpair['part2']['tilt'] = apStack.getStackParticleTilt(
                eulerpair['part2']['dbid'])
            eulertree.append(eulerpair)
            #end loop
        cachef = open(cachefile, 'w', 0666)
        cPickle.dump(eulertree, cachef)
        cachef.close()
        apDisplay.printMsg("\nFetched " + str(len(eulertree)) + " rows in " +
                           apDisplay.timeString(time.time() - t0))
        return eulertree