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
示例#3
0
    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)