39 int select_slice,
size_t select_img)
44 size_t imXdim, imYdim, imZdim, Zdim;
54 aDimFile = imgInfo.
adim;
56 im().setXmippOrigin();
61 if (Ydim == 0 && imXdim < imYdim)
64 scale = ((double) Ydim) / ((double) imYdim);
65 Xdim = (int) (scale * imXdim);
69 scale = ((double) Xdim) / ((double) imXdim);
71 Ydim = (int) (scale * imYdim);
85 Zdim = (select_slice ==
ALL_SLICES) ? imZdim : 1;
98 mFd = open(dataFName.c_str(), O_RDONLY, S_IREAD);
100 mFd = open(dataFName.c_str(), O_RDWR, S_IREAD | S_IWRITE);
107 "Image Class::mmapFile: permission denied when opening %s",
111 "Image Class::mmapFile: Error opening the image file to be mapped.");
114 const size_t pagesize = sysconf(_SC_PAGESIZE);
115 size_t offsetPages = (mappedOffset / pagesize) * pagesize;
116 mappedOffset -= offsetPages;
117 mappedSize -= offsetPages;
120 map = (
char*) mmap(0, mappedSize, PROT_READ, MAP_SHARED, mFd,
123 map = (
char*) mmap(0, mappedSize, PROT_READ | PROT_WRITE, MAP_SHARED,
126 if (map == MAP_FAILED)
128 formatString(
"Image Class::mmapFile: mmap of image file failed. Error: %s", strerror(errno)));
129 data.data =
reinterpret_cast<T*
>(map + mappedOffset);
142 std::complex<double> * ptrDest,
151 std::complex<short> * ptr = (std::complex<short> *) page;
152 for(
size_t i=0;
i<pageSize;
i++)
153 ptrDest[
i]= std::complex<double> (real(ptr[
i]),imag(ptr[i]));
158 std::complex<int> * ptr = (std::complex<int> *) page;
159 for(
size_t i=0;
i<pageSize;
i++)
160 ptrDest[
i]= std::complex<double> (real(ptr[
i]),imag(ptr[i]));
165 std::complex<float> * ptr = (std::complex<float> *) page;
166 for(
size_t i=0;
i<pageSize;
i++)
167 ptrDest[
i]= std::complex<double> (real(ptr[
i]),imag(ptr[i]));
171 memcpy(ptrDest, page, pageSize*
sizeof(std::complex<double>));
174 std::cerr<<
"Datatype= "<<datatype<<std::endl;
184 size_t pageSize)
const 190 short * ptr = (
short *) page;
191 double * srcPtrd = (
double *)srcPtr;
192 for(
size_t i=0;
i<pageSize;
i++)
194 *ptr=(short) *srcPtrd; ptr++; srcPtrd++;
195 *ptr=(short) *srcPtrd; ptr++; srcPtrd++;
201 int * ptr = (
int *) page;
202 double * srcPtrd = (
double *)srcPtr;
203 for(
size_t i=0;
i<pageSize;
i++)
205 *ptr=(int) *srcPtrd; ptr++; srcPtrd++;
206 *ptr=(int) *srcPtrd; ptr++; srcPtrd++;
212 std::complex<float> * ptr = (std::complex<float> *) page;
213 for(
size_t i=0;
i<pageSize;
i++)
214 ptr[
i] = (std::complex<float>)srcPtr[
i];
218 memcpy(page, srcPtr, pageSize*
sizeof(std::complex<double>));
228 char * page,
DataType datatype,
size_t pageSize,
double min0,
double max0,
CastWriteMode castMode)
const 235 std::complex<float> * ptr = (std::complex<float> *) page;
236 for(
size_t i=0;
i<pageSize;
i++)
237 ptr[
i] = (std::complex<float>)srcPtr[
i];
248 bool only_apply_shifts)
252 if (data.getDim() < 3 && dataMode >=
DATA)
255 getTransformationMatrix(A, only_apply_shifts);
277 int select_slice,
size_t select_img)
289 if (Ydim == 0 && imAdim.
xdim < imAdim.
ydim)
292 scale = ((double) Ydim) / ((double) imAdim.
ydim);
293 Xdim = (int) (scale * imAdim.
xdim);
297 scale = ((double) Xdim) / ((double) imAdim.
xdim);
299 Ydim = (int) (scale * imAdim.
ydim);
308 movePointerTo(select_slice, select_img);
332 "Geometric transformation cannot be applied to stacks!!!");
336 MDRow &rowAux = *MD[0];
375 if (data.getDim() < 3 && dataMode >=
DATA)
379 getTransformationMatrix(A, only_apply_shifts);
#define REPORT_ERROR(nerr, ErrormMsg)
#define MULTIDIM_ARRAY(v)
Incorrect MultidimArray size.
void resizeNoCopy(int Ydim, int Xdim)
void getPreview(ImageBase *imgBOut, size_t Xdim, size_t Ydim=0, int select_slice=CENTRAL_SLICE, size_t select_img=FIRST_IMAGE)
Map addressing of file has failed.
void setADimFile(ArrayDim aDim)
T & getValue(MDLabel label)
void getDimensions(size_t &Xdim, size_t &Ydim, size_t &Zdim, size_t &Ndim) const
void getInfo(ImageInfo &imgInfo) const
int readPreview(const FileName &name, size_t Xdim, size_t Ydim=0, int select_slice=CENTRAL_SLICE, size_t select_img=FIRST_IMAGE)
static MDRowVec emptyHeaderVec()
void setValue(MDLabel label, const T &d, bool addLabel=true)
virtual bool containsLabel(MDLabel label) const =0
void selfApplyGeometry(int SplineDegree, bool wrap=xmipp_transformation::WRAP, bool only_apply_shifts=false)
String formatString(const char *format,...)
void applyGeo(const MDRow &row, bool only_apply_shifts=false, bool wrap=xmipp_transformation::WRAP) override
void getTransformationMatrix(Matrix2D< double > &A, bool only_apply_shifts=false, const size_t n=0)
Insufficient permissions to perform operation.
int readMapped(const FileName &name, size_t select_img=ALL_IMAGES, int mode=WRITE_READONLY)