3.9.1.3 Normalize


Version Info

Minimum Origin Version Required: Origin 8 SR5

Normalize Multiple Curves in a Graph at User-Specified Point

This example shows how to allow user to pick a particular point in a particular data plot (curve) and then normalize all curves in the layer to the same value at that point.

#include <Origin.h>

void normalize_multiple_curves()
{
	// Assume graph layer with multiple curves is active
	// It is also assumed all curves share same X values, typical in spectroscopy
	GraphLayer gl = Project.ActiveLayer();
	if( !gl )
		return;
	
	// Allow user to click and select one particular point of one particular curve
	GetGraphPoints mypts;
	mypts.SetFollowData(true);
	mypts.GetPoints(1, gl);
	vector vx, vy;
	vector<int> vn;
	if(mypts.GetData(vx, vy, vn) == 1)
	{
		// Save index and y value of picked point
		int nxpicked = vn[0] - 1;
		double dypicked = vy[0];
		// Loop over all data plots in layer
		foreach( DataPlot dp in gl.DataPlots )
		{
			// Get the data range and then the y column for current plot
			XYRange xy;
			Column cy;
			if(dp.GetDataRange(xy) && xy.GetYColumn(cy))
			{
				// Get a vector reference to y values from the y column
				vectorbase &vycurrent = cy.GetDataObject();
				// Scale vector so y value matches user-picked point
				vycurrent *= dypicked/vycurrent[nxpicked];
			}
		}
	}
}