<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>img_e63.c Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.7.4 --> <div id="top"> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div class="header"> <div class="headertitle"> <div class="title">img_e63.c</div> </div> </div> <div class="contents"> <a href="img__e63_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/******************************************************************************</span> <a name="l00002"></a>00002 <span class="comment"></span> <a name="l00003"></a>00003 <span class="comment"> Copyright (c) 2007,2008 Turku PET Centre</span> <a name="l00004"></a>00004 <span class="comment"></span> <a name="l00005"></a>00005 <span class="comment"> Library: img_e63.c</span> <a name="l00006"></a>00006 <span class="comment"> Description: ECAT 6.3 I/O routines for IMG data.</span> <a name="l00007"></a>00007 <span class="comment"></span> <a name="l00008"></a>00008 <span class="comment"> This library is free software; you can redistribute it and/or</span> <a name="l00009"></a>00009 <span class="comment"> modify it under the terms of the GNU Lesser General Public</span> <a name="l00010"></a>00010 <span class="comment"> License as published by the Free Software Foundation; either</span> <a name="l00011"></a>00011 <span class="comment"> version 2.1 of the License, or (at your option) any later version.</span> <a name="l00012"></a>00012 <span class="comment"></span> <a name="l00013"></a>00013 <span class="comment"> This library is distributed in the hope that it will be useful,</span> <a name="l00014"></a>00014 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00015"></a>00015 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span> <a name="l00016"></a>00016 <span class="comment"> See the GNU Lesser General Public License for more details:</span> <a name="l00017"></a>00017 <span class="comment"> http://www.gnu.org/copyleft/lesser.html</span> <a name="l00018"></a>00018 <span class="comment"></span> <a name="l00019"></a>00019 <span class="comment"> You should have received a copy of the GNU Lesser General Public License</span> <a name="l00020"></a>00020 <span class="comment"> along with this library/program; if not, write to the Free Software</span> <a name="l00021"></a>00021 <span class="comment"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA </span> <a name="l00022"></a>00022 <span class="comment"></span> <a name="l00023"></a>00023 <span class="comment"> Turku PET Centre, Turku, Finland, http://www.turkupetcentre.fi/</span> <a name="l00024"></a>00024 <span class="comment"></span> <a name="l00025"></a>00025 <span class="comment"> Modification history:</span> <a name="l00026"></a>00026 <span class="comment"> 2007-01-31 Vesa Oikonen</span> <a name="l00027"></a>00027 <span class="comment"> Functions moved from imgfile.c.</span> <a name="l00028"></a>00028 <span class="comment"> If valid study number is found in user_process_code, then take it from there.</span> <a name="l00029"></a>00029 <span class="comment"> Patient_id and study_description are read and written.</span> <a name="l00030"></a>00030 <span class="comment"> Prompts and randoms (delayed) are read and written.</span> <a name="l00031"></a>00031 <span class="comment"> 2007-03-25 VO</span> <a name="l00032"></a>00032 <span class="comment"> Added functions imgGetEcat63MHeader(), imgSetEcat63MHeader(),</span> <a name="l00033"></a>00033 <span class="comment"> imgEcat63Supported(), imgGetEcat63Fileformat(), imgReadEcat63Header(),</span> <a name="l00034"></a>00034 <span class="comment"> imgReadEcat63FirstFrame(), imgReadEcat63Frame(), imgWriteEcat63Frame(),</span> <a name="l00035"></a>00035 <span class="comment"> and imgSetEcat63SHeader().</span> <a name="l00036"></a>00036 <span class="comment"> 2007-09-10 VO</span> <a name="l00037"></a>00037 <span class="comment"> Return value of localtime() is checked.</span> <a name="l00038"></a>00038 <span class="comment"> 2008-11-06 VO</span> <a name="l00039"></a>00039 <span class="comment"> study_description is copied with strncpy(), not strcpy().</span> <a name="l00040"></a>00040 <span class="comment"></span> <a name="l00041"></a>00041 <span class="comment"></span> <a name="l00042"></a>00042 <span class="comment"></span> <a name="l00043"></a>00043 <span class="comment">******************************************************************************/</span> <a name="l00044"></a>00044 <span class="preprocessor">#include <stdio.h></span> <a name="l00045"></a>00045 <span class="preprocessor">#include <stdlib.h></span> <a name="l00046"></a>00046 <span class="preprocessor">#include <unistd.h></span> <a name="l00047"></a>00047 <span class="preprocessor">#include <math.h></span> <a name="l00048"></a>00048 <span class="preprocessor">#include <string.h></span> <a name="l00049"></a>00049 <span class="preprocessor">#include <time.h></span> <a name="l00050"></a>00050 <span class="comment">/*****************************************************************************/</span> <a name="l00051"></a>00051 <span class="preprocessor">#include "petc99.h"</span> <a name="l00052"></a>00052 <span class="preprocessor">#include "swap.h"</span> <a name="l00053"></a>00053 <span class="preprocessor">#include "halflife.h"</span> <a name="l00054"></a>00054 <span class="comment">/*****************************************************************************/</span> <a name="l00055"></a>00055 <span class="preprocessor">#include "<a class="code" href="img_8h.html">include/img.h</a>"</span> <a name="l00056"></a>00056 <span class="preprocessor">#include "<a class="code" href="ecat63_8h.html">include/ecat63.h</a>"</span> <a name="l00057"></a>00057 <span class="preprocessor">#include "<a class="code" href="ecat7_8h.html">include/ecat7.h</a>"</span> <a name="l00058"></a>00058 <span class="preprocessor">#include "<a class="code" href="imgmax_8h.html">include/imgmax.h</a>"</span> <a name="l00059"></a>00059 <span class="preprocessor">#include "<a class="code" href="imgdecay_8h.html">include/imgdecay.h</a>"</span> <a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="sif_8h.html">include/sif.h</a>"</span> <a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="imgfile_8h.html">include/imgfile.h</a>"</span> <a name="l00062"></a>00062 <span class="comment">/*****************************************************************************/</span> <a name="l00063"></a>00063 <a name="l00064"></a>00064 <span class="comment">/*****************************************************************************/</span> <a name="l00077"></a><a class="code" href="imgfile_8h.html#af743a62694374d314fc164f3b4ce942f">00077</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#af743a62694374d314fc164f3b4ce942f">ecat63ReadAllToImg</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <a class="code" href="structIMG.html">IMG</a> *img) { <a name="l00078"></a>00078 <span class="keywordtype">int</span> i, j, m, ret, blkNr=0, dim_x=0, dim_y=0, pxlNr=0; <a name="l00079"></a>00079 <span class="keywordtype">int</span> frameNr, planeNr, del_nr=0; <a name="l00080"></a>00080 <span class="keywordtype">int</span> frame, plane, prev_frame, prev_plane, seqplane; <a name="l00081"></a>00081 FILE *fp; <a name="l00082"></a>00082 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l00083"></a>00083 <a class="code" href="structMATRIXLIST.html">MATRIXLIST</a> mlist; <a name="l00084"></a>00084 <a class="code" href="structMatDir.html">MatDir</a> tmpMatdir; <a name="l00085"></a>00085 <a class="code" href="structMatval.html">Matval</a> matval; <a name="l00086"></a>00086 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l00087"></a>00087 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l00088"></a>00088 <a class="code" href="structecat63__attnheader.html">ECAT63_attnheader</a> attn_header; <a name="l00089"></a>00089 <a class="code" href="structecat63__normheader.html">ECAT63_normheader</a> norm_header; <a name="l00090"></a>00090 <span class="keywordtype">float</span> scale=1.0; <a name="l00091"></a>00091 <span class="keywordtype">short</span> <span class="keywordtype">int</span> *sptr; <a name="l00092"></a>00092 <span class="keywordtype">char</span> *mdata=NULL, *mptr; <a name="l00093"></a>00093 <span class="keywordtype">int</span> *iptr; <a name="l00094"></a>00094 <span class="keyword">struct </span>tm scanStart; <a name="l00095"></a>00095 <a name="l00096"></a>00096 <a name="l00097"></a>00097 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"ecat63ReadAllToImg(%s, *img)\n"</span>, fname); <a name="l00098"></a>00098 <span class="comment">/* Check the arguments */</span> <a name="l00099"></a>00099 <span class="keywordflow">if</span>(fname==NULL || img==NULL || img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a7aeab2fb426b858c78ec515aaa8f0a67">IMG_STATUS_INITIALIZED</a>) { <a name="l00100"></a>00100 <span class="keywordflow">if</span>(img) <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>); <a name="l00101"></a>00101 <span class="keywordflow">return</span> 1; <a name="l00102"></a>00102 } <a name="l00103"></a>00103 <a name="l00104"></a>00104 <span class="comment">/* Open input CTI file for read */</span> <a name="l00105"></a>00105 <span class="keywordflow">if</span>((fp=fopen(fname, <span class="stringliteral">"rb"</span>)) == NULL) { <a name="l00106"></a>00106 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba9f298b5339db644dbc2b9dc01ef12006">STATUS_NOFILE</a>); <a name="l00107"></a>00107 <span class="keywordflow">return</span> 3; <a name="l00108"></a>00108 } <a name="l00109"></a>00109 <a name="l00110"></a>00110 <span class="comment">/* Read main header */</span> <a name="l00111"></a>00111 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63r_8c.html#af904c6b26259c4f280cdc18f92aeeae5">ecat63ReadMainheader</a>(fp, &main_header))) { <a name="l00112"></a>00112 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafa1051360f88591f14aa0383d8087132">STATUS_NOMAINHEADER</a>); <a name="l00113"></a>00113 <span class="keywordflow">return</span> 4; <a name="l00114"></a>00114 } <a name="l00115"></a>00115 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>5) <a class="code" href="ecat63p_8c.html#a129d5f8c3d6135b9934cebc54d27bc47">ecat63PrintMainheader</a>(&main_header, stdout); <a name="l00116"></a>00116 <a name="l00117"></a>00117 <span class="comment">/* Read matrix list and nr */</span> <a name="l00118"></a>00118 <a class="code" href="ecat63ml_8c.html#a2477fe69c32ce33b443b9c0eaedae423">ecat63InitMatlist</a>(&mlist); <a name="l00119"></a>00119 ret=<a class="code" href="ecat63ml_8c.html#a6cce9d0e541e82d56c9d162f16202179">ecat63ReadMatlist</a>(fp, &mlist); <a name="l00120"></a>00120 <span class="keywordflow">if</span>(ret) { <a name="l00121"></a>00121 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba5b6084734072653f2466e29481713c4b">STATUS_NOMATLIST</a>); <a name="l00122"></a>00122 <span class="keywordflow">return</span> 5; <a name="l00123"></a>00123 } <a name="l00124"></a>00124 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a><=0) { <a name="l00125"></a>00125 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"matrix list is empty"</span>); <a name="l00126"></a>00126 <span class="keywordflow">return</span> 5; <a name="l00127"></a>00127 } <a name="l00128"></a>00128 <span class="comment">/* Sort matrix list */</span> <a name="l00129"></a>00129 <span class="keywordflow">for</span>(i=0; i<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>-1; i++) <span class="keywordflow">for</span>(j=i+1; j<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; j++) { <a name="l00130"></a>00130 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>>mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>) { <a name="l00131"></a>00131 tmpMatdir=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i]; <a name="l00132"></a>00132 mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i]=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j]; mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j]=tmpMatdir; <a name="l00133"></a>00133 } <a name="l00134"></a>00134 } <a name="l00135"></a>00135 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>6) { <a name="l00136"></a>00136 printf(<span class="stringliteral">"matrix list after sorting:\n"</span>); <a name="l00137"></a>00137 <a class="code" href="ecat63ml_8c.html#aabc712142bcbc9e27d79a840e80212ae">ecat63PrintMatlist</a>(&mlist); <a name="l00138"></a>00138 } <a name="l00139"></a>00139 <a name="l00140"></a>00140 <span class="comment">/* Trim extra frames */</span> <a name="l00141"></a>00141 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>>0) { <a name="l00142"></a>00142 del_nr=<a class="code" href="ecat63ml_8c.html#a9dc9509d99d809410fc5904410562856">ecat63DeleteLateFrames</a>(&mlist, main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>); <a name="l00143"></a>00143 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a> && del_nr>0) <a name="l00144"></a>00144 printf(<span class="stringliteral">" %d entries in matrix list will not be used.\n"</span>, del_nr); <a name="l00145"></a>00145 } <a name="l00146"></a>00146 <span class="comment">/* Calculate the number of planes, frames and gates */</span> <a name="l00147"></a>00147 <span class="comment">/* Check that all planes have equal nr of frames (gates) */</span> <a name="l00148"></a>00148 <span class="comment">/* and check that frames (gates) are consequentally numbered */</span> <a name="l00149"></a>00149 prev_plane=plane=-1; prev_frame=frame=-1; frameNr=planeNr=0; ret=0; <a name="l00150"></a>00150 <span class="keywordflow">for</span>(m=0; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#a9096ac571f3dabee56894b264552f65f">matstat</a>==1) { <a name="l00151"></a>00151 <span class="comment">/* get frame and plane */</span> <a name="l00152"></a>00152 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l00153"></a>00153 plane=matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>; <a name="l00154"></a>00154 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>>=main_header.<a class="code" href="structecat63__mainheader.html#a5038021b6504d93e304931a95af64746">num_gates</a>) frame=matval.<a class="code" href="structMatval.html#a514081d81e26c20a377de4e945499446">frame</a>; <a name="l00155"></a>00155 <span class="keywordflow">else</span> frame=matval.<a class="code" href="structMatval.html#ab317865439d3423f362a3094dd65fc18">gate</a>; <a name="l00156"></a>00156 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>2) printf(<span class="stringliteral">"frame=%d plane=%d\n"</span>, frame, plane); <a name="l00157"></a>00157 <span class="comment">/* did plane change? */</span> <a name="l00158"></a>00158 <span class="keywordflow">if</span>(plane!=prev_plane) { <a name="l00159"></a>00159 frameNr=1; planeNr++; <a name="l00160"></a>00160 } <span class="keywordflow">else</span> { <a name="l00161"></a>00161 frameNr++; <a name="l00162"></a>00162 <span class="comment">/* In each plane, frame (gate) numbers must be continuous */</span> <a name="l00163"></a>00163 <span class="keywordflow">if</span>(prev_frame>0 && frame!=prev_frame+1) {ret=1; <span class="keywordflow">break</span>;} <a name="l00164"></a>00164 } <a name="l00165"></a>00165 prev_plane=plane; prev_frame=frame; <a name="l00166"></a>00166 <span class="comment">/* Calculate and check the size of one data matrix */</span> <a name="l00167"></a>00167 <span class="keywordflow">if</span>(m==0) { <a name="l00168"></a>00168 blkNr=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>; <a name="l00169"></a>00169 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(blkNr!=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>) { <a name="l00170"></a>00170 ret=2; <span class="keywordflow">break</span>; <a name="l00171"></a>00171 } <a name="l00172"></a>00172 } <span class="comment">/* next matrix */</span> <a name="l00173"></a>00173 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"frameNr=%d planeNr=%d\n"</span>, frameNr, planeNr); <a name="l00174"></a>00174 <span class="keywordflow">if</span>(ret==1 || (frameNr*planeNr != mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>-del_nr)) { <a name="l00175"></a>00175 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"missing matrix"</span>); <a name="l00176"></a>00176 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <a name="l00177"></a>00177 <span class="keywordflow">return</span>(6); <span class="comment">/* this number is used in imgRead() */</span> <a name="l00178"></a>00178 } <a name="l00179"></a>00179 <span class="keywordflow">if</span>(ret==2) { <a name="l00180"></a>00180 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"matrix sizes are different"</span>); <a name="l00181"></a>00181 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span>(7); <a name="l00182"></a>00182 } <a name="l00183"></a>00183 <span class="comment">/* Read x,y-dimensions from 1st matrix subheader */</span> <a name="l00184"></a>00184 m=0; <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00185"></a>00185 ret=<a class="code" href="ecat63r_8c.html#adc36293804c18dd15771c61500841b7c">ecat63ReadImageheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &image_header); <a name="l00186"></a>00186 dim_x=image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a>; dim_y=image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>; <a name="l00187"></a>00187 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00188"></a>00188 ret=<a class="code" href="ecat63r_8c.html#a811c9c52c52f1c749ee6cb0f7a51f884">ecat63ReadScanheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &scan_header); <a name="l00189"></a>00189 dim_x=scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a>; dim_y=scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>; <a name="l00190"></a>00190 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l00191"></a>00191 ret=<a class="code" href="ecat63r_8c.html#ac9c08bd1e03ddc4f4a8c83a5ea198e05">ecat63ReadAttnheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &attn_header); <a name="l00192"></a>00192 dim_x=attn_header.<a class="code" href="structecat63__attnheader.html#acbea9636493630fc7bdc3de4fcd4cfa2">dimension_1</a>; dim_y=attn_header.<a class="code" href="structecat63__attnheader.html#af9fa1e4491aa3321b4ce99f54e5ebb6e">dimension_2</a>; <a name="l00193"></a>00193 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l00194"></a>00194 ret=<a class="code" href="ecat63r_8c.html#a6a169297491f0f8a734247467cfb2b89">ecat63ReadNormheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &norm_header); <a name="l00195"></a>00195 dim_x=norm_header.<a class="code" href="structecat63__normheader.html#a546d6d89d6df87d2de51c1588884d5b5">dimension_1</a>; dim_y=norm_header.<a class="code" href="structecat63__normheader.html#aa49aa059f33fad5d960b044da8076fe7">dimension_2</a>; <a name="l00196"></a>00196 } <a name="l00197"></a>00197 pxlNr=dim_x*dim_y; <a name="l00198"></a>00198 <span class="keywordflow">if</span>(ret) { <a name="l00199"></a>00199 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix %u subheader"</span>, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>); <a name="l00200"></a>00200 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span>(8); <a name="l00201"></a>00201 } <a name="l00202"></a>00202 <a name="l00203"></a>00203 <span class="comment">/* Allocate memory for ECAT data matrix */</span> <a name="l00204"></a>00204 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>1) printf(<span class="stringliteral">"allocating memory for %d blocks\n"</span>, blkNr); <a name="l00205"></a>00205 mdata=(<span class="keywordtype">char</span>*)malloc(blkNr*<a class="code" href="ecat63_8h.html#abdf75c7aade8a596594e8e7ce8b16872">MatBLKSIZE</a>); <span class="keywordflow">if</span>(mdata==NULL) { <a name="l00206"></a>00206 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"out of memory"</span>); <a name="l00207"></a>00207 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <span class="keywordflow">return</span>(8); <a name="l00208"></a>00208 } <a name="l00209"></a>00209 <span class="comment">/* Allocate memory for whole img data */</span> <a name="l00210"></a>00210 ret=<a class="code" href="img_8c.html#a9b2670da9c7685e6d53058cdf1db1199">imgAllocate</a>(img, planeNr, dim_y, dim_x, frameNr); <a name="l00211"></a>00211 <span class="keywordflow">if</span>(ret) { <a name="l00212"></a>00212 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"out of memory (%d)"</span>, ret); <a name="l00213"></a>00213 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); <span class="keywordflow">return</span>(9); <a name="l00214"></a>00214 } <a name="l00215"></a>00215 <a name="l00216"></a>00216 <span class="comment">/* Fill img info with ECAT main and sub header information */</span> <a name="l00217"></a>00217 img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>=main_header.<a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>; <a name="l00218"></a>00218 img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>=main_header.<a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>; <span class="comment">/* this continues below */</span> <a name="l00219"></a>00219 strncpy(img-><a class="code" href="structIMG.html#ab8bcc846c896a26e5aac045b118fd5cf">radiopharmaceutical</a>, main_header.<a class="code" href="structecat63__mainheader.html#a51129743a09356f7b83e11fa0865d17d">radiopharmaceutical</a>, 32); <a name="l00220"></a>00220 img-><a class="code" href="structIMG.html#ac9c048a9dc8205b22518b05486d8030b">isotopeHalflife</a>=main_header.<a class="code" href="structecat63__mainheader.html#aa80e2c3fda2047135338e9525b48fb17">isotope_halflife</a>; <a name="l00221"></a>00221 memset(&scanStart, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tm)); <a name="l00222"></a>00222 scanStart.tm_year=main_header.<a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>-1900; <a name="l00223"></a>00223 scanStart.tm_mon=main_header.<a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>-1; <a name="l00224"></a>00224 scanStart.tm_mday=main_header.<a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>; scanStart.tm_yday=0; <a name="l00225"></a>00225 scanStart.tm_hour=main_header.<a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>; <a name="l00226"></a>00226 scanStart.tm_min=main_header.<a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>; <a name="l00227"></a>00227 scanStart.tm_sec=main_header.<a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>; <a name="l00228"></a>00228 scanStart.tm_isdst=-1; <a name="l00229"></a>00229 img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>=mktime(&scanStart); <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>==-1) img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>=0; <a name="l00230"></a>00230 img-><a class="code" href="structIMG.html#af1d9f4bd7d58988eb4aa9f660a244a64">axialFOV</a>=10.*main_header.<a class="code" href="structecat63__mainheader.html#acfb971c6cfaffd74900fb23da894bef2">axial_fov</a>; <a name="l00231"></a>00231 img-><a class="code" href="structIMG.html#a4a03c16266c7e7dcd6858aca05e7599f">transaxialFOV</a>=10.*main_header.<a class="code" href="structecat63__mainheader.html#a3545e9b7344313ca3f5c0e9f817d1fc4">transaxial_fov</a>; <a name="l00232"></a>00232 strncpy(img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>, main_header.<a class="code" href="structecat63__mainheader.html#ae42d92d4f2b85a68511f266f7cddfc8c">study_name</a>, MAX_STUDYNR_LEN); <a name="l00233"></a>00233 strncpy(img-><a class="code" href="structIMG.html#a29013e391052918bd5aa6974eeec811d">patientName</a>, main_header.<a class="code" href="structecat63__mainheader.html#a7c66591db9e9dd727d6707ea1051df88">patient_name</a>, 31); <a name="l00234"></a>00234 strncpy(img-><a class="code" href="structIMG.html#a7dc9c21dbaf6b609a32e54c708e089c1">patientID</a>, main_header.<a class="code" href="structecat63__mainheader.html#ac0ca7836b26f3bcc824110278ecb6508">patient_id</a>, 15); <a name="l00235"></a>00235 img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>=10.*main_header.<a class="code" href="structecat63__mainheader.html#afa9b56b592ebcc6a0c8a499c7b74562a">plane_separation</a>; <a name="l00236"></a>00236 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00237"></a>00237 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>; <a name="l00238"></a>00238 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a><1) img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>=image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>; <a name="l00239"></a>00239 img-><a class="code" href="structIMG.html#ab23da0c2295967727c6d33d0fbdc8c88">zoom</a>=image_header.<a class="code" href="structecat63__imageheader.html#a9a0fd8c173273797330c7c67effdffd6">recon_scale</a>; <a name="l00240"></a>00240 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>>1.0) img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=1; <a name="l00241"></a>00241 img-><a class="code" href="structIMG.html#a02cc239e917e7ebf85e34f21448ff080">sizex</a>=img-><a class="code" href="structIMG.html#a80b0609c63f33934bf6e6678c6121cb3">sizey</a>=10.*image_header.<a class="code" href="structecat63__imageheader.html#a749a7dfb6443194317be2260fc7b5b7b">pixel_size</a>; <a name="l00242"></a>00242 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a><10.*image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>) <a name="l00243"></a>00243 img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>=10.*image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>; <a name="l00244"></a>00244 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00245"></a>00245 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l00246"></a>00246 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l00247"></a>00247 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l00248"></a>00248 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l00249"></a>00249 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l00250"></a>00250 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l00251"></a>00251 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l00252"></a>00252 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l00253"></a>00253 } <a name="l00254"></a>00254 strncpy(img-><a class="code" href="structIMG.html#a3651200fbb19796a635502a7b7d2c2c3">studyDescription</a>, main_header.<a class="code" href="structecat63__mainheader.html#a6322ecb4779f20b48b19360b605127e7">study_description</a>, 32); <a name="l00255"></a>00255 strncpy(img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>, main_header.<a class="code" href="structecat63__mainheader.html#aeae1e01c587128f945503d87cb6d3ada">user_process_code</a>, 10); <a name="l00256"></a>00256 img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>[10]=(char)0; <a name="l00257"></a>00257 <span class="comment">/* If valid study number is found in user_process_code, then take it */</span> <a name="l00258"></a>00258 <span class="keywordflow">if</span>(!img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>[0] && studynr_validity_check(img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>)) <a name="l00259"></a>00259 strcpy(img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>, img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>); <a name="l00260"></a>00260 <a name="l00261"></a>00261 <span class="comment">/* Set _fileFormat */</span> <a name="l00262"></a>00262 img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>=<a class="code" href="img_8h.html#a7d502c1293f35b4392badbb9491ee95e">IMG_E63</a>; <a name="l00263"></a>00263 <a name="l00264"></a>00264 <span class="comment">/* Read one ECAT matrix at a time and put them to img */</span> <a name="l00265"></a>00265 prev_plane=plane=-1; seqplane=-1; <a name="l00266"></a>00266 <span class="keywordflow">for</span>(m=0; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#a9096ac571f3dabee56894b264552f65f">matstat</a>==1) { <a name="l00267"></a>00267 <span class="comment">/* get plane */</span> <a name="l00268"></a>00268 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l00269"></a>00269 plane=matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>; <a name="l00270"></a>00270 <span class="comment">/* did plane change? */</span> <a name="l00271"></a>00271 <span class="keywordflow">if</span>(plane!=prev_plane) {seqplane++; frame=1;} <span class="keywordflow">else</span> frame++; <a name="l00272"></a>00272 prev_plane=plane; <a name="l00273"></a>00273 img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[seqplane]=plane; <a name="l00274"></a>00274 <span class="comment">/* Read subheader */</span> <a name="l00275"></a>00275 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00276"></a>00276 ret=<a class="code" href="ecat63r_8c.html#adc36293804c18dd15771c61500841b7c">ecat63ReadImageheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &image_header); <a name="l00277"></a>00277 <span class="keywordflow">if</span>(dim_x!=image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a> || dim_y!=image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>) ret=1; <a name="l00278"></a>00278 scale=image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>; <a name="l00279"></a>00279 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>>0.0 <a name="l00280"></a>00280 && fabs(main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>/image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>-1.0)>0.0001) <a name="l00281"></a>00281 scale*=image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>; <a name="l00282"></a>00282 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>==0 && image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>>0) img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>=image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>; <a name="l00283"></a>00283 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=image_header.<a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>; <a name="l00284"></a>00284 img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]=image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>/1000.; <a name="l00285"></a>00285 img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]=img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>/1000.; <a name="l00286"></a>00286 img-><a class="code" href="structIMG.html#af7c69142be89fac081e7f8bc354b14c8">mid</a>[frame-1]=0.5*(img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]); <a name="l00287"></a>00287 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>>1.0) <a name="l00288"></a>00288 img-><a class="code" href="structIMG.html#abf0ad6e681d08c3248dbd9837afa9973">decayCorrFactor</a>[frame-1]=image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>; <a name="l00289"></a>00289 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00290"></a>00290 ret=<a class="code" href="ecat63r_8c.html#a811c9c52c52f1c749ee6cb0f7a51f884">ecat63ReadScanheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &scan_header); <a name="l00291"></a>00291 <span class="keywordflow">if</span>(dim_x!=scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a> || dim_y!=scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>) ret=1; <a name="l00292"></a>00292 scale=scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>; <a name="l00293"></a>00293 <span class="keywordflow">if</span>(scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>>0.0) scale*=scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>; <a name="l00294"></a>00294 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=scan_header.<a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>; <a name="l00295"></a>00295 img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]=scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>/1000.; <a name="l00296"></a>00296 img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]=img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>/1000.; <a name="l00297"></a>00297 img-><a class="code" href="structIMG.html#af7c69142be89fac081e7f8bc354b14c8">mid</a>[frame-1]=0.5*(img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]); <a name="l00298"></a>00298 img-><a class="code" href="structIMG.html#a399dae5b27dda8d5e1b0e96c885513e4">sampleDistance</a>=10.0*scan_header.<a class="code" href="structecat63__scanheader.html#acb676ed22b052fbaa07bd044263ac279">sample_distance</a>; <a name="l00299"></a>00299 img-><a class="code" href="structIMG.html#a76d63a001b8569d9f80ccb325e064be1">prompts</a>[frame-1]=(float)scan_header.<a class="code" href="structecat63__scanheader.html#a28b007d345ada719bb886fd7a2683d76">prompts</a>; <a name="l00300"></a>00300 img-><a class="code" href="structIMG.html#ae47ebbbdc0c308f473fec801a2df513d">randoms</a>[frame-1]=(<span class="keywordtype">float</span>)scan_header.<a class="code" href="structecat63__scanheader.html#ad0a2468779aec56e8d45ca685834eb16">delayed</a>; <a name="l00301"></a>00301 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l00302"></a>00302 ret=<a class="code" href="ecat63r_8c.html#ac9c08bd1e03ddc4f4a8c83a5ea198e05">ecat63ReadAttnheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &attn_header); <a name="l00303"></a>00303 <span class="keywordflow">if</span>(dim_x!=attn_header.<a class="code" href="structecat63__attnheader.html#acbea9636493630fc7bdc3de4fcd4cfa2">dimension_1</a> || dim_y!=attn_header.<a class="code" href="structecat63__attnheader.html#af9fa1e4491aa3321b4ce99f54e5ebb6e">dimension_2</a>) ret=1; <a name="l00304"></a>00304 scale=attn_header.<a class="code" href="structecat63__attnheader.html#a649891350c3b30214f43ca2d640a0e47">scale_factor</a>; <a name="l00305"></a>00305 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=attn_header.<a class="code" href="structecat63__attnheader.html#ac5bea9d6b3dae0b4c87d5e66a0d2006e">data_type</a>; <a name="l00306"></a>00306 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l00307"></a>00307 ret=<a class="code" href="ecat63r_8c.html#a6a169297491f0f8a734247467cfb2b89">ecat63ReadNormheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &norm_header); <a name="l00308"></a>00308 <span class="keywordflow">if</span>(dim_x!=norm_header.<a class="code" href="structecat63__normheader.html#a546d6d89d6df87d2de51c1588884d5b5">dimension_1</a> || dim_y!=norm_header.<a class="code" href="structecat63__normheader.html#aa49aa059f33fad5d960b044da8076fe7">dimension_2</a>) ret=1; <a name="l00309"></a>00309 scale=norm_header.<a class="code" href="structecat63__normheader.html#a914977ee68c14326a4551abae57fc9ab">scale_factor</a>; <a name="l00310"></a>00310 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=norm_header.<a class="code" href="structecat63__normheader.html#ae7d4136070d36e9edbe684a80e39b942">data_type</a>; <a name="l00311"></a>00311 } <span class="keywordflow">else</span> img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=-1; <a name="l00312"></a>00312 <span class="keywordflow">if</span>(ret) { <a name="l00313"></a>00313 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix %u subheader"</span>, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>); <a name="l00314"></a>00314 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); fclose(fp); <span class="keywordflow">return</span>(10); <a name="l00315"></a>00315 } <a name="l00316"></a>00316 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>>0.0) scale*=main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>; <a name="l00317"></a>00317 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>2) printf(<span class="stringliteral">"scale=%e datatype=%d\n"</span>, scale, img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>); <a name="l00318"></a>00318 <span class="comment">/* Read the pixel data */</span> <a name="l00319"></a>00319 ret=<a class="code" href="ecat63r_8c.html#a7f3456ddf0f774026d462df66bf1210b">ecat63ReadMatdata</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>+1, <a name="l00320"></a>00320 mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, <a name="l00321"></a>00321 mdata, img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>); <a name="l00322"></a>00322 <span class="keywordflow">if</span>(ret) { <a name="l00323"></a>00323 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix data"</span>); <a name="l00324"></a>00324 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); fclose(fp); <span class="keywordflow">return</span>(11); <a name="l00325"></a>00325 } <a name="l00326"></a>00326 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a8e1f9f0fd436e762641718456852ee80">BYTE_TYPE</a>) { <a name="l00327"></a>00327 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr++) { <a name="l00328"></a>00328 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][i][j][frame-1]=scale*(float)(*mptr); <a name="l00329"></a>00329 } <a name="l00330"></a>00330 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#aebd1500a1497c6489f1820442db218d2">SUN_I2</a>) { <a name="l00331"></a>00331 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr+=2) { <a name="l00332"></a>00332 sptr=(<span class="keywordtype">short</span> <span class="keywordtype">int</span>*)mptr; <a name="l00333"></a>00333 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][i][j][frame-1]=scale*(float)(*sptr); <a name="l00334"></a>00334 } <a name="l00335"></a>00335 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a105892e015b38ae62e69684acf6df31d">SUN_I4</a>) { <a name="l00336"></a>00336 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr+=4) { <a name="l00337"></a>00337 iptr=(<span class="keywordtype">int</span>*)mptr; <a name="l00338"></a>00338 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][i][j][frame-1]=1.0; <span class="comment">/*scale*(float)(*iptr);*/</span> <a name="l00339"></a>00339 } <a name="l00340"></a>00340 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a6001c489ee0296a6dca313ee3bfe4412">IEEE_R4</a>) { <a name="l00341"></a>00341 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr+=4) { <a name="l00342"></a>00342 memcpy(&img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][i][j][frame-1], mptr, 4); <a name="l00343"></a>00343 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][i][j][frame-1]*=scale; <a name="l00344"></a>00344 } <a name="l00345"></a>00345 } <a name="l00346"></a>00346 } <span class="comment">/* next matrix */</span> <a name="l00347"></a>00347 <a name="l00348"></a>00348 <span class="comment">/* Set the unit */</span> <a name="l00349"></a>00349 <a class="code" href="imgunit_8c.html#a99853914e3480ab82c7163b0612e8b28">imgUnitFromEcat</a>(img, img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>); <a name="l00350"></a>00350 <a name="l00351"></a>00351 <span class="comment">/* Free memory and close file */</span> <a name="l00352"></a>00352 free(mdata); <a name="l00353"></a>00353 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <a name="l00354"></a>00354 fclose(fp); <a name="l00355"></a>00355 <a name="l00356"></a>00356 <span class="comment">/* For saving, only 2-byte VAX data types are allowed */</span> <a name="l00357"></a>00357 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a>) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l00358"></a>00358 <a name="l00359"></a>00359 <span class="keywordflow">return</span>(0); <a name="l00360"></a>00360 } <a name="l00361"></a>00361 <span class="comment">/*****************************************************************************/</span> <a name="l00362"></a>00362 <a name="l00363"></a>00363 <span class="comment">/*****************************************************************************/</span> <a name="l00374"></a><a class="code" href="imgfile_8h.html#a443e0885c38b074c760a5b9a88554ce3">00374</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#a443e0885c38b074c760a5b9a88554ce3">ecat63WriteAllImg</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <a class="code" href="structIMG.html">IMG</a> *img) { <a name="l00375"></a>00375 <span class="keywordtype">int</span> frame, plane, n, i, j, m, ret=0; <a name="l00376"></a>00376 <span class="keywordtype">float</span> f, fmax, fmin, g, scale; <a name="l00377"></a>00377 <span class="keywordtype">short</span> <span class="keywordtype">int</span> *sdata, *sptr, smin, smax; <a name="l00378"></a>00378 FILE *fp; <a name="l00379"></a>00379 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l00380"></a>00380 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l00381"></a>00381 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l00382"></a>00382 <span class="keyword">struct </span>tm *scanStart; <a name="l00383"></a>00383 <a name="l00384"></a>00384 <a name="l00385"></a>00385 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"ecat63WriteAllImg(%s, *img)\n"</span>, fname); <a name="l00386"></a>00386 <span class="comment">/* Check the arguments */</span> <a name="l00387"></a>00387 <span class="keywordflow">if</span>(fname==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"invalid ECAT filename"</span>); <span class="keywordflow">return</span>(1);} <a name="l00388"></a>00388 <span class="keywordflow">if</span>(img==NULL || img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a3117b1b0649d3761dcda1395202129e5">IMG_STATUS_OCCUPIED</a>) { <a name="l00389"></a>00389 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"image data is empty"</span>); <span class="keywordflow">return</span>(2);} <a name="l00390"></a>00390 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a><1) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l00391"></a>00391 <a name="l00392"></a>00392 <span class="comment">/* Initiate headers */</span> <a name="l00393"></a>00393 memset(&main_header, 0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a>)); <a name="l00394"></a>00394 memset(&image_header,0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a>)); <a name="l00395"></a>00395 memset(&scan_header, 0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a>)); <a name="l00396"></a>00396 <a name="l00397"></a>00397 <span class="comment">/* Make a main header */</span> <a name="l00398"></a>00398 main_header.<a class="code" href="structecat63__mainheader.html#a433a5fddd8c83644a9f081001815c6e6">sw_version</a>=2; <a name="l00399"></a>00399 main_header.<a class="code" href="structecat63__mainheader.html#aec1a2e31ad9fa2e9d03220565bc3cfa0">num_planes</a>=img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; <a name="l00400"></a>00400 main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>; <a name="l00401"></a>00401 main_header.<a class="code" href="structecat63__mainheader.html#a5038021b6504d93e304931a95af64746">num_gates</a>=1; <a name="l00402"></a>00402 main_header.<a class="code" href="structecat63__mainheader.html#ad8cbcc286f61bd37eb2a6f196b88a4bb">num_bed_pos</a>=1; <a name="l00403"></a>00403 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>) main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>=<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>; <a name="l00404"></a>00404 <span class="keywordflow">else</span> main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>=<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>; <a name="l00405"></a>00405 main_header.<a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>=img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>; <a name="l00406"></a>00406 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>>0) main_header.<a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>=img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>; <a name="l00407"></a>00407 <span class="keywordflow">else</span> main_header.<a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>=<a class="code" href="ecat63_8h.html#a4aad8bedf2b4765e35f5933a7c6b8558">ECAT63_SYSTEM_TYPE_DEFAULT</a>; <a name="l00408"></a>00408 main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>=1.0; <a name="l00409"></a>00409 main_header.<a class="code" href="structecat63__mainheader.html#acfb971c6cfaffd74900fb23da894bef2">axial_fov</a>=img-><a class="code" href="structIMG.html#af1d9f4bd7d58988eb4aa9f660a244a64">axialFOV</a>/10.0; <a name="l00410"></a>00410 main_header.<a class="code" href="structecat63__mainheader.html#a3545e9b7344313ca3f5c0e9f817d1fc4">transaxial_fov</a>=img-><a class="code" href="structIMG.html#a4a03c16266c7e7dcd6858aca05e7599f">transaxialFOV</a>/10.0; <a name="l00411"></a>00411 main_header.<a class="code" href="structecat63__mainheader.html#afa9b56b592ebcc6a0c8a499c7b74562a">plane_separation</a>=img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>/10.0; <a name="l00412"></a>00412 main_header.<a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>=<a class="code" href="imgunit_8c.html#a0d8d16b27eaefdf56d32b5c4c51f3757">imgUnitToEcat6</a>(img); <a name="l00413"></a>00413 strncpy(main_header.<a class="code" href="structecat63__mainheader.html#a51129743a09356f7b83e11fa0865d17d">radiopharmaceutical</a>, img-><a class="code" href="structIMG.html#ab8bcc846c896a26e5aac045b118fd5cf">radiopharmaceutical</a>, 32); <a name="l00414"></a>00414 scanStart=localtime(&img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>); <a name="l00415"></a>00415 <span class="keywordflow">if</span>(scanStart!=NULL) { <a name="l00416"></a>00416 main_header.<a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>=scanStart->tm_year+1900; <a name="l00417"></a>00417 main_header.<a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>=scanStart->tm_mon+1; <a name="l00418"></a>00418 main_header.<a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>=scanStart->tm_mday; <a name="l00419"></a>00419 main_header.<a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>=scanStart->tm_hour; <a name="l00420"></a>00420 main_header.<a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>=scanStart->tm_min; <a name="l00421"></a>00421 main_header.<a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>=scanStart->tm_sec; <a name="l00422"></a>00422 } <span class="keywordflow">else</span> { <a name="l00423"></a>00423 main_header.<a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>=1900; <a name="l00424"></a>00424 main_header.<a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>=1; <a name="l00425"></a>00425 main_header.<a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>=1; <a name="l00426"></a>00426 main_header.<a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>=0; <a name="l00427"></a>00427 main_header.<a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>=0; <a name="l00428"></a>00428 main_header.<a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>=0; <a name="l00429"></a>00429 } <a name="l00430"></a>00430 main_header.<a class="code" href="structecat63__mainheader.html#aa80e2c3fda2047135338e9525b48fb17">isotope_halflife</a>=img-><a class="code" href="structIMG.html#ac9c048a9dc8205b22518b05486d8030b">isotopeHalflife</a>; <a name="l00431"></a>00431 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#ad5e1bd9b72bdc5e5cc820bf25231bef5">isotope_code</a>, <a class="code" href="imgdecay_8c.html#a14db419685f526306032a84343eed72c">imgIsotope</a>(img)); <a name="l00432"></a>00432 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#ae42d92d4f2b85a68511f266f7cddfc8c">study_name</a>, img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>); <a name="l00433"></a>00433 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#a7c66591db9e9dd727d6707ea1051df88">patient_name</a>, img-><a class="code" href="structIMG.html#a29013e391052918bd5aa6974eeec811d">patientName</a>); <a name="l00434"></a>00434 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#ac0ca7836b26f3bcc824110278ecb6508">patient_id</a>, img-><a class="code" href="structIMG.html#a7dc9c21dbaf6b609a32e54c708e089c1">patientID</a>); <a name="l00435"></a>00435 strncpy(main_header.<a class="code" href="structecat63__mainheader.html#aeae1e01c587128f945503d87cb6d3ada">user_process_code</a>, img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>, 10); <a name="l00436"></a>00436 strncpy(main_header.<a class="code" href="structecat63__mainheader.html#a6322ecb4779f20b48b19360b605127e7">study_description</a>, img-><a class="code" href="structIMG.html#a3651200fbb19796a635502a7b7d2c2c3">studyDescription</a>, 32); <a name="l00437"></a>00437 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) <a class="code" href="ecat63p_8c.html#a129d5f8c3d6135b9934cebc54d27bc47">ecat63PrintMainheader</a>(&main_header, stdout); <a name="l00438"></a>00438 <a name="l00439"></a>00439 <span class="comment">/* Allocate memory for matrix data */</span> <a name="l00440"></a>00440 sdata=(<span class="keywordtype">short</span> <span class="keywordtype">int</span>*)malloc(img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>*img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">short</span> <span class="keywordtype">int</span>)); <a name="l00441"></a>00441 <span class="keywordflow">if</span>(sdata==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"out of memory"</span>); <span class="keywordflow">return</span>(4);} <a name="l00442"></a>00442 <a name="l00443"></a>00443 <span class="comment">/* Open output ECAT file */</span> <a name="l00444"></a>00444 fp=<a class="code" href="ecat63w_8c.html#aa9545a4a59002bf59a77478977f479eb">ecat63Create</a>(fname, &main_header); <a name="l00445"></a>00445 <span class="keywordflow">if</span>(fp==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot write ECAT file"</span>); <span class="keywordflow">return</span>(3);} <a name="l00446"></a>00446 <a name="l00447"></a>00447 <span class="comment">/* Set the subheader contents, as far as possible */</span> <a name="l00448"></a>00448 <span class="keywordflow">switch</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>) { <a name="l00449"></a>00449 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>: <a name="l00450"></a>00450 scan_header.<a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>=main_header.<a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>; <a name="l00451"></a>00451 scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a>=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; <a name="l00452"></a>00452 scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>=img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; <a name="l00453"></a>00453 scan_header.<a class="code" href="structecat63__scanheader.html#aaf23846f5c3ee43188d49fac0f592498">frame_duration_sec</a>=1; <a name="l00454"></a>00454 scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>=1.0; <a name="l00455"></a>00455 scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>=0; <a name="l00456"></a>00456 scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>=1000; <a name="l00457"></a>00457 scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>=1.0; <a name="l00458"></a>00458 <span class="comment">/*if(IMG_TEST) ecat63PrintScanheader(&scan_header);*/</span> <a name="l00459"></a>00459 <span class="keywordflow">break</span>; <a name="l00460"></a>00460 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>: <a name="l00461"></a>00461 image_header.<a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>=main_header.<a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>; <a name="l00462"></a>00462 image_header.<a class="code" href="structecat63__imageheader.html#a417f483d23efabd675ed72cdd4bbdb98">num_dimensions</a>=2; <a name="l00463"></a>00463 image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a>=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; <a name="l00464"></a>00464 image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>=img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; <a name="l00465"></a>00465 image_header.<a class="code" href="structecat63__imageheader.html#a9a0fd8c173273797330c7c67effdffd6">recon_scale</a>=img-><a class="code" href="structIMG.html#ab23da0c2295967727c6d33d0fbdc8c88">zoom</a>; <a name="l00466"></a>00466 image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>=1.0; <a name="l00467"></a>00467 image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>=img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>/10.; <a name="l00468"></a>00468 image_header.<a class="code" href="structecat63__imageheader.html#a749a7dfb6443194317be2260fc7b5b7b">pixel_size</a>=img-><a class="code" href="structIMG.html#a02cc239e917e7ebf85e34f21448ff080">sizex</a>/10.; <a name="l00469"></a>00469 image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>=0; <a name="l00470"></a>00470 image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>=1000; <a name="l00471"></a>00471 image_header.<a class="code" href="structecat63__imageheader.html#a7c53b9df3c138cf5b9d5b2986d003377">plane_eff_corr_fctr</a>=1.0; <a name="l00472"></a>00472 image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>=1.0; <a name="l00473"></a>00473 image_header.<a class="code" href="structecat63__imageheader.html#ab7fe2e08a8afa0b40c4fb9cf5a434ac1">loss_corr_fctr</a>=1.0; <a name="l00474"></a>00474 image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>=1.0; <a name="l00475"></a>00475 image_header.<a class="code" href="structecat63__imageheader.html#a6338eb4b7fdcb624ac0673260d16db42">well_counter_cal_fctr</a>=1.0; <a name="l00476"></a>00476 image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>=main_header.<a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>; <a name="l00477"></a>00477 <span class="comment">/*if(IMG_TEST) ecat63PrintImageheader(&image_header);*/</span> <a name="l00478"></a>00478 <span class="keywordflow">break</span>; <a name="l00479"></a>00479 } <a name="l00480"></a>00480 <a name="l00481"></a>00481 <span class="comment">/* Write one matrix at a time */</span> <a name="l00482"></a>00482 n=0; <a name="l00483"></a>00483 <span class="keywordflow">for</span>(plane=1; plane<=img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; plane++) <span class="keywordflow">for</span>(frame=1; frame<=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>; frame++) { <a name="l00484"></a>00484 <span class="comment">/* Scale data to short ints */</span> <a name="l00485"></a>00485 <span class="comment">/* Search min and max */</span> <a name="l00486"></a>00486 fmin=fmax=f=img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[plane-1][0][0][frame-1]; <a name="l00487"></a>00487 <span class="keywordflow">for</span>(i=0; i<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; i++) <span class="keywordflow">for</span>(j=0; j<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; j++) { <a name="l00488"></a>00488 f=img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[plane-1][i][j][frame-1]; <a name="l00489"></a>00489 <span class="keywordflow">if</span>(f>fmax) fmax=f; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(f<fmin) fmin=f; <a name="l00490"></a>00490 } <a name="l00491"></a>00491 <span class="comment">/* Calculate scaling factor */</span> <a name="l00492"></a>00492 <span class="keywordflow">if</span>(fabs(fmin)>fabs(fmax)) g=fabs(fmin); <span class="keywordflow">else</span> g=fabs(fmax); <a name="l00493"></a>00493 <span class="keywordflow">if</span>(g!=0) scale=32766./g; <span class="keywordflow">else</span> scale=1.0; <a name="l00494"></a>00494 <span class="comment">/*printf("fmin=%e fmax=%e g=%e scale=%e\n", fmin, fmax, g, scale);*/</span> <a name="l00495"></a>00495 <span class="comment">/* Scale matrix data to shorts */</span> <a name="l00496"></a>00496 sptr=sdata; <a name="l00497"></a>00497 <span class="keywordflow">for</span>(i=0; i<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; i++) <span class="keywordflow">for</span>(j=0; j<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; j++) { <a name="l00498"></a>00498 *sptr=(<span class="keywordtype">short</span> int)temp_roundf(scale*img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[plane-1][i][j][frame-1]); <a name="l00499"></a>00499 sptr++; <a name="l00500"></a>00500 } <a name="l00501"></a>00501 <span class="comment">/* Calculate and set subheader min&max and scale */</span> <a name="l00502"></a>00502 smin=(<span class="keywordtype">short</span> int)temp_roundf(scale*fmin); smax=(<span class="keywordtype">short</span> int)temp_roundf(scale*fmax); <a name="l00503"></a>00503 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00504"></a>00504 scan_header.<a class="code" href="structecat63__scanheader.html#abeeb6fea3c31b83464be7afcdff37219">scan_min</a>=smin; scan_header.<a class="code" href="structecat63__scanheader.html#a87fc09622afe7e2372588f650e7e6afd">scan_max</a>=smax; <a name="l00505"></a>00505 scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>=1.0/scale; <a name="l00506"></a>00506 scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>=(int)temp_roundf(1000.*img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]); <a name="l00507"></a>00507 scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>= <a name="l00508"></a>00508 (int)temp_roundf(1000.*(img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]-img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1])); <a name="l00509"></a>00509 scan_header.<a class="code" href="structecat63__scanheader.html#acb676ed22b052fbaa07bd044263ac279">sample_distance</a>=(img-><a class="code" href="structIMG.html#a399dae5b27dda8d5e1b0e96c885513e4">sampleDistance</a>)/10.0; <a name="l00510"></a>00510 scan_header.<a class="code" href="structecat63__scanheader.html#a28b007d345ada719bb886fd7a2683d76">prompts</a>=temp_roundf(img-><a class="code" href="structIMG.html#a76d63a001b8569d9f80ccb325e064be1">prompts</a>[frame-1]); <a name="l00511"></a>00511 scan_header.<a class="code" href="structecat63__scanheader.html#ad0a2468779aec56e8d45ca685834eb16">delayed</a>=temp_roundf(img-><a class="code" href="structIMG.html#ae47ebbbdc0c308f473fec801a2df513d">randoms</a>[frame-1]); <a name="l00512"></a>00512 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00513"></a>00513 image_header.<a class="code" href="structecat63__imageheader.html#ad9ae22f6f465f3872ad5dbc66f0a171b">image_min</a>=smin; image_header.<a class="code" href="structecat63__imageheader.html#a7020d45c4b35dd0c72ce4b87028ed9b9">image_max</a>=smax; <a name="l00514"></a>00514 image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>=1.0/scale; <a name="l00515"></a>00515 image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>=(int)temp_roundf(1000.*img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]); <a name="l00516"></a>00516 image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>= <a name="l00517"></a>00517 (int)temp_roundf(1000.*(img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]-img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1])); <a name="l00518"></a>00518 <span class="comment">/* Set decay correction factor */</span> <a name="l00519"></a>00519 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>) <a name="l00520"></a>00520 image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>=img-><a class="code" href="structIMG.html#abf0ad6e681d08c3248dbd9837afa9973">decayCorrFactor</a>[frame-1]; <a name="l00521"></a>00521 } <a name="l00522"></a>00522 <span class="comment">/* Write matrix data */</span> <a name="l00523"></a>00523 m=<a class="code" href="ecat63ml_8c.html#a7561756da60d9e38a1419da8ebf220fb">mat_numcod</a>(frame, img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[plane-1], 1, 0, 0); <a name="l00524"></a>00524 <span class="comment">/*m=mat_numcod(frame, plane, 1, 0, 0);*/</span> <a name="l00525"></a>00525 sptr=sdata; <a name="l00526"></a>00526 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">" writing matnum=%d\n"</span>, m); <a name="l00527"></a>00527 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00528"></a>00528 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) <a class="code" href="ecat63p_8c.html#a67a369196200471d7954b4788de262a6">ecat63PrintScanheader</a>(&scan_header, stdout); <a name="l00529"></a>00529 ret=<a class="code" href="ecat63w_8c.html#a0ef3ec20d54221eb1730dd531724b378">ecat63WriteScan</a>(fp, m, &scan_header, sptr); <a name="l00530"></a>00530 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00531"></a>00531 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) <a class="code" href="ecat63p_8c.html#a5f3ba1102f964d98b4de5a93c3d9fd36">ecat63PrintImageheader</a>(&image_header, stdout); <a name="l00532"></a>00532 ret=<a class="code" href="ecat63w_8c.html#ab7e9bf33b3225d1260ad04c44ce817ab">ecat63WriteImage</a>(fp, m, &image_header, sptr); <a name="l00533"></a>00533 } <a name="l00534"></a>00534 <span class="keywordflow">if</span>(ret) { <a name="l00535"></a>00535 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot write data on pl%02d fr%02d (%d)."</span>, <a name="l00536"></a>00536 plane, frame, ret); <a name="l00537"></a>00537 fclose(fp); <span class="keyword">remove</span>(fname); free(sdata); <a name="l00538"></a>00538 <span class="keywordflow">return</span>(9); <a name="l00539"></a>00539 } <a name="l00540"></a>00540 n++; <a name="l00541"></a>00541 } <span class="comment">/* next matrix */</span> <a name="l00542"></a>00542 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">" %d matrices written in %s\n"</span>, n, fname); <a name="l00543"></a>00543 <a name="l00544"></a>00544 <span class="comment">/* Close file and free memory */</span> <a name="l00545"></a>00545 fclose(fp); free(sdata); <a name="l00546"></a>00546 <a name="l00547"></a>00547 <span class="keywordflow">return</span>(0); <a name="l00548"></a>00548 } <a name="l00549"></a>00549 <span class="comment">/*****************************************************************************/</span> <a name="l00550"></a>00550 <a name="l00551"></a>00551 <span class="comment">/*****************************************************************************/</span> <a name="l00568"></a><a class="code" href="imgfile_8h.html#a010e9f3c0dc798651056c58df08af544">00568</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#a010e9f3c0dc798651056c58df08af544">ecat63ReadPlaneToImg</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <a class="code" href="structIMG.html">IMG</a> *img) { <a name="l00569"></a>00569 <span class="keywordtype">int</span> i, j, m, ret, blkNr=0, dim_x=0, dim_y=0, pxlNr=0, del_nr=0; <a name="l00570"></a>00570 <span class="keywordtype">int</span> frameNr, planeNr, datatype=0, firstm=0, isFirst=0; <a name="l00571"></a>00571 <span class="keywordtype">int</span> frame, plane, prev_frame, prev_plane, prev_frameNr=0; <a name="l00572"></a>00572 FILE *fp; <a name="l00573"></a>00573 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l00574"></a>00574 <a class="code" href="structMATRIXLIST.html">MATRIXLIST</a> mlist; <a name="l00575"></a>00575 <a class="code" href="structMatDir.html">MatDir</a> tmpMatdir; <a name="l00576"></a>00576 <a class="code" href="structMatval.html">Matval</a> matval; <a name="l00577"></a>00577 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l00578"></a>00578 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l00579"></a>00579 <a class="code" href="structecat63__attnheader.html">ECAT63_attnheader</a> attn_header; <a name="l00580"></a>00580 <a class="code" href="structecat63__normheader.html">ECAT63_normheader</a> norm_header; <a name="l00581"></a>00581 <span class="keywordtype">float</span> scale=1.0; <a name="l00582"></a>00582 <span class="keywordtype">short</span> <span class="keywordtype">int</span> *sptr; <a name="l00583"></a>00583 <span class="keywordtype">char</span> *mdata=NULL, *mptr; <a name="l00584"></a>00584 <span class="keywordtype">int</span> *iptr; <a name="l00585"></a>00585 <span class="keyword">struct </span>tm scanStart; <a name="l00586"></a>00586 <a name="l00587"></a>00587 <a name="l00588"></a>00588 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"ecat63ReadPlaneToImg(%s, *img)\n"</span>, fname); <a name="l00589"></a>00589 <span class="comment">/* Check the arguments */</span> <a name="l00590"></a>00590 <span class="keywordflow">if</span>(fname==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"invalid ECAT filename"</span>); <span class="keywordflow">return</span>(2);} <a name="l00591"></a>00591 <span class="keywordflow">if</span>(img==NULL || img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>==<a class="code" href="img_8h.html#aaa022c5022b37f3676f2e888f024f848">IMG_STATUS_UNINITIALIZED</a>) { <a name="l00592"></a>00592 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"image data not initialized"</span>); <span class="keywordflow">return</span>(2);} <a name="l00593"></a>00593 <a name="l00594"></a>00594 <span class="comment">/* Open input CTI file for read */</span> <a name="l00595"></a>00595 <span class="keywordflow">if</span>((fp=fopen(fname, <span class="stringliteral">"rb"</span>)) == NULL) { <a name="l00596"></a>00596 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot open ECAT file"</span>); <span class="keywordflow">return</span>(3);} <a name="l00597"></a>00597 <a name="l00598"></a>00598 <span class="comment">/* Read main header */</span> <a name="l00599"></a>00599 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63r_8c.html#af904c6b26259c4f280cdc18f92aeeae5">ecat63ReadMainheader</a>(fp, &main_header))) { <a name="l00600"></a>00600 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read main header (%d)"</span>, ret); <a name="l00601"></a>00601 fclose(fp); <span class="keywordflow">return</span>(4); <a name="l00602"></a>00602 } <a name="l00603"></a>00603 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) <a class="code" href="ecat63p_8c.html#a129d5f8c3d6135b9934cebc54d27bc47">ecat63PrintMainheader</a>(&main_header, stdout); <a name="l00604"></a>00604 <a name="l00605"></a>00605 <span class="comment">/* Read matrix list and nr */</span> <a name="l00606"></a>00606 <a class="code" href="ecat63ml_8c.html#a2477fe69c32ce33b443b9c0eaedae423">ecat63InitMatlist</a>(&mlist); <a name="l00607"></a>00607 ret=<a class="code" href="ecat63ml_8c.html#a6cce9d0e541e82d56c9d162f16202179">ecat63ReadMatlist</a>(fp, &mlist); <a name="l00608"></a>00608 <span class="keywordflow">if</span>(ret) { <a name="l00609"></a>00609 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix list (%d)"</span>, ret); <a name="l00610"></a>00610 fclose(fp); <span class="keywordflow">return</span>(5); <a name="l00611"></a>00611 } <a name="l00612"></a>00612 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a><=0) { <a name="l00613"></a>00613 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"matrix list is empty"</span>); fclose(fp); <span class="keywordflow">return</span>(5);} <a name="l00614"></a>00614 <span class="comment">/* Sort matrix list */</span> <a name="l00615"></a>00615 <span class="keywordflow">for</span>(i=0; i<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>-1; i++) <span class="keywordflow">for</span>(j=i+1; j<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; j++) { <a name="l00616"></a>00616 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>>mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>) { <a name="l00617"></a>00617 tmpMatdir=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i]; <a name="l00618"></a>00618 mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i]=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j]; mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j]=tmpMatdir; <a name="l00619"></a>00619 } <a name="l00620"></a>00620 } <a name="l00621"></a>00621 <span class="comment">/* Trim extra frames */</span> <a name="l00622"></a>00622 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>>0) { <a name="l00623"></a>00623 del_nr=<a class="code" href="ecat63ml_8c.html#a9dc9509d99d809410fc5904410562856">ecat63DeleteLateFrames</a>(&mlist, main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>); <a name="l00624"></a>00624 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a> && del_nr>0) <a name="l00625"></a>00625 printf(<span class="stringliteral">" %d entries in matrix list will not be used.\n"</span>, del_nr); <a name="l00626"></a>00626 } <a name="l00627"></a>00627 <a name="l00628"></a>00628 <span class="comment">/* Decide the plane to read */</span> <a name="l00629"></a>00629 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>==<a class="code" href="img_8h.html#a3117b1b0649d3761dcda1395202129e5">IMG_STATUS_OCCUPIED</a>) { <a name="l00630"></a>00630 <span class="comment">/* img contains data */</span> <a name="l00631"></a>00631 isFirst=0; prev_frameNr=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>; <a name="l00632"></a>00632 <span class="comment">/* get the current plane in there */</span> <a name="l00633"></a>00633 prev_plane=img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>-1]; <a name="l00634"></a>00634 <span class="comment">/* Clear all data in img: not here but only after finding new data */</span> <a name="l00635"></a>00635 } <span class="keywordflow">else</span> { <a name="l00636"></a>00636 <span class="comment">/* img does not contain any data */</span> <a name="l00637"></a>00637 isFirst=1; <a name="l00638"></a>00638 <span class="comment">/* set "current plane" to -1 */</span> <a name="l00639"></a>00639 prev_plane=-1; <a name="l00640"></a>00640 } <a name="l00641"></a>00641 <span class="comment">/* from sorted matrix list, find the first plane larger than the current one */</span> <a name="l00642"></a>00642 <span class="keywordflow">for</span>(m=0, plane=-1; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#a9096ac571f3dabee56894b264552f65f">matstat</a>==1) { <a name="l00643"></a>00643 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l00644"></a>00644 <span class="keywordflow">if</span>(matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>>prev_plane) {plane=matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>; <span class="keywordflow">break</span>;} <a name="l00645"></a>00645 } <a name="l00646"></a>00646 <span class="comment">/* If not found, return an error or 1 if this was not the first one */</span> <a name="l00647"></a>00647 <span class="keywordflow">if</span>(plane<0) { <a name="l00648"></a>00648 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <a name="l00649"></a>00649 <span class="keywordflow">if</span>(isFirst) { <a name="l00650"></a>00650 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"ECAT file contains no matrices"</span>); <a name="l00651"></a>00651 <span class="keywordflow">return</span>(7); <a name="l00652"></a>00652 } <span class="keywordflow">else</span> { <a name="l00653"></a>00653 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"ECAT file contains no more planes"</span>); <a name="l00654"></a>00654 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"%s\n"</span>, <a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>); <a name="l00655"></a>00655 <span class="keywordflow">return</span>(1); <a name="l00656"></a>00656 } <a name="l00657"></a>00657 } <a name="l00658"></a>00658 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"Next plane to read: %d\n"</span>, plane); <a name="l00659"></a>00659 <span class="comment">/* Clear all data in img */</span> <a name="l00660"></a>00660 <a class="code" href="img_8c.html#ada573d4b40da77be4455bb9fab9a3033">imgEmpty</a>(img); <a name="l00661"></a>00661 <a name="l00662"></a>00662 <span class="comment">/* Calculate the number of frames and gates */</span> <a name="l00663"></a>00663 prev_frame=frame=-1; frameNr=0; ret=0; planeNr=1; <a name="l00664"></a>00664 <span class="keywordflow">for</span>(m=0; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#a9096ac571f3dabee56894b264552f65f">matstat</a>==1) { <a name="l00665"></a>00665 <span class="comment">/* get frame and plane; work only with current plane */</span> <a name="l00666"></a>00666 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l00667"></a>00667 <span class="keywordflow">if</span>(matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a><plane) <span class="keywordflow">continue</span>; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>>plane) <span class="keywordflow">break</span>; <a name="l00668"></a>00668 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>>=main_header.<a class="code" href="structecat63__mainheader.html#a5038021b6504d93e304931a95af64746">num_gates</a>) frame=matval.<a class="code" href="structMatval.html#a514081d81e26c20a377de4e945499446">frame</a>; <a name="l00669"></a>00669 <span class="keywordflow">else</span> frame=matval.<a class="code" href="structMatval.html#ab317865439d3423f362a3094dd65fc18">gate</a>; <a name="l00670"></a>00670 frameNr++; <a name="l00671"></a>00671 <span class="comment">/* frame (gate) numbers must be continuous */</span> <a name="l00672"></a>00672 <span class="keywordflow">if</span>(prev_frame>0 && frame!=prev_frame+1) {ret=1; <span class="keywordflow">break</span>;} <a name="l00673"></a>00673 prev_frame=frame; <a name="l00674"></a>00674 <span class="comment">/* Calculate and check the size of one data matrix */</span> <a name="l00675"></a>00675 <span class="keywordflow">if</span>(frameNr==1) { <a name="l00676"></a>00676 firstm=m; <a name="l00677"></a>00677 blkNr=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>; <a name="l00678"></a>00678 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(blkNr!=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>) { <a name="l00679"></a>00679 ret=2; <span class="keywordflow">break</span>; <a name="l00680"></a>00680 } <a name="l00681"></a>00681 prev_frame=frame; <a name="l00682"></a>00682 } <span class="comment">/* next matrix */</span> <a name="l00683"></a>00683 <span class="keywordflow">if</span>(ret==1) { <a name="l00684"></a>00684 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"missing matrix"</span>); <a name="l00685"></a>00685 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span>(6); <a name="l00686"></a>00686 } <a name="l00687"></a>00687 <span class="keywordflow">if</span>(ret==2) { <a name="l00688"></a>00688 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"matrix sizes are different"</span>); <a name="l00689"></a>00689 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span>(6); <a name="l00690"></a>00690 } <a name="l00691"></a>00691 <span class="comment">/* Check that frameNr is equal to the dimt in IMG */</span> <a name="l00692"></a>00692 <span class="keywordflow">if</span>(!isFirst && frameNr!=prev_frameNr) { <a name="l00693"></a>00693 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"different frame nr in different planes"</span>); <a name="l00694"></a>00694 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span>(6); <a name="l00695"></a>00695 } <a name="l00696"></a>00696 <a name="l00697"></a>00697 <span class="comment">/* Read x,y-dimensions from 1st matrix subheader on current plane */</span> <a name="l00698"></a>00698 m=firstm; <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00699"></a>00699 ret=<a class="code" href="ecat63r_8c.html#adc36293804c18dd15771c61500841b7c">ecat63ReadImageheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &image_header); <a name="l00700"></a>00700 dim_x=image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a>; dim_y=image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>; <a name="l00701"></a>00701 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00702"></a>00702 ret=<a class="code" href="ecat63r_8c.html#a811c9c52c52f1c749ee6cb0f7a51f884">ecat63ReadScanheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &scan_header); <a name="l00703"></a>00703 dim_x=scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a>; dim_y=scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>; <a name="l00704"></a>00704 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l00705"></a>00705 ret=<a class="code" href="ecat63r_8c.html#ac9c08bd1e03ddc4f4a8c83a5ea198e05">ecat63ReadAttnheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &attn_header); <a name="l00706"></a>00706 dim_x=attn_header.<a class="code" href="structecat63__attnheader.html#acbea9636493630fc7bdc3de4fcd4cfa2">dimension_1</a>; dim_y=attn_header.<a class="code" href="structecat63__attnheader.html#af9fa1e4491aa3321b4ce99f54e5ebb6e">dimension_2</a>; <a name="l00707"></a>00707 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l00708"></a>00708 ret=<a class="code" href="ecat63r_8c.html#a6a169297491f0f8a734247467cfb2b89">ecat63ReadNormheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &norm_header); <a name="l00709"></a>00709 dim_x=norm_header.<a class="code" href="structecat63__normheader.html#a546d6d89d6df87d2de51c1588884d5b5">dimension_1</a>; dim_y=norm_header.<a class="code" href="structecat63__normheader.html#aa49aa059f33fad5d960b044da8076fe7">dimension_2</a>; <a name="l00710"></a>00710 } <a name="l00711"></a>00711 pxlNr=dim_x*dim_y; <a name="l00712"></a>00712 <span class="keywordflow">if</span>(ret) { <a name="l00713"></a>00713 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix %u subheader"</span>, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>); <a name="l00714"></a>00714 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span>(7); <a name="l00715"></a>00715 } <a name="l00716"></a>00716 <a name="l00717"></a>00717 <span class="comment">/* Allocate memory for ECAT data matrix */</span> <a name="l00718"></a>00718 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"allocating memory for %d blocks\n"</span>, blkNr); <a name="l00719"></a>00719 mdata=(<span class="keywordtype">char</span>*)malloc(blkNr*<a class="code" href="ecat63_8h.html#abdf75c7aade8a596594e8e7ce8b16872">MatBLKSIZE</a>); <span class="keywordflow">if</span>(mdata==NULL) { <a name="l00720"></a>00720 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"out of memory"</span>); <a name="l00721"></a>00721 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <span class="keywordflow">return</span>(8); <a name="l00722"></a>00722 } <a name="l00723"></a>00723 <span class="comment">/* Allocate memory for whole img data */</span> <a name="l00724"></a>00724 ret=<a class="code" href="img_8c.html#a9b2670da9c7685e6d53058cdf1db1199">imgAllocate</a>(img, planeNr, dim_y, dim_x, frameNr); <a name="l00725"></a>00725 <span class="keywordflow">if</span>(ret) { <a name="l00726"></a>00726 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"out of memory (%d)"</span>, ret); <a name="l00727"></a>00727 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); <span class="keywordflow">return</span>(8); <a name="l00728"></a>00728 } <a name="l00729"></a>00729 <a name="l00730"></a>00730 <span class="comment">/* Fill img info with ECAT main and sub header information */</span> <a name="l00731"></a>00731 img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>=main_header.<a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>; <a name="l00732"></a>00732 img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>=main_header.<a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>; <span class="comment">/* this continues below */</span> <a name="l00733"></a>00733 strncpy(img-><a class="code" href="structIMG.html#ab8bcc846c896a26e5aac045b118fd5cf">radiopharmaceutical</a>, main_header.<a class="code" href="structecat63__mainheader.html#a51129743a09356f7b83e11fa0865d17d">radiopharmaceutical</a>, 32); <a name="l00734"></a>00734 img-><a class="code" href="structIMG.html#ac9c048a9dc8205b22518b05486d8030b">isotopeHalflife</a>=main_header.<a class="code" href="structecat63__mainheader.html#aa80e2c3fda2047135338e9525b48fb17">isotope_halflife</a>; <a name="l00735"></a>00735 memset(&scanStart, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tm)); <a name="l00736"></a>00736 scanStart.tm_year=main_header.<a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>-1900; <a name="l00737"></a>00737 scanStart.tm_mon=main_header.<a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>-1; <a name="l00738"></a>00738 scanStart.tm_mday=main_header.<a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>; scanStart.tm_yday=0; <a name="l00739"></a>00739 scanStart.tm_hour=main_header.<a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>; <a name="l00740"></a>00740 scanStart.tm_min=main_header.<a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>; <a name="l00741"></a>00741 scanStart.tm_sec=main_header.<a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>; <a name="l00742"></a>00742 scanStart.tm_isdst=-1; <a name="l00743"></a>00743 img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>=mktime(&scanStart); <span class="comment">/*printf("img->scanStart=%d\n", img->scanStart);*/</span> <a name="l00744"></a>00744 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>==-1) img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>=0; <a name="l00745"></a>00745 img-><a class="code" href="structIMG.html#af1d9f4bd7d58988eb4aa9f660a244a64">axialFOV</a>=10.*main_header.<a class="code" href="structecat63__mainheader.html#acfb971c6cfaffd74900fb23da894bef2">axial_fov</a>; <a name="l00746"></a>00746 img-><a class="code" href="structIMG.html#a4a03c16266c7e7dcd6858aca05e7599f">transaxialFOV</a>=10.*main_header.<a class="code" href="structecat63__mainheader.html#a3545e9b7344313ca3f5c0e9f817d1fc4">transaxial_fov</a>; <a name="l00747"></a>00747 strncpy(img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>, main_header.<a class="code" href="structecat63__mainheader.html#ae42d92d4f2b85a68511f266f7cddfc8c">study_name</a>, MAX_STUDYNR_LEN); <a name="l00748"></a>00748 strncpy(img-><a class="code" href="structIMG.html#a29013e391052918bd5aa6974eeec811d">patientName</a>, main_header.<a class="code" href="structecat63__mainheader.html#a7c66591db9e9dd727d6707ea1051df88">patient_name</a>, 31); <a name="l00749"></a>00749 strncpy(img-><a class="code" href="structIMG.html#a7dc9c21dbaf6b609a32e54c708e089c1">patientID</a>, main_header.<a class="code" href="structecat63__mainheader.html#ac0ca7836b26f3bcc824110278ecb6508">patient_id</a>, 15); <a name="l00750"></a>00750 img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>=10.*main_header.<a class="code" href="structecat63__mainheader.html#afa9b56b592ebcc6a0c8a499c7b74562a">plane_separation</a>; <a name="l00751"></a>00751 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00752"></a>00752 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>; <a name="l00753"></a>00753 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a><1) img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>=image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>; <a name="l00754"></a>00754 img-><a class="code" href="structIMG.html#ab23da0c2295967727c6d33d0fbdc8c88">zoom</a>=image_header.<a class="code" href="structecat63__imageheader.html#a9a0fd8c173273797330c7c67effdffd6">recon_scale</a>; <a name="l00755"></a>00755 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>>1.0) img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=1; <a name="l00756"></a>00756 img-><a class="code" href="structIMG.html#a02cc239e917e7ebf85e34f21448ff080">sizex</a>=img-><a class="code" href="structIMG.html#a80b0609c63f33934bf6e6678c6121cb3">sizey</a>=10.*image_header.<a class="code" href="structecat63__imageheader.html#a749a7dfb6443194317be2260fc7b5b7b">pixel_size</a>; <a name="l00757"></a>00757 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a><10.*image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>) <a name="l00758"></a>00758 img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>=10.*image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>; <a name="l00759"></a>00759 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00760"></a>00760 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l00761"></a>00761 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l00762"></a>00762 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l00763"></a>00763 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l00764"></a>00764 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l00765"></a>00765 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l00766"></a>00766 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l00767"></a>00767 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l00768"></a>00768 } <a name="l00769"></a>00769 img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[0]=plane; <a name="l00770"></a>00770 strncpy(img-><a class="code" href="structIMG.html#a3651200fbb19796a635502a7b7d2c2c3">studyDescription</a>, main_header.<a class="code" href="structecat63__mainheader.html#a6322ecb4779f20b48b19360b605127e7">study_description</a>, 32); <a name="l00771"></a>00771 strncpy(img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>, main_header.<a class="code" href="structecat63__mainheader.html#aeae1e01c587128f945503d87cb6d3ada">user_process_code</a>, 10); img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>[10]=(char)0; <a name="l00772"></a>00772 <span class="comment">/* If valid study number is found in user_process_code, then take it */</span> <a name="l00773"></a>00773 <span class="keywordflow">if</span>(!img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>[0] && studynr_validity_check(img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>)) <a name="l00774"></a>00774 strcpy(img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>, img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>); <a name="l00775"></a>00775 <span class="comment">/* Set _fileFormat */</span> <a name="l00776"></a>00776 img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>=<a class="code" href="img_8h.html#a7d502c1293f35b4392badbb9491ee95e">IMG_E63</a>; <a name="l00777"></a>00777 <a name="l00778"></a>00778 <span class="comment">/* Read one ECAT matrix at a time and put them to img */</span> <a name="l00779"></a>00779 <span class="keywordflow">for</span>(m=firstm, frame=1; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#a9096ac571f3dabee56894b264552f65f">matstat</a>==1) { <a name="l00780"></a>00780 <span class="comment">/* get plane */</span> <a name="l00781"></a>00781 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l00782"></a>00782 <span class="keywordflow">if</span>(matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>>plane) <span class="keywordflow">break</span>; <span class="comment">/* Quit when current plane is read */</span> <a name="l00783"></a>00783 <span class="comment">/* Read subheader */</span> <a name="l00784"></a>00784 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l00785"></a>00785 ret=<a class="code" href="ecat63r_8c.html#adc36293804c18dd15771c61500841b7c">ecat63ReadImageheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &image_header); <a name="l00786"></a>00786 <span class="keywordflow">if</span>(dim_x!=image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a> || dim_y!=image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>) ret=1; <a name="l00787"></a>00787 scale=image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>; <a name="l00788"></a>00788 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>>0.0 <a name="l00789"></a>00789 && fabs(main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>/image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>-1.0)>0.0001) <a name="l00790"></a>00790 scale*=image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>; <a name="l00791"></a>00791 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>==0 && image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>>0) img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>=image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>; <a name="l00792"></a>00792 datatype=image_header.<a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>; <a name="l00793"></a>00793 img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]=image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>/1000.; <a name="l00794"></a>00794 img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]=img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>/1000.; <a name="l00795"></a>00795 img-><a class="code" href="structIMG.html#af7c69142be89fac081e7f8bc354b14c8">mid</a>[frame-1]=0.5*(img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]); <a name="l00796"></a>00796 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>>1.0) <a name="l00797"></a>00797 img-><a class="code" href="structIMG.html#abf0ad6e681d08c3248dbd9837afa9973">decayCorrFactor</a>[frame-1]=image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>; <a name="l00798"></a>00798 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l00799"></a>00799 ret=<a class="code" href="ecat63r_8c.html#a811c9c52c52f1c749ee6cb0f7a51f884">ecat63ReadScanheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &scan_header); <a name="l00800"></a>00800 <span class="keywordflow">if</span>(dim_x!=scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a> || dim_y!=scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>) ret=1; <a name="l00801"></a>00801 scale=scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>; <a name="l00802"></a>00802 <span class="keywordflow">if</span>(scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>>0.0) scale*=scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>; <a name="l00803"></a>00803 datatype=scan_header.<a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>; <a name="l00804"></a>00804 img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]=scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>/1000.; <a name="l00805"></a>00805 img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]=img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>/1000.; <a name="l00806"></a>00806 img-><a class="code" href="structIMG.html#af7c69142be89fac081e7f8bc354b14c8">mid</a>[frame-1]=0.5*(img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]+img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]); <a name="l00807"></a>00807 img-><a class="code" href="structIMG.html#a399dae5b27dda8d5e1b0e96c885513e4">sampleDistance</a>=10.0*scan_header.<a class="code" href="structecat63__scanheader.html#acb676ed22b052fbaa07bd044263ac279">sample_distance</a>; <a name="l00808"></a>00808 img-><a class="code" href="structIMG.html#a76d63a001b8569d9f80ccb325e064be1">prompts</a>[frame-1]=(float)scan_header.<a class="code" href="structecat63__scanheader.html#a28b007d345ada719bb886fd7a2683d76">prompts</a>; <a name="l00809"></a>00809 img-><a class="code" href="structIMG.html#ae47ebbbdc0c308f473fec801a2df513d">randoms</a>[frame-1]=(<span class="keywordtype">float</span>)scan_header.<a class="code" href="structecat63__scanheader.html#ad0a2468779aec56e8d45ca685834eb16">delayed</a>; <a name="l00810"></a>00810 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l00811"></a>00811 ret=<a class="code" href="ecat63r_8c.html#ac9c08bd1e03ddc4f4a8c83a5ea198e05">ecat63ReadAttnheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &attn_header); <a name="l00812"></a>00812 <span class="keywordflow">if</span>(dim_x!=attn_header.<a class="code" href="structecat63__attnheader.html#acbea9636493630fc7bdc3de4fcd4cfa2">dimension_1</a> || dim_y!=attn_header.<a class="code" href="structecat63__attnheader.html#af9fa1e4491aa3321b4ce99f54e5ebb6e">dimension_2</a>) ret=1; <a name="l00813"></a>00813 scale=attn_header.<a class="code" href="structecat63__attnheader.html#a649891350c3b30214f43ca2d640a0e47">scale_factor</a>; <a name="l00814"></a>00814 datatype=attn_header.<a class="code" href="structecat63__attnheader.html#ac5bea9d6b3dae0b4c87d5e66a0d2006e">data_type</a>; <a name="l00815"></a>00815 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l00816"></a>00816 ret=<a class="code" href="ecat63r_8c.html#a6a169297491f0f8a734247467cfb2b89">ecat63ReadNormheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &norm_header); <a name="l00817"></a>00817 <span class="keywordflow">if</span>(dim_x!=norm_header.<a class="code" href="structecat63__normheader.html#a546d6d89d6df87d2de51c1588884d5b5">dimension_1</a> || dim_y!=norm_header.<a class="code" href="structecat63__normheader.html#aa49aa059f33fad5d960b044da8076fe7">dimension_2</a>) ret=1; <a name="l00818"></a>00818 scale=norm_header.<a class="code" href="structecat63__normheader.html#a914977ee68c14326a4551abae57fc9ab">scale_factor</a>; <a name="l00819"></a>00819 datatype=norm_header.<a class="code" href="structecat63__normheader.html#ae7d4136070d36e9edbe684a80e39b942">data_type</a>; <a name="l00820"></a>00820 } <span class="keywordflow">else</span> datatype=-1; <a name="l00821"></a>00821 <span class="keywordflow">if</span>(ret) { <a name="l00822"></a>00822 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix %u subheader"</span>, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>); <a name="l00823"></a>00823 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); fclose(fp); <span class="keywordflow">return</span>(7); <a name="l00824"></a>00824 } <a name="l00825"></a>00825 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>>0.0) scale*=main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>; <a name="l00826"></a>00826 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>2) printf(<span class="stringliteral">"scale=%e datatype=%d\n"</span>, scale, datatype); <a name="l00827"></a>00827 <span class="comment">/* Read the pixel data */</span> <a name="l00828"></a>00828 ret=<a class="code" href="ecat63r_8c.html#a7f3456ddf0f774026d462df66bf1210b">ecat63ReadMatdata</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>+1, <a name="l00829"></a>00829 mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, <a name="l00830"></a>00830 mdata, datatype); <a name="l00831"></a>00831 <span class="keywordflow">if</span>(ret) { <a name="l00832"></a>00832 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix data"</span>); <a name="l00833"></a>00833 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); fclose(fp); <span class="keywordflow">return</span>(9); <a name="l00834"></a>00834 } <a name="l00835"></a>00835 <span class="keywordflow">if</span>(datatype==<a class="code" href="ecat63_8h.html#a8e1f9f0fd436e762641718456852ee80">BYTE_TYPE</a>) { <a name="l00836"></a>00836 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr++) { <a name="l00837"></a>00837 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[0][i][j][frame-1]=scale*(float)(*mptr); <a name="l00838"></a>00838 } <a name="l00839"></a>00839 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(datatype==<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a> || datatype==<a class="code" href="ecat63_8h.html#aebd1500a1497c6489f1820442db218d2">SUN_I2</a>) { <a name="l00840"></a>00840 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr+=2) { <a name="l00841"></a>00841 sptr=(<span class="keywordtype">short</span> <span class="keywordtype">int</span>*)mptr; <a name="l00842"></a>00842 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[0][i][j][frame-1]=scale*(float)(*sptr); <a name="l00843"></a>00843 } <a name="l00844"></a>00844 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(datatype==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || datatype==<a class="code" href="ecat63_8h.html#a105892e015b38ae62e69684acf6df31d">SUN_I4</a>) { <a name="l00845"></a>00845 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr+=4) { <a name="l00846"></a>00846 iptr=(<span class="keywordtype">int</span>*)mptr; <a name="l00847"></a>00847 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[0][i][j][frame-1]=scale*(float)(*iptr); <a name="l00848"></a>00848 } <a name="l00849"></a>00849 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(datatype==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a> || datatype==<a class="code" href="ecat63_8h.html#a6001c489ee0296a6dca313ee3bfe4412">IEEE_R4</a>) { <a name="l00850"></a>00850 <span class="keywordflow">for</span>(i=0, mptr=mdata; i<dim_y; i++) <span class="keywordflow">for</span>(j=0; j<dim_x; j++, mptr+=4) { <a name="l00851"></a>00851 memcpy(&img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[0][i][j][frame-1], mptr, 4); <a name="l00852"></a>00852 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[0][i][j][frame-1]*=scale; <a name="l00853"></a>00853 } <a name="l00854"></a>00854 } <a name="l00855"></a>00855 frame++; <a name="l00856"></a>00856 } <span class="comment">/* next matrix (frame) */</span> <a name="l00857"></a>00857 <span class="comment">/* Set the unit */</span> <a name="l00858"></a>00858 <a class="code" href="imgunit_8c.html#a99853914e3480ab82c7163b0612e8b28">imgUnitFromEcat</a>(img, img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a>); <a name="l00859"></a>00859 <a name="l00860"></a>00860 <span class="comment">/* Free memory and close file */</span> <a name="l00861"></a>00861 free(mdata); <a name="l00862"></a>00862 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <a name="l00863"></a>00863 fclose(fp); <a name="l00864"></a>00864 <a name="l00865"></a>00865 <span class="comment">/* Set _dataType if it has not been set before */</span> <a name="l00866"></a>00866 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a><1) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=datatype; <a name="l00867"></a>00867 <span class="comment">/* For saving, only 2-byte VAX data types are allowed */</span> <a name="l00868"></a>00868 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a>) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l00869"></a>00869 <a name="l00870"></a>00870 <span class="keywordflow">return</span>(0); <a name="l00871"></a>00871 } <a name="l00872"></a>00872 <span class="comment">/*****************************************************************************/</span> <a name="l00873"></a>00873 <a name="l00874"></a>00874 <span class="comment">/*****************************************************************************/</span> <a name="l00886"></a><a class="code" href="imgfile_8h.html#aa55c8e37d5f65af955121db0311dd8ea">00886</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#aa55c8e37d5f65af955121db0311dd8ea">ecat63AddImg</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <a class="code" href="structIMG.html">IMG</a> *img) { <a name="l00887"></a>00887 <span class="keywordtype">int</span> n, i, j, m, ret=0, add=0; <a name="l00888"></a>00888 <span class="keywordtype">int</span> frameNr, planeNr; <a name="l00889"></a>00889 <span class="keywordtype">int</span> frame, plane, prev_frame, prev_plane; <a name="l00890"></a>00890 <span class="keywordtype">float</span> f, fmax, fmin, g, scale; <a name="l00891"></a>00891 <span class="keywordtype">short</span> <span class="keywordtype">int</span> *sdata, *sptr, smin, smax; <a name="l00892"></a>00892 FILE *fp; <a name="l00893"></a>00893 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l00894"></a>00894 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l00895"></a>00895 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l00896"></a>00896 <a class="code" href="structMATRIXLIST.html">MATRIXLIST</a> mlist; <a name="l00897"></a>00897 <a class="code" href="structMatDir.html">MatDir</a> tmpMatdir; <a name="l00898"></a>00898 <a class="code" href="structMatval.html">Matval</a> matval; <a name="l00899"></a>00899 <span class="keyword">struct </span>tm *scanStart; <a name="l00900"></a>00900 <a name="l00901"></a>00901 <a name="l00902"></a>00902 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"ecat63AddImg(%s, *img)\n"</span>, fname); <a name="l00903"></a>00903 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>1) <a class="code" href="img_8c.html#a32edd1b78039f6cc22b7bbe413aa3a56">imgInfo</a>(img); <a name="l00904"></a>00904 <span class="comment">/* Check the arguments */</span> <a name="l00905"></a>00905 <span class="keywordflow">if</span>(fname==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"invalid ECAT filename"</span>); <span class="keywordflow">return</span>(1);} <a name="l00906"></a>00906 <span class="keywordflow">if</span>(img==NULL || img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a3117b1b0649d3761dcda1395202129e5">IMG_STATUS_OCCUPIED</a>) { <a name="l00907"></a>00907 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"image data is empty"</span>); <span class="keywordflow">return</span>(2);} <a name="l00908"></a>00908 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a><1) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l00909"></a>00909 <a name="l00910"></a>00910 <span class="comment">/* Initiate headers */</span> <a name="l00911"></a>00911 memset(&main_header, 0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a>)); <a name="l00912"></a>00912 memset(&image_header,0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a>)); <a name="l00913"></a>00913 memset(&scan_header, 0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a>)); <a name="l00914"></a>00914 <a name="l00915"></a>00915 <span class="comment">/* Make a main header */</span> <a name="l00916"></a>00916 main_header.<a class="code" href="structecat63__mainheader.html#a433a5fddd8c83644a9f081001815c6e6">sw_version</a>=2; <a name="l00917"></a>00917 main_header.<a class="code" href="structecat63__mainheader.html#aec1a2e31ad9fa2e9d03220565bc3cfa0">num_planes</a>=img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; <a name="l00918"></a>00918 main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>; <a name="l00919"></a>00919 main_header.<a class="code" href="structecat63__mainheader.html#a5038021b6504d93e304931a95af64746">num_gates</a>=1; <a name="l00920"></a>00920 main_header.<a class="code" href="structecat63__mainheader.html#ad8cbcc286f61bd37eb2a6f196b88a4bb">num_bed_pos</a>=1; <a name="l00921"></a>00921 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>) main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>=<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>; <a name="l00922"></a>00922 <span class="keywordflow">else</span> main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>=<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>; <a name="l00923"></a>00923 main_header.<a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>=img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>; <a name="l00924"></a>00924 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>>0) main_header.<a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>=img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>; <a name="l00925"></a>00925 <span class="keywordflow">else</span> main_header.<a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>=<a class="code" href="ecat63_8h.html#a4aad8bedf2b4765e35f5933a7c6b8558">ECAT63_SYSTEM_TYPE_DEFAULT</a>; <a name="l00926"></a>00926 main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>=1.0; <a name="l00927"></a>00927 main_header.<a class="code" href="structecat63__mainheader.html#acfb971c6cfaffd74900fb23da894bef2">axial_fov</a>=img-><a class="code" href="structIMG.html#af1d9f4bd7d58988eb4aa9f660a244a64">axialFOV</a>/10.0; <a name="l00928"></a>00928 main_header.<a class="code" href="structecat63__mainheader.html#a3545e9b7344313ca3f5c0e9f817d1fc4">transaxial_fov</a>=img-><a class="code" href="structIMG.html#a4a03c16266c7e7dcd6858aca05e7599f">transaxialFOV</a>/10.0; <a name="l00929"></a>00929 main_header.<a class="code" href="structecat63__mainheader.html#afa9b56b592ebcc6a0c8a499c7b74562a">plane_separation</a>=img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>/10.0; <a name="l00930"></a>00930 main_header.<a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>=<a class="code" href="imgunit_8c.html#a0d8d16b27eaefdf56d32b5c4c51f3757">imgUnitToEcat6</a>(img); <a name="l00931"></a>00931 strncpy(main_header.<a class="code" href="structecat63__mainheader.html#a51129743a09356f7b83e11fa0865d17d">radiopharmaceutical</a>, img-><a class="code" href="structIMG.html#ab8bcc846c896a26e5aac045b118fd5cf">radiopharmaceutical</a>, 32); <a name="l00932"></a>00932 scanStart=localtime(&img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>); <a name="l00933"></a>00933 <span class="keywordflow">if</span>(scanStart!=NULL) { <a name="l00934"></a>00934 main_header.<a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>=scanStart->tm_year+1900; <a name="l00935"></a>00935 main_header.<a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>=scanStart->tm_mon+1; <a name="l00936"></a>00936 main_header.<a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>=scanStart->tm_mday; <a name="l00937"></a>00937 main_header.<a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>=scanStart->tm_hour; <a name="l00938"></a>00938 main_header.<a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>=scanStart->tm_min; <a name="l00939"></a>00939 main_header.<a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>=scanStart->tm_sec; <a name="l00940"></a>00940 } <span class="keywordflow">else</span> { <a name="l00941"></a>00941 main_header.<a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>=1900; <a name="l00942"></a>00942 main_header.<a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>=1; <a name="l00943"></a>00943 main_header.<a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>=1; <a name="l00944"></a>00944 main_header.<a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>=0; <a name="l00945"></a>00945 main_header.<a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>=0; <a name="l00946"></a>00946 main_header.<a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>=0; <a name="l00947"></a>00947 } <a name="l00948"></a>00948 main_header.<a class="code" href="structecat63__mainheader.html#aa80e2c3fda2047135338e9525b48fb17">isotope_halflife</a>=img-><a class="code" href="structIMG.html#ac9c048a9dc8205b22518b05486d8030b">isotopeHalflife</a>; <a name="l00949"></a>00949 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#ad5e1bd9b72bdc5e5cc820bf25231bef5">isotope_code</a>, <a class="code" href="imgdecay_8c.html#a14db419685f526306032a84343eed72c">imgIsotope</a>(img)); <a name="l00950"></a>00950 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#ae42d92d4f2b85a68511f266f7cddfc8c">study_name</a>, img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>); <a name="l00951"></a>00951 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#a7c66591db9e9dd727d6707ea1051df88">patient_name</a>, img-><a class="code" href="structIMG.html#a29013e391052918bd5aa6974eeec811d">patientName</a>); <a name="l00952"></a>00952 strcpy(main_header.<a class="code" href="structecat63__mainheader.html#ac0ca7836b26f3bcc824110278ecb6508">patient_id</a>, img-><a class="code" href="structIMG.html#a7dc9c21dbaf6b609a32e54c708e089c1">patientID</a>); <a name="l00953"></a>00953 strncpy(main_header.<a class="code" href="structecat63__mainheader.html#a6322ecb4779f20b48b19360b605127e7">study_description</a>, img-><a class="code" href="structIMG.html#a3651200fbb19796a635502a7b7d2c2c3">studyDescription</a>, 32); <a name="l00954"></a>00954 strncpy(main_header.<a class="code" href="structecat63__mainheader.html#aeae1e01c587128f945503d87cb6d3ada">user_process_code</a>, img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>, 10); <a name="l00955"></a>00955 <a name="l00956"></a>00956 <span class="comment">/* Check if the ECAT file exists */</span> <a name="l00957"></a>00957 <span class="keywordflow">if</span>(access(fname, 0) != -1) { <a name="l00958"></a>00958 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"Opening existing ECAT file.\n"</span>); <a name="l00959"></a>00959 add=1; <a name="l00960"></a>00960 <span class="comment">/* Open the ECAT file */</span> <a name="l00961"></a>00961 <span class="keywordflow">if</span>((fp=fopen(fname, <span class="stringliteral">"rb+"</span>)) == NULL) { <a name="l00962"></a>00962 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot create ECAT file"</span>); <span class="keywordflow">return</span>(3);} <a name="l00963"></a>00963 <span class="comment">/* Read main header */</span> <a name="l00964"></a>00964 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63r_8c.html#af904c6b26259c4f280cdc18f92aeeae5">ecat63ReadMainheader</a>(fp, &main_header))) { <a name="l00965"></a>00965 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read main header (%d)"</span>, ret); <a name="l00966"></a>00966 fclose(fp); <span class="keywordflow">return</span>(3); <a name="l00967"></a>00967 } <a name="l00968"></a>00968 fflush(fp); <a name="l00969"></a>00969 <span class="comment">/* Check that filetypes are matching */</span> <a name="l00970"></a>00970 <span class="keywordflow">if</span>((main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a> && img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>) || <a name="l00971"></a>00971 (main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a> && img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>)) { <a name="l00972"></a>00972 <span class="comment">/* ok */</span> <a name="l00973"></a>00973 } <span class="keywordflow">else</span> { <a name="l00974"></a>00974 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot add different filetype"</span>); <a name="l00975"></a>00975 fclose(fp); <span class="keywordflow">return</span>(3); <a name="l00976"></a>00976 } <a name="l00977"></a>00977 } <span class="keywordflow">else</span> { <a name="l00978"></a>00978 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"ECAT file does not exist.\n"</span>); <a name="l00979"></a>00979 add=0; <a name="l00980"></a>00980 <span class="comment">/* Create output ECAT file */</span> <a name="l00981"></a>00981 fp=<a class="code" href="ecat63w_8c.html#aa9545a4a59002bf59a77478977f479eb">ecat63Create</a>(fname, &main_header); <a name="l00982"></a>00982 <span class="keywordflow">if</span>(fp==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot create ECAT file"</span>); <span class="keywordflow">return</span>(3);} <a name="l00983"></a>00983 } <a name="l00984"></a>00984 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) <a class="code" href="ecat63p_8c.html#a129d5f8c3d6135b9934cebc54d27bc47">ecat63PrintMainheader</a>(&main_header, stdout); <a name="l00985"></a>00985 <a name="l00986"></a>00986 <span class="comment">/* Allocate memory for matrix data */</span> <a name="l00987"></a>00987 sdata=(<span class="keywordtype">short</span> <span class="keywordtype">int</span>*)malloc(img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>*img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">short</span> <span class="keywordtype">int</span>)); <a name="l00988"></a>00988 <span class="keywordflow">if</span>(sdata==NULL) {strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"out of memory"</span>); <span class="keywordflow">return</span>(4);} <a name="l00989"></a>00989 <a name="l00990"></a>00990 <span class="comment">/* Set the subheader contents, as far as possible */</span> <a name="l00991"></a>00991 <span class="keywordflow">switch</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>) { <a name="l00992"></a>00992 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>: <a name="l00993"></a>00993 scan_header.<a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>=main_header.<a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>; <a name="l00994"></a>00994 scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a>=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; <a name="l00995"></a>00995 scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>=img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; <a name="l00996"></a>00996 scan_header.<a class="code" href="structecat63__scanheader.html#aaf23846f5c3ee43188d49fac0f592498">frame_duration_sec</a>=1; <a name="l00997"></a>00997 scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>=1.0; <a name="l00998"></a>00998 scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>=0; <a name="l00999"></a>00999 scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>=1000; <a name="l01000"></a>01000 scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>=1.0; <a name="l01001"></a>01001 scan_header.<a class="code" href="structecat63__scanheader.html#acb676ed22b052fbaa07bd044263ac279">sample_distance</a>=(img-><a class="code" href="structIMG.html#a399dae5b27dda8d5e1b0e96c885513e4">sampleDistance</a>)/10.0; <a name="l01002"></a>01002 <span class="comment">/*if(IMG_TEST) ecat63PrintScanheader(&scan_header);*/</span> <a name="l01003"></a>01003 <span class="keywordflow">break</span>; <a name="l01004"></a>01004 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>: <a name="l01005"></a>01005 image_header.<a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>=main_header.<a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>; <a name="l01006"></a>01006 image_header.<a class="code" href="structecat63__imageheader.html#a417f483d23efabd675ed72cdd4bbdb98">num_dimensions</a>=2; <a name="l01007"></a>01007 image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a>=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; <a name="l01008"></a>01008 image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>=img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; <a name="l01009"></a>01009 image_header.<a class="code" href="structecat63__imageheader.html#a9a0fd8c173273797330c7c67effdffd6">recon_scale</a>=img-><a class="code" href="structIMG.html#ab23da0c2295967727c6d33d0fbdc8c88">zoom</a>; <a name="l01010"></a>01010 image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>=1.0; <a name="l01011"></a>01011 image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>=img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>/10.; <a name="l01012"></a>01012 image_header.<a class="code" href="structecat63__imageheader.html#a749a7dfb6443194317be2260fc7b5b7b">pixel_size</a>=img-><a class="code" href="structIMG.html#a02cc239e917e7ebf85e34f21448ff080">sizex</a>/10.; <a name="l01013"></a>01013 image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>=0; <a name="l01014"></a>01014 image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>=1000; <a name="l01015"></a>01015 image_header.<a class="code" href="structecat63__imageheader.html#a7c53b9df3c138cf5b9d5b2986d003377">plane_eff_corr_fctr</a>=1.0; <a name="l01016"></a>01016 image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>=0.0; <a name="l01017"></a>01017 image_header.<a class="code" href="structecat63__imageheader.html#ab7fe2e08a8afa0b40c4fb9cf5a434ac1">loss_corr_fctr</a>=1.0; <a name="l01018"></a>01018 image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>=1.0; <a name="l01019"></a>01019 image_header.<a class="code" href="structecat63__imageheader.html#a6338eb4b7fdcb624ac0673260d16db42">well_counter_cal_fctr</a>=1.0; <a name="l01020"></a>01020 image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>=main_header.<a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>; <a name="l01021"></a>01021 <span class="comment">/*if(IMG_TEST) ecat63PrintImageheader(&image_header);*/</span> <a name="l01022"></a>01022 <span class="keywordflow">break</span>; <a name="l01023"></a>01023 } <a name="l01024"></a>01024 <a name="l01025"></a>01025 <span class="comment">/* Write one matrix at a time */</span> <a name="l01026"></a>01026 n=0; <a name="l01027"></a>01027 <span class="keywordflow">for</span>(plane=1; plane<=img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; plane++) <span class="keywordflow">for</span>(frame=1; frame<=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>; frame++) { <a name="l01028"></a>01028 <span class="comment">/* Scale data to short ints */</span> <a name="l01029"></a>01029 <span class="comment">/* Search min and max */</span> <a name="l01030"></a>01030 fmin=fmax=f=img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[plane-1][0][0][frame-1]; <a name="l01031"></a>01031 <span class="keywordflow">for</span>(i=0; i<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; i++) <span class="keywordflow">for</span>(j=0; j<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; j++) { <a name="l01032"></a>01032 f=img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[plane-1][i][j][frame-1]; <a name="l01033"></a>01033 <span class="keywordflow">if</span>(f>fmax) fmax=f; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(f<fmin) fmin=f; <a name="l01034"></a>01034 } <a name="l01035"></a>01035 <span class="comment">/* Calculate scaling factor */</span> <a name="l01036"></a>01036 <span class="keywordflow">if</span>(fabs(fmin)>fabs(fmax)) g=fabs(fmin); <span class="keywordflow">else</span> g=fabs(fmax); <a name="l01037"></a>01037 <span class="keywordflow">if</span>(g!=0) scale=32766./g; <span class="keywordflow">else</span> scale=1.0; <a name="l01038"></a>01038 <span class="comment">/*printf("fmin=%e fmax=%e g=%e scale=%e\n", fmin, fmax, g, scale);*/</span> <a name="l01039"></a>01039 <span class="comment">/* Scale matrix data to shorts */</span> <a name="l01040"></a>01040 sptr=sdata; <a name="l01041"></a>01041 <span class="keywordflow">for</span>(i=0; i<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; i++) <span class="keywordflow">for</span>(j=0; j<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; j++) { <a name="l01042"></a>01042 *sptr=(<span class="keywordtype">short</span> int)temp_roundf(scale*img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[plane-1][i][j][frame-1]); <a name="l01043"></a>01043 sptr++; <a name="l01044"></a>01044 } <a name="l01045"></a>01045 <span class="comment">/* Calculate and set subheader min&max and scale */</span> <a name="l01046"></a>01046 smin=(<span class="keywordtype">short</span> int)temp_roundf(scale*fmin); smax=(<span class="keywordtype">short</span> int)temp_roundf(scale*fmax); <a name="l01047"></a>01047 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l01048"></a>01048 scan_header.<a class="code" href="structecat63__scanheader.html#abeeb6fea3c31b83464be7afcdff37219">scan_min</a>=smin; scan_header.<a class="code" href="structecat63__scanheader.html#a87fc09622afe7e2372588f650e7e6afd">scan_max</a>=smax; <a name="l01049"></a>01049 scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>=1.0/scale; <a name="l01050"></a>01050 scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>=(int)temp_roundf(1000.*img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]); <a name="l01051"></a>01051 scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>= <a name="l01052"></a>01052 (int)temp_roundf(1000.*(img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]-img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1])); <a name="l01053"></a>01053 scan_header.<a class="code" href="structecat63__scanheader.html#a28b007d345ada719bb886fd7a2683d76">prompts</a>=temp_roundf(img-><a class="code" href="structIMG.html#a76d63a001b8569d9f80ccb325e064be1">prompts</a>[frame-1]); <a name="l01054"></a>01054 scan_header.<a class="code" href="structecat63__scanheader.html#ad0a2468779aec56e8d45ca685834eb16">delayed</a>=temp_roundf(img-><a class="code" href="structIMG.html#ae47ebbbdc0c308f473fec801a2df513d">randoms</a>[frame-1]); <a name="l01055"></a>01055 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l01056"></a>01056 image_header.<a class="code" href="structecat63__imageheader.html#ad9ae22f6f465f3872ad5dbc66f0a171b">image_min</a>=smin; image_header.<a class="code" href="structecat63__imageheader.html#a7020d45c4b35dd0c72ce4b87028ed9b9">image_max</a>=smax; <a name="l01057"></a>01057 image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>=1.0/scale; <a name="l01058"></a>01058 image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>=(int)temp_roundf(1000.*img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1]); <a name="l01059"></a>01059 image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>= <a name="l01060"></a>01060 (int)temp_roundf(1000.*(img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame-1]-img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame-1])); <a name="l01061"></a>01061 <span class="comment">/* Set decay correction factor */</span> <a name="l01062"></a>01062 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>) <a name="l01063"></a>01063 image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>=img-><a class="code" href="structIMG.html#abf0ad6e681d08c3248dbd9837afa9973">decayCorrFactor</a>[frame-1]; <a name="l01064"></a>01064 } <a name="l01065"></a>01065 <span class="comment">/* Write matrix data */</span> <a name="l01066"></a>01066 m=<a class="code" href="ecat63ml_8c.html#a7561756da60d9e38a1419da8ebf220fb">mat_numcod</a>(frame, img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[plane-1], 1, 0, 0); <a name="l01067"></a>01067 sptr=sdata; <a name="l01068"></a>01068 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">" writing matnum=%d\n"</span>, m); <a name="l01069"></a>01069 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l01070"></a>01070 <span class="comment">/*if(IMG_TEST) ecat63PrintScanheader(&scan_header);*/</span> <a name="l01071"></a>01071 ret=<a class="code" href="ecat63w_8c.html#a0ef3ec20d54221eb1730dd531724b378">ecat63WriteScan</a>(fp, m, &scan_header, sptr); <a name="l01072"></a>01072 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l01073"></a>01073 <span class="comment">/*if(IMG_TEST) ecat63PrintImageheader(&image_header);*/</span> <a name="l01074"></a>01074 ret=<a class="code" href="ecat63w_8c.html#ab7e9bf33b3225d1260ad04c44ce817ab">ecat63WriteImage</a>(fp, m, &image_header, sptr); <a name="l01075"></a>01075 } <a name="l01076"></a>01076 <span class="keywordflow">if</span>(ret) { <a name="l01077"></a>01077 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot write data on pl%02d fr%02d (%d)."</span>, <a name="l01078"></a>01078 plane, frame, ret); <a name="l01079"></a>01079 fclose(fp); <span class="keyword">remove</span>(fname); free(sdata); <a name="l01080"></a>01080 <span class="keywordflow">return</span>(9); <a name="l01081"></a>01081 } <a name="l01082"></a>01082 n++; <a name="l01083"></a>01083 } <span class="comment">/* next matrix */</span> <a name="l01084"></a>01084 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">" %d matrices written in %s\n"</span>, n, fname); <a name="l01085"></a>01085 <a name="l01086"></a>01086 <span class="comment">/* Free matrix memory */</span> <a name="l01087"></a>01087 free(sdata); <a name="l01088"></a>01088 <a name="l01089"></a>01089 <span class="comment">/* If matrices were added, set main header */</span> <a name="l01090"></a>01090 <span class="keywordflow">if</span>(add==1) { <a name="l01091"></a>01091 fflush(fp); <a name="l01092"></a>01092 <span class="comment">/* Read matrix list */</span> <a name="l01093"></a>01093 <a class="code" href="ecat63ml_8c.html#a2477fe69c32ce33b443b9c0eaedae423">ecat63InitMatlist</a>(&mlist); <a name="l01094"></a>01094 ret=<a class="code" href="ecat63ml_8c.html#a6cce9d0e541e82d56c9d162f16202179">ecat63ReadMatlist</a>(fp, &mlist); <a name="l01095"></a>01095 <span class="keywordflow">if</span>(ret) { <a name="l01096"></a>01096 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot read matrix list (%d)"</span>, ret); <a name="l01097"></a>01097 fclose(fp); <span class="keywordflow">return</span>(21); <a name="l01098"></a>01098 } <a name="l01099"></a>01099 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a><=0) { <a name="l01100"></a>01100 strcpy(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"matrix list is empty"</span>); fclose(fp); <span class="keywordflow">return</span>(21);} <a name="l01101"></a>01101 <span class="comment">/* Sort matrix list */</span> <a name="l01102"></a>01102 <span class="keywordflow">for</span>(i=0; i<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>-1; i++) <span class="keywordflow">for</span>(j=i+1; j<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; j++) { <a name="l01103"></a>01103 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>>mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>) { <a name="l01104"></a>01104 tmpMatdir=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i]; <a name="l01105"></a>01105 mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[i]=mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j]; mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[j]=tmpMatdir; <a name="l01106"></a>01106 } <a name="l01107"></a>01107 } <a name="l01108"></a>01108 <span class="comment">/* Calculate the number of planes and frames */</span> <a name="l01109"></a>01109 prev_plane=plane=-1; prev_frame=frame=-1; frameNr=planeNr=0; <a name="l01110"></a>01110 <span class="keywordflow">for</span>(m=0; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) { <a name="l01111"></a>01111 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l01112"></a>01112 plane=matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>; frame=matval.<a class="code" href="structMatval.html#a514081d81e26c20a377de4e945499446">frame</a>; <a name="l01113"></a>01113 <span class="keywordflow">if</span>(plane!=prev_plane) {frameNr=1; planeNr++;} <span class="keywordflow">else</span> {frameNr++;} <a name="l01114"></a>01114 prev_plane=plane; prev_frame=frame; <a name="l01115"></a>01115 } <span class="comment">/* next matrix */</span> <a name="l01116"></a>01116 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <a name="l01117"></a>01117 main_header.<a class="code" href="structecat63__mainheader.html#aec1a2e31ad9fa2e9d03220565bc3cfa0">num_planes</a>=planeNr; main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>=frameNr; <a name="l01118"></a>01118 <span class="comment">/* Write main header */</span> <a name="l01119"></a>01119 ret=<a class="code" href="ecat63w_8c.html#af7389948dcb81fe5984b5ece280e9267">ecat63WriteMainheader</a>(fp, &main_header); <a name="l01120"></a>01120 <span class="keywordflow">if</span>(ret) { <a name="l01121"></a>01121 sprintf(<a class="code" href="ecat63_8h.html#a1a4fc8f123b2ef83d928b63743aa49d9">ecat63errmsg</a>, <span class="stringliteral">"cannot write mainheader (%d)"</span>, ret); <a name="l01122"></a>01122 fclose(fp); <span class="keywordflow">return</span>(22); <a name="l01123"></a>01123 } <a name="l01124"></a>01124 } <a name="l01125"></a>01125 <a name="l01126"></a>01126 <span class="comment">/* Close file and free memory */</span> <a name="l01127"></a>01127 fclose(fp); <a name="l01128"></a>01128 <a name="l01129"></a>01129 <span class="keywordflow">return</span>(0); <a name="l01130"></a>01130 } <a name="l01131"></a>01131 <span class="comment">/*****************************************************************************/</span> <a name="l01132"></a>01132 <a name="l01133"></a>01133 <span class="comment">/*****************************************************************************/</span> <a name="l01140"></a><a class="code" href="imgfile_8h.html#a40e3f729d9bd35fdd7aaa4628071db33">01140</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#a40e3f729d9bd35fdd7aaa4628071db33">imgEcat63Supported</a>(<a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> *h) { <a name="l01141"></a>01141 <span class="keywordflow">if</span>(h==NULL) <span class="keywordflow">return</span>(0); <a name="l01142"></a>01142 <span class="keywordflow">if</span>(h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) <span class="keywordflow">return</span>(1); <a name="l01143"></a>01143 <span class="keywordflow">if</span>(h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) <span class="keywordflow">return</span>(1); <a name="l01144"></a>01144 <span class="keywordflow">if</span>(h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) <span class="keywordflow">return</span>(1); <a name="l01145"></a>01145 <span class="keywordflow">if</span>(h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) <span class="keywordflow">return</span>(1); <a name="l01146"></a>01146 <span class="keywordflow">return</span>(0); <a name="l01147"></a>01147 } <a name="l01148"></a>01148 <span class="comment">/*****************************************************************************/</span> <a name="l01149"></a>01149 <a name="l01150"></a>01150 <span class="comment">/*****************************************************************************/</span> <a name="l01157"></a><a class="code" href="imgfile_8h.html#ad140be5ae9976dfa2abbbe973517451d">01157</a> <span class="keywordtype">void</span> <a class="code" href="img__e63_8c.html#ad140be5ae9976dfa2abbbe973517451d">imgGetEcat63MHeader</a>(<a class="code" href="structIMG.html">IMG</a> *img, <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> *h) { <a name="l01158"></a>01158 <span class="keyword">struct </span>tm scanStart; <a name="l01159"></a>01159 <a name="l01160"></a>01160 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=h-><a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>; <span class="comment">/* again in subheaders*/</span> <a name="l01161"></a>01161 <span class="comment">/* For saving IMG data, only 2-byte VAX data types are allowed, so change it now */</span> <a name="l01162"></a>01162 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a>) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l01163"></a>01163 img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>=h-><a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>; <a name="l01164"></a>01164 strncpy(img-><a class="code" href="structIMG.html#ab8bcc846c896a26e5aac045b118fd5cf">radiopharmaceutical</a>, h-><a class="code" href="structecat63__mainheader.html#a51129743a09356f7b83e11fa0865d17d">radiopharmaceutical</a>, 32); <a name="l01165"></a>01165 img-><a class="code" href="structIMG.html#ac9c048a9dc8205b22518b05486d8030b">isotopeHalflife</a>=h-><a class="code" href="structecat63__mainheader.html#aa80e2c3fda2047135338e9525b48fb17">isotope_halflife</a>; <a name="l01166"></a>01166 { <a name="l01167"></a>01167 memset(&scanStart, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tm)); <a name="l01168"></a>01168 scanStart.tm_year=h-><a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>-1900; <a name="l01169"></a>01169 scanStart.tm_mon=h-><a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>-1; <a name="l01170"></a>01170 scanStart.tm_mday=h-><a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>; scanStart.tm_yday=0; <a name="l01171"></a>01171 scanStart.tm_hour=h-><a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>; <a name="l01172"></a>01172 scanStart.tm_min=h-><a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>; <a name="l01173"></a>01173 scanStart.tm_sec=h-><a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>; <a name="l01174"></a>01174 scanStart.tm_isdst=-1; <a name="l01175"></a>01175 img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>=mktime(&scanStart); <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>==-1) img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>=0; <a name="l01176"></a>01176 } <a name="l01177"></a>01177 img-><a class="code" href="structIMG.html#af1d9f4bd7d58988eb4aa9f660a244a64">axialFOV</a>=10.0*h-><a class="code" href="structecat63__mainheader.html#acfb971c6cfaffd74900fb23da894bef2">axial_fov</a>; <a name="l01178"></a>01178 img-><a class="code" href="structIMG.html#a4a03c16266c7e7dcd6858aca05e7599f">transaxialFOV</a>=10.0*h-><a class="code" href="structecat63__mainheader.html#a3545e9b7344313ca3f5c0e9f817d1fc4">transaxial_fov</a>; <a name="l01179"></a>01179 strncpy(img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>, h-><a class="code" href="structecat63__mainheader.html#ae42d92d4f2b85a68511f266f7cddfc8c">study_name</a>, MAX_STUDYNR_LEN); <a name="l01180"></a>01180 strncpy(img-><a class="code" href="structIMG.html#a29013e391052918bd5aa6974eeec811d">patientName</a>, h-><a class="code" href="structecat63__mainheader.html#a7c66591db9e9dd727d6707ea1051df88">patient_name</a>, 31); <a name="l01181"></a>01181 strncpy(img-><a class="code" href="structIMG.html#a7dc9c21dbaf6b609a32e54c708e089c1">patientID</a>, h-><a class="code" href="structecat63__mainheader.html#ac0ca7836b26f3bcc824110278ecb6508">patient_id</a>, 15); <a name="l01182"></a>01182 img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>=10.0*h-><a class="code" href="structecat63__mainheader.html#afa9b56b592ebcc6a0c8a499c7b74562a">plane_separation</a>; <a name="l01183"></a>01183 <span class="keywordflow">switch</span>(h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>) { <a name="l01184"></a>01184 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>: img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>; <span class="keywordflow">break</span>; <a name="l01185"></a>01185 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>: <a name="l01186"></a>01186 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>: <a name="l01187"></a>01187 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>: <a name="l01188"></a>01188 <span class="keywordflow">default</span>: img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l01189"></a>01189 } <a name="l01190"></a>01190 strncpy(img-><a class="code" href="structIMG.html#a3651200fbb19796a635502a7b7d2c2c3">studyDescription</a>, h-><a class="code" href="structecat63__mainheader.html#a6322ecb4779f20b48b19360b605127e7">study_description</a>, 32); <a name="l01191"></a>01191 strncpy(img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>, h-><a class="code" href="structecat63__mainheader.html#aeae1e01c587128f945503d87cb6d3ada">user_process_code</a>, 10); <a name="l01192"></a>01192 img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>[10]=(char)0; <a name="l01193"></a>01193 <span class="comment">/* If valid study number is found in user_process_code, then take it */</span> <a name="l01194"></a>01194 <span class="keywordflow">if</span>(!img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>[0] && studynr_validity_check(img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>)) <a name="l01195"></a>01195 strcpy(img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>, img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>); <a name="l01196"></a>01196 <span class="comment">/* Set calibration unit (this may have to be read from subheader later) */</span> <a name="l01197"></a>01197 <a class="code" href="imgunit_8c.html#a99853914e3480ab82c7163b0612e8b28">imgUnitFromEcat</a>(img, h-><a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>); <a name="l01198"></a>01198 } <a name="l01199"></a>01199 <span class="comment">/*****************************************************************************/</span> <a name="l01200"></a>01200 <a name="l01201"></a>01201 <span class="comment">/*****************************************************************************/</span> <a name="l01208"></a><a class="code" href="imgfile_8h.html#aea4f0eef296e7375e00c5695cfa2ecb3">01208</a> <span class="keywordtype">void</span> <a class="code" href="img__e63_8c.html#aea4f0eef296e7375e00c5695cfa2ecb3">imgSetEcat63MHeader</a>(<a class="code" href="structIMG.html">IMG</a> *img, <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> *h) { <a name="l01209"></a>01209 <span class="keyword">struct </span>tm *scanStart; <a name="l01210"></a>01210 <a name="l01211"></a>01211 h-><a class="code" href="structecat63__mainheader.html#a433a5fddd8c83644a9f081001815c6e6">sw_version</a>=2; <a name="l01212"></a>01212 h-><a class="code" href="structecat63__mainheader.html#aec1a2e31ad9fa2e9d03220565bc3cfa0">num_planes</a>=img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; <a name="l01213"></a>01213 h-><a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>; <a name="l01214"></a>01214 h-><a class="code" href="structecat63__mainheader.html#a5038021b6504d93e304931a95af64746">num_gates</a>=1; <a name="l01215"></a>01215 h-><a class="code" href="structecat63__mainheader.html#ad8cbcc286f61bd37eb2a6f196b88a4bb">num_bed_pos</a>=1; <a name="l01216"></a>01216 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>) h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>=<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>; <a name="l01217"></a>01217 <span class="keywordflow">else</span> h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>=<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>; <a name="l01218"></a>01218 h-><a class="code" href="structecat63__mainheader.html#a727d6abe8019b32f33965c76ca19a9ee">data_type</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l01219"></a>01219 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>>0) h-><a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>=img-><a class="code" href="structIMG.html#a7f83c746c35583a9fa323b94d7ea5fb5">scanner</a>; <a name="l01220"></a>01220 <span class="keywordflow">else</span> h-><a class="code" href="structecat63__mainheader.html#a90a0ac55f8a40ddcf53446ee30e2aa7a">system_type</a>=<a class="code" href="ecat63_8h.html#a4aad8bedf2b4765e35f5933a7c6b8558">ECAT63_SYSTEM_TYPE_DEFAULT</a>; <a name="l01221"></a>01221 h-><a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>=1.0; <a name="l01222"></a>01222 h-><a class="code" href="structecat63__mainheader.html#acfb971c6cfaffd74900fb23da894bef2">axial_fov</a>=img-><a class="code" href="structIMG.html#af1d9f4bd7d58988eb4aa9f660a244a64">axialFOV</a>/10.0; <a name="l01223"></a>01223 h-><a class="code" href="structecat63__mainheader.html#a3545e9b7344313ca3f5c0e9f817d1fc4">transaxial_fov</a>=img-><a class="code" href="structIMG.html#a4a03c16266c7e7dcd6858aca05e7599f">transaxialFOV</a>/10.0; <a name="l01224"></a>01224 h-><a class="code" href="structecat63__mainheader.html#afa9b56b592ebcc6a0c8a499c7b74562a">plane_separation</a>=img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>/10.0; <a name="l01225"></a>01225 h-><a class="code" href="structecat63__mainheader.html#ad8b7b38c78851f5724f8e2095d850271">calibration_units</a>=<a class="code" href="imgunit_8c.html#a0d8d16b27eaefdf56d32b5c4c51f3757">imgUnitToEcat6</a>(img); <a name="l01226"></a>01226 strncpy(h-><a class="code" href="structecat63__mainheader.html#a51129743a09356f7b83e11fa0865d17d">radiopharmaceutical</a>, img-><a class="code" href="structIMG.html#ab8bcc846c896a26e5aac045b118fd5cf">radiopharmaceutical</a>, 32); <a name="l01227"></a>01227 scanStart=localtime(&img-><a class="code" href="structIMG.html#a5db78f8b423fc42b80bba42e27c7b2c3">scanStart</a>); <a name="l01228"></a>01228 <span class="keywordflow">if</span>(scanStart!=NULL) { <a name="l01229"></a>01229 h-><a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>=scanStart->tm_year+1900; <a name="l01230"></a>01230 h-><a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>=scanStart->tm_mon+1; <a name="l01231"></a>01231 h-><a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>=scanStart->tm_mday; <a name="l01232"></a>01232 h-><a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>=scanStart->tm_hour; <a name="l01233"></a>01233 h-><a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>=scanStart->tm_min; <a name="l01234"></a>01234 h-><a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>=scanStart->tm_sec; <a name="l01235"></a>01235 } <span class="keywordflow">else</span> { <a name="l01236"></a>01236 h-><a class="code" href="structecat63__mainheader.html#ac50ce9695fe8b410dc42d611a9c3bff7">scan_start_year</a>=1900; <a name="l01237"></a>01237 h-><a class="code" href="structecat63__mainheader.html#accef159de133ceecb8712a22b9aaa261">scan_start_month</a>=1; <a name="l01238"></a>01238 h-><a class="code" href="structecat63__mainheader.html#a2d2676e349d9446fba65f1185b22b6c9">scan_start_day</a>=1; <a name="l01239"></a>01239 h-><a class="code" href="structecat63__mainheader.html#a1f67ed153d99b8f1e5edf24850312275">scan_start_hour</a>=0; <a name="l01240"></a>01240 h-><a class="code" href="structecat63__mainheader.html#a152db2ee622ee372c1a0691ef9eea5a5">scan_start_minute</a>=0; <a name="l01241"></a>01241 h-><a class="code" href="structecat63__mainheader.html#ae5de61076a9b1bfd13c22bea60c6b933">scan_start_second</a>=0; <a name="l01242"></a>01242 } <a name="l01243"></a>01243 h-><a class="code" href="structecat63__mainheader.html#aa80e2c3fda2047135338e9525b48fb17">isotope_halflife</a>=img-><a class="code" href="structIMG.html#ac9c048a9dc8205b22518b05486d8030b">isotopeHalflife</a>; <a name="l01244"></a>01244 strcpy(h-><a class="code" href="structecat63__mainheader.html#ad5e1bd9b72bdc5e5cc820bf25231bef5">isotope_code</a>, <a class="code" href="imgdecay_8c.html#a14db419685f526306032a84343eed72c">imgIsotope</a>(img)); <a name="l01245"></a>01245 strcpy(h-><a class="code" href="structecat63__mainheader.html#ae42d92d4f2b85a68511f266f7cddfc8c">study_name</a>, img-><a class="code" href="structIMG.html#ad76f79021c93175ec98839613ba4dcd2">studyNr</a>); <a name="l01246"></a>01246 strcpy(h-><a class="code" href="structecat63__mainheader.html#a7c66591db9e9dd727d6707ea1051df88">patient_name</a>, img-><a class="code" href="structIMG.html#a29013e391052918bd5aa6974eeec811d">patientName</a>); <a name="l01247"></a>01247 strcpy(h-><a class="code" href="structecat63__mainheader.html#ac0ca7836b26f3bcc824110278ecb6508">patient_id</a>, img-><a class="code" href="structIMG.html#a7dc9c21dbaf6b609a32e54c708e089c1">patientID</a>); <a name="l01248"></a>01248 strncpy(h-><a class="code" href="structecat63__mainheader.html#aeae1e01c587128f945503d87cb6d3ada">user_process_code</a>, img-><a class="code" href="structIMG.html#a7743f4bab187593657c7bd4b7e99fe32">userProcessCode</a>, 10); <a name="l01249"></a>01249 strncpy(h-><a class="code" href="structecat63__mainheader.html#a6322ecb4779f20b48b19360b605127e7">study_description</a>, img-><a class="code" href="structIMG.html#a3651200fbb19796a635502a7b7d2c2c3">studyDescription</a>, 32); <a name="l01250"></a>01250 } <a name="l01251"></a>01251 <span class="comment">/*****************************************************************************/</span> <a name="l01252"></a>01252 <a name="l01253"></a>01253 <span class="comment">/*****************************************************************************/</span> <a name="l01260"></a><a class="code" href="imgfile_8h.html#a341c3d4960e40e361078839075b096fa">01260</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#a341c3d4960e40e361078839075b096fa">imgGetEcat63Fileformat</a>(<a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> *h) { <a name="l01261"></a>01261 <span class="keywordtype">int</span> fileFormat=<a class="code" href="img_8h.html#a3aea8253aaffd2e73cf8641661f6a459">IMG_UNKNOWN</a>; <a name="l01262"></a>01262 <span class="keywordflow">switch</span>(h-><a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>) { <a name="l01263"></a>01263 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>: <a name="l01264"></a>01264 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>: <a name="l01265"></a>01265 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>: <a name="l01266"></a>01266 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>: <a name="l01267"></a>01267 fileFormat=<a class="code" href="img_8h.html#a7d502c1293f35b4392badbb9491ee95e">IMG_E63</a>; <span class="keywordflow">break</span>; <a name="l01268"></a>01268 <span class="keywordflow">default</span>: <a name="l01269"></a>01269 fileFormat=<a class="code" href="img_8h.html#a3aea8253aaffd2e73cf8641661f6a459">IMG_UNKNOWN</a>; <span class="keywordflow">break</span>; <a name="l01270"></a>01270 } <a name="l01271"></a>01271 <span class="keywordflow">return</span> fileFormat; <a name="l01272"></a>01272 } <a name="l01273"></a>01273 <span class="comment">/*****************************************************************************/</span> <a name="l01274"></a>01274 <a name="l01275"></a>01275 <span class="comment">/*****************************************************************************/</span> <a name="l01289"></a><a class="code" href="imgfile_8h.html#ad2488060702b34b8ba7269131304905d">01289</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#ad2488060702b34b8ba7269131304905d">imgReadEcat63Header</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <a class="code" href="structIMG.html">IMG</a> *img) { <a name="l01290"></a>01290 <span class="keywordtype">int</span> m, blkNr=0, ret=0; <a name="l01291"></a>01291 <span class="keywordtype">int</span> frameNr, planeNr, del_nr=0; <a name="l01292"></a>01292 FILE *fp; <a name="l01293"></a>01293 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l01294"></a>01294 <a class="code" href="structMATRIXLIST.html">MATRIXLIST</a> mlist; <a name="l01295"></a>01295 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l01296"></a>01296 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l01297"></a>01297 <a class="code" href="structecat63__attnheader.html">ECAT63_attnheader</a> attn_header; <a name="l01298"></a>01298 <a class="code" href="structecat63__normheader.html">ECAT63_normheader</a> norm_header; <a name="l01299"></a>01299 <a name="l01300"></a>01300 <a name="l01301"></a>01301 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"\nimgReadEcat63Header(%s, *img)\n"</span>, fname); <a name="l01302"></a>01302 <a name="l01303"></a>01303 <span class="comment">/* Check the arguments */</span> <a name="l01304"></a>01304 <span class="keywordflow">if</span>(img==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01305"></a>01305 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a7aeab2fb426b858c78ec515aaa8f0a67">IMG_STATUS_INITIALIZED</a>) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01306"></a>01306 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>); <a name="l01307"></a>01307 <span class="keywordflow">if</span>(fname==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01308"></a>01308 <a name="l01309"></a>01309 <span class="comment">/* Open the file */</span> <a name="l01310"></a>01310 <span class="keywordflow">if</span>((fp=fopen(fname, <span class="stringliteral">"rb"</span>)) == NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba9f298b5339db644dbc2b9dc01ef12006">STATUS_NOFILE</a>; <a name="l01311"></a>01311 <a name="l01312"></a>01312 <span class="comment">/* Read main header */</span> <a name="l01313"></a>01313 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63r_8c.html#af904c6b26259c4f280cdc18f92aeeae5">ecat63ReadMainheader</a>(fp, &main_header))) { <a name="l01314"></a>01314 fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafa1051360f88591f14aa0383d8087132">STATUS_NOMAINHEADER</a>;} <a name="l01315"></a>01315 <span class="comment">/* Check if file_type is supported */</span> <a name="l01316"></a>01316 <span class="keywordflow">if</span>(<a class="code" href="img__e63_8c.html#a40e3f729d9bd35fdd7aaa4628071db33">imgEcat63Supported</a>(&main_header)==0) {fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baef2b214bb9b6ccc009f27c76e81b3fef">STATUS_UNSUPPORTED</a>;} <a name="l01317"></a>01317 <span class="comment">/* Copy main header information into IMG; sets also img.type */</span> <a name="l01318"></a>01318 <a class="code" href="img__e63_8c.html#ad140be5ae9976dfa2abbbe973517451d">imgGetEcat63MHeader</a>(img, &main_header); <a name="l01319"></a>01319 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>7) printf(<span class="stringliteral">"img.type := %d\n"</span>, img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>); <a name="l01320"></a>01320 img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>=<a class="code" href="img__e63_8c.html#a341c3d4960e40e361078839075b096fa">imgGetEcat63Fileformat</a>(&main_header); <a name="l01321"></a>01321 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>7) printf(<span class="stringliteral">"img._fileFormat := %d\n"</span>, img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>); <a name="l01322"></a>01322 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>==<a class="code" href="img_8h.html#a3aea8253aaffd2e73cf8641661f6a459">IMG_UNKNOWN</a>) {fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baef2b214bb9b6ccc009f27c76e81b3fef">STATUS_UNSUPPORTED</a>;} <a name="l01323"></a>01323 <a name="l01324"></a>01324 <span class="comment">/* Read matrix list and nr and sort it */</span> <a name="l01325"></a>01325 <a class="code" href="ecat63ml_8c.html#a2477fe69c32ce33b443b9c0eaedae423">ecat63InitMatlist</a>(&mlist); <a name="l01326"></a>01326 ret=<a class="code" href="ecat63ml_8c.html#a6cce9d0e541e82d56c9d162f16202179">ecat63ReadMatlist</a>(fp, &mlist); <a name="l01327"></a>01327 <span class="keywordflow">if</span>(ret) {fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba5b6084734072653f2466e29481713c4b">STATUS_NOMATLIST</a>;} <a name="l01328"></a>01328 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a><=0) { <a name="l01329"></a>01329 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bae2d56db7d13d44bec04369ae30c44a6c">STATUS_INVALIDMATLIST</a>;} <a name="l01330"></a>01330 <span class="comment">/* Make sure that plane and frame numbers are continuous */</span> <a name="l01331"></a>01331 <a class="code" href="ecat63ml_8c.html#a39dccd7c874d89f8a84d57d86ce0e6b1">ecat63GatherMatlist</a>(&mlist, 1, 1, 1, 1); <a name="l01332"></a>01332 <a class="code" href="ecat63ml_8c.html#aa2765243cddea6955fe20e0a7d453b36">ecat63SortMatlistByPlane</a>(&mlist); <span class="comment">/* otherwise frameNr cannot be computed as below */</span> <a name="l01333"></a>01333 <span class="comment">/* Trim extra frames */</span> <a name="l01334"></a>01334 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>>0) <a name="l01335"></a>01335 del_nr=<a class="code" href="ecat63ml_8c.html#a9dc9509d99d809410fc5904410562856">ecat63DeleteLateFrames</a>(&mlist, main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>); <a name="l01336"></a>01336 <span class="comment">/* Get plane and frame numbers and check that volume is full */</span> <a name="l01337"></a>01337 ret=<a class="code" href="ecat63ml_8c.html#a231a6f12df0eeec69699a0d4f3aa4c42">ecat63GetPlaneAndFrameNr</a>(&mlist, &main_header, &planeNr, &frameNr); <a name="l01338"></a>01338 <span class="keywordflow">if</span>(ret) {<a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span> ret;} <a name="l01339"></a>01339 img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>=planeNr; <a name="l01340"></a>01340 img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>=frameNr; <a name="l01341"></a>01341 <span class="comment">/* Calculate and check the size of one data matrix */</span> <a name="l01342"></a>01342 ret=<a class="code" href="ecat63ml_8c.html#a8955edf44cdf0be247f73cbc7dd808c1">ecat63GetMatrixBlockSize</a>(&mlist, &blkNr); <a name="l01343"></a>01343 <span class="keywordflow">if</span>(ret) {<a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span> ret;} <a name="l01344"></a>01344 <a name="l01345"></a>01345 <span class="comment">/* Read one subheader */</span> <a name="l01346"></a>01346 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>5) printf(<span class="stringliteral">"main_header.file_type := %d\n"</span>, main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>); <a name="l01347"></a>01347 m=0; <a name="l01348"></a>01348 <span class="keywordflow">switch</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>) { <a name="l01349"></a>01349 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>: <a name="l01350"></a>01350 ret=<a class="code" href="ecat63r_8c.html#adc36293804c18dd15771c61500841b7c">ecat63ReadImageheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &image_header); <a name="l01351"></a>01351 <span class="keywordflow">break</span>; <a name="l01352"></a>01352 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>: <a name="l01353"></a>01353 ret=<a class="code" href="ecat63r_8c.html#a811c9c52c52f1c749ee6cb0f7a51f884">ecat63ReadScanheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &scan_header); <a name="l01354"></a>01354 <span class="keywordflow">break</span>; <a name="l01355"></a>01355 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>: <a name="l01356"></a>01356 ret=<a class="code" href="ecat63r_8c.html#ac9c08bd1e03ddc4f4a8c83a5ea198e05">ecat63ReadAttnheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &attn_header); <a name="l01357"></a>01357 <span class="keywordflow">break</span>; <a name="l01358"></a>01358 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>: <a name="l01359"></a>01359 ret=<a class="code" href="ecat63r_8c.html#a6a169297491f0f8a734247467cfb2b89">ecat63ReadNormheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &norm_header); <a name="l01360"></a>01360 <span class="keywordflow">break</span>; <a name="l01361"></a>01361 <span class="keywordflow">default</span>: ret=-1; <a name="l01362"></a>01362 } <a name="l01363"></a>01363 <span class="comment">/* Free locally allocated memory and close the file */</span> <a name="l01364"></a>01364 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <a name="l01365"></a>01365 <span class="comment">/* Check whether subheader was read */</span> <a name="l01366"></a>01366 <span class="keywordflow">if</span>(ret) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bae6ad5f97cf86fa7686fd12961e4ccdf4">STATUS_NOSUBHEADER</a>; <a name="l01367"></a>01367 <a name="l01368"></a>01368 <span class="comment">/* Get the following information in the subheader:</span> <a name="l01369"></a>01369 <span class="comment"> dimensions x, y and z; datatype;</span> <a name="l01370"></a>01370 <span class="comment"> image decay correction on/off, zoom, and pixel size;</span> <a name="l01371"></a>01371 <span class="comment"> sinogram sample distance.</span> <a name="l01372"></a>01372 <span class="comment"> */</span> <a name="l01373"></a>01373 <span class="keywordflow">switch</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>) { <a name="l01374"></a>01374 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>: <a name="l01375"></a>01375 img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>=image_header.<a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a>; img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>=image_header.<a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>; <a name="l01376"></a>01376 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a53ee896ca7a94425dcf45c51eaf0a1d3">unit</a><1) <a class="code" href="imgunit_8c.html#a99853914e3480ab82c7163b0612e8b28">imgUnitFromEcat</a>(img, image_header.<a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>); <a name="l01377"></a>01377 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=image_header.<a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>; <a name="l01378"></a>01378 img-><a class="code" href="structIMG.html#ab23da0c2295967727c6d33d0fbdc8c88">zoom</a>=image_header.<a class="code" href="structecat63__imageheader.html#a9a0fd8c173273797330c7c67effdffd6">recon_scale</a>; <a name="l01379"></a>01379 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>>1.0) img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=1; <a name="l01380"></a>01380 img-><a class="code" href="structIMG.html#a02cc239e917e7ebf85e34f21448ff080">sizex</a>=img-><a class="code" href="structIMG.html#a80b0609c63f33934bf6e6678c6121cb3">sizey</a>=10.*image_header.<a class="code" href="structecat63__imageheader.html#a749a7dfb6443194317be2260fc7b5b7b">pixel_size</a>; <a name="l01381"></a>01381 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a><10.*image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>) <a name="l01382"></a>01382 img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>=10.*image_header.<a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>; <a name="l01383"></a>01383 <span class="keywordflow">break</span>; <a name="l01384"></a>01384 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>: <a name="l01385"></a>01385 img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>=scan_header.<a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a>; img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>=scan_header.<a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>; <a name="l01386"></a>01386 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l01387"></a>01387 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=scan_header.<a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>; <a name="l01388"></a>01388 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l01389"></a>01389 img-><a class="code" href="structIMG.html#a399dae5b27dda8d5e1b0e96c885513e4">sampleDistance</a>=10.0*scan_header.<a class="code" href="structecat63__scanheader.html#acb676ed22b052fbaa07bd044263ac279">sample_distance</a>; <a name="l01390"></a>01390 <span class="keywordflow">break</span>; <a name="l01391"></a>01391 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>: <a name="l01392"></a>01392 img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>=attn_header.<a class="code" href="structecat63__attnheader.html#acbea9636493630fc7bdc3de4fcd4cfa2">dimension_1</a>; img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>=attn_header.<a class="code" href="structecat63__attnheader.html#af9fa1e4491aa3321b4ce99f54e5ebb6e">dimension_2</a>; <a name="l01393"></a>01393 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l01394"></a>01394 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l01395"></a>01395 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=attn_header.<a class="code" href="structecat63__attnheader.html#ac5bea9d6b3dae0b4c87d5e66a0d2006e">data_type</a>; <a name="l01396"></a>01396 <span class="keywordflow">break</span>; <a name="l01397"></a>01397 <span class="keywordflow">case</span> <a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>: <a name="l01398"></a>01398 img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>=norm_header.<a class="code" href="structecat63__normheader.html#a546d6d89d6df87d2de51c1588884d5b5">dimension_1</a>; img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>=norm_header.<a class="code" href="structecat63__normheader.html#aa49aa059f33fad5d960b044da8076fe7">dimension_2</a>; <a name="l01399"></a>01399 img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>=<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>; <a name="l01400"></a>01400 img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>=0; <a name="l01401"></a>01401 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=norm_header.<a class="code" href="structecat63__normheader.html#ae7d4136070d36e9edbe684a80e39b942">data_type</a>; <a name="l01402"></a>01402 <span class="keywordflow">break</span>; <a name="l01403"></a>01403 } <a name="l01404"></a>01404 <a name="l01405"></a>01405 <span class="comment">/* For saving IMG data, only 2-byte VAX data types are allowed, so change it now */</span> <a name="l01406"></a>01406 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a>) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l01407"></a>01407 <a name="l01408"></a>01408 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>); <a name="l01409"></a>01409 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>; <a name="l01410"></a>01410 } <a name="l01411"></a>01411 <span class="comment">/*****************************************************************************/</span> <a name="l01412"></a>01412 <a name="l01413"></a>01413 <span class="comment">/*****************************************************************************/</span> <a name="l01422"></a><a class="code" href="imgfile_8h.html#a80fc3a20b3c37740a6b47df9c6075380">01422</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#a80fc3a20b3c37740a6b47df9c6075380">imgReadEcat63FirstFrame</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <a class="code" href="structIMG.html">IMG</a> *img) { <a name="l01423"></a>01423 <span class="keywordtype">int</span> ret=0; <a name="l01424"></a>01424 <a name="l01425"></a>01425 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"\nimgReadEcat63FirstFrame(%s, *img)\n"</span>, fname); <a name="l01426"></a>01426 <span class="comment">/* Check the input */</span> <a name="l01427"></a>01427 <span class="keywordflow">if</span>(img==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01428"></a>01428 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a7aeab2fb426b858c78ec515aaa8f0a67">IMG_STATUS_INITIALIZED</a>) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01429"></a>01429 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>); <a name="l01430"></a>01430 <span class="keywordflow">if</span>(fname==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01431"></a>01431 <a name="l01432"></a>01432 <span class="comment">/* Read header information from file */</span> <a name="l01433"></a>01433 ret=<a class="code" href="img__e63_8c.html#ad2488060702b34b8ba7269131304905d">imgReadEcat63Header</a>(fname, img); <span class="keywordflow">if</span>(ret) <span class="keywordflow">return</span>(ret); <a name="l01434"></a>01434 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>3) <a class="code" href="img_8c.html#a32edd1b78039f6cc22b7bbe413aa3a56">imgInfo</a>(img); <a name="l01435"></a>01435 <a name="l01436"></a>01436 <span class="comment">/* Allocate memory for one frame */</span> <a name="l01437"></a>01437 img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>=1; <a name="l01438"></a>01438 ret=<a class="code" href="img_8c.html#a9b2670da9c7685e6d53058cdf1db1199">imgAllocate</a>(img, img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>, img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>, img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>, img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>); <a name="l01439"></a>01439 <span class="keywordflow">if</span>(ret) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafbe470f6663c748e405bf509d2bb57bb">STATUS_NOMEMORY</a>; <a name="l01440"></a>01440 <a name="l01441"></a>01441 <span class="comment">/* Read the first frame */</span> <a name="l01442"></a>01442 ret=<a class="code" href="img__e63_8c.html#af1d9d568d55cc463db9fb81f36b0f737">imgReadEcat63Frame</a>(fname, 1, img, 0); <span class="keywordflow">if</span>(ret) <span class="keywordflow">return</span>(ret); <a name="l01443"></a>01443 <a name="l01444"></a>01444 <span class="comment">/* All went well */</span> <a name="l01445"></a>01445 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>); <a name="l01446"></a>01446 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>; <a name="l01447"></a>01447 } <a name="l01448"></a>01448 <span class="comment">/*****************************************************************************/</span> <a name="l01449"></a>01449 <a name="l01450"></a>01450 <span class="comment">/*****************************************************************************/</span> <a name="l01464"></a><a class="code" href="imgfile_8h.html#af1d9d568d55cc463db9fb81f36b0f737">01464</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#af1d9d568d55cc463db9fb81f36b0f737">imgReadEcat63Frame</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <span class="keywordtype">int</span> frame_to_read, <a class="code" href="structIMG.html">IMG</a> *img, <span class="keywordtype">int</span> frame_index) { <a name="l01465"></a>01465 <span class="keywordtype">int</span> m, ret=0, blkNr=0, frame, plane, seqplane=-1, xi, yi; <a name="l01466"></a>01466 <span class="keywordtype">int</span> local_data_type=0; <a name="l01467"></a>01467 FILE *fp; <a name="l01468"></a>01468 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l01469"></a>01469 <a class="code" href="structMATRIXLIST.html">MATRIXLIST</a> mlist; <a name="l01470"></a>01470 <a class="code" href="structMatval.html">Matval</a> matval; <a name="l01471"></a>01471 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l01472"></a>01472 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l01473"></a>01473 <a class="code" href="structecat63__attnheader.html">ECAT63_attnheader</a> attn_header; <a name="l01474"></a>01474 <a class="code" href="structecat63__normheader.html">ECAT63_normheader</a> norm_header; <a name="l01475"></a>01475 <span class="keywordtype">float</span> scale=1.0; <a name="l01476"></a>01476 <span class="keywordtype">short</span> <span class="keywordtype">int</span> *sptr; <a name="l01477"></a>01477 <span class="keywordtype">char</span> *mdata=NULL, *mptr; <a name="l01478"></a>01478 <span class="keywordtype">int</span> *iptr; <a name="l01479"></a>01479 <a name="l01480"></a>01480 <a name="l01481"></a>01481 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"\nimgReadEcat63Frame(%s, %d, *img, %d)\n"</span>, <a name="l01482"></a>01482 fname, frame_to_read, frame_index); <a name="l01483"></a>01483 <a name="l01484"></a>01484 <span class="comment">/* Check the input */</span> <a name="l01485"></a>01485 <span class="keywordflow">if</span>(img==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01486"></a>01486 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a3117b1b0649d3761dcda1395202129e5">IMG_STATUS_OCCUPIED</a>) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01487"></a>01487 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>); <a name="l01488"></a>01488 <span class="keywordflow">if</span>(fname==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01489"></a>01489 <span class="keywordflow">if</span>(frame_index<0 || frame_index>img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>-1) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01490"></a>01490 <span class="keywordflow">if</span>(frame_to_read<1) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01491"></a>01491 <a name="l01492"></a>01492 <span class="comment">/* Open the file */</span> <a name="l01493"></a>01493 <span class="keywordflow">if</span>((fp=fopen(fname, <span class="stringliteral">"rb"</span>)) == NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba9f298b5339db644dbc2b9dc01ef12006">STATUS_NOFILE</a>; <a name="l01494"></a>01494 <a name="l01495"></a>01495 <span class="comment">/* Read main header */</span> <a name="l01496"></a>01496 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63r_8c.html#af904c6b26259c4f280cdc18f92aeeae5">ecat63ReadMainheader</a>(fp, &main_header))) { <a name="l01497"></a>01497 fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafa1051360f88591f14aa0383d8087132">STATUS_NOMAINHEADER</a>;} <a name="l01498"></a>01498 <a name="l01499"></a>01499 <span class="comment">/* Read matrix list and nr and sort it */</span> <a name="l01500"></a>01500 <a class="code" href="ecat63ml_8c.html#a2477fe69c32ce33b443b9c0eaedae423">ecat63InitMatlist</a>(&mlist); <a name="l01501"></a>01501 ret=<a class="code" href="ecat63ml_8c.html#a6cce9d0e541e82d56c9d162f16202179">ecat63ReadMatlist</a>(fp, &mlist); <a name="l01502"></a>01502 <span class="keywordflow">if</span>(ret) {fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba5b6084734072653f2466e29481713c4b">STATUS_NOMATLIST</a>;} <a name="l01503"></a>01503 <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a><=0) { <a name="l01504"></a>01504 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bae2d56db7d13d44bec04369ae30c44a6c">STATUS_INVALIDMATLIST</a>;} <a name="l01505"></a>01505 <span class="comment">/* Make sure that plane and frame numbers are continuous */</span> <a name="l01506"></a>01506 <a class="code" href="ecat63ml_8c.html#a39dccd7c874d89f8a84d57d86ce0e6b1">ecat63GatherMatlist</a>(&mlist, 1, 1, 1, 1); <a name="l01507"></a>01507 <a class="code" href="ecat63ml_8c.html#af88528086eaae0762fa9c551f3e55d92">ecat63SortMatlistByFrame</a>(&mlist); <a name="l01508"></a>01508 <a name="l01509"></a>01509 <span class="comment">/* Calculate and check the size of one data matrix */</span> <a name="l01510"></a>01510 ret=<a class="code" href="ecat63ml_8c.html#a8955edf44cdf0be247f73cbc7dd808c1">ecat63GetMatrixBlockSize</a>(&mlist, &blkNr); <a name="l01511"></a>01511 <span class="keywordflow">if</span>(ret) {<a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); fclose(fp); <span class="keywordflow">return</span> ret;} <a name="l01512"></a>01512 <span class="comment">/* And allocate memory for the raw data blocks */</span> <a name="l01513"></a>01513 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>6) printf(<span class="stringliteral">"allocating memory for %d blocks\n"</span>, blkNr); <a name="l01514"></a>01514 mdata=(<span class="keywordtype">char</span>*)malloc(blkNr*<a class="code" href="ecat63_8h.html#abdf75c7aade8a596594e8e7ce8b16872">MatBLKSIZE</a>); <a name="l01515"></a>01515 <span class="keywordflow">if</span>(mdata==NULL) {fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafbe470f6663c748e405bf509d2bb57bb">STATUS_NOMEMORY</a>;} <a name="l01516"></a>01516 <a name="l01517"></a>01517 <span class="comment">/* Read all matrices that belong to the required frame */</span> <a name="l01518"></a>01518 ret=0; seqplane=-1; <a name="l01519"></a>01519 <span class="keywordflow">for</span>(m=0; m<mlist.<a class="code" href="structMATRIXLIST.html#a7fcfb983a42851d8562084ddde1f9fcd">matrixNr</a>; m++) <span class="keywordflow">if</span>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#a9096ac571f3dabee56894b264552f65f">matstat</a>==1) { <a name="l01520"></a>01520 <span class="comment">/* get frame and plane */</span> <a name="l01521"></a>01521 <a class="code" href="ecat63ml_8c.html#af566384e63f743897f71d8ee41b3b292">mat_numdoc</a>(mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#aeb0291ec1f5ac237c1e587ed3d23b1bb">matnum</a>, &matval); <a name="l01522"></a>01522 plane=matval.<a class="code" href="structMatval.html#ac87d088d281d918936f987cd19148069">plane</a>; <a name="l01523"></a>01523 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>>=main_header.<a class="code" href="structecat63__mainheader.html#a5038021b6504d93e304931a95af64746">num_gates</a>) frame=matval.<a class="code" href="structMatval.html#a514081d81e26c20a377de4e945499446">frame</a>; <a name="l01524"></a>01524 <span class="keywordflow">else</span> frame=matval.<a class="code" href="structMatval.html#ab317865439d3423f362a3094dd65fc18">gate</a>; <span class="comment">/* printf("frame=%d plane=%d\n", frame, plane); */</span> <a name="l01525"></a>01525 <span class="keywordflow">if</span>(frame!=frame_to_read) <span class="keywordflow">continue</span>; <span class="comment">/* do not process other frames */</span> <a name="l01526"></a>01526 seqplane++; <a name="l01527"></a>01527 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[seqplane]<1) { <a name="l01528"></a>01528 img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[seqplane]=plane; <a name="l01529"></a>01529 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[seqplane]!=plane) { <a name="l01530"></a>01530 fclose(fp); <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); <a name="l01531"></a>01531 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bad6498890650ae8d01e69f43514eb4fed">STATUS_MISSINGMATRIX</a>; <a name="l01532"></a>01532 } <a name="l01533"></a>01533 <a name="l01534"></a>01534 <span class="comment">/* Read the subheader */</span> <a name="l01535"></a>01535 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>4) printf(<span class="stringliteral">"reading subheader for matrix %d,%d\n"</span>, frame, plane); <a name="l01536"></a>01536 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#aaf5f1adfda44941c4bf4de3e71219e4a">IMAGE_DATA</a>) { <a name="l01537"></a>01537 ret=<a class="code" href="ecat63r_8c.html#adc36293804c18dd15771c61500841b7c">ecat63ReadImageheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &image_header); <a name="l01538"></a>01538 scale=image_header.<a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>; <a name="l01539"></a>01539 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>>0.0 <a name="l01540"></a>01540 && fabs(main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>/image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>-1.0)>0.0001) <a name="l01541"></a>01541 scale*=image_header.<a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>; <a name="l01542"></a>01542 local_data_type=image_header.<a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>; <a name="l01543"></a>01543 img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]=image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>/1000.; <a name="l01544"></a>01544 img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame_index]=img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]+image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>/1000.; <a name="l01545"></a>01545 img-><a class="code" href="structIMG.html#af7c69142be89fac081e7f8bc354b14c8">mid</a>[frame_index]=0.5*(img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]+img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame_index]); <a name="l01546"></a>01546 <span class="keywordflow">if</span>(image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>>1.0) <a name="l01547"></a>01547 img-><a class="code" href="structIMG.html#abf0ad6e681d08c3248dbd9837afa9973">decayCorrFactor</a>[frame_index]=image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>; <a name="l01548"></a>01548 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a7140d943b6f40ad3c4bdab5a2073c2f6">RAW_DATA</a>) { <a name="l01549"></a>01549 ret=<a class="code" href="ecat63r_8c.html#a811c9c52c52f1c749ee6cb0f7a51f884">ecat63ReadScanheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &scan_header); <a name="l01550"></a>01550 scale=scan_header.<a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>; <a name="l01551"></a>01551 <span class="keywordflow">if</span>(scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>>0.0) scale*=scan_header.<a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>; <a name="l01552"></a>01552 local_data_type=scan_header.<a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>; <a name="l01553"></a>01553 img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]=scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>/1000.; <a name="l01554"></a>01554 img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame_index]=img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]+scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>/1000.; <a name="l01555"></a>01555 img-><a class="code" href="structIMG.html#af7c69142be89fac081e7f8bc354b14c8">mid</a>[frame_index]=0.5*(img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]+img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame_index]); <a name="l01556"></a>01556 img-><a class="code" href="structIMG.html#a399dae5b27dda8d5e1b0e96c885513e4">sampleDistance</a>=10.0*scan_header.<a class="code" href="structecat63__scanheader.html#acb676ed22b052fbaa07bd044263ac279">sample_distance</a>; <a name="l01557"></a>01557 img-><a class="code" href="structIMG.html#a76d63a001b8569d9f80ccb325e064be1">prompts</a>[frame_index]=(float)scan_header.<a class="code" href="structecat63__scanheader.html#a28b007d345ada719bb886fd7a2683d76">prompts</a>; <a name="l01558"></a>01558 img-><a class="code" href="structIMG.html#ae47ebbbdc0c308f473fec801a2df513d">randoms</a>[frame_index]=(<span class="keywordtype">float</span>)scan_header.<a class="code" href="structecat63__scanheader.html#ad0a2468779aec56e8d45ca685834eb16">delayed</a>; <a name="l01559"></a>01559 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a23271440af335f92b16c81abdff7818a">ATTN_DATA</a>) { <a name="l01560"></a>01560 ret=<a class="code" href="ecat63r_8c.html#ac9c08bd1e03ddc4f4a8c83a5ea198e05">ecat63ReadAttnheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &attn_header); <a name="l01561"></a>01561 scale=attn_header.<a class="code" href="structecat63__attnheader.html#a649891350c3b30214f43ca2d640a0e47">scale_factor</a>; <a name="l01562"></a>01562 local_data_type=attn_header.<a class="code" href="structecat63__attnheader.html#ac5bea9d6b3dae0b4c87d5e66a0d2006e">data_type</a>; <a name="l01563"></a>01563 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#aeb7fd4a6b107a810dcff5d82b6f58440">file_type</a>==<a class="code" href="ecat63_8h.html#a978e691d4d6416577705c5c654096e02">NORM_DATA</a>) { <a name="l01564"></a>01564 ret=<a class="code" href="ecat63r_8c.html#a6a169297491f0f8a734247467cfb2b89">ecat63ReadNormheader</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, &norm_header); <a name="l01565"></a>01565 scale=norm_header.<a class="code" href="structecat63__normheader.html#a914977ee68c14326a4551abae57fc9ab">scale_factor</a>; <a name="l01566"></a>01566 local_data_type=norm_header.<a class="code" href="structecat63__normheader.html#ae7d4136070d36e9edbe684a80e39b942">data_type</a>; <a name="l01567"></a>01567 } <span class="keywordflow">else</span> <a name="l01568"></a>01568 img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=-1; <a name="l01569"></a>01569 <span class="keywordflow">if</span>(ret) { <a name="l01570"></a>01570 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); fclose(fp); <a name="l01571"></a>01571 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bae6ad5f97cf86fa7686fd12961e4ccdf4">STATUS_NOSUBHEADER</a>; <a name="l01572"></a>01572 } <a name="l01573"></a>01573 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>>0.0) scale*=main_header.<a class="code" href="structecat63__mainheader.html#ab8dd149fc8b61f8ccd115799e419f7e1">calibration_factor</a>; <a name="l01574"></a>01574 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>6) printf(<span class="stringliteral">"scale=%e datatype=%d\n"</span>, scale, img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>); <a name="l01575"></a>01575 <span class="comment">/* Read the pixel data */</span> <a name="l01576"></a>01576 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>4) printf(<span class="stringliteral">"reading matrix data\n"</span>); <a name="l01577"></a>01577 ret=<a class="code" href="ecat63r_8c.html#a7f3456ddf0f774026d462df66bf1210b">ecat63ReadMatdata</a>(fp, mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>+1, <a name="l01578"></a>01578 mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#ad1781958d48d68431d0c3b630093994f">endblk</a>-mlist.<a class="code" href="structMATRIXLIST.html#a42676745379d69392b07b5c29626f6f9">matdir</a>[m].<a class="code" href="structMatDir.html#af91ca45aca86269901b03480b5b6d741">strtblk</a>, <a name="l01579"></a>01579 mdata, local_data_type); <a name="l01580"></a>01580 <span class="keywordflow">if</span>(ret) { <a name="l01581"></a>01581 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); free(mdata); fclose(fp); <a name="l01582"></a>01582 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bad6498890650ae8d01e69f43514eb4fed">STATUS_MISSINGMATRIX</a>; <a name="l01583"></a>01583 } <a name="l01584"></a>01584 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>4) printf(<span class="stringliteral">"converting matrix data to floats\n"</span>); <a name="l01585"></a>01585 <span class="keywordflow">if</span>(local_data_type==<a class="code" href="ecat63_8h.html#a8e1f9f0fd436e762641718456852ee80">BYTE_TYPE</a>) { <a name="l01586"></a>01586 <span class="keywordflow">for</span>(yi=0, mptr=mdata; yi<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; yi++) <a name="l01587"></a>01587 <span class="keywordflow">for</span>(xi=0; xi<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; xi++, mptr++) { <a name="l01588"></a>01588 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][yi][xi][frame_index]=scale*(float)(*mptr); <a name="l01589"></a>01589 } <a name="l01590"></a>01590 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(local_data_type==<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a> || local_data_type==<a class="code" href="ecat63_8h.html#aebd1500a1497c6489f1820442db218d2">SUN_I2</a>) { <a name="l01591"></a>01591 <span class="keywordflow">for</span>(yi=0, mptr=mdata; yi<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; yi++) <a name="l01592"></a>01592 <span class="keywordflow">for</span>(xi=0; xi<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; xi++, mptr+=2) { <a name="l01593"></a>01593 sptr=(<span class="keywordtype">short</span> <span class="keywordtype">int</span>*)mptr; <a name="l01594"></a>01594 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][yi][xi][frame_index]=scale*(float)(*sptr); <a name="l01595"></a>01595 } <a name="l01596"></a>01596 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(local_data_type==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || local_data_type==<a class="code" href="ecat63_8h.html#a105892e015b38ae62e69684acf6df31d">SUN_I4</a>) { <a name="l01597"></a>01597 <span class="keywordflow">for</span>(yi=0, mptr=mdata; yi<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; yi++) <a name="l01598"></a>01598 <span class="keywordflow">for</span>(xi=0; xi<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; xi++, mptr+=4) { <a name="l01599"></a>01599 iptr=(<span class="keywordtype">int</span>*)mptr; <a name="l01600"></a>01600 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][yi][xi][frame_index]=1.0; <span class="comment">/* scale*(float)(*iptr); */</span> <a name="l01601"></a>01601 } <a name="l01602"></a>01602 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(local_data_type==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a> || local_data_type==<a class="code" href="ecat63_8h.html#a6001c489ee0296a6dca313ee3bfe4412">IEEE_R4</a>) { <a name="l01603"></a>01603 <span class="keywordflow">for</span>(yi=0, mptr=mdata; yi<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; yi++) <a name="l01604"></a>01604 <span class="keywordflow">for</span>(xi=0; xi<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; xi++, mptr+=4) { <a name="l01605"></a>01605 memcpy(&img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][yi][xi][frame_index], mptr, 4); <a name="l01606"></a>01606 img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[seqplane][yi][xi][frame_index]*=scale; <a name="l01607"></a>01607 } <a name="l01608"></a>01608 } <a name="l01609"></a>01609 } <span class="comment">/* next matrix */</span> <a name="l01610"></a>01610 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>3) printf(<span class="stringliteral">"end of matrices.\n"</span>); <a name="l01611"></a>01611 <a name="l01612"></a>01612 free(mdata); <a name="l01613"></a>01613 <a class="code" href="ecat63ml_8c.html#a2d931d7e3d4e21159731b7c480c209b9">ecat63EmptyMatlist</a>(&mlist); <a name="l01614"></a>01614 fclose(fp); <a name="l01615"></a>01615 <a name="l01616"></a>01616 <span class="comment">/* seqplane is <0 only if this frame did not exist at all; return -1 */</span> <a name="l01617"></a>01617 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>4) printf(<span class="stringliteral">"last_seqplane := %d.\n"</span>, seqplane); <a name="l01618"></a>01618 <span class="keywordflow">if</span>(seqplane<0) {<a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55babe9c1bcf366cd905b79148ba91b34756">STATUS_NOMATRIX</a>); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55babe9c1bcf366cd905b79148ba91b34756">STATUS_NOMATRIX</a>;} <a name="l01619"></a>01619 <a name="l01620"></a>01620 <span class="comment">/* check that correct number of planes was read */</span> <a name="l01621"></a>01621 <span class="keywordflow">if</span>(seqplane+1 != img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>) { <a name="l01622"></a>01622 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bad6498890650ae8d01e69f43514eb4fed">STATUS_MISSINGMATRIX</a>); <a name="l01623"></a>01623 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bad6498890650ae8d01e69f43514eb4fed">STATUS_MISSINGMATRIX</a>; <a name="l01624"></a>01624 } <a name="l01625"></a>01625 <a name="l01626"></a>01626 <span class="comment">/* For saving IMG data, only 2-byte VAX data types are allowed, so change it now */</span> <a name="l01627"></a>01627 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a91402eabd36b6383a537f5ba993e1d13">VAX_I4</a> || img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>==<a class="code" href="ecat63_8h.html#a43d671e0f827418673872adcd63418c4">VAX_R4</a>) img-><a class="code" href="structIMG.html#a780bf2ffdee9e977a3a51febb7696701">_dataType</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l01628"></a>01628 <a name="l01629"></a>01629 <span class="comment">/* All went well */</span> <a name="l01630"></a>01630 <a class="code" href="img_8c.html#ad124d2d496934d677156cc8779a1e567">imgSetStatus</a>(img, <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>); <a name="l01631"></a>01631 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>; <a name="l01632"></a>01632 } <a name="l01633"></a>01633 <span class="comment">/*****************************************************************************/</span> <a name="l01634"></a>01634 <a name="l01635"></a>01635 <span class="comment">/*****************************************************************************/</span> <a name="l01656"></a><a class="code" href="imgfile_8h.html#a754e860541649ecc46986ba3d318e435">01656</a> <span class="keywordtype">int</span> <a class="code" href="img__e63_8c.html#a754e860541649ecc46986ba3d318e435">imgWriteEcat63Frame</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname, <span class="keywordtype">int</span> frame_to_write, <a class="code" href="structIMG.html">IMG</a> *img, <span class="keywordtype">int</span> frame_index) { <a name="l01657"></a>01657 <a class="code" href="structIMG.html">IMG</a> test_img; <a name="l01658"></a>01658 <span class="keywordtype">int</span> ret=0, pxlNr, zi, xi, yi, matrixId; <a name="l01659"></a>01659 <a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a> main_header; <a name="l01660"></a>01660 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> image_header; <a name="l01661"></a>01661 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> scan_header; <a name="l01662"></a>01662 <span class="keywordtype">void</span> *sub_header=NULL; <a name="l01663"></a>01663 FILE *fp; <a name="l01664"></a>01664 <span class="keywordtype">float</span> *fdata=NULL, *fptr; <a name="l01665"></a>01665 <a name="l01666"></a>01666 <a name="l01667"></a>01667 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>) printf(<span class="stringliteral">"\nimgWriteEcat63Frame(%s, %d, *img, %d)\n"</span>, <a name="l01668"></a>01668 fname, frame_to_write, frame_index); <a name="l01669"></a>01669 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>1) <a class="code" href="ecat63_8h.html#a31112b67a89269c5bed48d48ce2957ed">ECAT63_TEST</a>=<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>-1; <a name="l01670"></a>01670 <a name="l01671"></a>01671 <span class="comment">/*</span> <a name="l01672"></a>01672 <span class="comment"> * Check the input </span> <a name="l01673"></a>01673 <span class="comment"> */</span> <a name="l01674"></a>01674 <span class="keywordflow">if</span>(fname==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01675"></a>01675 <span class="keywordflow">if</span>(img==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01676"></a>01676 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5b8bdc61088df4a3c3f89c31895b14a4">status</a>!=<a class="code" href="img_8h.html#a3117b1b0649d3761dcda1395202129e5">IMG_STATUS_OCCUPIED</a>) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01677"></a>01677 <span class="keywordflow">if</span>(frame_to_write<0) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01678"></a>01678 <span class="keywordflow">if</span>(frame_index<0 || frame_index>=img-><a class="code" href="structIMG.html#a77605d4aa64b86294590c79e9a761b15">dimt</a>) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01679"></a>01679 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>!=<a class="code" href="img_8h.html#a7d502c1293f35b4392badbb9491ee95e">IMG_E63</a>) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>; <a name="l01680"></a>01680 <a name="l01681"></a>01681 <span class="comment">/* Initiate headers */</span> <a name="l01682"></a>01682 memset(&main_header, 0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__mainheader.html">ECAT63_mainheader</a>)); <a name="l01683"></a>01683 memset(&image_header,0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a>)); <a name="l01684"></a>01684 memset(&scan_header, 0, <span class="keyword">sizeof</span>(<a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a>)); <a name="l01685"></a>01685 <a class="code" href="img_8c.html#af95041292a0f9e4a82a10b49a074a95c">imgInit</a>(&test_img); <a name="l01686"></a>01686 <a name="l01687"></a>01687 <a name="l01688"></a>01688 <span class="comment">/*</span> <a name="l01689"></a>01689 <span class="comment"> * If file does not exist, then create it with new mainheader,</span> <a name="l01690"></a>01690 <span class="comment"> * and if it does exist, then read and check header information.</span> <a name="l01691"></a>01691 <span class="comment"> * Create or edit mainheader to contain correct frame nr. </span> <a name="l01692"></a>01692 <span class="comment"> * In any case, leave file pointer open for write. </span> <a name="l01693"></a>01693 <span class="comment"> */</span> <a name="l01694"></a>01694 <span class="keywordflow">if</span>(access(fname, 0) == -1) { <span class="comment">/* file does not exist*/</span> <a name="l01695"></a>01695 <a name="l01696"></a>01696 <span class="comment">/* Set main header */</span> <a name="l01697"></a>01697 <a class="code" href="img__e63_8c.html#aea4f0eef296e7375e00c5695cfa2ecb3">imgSetEcat63MHeader</a>(img, &main_header); <a name="l01698"></a>01698 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>2) { <a name="l01699"></a>01699 <a class="code" href="ecat63p_8c.html#a129d5f8c3d6135b9934cebc54d27bc47">ecat63PrintMainheader</a>(&main_header, stdout); <a name="l01700"></a>01700 } <a name="l01701"></a>01701 <span class="keywordflow">if</span>(frame_to_write==0) frame_to_write=1; <a name="l01702"></a>01702 main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>=frame_to_write; <a name="l01703"></a>01703 <a name="l01704"></a>01704 <span class="comment">/* Open file, write main header and initiate matrix list */</span> <a name="l01705"></a>01705 fp=<a class="code" href="ecat63w_8c.html#aa9545a4a59002bf59a77478977f479eb">ecat63Create</a>(fname, &main_header); <span class="keywordflow">if</span>(fp==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba89d8cfdc7190aa78887b412e66e292e4">STATUS_NOWRITEPERM</a>; <a name="l01706"></a>01706 <a name="l01707"></a>01707 } <span class="keywordflow">else</span> { <span class="comment">/* file exists*/</span> <a name="l01708"></a>01708 <a name="l01709"></a>01709 <span class="comment">/* Read header information for checking */</span> <a name="l01710"></a>01710 ret=<a class="code" href="img__e63_8c.html#ad2488060702b34b8ba7269131304905d">imgReadEcat63Header</a>(fname, &test_img); <span class="keywordflow">if</span>(ret!=0) <span class="keywordflow">return</span> ret; <a name="l01711"></a>01711 <span class="comment">/* Check that file format is the same */</span> <a name="l01712"></a>01712 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a>!=test_img.<a class="code" href="structIMG.html#a5e25c84c23270f974f1eb7c32a01bac7">_fileFormat</a> || img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>!=test_img.<a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>) <a name="l01713"></a>01713 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba8860e85936fb99f4d0f248a9ca7fd4f7">STATUS_WRONGFILETYPE</a>; <a name="l01714"></a>01714 <span class="comment">/* Check that matrix sizes are the same */</span> <a name="l01715"></a>01715 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>!=test_img.<a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a> || img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>!=test_img.<a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a> || <a name="l01716"></a>01716 img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>!=test_img.<a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>) <a name="l01717"></a>01717 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bae8ce9dbf165d2c5fdb9c4609c01d94e5">STATUS_VARMATSIZE</a>; <a name="l01718"></a>01718 <a class="code" href="img_8c.html#ada573d4b40da77be4455bb9fab9a3033">imgEmpty</a>(&test_img); <a name="l01719"></a>01719 <a name="l01720"></a>01720 <span class="comment">/* Open the file for read and write */</span> <a name="l01721"></a>01721 <span class="keywordflow">if</span>((fp=fopen(fname, <span class="stringliteral">"r+b"</span>))==NULL) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba89d8cfdc7190aa78887b412e66e292e4">STATUS_NOWRITEPERM</a>; <a name="l01722"></a>01722 <a name="l01723"></a>01723 <span class="comment">/* Read the mainheader, set new frame number, and write it back */</span> <a name="l01724"></a>01724 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63r_8c.html#af904c6b26259c4f280cdc18f92aeeae5">ecat63ReadMainheader</a>(fp, &main_header))!=0) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafa1051360f88591f14aa0383d8087132">STATUS_NOMAINHEADER</a>; <a name="l01725"></a>01725 <span class="keywordflow">if</span>(frame_to_write==0) frame_to_write=main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>+1; <a name="l01726"></a>01726 <span class="keywordflow">if</span>(main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a><frame_to_write) <a name="l01727"></a>01727 main_header.<a class="code" href="structecat63__mainheader.html#a01ad1f4be366fb3ad82da61022e9761c">num_frames</a>=frame_to_write; <a name="l01728"></a>01728 <span class="keywordflow">if</span>((ret=<a class="code" href="ecat63w_8c.html#af7389948dcb81fe5984b5ece280e9267">ecat63WriteMainheader</a>(fp, &main_header))!=0) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba89d8cfdc7190aa78887b412e66e292e4">STATUS_NOWRITEPERM</a>; <a name="l01729"></a>01729 <a name="l01730"></a>01730 } <a name="l01731"></a>01731 <span class="keywordflow">if</span>(<a class="code" href="img_8h.html#a0d66ed136e5992b7b00ce6f43bad1439">IMG_TEST</a>>2) { <a name="l01732"></a>01732 printf(<span class="stringliteral">"frame_to_write := %d\n"</span>, frame_to_write); <a name="l01733"></a>01733 } <a name="l01734"></a>01734 <a name="l01735"></a>01735 <span class="comment">/* Allocate memory for matrix float data */</span> <a name="l01736"></a>01736 pxlNr=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>*img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>*img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; <a name="l01737"></a>01737 fdata=(<span class="keywordtype">float</span>*)malloc(pxlNr*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)); <a name="l01738"></a>01738 <span class="keywordflow">if</span>(fdata==NULL) {fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55bafbe470f6663c748e405bf509d2bb57bb">STATUS_NOMEMORY</a>;} <a name="l01739"></a>01739 <a name="l01740"></a>01740 <span class="comment">/* Set matrix subheader */</span> <a name="l01741"></a>01741 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>) sub_header=(<span class="keywordtype">void</span>*)&scan_header; <a name="l01742"></a>01742 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#ae8b5bb16b84adcbcd2bba3e10a36d62d">IMG_TYPE_IMAGE</a>) sub_header=&image_header; <a name="l01743"></a>01743 <span class="keywordflow">else</span> {fclose(fp); <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55baf8f3d89c25483639f6cbce4f6b08c1f8">STATUS_FAULT</a>;} <a name="l01744"></a>01744 <a class="code" href="img__e63_8c.html#a5f01000b02cbb409121b4db0451d2303">imgSetEcat63SHeader</a>(img, sub_header); <a name="l01745"></a>01745 <a name="l01746"></a>01746 <span class="comment">/* Copy matrix pixel values to fdata */</span> <a name="l01747"></a>01747 fptr=fdata; <a name="l01748"></a>01748 <span class="keywordflow">for</span>(zi=0; zi<img-><a class="code" href="structIMG.html#a9c04780b47e6a627a2b700b76352c3fc">dimz</a>; zi++) <a name="l01749"></a>01749 <span class="keywordflow">for</span>(yi=0; yi<img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; yi++) <span class="keywordflow">for</span>(xi=0; xi<img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; xi++) <a name="l01750"></a>01750 *fptr++=img-><a class="code" href="structIMG.html#a43e2c98dc0728731601a76abd51bb935">m</a>[zi][yi][xi][frame_index]; <a name="l01751"></a>01751 <a name="l01752"></a>01752 <span class="comment">/* Write subheader and data, and set the rest of subheader contents */</span> <a name="l01753"></a>01753 fptr=fdata; ret=-1; <a name="l01754"></a>01754 <span class="keywordflow">for</span>(zi=0; zi<img->dimz; zi++, fptr+=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>*img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>) { <a name="l01755"></a>01755 <span class="comment">/* Create new matrix id (i.e. matnum) */</span> <a name="l01756"></a>01756 matrixId=<a class="code" href="ecat63ml_8c.html#a7561756da60d9e38a1419da8ebf220fb">mat_numcod</a>(frame_to_write, img-><a class="code" href="structIMG.html#a78e3164d578cf4a570e930dceb10fb51">planeNumber</a>[zi], 1, 0, 0); <a name="l01757"></a>01757 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>) { <a name="l01758"></a>01758 scan_header.<a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>= <a name="l01759"></a>01759 (int)temp_roundf(1000.*img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]); <a name="l01760"></a>01760 scan_header.<a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>= <a name="l01761"></a>01761 (int)temp_roundf(1000.*(img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame_index]-img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index])); <a name="l01762"></a>01762 scan_header.<a class="code" href="structecat63__scanheader.html#a28b007d345ada719bb886fd7a2683d76">prompts</a>=temp_roundf(img-><a class="code" href="structIMG.html#a76d63a001b8569d9f80ccb325e064be1">prompts</a>[frame_index]); <a name="l01763"></a>01763 scan_header.<a class="code" href="structecat63__scanheader.html#ad0a2468779aec56e8d45ca685834eb16">delayed</a>=temp_roundf(img-><a class="code" href="structIMG.html#ae47ebbbdc0c308f473fec801a2df513d">randoms</a>[frame_index]); <a name="l01764"></a>01764 ret=<a class="code" href="ecat63w_8c.html#a35a5f197ce098dfc1d91166962af59d2">ecat63WriteScanMatrix</a>(fp, matrixId, &scan_header, fptr); <a name="l01765"></a>01765 } <span class="keywordflow">else</span> { <a name="l01766"></a>01766 image_header.<a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>= <a name="l01767"></a>01767 (int)temp_roundf(1000.*img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index]); <a name="l01768"></a>01768 image_header.<a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>= <a name="l01769"></a>01769 (int)temp_roundf(1000.*(img-><a class="code" href="structIMG.html#aa2b629a51ca62bcafad0a66d32e1ca8b">end</a>[frame_index]-img-><a class="code" href="structIMG.html#a8ff22fc209b6f44ad14341c8644788d2">start</a>[frame_index])); <a name="l01770"></a>01770 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a6ce801dea67ec8224e8cfc9aebb8a909">decayCorrected</a>) <a name="l01771"></a>01771 image_header.<a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>=img-><a class="code" href="structIMG.html#abf0ad6e681d08c3248dbd9837afa9973">decayCorrFactor</a>[frame_index]; <a name="l01772"></a>01772 ret=<a class="code" href="ecat63w_8c.html#a904b20e0e7304bc40e2e562f73e1b6ae">ecat63WriteImageMatrix</a>(fp, matrixId, &image_header, fptr); <a name="l01773"></a>01773 } <a name="l01774"></a>01774 <span class="keywordflow">if</span>(ret!=0) <span class="keywordflow">break</span>; <a name="l01775"></a>01775 } <span class="comment">/* next plane*/</span> <a name="l01776"></a>01776 free(fdata); fclose(fp); <a name="l01777"></a>01777 <span class="keywordflow">if</span>(ret) <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba8500261907803b2afa1f761991a22679">STATUS_DISKFULL</a>; <a name="l01778"></a>01778 <a name="l01779"></a>01779 <span class="keywordflow">return</span> <a class="code" href="img_8h.html#a06fc87d81c62e9abb8790b6e5713c55ba7e4a42e3b6dd63708c64cf3db6f69566">STATUS_OK</a>; <a name="l01780"></a>01780 } <a name="l01781"></a>01781 <span class="comment">/*****************************************************************************/</span> <a name="l01782"></a>01782 <a name="l01783"></a>01783 <span class="comment">/*****************************************************************************/</span> <a name="l01790"></a><a class="code" href="imgfile_8h.html#a5f01000b02cbb409121b4db0451d2303">01790</a> <span class="keywordtype">void</span> <a class="code" href="img__e63_8c.html#a5f01000b02cbb409121b4db0451d2303">imgSetEcat63SHeader</a>(<a class="code" href="structIMG.html">IMG</a> *img, <span class="keywordtype">void</span> *h) { <a name="l01791"></a>01791 <a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a> *image_header; <a name="l01792"></a>01792 <a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a> *scan_header; <a name="l01793"></a>01793 <a name="l01794"></a>01794 <span class="keywordflow">if</span>(img-><a class="code" href="structIMG.html#a0d9199e1c3c4bd94d56eb30e421b309c">type</a>==<a class="code" href="img_8h.html#a04e835f7aec92fcc1d4ecf37e0dd2e9c">IMG_TYPE_RAW</a>) { <a name="l01795"></a>01795 scan_header=(<a class="code" href="structecat63__scanheader.html">ECAT63_scanheader</a>*)h; <a name="l01796"></a>01796 scan_header-><a class="code" href="structecat63__scanheader.html#ad1ee12caf8404e9237c9b14d95711109">data_type</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l01797"></a>01797 scan_header-><a class="code" href="structecat63__scanheader.html#adee5ad20def49d6f13da7efde9da4e3e">dimension_1</a>=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; <a name="l01798"></a>01798 scan_header-><a class="code" href="structecat63__scanheader.html#a87c12560397fa7408d95ad30d1800f92">dimension_2</a>=img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; <a name="l01799"></a>01799 scan_header-><a class="code" href="structecat63__scanheader.html#aaf23846f5c3ee43188d49fac0f592498">frame_duration_sec</a>=1; <a name="l01800"></a>01800 scan_header-><a class="code" href="structecat63__scanheader.html#acfabab41eaa593a0625a43057bd9b558">scale_factor</a>=1.0; <a name="l01801"></a>01801 scan_header-><a class="code" href="structecat63__scanheader.html#aa7214f91108a9d7a5bec6f0edbe3493d">frame_start_time</a>=0; <a name="l01802"></a>01802 scan_header-><a class="code" href="structecat63__scanheader.html#a253426410960e4047acfb591c24e179b">frame_duration</a>=1000; <a name="l01803"></a>01803 scan_header-><a class="code" href="structecat63__scanheader.html#a3077aca1fa9f9b64c57f4b6eb19780fb">loss_correction_fctr</a>=1.0; <a name="l01804"></a>01804 } <span class="keywordflow">else</span> { <a name="l01805"></a>01805 image_header=(<a class="code" href="structecat63__imageheader.html">ECAT63_imageheader</a>*)h; <a name="l01806"></a>01806 image_header-><a class="code" href="structecat63__imageheader.html#a00da8baaaefa0ca83e0c12636b298196">data_type</a>=<a class="code" href="ecat63_8h.html#ab6ed0aaf03f063c606604089878ed91a">VAX_I2</a>; <a name="l01807"></a>01807 image_header-><a class="code" href="structecat63__imageheader.html#a417f483d23efabd675ed72cdd4bbdb98">num_dimensions</a>=2; <a name="l01808"></a>01808 image_header-><a class="code" href="structecat63__imageheader.html#a86aae28e4de4b65fa5de745aab0bf082">dimension_1</a>=img-><a class="code" href="structIMG.html#a0818b82059710627a94282a793ff7030">dimx</a>; <a name="l01809"></a>01809 image_header-><a class="code" href="structecat63__imageheader.html#ad53dbc60f5f5a34b7327abbf0d609d5d">dimension_2</a>=img-><a class="code" href="structIMG.html#aa17e87812503d3c142f31c08abcbf79d">dimy</a>; <a name="l01810"></a>01810 image_header-><a class="code" href="structecat63__imageheader.html#a9a0fd8c173273797330c7c67effdffd6">recon_scale</a>=img-><a class="code" href="structIMG.html#ab23da0c2295967727c6d33d0fbdc8c88">zoom</a>; <a name="l01811"></a>01811 image_header-><a class="code" href="structecat63__imageheader.html#ac4ff92a4d0a9b55e3647bfb45af9d381">quant_scale</a>=1.0; <a name="l01812"></a>01812 image_header-><a class="code" href="structecat63__imageheader.html#ac2b4f461866cfcbe8bf33939d461becc">slice_width</a>=img-><a class="code" href="structIMG.html#afc2a1d2417a8a3afe2c500173a05c472">sizez</a>/10.; <a name="l01813"></a>01813 image_header-><a class="code" href="structecat63__imageheader.html#a749a7dfb6443194317be2260fc7b5b7b">pixel_size</a>=img-><a class="code" href="structIMG.html#a02cc239e917e7ebf85e34f21448ff080">sizex</a>/10.; <a name="l01814"></a>01814 image_header-><a class="code" href="structecat63__imageheader.html#a14bdbc2c5ce62d9ed0c57514b02f8f0e">frame_start_time</a>=0; <a name="l01815"></a>01815 image_header-><a class="code" href="structecat63__imageheader.html#ae4fba67f8fb4e7f72f4d74b215b39058">frame_duration</a>=1000; <a name="l01816"></a>01816 image_header-><a class="code" href="structecat63__imageheader.html#a7c53b9df3c138cf5b9d5b2986d003377">plane_eff_corr_fctr</a>=1.0; <a name="l01817"></a>01817 image_header-><a class="code" href="structecat63__imageheader.html#a46ec10bffd9ad4bd54271b68022bd41c">decay_corr_fctr</a>=1.0; <a name="l01818"></a>01818 image_header-><a class="code" href="structecat63__imageheader.html#ab7fe2e08a8afa0b40c4fb9cf5a434ac1">loss_corr_fctr</a>=1.0; <a name="l01819"></a>01819 image_header-><a class="code" href="structecat63__imageheader.html#aa50b6a76225241de1056e26de450fb1c">ecat_calibration_fctr</a>=1.0; <a name="l01820"></a>01820 image_header-><a class="code" href="structecat63__imageheader.html#a6338eb4b7fdcb624ac0673260d16db42">well_counter_cal_fctr</a>=1.0; <a name="l01821"></a>01821 image_header-><a class="code" href="structecat63__imageheader.html#a38136ac931d35627e8644ccc71d97aec">quant_units</a>=<a class="code" href="imgunit_8c.html#a0d8d16b27eaefdf56d32b5c4c51f3757">imgUnitToEcat6</a>(img); <a name="l01822"></a>01822 } <a name="l01823"></a>01823 } <a name="l01824"></a>01824 <span class="comment">/*****************************************************************************/</span> <a name="l01825"></a>01825 <a name="l01826"></a>01826 <span class="comment">/*****************************************************************************/</span> </pre></div></div> </div> <hr class="footer"/><address class="footer"><small>Generated on Mon Aug 8 2011 by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address> </body> </html>