@Override public float getValueAtPoint(P3 pt, boolean getSource) { if (haveOneProperty && !getSource) return theProperty; float dmin = Float.MAX_VALUE; float dminNearby = Float.MAX_VALUE; float value = (doSmoothProperty ? 0 : Float.NaN); float vdiv = 0; atomDataServer.setIteratorForPoint(iter, modelIndex, pt, maxDistance); iAtomSurface = -1; while (iter.hasNext()) { int ia = iter.next(); int myAtom = myIndex[ia]; boolean isNearby = (myAtom >= firstNearbyAtom); P3 ptA = atomXyz[myAtom]; float p = atomProp[myAtom]; // System.out.println(iAtom + " " + ia + ptA + " " + isNearby + " " + p); if (Float.isNaN(p)) continue; float d2 = pt.distanceSquared(ptA); if (isNearby) { if (d2 < dminNearby) { dminNearby = d2; if (!doSmoothProperty && dminNearby < dmin) { dmin = d2; value = Float.NaN; } } } else if (d2 < dmin) { dmin = d2; iAtomSurface = ia; if (!doSmoothProperty) value = p; } if (mepCalc != null) { value += mepCalc.valueFor(p, d2, calcType); } else if (doSmoothProperty) { d2 = (float) Math.pow(d2, smoothingPower); vdiv += d2; value += d2 * p; } } // System.out.println(pt + " " + value + " " + vdiv + " " + value / vdiv); return (mepCalc != null ? value : doSmoothProperty ? (vdiv == 0 || dminNearby < dmin ? Float.NaN : value / vdiv) : value); }
@Override protected void finalizeMapping() { iter.release(); iter = null; if (params.showTiming) Logger.checkTimer("property mapping", false); }
@Override protected void finalizeMapping() { iter.release(); iter = null; if (Logger.debugging) Logger.checkTimer("property mapping time"); }