/// <summary>
/// Calculate Fluctuation Index, which is defined as (Vmax-Vmin)/7, Vmax and Vmin are the maximum and minimum values in the past 7 days
/// </summary>
private void CalculateFluctuationIndex(List<AFAttribute> leafValueAttributes)
{
var timeRange = new AFTimeRange(_programStartTime.AddDays(-7), _programStartTime);
var results = SummarizeAttributes(leafValueAttributes, attributeList =>
{
try
{
return attributeList.Data.Summary(
timeRange: timeRange,
summaryTypes: AFSummaryTypes.Range,
calculationBasis: AFCalculationBasis.EventWeighted,
timeType: AFTimestampCalculation.Auto,
pagingConfig: _pagingConfig).ToList();
}
catch (OperationCanceledException)
{
Console.WriteLine("Exception reported at CalculateFluctuationIndex : {0}", _pagingConfig.Error);
throw _pagingConfig.Error;
}
});
var orderedResults = results
.Select(d => d[AFSummaryTypes.Range])
.Where(v => v.IsGood)
.Select(v => Tuple.Create(v.Attribute.Element.Name, Convert.ToSingle(v.Value) / 7))
.OrderBy(t => t.Item1);
using (StreamWriter writer = new StreamWriter(FluctuationIndexReportFile + _programStartTime.ToString("_MMddyyyy_HHmm") + @".csv", true))
{
writer.WriteLine(@"Name, Fluctuation Index");
foreach (var elementNameAndValue in orderedResults)
{
writer.WriteLine(String.Format("{0}, {1}", elementNameAndValue.Item1, elementNameAndValue.Item2.ToString()));
}
}
}