public void parse(String inputfolder) {
    /* Check that the given folder ends with a '/'. */
    inputfolder = inputfolder + (inputfolder.endsWith("/") ? "" : "/");

    /* Read population. */
    LOG.info("Reading population...");
    PopulationReaderMatsimV5 pr = new PopulationReaderMatsimV5(this.sc);
    pr.parse(inputfolder + "population.xml.gz");

    /* Read population attributes. */
    LOG.info("Reading person attributes...");
    ObjectAttributesXmlReader oar1 =
        new ObjectAttributesXmlReader(this.sc.getPopulation().getPersonAttributes());
    oar1.putAttributeConverter(IncomeImpl.class, new SAIncomeConverter());
    oar1.parse(inputfolder + "populationAttributes.xml.gz");

    /* Read households */
    LOG.info("Reading households...");
    HouseholdsReaderV10 hhr = new HouseholdsReaderV10(this.sc.getHouseholds());
    hhr.parse(inputfolder + "households.xml.gz");

    /* Read household attributes. */
    LOG.info("Reading household attributes...");
    ObjectAttributesXmlReader oar2 =
        new ObjectAttributesXmlReader(this.sc.getHouseholds().getHouseholdAttributes());
    oar2.putAttributeConverter(IncomeImpl.class, new SAIncomeConverter());
    oar2.putAttributeConverter(CoordImpl.class, new CoordConverter());
    oar2.parse(inputfolder + "householdAttributes.xml.gz");

    LOG.info("================================================================");
    LOG.info("Population size: " + sc.getPopulation().getPersons().size());
    LOG.info("Number of households: " + sc.getHouseholds().getHouseholds().size());
    LOG.info("================================================================");
  }