예제 #1
0
        /// <summary>
        /// Create Experimental Run.
        /// Refactor Idea: This class should not hold mca/motor/thermometer at all. It should be pass along from DAQThread as arguments.
        /// </summary>
        /// <param name="mca"></param>
        /// <param name="motor"></param>
        /// <param name="thermometer"></param>
        /// <param name="runmode"></param>
        public ExperimentalRun(DT5780 mca, LinearMotor motor, DigitalThermometer thermometer, RunMode runmode = RunMode.Experiment)
        {
            this.mca = mca;
            this.thermometer = thermometer;
            this.motor = motor;
            Timeout = 60;
            MaxSample = 0;
            Log = new ExperimentLog();
            ClearData();
            RunMode = runmode;
            Channel0PeakFinder = new PeakFinder();
            Channel1PeakFinder = new PeakFinder();
            ExperimentStatus = ExperimentStatusEnum.Prepared;
            StartActionMap = new Dictionary<RunMode, DAQThread.OnSuccessfulStartDelegate>{
                {RunMode.Experiment, OnExperimentStart},
                {RunMode.Calibrate, OnCalibrationStart},
                {RunMode.Simulated, OnSimulationStart}
            };

            StopActionMap = new Dictionary<RunMode, DAQThread.OnSuccessfulStopDelegate>{
                {RunMode.Experiment, OnExperimentEnd},
                {RunMode.Calibrate, OnCalibrationEnd},
                {RunMode.Simulated, OnSimulationEnd}
            };

            UpdateActionMap = new Dictionary<RunMode, DAQThread.UpdateProgressDelegate>{
                {RunMode.Experiment, OnExperimentUpdate},
                {RunMode.Calibrate, OnCalibrationUpdate},
                {RunMode.Simulated, OnSimulationUpdate}
            };
            InitCommand();
            Channel0FittedDataPoints = new DataPoint[0];
            Channel1FittedDataPoints = new DataPoint[0];
        }
 public void Initialize()
 {
     Console.WriteLine(DateTime.UtcNow);
     mca = new DT5780();
     bool foundone = mca.ScanConnect();
     if (!foundone) Assert.Inconclusive("DT5780 Not Found");
     mca.Reset();
     mca.UseDefaultBoardSetting();
 }
예제 #3
0
 public SettingMaker(DT5780 mca, LinearMotor motor, DigitalThermometer thermometer, ObservableCollection<MCASetting> mcasettings)
 {
     this.mca = mca;
     this.motor = motor;
     this.thermometer = thermometer;
     this.MCASettings = mcasettings;
     this.MCAData = new MCAData();
     TargetPosition = -15;
     MaxSample = 0;
     Timeout = -1;
     InitCommand();
 }
예제 #4
0
 public void UseSettingOn(DT5780 mca, int channel)
 {
     mca.set_PulsePolarity(channel, Polarity);
     mca.set_DecayTime(channel, DecayTime);
     mca.set_InputRiseTime(channel, DecayTime);
     mca.set_TrapezoidRiseTime(channel, TrapezoidRiseTime);
     mca.set_TrapezoidFlatTop(channel, FlatTop);
     mca.set_BaselineAveragingWindow(channel, BaselineMean);
     mca.SetTrapezoidGain(channel, TrapezoidGain);
     mca.set_PeakingTime(channel, PeakingDelay);
     mca.set_PeakAveragingWindow(channel, PeakMean);
     mca.set_BaselineHoldOff(channel, BaselineHoldoff);
     mca.set_PeakHoldOffExtension(channel, PeakHoldoff);
 }
예제 #5
0
 public DAQThread(DT5780 MCA)
 {
     this.MCA = MCA;
 }
예제 #6
0
        /// <summary>
        /// Constructor
        /// </summary>
        public MainViewModel()
        {
            //if (System.Diagnostics.Debugger.IsAttached)
            //{
            //    App.Settings.Reset();
            //}
            MCA = new DT5780();
            LinearMotor = LinearMotorWrapper.LinearMotor.GetInstance();
            Thermometer = new DigitalThermometer();

            //DAQThread = new MCACalibrator.Threads.DAQThread(MCA);
            MotorStatus = new MotorStatus(LinearMotor);
            PeripheralConnection = new PeripheralConnection();
            LogEntries = new BindingList<LogEntry>();
            ExperimentalRuns = new ObservableCollection<ExperimentalRun>();
            QCData = new QCData();

            MCASettings = App.Settings.MCASettings;

            StartHVPoller();
            StartMotorPoller();
            StartPeripheralConnectionPoller();
            SetupCommand();

            MotorCommand = new MotorCommand(this);
            SettingMaker = new SettingMaker(MCA, LinearMotor, Thermometer, MCASettings);
        }
예제 #7
0
 public static ExperimentalRun DummyFilledData(DT5780 mca, LinearMotor motor, DigitalThermometer thermometer, double position = 0)
 {
     ExperimentalRun ret = ExperimentalRun.DummyEmptyData(mca, motor, thermometer, position);
     ret.FillWithDummyData();
     return ret;
 }
예제 #8
0
 public static ExperimentalRun DummyEmptyData(DT5780 mca, LinearMotor motor, DigitalThermometer thermometer, double position = 0)
 {
     ExperimentalRun ret = new ExperimentalRun(mca, motor, thermometer);
     ret.Log.Setting = MCASetting.LargeLYSOSetting();
     ret.Log.MotorPosition = position;
     return ret;
 }
예제 #9
0
 public void UseSettingOnMCA(DT5780 mca)
 {
     mca.Reset();
     mca.SetChannelEnableMask(0x3);
     HV0.UseSettingOnMCA(mca, 0);
     HV1.UseSettingOnMCA(mca, 1);
     TriggerSetting0.UseSettingOn(mca, 0);
     TriggerSetting1.UseSettingOn(mca, 1);
     ShapingSetting0.UseSettingOn(mca, 0);
     ShapingSetting1.UseSettingOn(mca, 1);
     ProbeSetting.UseSettingOn(mca);
 }
예제 #10
0
 public void UseSettingOn(DT5780 mca)
 {
     mca.SetChannelEnableMask(0x3);
     
     if (Mode == ProbeMode.Histogram)
     {
         mca.SetDPPAcquisitionMode(DT5780.DPPAcqMode.List, DT5780.DPPSaveParam.EnergyAndTime);
     }
     else if (Mode == ProbeMode.Oscilloscope)
     {
         mca.SetDPPAcquisitionMode(DT5780.DPPAcqMode.Mixed, DT5780.DPPSaveParam.EnergyAndTime);
     }
     mca.SetVirtualProbe(VirtualProbeMode,
                         VirtualProbe1Mode,
                         VirtualProbe2Mode,
                         DigitalProbeMode);
     mca.RecordLength = RecordLength;
     mca.set_PreTrg(0, PreTrigger);
     mca.set_PreTrg(1, PreTrigger);
     mca.SetSWTriggerMode(SWTrigger);
     mca.SetExtTriggerInputMode(ExtTriggerInput);
     
     mca.AcquisitionMode = DT5780.AcquisitionModeType.SoftwareControl;
 }
예제 #11
0
 public void UseSettingOnMCA(DT5780 mca, int channel)
 {
     mca.set_HVVMax(channel, VMax);
     mca.set_HVVSet(channel, VSet);
     mca.set_HVISet(channel, ISet);
 }
예제 #12
0
 public void UseSettingOn(DT5780 mca, int channel)
 {
     mca.set_TriggerThreshold(channel, TriggerLevel);
     mca.set_TriggerFilterSmoothing(channel, SmoothingFactor);
     mca.set_PreTrg(channel, 0);
     mca.set_TriggerHoldoff(channel, TriggerHoldoff);
     mca.SetChannelSelfTriggerMode(channel, SelfTrigger);
     mca.SetInputRange(channel, InputRange);
 }