void FieldmapGeneratorFilter< OutputImageType >::ThreadedGenerateData( const OutputImageRegionType &outputRegionForThread, ThreadIdType threadId)
{
    typename OutputImageType::Pointer outImage = static_cast< OutputImageType * >(this->ProcessObject::GetOutput(0));
    ImageRegionIterator< OutputImageType > oit(outImage, outputRegionForThread);

    while( !oit.IsAtEnd() )
    {
        double value = 0;
        IndexType idx = oit.GetIndex();
        for (int i=0; i<3; i++)
            value += idx[i]*m_Gradient[i] + m_Offset[i];

        for (int i=0; i<m_WorldPositions.size(); i++)
        {
            mitk::Point3D c = m_WorldPositions.at(i);
            itk::Point<double, 3> vertex;
            outImage->TransformIndexToPhysicalPoint(idx, vertex);
            double dist = c.EuclideanDistanceTo(vertex);
            value += m_Heights.at(i)*exp(-dist*dist/(2*m_Variances.at(i)));
        }
        oit.Set(value);
        ++oit;
    }

    MITK_INFO << "Thread " << threadId << "finished processing";
}