/** Characterises results for all alternatives. */
  public void characteriseResults() {
    List<Alternative> runnableAlternatives = getRunnableAlternatives();
    List<SampleObject> allRecords = plan.getSampleRecordsDefinition().getRecords();
    for (Alternative alternative : runnableAlternatives) {
      Experiment exp = alternative.getExperiment();

      for (SampleObject record : allRecords) {
        DigitalObject u = exp.getResults().get(record);

        if (u.isDataExistent() && (u.getFitsXMLString() == null)) {
          characteriseFits(u);
        }
      }
    }
  }
  @Override
  public void init(Plan p) {
    super.init(p);

    // add empty result files where missing (only for considered
    // alternatives!)
    List<SampleObject> allRecords = p.getSampleRecordsDefinition().getRecords();
    for (Alternative alternative : p.getAlternativesDefinition().getConsideredAlternatives()) {
      Experiment exp = alternative.getExperiment();

      for (SampleObject record : allRecords) {
        DigitalObject u = exp.getResults().get(record);

        if (u == null) {
          exp.addRecord(record);
          u = exp.getResults().get(record);
        }
      }
    }
  }