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;
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
ModelerControl::ModelerControl(const char* name, float minimum, float maximum, float stepsize, float value)
{
	SetVals(name, minimum, maximum, stepsize, value);
}