You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(19) |
Nov
(45) |
Dec
(80) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(58) |
Feb
(127) |
Mar
(74) |
Apr
(34) |
May
(117) |
Jun
(14) |
Jul
(26) |
Aug
(13) |
Sep
(1) |
Oct
(38) |
Nov
(13) |
Dec
(5) |
| 2005 |
Jan
(108) |
Feb
(134) |
Mar
(54) |
Apr
(133) |
May
(16) |
Jun
(54) |
Jul
(128) |
Aug
(99) |
Sep
(157) |
Oct
(182) |
Nov
(236) |
Dec
(212) |
| 2006 |
Jan
(86) |
Feb
(76) |
Mar
(121) |
Apr
(27) |
May
(7) |
Jun
(1) |
Jul
(6) |
Aug
(28) |
Sep
(1) |
Oct
(27) |
Nov
(5) |
Dec
|
| 2007 |
Jan
(32) |
Feb
(22) |
Mar
(22) |
Apr
(11) |
May
(3) |
Jun
(12) |
Jul
(11) |
Aug
(9) |
Sep
(37) |
Oct
(4) |
Nov
(9) |
Dec
(51) |
| 2008 |
Jan
(7) |
Feb
(31) |
Mar
(46) |
Apr
(31) |
May
(5) |
Jun
(27) |
Jul
(12) |
Aug
(5) |
Sep
(13) |
Oct
(24) |
Nov
(112) |
Dec
(15) |
| 2009 |
Jan
(6) |
Feb
(103) |
Mar
(66) |
Apr
(9) |
May
(8) |
Jun
(1) |
Jul
(20) |
Aug
(9) |
Sep
(2) |
Oct
(81) |
Nov
(88) |
Dec
(30) |
| 2010 |
Jan
(65) |
Feb
(57) |
Mar
(22) |
Apr
(12) |
May
(4) |
Jun
(12) |
Jul
(43) |
Aug
(6) |
Sep
(6) |
Oct
(4) |
Nov
(6) |
Dec
(3) |
| 2011 |
Jan
(10) |
Feb
(27) |
Mar
(11) |
Apr
(9) |
May
(69) |
Jun
(73) |
Jul
(67) |
Aug
(116) |
Sep
(40) |
Oct
(11) |
Nov
(34) |
Dec
(19) |
| 2012 |
Jan
|
Feb
(4) |
Mar
(28) |
Apr
(18) |
May
(9) |
Jun
(7) |
Jul
(4) |
Aug
(155) |
Sep
(264) |
Oct
(172) |
Nov
(15) |
Dec
(40) |
| 2013 |
Jan
(1) |
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
(20) |
Jul
(76) |
Aug
(67) |
Sep
(49) |
Oct
(27) |
Nov
(3) |
Dec
(3) |
| 2014 |
Jan
(7) |
Feb
(7) |
Mar
(16) |
Apr
|
May
(4) |
Jun
(1) |
Jul
(18) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2015 |
Jan
(6) |
Feb
(5) |
Mar
(3) |
Apr
(23) |
May
(5) |
Jun
|
Jul
(2) |
Aug
(4) |
Sep
|
Oct
|
Nov
(2) |
Dec
(4) |
| 2016 |
Jan
(2) |
Feb
(7) |
Mar
(2) |
Apr
(1) |
May
(14) |
Jun
(3) |
Jul
|
Aug
(3) |
Sep
|
Oct
|
Nov
(1) |
Dec
(3) |
| 2017 |
Jan
(6) |
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(12) |
Sep
(6) |
Oct
|
Nov
(3) |
Dec
|
| 2018 |
Jan
(4) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(8) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2019 |
Jan
|
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
(8) |
Oct
|
Nov
(2) |
Dec
(25) |
| 2020 |
Jan
|
Feb
(3) |
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
(53) |
Nov
(33) |
Dec
|
| 2021 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(4) |
Dec
(5) |
| 2022 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
(93) |
Aug
(206) |
Sep
(39) |
Oct
(19) |
Nov
(11) |
Dec
|
| 2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
(150) |
Jul
(124) |
Aug
(14) |
Sep
(5) |
Oct
|
Nov
(1) |
Dec
|
| 2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(12) |
Jul
(62) |
Aug
|
Sep
(7) |
Oct
|
Nov
(7) |
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
(14) |
May
(3) |
Jun
|
Jul
|
Aug
(76) |
Sep
(214) |
Oct
(6) |
Nov
|
Dec
|
|
From: <kin...@us...> - 2004-02-27 10:49:41
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17013 Modified Files: tendGrads.c Log Message: improved usage info Index: tendGrads.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tendGrads.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tendGrads.c 27 Feb 2004 10:23:56 -0000 1.2 --- tendGrads.c 27 Feb 2004 10:41:03 -0000 1.3 *************** *** 26,30 **** ", based on a simulation of anti-podal point pairs repelling each other " "on the unit sphere surface. This can either distribute more uniformly a given " ! "set of gradients, or it can make a new distribution from scratch. "); int --- 26,33 ---- ", based on a simulation of anti-podal point pairs repelling each other " "on the unit sphere surface. This can either distribute more uniformly a given " ! "set of gradients, or it can make a new distribution from scratch. A more " ! "clever implementation could decrease drag with time, as the solution converges, " ! "to get closer to the minimum energy configuration faster. In the mean time, you " ! "can run a second pass on the output of the first pass, using lower drag. "); int |
|
From: <kin...@us...> - 2004-02-27 10:36:47
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14744 Added Files: grads.c Log Message: added tenGradientGenerate and tenGradientDistributed, which are accessed via "tend grads" --- NEW FILE: grads.c --- /* teem: Gordon Kindlmann's research software Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ten.h" #include "privateTen.h" tenGradientParm * tenGradientParmNew(void) { tenGradientParm *ret; ret = (tenGradientParm *)calloc(1, sizeof(tenGradientParm)); if (ret) { ret->mass = 1; ret->charge = 0.2; ret->drag = 0.01; ret->dt = 0.05; ret->minVelocity = 0.00001; ret->jitter = 0.05; ret->srand = AIR_TRUE; ret->snap = 0; ret->single = AIR_FALSE; ret->minIteration = 20; ret->maxIteration = 1000000; } return ret; } tenGradientParm * tenGradientParmNix(tenGradientParm *tgparm) { return airFree(tgparm); } int tenGradientCheck(Nrrd *ngrad, int type, int minnum) { char me[]="tenGradientCheck", err[AIR_STRLEN_MED]; if (nrrdCheck(ngrad)) { sprintf(err, "%s: basic validity check failed", me); biffMove(TEN, err, NRRD); return 1; } if (!( 3 == ngrad->axis[0].size && 2 == ngrad->dim )) { sprintf(err, "%s: need a 3xN 2-D array (not a %dx? %d-D array)", me, ngrad->axis[0].size, ngrad->dim); biffAdd(TEN, err); return 1; } if (nrrdTypeUnknown != type && type != ngrad->type) { sprintf(err, "%s: requested type %s but got type %s", me, airEnumStr(nrrdType, type), airEnumStr(nrrdType, ngrad->type)); biffAdd(TEN, err); return 1; } if (!( minnum <= ngrad->axis[1].size )) { sprintf(err, "%s: have only %d gradients, need at least %d", me, ngrad->axis[1].size, minnum); biffAdd(TEN, err); return 1; } return 0; } /* ******** tenGradientRandom ** ** generates num random unit vectors of type double */ int tenGradientRandom(Nrrd *ngrad, int num, int srand) { char me[]="tenGradientRandom", err[AIR_STRLEN_MED]; double *grad, len; int gi; if (nrrdMaybeAlloc(ngrad, nrrdTypeDouble, 2, 3, num)) { sprintf(err, "%s: couldn't allocate output", me); biffMove(TEN, err, NRRD); return 1; } if (srand) { airSrand(); } grad = (double*)(ngrad->data); for (gi=0; gi<num; gi++) { do { grad[0] = AIR_AFFINE(0, airRand(), 1, -1, 1); grad[1] = AIR_AFFINE(0, airRand(), 1, -1, 1); grad[2] = AIR_AFFINE(0, airRand(), 1, -1, 1); len = ELL_3V_LEN(grad); } while (len > 1 || !len); ELL_3V_SCALE(grad, 1.0/len, grad); grad += 3; } return 0; } /* ******** tenGradientJitter ** ** moves all gradients by amount dist on tangent plane, in a random ** direction, and then renormalizes */ int tenGradientJitter(Nrrd *nout, Nrrd *nin, double dist) { char me[]="tenGradientJitter", err[AIR_STRLEN_MED]; double *grad, perp0[3], perp1[3], len, theta, cc, ss; int gi; if (nrrdConvert(nout, nin, nrrdTypeDouble)) { sprintf(err, "%s: trouble converting input to double", me); biffMove(TEN, err, NRRD); return 1; } if (tenGradientCheck(nout, nrrdTypeDouble, 3)) { sprintf(err, "%s: didn't get valid gradients", me); biffAdd(TEN, err); return 1; } grad = (double*)(nout->data); for (gi=0; gi<nout->axis[1].size; gi++) { ELL_3V_NORM(grad, grad, len); ell_3v_perp_d(perp0, grad); ELL_3V_CROSS(perp1, perp0, grad); theta = AIR_AFFINE(0, airRand(), 1, 0, 2*AIR_PI); cc = dist*cos(theta); ss = dist*sin(theta); ELL_3V_SCALE_ADD3(grad, 1.0, grad, cc, perp0, ss, perp1); ELL_3V_NORM(grad, grad, len); grad += 3; } return 0; } void _tenGradientChangeFind(Nrrd *ndvdt, Nrrd *ndpdt, Nrrd *nvel, Nrrd *npos, tenGradientParm *tgparm) { double *dvdt, *dpdt, *vel, *pos, qq, force[3], ff[3], pdir[3], mdir[3], plen, mlen, prep, mrep; int num, ii, jj; dvdt = (double *)(ndvdt->data); dpdt = (double *)(ndpdt->data); vel = (double *)(nvel->data); pos = (double *)(npos->data); num = ndvdt->axis[1].size; qq = (tgparm->charge)*(tgparm->charge); for (ii=0; ii<num; ii++) { /* find forces acting on ii from position of all other pairs jj */ ELL_3V_SET(force, 0, 0, 0); for (jj=0; jj<num; jj++) { if (ii == jj) { continue; } ELL_3V_SUB(pdir, pos + 3*ii, pos + 3*jj); ELL_3V_NORM(pdir, pdir, plen); prep = qq/(plen*plen); if (tgparm->single) { mrep = 0; ELL_3V_SET(mdir, 0, 0, 0); } else { ELL_3V_ADD2(mdir, pos + 3*ii, pos + 3*jj); ELL_3V_NORM(mdir, mdir, mlen); mrep = qq/(mlen*mlen); } ELL_3V_SCALE_ADD3(ff, prep, pdir, mrep, mdir, -tgparm->drag, vel + 3*ii); ELL_3V_ADD2(force, force, ff); } ELL_3V_SCALE(dvdt + 3*ii, 1.0/tgparm->mass, force); ELL_3V_COPY(dpdt + 3*ii, vel + 3*ii); } return; } void _tenGradientChangeApply(Nrrd *nvel1, Nrrd *npos1, Nrrd *ndvdt, Nrrd *ndpdt, Nrrd *nvel0, Nrrd *npos0, tenGradientParm *tgparm, double amount) { double *dvdt, *dpdt, *vel0, *pos0, *vel1, *pos1, len, dot; int ii, num; dvdt = (double *)(ndvdt->data); dpdt = (double *)(ndpdt->data); vel0 = (double *)(nvel0->data); pos0 = (double *)(npos0->data); vel1 = (double *)(nvel1->data); pos1 = (double *)(npos1->data); num = ndvdt->axis[1].size; for (ii=0; ii<num; ii++) { ELL_3V_SCALE_ADD2(vel1, 1.0, vel0, amount*tgparm->dt, dvdt); ELL_3V_SCALE_ADD2(pos1, 1.0, pos0, amount*tgparm->dt, dpdt); ELL_3V_NORM(pos1, pos1, len); dot = ELL_3V_DOT(vel1, pos1); ELL_3V_SCALE_ADD2(vel1, 1.0, vel1, -dot, pos1); vel1 += 3; pos1 += 3; vel0 += 3; pos0 += 3; dvdt += 3; dpdt += 3; } return; } double _tenGradientMeanVelocity(Nrrd *nvel) { double *vel, mv; int ii, num; vel = (double*)(nvel->data); num = nvel->axis[1].size; mv = 0; for (ii=0; ii<num; ii++) { mv += ELL_3V_LEN(vel + 3*ii); } mv /= num; return mv; } /* ******** tenGradientDistribute ** ** takes the given list of gradients, normalizes their lengths, optionally jitters ** their positions, does point repulsion, and then selects a combination of ** directions with minimum vector sum. */ int tenGradientDistribute(Nrrd *nout, Nrrd *nin, tenGradientParm *tgparm) { char me[]="tenGradientDistribute", err[AIR_STRLEN_MED], *serr, filename[AIR_STRLEN_SMALL]; int gi, iter; airArray *mop; Nrrd *nvel, *npos, *nveltmp, *npostmp, *ndvdt, *ndpdt; double *grad, len, meanVelocity; if (!nout || tenGradientCheck(nin, nrrdTypeUnknown, 2) || !tgparm) { sprintf(err, "%s: got NULL pointer or invalid input", me); biffAdd(TEN, err); return 1; } if (nrrdConvert(nout, nin, nrrdTypeDouble)) { sprintf(err, "%s: can't initialize output with input", me); biffMove(TEN, err, NRRD); return 1; } grad = (double*)(nout->data); for (gi=0; gi<nout->axis[1].size; gi++) { ELL_3V_NORM(grad, grad, len); grad += 3; } if (tgparm->jitter) { if (tenGradientJitter(nout, nout, tgparm->jitter)) { sprintf(err, "%s: problem jittering input", me); biffAdd(TEN, err); return 1; } } mop = airMopNew(); ndvdt = nrrdNew(); ndpdt = nrrdNew(); nvel = nrrdNew(); npos = nrrdNew(); nveltmp = nrrdNew(); npostmp = nrrdNew(); airMopAdd(mop, ndvdt, (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, ndpdt, (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, nvel, (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, npos, (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, nveltmp, (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, npostmp, (airMopper)nrrdNuke, airMopAlways); if (nrrdCopy(ndvdt, nout) || nrrdCopy(ndpdt, nout) || nrrdCopy(nvel, nout) || nrrdCopy(npos, nout) || nrrdCopy(nveltmp, nout) || nrrdCopy(npostmp, nout)) { sprintf(err, "%s: trouble allocating temp buffers", me); biffMove(TEN, err, NRRD); airMopError(mop); return 1; } /* while mean velocity is small: - compute forces based on positions and velocities - compute change in velocity (by f=ma --> a=f/m) - compute change in position (by definition) - apply HALF those changes to create temp world - compute forces based on positions and velocities - compute change in velocity (by f=ma) - compute change in position (by definition) - apply those changes to the real world */ /* npos is already initialized (via nrrdCopy) */ memset(nvel->data, 0, nrrdElementSize(nvel)*nrrdElementNumber(nvel)); meanVelocity = _tenGradientMeanVelocity(nvel); for (iter=0; (iter < tgparm->minIteration || (iter < tgparm->maxIteration && meanVelocity > tgparm->minVelocity)); iter++) { _tenGradientChangeFind(ndvdt, ndpdt, nvel, npos, tgparm); _tenGradientChangeApply(nveltmp, npostmp, ndvdt, ndpdt, nvel, npos, tgparm, 0.5); _tenGradientChangeFind(ndvdt, ndpdt, nveltmp, npostmp, tgparm); _tenGradientChangeApply(nvel, npos, ndvdt, ndpdt, nvel, npos, tgparm, 1.0); meanVelocity = _tenGradientMeanVelocity(nvel); if (tgparm->snap) { if (!(iter % tgparm->snap)) { sprintf(filename, "%05d.nrrd", iter/tgparm->snap); fprintf(stderr, "%s: %d: meanVelocity = %g; saving %s\n", me, iter, meanVelocity, filename); if (nrrdSave(filename, npos, NULL)) { serr = biffGetDone(NRRD); fprintf(stderr, "%s: iter=%d, couldn't save snapshot:\n%s" "continuing ...\n", me, iter, serr); free(serr); } } } else { if (!(iter % 25)) { fprintf(stderr, "%s: %d: meanVelocity = %g\n", me, iter, meanVelocity); } } } /* select output gradients - either do the trivial thing - or run through 2^(#grads) to find one with maximum covariance print covariance matrix eigenvalues */ nrrdCopy(nout, npos); airMopOkay(mop); return 0; } int tenGradientGenerate(Nrrd *nout, int num, tenGradientParm *tgparm) { char me[]="tenGradientGenerate", err[AIR_STRLEN_MED]; Nrrd *nin; airArray *mop; if (!(nout && tgparm)) { sprintf(err, "%s: got NULL pointer", me); biffAdd(TEN, err); return 1; } if (!( num >= 3 )) { sprintf(err, "%s: can generate at minimum 3 gradient directions (not %d)", me, num); biffAdd(TEN, err); return 1; } mop = airMopNew(); nin = nrrdNew(); airMopAdd(mop, nin, (airMopper)nrrdNuke, airMopAlways); if (tenGradientRandom(nin, num, tgparm->srand) || tenGradientDistribute(nout, nin, tgparm)) { sprintf(err, "%s: trouble", me); biffAdd(TEN, err); airMopError(mop); return 1; } airMopOkay(mop); return 0; } |
|
From: <kin...@us...> - 2004-02-27 10:32:33
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13768 Modified Files: GNUmakefile chan.c epireg.c miscTen.c ten.h tendGrads.c Log Message: added tenGradientGenerate and tenGradientDistributed, which are accessed via "tend grads" Index: GNUmakefile =================================================================== RCS file: /cvsroot/teem/teem/src/ten/GNUmakefile,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** GNUmakefile 26 Feb 2004 18:42:23 -0000 1.37 --- GNUmakefile 27 Feb 2004 10:23:55 -0000 1.38 *************** *** 47,51 **** $(L).PUBLIC_HEADERS = ten.h tenMacros.h $(L).PRIVATE_HEADERS = privateTen.h ! $(L).OBJS = tensor.o chan.o aniso.o glyph.o enumsTen.o miscTen.o mod.o \ tenGage.o fiberMethods.o fiber.o epireg.o defaultsTen.o bimod.o \ tendFlotsam.o tendGrads.o tendAnplot.o tendAnvol.o tendEval.o \ --- 47,51 ---- $(L).PUBLIC_HEADERS = ten.h tenMacros.h $(L).PRIVATE_HEADERS = privateTen.h ! $(L).OBJS = tensor.o chan.o aniso.o glyph.o enumsTen.o grads.o miscTen.o mod.o \ tenGage.o fiberMethods.o fiber.o epireg.o defaultsTen.o bimod.o \ tendFlotsam.o tendGrads.o tendAnplot.o tendAnvol.o tendEval.o \ Index: chan.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/chan.c,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** chan.c 7 Jan 2004 15:34:31 -0000 1.29 --- chan.c 27 Feb 2004 10:23:56 -0000 1.30 *************** *** 44,48 **** airArray *mop; ! if (!(nbmat && _ngrad && !tenGradCheck(_ngrad))) { sprintf(err, "%s: got NULL pointer or invalid arg", me); biffAdd(TEN, err); return 1; --- 44,48 ---- airArray *mop; ! if (!(nbmat && _ngrad && !tenGradientCheck(_ngrad, nrrdTypeUnknown, 1))) { sprintf(err, "%s: got NULL pointer or invalid arg", me); biffAdd(TEN, err); return 1; Index: epireg.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/epireg.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** epireg.c 16 Jan 2004 17:35:12 -0000 1.24 --- epireg.c 27 Feb 2004 10:23:56 -0000 1.25 *************** *** 60,64 **** biffAdd(TEN, err); return 1; } ! if (tenGradCheck(ngrad)) { sprintf(err, "%s: problem with given gradient list", me); biffAdd(TEN, err); return 1; --- 60,64 ---- biffAdd(TEN, err); return 1; } ! if (tenGradientCheck(ngrad, nrrdTypeUnknown, 6 /* <-- HEY: not sure */)) { sprintf(err, "%s: problem with given gradient list", me); biffAdd(TEN, err); return 1; Index: miscTen.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/miscTen.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** miscTen.c 7 Jan 2004 15:34:31 -0000 1.21 --- miscTen.c 27 Feb 2004 10:23:56 -0000 1.22 *************** *** 183,208 **** int - tenGradCheck(Nrrd *ngrad) { - char me[]="tenGradCheck", err[AIR_STRLEN_MED]; - - if (nrrdCheck(ngrad)) { - sprintf(err, "%s: basic validity check failed", me); - biffMove(TEN, err, NRRD); return 1; - } - if (!( 3 == ngrad->axis[0].size && 2 == ngrad->dim )) { - sprintf(err, "%s: need a 3xN 2-D array (not a %dxN %d-D array)", - me, ngrad->axis[0].size, ngrad->dim); - biffAdd(TEN, err); return 1; - } - if (!( 6 <= ngrad->axis[1].size )) { - sprintf(err, "%s: have only %d gradients, need at least 6", - me, ngrad->axis[1].size); - biffAdd(TEN, err); return 1; - } - - return 0; - } - - int tenBMatrixCheck(Nrrd *nbmat) { char me[]="tenBMatrixCheck", err[AIR_STRLEN_MED]; --- 183,186 ---- Index: ten.h =================================================================== RCS file: /cvsroot/teem/teem/src/ten/ten.h,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -d -r1.76 -r1.77 *** ten.h 26 Feb 2004 18:42:23 -0000 1.76 --- ten.h 27 Feb 2004 10:23:56 -0000 1.77 *************** *** 380,384 **** minVelocity, jitter; ! int snap, single, minIteration, maxIteration; } tenGradientParm; --- 380,384 ---- minVelocity, jitter; ! int srand, snap, single, minIteration, maxIteration; } tenGradientParm; *************** *** 395,398 **** --- 395,405 ---- /* grads.c */ + TEEM_API tenGradientParm *tenGradientParmNew(void); + TEEM_API tenGradientParm *tenGradientParmNix(tenGradientParm *tgparm); + TEEM_API int tenGradientCheck(Nrrd *ngrad, int type, int minnum); + TEEM_API int tenGradientRandom(Nrrd *ngrad, int num, int srand); + TEEM_API int tenGradientJitter(Nrrd *nout, Nrrd *nin, double dist); + TEEM_API int tenGradientDistribute(Nrrd *nout, Nrrd *nin, tenGradientParm *tgparm); + TEEM_API int tenGradientGenerate(Nrrd *nout, int num, tenGradientParm *tgparm); /* enumsTen.c */ *************** *** 457,461 **** TEEM_API int tenEvqVolume(Nrrd *nout, Nrrd *nin, int which, int aniso, int scaleByAniso); - TEEM_API int tenGradCheck(Nrrd *ngrad); TEEM_API int tenBMatrixCheck(Nrrd *nbmat); TEEM_API int _tenFindValley(float *valP, Nrrd *nhist, float tweak); --- 464,467 ---- Index: tendGrads.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tendGrads.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** tendGrads.c 26 Feb 2004 18:44:50 -0000 1.1 --- tendGrads.c 27 Feb 2004 10:23:56 -0000 1.2 *************** *** 25,29 **** (INFO ", based on a simulation of anti-podal point pairs repelling each other " ! "on the unit sphere surface. "); int --- 25,30 ---- (INFO ", based on a simulation of anti-podal point pairs repelling each other " ! "on the unit sphere surface. This can either distribute more uniformly a given " ! "set of gradients, or it can make a new distribution from scratch. "); int *************** *** 34,46 **** airArray *mop; ! Nrrd *ngrad, *nout; char *outS; ! ! hestOptAdd(&hopt, "i", "grads", airTypeOther, 1, 1, &ngrad, NULL, ! "array of gradient directions", NULL, NULL, nrrdHestNrrd); ! hestOptAdd(&hopt, "o", "nout", airTypeString, 1, 1, &outS, "-", ! "output B matrix"); mop = airMopNew(); airMopAdd(mop, hopt, (airMopper)hestOptFree, airMopAlways); USAGE(_tend_gradsInfoL); --- 35,76 ---- airArray *mop; ! int num, E, nosrand; ! Nrrd *nin, *nout; char *outS; ! tenGradientParm *tgparm; mop = airMopNew(); + tgparm = tenGradientParmNew(); + airMopAdd(mop, tgparm, (airMopper)tenGradientParmNix, airMopAlways); + + hestOptAdd(&hopt, "n", "# dir", airTypeInt, 1, 1, &num, "6", + "desired number of diffusion gradient directions"); + hestOptAdd(&hopt, "i", "grads", airTypeOther, 1, 1, &nin, "", + "initial gradient directions to start with, instead " + "of default random initial directions (overrides \"-n\")", + NULL, NULL, nrrdHestNrrd); + hestOptAdd(&hopt, "nosrand", NULL, airTypeInt, 0, 0, &nosrand, NULL, + "do NOT call srand() to initialize random number generator"); + hestOptAdd(&hopt, "dt", "dt", airTypeDouble, 1, 1, &(tgparm->dt), "0.05", + "time increment in solver"); + hestOptAdd(&hopt, "drag", "drag", airTypeDouble, 1, 1, &(tgparm->drag), "0.01", + "viscous drag, to keep things stable"); + hestOptAdd(&hopt, "charge", "charge", airTypeDouble, 1, 1, &(tgparm->charge), "0.2", + "amount of charge on each particle"); + hestOptAdd(&hopt, "single", NULL, airTypeInt, 0, 0, &(tgparm->single), NULL, + "instead of the default behavior of tracking a pair of " + "antipodal points (appropriate for determining DWI gradients), " + "use only single points (appropriate for who knows what)."); + hestOptAdd(&hopt, "snap", "interval", airTypeInt, 1, 1, &(tgparm->snap), "0", + "specifies an interval between which snapshots of the point " + "positions should be saved out. By default (not using this " + "option), there is no such snapshot behavior"); + hestOptAdd(&hopt, "jitter", "jitter", airTypeDouble, 1, 1, &(tgparm->jitter), "0.05", + "amount by which to perturb points when given an input nrrd"); + hestOptAdd(&hopt, "maxiter", "# iters", airTypeInt, 1, 1, + &(tgparm->maxIteration), "1000000", + "max number of iterations for which to run the simulation"); + hestOptAdd(&hopt, "o", "filename", airTypeString, 1, 1, &outS, "-", + "file to write output nrrd to"); airMopAdd(mop, hopt, (airMopper)hestOptFree, airMopAlways); USAGE(_tend_gradsInfoL); *************** *** 50,53 **** --- 80,92 ---- airMopAdd(mop, nout, (airMopper)nrrdNuke, airMopAlways); + tgparm->srand = !nosrand; + E = (nin + ? tenGradientDistribute(nout, nin, tgparm) + : tenGradientGenerate(nout, num, tgparm)); + if (E) { + airMopAdd(mop, err=biffGetDone(TEN), airFree, airMopAlways); + fprintf(stderr, "%s: trouble making distribution:\n%s\n", me, err); + airMopError(mop); return 1; + } if (nrrdSave(outS, nout, NULL)) { |
|
From: <kin...@us...> - 2004-02-27 06:17:05
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5823/ten Modified Files: glyph.c Log Message: fixed handling of glyphParm->sliceBias in combination with negative sliceGamma Index: glyph.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/glyph.c,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** glyph.c 26 Feb 2004 18:42:23 -0000 1.34 --- glyph.c 27 Feb 2004 06:08:35 -0000 1.35 *************** *** 285,293 **** continue; sliceGray = aniso[parm->sliceAnisoType]; - sliceGray = AIR_AFFINE(0, sliceGray, 1, parm->sliceBias, 1); } if (parm->sliceGamma > 0) { sliceGray = pow(sliceGray, 1.0/parm->sliceGamma); } else { sliceGray = 1.0 - pow(sliceGray, -1.0/parm->sliceGamma); } --- 285,294 ---- continue; sliceGray = aniso[parm->sliceAnisoType]; } if (parm->sliceGamma > 0) { + sliceGray = AIR_AFFINE(0, sliceGray, 1, parm->sliceBias, 1); sliceGray = pow(sliceGray, 1.0/parm->sliceGamma); } else { + sliceGray = AIR_AFFINE(0, sliceGray, 1, 0, 1-parm->sliceBias); sliceGray = 1.0 - pow(sliceGray, -1.0/parm->sliceGamma); } |
|
From: <kin...@us...> - 2004-02-27 06:13:47
|
Update of /cvsroot/teem/teem/src/nrrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5350/nrrd Modified Files: apply1D.c Log Message: more comments and minor edits. TEAT approved. Index: apply1D.c =================================================================== RCS file: /cvsroot/teem/teem/src/nrrd/apply1D.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** apply1D.c 26 Feb 2004 20:59:45 -0000 1.21 --- apply1D.c 27 Feb 2004 06:05:16 -0000 1.22 *************** *** 859,869 **** ******** nrrdApply1DSubstitution ** ! ** A "subst" is a substitution table, i.e. a list of pairs that describes ! ** what values should be substituted with what (substitution rules). ! ** The output is a copy of the input with values substituted using this table. */ int ! nrrdApply1DSubstitution(Nrrd *nout, const Nrrd *nin, const Nrrd *nsubst) ! { char me[]="nrrdApply1DSubstitution", err[AIR_STRLEN_MED]; double (*lup)(const void *, size_t); --- 859,877 ---- ******** nrrdApply1DSubstitution ** ! ** A "subst" is a substitution table, i.e. a list of pairs that ! ** describes what values should be substituted with what (substitution ! ** rules). So, nsubst must be a scalar 2xN array. The output is a ! ** copy of the input with values substituted using this table. ! ** ! ** Unlike with lookup tables and maps (irregular and regular), we ! ** aren't at liberty to change the dimensionality of the data (can't ! ** substitute a grayscale with a color). The ability to apply ! ** substitutions to non-scalar data will be in a different function. ! ** Also unlike lookup tables and maps, the output type is the SAME as ! ** the input type; the output does NOT inherit the type of the ! ** substitution */ int ! nrrdApply1DSubstitution(Nrrd *nout, const Nrrd *nin, const Nrrd *nsubst) { char me[]="nrrdApply1DSubstitution", err[AIR_STRLEN_MED]; double (*lup)(const void *, size_t); *************** *** 885,889 **** } if (2 != nsubst->dim) { ! sprintf(err, "%s: substitution table hasize to be 2 dimensional, not %d", me, nsubst->dim); biffAdd(NRRD, err); return 1; --- 893,897 ---- } if (2 != nsubst->dim) { ! sprintf(err, "%s: substitution table has to be 2-D, not %d-D", me, nsubst->dim); biffAdd(NRRD, err); return 1; *************** *** 891,895 **** nrrdAxisInfoGet(nsubst, nrrdAxisInfoSize, &asize0, &asize1); if (2 != asize0) { ! sprintf(err, "%s: substitution table hasize to be 2xN, not %dxN", me, asize0); biffAdd(NRRD, err); return 1; --- 899,903 ---- nrrdAxisInfoGet(nsubst, nrrdAxisInfoSize, &asize0, &asize1); if (2 != asize0) { ! sprintf(err, "%s: substitution table has to be 2xN, not %dxN", me, asize0); biffAdd(NRRD, err); return 1; *************** *** 909,913 **** changed = AIR_FALSE; for (jj=0; jj<asize1; jj++) { ! sval = slup(nsubst->data, jj*2); if (val == sval) { val = slup(nsubst->data, jj*2+1); --- 917,921 ---- changed = AIR_FALSE; for (jj=0; jj<asize1; jj++) { ! sval = slup(nsubst->data, jj*2+0); if (val == sval) { val = slup(nsubst->data, jj*2+1); |
|
From: <kin...@us...> - 2004-02-27 06:13:47
|
Update of /cvsroot/teem/teem/src/unrrdu In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5350/unrrdu Modified Files: subst.c Log Message: more comments and minor edits. TEAT approved. Index: subst.c =================================================================== RCS file: /cvsroot/teem/teem/src/unrrdu/subst.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** subst.c 26 Feb 2004 20:59:45 -0000 1.1 --- subst.c 27 Feb 2004 06:05:18 -0000 1.2 *************** *** 25,30 **** (INFO " (itself represented as a nrrd). The substitution table " ! "has to be a 2 by N table containing a list of pairs aka. " ! "substitution rules."); int --- 25,33 ---- (INFO " (itself represented as a nrrd). The substitution table " ! "is a 2-by-N table: a list of pairs giving the old value (to replace) " ! "and the the new value (to change to), in that order. A plain text file " ! "makes this easy. Unlike with \"unu lut\", \"unu rmap\", and \"unu imap\", " ! "the output type is the same as the input type, rather than the type of " ! "the lut or map. "); int |
|
From: <ik...@us...> - 2004-02-26 21:07:58
|
Update of /cvsroot/teem/teem/src/unrrdu In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26791/unrrdu Modified Files: GNUmakefile unrrdu.h Added Files: subst.c Log Message: added nrrdApply1DSubstitution and unu subst ... waiting for TEAT approval --- NEW FILE: subst.c --- /* teem: Gordon Kindlmann's research software Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "unrrdu.h" #include "privateUnrrdu.h" #define INFO "Map nrrd through univariate substitution table" char *_unrrdu_substInfoL = (INFO " (itself represented as a nrrd). The substitution table " "has to be a 2 by N table containing a list of pairs aka. " "substitution rules."); int unrrdu_substMain(int argc, char **argv, char *me, hestParm *hparm) { hestOpt *opt = NULL; char *out, *err; int pret; Nrrd *nin, *nsubst, *nout; airArray *mop; hestOptAdd(&opt, "s", "subst", airTypeOther, 1, 1, &nsubst, NULL, "substition table to map input nrrd through", NULL, NULL, nrrdHestNrrd); OPT_ADD_NIN(nin, "input nrrd"); OPT_ADD_NOUT(out, "output nrrd"); mop = airMopNew(); airMopAdd(mop, opt, (airMopper)hestOptFree, airMopAlways); USAGE(_unrrdu_substInfoL); PARSE(); airMopAdd(mop, opt, (airMopper)hestParseFree, airMopAlways); nout = nrrdNew(); airMopAdd(mop, nout, (airMopper)nrrdNuke, airMopAlways); if (nrrdApply1DSubstitution(nout, nin, nsubst)) { airMopAdd(mop, err = biffGetDone(NRRD), airFree, airMopAlways); fprintf(stderr, "%s: trouble applying SUBST:\n%s", me, err); airMopError(mop); return 1; } SAVE(out, nout, NULL); airMopOkay(mop); return 0; } UNRRDU_CMD(subst, INFO); Index: GNUmakefile =================================================================== RCS file: /cvsroot/teem/teem/src/unrrdu/GNUmakefile,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** GNUmakefile 7 Jan 2004 15:34:31 -0000 1.20 --- GNUmakefile 26 Feb 2004 20:59:45 -0000 1.21 *************** *** 56,60 **** unquantize.o block.o unblock.o project.o swap.o join.o dhisto.o \ jhisto.o dice.o heq.o histax.o gamma.o make.o 1op.o 2op.o 3op.o \ ! lut.o rmap.o imap.o save.o head.o data.o splice.o inset.o \ axinsert.o axdelete.o axinfo.o ccfind.o ccadj.o ccmerge.o \ ccsettle.o about.o axsplit.o axmerge.o --- 56,60 ---- unquantize.o block.o unblock.o project.o swap.o join.o dhisto.o \ jhisto.o dice.o heq.o histax.o gamma.o make.o 1op.o 2op.o 3op.o \ ! lut.o subst.o rmap.o imap.o save.o head.o data.o splice.o inset.o \ axinsert.o axdelete.o axinfo.o ccfind.o ccadj.o ccmerge.o \ ccsettle.o about.o axsplit.o axmerge.o Index: unrrdu.h =================================================================== RCS file: /cvsroot/teem/teem/src/unrrdu/unrrdu.h,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** unrrdu.h 19 Feb 2004 03:44:06 -0000 1.25 --- unrrdu.h 26 Feb 2004 20:59:45 -0000 1.26 *************** *** 129,132 **** --- 129,133 ---- F(3op) \ F(lut) \ + F(subst) \ F(rmap) \ F(imap) \ |
|
From: <ik...@us...> - 2004-02-26 21:07:57
|
Update of /cvsroot/teem/teem/src/nrrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26791/nrrd Modified Files: apply1D.c nrrd.h Log Message: added nrrdApply1DSubstitution and unu subst ... waiting for TEAT approval Index: apply1D.c =================================================================== RCS file: /cvsroot/teem/teem/src/nrrd/apply1D.c,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** apply1D.c 7 Jan 2004 15:34:30 -0000 1.20 --- apply1D.c 26 Feb 2004 20:59:45 -0000 1.21 *************** *** 855,856 **** --- 855,922 ---- return 0; } + + /* + ******** nrrdApply1DSubstitution + ** + ** A "subst" is a substitution table, i.e. a list of pairs that describes + ** what values should be substituted with what (substitution rules). + ** The output is a copy of the input with values substituted using this table. + */ + int + nrrdApply1DSubstitution(Nrrd *nout, const Nrrd *nin, const Nrrd *nsubst) + { + char me[]="nrrdApply1DSubstitution", err[AIR_STRLEN_MED]; + double (*lup)(const void *, size_t); + double (*slup)(const void *, size_t); + double (*ins)(void *, size_t, double); + double val, sval; + size_t ii, num; + int jj, asize0, asize1; + int changed; + + if (!(nout && nsubst && nin)) { + sprintf(err, "%s: got NULL pointer", me); + biffAdd(NRRD, err); return 1; + } + if (nrrdTypeBlock == nin->type || nrrdTypeBlock == nsubst->type) { + sprintf(err, "%s: input or substitution type is %s, need scalar", + me, airEnumStr(nrrdType, nrrdTypeBlock)); + biffAdd(NRRD, err); return 1; + } + if (2 != nsubst->dim) { + sprintf(err, "%s: substitution table hasize to be 2 dimensional, not %d", + me, nsubst->dim); + biffAdd(NRRD, err); return 1; + } + nrrdAxisInfoGet(nsubst, nrrdAxisInfoSize, &asize0, &asize1); + if (2 != asize0) { + sprintf(err, "%s: substitution table hasize to be 2xN, not %dxN", + me, asize0); + biffAdd(NRRD, err); return 1; + } + if (nout != nin) { + if (nrrdCopy(nout, nin)) { + sprintf(err, "%s: couldn't initialize by copy to output", me); + biffAdd(NRRD, err); return 1; + } + } + lup = nrrdDLookup[nout->type]; + slup = nrrdDLookup[nsubst->type]; + ins = nrrdDInsert[nout->type]; + num = nrrdElementNumber(nout); + for (ii=0; ii<num; ii++) { + val = lup(nout->data, ii); + changed = AIR_FALSE; + for (jj=0; jj<asize1; jj++) { + sval = slup(nsubst->data, jj*2); + if (val == sval) { + val = slup(nsubst->data, jj*2+1); + changed = AIR_TRUE; + } + } + if (changed) { + ins(nout->data, ii, val); + } + } + return 0; + } Index: nrrd.h =================================================================== RCS file: /cvsroot/teem/teem/src/nrrd/nrrd.h,v retrieving revision 1.133 retrieving revision 1.134 diff -C2 -d -r1.133 -r1.134 *** nrrd.h 14 Feb 2004 19:14:31 -0000 1.133 --- nrrd.h 26 Feb 2004 20:59:45 -0000 1.134 *************** *** 716,719 **** --- 716,721 ---- const Nrrd *nmap, const Nrrd *nacl, int typeOut, int rescale); + TEEM_API int nrrdApply1DSubstitution(Nrrd *nout, + const Nrrd *nin, const Nrrd *nsubst); /******** sampling, slicing, cropping */ |
|
From: <kin...@us...> - 2004-02-26 18:53:00
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29162 Added Files: tendGrads.c Log Message: started added tend grads stuff --- NEW FILE: tendGrads.c --- /* teem: Gordon Kindlmann's research software Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ten.h" #include "privateTen.h" #define INFO "Calculate gradient directions for DWI acquisition" char *_tend_gradsInfoL = (INFO ", based on a simulation of anti-podal point pairs repelling each other " "on the unit sphere surface. "); int tend_gradsMain(int argc, char **argv, char *me, hestParm *hparm) { int pret; hestOpt *hopt = NULL; char *perr, *err; airArray *mop; Nrrd *ngrad, *nout; char *outS; hestOptAdd(&hopt, "i", "grads", airTypeOther, 1, 1, &ngrad, NULL, "array of gradient directions", NULL, NULL, nrrdHestNrrd); hestOptAdd(&hopt, "o", "nout", airTypeString, 1, 1, &outS, "-", "output B matrix"); mop = airMopNew(); airMopAdd(mop, hopt, (airMopper)hestOptFree, airMopAlways); USAGE(_tend_gradsInfoL); PARSE(); airMopAdd(mop, hopt, (airMopper)hestParseFree, airMopAlways); nout = nrrdNew(); airMopAdd(mop, nout, (airMopper)nrrdNuke, airMopAlways); if (nrrdSave(outS, nout, NULL)) { airMopAdd(mop, err=biffGetDone(NRRD), airFree, airMopAlways); fprintf(stderr, "%s: trouble writing:\n%s\n", me, err); airMopError(mop); return 1; } airMopOkay(mop); return 0; } unrrduCmd tend_gradsCmd = { "grads", INFO, tend_gradsMain }; |
|
From: <kin...@us...> - 2004-02-26 18:50:30
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28557 Modified Files: GNUmakefile glyph.c ten.h tendGlyph.c Log Message: added sliceBias to handling of slice gray levels, started added tend grads stuff Index: GNUmakefile =================================================================== RCS file: /cvsroot/teem/teem/src/ten/GNUmakefile,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** GNUmakefile 7 Jan 2004 15:34:31 -0000 1.36 --- GNUmakefile 26 Feb 2004 18:42:23 -0000 1.37 *************** *** 49,53 **** $(L).OBJS = tensor.o chan.o aniso.o glyph.o enumsTen.o miscTen.o mod.o \ tenGage.o fiberMethods.o fiber.o epireg.o defaultsTen.o bimod.o \ ! tendFlotsam.o tendAnplot.o tendAnvol.o tendEval.o \ tendEvec.o tendSten.o tendExpand.o tendEvq.o tendPoint.o \ tendAnhist.o tendMake.o tendSatin.o tendShrink.o tendGlyph.o \ --- 49,53 ---- $(L).OBJS = tensor.o chan.o aniso.o glyph.o enumsTen.o miscTen.o mod.o \ tenGage.o fiberMethods.o fiber.o epireg.o defaultsTen.o bimod.o \ ! tendFlotsam.o tendGrads.o tendAnplot.o tendAnvol.o tendEval.o \ tendEvec.o tendSten.o tendExpand.o tendEvq.o tendPoint.o \ tendAnhist.o tendMake.o tendSatin.o tendShrink.o tendGlyph.o \ Index: glyph.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/glyph.c,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** glyph.c 19 Feb 2004 06:45:13 -0000 1.33 --- glyph.c 26 Feb 2004 18:42:23 -0000 1.34 *************** *** 52,55 **** --- 52,56 ---- parm->sliceAnisoType = tenAnisoUnknown; parm->sliceOffset = 0.0; + parm->sliceBias = 0.05; parm->sliceGamma = 1.0; } *************** *** 284,290 **** continue; sliceGray = aniso[parm->sliceAnisoType]; ! /* HEY: look, a visualization parameter (0.03) that is not ! exposed anywhere in an API, just super ... */ ! sliceGray = AIR_AFFINE(0, sliceGray, 1, 0.03, 1); } if (parm->sliceGamma > 0) { --- 285,289 ---- continue; sliceGray = aniso[parm->sliceAnisoType]; ! sliceGray = AIR_AFFINE(0, sliceGray, 1, parm->sliceBias, 1); } if (parm->sliceGamma > 0) { Index: ten.h =================================================================== RCS file: /cvsroot/teem/teem/src/ten/ten.h,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -d -r1.75 -r1.76 *** ten.h 23 Feb 2004 06:03:13 -0000 1.75 --- ten.h 26 Feb 2004 18:42:23 -0000 1.76 *************** *** 119,126 **** with glyphs, these are thresholded by confThresh and maskThresh (but not anisoThresh). Things can be lightened up with a ! sliceGamma > 1. The squares will be at their corresponding sample locations, but offset by sliceOffset */ int doSlice, sliceAxis, slicePos, sliceAnisoType; ! float sliceOffset, sliceGamma; } tenGlyphParm; --- 119,127 ---- with glyphs, these are thresholded by confThresh and maskThresh (but not anisoThresh). Things can be lightened up with a ! sliceGamma > 1, after the slice's gray values have been mapped from ! [0,1] to [sliceBias,1]. The squares will be at their corresponding sample locations, but offset by sliceOffset */ int doSlice, sliceAxis, slicePos, sliceAnisoType; ! float sliceOffset, sliceBias, sliceGamma; } tenGlyphParm; *************** *** 367,370 **** --- 368,386 ---- } tenEMBimodalParm; + /* + ******** struct tenGradientParm + ** + ** all parameters for repulsion-based generation of gradient directions + */ + typedef struct { + double mass, + charge, + drag, + dt, + minVelocity, + jitter; + int snap, single, minIteration, maxIteration; + } tenGradientParm; + /* defaultsTen.c */ TEEM_API const char *tenBiffKey; *************** *** 378,381 **** --- 394,399 ---- TEEM_API double tenDefFiberWPunct; + /* grads.c */ + /* enumsTen.c */ TEEM_API airEnum *tenAniso; *************** *** 401,405 **** TEEM_API int tenShrink(Nrrd *tseven, Nrrd *nconf, Nrrd *tnine); TEEM_API int tenEigensolve(float eval[3], float evec[9], float ten[7]); ! TEEM_API void tenMakeOne(float ten[7], float conf, float eval[3], float evec[9]); TEEM_API int tenMake(Nrrd *nout, Nrrd *nconf, Nrrd *neval, Nrrd *nevec); TEEM_API int tenSlice(Nrrd *nout, Nrrd *nten, int axis, int pos, int dim); --- 419,424 ---- TEEM_API int tenShrink(Nrrd *tseven, Nrrd *nconf, Nrrd *tnine); TEEM_API int tenEigensolve(float eval[3], float evec[9], float ten[7]); ! TEEM_API void tenMakeOne(float ten[7], ! float conf, float eval[3], float evec[9]); TEEM_API int tenMake(Nrrd *nout, Nrrd *nconf, Nrrd *neval, Nrrd *nevec); TEEM_API int tenSlice(Nrrd *nout, Nrrd *nten, int axis, int pos, int dim); *************** *** 460,464 **** /* epireg.c */ ! TEEM_API int tenEpiRegister3D(Nrrd **nout, Nrrd **ndwi, int dwiLen, Nrrd *ngrad, int reference, float bwX, float bwY, float fitFrac, float DWthr, --- 479,484 ---- /* epireg.c */ ! TEEM_API int tenEpiRegister3D(Nrrd **nout, Nrrd **ndwi, ! int dwiLen, Nrrd *ngrad, int reference, float bwX, float bwY, float fitFrac, float DWthr, *************** *** 496,499 **** --- 516,520 ---- /* removed from below (superseded by estim): F(calc) \ */ #define TEND_MAP(F) \ + F(grads) \ F(epireg) \ F(bmat) \ Index: tendGlyph.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tendGlyph.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** tendGlyph.c 19 Feb 2004 03:51:31 -0000 1.24 --- tendGlyph.c 26 Feb 2004 18:42:23 -0000 1.25 *************** *** 163,166 **** --- 163,169 ---- &(gparm->sliceGamma), "1.7", "Gamma to apply to values on slice."); + hestOptAdd(&hopt, "sb", "slice bias", airTypeFloat, 1, 1, + &(gparm->sliceBias), "0.05", + "amount by which to bump up slice gray values prior to gamma."); /* camera */ |
|
From: <kin...@us...> - 2004-02-26 18:49:59
|
Update of /cvsroot/teem/teem/src/bin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28440 Modified Files: miter.c Log Message: fixed bug in handling of volume sizes Index: miter.c =================================================================== RCS file: /cvsroot/teem/teem/src/bin/miter.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** miter.c 26 Feb 2004 06:45:23 -0000 1.24 --- miter.c 26 Feb 2004 18:41:51 -0000 1.25 *************** *** 35,42 **** miteUser *muu; char *me, *errS, *outS, *shadeStr; ! int renorm; int E, Ecode; float ads[3]; double gmc; me = argv[0]; --- 35,43 ---- miteUser *muu; char *me, *errS, *outS, *shadeStr; ! int renorm, baseDim; int E, Ecode; float ads[3]; double gmc; + Nrrd *nin; me = argv[0]; *************** *** 119,122 **** --- 120,138 ---- airMopAdd(mop, hopt, (airMopper)hestParseFree, airMopAlways); + if (muu->nsin) { + nin = muu->nsin; + baseDim = 0; + } else if (muu->nvin) { + nin = muu->nvin; + baseDim = 1; + } else if (muu->ntin) { + nin = muu->ntin; + baseDim = 1; + } else { + fprintf(stderr, "%s: didn't get any volumes to render!\n", me); + airMopError(mop); + return 1; + } + /* finish processing command-line args */ muu->rangeInit[miteRangeKa] = ads[0]; *************** *** 140,145 **** strncpy(muu->shadeStr, shadeStr, AIR_STRLEN_MED-1); muu->shadeStr[AIR_STRLEN_MED-1] = 0; ! nrrdAxisInfoGet_nva(muu->nsin, nrrdAxisInfoSize, muu->hctx->volSize); ! nrrdAxisInfoGet_nva(muu->nsin, nrrdAxisInfoSpacing, muu->hctx->volSpacing); muu->hctx->user = muu; muu->hctx->renderBegin = (hooverRenderBegin_t *)miteRenderBegin; --- 156,165 ---- strncpy(muu->shadeStr, shadeStr, AIR_STRLEN_MED-1); muu->shadeStr[AIR_STRLEN_MED-1] = 0; ! muu->hctx->volSize[0] = nin->axis[baseDim+0].size; ! muu->hctx->volSize[1] = nin->axis[baseDim+1].size; ! muu->hctx->volSize[2] = nin->axis[baseDim+2].size; ! muu->hctx->volSpacing[0] = nin->axis[baseDim+0].spacing; ! muu->hctx->volSpacing[1] = nin->axis[baseDim+1].spacing; ! muu->hctx->volSpacing[2] = nin->axis[baseDim+2].spacing; muu->hctx->user = muu; muu->hctx->renderBegin = (hooverRenderBegin_t *)miteRenderBegin; |
|
From: <kin...@us...> - 2004-02-26 18:49:22
|
Update of /cvsroot/teem/teem/src/mite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28315 Modified Files: txf.c Log Message: typo in error message Index: txf.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/txf.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** txf.c 26 Feb 2004 06:26:10 -0000 1.14 --- txf.c 26 Feb 2004 18:41:14 -0000 1.15 *************** *** 103,107 **** isp->item = airEnumVal(isp->kind->enm, qstr); if (-1 == isp->item) { ! sprintf(err, "%s: couldn't parse \"%s\" as a %s varable", me, qstr, isp->kind->name); biffAdd(MITE, err); airMopError(mop); return 1; --- 103,107 ---- isp->item = airEnumVal(isp->kind->enm, qstr); if (-1 == isp->item) { ! sprintf(err, "%s: couldn't parse \"%s\" as a %s variable", me, qstr, isp->kind->name); biffAdd(MITE, err); airMopError(mop); return 1; |
|
From: <kin...@us...> - 2004-02-26 06:53:07
|
Update of /cvsroot/teem/teem/src/bin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16530/bin Modified Files: miter.c Log Message: fixed stupid warning message about "cant use 1 threads; only using 1" Index: miter.c =================================================================== RCS file: /cvsroot/teem/teem/src/bin/miter.c,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** miter.c 26 Feb 2004 06:26:49 -0000 1.23 --- miter.c 26 Feb 2004 06:45:23 -0000 1.24 *************** *** 151,155 **** muu->hctx->renderEnd = (hooverRenderEnd_t *)miteRenderEnd; ! if (!airThreadCapable) { fprintf(stderr, "%s: This teem not compiled with " "multi-threading support.\n", me); --- 151,155 ---- muu->hctx->renderEnd = (hooverRenderEnd_t *)miteRenderEnd; ! if (!airThreadCapable && 1 != muu->hctx->numThreads) { fprintf(stderr, "%s: This teem not compiled with " "multi-threading support.\n", me); |
|
From: <kin...@us...> - 2004-02-26 06:49:05
|
Update of /cvsroot/teem/teem/src/mite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15761 Added Files: shade.c kindnot.c Log Message: new to mite --- NEW FILE: shade.c --- /* teem: Gordon Kindlmann's research software Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "mite.h" #include "privateMite.h" miteShadeSpec * miteShadeSpecNew(void) { miteShadeSpec *shpec; shpec = (miteShadeSpec *)calloc(1, sizeof(miteShadeSpec)); if (shpec) { shpec->method = miteShadeMethodUnknown; shpec->vec0 = gageItemSpecNew(); shpec->vec1 = gageItemSpecNew(); shpec->scl0 = gageItemSpecNew(); shpec->scl1 = gageItemSpecNew(); if (!( shpec->vec0 && shpec->vec1 && shpec->scl0 && shpec->scl1 )) { return NULL; } } return shpec; } miteShadeSpec * miteShadeSpecNix(miteShadeSpec *shpec) { if (shpec) { shpec->vec0 = gageItemSpecNix(shpec->vec0); shpec->vec1 = gageItemSpecNix(shpec->vec1); shpec->scl0 = gageItemSpecNix(shpec->scl0); shpec->scl1 = gageItemSpecNix(shpec->scl1); AIR_FREE(shpec); } return NULL; } /* ******** miteShadeSpecParse ** ** set up a miteShadeSpec based on a string. Valid forms are: ** ** none ** phong:<vector> ** litten:<vector>,<vector>,<scalar>,<scalar> ** ** where <vector> and <scalar> are specifications of 3-vector and scalar ** parsable by miteVariableParse */ int miteShadeSpecParse(miteShadeSpec *shpec, char *shadeStr) { char me[]="miteShadeSpecParse", err[AIR_STRLEN_MED], *buff, *qstr, *tok, *state; airArray *mop; int ansLength; mop = airMopNew(); if (!( shpec && airStrlen(shadeStr) )) { sprintf(err, "%s: got NULL pointer and/or empty string", me); biffAdd(MITE, err); airMopError(mop); return 1; } buff = airToLower(airStrdup(shadeStr)); if (!buff) { sprintf(err, "%s: couldn't strdup shading spec", me); biffAdd(MITE, err); airMopError(mop); return 1; } airMopAdd(mop, buff, airFree, airMopAlways); shpec->method = miteShadeMethodUnknown; if (!strcmp("none", buff)) { shpec->method = miteShadeMethodNone; } else if (buff == strstr(buff, "phong:")) { shpec->method = miteShadeMethodPhong; qstr = buff + strlen("phong:"); if (miteVariableParse(shpec->vec0, qstr)) { sprintf(err, "%s: couldn't parse \"%s\" as shading vector", me, qstr); biffAdd(MITE, err); airMopError(mop); return 1; } ansLength = shpec->vec0->kind->table[shpec->vec0->item].answerLength; if (3 != ansLength) { sprintf(err, "%s: \"%s\" isn't a vector (answer length is %d, not 3)", me, qstr, ansLength); biffAdd(MITE, err); airMopError(mop); return 1; } shpec->method = miteShadeMethodPhong; } else if (buff == strstr(buff, "litten:")) { qstr = buff + strlen("litten:"); /* ---- first vector */ tok = airStrtok(qstr, ",", &state); if (miteVariableParse(shpec->vec0, tok)) { sprintf(err, "%s: couldn't parse \"%s\" as first lit-tensor vector", me, tok); biffAdd(MITE, err); airMopError(mop); return 1; } ansLength = shpec->vec0->kind->table[shpec->vec0->item].answerLength; if (3 != ansLength) { sprintf(err, "%s: \"%s\" isn't a vector (answer length is %d, not 3)", me, qstr, ansLength); biffAdd(MITE, err); airMopError(mop); return 1; } /* ---- second vector */ tok = airStrtok(qstr, ",", &state); if (miteVariableParse(shpec->vec1, tok)) { sprintf(err, "%s: couldn't parse \"%s\" as second lit-tensor vector", me, tok); biffAdd(MITE, err); airMopError(mop); return 1; } ansLength = shpec->vec1->kind->table[shpec->vec1->item].answerLength; if (3 != ansLength) { sprintf(err, "%s: \"%s\" isn't a vector (answer length is %d, not 3)", me, qstr, ansLength); biffAdd(MITE, err); airMopError(mop); return 1; } /* ---- first scalar */ tok = airStrtok(qstr, ",", &state); if (miteVariableParse(shpec->scl0, tok)) { sprintf(err, "%s: couldn't parse \"%s\" as first lit-tensor scalar", me, tok); biffAdd(MITE, err); airMopError(mop); return 1; } ansLength = shpec->scl0->kind->table[shpec->scl0->item].answerLength; if (1 != ansLength) { sprintf(err, "%s: \"%s\" isn't a scalar (answer length is %d, not 1)", me, qstr, ansLength); biffAdd(MITE, err); airMopError(mop); return 1; } /* ---- second scalar */ tok = airStrtok(qstr, ",", &state); if (miteVariableParse(shpec->scl1, tok)) { sprintf(err, "%s: couldn't parse \"%s\" as second lit-tensor scalar", me, tok); biffAdd(MITE, err); airMopError(mop); return 1; } ansLength = shpec->scl1->kind->table[shpec->scl1->item].answerLength; if (1 != ansLength) { sprintf(err, "%s: \"%s\" isn't a scalar (answer length is %d, not 1)", me, qstr, ansLength); biffAdd(MITE, err); airMopError(mop); return 1; } shpec->method = miteShadeMethodLitTen; } else { sprintf(err, "%s: shading specification \"%s\" not understood", me, shadeStr); biffAdd(MITE, err); airMopError(mop); return 1; } airMopOkay(mop); return 0; } void miteShadeSpecPrint(char *buff, const miteShadeSpec *shpec) { char me[]="miteShadeSpecPrint", var[4][AIR_STRLEN_MED]; if (buff && shpec) { switch(shpec->method) { case miteShadeMethodNone: sprintf(buff, "none"); break; case miteShadeMethodPhong: miteVariablePrint(var[0], shpec->vec0); sprintf(buff, "phong:%s", var[0]); break; case miteShadeMethodLitTen: miteVariablePrint(var[0], shpec->vec0); miteVariablePrint(var[1], shpec->vec1); miteVariablePrint(var[2], shpec->scl0); miteVariablePrint(var[3], shpec->scl1); sprintf(buff, "litten:%s,%s,%s,%s", var[0], var[1], var[2], var[3]); break; default: sprintf(buff, "%s: unknown shade method!", me); break; } } return; } void miteShadeSpecQueryAdd(gageQuery queryScl, gageQuery queryVec, gageQuery queryTen, miteShadeSpec *shpec) { if (shpec) { switch(shpec->method) { case miteShadeMethodNone: /* no queries to add */ break; case miteShadeMethodPhong: miteQueryAdd(queryScl, queryVec, queryTen, shpec->vec0); break; case miteShadeMethodLitTen: miteQueryAdd(queryScl, queryVec, queryTen, shpec->vec0); miteQueryAdd(queryScl, queryVec, queryTen, shpec->vec1); miteQueryAdd(queryScl, queryVec, queryTen, shpec->scl0); miteQueryAdd(queryScl, queryVec, queryTen, shpec->scl1); break; default: break; } } return; } --- NEW FILE: kindnot.c --- /* teem: Gordon Kindlmann's research software Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "mite.h" #include "privateMite.h" char _miteValStr[][AIR_STRLEN_SMALL] = { "(unknown miteVal)", "Xw", "Xi", "Yw", "Yi", "Zw", "Zi", "Tw", "Ti", "NdotV", "NdotL", "GTdotV", "VrefN", "VdefT", "VdefTdotV" }; int _miteValVal[] = { miteValUnknown, miteValXw, miteValXi, miteValYw, miteValYi, miteValZw, miteValZi, miteValTw, miteValTi, miteValNdotV, miteValNdotL, miteValGTdotV, miteValVrefN, miteValVdefT, miteValVdefTdotV }; char _miteValStrEqv[][AIR_STRLEN_SMALL] = { "xw", "xi", "yw", "yi", "zw", "zi", "tw", "ti", "ndotv", "vdotn", "ndotl", "ldotn", "gtdotv", "vrefn", "vdeft", "vdeftdotv" "" }; int _miteValValEqv[] = { miteValXw, miteValXi, miteValYw, miteValYi, miteValZw, miteValZi, miteValTw, miteValTi, miteValNdotV, miteValNdotV, miteValNdotL, miteValNdotL, miteValGTdotV, miteValVrefN, miteValVdefT, miteValVdefTdotV }; airEnum _miteVal = { "miteVal", MITE_VAL_ITEM_MAX+1, _miteValStr, _miteValVal, NULL, _miteValStrEqv, _miteValValEqv, AIR_FALSE }; airEnum * miteVal = &_miteVal; /* ** again, this is not a true gageKind- mainly because these items ** depend on items in different gageKinds (scalar and vector). So, ** the prerequisites here are all blank. Go look in _miteQueryAdd() ** to see these items' true prereqs */ gageItemEntry _miteValTable[MITE_VAL_ITEM_MAX+1] = { /* enum value len,deriv, prereqs, parent item, index*/ {miteValXw, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValXi, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValYw, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValYi, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValZw, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValZi, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValTw, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValTi, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValNdotV, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValNdotL, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValGTdotV, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValVrefN, 3, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValVdefT, 3, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValVdefTdotV, 1, 0, {-1, -1, -1, -1, -1}, -1, -1} }; gageKind _miteValGageKind = { "mite", &_miteVal, -1, -1, MITE_VAL_ITEM_MAX, _miteValTable, NULL, NULL, NULL }; gageKind * miteValGageKind = &_miteValGageKind; |
|
From: <kin...@us...> - 2004-02-26 06:35:15
|
Update of /cvsroot/teem/teem/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13602 Modified Files: GNUmakefile Log Message: begin valgrind debugging of new miter: bigger, better, stronger, slower Index: GNUmakefile =================================================================== RCS file: /cvsroot/teem/teem/src/GNUmakefile,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** GNUmakefile 19 Feb 2004 03:57:52 -0000 1.51 --- GNUmakefile 26 Feb 2004 06:27:32 -0000 1.52 *************** *** 96,105 **** ## {R}NUM/LIBS: used for craziness below ## ! #LIBS = air hest biff nrrd ell unrrdu dye moss gage bane limn hoover alan echo ten mite ! #NUMS = 0 1 2 3 4 5 6 7 8 9 A B C D E F ! #RNUMS = F E D C B A 9 8 7 6 5 4 3 2 1 0 ! LIBS = air hest biff nrrd ell unrrdu dye moss gage bane limn hoover alan echo ten ! NUMS = 0 1 2 3 4 5 6 7 8 9 A B C D E ! RNUMS = F E D C B A 9 8 7 6 5 4 3 2 1 NUM/LIBS = $(join $(NUMS),$(LIBS:%=/%)) RNUM/LIBS = $(join $(RNUMS),$(LIBS:%=/%)) --- 96,105 ---- ## {R}NUM/LIBS: used for craziness below ## ! LIBS = air hest biff nrrd ell unrrdu dye moss gage bane limn hoover alan echo ten mite ! NUMS = 0 1 2 3 4 5 6 7 8 9 A B C D E F ! RNUMS = F E D C B A 9 8 7 6 5 4 3 2 1 0 ! #LIBS = air hest biff nrrd ell unrrdu dye moss gage bane limn hoover alan echo ten ! #NUMS = 0 1 2 3 4 5 6 7 8 9 A B C D E ! #RNUMS = F E D C B A 9 8 7 6 5 4 3 2 1 NUM/LIBS = $(join $(NUMS),$(LIBS:%=/%)) RNUM/LIBS = $(join $(RNUMS),$(LIBS:%=/%)) |
|
From: <kin...@us...> - 2004-02-26 06:34:34
|
Update of /cvsroot/teem/teem/src/bin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13475 Modified Files: GNUmakefile miter.c Log Message: begin valgrind debugging of new miter: bigger, better, stronger, slower Index: GNUmakefile =================================================================== RCS file: /cvsroot/teem/teem/src/bin/GNUmakefile,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** GNUmakefile 19 Feb 2004 03:57:52 -0000 1.30 --- GNUmakefile 26 Feb 2004 06:26:49 -0000 1.31 *************** *** 50,54 **** # pos2idx unu pprobe vprobe qbert mrender miter gkms ungantry ilk tend spots BINS = airSanity affine cubic nrrdSanity overrgb idx2pos emap undos talkweb \ ! pos2idx unu pprobe vprobe qbert mrender ungantry ilk tend spots ## _binD(bins): list of development locations for given bins --- 50,54 ---- # pos2idx unu pprobe vprobe qbert mrender miter gkms ungantry ilk tend spots BINS = airSanity affine cubic nrrdSanity overrgb idx2pos emap undos talkweb \ ! pos2idx unu pprobe vprobe qbert mrender miter ungantry ilk tend spots ## _binD(bins): list of development locations for given bins Index: miter.c =================================================================== RCS file: /cvsroot/teem/teem/src/bin/miter.c,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** miter.c 13 Feb 2004 23:01:12 -0000 1.22 --- miter.c 26 Feb 2004 06:26:49 -0000 1.23 *************** *** 34,38 **** hestParm *hparm=NULL; miteUser *muu; ! char *me, *errS, *outS; int renorm; int E, Ecode; --- 34,38 ---- hestParm *hparm=NULL; miteUser *muu; ! char *me, *errS, *outS, *shadeStr; int renorm; int E, Ecode; *************** *** 48,53 **** hparm->respFileEnable = AIR_TRUE; ! hestOptAdd(&hopt, "i", "nsin", airTypeOther, 1, 1, &(muu->nsin), NULL, "input scalar volume to render", NULL, NULL, nrrdHestNrrd); hestOptAdd(&hopt, "txf", "nin", airTypeOther, 1, -1, &(muu->ntxf), NULL, "one or more transfer functions", --- 48,57 ---- hparm->respFileEnable = AIR_TRUE; ! hestOptAdd(&hopt, "i", "nsin", airTypeOther, 1, 1, &(muu->nsin), "", "input scalar volume to render", NULL, NULL, nrrdHestNrrd); + hestOptAdd(&hopt, "vi", "nvin", airTypeOther, 1, 1, &(muu->nvin), "", + "input vector volume to render", NULL, NULL, nrrdHestNrrd); + hestOptAdd(&hopt, "ti", "ntin", airTypeOther, 1, 1, &(muu->ntin), "", + "input tensor volume to render", NULL, NULL, nrrdHestNrrd); hestOptAdd(&hopt, "txf", "nin", airTypeOther, 1, -1, &(muu->ntxf), NULL, "one or more transfer functions", *************** *** 79,82 **** --- 83,88 ---- "cubicdd:1,0", "second derivative kernel", NULL, NULL, nrrdHestKernelSpec); + hestOptAdd(&hopt, "ss", "shading spec", airTypeString, 1, 1, &shadeStr, + "phong:gage(scalar:n)", "how to do shading"); hestOptAdd(&hopt, "ns", "normal side", airTypeInt, 1, 1, &(muu->normalSide), "1", "how to interpret gradients as normals:\n " *************** *** 90,97 **** "\"Accurate\" kernels don't need this; doing it always " "makes things go slower"); - hestOptAdd(&hopt, "sum", NULL, airTypeBool, 0, 0, &(muu->justSum), NULL, - "Ignore opacity and composite simply by summing"); - hestOptAdd(&hopt, "nolight", NULL, airTypeBool, 0, 0, &(muu->noDirLight), - NULL, "Ignore directional lights, use ambient only"); hestOptAdd(&hopt, "gmc", "min gradmag", airTypeDouble, 1, 1, &gmc, "0.0", "For curvature-based transfer functions, set curvature to " --- 96,99 ---- *************** *** 102,106 **** "0.01", "\"reference\" step size (world space) for doing " "opacity correction in compositing"); ! hestOptAdd(&hopt, "n1", "near1", airTypeDouble, 1, 1, &(muu->near1), "0.99", "opacity close enough to 1.0 to terminate ray"); hestOptAdd(&hopt, "nt", "# threads", airTypeInt, 1, 1, --- 104,108 ---- "0.01", "\"reference\" step size (world space) for doing " "opacity correction in compositing"); ! hestOptAdd(&hopt, "n1", "near1", airTypeDouble, 1, 1, &(muu->opacNear1), "0.99", "opacity close enough to 1.0 to terminate ray"); hestOptAdd(&hopt, "nt", "# threads", airTypeInt, 1, 1, *************** *** 136,140 **** return 1; } ! nrrdAxisInfoGet_nva(muu->nsin, nrrdAxisInfoSize, muu->hctx->volSize); nrrdAxisInfoGet_nva(muu->nsin, nrrdAxisInfoSpacing, muu->hctx->volSpacing); --- 138,143 ---- return 1; } ! strncpy(muu->shadeStr, shadeStr, AIR_STRLEN_MED-1); ! muu->shadeStr[AIR_STRLEN_MED-1] = 0; nrrdAxisInfoGet_nva(muu->nsin, nrrdAxisInfoSize, muu->hctx->volSize); nrrdAxisInfoGet_nva(muu->nsin, nrrdAxisInfoSpacing, muu->hctx->volSpacing); |
Update of /cvsroot/teem/teem/src/mite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13401 Modified Files: GNUmakefile mite.h privateMite.h ray.c renderMite.c thread.c txf.c user.c Log Message: begin valgrind debugging of new miter: bigger, better, stronger, slower Index: GNUmakefile =================================================================== RCS file: /cvsroot/teem/teem/src/mite/GNUmakefile,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** GNUmakefile 13 Feb 2004 22:58:40 -0000 1.15 --- GNUmakefile 26 Feb 2004 06:26:10 -0000 1.16 *************** *** 47,51 **** $(L).PUBLIC_HEADERS = mite.h $(L).PRIVATE_HEADERS = privateMite.h ! $(L).OBJS = defaultsMite.o kindnot.o renderMite.o thread.o ray.o txf.o user.o #### #### --- 47,52 ---- $(L).PUBLIC_HEADERS = mite.h $(L).PRIVATE_HEADERS = privateMite.h ! $(L).OBJS = defaultsMite.o kindnot.o txf.o shade.o \ ! user.o renderMite.o thread.o ray.o #### #### Index: mite.h =================================================================== RCS file: /cvsroot/teem/teem/src/mite/mite.h,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** mite.h 19 Feb 2004 03:52:47 -0000 1.26 --- mite.h 26 Feb 2004 06:26:10 -0000 1.27 *************** *** 110,127 **** *nvin, /* 3-vector volume being rendered */ *ntin, /* tensor volume being rendered */ ! **ntxf, /* array of nrrds containing transfer functions, ! these are never altered (in contrast to ntxf ! in miteRender) */ *nout; /* output image container, for five-channel output RGBAZ. We'll nrrdMaybeAlloc all the image data and put it in here, but we won't nrrdNuke(nout), ! just like we won't nrrdNuke nsin, ntin, or any of ! the ntxf[i] */ int ntxfNum; /* allocated and valid length of ntxf[] */ char shadeStr[AIR_STRLEN_MED]; /* how to do shading */ /* for each possible element of the txf range, what value should it ! start at prior to multiplying by the values (if any) learned from ! the txf. Mainly needed to store non-unity values for the ! quantities not covered by a transfer function */ mite_t rangeInit[MITE_RANGE_NUM]; double refStep, /* length of "unity" for doing opacity correction */ --- 110,127 ---- *nvin, /* 3-vector volume being rendered */ *ntin, /* tensor volume being rendered */ ! **ntxf, /* array of pointers to nrrds containing transfer ! functions, these are never altered (the ntxf ! in miteRender, however, is created and altered ! based on this ntxf) */ *nout; /* output image container, for five-channel output RGBAZ. We'll nrrdMaybeAlloc all the image data and put it in here, but we won't nrrdNuke(nout), ! just like we won't nrrdNuke nsin, nvin, ntin, or ! any of the ntxf[i] */ int ntxfNum; /* allocated and valid length of ntxf[] */ char shadeStr[AIR_STRLEN_MED]; /* how to do shading */ /* for each possible element of the txf range, what value should it ! start at prior to rendering. Mainly needed to store non-unity values ! for the quantities not covered by a transfer function */ mite_t rangeInit[MITE_RANGE_NUM]; double refStep, /* length of "unity" for doing opacity correction */ *************** *** 144,152 **** int normalSide, /* determines direction of gradient that is used as normal for shading: ! 1: normal points to lower values (higher values are more "inside"); 0: "two-sided": dot-products are abs()'d -1: normal points to higher values ! (lower values more "inside") */ verbUi, verbVi; /* pixel coordinate for which to turn on verbosity */ airArray *umop; /* for things allocated which are used across --- 144,155 ---- int normalSide, /* determines direction of gradient that is used as normal for shading: ! 1: the standard way: normal points to lower values (higher values are more "inside"); 0: "two-sided": dot-products are abs()'d -1: normal points to higher values ! (lower values more "inside") ! Setting up the values this way allows for idioms ! like "if (muu->normalSide) ...", meaning, if the ! lighting is one-sided */ verbUi, verbVi; /* pixel coordinate for which to turn on verbosity */ airArray *umop; /* for things allocated which are used across *************** *** 154,158 **** /* output information from last rendering */ double rendTime, /* rendering time, in seconds */ ! sampRate; /* rate (KHz) at which sampler callback was called */ } miteUser; --- 157,161 ---- /* output information from last rendering */ double rendTime, /* rendering time, in seconds */ ! sampRate; /* rate (KHz) at which samples were rendered */ } miteUser; *************** *** 167,172 **** miteShadeMethodUnknown, miteShadeMethodNone, /* 1: no direction shading based on anything ! in the miteShadeSpec: just ambient ! (though still using over operator) */ miteShadeMethodPhong, /* 2: what mite has been doing all along */ miteShadeMethodLitTen, /* 3: (tensor-based) lit-tensors */ --- 170,177 ---- miteShadeMethodUnknown, miteShadeMethodNone, /* 1: no direction shading based on anything ! in the miteShadeSpec: just ambient, though ! things are still compositited with the over ! operator, and transfer functions are free ! to implement whatever shading they can */ miteShadeMethodPhong, /* 2: what mite has been doing all along */ miteShadeMethodLitTen, /* 3: (tensor-based) lit-tensors */ *************** *** 184,189 **** */ typedef struct { ! int shadeMethod; /* from miteShadeMethod* enum */ ! gageQuerySpec *vec0, *vec1, *scl0, *scl1; /* things to use for shading. How these are interpreted is determined by shadeMethod: --- 189,194 ---- */ typedef struct { ! int method; /* from miteShadeMethod* enum */ ! gageItemSpec *vec0, *vec1, *scl0, *scl1; /* things to use for shading. How these are interpreted is determined by shadeMethod: *************** *** 197,201 **** ** ** rendering-parameter-set-specific (but non-thread-specific) state, ! ** used internally by mite */ typedef struct { --- 202,208 ---- ** ** rendering-parameter-set-specific (but non-thread-specific) state, ! ** used internally by mite. The primary role here is to store information ! ** derived from the miteUser, in a form which is more immediately useful ! ** for rendering. */ typedef struct { *************** *** 207,210 **** --- 214,221 ---- type mite_t */ int ntxfNum; /* allocated and valid length of ntxf[] */ + int sclPvlIdx, vecPvlIdx, + tenPvlIdx; /* indices of the different gageKinds of + volumes in the gageContext's array of + gagePerVolumes. Probably a hack */ miteShadeSpec *shpec; /* information based on muu->shadeStr */ double time0; /* rendering start time */ *************** *** 228,233 **** enum { miteStageOpUnknown, ! miteStageOpAdd, miteStageOpMax, miteStageOpMultiply, miteStageOpLast --- 239,245 ---- enum { miteStageOpUnknown, ! miteStageOpMin, miteStageOpMax, + miteStageOpAdd, miteStageOpMultiply, miteStageOpLast *************** *** 238,242 **** gage or by mite. This points into the answer vector in one of the thread's ! pervolumes */ int size, /* number of entries along this txf axis */ op, /* from miteStageOp* enum. Note that this --- 250,256 ---- gage or by mite. This points into the answer vector in one of the thread's ! pervolumes, or into ansMiteVal in the ! miteThread. It can be either a scalar ! or a vector */ int size, /* number of entries along this txf axis */ op, /* from miteStageOp* enum. Note that this *************** *** 244,254 **** adjusted by this txf (can't add color while multiplying opacity) */ ! (*qn)(gage_t *); /* callback for doing vector quantization of ! vector-valued txf domain variables, or ! NULL if this is a scalar variable */ ! double min, max; /* min, max (copied from nrrd axis) */ mite_t *data; /* pointer to txf data. If non-NULL, the ! rest of the variables are meaningful */ ! int rangeIdx[MITE_RANGE_NUM], /* indices into miteThread's range */ rangeNum; /* number of range variables set by the txf == number of pointers in range[] to use */ --- 258,271 ---- adjusted by this txf (can't add color while multiplying opacity) */ ! (*qn)(gage_t *); /* if non-NULL: callback for doing vector ! quantization of vector-valued txf domain ! variables */ ! double min, max; /* quantization range of values which is ! covered by this axis of the txf; copied ! from corresponding axis of the nrrd */ mite_t *data; /* pointer to txf data. If non-NULL, the ! following fields are meaningful */ ! int rangeIdx[MITE_RANGE_NUM], /* indices into miteThread's range, so that ! we know which quantities to update */ rangeNum; /* number of range variables set by the txf == number of pointers in range[] to use */ *************** *** 267,284 **** enum { miteValUnknown=-1, /* -1: nobody knows */ ! miteValXw, /* 0: "Xw", X position, world space (*gage_t) */ ! miteValXi, /* 1: "Xi", X " , index " (*gage_t) */ ! miteValYw, /* 2: "Yw", Y " , world " (*gage_t) */ ! miteValYi, /* 3: "Yi", Y " , index " (*gage_t) */ ! miteValZw, /* 4: "Zw", Z " , world " (*gage_t) */ ! miteValZi, /* 5: "Zi", Z " , index " (*gage_t) */ ! miteValTw, /* 6: "Tw", ray position (*gage_t) */ ! miteValTi, /* 7: "Ti", ray index (ray sample #) (*gage_t) */ miteValNdotV, /* 8: "NdotV", surface normal dotted w/ view vector ! (towards eye) (*gage_t) */ miteValNdotL, /* 9: "NdotL", surface normal dotted w/ light vector ! (towards the light source) (*gage_t) */ ! miteValGTdotV, /* 10: "GTdotV", normal curvature in view direction ! (*gage_t) */ miteValVrefN, /* 11: "VrefN", view vector (towards eye) reflected across surface normal (gage_t[3]) */ --- 284,302 ---- enum { miteValUnknown=-1, /* -1: nobody knows */ ! miteValXw, /* 0: "Xw", X position, world space (gage_t[1]) */ ! miteValXi, /* 1: "Xi", X " , index " (gage_t[1]) */ ! miteValYw, /* 2: "Yw", Y " , world " (gage_t[1]) */ ! miteValYi, /* 3: "Yi", Y " , index " (gage_t[1]) */ ! miteValZw, /* 4: "Zw", Z " , world " (gage_t[1]) */ ! miteValZi, /* 5: "Zi", Z " , index " (gage_t[1]) */ ! miteValTw, /* 6: "Tw", ray position (gage_t[1]) */ ! miteValTi, /* 7: "Ti", ray index (ray sample #) (gage_t[1]) */ miteValNdotV, /* 8: "NdotV", surface normal dotted w/ view vector ! (towards eye) (gage_t[1]) */ miteValNdotL, /* 9: "NdotL", surface normal dotted w/ light vector ! (towards the light source) (gage_t[1]) */ ! miteValGTdotV, /* 10: "GTdotV", normal curvature in view direction, ! the contraction of the geometry tensor along ! the view vector (gage_t[1]) */ miteValVrefN, /* 11: "VrefN", view vector (towards eye) reflected across surface normal (gage_t[3]) */ *************** *** 287,295 **** miteValVdefTdotV, /* 13: "VdefTdotV", VdefT dotted back with V, not the same as the tensor contraction along V, ! (*gage_t) */ miteValLast }; ! #define MITE_VAL_MAX 13 ! #define MITE_VAL_TOTAL_ANS_LENGTH 18 /* --- 305,312 ---- miteValVdefTdotV, /* 13: "VdefTdotV", VdefT dotted back with V, not the same as the tensor contraction along V, ! (gage_t[1]) */ miteValLast }; ! #define MITE_VAL_ITEM_MAX 13 /* *************** *** 300,312 **** typedef struct miteThread_t { gageContext *gctx; /* per-thread context */ ! gage_t *ansScl, /* shortcut to scalar answer vector */ ! *ansVec, /* shortcut to vector answer vector */ ! *ansTen, /* shortcut to tensor answer vector */ ! *vec0, *vec1, *scl0, *scl1, /* shortcuts vectors/scalars used for ! shading; explained with miteShadeSpec */ ! ansMiteVal[MITE_VAL_TOTAL_ANS_LENGTH]; /* room for all the miteVal */ ! int verbose, /* blah blah blah */ thrid, /* thread ID */ ! ui, vi, /* image coords */ samples; /* number of samples handled so far by this thread */ --- 317,332 ---- typedef struct miteThread_t { gageContext *gctx; /* per-thread context */ ! gage_t *ansScl, /* pointer to gageKindScl answer vector */ ! *ansVec, /* pointer to gageKindVec answer vector */ ! *ansTen, /* pointer to tenGageKind answer vector */ ! *ansMiteVal, /* room for all the miteVal answers, which ! unlike ans{Scl,Vec,Ten} is allocated by ! mite instead of by gage */ ! *shadeVec0, *shadeVec1, ! *shadeScl0, *shadeScl1; /* pointers into the ans* arrays above, ! used for shading */ ! int verbose, /* blah, blah, blah */ thrid, /* thread ID */ ! ui, vi, /* image coords of current ray */ samples; /* number of samples handled so far by this thread */ *************** *** 336,342 **** /* txf.c */ TEEM_API char miteRangeChar[MITE_RANGE_NUM]; ! TEEM_API void miteVariablePrint(char *buff, const gageQuerySpec *qsp); ! TEEM_API int miteVariableParse(gageQuerySpec *qsp, const char *label); TEEM_API int miteNtxfCheck(const Nrrd *ntxf); /* user.c */ --- 356,366 ---- /* txf.c */ TEEM_API char miteRangeChar[MITE_RANGE_NUM]; ! TEEM_API int miteVariableParse(gageItemSpec *isp, const char *label); ! TEEM_API void miteVariablePrint(char *buff, const gageItemSpec *isp); TEEM_API int miteNtxfCheck(const Nrrd *ntxf); + TEEM_API void miteQueryAdd(gageQuery queryScl, + gageQuery queryVec, + gageQuery queryTen, gageItemSpec *isp); + /* user.c */ *************** *** 344,355 **** TEEM_API miteUser *miteUserNix(miteUser *muu); ! /* renderMite.c */ TEEM_API miteShadeSpec *miteShadeSpecNew(); TEEM_API miteShadeSpec *miteShadeSpecNix(miteShadeSpec *); ! TEEM_API int miteShadeParse(miteShadeSpec *shpec, char *shadeStr); TEEM_API int miteRenderBegin(miteRender **mrrP, miteUser *muu); TEEM_API int miteRenderEnd(miteRender *mrr, miteUser *muu); /* thread.c */ TEEM_API int miteThreadBegin(miteThread **mttP, miteRender *mrr, miteUser *muu, int whichThread); --- 368,387 ---- TEEM_API miteUser *miteUserNix(miteUser *muu); ! /* shade.c */ TEEM_API miteShadeSpec *miteShadeSpecNew(); TEEM_API miteShadeSpec *miteShadeSpecNix(miteShadeSpec *); ! TEEM_API int miteShadeSpecParse(miteShadeSpec *shpec, char *shadeStr); ! TEEM_API void miteShadeSpecPrint(char *buff, const miteShadeSpec *shpec); ! TEEM_API void miteShadeSpecQueryAdd(gageQuery queryScl, ! gageQuery queryVec, ! gageQuery queryTen, miteShadeSpec *shpec); ! ! /* renderMite.c */ TEEM_API int miteRenderBegin(miteRender **mrrP, miteUser *muu); TEEM_API int miteRenderEnd(miteRender *mrr, miteUser *muu); /* thread.c */ + TEEM_API miteThread *miteThreadNew(); + TEEM_API miteThread *miteThreadNix(miteThread *mtt); TEEM_API int miteThreadBegin(miteThread **mttP, miteRender *mrr, miteUser *muu, int whichThread); Index: privateMite.h =================================================================== RCS file: /cvsroot/teem/teem/src/mite/privateMite.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** privateMite.h 13 Feb 2004 22:58:40 -0000 1.4 --- privateMite.h 26 Feb 2004 06:26:10 -0000 1.5 *************** *** 32,38 **** /* txf.c */ ! extern void _miteQuery(unsigned int *queryScl, ! unsigned int *queryVec, ! unsigned int *queryTen, gageQuerySpec *qsp); extern int _miteNtxfAlphaAdjust(miteRender *mrr, miteUser *muu); extern int _miteStageSet(miteThread *mtt, miteRender *mrr); --- 32,36 ---- /* txf.c */ ! extern gage_t *_miteAnswerPointer(miteThread *mtt, gageItemSpec *isp); extern int _miteNtxfAlphaAdjust(miteRender *mrr, miteUser *muu); extern int _miteStageSet(miteThread *mtt, miteRender *mrr); Index: ray.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/ray.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ray.c 13 Feb 2004 22:58:40 -0000 1.17 --- ray.c 26 Feb 2004 06:26:10 -0000 1.18 *************** *** 62,71 **** ks = mtt->range[miteRangeKs]; ELL_3V_SCALE(ad, ka, muu->lit->amb); ! if (miteShadeMethodPhong == mrr->shpec->shadeMethod) { if (kd || ks) { if (muu->normalSide) { ! ELL_3V_SCALE(N, -muu->normalSide, mtt->vec0); } else { ! ELL_3V_COPY(N, mtt->vec0); } if (kd) { --- 62,77 ---- ks = mtt->range[miteRangeKs]; ELL_3V_SCALE(ad, ka, muu->lit->amb); ! switch (mrr->shpec->method) { ! case miteShadeMethodNone: ! /* nothing to do */ ! break; ! case miteShadeMethodPhong: ! /* this is dicey- we're *writing* to the answer buffer */ if (kd || ks) { + ELL_3V_NORM(mtt->shadeVec0, mtt->shadeVec0, tmp); if (muu->normalSide) { ! ELL_3V_SCALE(N, -muu->normalSide, mtt->shadeVec0); } else { ! ELL_3V_COPY(N, mtt->shadeVec0); } if (kd) { *************** *** 75,79 **** } if (LdotN > 0) { ! ELL_3V_SCALE_ADD2(ad, 1.0, ad, LdotN*kd, muu->lit->col[0]); } } --- 81,85 ---- } if (LdotN > 0) { ! ELL_3V_SCALE_INCR(ad, LdotN*kd, muu->lit->col[0]); } } *************** *** 92,101 **** } } ! } else if (miteShadeMethodLitTen == mrr->shpec->shadeMethod) { ! ! } else { fprintf(stderr, "!%s: PANIC, shadeMethod %d unimplemented\n", ! me, mrr->shpec->shadeMethod); exit(1); } *R = (E - 1 + ad[0])*col[0] + s[0]; --- 98,110 ---- } } ! break; ! case miteShadeMethodLitTen: ! fprintf(stderr, "!%s: lit-tensor not yet implemented\n", me); ! break; ! default: fprintf(stderr, "!%s: PANIC, shadeMethod %d unimplemented\n", ! me, mrr->shpec->method); exit(1); + break; } *R = (E - 1 + ad[0])*col[0] + s[0]; *************** *** 149,163 **** mtt->ansMiteVal[miteValTw] = rayT; mtt->ansMiteVal[miteValTi] = num; ! mtt->ansMiteVal[miteValNdotV] = -muu->normalSide*ELL_3V_DOT(mtt->V, mtt->vec0); ! mtt->ansMiteVal[miteValNdotL] = -muu->normalSide*ELL_3V_DOT(mtt->vec0, ! muu->lit->dir[0]); if (!muu->normalSide) { mtt->ansMiteVal[miteValNdotV] = AIR_ABS(mtt->ansMiteVal[miteValNdotV]); mtt->ansMiteVal[miteValNdotL] = AIR_ABS(mtt->ansMiteVal[miteValNdotL]); } ELL_3MV_MUL(kn, mtt->nPerp, mtt->V); ELL_3V_NORM(kn, kn, len); ELL_3MV_MUL(knd, mtt->gten, kn); mtt->ansMiteVal[miteValGTdotV] = ELL_3V_DOT(knd, kn); memcpy(mtt->range, muu->rangeInit, MITE_RANGE_NUM*sizeof(mite_t)); --- 158,183 ---- mtt->ansMiteVal[miteValTw] = rayT; mtt->ansMiteVal[miteValTi] = num; ! #if 0 ! ! what if shading is none? ! ! mtt->ansMiteVal[miteValNdotV] = ! -muu->normalSide*ELL_3V_DOT(mtt->V, mtt->shadeVec0); ! mtt->ansMiteVal[miteValNdotL] = ! -muu->normalSide*ELL_3V_DOT(mtt->shadeVec0, muu->lit->dir[0]); ! #endif if (!muu->normalSide) { mtt->ansMiteVal[miteValNdotV] = AIR_ABS(mtt->ansMiteVal[miteValNdotV]); mtt->ansMiteVal[miteValNdotL] = AIR_ABS(mtt->ansMiteVal[miteValNdotL]); } + + #if 0 + this is bullshit + ELL_3MV_MUL(kn, mtt->nPerp, mtt->V); ELL_3V_NORM(kn, kn, len); ELL_3MV_MUL(knd, mtt->gten, kn); mtt->ansMiteVal[miteValGTdotV] = ELL_3V_DOT(knd, kn); + #endif memcpy(mtt->range, muu->rangeInit, MITE_RANGE_NUM*sizeof(mite_t)); *************** *** 193,199 **** A = 1 - mtt->TT; if (A) { ! ELL_4V_SET(imgData + 4*idx, mtt->RR/A, mtt->GG/A, mtt->BB/A, A); } else { ! ELL_4V_SET(imgData + 4*idx, 0, 0, 0, 0); } return 0; --- 213,219 ---- A = 1 - mtt->TT; if (A) { ! ELL_4V_SET(imgData + 5*idx, mtt->RR/A, mtt->GG/A, mtt->BB/A, A); } else { ! ELL_4V_SET(imgData + 5*idx, 0, 0, 0, 0); } return 0; Index: renderMite.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/renderMite.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** renderMite.c 13 Feb 2004 22:58:40 -0000 1.10 --- renderMite.c 26 Feb 2004 06:26:10 -0000 1.11 *************** *** 21,56 **** #include "privateMite.h" - miteShadeSpec * - miteShadeSpecNew(void) { - miteShadeSpec *shpec; - - shpec = (miteShadeSpec *)calloc(1, sizeof(miteShadeSpec)); - if (shpec) { - shpec->shadeMethod = miteShadeMethodUnknown; - shpec->vec0 = gageQuerySpecNew(); - shpec->vec1 = gageQuerySpecNew(); - shpec->scl0 = gageQuerySpecNew(); - shpec->scl1 = gageQuerySpecNew(); - if (!( shpec->vec0 && shpec->vec1 && - shpec->scl0 && shpec->scl1 )) { - return NULL; - } - } - return shpec; - } - - miteShadeSpec * - miteShadeSpecNix(miteShadeSpec *shpec) { - - if (shpec) { - shpec->vec0 = gageQuerySpecNix(shpec->vec0); - shpec->vec1 = gageQuerySpecNix(shpec->vec1); - shpec->scl0 = gageQuerySpecNix(shpec->scl0); - shpec->scl1 = gageQuerySpecNix(shpec->scl1); - AIR_FREE(shpec); - } - return NULL; - } - miteRender * _miteRenderNew(void) { --- 21,24 ---- *************** *** 64,68 **** --- 32,41 ---- return mrr; } + mrr->ntxf = NULL; + mrr->ntxfNum = 0; mrr->shpec = miteShadeSpecNew(); + mrr->sclPvlIdx = -1; + mrr->vecPvlIdx = -1; + mrr->tenPvlIdx = -1; airMopAdd(mrr->rmop, mrr->shpec, (airMopper)miteShadeSpecNix, airMopAlways); *************** *** 81,186 **** } - int - miteShadeParse(miteShadeSpec *shpec, char *shadeStr) { - char me[]="miteShadeParse", err[AIR_STRLEN_MED], *buff, *qstr, *tok, *state; - airArray *mop; - int ansLength; - - mop = airMopNew(); - if (!( shpec && airStrlen(shadeStr) )) { - sprintf(err, "%s: got NULL pointer and/or empty string", me); - biffAdd(MITE, err); airMopError(mop); return 1; - } - buff = airToLower(airStrdup(shadeStr)); - if (!buff) { - sprintf(err, "%s: couldn't strdup shading spec", me); - biffAdd(MITE, err); airMopError(mop); return 1; - } - airMopAdd(mop, buff, airFree, airMopAlways); - if (!strcmp("none", buff)) { - shpec->shadeMethod = miteShadeMethodNone; - } else if (buff == strstr("phong:", buff)) { - qstr = buff + strlen("phong:"); - if (miteVariableParse(shpec->vec0, qstr)) { - sprintf(err, "%s: couldn't parse \"%s\" as shading vector", me, qstr); - biffAdd(MITE, err); airMopError(mop); return 1; - } - ansLength = shpec->vec0->kind->ansLength[shpec->vec0->query]; - if (3 != ansLength) { - sprintf(err, "%s: \"%s\" isn't a vector (answer length is %d, not 3)", - me, qstr, ansLength); - biffAdd(MITE, err); airMopError(mop); return 1; - } - fprintf(stderr, "!%s: got phong:%s(%s)\n", me, - shpec->vec0->kind->name, - airEnumStr(shpec->vec0->kind->enm, shpec->vec0->query)); - } else if (buff == strstr("litten:", buff)) { - qstr = buff + strlen("litten:"); - /* ---- first vector */ - tok = airStrtok(qstr, ",", &state); - if (miteVariableParse(shpec->vec0, tok)) { - sprintf(err, "%s: couldn't parse \"%s\" as lit-tensor vector", me, tok); - biffAdd(MITE, err); airMopError(mop); return 1; - } - ansLength = shpec->vec0->kind->ansLength[shpec->vec0->query]; - if (3 != ansLength) { - sprintf(err, "%s: \"%s\" isn't a vector (answer length is %d, not 3)", - me, qstr, ansLength); - biffAdd(MITE, err); airMopError(mop); return 1; - } - /* ---- second vector */ - tok = airStrtok(qstr, ",", &state); - if (miteVariableParse(shpec->vec1, tok)) { - sprintf(err, "%s: couldn't parse \"%s\" as lit-tensor vector", me, tok); - biffAdd(MITE, err); airMopError(mop); return 1; - } - ansLength = shpec->vec1->kind->ansLength[shpec->vec1->query]; - if (3 != ansLength) { - sprintf(err, "%s: \"%s\" isn't a vector (answer length is %d, not 3)", - me, qstr, ansLength); - biffAdd(MITE, err); airMopError(mop); return 1; - } - /* ---- first scalar */ - tok = airStrtok(qstr, ",", &state); - if (miteVariableParse(shpec->scl0, tok)) { - sprintf(err, "%s: couldn't parse \"%s\" as lit-tensor scalar", me, tok); - biffAdd(MITE, err); airMopError(mop); return 1; - } - ansLength = shpec->scl0->kind->ansLength[shpec->scl0->query]; - if (1 != ansLength) { - sprintf(err, "%s: \"%s\" isn't a scalar (answer length is %d, not 1)", - me, qstr, ansLength); - biffAdd(MITE, err); airMopError(mop); return 1; - } - /* ---- second scalar */ - tok = airStrtok(qstr, ",", &state); - if (miteVariableParse(shpec->scl1, tok)) { - sprintf(err, "%s: couldn't parse \"%s\" as lit-tensor scalar", me, tok); - biffAdd(MITE, err); airMopError(mop); return 1; - } - ansLength = shpec->scl1->kind->ansLength[shpec->scl1->query]; - if (1 != ansLength) { - sprintf(err, "%s: \"%s\" isn't a scalar (answer length is %d, not 1)", - me, qstr, ansLength); - biffAdd(MITE, err); airMopError(mop); return 1; - } - fprintf(stderr, "!%s: got litten:%s(%s),\n", me, - shpec->vec0->kind->name, - airEnumStr(shpec->vec0->kind->enm, shpec->vec0->query)); - } else { - sprintf(err, "%s: shading specification \"%s\" not understood", - me, shadeStr); - biffAdd(MITE, err); airMopError(mop); return 1; - } - airMopOkay(mop); - return 0; - } - int miteRenderBegin(miteRender **mrrP, miteUser *muu) { char me[]="miteRenderBegin", err[AIR_STRLEN_MED]; gagePerVolume *pvl; ! int E, T, thr, axi; ! unsigned int queryScl, queryVec, queryTen; if (!(mrrP && muu)) { --- 54,64 ---- } int miteRenderBegin(miteRender **mrrP, miteUser *muu) { char me[]="miteRenderBegin", err[AIR_STRLEN_MED]; gagePerVolume *pvl; ! int E, T, thr, axi, pvlIdx; ! gageQuery queryScl, queryVec, queryTen; ! gageItemSpec isp; if (!(mrrP && muu)) { *************** *** 201,226 **** } ! queryScl = 0; ! queryTen = 0; for (T=0; T<muu->ntxfNum; T++) { ! for (axi=1; axi<=muu->ntxf[T]->dim-1; axi++) { ! _miteNtxfQuery(&queryScl, &queryVec, &queryTen, ! muu->ntxf[T]->axis[axi]->label); ! } ! if (!muu->noDirLight) { ! query |= 1<<gageSclNormal; } ! /* ! fprintf(stderr, "!%s: gageScl query: \n", me); ! gageQueryPrint(stderr, gageKindScl, query); ! */ E = 0; ! if (!muu->nsin) { ! sprintf(err, "%s: sorry- can't proceed without scalar volume", me); ! biffAdd(MITE, err); return 1; } - if (!E) E |= !(pvl = gagePerVolumeNew(muu->gctx0, muu->nsin, gageKindScl)); - if (!E) E |= gagePerVolumeAttach(muu->gctx0, pvl); if (!E) E |= gageKernelSet(muu->gctx0, gageKernel00, muu->ksp[gageKernel00]->kernel, --- 79,114 ---- } ! GAGE_QUERY_RESET(queryScl); ! GAGE_QUERY_RESET(queryVec); ! GAGE_QUERY_RESET(queryTen); for (T=0; T<muu->ntxfNum; T++) { ! for (axi=1; axi<muu->ntxf[T]->dim; axi++) { ! miteVariableParse(&isp, muu->ntxf[T]->axis[axi].label); ! miteQueryAdd(queryScl, queryVec, queryTen, &isp); ! } } ! miteShadeSpecParse((*mrrP)->shpec, muu->shadeStr); ! miteShadeSpecQueryAdd(queryScl, queryVec, queryTen, (*mrrP)->shpec); E = 0; ! pvlIdx = 0; ! if (muu->nsin) { ! if (!E) E |= !(pvl = gagePerVolumeNew(muu->gctx0, muu->nsin, gageKindScl)); ! if (!E) E |= gageQuerySet(muu->gctx0, pvl, queryScl); ! if (!E) E |= gagePerVolumeAttach(muu->gctx0, pvl); ! if (!E) (*mrrP)->sclPvlIdx = pvlIdx++; ! } ! if (muu->nvin) { ! if (!E) E |= !(pvl = gagePerVolumeNew(muu->gctx0, muu->nvin, gageKindVec)); ! if (!E) E |= gageQuerySet(muu->gctx0, pvl, queryVec); ! if (!E) E |= gagePerVolumeAttach(muu->gctx0, pvl); ! if (!E) (*mrrP)->vecPvlIdx = pvlIdx++; ! } ! if (muu->ntin) { ! if (!E) E |= !(pvl = gagePerVolumeNew(muu->gctx0, muu->ntin, tenGageKind)); ! if (!E) E |= gageQuerySet(muu->gctx0, pvl, queryTen); ! if (!E) E |= gagePerVolumeAttach(muu->gctx0, pvl); ! if (!E) (*mrrP)->tenPvlIdx = pvlIdx++; } if (!E) E |= gageKernelSet(muu->gctx0, gageKernel00, muu->ksp[gageKernel00]->kernel, *************** *** 232,236 **** muu->ksp[gageKernel22]->kernel, muu->ksp[gageKernel22]->parm); - if (!E) E |= gageQuerySet(muu->gctx0, pvl, query); if (!E) E |= gageUpdate(muu->gctx0); if (E) { --- 120,123 ---- *************** *** 241,245 **** me, GAGE_FD(muu->gctx0)); ! if (nrrdMaybeAlloc(muu->nout, mite_nt, 3, 4, muu->hctx->imgSize[0], muu->hctx->imgSize[1])) { sprintf(err, "%s: nrrd trouble", me); --- 128,132 ---- me, GAGE_FD(muu->gctx0)); ! if (nrrdMaybeAlloc(muu->nout, mite_nt, 3, 5 /* RGBAZ */ , muu->hctx->imgSize[0], muu->hctx->imgSize[1])) { sprintf(err, "%s: nrrd trouble", me); *************** *** 255,260 **** for (thr=0; thr<muu->hctx->numThreads; thr++) { ! (*mrrP)->tt[thr] = (miteThread *)calloc(1, sizeof(miteThread)); ! airMopAdd((*mrrP)->rmop, (*mrrP)->tt[thr], airFree, airMopAlways); } --- 142,152 ---- for (thr=0; thr<muu->hctx->numThreads; thr++) { ! (*mrrP)->tt[thr] = miteThreadNew(); ! if (!((*mrrP)->tt[thr])) { ! sprintf(err, "%s: couldn't allocate thread[%d]", me, thr); ! biffAdd(MITE, err); return 1; ! } ! airMopAdd((*mrrP)->rmop, (*mrrP)->tt[thr], ! (airMopper)miteThreadNix, airMopAlways); } Index: thread.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/thread.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** thread.c 13 Feb 2004 22:58:40 -0000 1.9 --- thread.c 26 Feb 2004 06:26:10 -0000 1.10 *************** *** 21,28 **** #include "privateMite.h" /* ******** miteThreadBegin() ** ! ** this has the body of what would be miteThreadInit */ int --- 21,63 ---- #include "privateMite.h" + miteThread * + miteThreadNew() { + miteThread *mtt; + + mtt = (miteThread *)calloc(1, sizeof(miteThread)); + if (!mtt) { + return NULL; + } + + mtt->gctx = NULL; + mtt->ansScl = mtt->ansVec = mtt->ansTen = NULL; + mtt->shadeVec0 = mtt->shadeVec1 = NULL; + mtt->shadeScl0 = mtt->shadeScl1 = NULL; + mtt->ansMiteVal = + (gage_t *)calloc(gageKindTotalAnswerLength(miteValGageKind), + sizeof(gage_t)); + mtt->verbose = 0; + mtt->thrid = -1; + mtt->ui = mtt->vi = -1; + mtt->samples = 0; + mtt->stage = NULL; + /* mtt->range[], rayStep, V, RR, GG, BB, TT initialized in + miteRayBegin or in miteSample */ + + return mtt; + } + + miteThread * + miteThreadNix(miteThread *mtt) { + + AIR_FREE(mtt->ansMiteVal); + AIR_FREE(mtt); + return NULL; + } + /* ******** miteThreadBegin() ** ! ** this has some of the body of what would be miteThreadInit */ int *************** *** 30,36 **** miteUser *muu, int whichThread) { char me[]="miteThreadBegin", err[AIR_STRLEN_MED]; ! int msi; ! (*mttP) = mrr->tt[whichThread]; if (!whichThread) { /* this is the first thread- it just points to the parent gageContext */ --- 65,72 ---- miteUser *muu, int whichThread) { char me[]="miteThreadBegin", err[AIR_STRLEN_MED]; ! ! /* all the miteThreads have already been allocated */ (*mttP) = mrr->tt[whichThread]; + if (!whichThread) { /* this is the first thread- it just points to the parent gageContext */ *************** *** 44,58 **** } } ! (*mttP)->ansScl = (*mttP)->gctx->pvl[0]->ans; ! (*mttP)->norm = (*mttP)->ans + gageKindScl->ansOffset[gageSclNormal]; (*mttP)->nPerp = (*mttP)->ans + gageKindScl->ansOffset[gageSclNPerp]; (*mttP)->gten = (*mttP)->ans + gageKindScl->ansOffset[gageSclGeomTens]; ! for (msi=0; msi<=MITE_SCL_MAX; msi++) { ! (*mttP)->mscl[msi] = 0.0; ! } (*mttP)->thrid = whichThread; (*mttP)->samples = 0; (*mttP)->verbose = 0; ! _miteStageSet(*mttP, mrr, gageKindScl); return 0; } --- 80,128 ---- } } ! ! (*mttP)->ansScl = (-1 != mrr->sclPvlIdx ! ? (*mttP)->gctx->pvl[mrr->sclPvlIdx]->answer ! : NULL); ! (*mttP)->ansVec = (-1 != mrr->vecPvlIdx ! ? (*mttP)->gctx->pvl[mrr->vecPvlIdx]->answer ! : NULL); ! (*mttP)->ansTen = (-1 != mrr->tenPvlIdx ! ? (*mttP)->gctx->pvl[mrr->tenPvlIdx]->answer ! : NULL); ! ! #if 0 (*mttP)->nPerp = (*mttP)->ans + gageKindScl->ansOffset[gageSclNPerp]; (*mttP)->gten = (*mttP)->ans + gageKindScl->ansOffset[gageSclGeomTens]; ! #endif ! (*mttP)->thrid = whichThread; (*mttP)->samples = 0; (*mttP)->verbose = 0; ! ! /* set up shading answers */ ! switch(mrr->shpec->method) { ! case miteShadeMethodNone: ! /* nothing to do */ ! break; ! case miteShadeMethodPhong: ! (*mttP)->shadeVec0 = _miteAnswerPointer(*mttP, mrr->shpec->vec0); ! break; ! case miteShadeMethodLitTen: ! (*mttP)->shadeVec0 = _miteAnswerPointer(*mttP, mrr->shpec->vec0); ! (*mttP)->shadeVec1 = _miteAnswerPointer(*mttP, mrr->shpec->vec1); ! (*mttP)->shadeScl0 = _miteAnswerPointer(*mttP, mrr->shpec->scl0); ! (*mttP)->shadeScl1 = _miteAnswerPointer(*mttP, mrr->shpec->scl1); ! break; ! default: ! sprintf(err, "%s: shade method %d not implemented!", ! me, mrr->shpec->method); ! biffAdd(MITE, err); return 1; ! break; ! } ! ! if (_miteStageSet(*mttP, mrr)) { ! sprintf(err, "%s: trouble setting up stage array", me); ! biffAdd(MITE, err); return 1; ! } return 0; } Index: txf.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/txf.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** txf.c 13 Feb 2004 22:58:41 -0000 1.13 --- txf.c 26 Feb 2004 06:26:10 -0000 1.14 *************** *** 29,64 **** miteRangeChar[MITE_RANGE_NUM] = "ARGBEadsp"; - void - miteVariablePrint(char *buff, const gageQuerySpec *qsp) { - char me[]="miteVariablePrint"; - - if (gageKindScl == qsp->kind - || gageKindVec == qsp->kind - || tenGageKind == qsp->kind) { - sprintf(buff, "gage(%s:%s)", qsp->kind->name, - airEnumStr(qsp->kind->enm, qsp->query)); - } else if (miteValGageKind == qsp->kind) { - sprintf(buff, "%s(%s)", qsp->kind->name, - airEnumStr(qsp->kind->enm, qsp->query)); - } else { - sprintf(buff, "(%s: unknown variable!)", me); - } - return; - } - - /* ******** miteVariableParse() ** ** takes a string (usually the label from a nrrd axis) and parses it ! ** to determine the gageQuerySpec from it (which means finding the ! ** kind and query). The valid formats are (currently): ** ! ** <query> : miteValGageKind (DEPRECATED) ! ** gage(<query>) : gageKindScl (DEPRECATED) ! ** gage(scalar:<query>) : gageKindScl (preferred) ! ** gage(vector:<query>) : gageKindVec ! ** gage(tensor:<query>) : tenGageKind ! ** mite(<query>) : miteValGageKind ** ** Notice that "scalar", "vector", and "tensor" to NOT refer to the type --- 29,45 ---- miteRangeChar[MITE_RANGE_NUM] = "ARGBEadsp"; /* ******** miteVariableParse() ** ** takes a string (usually the label from a nrrd axis) and parses it ! ** to determine the gageItemSpec from it (which means finding the ! ** kind and item). The valid formats are: ** ! ** <item> : miteValGageKind (DEPRECATED) ! ** mite(<item>) : miteValGageKind ! ** gage(<item>) : gageKindScl (DEPRECATED) ! ** gage(scalar:<item>) : gageKindScl ! ** gage(vector:<item>) : gageKindVec ! ** gage(tensor:<item>) : tenGageKind ** ** Notice that "scalar", "vector", and "tensor" to NOT refer to the type *************** *** 67,76 **** */ int ! miteVariableParse(gageQuerySpec *qsp, const char *label) { char me[]="miteVariableParse", err[AIR_STRLEN_MED], *buff, *endparen, *kqstr, *col, *kstr, *qstr; airArray *mop; ! if (!( qsp && label )) { sprintf(err, "%s: got NULL pointer", me); biffAdd(MITE, err); return 1; --- 48,57 ---- */ int ! miteVariableParse(gageItemSpec *isp, const char *label) { char me[]="miteVariableParse", err[AIR_STRLEN_MED], *buff, *endparen, *kqstr, *col, *kstr, *qstr; airArray *mop; ! if (!( isp && label )) { sprintf(err, "%s: got NULL pointer", me); biffAdd(MITE, err); return 1; *************** *** 91,98 **** *endparen = 0; kqstr = buff + strlen("gage("); ! /* first see if its a gageKindScl specification */ ! qsp->query = airEnumVal(gageScl, kqstr); ! if (-1 != qsp->query) { ! qsp->kind = gageKindScl; fprintf(stderr, "\n%s: WARNING: deprecated use of txf domain " "\"gage(%s)\" without explicit gage kind specification; " --- 72,79 ---- *endparen = 0; kqstr = buff + strlen("gage("); ! /* first see if its a (deprecated) gageKindScl specification */ ! isp->item = airEnumVal(gageScl, kqstr); ! if (-1 != isp->item) { ! isp->kind = gageKindScl; fprintf(stderr, "\n%s: WARNING: deprecated use of txf domain " "\"gage(%s)\" without explicit gage kind specification; " *************** *** 100,108 **** me, kqstr, gageKindScl->name, kqstr); } else { ! /* should be of form "<kind>:<query>" */ col = strstr(kqstr, ":"); if (!col) { sprintf(err, "%s: didn't see \":\" seperator between gage " ! "kind and query", me); biffAdd(MITE, err); airMopError(mop); return 1; } --- 81,89 ---- me, kqstr, gageKindScl->name, kqstr); } else { ! /* should be of form "<kind>:<item>" */ col = strstr(kqstr, ":"); if (!col) { sprintf(err, "%s: didn't see \":\" seperator between gage " ! "kind and item", me); biffAdd(MITE, err); airMopError(mop); return 1; } *************** *** 111,127 **** qstr = col+1; if (!strcmp(gageKindScl->name, kstr)) { ! qsp->kind = gageKindScl; } else if (!strcmp(gageKindVec->name, kstr)) { ! qsp->kind = gageKindVec; } else if (!strcmp(tenGageKind->name, kstr)) { ! qsp->kind = tenGageKind; } else { sprintf(err, "%s: don't recognized \"%s\" gage kind", me, kstr); biffAdd(MITE, err); airMopError(mop); return 1; } ! qsp->query = airEnumVal(qsp->kind->enm, qstr); ! if (-1 == qsp->query) { sprintf(err, "%s: couldn't parse \"%s\" as a %s varable", ! me, qstr, qsp->kind->name); biffAdd(MITE, err); airMopError(mop); return 1; } --- 92,108 ---- qstr = col+1; if (!strcmp(gageKindScl->name, kstr)) { ! isp->kind = gageKindScl; } else if (!strcmp(gageKindVec->name, kstr)) { ! isp->kind = gageKindVec; } else if (!strcmp(tenGageKind->name, kstr)) { ! isp->kind = tenGageKind; } else { sprintf(err, "%s: don't recognized \"%s\" gage kind", me, kstr); biffAdd(MITE, err); airMopError(mop); return 1; } ! isp->item = airEnumVal(isp->kind->enm, qstr); ! if (-1 == isp->item) { sprintf(err, "%s: couldn't parse \"%s\" as a %s varable", ! me, qstr, isp->kind->name); biffAdd(MITE, err); airMopError(mop); return 1; } *************** *** 134,151 **** } *endparen = 0; ! kqstr = buff + strlen("mite("); ! qsp->query = airEnumVal(miteVal, kqstr); ! if (-1 == qsp->query) { sprintf(err, "%s: couldn't parse \"%s\" as a miteVal variable", ! me, kqstr); biffAdd(MITE, err); airMopError(mop); return 1; } ! qsp->kind = miteValGageKind; } else { /* didn't start with "gage(" or "mite(" */ ! qsp->query = airEnumVal(miteVal, label); ! if (-1 != qsp->query) { /* its measured by mite */ ! qsp->kind = miteValGageKind; fprintf(stderr, "\n%s: WARNING: deprecated use of txf domain " "\"%s\"; should use \"mite(%s)\" instead\n\n", --- 115,132 ---- } *endparen = 0; ! qstr = buff + strlen("mite("); ! isp->item = airEnumVal(miteVal, qstr); ! if (-1 == isp->item) { sprintf(err, "%s: couldn't parse \"%s\" as a miteVal variable", ! me, qstr); biffAdd(MITE, err); airMopError(mop); return 1; } ! isp->kind = miteValGageKind; } else { /* didn't start with "gage(" or "mite(" */ ! isp->item = airEnumVal(miteVal, label); ! if (-1 != isp->item) { /* its measured by mite */ ! isp->kind = miteValGageKind; fprintf(stderr, "\n%s: WARNING: deprecated use of txf domain " "\"%s\"; should use \"mite(%s)\" instead\n\n", *************** *** 160,167 **** } int miteNtxfCheck(const Nrrd *ntxf) { ! char me[]="miteNtxfCheck", err[AIR_STRLEN_MED], *range, *domS; ! gageQuerySpec qsp; int rii, axi; --- 141,166 ---- } + void + miteVariablePrint(char *buff, const gageItemSpec *isp) { + char me[]="miteVariablePrint"; + + if (gageKindScl == isp->kind + || gageKindVec == isp->kind + || tenGageKind == isp->kind) { + sprintf(buff, "gage(%s:%s)", isp->kind->name, + airEnumStr(isp->kind->enm, isp->item)); + } else if (miteValGageKind == isp->kind) { + sprintf(buff, "%s(%s)", isp->kind->name, + airEnumStr(isp->kind->enm, isp->item)); + } else { + sprintf(buff, "(%s: unknown gageKind!)", me); + } + return; + } + int miteNtxfCheck(const Nrrd *ntxf) { ! char me[]="miteNtxfCheck", err[AIR_STRLEN_MED], *rangeStr, *domStr; ! gageItemSpec isp; int rii, axi; *************** *** 185,203 **** biffAdd(MITE, err); return 1; } ! range = ntxf->axis[0].label; ! if (0 == airStrlen(range)) { sprintf(err, "%s: axis[0]'s label doesn't specify txf range", me); biffAdd(MITE, err); return 1; } ! if (airStrlen(range) != ntxf->axis[0].size) { sprintf(err, "%s: axis[0]'s size is %d, but label specifies %d values", ! me, ntxf->axis[0].size, (int)airStrlen(range)); biffAdd(MITE, err); return 1; } ! for (rii=0; rii<airStrlen(range); rii++) { ! if (!strchr(miteRangeChar, range[rii])) { sprintf(err, "%s: char %d of axis[0]'s label (\"%c\") isn't a valid " "transfer function range specifier (not in \"%s\")", ! me, rii, range[rii], miteRangeChar); biffAdd(MITE, err); return 1; } --- 184,202 ---- biffAdd(MITE, err); return 1; } ! rangeStr = ntxf->axis[0].label; ! if (0 == airStrlen(rangeStr)) { sprintf(err, "%s: axis[0]'s label doesn't specify txf range", me); biffAdd(MITE, err); return 1; } ! if (airStrlen(rangeStr) != ntxf->axis[0].size) { sprintf(err, "%s: axis[0]'s size is %d, but label specifies %d values", ! me, ntxf->axis[0].size, (int)airStrlen(rangeStr)); biffAdd(MITE, err); return 1; } ! for (rii=0; rii<airStrlen(rangeStr); rii++) { ! if (!strchr(miteRangeChar, rangeStr[rii])) { sprintf(err, "%s: char %d of axis[0]'s label (\"%c\") isn't a valid " "transfer function range specifier (not in \"%s\")", ! me, rii, rangeStr[rii], miteRangeChar); biffAdd(MITE, err); return 1; } *************** *** 218,239 **** biffAdd(MITE, err); return 1; } ! domS = ntxf->axis[axi].label; ! if (0 == airStrlen(domS)) { sprintf(err, "%s: axis[%d] of txf didn't specify a domain variable", me, axi); biffAdd(MITE, err); return 1; } ! if (miteVariableParse(&qsp, domS)) { sprintf(err, "%s: couldn't parse txf domain \"%s\" for axis %d\n", ! me, domS, axi); biffAdd(MITE, err); return 1; } ! if (!( 1 == qsp.kind->ansLength[qsp.query] || ! 3 == qsp.kind->ansLength[qsp.query] )) { sprintf(err, "%s: %s not a scalar or vector: can't be a txf " ! "domain variable", me, domS); biffAdd(MITE, err); return 1; } ! if (3 == qsp.kind->ansLength[qsp.query]) { /* has to be right length for one of the quantization schemes */ if (!( limnQNBins[limnQN16checker] == ntxf->axis[axi].size || --- 217,238 ---- biffAdd(MITE, err); return 1; } ! domStr = ntxf->axis[axi].label; ! if (0 == airStrlen(domStr)) { sprintf(err, "%s: axis[%d] of txf didn't specify a domain variable", me, axi); biffAdd(MITE, err); return 1; } ! if (miteVariableParse(&isp, domStr)) { sprintf(err, "%s: couldn't parse txf domain \"%s\" for axis %d\n", ! me, domStr, axi); biffAdd(MITE, err); return 1; } ! if (!( 1 == isp.kind->table[isp.item].answerLength || ! 3 == isp.kind->table[isp.item].answerLength )) { sprintf(err, "%s: %s not a scalar or vector: can't be a txf " ! "domain variable", me, domStr); biffAdd(MITE, err); return 1; } ! if (3 == isp.kind->table[isp.item].answerLength) { /* has to be right length for one of the quantization schemes */ if (!( limnQNBins[limnQN16checker] == ntxf->axis[axi].size || *************** *** 241,245 **** limnQNBins[limnQN12checker] == ntxf->axis[axi].size )) { sprintf(err, "%s: vector %s can be quantized into %d, %d, or %d bins " ! "but not %d", me, domS, limnQNBins[limnQN16checker], limnQNBins[limnQN14checker], limnQNBins[limnQN12checker], ntxf->axis[axi].size); --- 240,244 ---- limnQNBins[limnQN12checker] == ntxf->axis[axi].size )) { sprintf(err, "%s: vector %s can be quantized into %d, %d, or %d bins " ! "but not %d", me, domStr, limnQNBins[limnQN16checker], limnQNBins[limnQN14checker], limnQNBins[limnQN12checker], ntxf->axis[axi].size); *************** *** 253,264 **** /* ! ** _miteQuery() ** ! ** This looks a given gageQuerySpec and sets the bits in the ** gageKindScl and tenGageKind queries that are required to calculate ** the quantity ** ! ** NOTE: This does NOT initialize the *query{Scl,Vec,Ten}: it ! ** just bit-wise or's on new stuff ** ** HEY: this is really unfortunate: each new gage type use for --- 252,263 ---- /* ! ******** miteQueryAdd() ** ! ** This looks a given gageItemSpec and sets the bits in the ** gageKindScl and tenGageKind queries that are required to calculate ** the quantity ** ! ** NOTE: This does NOT initialize the query{Scl,Vec,Ten}: it ! ** just adds on new items to the existing queries ** ** HEY: this is really unfortunate: each new gage type use for *************** *** 266,306 **** ** arguments here, which is part of the reason that mite may end ** up explicitly depending on the libraries supplying those gageKinds ! ** (like how new mite depends on ten) */ void ! _miteQuery(unsigned int *queryScl, ! unsigned int *queryVec, ! unsigned int *queryTen, gageQuerySpec *qsp) { ! char me[]="_miteQuery"; ! /* ! for (i=1; i<ntxf->dim; i++) { ! miteVariableParse(qsp, ntxf->axis[i].label); ! */ ! if (gageKindScl == qsp->kind) { ! *queryScl |= 1 << qsp->query; ! } else if (gageKindVec == qsp->kind) { ! *queryVec |= 1 << qsp->query; ! } else if (tenGageKind == qsp->kind) { ! *queryTen |= 1 << qsp->query; ! } else if (miteValGageKind == qsp->kind) { ! /* HEY: the first of these two have useful analogs for tensor ! data, but I won't be able to express them ... */ ! switch(qsp->query) { case miteValNdotV: ! *queryScl |= 1 << gageSclNormal; break; case miteValNdotL: ! *queryScl |= 1 << gageSclNormal; break; case miteValGTdotV: ! *queryScl |= 1 << gageSclGeomTens; break; case miteValVrefN: ! *queryScl |= 1 << gageSclNormal; break; case miteValVdefT: case miteValVdefTdotV: ! *queryTen |= 1 << tenGageTensor; break; } --- 265,305 ---- ** arguments here, which is part of the reason that mite may end ** up explicitly depending on the libraries supplying those gageKinds ! ** (like how mite now must depend on ten) */ void ! miteQueryAdd(gageQuery queryScl, ! gageQuery queryVec, ! gageQuery queryTen, gageItemSpec *isp) { ! char me[]="miteQueryAdd"; ! if (gageKindScl == isp->kind) { ! GAGE_QUERY_ITEM_ON(queryScl, isp->item); ! } else if (gageKindVec == isp->kind) { ! GAGE_QUERY_ITEM_ON(queryVec, isp->item); ! } else if (tenGageKind == isp->kind) { ! GAGE_QUERY_ITEM_ON(queryTen, isp->item); ! } else if (miteValGageKind == isp->kind) { ! /* HEY: some these have useful analogs for tensor data, but I ! won't be able to express them. This means that while Phong ! shading of *scalar* volumes can be implemented with transfer ! functions, it is currently not possible in *tensor* volumes ! (for instance, using the gradient of fractional anisotropy) */ ! switch(isp->item) { case miteValNdotV: ! GAGE_QUERY_ITEM_ON(queryScl, gageSclNormal); break; case miteValNdotL: ! GAGE_QUERY_ITEM_ON(queryScl, gageSclNormal); break; case miteValGTdotV: ! GAGE_QUERY_ITEM_ON(queryScl, gageSclGeomTens); break; case miteValVrefN: ! GAGE_QUERY_ITEM_ON(queryScl, gageSclNormal); break; case miteValVdefT: + GAGE_QUERY_ITEM_ON(queryTen, tenGageTensor); case miteValVdefTdotV: ! GAGE_QUERY_ITEM_ON(queryTen, tenGageTensor); break; } *************** *** 418,421 **** --- 417,446 ---- } + gage_t * + _miteAnswerPointer(miteThread *mtt, gageItemSpec *isp) { + char me[]="_miteAnswerPointer"; + gage_t *ret; + + if (gageKindScl == isp->kind) { + ret = mtt->ansScl; + } else if (gageKindVec == isp->kind) { + ret = mtt->ansVec; + } else if (tenGageKind == isp->kind) { + ret = mtt->ansTen; + } else if (miteValGageKind == isp->kind) { + ret = mtt->ansMiteVal; + } else { + fprintf(stderr, "\nPANIC: %s: unknown gageKind!\n", me); + exit(1); + } + ret += gageKindAnswerOffset(isp->kind, isp->item); + return ret; + } + + /* + ** _miteStageSet + ** + ** ALLOCATES and initializes stage array in a miteThread + */ int _miteStageSet(miteThread *mtt, miteRender *mrr) { *************** *** 424,428 **** Nrrd *ntxf; miteStage *stage; ! gageQuerySpec qsp; char rc; --- 449,453 ---- Nrrd *ntxf; miteStage *stage; ! gageItemSpec isp; char rc; *************** *** 442,460 **** stage = mtt->stage + stageIdx; _miteStageInit(stage); ! miteVariableParse(&qsp, ntxf->axis[di].label); ! if (gageKindScl == qsp.kind) { ! stage->val = mtt->ansScl; ! } else if (gageKindVec == qsp.kind) { ! stage->val = mtt->ansVec; ! } else if (tenGageKind == qsp.kind) { ! stage->val = mtt->ansTen; ! } else if (miteValGageKind == qsp.kind) { ! stage->val = mtt->ansMiteVal; ! } else { ! sprintf(err, "%s: don't handle gageKind for \"%s\"", ! me, ntxf->axis[di].label); ! biffAdd(MITE, err); return 1; ! } ! stage->val += qsp.kind->ansOffset[qsp.query]; /* fprintf(stderr, "!%s: ans=%p + offset[%d]=%d == %p\n", me, --- 467,472 ---- stage = mtt->stage + stageIdx; _miteStageInit(stage); ! miteVariableParse(&isp, ntxf->axis[di].label); ! stage->val = _miteAnswerPointer(mtt, &isp); /* fprintf(stderr, "!%s: ans=%p + offset[%d]=%d == %p\n", me, *************** *** 469,475 **** stage->data = ntxf->data; stage->op = miteStageOpMultiply; ! if (1 == qsp.kind->ansLength[qsp.query]) { stage->qn = NULL; ! } else if (3 == 1 == qsp.kind->ansLength[qsp.query]) { if (limnQNBins[limnQN16checker] == ntxf->axis[di].size) { stage->qn = limnVtoQN_GT[limnQN16checker]; --- 481,487 ---- stage->data = ntxf->data; stage->op = miteStageOpMultiply; ! if (1 == isp.kind->table[isp.item].answerLength) { stage->qn = NULL; ! } else if (3 == isp.kind->table[isp.item].answerLength) { if (limnQNBins[limnQN16checker] == ntxf->axis[di].size) { stage->qn = limnVtoQN_GT[limnQN16checker]; *************** *** 487,491 **** sprintf(err, "%s: %s not scalar or vector (len = %d): can't be " "a txf domain variable", me, ! ntxf->axis[di].label, qsp.kind->ansLength[qsp.query]); biffAdd(MITE, err); return 1; } --- 499,504 ---- sprintf(err, "%s: %s not scalar or vector (len = %d): can't be " "a txf domain variable", me, ! ntxf->axis[di].label, ! isp.kind->table[isp.item].answerLength); biffAdd(MITE, err); return 1; } *************** *** 528,532 **** for (rii=0; rii<stage->rangeNum; rii++) { ri = stage->rangeIdx[rii]; ! mtt->range[ri] *= rangeData[rii]; } finalIdx = 0; --- 541,559 ---- for (rii=0; rii<stage->rangeNum; rii++) { ri = stage->rangeIdx[rii]; ! switch(stage->op) { ! case miteStageOpMin: ! mtt->range[ri] = AIR_MIN(mtt->range[ri], rangeData[rii]); ! break; ! case miteStageOpMax: ! mtt->range[ri] = AIR_MAX(mtt->range[ri], rangeData[rii]); ! break; ! case miteStageOpAdd: ! mtt->range[ri] += rangeData[rii]; ! break; ! case miteStageOpMultiply: ! default: ! mtt->range[ri] *= rangeData[rii]; ! break; ! } } finalIdx = 0; Index: user.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/user.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** user.c 13 Feb 2004 22:58:41 -0000 1.14 --- user.c 26 Feb 2004 06:26:10 -0000 1.15 *************** *** 44,48 **** muu->refStep = miteDefRefStep; muu->rayStep = AIR_NAN; ! muu->near1 = miteDefNear1; muu->hctx = hooverContextNew(); airMopAdd(muu->umop, muu->hctx, (airMopper)hooverContextNix, airMopAlways); --- 44,49 ---- muu->refStep = miteDefRefStep; muu->rayStep = AIR_NAN; ! muu->opacMatters = miteDefOpacMatters; ! muu->opacNear1 = miteDefOpacNear1; muu->hctx = hooverContextNew(); airMopAdd(muu->umop, muu->hctx, (airMopper)hooverContextNix, airMopAlways); *************** *** 75,79 **** _miteUserCheck(miteUser *muu) { char me[]="miteUserCheck", err[AIR_STRLEN_MED]; ! int T, gotOpac; if (!muu) { --- 76,84 ---- _miteUserCheck(miteUser *muu) { char me[]="miteUserCheck", err[AIR_STRLEN_MED]; ! int T, axi, gotOpac; ! gageItemSpec isp; ! gageQuery queryScl, queryVec, queryTen; ! miteShadeSpec *shpec; ! airArray *mop; if (!muu) { *************** *** 81,94 **** biffAdd(MITE, err); return 1; } if (!( muu->ntxfNum >= 1 )) { sprintf(err, "%s: need at least one transfer function", me); ! biffAdd(MITE, err); return 1; } gotOpac = AIR_FALSE; for (T=0; T<muu->ntxfNum; T++) { if (miteNtxfCheck(muu->ntxf[T])) { sprintf(err, "%s: ntxf[%d] (%d of %d) can't be used as a txf", me, T, T+1, muu->ntxfNum); ! biffAdd(MITE, err); return 1; } gotOpac |= !!strchr(muu->ntxf[T]->axis[0].label, 'A'); --- 86,108 ---- biffAdd(MITE, err); return 1; } + mop = airMopNew(); if (!( muu->ntxfNum >= 1 )) { sprintf(err, "%s: need at least one transfer function", me); ! biffAdd(MITE, err); airMopError(mop); return 1; } gotOpac = AIR_FALSE; + GAGE_QUERY_RESET(queryScl); + GAGE_QUERY_RESET(queryVec); + GAGE_QUERY_RESET(queryTen); for (T=0; T<muu->ntxfNum; T++) { if (miteNtxfCheck(muu->ntxf[T])) { sprintf(err, "%s: ntxf[%d] (%d of %d) can't be used as a txf", me, T, T+1, muu->ntxfNum); ! biffAdd(MITE, err); airMopError(mop); return 1; ! } ! /* NOTE: no error checking because miteNtxfCheck succeeded */ ! for (axi=1; axi<muu->ntxf[T]->dim; axi++) { ! miteVariableParse(&isp, muu->ntxf[T]->axis[axi].label); ! miteQueryAdd(queryScl, queryVec, queryTen, &isp); } gotOpac |= !!strchr(muu->ntxf[T]->axis[0].label, 'A'); *************** *** 102,125 **** "************************\n\n\n", me); } if (!muu->nout) { sprintf(err, "%s: rendered image nrrd is NULL", me); ! biffAdd(MITE, err); return 1; ! } ! if (!(muu->nsin || muu->ntin)) { ! sprintf(err, "%s: got neither scalar nor tensor volume", me); ! biffAdd(MITE, err); return 1; } if (muu->nsin) { if (gageVolumeCheck(muu->gctx0, muu->nsin, gageKindScl)) { ! sprintf(err, "%s: trouble with input scalar volume", me); ! biffMove(MITE, err, GAGE); return 1; } ! } else { if (gageVolumeCheck(muu->gctx0, muu->ntin, tenGageKind)) { ! sprintf(err, "%s: trouble with input tensor volume", me); ! biffMove(MITE, err, GAGE); return 1; } } ! return 0; } --- 116,168 ---- "************************\n\n\n", me); } + shpec = miteShadeSpecNew(); + airMopAdd(mop, shpec, (airMopper)miteShadeSpecNix, airMopAlways); + if (miteShadeSpecParse(shpec, muu->shadeStr)) { + sprintf(err, "%s: couldn't parse shading spec \"%s\"", + me, muu->shadeStr); + biffAdd(MITE, err); airMopError(mop); return 1; + } + miteShadeSpecQueryAdd(queryScl, queryVec, queryTen, shpec); + if (GAGE_QUERY_NONZERO(queryScl) && !(muu->nsin)) { + sprintf(err, "%s: txf or shading require %s volume, but don't have one", + me, gageKindScl->name); + biffAdd(MITE, err); airMopError(mop); return 1; + } + if (GAGE_QUERY_NONZERO(queryVec) && !(muu->nvin)) { + sprintf(err, "%s: txf or shading require %s volume, but don't have one", + me, gageKindVec->name); + biffAdd(MITE, err); airMopError(mop); return 1; + } + if (GAGE_QUERY_NONZERO(queryTen) && !(muu->ntin)) { + sprintf(err, "%s: txf or shading require %s volume, but don't have one", + me, tenGageKind->name); + biffAdd(MITE, err); airMopError(mop); return 1; + } if (!muu->nout) { sprintf(err, "%s: rendered image nrrd is NULL", me); ! biffAdd(MITE, err); airMopError(mop); return 1; } if (muu->nsin) { if (gageVolumeCheck(muu->gctx0, muu->nsin, gageKindScl)) { ! sprintf(err, "%s: trouble with input %s volume", ! me, gageKindScl->name); ! biffMove(MITE, err, GAGE); airMopError(mop); return 1; } ! } ! if (muu->nvin) { ! if (gageVolumeCheck(muu->gctx0, muu->nvin, gageKindVec)) { ! sprintf(err, "%s: trouble with input %s volume", ! me, gageKindVec->name); ! biffMove(MITE, err, GAGE); airMopError(mop); return 1; ! } ! } ! if (muu->ntin) { if (gageVolumeCheck(muu->gctx0, muu->ntin, tenGageKind)) { ! sprintf(err, "%s: trouble with input %s volume", ! me, tenGageK... [truncated message content] |
|
From: <kin...@us...> - 2004-02-26 06:28:09
|
Update of /cvsroot/teem/teem/src/gage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12647 Modified Files: scl.c Log Message: tentatively removed \"n\" as synonim for normalized gradient in gageScl airEnum Index: scl.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/scl.c,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** scl.c 23 Feb 2004 06:02:19 -0000 1.32 --- scl.c 26 Feb 2004 06:20:25 -0000 1.33 *************** *** 193,197 **** "gv", "gvec", "gradvec", "grad vec", "gradient vector", "gm", "gmag", "gradmag", "grad mag", "gradient magnitude", ! "n", "normal", "gnorm", "normg", "norm", "normgrad", \ "norm grad", "normalized gradient", "np", "nperp", --- 193,197 ---- "gv", "gvec", "gradvec", "grad vec", "gradient vector", "gm", "gmag", "gradmag", "grad mag", "gradient magnitude", ! "gn", /* pray "n", */ "normal", "gnorm", "normg", "norm", "normgrad", \ "norm grad", "normalized gradient", "np", "nperp", *************** *** 226,230 **** GS_GV, GS_GV, GS_GV, GS_GV, GS_GV, GS_GM, GS_GM, GS_GM, GS_GM, GS_GM, ! GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_NP, GS_NP, GS_H, GS_H, GS_H, --- 226,230 ---- GS_GV, GS_GV, GS_GV, GS_GV, GS_GV, GS_GM, GS_GM, GS_GM, GS_GM, GS_GM, ! GS_N, /* pray GS_N, */ GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_NP, GS_NP, GS_H, GS_H, GS_H, |
|
From: <kin...@us...> - 2004-02-26 06:27:14
|
Update of /cvsroot/teem/teem/src/gage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12510 Modified Files: gage.h Log Message: added GAGE_QUERY_ZERO, re-ordered item and kind in gageItemSpec Index: gage.h =================================================================== RCS file: /cvsroot/teem/teem/src/gage/gage.h,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -d -r1.60 -r1.61 *** gage.h 19 Feb 2004 03:50:02 -0000 1.60 --- gage.h 26 Feb 2004 06:19:28 -0000 1.61 *************** *** 449,452 **** --- 449,454 ---- (p[0] == q[0] && p[1] == q[1] && p[2] == q[2] && p[3] == q[3] \ && p[4] == q[4] && p[5] == q[5] && p[6] == q[6] && p[7] == q[7]) + #define GAGE_QUERY_NONZERO(q) \ + (q[0] | q[1] | q[2] | q[3] | q[4] | q[5] | q[6] | q[7]) #define GAGE_QUERY_ITEM_TEST(q, i) (q[i/8] & (1 << (i % 8))) #define GAGE_QUERY_ITEM_ON(q, i) (q[i/8] |= (1 << (i % 8))) *************** *** 572,580 **** ******** gageItemSpec struct ** ! ** dumb little way to store an item/kind pair */ typedef struct { ! int item; /* the quantity we care about */ ! gageKind *kind; /* what kind it comes from */ } gageItemSpec; --- 574,583 ---- ******** gageItemSpec struct ** ! ** dumb little way to store a kind/item pair. Formerly known ! ** as a gageQuerySpec. */ typedef struct { ! gageKind *kind; /* the kind of the volume to measure */ ! int item; /* the quantity to measure */ } gageItemSpec; |
|
From: <kin...@us...> - 2004-02-23 20:01:05
|
Update of /cvsroot/teem/teem/src/nrrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9317 Modified Files: enumsNrrd.c Log Message: added stdv as alias for nrrdMeasureSD to nrrdMeasure airEnum Index: enumsNrrd.c =================================================================== RCS file: /cvsroot/teem/teem/src/nrrd/enumsNrrd.c,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** enumsNrrd.c 9 Feb 2004 06:49:29 -0000 1.29 --- enumsNrrd.c 23 Feb 2004 18:04:15 -0000 1.30 *************** *** 537,541 **** "Linf", "variance", "var", ! "SD", "histo-min", "histo-max", --- 537,541 ---- "Linf", "variance", "var", ! "SD", "stdv", "histo-min", "histo-max", *************** *** 564,568 **** nrrdMeasureLinf, nrrdMeasureVariance, nrrdMeasureVariance, ! nrrdMeasureSD, nrrdMeasureHistoMin, nrrdMeasureHistoMax, --- 564,568 ---- nrrdMeasureLinf, nrrdMeasureVariance, nrrdMeasureVariance, ! nrrdMeasureSD, nrrdMeasureSD, nrrdMeasureHistoMin, nrrdMeasureHistoMax, |
|
From: <kin...@us...> - 2004-02-23 06:16:35
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30125 Modified Files: enumsTen.c ten.h tenGage.c Log Message: added P (and its derivatives), the phase of the cubic eigenvalue polynomial, as new quantity in tenGage, and finished preliminary debugging Index: enumsTen.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/enumsTen.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** enumsTen.c 23 Feb 2004 02:40:24 -0000 1.16 --- enumsTen.c 23 Feb 2004 06:03:13 -0000 1.17 *************** *** 73,76 **** --- 73,77 ---- "FA", "R", + "P", "evals", *************** *** 113,116 **** --- 114,121 ---- "R normal", + "P grad vec", + "P grad mag", + "P normal", + "anisotropies" }; *************** *** 127,130 **** --- 132,136 ---- "FA", "R", + "P", "3 eigenvalues", "eigenvalue 0", *************** *** 157,160 **** --- 163,169 ---- "R grad mag", "R normal", + "P grad vec", + "P grad mag", + "P normal", "anisotropies" }; *************** *** 163,205 **** _tenGageVal[] = { tenGageUnknown, ! tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ ! tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageB, /* 2: "b": GT[1] */ ! tenGageDet, /* 3: "det", determinant of tensor: GT[1] */ ! tenGageS, /* 4: "s", square of frobenius norm: GT[1] */ ! tenGageQ, /* 5: "q", (S - B)/9: GT[1] */ ! tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ ! tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! tenGageEval, /* 8: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 9: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 10: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 11: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 12: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 13: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 14: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 15: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 16: "tg, all tensor component gradients: GT[21] */ ! tenGageTraceGradVec, /* 17: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 18: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 19: "trn": normal of trace: GT[3] */ ! tenGageBGradVec, /* 20: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 21: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 22: "bn", normal of B: GT[3] */ ! tenGageDetGradVec, /* 23: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 24: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 25: "detn", normal of Det: GT[3] */ ! tenGageSGradVec, /* 26: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 27: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 28: "sn", normal of S: GT[3] */ ! tenGageQGradVec, /* 29: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 30: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 31: "qn", normalized gradient of Q: GT[3] */ ! tenGageFAGradVec, /* 32: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 33: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 34: "fan", normalized gradient of FA: GT[3] */ ! tenGageRGradVec, /* 35: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 36: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 37: "rn", normalized gradient of Q: GT[3] */ ! tenGageAniso /* 38: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ }; --- 172,218 ---- _tenGageVal[] = { tenGageUnknown, ! tenGageTensor, /* "t", the reconstructed tensor: GT[7] */ ! tenGageTrace, /* "tr", trace of tensor: GT[1] */ ! tenGageB, /* "b": GT[1] */ ! tenGageDet, /* "det", determinant of tensor: GT[1] */ ! tenGageS, /* "s", square of frobenius norm: GT[1] */ ! tenGageQ, /* "q", (S - B)/9: GT[1] */ ! tenGageFA, /* "fa", fractional anisotropy: GT[1] */ ! tenGageR, /* "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! tenGageP, /* "p", arccos(R/sqrt(Q^3)): GT[1] */ ! tenGageEval, /* "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* "tg, all tensor component gradients: GT[21] */ ! tenGageTraceGradVec, /* "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* "trn": normal of trace: GT[3] */ ! tenGageBGradVec, /* "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* "bn", normal of B: GT[3] */ ! tenGageDetGradVec, /* "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* "detn", normal of Det: GT[3] */ ! tenGageSGradVec, /* "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* "sn", normal of S: GT[3] */ ! tenGageQGradVec, /* "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* "qn", normalized gradient of Q: GT[3] */ ! tenGageFAGradVec, /* "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* "fan", normalized gradient of FA: GT[3] */ ! tenGageRGradVec, /* "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* "rn", normalized gradient of Q: GT[3] */ ! tenGagePGradVec, /* "pgv", gradient vector of P: GT[3] */ ! tenGagePGradMag, /* "pgm", gradient magnitude of P: GT[1] */ ! tenGagePNormal, /* "pn", normalized gradient of P: GT[3] */ ! tenGageAniso /* "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ }; *************** *** 214,217 **** --- 227,231 ---- "fa", "r", + "p", "eval", "eval0", *************** *** 244,247 **** --- 258,264 ---- "rgm", "r grad mag", "rn", "r normal", + "pgv", "p grad vec", + "pgm", "p grad mag", + "pn", "p normal", "an", "aniso", "anisotropies", "" *************** *** 258,261 **** --- 275,279 ---- tenGageFA, tenGageR, + tenGageP, tenGageEval, tenGageEval0, *************** *** 288,291 **** --- 306,312 ---- tenGageRGradMag, tenGageRGradMag, tenGageRNormal, tenGageRNormal, + tenGagePGradVec, tenGagePGradVec, + tenGagePGradMag, tenGagePGradMag, + tenGagePNormal, tenGagePNormal, tenGageAniso, tenGageAniso, tenGageAniso }; Index: ten.h =================================================================== RCS file: /cvsroot/teem/teem/src/ten/ten.h,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** ten.h 23 Feb 2004 02:40:24 -0000 1.74 --- ten.h 23 Feb 2004 06:03:13 -0000 1.75 *************** *** 151,155 **** ** R = (9*A*B - 2*A^3 - 27*C)/54 = (5*A*B - 2*A*S - 27*C)/54 = thirdmoment({v1,v2,v3})/2 ! ** (phase in cubic solution = arccos(R/sqrt(Q)^3)) */ enum { --- 151,155 ---- ** R = (9*A*B - 2*A^3 - 27*C)/54 = (5*A*B - 2*A*S - 27*C)/54 = thirdmoment({v1,v2,v3})/2 ! ** P = arccos(R/sqrt(Q)^3) = phase angle of cubic solution */ enum { *************** *** 164,212 **** tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! tenGageEval, /* 8: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 9: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 10: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 11: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 12: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 13: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 14: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 15: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 16: "tg, all tensor component gradients, starting with the confidence gradient: GT[21] */ ! tenGageTraceGradVec, /* 17: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 18: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 19: "trn": normal of trace: GT[3] */ ! tenGageBGradVec, /* 20: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 21: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 22: "bn", normal of B: GT[3] */ ! tenGageDetGradVec, /* 23: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 24: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 25: "detn", normal of Det: GT[3] */ ! tenGageSGradVec, /* 26: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 27: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 28: "sn", normal of S: GT[3] */ ! tenGageQGradVec, /* 29: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 30: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 31: "qn", normalized gradient of Q: GT[3] */ ! tenGageFAGradVec, /* 32: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 33: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 34: "fan", normalized gradient of FA: GT[3] */ ! tenGageRGradVec, /* 35: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 36: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 37: "rn", normalized gradient of Q: GT[3] */ ! tenGageAniso, /* 38: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ tenGageLast }; ! #define TEN_GAGE_ITEM_MAX 38 /* --- 164,217 ---- tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ + tenGageP, /* 8: "p", arccos(R/sqrt(Q^3)): GT[1] */ ! tenGageEval, /* 9: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 10: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 11: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 12: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 13: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 14: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 15: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 16: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 17: "tg, all tensor component gradients, starting with the confidence gradient: GT[21] */ ! tenGageTraceGradVec, /* 18: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 19: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 20: "trn": normal of trace: GT[3] */ ! tenGageBGradVec, /* 21: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 22: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 23: "bn", normal of B: GT[3] */ ! tenGageDetGradVec, /* 24: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 25: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 26: "detn", normal of Det: GT[3] */ ! tenGageSGradVec, /* 27: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 28: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 29: "sn", normal of S: GT[3] */ ! tenGageQGradVec, /* 30: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 31: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 32: "qn", normalized gradient of Q: GT[3] */ ! tenGageFAGradVec, /* 33: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 34: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 35: "fan", normalized gradient of FA: GT[3] */ ! tenGageRGradVec, /* 36: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 37: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 38: "rn", normalized gradient of Q: GT[3] */ ! tenGagePGradVec, /* 39: "pgv", gradient vector of P: GT[3] */ ! tenGagePGradMag, /* 40: "pgm", gradient magnitude of P: GT[1] */ ! tenGagePNormal, /* 41: "pn", normalized gradient of P: GT[3] */ ! ! tenGageAniso, /* 42: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ tenGageLast }; ! #define TEN_GAGE_ITEM_MAX 42 /* Index: tenGage.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tenGage.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** tenGage.c 23 Feb 2004 02:40:24 -0000 1.14 --- tenGage.c 23 Feb 2004 06:03:13 -0000 1.15 *************** *** 24,67 **** gageItemEntry _tenGageTable[TEN_GAGE_ITEM_MAX+1] = { ! /* enum value len,deriv, prereqs, parent item, index*/ ! {tenGageTensor, 7, 0, {-1, -1, -1, -1, -1}, -1, -1}, ! {tenGageTrace, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageB, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageDet, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageS, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageQ, 1, 0, {tenGageS, tenGageB, -1, -1, -1}, -1, -1}, ! {tenGageFA, 1, 0, {tenGageQ, tenGageS, -1, -1, -1}, -1, -1}, ! {tenGageR, 1, 0, {tenGageTrace, tenGageB, tenGageDet, tenGageS, -1}, -1, -1}, ! {tenGageEval, 3, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageEval0, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 0}, ! {tenGageEval1, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 1}, ! {tenGageEval2, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 2}, ! {tenGageEvec, 9, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageEvec0, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 0}, ! {tenGageEvec1, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 3}, ! {tenGageEvec2, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 6}, ! {tenGageTensorGrad, 21, 1, {-1, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradMag, 1, 1, {tenGageTraceGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceNormal, 3, 1, {tenGageTraceGradVec, tenGageTraceGradMag, -1, -1, -1}, -1, -1}, ! {tenGageBGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageBGradMag, 1, 1, {tenGageBGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageBNormal, 3, 1, {tenGageBGradVec, tenGageBGradMag, -1, -1, -1}, -1, -1}, ! {tenGageDetGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageDetGradMag, 1, 1, {tenGageDetGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageDetNormal, 3, 1, {tenGageDetGradVec, tenGageDetGradMag, -1, -1, -1}, -1, -1}, ! {tenGageSGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageSGradMag, 1, 1, {tenGageSGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageSNormal, 3, 1, {tenGageSGradVec, tenGageSGradMag, -1, -1, -1}, -1, -1}, ! {tenGageQGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageQGradMag, 1, 1, {tenGageQGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag, -1, -1, -1}, -1, -1}, ! {tenGageFAGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageFAGradMag, 1, 1, {tenGageFAGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageFANormal, 3, 1, {tenGageFAGradVec, tenGageFAGradMag, -1, -1, -1}, -1, -1}, ! {tenGageRGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageRGradMag, 1, 1, {tenGageRGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageRNormal, 3, 1, {tenGageRGradVec, tenGageRGradMag, -1, -1, -1}, -1, -1}, ! {tenGageAniso, TEN_ANISO_MAX+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2, -1, -1}, -1, -1} }; --- 24,83 ---- gageItemEntry _tenGageTable[TEN_GAGE_ITEM_MAX+1] = { ! /* enum value len,deriv, prereqs, parent item, index*/ ! {tenGageTensor, 7, 0, {-1, -1, -1, -1, -1}, -1, -1}, ! ! {tenGageTrace, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageB, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageDet, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageS, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageQ, 1, 0, {tenGageS, tenGageB, -1, -1, -1}, -1, -1}, ! {tenGageFA, 1, 0, {tenGageQ, tenGageS, -1, -1, -1}, -1, -1}, ! {tenGageR, 1, 0, {tenGageTrace, tenGageB, tenGageDet, tenGageS, -1}, -1, -1}, ! {tenGageP, 1, 0, {tenGageR, tenGageQ, -1, -1, -1}, -1, -1}, ! ! {tenGageEval, 3, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageEval0, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 0}, ! {tenGageEval1, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 1}, ! {tenGageEval2, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 2}, ! {tenGageEvec, 9, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageEvec0, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 0}, ! {tenGageEvec1, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 3}, ! {tenGageEvec2, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 6}, ! ! {tenGageTensorGrad, 21, 1, {-1, -1, -1, -1, -1}, -1, -1}, ! ! {tenGageTraceGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradMag, 1, 1, {tenGageTraceGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceNormal, 3, 1, {tenGageTraceGradVec, tenGageTraceGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageBGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageBGradMag, 1, 1, {tenGageBGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageBNormal, 3, 1, {tenGageBGradVec, tenGageBGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageDetGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageDetGradMag, 1, 1, {tenGageDetGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageDetNormal, 3, 1, {tenGageDetGradVec, tenGageDetGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageSGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageSGradMag, 1, 1, {tenGageSGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageSNormal, 3, 1, {tenGageSGradVec, tenGageSGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageQGradVec, 3, 1, {tenGageSGradVec, tenGageBGradVec, -1, -1, -1}, -1, -1}, ! {tenGageQGradMag, 1, 1, {tenGageQGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageFAGradVec, 3, 1, {tenGageQGradVec, tenGageSGradVec, tenGageFA, -1, -1}, -1, -1}, ! {tenGageFAGradMag, 1, 1, {tenGageFAGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageFANormal, 3, 1, {tenGageFAGradVec, tenGageFAGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageRGradVec, 3, 1, {tenGageTraceGradVec, tenGageBGradVec, tenGageDetGradVec, tenGageSGradVec, -1}, -1, -1}, ! {tenGageRGradMag, 1, 1, {tenGageRGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageRNormal, 3, 1, {tenGageRGradVec, tenGageRGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGagePGradVec, 3, 1, {tenGageRGradVec, tenGageQGradVec, tenGageP, -1, -1}, -1, -1}, ! {tenGagePGradMag, 1, 1, {tenGagePGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGagePNormal, 3, 1, {tenGagePGradVec, tenGagePGradMag, -1, -1, -1}, -1, -1}, ! ! {tenGageAniso, TEN_ANISO_MAX+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2, -1, -1}, -1, -1} }; *************** *** 127,137 **** _tenGageAnswer (gageContext *ctx, gagePerVolume *pvl) { /* char me[]="_tenGageAnswer"; */ ! gage_t *tenAns, *evalAns, *evecAns, *vecTmp=NULL, magTmp=0, ! tmp0, tmp1, ! dtConf=0, dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, *gradDtA=NULL, *gradDtB=NULL, *gradDtC=NULL, *gradDtD=NULL, *gradDtE=NULL, *gradDtF=NULL, ! gradCbA[3], *gradCbS=NULL, *gradCbB=NULL, *gradCbQ=NULL, ! cbQ=0, cbA=0, cbB=0, cbC=0, cbS=0; #if !GAGE_TYPE_FLOAT --- 143,155 ---- _tenGageAnswer (gageContext *ctx, gagePerVolume *pvl) { /* char me[]="_tenGageAnswer"; */ ! double epsilon=1.0E-13; ! gage_t *tenAns, *evalAns, *evecAns, *vecTmp=NULL, *gradDtA=NULL, *gradDtB=NULL, *gradDtC=NULL, *gradDtD=NULL, *gradDtE=NULL, *gradDtF=NULL, ! *gradCbS=NULL, *gradCbB=NULL, *gradCbQ=NULL, *gradCbR=NULL; ! double tmp0, tmp1, magTmp=0, ! gradCbA[3], gradCbC[3], ! dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, ! cbQQQ=0, cbQ=0, cbR=0, cbA=0, cbB=0, cbC=0, cbS=0; #if !GAGE_TYPE_FLOAT *************** *** 145,149 **** if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensor)) { /* done if doV */ - dtConf = tenAns[0]; dtA = tenAns[1]; dtB = tenAns[2]; --- 163,166 ---- *************** *** 177,184 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFA)) { ! pvl->directAnswer[tenGageFA][0] = 3*sqrt(cbQ/cbS); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageR)) { ! pvl->directAnswer[tenGageR][0] = (5*cbA*cbB - 27*cbC - 2*cbA*cbS)/54; } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)) { --- 194,207 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFA)) { ! pvl->directAnswer[tenGageFA][0] = 3*sqrt(cbQ/(epsilon + cbS)); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageR)) { ! cbR = pvl->directAnswer[tenGageR][0] = (5*cbA*cbB - 27*cbC - 2*cbA*cbS)/54; ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageP)) { ! cbQQQ = cbQ*cbQ*cbQ; ! tmp0 = cbR/(epsilon + sqrt(cbQQQ)); ! tmp0 = AIR_CLAMP(0.0, tmp0, 1.0); ! pvl->directAnswer[tenGageP][0] = acos(tmp0); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)) { *************** *** 224,228 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageTraceNormal], 1.0/magTmp, vecTmp); } /* --- B --- */ --- 247,252 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageTraceNormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- B --- */ *************** *** 241,245 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageBNormal], 1.0/magTmp, vecTmp); } /* --- Det --- */ --- 265,270 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageBNormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- Det --- */ *************** *** 253,256 **** --- 278,282 ---- 2*(dtB*dtC - dtA*dtE), gradDtE, dtA*dtD - dtB*dtB, gradDtF); + ELL_3V_SCALE(gradCbC, -1, vecTmp); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradMag)) { *************** *** 258,262 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageDetNormal], 1.0/magTmp, vecTmp); } /* --- S --- */ --- 284,289 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageDetNormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- S --- */ *************** *** 275,279 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageSNormal], 1.0/magTmp, vecTmp); } /* --- Q --- */ --- 302,307 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageSNormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- Q --- */ *************** *** 288,298 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal], 1.0/magTmp, vecTmp); } /* --- FA --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradVec)) { vecTmp = pvl->directAnswer[tenGageFAGradVec]; ! tmp0 = 9.0/(2*pvl->directAnswer[tenGageFA][0]*cbS); ! tmp1 = -tmp0*cbQ/cbS; ELL_3V_SCALE_ADD2(vecTmp, tmp0, gradCbQ, --- 316,327 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- FA --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradVec)) { vecTmp = pvl->directAnswer[tenGageFAGradVec]; ! tmp0 = 9.0/(epsilon + 2*pvl->directAnswer[tenGageFA][0]*cbS); ! tmp1 = -tmp0*cbQ/(epsilon + cbS); ELL_3V_SCALE_ADD2(vecTmp, tmp0, gradCbQ, *************** *** 303,314 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFANormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageFANormal], 1.0/magTmp, vecTmp); } /* --- R --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradVec)) { ! vecTmp = pvl->directAnswer[tenGageRGradVec]; ELL_3V_SCALE_ADD4(vecTmp, (5*cbB - 2*cbS)/54.0, gradCbA, ! 1.0/2.0, pvl->directAnswer[tenGageDetGradVec], 5.0*cbA/54.0, gradCbB, -cbA/27.0, gradCbS); --- 332,345 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFANormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageFANormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- R --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradVec)) { ! gradCbR = vecTmp = pvl->directAnswer[tenGageRGradVec]; ! tmp0 = 1.0/(epsilon + 2*sqrt(cbQ*cbQ*cbQ)); ELL_3V_SCALE_ADD4(vecTmp, (5*cbB - 2*cbS)/54.0, gradCbA, ! -1.0/2.0, gradCbC, 5.0*cbA/54.0, gradCbB, -cbA/27.0, gradCbS); *************** *** 318,322 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageRNormal], 1.0/magTmp, vecTmp); } /* --- Aniso --- */ --- 349,372 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageRNormal], ! 1.0/(epsilon + magTmp), vecTmp); ! } ! /* --- P --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGagePGradVec)) { ! vecTmp = pvl->directAnswer[tenGagePGradVec]; ! tmp1 = cbQ*cbQ*cbQ; ! tmp1 = sqrt(tmp1)*sqrt(1.0 - cbR*cbR/(epsilon + tmp1)); ! tmp1 = 1.0/(epsilon + tmp1); ! tmp0 = tmp1*3*cbR/(epsilon + 2*cbQ); ! ELL_3V_SCALE_ADD2(vecTmp, ! tmp0, gradCbQ, ! -tmp1, gradCbR); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGagePGradMag)) { ! magTmp = pvl->directAnswer[tenGagePGradMag][0] = ELL_3V_LEN(vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGagePNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGagePNormal], ! 1.0/(epsilon + magTmp), vecTmp); } /* --- Aniso --- */ |
|
From: <kin...@us...> - 2004-02-23 06:15:41
|
Update of /cvsroot/teem/teem/src/gage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30002 Modified Files: scl.c Log Message: made gageScl airEnum strings for gradient vector and gradient vector more consistent with those that are used in tenGage Index: scl.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/scl.c,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** scl.c 19 Feb 2004 03:50:02 -0000 1.31 --- scl.c 23 Feb 2004 06:02:19 -0000 1.32 *************** *** 191,196 **** _gageSclStrEqv[][AIR_STRLEN_SMALL] = { "v", "val", "value", ! "grad", "gvec", "gradvec", "grad vec", "gradient vector", ! "g", "gm", "gmag", "gradmag", "grad mag", "gradient magnitude", "n", "normal", "gnorm", "normg", "norm", "normgrad", \ "norm grad", "normalized gradient", --- 191,196 ---- _gageSclStrEqv[][AIR_STRLEN_SMALL] = { "v", "val", "value", ! "gv", "gvec", "gradvec", "grad vec", "gradient vector", ! "gm", "gmag", "gradmag", "grad mag", "gradient magnitude", "n", "normal", "gnorm", "normg", "norm", "normgrad", \ "norm grad", "normalized gradient", *************** *** 225,229 **** GS_V, GS_V, GS_V, GS_GV, GS_GV, GS_GV, GS_GV, GS_GV, ! GS_GM, GS_GM, GS_GM, GS_GM, GS_GM, GS_GM, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_NP, GS_NP, --- 225,229 ---- GS_V, GS_V, GS_V, GS_GV, GS_GV, GS_GV, GS_GV, GS_GV, ! GS_GM, GS_GM, GS_GM, GS_GM, GS_GM, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_N, GS_NP, GS_NP, |
|
From: <kin...@us...> - 2004-02-23 03:07:52
|
Update of /cvsroot/teem/teem/src/ell In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28431 Modified Files: ellMacros.h Log Message: fixed typos in ELL_3V macros Index: ellMacros.h =================================================================== RCS file: /cvsroot/teem/teem/src/ell/ellMacros.h,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** ellMacros.h 23 Feb 2004 02:38:59 -0000 1.38 --- ellMacros.h 23 Feb 2004 02:54:22 -0000 1.39 *************** *** 158,173 **** (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2]) ! #define ELL_3V_SCALE_ADD4(v3, s0, v0, s1, v1, s2, v2, s3, v3) \ ! ((v3)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0] + (s3)*(v3)[0], \ ! (v3)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1] + (s3)*(v3)[1], \ ! (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2] + (s3)*(v3)[2]) ! #define ELL_3V_SCALE_ADD6(v3, s0, v0, s1, v1, s2, v2, \ s3, v3, s4, v4, s5, v5) \ ! ((v3)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0] \ + (s3)*(v3)[0] + (s4)*(v4)[0] + (s5)*(v5)[0], \ ! (v3)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1] \ + (s3)*(v3)[1] + (s4)*(v4)[1] + (s5)*(v5)[1], \ ! (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2] \ + (s3)*(v3)[2] + (s4)*(v4)[2] + (s5)*(v5)[2]) --- 158,173 ---- (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2]) ! #define ELL_3V_SCALE_ADD4(v4, s0, v0, s1, v1, s2, v2, s3, v3) \ ! ((v4)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0] + (s3)*(v3)[0], \ ! (v4)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1] + (s3)*(v3)[1], \ ! (v4)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2] + (s3)*(v3)[2]) ! #define ELL_3V_SCALE_ADD6(v6, s0, v0, s1, v1, s2, v2, \ s3, v3, s4, v4, s5, v5) \ ! ((v6)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0] \ + (s3)*(v3)[0] + (s4)*(v4)[0] + (s5)*(v5)[0], \ ! (v6)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1] \ + (s3)*(v3)[1] + (s4)*(v4)[1] + (s5)*(v5)[1], \ ! (v6)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2] \ + (s3)*(v3)[2] + (s4)*(v4)[2] + (s5)*(v5)[2]) |
|
From: <kin...@us...> - 2004-02-23 02:53:42
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26294 Modified Files: aniso.c enumsTen.c ten.h tenGage.c tensor.c Log Message: debugging tenGageKind Index: aniso.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/aniso.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** aniso.c 7 Jan 2004 15:34:31 -0000 1.25 --- aniso.c 23 Feb 2004 02:40:18 -0000 1.26 *************** *** 185,189 **** in = nin->data; for (I=0; I<=N-1; I++) { ! /* tenVerbose = (I == 1882); */ tensor = in + I*7; if (tensor[0] < thresh) { --- 185,189 ---- in = nin->data; for (I=0; I<=N-1; I++) { ! /* tenVerbose = (I == 911327); */ tensor = in + I*7; if (tensor[0] < thresh) { Index: enumsTen.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/enumsTen.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** enumsTen.c 19 Feb 2004 11:14:09 -0000 1.15 --- enumsTen.c 23 Feb 2004 02:40:24 -0000 1.16 *************** *** 64,87 **** _tenGageStr[][AIR_STRLEN_SMALL] = { "(unknown tenGage)", "tensor", "trace", ! "frob", ! "eigenvalues", ! "eigenvalue0", ! "eigenvalue1", ! "eigenvalue2", ! "eigenvectors", ! "eigenvector0", ! "eigenvector1", ! "eigenvector2", ! "tensor gradient", ! "Q anisotropy", ! "Q gradient vector", ! "Q gradient magnitude", ! "normalized Q gradient", ! "multigrad", ! "fro(multigrad)", ! "multigrad eigenvalues", ! "multigrad eigenvectors", "anisotropies" }; --- 64,116 ---- _tenGageStr[][AIR_STRLEN_SMALL] = { "(unknown tenGage)", + "tensor", "trace", ! "B", ! "det", ! "S", ! "Q", ! "FA", ! "R", ! ! "evals", ! "eval0", ! "eval1", ! "eval2", ! "evecs", ! "evec0", ! "evec1", ! "evec2", ! ! "tensor grad", ! ! "trace grad vec", ! "trace grad mag", ! "trace normal", ! ! "B grad vec", ! "B grad mag", ! "B normal", ! ! "det grad vec", ! "det grad mag", ! "det normal", ! ! "S grad vec", ! "S grad mag", ! "S normal", ! ! "Q grad vec", ! "Q grad mag", ! "Q normal", ! ! "FA grad vec", ! "FA grad mag", ! "FA normal", ! ! "R grad vec", ! "R grad mag", ! "R normal", ! "anisotropies" }; *************** *** 89,113 **** char _tenGageDesc[][AIR_STRLEN_MED] = { ! "unknown tenGage query", ! "reconstructed tensor", ! "tensor trace", ! "frob(tensor)", ! "3 tensor eigenvalues", ! "tensor eigenvalue 0", ! "tensor eigenvalue 1", ! "tensor eigenvalue 2", ! "3 tensor eigenvectors", ! "tensor eigenvector 0", ! "tensor eigenvector 1", ! "tensor eigenvector 2", ! "tensor gradient", ! "Q anisotropy", ! "Q gradient vector", ! "Q gradient magnitude", ! "normalized Q gradient", ! "multigrad", ! "frob(multigrad)", ! "multigrad eigenvalues", ! "multigrad eigenvectors", "anisotropies" }; --- 118,160 ---- char _tenGageDesc[][AIR_STRLEN_MED] = { ! "(unknown tenGage item)", ! "tensor", ! "trace", ! "B", ! "determinant", ! "S", ! "Q", ! "FA", ! "R", ! "3 eigenvalues", ! "eigenvalue 0", ! "eigenvalue 1", ! "eigenvalue 2", ! "3 eigenvectors", ! "eigenvector 0", ! "eigenvector 1", ! "eigenvector 2", ! "tensor gradients", ! "trace grad vec", ! "trace grad mag", ! "trace normal", ! "B grad vec", ! "B grad mag", ! "B normal", ! "determinant grad vec", ! "determinant grad mag", ! "determinant normal", ! "S grad vec", ! "S grad mag", ! "S normal", ! "Q grad vec", ! "Q grad mag", ! "Q normal", ! "FA grad vec", ! "FA grad mag", ! "FA normal", ! "R grad vec", ! "R grad mag", ! "R normal", "anisotropies" }; *************** *** 116,186 **** _tenGageVal[] = { tenGageUnknown, ! tenGageTensor, ! tenGageTrace, ! tenGageFrobTensor, ! tenGageEval, ! tenGageEval0, ! tenGageEval1, ! tenGageEval2, ! tenGageEvec, ! tenGageEvec0, ! tenGageEvec1, ! tenGageEvec2, ! tenGageTensorGrad, ! tenGageQ, ! tenGageQGradVec, ! tenGageQGradMag, ! tenGageQNormal, ! tenGageMultiGrad, ! tenGageFrobMG, ! tenGageMGEval, ! tenGageMGEvec, ! tenGageAniso }; - #define TG_T tenGageTensor - #define TG_TR tenGageTrace - #define TG_FT tenGageFrobTensor - #define TG_AL tenGageEval - #define TG_AL0 tenGageEval0 - #define TG_AL1 tenGageEval1 - #define TG_AL2 tenGageEval2 - #define TG_EC tenGageEvec - #define TG_EC0 tenGageEvec0 - #define TG_EC1 tenGageEvec1 - #define TG_EC2 tenGageEvec2 - #define TG_TG tenGageTensorGrad - #define TG_Q tenGageQ - #define TG_QGV tenGageQGradVec - #define TG_QGM tenGageQGradMag - #define TG_QGN tenGageQNormal - #define TG_MG tenGageMultiGrad - #define TG_FMG tenGageFrobMG - #define TG_MGA tenGageMGEval - #define TG_MGE tenGageMGEvec - #define TG_AN tenGageAniso - char _tenGageStrEqv[][AIR_STRLEN_SMALL] = { ! "t", "ten", "tensor", "tr", "trace", ! "frt", "fro", "frob", "frobt", ! "eval", "eigenvalue", ! "eval0", "eigenvalue0", ! "eval1", "eigenvalue1", ! "eval2", "eigenvalue2", ! "evec", "eigenvector", ! "evec0", "eigenvector0", ! "evec1", "eigenvector1", ! "evec2", "eigenvector2", ! "tg", "tgrad", "t grad", "tensor gradient", "q", ! "qv", "qgrad", "q grad", "q gradient vector", ! "qg", "qgmag", "q gmag", "q gradient magnitude", ! "qn", "qnorm", "q norm", "normalized q gradient", ! "mg", "multigrad", ! "frmg", "frobmg", "frob mg", ! "mgeval", "mg eval", "multigrad eigenvalues", ! "mgevec", "mg evec", "multigrad eigenvectors", "an", "aniso", "anisotropies", "" --- 163,247 ---- _tenGageVal[] = { tenGageUnknown, ! tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ ! tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageB, /* 2: "b": GT[1] */ ! tenGageDet, /* 3: "det", determinant of tensor: GT[1] */ ! tenGageS, /* 4: "s", square of frobenius norm: GT[1] */ ! tenGageQ, /* 5: "q", (S - B)/9: GT[1] */ ! tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ ! tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! tenGageEval, /* 8: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 9: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 10: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 11: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 12: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 13: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 14: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 15: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 16: "tg, all tensor component gradients: GT[21] */ ! tenGageTraceGradVec, /* 17: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 18: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 19: "trn": normal of trace: GT[3] */ ! tenGageBGradVec, /* 20: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 21: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 22: "bn", normal of B: GT[3] */ ! tenGageDetGradVec, /* 23: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 24: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 25: "detn", normal of Det: GT[3] */ ! tenGageSGradVec, /* 26: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 27: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 28: "sn", normal of S: GT[3] */ ! tenGageQGradVec, /* 29: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 30: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 31: "qn", normalized gradient of Q: GT[3] */ ! tenGageFAGradVec, /* 32: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 33: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 34: "fan", normalized gradient of FA: GT[3] */ ! tenGageRGradVec, /* 35: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 36: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 37: "rn", normalized gradient of Q: GT[3] */ ! tenGageAniso /* 38: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ }; char _tenGageStrEqv[][AIR_STRLEN_SMALL] = { ! "t", "tensor", "tr", "trace", ! "b", ! "det", ! "s", "q", ! "fa", ! "r", ! "eval", ! "eval0", ! "eval1", ! "eval2", ! "evec", ! "evec0", ! "evec1", ! "evec2", ! "tg", "tensor grad", ! "trgv", "tracegv", "trace grad vec", ! "trgm", "tracegm", "trace grad mag", ! "trn", "tracen", "trace normal", ! "bgv", "b grad vec", ! "bgm", "b grad mag", ! "bn", "b normal", ! "detgv", "det grad vec", ! "detgm", "det grad mag", ! "detn", "det normal", ! "sgv", "s grad vec", ! "sgm", "s grad mag", ! "sn", "s normal", ! "qgv", "q grad vec", ! "qgm", "q grad mag", ! "qn", "q normal", ! "fagv", "fa grad vec", ! "fagm", "fa grad mag", ! "fan", "fa normal", ! "rgv", "r grad vec", ! "rgm", "r grad mag", ! "rn", "r normal", "an", "aniso", "anisotropies", "" *************** *** 189,213 **** int _tenGageValEqv[] = { ! TG_T, TG_T, TG_T, ! TG_TR, TG_TR, ! TG_FT, TG_FT, TG_FT, TG_FT, ! TG_AL, TG_AL, ! TG_AL0, TG_AL0, ! TG_AL1, TG_AL1, ! TG_AL2, TG_AL2, ! TG_EC, TG_EC, ! TG_EC0, TG_EC0, ! TG_EC1, TG_EC1, ! TG_EC2, TG_EC2, ! TG_TG, TG_TG, TG_TG, TG_TG, ! TG_Q, ! TG_QGV, TG_QGV, TG_QGV, TG_QGV, ! TG_QGM, TG_QGM, TG_QGM, TG_QGM, ! TG_QGN, TG_QGN, TG_QGN, TG_QGN, ! TG_MG, TG_MG, ! TG_FMG, TG_FMG, TG_FMG, ! TG_MGA, TG_MGA, TG_MGA, ! TG_MGE, TG_MGE, TG_MGE, ! TG_AN, TG_AN, TG_AN }; --- 250,292 ---- int _tenGageValEqv[] = { ! tenGageTensor, tenGageTensor, ! tenGageTrace, tenGageTrace, ! tenGageB, ! tenGageDet, ! tenGageS, ! tenGageQ, ! tenGageFA, ! tenGageR, ! tenGageEval, ! tenGageEval0, ! tenGageEval1, ! tenGageEval2, ! tenGageEvec, ! tenGageEvec0, ! tenGageEvec1, ! tenGageEvec2, ! tenGageTensorGrad, tenGageTensorGrad, ! tenGageTraceGradVec, tenGageTraceGradVec, tenGageTraceGradVec, ! tenGageTraceGradMag, tenGageTraceGradMag, tenGageTraceGradMag, ! tenGageTraceNormal, tenGageTraceNormal, tenGageTraceNormal, ! tenGageBGradVec, tenGageBGradVec, ! tenGageBGradMag, tenGageBGradMag, ! tenGageBNormal, tenGageBNormal, ! tenGageDetGradVec, tenGageDetGradVec, ! tenGageDetGradMag, tenGageDetGradMag, ! tenGageDetNormal, tenGageDetNormal, ! tenGageSGradVec, tenGageSGradVec, ! tenGageSGradMag, tenGageSGradMag, ! tenGageSNormal, tenGageSNormal, ! tenGageQGradVec, tenGageQGradVec, ! tenGageQGradMag, tenGageQGradMag, ! tenGageQNormal, tenGageQNormal, ! tenGageFAGradVec, tenGageFAGradVec, ! tenGageFAGradMag, tenGageFAGradMag, ! tenGageFANormal, tenGageFANormal, ! tenGageRGradVec, tenGageRGradVec, ! tenGageRGradMag, tenGageRGradMag, ! tenGageRNormal, tenGageRNormal, ! tenGageAniso, tenGageAniso, tenGageAniso }; Index: ten.h =================================================================== RCS file: /cvsroot/teem/teem/src/ten/ten.h,v retrieving revision 1.73 retrieving revision 1.74 diff -C2 -d -r1.73 -r1.74 *** ten.h 19 Feb 2004 11:14:09 -0000 1.73 --- ten.h 23 Feb 2004 02:40:24 -0000 1.74 *************** *** 141,176 **** ** ** all the possible queries supported in the tenGage gage kind */ enum { tenGageUnknown = -1, /* -1: nobody knows */ tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageFrobTensor, /* 2: "fro", frobenius norm of tensor: GT[1] */ ! tenGageEval, /* 3: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 4: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 5: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 6: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 7: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 8: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 9: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 10: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 11: "tg", all tensor component gradients, starting ! with the confidence value gradient: GT[21] */ ! tenGageQ, /* 12: "q", Q anisotropy (or 9 times it): GT[1] */ ! tenGageQGradVec, /* 13: "qv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 14: "qg", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 15: "qn", normalized gradient of Q GT[3] */ ! tenGageMultiGrad, /* 16: "mg", sum of outer products of gradients of ! tensor elements, correctly counting the ! off-diagonal entries twice, but not counting ! the confidence value: GT[9] */ ! tenGageFrobMG, /* 17: "frmg", frob. norm of multi gradient: GT[1] */ ! tenGageMGEval, /* 18: "mgeval", eigenvalues of multi gradient: GT[3]*/ ! tenGageMGEvec, /* 19: "mgevec", eigenvectors of multi ! gradient: GT[9] */ ! tenGageAniso, /* 20: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ tenGageLast }; ! #define TEN_GAGE_ITEM_MAX 20 /* --- 141,212 ---- ** ** all the possible queries supported in the tenGage gage kind + ** various properties of the quantities below (eigenvalues = v1, v2, v3): + ** eigenvalue cubic equation: v^3 + A*v^2 + B*v + C = 0 + ** Trace = v1 + v2 + v3 = -A + ** B = v1*v2 + v1*v3 + v2*v3 + ** Det = v1*v2*v3 = -C + ** S = v1*v1 + v2*v2 + v3*v3 + ** Q = (S-B)/9 = variance({v1,v2,v3})/2 = (RootRadius/2)^2 + ** FA = 3*sqrt(Q/S) + ** R = (9*A*B - 2*A^3 - 27*C)/54 + = (5*A*B - 2*A*S - 27*C)/54 = thirdmoment({v1,v2,v3})/2 + ** (phase in cubic solution = arccos(R/sqrt(Q)^3)) */ enum { tenGageUnknown = -1, /* -1: nobody knows */ + tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageB, /* 2: "b": GT[1] */ ! tenGageDet, /* 3: "det", determinant of tensor: GT[1] */ ! tenGageS, /* 4: "s", square of frobenius norm: GT[1] */ ! tenGageQ, /* 5: "q", (S - B)/9: GT[1] */ ! tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ ! tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! ! tenGageEval, /* 8: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 9: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 10: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 11: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 12: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 13: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 14: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 15: "evec2", minor eigenvectors of tensor: GT[3] */ ! ! tenGageTensorGrad, /* 16: "tg, all tensor component gradients, starting ! with the confidence gradient: GT[21] */ ! ! tenGageTraceGradVec, /* 17: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 18: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 19: "trn": normal of trace: GT[3] */ ! ! tenGageBGradVec, /* 20: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 21: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 22: "bn", normal of B: GT[3] */ ! ! tenGageDetGradVec, /* 23: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 24: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 25: "detn", normal of Det: GT[3] */ ! ! tenGageSGradVec, /* 26: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 27: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 28: "sn", normal of S: GT[3] */ ! ! tenGageQGradVec, /* 29: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 30: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 31: "qn", normalized gradient of Q: GT[3] */ ! ! tenGageFAGradVec, /* 32: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 33: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 34: "fan", normalized gradient of FA: GT[3] */ ! ! tenGageRGradVec, /* 35: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 36: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 37: "rn", normalized gradient of Q: GT[3] */ ! ! tenGageAniso, /* 38: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ tenGageLast }; ! #define TEN_GAGE_ITEM_MAX 38 /* Index: tenGage.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tenGage.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** tenGage.c 19 Feb 2004 11:14:09 -0000 1.13 --- tenGage.c 23 Feb 2004 02:40:24 -0000 1.14 *************** *** 27,31 **** {tenGageTensor, 7, 0, {-1, -1, -1, -1, -1}, -1, -1}, {tenGageTrace, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageFrobTensor, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, {tenGageEval, 3, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, {tenGageEval0, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 0}, --- 27,36 ---- {tenGageTensor, 7, 0, {-1, -1, -1, -1, -1}, -1, -1}, {tenGageTrace, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageB, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageDet, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageS, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageQ, 1, 0, {tenGageS, tenGageB, -1, -1, -1}, -1, -1}, ! {tenGageFA, 1, 0, {tenGageQ, tenGageS, -1, -1, -1}, -1, -1}, ! {tenGageR, 1, 0, {tenGageTrace, tenGageB, tenGageDet, tenGageS, -1}, -1, -1}, {tenGageEval, 3, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, {tenGageEval0, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 0}, *************** *** 37,48 **** {tenGageEvec2, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 6}, {tenGageTensorGrad, 21, 1, {-1, -1, -1, -1, -1}, -1, -1}, ! {tenGageQ, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {tenGageQGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, {tenGageQGradMag, 1, 1, {tenGageQGradVec, -1, -1, -1, -1}, -1, -1}, {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag, -1, -1, -1}, -1, -1}, ! {tenGageMultiGrad, 9, 1, {tenGageTensorGrad, -1, -1, -1, -1}, -1, -1}, ! {tenGageFrobMG, 1, 1, {tenGageMultiGrad, -1, -1, -1, -1}, -1, -1}, ! {tenGageMGEval, 3, 1, {tenGageMultiGrad, -1, -1, -1, -1}, -1, -1}, ! {tenGageMGEvec, 9, 1, {tenGageMultiGrad, -1, -1, -1, -1}, -1, -1}, {tenGageAniso, TEN_ANISO_MAX+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2, -1, -1}, -1, -1} }; --- 42,66 ---- {tenGageEvec2, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 6}, {tenGageTensorGrad, 21, 1, {-1, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradMag, 1, 1, {tenGageTraceGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceNormal, 3, 1, {tenGageTraceGradVec, tenGageTraceGradMag, -1, -1, -1}, -1, -1}, ! {tenGageBGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageBGradMag, 1, 1, {tenGageBGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageBNormal, 3, 1, {tenGageBGradVec, tenGageBGradMag, -1, -1, -1}, -1, -1}, ! {tenGageDetGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageDetGradMag, 1, 1, {tenGageDetGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageDetNormal, 3, 1, {tenGageDetGradVec, tenGageDetGradMag, -1, -1, -1}, -1, -1}, ! {tenGageSGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageSGradMag, 1, 1, {tenGageSGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageSNormal, 3, 1, {tenGageSGradVec, tenGageSGradMag, -1, -1, -1}, -1, -1}, {tenGageQGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, {tenGageQGradMag, 1, 1, {tenGageQGradVec, -1, -1, -1, -1}, -1, -1}, {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag, -1, -1, -1}, -1, -1}, ! {tenGageFAGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageFAGradMag, 1, 1, {tenGageFAGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageFANormal, 3, 1, {tenGageFAGradVec, tenGageFAGradMag, -1, -1, -1}, -1, -1}, ! {tenGageRGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageRGradMag, 1, 1, {tenGageRGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageRNormal, 3, 1, {tenGageRGradVec, tenGageRGradMag, -1, -1, -1}, -1, -1}, {tenGageAniso, TEN_ANISO_MAX+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2, -1, -1}, -1, -1} }; *************** *** 109,114 **** _tenGageAnswer (gageContext *ctx, gagePerVolume *pvl) { /* char me[]="_tenGageAnswer"; */ ! gage_t *tenAns, *tgradAns, *QgradAns, *evalAns, *evecAns, tmptmp=0, ! dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, cbA, cbB; #if !GAGE_TYPE_FLOAT --- 127,137 ---- _tenGageAnswer (gageContext *ctx, gagePerVolume *pvl) { /* char me[]="_tenGageAnswer"; */ ! gage_t *tenAns, *evalAns, *evecAns, *vecTmp=NULL, magTmp=0, ! tmp0, tmp1, ! dtConf=0, dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, ! *gradDtA=NULL, *gradDtB=NULL, *gradDtC=NULL, ! *gradDtD=NULL, *gradDtE=NULL, *gradDtF=NULL, ! gradCbA[3], *gradCbS=NULL, *gradCbB=NULL, *gradCbQ=NULL, ! cbQ=0, cbA=0, cbB=0, cbC=0, cbS=0; #if !GAGE_TYPE_FLOAT *************** *** 118,127 **** tenAns = pvl->directAnswer[tenGageTensor]; - tgradAns = pvl->directAnswer[tenGageTensorGrad]; - QgradAns = pvl->directAnswer[tenGageQGradVec]; evalAns = pvl->directAnswer[tenGageEval]; evecAns = pvl->directAnswer[tenGageEvec]; if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensor)) { /* done if doV */ dtA = tenAns[1]; dtB = tenAns[2]; --- 141,149 ---- tenAns = pvl->directAnswer[tenGageTensor]; evalAns = pvl->directAnswer[tenGageEval]; evecAns = pvl->directAnswer[tenGageEvec]; if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensor)) { /* done if doV */ + dtConf = tenAns[0]; dtA = tenAns[1]; dtB = tenAns[2]; *************** *** 136,145 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTrace)) { ! pvl->directAnswer[tenGageTrace][0] = dtA + dtD + dtF; } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFrobTensor)) { ! pvl->directAnswer[tenGageFrobTensor][0] = sqrt(dtA*dtA + 2*dtB*dtB ! + 2*dtC*dtC + dtD*dtD ! + 2*dtE*dtE + dtF*dtF); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)) { --- 158,184 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTrace)) { ! cbA = -(pvl->directAnswer[tenGageTrace][0] = dtA + dtD + dtF); } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageB)) { ! cbB = pvl->directAnswer[tenGageB][0] = ! dtA*dtD + dtA*dtF + dtD*dtF - dtB*dtB - dtC*dtC - dtE*dtE; ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDet)) { ! cbC = -(pvl->directAnswer[tenGageDet][0] = ! 2*dtB*dtC*dtE + dtA*dtD*dtF ! - dtC*dtC*dtD - dtA*dtE*dtE - dtB*dtB*dtF); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageS)) { ! cbS = (pvl->directAnswer[tenGageS][0] = ! dtA*dtA + dtD*dtD + dtF*dtF + 2*dtB*dtB + 2*dtC*dtC + 2*dtE*dtE); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQ)) { ! cbQ = pvl->directAnswer[tenGageQ][0] = (cbS - cbB)/9; ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFA)) { ! pvl->directAnswer[tenGageFA][0] = 3*sqrt(cbQ/cbS); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageR)) { ! pvl->directAnswer[tenGageR][0] = (5*cbA*cbB - 27*cbC - 2*cbA*cbS)/54; } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)) { *************** *** 166,198 **** if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGrad)) { /* done if doD1 */ } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQ)) { ! cbA = -(dtA + dtD + dtF); ! cbB = dtA*dtD - dtB*dtB + dtA*dtF - dtC*dtC + dtD*dtF - dtE*dtE; ! /* ! cbC = -(dtA*dtD*dtF + 2*dtB*dtE*dtC ! - dtC*dtC*dtD - dtB*dtB*dtF - dtA*dtE*dtE); ! */ ! pvl->directAnswer[tenGageQ][0] = cbA*cbA - 3*cbB; } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradVec)) { ! ELL_3V_SET(QgradAns, 0, 0, 0); ! ELL_3V_SCALE_INCR(QgradAns, dtA, tgradAns + 1*3); ! ELL_3V_SCALE_INCR(QgradAns, 2*dtB, tgradAns + 2*3); ! ELL_3V_SCALE_INCR(QgradAns, 2*dtC, tgradAns + 3*3); ! ELL_3V_SCALE_INCR(QgradAns, dtD, tgradAns + 4*3); ! ELL_3V_SCALE_INCR(QgradAns, 2*dtE, tgradAns + 5*3); ! ELL_3V_SCALE_INCR(QgradAns, dtF, tgradAns + 6*3); ! tmptmp = -(dtA + dtD + dtF)/3; ! ELL_3V_SCALE_INCR(QgradAns, tmptmp, tgradAns + 1*3); ! ELL_3V_SCALE_INCR(QgradAns, tmptmp, tgradAns + 4*3); ! ELL_3V_SCALE_INCR(QgradAns, tmptmp, tgradAns + 6*3); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradMag)) { ! tmptmp = pvl->directAnswer[tenGageQGradMag][0] = ELL_3V_LEN(QgradAns); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal], 1.0/tmptmp, QgradAns); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageAniso)) { #if GAGE_TYPE_FLOAT --- 205,324 ---- if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGrad)) { /* done if doD1 */ + vecTmp = pvl->directAnswer[tenGageTensorGrad]; + gradDtA = vecTmp + 1*3; + gradDtB = vecTmp + 2*3; + gradDtC = vecTmp + 3*3; + gradDtD = vecTmp + 4*3; + gradDtE = vecTmp + 5*3; + gradDtF = vecTmp + 6*3; } ! ! /* --- Trace --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradVec)) { ! vecTmp = pvl->directAnswer[tenGageTraceGradVec]; ! ELL_3V_ADD3(vecTmp, gradDtA, gradDtD, gradDtF); ! ELL_3V_SCALE(gradCbA, -1, vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradMag)) { ! magTmp = pvl->directAnswer[tenGageTraceGradMag][0] = ELL_3V_LEN(vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageTraceNormal], 1.0/magTmp, vecTmp); ! } ! /* --- B --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBGradVec)) { ! gradCbB = vecTmp = pvl->directAnswer[tenGageBGradVec]; ! ELL_3V_SCALE_ADD6(vecTmp, ! dtD + dtF, gradDtA, ! -2*dtB, gradDtB, ! -2*dtC, gradDtC, ! dtA + dtF, gradDtD, ! -2*dtE, gradDtE, ! dtA + dtD, gradDtF); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBGradMag)) { ! magTmp = pvl->directAnswer[tenGageBGradMag][0] = ELL_3V_LEN(vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageBNormal], 1.0/magTmp, vecTmp); ! } ! /* --- Det --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradVec)) { ! vecTmp = pvl->directAnswer[tenGageDetGradVec]; ! ELL_3V_SCALE_ADD6(vecTmp, ! dtD*dtF - dtE*dtE, gradDtA, ! 2*(dtC*dtE - dtB*dtF), gradDtB, ! 2*(dtB*dtE - dtC*dtD), gradDtC, ! dtA*dtF - dtC*dtC, gradDtD, ! 2*(dtB*dtC - dtA*dtE), gradDtE, ! dtA*dtD - dtB*dtB, gradDtF); } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradMag)) { + magTmp = pvl->directAnswer[tenGageDetGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetNormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageDetNormal], 1.0/magTmp, vecTmp); + } + /* --- S --- */ + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSGradVec)) { + gradCbS = vecTmp = pvl->directAnswer[tenGageSGradVec]; + ELL_3V_SCALE_ADD6(vecTmp, + 2*dtA, gradDtA, + 4*dtB, gradDtB, + 4*dtC, gradDtC, + 2*dtD, gradDtD, + 4*dtE, gradDtE, + 2*dtF, gradDtF); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSGradMag)) { + magTmp = pvl->directAnswer[tenGageSGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSNormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageSNormal], 1.0/magTmp, vecTmp); + } + /* --- Q --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradVec)) { ! gradCbQ = vecTmp = pvl->directAnswer[tenGageQGradVec]; ! ELL_3V_SCALE_ADD2(vecTmp, ! 1.0/9.0, gradCbS, ! -1.0/9.0, gradCbB); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradMag)) { ! magTmp = pvl->directAnswer[tenGageQGradMag][0] = ELL_3V_LEN(vecTmp); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal], 1.0/magTmp, vecTmp); } + /* --- FA --- */ + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradVec)) { + vecTmp = pvl->directAnswer[tenGageFAGradVec]; + tmp0 = 9.0/(2*pvl->directAnswer[tenGageFA][0]*cbS); + tmp1 = -tmp0*cbQ/cbS; + ELL_3V_SCALE_ADD2(vecTmp, + tmp0, gradCbQ, + tmp1, gradCbS); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradMag)) { + magTmp = pvl->directAnswer[tenGageFAGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFANormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageFANormal], 1.0/magTmp, vecTmp); + } + /* --- R --- */ + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradVec)) { + vecTmp = pvl->directAnswer[tenGageRGradVec]; + ELL_3V_SCALE_ADD4(vecTmp, + (5*cbB - 2*cbS)/54.0, gradCbA, + 1.0/2.0, pvl->directAnswer[tenGageDetGradVec], + 5.0*cbA/54.0, gradCbB, + -cbA/27.0, gradCbS); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradMag)) { + magTmp = pvl->directAnswer[tenGageRGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRNormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageRNormal], 1.0/magTmp, vecTmp); + } + /* --- Aniso --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageAniso)) { #if GAGE_TYPE_FLOAT Index: tensor.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tensor.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** tensor.c 7 Jan 2004 15:34:31 -0000 1.26 --- tensor.c 23 Feb 2004 02:40:24 -0000 1.27 *************** *** 200,204 **** if (_evec) { ret = ell_3m_eigensolve_d(eval, evec, m, AIR_TRUE); ! if (ell_cubic_root_three != ret && tenVerbose) { fprintf(stderr, "---- cubic ret = %d\n", ret); fprintf(stderr, "tensor = {\n"); --- 200,204 ---- if (_evec) { ret = ell_3m_eigensolve_d(eval, evec, m, AIR_TRUE); ! if (tenVerbose) { fprintf(stderr, "---- cubic ret = %d\n", ret); fprintf(stderr, "tensor = {\n"); *************** *** 209,213 **** fprintf(stderr, " % 15.7f,\n", t[5]); fprintf(stderr, " % 15.7f}\n", t[6]); ! fprintf(stderr, "roots = \n"); fprintf(stderr, " % 31.15f\n", trc + eval[0]); fprintf(stderr, " % 31.15f\n", trc + eval[1]); --- 209,213 ---- fprintf(stderr, " % 15.7f,\n", t[5]); fprintf(stderr, " % 15.7f}\n", t[6]); ! fprintf(stderr, "roots = %d:\n", ret); fprintf(stderr, " % 31.15f\n", trc + eval[0]); fprintf(stderr, " % 31.15f\n", trc + eval[1]); |
|
From: <kin...@us...> - 2004-02-23 02:52:13
|
Update of /cvsroot/teem/teem/src/ell In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26020 Modified Files: ellMacros.h Log Message: added some more ELL_3V macros Index: ellMacros.h =================================================================== RCS file: /cvsroot/teem/teem/src/ell/ellMacros.h,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** ellMacros.h 7 Jan 2004 15:34:29 -0000 1.37 --- ellMacros.h 23 Feb 2004 02:38:59 -0000 1.38 *************** *** 138,141 **** --- 138,146 ---- (v2)[2] = (a)*(v1)[2]) + #define ELL_3V_SCALE_INCR(v2, s0, v0) \ + ((v2)[0] += (s0)*(v0)[0], \ + (v2)[1] += (s0)*(v0)[1], \ + (v2)[2] += (s0)*(v0)[2]) + #define ELL_3V_SCALE_ADD2(v2, s0, v0, s1, v1) \ ((v2)[0] = (s0)*(v0)[0] + (s1)*(v1)[0], \ *************** *** 143,156 **** (v2)[2] = (s0)*(v0)[2] + (s1)*(v1)[2]) ! #define ELL_3V_SCALE_INCR(v2, s0, v0) \ ! ((v2)[0] += (s0)*(v0)[0], \ ! (v2)[1] += (s0)*(v0)[1], \ ! (v2)[2] += (s0)*(v0)[2]) ! #define ELL_3V_SCALE_ADD3(v3, s0, v0, s1, v1, s2, v2) \ ! ((v3)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0], \ ! (v3)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1], \ (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2]) #define ELL_3V_LEN(v) (sqrt(ELL_3V_DOT((v),(v)))) --- 148,180 ---- (v2)[2] = (s0)*(v0)[2] + (s1)*(v1)[2]) ! #define ELL_3V_SCALE_INCR2(v2, s0, v0, s1, v1) \ ! ((v2)[0] += (s0)*(v0)[0] + (s1)*(v1)[0], \ ! (v2)[1] += (s0)*(v0)[1] + (s1)*(v1)[1], \ ! (v2)[2] += (s0)*(v0)[2] + (s1)*(v1)[2]) ! #define ELL_3V_SCALE_ADD3(v3, s0, v0, s1, v1, s2, v2) \ ! ((v3)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0], \ ! (v3)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1], \ (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2]) + #define ELL_3V_SCALE_ADD4(v3, s0, v0, s1, v1, s2, v2, s3, v3) \ + ((v3)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0] + (s3)*(v3)[0], \ + (v3)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1] + (s3)*(v3)[1], \ + (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2] + (s3)*(v3)[2]) + + #define ELL_3V_SCALE_ADD6(v3, s0, v0, s1, v1, s2, v2, \ + s3, v3, s4, v4, s5, v5) \ + ((v3)[0] = (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0] \ + + (s3)*(v3)[0] + (s4)*(v4)[0] + (s5)*(v5)[0], \ + (v3)[1] = (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1] \ + + (s3)*(v3)[1] + (s4)*(v4)[1] + (s5)*(v5)[1], \ + (v3)[2] = (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2] \ + + (s3)*(v3)[2] + (s4)*(v4)[2] + (s5)*(v5)[2]) + + #define ELL_3V_SCALE_INCR3(v3, s0, v0, s1, v1, s2, v2) \ + ((v3)[0] += (s0)*(v0)[0] + (s1)*(v1)[0] + (s2)*(v2)[0], \ + (v3)[1] += (s0)*(v0)[1] + (s1)*(v1)[1] + (s2)*(v2)[1], \ + (v3)[2] += (s0)*(v0)[2] + (s1)*(v1)[2] + (s2)*(v2)[2]) + #define ELL_3V_LEN(v) (sqrt(ELL_3V_DOT((v),(v)))) |