samer@0: ;(load "view3d.scm") samer@0: (load "models.scm") samer@0: (load "functions.scm") samer@0: samer@0: (define o CompoundFunction.) samer@0: samer@0: (define distances null) samer@0: (define reset-P null) samer@0: (define computeD null) samer@0: (define get-P null) samer@0: samer@0: samer@0: (define (stats->mds stats mds) samer@0: (let* ((N (.N$# mds)) samer@0: (R (Matrix. "R" N N)) samer@0: (stats->corr (task (.getCorrelation stats R))) samer@0: (corr->D (samer.mds.CorrelationTask. mds R))) samer@0: (set! distances (VVector. "distances" (.getLinkArray mds))) samer@0: (set! computeD samer@0: (seq stats->corr corr->D samer@0: (Ops.apply (o (vscale 16.0) (vpower 1.0)) distances) samer@0: (Ops.update distances) samer@0: ) samer@0: ) samer@0: (matexec R "image") samer@0: computeD samer@0: ) samer@0: ) samer@0: samer@0: (define (R->mds R mds) samer@0: (set! distances (VVector. "distances" (.getLinkArray mds))) samer@0: (set! computeD samer@0: (seq samer@0: (samer.mds.CorrelationTask. mds R) samer@0: (Ops.apply (o (vscale 16.0) (vpower 1.0)) distances) samer@0: (Ops.update distances) samer@0: ) samer@0: ) samer@0: (matexec R "image") samer@0: computeD samer@0: ) samer@0: samer@0: samer@0: (define (analyse x) samer@0: (define N (.size x)) samer@0: ; (define hist (histogram x 256)) samer@0: (define stats (node (child x "statistics") (GaussianStatsOnline. x))) samer@0: (define P (node (.getNode x) (Matrix. "P" N 3))) ; 4D points samer@0: (define mds (samer.mds.MDS. P)) samer@0: (define tasks (seq stats)) samer@0: samer@0: (set! reset-P (lambda () (.set P (samer.maths.random.NormalisedGaussian.)))) samer@0: (set! get-P (lambda () P)) samer@0: ;(matexec P "load") samer@0: samer@0: (reset-P) samer@0: ;(.setMetric mds (samer.mds.Manhatten.)) samer@0: ;(exec (viewable "mds.stress") "trace") samer@0: (matexec P "image") samer@0: ;(exec (.getLikelihoodSignal hist) "trace") samer@0: samer@0: (with-tasks tasks samer@0: (addtasks samer@0: ; hist samer@0: (sub 128 (stats->mds stats mds)) samer@0: (sub 24 mds)) samer@0: ; (view3d x P id) samer@0: ) samer@0: tasks samer@0: ) samer@0: samer@0: (define (analyse-mds x) samer@0: (define N (.size x)) samer@0: (define R (Matrix. "R" N N)) samer@0: (define P (node (.getNode x) (Matrix. "P" N 3))) ; 4D points samer@0: (define mds (samer.mds.MDS. P)) samer@0: samer@0: (set! reset-P (lambda () (.set P (samer.maths.random.NormalisedGaussian.)))) samer@0: (set! get-P (lambda () P)) samer@0: ;(matexec P "load") samer@0: samer@0: (reset-P) samer@0: ;(.setMetric mds (samer.mds.Manhatten.)) samer@0: ;(exec (viewable "mds.stress") "trace") samer@0: (matexec P "image") samer@0: samer@0: (seq samer@0: (sub 128 (R->mds R mds)) samer@0: (sub 24 mds)) samer@0: )