header->a,b,c info is related to sampling rate, so it is only written when writing header, so it is initialized to number of voxels to avoid a mistaken value. If sampling is provided a, b and c are overwritten bellow
492 strncpy(header->
map,
"MAP ", 4);
496 machine_stamp = (
char *)(header->
machst);
499 machine_stamp[0] = 68;
500 machine_stamp[1] = 65;
504 machine_stamp[0] = machine_stamp[1] = 17;
511 size_t Xdim, Ydim, Zdim, Ndim;
521 header->
mx = header->
nx = Xdim;
522 header->
my = header->
ny = Ydim;
523 header->
mz = header->
nz = Zdim;
529 header->
a = (float)(Xdim * sampling);
531 header->
b = (float)(Ydim * sampling);
533 header->
c = (float)(Zdim * sampling);
536 header->
nx = Xdim/2 + 1;
556 #define SET_MAIN_HEADER_VALUE(field, label) MDMainHeader.getValueOrDefault(label, aux, 0.); header->field = (float)aux 564 #define SET_HEADER_SHIFT(field, label) MD[0]->getValueOrDefault(label, aux, 0.); header->field = -(int) round(aux) 568 #define SET_HEADER_ORIGIN(field, label1, label2) MD[0]->getValueOrDefault(label1, aux, 0.);MDMainHeader.getValueOrDefault(label2, aux2, 0.);\ 569 header->field = (float) (aux * aux2) 575 #define SET_HEADER_CELL_DIM(field, label1, dimSize) MDMainHeader.getValueOrDefault(label1, aux, 0.);\ 576 header->field = (float) (aux * dimSize) 594 size_t datasize, datasize_n;
595 datasize_n = Xdim*Ydim*Zdim;
601 printf(
"DEBUG rwMRC: Offset = %ld, Datasize_n = %ld\n",
offset, datasize_n);
609 bool isVolStk = isStack && Zdim > 1;
610 size_t nDimHeader = Ndim;
623 nDimHeader = select_img + Ndim - 1;
633 header->
nz = Zdim * nDimHeader;
638 header->
nz = nDimHeader;
642 header->
ispg = (Zdim>1)? 1:0;
658 fseek(
fimg,
offset + (datasize)*imgStart, SEEK_SET);
660 size_t imgEnd = (isStack)? Ndim : 1;
665 for (
size_t i = 0;
i < imgEnd;
i++ )
668 if (dataMode >=
DATA)
674 fseek(
fimg, datasize-1, SEEK_CUR);
681 fseek(
fimg, datasize, SEEK_CUR);
#define SET_MAIN_HEADER_VALUE(field, label)
bool IsLittleEndian(void)
#define REPORT_ERROR(nerr, ErrormMsg)
virtual void coreAllocateReuse()=0
void setValue(const MDObject &object) override
void swapPage(char *page, size_t pageNrElements, DataType datatype, int swap=1)
const T & getValueOrDefault(MDLabel label, const T &def) const
#define SET_HEADER_ORIGIN(field, label1, label2)
#define SET_HEADER_CELL_DIM(field, label1, dimSize)
int freeMemory(void *ptr, size_t memsize)
const size_t tiff_map_min_size
virtual bool checkMmapT(DataType datatype)=0
char * askMemory(size_t memsize)
virtual void mmapFile()=0
bool contains(const String &str) const
void lock(int fileno=0)
Lock file.
virtual void writeData(FILE *fimg, size_t offset, DataType wDType, size_t datasize_n, CastWriteMode castMode=CW_CAST)=0
#define SET_HEADER_SHIFT(field, label)
bool empty() const override
#define IMG_INDEX(select_img)
virtual DataType myT() const =0
MultidimArrayBase * mdaBase
DataType datatypeRAW(String strDT)
size_t gettypesize(DataType type)
Returns memory size of datatype.