/// <summary> /// Summarize the current data set producing one row per key value (e.g. CompoundId) /// </summary> /// <param name="sumMethod"></param> /// <param name="outputFormat"></param> /// <param name="targetMap"></param> /// <returns></returns> public QueryManager Summarize( TargetAssaySummarizationLevel sumLevel, SummarizationType sumMethod, ColumnsToTransform colsToSumm, OutputDest outputDest, TargetMap targetMap) { //if (UnpivotedResults) return SummarizeUnpivoted(sumLevel, sumMethod, outputDest, targetMap); //else return SummarizePivoted(sumLevel, sumMethod, colsToSumm, outputDest, targetMap); throw new NotImplementedException(); }
/// <summary> /// Summarize unpivoted unsummarized assay data by target /// </summary> /// <param name="parms"></param> /// <param name="qm2"></param> /// <returns></returns> public QueryManager SummarizeByTargetUnpivoted( TargetSummaryOptions summaryOptions, QueryManager qm2) { // This method takes an unpivoted input query, summarizes it according to the summarization parameters // and then formats the summarized data according to the specified output format. // If a targetMap is specified then then coordinates are included in the output, the summarization // level must be target, and the output format must be unpivoted. QueryTable qt, qt2; DataRowMx dr, dr2; DataRowAttributes dra; string cid = "", currentCid; int rti, rfi; AssayDict tad = TargetAssayDict; // be sure target assay dict has been loaded TargetAssaySummarizationLevel sumLevel = TargetAssaySummarizationLevel.Target; // target level SummarizationType sumMethod = summaryOptions.UseMeans ? SummarizationType.BioResponseMean : SummarizationType.MostPotent; OutputDest outputDest = OutputDest.WinForms; TargetMap targetMap = TargetMapDao.GetMapWithCoords(summaryOptions.TargetMapName); qt = Query.GetQueryTableByName(MultiDbAssayDataNames.CombinedNonSumTableName); if (qt == null) { throw new Exception("Query table not found: " + MultiDbAssayDataNames.CombinedNonSumTableName); } UnpivotedAssayResultFieldPositionMap voMap = UnpivotedAssayResultFieldPositionMap.NewOriginalMap(); // used for fast indexing of value by col name voMap.InitializeFromQueryTableVoPositions(qt, 0); if (qm2 == null) // need to create query manager? { qm2 = new QueryManager(); qm2 = InitializeSubqueryQm(MultiDbAssayDataNames.CombinedNonSumTableName); } Query q2 = qm2.Query; qt2 = q2.GetQueryTableByNameWithException(MultiDbAssayDataNames.BaseTableName); UnpivotedAssayResultFieldPositionMap voMap2 = UnpivotedAssayResultFieldPositionMap.NewOriginalMap(); // used for fast indexing of value by col name voMap2.InitializeFromQueryTableVoPositions(qt2, 0); // Summarize rows & store in DataSet qm2.DataTable.Clear(); Dictionary <string, object> includedTargets = null; if (summaryOptions.TargetsWithActivesOnly) { // scan data & make a list of targets to be included includedTargets = new Dictionary <string, object>(); // ... } List <UnpivotedAssayResult> tars = new List <UnpivotedAssayResult>(); // build list of TA rows here currentCid = ""; for (int dri = 0; dri <= DataTableMx.Rows.Count; dri++) { if (dri < DataTableMx.Rows.Count) { dr = DataTableMx.Rows[dri]; cid = dr[KeyValueVoPos] as string; dra = GetRowAttributes(dr); if (dra != null && dra.Filtered) { continue; } if (currentCid == "") { currentCid = cid; } } else { dr = null; } if (dr == null || cid != currentCid) { // summarize rows for current cid & add to new datatable if (tars.Count > 0) // { List <UnpivotedAssayResult> sumTars = TargetAssayUtil.SummarizeData( tars, sumLevel, sumMethod, true, NullValue.NullNumber, NullValue.NullNumber, targetMap); int voLength2 = qm2.DataTable.Columns.Count; foreach (UnpivotedAssayResult sumTar in sumTars) { object[] vo2 = sumTar.ToValueObject(voLength2, voMap2); dr2 = qm2.DataTable.NewRow(); dr2.ItemArrayRef = vo2; // copy ref for efficiency since vo won't be changed qm2.DataTable.Rows.Add(dr2); } } if (dr == null) { break; } tars.Clear(); currentCid = cid; } UnpivotedAssayResult tar = UnpivotedAssayResult.FromValueObjectNew(dr.ItemArray, voMap); tars.Add(tar); // store in form for summarization } qm2.DataTableManager.InitializeRowAttributes(); return(qm2); }
/// <summary> /// Summarize pivoted data /// </summary> /// <param name="sumLevel"></param> /// <param name="sumMethod"></param> /// <returns></returns> public QueryManager SummarizePivoted( TargetAssaySummarizationLevel sumLevel, SummarizationType sumMethod, ColumnsToTransform colsToSumm, OutputDest outputDest, TargetMap targetMap) { QueryManager qm2; QueryTable qt; DataRow dr, dr2; DataRowAttributes dra; string cid = "", currentCid; int rti, rfi; qm2 = InitializeSubqueryQm(MultiDbAssayDataNames.CombinedNonSumTableName); #if false // Get the data for a compound, summarize & add results to data for charting DataTableManager dtm = Qm0.DataTableManager; for (int dri = 0; dri < dtm.DataTable.Rows.Count; dri++) { DataRow dr = dtm.DataTable.Rows[dri]; DataRowAttributes dra = GetRowAttributes(dr); string keyVal = dr[KeyValueVoPos] as string; if (keyVal != curKeyVal || Rf.Tables.Count <= 1) // going to new key { curKeyVal = keyVal; curKeyRow = dri; rowsForKey = 0; } rowsForKey++; object o = dr[dci]; // if (o is string && ((string)o) == "") o = o; // debug if (NullValue.IsNull(o)) { if (rowsForKey == 0 || // count as null if first row for key dra.TableRowState[colInfo.TableIndex] != RowStateEnum.Undefined) // or real row data but col is null { stats.NullsExist = true; } continue; } else if (o is MobiusDataType) { // create a MobiusDataType that we can point to o = MobiusDataType.New(o); dr[dci] = o; } MobiusDataType val = o as MobiusDataType; try { if (val.FormattedText == null) // get formatted text if not done yet { val = QueryManager.ResultsFormatter.FormatField(rt, ti, rfld, fi, dr, dri, val, -1, false); } dictKey = val.FormattedText.ToUpper(); if (!stats.DistinctValueDict.ContainsKey(dictKey)) { DistinctValueAndPosition dvp = new DistinctValueAndPosition(); dvp.Value = val; stats.DistinctValueDict[dictKey] = dvp; } } catch (Exception ex) { val = val; } } // row loop dtm.n #endif return(qm2); }