Exemplo n.º 1
0
        public IPhaseExtractor NewPhaseExtractor()
        {
            if (GeneralConfigurations.Get().ViewPhase)
            {
                return(new FourierOnlyPhaseExtractor());
            }
            var config    = CorrectorConfigurations.Get();
            var misConfig = MiscellaneousConfigurations.Get();

            switch (config.PhaseType)
            {
            case PhaseType.FullRange:
                return(new FourierOnlyPhaseExtractor());

            case PhaseType.CenterInterpolation:
                return(new CorrectCenterPhaseExtractor(NewApodizer(),
                                                       config.CenterSpanLength / 2));

            case PhaseType.SpecificRange:
                return(new SpecificRangePhaseExtractor((int)config.RangeStart, (int)config.RangeEnd,
                                                       misConfig.MinFlatPhasePtsNumCnt, misConfig.MaxPhaseStd));

            case PhaseType.OldCenterInterpolation:
                return(new ClassicWrongPhaseExtractor(NewApodizer(),
                                                      config.CenterSpanLength / 2));

            case PhaseType.SpecificFreqRange:
                return(new SpecificFreqRangePhaseExtractor(config.RangeStart, config.RangeEnd,
                                                           SamplingConfigurations.Get().SamplingRateInMHz, misConfig.MinFlatPhasePtsNumCnt,
                                                           misConfig.MaxPhaseStd));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 2
0
        private void FlattenCurves_OnClick(object sender, RoutedEventArgs e)
        {
            if (!CheckPythonAndWarn())
            {
                return;
            }
            var file = SelectFile();

            if (file == null)
            {
                return;
            }
            var pythonPath = MiscellaneousConfigurations.Get().PythonPath;
            var cmd        = Quote(AppDomain.CurrentDomain.BaseDirectory + @"Pythons\Flatter.py") + " " + file;

            if (File.Exists(file.Replace(".txt", "[WavelengthAxis].txt")))
            {
                Process.Start(pythonPath, cmd);
            }
            else
            {
                var command = Quote(AppDomain.CurrentDomain.BaseDirectory + @"Pythons\Mapper.py") + " " + file + " " + SamplingConfigurations.Get().SamplingRate;
                Process.Start(pythonPath, command);
                MessageBox.Show("Generating wavelength axis, please click 'OK' AFTER completion.");
                Process.Start(pythonPath, cmd);
            }
        }
Exemplo n.º 3
0
 public virtual ICorrectorV2 NewCorrector()
 {
     if (MiscellaneousConfigurations.Get().AutoFlip)
     {
         return(new AutoFlipCorrectorV2(NewCorrectorNoFlip()));
     }
     return(NewCorrectorNoFlip());
 }
Exemplo n.º 4
0
        public IAccumulator NewPulseSequenceProcessor()
        {
            var config = CorrectorConfigurations.Get();

            if (config.LockDip)
            {
                return(new LockDipAccumulator(NewCrestFinder(), NewSlicer(), NewPulsePreprocessor(), NewCorrector(), config.LockDipFreqInMHz,
                                              MiscellaneousConfigurations.Get().LockDipScanRadiusInMhz, SamplingConfigurations.Get().SamplingRateInMHz));
            }
            return(new Accumulator(NewCrestFinder(), NewSlicer(), NewPulsePreprocessor(), NewCorrector()));
        }
        private void BnPositive_OnClick(object sender, RoutedEventArgs e)
        {
            SliceConfigurations.Get().CrestAtCenter = CbPeakPosition.SelectedIndex == 0;
            var config = MiscellaneousConfigurations.Get();

            config.MaxPhaseStd                = double.Parse(TbMaxPhaseStd.Text);
            config.MinFlatPhasePtsNumCnt      = int.Parse(TbMinPhaseLength.Text);
            config.WaitEmptyProducerMsTimeout = int.Parse(TbProducerTimeout.Text);
            config.PythonPath             = TbPythonPath.Text;
            config.AutoFlip               = CkFlipMinusSpec.IsChecked.GetValueOrDefault(false);
            config.LockDipScanRadiusInMhz = double.Parse(TbDipLockScanRadius.Text);
            Close();
        }
        public OptionsWindow()
        {
            InitializeComponent();
            CbPeakPosition.ItemsSource   = new[] { "Center In Period", "Left In Period" };
            CbPeakPosition.SelectedIndex = SliceConfigurations.Get().CrestAtCenter ? 0 : 1;
            var config = MiscellaneousConfigurations.Get();

            TbMaxPhaseStd.Text        = "" + config.MaxPhaseStd;
            TbMinPhaseLength.Text     = "" + config.MinFlatPhasePtsNumCnt;
            TbProducerTimeout.Text    = "" + config.WaitEmptyProducerMsTimeout;
            TbPythonPath.Text         = config.PythonPath;
            TbDipLockScanRadius.Text  = config.LockDipScanRadiusInMhz + "";
            CkFlipMinusSpec.IsChecked = config.AutoFlip;
        }
Exemplo n.º 7
0
        private void GenerateWavelengthAxis_OnClick(object sender, RoutedEventArgs e)
        {
            if (!CheckPythonAndWarn())
            {
                return;
            }
            var file = SelectFile();

            if (file != null)
            {
                var command = Quote(AppDomain.CurrentDomain.BaseDirectory + @"Pythons\Mapper.py") + " " + file + " " + SamplingConfigurations.Get().SamplingRate;
                Process.Start(MiscellaneousConfigurations.Get().PythonPath, command);
            }
        }
Exemplo n.º 8
0
 private void BnViewTemporal_OnClick(object sender, RoutedEventArgs e)
 {
     if (IsProgramRunning())
     {
         return;
     }
     if (!CheckPythonAndWarn())
     {
         return;
     }
     Task.Run(() => {
         var factory = new ParallelInjector();
         Sampler sampler;
         if (factory.TryNewSampler(out sampler))
         {
             var data         = sampler.Retrieve(SamplingConfigurations.Get().Channel);
             var finder       = factory.NewCrestFinder();
             var crestIndices = finder.Find(data);
             var path         = AppDomain.CurrentDomain.BaseDirectory + @"temporal\";
             if (!Directory.Exists(path))
             {
                 try {
                     Directory.CreateDirectory(path);
                 } catch (Exception) {
                     MessageBox.Show(
                         "Unable to create directory! Try run this program with administrator permission");
                     return;
                 }
             }
             Toolbox.WriteData(path + "temporal.txt", data);
             Toolbox.WriteData(path + "crests.txt", crestIndices.ToArray());
             Process.Start(MiscellaneousConfigurations.Get().PythonPath,
                           Quote(AppDomain.CurrentDomain.BaseDirectory + @"Pythons\TemporalViewer.py") + " " + AppDomain.CurrentDomain.BaseDirectory);
         }
         else
         {
             MessageBox.Show("Sampler can't be initialized. Maybe another instance is running.");
         }
     });
 }
Exemplo n.º 9
0
        private DisplayAdapterV2 NewAdapter()
        {
            if (GeneralConfigurations.Get().ViewPhase)
            {
                return(FactoryHolder.Get()
                       .NewPhaseAdapter(new CanvasView(ScopeCanvas), new HorizontalAxisView(HorAxisCanvas),
                                        new VerticalAxisView(VerAxisCanvas), TbXCoordinate, TbDistance));
            }
            double?lockDipFreq;

            if (CorrectorConfigs.LockDip)
            {
                lockDipFreq = CorrectorConfigs.LockDipFreqInMHz;
            }
            else
            {
                lockDipFreq = null;
            }
            return(FactoryHolder.Get()
                   .NewSpectrumAdapter(new CanvasView(ScopeCanvas), new HorizontalAxisView(HorAxisCanvas),
                                       new VerticalAxisView(VerAxisCanvas), TbXCoordinate, TbDistance,
                                       lockDipFreq, MiscellaneousConfigurations.Get().LockDipScanRadiusInMhz));
        }
Exemplo n.º 10
0
        public IConsumerV2 NewConsumer([NotNull] IProducerV2 <SampleRecord> producer, [NotNull] DisplayAdapterV2 adapter,
                                       int?targetCnt)
        {
            var timeout = MiscellaneousConfigurations.Get().WaitEmptyProducerMsTimeout;

            var configurations = GeneralConfigurations.Get();

            if (configurations.ViewPhase)
            {
                return(new PhaseVisualizer(producer.BlockingQueue, NewPhaseReader(), adapter as PhaseDisplayAdapter,
                                           null, timeout,
                                           targetCnt));
            }
            var threadNum = configurations.ThreadNum;

            if (SliceConfigurations.Get().Reference)
            {
                var splitters = new List <ISplitter>(threadNum);
                for (var i = 0; i < threadNum; i++)
                {
                    splitters.Add(NewRefProcessor());
                }
                return(new RefSpectroscopyVisualizer(producer.BlockingQueue, splitters,
                                                     adapter as SpectrumDisplayAdapter, NewSpectrumWriter(), timeout, targetCnt, configurations.SaveSpec,
                                                     configurations.SaveAcc));
            }
            var accumulators = new List <IAccumulator>(threadNum);

            for (var i = 0; i < threadNum; i++)
            {
                accumulators.Add(NewPulseSequenceProcessor());
            }
            return(new ParralelSpectroscopyVisualizerV2(producer.BlockingQueue, accumulators,
                                                        adapter as SpectrumDisplayAdapter, NewSpectrumWriter(), timeout, targetCnt, configurations.SaveSpec,
                                                        configurations.SaveAcc));
        }
Exemplo n.º 11
0
        public static bool CheckPython()
        {
            var pythonPath = MiscellaneousConfigurations.Get().PythonPath;

            return(File.Exists(pythonPath));
        }