Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }