code: def collect_data(self, correct_only):
          
          self.results = []
  
          def get_value_from_logfile(lines, identifier):
              """
              This method searches for values in lines of the content.
              It uses a tool-specific method to so.
              """
              return load_tool(self).get_value_from_output(lines, identifier)
  
          # Opening the ZIP archive with the logs for every run is too slow, we cache it.
          log_zip_cache = {}
          try:
              for xml_result, result_file in self._xml_results:
                  self.results.append(RunResult.create_from_xml(
                      xml_result, get_value_from_logfile, self.columns,
                      correct_only, log_zip_cache, self.columns_relevant_for_diff, result_file))
          finally:
              for file in log_zip_cache.values():
                  file.close()
  
          for column in self.columns:
              column_values = (run_result.values[run_result.columns.index(column)] for run_result in self.results)
              column.type, column.unit, column.source_unit, column.scale_factor = get_column_type(column, column_values)
  
  
          del self._xml_results
docs: Load the actual result values from the XML file and the log files.
          This may take some time if many log files have to be opened and parsed.