<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">First of all congrats for the update of RTK and the new Python integration. This is really great for Python users who don’t want the whole<o:p></o:p></p>
<p class="MsoNormal">C++ armada to test a small reconstruction principle!<o:p></o:p></p>
<p class="MsoNormal">I could easily run the first reconstruction and it worked perfectly! However, I tried then to first save the images using these method within<o:p></o:p></p>
<p class="MsoNormal">a simulator python class:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">    def buildGeometry(self, offsetZ, offsetY):<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        geometry = rtk.ThreeDCircularProjectionGeometry.New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        for x in range(0, self.param['numberOfProjections']):<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">            angle = self.param['firstAngle'] + x * self.param['angularArc'] / self.param['numberOfProjections']<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">            geometry.AddProjection(self.param['sid'] + offsetZ,
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">                self.param['sdd'], angle, self.param['isox'],
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">                self.param['isoy'], self.param['outOfPlaneAngle'],
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">                self.param['inPlaneAngle'], self.param['sourceOffsetX'], offsetY)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        return geometry<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">    def runCBCT(self, filename, offsetZ, offsetY):<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        geometry = self.buildGeometry(offsetZ, offsetY)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource = rtk.ConstantImageSource[self.param['TImageType']].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource.SetOrigin( self.param['origin'] )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource.SetSpacing( self.param['spacing'] )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource.SetSize( self.param['sizeOutput'] )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        <span lang="FR-BE">constantImageSource.SetConstant(0.0)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span lang="FR-BE">        source = constantImageSource.GetOutput()<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span lang="FR-BE"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span lang="FR-BE">        </span>
self.rei.SetGeometry(geometry)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        self.rei.SetInput(source)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        projections = self.rei.GetOutput()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer = itk.ImageFileWriter[self.param['TImageType']].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer.SetFileName(filename)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer.SetInput(projections)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer.Update()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal">This parts works perfectly and the generated images are OK (checked with IMageJ).<o:p></o:p></p>
<p class="MsoNormal">The problems start when I want to reconstruct the volume.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">def buildVolumeFromFile(self, file, fileOUT, CBCT):<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        geometry = CBCT.buildGeometry(0, 0)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        print("Performing reconstruction")<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        TImageType = self.param['TImageType']<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        reader = itk.ImageFileReader[TImageType].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        reader.SetFileName(file)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        reiImage = reader.GetOutput()       
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">    <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        # Create reconstructed image<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource2 = rtk.ConstantImageSource[TImageType].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        origin = [ -63.5, -63.5, -63.5 ]<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        sizeOutput = [ 128, 128, 128 ]<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource2.SetOrigin( origin )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource2.SetSpacing( [1, 1, 1] )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource2.SetSize( sizeOutput )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        constantImageSource2.SetConstant(0.0)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        source2 = constantImageSource2.GetOutput()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        print("Performing reconstruction")<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        feldkamp = rtk.FDKConeBeamReconstructionFilter[TImageType].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        feldkamp.SetGeometry( geometry )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        feldkamp.SetInput(0, source2)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        feldkamp.SetInput(1, reiImage)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        image = feldkamp.GetOutput()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        print("Masking field-of-view")<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        fov = rtk.FieldOfViewImageFilter[TImageType, TImageType].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        fov.SetGeometry(geometry)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        fov.SetProjectionsStack(reiImage)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        fov.SetInput(image)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        image = fov.GetOutput()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer = itk.ImageFileWriter[TImageType].New()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer.SetFileName ( fileOUT )<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer.SetInput(image)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">        writer.Update()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
<p class="MsoNormal">I cannot run this script. It generates a criptic segfault… What am I doing wrong here?<o:p></o:p></p>
<p class="MsoNormal">If one of you RTK gurus  could help me, I would greatly appreciate it!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Pierre<o:p></o:p></p>
</div>
 <br>
<div style="background-color:#E3E4E4; padding:.8em; "><span style="font-size:10pt;  font-family: 'Arial',serif; color:#000000;"><a href="https://iba-worldwide.com/disclaimer">Disclaimer | Use of IBA e-communication</a></span><br>
<p style="font-size:8pt; line-height:10pt; font-family: 'Arial',serif;">The contents of this e-mail message and any attachments are intended solely for the recipient (s) named above. This communication is intended to be and to remain confidential and may be
 protected by intellectual property rights. Any use of the information contained herein (including but not limited to, total or partial reproduction, communication or distribution of any form) by persons other than the designated recipient(s) is prohibited.
 Please notify the sender immediately by e-mail if you have received this e-mail by mistake and delete this e-mail from your system. E-mail transmission cannot be guaranteed to be secure or error-free. Ion Beam Applications does not accept liability for any
 such errors. Thank you for your cooperation. </p>
</div>
</body>
</html>