148 printf(
"DEBUG readSPIDER: Reading Spider file, start_img = %lu, batch_size = %lu\n", start_img, batch_size);
153 std::unique_ptr<SPIDERhead> header(
new SPIDERhead() );
156 ". Error message: %s",
filename.c_str() ,strerror(errno)));
159 if ( (
swap = (( fabs(header->nslice) >
SWAPTRIG ) || ( fabs(header->iform) > 1000 ) ||
160 ( fabs(header->nslice) < 1 ))) )
163 if(header->labbyt != header->labrec*header->lenbyt)
166 offset = (size_t) header->labbyt;
178 bool isStack = ( header->istack > 0 );
179 int _xDim,_yDim,_zDim;
180 size_t _nDim, _nDimSet;
181 _xDim = (int) header->nsam;
182 _yDim = (
int) header->nrow;
183 _zDim = (int) header->nslice;
184 _nDim = (isStack)? (size_t)(header->maxim) : 1;
186 if (_xDim < 1 || _yDim < 1 || _zDim < 1 || _nDim < 1)
202 _nDimSet = _nDim - start_img + 1;
204 _nDimSet =
std::min( start_img + batch_size - 1, _nDim ) - start_img + 1;
210 const size_t header_size =
offset;
214 if ( start_img > _nDim )
224 const size_t datasize_n = _xDim*_yDim*_zDim;
225 const size_t image_size = header_size + datasize_n*
sizeof(float);
226 const size_t pad = (size_t) header->labbyt;
227 const size_t imgStart =
IMG_INDEX(start_img);
228 const size_t imgEnd = start_img + _nDimSet - 1;
230 size_t img_seek = header_size + imgStart * image_size;
233 for (
size_t i = 0;
i < imgEnd-imgStart;
i++)
240 for (
size_t n = 0,
i = imgStart;
i < imgEnd; ++
i, ++
n, img_seek += image_size )
242 if (fseek(
fimg, img_seek, SEEK_SET ) != 0)
256 daux = (double)header->xoff;
258 daux = (double)header->yoff;
260 daux = (double)header->zoff;
262 daux = (double)header->phi;
264 daux = (double)header->theta;
266 daux = (double)header->gamma;
268 daux = (double)header->weight;
270 bool baux = (header->flip == 1);
272 daux = (double) header->scale;
283 std::cerr<<
"DEBUG readSPIDER: header_size = "<<header_size<<
" image_size = "<<image_size<<std::endl;
284 std::cerr<<
"DEBUG readSPIDER: select_img= "<<select_img<<
" n= "<<Ndim<<
" pad = "<<pad<<std::endl;
void min(Image< double > &op1, const Image< double > &op2)
#define REPORT_ERROR(nerr, ErrormMsg)
virtual void readData(FILE *fimg, size_t select_img, DataType datatype, size_t pad)=0
void setValue(const MDObject &object) override
void swapPage(char *page, size_t pageNrElements, DataType datatype, int swap=1)
std::vector< std::unique_ptr< MDRow > > MD
Input/Output general error.
if(fabs(c[*nmax+ *nmax *c_dim1])==0.e0)
virtual void setDimensions(int Xdim, int Ydim, int Zdim, size_t Ndim)=0
Couldn't read from file.
static MDRowVec emptyHeaderVec()
DataType datatype() const
String formatString(const char *format,...)
#define IMG_INDEX(select_img)