public override enExperimentStatus Configure(IExperiment parent, string resultsFilePath) { if (status != enExperimentStatus.Running) { this.parent = parent; ResultsFilePath = Path.Combine(resultsFilePath, Name); ; ResultsFileName = "ExpScanArray - " + Name + ".dat"; IPositioner pos = Settings.Positioners[Settings.Positioner]; if (Settings.Tilt) { pos = Settings.Positioners[Settings.TiltPositioner]; Tilt = new TiltCorrection(pos, Settings.Pos1, Settings.Pos2, Settings.Pos3, Settings.Offset); Tilt.PositionStore = PositionStore; } Scanner = new ScannerArray(Settings.ScannerMode, pos, Settings.Lengths, Settings.Increments, Settings.Speeds, Settings.ReverseSpeeds, Settings.PreMovementHook, Settings.PostMovementHook, Tilt, Settings.XDelay, Settings.YDelay, Settings.ZDelay, log); Scanner.Initialize(); //safety check: if the tilt correction is in use, a scan in Z direction is not a good idea. if ((Math.Abs(Settings.Increments.Z) > 0) && (Math.Abs(Settings.Lengths.Z) > 0) && (Math.Abs(Settings.Increments.Z) <= Math.Abs(Settings.Lengths.Z)) && (Settings.Tilt)) { //todo: describe error return enExperimentStatus.Error; } // create ScanData container scanData = new ScanData(); scanData.experimentName = Name; reverseScanX = Settings.Increments.X < 0; reverseScanY = Settings.Increments.Y < 0; scanData.setScanDimensions(Scanner.NumScanPoints[0], Scanner.NumScanPoints[1]); // Current Positioner pos Position startPos = new Position(); if(pos.GetAbsolutePosition(ref startPos) != enuPositionerStatus.Ready) return enExperimentStatus.Error; // set scanData dimensions scanData.X0 = Math.Min(startPos.X, (Scanner.NumScanPoints[0] - 1) * Settings.Increments.X); scanData.Y0 = Math.Min(startPos.Y, (Scanner.NumScanPoints[1] - 1) * Settings.Increments.Y); scanData.X1 = Math.Max(startPos.X, (Scanner.NumScanPoints[0] - 1) * Settings.Increments.X); scanData.Y1 = Math.Max(startPos.Y, (Scanner.NumScanPoints[1] - 1) * Settings.Increments.Y); status = enExperimentStatus.Idle; return status; } return enExperimentStatus.Error; }
public ScannerArc(IPositioner _pos, Position _parameters, Position _speeds, Position _revspeeds, Position _premove, Position _postmove, TiltCorrection _tilt, LogHelper log) { this.log = log; mPositioner = _pos; mRadius = _parameters.X; mRadIncr = _parameters.Y; mAngIncr = _parameters.Z; mSpeeds = _speeds; mReverseSpeeds = _revspeeds; mPreMove = _premove; mPostMove = _postmove; mTilt = _tilt; }
public override enExperimentStatus Configure(IExperiment parent, string resultsFilePath) { if (status != enExperimentStatus.Running) { this.parent = parent; ResultsFilePath = Path.Combine(resultsFilePath, Name);; ResultsFileName = "ExpScanArc - " + Name + ".dat"; IPositioner pos = Settings.Positioners[Settings.Positioner]; if (Settings.Tilt) { pos = Settings.Positioners[Settings.TiltPositioner]; Tilt = new TiltCorrection(pos, Settings.Pos1, Settings.Pos2, Settings.Pos3, Settings.Offset); Tilt.PositionStore = PositionStore; } Position Parameters = new Position(Settings.Radius, Settings.RadiusIncrement, Settings.AngularIncrement); //we just create a scanner object and it is dealing with the rest Scanner = new ScannerArc(pos, Parameters, Settings.Speeds, Settings.ReverseSpeeds, Settings.PreMovementHook, Settings.PostMovementHook, Tilt, log); Scanner.Initialize(); // create ScanData container scanData = new ScanDataFreeform(); scanData.experimentName = Name; // reset Position Counter currentPosIDX = 0; // Current Positioner pos Position currentPos = new Position(); if (Scanner.Position(ref currentPos) != enuPositionerStatus.Ready) { return(enExperimentStatus.Error); } currentXPos = currentPos.X; currentYPos = currentPos.Y; status = enExperimentStatus.Idle; return(status); } return(enExperimentStatus.Error); }