Finish analysis.
473 Image<double> SignificantT2, SignificantMaxRatio, SignificantMinRatio;
477 SignificantT2().initZeros(zsize, ysize, xsize);
478 SignificantMaxRatio().initZeros(zsize, ysize, xsize);
479 SignificantMinRatio().initZeros(zsize, ysize, xsize);
480 std::cout <<
"Classifying voxels ...\n";
482 int counter = 0, nxny = ysize * zsize;
496 std::ofstream fh_dat;
497 fh_dat.open(
"PPP.dat");
500 "Cannot open PPP.dat for output");
501 fh_dat <<
NFEATURES <<
" " << nmax << std::endl;
502 std::vector< Matrix1D<double> > v;
510 v_aux(0) =
VA[
n](
k,
i,
j + xsize);
511 v_aux(1) =
VA[
n](
k, i + ysize,
j);
512 v_aux(2) =
VA[
n](
k, i + ysize,
j + xsize);
513 v_aux(3) =
VA[
n](k + zsize,
i,
j);
514 v_aux(4) =
VA[
n](k + zsize,
i,
j + xsize);
515 v_aux(5) =
VA[
n](k + zsize, i + ysize,
j);
516 v_aux(6) =
VA[
n](k + zsize, i + ysize,
j + xsize);
520 v_aux(0) =
VA[
n](
k,
i,
j);
521 v_aux(1) =
VA[
n](
k,
i,
j + xsize);
522 v_aux(2) =
VA[
n](
k, i + ysize,
j);
523 v_aux(3) =
VA[
n](
k, i + ysize,
j + xsize);
524 v_aux(4) =
VA[
n](k + zsize,
i,
j);
525 v_aux(5) =
VA[
n](k + zsize,
i,
j + xsize);
526 v_aux(6) =
VA[
n](k + zsize, i + ysize,
j);
527 v_aux(7) =
VA[
n](k + zsize, i + ysize,
j + xsize);
531 v_aux(0) =
VA[
n](k / 2, i / 2,
j / 2);
532 v_aux(1) =
VA[
n](k / 2, i / 2,
j / 2 + xsize2);
533 v_aux(2) =
VA[
n](k / 2, i / 2 + ysize2,
j / 2);
534 v_aux(3) =
VA[
n](k / 2, i / 2 + ysize2,
j / 2 + xsize2);
535 v_aux(4) =
VA[
n](k / 2 + zsize2, i / 2,
j / 2);
536 v_aux(5) =
VA[
n](k / 2 + zsize2, i / 2,
j / 2 + xsize2);
537 v_aux(6) =
VA[
n](k / 2 + zsize2, i / 2 + ysize2,
j / 2);
538 v_aux(7) =
VA[
n](k / 2 + zsize2, i / 2 + ysize2,
j / 2 + xsize2);
539 v_aux(8) =
VA[
n](
k,
i,
j + xsize);
540 v_aux(9) =
VA[
n](
k, i + ysize,
j);
541 v_aux(10) =
VA[
n](
k, i + ysize,
j + xsize);
542 v_aux(11) =
VA[
n](k + zsize,
i,
j);
543 v_aux(12) =
VA[
n](k + zsize,
i,
j + xsize);
544 v_aux(13) =
VA[
n](k + zsize, i + ysize,
j);
545 v_aux(14) =
VA[
n](k + zsize, i + ysize,
j + xsize);
548 v_aux = v_aux * v_aux;
551 fh_dat << v_aux.transpose() << std::endl;
557 if (system(
"xmipp_fcmeans -din PPP.dat -std::cout PPP -c 2 -saveclusters > /dev/null")==-1)
563 #define GET_RESULTS(fh,fn,avg,cov,N,idx) \ 566 REPORT_ERROR(ERR_IO_NOTOPEN,(std::string)"VariabilityClass::finishAnalysis: " \ 567 "Cannot open "+fn+" for input"); \ 569 while (!fh.eof()) { \ 571 if (n!=n_previous) { \ 575 aux.fromVector(v[n]); \ 576 cov+=aux*aux.transpose(); \ 581 aux.fromVector(avg); \ 582 cov-=aux*aux.transpose(); 589 GET_RESULTS(fh_0,
"PPP.0", avg0, covariance0, N0, idx0);
592 std::cout <<
"Class 0 is:\n";
593 for (
size_t n = 0;
n < idx0.size();
n++)
608 GET_RESULTS(fh_1,
"PPP.1", avg1, covariance1, N1, idx1);
611 std::cout <<
"Class 1 is:\n";
612 for (
size_t n = 0;
n < idx1.size();
n++)
627 covariance = 1.0 / (N0 + N1 - 2) *
628 ((N0 - 1.0) * covariance0 + (N1 - 1.0) * covariance1);
629 covariance *= (1.0 / N0 + 1.0 / N1);
631 T2 = (double)(N0 + N1 - avg_diff.
size() - 1) /
632 ((N0 + N1 - 2) * avg_diff.
size()) *
638 double variance = ((N0 - 1) * covariance0(0, 0) + (N1 - 1) * covariance1(0, 0)) /
640 double t = (avg1(0) - avg0(0)) /
sqrt(variance * (1.0 / N0 + 1.0 / N1));
650 svdcmp(covariance, U, eigenvalues, V);
654 for (
size_t n = 0;
n < idx0.size();
n++)
655 for (
size_t np =
n + 1; np < idx0.size(); np++)
656 if (idx0(
n) && idx0(np))
657 coocurrence(
n, np)++;
659 for (
size_t n = 0;
n < idx1.size();
n++)
660 for (
size_t np =
n + 1; np < idx1.size(); np++)
661 if (idx1(
n) && idx1(np))
662 coocurrence(
n, np)++;
665 SignificantT2(k, i,
j) = T2(0, 0);
668 SignificantMinRatio(k, i,
j) = eigenvalues(1) / eigenvalues(0);
669 SignificantMaxRatio(k, i,
j) = eigenvalues(
NFEATURES - 1) / eigenvalues(0);
672 std::cout <<
"T2 for this classification is " << T2(0, 0) << std::endl;
673 std::cout <<
"Eigenvalues are " << eigenvalues.
transpose() << std::endl;
676 if (++counter % nxny == 0)
683 if (system(
"rm PPP.dat PPP.cod PPP.vs PPP.err PPP.his PPP.inf PPP.0 PPP.1")==-1)
687 for (
int np =
n + 1; np <
nmax; np++)
688 coocurrence(np,
n) = coocurrence(
n, np);
Just to locate unclassified errors.
void init_progress_bar(long total)
#define GET_RESULTS(fh, fn, avg, cov, N, idx)
#define REPORT_ERROR(nerr, ErrormMsg)
void fromVector(const Matrix1D< T > &op1)
void sqrt(Image< double > &op)
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)
void inv(Matrix2D< T > &result) const
Matrix2D< T > transpose() const
std::vector< MultidimArray< double > > VA
Vector of training vectors.
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
Matrix1D< T > transpose() const
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
ReconsInfo * IMG_Inf
Array with all the sorting information for each projection.
void progress_bar(long rlen)
FileName fn_proj
Projection filename.
void svdcmp(const Matrix2D< T > &a, Matrix2D< double > &u, Matrix1D< double > &w, Matrix2D< double > &v)
MultidimArray< int > ordered_list
Order in which projections will be presented to algorithm.
void typeCast(const Matrix1D< T1 > &v1, Matrix1D< T2 > &v2)