예제 #1
0
        public bool TryNewSampleProducer(out IProducerV2 <SampleRecord> newProducer, int?targetCnt = null)
        {
            Sampler sampler;

            if (TryNewSampler(out sampler))
            {
                newProducer = new SampleProducerV2(sampler, GeneralConfigurations.Get().QueueSize, targetCnt);
                if (GeneralConfigurations.Get().SaveSample)
                {
                    var newSampleWriter = FactoryHolder.Get().NewSampleWriter();
                    newProducer.NewProduct += record => { newSampleWriter.Write(record); };
                }
                return(true);
            }
            newProducer = null;
            return(false);
        }
예제 #2
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));
        }
예제 #3
0
 /// <summary>Initializes a new instance of the <see cref="T:System.Object" /> class.</summary>
 public SampleProducerV2(Sampler sampler, int?maxCapacity, int?targetCnt)
 {
     _sampler  = sampler;
     _producer = new SerialProducerV2 <SampleRecord>(this, maxCapacity, targetCnt);
 }
예제 #4
0
 /// <summary>
 ///     Create a scheduler.
 /// </summary>
 /// <param name="producer"></param>
 /// <param name="consumer"></param>
 public Scheduler(IProducerV2 <SampleRecord> producer, IConsumerV2 consumer)
 {
     Producer = producer;
     Consumer = consumer;
 }