void
JPlotLinearFit::JPlotLinearFitX
	(
	J2DPlotWidget* plot,
	JPlotDataBase* fitData,
	const JBoolean xlog,
	const JBoolean ylog
	)
{
	SetHasParameterErrors(kJTrue);
	SetParameterCount(2);
	SetHasGoodnessOfFit(kJTrue);
	itsXIsLog = xlog;
	itsYIsLog = ylog;
	if (!xlog && !ylog)
		{
		itsFunctionName = jnew JString("y = a+bx");
		}
	else if (!xlog && ylog)
		{
		itsFunctionName = jnew JString("y = a Exp(bx)");
		}
	itsRealCount = 0;
	GenerateFit();
	GenerateDiffData();
	if (itsYIsLog && !itsXIsLog)
		{
		AdjustDiffData();
		}
}
JPlotFitProxy::JPlotFitProxy
	(
	J2DPlotWidget* 		plot, 
	JPlotDataBase* 		fitData,
	istream& 			is
	)
	:
	JPlotFitFunction(plot, fitData, 0, 0),
	itsErrors(NULL)
{
	is >> itsHasGOF;
	if (itsHasGOF)
		{
		is >> itsGOFName;
		is >> itsGOF;
		}

	itsParms	= new GVarList();
	assert(itsParms != NULL);
	itsParms->AddVariable("x", 0);

	JSize count;
	is >> count;
	for (JIndex i = 1; i <= count; i++)
		{
		JString name;
		is >> name;
		JFloat value;
		is >> value;
		itsParms->AddVariable(name, value);
		}

	SetParameterCount(count);
		
	JBoolean hasParameterErrors;
	is >> hasParameterErrors;
	
	if (hasParameterErrors)
		{
		SetHasParameterErrors(kJTrue);
		itsErrors	= new JArray<JFloat>;
		assert(itsErrors != NULL);
		for (JIndex i = 1; i <= count; i++)
			{
			JFloat value;
			is >> value;
			itsErrors->AppendElement(value);
			}
		}
	
	JFloat xMin;
	JFloat xMax;

	is >> xMin;
	is >> xMax;

	SetXRange(xMin, xMax);

	is >> itsFnString;
	
	itsFn	= NULL;
	JParseFunction(itsFnString, itsParms, &itsFn);
	SetHasGoodnessOfFit(itsHasGOF);

	GenerateDiffData();
}