@@ -46,8 +46,9 @@ MRISurfOverlay::MRISurfOverlay(MRIS *mris, int noverlay, OverlayInfoStruct *pove
46
46
#endif
47
47
}
48
48
49
- // Can't handle multi overlay in one input file
50
- std::vector<int > shape{__nVertices, 1 , 1 , __noverlay};
49
+ // handle multi overlay in one input file
50
+ __nframes = __getFrameCount ();
51
+ std::vector<int > shape{__nVertices, 1 , 1 , __nframes};
51
52
__overlaymri = new MRI (shape, MRI_FLOAT);
52
53
__currFrame = 0 ;
53
54
}
@@ -125,7 +126,10 @@ int MRISurfOverlay::__readOneOverlay(int nthOverlay, int read_volume, MRIS *mris
125
126
}
126
127
127
128
// check if we support the file format
128
- int overlayFormat = getFileFormat (__overlayInfo[nthOverlay].__foverlay );
129
+ int overlayFormat = __overlayInfo[__currFrame].__format ;
130
+ if (overlayFormat == MRI_VOLUME_TYPE_UNKNOWN)
131
+ overlayFormat = getFileFormat (__overlayInfo[nthOverlay].__foverlay );
132
+
129
133
if (overlayFormat == MRI_VOLUME_TYPE_UNKNOWN)
130
134
{
131
135
printf (" ERROR MRISurfOverlay::read() - unsupported overlay input type\n " );
@@ -153,25 +157,24 @@ int MRISurfOverlay::__readOneOverlay(int nthOverlay, int read_volume, MRIS *mris
153
157
return ERROR_BADFILE;
154
158
}
155
159
160
+ __overlayInfo[__currOverlay].__numframe = 1 ;
156
161
if (tempMRI->nframes > 1 )
157
162
{
158
- printf (" [ERROR] MRISurfOverlay::readOneOverlay() - %s has multiple frames = %d.\n " , __overlayInfo[nthOverlay].__foverlay , tempMRI->nframes );
159
- return ERROR_BADFILE;
160
- // Can't handle it now, just return error
161
- // __overlayInfo[__currOverlay].__numframe = tempMRI->nframes;
162
- // printf("[INFO] MRISurfOverlay::readOneOverlay() - Each frame will be treated as one overlay.\n");
163
- // __noverlay = tempMRI->nframes;
164
- }
163
+ printf (" [INFO] MRISurfOverlay::readOneOverlay() - %s has multiple frames = %d.\n " , __overlayInfo[nthOverlay].__foverlay , tempMRI->nframes );
165
164
166
- __overlayInfo[__currOverlay].__numframe = 1 ;
165
+ printf (" [INFO] MRISurfOverlay::readOneOverlay() - Each frame will be treated as one overlay.\n " );
166
+ __overlayInfo[__currOverlay].__numframe = tempMRI->nframes ;
167
+ }
167
168
168
- // copy the data to __currFrame
169
- for (int f = 0 ; f < __overlaymri->nframes ; f++) {
169
+ // copy the data to MRI frames
170
+ int stframe = __overlayInfo[__currOverlay].__stframe ;
171
+ int endframe = __overlayInfo[__currOverlay].__stframe + __overlayInfo[__currOverlay].__numframe ;
172
+ for (int f = stframe; f < endframe; f++) {
170
173
for (int s = 0 ; s < __overlaymri->depth ; s++) {
171
174
for (int r = 0 ; r < __overlaymri->height ; r++) {
172
175
for (int c = 0 ; c < __overlaymri->width ; c++) {
173
- float fval = MRIgetVoxVal (tempMRI, c, r, s, 0 );
174
- MRIsetVoxVal (__overlaymri, c, r, s, __currFrame , fval);
176
+ float fval = MRIgetVoxVal (tempMRI, c, r, s, f-stframe );
177
+ MRIsetVoxVal (__overlaymri, c, r, s, f , fval);
175
178
}
176
179
}
177
180
}
@@ -229,7 +232,7 @@ int MRISurfOverlay::__readOldCurvature(const char *fname)
229
232
FILE *fp = fopen (fname, " r" );
230
233
if (fp == NULL )
231
234
{
232
- printf (" ERROR MRISurfOverlay::__readOldCurvature(): could not open %s" , fname);
235
+ printf (" ERROR MRISurfOverlay::__readOldCurvature(): could not open %s\n " , fname);
233
236
return ERROR_BADFILE;
234
237
}
235
238
@@ -413,6 +416,15 @@ int MRISurfOverlay::write(const char *fout, MRIS *mris, bool mergegifti)
413
416
{
414
417
int error = 0 ;
415
418
419
+ #ifdef __MRISURFOVERLAY_DEBUG
420
+ // debug
421
+ char dbgvol[1024 ] = {' \0 ' }; // "/space/papancha/2/users/yh887/fs_test/mris_convert-gifti/dbgvol.mgz";
422
+ sprintf (dbgvol, " %s.dbg.mgz" , fout);
423
+ printf (" [DEBUG] write debug __overlaymri volume as %s\n " , dbgvol);
424
+ mghWrite (__overlaymri, dbgvol, -1 );
425
+ #endif
426
+
427
+
416
428
if (!mergegifti && __noverlay > 1 )
417
429
ErrorReturn (ERROR_NOFILE, (ERROR_NOFILE, " MRISurfOverlay::write() - more than one overlay to output" ));
418
430
0 commit comments