LeafGasComparison extract single curve for optimization

This commit is contained in:
2016-05-13 10:59:46 -04:00
parent dc573ff0bf
commit 48e7578de7
5 changed files with 750 additions and 15 deletions
+49 -4
View File
@@ -16,7 +16,7 @@ namespace LeafWeb.Core.Parsers
{
}
public LeafGasComparison[] Parse()
public LeafGasComparison[] Parse(string matchCurveId = null)
{
var fittingTitles = GetNextCsvRowValues();
if (fittingTitles == null)
@@ -25,18 +25,49 @@ namespace LeafWeb.Core.Parsers
if (fitUnits == null)
throw new ParseException($"Could not read data units row on line number {CsvReader.Row}");
return ParseLeafGasComparisonSet(fittingTitles).ToArray();
return ParseLeafGasComparisonSet(fittingTitles, matchCurveId).ToArray();
}
private IEnumerable<LeafGasComparison> ParseLeafGasComparisonSet(string[] fittingTitles)
public string[] ExtractCurveIds()
{
var matcher = new ParseInfoPropertyMatcher<LeafGasComparisonPhotosyntheticInfo>();
var fittingTitles = GetNextCsvRowValues();
if (fittingTitles == null)
throw new ParseException($"Could not read data header row on line number {CsvReader.Row}");
var fitUnits = GetNextCsvRowValues();
if (fitUnits == null)
throw new ParseException($"Could not read data units row on line number {CsvReader.Row}");
return ExtractSectionCurveIds(fittingTitles).Distinct().ToArray();
}
private IEnumerable<string> ExtractSectionCurveIds(string[] fittingTitles)
{
string[] values;
do
{
values = GetNextCsvRowValues();
if (values == null)
yield break;
var fittingInfo = ParsedObjectFactory<LeafGasComparisonFittingInfo>
.Create(fittingTitles, new[] {values});
yield return fittingInfo[0].CurveID;
while (!CsvReader.IsRecordEmpty())
values = GetNextCsvRowValues();
} while (values != null);
}
private IEnumerable<LeafGasComparison> ParseLeafGasComparisonSet(string[] fittingTitles, string matchCurveId = null)
{
var matcher = new ParseInfoPropertyMatcherWithCache<LeafGasComparisonPhotosyntheticInfo>();
var endOfFile = false;
while (!endOfFile)
{
// First Section
var fittingValues = new List<string[]>();
string[] photosyntheticTitles;
string curveId = null;
while (true)
{
var values = GetNextCsvRowValues();
@@ -50,6 +81,15 @@ namespace LeafWeb.Core.Parsers
break;
}
fittingValues.Add(values);
// extract the curveId
if (!string.IsNullOrEmpty(matchCurveId) && curveId == null)
{
var testFittingInfo =
ParsedObjectFactory<LeafGasComparisonFittingInfo>
.Create(fittingTitles, fittingValues.ToArray());
curveId = testFittingInfo[0].CurveID;
}
}
var photosyntheticValues = new List<string[]>();
@@ -66,9 +106,14 @@ namespace LeafWeb.Core.Parsers
photosyntheticValues.Add(values);
}
// don't parse the values if it's not the curve we're wanting
if (!string.IsNullOrEmpty(matchCurveId) && curveId != matchCurveId)
continue;
var fittingInfo =
ParsedObjectFactory<LeafGasComparisonFittingInfo>
.Create(fittingTitles, fittingValues.ToArray());
var photosyntheticInfo =
ParsedObjectFactory<LeafGasComparisonPhotosyntheticInfo>
.Create(photosyntheticTitles, photosyntheticValues.ToArray());