ModelerControl & ModelerControl::operator=(const ModelerControl & o) { if (this != &o) SetVals(o.m_name, o.m_minimum, o.m_maximum, o.m_stepsize, o.m_value); return *this; }
bool PointsCurve::SetupOK(SC_SetupErr& errData) { pVals.Cleanup(); SetVals(); SC_SetupErr parErr; if (pVals.IsEmpty()) parErr.SetConstantError("no curve points"); // check each point double lastX; double lastMaxX; char varID[40]; for (int i = 0; i < pVals.Size(); i++) { PointsCurveValue& xVal = pVals.GetRef(i).xVal; PointsCurveValue& yVal = pVals.GetRef(i).yVal; // set IDs for individual error checking use MakeString(varID, yVarID, ".", xVarID, 40); xVal.SetID(varID, i); MakeString(varID, yVarID, ".V", 40); yVal.SetID(varID, i); // set and check if (control.IsOptimization()) { if (xVal.IsOpt()) { OptVarUnits& currOpt = *xVal.pOptData; currOpt.optParSigma = xoptParSigma; currOpt.optIsLinear = xoptIsLinear; if (!currOpt.OptimizeSetupOK(parErr)) break; } if (yVal.IsOpt()) { OptVarUnits& currOpt = *yVal.pOptData; currOpt.optMinLim = yoptMinLim; currOpt.optMaxLim = yoptMaxLim; if (yIsLog10) { if ((currOpt.optMinLim <= 0.0) || (currOpt.optMaxLim <= 0.0)) { parErr.SetConstantError("Y log10 limits are -ve"); break; } } currOpt.optParSigma = yoptParSigma; currOpt.optIsLinear = yoptIsLinear; if (!currOpt.OptimizeSetupOK(parErr)) break; } } // do basic check if (!(xVal.SetupOK(parErr, xIsLog10) && yVal.SetupOK(parErr, yIsLog10))) break; // check for ascending X if (i > 0) { // basic check if (xVal.pVal <= lastX) { parErr.SetConstantError("X values must ascend"); break; } // optimized X ranges must not overlap if (control.IsOptimization() && xVal.IsOpt()) { if (xVal.pOptData->optMinLim <= lastMaxX) { parErr.SetConstantError("X optimization ranges overlap"); break; } lastMaxX = xVal.pOptData->optMaxLim; } if (!control.IsSampleSim() && xVal.IsVary()) { double minX, maxX; xVal.pVaryData->GetMinMax(minX, maxX); if (minX <= lastMaxX) { parErr.SetConstantError("X range/suite ranges overlap"); break; } lastMaxX = maxX; } } else { if (control.IsOptimization() && xVal.IsOpt()) lastMaxX = xVal.pOptData->optMaxLim; else lastMaxX = xVal.pVal; } lastX = xVal.pVal; if (xVal.IsFixed()) lastMaxX = lastX; } if (parErr.NoErrors()) pointsCurve.CurveSetupOK(pVals.Size(), parErr); return errData.SetupOK(yVarID, parErr); }
ModelerControl::ModelerControl(const char* name, float minimum, float maximum, float stepsize, float value) { SetVals(name, minimum, maximum, stepsize, value); }