Skip to content

Commit eaf340a

Browse files
committed
mris_convert/gifit.cpp
- gifti.cpp: read/write TAG_GROUP_AVG_SURFACE_AREA/TAG_CMDLINE metadata - mris_convert: call MRISaddCommandLine() to save the command line with surface file
1 parent a13677c commit eaf340a

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

mris_convert/mris_convert.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ main(int argc, char *argv[])
164164
FILE *fp=NULL;
165165
char *in2_fname=NULL;
166166

167+
std::string cmdline = getAllInfo(argc, argv, "mris_convert");
168+
167169
nargs = handleVersionOption(argc, argv, "mris_convert");
168170
if (nargs && argc - nargs == 1)
169171
{
@@ -330,6 +332,8 @@ main(int argc, char *argv[])
330332
mris->ncmds = 0;
331333
}
332334

335+
MRISaddCommandLine(mris, cmdline);
336+
333337
if(cras_add){
334338
printf("Adding scanner CRAS to surface xyz\n");
335339
MRISshiftCRAS(mris, 1);

utils/gifti.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
#include "timer.h"
3636
#include "utils.h" // strcpyalloc
3737

38+
#define TAG_CMDLINE_LEN 1024
39+
3840
/*
3941
*
4042
*/
@@ -651,6 +653,7 @@ MRIS *mrisReadGIFTIdanum(const char *fname, MRIS *mris, int daNum, MRI *outmri,
651653
vgvalid++;
652654
}
653655

656+
// we got all 18 values
654657
if (vgvalid == 18) {
655658
mris->vg.valid = 1; // finally we can say its valid data
656659
}
@@ -669,6 +672,50 @@ MRIS *mrisReadGIFTIdanum(const char *fname, MRIS *mris, int daNum, MRI *outmri,
669672
}
670673
}
671674

675+
/* retrieve TAG_GROUP_AVG_SURFACE_AREA info */
676+
{
677+
char *group_avg_surface_area = gifti_get_meta_value(&coords->meta, "TAG_GROUP_AVG_SURFACE_AREA");
678+
if (group_avg_surface_area)
679+
sscanf(group_avg_surface_area, "%f", &mris->group_avg_surface_area);
680+
}
681+
682+
/* retrieve TAG_CMDLINE info */
683+
{
684+
char *ncmds = gifti_get_meta_value(&coords->meta, "NUM_TAG_CMDLINE");
685+
if (ncmds)
686+
sscanf(ncmds, "%d", &mris->ncmds);
687+
688+
int numcmds = mris->ncmds;
689+
if (mris->ncmds > MAX_CMDS)
690+
{
691+
printf("[WARN] mrisReadGIFTIdanum(): too many commands (%d) in file. Only last %d will be saved!\n", mris->ncmds, MAX_CMDS);
692+
mris->ncmds = MAX_CMDS;
693+
}
694+
695+
int toskip = (numcmds > MAX_CMDS) ? (numcmds - MAX_CMDS) : 0;
696+
while (toskip)
697+
gifti_get_meta_value(&coords->meta, "TAG_CMDLINE");
698+
699+
for (int ncmd = 0; ncmd < mris->ncmds; ncmd++)
700+
{
701+
char tag[20] = {'\0'};
702+
sprintf(tag, "%s#%d", "TAG_CMDLINE", ncmd);
703+
704+
char *cmdline = gifti_get_meta_value(&coords->meta, tag);
705+
if (!cmdline)
706+
{
707+
printf("[ERROR] TAG_CMDLINE out of sync\n");
708+
break;
709+
}
710+
711+
mris->cmdlines[ncmd] = (char *)calloc(TAG_CMDLINE_LEN + 1, sizeof(char));
712+
if (mris->cmdlines[ncmd] == NULL)
713+
ErrorExit(ERROR_NOMEMORY, "mrisReadGIFTIdanum(): could not allocate %d byte cmdline", TAG_CMDLINE_LEN);
714+
//mris->cmdlines[ncmd][TAG_CMDLINE_LEN] = 0;
715+
memcpy(mris->cmdlines[ncmd], cmdline, TAG_CMDLINE_LEN);
716+
}
717+
}
718+
672719
/* Copy in the vertices. */
673720
int vertex_index;
674721
for (vertex_index = 0; vertex_index < num_vertices; vertex_index++) {
@@ -2194,6 +2241,33 @@ int MRISwriteGIFTISurface(MRIS *mris, gifti_image *image, const char *out_fname)
21942241
gifti_add_to_meta(&coords->meta, "SurfaceCenterZ", stmp, 1);
21952242
}
21962243

2244+
// group avg surface area, TAG_GROUP_AVG_SURFACE_AREA
2245+
if (!FZERO(mris->group_avg_surface_area))
2246+
{
2247+
char group_avg_surface_area[100] = {'\0'};
2248+
2249+
sprintf(group_avg_surface_area, "%.20f", mris->group_avg_surface_area);
2250+
gifti_add_to_meta(&coords->meta, "TAG_GROUP_AVG_SURFACE_AREA", group_avg_surface_area, 1);
2251+
}
2252+
2253+
// TAG_CMDLINE
2254+
if (mris->ncmds > 0)
2255+
{
2256+
char ncmds[20] = {'\0'};
2257+
sprintf(ncmds, "%d", mris->ncmds);
2258+
gifti_add_to_meta(&coords->meta, "NUM_TAG_CMDLINE", ncmds, 1);
2259+
2260+
for (int ncmd = 0; ncmd < mris->ncmds; ncmd++)
2261+
{
2262+
char cmdline[TAG_CMDLINE_LEN] = {'\0'};
2263+
snprintf(cmdline, sizeof(cmdline), "%s", mris->cmdlines[ncmd]);
2264+
2265+
char tag[20] = {'\0'};
2266+
sprintf(tag, "%s#%d", "TAG_CMDLINE", ncmd);
2267+
gifti_add_to_meta(&coords->meta, tag, cmdline, 1);
2268+
}
2269+
}
2270+
21972271
return NO_ERROR;
21982272
} // end of MRISwriteGIFTISurface()
21992273

0 commit comments

Comments
 (0)