docs: def do( self, params ):
          """Perform the underlying experiment and summarise its results.
          Our results are the summary statistics extracted from the results of
          the instances of the underlying experiment that we performed.
  
          We drop from the calculations any experiments whose completion status
          was False, indicating an error. Our own completion status will be
          True unless we had an error summarising a field (usually caused by trying
          to summarise non-numeric data).
  
          We record the exceptions generated by any experiment we summarise under
          the metadata key :attr:`SummaryExperiment.UNDERLYING_EXCEPTIONS`
  
          :param params: the parameters to the underlying experiment
          :returns: the summary statistics of the underlying results"""
  
          # perform the underlying experiment
          rc = self.experiment().run()
          
          # extract the result dicts as a list
          results = rc[Experiment.RESULTS]
          if not isinstance(results, list):
              # force to list
              results = [ rc ]
  
          # extract only the successful runs
          sresults = [ res for res in results if res[Experiment.METADATA][Experiment.STATUS] ]
          exs = [ res[Experiment.METADATA][Experiment.EXCEPTION] for res in results if not res[Experiment.METADATA][Experiment.STATUS] ]
         
          # add extra values to our metadata record
          self._metadata[self.UNDERLYING_RESULTS]            = len(results)
          self._metadata[self.UNDERLYING_SUCCESSFUL_RESULTS] = len(sresults)
          self._metadata[self.UNDERLYING_EXCEPTIONS]         = exs
  
          # construct summary results
          return self.summarise(sresults)