@Override
	public String calculate(VcfEntry vcfEntry) {
		if (vcfEntry == null) return null;

		try {
			// We set the master (and VcfFileIterator) 'parseNow=false', so the VcfEntry should be 'unparsed' at this moment.
			// The idea is that the workers can do this, relieving the master from this task.
			vcfEntry.parse();

			// Skip if there are filter intervals and they are not matched 
			if ((filterIntervals != null) && (filterIntervals.query(vcfEntry).isEmpty())) return null;

			// Create new 'section'
			outputFormatter.startSection(vcfEntry);

			for (Variant seqChange : vcfEntry.variants()) {
				// Calculate effects
				ChangeEffects changeEffects = snpEffectPredictor.seqChangeEffect(seqChange);

				// Create new 'section'
				outputFormatter.startSection(seqChange);

				// Show results
				for (ChangeEffect changeEffect : changeEffects)
					outputFormatter.add(changeEffect);

				// Finish up this section
				outputFormatter.endSection(seqChange);
			}

			// Finish up this section
			outputFormatter.endSection(vcfEntry);

		} catch (Throwable t) {
			snpEffCmdEff.error(t, "Error while processing VCF entry (line " + vcfEntry.getLineNum() + ") :\n\t" + vcfEntry);
			t.printStackTrace();
		}

		return vcfEntry.toString();
	}