[Rtk-users] Error in the FFTRampImpageFilter
Simon Rit
simon.rit at creatis.insa-lyon.fr
Mon May 18 18:10:30 EDT 2020
Hi Jérôme,
For the compilation, this should have been fixed on the master branch, see this
commit
<https://github.com/SimonRit/RTK/commit/957d049eff68011723e9c6ff0e63fc404343f8fb#diff-8e1a1216b21f73aace7824aeca857018>.
Can you check that your CMakeLists.txt file in the source directory has
this change? If not, you did not update the source directory. Note that ITK
will automatically rollback to the tag on the ITK repo if you don't change
it in the RTK.remote.cmake file or with Module_RTK_GIT_TAG (see
INSTALLATION.md
<https://github.com/SimonRit/RTK/blob/master/INSTALLATION.md>) If yes, I
don't know what's wrong, you may need to manually re-run cmake in the build
directory.
I'm a bit surprised regarding the pre-compiled packages. Can you try the
latest version compiled by the CI here
<https://dev.azure.com/simonrit/RTK/_build/results?buildId=528&view=artifacts>?
I don't know which version you have used but ITK v5.1 has been fairly
recently released so that may be the issue here.
Simon
On Mon, May 18, 2020 at 11:45 PM Jerome Lesaint <lesaint.jerome at gmail.com>
wrote:
> Hi Simon,
>
> sorry for disturbing again.
> I've updated my repo and compiled again. It fails with the above message :
>
> */Users/jerome/src/ITK/Modules/Remote/RTK/src/rtkBioscanGeometryReader.cxx:26:10:
> **fatal error: **'gdcmImageReader.h' file not found*
>
> #include <gdcmImageReader.h>
>
> * ^~~~~~~~~~~~~~~~~~~*
>
> 1 error generated.
>
> make[2]: ***
> [Modules/Remote/RTK/src/CMakeFiles/RTK.dir/rtkBioscanGeometryReader.cxx.o]
> Error 1
>
> make[2]: *** Waiting for unfinished jobs....
>
> Any idea ?
> I guess I need to turn some option(s) in cmake, to get the gdcm module ?
>
> Note that I also installed the binary python package you sent in previous
> mail. The installation and the import are OK. But the python command
>
> const = rtk.ConstantImageSource[itk.Image[itk.F,3]].New()
>
> output fails with :
>
> itkImageToImageFilterIUL2IUL2 not loaded from module ITKCommon because of
> exception:
>
> module 'ITKCommonPython' has no attribute 'itkImageToImageFilterIUL2IUL2'
>
> itkImageToImageFilterIUL3IUL3 not loaded from module ITKCommon because of
> exception:
>
> module 'ITKCommonPython' has no attribute 'itkImageToImageFilterIUL3IUL3'
>
> itkImageToImageFilterIUL2IF2 not loaded from module ITKCommon because of
> exception:
>
> module 'ITKCommonPython' has no attribute 'itkImageToImageFilterIUL2IF2'
>
> itkImageToImageFilterIUL3IF3 not loaded from module ITKCommon because of
> exception:
>
> module 'ITKCommonPython' has no attribute 'itkImageToImageFilterIUL3IF3'
>
> itkImageToImageFilterIUL2ID2 not loaded from module ITKCommon because of
> exception:
>
> module 'ITKCommonPython' has no attribute 'itkImageToImageFilterIUL2ID2'
>
> itkImageToImageFilterIUL3ID3 not loaded from module ITKCommon because of
> exception:
>
> module 'ITKCommonPython' has no attribute 'itkImageToImageFilterIUL3ID3'
>
> stdnumeric_limitsULL not loaded from module ITKCommon because of exception:
>
> module 'ITKCommonPython' has no attribute 'stdnumeric_limitsULL'
>
> itkNumericTraitsULL not loaded from module ITKCommon because of exception:
>
> module 'ITKCommonPython' has no attribute 'itkNumericTraitsULL'
>
> Template itk::PyBuffer<itk::Image<itk::Vector<double,2>,2>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferIVD22'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferIVD22'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::Vector<double,2>,2>>'
>
> Template itk::PyBuffer<itk::Image<itk::CovariantVector<double,2>,2>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferICVD22'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferICVD22'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::CovariantVector<double,2>,2>>'
>
> Template itk::PyBuffer<itk::Image<itk::Vector<double,3>,2>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferIVD32'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferIVD32'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::Vector<double,3>,2>>'
>
> Template itk::PyBuffer<itk::Image<itk::CovariantVector<double,3>,2>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferICVD32'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferICVD32'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::CovariantVector<double,3>,2>>'
>
> Template itk::PyBuffer<itk::Image<itk::Vector<double,4>,2>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferIVD42'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferIVD42'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::Vector<double,4>,2>>'
>
> Template itk::PyBuffer<itk::Image<itk::CovariantVector<double,4>,2>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferICVD42'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferICVD42'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::CovariantVector<double,4>,2>>'
>
> Template itk::PyBuffer<itk::Image<itk::Vector<double,2>,3>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferIVD23'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferIVD23'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::Vector<double,2>,3>>'
>
> Template itk::PyBuffer<itk::Image<itk::CovariantVector<double,2>,3>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferICVD23'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferICVD23'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::CovariantVector<double,2>,3>>'
>
> Template itk::PyBuffer<itk::Image<itk::Vector<double,3>,3>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferIVD33'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferIVD33'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::Vector<double,3>,3>>'
>
> Template itk::PyBuffer<itk::Image<itk::CovariantVector<double,3>,3>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferICVD33'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferICVD33'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::CovariantVector<double,3>,3>>'
>
> Template itk::PyBuffer<itk::Image<itk::Vector<double,4>,3>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferIVD43'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferIVD43'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::Vector<double,4>,3>>'
>
> Template itk::PyBuffer<itk::Image<itk::CovariantVector<double,4>,3>>
>
> already defined as <class 'itkPyBufferPython.itkPyBufferICVD43'>
>
> is redefined as <class 'itkPyBufferPython.itkPyBufferICVD43'>
>
> Warning: template already defined
> 'itk::PyBuffer<itk::Image<itk::CovariantVector<double,4>,3>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<signedchar,2>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2ISC2'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2ISC2'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<signedchar,2>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<signedchar,3>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3ISC3'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3ISC3'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<signedchar,3>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<signedshort,2>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2ISS2'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2ISS2'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<signedshort,2>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<signedshort,3>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3ISS3'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3ISS3'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<signedshort,3>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<unsignedchar,2>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2IUC2'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2IUC2'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<unsignedchar,2>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<unsignedchar,3>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3IUC3'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3IUC3'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<unsignedchar,3>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<unsignedlonglong,2>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2IULL2'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2IULL2'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<unsignedlonglong,2>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<unsignedlonglong,3>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3IULL3'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3IULL3'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<unsignedlonglong,3>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<unsignedshort,2>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2IUS2'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL2IUS2'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,2>,itk::Image<unsignedshort,2>>'
>
> Template
> itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<unsignedshort,3>>
>
> already defined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3IUS3'>
>
> is redefined as <class
> 'itkCastImageFilterPython.itkCastImageFilterIULL3IUS3'>
>
> Warning: template already defined
> 'itk::CastImageFilter<itk::Image<unsignedlonglong,3>,itk::Image<unsignedshort,3>>'
>
> itkRegularSphereMeshSourceMF2 not loaded from module ITKMesh because of
> exception:
>
> module 'ITKMeshPython' has no attribute 'itkRegularSphereMeshSourceMF2'
>
> itkRegularSphereMeshSourceMD2 not loaded from module ITKMesh because of
> exception:
>
> module 'ITKMeshPython' has no attribute 'itkRegularSphereMeshSourceMD2'
>
> itkRegularSphereMeshSourceMF3 not loaded from module ITKMesh because of
> exception:
>
> module 'ITKMeshPython' has no attribute 'itkRegularSphereMeshSourceMF3'
>
> itkRegularSphereMeshSourceMD3 not loaded from module ITKMesh because of
> exception:
>
> module 'ITKMeshPython' has no attribute 'itkRegularSphereMeshSourceMD3'
>
> itkSphereMeshSourceMF2 not loaded from module ITKMesh because of exception:
>
> module 'ITKMeshPython' has no attribute 'itkSphereMeshSourceMF2'
>
> itkSphereMeshSourceMD2 not loaded from module ITKMesh because of exception:
>
> module 'ITKMeshPython' has no attribute 'itkSphereMeshSourceMD2'
>
> itkSphereMeshSourceMF3 not loaded from module ITKMesh because of exception:
>
> module 'ITKMeshPython' has no attribute 'itkSphereMeshSourceMF3'
>
> itkSphereMeshSourceMD3 not loaded from module ITKMesh because of exception:
>
> module 'ITKMeshPython' has no attribute 'itkSphereMeshSourceMD3'
>
> ---------------------------------------------------------------------------
>
> AttributeError Traceback (most recent call
> last)
>
> <ipython-input-4-718abe43581a> in <module>
>
> ----> 1 const = rtk.ConstantImageSource[itk.Image[itk.F,3]].New()
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkLazy.py in __getattribute__(self,
> attr)
>
> * 50* module = self.__belong_lazy_attributes[attr]
>
> * 51* namespace = {}
>
> ---> 52 itkBase.LoadModule(module, namespace)
>
> * 53* self.loaded_lazy_modules.add(module)
>
> * 54* for k, v in namespace.items():
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkBase.py in LoadModule(name,
> namespace)
>
> * 81* deps = sorted(data['depends'])
>
> * 82* for dep in deps:
>
> ---> 83 LoadModule(dep, namespace)
>
> * 84*
>
> * 85* if itkConfig.ImportCallback:
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkBase.py in LoadModule(name,
> namespace)
>
> * 81* deps = sorted(data['depends'])
>
> * 82* for dep in deps:
>
> ---> 83 LoadModule(dep, namespace)
>
> * 84*
>
> * 85* if itkConfig.ImportCallback:
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkBase.py in LoadModule(name,
> namespace)
>
> * 81* deps = sorted(data['depends'])
>
> * 82* for dep in deps:
>
> ---> 83 LoadModule(dep, namespace)
>
> * 84*
>
> * 85* if itkConfig.ImportCallback:
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkBase.py in LoadModule(name,
> namespace)
>
> * 81* deps = sorted(data['depends'])
>
> * 82* for dep in deps:
>
> ---> 83 LoadModule(dep, namespace)
>
> * 84*
>
> * 85* if itkConfig.ImportCallback:
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkBase.py in LoadModule(name,
> namespace)
>
> * 81* deps = sorted(data['depends'])
>
> * 82* for dep in deps:
>
> ---> 83 LoadModule(dep, namespace)
>
> * 84*
>
> * 85* if itkConfig.ImportCallback:
>
>
> ~/src/ITK-build/Wrapping/Generators/Python/itkBase.py in LoadModule(name,
> namespace)
>
> * 171* if 'snake_case_functions' in data:
>
> * 172* for snakeCaseFunction in data
> ['snake_case_functions']:
>
> --> 173 namespace[snakeCaseFunction] = getattr(module,
> snakeCaseFunction)
>
> * 174* init_name = snakeCaseFunction +
> "_init_docstring"
>
> * 175* init_function = getattr(module, init_name)
>
>
> AttributeError: module 'ITKMeshPython' has no attribute
> 'regular_sphere_mesh_source'
>
>
> Thanks for your help,
> Jérome
>
> Le mer. 13 mai 2020 à 01:07, Simon Rit <simon.rit at creatis.insa-lyon.fr> a
> écrit :
>
>> Thanks. This was a multi-threading problem which is now fixed by
>> processing each projection at a time within a thread:
>>
>> https://github.com/SimonRit/RTK/commit/a719d8913beb7bé6a39da787980ead720b353f545
>> <https://github.com/SimonRit/RTK/commit/a719d8913beb7b6a39da787980ead720b353f545>
>> I don't really understand the number you gave but they should depend on
>> the number of threads used by ITK. Normally, ITK splits the last dimension
>> (here the number of projections) in almost equal pieces for each thread. So
>> the last dimension of the processed region will depend on this...
>>
>> On Sat, May 9, 2020 at 11:08 AM Jerome Lesaint <lesaint.jerome at gmail.com>
>> wrote:
>>
>>> See the code below.
>>>
>>> I gave you a wrong information. Sorry. My stack has 720 projections and
>>> not 360. It actually works fine with 360. But fails with 720 !!
>>> After a few trials, the behavior is really strange. It works with 13,
>>> 17, 23, 300, 301, 360, 361, 480. But it fails with 400 (13), 401 (13), 540
>>> (17), 720 (23), 721 (23). In parentheses, the number which triggers the
>>> error (no 2s, 3s 5s in the prime decomp).
>>>
>>> Jérome
>>>
>>>
>>> -------------------------------------------------------------------
>>> sid = 500
>>> sdd = 1000
>>>
>>> spacing = 1
>>> nb_pixels = int(257/spacing)
>>> nb_pixels_u = nb_pixels
>>> nb_pixels_v = nb_pixels_u
>>>
>>> geo_0 = rtk.ThreeDCircularProjectionGeometry.New()
>>> for i in range(nprojs_0) :
>>> geo_0.AddProjection(sid,sdd,i)
>>>
>>> ImageType = itk.Image[itk.F, 3]
>>> const = rtk.ConstantImageSource[ImageType].New()
>>> const.SetConstant(0.)
>>> const.SetSpacing([spacing,spacing,spacing])
>>> const.SetSize([nb_pixels_u,nb_pixels_v,len(geo_0.GetGantryAngles())])
>>> const.SetOrigin(-0.5*spacing*(np.array(const.GetSize())-1))
>>> sl = rtk.SheppLoganPhantomFilter[ImageType,ImageType].New()
>>> sl.SetInput(const.GetOutput())
>>> sl.SetGeometry(geo_0)
>>> sl.SetPhantomScale(60)
>>>
>>> sl.Update()
>>>
>>> #weights = rtk.FDKWeightProjectionFilter[ImageType].New()
>>> #weights.SetGeometry(geo_0)
>>> #weights.SetInput(sl.GetOutput())
>>> #weights.SetNumberOfWorkUnits(1)
>>> #weights.InPlaceOff()
>>>
>>> ramp = rtk.FFTRampImageFilter[ImageType,ImageType,itk.D].New()
>>> ramp.SetInput(sl.GetOutput())
>>> ramp.Update()
>>>
>>>
>>> Le ven. 8 mai 2020 à 22:15, Simon Rit <simon.rit at creatis.insa-lyon.fr>
>>> a écrit :
>>>
>>>> Hi,
>>>> I cannot reproduce the issue with this code
>>>>
>>>> import itk
>>>> from itk import RTK as rtk
>>>>
>>>> ImageType = itk.Image[itk.F,3]
>>>>
>>>> constantImageSource = rtk.ConstantImageSource[ImageType].New()
>>>> constantImageSource.SetOrigin( [ -127.875, -127.875, 0. ] )
>>>> constantImageSource.SetSpacing( [ .25 ] *3 )
>>>> constantImageSource.SetSize( [ 1024, 512, 360 ] )
>>>> constantImageSource.SetConstant(1.)
>>>>
>>>> ramp = rtk.FFTRampImageFilter[ImageType, ImageType, itk.D].New()
>>>> ramp.SetInput(constantImageSource.GetOutput())
>>>> ramp.Update()
>>>>
>>>> Can you tell me more on the pipeline you're using?
>>>> Simon
>>>>
>>>> On Fri, May 8, 2020 at 9:36 AM Jerome Lesaint <lesaint.jerome at gmail.com>
>>>> wrote:
>>>>
>>>>> Salut,
>>>>>
>>>>> thanks again for the answer. The streaming workaround seems to work.
>>>>> As for the second solution you mentioned : actually there are 360
>>>>> projections in my stack (not 23). 360 has only 2s, 3s and 5s in its prime
>>>>> decomp. Of course, 23 does not. But where this 23 comes form ???
>>>>>
>>>>> Anyway, it works fine now. Thank you.
>>>>> Jérome
>>>>>
>>>>>
>>>>> Le jeu. 7 mai 2020 à 20:48, Simon Rit <simon.rit at creatis.insa-lyon.fr>
>>>>> a écrit :
>>>>>
>>>>>> Hi,
>>>>>> Nope, sorry. We can't distribute the package with FFTW because its
>>>>>> license does not allow it. What you can do is put an
>>>>>> itkStreamingImageFilter after the fft ramp to process one projection at a
>>>>>> time. Or add one empty projection after you 23d.
>>>>>> Let me know if we can help with one of the two options.
>>>>>> Simon
>>>>>>
>>>>>> On Thu, May 7, 2020 at 7:24 PM Jerome Lesaint <
>>>>>> lesaint.jerome at gmail.com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am trying to use the ramp filter FFTRampImageFilter and it fails
>>>>>>> at Update time with the error message :
>>>>>>>
>>>>>>> itk::ERROR:
>>>>>>> VnlRealToHalfHermitianForwardFFTImageFilter(00000230EC986BA0): Cannot
>>>>>>> compute FFT of image with size [1024, 512, 23].
>>>>>>> VnlRealToHalfHermitianForwardFFTImageFilter operates only on images whose
>>>>>>> size in each dimension has a prime factorization consisting of only 2s, 3s,
>>>>>>> or 5s.
>>>>>>>
>>>>>>> I already read Simon's answer to a previous similar issue, saying
>>>>>>> that he recommends using FFTW by turning ITK_USE_FFTW when building
>>>>>>> ITK. But I did not compile ITK (on this computer). I simply installed the
>>>>>>> pre-compiled Python package.
>>>>>>> My question : can I turn any parameter in Python to force the ramp
>>>>>>> filter to use this library ?
>>>>>>>
>>>>>>> Thanks in advance for your help,
>>>>>>>
>>>>>>> Jérome
>>>>>>> _______________________________________________
>>>>>>> Rtk-users mailing list
>>>>>>> Rtk-users at public.kitware.com
>>>>>>> https://public.kitware.com/mailman/listinfo/rtk-users
>>>>>>>
>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/rtk-users/attachments/20200519/e564a030/attachment-0001.html>
More information about the Rtk-users
mailing list