Mercurial > hg > minc-tools
changeset 2258:810a4ddebbd8
Add ability to save DTI parameters using Jennifer Campbell's convention
author | bert <bert> |
---|---|
date | Sun, 09 Apr 2006 15:34:32 +0000 |
parents | 041c08babe8d |
children | 915eb0cdc0df |
files | conversion/dcm2mnc/minc_file.c |
diffstat | 1 files changed, 63 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/conversion/dcm2mnc/minc_file.c +++ b/conversion/dcm2mnc/minc_file.c @@ -7,7 +7,10 @@ @CREATED : January 28, 1997 (Peter Neelin) @MODIFIED : * $Log: minc_file.c,v $ - * Revision 1.11 2005-11-04 22:26:16 bert + * Revision 1.12 2006-04-09 15:34:32 bert + * Add ability to save DTI parameters using Jennifer Campbell's convention + * + * Revision 1.11 2005/11/04 22:26:16 bert * Combined cloned code into a single check_regular() function * * Revision 1.10 2005/08/26 21:25:54 bert @@ -128,7 +131,7 @@ software for any purpose. It is provided "as is" without express or implied warranty. ---------------------------------------------------------------------------- */ -static const char rcsid[] = "$Header: /private-cvsroot/minc/conversion/dcm2mnc/minc_file.c,v 1.11 2005-11-04 22:26:16 bert Exp $"; +static const char rcsid[] = "$Header: /private-cvsroot/minc/conversion/dcm2mnc/minc_file.c,v 1.12 2006-04-09 15:34:32 bert Exp $"; #include "dcm2mnc.h" @@ -918,6 +921,19 @@ miattputstr(mincid, varid, "MrProt_dump", general_info->acq.MrProt); + + /* Add DTI stuff if needed */ + if (general_info->acq.dti) { + int length = general_info->cur_size[TIME]; + + double *tmp_ptr = calloc(length, sizeof(double)); + + ncattput(mincid, varid, "bvalues", NC_DOUBLE, length, tmp_ptr); + ncattput(mincid, varid, "direction_x", NC_DOUBLE, length, tmp_ptr); + ncattput(mincid, varid, "direction_y", NC_DOUBLE, length, tmp_ptr); + ncattput(mincid, varid, "direction_z", NC_DOUBLE, length, tmp_ptr); + } + /* Create the dicom info variable */ varid = ncvardef(mincid, "dicominfo", NC_LONG, 0, NULL); miattputstr(mincid, varid, MIvartype, MI_GROUP); @@ -981,6 +997,21 @@ return; } +/* Insert a scalar 'value' at 'position' along the given vector attribute + * of preallocated 'length'. + */ +void +put_att_dbl(int mincid, int varid, char *attname, int length, int position, + double value) +{ + double *val_ptr = malloc(sizeof(double) * length); + if (val_ptr != NULL) { + ncattget(mincid, varid, attname, val_ptr); + val_ptr[position] = value; + ncattput(mincid, varid, attname, NC_DOUBLE, length, val_ptr); + } +} + /* ----------------------------- MNI Header ----------------------------------- @NAME : save_minc_image @INPUT : icvid @@ -1057,6 +1088,36 @@ &start[gi_ptr->image_index[TIME]], NC_DOUBLE, NULL, &fi_ptr->coordinate[TIME]); + if (gi_ptr->acq.dti) { + put_att_dbl(mincid, + ncvarid(mincid, MIacquisition), + "bvalues", + gi_ptr->cur_size[TIME], + start[gi_ptr->image_index[TIME]], + fi_ptr->b_value); + + put_att_dbl(mincid, + ncvarid(mincid, MIacquisition), + "direction_x", + gi_ptr->cur_size[TIME], + start[gi_ptr->image_index[TIME]], + fi_ptr->grad_direction[XCOORD]); + + put_att_dbl(mincid, + ncvarid(mincid, MIacquisition), + "direction_y", + gi_ptr->cur_size[TIME], + start[gi_ptr->image_index[TIME]], + fi_ptr->grad_direction[YCOORD]); + + put_att_dbl(mincid, + ncvarid(mincid, MIacquisition), + "direction_z", + gi_ptr->cur_size[TIME], + start[gi_ptr->image_index[TIME]], + fi_ptr->grad_direction[ZCOORD]); + } + /* If width information is present, save it to the appropriate * location in the time-width variable. */