public ToMethodBinding(InvokeOnChangeAttribute bindingAttribute, IUUTBindingObject source, IUUTBindingObject resultObject, ResultAttribute resultAttribute) { BindingAttribute = bindingAttribute; Source = source; ResultObject = resultObject; ResultAttribute = resultAttribute; }
/// <summary> /// Test whether the compound group passes the threshold cutoff for a given compound ResultAttribute /// </summary> /// <param name="cg"></param> /// <param name="valueAttr"></param> /// <param name="threshold"></param> /// <returns></returns> private bool TestFilter(ICompoundGroup cg, ResultAttribute valueAttr, double threshold) { // set up algorithm specific filter parameters var filterMode = m_psetFilters.FrequencyGroupMFE; var freqMode = m_psetFilters.FrequencyFilterModeMFE; var freqMin = m_psetFilters.FrequencyMinMFE; var pctMin = m_psetFilters.FrequencyMinPctMFE; // get a structure of compound groups grouped by sample group var sgGroups = cg.GroupBy(kvp => m_sampleGroupDict[kvp.Key], kvp => kvp.Value); switch (filterMode) { case CpdGroupFilterMode.AllSamples: // the frequency pass cutoff must be met across all samples if (freqMode == CpdGroupFrequencyFilterMode.PctOfFiles) { freqMin = m_sampleGroupDict.Count * pctMin / 100; } return(cg.Values .Where(c => c.HasValue(valueAttr)) .Count(c => (double)c.Value(valueAttr) >= threshold) >= freqMin); case CpdGroupFilterMode.SamplesInEachGroup: // the frequency pass cutoff must be met within every sample group foreach (var sg in sgGroups) { var sgFreq = sg.Where(c => c.HasValue(valueAttr)) .Count(c => (double)c.Value(valueAttr) >= threshold); if (freqMode == CpdGroupFrequencyFilterMode.PctOfFiles) { freqMin = m_sampleGroupDict.Count(g => g.Value == sg.Key) * pctMin / 100; } if (sgFreq < freqMin) { return(false); } } return(true); case CpdGroupFilterMode.SamplesInOneGroup: // the frequence pass cutoff must be met within at least one sample group foreach (var sg in sgGroups) { var sgFreq = sg.Where(c => c.HasValue(valueAttr)) .Count(c => (double)c.Value(valueAttr) >= threshold); if (freqMode == CpdGroupFrequencyFilterMode.PctOfFiles) { freqMin = m_sampleGroupDict.Count(g => g.Value == sg.Key) * pctMin / 100; } if (sgFreq >= freqMin) { return(true); } } return(false); default: return(true); } }