26 #ifndef CORE_IMAGE_BASE_H_ 27 #define CORE_IMAGE_BASE_H_ 39 #include <H5Ipublic.h> 145 only_apply_shifts =
false;
148 wrap = xmipp_transformation::WRAP;
168 #define VOLMATRIX(V) ((V).data) 181 #define IMGMATRIX(I) ((I).data) 186 #define IMGPIXEL(I, i, j) A2D_ELEM(((I).data), (i), (j)) 200 #define DIRECT_IMGPIXEL(I, i, j) DIRECT_A2D_ELEM(((I).data), (i), (j)) 214 #define VOLVOXEL(V, k, i, j) A3D_ELEM(((V).data), (k), (i), (j)) 228 #define DIRECT_VOLVOXEL(I, k, i, j) DIRECT_A3D_ELEM(((I).data), (k), (i), (j)) 234 #define SWAPTRIG 16776960 242 std::vector<std::unique_ptr<MDRow>>
MD;
271 static constexpr std::array<int,4> defaultAxisOrder = {0,1,2,3};
285 virtual void clear()=0;
291 virtual bool isComplexT()
const=0;
311 return (mmapOnRead || mmapOnWrite);
320 return (
isImage(name) && !isComplex());
329 return (
isImage(name) && isComplex());
344 void mapFile2Write(
size_t Xdim,
size_t Ydim,
size_t Zdim,
const FileName &_filename,
345 bool createTempFile =
false,
size_t select_img =
APPEND_IMAGE,
393 int readApplyGeo(
const MetaData &md,
size_t objId,
397 void applyGeo(
const MetaData &md,
size_t objId,
403 void setGeo(
const MDRow &row,
size_t n=0);
434 int readOrReadPreview(
const FileName &name,
size_t Xdim,
size_t Ydim,
int select_slice =
CENTRAL_SLICE,
size_t select_img =
FIRST_IMAGE,
bool mapData =
false);
472 virtual bool checkMmapT(
DataType datatype)=0;
479 virtual void writePageAsDatatype(FILE * fimg,
DataType datatype,
size_t datasize_n )=0;
484 void swapPage(
char * page,
size_t pageNrElements,
DataType datatype,
int swap = 1);
510 void getDimensions(
size_t &Xdim,
size_t &Ydim,
size_t &Zdim,
size_t &Ndim)
const;
532 virtual size_t getSize()
const = 0;
558 void initGeometry(
const size_t n = 0);
564 return (!MD.empty() && MD[0]->containsLabel(label));
579 double rot(
const size_t n = 0)
const;
587 double tilt(
const size_t n = 0)
const;
595 double psi(
const size_t n = 0)
const;
603 double Xoff(
const size_t n = 0)
const;
611 double Yoff(
const size_t n = 0)
const;
619 double Zoff(
const size_t n = 0)
const;
627 double weight(
const size_t n = 0)
const;
635 double scale(
const size_t n = 0)
const;
643 bool flip(
const size_t n = 0)
const;
661 double samplingRateX()
const;
664 virtual void setDimensions(
int Xdim,
int Ydim,
int Zdim,
size_t Ndim) = 0;
665 virtual void setDimensions(
ArrayDim &aDim);
678 filename = _filename;
690 void setEulerAngles(
double rot,
double tilt,
double psi,
695 void getEulerAngles(
double &rot,
double &tilt,
double &psi,
696 const size_t n = 0)
const;
718 void setShifts(
double xoff,
double yoff,
double zoff = 0.,
723 void getShifts(
double &xoff,
double &yoff,
double &zoff,
724 const size_t n = 0)
const;
778 bool only_apply_shifts =
false,
779 const size_t n = 0)=0;
783 virtual void sumWithFile(
const FileName &fn)=0;
788 virtual void mirrorY() =0;
791 virtual void selfApplyGeometry(
int SplineDegree,
bool wrap,
bool only_apply_shifts)=0;
831 virtual void applyGeo(
const MDRow &row,
bool only_apply_shifts =
false,
bool wrap = xmipp_transformation::WRAP) = 0;
836 bool mapData =
false);
839 bool mapData =
false);
848 virtual void readData(FILE* fimg,
size_t select_img,
DataType datatype,
size_t pad) = 0;
852 virtual void readData4bit(FILE* fimg,
size_t select_img,
DataType datatype,
size_t pad) = 0;
856 virtual void writeData(FILE* fimg,
size_t offset,
DataType wDType,
size_t datasize_n,
859 virtual void setPage2T(
size_t offset,
char * page,
DataType datatype,
size_t pageSize ) = 0;
860 virtual void getPageFromT(
size_t offset,
char * page,
DataType datatype,
size_t pageSize ) = 0;
861 virtual void getCastConvertPageFromT(
size_t offset,
char * page,
DataType datatype,
size_t pageSize,
double min0,
double max0,
CastWriteMode castMode=
CW_CONVERT)
const = 0;
865 virtual void mmapFile() = 0;
869 virtual void munmapFile() = 0;
873 void setDatatype(
DataType datatype);
void setRot(double rot, const size_t n=0)
std::array< int, 4 > axisOrder
void setScale(double scale, const size_t n=0)
MDRow & getGeometry(const size_t n=0)
void write(std::ostream &os, const datablock &db)
bool mainContainsLabel(MDLabel label) const
std::vector< std::unique_ptr< MDRow > > MD
const FileName & name() const
bool containsLabel(MDLabel label) const override
void setPsi(double psi, const size_t n=0)
std::ostream & operator<<(std::ostream &os, const Message &sb)
void getScale(double &scale, const size_t n=0)
void setZoff(double zoff, const size_t n=0)
const ApplyGeoParams DefaultApplyGeoParams
void setYoff(double yoff, const size_t n=0)
void setADimFile(ArrayDim aDim)
bool isComplexImage(const FileName &name)
const size_t tiff_map_min_size
void setFlip(bool flip, const size_t n=0)
void setDataMode(DataMode mode)
void rename(const FileName &name)
bool individualContainsLabel(MDLabel label) const
void setXoff(double xoff, const size_t n=0)
void setTilt(double tilt, const size_t n=0)
double psi(const double x)
void setName(const FileName &_filename)
bool isRealImage(const FileName &name)
void setWeight(double weight, const size_t n=0)
file read(std::istream &is)
MultidimArrayBase * mdaBase
void getDimensions(ArrayDim &aDim)
bool isImage(const FileName &name)
void getOffsetAndSwap(size_t &_offset, int &_swap) const