50 std::cout <<
"Input volumes: " <<
fnVols << std::endl
51 <<
"Output metadata:" <<
fnVolsOut << std::endl
52 <<
"Number of PCAs: " <<
NPCA << std::endl
53 <<
"Basis: " <<
fnBasis << std::endl
54 <<
"Avg. volume: " <<
fnAvgVol << std::endl
55 <<
"Output PCA vols:" <<
fnOutStack << std::endl;
56 std::cout <<
"Percentiles: ";
59 std::cout << std::endl;
67 addUsageLine(
"Compute the PCA of a set of volumes, within a mask (optional).");
68 addParamsLine(
" -i <volumes> : Metadata with aligned volumes");
69 addParamsLine(
" [-o <volumes=\"\">] : Output metadata with PCA projections");
71 addParamsLine(
" [--saveBasis <stack=\"\">]: Save the bases as a stack of volumes");
72 addParamsLine(
" [--generatePCAVolumes <...>]: List of percentiles (typically, \"10 90\"), to generate volumes along the 1st PCA basis");
73 addParamsLine(
" [--avgVolume <volume=\"\">] : Volume on which to add the PCA basis");
74 addParamsLine(
" [--opca <stack=\"\">] : Stack of generated volumes");
84 size_t Xdim, Ydim, Zdim, Ndim;
101 size_t Nvoxels=imask.
sum();
131 std::vector<double> dimredProj;
132 dimredProj.resize(
NPCA);
136 memcpy(&dimredProj[0],&
MAT_ELEM(proj,i,0),
NPCA*
sizeof(
double));
147 for (
int i=
NPCA-1; i>=0; --
i)
168 Vavg().initZeros(
V());
177 std::cout <<
"listOfPercentiles.size()=" <<
listOfPercentiles.size() << std::endl;
181 std::cout <<
"Percentile " <<
listOfPercentiles[
i] <<
" -> idx=" << idx <<
" p(idx)=" << psorted(idx) << std::endl;
182 Vpca()+=psorted(idx)*
V();
void addVector(const MultidimArray< float > &_v)
Add vector.
void projectOnPCABasis(Matrix2D< double > &CtY)
Project on basis.
void resizeNoCopy(const MultidimArray< T1 > &v)
void write(const FileName &name="", size_t select_img=ALL_IMAGES, bool isStack=false, int mode=WRITE_OVERWRITE, CastWriteMode castMode=CW_CAST, int _swapWrite=0)
FileName fnVols
Input set of volumes.
void subtractAvg()
Subtract average.
void toVector(Matrix1D< T > &op1) const
void getListParam(const char *param, StringVector &list)
static void defineParams(XmippProgram *program, int allowed_data_types=ALL_KINDS, const char *prefix=nullptr, const char *comment=nullptr, bool moreOptions=false)
FileName fnOutStack
Output PCA stack.
#define MAT_ELEM(m, i, j)
PCAMahalanobisAnalyzer analyzer
const char * getParam(const char *param, int arg=0)
float textToFloat(const char *str)
FileName fnBasis
Output basis.
void defineParams()
Define parameters.
void readParams()
Read arguments.
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
std::vector< MultidimArray< double > > PCAbasis
void readParams(XmippProgram *program)
void createEmptyFile(const FileName &filename, int xdim, int ydim, int Zdim, size_t select_img, bool isStack, int mode, int _swapWrite, const MDRowVec *md)
int verbose
Verbosity level.
void generate_mask(bool apply_geo=false)
int NPCA
Number of PCA bases.
FileName fnAvgVol
Average volume.
FileName fnVolsOut
Output set of volumes.
StringVector listOfPercentiles
List of percentiles to generate volumes.
void learnPCABasis(size_t NPCA, size_t Niter)
Learn basis.
bool checkParam(const char *param)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
MultidimArray< int > imask
Matrix1D< T > sort() const
void addUsageLine(const char *line, bool verbatim=false)
void initZeros(const MultidimArray< T1 > &op)
int getIntParam(const char *param, int arg=0)
void addParamsLine(const String &line)