protected void oneTestRecall() {
        System.out.println("Seq_ptr=" + this.seq_ptr);

        curSeq.removeAllElements();
        curPSeq.removeAllElements();

        int selidx = ((Integer) seqStartIndexes.get(this.seq_ptr)).intValue();
        int epiLen = ((Integer) seqLenIndexes.get(this.seq_ptr)).intValue();
        int curLen = epiLen / cueLen;
        //int curLen=epiLen/4;
        if (curLen <= 0) {
            curLen = epiLen;
        }
        int sidx = 0;

        if (this.cueLoc == this.endCue) {
            sidx = epiLen - curLen;
            if (sidx < 0) {
                sidx = 0;
            }
        }

        if (this.cueLoc == this.anyCue) {
            sidx = (int) ((epiLen - curLen) * Math.random());
            if (sidx < 0) {
                sidx = 0;
            }
        }

        System.out.println("index: " + selidx + " fullLen: " + epiLen + " partial: " + curLen + " startPos: " + sidx);
        int winidx = seqRecognition(selidx, curLen, sidx, epiLen);

            if (selidx + sidx == 0) {
        this.isNewStart = true;
    } else if (events.get(selidx + sidx - 1).isForcedTer(events.get(selidx+ sidx - 1))) {
        this.isNewStart = true;
    } else {
        this.isNewStart = false;
    }

        //get CurrentSeq list
        for (int i = selidx + sidx; i < selidx + sidx + curLen; i++) {
            this.curSeq.add(this.events.get(i));
        }


        if (winidx >= 0) {
            System.out.println("play a sequence");
            curPSeq = episodic.getSeqEvents(episodic.seqLearner.getOneSeq(((Integer) seqWinIndexes.get(winidx)).intValue()));
        }

        this.jLabel10.setText("RETRIEVE ACCURACY " + "(" + selidx + "~" + (selidx + epiLen - 1) + ")" + "/(" + 0 + "~" + (events.size() - 1) + ")");
        curStory = getStoryString(curSeq);
        curPStory = getStoryString(curPSeq);
        this.jLabel9.setText("Retrieved Episode: (" + winidx + "/" + (this.episodic.seqLearner.numCode - 1) + ")");

        timer.start();
    }