public ResidueInfo getResidue(PolymerType pt, Character oneLetterCode) {

    String monId;
    Map<Character, String> theMapToUse;
    switch (pt) {
      case peptide:
        theMapToUse = ResidueTools.AMINO_ACID_LOOKUP_1TO3;
        break;
      case dna:
        theMapToUse = ResidueTools.DNA_LOOKUP_1TO2;
        break;
      case rna:
        return ResidueProvider.getResidue(oneLetterCode.toString().toUpperCase());
      default:
        theMapToUse = Collections.emptyMap();
        break;
    }
    if ((monId = theMapToUse.get(oneLetterCode)) != null) {
      return ResidueProvider.getResidue(monId);
    } else if ((monId = theMapToUse.get(oneLetterCode.toString().toUpperCase().charAt(0)))
        != null) // TODO find an efficient way to convert Character to upper-case equiv
    {
      return ResidueProvider.getResidue(monId);
    } else {
      throw new RuntimeException("Could not find " + pt.toString() + " with code " + oneLetterCode);
    }
  }