46 #define IMAGICSIZE 1024 // Size of the IMAGIC header for each image 49 #define SIZEOF_INT sizeof(int) 132 printf(
"DEBUG readIMAGIC: Reading Imagic file\n");
137 if ( fread( header,
IMAGICSIZE, 1, fhed ) < 1 )
146 if ( strstr(header->type,
"PACK") )
148 else if ( strstr(header->type,
"INTG") )
150 else if ( strstr(header->type,
"REAL") )
152 else if ( strstr(header->type,
"RECO") )
157 else if ( strstr(header->type,
"COMP") )
164 if ( header->sigma == 0 && header->varian != 0 )
165 header->sigma =
std::sqrt(header->varian);
166 if ( header->densmax == 0 && header->densmin == 0 && header->sigma != 0 )
168 header->densmin = header->avdens - header->sigma;
169 header->densmax = header->avdens + header->sigma;
174 MDMainHeader.setValue(
MDL_MIN,(
double)header->densmin);
175 MDMainHeader.setValue(
MDL_MAX,(
double)header->densmax);
176 MDMainHeader.setValue(
MDL_AVG,(
double)header->avdens);
177 MDMainHeader.setValue(
MDL_STDDEV,(
double)header->sigma);
183 int _xDim,_yDim,_zDim;
185 _xDim = (int) header->iylp;
186 _yDim = (
int) header->ixlp;
188 _nDim = (size_t) header->ifn + 1 ;
190 if ( select_img > _nDim )
196 replaceNsize = _nDim;
197 setDimensions(_xDim, _yDim, _zDim, _nDim );
209 for (
size_t i = 0;
i < _nDim;
i++)
213 for (
size_t i = 0;
i < _nDim; ++
i )
215 if ( fread( header, IMAGICSIZE, 1, fhed ) < 1 )
219 swapPage((
char *) header, IMAGICSIZE - 916,
DT_Float);
223 MD[
i]->setValue(
MDL_SHIFT_X, (
double)-1. * header->ixold);
224 MD[
i]->setValue(
MDL_SHIFT_Y, (
double)-1. * header->iyold);
226 MD[
i]->setValue(
MDL_ANGLE_ROT, (
double)-1. * header->euler_alpha);
228 MD[
i]->setValue(
MDL_ANGLE_PSI, (
double)-1. * header->euler_gamma);
240 readData(fimg, select_img, datatype, pad );
264 printf(
"DEBUG writeIMAGIC: Reading Imagic file\n");
281 strncpy(header.
type,
"REAL",
sizeof(header.
type));
288 strncpy(header.
type,
"INTG",
sizeof(header.
type));
295 strncpy(header.
type,
"PACK",
sizeof(header.
type));
300 strncpy(header.
type,
"COMP",
sizeof(header.
type));
316 strncpy(header.
type,
"PACK",
sizeof(header.
type));
319 strncpy(header.
type,
"INTG",
sizeof(header.
type));
322 (strncpy)(header.
type,
"REAL",
sizeof(header.
type));
325 strncpy(header.
type,
"COMP",
sizeof(header.
type));
335 if (!checkMmapT(wDType))
351 mdaBase->setMmap(
true);
355 mdaBase->coreAllocateReuse();
364 size_t Xdim, Ydim, Zdim, Ndim;
365 getDimensions(Xdim, Ydim, Zdim, Ndim);
370 size_t datasize, datasize_n;
371 datasize_n = (size_t)Xdim*Ydim*Zdim;
376 header.
npix2 = Xdim*Ydim;
383 tm* t = localtime(&timer);
385 header.
ndate = t->tm_mday;
386 header.
nmonth = t->tm_mon + 1;
387 header.
nyear = t->tm_year;
388 header.
nhour = t->tm_hour;
389 header.
nminut = t->tm_min;
390 header.
nsec = t->tm_sec;
394 if (!MDMainHeader.empty())
396 #define SET_MAIN_HEADER_VALUE(field, label) MDMainHeader.getValueOrDefault(label, aux, 0.); header.field = (float)aux 404 memcpy(header.
lastpr,
"Xmipp", 5);
405 memcpy(header.
name, filename.c_str(), 80);
409 header.
ifn = replaceNsize - 1 ;
414 imgStart = replaceNsize;
415 header.
ifn = replaceNsize + Ndim - 1 ;
417 else if( mode ==
WRITE_REPLACE && imgStart + Ndim > replaceNsize)
418 header.
ifn = imgStart + Ndim - 1;
419 else if (Ndim > replaceNsize)
420 header.
ifn = Ndim - 1;
426 flockHead.
lock(fhed);
429 if (replaceNsize == 0)
439 else if( header.
ifn + 1 > (
int)replaceNsize && imgStart > 0 )
441 fseek( fhed,
sizeof(
int), SEEK_SET);
444 int ifnswp = header.
ifn;
453 fseek(fimg, datasize * imgStart, SEEK_SET);
456 auto it = MD.begin();
458 for (
size_t i = 0;
i < Ndim; ++
i, ++it)
466 #define SET_HEADER_VALUEInt(field, label) (*it)->getValueOrDefault((label), (aux), 0); header.field = -(int)(aux) 467 #define SET_HEADER_VALUEDouble(field, label) (*it)->getValueOrDefault((label), (aux), 0.); header.field = -(float)(aux) 476 header.
imn = imgStart +
i + 1;
482 if (dataMode >=
DATA)
484 if (mmapOnWrite && Ndim == 1)
486 mappedOffset = ftell(fimg);
487 mappedSize = mappedOffset + datasize;
488 fseek(fimg, datasize-1, SEEK_CUR);
492 writeData(fimg, i*datasize_n, wDType, datasize_n, castMode);
495 fseek(fimg, datasize, SEEK_CUR);
#define REPORT_ERROR(nerr, ErrormMsg)
void sqrt(Image< double > &op)
DataType datatypeRAW(String strDT)
int writeIMAGIC(size_t img_select=ALL_IMAGES, int mode=WRITE_OVERWRITE, const String &bitDepth="", CastWriteMode castMode=CW_CAST)
int readIMAGIC(size_t img_select)
void abs(Image< double > &op)
if(fabs(c[*nmax+ *nmax *c_dim1])==0.e0)
const size_t tiff_map_min_size
Couldn't read from file.
static MDRowVec emptyHeaderVec()
#define SET_HEADER_VALUEInt(field, label)
#define SET_HEADER_VALUEDouble(field, label)
void lock(int fileno=0)
Lock file.
#define SET_MAIN_HEADER_VALUE(field, label)
String formatString(const char *format,...)
#define IMG_INDEX(select_img)
Incorrect MultidimArray dimensions.
size_t gettypesize(DataType type)
Returns memory size of datatype.