public void calculate() throws SignalMLException {

    this.setStyledTagSet(tagDocument != null ? tagDocument.getTagSet() : null);

    SignalSpace signalSpace = getParameters().getSignalSpace();

    MultichannelSampleSource sampleSource;
    if (signalDocument.getDocumentView() != null) {
      SignalView signalView = (SignalView) signalDocument.getDocumentView();

      SignalProcessingChain signalChain = signalView.getMasterPlot().getSignalChain();

      sampleSource = signalChain.createLevelCopyChain(signalSpace.getSignalSourceLevel());
    } else {
      sampleSource = signalDocument.getSampleSource();
    }

    List<String> artifactTagStyleNames = new ArrayList<String>();
    for (TagStyleGroup styleGroup : getParameters().getArtifactTagStyles()) {
      artifactTagStyleNames.addAll(styleGroup.getTagStyleNames());
    }

    List<MarkerSegmentedSampleSource> averagedSampleSources =
        new ArrayList<MarkerSegmentedSampleSource>();
    List<MarkerSegmentedSampleSource> baselineSampleSources =
        new ArrayList<MarkerSegmentedSampleSource>();
    for (TagStyleGroup tagStyleGroup : getParameters().getAveragedTagStyles()) {

      List<String> styleNames = tagStyleGroup.getTagStyleNames();

      Double startAveragingTime = null, endAveragingTime = null;
      if (signalSpace.getTimeSpaceType() == TimeSpaceType.SELECTION_BASED) {
        startAveragingTime = signalSpace.getSelectionTimeSpace().getPosition();
        endAveragingTime = startAveragingTime + signalSpace.getSelectionTimeSpace().getLength();
      }

      MarkerSegmentedSampleSource segmentedSampleSource =
          new MarkerSegmentedSampleSource(
              sampleSource,
              startAveragingTime,
              endAveragingTime,
              getStyledTagSet(),
              styleNames,
              artifactTagStyleNames,
              getParameters().getAveragingStartTime(),
              getParameters().getAveragingTimeLength(),
              signalSpace.getChannelSpace());

      MarkerSegmentedSampleSource baselineSampleSource =
          new MarkerSegmentedSampleSource(
              sampleSource,
              startAveragingTime,
              endAveragingTime,
              getStyledTagSet(),
              styleNames,
              artifactTagStyleNames,
              getParameters().getBaselineTimeStart(),
              getParameters().getBaselineTimeLength(),
              signalSpace.getChannelSpace());

      averagedSampleSources.add(segmentedSampleSource);
      baselineSampleSources.add(baselineSampleSource);
    }

    setSampleSource(averagedSampleSources);
    setBaselineSampleSources(baselineSampleSources);
  }