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-03-13 20:12:01
|
Update of /cvsroot/teem/teem/src/dye In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26582/dye Modified Files: methodsDye.c Log Message: killed off AIR_FREE and AIR_FCLOSE macros- they were just way too cute for their own good Index: methodsDye.c =================================================================== RCS file: /cvsroot/teem/teem/src/dye/methodsDye.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** methodsDye.c 7 Jan 2004 15:34:28 -0000 1.6 --- methodsDye.c 13 Mar 2004 20:03:09 -0000 1.7 *************** *** 52,58 **** } } ! if (dyeSpaceLast == spc) spc = dyeSpaceUnknown; ! AIR_FREE(str); } return spc; --- 52,59 ---- } } ! if (dyeSpaceLast == spc) { spc = dyeSpaceUnknown; ! } ! str = airFree(str); } return spc; *************** *** 141,145 **** if (col) { ! AIR_FREE(col); } return NULL; --- 142,146 ---- if (col) { ! col = airFree(col); } return NULL; *************** *** 175,179 **** biffAdd(DYE, err); return 1; } ! AIR_FREE(str); dyeColorSet(col, spc, v0, v1, v2); --- 176,180 ---- biffAdd(DYE, err); return 1; } ! str = airFree(str); dyeColorSet(col, spc, v0, v1, v2); |
|
From: <kin...@us...> - 2004-03-13 20:12:01
|
Update of /cvsroot/teem/teem/src/echo In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26582/echo Modified Files: methodsEcho.c objmethods.c renderEcho.c Log Message: killed off AIR_FREE and AIR_FCLOSE macros- they were just way too cute for their own good Index: methodsEcho.c =================================================================== RCS file: /cvsroot/teem/teem/src/echo/methodsEcho.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** methodsEcho.c 7 Jan 2004 15:34:28 -0000 1.13 --- methodsEcho.c 13 Mar 2004 20:03:09 -0000 1.14 *************** *** 54,58 **** echoRTParmNix(echoRTParm *parm) { ! AIR_FREE(parm); return NULL; --- 54,58 ---- echoRTParmNix(echoRTParm *parm) { ! parm = airFree(parm); return NULL; *************** *** 74,78 **** echoGlobalStateNix(echoGlobalState *state) { ! AIR_FREE(state); return NULL; } --- 74,78 ---- echoGlobalStateNix(echoGlobalState *state) { ! state = airFree(state); return NULL; } *************** *** 100,106 **** nrrdNuke(state->njitt); nrrdNuke(state->nperm); ! AIR_FREE(state->permBuff); ! AIR_FREE(state->chanBuff); ! AIR_FREE(state); } return NULL; --- 100,106 ---- nrrdNuke(state->njitt); nrrdNuke(state->nperm); ! state->permBuff = airFree(state->permBuff); ! state->chanBuff = airFree(state->chanBuff); ! state = airFree(state); } return NULL; *************** *** 183,187 **** airArrayNuke(scene->nrrdArr); /* don't touch envmap nrrd */ ! AIR_FREE(scene); } return NULL; --- 183,187 ---- airArrayNuke(scene->nrrdArr); /* don't touch envmap nrrd */ ! scene = airFree(scene); } return NULL; Index: objmethods.c =================================================================== RCS file: /cvsroot/teem/teem/src/echo/objmethods.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** objmethods.c 7 Jan 2004 15:34:28 -0000 1.8 --- objmethods.c 13 Mar 2004 20:03:09 -0000 1.9 *************** *** 98,103 **** ) NIX_TMPL(TriMesh, ! AIR_FREE(obj->pos); ! AIR_FREE(obj->vert); ) --- 98,103 ---- ) NIX_TMPL(TriMesh, ! obj->pos = airFree(obj->pos); ! obj->vert = airFree(obj->vert); ) Index: renderEcho.c =================================================================== RCS file: /cvsroot/teem/teem/src/echo/renderEcho.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** renderEcho.c 7 Jan 2004 15:34:28 -0000 1.24 --- renderEcho.c 13 Mar 2004 20:03:09 -0000 1.25 *************** *** 50,54 **** "x,y", "jittable", "sample"); ! AIR_FREE(tstate->permBuff); if (!( tstate->permBuff = (int*)calloc(parm->numSamples, sizeof(int)) )) { sprintf(err, "%s: couldn't allocate permutation buffer", me); --- 50,54 ---- "x,y", "jittable", "sample"); ! tstate->permBuff = airFree(tstate->permBuff); if (!( tstate->permBuff = (int*)calloc(parm->numSamples, sizeof(int)) )) { sprintf(err, "%s: couldn't allocate permutation buffer", me); *************** *** 56,60 **** } ! AIR_FREE(tstate->chanBuff); if (!( tstate->chanBuff = (echoCol_t*)calloc(ECHO_IMG_CHANNELS * parm->numSamples, --- 56,60 ---- } ! tstate->chanBuff = airFree(tstate->chanBuff); if (!( tstate->chanBuff = (echoCol_t*)calloc(ECHO_IMG_CHANNELS * parm->numSamples, |
|
From: <kin...@us...> - 2004-03-13 20:12:01
|
Update of /cvsroot/teem/teem/src/hest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26582/hest Modified Files: methodsHest.c parseHest.c Log Message: killed off AIR_FREE and AIR_FCLOSE macros- they were just way too cute for their own good Index: methodsHest.c =================================================================== RCS file: /cvsroot/teem/teem/src/hest/methodsHest.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** methodsHest.c 7 Jan 2004 15:34:29 -0000 1.9 --- methodsHest.c 13 Mar 2004 20:03:09 -0000 1.10 *************** *** 55,59 **** hestParmFree(hestParm *parm) { ! AIR_FREE(parm); return NULL; } --- 55,59 ---- hestParmFree(hestParm *parm) { ! parm = airFree(parm); return NULL; } *************** *** 149,156 **** _hestOptFree(hestOpt *opt) { ! AIR_FREE(opt->flag); ! AIR_FREE(opt->name); ! AIR_FREE(opt->dflt); ! AIR_FREE(opt->info); return; } --- 149,156 ---- _hestOptFree(hestOpt *opt) { ! opt->flag = airFree(opt->flag); ! opt->name = airFree(opt->name); ! opt->dflt = airFree(opt->dflt); ! opt->info = airFree(opt->info); return; } Index: parseHest.c =================================================================== RCS file: /cvsroot/teem/teem/src/hest/parseHest.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** parseHest.c 7 Jan 2004 15:34:29 -0000 1.13 --- parseHest.c 13 Mar 2004 20:03:09 -0000 1.14 *************** *** 441,445 **** if (appr[flag]) { airMopSub(pmop, prms[flag], airFree); ! AIR_FREE(prms[flag]); } prms[flag] = _hestExtract(argcP, argv, a, nprm[flag]); --- 441,445 ---- if (appr[flag]) { airMopSub(pmop, prms[flag], airFree); ! prms[flag] = airFree(prms[flag]); } prms[flag] = _hestExtract(argcP, argv, a, nprm[flag]); *************** *** 641,645 **** tmpS = airStrdup(prms[op]); nprm[op] = airStrntok(tmpS, " "); ! AIR_FREE(tmpS); /* printf("!%s: nprm[%d] in default = %d\n", me, op, nprm[op]); */ if (opt[op].min < _hestMax(opt[op].max)) { --- 641,645 ---- tmpS = airStrdup(prms[op]); nprm[op] = airStrntok(tmpS, " "); ! tmpS = airFree(tmpS); /* printf("!%s: nprm[%d] in default = %d\n", me, op, nprm[op]); */ if (opt[op].min < _hestMax(opt[op].max)) { *************** *** 874,878 **** if (opt[op].flag && 1 == _hestCase(opt, udflt, nprm, appr, op)) { /* we just parsed the default, but now we want to "invert" it */ ! AIR_FREE(*((char**)vP)); opt[op].alloc = 0; } --- 874,878 ---- if (opt[op].flag && 1 == _hestCase(opt, udflt, nprm, appr, op)) { /* we just parsed the default, but now we want to "invert" it */ ! *((char**)vP) = airFree(*((char**)vP)); opt[op].alloc = 0; } *************** *** 1192,1196 **** case 1: if (airTypeOther != opt[op].type) { ! AIR_FREE(*vP); } else { --- 1192,1196 ---- case 1: if (airTypeOther != opt[op].type) { ! *vP = airFree(*vP); } else { *************** *** 1202,1206 **** } else { ! AIR_FREE(*vP); } } --- 1202,1206 ---- } else { ! *vP = airFree(*vP); } } *************** *** 1209,1213 **** if (airTypeString == opt[op].type) { for (i=0; i<=opt[op].min-1; i++) { ! AIR_FREE(str[i]); } } --- 1209,1213 ---- if (airTypeString == opt[op].type) { for (i=0; i<=opt[op].min-1; i++) { ! str[i] = airFree(str[i]); } } *************** *** 1221,1227 **** if (airTypeString == opt[op].type) { for (i=0; i<=*(opt[op].sawP)-1; i++) { ! AIR_FREE((*strP)[i]); } ! AIR_FREE(*strP); } else { --- 1221,1227 ---- if (airTypeString == opt[op].type) { for (i=0; i<=*(opt[op].sawP)-1; i++) { ! (*strP)[i] = airFree((*strP)[i]); } ! *strP = airFree(*strP); } else { *************** *** 1229,1233 **** (*vAP)[i] = opt[op].CB->destroy((*vAP)[i]); } ! AIR_FREE(*vAP); } break; --- 1229,1233 ---- (*vAP)[i] = opt[op].CB->destroy((*vAP)[i]); } ! *vAP = airFree(*vAP); } break; |
|
From: <kin...@us...> - 2004-03-13 20:12:01
|
Update of /cvsroot/teem/teem/src/gage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26582/gage Modified Files: ctx.c miscGage.c pvl.c update.c Log Message: killed off AIR_FREE and AIR_FCLOSE macros- they were just way too cute for their own good Index: ctx.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/ctx.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ctx.c 16 Jan 2004 17:35:12 -0000 1.12 --- ctx.c 13 Mar 2004 20:03:09 -0000 1.13 *************** *** 78,86 **** } ctx->shape = gageShapeNix(ctx->shape); ! AIR_FREE(ctx->fw); ! AIR_FREE(ctx->fsl); ! AIR_FREE(ctx->off); } ! AIR_FREE(ctx); return NULL; } --- 78,86 ---- } ctx->shape = gageShapeNix(ctx->shape); ! ctx->fw = airFree(ctx->fw); ! ctx->fsl = airFree(ctx->fsl); ! ctx->off = airFree(ctx->off); } ! ctx = airFree(ctx); return NULL; } Index: miscGage.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/miscGage.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** miscGage.c 13 Feb 2004 22:56:15 -0000 1.10 --- miscGage.c 13 Mar 2004 20:03:09 -0000 1.11 *************** *** 231,235 **** if (isp) { ! AIR_FREE(isp); } return NULL; --- 231,235 ---- if (isp) { ! isp = airFree(isp); } return NULL; Index: pvl.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/pvl.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** pvl.c 19 Feb 2004 03:50:02 -0000 1.11 --- pvl.c 13 Mar 2004 20:03:09 -0000 1.12 *************** *** 155,167 **** gagePerVolumeNix (gagePerVolume *pvl) { ! AIR_FREE(pvl->iv3); ! AIR_FREE(pvl->iv2); ! AIR_FREE(pvl->iv1); if (!pvl->thisIsACopy && pvl->nixer) { pvl->nixer(pvl->npad, pvl->kind, pvl); } ! AIR_FREE(pvl->answer); ! AIR_FREE(pvl->directAnswer); ! AIR_FREE(pvl); return NULL; } --- 155,167 ---- gagePerVolumeNix (gagePerVolume *pvl) { ! pvl->iv3 = airFree(pvl->iv3); ! pvl->iv2 = airFree(pvl->iv2); ! pvl->iv1 = airFree(pvl->iv1); if (!pvl->thisIsACopy && pvl->nixer) { pvl->nixer(pvl->npad, pvl->kind, pvl); } ! pvl->answer = airFree(pvl->answer); ! pvl->directAnswer = airFree(pvl->directAnswer); ! pvl = airFree(pvl); return NULL; } Index: update.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/update.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** update.c 13 Feb 2004 22:56:15 -0000 1.12 --- update.c 13 Mar 2004 20:03:09 -0000 1.13 *************** *** 336,342 **** if (ctx->verbose) fprintf(stderr, "%s: hello\n", me); fd = GAGE_FD(ctx); ! AIR_FREE(ctx->fsl); ! AIR_FREE(ctx->fw); ! AIR_FREE(ctx->off); ctx->fsl = (gage_t *)calloc(fd*3, sizeof(gage_t)); ctx->fw = (gage_t *)calloc(fd*3*GAGE_KERNEL_NUM, sizeof(gage_t)); --- 336,342 ---- if (ctx->verbose) fprintf(stderr, "%s: hello\n", me); fd = GAGE_FD(ctx); ! ctx->fsl = airFree(ctx->fsl); ! ctx->fw = airFree(ctx->fw); ! ctx->off = airFree(ctx->off); ctx->fsl = (gage_t *)calloc(fd*3, sizeof(gage_t)); ctx->fw = (gage_t *)calloc(fd*3*GAGE_KERNEL_NUM, sizeof(gage_t)); *************** *** 348,354 **** for (i=0; i<ctx->numPvl; i++) { pvl = ctx->pvl[i]; ! AIR_FREE(pvl->iv3); ! AIR_FREE(pvl->iv2); ! AIR_FREE(pvl->iv1); pvl->iv3 = (gage_t *)calloc(fd*fd*fd*pvl->kind->valLen, sizeof(gage_t)); pvl->iv2 = (gage_t *)calloc(fd*fd*pvl->kind->valLen, sizeof(gage_t)); --- 348,354 ---- for (i=0; i<ctx->numPvl; i++) { pvl = ctx->pvl[i]; ! pvl->iv3 = airFree(pvl->iv3); ! pvl->iv2 = airFree(pvl->iv2); ! pvl->iv1 = airFree(pvl->iv1); pvl->iv3 = (gage_t *)calloc(fd*fd*fd*pvl->kind->valLen, sizeof(gage_t)); pvl->iv2 = (gage_t *)calloc(fd*fd*pvl->kind->valLen, sizeof(gage_t)); |
|
From: <kin...@us...> - 2004-03-13 20:12:00
|
Update of /cvsroot/teem/teem/src/mite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26582/mite Modified Files: renderMite.c shade.c thread.c user.c Log Message: killed off AIR_FREE and AIR_FCLOSE macros- they were just way too cute for their own good Index: renderMite.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/renderMite.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** renderMite.c 4 Mar 2004 14:04:08 -0000 1.13 --- renderMite.c 13 Mar 2004 20:03:10 -0000 1.14 *************** *** 29,33 **** mrr->rmop = airMopNew(); if (!mrr->rmop) { ! AIR_FREE(mrr); return mrr; } --- 29,33 ---- mrr->rmop = airMopNew(); if (!mrr->rmop) { ! mrr = airFree(mrr); return mrr; } *************** *** 55,59 **** if (mrr) { airMopOkay(mrr->rmop); ! AIR_FREE(mrr); } return NULL; --- 55,59 ---- if (mrr) { airMopOkay(mrr->rmop); ! mrr = airFree(mrr); } return NULL; Index: shade.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/shade.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** shade.c 29 Feb 2004 13:42:41 -0000 1.2 --- shade.c 13 Mar 2004 20:03:10 -0000 1.3 *************** *** 48,52 **** shpec->scl0 = gageItemSpecNix(shpec->scl0); shpec->scl1 = gageItemSpecNix(shpec->scl1); ! AIR_FREE(shpec); } return NULL; --- 48,52 ---- shpec->scl0 = gageItemSpecNix(shpec->scl0); shpec->scl1 = gageItemSpecNix(shpec->scl1); ! shpec = airFree(shpec); } return NULL; Index: thread.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/thread.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** thread.c 4 Mar 2004 14:04:08 -0000 1.13 --- thread.c 13 Mar 2004 20:03:10 -0000 1.14 *************** *** 69,75 **** miteThreadNix(miteThread *mtt) { ! AIR_FREE(mtt->ansMiteVal); ! AIR_FREE(mtt->directAnsMiteVal); ! AIR_FREE(mtt); return NULL; } --- 69,75 ---- miteThreadNix(miteThread *mtt) { ! mtt->ansMiteVal = airFree(mtt->ansMiteVal); ! mtt->directAnsMiteVal = airFree(mtt->directAnsMiteVal); ! mtt = airFree(mtt); return NULL; } Index: user.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/user.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** user.c 4 Mar 2004 14:04:08 -0000 1.17 --- user.c 13 Mar 2004 20:03:10 -0000 1.18 *************** *** 69,73 **** if (muu) { airMopOkay(muu->umop); ! AIR_FREE(muu); } return NULL; --- 69,73 ---- if (muu) { airMopOkay(muu->umop); ! muu = airFree(muu); } return NULL; |
|
From: <kin...@us...> - 2004-03-08 15:15:20
|
Update of /cvsroot/teem/teem/src/nrrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1068 Modified Files: filt.c Log Message: plugged memory leak Index: filt.c =================================================================== RCS file: /cvsroot/teem/teem/src/nrrd/filt.c,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** filt.c 7 Jan 2004 15:34:30 -0000 1.39 --- filt.c 8 Mar 2004 14:58:37 -0000 1.40 *************** *** 361,364 **** --- 361,365 ---- } range = nrrdRangeNewSet(nin, nrrdBlind8BitRangeFalse); + airMopAdd(mop, range, (airMopper)nrrdRangeNix, airMopAlways); if (!(hist = (float*)calloc(bins, sizeof(float)))) { sprintf(err, "%s: couldn't allocate histogram (%d bins)", me, bins); |
|
From: <kin...@us...> - 2004-03-08 14:57:52
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29863 Modified Files: epireg.c tendEpireg.c Log Message: NO API CHANGES: attempts at refining registration method, and other inconsequential changes Index: epireg.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/epireg.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** epireg.c 7 Mar 2004 00:49:06 -0000 1.26 --- epireg.c 8 Mar 2004 14:41:24 -0000 1.27 *************** *** 333,336 **** --- 333,337 ---- and merge up (to bright) all small dark pieces, where (currently) small is big/2 */ + big = -1; if (nrrdCCFind(ncc, &nval, nthr[ni], nrrdTypeDefault, conny) || nrrdCCSize(nsize, ncc) *************** *** 338,345 **** || nrrdCCMerge(ncc, ncc, nval, -1, big-1, 0, conny) || nrrdCCRevalue(nthr[ni], ncc, nval)) { ! sprintf(err, "%s: trouble with 3-D processing nthr[%d]", me, ni); ! biffMove(TEN, err, NRRD); return 1; } for (z=0; z<sz; z++) { if ( nrrdSlice(nslc, nthr[ni], 2, z) || nrrdCCFind(ncc, &nval, nslc, nrrdTypeDefault, conny) --- 339,353 ---- || nrrdCCMerge(ncc, ncc, nval, -1, big-1, 0, conny) || nrrdCCRevalue(nthr[ni], ncc, nval)) { ! if (big) { ! sprintf(err, "%s: trouble with 3-D processing nthr[%d]", me, ni); ! biffMove(TEN, err, NRRD); return 1; ! } else { ! sprintf(err, "%s: got size 0 for biggest bright CC of nthr[%d]", ! me, ni); ! biffAdd(TEN, err); return 1; ! } } for (z=0; z<sz; z++) { + big = -1; if ( nrrdSlice(nslc, nthr[ni], 2, z) || nrrdCCFind(ncc, &nval, nslc, nrrdTypeDefault, conny) *************** *** 349,354 **** || nrrdCCRevalue(nslc, ncc, nval) || nrrdSplice(nthr[ni], nthr[ni], nslc, 2, z) ) { ! sprintf(err, "%s: trouble processing slice %d of nthr[%d]", me, z, ni); ! biffMove(TEN, err, NRRD); return 1; } } --- 357,368 ---- || nrrdCCRevalue(nslc, ncc, nval) || nrrdSplice(nthr[ni], nthr[ni], nslc, 2, z) ) { ! if (big) { ! sprintf(err, "%s: trouble processing slice %d of nthr[%d]", ! me, z, ni); ! biffMove(TEN, err, NRRD); return 1; ! } else { ! /* biggest bright CC on this slice had size 0 ! <==> there was no bright CC on this slice, move on */ ! } } } *************** *** 414,422 **** } } - if (!N) { - sprintf(err, "%s: saw no non-zero pixels in nthresh[%d]; " - "DWI threshold too high?", me, ni); - biffAdd(TEN, err); return 1; - } if (N == sx*sy) { sprintf(err, "%s: saw only non-zero pixels in nthresh[%d]; " --- 428,431 ---- *************** *** 424,452 **** biffAdd(TEN, err); return 1; } ! mx /= N; ! my /= N; ! cx = sx/2.0; ! cy = sy/2.0; ! /* ------ find M02, M11, M20 */ ! M02 = M11 = M20 = 0.0; ! for (yi=0; yi<sy; yi++) { ! for (xi=0; xi<sx; xi++) { ! val = thr[xi + sx*yi]; ! x = xi - cx; ! y = yi - cy; ! M02 += y*y*val; ! M11 += x*y*val; ! M20 += x*x*val; } } - M02 /= N; - M11 /= N; - M20 /= N; - /* ------ set output */ - mom[MEAN_X] = mx; - mom[MEAN_Y] = my; - mom[M_02] = M02; - mom[M_11] = M11; - mom[M_20] = M20; thr += sx*sy; mom += 5; --- 433,471 ---- biffAdd(TEN, err); return 1; } ! if (N) { ! /* there were non-zero pixels */ ! mx /= N; ! my /= N; ! cx = sx/2.0; ! cy = sy/2.0; ! /* ------ find M02, M11, M20 */ ! M02 = M11 = M20 = 0.0; ! for (yi=0; yi<sy; yi++) { ! for (xi=0; xi<sx; xi++) { ! val = thr[xi + sx*yi]; ! x = xi - cx; ! y = yi - cy; ! M02 += y*y*val; ! M11 += x*y*val; ! M20 += x*x*val; ! } } + M02 /= N; + M11 /= N; + M20 /= N; + /* ------ set output */ + mom[MEAN_X] = mx; + mom[MEAN_Y] = my; + mom[M_02] = M02; + mom[M_11] = M11; + mom[M_20] = M20; + } else { + /* there were no non-zero pixels */ + mom[MEAN_X] = 0; + mom[MEAN_Y] = 0; + mom[M_02] = 0; + mom[M_11] = 0; + mom[M_20] = 0; } thr += sx*sy; mom += 5; *************** *** 509,526 **** _tenEpiRegEstimHST(Nrrd *nhst, Nrrd *npxfr, int ninLen, Nrrd *ngrad) { char me[]="_tenEpiRegEstimHST", err[AIR_STRLEN_MED]; ! double *hst, *grad, *mat1, *vec, *ans, *pxfr, *gA, *gB; int z, sz, A, B, npairs, ri; ! Nrrd *nmat1, *nvec, *ninv, *nans; airArray *mop; mop = airMopNew(); ! airMopAdd(mop, nmat1=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! airMopAdd(mop, ninv=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, nvec=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, nans=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! npairs = ninLen*(ninLen-1); ! sz = npxfr->axis[1].size; ! if (nrrdMaybeAlloc(nhst, nrrdTypeDouble, 2, 9, sz) ! || nrrdMaybeAlloc(nmat1, nrrdTypeDouble, 2, 3, npairs) || nrrdMaybeAlloc(nvec, nrrdTypeDouble, 2, 1, npairs)) { sprintf(err, "%s: couldn't allocate HST nrrd", me); --- 528,560 ---- _tenEpiRegEstimHST(Nrrd *nhst, Nrrd *npxfr, int ninLen, Nrrd *ngrad) { char me[]="_tenEpiRegEstimHST", err[AIR_STRLEN_MED]; ! double *hst, *grad, *mat, *vec, *ans, *pxfr, *gA, *gB; int z, sz, A, B, npairs, ri; ! Nrrd **nmat, *nvec, **ninv, *nans; airArray *mop; + int order; + + order = 1; + + sz = npxfr->axis[1].size; + npairs = ninLen*(ninLen-1); mop = airMopNew(); ! nmat = (Nrrd**)calloc(sz, sizeof(Nrrd*)); ! ninv = (Nrrd**)calloc(sz, sizeof(Nrrd*)); ! airMopAdd(mop, nmat, airFree, airMopAlways); ! airMopAdd(mop, ninv, airFree, airMopAlways); ! for (z=0; z<sz; z++) { ! airMopAdd(mop, nmat[z]=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! if (nrrdMaybeAlloc(nmat[z], nrrdTypeDouble, 2, ! (1 == order ? 3 : 9), npairs)) { ! sprintf(err, "%s: couldn't allocate fitting matrices", me); ! biffMove(TEN, err, NRRD); airMopError(mop); return 1; ! } ! airMopAdd(mop, ninv[z]=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! } airMopAdd(mop, nvec=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, nans=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! if (nrrdMaybeAlloc(nhst, nrrdTypeDouble, 2, ! (1 == order ? 9 : 27), sz) || nrrdMaybeAlloc(nvec, nrrdTypeDouble, 2, 1, npairs)) { sprintf(err, "%s: couldn't allocate HST nrrd", me); *************** *** 528,539 **** } nrrdAxisInfoSet(nhst, nrrdAxisInfoLabel, ! "Hx,Hy,Hz,Sx,Sy,Sz,Tx,Ty,Tz", "z"); ! grad = (double *)(ngrad->data); ! mat1 = (double *)(nmat1->data); ! vec = (double *)(nvec->data); ! /* ------ find Sx, Sy, Sz per slice */ for (z=0; z<sz; z++) { ! hst = (double *)(nhst->data) + 0 + 9*z; ri = 0; for (A=0; A<ninLen; A++) { --- 562,574 ---- } nrrdAxisInfoSet(nhst, nrrdAxisInfoLabel, ! (1 == order ! ? "Hx,Hy,Hz,Sx,Sy,Sz,Tx,Ty,Tz" ! : "HST parms"), "z"); ! /* ------ per-slice: compute model fitting matrix and its pseudo-inverse */ ! grad = (double *)(ngrad->data); for (z=0; z<sz; z++) { ! hst = (double *)(nhst->data) + (1 == order ? 9 : 27)*z; ! mat = (double *)(nmat[z]->data); ri = 0; for (A=0; A<ninLen; A++) { *************** *** 543,565 **** gA = grad + 0 + 3*A; gB = grad + 0 + 3*B; ! ELL_3V_SET(mat1 + 3*ri, ! pxfr[SCALE]*gA[0] - gB[0], ! pxfr[SCALE]*gA[1] - gB[1], ! pxfr[SCALE]*gA[2] - gB[2]); ! vec[ri] = 1 - pxfr[SCALE]; ri += 1; } } ! ell_Nm_pseudo_inv(ninv, nmat1); ! ell_Nm_mul(nans, ninv, nvec); ! ans = (double *)(nans->data); ! hst[3] = ans[0]; ! hst[4] = ans[1]; ! hst[5] = ans[2]; } /* ------ find Hx, Hy, Hz per slice */ for (z=0; z<sz; z++) { ! hst = (double *)(nhst->data) + 0 + 9*z; ri = 0; for (A=0; A<ninLen; A++) { --- 578,636 ---- gA = grad + 0 + 3*A; gB = grad + 0 + 3*B; ! if (1 == order) { ! ELL_3V_SET(mat + 3*ri, ! gB[0] - pxfr[SCALE]*gA[0], ! gB[1] - pxfr[SCALE]*gA[1], ! gB[2] - pxfr[SCALE]*gA[2]); ! } else { ! ELL_9V_SET(mat + 9*ri, ! gB[0] - pxfr[SCALE]*gA[0], ! gB[1] - pxfr[SCALE]*gA[1], ! gB[2] - pxfr[SCALE]*gA[2], ! gB[0] - pxfr[SCALE]*gA[0], ! gB[1] - pxfr[SCALE]*gA[1], ! gB[2] - pxfr[SCALE]*gA[2], ! gB[0] - pxfr[SCALE]*gA[0], ! gB[1] - pxfr[SCALE]*gA[1], ! gB[2] - pxfr[SCALE]*gA[2]); ! /* ! gB[0]*gB[0] - pxfr[SCALE]*gA[0]*gA[0], ! gB[1]*gB[1] - pxfr[SCALE]*gA[1]*gA[1], ! gB[2]*gB[2] - pxfr[SCALE]*gA[2]*gA[2], ! gB[0]*gB[1] - pxfr[SCALE]*gA[0]*gA[1], ! gB[0]*gB[2] - pxfr[SCALE]*gA[0]*gA[2], ! gB[1]*gB[2] - pxfr[SCALE]*gA[1]*gA[2]); ! */ ! } ri += 1; } } ! if (nrrdHasNonExist(nmat[z])) { ! /* as happens if there were zero slices in the segmentation output */ ! if (1 == order) { ! ELL_3V_SET(hst + 0*3, 0, 0, 0); ! ELL_3V_SET(hst + 1*3, 0, 0, 0); ! ELL_3V_SET(hst + 2*3, 0, 0, 0); ! } else { ! ELL_9V_SET(hst + 0*9, 0, 0, 0, 0, 0, 0, 0, 0, 0); ! ELL_9V_SET(hst + 1*9, 0, 0, 0, 0, 0, 0, 0, 0, 0); ! ELL_9V_SET(hst + 2*9, 0, 0, 0, 0, 0, 0, 0, 0, 0); ! } ! } else { ! if (ell_Nm_pseudo_inv(ninv[z], nmat[z])) { ! sprintf(err, "%s: trouble estimating model (slice %d)", me, z); ! biffMove(TEN, err, ELL); airMopError(mop); return 1; ! } ! } } /* ------ find Hx, Hy, Hz per slice */ + vec = (double *)(nvec->data); for (z=0; z<sz; z++) { ! if (nrrdHasNonExist(nmat[z])) { ! /* we've already zero-ed out this row in the HST nrrd */ ! continue; ! } ! hst = (double *)(nhst->data) + (1 == order ? 9 : 27)*z; ri = 0; for (A=0; A<ninLen; A++) { *************** *** 567,591 **** if (A == B) continue; pxfr = (double *)(npxfr->data) + 0 + 5*(z + sz*(A + ninLen*B)); - gA = grad + 0 + 3*A; - gB = grad + 0 + 3*B; - ELL_3V_SET(mat1 + 3*ri, - gB[0] - pxfr[SCALE]*gA[0], - gB[1] - pxfr[SCALE]*gA[1], - gB[2] - pxfr[SCALE]*gA[2]); vec[ri] = pxfr[SHEAR]; ri += 1; } } ! ell_Nm_pseudo_inv(ninv, nmat1); ! ell_Nm_mul(nans, ninv, nvec); ans = (double *)(nans->data); ! hst[0] = ans[0]; ! hst[1] = ans[1]; ! hst[2] = ans[2]; } /* ------ find Tx, Ty, Tz per slice */ for (z=0; z<sz; z++) { ! hst = (double *)(nhst->data) + 0 + 9*z; ri = 0; for (A=0; A<ninLen; A++) { --- 638,694 ---- if (A == B) continue; pxfr = (double *)(npxfr->data) + 0 + 5*(z + sz*(A + ninLen*B)); vec[ri] = pxfr[SHEAR]; ri += 1; } } ! if (ell_Nm_mul(nans, ninv[z], nvec)) { ! sprintf(err, "%s: trouble estimating model (slice %d): Hx, Hy, Hz", ! me, z); ! biffMove(TEN, err, ELL); airMopError(mop); return 1; ! } ans = (double *)(nans->data); ! if (1 == order) { ! ELL_3V_COPY(hst + 0*3, ans); ! } else { ! ELL_9V_COPY(hst + 0*9, ans); ! } ! } ! ! /* ------ find Sx, Sy, Sz per slice */ ! for (z=0; z<sz; z++) { ! if (nrrdHasNonExist(nmat[z])) { ! /* we've already zero-ed out this row in the HST nrrd */ ! continue; ! } ! hst = (double *)(nhst->data) + (1 == order ? 9 : 27)*z; ! ri = 0; ! for (A=0; A<ninLen; A++) { ! for (B=0; B<ninLen; B++) { ! if (A == B) continue; ! pxfr = (double *)(npxfr->data) + 0 + 5*(z + sz*(A + ninLen*B)); ! vec[ri] = pxfr[SCALE] - 1; ! ri += 1; ! } ! } ! if (ell_Nm_mul(nans, ninv[z], nvec)) { ! sprintf(err, "%s: trouble estimating model (slice %d): Sx, Sy, Sz", ! me, z); ! biffMove(TEN, err, ELL); airMopError(mop); return 1; ! } ! ans = (double *)(nans->data); ! if (1 == order) { ! ELL_3V_COPY(hst + 1*3, ans); ! } else { ! ELL_9V_COPY(hst + 1*9, ans); ! } } /* ------ find Tx, Ty, Tz per slice */ for (z=0; z<sz; z++) { ! if (nrrdHasNonExist(nmat[z])) { ! /* we've already zero-ed out this row in the HST nrrd */ ! continue; ! } ! hst = (double *)(nhst->data) + (1 == order ? 9 : 27)*z; ri = 0; for (A=0; A<ninLen; A++) { *************** *** 593,612 **** if (A == B) continue; pxfr = (double *)(npxfr->data) + 0 + 5*(z + sz*(A + ninLen*B)); - gA = grad + 0 + 3*A; - gB = grad + 0 + 3*B; - ELL_3V_SET(mat1 + 3*ri, - gB[0] - pxfr[SCALE]*gA[0], - gB[1] - pxfr[SCALE]*gA[1], - gB[2] - pxfr[SCALE]*gA[2]); vec[ri] = pxfr[TRAN]; ri += 1; } } ! ell_Nm_pseudo_inv(ninv, nmat1); ! ell_Nm_mul(nans, ninv, nvec); ans = (double *)(nans->data); ! hst[6] = ans[0]; ! hst[7] = ans[1]; ! hst[8] = ans[2]; } --- 696,714 ---- if (A == B) continue; pxfr = (double *)(npxfr->data) + 0 + 5*(z + sz*(A + ninLen*B)); vec[ri] = pxfr[TRAN]; ri += 1; } } ! if (ell_Nm_mul(nans, ninv[z], nvec)) { ! sprintf(err, "%s: trouble estimating model (slice %d): Tx, Ty, Tz", ! me, z); ! biffMove(TEN, err, ELL); airMopError(mop); return 1; ! } ans = (double *)(nans->data); ! if (1 == order) { ! ELL_3V_COPY(hst + 2*3, ans); ! } else { ! ELL_9V_COPY(hst + 2*9, ans); ! } } *************** *** 670,674 **** /* initial ordering: messiness, slice index */ for (zi=0; zi<sz; zi++) { ! two[0 + 2*zi] = mess[zi]; two[1 + 2*zi] = zi; } --- 772,778 ---- /* initial ordering: messiness, slice index */ for (zi=0; zi<sz; zi++) { ! two[0 + 2*zi] = (AIR_EXISTS(mess[zi]) ! ? mess[zi] ! : 666); /* don't use empty slices */ two[1 + 2*zi] = zi; } *************** *** 693,697 **** } ! /* perform fitting for each column in hst */ hst = (double*)(nhst->data); sh = nhst->axis[0].size; --- 797,802 ---- } ! /* perform fitting for each column in hst (regardless of ! whether we're using a 1st or 2nd order model */ hst = (double*)(nhst->data); sh = nhst->axis[0].size; *************** *** 724,730 **** int reference, int ni, int zi, Nrrd *npxfr, Nrrd *nhst, Nrrd *ngrad) { ! double *xfr, *hst, *grad; int sz, ninLen; /* these could also have been passed to us, but we can also discover them */ sz = npxfr->axis[1].size; --- 829,839 ---- int reference, int ni, int zi, Nrrd *npxfr, Nrrd *nhst, Nrrd *ngrad) { ! double *xfr, *hst, *_grad, grad[9]; /* big enough for 2nd order */ int sz, ninLen; + int order; + + order = 1; + /* these could also have been passed to us, but we can also discover them */ sz = npxfr->axis[1].size; *************** *** 734,742 **** /* we use the estimated H,S,T vectors to determine distortion as a function of gradient direction, and then invert this */ ! hst = (double*)(nhst->data) + 0 + 9*zi; ! grad = (double*)(ngrad->data) + 0 + 3*ni; ! *hhP = ELL_3V_DOT(grad, hst + 0*3); ! *ssP = 1 + ELL_3V_DOT(grad, hst + 1*3); ! *ttP = ELL_3V_DOT(grad, hst + 2*3); } else { /* we register against a specific DWI */ --- 843,865 ---- /* we use the estimated H,S,T vectors to determine distortion as a function of gradient direction, and then invert this */ ! _grad = (double*)(ngrad->data) + 0 + 3*ni; ! if (1 == order) { ! hst = (double*)(nhst->data) + 0 + 9*zi; ! *hhP = ELL_3V_DOT(_grad, hst + 0*3); ! *ssP = 1 + ELL_3V_DOT(_grad, hst + 1*3); ! *ttP = ELL_3V_DOT(_grad, hst + 2*3); ! } else { ! hst = (double*)(nhst->data) + 0 + 27*zi; ! ELL_9V_SET(grad, _grad[0], _grad[1], _grad[2], ! _grad[0], _grad[1], _grad[2], ! _grad[0], _grad[1], _grad[2]); ! /* ! _grad[0]*_grad[0], _grad[1]*_grad[1], _grad[2]*_grad[2], ! _grad[0]*_grad[1], _grad[0]*_grad[2], _grad[1]*_grad[2]); ! */ ! *hhP = ELL_9V_DOT(grad, hst + 0*9); ! *ssP = 1 + ELL_9V_DOT(grad, hst + 1*9); ! *ttP = ELL_9V_DOT(grad, hst + 2*9); ! } } else { /* we register against a specific DWI */ Index: tendEpireg.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tendEpireg.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** tendEpireg.c 7 Jan 2004 15:34:31 -0000 1.14 --- tendEpireg.c 8 Mar 2004 14:41:24 -0000 1.15 *************** *** 140,144 **** if (rret) { airMopAdd(mop, err=biffGetDone(TEN), airFree, airMopAlways); ! fprintf(stderr, "%s: trouble doing epireg \"%s\":\n%s\n", me, buff, err); airMopError(mop); return 1; } --- 140,144 ---- if (rret) { airMopAdd(mop, err=biffGetDone(TEN), airFree, airMopAlways); ! fprintf(stderr, "%s: trouble doing epireg:\n%s\n", me, err); airMopError(mop); return 1; } |
|
From: <kin...@us...> - 2004-03-08 14:56:20
|
Update of /cvsroot/teem/teem/src/ell In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29468 Modified Files: ellMacros.h Log Message: some more macros Index: ellMacros.h =================================================================== RCS file: /cvsroot/teem/teem/src/ell/ellMacros.h,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** ellMacros.h 1 Mar 2004 10:19:44 -0000 1.40 --- ellMacros.h 8 Mar 2004 14:39:48 -0000 1.41 *************** *** 757,760 **** --- 757,787 ---- (v2)[6] = (v1)[6]) + #define ELL_9V_SET(v, a, b, c, d, e, f, g, h, i) \ + ((v)[0]=(a), (v)[1]=(b), (v)[2]=(c), \ + (v)[3]=(d), (v)[4]=(e), (v)[5]=(f), \ + (v)[6]=(g), (v)[7]=(h), (v)[8]=(i)) + + #define ELL_9V_COPY(v2, v1) \ + ((v2)[0] = (v1)[0], \ + (v2)[1] = (v1)[1], \ + (v2)[2] = (v1)[2], \ + (v2)[3] = (v1)[3], \ + (v2)[4] = (v1)[4], \ + (v2)[5] = (v1)[5], \ + (v2)[6] = (v1)[6], \ + (v2)[7] = (v1)[7], \ + (v2)[8] = (v1)[8]) + + #define ELL_9V_DOT(v1, v2) \ + ((v1)[0]*(v2)[0] + \ + (v1)[1]*(v2)[1] + \ + (v1)[2]*(v2)[2] + \ + (v1)[3]*(v2)[3] + \ + (v1)[4]*(v2)[4] + \ + (v1)[5]*(v2)[5] + \ + (v1)[6]*(v2)[6] + \ + (v1)[7]*(v2)[7] + \ + (v1)[8]*(v2)[8]) + #ifdef __cplusplus } |
|
From: <kin...@us...> - 2004-03-08 14:55:57
|
Update of /cvsroot/teem/teem/src/ell In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29340 Modified Files: genmat.c Log Message: clarified error message Index: genmat.c =================================================================== RCS file: /cvsroot/teem/teem/src/ell/genmat.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** genmat.c 1 Mar 2004 10:19:44 -0000 1.5 --- genmat.c 8 Mar 2004 14:39:30 -0000 1.6 *************** *** 130,134 **** } ! /* find vv[i]: max of abs of everything in row i */ for (i=0; i<NN; i++) { big = 0.0; --- 130,134 ---- } ! /* find vv[i]: max of abs of everything in column i */ for (i=0; i<NN; i++) { big = 0.0; *************** *** 139,143 **** } if (!big) { ! sprintf(err, "%s: singular matrix since row %d all zero", me, i); biffAdd(ELL, err); ret = 1; goto seeya; } --- 139,143 ---- } if (!big) { ! sprintf(err, "%s: singular matrix since column %d all zero", me, i); biffAdd(ELL, err); ret = 1; goto seeya; } |
|
From: <kin...@us...> - 2004-03-07 01:08:19
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18490 Modified Files: chan.c Log Message: tenSimulateOne: - fixed basic bug in handling of off-diagonal entries of B-matrix tenEstimateLinear4D: - fixed basic bug in computation of unknown B0 field - should be able to save out tensor error field with knownB0 either true or false - changed tweaking heuristic in automatic DWI threshold detection Index: chan.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/chan.c,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** chan.c 27 Feb 2004 10:23:56 -0000 1.30 --- chan.c 7 Mar 2004 00:52:57 -0000 1.31 *************** *** 141,145 **** ** output: ** ten[0]..ten[6] will be the confidence value followed by the tensor ! ** -------------- !IF knownB0 ------------------------- ** input: ** dwi[0]..dwi[DD-1] are the DD DWI values, --- 141,145 ---- ** output: ** ten[0]..ten[6] will be the confidence value followed by the tensor ! ** -------------- IF !knownB0 ------------------------- ** input: ** dwi[0]..dwi[DD-1] are the DD DWI values, *************** *** 160,163 **** --- 160,167 ---- if (knownB0) { + if (B0P) { + /* we save this as a courtesy */ + *B0P = AIR_MAX(dwi[0], 1); + } logB0 = log(AIR_MAX(dwi[0], 1)); mean = 0; *************** *** 197,202 **** ten[j+1] = tmp; } else { if (B0P) { ! *B0P = tmp; } } --- 201,207 ---- ten[j+1] = tmp; } else { + /* we're on seventh row, for finding B0 */ if (B0P) { ! *B0P = exp(b*tmp); } } *************** *** 266,296 **** float thresh, float soft, float b) { char me[]="tenEstimateLinear4D", err[AIR_STRLEN_MED]; ! Nrrd *nemat, *ncrop, *nhist; airArray *mop; ! int E, DD, d, II, sx, sy, sz, cmin[4], cmax[4], amap[4] = {-1,1,2,3}; float *ten, dwi1[_TEN_MAX_DWI_NUM], *terr=NULL, ! *B0=NULL, (*lup)(const void *, size_t); ! double *emat; NrrdRange *range; - - /* - HEY: uncomment with tenSimulate stuff is working for unknown B0 case - Nrrd *nbmat; - double *bmat; - const char *bk; float dwi2[_TEN_MAX_DWI_NUM], te, d1, d2; - */ if (!(nten && ndwi && _nbmat)) { ! /* nerrP can be NULL */ sprintf(err, "%s: got NULL pointer", me); biffAdd(TEN, err); return 1; } - if (!knownB0 && !nB0P) { - /* For the time being, this needless restriction helps simplify things */ - sprintf(err, "%s: sorry, don't know (and hence will estimate) B=0 image, " - "but didn't get a Nrrd* to put it in", me); - biffAdd(TEN, err); return 1; - } if (!( 4 == ndwi->dim && 7 <= ndwi->axis[0].size )) { sprintf(err, "%s: dwi should be 4-D array with axis 0 size >= 7", me); --- 271,288 ---- float thresh, float soft, float b) { char me[]="tenEstimateLinear4D", err[AIR_STRLEN_MED]; ! Nrrd *nemat, *nbmat, *ncrop, *nhist; airArray *mop; ! int E, DD, d, II, sx, sy, sz, cmin[4], cmax[4], amap[4]; float *ten, dwi1[_TEN_MAX_DWI_NUM], *terr=NULL, ! _B0, *B0, (*lup)(const void *, size_t); ! double *emat, *bmat; NrrdRange *range; float dwi2[_TEN_MAX_DWI_NUM], te, d1, d2; if (!(nten && ndwi && _nbmat)) { ! /* nerrP and _NB0P can be NULL */ sprintf(err, "%s: got NULL pointer", me); biffAdd(TEN, err); return 1; } if (!( 4 == ndwi->dim && 7 <= ndwi->axis[0].size )) { sprintf(err, "%s: dwi should be 4-D array with axis 0 size >= 7", me); *************** *** 318,326 **** mop = airMopNew(); ! /* HEY, right now, nbmat is not used for anything (not tenSimulate stuff) ! because tenSimulate currently can't handle the unknown B0 case */ ! /* airMopAdd(mop, nbmat=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); */ airMopAdd(mop, nemat=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! if (tenEMatrixCalc(nemat, _nbmat, knownB0)) { sprintf(err, "%s: trouble computing estimation matrix", me); biffAdd(TEN, err); return 1; --- 310,320 ---- mop = airMopNew(); ! airMopAdd(mop, nbmat=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! if (nrrdConvert(nbmat, _nbmat, nrrdTypeDouble)) { ! sprintf(err, "%s: trouble converting to doubles", me); ! biffMove(TEN, err, NRRD); return 1; ! } airMopAdd(mop, nemat=nrrdNew(), (airMopper)nrrdNuke, airMopAlways); ! if (tenEMatrixCalc(nemat, nbmat, knownB0)) { sprintf(err, "%s: trouble computing estimation matrix", me); biffAdd(TEN, err); return 1; *************** *** 347,351 **** biffMove(TEN, err, NRRD); airMopError(mop); return 1; } ! if (_tenFindValley(&thresh, nhist, 0.85)) { sprintf(err, "%s: problem finding DW histogram valley", me); biffAdd(TEN, err); airMopError(mop); return 1; --- 341,345 ---- biffMove(TEN, err, NRRD); airMopError(mop); return 1; } ! if (_tenFindValley(&thresh, nhist, 0.75, AIR_FALSE)) { sprintf(err, "%s: problem finding DW histogram valley", me); biffAdd(TEN, err); airMopError(mop); return 1; *************** *** 358,367 **** } if (nterrP) { - - /* HEY HEY HEY HEY */ - sprintf(err, "%s: sorry, this functionality currently disabled", me); - biffAdd(TEN, err); return 1; - /* HEY HEY HEY HEY */ - if (!(*nterrP)) { *nterrP = nrrdNew(); --- 352,355 ---- *************** *** 386,391 **** airMopAdd(mop, *nB0P, (airMopper)nrrdNuke, airMopOnError); B0 = (float*)((*nB0P)->data); } ! /* bmat = (double*)(nbmat->data); */ emat = (double*)(nemat->data); ten = (float*)(nten->data); --- 374,381 ---- airMopAdd(mop, *nB0P, (airMopper)nrrdNuke, airMopOnError); B0 = (float*)((*nB0P)->data); + } else { + B0 = NULL; } ! bmat = (double*)(nbmat->data); emat = (double*)(nemat->data); ten = (float*)(nten->data); *************** *** 398,421 **** fprintf(stderr, "%s: input dwi1[%d] = %g\n", me, d, dwi1[d]); } ! tenEstimateLinearSingle(ten, B0, dwi1, emat, DD, knownB0, thresh, soft, b); ! if (tenVerbose) fprintf(stderr, "%s: output ten = (%g) %g,%g,%g %g,%g %g\n", me, ten[0], ten[1], ten[2], ten[3], ten[4], ten[5], ten[6]); if (nterrP) { - /* - tenSimulateOne(dwi2, dwi1[0], ten, bmat, DD, b); te = 0; ! for (d=0; d<DD; d++) { ! d1 = AIR_MAX(dwi1[d], 1); ! d2 = AIR_MAX(dwi2[d], 1); ! te += (d1 - d2)*(d1 - d2); ! if (tenVerbose) ! fprintf(stderr, "%s: dwi1,2[%d] = %g,%g --> %g\n", ! me, d, dwi1[d], dwi2[d], te); } *terr = sqrt(te); - */ terr += 1; ! } ten += 7; if (B0) { --- 388,425 ---- fprintf(stderr, "%s: input dwi1[%d] = %g\n", me, d, dwi1[d]); } ! tenEstimateLinearSingle(ten, &_B0, ! dwi1, emat, DD, knownB0, thresh, soft, b); ! if (nB0P) { ! *B0 = _B0; ! } ! if (tenVerbose) { fprintf(stderr, "%s: output ten = (%g) %g,%g,%g %g,%g %g\n", me, ten[0], ten[1], ten[2], ten[3], ten[4], ten[5], ten[6]); + } if (nterrP) { te = 0; ! if (knownB0) { ! tenSimulateOne(dwi2, _B0, ten, bmat, DD, b); ! for (d=1; d<DD; d++) { ! d1 = AIR_MAX(dwi1[d], 1); ! d2 = AIR_MAX(dwi2[d], 1); ! te += (d1 - d2)*(d1 - d2); ! } ! te /= (DD-1); ! } else { ! tenSimulateOne(dwi2, _B0, ten, bmat, DD+1, b); ! for (d=0; d<DD; d++) { ! d1 = AIR_MAX(dwi1[d], 1); ! /* tenSimulateOne always puts the B0 in the beginning of ! the dwi vector, but in this case we didn't have it in ! the input dwi vecctor */ ! d2 = AIR_MAX(dwi2[d+1], 1); ! te += (d1 - d2)*(d1 - d2); ! } ! te /= DD; } *terr = sqrt(te); terr += 1; ! } ten += 7; if (B0) { *************** *** 425,428 **** --- 429,433 ---- /* tenEigenvalueClamp(nten, nten, 0, AIR_NAN); */ + ELL_4V_SET(amap, -1, 1, 2, 3); nrrdAxisInfoCopy(nten, ndwi, amap, NRRD_AXIS_INFO_NONE); *************** *** 434,444 **** ******** tenSimulateOne ** ! ** simulate a diffusion weighted measurement ** */ void ! tenSimulateOne(float *dwi, float B0, float *ten, ! double *bmat, int DD, float b) { ! double v[_TEN_MAX_DWI_NUM]; int i, j; --- 439,456 ---- ******** tenSimulateOne ** ! ** given a tensor, simulate the set of diffusion weighted measurements ! ** represented by the given B matrix ** + ** NOTE: the mindset if this function is very much "knownB0==true": + ** B0 is required as an argument (and its always copied to dwi[0]), + ** and the given bmat is assumed to have DD-1 rows, + ** so dwi[0] through dwi[DD-1] (DD values total) are set in the output. */ void ! tenSimulateOne(float *dwi, ! float B0, float *ten, double *bmat, int DD, float b) { ! double vv; ! /* this is how we multiply the off-diagonal entries by 2 */ ! double matwght[6] = {1, 2, 2, 1, 2, 1}; int i, j; *************** *** 449,459 **** } for (i=0; i<DD-1; i++) { ! v[i] = 0; for (j=0; j<6; j++) { ! v[i] += bmat[j + 6*i]*ten[j+1]; } ! dwi[i+1] = AIR_MAX(B0, 1)*exp(-b*v[i]); if (tenVerbose) { ! fprintf(stderr, "v[%d] = %g --> dwi = %g\n", i, v[i], dwi[i+1]); } } --- 461,471 ---- } for (i=0; i<DD-1; i++) { ! vv = 0; for (j=0; j<6; j++) { ! vv += matwght[j]*bmat[j + 6*i]*ten[j+1]; } ! dwi[i+1] = AIR_MAX(B0, 1)*exp(-b*vv); if (tenVerbose) { ! fprintf(stderr, "v[%d] = %g --> dwi = %g\n", i, vv, dwi[i+1]); } } |
|
From: <kin...@us...> - 2004-03-07 01:04:48
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17843 Modified Files: epireg.c Log Message: changed tweaking heuristic in automatic threshold detection Index: epireg.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/epireg.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** epireg.c 27 Feb 2004 10:23:56 -0000 1.25 --- epireg.c 7 Mar 2004 00:49:06 -0000 1.26 *************** *** 191,195 **** int ! _tenEpiRegFindThresh(float *DWthrP, Nrrd **nin, int ninLen) { char me[]="_tenEpiRegFindThresh", err[AIR_STRLEN_MED]; Nrrd *nhist, *ntmp; --- 191,195 ---- int ! _tenEpiRegFindThresh(float *DWthrP, Nrrd **nin, int ninLen, int save) { char me[]="_tenEpiRegFindThresh", err[AIR_STRLEN_MED]; Nrrd *nhist, *ntmp; *************** *** 232,236 **** } } ! if (_tenFindValley(DWthrP, nhist, 0.85)) { sprintf(err, "%s: problem finding DWI histogram valley", me); biffAdd(TEN, err); airMopError(mop); return 1; --- 232,239 ---- } } ! if (save) { ! nrrdSave("regtmp-dwihist.nrrd", nhist, NULL); ! } ! if (_tenFindValley(DWthrP, nhist, 0.65, save)) { sprintf(err, "%s: problem finding DWI histogram valley", me); biffAdd(TEN, err); airMopError(mop); return 1; *************** *** 244,248 **** int _tenEpiRegThreshold(Nrrd **nthresh, Nrrd **nblur, int ninLen, ! float DWthr, int verb) { char me[]="_tenEpiRegThreshold", err[AIR_STRLEN_MED]; airArray *mop; --- 247,251 ---- int _tenEpiRegThreshold(Nrrd **nthresh, Nrrd **nblur, int ninLen, ! float DWthr, int verb, int progress) { char me[]="_tenEpiRegThreshold", err[AIR_STRLEN_MED]; airArray *mop; *************** *** 252,256 **** if (!( AIR_EXISTS(DWthr) )) { ! if (_tenEpiRegFindThresh(&DWthr, nblur, ninLen)) { sprintf(err, "%s: trouble with automatic threshold determination", me); biffAdd(TEN, err); return 1; --- 255,259 ---- if (!( AIR_EXISTS(DWthr) )) { ! if (_tenEpiRegFindThresh(&DWthr, nblur, ninLen, progress)) { sprintf(err, "%s: trouble with automatic threshold determination", me); biffAdd(TEN, err); return 1; *************** *** 932,936 **** /* ------ threshold */ if (_tenEpiRegThreshold(nbuffB, nbuffA, ninLen, ! DWthr, verbose)) { sprintf(err, "%s: trouble thresholding", me); biffAdd(TEN, err); airMopError(mop); return 1; --- 935,939 ---- /* ------ threshold */ if (_tenEpiRegThreshold(nbuffB, nbuffA, ninLen, ! DWthr, verbose, progress)) { sprintf(err, "%s: trouble thresholding", me); biffAdd(TEN, err); airMopError(mop); return 1; |
|
From: <kin...@us...> - 2004-03-07 01:03:28
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17631 Modified Files: ten.h miscTen.c Log Message: can now optionally tell _tenFindValley to save filtered histogram Index: ten.h =================================================================== RCS file: /cvsroot/teem/teem/src/ten/ten.h,v retrieving revision 1.78 retrieving revision 1.79 diff -C2 -d -r1.78 -r1.79 *** ten.h 27 Feb 2004 12:50:37 -0000 1.78 --- ten.h 7 Mar 2004 00:48:13 -0000 1.79 *************** *** 471,475 **** int aniso, int scaleByAniso); TEEM_API int tenBMatrixCheck(Nrrd *nbmat); ! TEEM_API int _tenFindValley(float *valP, Nrrd *nhist, float tweak); /* fiberMethods.c */ --- 471,476 ---- int aniso, int scaleByAniso); TEEM_API int tenBMatrixCheck(Nrrd *nbmat); ! TEEM_API int _tenFindValley(float *valP, Nrrd *nhist, ! float tweak, int save); /* fiberMethods.c */ Index: miscTen.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/miscTen.c,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** miscTen.c 27 Feb 2004 10:23:56 -0000 1.22 --- miscTen.c 7 Mar 2004 00:48:13 -0000 1.23 *************** *** 215,219 **** */ int ! _tenFindValley(float *valP, Nrrd *nhist, float tweak) { char me[]="_tenFindValley", err[AIR_STRLEN_MED]; double gparm[NRRD_KERNEL_PARMS_NUM], dparm[NRRD_KERNEL_PARMS_NUM]; --- 215,219 ---- */ int ! _tenFindValley(float *valP, Nrrd *nhist, float tweak, int save) { char me[]="_tenFindValley", err[AIR_STRLEN_MED]; double gparm[NRRD_KERNEL_PARMS_NUM], dparm[NRRD_KERNEL_PARMS_NUM]; *************** *** 238,242 **** bins = nhist->axis[0].size; ! gparm[0] = bins/50; /* wacky heuristic for gaussian stdev */ gparm[1] = 3; /* how many stdevs to cut-off at */ dparm[0] = 1.0; /* unit spacing */ --- 238,242 ---- bins = nhist->axis[0].size; ! gparm[0] = bins/128; /* wacky heuristic for gaussian stdev */ gparm[1] = 3; /* how many stdevs to cut-off at */ dparm[0] = 1.0; /* unit spacing */ *************** *** 253,256 **** --- 253,260 ---- biffMove(TEN, err, NRRD), airMopError(mop); return 1; } + if (save) { + nrrdSave("tmp-histA.nrrd", ntmpA, NULL); + nrrdSave("tmp-histB.nrrd", ntmpB, NULL); + } hist = (float*)(ntmpB->data); histD = (float*)(nhistD->data); *************** *** 281,282 **** --- 285,287 ---- return 0; } + |
|
From: <kin...@us...> - 2004-03-07 01:02:55
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17496 Modified Files: tendEstim.c Log Message: fixed typo in usage info Index: tendEstim.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tendEstim.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** tendEstim.c 7 Jan 2004 15:34:31 -0000 1.12 --- tendEstim.c 7 Mar 2004 00:47:36 -0000 1.13 *************** *** 66,70 **** "confidence boundary is perfectly sharp"); hestOptAdd(&hopt, "scale", "scale", airTypeFloat, 1, 1, &scale, "1", ! "Ffter estimating the tensor, scale all of its elements " "(but not the confidence value) by this amount. Can help with " "downstream numerical precision if values are very large " --- 66,70 ---- "confidence boundary is perfectly sharp"); hestOptAdd(&hopt, "scale", "scale", airTypeFloat, 1, 1, &scale, "1", ! "After estimating the tensor, scale all of its elements " "(but not the confidence value) by this amount. Can help with " "downstream numerical precision if values are very large " |
|
From: <kin...@us...> - 2004-03-07 01:02:03
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17353 Modified Files: bimod.c Log Message: vain efforts to make this work on real DWI histograms... Index: bimod.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/bimod.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** bimod.c 7 Jan 2004 15:34:31 -0000 1.6 --- bimod.c 7 Mar 2004 00:46:42 -0000 1.7 *************** *** 312,318 **** _tenEMBimodalPP(biparm); f1 = _tenEMBimodalNewFraction1(biparm); ! if (1 == biparm->stage) { _tenEMBimodalNewMean(&m1, &m2, biparm); ! } _tenEMBimodalNewSigma(&s1, &s2, m1, m2, biparm); --- 312,318 ---- _tenEMBimodalPP(biparm); f1 = _tenEMBimodalNewFraction1(biparm); ! /* if (1 == biparm->stage) { */ _tenEMBimodalNewMean(&m1, &m2, biparm); ! /* } */ _tenEMBimodalNewSigma(&s1, &s2, m1, m2, biparm); *************** *** 420,424 **** tenEMBimodal(tenEMBimodalParm *biparm, Nrrd *_nhisto) { char me[]="tenEMBimodal", err[AIR_STRLEN_MED]; ! int done; if (!(biparm && _nhisto)) { --- 420,424 ---- tenEMBimodal(tenEMBimodalParm *biparm, Nrrd *_nhisto) { char me[]="tenEMBimodal", err[AIR_STRLEN_MED]; ! int done, _iter; if (!(biparm && _nhisto)) { *************** *** 441,447 **** biparm->stage <= (biparm->twoStage ? 2 : 1); biparm->stage++) { ! for (; biparm->iteration <= biparm->maxIteration; ! biparm->iteration++) { if (_tenEMBimodalIterate(biparm) /* sets delta */ || _tenEMBimodalConfThresh(biparm) --- 441,447 ---- biparm->stage <= (biparm->twoStage ? 2 : 1); biparm->stage++) { ! for (_iter=0; biparm->iteration <= biparm->maxIteration; ! biparm->iteration++, _iter++) { if (_tenEMBimodalIterate(biparm) /* sets delta */ || _tenEMBimodalConfThresh(biparm) *************** *** 451,455 **** biffAdd(TEN, err); return 1; } ! if (biparm->delta < biparm->minDelta) { done = AIR_TRUE; break; --- 451,456 ---- biffAdd(TEN, err); return 1; } ! if (biparm->delta < biparm->minDelta ! && (!biparm->twoStage || 1 == biparm->stage || _iter > 10) ) { done = AIR_TRUE; break; |
|
From: <kin...@us...> - 2004-03-05 00:11:03
|
Update of /cvsroot/teem/teem/src/moss In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20107/moss Modified Files: privateMoss.h xform.c Log Message: propogated change in ell from column-major to row-major Index: privateMoss.h =================================================================== RCS file: /cvsroot/teem/teem/src/moss/privateMoss.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** privateMoss.h 7 Jan 2004 15:34:30 -0000 1.3 --- privateMoss.h 4 Mar 2004 23:57:22 -0000 1.4 *************** *** 18,25 **** */ ! #define MOSS_MAT_SET(mat, a, b, c, d, x, y) \ ! (mat)[0]=(a); (mat)[1]=(b); \ ! (mat)[2]=(c); (mat)[3]=(d); \ ! (mat)[4]=(x); (mat)[5]=(y) #define MOSS_MAT_COPY(m2, m1) \ --- 18,24 ---- */ ! #define MOSS_MAT_SET(mat, a, b, x, c, d, y) \ ! (mat)[0]=(a); (mat)[1]=(b); (mat)[2]=(x); \ ! (mat)[3]=(c); (mat)[4]=(d); (mat)[5]=(y) #define MOSS_MAT_COPY(m2, m1) \ *************** *** 28,37 **** #define MOSS_MAT_6TO9(m2, m1) \ ! ELL_3V_SET((m2)+0, (m1)[0], (m1)[1], 0); \ ! ELL_3V_SET((m2)+3, (m1)[2], (m1)[3], 0); \ ! ELL_3V_SET((m2)+6, (m1)[4], (m1)[5], 1) #define MOSS_MAT_9TO6(m2, m1) \ ! MOSS_MAT_SET(m2, (m1)[0], (m1)[1], (m1)[3], (m1)[4], (m1)[6], (m1)[7]) --- 27,36 ---- #define MOSS_MAT_6TO9(m2, m1) \ ! ELL_3V_COPY((m2)+0, (m1)+0); \ ! ELL_3V_COPY((m2)+3, (m1)+3); \ ! ELL_3V_SET((m2)+6, 0, 0, 1) #define MOSS_MAT_9TO6(m2, m1) \ ! MOSS_MAT_SET(m2, (m1)[0], (m1)[1], (m1)[2], (m1)[3], (m1)[4], (m1)[5]) Index: xform.c =================================================================== RCS file: /cvsroot/teem/teem/src/moss/xform.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** xform.c 19 Feb 2004 06:45:12 -0000 1.13 --- xform.c 4 Mar 2004 23:57:22 -0000 1.14 *************** *** 23,29 **** /* ! 0 3 6 ! 1 4 7 ! 2 5 8 a c tx --- 23,29 ---- /* ! 0 1 2 ! 3 4 5 ! 6 7 8 a c tx *************** *** 31,36 **** 0 0 1 ! 0 2 4 ! 1 3 5 */ --- 31,36 ---- 0 0 1 ! 0 1 2 ! 3 4 5 */ *************** *** 40,46 **** fprintf(f, "% 15.7f % 15.7f % 15.7f\n", ! (float)mat[0], (float)mat[2], (float)mat[4]); fprintf(f, "% 15.7f % 15.7f % 15.7f\n", ! (float)mat[1], (float)mat[3], (float)mat[5]); } --- 40,46 ---- fprintf(f, "% 15.7f % 15.7f % 15.7f\n", ! (float)mat[0], (float)mat[1], (float)mat[2]); fprintf(f, "% 15.7f % 15.7f % 15.7f\n", ! (float)mat[3], (float)mat[4], (float)mat[5]); } *************** *** 80,84 **** mossMatIdentitySet (double *mat) { ! MOSS_MAT_SET(mat, 1, 0, 0, 1, 0, 0); return mat; } --- 80,84 ---- mossMatIdentitySet (double *mat) { ! MOSS_MAT_SET(mat, 1, 0, 0, 0, 1, 0); return mat; } *************** *** 87,91 **** mossMatTranslateSet (double *mat, double tx, double ty) { ! MOSS_MAT_SET(mat, 1, 0, 0, 1, tx, ty); return mat; } --- 87,91 ---- mossMatTranslateSet (double *mat, double tx, double ty) { ! MOSS_MAT_SET(mat, 1, 0, tx, 0, 1, ty); return mat; } *************** *** 95,99 **** angle *= AIR_PI/180.0; ! MOSS_MAT_SET(mat, cos(angle), sin(angle), -sin(angle), cos(angle), 0, 0); return mat; } --- 95,99 ---- angle *= AIR_PI/180.0; ! MOSS_MAT_SET(mat, cos(angle), -sin(angle), 0, sin(angle), cos(angle), 0); return mat; } *************** *** 103,107 **** double rot[6], flip[6]; ! MOSS_MAT_SET(flip, -1, 0, 0, 1, 0, 0); mossMatIdentitySet(mat); mossMatLeftMultiply(mat, mossMatRotateSet(rot, -angle)); --- 103,107 ---- double rot[6], flip[6]; ! MOSS_MAT_SET(flip, -1, 0, 0, 0, 1, 0); mossMatIdentitySet(mat); mossMatLeftMultiply(mat, mossMatRotateSet(rot, -angle)); *************** *** 115,119 **** double rot[6], shear[6]; ! MOSS_MAT_SET(shear, 1, 0, amount, 1, 0, 0); mossMatIdentitySet(mat); mossMatLeftMultiply(mat, mossMatRotateSet(rot, -angleFixed)); --- 115,119 ---- double rot[6], shear[6]; ! MOSS_MAT_SET(shear, 1, amount, 0, 0, 1, 0); mossMatIdentitySet(mat); mossMatLeftMultiply(mat, mossMatRotateSet(rot, -angleFixed)); *************** *** 126,130 **** mossMatScaleSet (double *mat, double sx, double sy) { ! MOSS_MAT_SET(mat, sx, 0, 0, sy, 0, 0); return mat; } --- 126,130 ---- mossMatScaleSet (double *mat, double sx, double sy) { ! MOSS_MAT_SET(mat, sx, 0, 0, 0, sy, 0); return mat; } *************** *** 133,138 **** mossMatApply (double *ox, double *oy, double *mat, double ix, double iy) { ! *ox = mat[0]*ix + mat[2]*iy + mat[4]; ! *oy = mat[1]*ix + mat[3]*iy + mat[5]; } --- 133,138 ---- mossMatApply (double *ox, double *oy, double *mat, double ix, double iy) { ! *ox = mat[0]*ix + mat[1]*iy + mat[2]; ! *oy = mat[3]*ix + mat[4]*iy + mat[5]; } |
|
From: <kin...@us...> - 2004-03-05 00:11:03
|
Update of /cvsroot/teem/teem/src/bin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20107/bin Modified Files: ilk.c Log Message: propogated change in ell from column-major to row-major Index: ilk.c =================================================================== RCS file: /cvsroot/teem/teem/src/bin/ilk.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ilk.c 7 Jan 2004 15:34:28 -0000 1.9 --- ilk.c 4 Mar 2004 23:57:22 -0000 1.10 *************** *** 71,75 **** "\b\bo \"flip:ang\": flip along axis an angle <ang> degrees from " "the X axis\n " ! "\b\bo \"a,b,c,d,tx,ty\": specify the transform explicitly ", &matListLen, NULL, mossHestTransform); hestOptAdd(&hopt, "k", "kernel", airTypeOther, 1, 1, &ksp, --- 71,76 ---- "\b\bo \"flip:ang\": flip along axis an angle <ang> degrees from " "the X axis\n " ! "\b\bo \"a,b,tx,c,d,ty\": specify the transform explicitly " ! "in row-major order (opposite of PostScript) ", &matListLen, NULL, mossHestTransform); hestOptAdd(&hopt, "k", "kernel", airTypeOther, 1, 1, &ksp, |
|
From: <kin...@us...> - 2004-03-04 14:18:18
|
Update of /cvsroot/teem/teem/src/bin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12973 Modified Files: miter.c Log Message: changed some stuff Index: miter.c =================================================================== RCS file: /cvsroot/teem/teem/src/bin/miter.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** miter.c 26 Feb 2004 18:41:51 -0000 1.25 --- miter.c 4 Mar 2004 14:04:52 -0000 1.26 *************** *** 34,39 **** hestParm *hparm=NULL; miteUser *muu; ! char *me, *errS, *outS, *shadeStr; ! int renorm, baseDim; int E, Ecode; float ads[3]; --- 34,39 ---- hestParm *hparm=NULL; miteUser *muu; ! char *me, *errS, *outS, *shadeStr, *normalStr; ! int renorm, baseDim, verbPix[2]; int E, Ecode; float ads[3]; *************** *** 86,90 **** 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 " "\b\bo \"1\": normal points to lower values (higher == " --- 86,93 ---- hestOptAdd(&hopt, "ss", "shading spec", airTypeString, 1, 1, &shadeStr, "phong:gage(scalar:n)", "how to do shading"); ! hestOptAdd(&hopt, "ns", "normal spec", airTypeString, 1, 1, &normalStr, ! "", "\"normal\" to use for those miteVal's that need one"); ! hestOptAdd(&hopt, "side", "normal side", airTypeInt, 1, 1, ! &(muu->normalSide), "1", "how to interpret gradients as normals:\n " "\b\bo \"1\": normal points to lower values (higher == " *************** *** 105,108 **** --- 108,113 ---- "0.01", "\"reference\" step size (world space) for doing " "opacity correction in compositing"); + hestOptAdd(&hopt, "vp", "verbose pixel", airTypeInt, 2, 2, verbPix, + "-1 -1", "pixel for which to turn on verbose messages"); hestOptAdd(&hopt, "n1", "near1", airTypeDouble, 1, 1, &(muu->opacNear1), "0.99", "opacity close enough to 1.0 to terminate ray"); *************** *** 141,144 **** --- 146,151 ---- gageParmSet(muu->gctx0, gageParmGradMagCurvMin, gmc); gageParmSet(muu->gctx0, gageParmRenormalize, renorm); + muu->verbUi = verbPix[0]; + muu->verbVi = verbPix[1]; muu->nout = nrrdNew(); *************** *** 155,158 **** --- 162,166 ---- } strncpy(muu->shadeStr, shadeStr, AIR_STRLEN_MED-1); + strncpy(muu->normalStr, normalStr, AIR_STRLEN_MED-1); muu->shadeStr[AIR_STRLEN_MED-1] = 0; muu->hctx->volSize[0] = nin->axis[baseDim+0].size; |
|
From: <kin...@us...> - 2004-03-04 14:17:30
|
Update of /cvsroot/teem/teem/src/mite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12816 Modified Files: kindnot.c mite.h ray.c renderMite.c thread.c txf.c user.c Log Message: refined semantics of normal specification, and added storage of ray depth when opacity reaches muu->opacMatters Index: kindnot.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/kindnot.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** kindnot.c 29 Feb 2004 13:42:41 -0000 1.2 --- kindnot.c 4 Mar 2004 14:04:07 -0000 1.3 *************** *** 32,39 **** "Tw", "Ti", "NdotV", "NdotL", - "GTdotV", "VrefN", "VdefT", "VdefTdotV" --- 32,41 ---- "Tw", "Ti", + "V", + "N", "NdotV", "NdotL", "VrefN", + "GTdotV", "VdefT", "VdefTdotV" *************** *** 51,58 **** miteValTw, miteValTi, miteValNdotV, miteValNdotL, - miteValGTdotV, miteValVrefN, miteValVdefT, miteValVdefTdotV --- 53,62 ---- miteValTw, miteValTi, + miteValView, + miteValNormal, miteValNdotV, miteValNdotL, miteValVrefN, + miteValGTdotV, miteValVdefT, miteValVdefTdotV *************** *** 69,76 **** "tw", "ti", "ndotv", "vdotn", "ndotl", "ldotn", - "gtdotv", "vrefn", "vdeft", "vdeftdotv" --- 73,82 ---- "tw", "ti", + "view", "v", + "normal", "n", "ndotv", "vdotn", "ndotl", "ldotn", "vrefn", + "gtdotv", "vdeft", "vdeftdotv" *************** *** 88,95 **** miteValTw, miteValTi, miteValNdotV, miteValNdotV, miteValNdotL, miteValNdotL, - miteValGTdotV, miteValVrefN, miteValVdefT, miteValVdefTdotV --- 94,103 ---- miteValTw, miteValTi, + miteValView, miteValView, + miteValNormal, miteValNormal, miteValNdotV, miteValNdotV, miteValNdotL, miteValNdotL, miteValVrefN, + miteValGTdotV, miteValVdefT, miteValVdefTdotV *************** *** 125,132 **** {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} --- 133,142 ---- {miteValTw, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {miteValTi, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, + {miteValView, 3, 0, {-1, -1, -1, -1, -1}, -1, -1}, + {miteValNormal, 3, 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}, {miteValVrefN, 3, 0, {-1, -1, -1, -1, -1}, -1, -1}, + {miteValGTdotV, 1, 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} Index: mite.h =================================================================== RCS file: /cvsroot/teem/teem/src/mite/mite.h,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** mite.h 29 Feb 2004 13:42:41 -0000 1.28 --- mite.h 4 Mar 2004 14:04:08 -0000 1.29 *************** *** 120,124 **** 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 --- 120,140 ---- any of the ntxf[i] */ int ntxfNum; /* allocated and valid length of ntxf[] */ ! /* the issue of regular shading, txf-based shading, and surface normals: ! phong and lit-tensor shading ("regular shading") methods need to specify ! one or more vectors that are used for shading calculations. These will ! be parsed from muu->shadeStr into mrr->shadeSpec, which in turn will ! determine the pointer values of mtt->shade{Vec,Scl}{0,1}. ! ENTIRELY SEPERATE FROM THIS, a "surface normal" can be specified in ! muu->normalStr, which (if non-empty), will be parsed into mrr->normalSpec, ! which in turn will determine the pointer values of mtt->normal. This ! normal is used for the miteVal quantities involving "N". ! Both shading and normal specifications can be given, since they are ! used in seperate computations. If the user wants to do miteVal-based ! stuff with the same quantity specified in (say) a phong shading ! specification, its up to them to verify that the normalStr and the ! shadeStr refer to the same vector. ! */ ! char shadeStr[AIR_STRLEN_MED], /* how to do shading */ ! normalStr[AIR_STRLEN_MED]; /* what is the "surface normal" */ /* for each possible element of the txf range, what value should it start at prior to rendering. Mainly needed to store non-unity values *************** *** 218,222 **** volumes in the gageContext's array of gagePerVolumes. Probably a hack */ ! miteShadeSpec *shpec; /* information based on muu->shadeStr */ double time0; /* rendering start time */ gageQuery queryMite; /* record of the miteVal quantities which --- 234,239 ---- volumes in the gageContext's array of gagePerVolumes. Probably a hack */ ! miteShadeSpec *shadeSpec; /* information based on muu->shadeStr */ ! gageItemSpec *normalSpec; /* information based on muu->normalStr */ double time0; /* rendering start time */ gageQuery queryMite; /* record of the miteVal quantities which *************** *** 236,251 **** ******** miteStageOp* enum ** ! ** the kinds of things we can do per txf to modify the range variables. ! ** previously mite only supported seperable transfer functions (i.e., ! ** multiplication only) */ enum { ! miteStageOpUnknown, ! miteStageOpMin, ! miteStageOpMax, ! miteStageOpAdd, ! miteStageOpMultiply, miteStageOpLast }; typedef struct { --- 253,276 ---- ******** miteStageOp* enum ** ! ** the kinds of things we can do per txf to modify the range ! ** variables. previously mite only supported seperable transfer ! ** functions (i.e., multiplication only). It is tempting to use all ! ** the operations available as nrrdBinaryOps, but that would lead to ! ** goofy ones like Mod and GreaterThan, which either require or create ! ** integral values which aren't of much use in transfer functions. ! ** More generality in how opacities and colors are assigned will ! ** likely be supported by some simple programmability, supported by ! ** the likes of the funk library, which will be entirely seperate from ! ** the miteStageOp mechanism. */ enum { ! miteStageOpUnknown, /* 0 */ ! miteStageOpMin, /* 1 */ ! miteStageOpMax, /* 2 */ ! miteStageOpAdd, /* 3 */ ! miteStageOpMultiply, /* 4 */ miteStageOpLast }; + #define MITE_STAGE_OP_MAX 4 typedef struct { *************** *** 295,315 **** 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]) */ ! miteValVdefT, /* 12: "VdefT", view direction, deflected by tensor, then normalized (gage_t[3]) */ ! 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 /* --- 320,345 ---- miteValTw, /* 6: "Tw", ray position (gage_t[1]) */ miteValTi, /* 7: "Ti", ray index (ray sample #) (gage_t[1]) */ ! miteValView, /* 8: "V", the view vector (gage_t[3]) */ ! miteValNormal, /* 9: "N", the nominal surface normal, as measured ! by a scalar, vector, or tensor kind, and then ! determined by the semantics of ! muu->normalSide */ ! miteValNdotV, /* 10: "NdotV", surface normal dotted w/ view vector ! (towards eye) (gage_t[1]) */ ! miteValNdotL, /* 11: "NdotL", surface normal dotted w/ light vector ! (towards the light source) (gage_t[1]) */ ! miteValVrefN, /* 12: "VrefN", view vector reflected across normal ! (gage_t[3]) */ ! miteValGTdotV, /* 13: "GTdotV", normal curvature in view direction, ! the contraction of the geometry tensor along ! he view vector (gage_t[1]) */ ! miteValVdefT, /* 14: "defT", view direction, deflected by tensor, then normalized (gage_t[3]) */ ! miteValVdefTdotV, /* 15: "VdefTdotV", VdefT dotted back with V, not the same as the tensor contraction along V, (gage_t[1]) */ miteValLast }; ! #define MITE_VAL_ITEM_MAX 15 /* *************** *** 328,331 **** --- 358,365 ---- mite instead of by gage */ **directAnsMiteVal, /* pointers into ansMiteVal */ + *_normal, /* pointer into ans{Scl,Vec,Ten} array above, + (NOT ansMiteVal); this will determine the + value of miteValNormal according to the + semantics of muu->normalSide */ *shadeVec0, *shadeVec1, *shadeScl0, *shadeScl1; /* pointers into the ans* arrays above, *************** *** 344,348 **** each ray to enable sampling on planes) */ V[3], /* per-ray view direction */ ! RR, GG, BB, TT; /* per-ray composited values */ } miteThread; --- 378,384 ---- each ray to enable sampling on planes) */ V[3], /* per-ray view direction */ ! RR, GG, BB, TT, /* per-ray composited values */ ! ZZ; /* for storing ray-depth when opacity passed ! muu->opacMatters */ } miteThread; *************** *** 360,363 **** --- 396,400 ---- /* txf.c */ + TEEM_API airEnum *miteStageOp; TEEM_API char miteRangeChar[MITE_RANGE_NUM]; TEEM_API int miteVariableParse(gageItemSpec *isp, const char *label); Index: ray.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/ray.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** ray.c 29 Feb 2004 13:42:41 -0000 1.19 --- ray.c 4 Mar 2004 14:04:08 -0000 1.20 *************** *** 39,42 **** --- 39,43 ---- mtt->RR = mtt->GG = mtt->BB = 0.0; mtt->TT = 1.0; + mtt->ZZ = -1.0; ELL_3V_SCALE(mtt->V, -1, rayDirWorld); *************** *** 62,78 **** 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) { LdotN = ELL_3V_DOT(muu->lit->dir[0], N); --- 63,78 ---- ks = mtt->range[miteRangeKs]; ELL_3V_SCALE(ad, ka, muu->lit->amb); ! switch (mrr->shadeSpec->method) { case miteShadeMethodNone: /* nothing to do */ break; case miteShadeMethodPhong: if (kd || ks) { ! ELL_3V_NORM(N, mtt->shadeVec0, tmp); ! if (1 == muu->normalSide) { ! ELL_3V_SCALE(N, -1, N); } + /* else -1==side --> N = -1*-1*N = N + or 0==side --> N = N, so there's nothing to do */ if (kd) { LdotN = ELL_3V_DOT(muu->lit->dir[0], N); *************** *** 104,108 **** default: fprintf(stderr, "!%s: PANIC, shadeMethod %d unimplemented\n", ! me, mrr->shpec->method); exit(1); break; --- 104,108 ---- default: fprintf(stderr, "!%s: PANIC, shadeMethod %d unimplemented\n", ! me, mrr->shadeSpec->method); exit(1); break; *************** *** 132,136 **** char me[]="miteSample", err[AIR_STRLEN_MED]; mite_t R, G, B, A; ! double kn[3], knd[3], len; if (!inside) { --- 132,137 ---- char me[]="miteSample", err[AIR_STRLEN_MED]; mite_t R, G, B, A; ! gage_t *NN; ! double NdotV, kn[3], knd[3], ref[3], len; if (!inside) { *************** *** 152,155 **** --- 153,157 ---- biffAdd(MITE, err); return AIR_NAN; } + if (mrr->queryMiteNonzero) { /* There is some optimal trade-off between slowing things down *************** *** 165,182 **** mtt->directAnsMiteVal[miteValTw][0] = rayT; mtt->directAnsMiteVal[miteValTi][0] = num; ! if (mtt->shadeVec0 && ! (GAGE_QUERY_ITEM_TEST(mrr->queryMite, miteValNdotV) ! || GAGE_QUERY_ITEM_TEST(mrr->queryMite, miteValNdotL))) { mtt->directAnsMiteVal[miteValNdotV][0] = ! -muu->normalSide*ELL_3V_DOT(mtt->shadeVec0, mtt->V); mtt->directAnsMiteVal[miteValNdotL][0] = ! -muu->normalSide*ELL_3V_DOT(mtt->shadeVec0, muu->lit->dir[0]); if (!muu->normalSide) { ! mtt->directAnsMiteVal[miteValNdotV][0] = AIR_ABS(mtt->directAnsMiteVal[miteValNdotV][0]); mtt->directAnsMiteVal[miteValNdotL][0] = AIR_ABS(mtt->directAnsMiteVal[miteValNdotL][0]); } } --- 167,194 ---- mtt->directAnsMiteVal[miteValTw][0] = rayT; mtt->directAnsMiteVal[miteValTi][0] = num; + ELL_3V_COPY(mtt->directAnsMiteVal[miteValView], mtt->V); + NN = mtt->directAnsMiteVal[miteValNormal]; + if (1 == muu->normalSide) { + ELL_3V_SCALE(NN, -1, mtt->_normal); + } else { + ELL_3V_COPY(NN, mtt->_normal); + } ! if ((GAGE_QUERY_ITEM_TEST(mrr->queryMite, miteValNdotV) ! || GAGE_QUERY_ITEM_TEST(mrr->queryMite, miteValNdotL) ! || GAGE_QUERY_ITEM_TEST(mrr->queryMite, miteValVrefN))) { mtt->directAnsMiteVal[miteValNdotV][0] = ! ELL_3V_DOT(NN, mtt->V); mtt->directAnsMiteVal[miteValNdotL][0] = ! ELL_3V_DOT(NN, muu->lit->dir[0]); if (!muu->normalSide) { ! mtt->directAnsMiteVal[miteValNdotV][0] = AIR_ABS(mtt->directAnsMiteVal[miteValNdotV][0]); mtt->directAnsMiteVal[miteValNdotL][0] = AIR_ABS(mtt->directAnsMiteVal[miteValNdotL][0]); } + NdotV = mtt->directAnsMiteVal[miteValNdotV][0]; + ELL_3V_SCALE_ADD2(ref, 2*NdotV, NN, -1, mtt->V); + ELL_3V_NORM(mtt->directAnsMiteVal[miteValVrefN], ref, len); } *************** *** 185,189 **** ELL_3V_NORM(kn, kn, len); ELL_3MV_MUL(knd, mtt->geomTens, kn); ! mtt->ansMiteVal[miteValGTdotV] = ELL_3V_DOT(knd, kn); } } --- 197,201 ---- ELL_3V_NORM(kn, kn, len); ELL_3MV_MUL(knd, mtt->geomTens, kn); ! mtt->directAnsMiteVal[miteValGTdotV][0] = ELL_3V_DOT(knd, kn); } } *************** *** 212,215 **** --- 224,232 ---- } + /* set Z if it hasn't been set already */ + if (1-mtt->TT >= muu->opacMatters && mtt->ZZ < 0) { + mtt->ZZ = rayT; + } + return mtt->rayStep; } *************** *** 218,222 **** miteRayEnd(miteThread *mtt, miteRender *mrr, miteUser *muu) { int idx; ! mite_t *imgData, A; idx = mtt->ui + (muu->nout->axis[1].size)*mtt->vi; --- 235,240 ---- miteRayEnd(miteThread *mtt, miteRender *mrr, miteUser *muu) { int idx; ! mite_t *imgData; ! double A; idx = mtt->ui + (muu->nout->axis[1].size)*mtt->vi; *************** *** 224,230 **** 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; --- 242,249 ---- A = 1 - mtt->TT; if (A) { ! ELL_5V_SET(imgData + 5*idx, mtt->RR/A, mtt->GG/A, mtt->BB/A, ! A, mtt->ZZ); } else { ! ELL_5V_SET(imgData + 5*idx, 0, 0, 0, 0, -1); } return 0; Index: renderMite.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/renderMite.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** renderMite.c 29 Feb 2004 13:42:41 -0000 1.12 --- renderMite.c 4 Mar 2004 14:04:08 -0000 1.13 *************** *** 37,42 **** mrr->vecPvlIdx = -1; mrr->tenPvlIdx = -1; ! mrr->shpec = miteShadeSpecNew(); ! airMopAdd(mrr->rmop, mrr->shpec, (airMopper)miteShadeSpecNix, airMopAlways); mrr->time0 = AIR_NAN; --- 37,45 ---- mrr->vecPvlIdx = -1; mrr->tenPvlIdx = -1; ! mrr->normalSpec = gageItemSpecNew(); ! airMopAdd(mrr->rmop, mrr->normalSpec, ! (airMopper)gageItemSpecNix, airMopAlways); ! mrr->shadeSpec = miteShadeSpecNew(); ! airMopAdd(mrr->rmop, mrr->shadeSpec, (airMopper)miteShadeSpecNix, airMopAlways); mrr->time0 = AIR_NAN; *************** *** 92,98 **** } } ! miteShadeSpecParse((*mrrP)->shpec, muu->shadeStr); miteShadeSpecQueryAdd(queryScl, queryVec, queryTen, (*mrrP)->queryMite, ! (*mrrP)->shpec); (*mrrP)->queryMiteNonzero = GAGE_QUERY_NONZERO((*mrrP)->queryMite); --- 95,104 ---- } } ! miteVariableParse((*mrrP)->normalSpec, muu->normalStr); ! miteQueryAdd(queryScl, queryVec, queryTen, (*mrrP)->queryMite, ! (*mrrP)->normalSpec); ! miteShadeSpecParse((*mrrP)->shadeSpec, muu->shadeStr); miteShadeSpecQueryAdd(queryScl, queryVec, queryTen, (*mrrP)->queryMite, ! (*mrrP)->shadeSpec); (*mrrP)->queryMiteNonzero = GAGE_QUERY_NONZERO((*mrrP)->queryMite); Index: thread.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/thread.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** thread.c 29 Feb 2004 15:49:10 -0000 1.12 --- thread.c 4 Mar 2004 14:04:08 -0000 1.13 *************** *** 35,38 **** --- 35,39 ---- mtt->gctx = NULL; mtt->ansScl = mtt->ansVec = mtt->ansTen = NULL; + mtt->_normal = NULL; mtt->shadeVec0 = NULL; mtt->shadeVec1 = NULL; *************** *** 119,140 **** (*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; --- 120,142 ---- (*mttP)->samples = 0; (*mttP)->verbose = 0; + (*mttP)->_normal = _miteAnswerPointer(*mttP, mrr->normalSpec); /* set up shading answers */ ! switch(mrr->shadeSpec->method) { case miteShadeMethodNone: /* nothing to do */ break; case miteShadeMethodPhong: ! (*mttP)->shadeVec0 = _miteAnswerPointer(*mttP, mrr->shadeSpec->vec0); break; case miteShadeMethodLitTen: ! (*mttP)->shadeVec0 = _miteAnswerPointer(*mttP, mrr->shadeSpec->vec0); ! (*mttP)->shadeVec1 = _miteAnswerPointer(*mttP, mrr->shadeSpec->vec1); ! (*mttP)->shadeScl0 = _miteAnswerPointer(*mttP, mrr->shadeSpec->scl0); ! (*mttP)->shadeScl1 = _miteAnswerPointer(*mttP, mrr->shadeSpec->scl1); break; default: sprintf(err, "%s: shade method %d not implemented!", ! me, mrr->shadeSpec->method); biffAdd(MITE, err); return 1; break; Index: txf.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/txf.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** txf.c 3 Mar 2004 13:14:08 -0000 1.19 --- txf.c 4 Mar 2004 14:04:08 -0000 1.20 *************** *** 29,32 **** --- 29,79 ---- miteRangeChar[MITE_RANGE_NUM] = "ARGBEadsp"; + char + _miteStageOpStr[][AIR_STRLEN_SMALL] = { + "(unknown miteStageOp)", + "min", + "max", + "add", + "multiply" + }; + + int + _miteStageOpVal[] = { + miteStageOpUnknown, + miteStageOpMin, + miteStageOpMax, + miteStageOpAdd, + miteStageOpMultiply + }; + + char + _miteStageOpStrEqv[][AIR_STRLEN_SMALL] = { + "min", + "max", + "add", "+", + "multiply", "*", "x" + }; + + int + _miteStageOpValEqv[] = { + miteStageOpUnknown, + miteStageOpMin, + miteStageOpMax, + miteStageOpAdd, miteStageOpAdd, + miteStageOpMultiply, miteStageOpMultiply, miteStageOpMultiply + }; + + airEnum + _miteStageOp = { + "miteStageOp", + MITE_STAGE_OP_MAX+1, + _miteStageOpStr, _miteStageOpVal, + NULL, + _miteStageOpStrEqv, _miteStageOpValEqv, + AIR_FALSE + }; + airEnum * + miteStageOp = &_miteStageOp; + /* ******** miteVariableParse() *************** *** 36,39 **** --- 83,87 ---- ** kind and item). The valid formats are: ** + ** "" : NULL kind, -1 item ** <item> : miteValGageKind (DEPRECATED) ** mite(<item>) : miteValGageKind *************** *** 57,60 **** --- 105,116 ---- biffAdd(MITE, err); return 1; } + if (0 == strlen(label)) { + /* nothing was specified; we try to indicate that by mimicing + the return of gageItemSpecNew() */ + isp->item = -1; + isp->kind = NULL; + return 0; + } + /* else given string was non-empty */ mop = airMopNew(); buff = airStrdup(label); *************** *** 144,151 **** 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)); --- 200,209 ---- miteVariablePrint(char *buff, const gageItemSpec *isp) { char me[]="miteVariablePrint"; ! ! if (!(isp->kind)) { ! strcpy(buff, ""); ! } else if (gageKindScl == isp->kind ! || gageKindVec == isp->kind ! || tenGageKind == isp->kind) { sprintf(buff, "gage(%s:%s)", isp->kind->name, airEnumStr(isp->kind->enm, isp->item)); *************** *** 281,285 **** char me[]="miteQueryAdd"; ! if (gageKindScl == isp->kind) { GAGE_QUERY_ITEM_ON(queryScl, isp->item); } else if (gageKindVec == isp->kind) { --- 339,345 ---- char me[]="miteQueryAdd"; ! if (NULL == isp->kind) { ! /* nothing to add */ ! } else if (gageKindScl == isp->kind) { GAGE_QUERY_ITEM_ON(queryScl, isp->item); } else if (gageKindVec == isp->kind) { *************** *** 298,313 **** (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); --- 358,372 ---- (for instance, using the gradient of fractional anisotropy) */ switch(isp->item) { + case miteValVrefN: case miteValNdotV: case miteValNdotL: ! /* the "N" can be a normalized vector from any of the ! available kinds (except miteValGageKind!), and its ! associated query will be handled elsewhere, so there's ! nothing to add here */ break; case miteValGTdotV: GAGE_QUERY_ITEM_ON(queryScl, gageSclGeomTens); break; case miteValVdefT: GAGE_QUERY_ITEM_ON(queryTen, tenGageTensor); *************** *** 317,321 **** } } else { ! fprintf(stderr, "%s: PANIC: unrecognized non-null gageKind\n", me); exit(1); } --- 376,380 ---- } } else { ! fprintf(stderr, "%s: PANIC: unrecognized non-NULL gageKind\n", me); exit(1); } *************** *** 350,356 **** --- 409,418 ---- biffAdd(MITE, err); return 1; } + /* note that key/values need to be copied for the sake of + identifying a non-default miteStageOp */ switch(muu->ntxf[ni]->type) { case nrrdTypeUChar: if (!E) E |= nrrdUnquantize(mrr->ntxf[ni], muu->ntxf[ni], nrrdTypeUChar); + if (!E) E |= nrrdKeyValueCopy(mrr->ntxf[ni], muu->ntxf[ni]); break; case mite_nt: *************** *** 359,362 **** --- 421,425 ---- default: /* will be either float or double (whatever mite_nt isn't) */ if (!E) E |= nrrdConvert(mrr->ntxf[ni], muu->ntxf[ni], mite_nt); + if (!E) E |= nrrdKeyValueCopy(mrr->ntxf[ni], muu->ntxf[ni]); break; } *************** *** 434,437 **** --- 497,506 ---- gage_t *ret; + if (!isp->kind) { + /* we got a NULL kind (as happens with output of + gageItemSpecNew()); only NULL return is sensible */ + return NULL; + } + if (gageKindScl == isp->kind) { ret = mtt->ansScl; *************** *** 457,461 **** int _miteStageSet(miteThread *mtt, miteRender *mrr) { ! char me[]="_miteStageSet", err[AIR_STRLEN_MED]; int ni, di, stageIdx, rii, stageNum, log2; Nrrd *ntxf; --- 526,530 ---- int _miteStageSet(miteThread *mtt, miteRender *mrr) { ! char me[]="_miteStageSet", err[AIR_STRLEN_MED], *value; int ni, di, stageIdx, rii, stageNum, log2; Nrrd *ntxf; *************** *** 492,496 **** } else { stage->data = ntxf->data; ! stage->op = miteStageOpMultiply; if (1 == isp.kind->table[isp.item].answerLength) { stage->qn = NULL; --- 561,573 ---- } else { stage->data = ntxf->data; ! value = nrrdKeyValueGet(ntxf, "miteStageOp"); ! if (value) { ! stage->op = airEnumVal(miteStageOp, value); ! if (miteStageOpUnknown == stage->op) { ! stage->op = miteStageOpMultiply; ! } ! } else { ! stage->op = miteStageOpMultiply; ! } if (1 == isp.kind->table[isp.item].answerLength) { stage->qn = NULL; Index: user.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/user.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** user.c 29 Feb 2004 13:42:42 -0000 1.16 --- user.c 4 Mar 2004 14:04:08 -0000 1.17 *************** *** 38,41 **** --- 38,42 ---- muu->ntxfNum = 0; muu->shadeStr[0] = 0; + muu->normalStr[0] = 0; for (i=0; i<MITE_RANGE_NUM; i++) { muu->rangeInit[i] = 1.0; *************** *** 96,99 **** --- 97,102 ---- GAGE_QUERY_RESET(queryTen); GAGE_QUERY_RESET(queryMite); /* not actually used here */ + + /* add on all queries associated with transfer functions */ for (T=0; T<muu->ntxfNum; T++) { if (miteNtxfCheck(muu->ntxf[T])) { *************** *** 117,120 **** --- 120,141 ---- "************************\n\n\n", me); } + + /* add on "normal"-based queries */ + if (airStrlen(muu->normalStr)) { + miteVariableParse(&isp, muu->normalStr); + if (miteValGageKind == isp.kind) { + sprintf(err, "%s: normalStr \"%s\" refers to a miteVal " + "(normal must be data-intrinsic)", me, muu->normalStr); + biffAdd(MITE, err); airMopError(mop); return 1; + } + if (3 != isp.kind->table[isp.item].answerLength) { + sprintf(err, "%s: %s not a vector: can't be used as normal", + me, muu->normalStr); + biffAdd(MITE, err); return 1; + } + miteQueryAdd(queryScl, queryVec, queryTen, queryMite, &isp); + } + + /* add on shading-based queries */ shpec = miteShadeSpecNew(); airMopAdd(mop, shpec, (airMopper)miteShadeSpecNix, airMopAlways); *************** *** 125,128 **** --- 146,162 ---- } miteShadeSpecQueryAdd(queryScl, queryVec, queryTen, queryMite, shpec); + + /* see if anyone asked for an unspecified normal */ + if ((GAGE_QUERY_ITEM_TEST(queryMite, miteValNdotV) + || GAGE_QUERY_ITEM_TEST(queryMite, miteValNdotL) + || GAGE_QUERY_ITEM_TEST(queryMite, miteValVrefN)) + && !airStrlen(muu->normalStr)) { + sprintf(err, "%s: txf or shading requested a miteVal's use of the " + "\"normal\", but one has not been specified in muu->normalStr", + me); + biffAdd(MITE, err); airMopError(mop); return 1; + } + + /* see if we have volumes for requested queries */ if (GAGE_QUERY_NONZERO(queryScl) && !(muu->nsin)) { sprintf(err, "%s: txf or shading require %s volume, but don't have one", *************** *** 140,147 **** 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)) { --- 174,179 ---- biffAdd(MITE, err); airMopError(mop); return 1; } ! ! /* check appropriateness of given volumes */ if (muu->nsin) { if (gageVolumeCheck(muu->gctx0, muu->nsin, gageKindScl)) { *************** *** 165,168 **** --- 197,205 ---- } } + + if (!muu->nout) { + sprintf(err, "%s: rendered image nrrd is NULL", me); + biffAdd(MITE, err); airMopError(mop); return 1; + } airMopOkay(mop); return 0; |
|
From: <kin...@us...> - 2004-03-03 13:26:45
|
Update of /cvsroot/teem/teem/src/mite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11155/mite Modified Files: txf.c Log Message: added even-bit quantization methods based on Emil's octahdron unfolding, and renamed the odd-bit methods from checker to octa Index: txf.c =================================================================== RCS file: /cvsroot/teem/teem/src/mite/txf.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** txf.c 29 Feb 2004 13:42:42 -0000 1.18 --- txf.c 3 Mar 2004 13:14:08 -0000 1.19 *************** *** 498,510 **** log2 = airLog2(ntxf->axis[di].size); switch(log2) { ! case 8: stage->qn = limnVtoQN_GT[ limnQN8checker]; break; ! case 9: stage->qn = limnVtoQN_GT[ limnQN9checker]; break; ! case 10: stage->qn = limnVtoQN_GT[limnQN10checker]; break; ! case 11: stage->qn = limnVtoQN_GT[limnQN11checker]; break; ! case 12: stage->qn = limnVtoQN_GT[limnQN12checker]; break; ! case 13: stage->qn = limnVtoQN_GT[limnQN13checker]; break; ! case 14: stage->qn = limnVtoQN_GT[limnQN14checker]; break; ! case 15: stage->qn = limnVtoQN_GT[limnQN15checker]; break; ! case 16: stage->qn = limnVtoQN_GT[limnQN16checker]; break; default: sprintf(err, "%s: txf axis %d size %d not usable for vector " --- 498,510 ---- log2 = airLog2(ntxf->axis[di].size); switch(log2) { ! case 8: stage->qn = limnVtoQN_GT[ limnQN8octa]; break; ! case 9: stage->qn = limnVtoQN_GT[ limnQN9octa]; break; ! case 10: stage->qn = limnVtoQN_GT[limnQN10octa]; break; ! case 11: stage->qn = limnVtoQN_GT[limnQN11octa]; break; ! case 12: stage->qn = limnVtoQN_GT[limnQN12octa]; break; ! case 13: stage->qn = limnVtoQN_GT[limnQN13octa]; break; ! case 14: stage->qn = limnVtoQN_GT[limnQN14octa]; break; ! case 15: stage->qn = limnVtoQN_GT[limnQN15octa]; break; ! case 16: stage->qn = limnVtoQN_GT[limnQN16octa]; break; default: sprintf(err, "%s: txf axis %d size %d not usable for vector " |
|
From: <kin...@us...> - 2004-03-03 13:26:45
|
Update of /cvsroot/teem/teem/src/limn In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11155/limn Modified Files: env.c limn.h qn.c renderLimn.c Log Message: added even-bit quantization methods based on Emil's octahdron unfolding, and renamed the odd-bit methods from checker to octa Index: env.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/env.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** env.c 27 Feb 2004 18:16:50 -0000 1.7 --- env.c 3 Mar 2004 13:14:08 -0000 1.8 *************** *** 37,67 **** switch(qnMethod) { case limnQN16checker: sx = sy = 256; break; case limnQN14checker: sx = sy = 128; break; case limnQN12checker: sx = sy = 64; break; case limnQN10checker: sx = sy = 32; break; case limnQN8checker: sx = sy = 16; break; ! case limnQN15checker: sx = 128; sy = 256; break; ! case limnQN13checker: sx = 64; sy = 128; break; ! case limnQN11checker: sx = 32; sy = 64; break; ! case limnQN9checker: sx = 16; sy = 32; --- 37,72 ---- switch(qnMethod) { case limnQN16checker: + case limnQN16octa: sx = sy = 256; break; case limnQN14checker: + case limnQN14octa: sx = sy = 128; break; case limnQN12checker: + case limnQN12octa: sx = sy = 64; break; case limnQN10checker: + case limnQN10octa: sx = sy = 32; break; case limnQN8checker: + case limnQN8octa: sx = sy = 16; break; ! case limnQN15octa: sx = 128; sy = 256; break; ! case limnQN13octa: sx = 64; sy = 128; break; ! case limnQN11octa: sx = 32; sy = 64; break; ! case limnQN9octa: sx = 16; sy = 32; Index: limn.h =================================================================== RCS file: /cvsroot/teem/teem/src/limn/limn.h,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** limn.h 27 Feb 2004 16:42:53 -0000 1.50 --- limn.h 3 Mar 2004 13:14:08 -0000 1.51 *************** *** 274,288 **** limnQN16border1, /* 2 */ limnQN16checker, /* 3 */ ! limnQN15checker, /* 4 */ ! limnQN14checker, /* 5 */ ! limnQN13checker, /* 6 */ ! limnQN12checker, /* 7 */ ! limnQN11checker, /* 8 */ ! limnQN10checker, /* 9 */ ! limnQN9checker, /* 10 */ ! limnQN8checker, /* 11 */ limnQNLast }; ! #define LIMN_QN_MAX 11 enum { --- 274,293 ---- limnQN16border1, /* 2 */ limnQN16checker, /* 3 */ ! limnQN16octa, /* 4 */ ! limnQN15octa, /* 5 */ ! limnQN14checker, /* 6 */ ! limnQN14octa, /* 7 */ ! limnQN13octa, /* 8 */ ! limnQN12checker, /* 9 */ ! limnQN12octa, /* 10 */ ! limnQN11octa, /* 11 */ ! limnQN10checker, /* 12 */ ! limnQN10octa, /* 13 */ ! limnQN9octa, /* 14 */ ! limnQN8checker, /* 15 */ ! limnQN8octa, /* 16 */ limnQNLast }; ! #define LIMN_QN_MAX 16 enum { Index: qn.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/qn.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** qn.c 27 Feb 2004 18:16:50 -0000 1.19 --- qn.c 3 Mar 2004 13:14:08 -0000 1.20 *************** *** 163,167 **** the error due to quantization is unbiased */ ! #define _EVEN_QtoV(HNB, vec, qn) \ ui = (qn) & ((1<<HNB)-1); \ vi = ((qn) >> HNB) & ((1<<HNB)-1); \ --- 163,167 ---- the error due to quantization is unbiased */ ! #define _EVEN_CHECK_QtoV(HNB, vec, qn) \ ui = (qn) & ((1<<HNB)-1); \ vi = ((qn) >> HNB) & ((1<<HNB)-1); \ *************** *** 178,182 **** (vec)[2] = z*n ! #define _EVEN_VtoQ(HNB, vec) \ x = (vec)[0]; \ y = (vec)[1]; \ --- 178,182 ---- (vec)[2] = z*n ! #define _EVEN_CHECK_VtoQ(HNB, vec) \ x = (vec)[0]; \ y = (vec)[1]; \ *************** *** 204,208 **** return (vi << HNB) | ui ! #define _16_QtoV(vec, qn) \ ui = (qn) & 0xFF; \ vi = ((qn) >> 8) & 0xFF; \ --- 204,259 ---- return (vi << HNB) | ui ! #define _EVEN_OCTA_QtoV(HNB, vec, qn) \ ! xi = (qn) & ((1<<HNB)-1); \ ! yi = ((qn) >> HNB) & ((1<<HNB)-1); \ ! x = AIR_AFFINE(-0.5, xi, ((1<<HNB)-1)+0.5, -1, 1); \ ! y = AIR_AFFINE(-0.5, yi, ((1<<HNB)-1)+0.5, -1, 1); \ ! z = 1 - AIR_ABS(x) - AIR_ABS(y); \ ! if (z < 0) { \ ! if (x > 0) { \ ! x += z; \ ! } else { \ ! x -= z; \ ! } \ ! if (y > 0) { \ ! y += z; \ ! } else { \ ! y -= z; \ ! } \ ! } \ ! n = 1.0/sqrt(x*x + y*y + z*z); \ ! (vec)[0] = x*n; \ ! (vec)[1] = y*n; \ ! (vec)[2] = z*n ! ! #define _EVEN_OCTA_VtoQ(HNB, vec) \ ! x = (vec)[0]; \ ! y = (vec)[1]; \ ! z = (vec)[2]; \ ! L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); \ ! if (!L) { \ ! return 0; \ ! } \ ! x /= L; \ ! y /= L; \ ! z /= L; \ ! if (z < 0) { \ ! if (x > 0) { \ ! x -= z; \ ! } else { \ ! x += z; \ ! } \ ! if (y > 0) { \ ! y -= z; \ ! } else { \ ! y += z; \ ! } \ ! } \ ! AIR_INDEX(-1, x, 1, (1<<HNB), xi); \ ! AIR_INDEX(-1, y, 1, (1<<HNB), yi); \ ! return (yi << HNB) | xi ! ! /* _16_CHECK_QtoV and _16_CHECK_VtoQ are not actually used */ ! #define _16_CHECK_QtoV(vec, qn) \ ui = (qn) & 0xFF; \ vi = ((qn) >> 8) & 0xFF; \ *************** *** 219,223 **** (vec)[2] = z*n ! #define _16_VtoQ(vec) \ x = (vec)[0]; \ y = (vec)[1]; \ --- 270,274 ---- (vec)[2] = z*n ! #define _16_CHECK_VtoQ(vec) \ x = (vec)[0]; \ y = (vec)[1]; \ *************** *** 247,251 **** double u, v, x, y, z, n; ! _EVEN_QtoV(8, vec, qn); } --- 298,302 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(8, vec, qn); } *************** *** 255,259 **** double u, v, x, y, z, n; ! _EVEN_QtoV(8, vec, qn); } --- 306,310 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(8, vec, qn); } *************** *** 263,267 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(8, vec); } --- 314,318 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(8, vec); } *************** *** 271,275 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(8, vec); } --- 322,360 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(8, vec); ! } ! ! /* ---------------------------------------------------------------- */ ! ! void ! _limnQN16octa_QNtoV_f(float *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(8, vec, qn); ! } ! ! void ! _limnQN16octa_QNtoV_d(double *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(8, vec, qn); ! } ! ! int ! _limnQN16octa_VtoQN_f(float *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(8, vec); ! } ! ! int ! _limnQN16octa_VtoQN_d(double *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(8, vec); } *************** *** 278,282 **** /* 15 bit --> HNB == 7 */ ! #define _ODD_QtoV(HNB, vec, qn) \ ui = qn & ((1<<HNB)-1); \ vi = (qn >> HNB) & ((1<<HNB)-1); \ --- 363,367 ---- /* 15 bit --> HNB == 7 */ ! #define _ODD_OCTA_QtoV(HNB, vec, qn) \ ui = qn & ((1<<HNB)-1); \ vi = (qn >> HNB) & ((1<<HNB)-1); \ *************** *** 293,297 **** vec[2] = z*n ! #define _ODD_VtoQ(HNB, vec) \ x = vec[0]; \ y = vec[1]; \ --- 378,382 ---- vec[2] = z*n ! #define _ODD_OCTA_VtoQ(HNB, vec) \ x = vec[0]; \ y = vec[1]; \ *************** *** 312,344 **** void ! _limnQN15checker_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_QtoV(7, vec, qn); } void ! _limnQN15checker_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_QtoV(7, vec, qn); } int ! _limnQN15checker_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(7, vec); } int ! _limnQN15checker_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(7, vec); } --- 397,429 ---- void ! _limnQN15octa_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_OCTA_QtoV(7, vec, qn); } void ! _limnQN15octa_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_OCTA_QtoV(7, vec, qn); } int ! _limnQN15octa_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(7, vec); } int ! _limnQN15octa_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(7, vec); } *************** *** 350,354 **** double u, v, x, y, z, n; ! _EVEN_QtoV(7, vec, qn); } --- 435,439 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(7, vec, qn); } *************** *** 358,362 **** double u, v, x, y, z, n; ! _EVEN_QtoV(7, vec, qn); } --- 443,447 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(7, vec, qn); } *************** *** 366,370 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(7, vec); } --- 451,455 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(7, vec); } *************** *** 374,378 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(7, vec); } --- 459,497 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(7, vec); ! } ! ! /* ---------------------------------------------------------------- */ ! ! void ! _limnQN14octa_QNtoV_f(float *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(7, vec, qn); ! } ! ! void ! _limnQN14octa_QNtoV_d(double *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(7, vec, qn); ! } ! ! int ! _limnQN14octa_VtoQN_f(float *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(7, vec); ! } ! ! int ! _limnQN14octa_VtoQN_d(double *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(7, vec); } *************** *** 380,412 **** void ! _limnQN13checker_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_QtoV(6, vec, qn); } void ! _limnQN13checker_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_QtoV(6, vec, qn); } int ! _limnQN13checker_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(6, vec); } int ! _limnQN13checker_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(6, vec); } --- 499,531 ---- void ! _limnQN13octa_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_OCTA_QtoV(6, vec, qn); } void ! _limnQN13octa_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_OCTA_QtoV(6, vec, qn); } int ! _limnQN13octa_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(6, vec); } int ! _limnQN13octa_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(6, vec); } *************** *** 418,422 **** double u, v, x, y, z, n; ! _EVEN_QtoV(6, vec, qn); } --- 537,541 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(6, vec, qn); } *************** *** 426,430 **** double u, v, x, y, z, n; ! _EVEN_QtoV(6, vec, qn); } --- 545,549 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(6, vec, qn); } *************** *** 434,438 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(6, vec); } --- 553,557 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(6, vec); } *************** *** 442,446 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(6, vec); } --- 561,599 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(6, vec); ! } ! ! /* ---------------------------------------------------------------- */ ! ! void ! _limnQN12octa_QNtoV_f(float *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(6, vec, qn); ! } ! ! void ! _limnQN12octa_QNtoV_d(double *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(6, vec, qn); ! } ! ! int ! _limnQN12octa_VtoQN_f(float *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(6, vec); ! } ! ! int ! _limnQN12octa_VtoQN_d(double *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(6, vec); } *************** *** 448,480 **** void ! _limnQN11checker_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_QtoV(5, vec, qn); } void ! _limnQN11checker_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_QtoV(5, vec, qn); } int ! _limnQN11checker_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(5, vec); } int ! _limnQN11checker_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(5, vec); } --- 601,633 ---- void ! _limnQN11octa_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_OCTA_QtoV(5, vec, qn); } void ! _limnQN11octa_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_OCTA_QtoV(5, vec, qn); } int ! _limnQN11octa_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(5, vec); } int ! _limnQN11octa_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(5, vec); } *************** *** 486,490 **** double u, v, x, y, z, n; ! _EVEN_QtoV(5, vec, qn); } --- 639,643 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(5, vec, qn); } *************** *** 494,498 **** double u, v, x, y, z, n; ! _EVEN_QtoV(5, vec, qn); } --- 647,651 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(5, vec, qn); } *************** *** 502,506 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(5, vec); } --- 655,659 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(5, vec); } *************** *** 510,547 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(5, vec); } /* ----------------------------------------------------------- */ void ! _limnQN9checker_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_QtoV(4, vec, qn); } void ! _limnQN9checker_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_QtoV(4, vec, qn); } int ! _limnQN9checker_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(4, vec); } int ! _limnQN9checker_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_VtoQ(4, vec); } --- 663,734 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(5, vec); ! } ! ! /* ---------------------------------------------------------------- */ ! ! void ! _limnQN10octa_QNtoV_f(float *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(5, vec, qn); ! } ! ! void ! _limnQN10octa_QNtoV_d(double *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(5, vec, qn); ! } ! ! int ! _limnQN10octa_VtoQN_f(float *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(5, vec); ! } ! ! int ! _limnQN10octa_VtoQN_d(double *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(5, vec); } /* ----------------------------------------------------------- */ void ! _limnQN9octa_QNtoV_f(float *vec, int qn) { int ui, vi, zi; float u, v, x, y, z, n; ! _ODD_OCTA_QtoV(4, vec, qn); } void ! _limnQN9octa_QNtoV_d(double *vec, int qn) { int ui, vi, zi; double u, v, x, y, z, n; ! _ODD_OCTA_QtoV(4, vec, qn); } int ! _limnQN9octa_VtoQN_f(float *vec) { float L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(4, vec); } int ! _limnQN9octa_VtoQN_d(double *vec) { double L, u, v, x, y, z; int ui, vi, zi; ! _ODD_OCTA_VtoQ(4, vec); } *************** *** 553,557 **** double u, v, x, y, z, n; ! _EVEN_QtoV(4, vec, qn); } --- 740,744 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(4, vec, qn); } *************** *** 561,565 **** double u, v, x, y, z, n; ! _EVEN_QtoV(4, vec, qn); } --- 748,752 ---- double u, v, x, y, z, n; ! _EVEN_CHECK_QtoV(4, vec, qn); } *************** *** 569,573 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(4, vec); } --- 756,760 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(4, vec); } *************** *** 577,581 **** int xi, yi, ui, vi; ! _EVEN_VtoQ(4, vec); } --- 764,802 ---- int xi, yi, ui, vi; ! _EVEN_CHECK_VtoQ(4, vec); ! } ! ! /* ---------------------------------------------------------------- */ ! ! void ! _limnQN8octa_QNtoV_f(float *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(4, vec, qn); ! } ! ! void ! _limnQN8octa_QNtoV_d(double *vec, int qn) { ! int xi, yi; ! double x, y, z, n; ! ! _EVEN_OCTA_QtoV(4, vec, qn); ! } ! ! int ! _limnQN8octa_VtoQN_f(float *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(4, vec); ! } ! ! int ! _limnQN8octa_VtoQN_d(double *vec) { ! double L, x, y, z; ! int xi, yi; ! ! _EVEN_OCTA_VtoQ(4, vec); } *************** *** 588,599 **** _limnQN16border1_QNtoV_f, _limnQN16checker_QNtoV_f, ! _limnQN15checker_QNtoV_f, _limnQN14checker_QNtoV_f, ! _limnQN13checker_QNtoV_f, _limnQN12checker_QNtoV_f, ! _limnQN11checker_QNtoV_f, _limnQN10checker_QNtoV_f, ! _limnQN9checker_QNtoV_f, ! _limnQN8checker_QNtoV_f }; --- 809,825 ---- _limnQN16border1_QNtoV_f, _limnQN16checker_QNtoV_f, ! _limnQN16octa_QNtoV_f, ! _limnQN15octa_QNtoV_f, _limnQN14checker_QNtoV_f, ! _limnQN14octa_QNtoV_f, ! _limnQN13octa_QNtoV_f, _limnQN12checker_QNtoV_f, ! _limnQN12octa_QNtoV_f, ! _limnQN11octa_QNtoV_f, _limnQN10checker_QNtoV_f, ! _limnQN10octa_QNtoV_f, ! _limnQN9octa_QNtoV_f, ! _limnQN8checker_QNtoV_f, ! _limnQN8octa_QNtoV_f }; *************** *** 604,615 **** NULL, _limnQN16checker_QNtoV_d, ! _limnQN15checker_QNtoV_d, _limnQN14checker_QNtoV_d, ! _limnQN13checker_QNtoV_d, _limnQN12checker_QNtoV_d, ! _limnQN11checker_QNtoV_d, _limnQN10checker_QNtoV_d, ! _limnQN9checker_QNtoV_d, ! _limnQN8checker_QNtoV_d }; --- 830,846 ---- NULL, _limnQN16checker_QNtoV_d, ! _limnQN16octa_QNtoV_d, ! _limnQN15octa_QNtoV_d, _limnQN14checker_QNtoV_d, ! _limnQN14octa_QNtoV_d, ! _limnQN13octa_QNtoV_d, _limnQN12checker_QNtoV_d, ! _limnQN12octa_QNtoV_d, ! _limnQN11octa_QNtoV_d, _limnQN10checker_QNtoV_d, ! _limnQN10octa_QNtoV_d, ! _limnQN9octa_QNtoV_d, ! _limnQN8checker_QNtoV_d, ! _limnQN8octa_QNtoV_d }; *************** *** 620,631 **** _limnQN16border1_VtoQN_f, _limnQN16checker_VtoQN_f, ! _limnQN15checker_VtoQN_f, _limnQN14checker_VtoQN_f, ! _limnQN13checker_VtoQN_f, _limnQN12checker_VtoQN_f, ! _limnQN11checker_VtoQN_f, _limnQN10checker_VtoQN_f, ! _limnQN9checker_VtoQN_f, ! _limnQN8checker_VtoQN_f }; --- 851,867 ---- _limnQN16border1_VtoQN_f, _limnQN16checker_VtoQN_f, ! _limnQN16octa_VtoQN_f, ! _limnQN15octa_VtoQN_f, _limnQN14checker_VtoQN_f, ! _limnQN14octa_VtoQN_f, ! _limnQN13octa_VtoQN_f, _limnQN12checker_VtoQN_f, ! _limnQN12octa_VtoQN_f, ! _limnQN11octa_VtoQN_f, _limnQN10checker_VtoQN_f, ! _limnQN10octa_VtoQN_f, ! _limnQN9octa_VtoQN_f, ! _limnQN8checker_VtoQN_f, ! _limnQN8octa_VtoQN_f }; *************** *** 636,647 **** NULL, _limnQN16checker_VtoQN_d, ! _limnQN15checker_VtoQN_d, _limnQN14checker_VtoQN_d, ! _limnQN13checker_VtoQN_d, _limnQN12checker_VtoQN_d, ! _limnQN11checker_VtoQN_d, _limnQN10checker_VtoQN_d, ! _limnQN9checker_VtoQN_d, ! _limnQN8checker_VtoQN_d }; --- 872,888 ---- NULL, _limnQN16checker_VtoQN_d, ! _limnQN16octa_VtoQN_d, ! _limnQN15octa_VtoQN_d, _limnQN14checker_VtoQN_d, ! _limnQN14octa_VtoQN_d, ! _limnQN13octa_VtoQN_d, _limnQN12checker_VtoQN_d, ! _limnQN12octa_VtoQN_d, ! _limnQN11octa_VtoQN_d, _limnQN10checker_VtoQN_d, ! _limnQN10octa_VtoQN_d, ! _limnQN9octa_VtoQN_d, ! _limnQN8checker_VtoQN_d, ! _limnQN8octa_VtoQN_d }; *************** *** 652,662 **** --- 893,908 ---- (1 << 16), (1 << 16), + (1 << 16), (1 << 15), (1 << 14), + (1 << 14), (1 << 13), (1 << 12), + (1 << 12), (1 << 11), (1 << 10), + (1 << 10), (1 << 9), + (1 << 8), (1 << 8) }; Index: renderLimn.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/renderLimn.c,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** renderLimn.c 19 Feb 2004 06:45:12 -0000 1.22 --- renderLimn.c 3 Mar 2004 13:14:08 -0000 1.23 *************** *** 118,122 **** B = look->kads[0]*look->rgba[2]; if (nmap) { ! qn = limnVtoQN_f[limnQN16checker](face->worldNormal); map = nmap->data; R += look->kads[1]*look->rgba[0]*map[0 + 3*qn]; --- 118,122 ---- B = look->kads[0]*look->rgba[2]; if (nmap) { ! qn = limnVtoQN_f[limnQN16octa](face->worldNormal); map = nmap->data; R += look->kads[1]*look->rgba[0]*map[0 + 3*qn]; |
|
From: <kin...@us...> - 2004-03-03 13:26:45
|
Update of /cvsroot/teem/teem/src/bin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11155/bin Modified Files: emap.c Log Message: added even-bit quantization methods based on Emil's octahdron unfolding, and renamed the odd-bit methods from checker to octa Index: emap.c =================================================================== RCS file: /cvsroot/teem/teem/src/bin/emap.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** emap.c 1 Mar 2004 10:17:43 -0000 1.10 --- emap.c 3 Mar 2004 13:14:08 -0000 1.11 *************** *** 87,99 **** switch(bits) { ! case 16: method = limnQN16checker; break; ! case 15: method = limnQN15checker; break; ! case 14: method = limnQN14checker; break; ! case 13: method = limnQN13checker; break; ! case 12: method = limnQN12checker; break; ! case 11: method = limnQN11checker; break; ! case 10: method = limnQN10checker; break; ! case 9: method = limnQN9checker; break; ! case 8: method = limnQN8checker; break; default: fprintf(stderr, "%s: requested #bits (%d) not in valid range [8,16]\n", --- 87,99 ---- switch(bits) { ! case 16: method = limnQN16octa; break; ! case 15: method = limnQN15octa; break; ! case 14: method = limnQN14octa; break; ! case 13: method = limnQN13octa; break; ! case 12: method = limnQN12octa; break; ! case 11: method = limnQN11octa; break; ! case 10: method = limnQN10octa; break; ! case 9: method = limnQN9octa; break; ! case 8: method = limnQN8octa; break; default: fprintf(stderr, "%s: requested #bits (%d) not in valid range [8,16]\n", |
|
From: <kin...@us...> - 2004-03-03 13:26:45
|
Update of /cvsroot/teem/teem/src/limn/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11155/limn/test Modified Files: off2eps.c Log Message: added even-bit quantization methods based on Emil's octahdron unfolding, and renamed the odd-bit methods from checker to octa Index: off2eps.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/test/off2eps.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** off2eps.c 13 Feb 2004 22:57:30 -0000 1.6 --- off2eps.c 3 Mar 2004 13:14:08 -0000 1.7 *************** *** 59,63 **** "-1 1", "range in V direction of image plane"); hestOptAdd(&hopt, "e", "envmap", airTypeOther, 1, 1, &nmap, "", ! "16checker-based environment map", NULL, NULL, nrrdHestNrrd); hestOptAdd(&hopt, "ws", "winscale", airTypeFloat, 1, 1, &winscale, --- 59,63 ---- "-1 1", "range in V direction of image plane"); hestOptAdd(&hopt, "e", "envmap", airTypeOther, 1, 1, &nmap, "", ! "16octa-based environment map", NULL, NULL, nrrdHestNrrd); hestOptAdd(&hopt, "ws", "winscale", airTypeFloat, 1, 1, &winscale, |
|
From: <kin...@us...> - 2004-03-01 22:10:23
|
Update of /cvsroot/teem/teem/src/ell In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19188/ell Modified Files: eigen.c Log Message: bug fixes relating to switch from column-major to row-major Index: eigen.c =================================================================== RCS file: /cvsroot/teem/teem/src/ell/eigen.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** eigen.c 1 Mar 2004 10:19:44 -0000 1.18 --- eigen.c 1 Mar 2004 21:58:55 -0000 1.19 *************** *** 212,215 **** --- 212,220 ---- ** (evec+0)[], (evec+3)[], and (evec+6)[] ** + ** NOTE: Even in the post-teem-1.7 switch from column-major to + ** row-major- its still the case that the eigenvectors are at + ** evec+0, evec+3, evec+6: this means that they USED to be the + ** "columns" of the matrix, and NOW they're the rows. + ** ** The eigenvalues (and associated eigenvectors) are sorted in ** descending order. |
|
From: <kin...@us...> - 2004-03-01 22:10:21
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19188/ten Modified Files: glyph.c tensor.c Log Message: bug fixes relating to switch from column-major to row-major Index: glyph.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/glyph.c,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** glyph.c 27 Feb 2004 06:08:35 -0000 1.35 --- glyph.c 1 Mar 2004 21:59:03 -0000 1.36 *************** *** 165,169 **** airArray *mop; double pI[3], pW[3]; ! float cl, cp, *tdata, evec[9], eval[3], *cvec, aniso[TEN_ANISO_MAX+1], sRot[16], mA[16], mB[16], R, G, B, qA, qB, glyphAniso, sliceGray; --- 165,169 ---- airArray *mop; double pI[3], pW[3]; ! float cl, cp, *tdata, evec[9], rotEvec[9], eval[3], *cvec, aniso[TEN_ANISO_MAX+1], sRot[16], mA[16], mB[16], R, G, B, qA, qB, glyphAniso, sliceGray; *************** *** 265,268 **** --- 265,269 ---- } tenEigensolve(eval, evec, tdata); + ELL_3M_TRANSPOSE(rotEvec, evec); tenAnisoCalc(aniso, eval); if (parm->doSlice *************** *** 355,359 **** ELL_4M_SCALE_SET(mB, eval[0], eval[1], eval[2]); ell_4m_post_mul_f(mA, mB); ! ELL_43M_INSET(mB, evec); /* rotate by evecs */ ell_4m_post_mul_f(mA, mB); ELL_4M_TRANSLATE_SET(mB, pW[0], pW[1], pW[2]); /* translate */ --- 356,360 ---- ELL_4M_SCALE_SET(mB, eval[0], eval[1], eval[2]); ell_4m_post_mul_f(mA, mB); ! ELL_43M_INSET(mB, rotEvec); /* rotate by evecs */ ell_4m_post_mul_f(mA, mB); ELL_4M_TRANSLATE_SET(mB, pW[0], pW[1], pW[2]); /* translate */ Index: tensor.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tensor.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** tensor.c 23 Feb 2004 02:40:24 -0000 1.27 --- tensor.c 1 Mar 2004 21:59:03 -0000 1.28 *************** *** 186,189 **** --- 186,194 ---- ** return is same as ell_3m_eigensolve_d, which is same as ell_cubic ** + ** NOTE: Even in the post-teem-1.7 switch from column-major to + ** row-major- its still the case that the eigenvectors are at + ** evec+0, evec+3, evec+6: this means that they USED to be the + ** "columns" of the matrix, and NOW they're the rows. + ** ** This does NOT use biff */ *************** *** 290,295 **** ELL_3M_DIAG_SET(diag, eval[0], eval[1], eval[2]); ELL_3M_TRANSPOSE(evecT, evec); ! ELL_3M_MUL(tmpMat1, diag, evecT); ! ELL_3M_MUL(tmpMat2, evec, tmpMat1); ten[0] = conf; TEN_MAT2LIST(ten, tmpMat2); --- 295,300 ---- ELL_3M_DIAG_SET(diag, eval[0], eval[1], eval[2]); ELL_3M_TRANSPOSE(evecT, evec); ! ELL_3M_MUL(tmpMat1, diag, evec); ! ELL_3M_MUL(tmpMat2, evecT, tmpMat1); ten[0] = conf; TEN_MAT2LIST(ten, tmpMat2); |
|
From: <kin...@us...> - 2004-03-01 22:10:21
|
Update of /cvsroot/teem/teem/src/limn/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19188/limn/test Modified Files: soid.c Log Message: bug fixes relating to switch from column-major to row-major Index: soid.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/test/soid.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** soid.c 13 Feb 2004 22:57:30 -0000 1.10 --- soid.c 1 Mar 2004 21:59:03 -0000 1.11 *************** *** 23,53 **** char *info = ("Save a single ellipsoid or superquadric into an OFF file."); - void - washQtoM3(float m[9], float q[4]) { - float p[4], w, x, y, z, len; - - ELL_4V_COPY(p, q); - len = ELL_4V_LEN(p); - ELL_4V_SCALE(p, 1.0/len, p); - w = p[0]; - x = p[1]; - y = p[2]; - z = p[3]; - /* mathematica work implies that we should be - setting ROW vectors here */ - ELL_3V_SET(m+0, - 1 - 2*(y*y + z*z), - 2*(x*y - w*z), - 2*(x*z + w*y)); - ELL_3V_SET(m+3, - 2*(x*y + w*z), - 1 - 2*(x*x + z*z), - 2*(y*z - w*x)); - ELL_3V_SET(m+6, - 2*(x*z - w*y), - 2*(y*z + w*x), - 1 - 2*(x*x + y*y)); - } - int main(int argc, char *argv[]) { --- 23,26 ---- *************** *** 109,119 **** look->spow = 0; ! q[0] = 1.0; ! q[1] = p[0]; ! q[2] = p[1]; ! q[3] = p[2]; ! len = ELL_4V_LEN(q); ! ELL_4V_SCALE(q, 1.0/len, q); ! washQtoM3(mR, q); if (AIR_EXISTS(AB[0]) && AIR_EXISTS(AB[1])) { --- 82,88 ---- look->spow = 0; ! ELL_4V_SET(q, 1, p[0], p[1], p[2]); ! ELL_4V_NORM(q, q, len); ! ell_q_to_3m_f(mR, q); if (AIR_EXISTS(AB[0]) && AIR_EXISTS(AB[1])) { |