private PhyloClusterAnalysis getPhyloAnalysis(String genusId, String typeId, Region region)
      throws IOException, ParameterProblemException, FileFormatException {
    String alignmentId = genusId;

    if (region != null) alignmentId += "-" + region.getName();

    String analysisId;
    if (typeId != null) analysisId = "phylo-minor-" + typeId;
    else analysisId = "phylo-major";

    PhyloClusterAnalysis result = phyloAnalyses.get(alignmentId + "-" + analysisId);

    if (result == null) {
      String f = "phylo-" + alignmentId + ".xml";
      if (new File(getXmlPathAsString() + f).canRead()) {
        AlignmentAnalyses analyses = readAnalyses(getXmlPathAsString() + f, getWorkingDir());
        analyses.setRegion(region);

        if (analyses.haveAnalysis(analysisId)) {
          result = (PhyloClusterAnalysis) analyses.getAnalysis(analysisId);
          phyloAnalyses.put(alignmentId + "-" + analysisId, result);
        }
      }
    }

    return result;
  }