private CalEntry GetValue(decimal f, int g) { // try to get a CalEntry for given f and g // // TO BE DONE: // // bilinear interpolation of values! // // until now a value is found when f and g are matching exactly CalGains gains = null; CalEntry e = null; if (!cf.TryGetValue(f, out gains)) { return(null); } if (!gains.TryGetValue(g, out e)) { return(null); } return(e); }
private void SetValue(decimal f, int g, CalEntry value) { // try to set a CalEntry for given f and g // // TO BE DONE: // // handle different values for ENR! // until now it is assumed that all entries of given f and g are made with the same ENR value // CalGains gains = null; CalEntry e = null; // try to find a CalGains entry for a given f if (cf.TryGetValue(f, out gains)) { // CalGains entry found // try to find a CalEntry for given g if (gains.TryGetValue(g, out e)) { // CalEntry found // add values to existing e.P_OFF.AddSample(value.P_OFF.Average); e.P_ON.AddSample(value.P_ON.Average); // try to calculate rest of values try { e.Y = e.P_ON.Average / e.P_OFF.Average; e.F = value.ENR / (e.Y - 1); } catch { e.Y = 1; e.F = 1; } } else { // CalEntry not found --> generate and add new one e = new CalEntry(Averaging); e.Invalid = value.Invalid; e.Frequency = value.Frequency; e.TunerGain = value.TunerGain; e.P_OFF.AddSample(value.P_OFF.Average); e.P_ON.AddSample(value.P_ON.Average); e.ENR = value.ENR; // try to calculate rest of values try { e.Y = e.P_ON.Average / e.P_OFF.Average; e.F = value.ENR / (e.Y - 1); } catch { e.Y = 1; e.F = 1; } gains.Add(g, e); // maintain properties if (e.Frequency < _minfrequency) { _minfrequency = e.Frequency; } if (e.Frequency > _maxfrequency) { _maxfrequency = e.Frequency; } if (e.TunerGain < _mingain) { _mingain = e.TunerGain; } if (e.TunerGain > _maxgain) { _maxgain = e.TunerGain; } } } else { // CalGains entry not found --> generate new one from scratch gains = new CalGains(); // add CallEntry first // CalEntry not found --> add new one e = new CalEntry(Averaging); e.Invalid = value.Invalid; e.Frequency = value.Frequency; e.TunerGain = value.TunerGain; e.P_OFF.AddSample(value.P_OFF.Average); e.P_ON.AddSample(value.P_ON.Average); e.ENR = value.ENR; // try to calculate rest of values try { e.Y = e.P_ON.Average / e.P_OFF.Average; e.F = e.ENR / (e.Y - 1); } catch { e.Y = 1; e.F = 1; } gains.Add(g, e); // maintain properties if (e.Frequency < _minfrequency) { _minfrequency = e.Frequency; } if (e.Frequency > _maxfrequency) { _maxfrequency = e.Frequency; } if (e.TunerGain < _mingain) { _mingain = e.TunerGain; } if (e.TunerGain > _maxgain) { _maxgain = e.TunerGain; } // add CalGains to list cf.Add(f, gains); } }