def insertJumpIntoDB(self, stackpartid, jumpdata, reconrunid=None, multimodelrunid=None): if reconrunid is None and multimodelrunid is None: return None else: if multimodelrunid is None: #refinerundata=appiondata.ApRefineRunData.direct_query(reconid) ejumpq = appiondata.ApEulerJumpData() ejumpq[ 'particle'] = appiondata.ApStackParticleData.direct_query( stackpartid) ejumpq['refineRun'] = appiondata.ApRefineRunData.direct_query( reconrunid) for key in ('median', 'mean', 'stdev', 'min', 'max'): ejumpq[key] = jumpdata[key] ejumpq.insert() else: ejumpq = appiondata.ApEulerJumpData() ejumpq[ 'particle'] = appiondata.ApStackParticleData.direct_query( stackpartid) ejumpq[ 'multiModelRefineRun'] = appiondata.ApMultiModelRefineRunData.direct_query( multimodelrunid) for key in ('median', 'mean', 'stdev', 'min', 'max'): ejumpq[key] = jumpdata[key] ejumpq.insert()
def getJumpDataFromDB(self, stackpartid, reconrunid=None, multimodelrunid=None): if reconrunid is None and multimodelrunid is None: return None elif reconrunid is not None and multimodelrunid is None: jumpq = appiondata.ApEulerJumpData() jumpq['particle'] = appiondata.ApStackParticleData.direct_query( stackpartid) jumpq['refineRun'] = appiondata.ApRefineRunData.direct_query( reconrunid) jumpdatas = jumpq.query(results=1) if not jumpdatas: return None return jumpdatas[0] elif reconrunid is None and multimodelrunid is not None: jumpq = appiondata.ApEulerJumpData() jumpq['particle'] = appiondata.ApStackParticleData.direct_query( stackpartid) jumpq[ 'multiModelRefineRun'] = appiondata.ApMultiModelRefineRunData.direct_query( multimodelrunid) jumpdatas = jumpq.query(results=1) if not jumpdatas: return None return jumpdatas[0] else: return None
def start(self): ### new stack path oldstack = os.path.join(self.stackdata['path']['path'], self.stackdata['name']) newstack = os.path.join(self.params['rundir'], self.stackdata['name']) apStack.checkForPreviousStack(newstack) ### get particles from stack apDisplay.printMsg("Querying stack particles") t0 = time.time() stackpartq = appiondata.ApStackParticleData() stackpartq['stack'] = self.stackdata particles = stackpartq.query() apDisplay.printMsg("Finished in " + apDisplay.timeString(time.time() - t0)) ### write included particles to text file includeParticle = [] excludeParticle = 0 f = open("test.log", "w") count = 0 apDisplay.printMsg("Processing stack particles") t0 = time.time() for part in particles: count += 1 if count % 500 == 0: sys.stderr.write(".") emanstackpartnum = part['particleNumber'] - 1 ### get euler jump data jumpq = appiondata.ApEulerJumpData() jumpq['particle'] = part jumpq['refineRun'] = self.recondata jumpdatas = jumpq.query(results=1) if not jumpdatas or len(jumpdatas) < 1: ### no data continue jumpdata = jumpdatas[0] if jumpdata['median'] is None or jumpdata['median'] > self.params[ 'maxjump']: ### bad particle excludeParticle += 1 f.write("%d\t%d\t%.1f\texclude\n" % (count, emanstackpartnum, jumpdata['median'])) else: ### good particle includeParticle.append(emanstackpartnum) f.write("%d\t%d\t%.1f\tinclude\n" % (count, emanstackpartnum, jumpdata['median'])) sys.stderr.write("\n") apDisplay.printMsg("Finished in " + apDisplay.timeString(time.time() - t0)) f.close() includeParticle.sort() apDisplay.printMsg("Keeping " + str(len(includeParticle)) + " and excluding " + str(excludeParticle) + " particles") #print includeParticle ### write kept particles to file self.params['keepfile'] = os.path.join( self.params['rundir'], "keepfile-" + self.timestamp + ".list") apDisplay.printMsg("writing to keepfile " + self.params['keepfile']) kf = open(self.params['keepfile'], "w") for partnum in includeParticle: kf.write(str(partnum) + "\n") kf.close() ### get number of particles numparticles = len(includeParticle) self.params['description'] += (" ... %d no jumpers substack" % (numparticles, )) ### create the new sub stack apStack.makeNewStack(oldstack, newstack, self.params['keepfile'], bad=True) if not os.path.isfile(newstack): apDisplay.printError("No stack was created") apStack.averageStack(stack=newstack) if self.params['commit'] is True: apStack.commitSubStack(self.params) newstackid = apStack.getStackIdFromPath(newstack) apStackMeanPlot.makeStackMeanPlot(newstackid, gridpoints=6)