void TouchTracker::addPeakToKeyState(const MLSignal& in)
{
	mTemp.copy(in);
	for(int i=0; i<kMaxPeaksPerFrame; ++i)
	{
		// get highest peak from temp.  
		Vec3 peak = mTemp.findPeak();	
		float z = peak.z();
		
		// add peak to key state, or bail
		if (z > mOnThreshold)
		{			
			Vec2 pos = in.correctPeak(peak.x(), peak.y());	
			int key = getKeyIndexAtPoint(pos);
			if(within(key, 0, mNumKeys))
			{
				// send peak energy to key under peak.
				KeyState& keyState = mKeyStates[key];
				MLRange kdzRange(mOnThreshold, mMaxForce*0.5, 0.001f, 1.f);
				float iirCoeff = kdzRange.convertAndClip(z);	
				float dt = mCalibrator.differenceFromTemplateTouch(in, pos);
                
                //debug() << "new PEAK dt: " << dt << "\n";
                
				keyState.mK = iirCoeff;
				keyState.zIn = z;
				keyState.dtIn = dt;
				if(mQuantizeToKey)
				{
					keyState.posIn = keyState.mKeyCenter;
				}
				else
				{
					keyState.posIn = pos;
				}
			}
		}
		else
		{
			break;
		}
	}
}