118 xmippFREAD(fieldValue, datatypesize, n, fimg, swap);
124 short* sValue = (
short*) fieldValue;
125 *fieldValue = (double) *sValue;
130 int* iValue = (
int*) fieldValue;
131 *fieldValue = (double) *iValue;
136 unsigned short* usValue = (
unsigned short*) fieldValue;
137 *fieldValue = (double) *usValue;
142 unsigned int* uiValue = (
unsigned int*) fieldValue;
143 *fieldValue = (double) *uiValue;
148 float* fValue = (
float*) fieldValue;
149 *fieldValue = (double) *fValue;
159 bool* bValue = (
bool*) fieldValue;
160 *fieldValue = (double) *bValue;
166 char* cValue = (
char*) fieldValue;
167 *fieldValue = (double) *cValue;
184 unsigned short int ltName;
186 xmippFREAD(&cdTag,
sizeof (
unsigned char),1,fimg,
false);
187 xmippFREAD(<Name,
sizeof(
unsigned short int), 1,fimg,isLE);
188 int idTag = int(cdTag);
190 std::string stagName;
192 char * tagName =
new char[ltName+1];
194 tagName[ltName] =
'\0';
211 xmippFREAD(&dummy,
sizeof(
unsigned char),1,fimg,
false);
212 xmippFREAD(&dummy,
sizeof(
unsigned char),1,fimg,
false);
222 readTagDM3(fimg, header, parentId, nodeId, isLE, swap);
226 else if (idTag == 21)
232 xmippFREAD(&nnum,
sizeof(
unsigned int),1,fimg,isLE);
235 info =
new int[nnum];
236 xmippFREAD(info,
sizeof(
unsigned int),nnum,fimg,isLE);
248 std::vector<double> vtagValue(1);
249 vtagValue.assign(1,tagValue);
256 else if(nnum == 3 && info[0]==20)
267 std::vector<double> vtagValue(1);
268 vtagValue.assign(1,(
double) ftell(fimg));
274 if(info[1] == 2 || info[1] == 4)
276 else if(info[1] == 3 || info[1] == 5 || info[1] == 6)
278 else if(info[1] == 10 )
283 fseek( fimg, ftell(fimg)+(info[nnum-1])*k , SEEK_SET );
287 else if (info[0]==20 && info[1] == 15)
301 for (
int n=1;
n<=info[3];
n++)
306 if(info[3+2*
n] == 2 || info[3+2*
n] == 4)
308 else if(info[3+2*
n] == 3 || info[3+2*
n] == 5)
310 else if(info[3+2*
n] == 10 )
316 fseek( fimg, ftell(fimg)+(info[nnum-1]-1)*nBytes , SEEK_SET );
320 else if (info[0] == 15)
332 std::vector<double> vtagValue(info[2]);
333 for (
int n=1;
n<=info[2];
n++)
337 vtagValue.assign(
n,fieldValue);
353 for (
int n = 0;
n < depth;
n++)
369 std::vector<std::string> vTags;
379 for (
size_t n = 0;
n < vTags.size();
n++)
383 queryParentId.setValue(nodeId);
409 std::cout << tag << std::endl;
411 std::vector<size_t> vObjs;
416 for (
size_t i = 0;
i < vObjs.size();
i++)
428 std::vector<size_t> vObjs;
432 for (
size_t i = 0;
i < vObjs.size();
i++)
450 printf(
"DEBUG readDM3: Reading DM3 file\n");
460 xmippFREAD(&dummy,
sizeof(
int), 1, fimg, isLE);
482 int nodeID = 0, parentID = 0;
485 readTagDM3(fimg, header, parentID, nodeID, isLE, swap);
499 std::vector<DM3dataHead> dataHeaders;
502 std::vector<double> vValue;
508 std::vector<size_t> objIdsDataType;
511 for (
size_t objId : objIdsDataType)
520 dataHeaders.push_back(dhRef);
527 dataHeaders[header->
nIm].dataType = (
short int) iValue;
530 dataHeaders[header->
nIm].headerSize = (size_t) vValue[0];
538 dataHeaders[header->
nIm].imageWidth = (int) vValue[0];
544 dataHeaders[header->
nIm].imageHeight = (int) vValue[0];
550 dataHeaders[header->
nIm].dataTypeSize = (
short int) vValue[0];
553 id =
gotoTagDM3(header->
tags, nodeID,
"ImageTags,Acquisition,Frame,CCD,Pixel Size (um)");
558 dataHeaders[header->
nIm].pixelHeight = vValue[0]*1e4;
559 dataHeaders[header->
nIm].pixelWidth = vValue[1]*1e4;
568 if (dataHeaders.size() == 0)
573 _xDim = dataHeaders[0].imageWidth;
574 _yDim = dataHeaders[0].imageHeight;
578 if (select_img > _nDim)
583 for (
size_t i = 1;
i < _nDim ;
i++)
585 if (dataHeaders[0].imageHeight != dataHeaders[
i].imageHeight || \
586 dataHeaders[0].imageWidth != dataHeaders[
i].imageWidth || \
587 dataHeaders[0].dataType != dataHeaders[
i].dataType)
589 dimensions and data types are not currently supported. Try to read them individually.");
594 images at once in DM3 file are not currently supported. Try to read them individually.");
599 setDimensions(_xDim, _yDim, 1, _nDim);
602 size_t imgEnd = (select_img !=
ALL_IMAGES) ? imgStart + 1 : _nDim;
617 for (
size_t i = 0;
i < imgEnd-imgStart;
i++)
619 offset = dataHeaders[imgStart].headerSize;
622 if( dataMode <
DATA )
628 MDMainHeader.write(std::cerr);
633 readData(fimg, select_img, datatype, pad);
double CalibrationOffsetY
int writeDM3(size_t img_select, bool isStack=false, int mode=WRITE_OVERWRITE)
void addAndQuery(MDQuery &query)
bool IsLittleEndian(void)
#define REPORT_ERROR(nerr, ErrormMsg)
int readDM3(size_t img_select, bool isStack=false)
Couldn't write to file.
Cannot read image from file.
void FREADTagValueDM3(double *fieldValue, int numberType, int n, FILE *fimg, bool swap)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void printDM3node(const MetaData &MD, size_t id)
int splitString(const String &input, const String &delimiter, StringVector &results, bool includeEmpties)
Incorrect argument received.
size_t gotoTagDM3(MetaData &MD, int &nodeId, const std::string &tagsList)
double readTagDM3(FILE *fimg, DM3head *header, int parentId, int &nodeId, bool isLE, bool swap)
Couldn't read from file.
static MDRowVec emptyHeaderVec()
size_t xmippFREAD(void *dest, size_t size, size_t nitems, FILE *&fp, bool reverse)
int parentDM3(MetaData &MD, int nodeId, int depth=1)
double CalibrationOffsetX
String formatString(const char *format,...)
#define IMG_INDEX(select_img)
DataType datatypeDM3(int nType)
void printDM3(const MetaData &MD)
size_t gettypesize(DataType type)
Returns memory size of datatype.