MutableEvent hist = historyWithSubcat;
MutableEvent hist = historiesWithSubcats[backOffLevel];
  public Event getHistory(TrainerEvent trainerEvent, int backOffLevel) {    ModifierEvent modEvent = (ModifierEvent)trainerEvent;    MutableEvent hist = historyWithSubcat;    hist.clear();    Symbol verbInterveningSym =      Constants.booleanToSym(modEvent.verbIntervening());    switch (backOffLevel) {    case 0:      // for p(M(t)_i | P, H, w, t, verbIntervening, (M_i-1,...,M_i-k), subcat)      hist.add(Language.training.removeGapAugmentation(modEvent.parent()));      hist.add(Language.training.removeGapAugmentation(modEvent.head()));      hist.add(modEvent.headWord().word());      hist.add(modEvent.headWord().tag());      hist.add(verbInterveningSym);      hist.add(Language.training.removeGapAugmentation(modEvent.previousMods()));      hist.add(modEvent.subcat());      break;    case 1:      // for p(M(t)_i | P, H, w, t, verbIntervening, M_i-1, subcat)      hist.add(Language.training.removeGapAugmentation(modEvent.parent()));      hist.add(Language.training.removeGapAugmentation(modEvent.head()));      hist.add(modEvent.headWord().tag());      hist.add(verbInterveningSym);      hist.add(Language.training.removeGapAugmentation(modEvent.previousMods().list().get(0)));      hist.add(modEvent.subcat());      break;    case 2:      // for p(M(t)_i | P, H, verbIntervening, M_i-1 == +START+, subcat)      Symbol prevModIsStartSym =	Constants.booleanToSym(modEvent.previousMods().list().get(0) ==			       startSym);      hist.add(Language.training.removeGapAugmentation(modEvent.parent()));      hist.add(Language.training.removeGapAugmentation(modEvent.head()));      hist.add(verbInterveningSym);      hist.add(prevModIsStartSym);      hist.add(modEvent.subcat());      break;    }    return hist;  }