LeafGasComparison extract single curve for optimization
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user