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 }
// 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)); }
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)); }