Hi Finn,<div><br></div><div>I must say I&#39;ve never tried it myself, but I&#39;ve heard of others doing it by overwriting the data in existing DICOM files. Obviously you can only write image data, there is no convention for storing tracking results in DICOM as yet. </div>

<div><br></div><div>If you need to do that, you could probably code up something in MRtrix to overwrite an existing DICOM set (make a copy of it first..), since there is an option to open an image as read-write (default is read-only when opening an existing image). This would rely on a few conditions to actually work. First, the DICOM can&#39;t be mosaic or multi-frame, since this always involves an explicit load into RAM - you need the image data to remain accessed via memory-mapping for your modifications to actually have any effect. Second, the number of DICOM image files must be less than a specific number (128 by default), otherwise the data will again be explicitly loaded into RAM. You can change that number easily, it&#39;s defined in &quot;lib/image/mapper.cpp&quot;, line 35 - just make sure you don&#39;t exceed the limit on the number of open files on your system (1024 on Linux by default). Finally, all details about the image must match exactly: dimensions, voxel sizes &amp; image transform. The last two are only important if you need to guarantee alignment with other DICOM images - which I assume you do. Simplest way to ensure this is to pass the DICOM image you&#39;re interested in writing to as the -template option for tracks2prob. Also make sure the intensities in the image are in the range 0-4095: DICOM data are typically stored as 16-bit integers, but using only 12 bits (don&#39;t ask why).</div>

<div><br></div><div>Just to help you on your way, you can start from the following. I haven&#39;t tested it, but should (might?) work as-is... Just copy/paste into a cpp file in the cmd/ folder (say &quot;cmd/write_to_dicom.cpp&quot;) and issue the ./build &amp;&amp; ./build install commands as usual. </div>

<div><br></div><div>Would be good if you could report back if you get it to work...</div><div>Cheers,</div><div><br></div><div>Donald.</div><div><br></div><div><br></div><div><br></div><div><div><font face="courier new, monospace">#include &quot;app.h&quot;</font></div>

<div><font face="courier new, monospace">#include &quot;image/position.h&quot;</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">using namespace std; </font></div>

<div><font face="courier new, monospace">using namespace MR; </font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">SET_VERSION_DEFAULT;</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">DESCRIPTION = { </font></div><div><font face="courier new, monospace">  &quot;Copy data into existing DICOM image set, &quot;</font></div><div><font face="courier new, monospace">  &quot;overwriting existing data.&quot;,</font></div>

<div><font face="courier new, monospace">  NULL</font></div><div><font face="courier new, monospace">};</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">ARGUMENTS = { </font></div>

<div><font face="courier new, monospace">  Argument (&quot;input&quot;, &quot;input image&quot;, &quot;the input image.&quot;).type_image_in (), </font></div><div><font face="courier new, monospace">  Argument (&quot;DICOM&quot;, &quot;output DICOM image&quot;, </font></div>

<div><font face="courier new, monospace">            &quot;the output DICOM image whose data &quot;</font></div><div><font face="courier new, monospace">            &quot;is to be overwritten.&quot;).type_string (), </font></div>

<div><font face="courier new, monospace">  Argument::End</font></div><div><font face="courier new, monospace">};</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">OPTIONS = { Option::End };</font></div>

</div><div><font face="courier new, monospace"><br></font></div><div><div><font face="courier new, monospace">EXECUTE {</font></div><div><font face="courier new, monospace">  Image::Position in (*argument[0].get_image()</font><span style="font-family:&#39;courier new&#39;,monospace">);</span></div>

<div><div><font face="courier new, monospace">  Image::Object out_obj;</font></div><div><font face="courier new, monospace">  out_obj.open (argument[1].get_string(), false);</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">  if (in.ndim() != out_obj.ndim())</font></div><div><font face="courier new, monospace">    throw Exception (&quot;data set dimensions do not match&quot;);</font></div>

<div><font face="courier new, monospace">  for (int n = 0; n &lt; in.ndim(); ++n)</font></div><div><font face="courier new, monospace">    if (in.dim(n) != out_obj.dim(n))</font></div><div><font face="courier new, monospace">      throw Exception (&quot;data set dimensions do not match&quot;);</font></div>

<div><font face="courier new, monospace"><br></font></div><div></div><div><font face="courier new, monospace">  Image::Position out (out_obj);</font></div></div><div><br></div><div><div><font face="courier new, monospace">  ProgressBar::init (out.voxel_count(), &quot;overwriting DICOM image...&quot;);</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  do {</font></div><div><font face="courier new, monospace">    out.value (in.value());</font></div><div><span style="font-family:&#39;courier new&#39;,monospace">    ProgressBar::inc();</span></div>

<div><font face="courier new, monospace">  } while (out++);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  ProgressBar::done();</font></div><div><font face="courier new, monospace">}</font></div>

</div><div><br></div><div><br></div><div><br></div><div><br></div><br><div class="gmail_quote">On 18 September 2012 19:11, Finn Lennartsson <span dir="ltr">&lt;<a href="mailto:finn.lennartsson@gmail.com" target="_blank">finn.lennartsson@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everyone,<br>
<br>
We have done some fibre tracking on clinical patients with successful<br>
results in MRtrix. I would like to add that to the PACS system for<br>
proper documentation.<br>
<br>
Is there anyone of you who have imported (any kind of) tracking<br>
results into a PACS system? According to our it-staff they can only<br>
import dicoms into the PACS system (SECTRA PACS). Do you know of any<br>
way of writing or workaround for writing processed data into dicoms.<br>
Just importing screenshots should be sufficient in these cases but it<br>
would be desirable to import more detailed tracking results.<br>
<br>
Cheers,<br>
Finn<br>
_______________________________________________<br>
Mrtrix-discussion mailing list<br>
<a href="mailto:Mrtrix-discussion@www.nitrc.org">Mrtrix-discussion@www.nitrc.org</a><br>
<a href="http://www.nitrc.org/mailman/listinfo/mrtrix-discussion" target="_blank">http://www.nitrc.org/mailman/listinfo/mrtrix-discussion</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><font color="#ff6600" size="1"><b>Dr Jacques-Donald Tournier<br></b></font><div><font color="#ff6600" size="1">Research Fellow</font></div><div><font size="1"><br>

</font></div><div><font size="1">The Florey Institute of Neuroscience and Mental Health</font></div><div><font size="1">Melbourne Brain Centre - Austin Campus</font></div><div><font size="1">245 Burgundy Street</font></div>

<div><font size="1">Heidelberg  Vic  3084</font></div><div><font size="1">Ph:  +61 3 9035 7033</font></div><div><font size="1">Fax:  +61 3 9035 7307</font></div><div><font size="1"><a href="http://www.florey.edu.au" target="_blank">www.florey.edu.au</a></font></div>

<br><br>
</div>