499 |
|
{ |
500 |
|
SDdistScaffold *sp = (SDdistScaffold *)cptr; |
501 |
|
int wid = csiz*(double)iwmax + .5; |
502 |
+ |
double revcmin[2]; |
503 |
|
bitmask_t bmin[2], bmax[2]; |
504 |
|
|
505 |
< |
cmin += sp->nic * !sp->rev; /* skip to output coords */ |
505 |
> |
if (sp->rev) { /* need to reverse sense? */ |
506 |
> |
revcmin[0] = 1. - cmin[0] - csiz; |
507 |
> |
revcmin[1] = 1. - cmin[1] - csiz; |
508 |
> |
cmin = revcmin; |
509 |
> |
} else { |
510 |
> |
cmin += sp->nic; /* else skip to output coords */ |
511 |
> |
} |
512 |
|
if (wid < sp->wmin) /* new minimum width? */ |
513 |
|
sp->wmin = wid; |
514 |
|
if (wid > sp->wmax) /* new maximum? */ |
603 |
|
/* record input range */ |
604 |
|
scale = myScaffold.wmin / (double)iwmax; |
605 |
|
for (i = myScaffold.nic; i--; ) { |
606 |
< |
cd->clim[i][0] = floor(pos[i]/scale) * scale; |
606 |
> |
cd->clim[i][0] = floor(pos[i+2*rev]/scale) * scale; |
607 |
|
cd->clim[i][1] = cd->clim[i][0] + scale; |
608 |
|
} |
609 |
|
if (cd->isodist) { /* avoid issue in SDqueryTreProjSA() */ |
674 |
|
return &SDemptyCD; |
675 |
|
inCoord[0] = .5 - .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]); |
676 |
|
} else if (sdt->st->ndim == 4) { |
677 |
< |
SDdisk2square(inCoord, -inVec[0], -inVec[1]); |
677 |
> |
if (mode != sdt->sidef) /* use reciprocity? */ |
678 |
> |
SDdisk2square(inCoord, inVec[0], inVec[1]); |
679 |
> |
else |
680 |
> |
SDdisk2square(inCoord, -inVec[0], -inVec[1]); |
681 |
|
} else |
682 |
|
return NULL; /* should be internal error */ |
683 |
|
/* quantize to avoid f.p. errors */ |
728 |
|
} else { |
729 |
|
const SDTreCDst *cd = (const SDTreCDst *)SDgetTreCDist(v1, sdc); |
730 |
|
if (cd == NULL) |
731 |
< |
return SDEmemory; |
732 |
< |
myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) * |
733 |
< |
(cd->clim[1][1] - cd->clim[1][0]); |
734 |
< |
myPSA[1] = cd->max_psa; |
731 |
> |
myPSA[0] = myPSA[1] = 0; |
732 |
> |
else { |
733 |
> |
myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) * |
734 |
> |
(cd->clim[1][1] - cd->clim[1][0]); |
735 |
> |
myPSA[1] = cd->max_psa; |
736 |
> |
} |
737 |
|
} |
738 |
|
switch (qflags) { /* record based on flag settings */ |
739 |
|
case SDqueryVal: |
748 |
|
psa[1] = myPSA[1]; |
749 |
|
/* fall through */ |
750 |
|
case SDqueryMin: |
751 |
< |
if (myPSA[0] < psa[0]) |
751 |
> |
if ((myPSA[0] > 0) & (myPSA[0] < psa[0])) |
752 |
|
psa[0] = myPSA[0]; |
753 |
|
break; |
754 |
|
} |
959 |
|
* Remember that front and back are reversed from WINDOW 6 orientations |
960 |
|
*/ |
961 |
|
if (!strcasecmp(sdata, "Transmission Front")) { |
950 |
– |
if (sd->tf != NULL) |
951 |
– |
SDfreeSpectralDF(sd->tf); |
952 |
– |
if ((sd->tf = SDnewSpectralDF(1)) == NULL) |
953 |
– |
return SDEmemory; |
954 |
– |
df = sd->tf; |
955 |
– |
} else if (!strcasecmp(sdata, "Transmission Back")) { |
962 |
|
if (sd->tb != NULL) |
963 |
|
SDfreeSpectralDF(sd->tb); |
964 |
|
if ((sd->tb = SDnewSpectralDF(1)) == NULL) |
965 |
|
return SDEmemory; |
966 |
|
df = sd->tb; |
967 |
+ |
} else if (!strcasecmp(sdata, "Transmission Back")) { |
968 |
+ |
if (sd->tf != NULL) |
969 |
+ |
SDfreeSpectralDF(sd->tf); |
970 |
+ |
if ((sd->tf = SDnewSpectralDF(1)) == NULL) |
971 |
+ |
return SDEmemory; |
972 |
+ |
df = sd->tf; |
973 |
|
} else if (!strcasecmp(sdata, "Reflection Front")) { |
974 |
< |
if (sd->rb != NULL) /* note back-front reversal */ |
974 |
> |
if (sd->rb != NULL) |
975 |
|
SDfreeSpectralDF(sd->rb); |
976 |
|
if ((sd->rb = SDnewSpectralDF(1)) == NULL) |
977 |
|
return SDEmemory; |
978 |
|
df = sd->rb; |
979 |
|
} else if (!strcasecmp(sdata, "Reflection Back")) { |
980 |
< |
if (sd->rf != NULL) /* note front-back reversal */ |
980 |
> |
if (sd->rf != NULL) |
981 |
|
SDfreeSpectralDF(sd->rf); |
982 |
|
if ((sd->rf = SDnewSpectralDF(1)) == NULL) |
983 |
|
return SDEmemory; |
1165 |
|
/* separate diffuse components */ |
1166 |
|
extract_diffuse(&sd->rLambFront, sd->rf); |
1167 |
|
extract_diffuse(&sd->rLambBack, sd->rb); |
1168 |
< |
extract_diffuse(&sd->tLamb, (sd->tf != NULL) ? sd->tf : sd->tb); |
1168 |
> |
if (sd->tf != NULL) |
1169 |
> |
extract_diffuse(&sd->tLamb, sd->tf); |
1170 |
> |
if (sd->tb != NULL) |
1171 |
> |
extract_diffuse(&sd->tLamb, sd->tb); |
1172 |
|
/* return success */ |
1173 |
|
return SDEnone; |
1174 |
|
} |