code: private int computeEventCounts(EventStream eventStream, Writer eventStore, TObjectIntHashMap predicatesInOut, int cutoff) throws IOException {
      TObjectIntHashMap counter = new TObjectIntHashMap();
      int predicateIndex = 0;
      int eventCount = 0;
      while (eventStream.hasNext()) {
        Event ev = eventStream.nextEvent();
        eventCount++;
        eventStore.write(FileEventStream.toLine(ev));
        String[] ec = ev.getContext();
        for (int j = 0; j < ec.length; j++) {
          if (!predicatesInOut.containsKey(ec[j])) {
            if (counter.increment(ec[j])) {}
            else {
              counter.put(ec[j], 1);
            }
            if (counter.get(ec[j]) >= cutoff) {
              predicatesInOut.put(ec[j], predicateIndex++);
              counter.remove(ec[j]);
            }
          }
        }
      }
      predicatesInOut.trimToSize();
      eventStore.close();
      return eventCount;
    }
docs: Reads events from <tt>eventStream</tt> into a linked list.  The
  predicates associated with each event are counted and any which
  occur at least <tt>cutoff</tt> times are added to the
  <tt>predicatesInOut</tt> map along with a unique integer index.
  
  @param eventStream an <code>EventStream</code> value
  @param eventStore a writer to which the events are written to for later processing.
  @param predicatesInOut a <code>TObjectIntHashMap</code> value
  @param cutoff an <code>int</code> value