35
35
#include " timer.h"
36
36
#include " utils.h" // strcpyalloc
37
37
38
+ #define TAG_CMDLINE_LEN 1024
39
+
38
40
/*
39
41
*
40
42
*/
@@ -651,6 +653,7 @@ MRIS *mrisReadGIFTIdanum(const char *fname, MRIS *mris, int daNum, MRI *outmri,
651
653
vgvalid++;
652
654
}
653
655
656
+ // we got all 18 values
654
657
if (vgvalid == 18 ) {
655
658
mris->vg .valid = 1 ; // finally we can say its valid data
656
659
}
@@ -669,6 +672,50 @@ MRIS *mrisReadGIFTIdanum(const char *fname, MRIS *mris, int daNum, MRI *outmri,
669
672
}
670
673
}
671
674
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
+
672
719
/* Copy in the vertices. */
673
720
int vertex_index;
674
721
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)
2194
2241
gifti_add_to_meta (&coords->meta , " SurfaceCenterZ" , stmp, 1 );
2195
2242
}
2196
2243
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
+
2197
2271
return NO_ERROR;
2198
2272
} // end of MRISwriteGIFTISurface()
2199
2273
0 commit comments