Example #1
0
        /// <summary>
        /// 根据给定的一对标识符所对应的对象,异步检索二者之间可能的路径。
        /// </summary>
        /// <param name="id1">源点对象标识符。此标识符可以是论文(Id)或作者(AA.AuId)。</param>
        /// <param name="id2">漏点对象标识符。此标识符可以是论文(Id)或作者(AA.AuId)。</param>
        /// <returns>
        /// 一个 Task 。其运行结果是一个集合(ICollection),集合中的每一个项目是一个数组,代表一条路径。
        /// 数组按照 id1 → id2 的顺序返回路径途经的所有节点。
        /// 合法的节点类型包括
        /// 论文(Id), 研究领域(F.Fid), 期刊(J.JId), 会议(C.CId), 作者(AA.AuId), 组织(AA.AfId)。
        /// </returns>
        /// <remarks>
        /// 此函数应该是线程安全的……吧?
        /// </remarks>
        public override async Task <IReadOnlyCollection <KgNode[]> > FindPathsAsync(long id1, long id2)
        {
            Logger.Magik.Enter(this, $"{id1} -> {id2}");
            var sw = Stopwatch.StartNew();
            // 先找到实体/作者再说。
            var nodes = await Task.WhenAll(BeginExplorationAt(id1), BeginExplorationAt(id2));

            var node1 = nodes[0];
            var node2 = nodes[1];

            if (node1 == null)
            {
                throw new ArgumentException($"在 MAG 中找不到指定的 Id/AuId:{id1}。", nameof(id1));
            }
            if (node2 == null)
            {
                throw new ArgumentException($"在 MAG 中找不到指定的 Id/AuId:{id2}。", nameof(id2));
            }
#if DEBUG
            _Node1 = node1;
            _Node2 = node2;
#endif
            // 开始搜索。
            var hops = await Task.WhenAll(
                FindHop12PathsAsync(node1, node2),
                FindHop3PathsAsync(node1, node2));

            var result = MultiCollectionView.Create(hops);
            Debug.Assert(result.IsDistinct(ArrayEqualityComparer <KgNode> .Default));
            Logger.Magik.Trace(this, "在 {0} - {1} 之间找到了 {2} 条路径。", node1, node2, result.Count);
            TimerLogger.TraceTimer("Analyzer", sw);
            Logger.Magik.Exit(this);
            return(result);
        }
Example #2
0
 public void AddWaitTime(string message, int msWait)
 {
     waitableTasks.Add(Task.Run(() =>
     {
         var tl = new TimerLogger(message, msWait, 1000, this.Logger);
         tl.CompletionEvent.WaitOne();
     }));
 }
Example #3
0
        public void Run()
        {
            if (string.IsNullOrEmpty(SavePath))
            {
                Logger.Log("Save path is empty. Will save to desktop\n");
                SavePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "edwFactors.txt");
            }
            ;

            var states = BuildMeasurementList();

            foreach (var m in states)
            {
                var jr = new Job(m);
                jr.DepthOfMeasurentMM = DepthOfMeasurementMM;
                if (Math.Abs(_scan1D.LastKnowPositionMM - DepthOfMeasurementMM) > 0.1)
                {
                    Logger.Log($"Changing depth to {DepthOfMeasurementMM} mm\n");
                    _scan1D.GoToDepth(jr.DepthOfMeasurentMM);
                }

                for (int n = 0; n < RepeatMeasurements; n++)
                {
                    var fov = EnergyHelper.IsPhoton(m.Energy) ? $"{m.X1 * 2} x {m.Y1 * 2}" : m.Accessory;
                    Logger.Log($"Working on {m.Energy}, Depth {jr.DepthOfMeasurentMM}, {m.Accessory} ,  Measurement {n + 1}\n\n");

                    _linac.SetMachineState(m);

                    //Start measuring
                    _el.Reset();
                    _el.StartMeasurement();

                    if (n == 0)
                    {
                        _linac.BeamOn();
                    }
                    else
                    {
                        _linac.RepeatBeam();
                    }

                    var waitTime = _linac.WaitMsForMU(m.MU, true);
                    using (var t = new TimerLogger("Waiting on beam completion", waitTime, 1000, this.Logger))
                    {
                        Thread.Sleep(waitTime);
                    }
                    //Stop and get measurement
                    _el.StopMeasurement();
                    var measured = _el.GetValue().Measurement;
                    Logger?.Log($"Measured : {measured}\n");

                    jr.AddMeasurement(_el.GetValue().Measurement);
                }
                //Save results
                JobWriter.AppendResult(SavePath, jr);
            }
        }
Example #4
0
        private async Task RequestLoggingMiddleware(IOwinContext context, Func <Task> next)
        {
            var request = context.Request;
            var sw      = Stopwatch.StartNew();

            requestLogger.WriteVerbose($"{request.RemoteIpAddress} {request.Method}: {request.Uri}");
            await next();

            var response = context.Response;

            requestLogger.WriteVerbose($"{request.RemoteIpAddress} {request.Method}: {request.Uri} -> {response.StatusCode} {response.ContentType} {response.ContentLength}");
            TimerLogger.TraceTimer("Request", sw);
        }
Example #5
0
        public async Task <IHttpActionResult> Get(long id1, long id2)
        {
            var sw       = Stopwatch.StartNew();
            var analyzer = AnalyzerFactory.GetAnalyzer();

            try
            {
                var paths = await analyzer.FindPathsAsync(id1, id2);

                // 返回只要 Id 就可以了。
                // 由于结构比较简单,所以可以强行 json 。
                var resultBuilder = new StringBuilder("[");
                var isFirst       = true;
                foreach (var path in paths)
                {
                    if (isFirst)
                    {
                        isFirst = false;
                    }
                    else
                    {
                        resultBuilder.Append(",\n");
                    }
                    resultBuilder.Append("[");
                    for (int j = 0; j < path.Length; j++)
                    {
                        if (j > 0)
                        {
                            resultBuilder.Append(",");
                        }
                        resultBuilder.Append(path[j].Id);
                    }
                    resultBuilder.Append("]");
                }
                resultBuilder.Append("]");
                var resp = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(resultBuilder.ToString(), null, Utility.JsonMediaType)
                };
                AnalyzerFactory.PutAnalyzer(analyzer);
                return(new ResponseMessageResult(resp));
            }
            finally
            {
                analyzer.LogStatistics();
                analyzer.SearchClient.LogStatistics();
                TimerLogger.TraceTimer("MagikController", sw);
            }
        }
Example #6
0
        static void Main(string[] args)
        {
            var linac = new CSeriesLinac();

            linac.Initialize("COM9");
            var logger = new Logger();

            logger.Logged += (log) => Console.WriteLine(log);
            linac.Logger   = logger;

            var ms = MachineState.InitNew();

            ms.Energy = Energy._6X;
            ms.X1     = 5;
            ms.X2     = 5;
            linac.SetMachineState(ms);

            var ss = ServiceModeSession.Instance;

            ss.Logger = logger;
            ss.AddWaitTime("test", 7000);
            ss.Wait();


            var time = new TimerLogger("Test", 7000, 1000, logger);

            time.CompletionEvent.WaitOne();
            Console.WriteLine("Timer complete");
            Console.Read();

            var max = new Max4000();

            max.Initialize("COM1");

            var verify = max.Verify();
            var status = max.GetStatus();
            var dv     = new DoseView1D();

            dv.Initialize("COM3");

            dv.GoToDepth(64.2).Wait();
            var test = dv.GetOrigin();

            //var linac = new CSeriesLinac();
            //linac.Initialize("COM5");
            // linac.OverrideDefaultInterlocks();


            //var of = @"C:\Users\variansupport\Desktop\photonOoutputFactors.txt";
            //var edwOF = @"C:\Users\variansupport\Desktop\edwFactors.txt";
            //var jobs = JobResultReader.Read(of);
            //var edwJobs = JobResultReader.Read(edwOF).ToList();
            //var table = AccessoryOFProcessor.GetTableRows(edwJobs);
            //foreach(var t in table)
            //{
            //    t.PrintToConsole();
            //}
            //Console.ReadLine();

            //var dv = new DoseView1D();
            //dv.Initalize("COM12");

            //var max = new Max4000();
            //max.Initialize("COM9");
            //max.Verify();

            ////  max.Zero().Wait();

            //var bias = max.SetBias(Autodrive.Electrometers.Bias.NEG_100PERC);
            //max.SetMode(Autodrive.Electrometers.MeasureMode.CHARGE);

            //var linac = new CSeriesLinac();
            //linac.Initialize("COM10");

            //var ofTest = new EDWFactors(linac, max, dv);
            //ofTest.Logger.Logged += Logger_Logged;
            //ofTest.Run();

            // var session = ServiceModeSession.Instance;
            // session.Keyboard = new VetraKeyboard("COM3");
            // session.KeySpeedMs = 100;
            //// session.EnterDefaultPassword();
            // session.ResetConsoleState();
            // //session.ToggleDefaultInterlocks();


            // session.MachineState.GantryRot = 180;
            // session.MachineState.CollimatorRot = 180;
            // session.MachineState.X1 = 5.0;
            // session.MachineState.X2 = 5.0;
            // session.MachineState.Y1 = 5.0;
            // session.MachineState.Y2 = 5.0;
            // session.MachineState.CouchLat = 100.2;
            // session.MachineState.CouchVert = 127.9;
            // session.MachineState.CouchLng = 54.4;

            //MonthlyMechanicals.InitializePosition();
            //MonthlyMechanicals.CouchStarShot();
            Console.Read();
            //  var tasks = new List<ITask>();
        }
Example #7
0
        private static void SeedProductPhones(int seedNumber)
        {
            try
            {
                using (var timerLogger = new TimerLogger("Seeding db with phones"))
                    using (var bulkInsert = DocumentStoreHolder.Store.BulkInsert(options.Database))
                    {
                        Log.Information("Started building the faker database objects");

                        var platform = Builder <Platform> .CreateListOfSize(200).All()
                                       .With(p => p.Chipset = Builder <Chipset> .CreateNew().Build())
                                       .With(p => p.Cpu     = Builder <Cpu> .CreateNew().Build()).With(
                            p => p.Os = Builder <Os> .CreateNew()
                                        .With(o => o.NameList = new List <string>(Lorem.Words(5))).Build())
                                       .Random(100).Build();

                        var memory = Builder <Memory> .CreateListOfSize(30).All()
                                     .With(m => m.Internal = Builder <InternalMemory> .CreateNew().Build())
                                     .With(m => m.External = Builder <ExternalMemory> .CreateNew().Build()).Random(15).Build();

                        var frontCamera = Builder <Camera> .CreateListOfSize(45).All()
                                          .With(f => f.Specs    = new List <string>(Lorem.Paragraphs(3)))
                                          .With(f => f.Video    = new List <string>(Lorem.Words(2)))
                                          .With(f => f.Features = new List <string>(Lorem.Sentences(4))).Random(30).Build();

                        var backCamera = Builder <Camera> .CreateListOfSize(45).All()
                                         .With(f => f.Specs    = new List <string>(Lorem.Paragraphs(2)))
                                         .With(f => f.Video    = new List <string>(Lorem.Words(3)))
                                         .With(f => f.Features = new List <string>(Lorem.Sentences(6))).Random(25).Build();

                        var sound = Builder <Sound> .CreateListOfSize(10).All()
                                    .With(s => s.Feature = new List <string>(Lorem.Sentences(2))).Build();

                        var battery = Builder <Battery> .CreateListOfSize(25).All()
                                      .With(s => s.Feature = new List <string>(Lorem.Sentences(3))).Build();

                        var feature = Builder <Feature> .CreateListOfSize(30).All()
                                      .With(s => s.Sensors = new List <string>(Lorem.Words(5))).Random(30).Build();

                        var store = Builder <StoreProduct> .CreateListOfSize(50).All().Random(30).Build();

                        var mobilePhones = Builder <MobilePhone> .CreateListOfSize(seedNumber).All()
                                           .With(p => p.Platform    = Pick <Platform> .RandomItemFrom(platform))
                                           .With(p => p.Memory      = Pick <Memory> .RandomItemFrom(memory))
                                           .With(p => p.FrontCamera = Pick <Camera> .RandomItemFrom(frontCamera))
                                           .With(p => p.BackCamera  = Pick <Camera> .RandomItemFrom(backCamera))
                                           .With(p => p.Sound       = Pick <Sound> .RandomItemFrom(sound))
                                           .With(p => p.Battery     = Pick <Battery> .RandomItemFrom(battery))
                                           .With(p => p.Features    = Pick <Feature> .RandomItemFrom(feature))
                                           .With(p => p.Comms       = Builder <Comms> .CreateNew().Build())
                                           .With(p => p.Id          = Guid.NewGuid().ToString()).With(p => p.CategoryId = Guid.NewGuid().ToString())
                                           .With(
                            p => p.ProductName = new List <string>
                        {
                            $"Product-{Identification.UKNationalInsuranceNumber()}"
                        }).With(p => p.Store = Pick <StoreProduct> .RandomItemFrom(store))
                                           .Build();

                        timerLogger.OnTimedEventTemplate("Processing: {0} items so far...", seedCounter);
                        timerLogger.StartTimer();

                        Log.Information("Ready to start seeded database with {0:n0} phones", seedNumber);

                        foreach (var mobilePhone in mobilePhones)
                        {
                            bulkInsert.Store(mobilePhone);
                            timerLogger.UpdatePropertyValue(seedCounter++);
                        }
                    }
            }
            catch (Exception unknownException)
            {
                Log.Error(
                    unknownException,
                    "Failed while trying to seed the {Database} database with {SeedNumber} phones.",
                    options.Database,
                    seedNumber);
            }
            finally
            {
                Log.Information("Seeded database with {0:n0} phones", seedCounter);
                seedCounter = 0;
            }
        }