示例#1
0
def test_separation():

    tube = Tube()
    chemComp = {"a/D": 3, "b/T": 2, "c/B": 1, "d/D": 5}
    tube.chemComp = chemComp
    r = Operator.separation(tube, 0.5)
    print r
示例#2
0
    def test(self, cyc, HN, tst, tsExpt, ftest):
        
        tsPerCyc = self.pm.get("tsPerCyc")
        cls = self.pm.get("cls")
        dvol = self.pm.get("dvol")
        tag = self.pm.get("tag")
        rTime = self.pm.get("rTime")
        sepY = self.pm.get("sepY")
        dThres = self.pm.get("dThres")
        isRecordReact = self.pm.get("isRecordReact")
        isDNATube = self.pm.get("isDNATube")
        clsNum = len(cls)
        
        # Prepare test Tubes
#         print("\t\t\t\tPreparing test tubes...")
        tsTubes = list()
        for i in range(clsNum) :
            c = self.testData[i][1][0][0]
            lblPrf = "ts_cyc" + str(cyc)
            if isDNATube :
                tsTubes.extend(self.makeDNATubesFromData(lblPrf, "B", self.testData[i][0], c, tsPerCyc/2, tst, tsExpt))
            else :
                tsTubes.extend(self.makeTubesFromData(lblPrf, "B", self.testData[i][0], c, tsPerCyc/2, tst, tsExpt))
        random.shuffle(tsTubes)
        
        # Run Test
#         print("\t\t\t\tRunning test reaction...")
        testSummary = np.zeros((clsNum,clsNum))
        for i in range(tsPerCyc) :
            print("\t\t\t\t%dth test" % (i+1))
            subHN = [None]*clsNum
            DList = [None]*clsNum
            
            for j in range(clsNum) :
                ts = tsTubes[i]
                subHN[j] = HN[j].copyTube(dvol)
                subHN[j].setLabel("HN" + str(cls[j]) + "_Cycle" + str(cyc+1) + "_test" + str(i+1))
#                 print "\t\t\t\tPour test tube..."
                subHN[j].addTube(ts)
#                 print "\t\t\t\tReacting..."
                Operator.reactionSSA(subHN[j], rTime, tag, isRecordReact)
#                 print "\t\t\t\tElectrophoresis..."
                DList[j] = Operator.separation(subHN[j], sepY)
                
            csf = Classifier()
            if isDNATube :
                score, predict = csf.thresholdClassifyOnDNATube(DList, cls, dThres)
            else :
                score, predict = csf.thresholdClassifyOnTube(DList, cls, dThres)

            testSummary[cls.index(predict)][cls.index(ts.cls)] += 1
            tsTubes[i] = None
            
        # Save Result
        dm.saveTestSummaryLine(ftest, cyc, testSummary)
示例#3
0
    def run(self, trTubes, cyc, tst, tsExpt):

        cls = self.pm.get("cls")
        dim = self.pm.get("dim")
        conc = self.pm.get("conc")
        vol = self.pm.get("vol")
        dvol = self.pm.get("dvol")
        dThres = self.pm.get("dThres")
        tag = self.pm.get("tag")
        sepY = self.pm.get("sepY")
        rThres = self.pm.get("rThres")
        rTime = self.pm.get("rTime")
        isDNATube = self.pm.get("isDNATube")
        isRecordReact = self.pm.get("isRecordReact")
        clsNum = len(cls)

        dm = DataModule()
        ftrain = dm.makeTrainSummaryFile(tag)
        ftest = dm.makeTestSummaryFile(tag)
        
        HN = [None] * clsNum
        print("\t\tMaking Initial Random Hypernetworks...")
        for i in range(clsNum) :
            if isDNATube :
                HN[i] = Operator.makeRandomLibraryOnDNATube(dim, conc, vol, rThres, "T")
            else :
                HN[i] = Operator.makeRandomLibraryOnTube(dim, conc, vol, rThres)
            HN[i].setLabel("Hypernetworks" + str(cls[i]))
        
        
        print("\t\tStart Learning Cycle...")
        for i in range(cyc) :
            
            start = timer()
            
            summaryCycle = list()
            summaryCycle.append(i+1)
            for j in range(clsNum) :
                if isDNATube :
                    summaryCycle.append(HN[j].getSpcNum("T"))
                    summaryCycle.append(HN[j].getConcSum("T"))
                else :
                    summaryCycle.append(HN[j].getSpcNum())
                    summaryCycle.append(HN[j].getConcSum())
                
            print("\t\t%dth Cycle" % (i+1))
            subHN = [None] * clsNum
            DList = [None] * clsNum
            
            for j in range(clsNum) :
                print("\t\t\tFor Class %d Hypernetwork" % cls[j])
                tr = trTubes[i]
                
                subHN[j] = HN[j].divideTube(dvol)
                subHN[j].setLabel("HN" + str(cls[j]) + "_learningcycle" + str(i+1))
                print "\t\t\tPour training tube..."
                subHN[j].addTube(tr)
                print "\t\t\tReacting..."
                rTimeEnd = Operator.reactionSSA(subHN[j], rTime, tag, isRecordReact)
                summaryCycle.append(rTimeEnd)
                print "\t\t\tElectrophoresis..."
                DList[j] = Operator.separation(subHN[j], sepY)
                
            csf = Classifier()
            if isDNATube :
                score, predict = csf.thresholdClassifyOnDNATube(DList, cls, dThres)
            else :
                score, predict = csf.thresholdClassifyOnTube(DList, cls, dThres)
                
            for j in range(clsNum) :
                summaryCycle.append(score[j])
            summaryCycle.append(predict)
            summaryCycle.append(tr.cls)
            
            print("\t\t\tFeedback...")
            update = [None] * clsNum
            for j in range(clsNum) :
                if isDNATube :
                    DList[j] = Operator.PCR_DNA(DList[j])
                    update[j] = Operator.denaturationOnDNATube(DList[j], "T", dvol)
                else :
                    DList[j] = Operator.PCR(DList[j])
                    update[j] = Operator.denaturationOnTube(DList[j], "T", dvol)
                
             
            if predict == tr.cls :
                for j in range(clsNum) :
                    if cls[j] == predict :
                        Operator.amplification(update[j], 8) #TODO: Tune multiply number
                        HN[j].addTube(update[j]) 
                    else :
                        Operator.amplification(update[j], 1)
                        HN[j].addTube(update[j])
            else :
                for j in range(clsNum) :
                    if cls[j] == predict :
                        Operator.amplification(update[j], 0)
                        HN[j].addTube(update[j])
                    else :
                        Operator.amplification(update[j], 1)
                        HN[j].addTube(update[j])
            
            # Test with test data
            # don't update Hypernetwork
            print("\t\t\tTesting...")
            self.test(i, HN, tst, tsExpt, ftest)
            
            trTubes[i] = None   # Discard used tube
            end = timer()
            dt = end-start
            print("\t\t\ttime elapsed %f s" % dt)
            summaryCycle.append(dt)
            
            dm.saveTrainSummaryLine(ftrain, summaryCycle)
            
        ftrain.close()
        ftest.close()