예제 #1
0
        private void SetDetailTabSequence(Sample s, char type, string segment, int splitIdx, ref ResultsTabProperties tabProperty)
        {
            var dbValueObj = s.GetType()
                             .GetProperty(type + "_" + segment)            // A_HA に コンセンサス配列が入って居る
                             .GetValue(s);
            var dbValue = dbValueObj == null ? string.Empty : dbValueObj.ToString();
            var seqs    = dbValue.Split(ConstantValues.DbDelimiter);

            var detailseq = seqs.Length < 3 ? string.Empty :  seqs.ElementAt(splitIdx).ToUpper();

            tabProperty.GetType()
            .GetProperty(segment + detailTabSequence)                     // HAseq
            .SetValue(tabProperty, detailseq);

            // inc-N
            var nuc  = detailseq.TrimStart(nucleotideN).TrimEnd(nucleotideN);
            var incN = nuc.Contains(nucleotideN) ? nucleotideN.ToString() : string.Empty;

            // var nucChars = "[^AGCTN]";
            var altNucsMath = Regex.Matches(nuc, @"[^AGCTN]"); // IUPAC のときはR 表示?

            incN += altNucsMath.Any() ?  "R" : string.Empty;
            tabProperty.GetType()
            .GetProperty(segment + detailTabIncludeN)                     // HAinc
            .SetValue(tabProperty, incN);

            // tablet 起動時のパラメータ
            tabProperty.GetType()
            .GetProperty(segment + detailTabAlign)                                                                               // HAalign
            .SetValue(tabProperty,
                      type + ConstantValues.ViewDelimiter + segment + ConstantValues.ViewDelimiter + (splitIdx + 1).ToString()); // A-HA-1
        }
예제 #2
0
        // 2020.10.25 DetailTab変更に伴い修正。
        private void SetSampleDetail(Sample s)
        {
            // Listで選択されたサンプル情報を更新
            this.sampleId = s.ID;
            SampleName    = s.NAME;
            ExecDate      = s.DATE;
            CallType      = s.TYPE + " (" + s.SUBTYPE + ")";
            ViewName      = s.VIEW_NAME;

            if (s.TYPE == Proc.Flow.CommonFlow.TYPE_A_STR)
            {
                SubTypes = "ha:(" + s.A_HA_CALL + ") na:(" + s.A_NA_CALL + ")";
            }
            else
            {
                SubTypes = string.Empty;                        // // 2018.12.18 Bの時に詳細は不要。
            }
            var detailTabs = new List <ResultsTabProperties>(); // 6-tab 分
                                                                // include-N 必ず nuc-sequence をセットした後に行う。  配列の真ん中にNが含まれてるかを表示 2019.09.24

            // divid の順番大事。 viewとdbの対応
            var dividPair = new Dictionary <string, string>()
            {
                { detailTabRatio, ConstantValues.DbPropertyPrefixCoverRatio },
                { detailTabAverage, ConstantValues.DbPropertyPrefixCoverAvarage },
                { detailTabCds, ConstantValues.DbPropertyPrefixCdsRegion },
                { detailTabSequence, string.Empty }
            };

            foreach (var type in CommonFlow.VIRUS_TYPES)
            {
                foreach (var idx in Enumerable.Range(1, 3))
                {
                    var tabDetail = new ResultsTabProperties(mainLog)
                    {
                        TabName          = type + idx,
                        SelectedSampleId = this.sampleId
                    }; // tab 1個分

                    foreach (var divid in dividPair)
                    {
                        foreach (var segment in CommonFlow.SEGMENTS)
                        {
                            if (string.IsNullOrEmpty(divid.Value))
                            {
                                SetDetailTabSequence(s, type.Last(), segment, idx - 1, ref tabDetail); // consensus sequence ....
                            }
                            else
                            {
                                SetDetailTab(s, type.Last(), segment, divid, idx - 1, ref tabDetail);  // ratio ave ....
                            }
                        }
                    }
                    detailTabs.Add(tabDetail);
                }
            }
            this.SampleTabs = detailTabs;
            RaisePropertyChanged(nameof(SampleTabs));
            this.TabIndex = 0;
            RaisePropertyChanged(nameof(TabIndex));
        }
예제 #3
0
        private void SetDetailTab(Sample s, char type, string segment, KeyValuePair <string, string> divid, int splitIdx, ref ResultsTabProperties tabProperty)
        {
            // Sample Property ; COVER_RATIO_A_HA とか
            var dbPropartyName = divid.Value + type + "_" + segment; // COVER_RATIO_A_HA とか
            var dbValueObj     = s.GetType().GetProperty(dbPropartyName).GetValue(s);
            var dbValue        = dbValueObj == null ? string.Empty : dbValueObj.ToString();

            if (string.IsNullOrEmpty(dbValue) ||
                dbValue.Split(ConstantValues.DbDelimiter).Length <= splitIdx ||
                string.IsNullOrEmpty(dbValue.Split(ConstantValues.DbDelimiter).ElementAt(splitIdx)) ||
                dbValue.Split(ConstantValues.DbDelimiter).ElementAt(splitIdx) == "0")
            {  // DB の中に 値を持っていない。
                switch (divid.Key)
                {
                case detailTabRatio:
                case detailTabAverage:
                    dbValue = ConstantValues.DbDefaultFloatValue;
                    break;

                case detailTabSequence:
                case detailTabIncludeN:
                    dbValue = string.Empty;
                    break;

                case detailTabCds:
                    dbValue = ConstantValues.ViewDelimiter;
                    break;
                }
                // default value set.
                tabProperty.GetType().GetProperty(segment + divid.Key)
                .SetValue(tabProperty, dbValue);
                return;
            }

            // db に正常値。
            tabProperty.GetType().GetProperty(segment + divid.Key)
            .SetValue(tabProperty,
                      dbValue.Split(ConstantValues.DbDelimiter).ElementAt(splitIdx));
        }