Beispiel #1
0
        public async void Run()
        {
            await Task.Run(delegate
            {
                var dtStart = DateTime.Now;

                _computeService.LoadSubjects();
                _computeService.CompareGroups();
                _computeService.PermuteGroups(Permutations, new Progress <PermutationProgress>(UpdateProgress));
                _computeService.GetResults();

                var dtFinish = DateTime.Now;
                var elap     = dtFinish - dtStart;

                double i = elap.TotalSeconds;
            });
        }
        public void Handle(NBSResultsAvailable message)
        {
            var overlap = _computeService.GetResults();
            var regions = _regionService.GetRegionsByIndex();

            var rvms = new List <RegionalViewModel>();

            foreach (var region in regions)
            {
                RegionalViewModel rvm = new RegionalViewModel
                {
                    ROI = region,
                };

                rvms.Add(rvm);
            }

            if (DataType != "overlap")
            {
                var cmps = overlap.Components[DataType];
                if (cmps != null)
                {
                    int            cmpSize = 0;
                    GraphComponent cmp     = null;
                    for (var i = 0; i < cmps.Count; i++)
                    {
                        if (cmps[i].Edges.Count > cmpSize)
                        {
                            cmp     = cmps[i];
                            cmpSize = cmp.Edges.Count;

                            cmp.DataType = DataType;
                        }
                    }

                    if (cmp != null)
                    {
                        Dictionary <int, Vertex> interModalVerts = new Dictionary <int, Vertex>();
                        foreach (var vtx in overlap.Vertices)
                        {
                            interModalVerts[vtx.Id] = vtx;
                        }

                        Dictionary <int, int> cmpVerts = new Dictionary <int, int>();

                        foreach (var edge in cmp.Edges)
                        {
                            var v1 = rvms[edge.V1];
                            var v2 = rvms[edge.V2];

                            cmpVerts[edge.V1] = edge.V1;
                            cmpVerts[edge.V2] = edge.V2;

                            double diff = edge.M1 - edge.M2;
                            double pval = ((double)edge.RightTailCount) / ((double)overlap.Permutations);

                            CmpEdges.Add(new EdgeResult {
                                V1 = v1.ROI.Name, V2 = v2.ROI.Name, Diff = diff, PVal = pval
                            });
                        }

                        AXPlotModel = LoadGraph(rvms, cmpVerts, cmp.Edges, r => r.X, r => r.Y);
                        SGPlotModel = LoadGraph(rvms, cmpVerts, cmp.Edges, r => (100 - r.Y), r => r.Z);
                        CRPlotModel = LoadGraph(rvms, cmpVerts, cmp.Edges, r => r.X, r => r.Z);

                        CmpPValue = "p" + (((double)cmp.RightTailExtentCount) / ((double)overlap.Permutations)).ToString("0.0000");

                        var itms = from v in cmpVerts.Values orderby v select v;
                        foreach (var vert in itms)
                        {
                            if (!interModalVerts.ContainsKey(vert))
                            {
                                CmpNodes.Add(new NodeResult()
                                {
                                    Name = rvms[vert].ROI.Name, Id = rvms[vert].ROI.Index
                                });
                            }
                        }
                    }
                }
            }
            else
            {
                Dictionary <int, int> cmpVerts = new Dictionary <int, int>();

                var nodes = from v in overlap.Vertices orderby v.Id select v;
                foreach (var node in nodes)
                {
                    cmpVerts[node.Id] = node.Id;
                    CmpNodes.Add(new NodeResult()
                    {
                        Name = rvms[node.Id].ROI.Name, Id = rvms[node.Id].ROI.Index, Count = node.RandomOverlapCount.ToString()
                    });
                }

                AXPlotModel = LoadGraph(rvms, cmpVerts, null, r => r.X, r => r.Y);
                SGPlotModel = LoadGraph(rvms, cmpVerts, null, r => (100 - r.Y), r => r.Z);
                CRPlotModel = LoadGraph(rvms, cmpVerts, null, r => r.X, r => r.Z);

                CmpPValue = "p" + (((double)overlap.RightTailOverlapCount) / ((double)overlap.Permutations)).ToString("0.0000");
            }
        }