<div dir="ltr"><div dir="ltr"><div>Hi,</div><div>1/ This implementation is known to have some issues and I think it should be revisited. I have opened an issue to track this</div><div><a href="https://github.com/SimonRit/RTK/issues/454">https://github.com/SimonRit/RTK/issues/454</a></div><div>If I remember correctly, someone identified at some point a problem with the patient mask, which was selecting air instead. In any case, the SPR might have no influence because one hits the <a href="http://www.openrtk.org/Doxygen/classrtk_1_1BoellaardScatterCorrectionImageFilter.html#ae8752f068ecb8b3208b360c1375ae0a6">non negativity constraints</a>. If you're willing to contribute, the <a href="https://github.com/SimonRit/RTK/blob/master/include/rtkBoellaardScatterCorrectionImageFilter.hxx#L64-L107">code</a> is fairly simple so feel free to investigate.</div><div>2/ I think that the problem is that FDK expect a full scan and you have a short scan. So the projections next to the gap get a huge weight. You need to apply Parker weighting similarly to rtkfdk, see <a href="https://github.com/SimonRit/RTK/blob/master/applications/rtkfdk/rtkfdk.cxx#L102-L117">here</a>.</div><div>From what I see in the code, the volume is not centered on the isocenter. I would also correct it with<br></div><div><font size="2"><span style="font-size:10pt"><pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"JetBrains Mono",monospace;font-size:9.8pt"><pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"JetBrains Mono",monospace;font-size:9.8pt">originVol = [-(sizeOutputVol[<span style="color:rgb(104,151,187)">0</span>] / <span style="color:rgb(104,151,187)">2 </span>- <span style="color:rgb(104,151,187)">0.5</span>) * spacingVol[<span style="color:rgb(104,151,187)">0</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">-(sizeoutputVol[1] / 2 - 0.5) * spacingVol[1]</span><span style="color:rgb(204,120,50)">, </span>-(sizeOutputVol[<span style="color:rgb(104,151,187)">2</span>] / <span style="color:rgb(104,151,187)">2 -</span> <span style="color:rgb(104,151,187)">0.5</span>) * spacingVol[<span style="color:rgb(104,151,187)">2</span>]]<br></pre></pre></span></font></div></div><div>I hope it helps. Good luck with all this!</div><div>Simon<br></div><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><br></div><div dir="ltr" class="gmail_attr">On Fri, Nov 5, 2021 at 4:07 PM Maspero, M. (Matteo) <<a href="mailto:M.Maspero@umcutrecht.nl">M.Maspero@umcutrecht.nl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">




<div dir="ltr">
<div id="gmail-m_7158141332472973541divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p>Dear rtk-users,</p>
<p><br>
</p>
<p>First of all a huge thanks to the developers of RTK, what a very powerful tool. Here I am am with a couple of points:</p>
<p><br>
</p>
<p>1) Boellaard scatter: after having performed multiple rtkfkd recons with different "spr" settings (from the complied C++ version), I could not find any differences between the reconstructed images. It seems like the scatter-to-primary ratio does not impact
 the recon. Is this to be expected/does anyone experience the same?</p>
<p><br>
</p>
<p>2) F<span style="font-size:12pt">inally I had some time to dig in the python wrapped side of RTK and run some very basic recons on Elekta raw (XVI release > 5) data - based on the FirstRecon example - for benchmarking purposes. However, I do not get to the
 desired result. I am pretty sure that is something quite superficial on my side, but any help is very welcome.</span></p>
<p><span style="font-size:12pt">So the reconstruction starts from the following projections:</span></p>
<p><span style="font-size:12pt"><img size="54921" id="gmail-m_7158141332472973541img413685" style="max-width: 99.9%;" src="cid:17d08ff76b07d6722a1"><br>
I get with the compiled version of C++</span></p>
<p><span style="font-size:12pt"><img size="86799" id="gmail-m_7158141332472973541img339014" style="max-width: 99.9%;" src="cid:17d08ff76b2be0c196f2"><br>
while when trying my own recon, I get</span></p>
<p><span style="font-size:12pt"><img size="63784" id="gmail-m_7158141332472973541img319115" style="max-width: 99.9%;" src="cid:17d08ff76b2bd8523f33"><br>
<br>
</span></p>
<p></p>
<p><span style="font-size:12pt">To me, it seems that the geometry/axis orientation is somewhat incorrect. Trying to facilitate coming up with some suggestions, I put at the end of the mail an excerpt of the code, maybe you spot the issue right away. If you
 may appreciate a dataset to reproduce the problem, just let me know. Again, any suggestion is welcome, especially if a quick look from someone else may speed up things on this side.</span></p>
<p><span style="font-size:12pt"><br>
</span></p>
<p><span style="font-size:12pt">Thank you very much in advance.</span></p>
<p><span style="font-size:12pt"><br>
</span></p>
<p><span style="font-size:12pt">Best Regards and have a great weekend,</span></p>
<p><span style="font-size:12pt"><br>
</span></p>
<p><span style="font-size:12pt">Matteo</span></p>
<p><span style="font-size:12pt"><br>
</span></p>
<div id="gmail-m_7158141332472973541Signature">
<div id="gmail-m_7158141332472973541divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div style="font-family:Tahoma;font-size:13px">
<div><font size="2"><span style="font-size:10pt">
<div>  Matteo Maspero</div>
<div>| Clinical scientist/Postdoc<br>
| Radiotherapy, Imaging and Cancer</div>
<div><span style="font-size:10pt">| Computational Imaging Group <a href="http://www.compimag.org" id="gmail-m_7158141332472973541LPNoLP" target="_blank">www.compimag.org</a></span></div>
<div>| Center for Image Sciences<br>
| University Medical Center Utrecht</div>
<div><span style="font-family:Tahoma;font-size:13.3333px">| Free on Wednesdays</span><br>
| Room Q.02.2.315<br>
| P.O. 85500<br>
| Heidelberglaan 100, 3508 GA Utrecht, Netherlands<br>
| E: <a href="mailto:m.maspero@umcutrecht.nl" target="_blank">m.maspero@umcutrecht.nl</a><br>
| Tel        +31-8875 67492 / <span style="font-family:Tahoma;font-size:13.3333px">+31-614956534</span><br>
| Fax       +31-8875 55850<br>
</div>
<div><br>
</div>
<div>--------------------- code excerpt ----</div>
<div>
<pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"JetBrains Mono",monospace;font-size:9.8pt"><span style="color:rgb(204,120,50)"></span><pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"JetBrains Mono",monospace;font-size:9.8pt"><span style="color:rgb(204,120,50)">import </span>sys<br><span style="color:rgb(204,120,50)">import </span>os<br><span style="color:rgb(204,120,50)">import </span>matplotlib.pyplot <span style="color:rgb(204,120,50)">as </span>plt<br><span style="color:rgb(204,120,50)">import </span>glob<br><span style="color:rgb(204,120,50)">import </span>itk<br><span style="color:rgb(204,120,50)">from </span>itk <span style="color:rgb(204,120,50)">import </span>RTK <span style="color:rgb(204,120,50)">as </span>rtk <br><span style="color:rgb(128,128,128)"># image definition<br></span>CPUImageType = rtk.Image[itk.F<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span>]<br><br><span style="color:rgb(128,128,128)"># TMP, pt_dir are the folders with the data <br></span><span style="color:rgb(128,128,128)"># Flags<br></span>Flag_saveProj = <span style="color:rgb(106,135,89)">"on"<br></span><span style="color:rgb(106,135,89)"><br></span><span style="color:rgb(128,128,128)"># geometry -> read xml<br></span>geometryReader = rtk.ThreeDCircularProjectionGeometryXMLFileReader.New()<br>geometryReader.SetFilename(TMP + <span style="color:rgb(106,135,89)">"elektaGeometry"</span>)<br>geometryReader.GenerateOutputInformation()<br>geometry = geometryReader.GetGeometry()<br><br><span style="color:rgb(128,128,128)"># List of filenames<br></span>fileNames = <span style="color:rgb(136,136,198)">list</span>()<br><span style="color:rgb(128,128,128)"># Get list of all files in a given directory sorted by name<br></span>fileNames = <span style="color:rgb(136,136,198)">sorted</span>( <span style="color:rgb(136,136,198)">filter</span>( os.path.isfile<span style="color:rgb(204,120,50)">,<br></span><span style="color:rgb(204,120,50)">                            </span>glob.glob(pt_dir + <span style="color:rgb(106,135,89)">'*his'</span>)))<br><br>projReader = rtk.ProjectionsReader[CPUImageType].New()<br>projReader.SetFileNames(fileNames)<br>projections = projReader.GetOutput()<br><span style="color:rgb(128,128,128)"># plot the projections<br></span>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span>); plt.imshow(projections[<span style="color:rgb(104,151,187)">55</span><span style="color:rgb(204,120,50)">, </span>:<span style="color:rgb(204,120,50)">, </span>:]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Proj X'</span>)<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">2</span>); plt.imshow(projections[:<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">55</span><span style="color:rgb(204,120,50)">, </span>:]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Proj Y'</span>)<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span>); plt.imshow(projections[:<span style="color:rgb(204,120,50)">, </span>:<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">50</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Proj Z'</span>)<br>plt.show()<br><br><span style="color:rgb(128,128,128)"># Writer<br></span><span style="color:rgb(204,120,50)">if </span>Flag_saveProj == <span style="color:rgb(106,135,89)">"on"</span>:<br>    <span style="color:rgb(136,136,198)">print</span>(<span style="color:rgb(106,135,89)">'Writing projections image...'</span>)<br>    itk.imwrite(projections<span style="color:rgb(204,120,50)">, </span>TMP + <span style="color:rgb(106,135,89)">'projections.mha'</span>)<br>    itk.imwrite(projections<span style="color:rgb(204,120,50)">, </span>TMP + <span style="color:rgb(106,135,89)">'projections.gipl'</span>)<br><br><span style="color:rgb(128,128,128)"># Reconstruction parameter<br></span>spacingVol = [<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span>]           <span style="color:rgb(128,128,128)"># resolution of the recon<br></span>sizeOutputVol = [<span style="color:rgb(104,151,187)">256</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">256</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">256</span>]  <span style="color:rgb(128,128,128)"># FOV = S ->  [270, 270, 264]<br></span>originVol = [-(sizeOutputVol[<span style="color:rgb(104,151,187)">0</span>] / <span style="color:rgb(104,151,187)">2 </span>+ <span style="color:rgb(104,151,187)">0.5</span>) * spacingVol[<span style="color:rgb(104,151,187)">0</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0.</span><span style="color:rgb(204,120,50)">, </span>-(sizeOutputVol[<span style="color:rgb(104,151,187)">2</span>] / <span style="color:rgb(104,151,187)">2 </span>+ <span style="color:rgb(104,151,187)">0.5</span>) * spacingVol[<span style="color:rgb(104,151,187)">2</span>]]<br><br><span style="color:rgb(128,128,128)"># Create (an empty) reconstructed image<br></span>constantImageSource = rtk.ConstantImageSource[CPUImageType].New()<br>constantImageSource.SetOrigin(originVol)<br>constantImageSource.SetSpacing(spacingVol)<br>constantImageSource.SetSize(sizeOutputVol)<br>constantImageSource.SetConstant(<span style="color:rgb(104,151,187)">0.</span>)<br>source = constantImageSource.GetOutput()<br><br><span style="color:rgb(128,128,128)"># FDK reconstruction<br></span><span style="color:rgb(136,136,198)">print</span>(<span style="color:rgb(106,135,89)">'Reconstructing...'</span>)<br>FDKCPUType = rtk.FDKConeBeamReconstructionFilter[CPUImageType]<br>feldkamp = FDKCPUType.New()<br>feldkamp.SetInput(<span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">, </span>source)<br>feldkamp.SetInput(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span>projections)<br>feldkamp.SetGeometry(geometry)<br>feldkamp.GetRampFilter().SetTruncationCorrection(<span style="color:rgb(104,151,187)">0.0</span>)<br>feldkamp.GetRampFilter().SetHannCutFrequency(<span style="color:rgb(104,151,187)">0.0</span>)<br>imageFDK = feldkamp.GetOutput()<br><br><span style="color:rgb(128,128,128)"># plot the reconstructed image<br></span>im = imageFDK<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span>); plt.imshow(im[<span style="color:rgb(104,151,187)">55</span><span style="color:rgb(204,120,50)">, </span>:<span style="color:rgb(204,120,50)">, </span>:]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'X'</span>)<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">2</span>); plt.imshow(im[:<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">55</span><span style="color:rgb(204,120,50)">, </span>:]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Y'</span>)<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span>); plt.imshow(im[:<span style="color:rgb(204,120,50)">, </span>:<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">50</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Z'</span>); plt.show()</pre><pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"JetBrains Mono",monospace;font-size:9.8pt"><br><span style="color:rgb(128,128,128)"># Reconstruction parameter<br></span>spacingVol = [<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span>]           <span style="color:rgb(128,128,128)"># resolution of the recon<br></span>sizeOutputVol = [<span style="color:rgb(104,151,187)">256</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">256</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">256</span>]  <span style="color:rgb(128,128,128)"># FOV = S ->  [270, 270, 264]<br></span>originVol = [-(sizeOutputVol[<span style="color:rgb(104,151,187)">0</span>] / <span style="color:rgb(104,151,187)">2 </span>+ <span style="color:rgb(104,151,187)">0.5</span>) * spacingVol[<span style="color:rgb(104,151,187)">0</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">0.</span><span style="color:rgb(204,120,50)">, </span>-(sizeOutputVol[<span style="color:rgb(104,151,187)">2</span>] / <span style="color:rgb(104,151,187)">2 </span>+ <span style="color:rgb(104,151,187)">0.5</span>) * spacingVol[<span style="color:rgb(104,151,187)">2</span>]]<br><br><span style="color:rgb(128,128,128)"># Create (an empty) reconstructed image<br></span>constantImageSource = rtk.ConstantImageSource[CPUImageType].New()<br>constantImageSource.SetOrigin(originVol)<br>constantImageSource.SetSpacing(spacingVol)<br>constantImageSource.SetSize(sizeOutputVol)<br>constantImageSource.SetConstant(<span style="color:rgb(104,151,187)">0.</span>)<br>source = constantImageSource.GetOutput()<br><br><span style="color:rgb(128,128,128)"># FDK reconstruction<br></span><span style="color:rgb(136,136,198)">print</span>(<span style="color:rgb(106,135,89)">'Reconstructing...'</span>)<br>FDKCPUType = rtk.FDKConeBeamReconstructionFilter[CPUImageType]<br>feldkamp = FDKCPUType.New()<br>feldkamp.SetInput(<span style="color:rgb(104,151,187)">0</span><span style="color:rgb(204,120,50)">, </span>source)<br>feldkamp.SetInput(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span>projections)<br>feldkamp.SetGeometry(geometry)<br>feldkamp.GetRampFilter().SetTruncationCorrection(<span style="color:rgb(104,151,187)">0.0</span>)<br>feldkamp.GetRampFilter().SetHannCutFrequency(<span style="color:rgb(104,151,187)">0.0</span>)<br>imageFDK = feldkamp.GetOutput()<br><br># plot the reconstructed image<br>im = imageFDK<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">1</span>); plt.imshow(im[<span style="color:rgb(104,151,187)">55</span><span style="color:rgb(204,120,50)">, </span>:<span style="color:rgb(204,120,50)">, </span>:]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'X'</span>)<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">2</span>); plt.imshow(im[:<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">55</span><span style="color:rgb(204,120,50)">, </span>:]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Y'</span>)<br>plt.subplot(<span style="color:rgb(104,151,187)">1</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span><span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">3</span>); plt.imshow(im[:<span style="color:rgb(204,120,50)">, </span>:<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(104,151,187)">50</span>]<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(170,73,38)">cmap</span>=<span style="color:rgb(106,135,89)">'gray'</span>); plt.title(<span style="color:rgb(106,135,89)">'Z'</span>); plt.show()</pre></pre>
<br>
</div>
</span></font></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<hr>

<p><font size="-2" face="arial" color="black"><i>
De informatie opgenomen in dit bericht kan vertrouwelijk zijn en is
uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onterecht
ontvangt, wordt u verzocht de inhoud niet te gebruiken en de afzender direct
te informeren door het bericht te retourneren. Het Universitair Medisch
Centrum Utrecht is een publiekrechtelijke rechtspersoon in de zin van de W.H.W.
(Wet Hoger Onderwijs en Wetenschappelijk Onderzoek) en staat geregistreerd bij
de Kamer van Koophandel voor Midden-Nederland onder nr. 30244197.
</i></font></p>

<p><font size="-2" face="arial" color="green"><i>
Denk s.v.p aan het milieu voor u deze e-mail afdrukt.
</i></font></p>

<hr>

<p><font size="-2" face="arial" color="black"><i>
This message may contain confidential information and is intended
exclusively for the addressee. If you receive this message
unintentionally, please do not use the contents but notify the sender
immediately by return e-mail. University Medical Center Utrecht is a legal
person by public law and is registered at the Chamber of Commerce for
Midden-Nederland under no. 30244197.
</i></font></p>

<p><font size="-2" face="arial" color="green"><i>
Please consider the environment before printing this e-mail.
</i></font></p>
</div>

_______________________________________________<br>
Rtk-users mailing list<br>
<a href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a><br>
<a href="https://public.kitware.com/mailman/listinfo/rtk-users" rel="noreferrer" target="_blank">https://public.kitware.com/mailman/listinfo/rtk-users</a><br>
</blockquote></div></div></div>