Leaf Input Parsing complete

This commit is contained in:
2015-11-20 11:39:23 -05:00
parent 750b2aee7b
commit 1fb73b9f76
26 changed files with 1294 additions and 1 deletions
+80
View File
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{8207F6FE-EA80-41CA-81B5-ACD020FB0F3C}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LeafWeb.Core.Tests</RootNamespace>
<AssemblyName>Core.Tests</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="nunit.framework, Version=3.0.5797.27534, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.0.0\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\LeafInputCsvParserTests.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<Content Include="Services\LeafInputData\LeafInput-valid.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Services\LeafInputData\LeafInput-titlesRemoved.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Services\LeafInputData\LeafInput-incompleteRows.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Services\LeafInputData\LeafInput-noData.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="Services\LeafInputData\LeafInput-tabSeparated.csv" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<ProjectReference Include="..\Core\Core.csproj">
<Project>{25BAED75-7E75-4D11-90D9-358472054DF6}</Project>
<Name>Core</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+2
View File
@@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Services_005CLeafInputData/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
+36
View File
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Core.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Core.Tests")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("78716ff3-35e2-4b92-a475-b222851a5c90")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,160 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using LeafWeb.Core.Models;
using LeafWeb.Core.Services;
using NUnit.Framework;
namespace LeafWeb.Core.Tests.Services
{
[TestFixture]
public class LeafInputCsvParserTests
{
private const string LeafInputFolder = @"Services\LeafInputData\";
[Test]
public void Parse_Valid()
{
var fileInfo = new FileInfo(LeafInputFolder + "LeafInput-valid.csv");
var leafInput = new LeafInputCsvParser(fileInfo);
var input = leafInput.Parse();
Assert.That(input.InvestigatorName, Is.EqualTo("Valid Name"));
Assert.That(input.ContactInformation, Is.EqualTo("validname@ornl.gov"));
Assert.That(input.SiteName, Is.EqualTo("FACE"));
Assert.That(input.VegetationType, Is.EqualTo("tropical forest"));
Assert.That(input.SoilType, Is.EqualTo("dense soil"));
Assert.That(input.MajorSpecies, Is.EqualTo("Tulip Poplar, Oak"));
Assert.That(input.SampleLeafLightEnv, Is.EqualTo("heavily shaded from above"));
Assert.That(input.WaterStressAssessment, Is.EqualTo("Little to no stress"));
Assert.That(input.InstrumentUsed, Is.EqualTo("Licor-6400"));
Assert.That(input.ExtraInfo, Is.EqualTo("dear01"));
var site = input.Site;
Assert.That(site.SiteID, Is.EqualTo("Metropolitano"));
Assert.That(site.Latitude, Is.EqualTo(8.98333));
Assert.That(site.Longitude, Is.EqualTo(-79.55));
Assert.That(site.Elevation, Is.Null);
Assert.That(site.SampleYear, Is.EqualTo(2013));
Assert.That(site.SampleDayOfYear, Is.EqualTo(22));
Assert.That(site.GrowSeasonStart, Is.Null);
Assert.That(site.GrowSeasonEnd, Is.Null);
Assert.That(site.StandAge, Is.Null);
Assert.That(site.CanopyHeight, Is.Null);
Assert.That(site.LeafAreaIndex, Is.Null);
Assert.That(site.SpeciesSampled, Is.EqualTo("Dendropanax_arboreus"));
Assert.That(site.AverageTimeResolution, Is.Null);
Assert.That(site.SampleHeight, Is.Null);
Assert.That(site.LeafAge, Is.Null);
Assert.That(site.SpecificLeafArea, Is.EqualTo(245.5609363));
Assert.That(site.LfNitrogenContent, Is.EqualTo(2.19));
Assert.That(site.LfCarbonContent, Is.EqualTo(46.03));
Assert.That(site.LfPhosphContent, Is.EqualTo(0.129929353));
//Assert.That(site.WoodPorosity, Is.Null);
//Assert.That(site.SapWoodDensity, Is.Null);
var photosynthetic = input.Photosynthetic;
Assert.That(photosynthetic.GammaStar, Is.EqualTo(1.2));
Assert.That(photosynthetic.Kc, Is.EqualTo(2.3));
Assert.That(photosynthetic.Ko, Is.EqualTo(3.4));
Assert.That(photosynthetic.Alpha, Is.EqualTo(4.5));
Assert.That(photosynthetic.Rd, Is.EqualTo(6.5));
Assert.That(photosynthetic.gi, Is.EqualTo(4.3));
var data = input.Data;
Assert.That(data.Count(), Is.GreaterThan(2));
var dataItem = data.First();
Assert.That(dataItem.Obs, Is.EqualTo(2));
Assert.That(dataItem.HHMMSS, Is.EqualTo("11:26:17"));
Assert.That(dataItem.FTime, Is.EqualTo(681.5));
Assert.That(dataItem.Photo, Is.EqualTo(6.707855907));
Assert.That(dataItem.AdjPhoto, Is.EqualTo(6.707855907));
Assert.That(dataItem.StomCond, Is.EqualTo(0.066161416));
Assert.That(dataItem.Ci, Is.EqualTo(185.9999057));
Assert.That(dataItem.Trmmol, Is.EqualTo(0.936751155));
Assert.That(dataItem.VpdL, Is.EqualTo(1.386027641));
Assert.That(dataItem.Area, Is.EqualTo(2));
Assert.That(dataItem.StmRat, Is.EqualTo(1));
Assert.That(dataItem.BLCond, Is.EqualTo(9.289719582));
Assert.That(dataItem.Tair, Is.EqualTo(29.09575272));
Assert.That(dataItem.Tleaf, Is.EqualTo(29.91356087));
Assert.That(dataItem.TBlk, Is.EqualTo(28.63459015));
Assert.That(dataItem.CO2R, Is.EqualTo(360.0646362));
Assert.That(dataItem.CO2S, Is.EqualTo(355.3765869));
Assert.That(dataItem.H2OR, Is.EqualTo(27.71545029));
Assert.That(dataItem.H2OS, Is.EqualTo(28.32151604));
Assert.That(dataItem.RH_R, Is.EqualTo(69.04498291));
Assert.That(dataItem.RH_S, Is.EqualTo(70.5548172));
Assert.That(dataItem.Flow, Is.EqualTo(300.3703613));
Assert.That(dataItem.PARi, Is.EqualTo(500.4228821));
Assert.That(dataItem.PARo, Is.EqualTo(23.31687355));
Assert.That(dataItem.Press, Is.EqualTo(100.7472458));
Assert.That(dataItem.CsMch, Is.EqualTo(1.491710782));
Assert.That(dataItem.HsMch, Is.EqualTo(10.9474802));
Assert.That(dataItem.StableF, Is.EqualTo(0.5));
Assert.That(dataItem.Status, Is.EqualTo("111115"));
Assert.That(dataItem.PhiPS2, Is.Null);
Assert.That(dataItem.OxygenPress, Is.Null);
}
[Test]
public void Parse_TitlesRemoved()
{
var fileInfo = new FileInfo(LeafInputFolder + "LeafInput-titlesRemoved.csv");
var leafInput = new LeafInputCsvParser(fileInfo);
var input = leafInput.Parse();
Assert.That(input.InvestigatorName, Is.EqualTo("Valid Name"));
Assert.That(input.ContactInformation, Is.EqualTo("validname@ornl.gov"));
Assert.That(input.SiteName, Is.EqualTo("FACE"));
Assert.That(input.VegetationType, Is.EqualTo("tropical forest"));
Assert.That(input.SoilType, Is.EqualTo("dense soil"));
Assert.That(input.MajorSpecies, Is.EqualTo("Tulip Poplar, Oak"));
Assert.That(input.SampleLeafLightEnv, Is.EqualTo("heavily shaded from above"));
Assert.That(input.WaterStressAssessment, Is.EqualTo("Little to no stress"));
Assert.That(input.InstrumentUsed, Is.EqualTo("Licor-6400"));
Assert.That(input.ExtraInfo, Is.EqualTo("dear01"));
}
[Test]
public void Parse_IncompleteRows()
{
var fileInfo = new FileInfo(LeafInputFolder + "LeafInput-incompleteRows.csv");
var parser = new LeafInputCsvParser(fileInfo);
Assert.That(() => parser.Parse(), Throws.TypeOf<ParseException>());
}
[Test]
public void Parse_NoData()
{
var fileInfo = new FileInfo(LeafInputFolder + "LeafInput-noData.csv");
var parser = new LeafInputCsvParser(fileInfo);
var input = parser.Parse();
}
[Test, Explicit]
public void Parse_FindIssues()
{
var dir = @"C:\Users\poprhythm\Documents\code\LeafWeb\Notes\leafweb database work\newcurves\RemovableDisk\curves";
var files = Directory.GetFiles(dir, "*.csv").Select(f => new FileInfo(f));
var leafInputs = new List<LeafInput>();
foreach (var file in files)
{
try
{
var parser = new LeafInputCsvParser(file);
var leafInput = parser.Parse();
leafInputs.Add(leafInput);
//Console.WriteLine("{0}, {1}, {2}", leafInput.FileName, leafInput.InvestigatorName, leafInput.ContactInformation);
}
catch (Exception ex)
{
Console.WriteLine("{1} : {0}", ex.Message, file.Name);
}
}
LeafInputCsvParser.ExportCsv(@"C:\Temp\test.csv", leafInputs);
}
}
}
@@ -0,0 +1,7 @@
Investigator name: Valid Name,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Contact information: validname@ornl.gov,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Site name in full: FACE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Vegetation type: tropical forest,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Soil type: dense soil,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"Major species: Tulip Poplar, Oak",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sample leaf light environment: heavily shaded from above,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1 Investigator name: Valid Name
2 Contact information: validname@ornl.gov
3 Site name in full: FACE
4 Vegetation type: tropical forest
5 Soil type: dense soil
6 Major species: Tulip Poplar, Oak
7 Sample leaf light environment: heavily shaded from above
@@ -0,0 +1,18 @@
Investigator name: Nick Smith,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Contact information: ngsmith@purdue.edu,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Site name in full: Purdue Growth Chamber,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Vegetation type: NA,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Soil type: Field Mixture,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Major species: NA,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sample leaf light environment: Chamber light (~1000 PAR),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Water stress assessment: No water stress,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Instrument used: Licor-6400,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Extra info:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SiteID,Latitude(Degrees),Longitude(Degrees),Elevation,SampleYear,SampleDayOfYear,GrowSeasonStart,GrowSeasonEnd,StandAge,CanopyHeight,LeafAreaIndex,SpeciesSampled,AveTimeResolution,SampleHeight,LeafAge,SpecificLeafArea,LfNitrogenContent,LfCarbonContent,LfPhosphContent,,,,,,,,,,,,
NoUnit,NorthPositive,EastPositive,m,NoUnit,DayOfYear,DayOfYear,DayOfYear,Year,m,m2/m2,NoBlankSpace,Minutes,m,days,cm2/g,%,%,%,,,,,,,,,,,,
NA,NA,NA,NA,2012,252,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,,,,,,,,,,,,
Gamma*,Kc,Ko,Alpha,Rd,gi,,,,,,,,,,,,,,,,,,,,,,,,,
Pa,Pa,Pa,NoUnit,umol/m2/s,umol/m2/s/Pa,,,,,,,,,,,,,,,,,,,,,,,,,
-9999,-9999,-9999,-9999,0.822,-9999,,,,,,,,,,,,,,,,,,,,,,,,,
Obs,HHMMSS,FTime,Photo,!AdjPhoto,!StomCond,!Ci,!Trmmol,!VpdL,Area,StmRat,BLCond,Tair,!Tleaf,TBlk,CO2R,CO2S,H2OR,H2OS,RH_R,RH_S,Flow,!PARi,PARo,Press,CsMch,HsMch,StableF,Status,PhiPS2,OxygenPress
NoUnit,HHMMSS,Second,umol/m2/s,umol/m2/s,mol/m2/s,umol/mol,mmol/m2/s,kPa,cm2,NA,mol/m2/s,oC,oC,oC,umol/mol,umol/mol,mmol/mol,mmol/mol,%,%,umol/s,umol/m2/s,umol/m2/s,Kpa,umol/mol,mmol/mol,NA,NA,NA,KPA
1 Investigator name: Nick Smith
2 Contact information: ngsmith@purdue.edu
3 Site name in full: Purdue Growth Chamber
4 Vegetation type: NA
5 Soil type: Field Mixture
6 Major species: NA
7 Sample leaf light environment: Chamber light (~1000 PAR)
8 Water stress assessment: No water stress
9 Instrument used: Licor-6400
10 Extra info:
11 SiteID Latitude(Degrees) Longitude(Degrees) Elevation SampleYear SampleDayOfYear GrowSeasonStart GrowSeasonEnd StandAge CanopyHeight LeafAreaIndex SpeciesSampled AveTimeResolution SampleHeight LeafAge SpecificLeafArea LfNitrogenContent LfCarbonContent LfPhosphContent
12 NoUnit NorthPositive EastPositive m NoUnit DayOfYear DayOfYear DayOfYear Year m m2/m2 NoBlankSpace Minutes m days cm2/g % % %
13 NA NA NA NA 2012 252 NA NA NA NA NA NA NA NA NA NA NA NA NA
14 Gamma* Kc Ko Alpha Rd gi
15 Pa Pa Pa NoUnit umol/m2/s umol/m2/s/Pa
16 -9999 -9999 -9999 -9999 0.822 -9999
17 Obs HHMMSS FTime Photo !AdjPhoto !StomCond !Ci !Trmmol !VpdL Area StmRat BLCond Tair !Tleaf TBlk CO2R CO2S H2OR H2OS RH_R RH_S Flow !PARi PARo Press CsMch HsMch StableF Status PhiPS2 OxygenPress
18 NoUnit HHMMSS Second umol/m2/s umol/m2/s mol/m2/s umol/mol mmol/m2/s kPa cm2 NA mol/m2/s oC oC oC umol/mol umol/mol mmol/mol mmol/mol % % umol/s umol/m2/s umol/m2/s Kpa umol/mol mmol/mol NA NA NA KPA
@@ -0,0 +1,31 @@
"Investigator name: Nick Smith"
"Contact information: ngsmith@purdue.edu"
"Site name in full: Purdue Growth Chamber"
"Vegetation type: NA"
"Soil type: Field Mixture"
"Major species: NA"
"Sample leaf light environment: Chamber light (~1000 PAR)"
"Water stress assessment: No water stress"
"Instrument used: Licor-6400"
"Extra info: 7day acclimation at 20c"
"SiteID Latitude(Degrees) Longitude(Degrees) Elevation SampleYear SampleDayOfYear GrowSeasonStart GrowSeasonEnd StandAge CanopyHeight LeafAreaIndex SpeciesSampled AveTimeResolution SampleHeight LeafAge SpecificLeafArea LfNitrogenContent LfCarbonContent LfPhosphContent"
"NoUnit NorthPositive EastPositive m NoUnit DayOfYear DayOfYear DayOfYear Year m m2/m2 NoBlankSpace Minutes m days cm2/g % % %"
"NA NA NA NA 2014 282 NA NA NA NA NA Tamarindusindica NA NA NA 159.0634345 1.4 NA NA"
"Gamma* Kc Ko Alpha Rd gi"
"Pa Pa Pa NoUnit umol/m2/s umol/m2/s/Pa"
"-9999 -9999 -9999 -9999 2.189610949 -9999"
"Obs HHMMSS FTime Photo !AdjPhoto !StomCond !Ci !Trmmol !VpdL Area StmRat BLCond Tair !Tleaf TBlk CO2R CO2S H2OR H2OS RH_R RH_S Flow !PARi PARo Press CsMch HsMch StableF Status PhiPS2 OxygenPress"
"NoUnit HHMMSS Second umol/m2/s umol/m2/s mol/m2/s umol/mol mmol/m2/s kPa cm2 NA mol/m2/s oC oC oC umol/mol umol/mol mmol/mol mmol/mol % % umol/s umol/m2/s umol/m2/s Kpa umol/mol mmol/mol NA NA NA KPA"
"66 17:38:55 16298.00005 -0.215426597 -0.215426597 0.007774086 387.5601933 0.691837268 8.326482961 5.265 0.5 2.523228275 48.75154114 46.73216629 49.93317795 399.3782959 399.2714844 20.96022415 22.1486187 17.9028511 18.91743469 299.7191772 1199.456543 43.07281876 99.64649963 2.999198914 1.05813694 1 111114 -9999 -9999"
"67 17:40:40 16402.50005 -0.505870892 -0.505870892 0.0085163 349.5536599 0.761887632 8.369241706 5.265 0.5 2.523228275 48.81954193 46.83860397 49.93241501 300.4419861 300.927887 20.98658371 22.29515648 17.88055229 18.97615433 299.7085876 1199.490479 43.07907867 99.6419754 3.762382507 1.066325188 1 111114 -9999 -9999"
"68 17:42:23 16505.00005 -0.718271361 -0.718271361 0.009213096 291.3857548 0.826080193 8.387930436 5.265 0.5 2.523228275 48.8538208 46.89636993 49.93274307 200.7705383 201.739502 21.00330162 22.42184448 17.87025642 19.0505619 299.7295837 1199.116821 44.01655579 99.63645935 4.080833435 1.060667992 1 111114 -9999 -9999"
"69 17:44:11 16613.00005 -0.991620268 -0.991620268 0.010095712 235.0120968 0.907467284 8.409155772 5.265 0.5 2.523228275 48.86945724 46.96108246 49.93239212 100.027565 101.6075668 21.003088 22.56126976 17.85757637 19.15289497 299.7096863 1199.012329 46.25364304 99.63273621 3.954681396 1.065255165 1 111114 -9999 -9999"
"70 17:46:46 16768.00005 -1.045282227 -1.045282227 0.011287996 183.1882237 1.009646387 8.371469809 5.265 0.5 2.523228275 48.87886429 46.92841721 49.93133163 49.55680847 51.30204773 21.0290432 22.76230049 17.87363815 19.3139534 299.7124939 1198.983521 43.66405487 99.6309967 3.677768707 1.070101738 1 111114 -9999 -9999"
"71 17:48:56 16898.50005 -0.358454456 -0.358454456 0.012415238 389.9600226 1.109333954 8.36545804 5.265 0.5 2.523228275 48.89009094 46.94281769 49.92983246 400.4476013 400.2972107 20.99722672 22.90138435 17.83179474 19.42071342 299.7065125 1198.709229 42.7310257 99.6289444 3.165927887 1.073033333 1 111114 -9999 -9999"
"72 17:50:04 16966.50005 -0.369359541 -0.369359541 0.012860315 389.0550121 1.148128169 8.359215055 5.265 0.5 2.523228275 48.89198303 46.94270706 49.9316597 399.6208496 399.4640198 20.9937439 22.96431923 17.82751465 19.47166443 299.7133789 1199.011597 46.73867416 99.62515259 3.196323395 1.071206093 1 111114 -9999 -9999"
"73 17:52:29 17111.50005 -0.000448038 -0.000448038 0.013857559 519.5473911 1.23260114 8.331337797 5.265 0.5 2.523228275 48.89042282 46.9200325 49.93070602 600.796814 599.4993896 21.00602722 23.12145042 17.84046745 19.60547066 299.6844788 1199.114502 43.48819351 99.62283325 1.873325348 1.067681313 1 111114 -9999 -9999"
"74 17:54:57 17259.50005 0.229358264 0.229358264 0.015404105 668.456214 1.363738633 8.29717668 5.265 0.5 2.523228275 48.89125443 46.88843155 49.92894745 799.0285034 796.7166748 20.95309639 23.29321289 17.76644516 19.75002861 299.6789551 1198.772827 42.78263092 99.6211319 0.459568024 1.070916176 1 111114 -9999 -9999"
"75 17:56:48 17370.50005 0.647329733 0.647329733 0.01610465 804.9132425 1.420754821 8.269994013 5.265 0.5 2.523228275 48.88961792 46.86376572 49.93006134 1001.105164 997.4780273 20.99555397 23.43319511 17.83556366 19.86952591 299.6744385 1199.096558 43.42731094 99.61750793 -1.527980804 1.074719429 1 111114 -9999 -9999"
"76 17:59:09 17511.50005 1.071500245 1.071500245 0.017460418 945.566887 1.535388617 8.246544404 5.265 0.5 2.523228275 48.89328766 46.85366821 49.93212891 1200.983765 1195.875977 20.98199844 23.61549187 17.82249069 20.01953888 299.7128296 1198.785034 45.1896286 99.61073303 -3.668849945 1.068657875 1 111114 -9999 -9999"
"77 18:01:35 17657.50005 1.609415729 1.609415729 0.019173401 1170.685812 1.674877491 8.197620033 5.265 0.5 2.523228275 48.88559723 46.80513382 49.93037033 1500.460083 1493.239014 20.97205353 23.84428024 17.82379532 20.22059631 299.6965942 1198.97876 43.85221481 99.60964966 -7.248439789 1.062548637 1 111114 -9999 -9999"
"78 18:05:01 17863.50005 2.509786563 2.509786563 0.022670681 1563.338984 1.962966907 8.135609987 5.265 0.5 2.523228275 48.8908844 46.76280594 49.93166351 2001.122437 1989.85083 20.87425804 24.2393074 17.69743919 20.54927826 299.6837769 1198.699219 45.60385132 99.60519409 -13.40700912 1.060843468 1 111114 -9999 -9999"
1 Investigator name: Nick Smith
2 Contact information: ngsmith@purdue.edu
3 Site name in full: Purdue Growth Chamber
4 Vegetation type: NA
5 Soil type: Field Mixture
6 Major species: NA
7 Sample leaf light environment: Chamber light (~1000 PAR)
8 Water stress assessment: No water stress
9 Instrument used: Licor-6400
10 Extra info: 7day acclimation at 20c
11 SiteID Latitude(Degrees) Longitude(Degrees) Elevation SampleYear SampleDayOfYear GrowSeasonStart GrowSeasonEnd StandAge CanopyHeight LeafAreaIndex SpeciesSampled AveTimeResolution SampleHeight LeafAge SpecificLeafArea LfNitrogenContent LfCarbonContent LfPhosphContent
12 NoUnit NorthPositive EastPositive m NoUnit DayOfYear DayOfYear DayOfYear Year m m2/m2 NoBlankSpace Minutes m days cm2/g % % %
13 NA NA NA NA 2014 282 NA NA NA NA NA Tamarindusindica NA NA NA 159.0634345 1.4 NA NA
14 Gamma* Kc Ko Alpha Rd gi
15 Pa Pa Pa NoUnit umol/m2/s umol/m2/s/Pa
16 -9999 -9999 -9999 -9999 2.189610949 -9999
17 Obs HHMMSS FTime Photo !AdjPhoto !StomCond !Ci !Trmmol !VpdL Area StmRat BLCond Tair !Tleaf TBlk CO2R CO2S H2OR H2OS RH_R RH_S Flow !PARi PARo Press CsMch HsMch StableF Status PhiPS2 OxygenPress
18 NoUnit HHMMSS Second umol/m2/s umol/m2/s mol/m2/s umol/mol mmol/m2/s kPa cm2 NA mol/m2/s oC oC oC umol/mol umol/mol mmol/mol mmol/mol % % umol/s umol/m2/s umol/m2/s Kpa umol/mol mmol/mol NA NA NA KPA
19 66 17:38:55 16298.00005 -0.215426597 -0.215426597 0.007774086 387.5601933 0.691837268 8.326482961 5.265 0.5 2.523228275 48.75154114 46.73216629 49.93317795 399.3782959 399.2714844 20.96022415 22.1486187 17.9028511 18.91743469 299.7191772 1199.456543 43.07281876 99.64649963 2.999198914 1.05813694 1 111114 -9999 -9999
20 67 17:40:40 16402.50005 -0.505870892 -0.505870892 0.0085163 349.5536599 0.761887632 8.369241706 5.265 0.5 2.523228275 48.81954193 46.83860397 49.93241501 300.4419861 300.927887 20.98658371 22.29515648 17.88055229 18.97615433 299.7085876 1199.490479 43.07907867 99.6419754 3.762382507 1.066325188 1 111114 -9999 -9999
21 68 17:42:23 16505.00005 -0.718271361 -0.718271361 0.009213096 291.3857548 0.826080193 8.387930436 5.265 0.5 2.523228275 48.8538208 46.89636993 49.93274307 200.7705383 201.739502 21.00330162 22.42184448 17.87025642 19.0505619 299.7295837 1199.116821 44.01655579 99.63645935 4.080833435 1.060667992 1 111114 -9999 -9999
22 69 17:44:11 16613.00005 -0.991620268 -0.991620268 0.010095712 235.0120968 0.907467284 8.409155772 5.265 0.5 2.523228275 48.86945724 46.96108246 49.93239212 100.027565 101.6075668 21.003088 22.56126976 17.85757637 19.15289497 299.7096863 1199.012329 46.25364304 99.63273621 3.954681396 1.065255165 1 111114 -9999 -9999
23 70 17:46:46 16768.00005 -1.045282227 -1.045282227 0.011287996 183.1882237 1.009646387 8.371469809 5.265 0.5 2.523228275 48.87886429 46.92841721 49.93133163 49.55680847 51.30204773 21.0290432 22.76230049 17.87363815 19.3139534 299.7124939 1198.983521 43.66405487 99.6309967 3.677768707 1.070101738 1 111114 -9999 -9999
24 71 17:48:56 16898.50005 -0.358454456 -0.358454456 0.012415238 389.9600226 1.109333954 8.36545804 5.265 0.5 2.523228275 48.89009094 46.94281769 49.92983246 400.4476013 400.2972107 20.99722672 22.90138435 17.83179474 19.42071342 299.7065125 1198.709229 42.7310257 99.6289444 3.165927887 1.073033333 1 111114 -9999 -9999
25 72 17:50:04 16966.50005 -0.369359541 -0.369359541 0.012860315 389.0550121 1.148128169 8.359215055 5.265 0.5 2.523228275 48.89198303 46.94270706 49.9316597 399.6208496 399.4640198 20.9937439 22.96431923 17.82751465 19.47166443 299.7133789 1199.011597 46.73867416 99.62515259 3.196323395 1.071206093 1 111114 -9999 -9999
26 73 17:52:29 17111.50005 -0.000448038 -0.000448038 0.013857559 519.5473911 1.23260114 8.331337797 5.265 0.5 2.523228275 48.89042282 46.9200325 49.93070602 600.796814 599.4993896 21.00602722 23.12145042 17.84046745 19.60547066 299.6844788 1199.114502 43.48819351 99.62283325 1.873325348 1.067681313 1 111114 -9999 -9999
27 74 17:54:57 17259.50005 0.229358264 0.229358264 0.015404105 668.456214 1.363738633 8.29717668 5.265 0.5 2.523228275 48.89125443 46.88843155 49.92894745 799.0285034 796.7166748 20.95309639 23.29321289 17.76644516 19.75002861 299.6789551 1198.772827 42.78263092 99.6211319 0.459568024 1.070916176 1 111114 -9999 -9999
28 75 17:56:48 17370.50005 0.647329733 0.647329733 0.01610465 804.9132425 1.420754821 8.269994013 5.265 0.5 2.523228275 48.88961792 46.86376572 49.93006134 1001.105164 997.4780273 20.99555397 23.43319511 17.83556366 19.86952591 299.6744385 1199.096558 43.42731094 99.61750793 -1.527980804 1.074719429 1 111114 -9999 -9999
29 76 17:59:09 17511.50005 1.071500245 1.071500245 0.017460418 945.566887 1.535388617 8.246544404 5.265 0.5 2.523228275 48.89328766 46.85366821 49.93212891 1200.983765 1195.875977 20.98199844 23.61549187 17.82249069 20.01953888 299.7128296 1198.785034 45.1896286 99.61073303 -3.668849945 1.068657875 1 111114 -9999 -9999
30 77 18:01:35 17657.50005 1.609415729 1.609415729 0.019173401 1170.685812 1.674877491 8.197620033 5.265 0.5 2.523228275 48.88559723 46.80513382 49.93037033 1500.460083 1493.239014 20.97205353 23.84428024 17.82379532 20.22059631 299.6965942 1198.97876 43.85221481 99.60964966 -7.248439789 1.062548637 1 111114 -9999 -9999
31 78 18:05:01 17863.50005 2.509786563 2.509786563 0.022670681 1563.338984 1.962966907 8.135609987 5.265 0.5 2.523228275 48.8908844 46.76280594 49.93166351 2001.122437 1989.85083 20.87425804 24.2393074 17.69743919 20.54927826 299.6837769 1198.699219 45.60385132 99.60519409 -13.40700912 1.060843468 1 111114 -9999 -9999
@@ -0,0 +1,34 @@
Valid Name,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
validname@ornl.gov,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
FACE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
tropical forest,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
dense soil,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"Tulip Poplar, Oak",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
heavily shaded from above,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Little to no stress,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Licor-6400,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
dear01,,,,sla/nut no. 2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SiteID,Latitude(Degrees),Longitude(Degrees),Elevation,SampleYear,SampleDayOfYear,GrowSeasonStart,GrowSeasonEnd,StandAge,CanopyHeight,LeafAreaIndex,SpeciesSampled,AveTimeResolution,SampleHeight,LeafAge,SpecificLeafArea,LfNitrogenContent,LfCarbonContent,LfPhosphContent,WoodPorosity,SapWoodDensity,,,,,,,,,,,,,,,,,
NoUnit,NorthPositive,EastPositive,m,NoUnit,DayOfYear,DayOfYear,DayOfYear,Year,m,m2/m2,NoBlankSpace,Minutes,m,days,cm2/g,%,%,%,NoUnit,g/cm3,,,,,,,,,,,,,,,,,
Metropolitano ,8.98333,-79.55,-9999,2013,22,-9999,-9999,-9999,-9999,-9999,Dendropanax_arboreus,-9999,-9999,-9999,245.5609363,2.19,46.03,0.129929353,-9999,0.42,,,,,,,,,,,,,,,,,
Gamma*,Kc,Ko,Alpha,Rd,gi,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Pa,Pa,Pa,NoUnit,umol/m2/s,umol/m2/s/Pa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-9999,-9999,-9999,-9999,-9999,-9999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Obs,HHMMSS,FTime,Photo,!AdjPhoto,!StomCond,!Ci,!Trmmol,!VpdL,Area,StmRat,BLCond,Tair,!Tleaf,TBlk,CO2R,CO2S,H2OR,H2OS,RH_R,RH_S,Flow,!PARi,PARo,Press,CsMch,HsMch,StableF,Status,PhiPS2,OxygenPress,DataType,TissueArea,TissueMass,Fo'_or_Fo,Fm'_or_Fm,Fs,MeasLight
NoUnit,HHMMSS,Second,umol/m2/s,umol/m2/s,mol/m2/s,umol/mol,mmol/m2/s,kPa,cm2,NA,mol/m2/s,oC,oC,oC,umol/mol,umol/mol,mmol/mol,mmol/mol,%,%,umol/s,umol/m2/s,umol/m2/s,Kpa,umol/mol,mmol/mol,NA,NA,NA,KPA,123Flu11_25ACi31_45ALight_9999others,cm2,gram,Arb_Unit,Arb_Unit,Arb_Unit,umolm-2s-1
2,11:26:17,681.5,6.707855907,6.707855907,0.066161416,185.9999057,0.936751155,1.386027641,2,1,9.289719582,29.09575272,29.91356087,28.63459015,360.0646362,355.3765869,27.71545029,28.32151604,69.04498291,70.5548172,300.3703613,500.4228821,23.31687355,100.7472458,1.491710782,10.9474802,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
3,11:30:29,933.5,5.771831799,5.771831799,0.07942629,172.5935849,1.09826383,1.355495012,2,1,9.289719582,29.09716606,29.85159492,28.63698769,298.9832153,294.9247742,27.76527977,28.47566414,69.16172028,70.9312439,300.3979492,500.3692017,25.71452522,100.7446976,1.531658292,10.98022556,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
4,11:33:59,1144,4.325258223,4.325258223,0.085983618,151.023036,1.188274711,1.355434906,2,1,9.289719582,29.13848686,29.91317749,28.63607216,239.5308838,236.4640961,27.85741615,28.62590981,69.22337341,71.13302612,300.3952637,500.3513489,33.338871,100.741394,1.670513272,11.00670147,0.25,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
5,11:37:31,1356,2.827309844,2.827309844,0.09812974,127.6065847,1.335534508,1.336460632,2,1,9.289719582,29.13998985,29.8854599,28.63371277,179.5149384,177.474411,27.88515472,28.74891472,69.28231049,71.42836761,300.347168,500.2981567,24.44124985,100.735611,1.570171475,11.03241634,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
6,11:41:04,1569,1.194818958,1.194818958,0.107753176,88.63161349,1.460041169,1.331723176,2,1,9.289719582,29.28667641,29.92069626,28.83418274,109.6109619,108.7097931,27.93833351,28.88233376,68.82578278,71.15132141,300.3964844,500.3841248,31.03587151,100.7314072,1.507373929,11.05681133,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
7,11:43:45,1729.5,-0.756032277,-0.756032277,0.1155767,51.30436732,1.560378208,1.327865608,2,1,9.289719582,29.31532288,29.95697784,28.83176422,41.28229904,41.7423172,27.99954605,29.00834846,68.86295319,71.34403229,300.3787842,500.3143005,24.70624542,100.7319412,1.261989713,11.08116055,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
8,11:46:42,1906.5,7.34330065,7.34330065,0.118790057,268.5384085,1.59344573,1.319710687,2,1,9.289719582,29.33441162,29.95470619,28.83215523,380.8040466,375.516449,28.05409241,29.08415985,68.92025757,71.45082092,300.3884277,500.2626648,35.80098343,100.73069,1.607235074,11.10654354,0.25,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
9,11:49:44,2089,7.904847079,7.904847079,0.110187779,290.9430443,1.476094614,1.316732146,2,1,9.289719582,29.30088615,29.93460655,28.82966614,420.2006836,414.5297546,28.11221123,29.06651115,69.19332123,71.54216003,300.364624,500.5073242,33.35251617,100.7255707,1.686336637,11.10749531,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
10,11:52:17,2242,8.412550198,8.412550198,0.107218775,329.0402424,1.427586651,1.308429964,2,1,9.289719582,29.2647934,29.87786865,28.83231163,470.3963318,464.3539124,28.08907318,29.01198196,69.28002167,71.55632019,300.391449,500.6035767,26.83644104,100.7247086,1.531368375,11.10119152,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
11,11:54:49,2394,8.942760877,8.942760877,0.099987679,369.6233746,1.337743766,1.313900888,2,1,9.289719582,29.23348236,29.8452034,28.83133125,530.1151733,523.6935425,28.01350403,28.87860107,69.21929932,71.35688782,300.3389282,500.8887329,22.21284676,100.7255859,1.323848844,11.08121204,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
12,11:58:35,2620,9.558578395,9.558578395,0.088424049,437.1518216,1.230003596,1.364140129,2,1,9.289719582,29.38029861,29.99291992,29.02685356,630.2923584,623.4188232,27.9438591,28.73913193,68.45996857,70.40831757,300.4388733,500.8171997,22.24046707,100.7190247,1.161373258,11.05481243,0.25,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
13,12:01:07,2771.5,9.873152604,9.873152604,0.080181353,510.6765842,1.143831655,1.397517525,2,1,9.289719582,29.41447258,30.11022568,29.02637482,730.4609985,723.3362427,27.95492935,28.69467545,68.34937286,70.15804291,300.3759766,500.7625427,23.86174965,100.7148819,0.70708859,11.04821491,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
14,12:03:46,2930.5,9.873834511,9.873834511,0.065068937,562.5871977,0.932179735,1.401146672,2,1,9.289719582,29.05545425,30.09852409,28.43083191,829.8916016,822.8070679,28.02915764,28.63202095,69.96215057,71.46692657,300.3963013,500.498291,37.39061737,100.7079849,0.278255582,11.03235149,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
15,12:06:22,3086.5,10.02683312,10.02683312,0.064134644,653.7121812,0.905940007,1.381484098,2,1,9.289719582,29.00729942,30.02923965,28.43653297,930.4942627,923.2613525,28.07292557,28.65882683,70.26574707,71.73223877,300.3840027,500.588623,27.13081169,100.7063675,-0.062930942,11.0444231,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
16,12:09:14,3258.5,10.05007126,10.05007126,0.056535537,717.0210045,0.799662235,1.382177405,2,1,9.289719582,28.98132896,30.00952148,28.43982887,1029.953247,1022.716675,28.0886879,28.60592461,70.40614319,71.70262909,300.3604126,500.6481628,32.60289001,100.6995239,-0.451480746,11.03314304,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
17,12:11:46,3410.5,10.08104453,10.08104453,0.05308502,795.1938984,0.752668042,1.385043349,2,1,9.289719582,28.9710083,30.00168419,28.43811226,1129.660278,1122.383789,28.07155228,28.55850601,70.40500641,71.62631226,300.3049011,500.8016663,38.56233597,100.6991959,-0.955020785,11.02880192,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
1 Valid Name
2 validname@ornl.gov
3 FACE
4 tropical forest
5 dense soil
6 Tulip Poplar, Oak
7 heavily shaded from above
8 Little to no stress
9 Licor-6400
10 dear01 sla/nut no. 2
11 SiteID Latitude(Degrees) Longitude(Degrees) Elevation SampleYear SampleDayOfYear GrowSeasonStart GrowSeasonEnd StandAge CanopyHeight LeafAreaIndex SpeciesSampled AveTimeResolution SampleHeight LeafAge SpecificLeafArea LfNitrogenContent LfCarbonContent LfPhosphContent WoodPorosity SapWoodDensity
12 NoUnit NorthPositive EastPositive m NoUnit DayOfYear DayOfYear DayOfYear Year m m2/m2 NoBlankSpace Minutes m days cm2/g % % % NoUnit g/cm3
13 Metropolitano 8.98333 -79.55 -9999 2013 22 -9999 -9999 -9999 -9999 -9999 Dendropanax_arboreus -9999 -9999 -9999 245.5609363 2.19 46.03 0.129929353 -9999 0.42
14 Gamma* Kc Ko Alpha Rd gi
15 Pa Pa Pa NoUnit umol/m2/s umol/m2/s/Pa
16 -9999 -9999 -9999 -9999 -9999 -9999
17 Obs HHMMSS FTime Photo !AdjPhoto !StomCond !Ci !Trmmol !VpdL Area StmRat BLCond Tair !Tleaf TBlk CO2R CO2S H2OR H2OS RH_R RH_S Flow !PARi PARo Press CsMch HsMch StableF Status PhiPS2 OxygenPress DataType TissueArea TissueMass Fo'_or_Fo Fm'_or_Fm Fs MeasLight
18 NoUnit HHMMSS Second umol/m2/s umol/m2/s mol/m2/s umol/mol mmol/m2/s kPa cm2 NA mol/m2/s oC oC oC umol/mol umol/mol mmol/mol mmol/mol % % umol/s umol/m2/s umol/m2/s Kpa umol/mol mmol/mol NA NA NA KPA 123Flu11_25ACi31_45ALight_9999others cm2 gram Arb_Unit Arb_Unit Arb_Unit umolm-2s-1
19 2 11:26:17 681.5 6.707855907 6.707855907 0.066161416 185.9999057 0.936751155 1.386027641 2 1 9.289719582 29.09575272 29.91356087 28.63459015 360.0646362 355.3765869 27.71545029 28.32151604 69.04498291 70.5548172 300.3703613 500.4228821 23.31687355 100.7472458 1.491710782 10.9474802 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
20 3 11:30:29 933.5 5.771831799 5.771831799 0.07942629 172.5935849 1.09826383 1.355495012 2 1 9.289719582 29.09716606 29.85159492 28.63698769 298.9832153 294.9247742 27.76527977 28.47566414 69.16172028 70.9312439 300.3979492 500.3692017 25.71452522 100.7446976 1.531658292 10.98022556 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
21 4 11:33:59 1144 4.325258223 4.325258223 0.085983618 151.023036 1.188274711 1.355434906 2 1 9.289719582 29.13848686 29.91317749 28.63607216 239.5308838 236.4640961 27.85741615 28.62590981 69.22337341 71.13302612 300.3952637 500.3513489 33.338871 100.741394 1.670513272 11.00670147 0.25 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
22 5 11:37:31 1356 2.827309844 2.827309844 0.09812974 127.6065847 1.335534508 1.336460632 2 1 9.289719582 29.13998985 29.8854599 28.63371277 179.5149384 177.474411 27.88515472 28.74891472 69.28231049 71.42836761 300.347168 500.2981567 24.44124985 100.735611 1.570171475 11.03241634 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
23 6 11:41:04 1569 1.194818958 1.194818958 0.107753176 88.63161349 1.460041169 1.331723176 2 1 9.289719582 29.28667641 29.92069626 28.83418274 109.6109619 108.7097931 27.93833351 28.88233376 68.82578278 71.15132141 300.3964844 500.3841248 31.03587151 100.7314072 1.507373929 11.05681133 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
24 7 11:43:45 1729.5 -0.756032277 -0.756032277 0.1155767 51.30436732 1.560378208 1.327865608 2 1 9.289719582 29.31532288 29.95697784 28.83176422 41.28229904 41.7423172 27.99954605 29.00834846 68.86295319 71.34403229 300.3787842 500.3143005 24.70624542 100.7319412 1.261989713 11.08116055 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
25 8 11:46:42 1906.5 7.34330065 7.34330065 0.118790057 268.5384085 1.59344573 1.319710687 2 1 9.289719582 29.33441162 29.95470619 28.83215523 380.8040466 375.516449 28.05409241 29.08415985 68.92025757 71.45082092 300.3884277 500.2626648 35.80098343 100.73069 1.607235074 11.10654354 0.25 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
26 9 11:49:44 2089 7.904847079 7.904847079 0.110187779 290.9430443 1.476094614 1.316732146 2 1 9.289719582 29.30088615 29.93460655 28.82966614 420.2006836 414.5297546 28.11221123 29.06651115 69.19332123 71.54216003 300.364624 500.5073242 33.35251617 100.7255707 1.686336637 11.10749531 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
27 10 11:52:17 2242 8.412550198 8.412550198 0.107218775 329.0402424 1.427586651 1.308429964 2 1 9.289719582 29.2647934 29.87786865 28.83231163 470.3963318 464.3539124 28.08907318 29.01198196 69.28002167 71.55632019 300.391449 500.6035767 26.83644104 100.7247086 1.531368375 11.10119152 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
28 11 11:54:49 2394 8.942760877 8.942760877 0.099987679 369.6233746 1.337743766 1.313900888 2 1 9.289719582 29.23348236 29.8452034 28.83133125 530.1151733 523.6935425 28.01350403 28.87860107 69.21929932 71.35688782 300.3389282 500.8887329 22.21284676 100.7255859 1.323848844 11.08121204 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
29 12 11:58:35 2620 9.558578395 9.558578395 0.088424049 437.1518216 1.230003596 1.364140129 2 1 9.289719582 29.38029861 29.99291992 29.02685356 630.2923584 623.4188232 27.9438591 28.73913193 68.45996857 70.40831757 300.4388733 500.8171997 22.24046707 100.7190247 1.161373258 11.05481243 0.25 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
30 13 12:01:07 2771.5 9.873152604 9.873152604 0.080181353 510.6765842 1.143831655 1.397517525 2 1 9.289719582 29.41447258 30.11022568 29.02637482 730.4609985 723.3362427 27.95492935 28.69467545 68.34937286 70.15804291 300.3759766 500.7625427 23.86174965 100.7148819 0.70708859 11.04821491 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
31 14 12:03:46 2930.5 9.873834511 9.873834511 0.065068937 562.5871977 0.932179735 1.401146672 2 1 9.289719582 29.05545425 30.09852409 28.43083191 829.8916016 822.8070679 28.02915764 28.63202095 69.96215057 71.46692657 300.3963013 500.498291 37.39061737 100.7079849 0.278255582 11.03235149 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
32 15 12:06:22 3086.5 10.02683312 10.02683312 0.064134644 653.7121812 0.905940007 1.381484098 2 1 9.289719582 29.00729942 30.02923965 28.43653297 930.4942627 923.2613525 28.07292557 28.65882683 70.26574707 71.73223877 300.3840027 500.588623 27.13081169 100.7063675 -0.062930942 11.0444231 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
33 16 12:09:14 3258.5 10.05007126 10.05007126 0.056535537 717.0210045 0.799662235 1.382177405 2 1 9.289719582 28.98132896 30.00952148 28.43982887 1029.953247 1022.716675 28.0886879 28.60592461 70.40614319 71.70262909 300.3604126 500.6481628 32.60289001 100.6995239 -0.451480746 11.03314304 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
34 17 12:11:46 3410.5 10.08104453 10.08104453 0.05308502 795.1938984 0.752668042 1.385043349 2 1 9.289719582 28.9710083 30.00168419 28.43811226 1129.660278 1122.383789 28.07155228 28.55850601 70.40500641 71.62631226 300.3049011 500.8016663 38.56233597 100.6991959 -0.955020785 11.02880192 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
@@ -0,0 +1,34 @@
Investigator name: Valid Name,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Contact information: validname@ornl.gov,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Site name in full: FACE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Vegetation type: tropical forest,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Soil type: dense soil,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"Major species: Tulip Poplar, Oak",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sample leaf light environment: heavily shaded from above,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Water stress assessment: Little to no stress,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Instrument used: Licor-6400,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Extra info: dear01,,,,sla/nut no. 2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SiteID,Latitude(Degrees),Longitude(Degrees),Elevation,SampleYear,SampleDayOfYear,GrowSeasonStart,GrowSeasonEnd,StandAge,CanopyHeight,LeafAreaIndex,SpeciesSampled,AveTimeResolution,SampleHeight,LeafAge,SpecificLeafArea,LfNitrogenContent,LfCarbonContent,LfPhosphContent,WoodPorosity,SapWoodDensity,,,,,,,,,,,,,,,,,
NoUnit,NorthPositive,EastPositive,m,NoUnit,DayOfYear,DayOfYear,DayOfYear,Year,m,m2/m2,NoBlankSpace,Minutes,m,days,cm2/g,%,%,%,NoUnit,g/cm3,,,,,,,,,,,,,,,,,
Metropolitano ,8.98333,-79.55,-9999,2013,22,-9999,-9999,-9999,-9999,-9999,Dendropanax_arboreus,-9999,-9999,-9999,245.5609363,2.19,46.03,0.129929353,-9999,0.42,,,,,,,,,,,,,,,,,
Gamma*,Kc,Ko,Alpha,Rd,gi,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Pa,Pa,Pa,NoUnit,umol/m2/s,umol/m2/s/Pa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1.2,2.3,3.4,4.5,6.5,4.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Obs,HHMMSS,FTime,Photo,!AdjPhoto,!StomCond,!Ci,!Trmmol,!VpdL,Area,StmRat,BLCond,Tair,!Tleaf,TBlk,CO2R,CO2S,H2OR,H2OS,RH_R,RH_S,Flow,!PARi,PARo,Press,CsMch,HsMch,StableF,Status,PhiPS2,OxygenPress,DataType,TissueArea,TissueMass,Fo'_or_Fo,Fm'_or_Fm,Fs,MeasLight
NoUnit,HHMMSS,Second,umol/m2/s,umol/m2/s,mol/m2/s,umol/mol,mmol/m2/s,kPa,cm2,NA,mol/m2/s,oC,oC,oC,umol/mol,umol/mol,mmol/mol,mmol/mol,%,%,umol/s,umol/m2/s,umol/m2/s,Kpa,umol/mol,mmol/mol,NA,NA,NA,KPA,123Flu11_25ACi31_45ALight_9999others,cm2,gram,Arb_Unit,Arb_Unit,Arb_Unit,umolm-2s-1
2,11:26:17,681.5,6.707855907,6.707855907,0.066161416,185.9999057,0.936751155,1.386027641,2,1,9.289719582,29.09575272,29.91356087,28.63459015,360.0646362,355.3765869,27.71545029,28.32151604,69.04498291,70.5548172,300.3703613,500.4228821,23.31687355,100.7472458,1.491710782,10.9474802,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
3,11:30:29,933.5,5.771831799,5.771831799,0.07942629,172.5935849,1.09826383,1.355495012,2,1,9.289719582,29.09716606,29.85159492,28.63698769,298.9832153,294.9247742,27.76527977,28.47566414,69.16172028,70.9312439,300.3979492,500.3692017,25.71452522,100.7446976,1.531658292,10.98022556,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
4,11:33:59,1144,4.325258223,4.325258223,0.085983618,151.023036,1.188274711,1.355434906,2,1,9.289719582,29.13848686,29.91317749,28.63607216,239.5308838,236.4640961,27.85741615,28.62590981,69.22337341,71.13302612,300.3952637,500.3513489,33.338871,100.741394,1.670513272,11.00670147,0.25,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
5,11:37:31,1356,2.827309844,2.827309844,0.09812974,127.6065847,1.335534508,1.336460632,2,1,9.289719582,29.13998985,29.8854599,28.63371277,179.5149384,177.474411,27.88515472,28.74891472,69.28231049,71.42836761,300.347168,500.2981567,24.44124985,100.735611,1.570171475,11.03241634,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
6,11:41:04,1569,1.194818958,1.194818958,0.107753176,88.63161349,1.460041169,1.331723176,2,1,9.289719582,29.28667641,29.92069626,28.83418274,109.6109619,108.7097931,27.93833351,28.88233376,68.82578278,71.15132141,300.3964844,500.3841248,31.03587151,100.7314072,1.507373929,11.05681133,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
7,11:43:45,1729.5,-0.756032277,-0.756032277,0.1155767,51.30436732,1.560378208,1.327865608,2,1,9.289719582,29.31532288,29.95697784,28.83176422,41.28229904,41.7423172,27.99954605,29.00834846,68.86295319,71.34403229,300.3787842,500.3143005,24.70624542,100.7319412,1.261989713,11.08116055,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
8,11:46:42,1906.5,7.34330065,7.34330065,0.118790057,268.5384085,1.59344573,1.319710687,2,1,9.289719582,29.33441162,29.95470619,28.83215523,380.8040466,375.516449,28.05409241,29.08415985,68.92025757,71.45082092,300.3884277,500.2626648,35.80098343,100.73069,1.607235074,11.10654354,0.25,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
9,11:49:44,2089,7.904847079,7.904847079,0.110187779,290.9430443,1.476094614,1.316732146,2,1,9.289719582,29.30088615,29.93460655,28.82966614,420.2006836,414.5297546,28.11221123,29.06651115,69.19332123,71.54216003,300.364624,500.5073242,33.35251617,100.7255707,1.686336637,11.10749531,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
10,11:52:17,2242,8.412550198,8.412550198,0.107218775,329.0402424,1.427586651,1.308429964,2,1,9.289719582,29.2647934,29.87786865,28.83231163,470.3963318,464.3539124,28.08907318,29.01198196,69.28002167,71.55632019,300.391449,500.6035767,26.83644104,100.7247086,1.531368375,11.10119152,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
11,11:54:49,2394,8.942760877,8.942760877,0.099987679,369.6233746,1.337743766,1.313900888,2,1,9.289719582,29.23348236,29.8452034,28.83133125,530.1151733,523.6935425,28.01350403,28.87860107,69.21929932,71.35688782,300.3389282,500.8887329,22.21284676,100.7255859,1.323848844,11.08121204,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
12,11:58:35,2620,9.558578395,9.558578395,0.088424049,437.1518216,1.230003596,1.364140129,2,1,9.289719582,29.38029861,29.99291992,29.02685356,630.2923584,623.4188232,27.9438591,28.73913193,68.45996857,70.40831757,300.4388733,500.8171997,22.24046707,100.7190247,1.161373258,11.05481243,0.25,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
13,12:01:07,2771.5,9.873152604,9.873152604,0.080181353,510.6765842,1.143831655,1.397517525,2,1,9.289719582,29.41447258,30.11022568,29.02637482,730.4609985,723.3362427,27.95492935,28.69467545,68.34937286,70.15804291,300.3759766,500.7625427,23.86174965,100.7148819,0.70708859,11.04821491,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
14,12:03:46,2930.5,9.873834511,9.873834511,0.065068937,562.5871977,0.932179735,1.401146672,2,1,9.289719582,29.05545425,30.09852409,28.43083191,829.8916016,822.8070679,28.02915764,28.63202095,69.96215057,71.46692657,300.3963013,500.498291,37.39061737,100.7079849,0.278255582,11.03235149,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
15,12:06:22,3086.5,10.02683312,10.02683312,0.064134644,653.7121812,0.905940007,1.381484098,2,1,9.289719582,29.00729942,30.02923965,28.43653297,930.4942627,923.2613525,28.07292557,28.65882683,70.26574707,71.73223877,300.3840027,500.588623,27.13081169,100.7063675,-0.062930942,11.0444231,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
16,12:09:14,3258.5,10.05007126,10.05007126,0.056535537,717.0210045,0.799662235,1.382177405,2,1,9.289719582,28.98132896,30.00952148,28.43982887,1029.953247,1022.716675,28.0886879,28.60592461,70.40614319,71.70262909,300.3604126,500.6481628,32.60289001,100.6995239,-0.451480746,11.03314304,0.5,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
17,12:11:46,3410.5,10.08104453,10.08104453,0.05308502,795.1938984,0.752668042,1.385043349,2,1,9.289719582,28.9710083,30.00168419,28.43811226,1129.660278,1122.383789,28.07155228,28.55850601,70.40500641,71.62631226,300.3049011,500.8016663,38.56233597,100.6991959,-0.955020785,11.02880192,0.75,111115,-9999,-9999,-9999,-9999,-9999,0,0,0,-9999
1 Investigator name: Valid Name
2 Contact information: validname@ornl.gov
3 Site name in full: FACE
4 Vegetation type: tropical forest
5 Soil type: dense soil
6 Major species: Tulip Poplar, Oak
7 Sample leaf light environment: heavily shaded from above
8 Water stress assessment: Little to no stress
9 Instrument used: Licor-6400
10 Extra info: dear01 sla/nut no. 2
11 SiteID Latitude(Degrees) Longitude(Degrees) Elevation SampleYear SampleDayOfYear GrowSeasonStart GrowSeasonEnd StandAge CanopyHeight LeafAreaIndex SpeciesSampled AveTimeResolution SampleHeight LeafAge SpecificLeafArea LfNitrogenContent LfCarbonContent LfPhosphContent WoodPorosity SapWoodDensity
12 NoUnit NorthPositive EastPositive m NoUnit DayOfYear DayOfYear DayOfYear Year m m2/m2 NoBlankSpace Minutes m days cm2/g % % % NoUnit g/cm3
13 Metropolitano 8.98333 -79.55 -9999 2013 22 -9999 -9999 -9999 -9999 -9999 Dendropanax_arboreus -9999 -9999 -9999 245.5609363 2.19 46.03 0.129929353 -9999 0.42
14 Gamma* Kc Ko Alpha Rd gi
15 Pa Pa Pa NoUnit umol/m2/s umol/m2/s/Pa
16 1.2 2.3 3.4 4.5 6.5 4.3
17 Obs HHMMSS FTime Photo !AdjPhoto !StomCond !Ci !Trmmol !VpdL Area StmRat BLCond Tair !Tleaf TBlk CO2R CO2S H2OR H2OS RH_R RH_S Flow !PARi PARo Press CsMch HsMch StableF Status PhiPS2 OxygenPress DataType TissueArea TissueMass Fo'_or_Fo Fm'_or_Fm Fs MeasLight
18 NoUnit HHMMSS Second umol/m2/s umol/m2/s mol/m2/s umol/mol mmol/m2/s kPa cm2 NA mol/m2/s oC oC oC umol/mol umol/mol mmol/mol mmol/mol % % umol/s umol/m2/s umol/m2/s Kpa umol/mol mmol/mol NA NA NA KPA 123Flu11_25ACi31_45ALight_9999others cm2 gram Arb_Unit Arb_Unit Arb_Unit umolm-2s-1
19 2 11:26:17 681.5 6.707855907 6.707855907 0.066161416 185.9999057 0.936751155 1.386027641 2 1 9.289719582 29.09575272 29.91356087 28.63459015 360.0646362 355.3765869 27.71545029 28.32151604 69.04498291 70.5548172 300.3703613 500.4228821 23.31687355 100.7472458 1.491710782 10.9474802 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
20 3 11:30:29 933.5 5.771831799 5.771831799 0.07942629 172.5935849 1.09826383 1.355495012 2 1 9.289719582 29.09716606 29.85159492 28.63698769 298.9832153 294.9247742 27.76527977 28.47566414 69.16172028 70.9312439 300.3979492 500.3692017 25.71452522 100.7446976 1.531658292 10.98022556 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
21 4 11:33:59 1144 4.325258223 4.325258223 0.085983618 151.023036 1.188274711 1.355434906 2 1 9.289719582 29.13848686 29.91317749 28.63607216 239.5308838 236.4640961 27.85741615 28.62590981 69.22337341 71.13302612 300.3952637 500.3513489 33.338871 100.741394 1.670513272 11.00670147 0.25 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
22 5 11:37:31 1356 2.827309844 2.827309844 0.09812974 127.6065847 1.335534508 1.336460632 2 1 9.289719582 29.13998985 29.8854599 28.63371277 179.5149384 177.474411 27.88515472 28.74891472 69.28231049 71.42836761 300.347168 500.2981567 24.44124985 100.735611 1.570171475 11.03241634 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
23 6 11:41:04 1569 1.194818958 1.194818958 0.107753176 88.63161349 1.460041169 1.331723176 2 1 9.289719582 29.28667641 29.92069626 28.83418274 109.6109619 108.7097931 27.93833351 28.88233376 68.82578278 71.15132141 300.3964844 500.3841248 31.03587151 100.7314072 1.507373929 11.05681133 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
24 7 11:43:45 1729.5 -0.756032277 -0.756032277 0.1155767 51.30436732 1.560378208 1.327865608 2 1 9.289719582 29.31532288 29.95697784 28.83176422 41.28229904 41.7423172 27.99954605 29.00834846 68.86295319 71.34403229 300.3787842 500.3143005 24.70624542 100.7319412 1.261989713 11.08116055 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
25 8 11:46:42 1906.5 7.34330065 7.34330065 0.118790057 268.5384085 1.59344573 1.319710687 2 1 9.289719582 29.33441162 29.95470619 28.83215523 380.8040466 375.516449 28.05409241 29.08415985 68.92025757 71.45082092 300.3884277 500.2626648 35.80098343 100.73069 1.607235074 11.10654354 0.25 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
26 9 11:49:44 2089 7.904847079 7.904847079 0.110187779 290.9430443 1.476094614 1.316732146 2 1 9.289719582 29.30088615 29.93460655 28.82966614 420.2006836 414.5297546 28.11221123 29.06651115 69.19332123 71.54216003 300.364624 500.5073242 33.35251617 100.7255707 1.686336637 11.10749531 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
27 10 11:52:17 2242 8.412550198 8.412550198 0.107218775 329.0402424 1.427586651 1.308429964 2 1 9.289719582 29.2647934 29.87786865 28.83231163 470.3963318 464.3539124 28.08907318 29.01198196 69.28002167 71.55632019 300.391449 500.6035767 26.83644104 100.7247086 1.531368375 11.10119152 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
28 11 11:54:49 2394 8.942760877 8.942760877 0.099987679 369.6233746 1.337743766 1.313900888 2 1 9.289719582 29.23348236 29.8452034 28.83133125 530.1151733 523.6935425 28.01350403 28.87860107 69.21929932 71.35688782 300.3389282 500.8887329 22.21284676 100.7255859 1.323848844 11.08121204 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
29 12 11:58:35 2620 9.558578395 9.558578395 0.088424049 437.1518216 1.230003596 1.364140129 2 1 9.289719582 29.38029861 29.99291992 29.02685356 630.2923584 623.4188232 27.9438591 28.73913193 68.45996857 70.40831757 300.4388733 500.8171997 22.24046707 100.7190247 1.161373258 11.05481243 0.25 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
30 13 12:01:07 2771.5 9.873152604 9.873152604 0.080181353 510.6765842 1.143831655 1.397517525 2 1 9.289719582 29.41447258 30.11022568 29.02637482 730.4609985 723.3362427 27.95492935 28.69467545 68.34937286 70.15804291 300.3759766 500.7625427 23.86174965 100.7148819 0.70708859 11.04821491 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
31 14 12:03:46 2930.5 9.873834511 9.873834511 0.065068937 562.5871977 0.932179735 1.401146672 2 1 9.289719582 29.05545425 30.09852409 28.43083191 829.8916016 822.8070679 28.02915764 28.63202095 69.96215057 71.46692657 300.3963013 500.498291 37.39061737 100.7079849 0.278255582 11.03235149 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
32 15 12:06:22 3086.5 10.02683312 10.02683312 0.064134644 653.7121812 0.905940007 1.381484098 2 1 9.289719582 29.00729942 30.02923965 28.43653297 930.4942627 923.2613525 28.07292557 28.65882683 70.26574707 71.73223877 300.3840027 500.588623 27.13081169 100.7063675 -0.062930942 11.0444231 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
33 16 12:09:14 3258.5 10.05007126 10.05007126 0.056535537 717.0210045 0.799662235 1.382177405 2 1 9.289719582 28.98132896 30.00952148 28.43982887 1029.953247 1022.716675 28.0886879 28.60592461 70.40614319 71.70262909 300.3604126 500.6481628 32.60289001 100.6995239 -0.451480746 11.03314304 0.5 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
34 17 12:11:46 3410.5 10.08104453 10.08104453 0.05308502 795.1938984 0.752668042 1.385043349 2 1 9.289719582 28.9710083 30.00168419 28.43811226 1129.660278 1122.383789 28.07155228 28.55850601 70.40500641 71.62631226 300.3049011 500.8016663 38.56233597 100.6991959 -0.955020785 11.02880192 0.75 111115 -9999 -9999 -9999 -9999 -9999 0 0 0 -9999
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NUnit" version="3.0.0" targetFramework="net45" />
</packages>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
+84
View File
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{25BAED75-7E75-4D11-90D9-358472054DF6}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LeafWeb.Core</RootNamespace>
<AssemblyName>Core</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CsvHelper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8c4959082be5c823, processorArchitecture=MSIL">
<HintPath>..\packages\CsvHelper.2.13.2.0\lib\net40-client\CsvHelper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Fasterflect, Version=2.1.3.0, Culture=neutral, PublicKeyToken=38d18473284c1ca7, processorArchitecture=MSIL">
<HintPath>..\packages\fasterflect.2.1.3\lib\net40\Fasterflect.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Models\LeafInput.cs" />
<Compile Include="Models\LeafInputData.cs" />
<Compile Include="Models\LeafInputFile.cs" />
<Compile Include="Models\LeafInputPhotosynthetic.cs" />
<Compile Include="Models\LeafInputSite.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\ParseInfoAttribute.cs" />
<Compile Include="Services\LeafInputCsvParser.cs" />
<Compile Include="Services\ParsedObjectFactory.cs" />
<Compile Include="Services\ParseException.cs" />
<Compile Include="Utility\StringExtensions.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+54
View File
@@ -0,0 +1,54 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using LeafWeb.Core.Services;
namespace LeafWeb.Core.Models
{
/// <summary>
/// Descriptive information about the investigator,
/// contact information, the site,the sample leaf and its general environmental condition
/// </summary>
public class LeafInput
{
[Key]
public string LeafInputId { get; set; }
public string FileName { get; set; }
[ParseInfo(1, exampleValue: "First and last name")]
public string InvestigatorName { get; set; }
[ParseInfo(2, exampleValue: "Your email / mail addresses")]
public string ContactInformation { get; set; }
[ParseInfo(3, alternateTitle: "Site name in full", exampleValue: "Your site's identifier / name")]
public string SiteName { get; set; }
[ParseInfo(4, exampleValue: "Mixed forest / grasslands / croplands/ etc")]
public string VegetationType { get; set; }
[ParseInfo(5, exampleValue: "Soil type at your site")]
public string SoilType { get; set; }
[ParseInfo(6, exampleValue: "List of major species at the site")]
public string MajorSpecies { get; set; }
[ParseInfo(7,
alternateTitle: "Sample leaf light environment",
exampleValue: "The general light environment in which the leaf is in (e.g. heavily shaded from above)")]
public string SampleLeafLightEnv { get; set; }
[ParseInfo(8, exampleValue: "Indicate whether there is water stress at the time of sampling")]
public string WaterStressAssessment { get; set; }
[ParseInfo(9, exampleValue: "For example - Licor-6400")]
public string InstrumentUsed { get; set; }
[ParseInfo(10, exampleValue: "Any extra information you feel would be helpful to put the sampled leaf in context")]
public string ExtraInfo { get; set; }
public virtual LeafInputSite Site { get; set; }
public virtual LeafInputPhotosynthetic Photosynthetic { get; set; }
public virtual IEnumerable<LeafInputData> Data { get; set; }
}
}
+145
View File
@@ -0,0 +1,145 @@
using System.ComponentModel.DataAnnotations;
using LeafWeb.Core.Services;
namespace LeafWeb.Core.Models
{
/// <summary>
/// A/Ci data for a variety of analyses, including photosynthesis, stomatal conductance, internal conductance, water use efficiency.
/// </summary>
public class LeafInputData
{
public int ListOrder { get; set; }
/// <summary>the data point No.</summary>
[ParseInfo(1, units: "no unit")]
public double? Obs { get; set; }
/// <summary>clock time</summary>
[StringLength(8)]
[ParseInfo(2, units: "hh:mm:ss")]
public string HHMMSS { get; set; }
/// <summary>number of seconds since file opened</summary>
[ParseInfo(3, units: "seconds")]
public double? FTime { get; set; }
/// <summary>photosynthetic rate</summary>
[ParseInfo(4, units: "umol/m2/s")]
public double? Photo { get; set; }
/// <summary>adjusted photosynthetic rate (leakage corrected)</summary>
/// <remarks>required</remarks>
[ParseInfo(5, alternateTitle: "!AdjPhoto", units: "umol/m2/s")]
public double? AdjPhoto { get; set; }
/// <summary>stomatal conductance</summary>
/// <remarks>required</remarks>
[ParseInfo(6, alternateTitle: "!StomCond", units: "mol/m2/s")]
public double? StomCond { get; set; }
/// <summary>intercellular CO2 concentration (umol CO2 / mol moist air)</summary>
[ParseInfo(7, alternateTitle: "!Ci", units: "umol/mol")]
public double? Ci { get; set; }
/// <summary>transpiration rate</summary>
/// <remarks>must provide</remarks>
[ParseInfo(8, alternateTitle: "!Trmmol", units:"mmol/m2/s")]
public double? Trmmol { get; set; }
/// <summary>water vapor pressure deficit based on leaf temperature, must provide</summary>
[ParseInfo(9, alternateTitle: "!VpdL", units: "KPa")]
public double? VpdL { get; set; }
/// <summary>leaf area</summary>
[ParseInfo(10, units:"cm2")]
public double? Area { get; set; }
/// <summary>estimate of the ratio of stomatal conductances of one side of the leaf to the other</summary>
[ParseInfo(11, units: "NA")]
public double? StmRat { get; set; }
/// <summary>total boundary layer conductance</summary>
[ParseInfo(12, units: "mol/m2/s")]
public double? BLCond { get; set; }
/// <summary>temperature in sample cell</summary>
[ParseInfo(13, units: "oC")]
public double? Tair { get; set; }
/// <summary>temperature of leaf thermocouple</summary>
/// <remarks>required</remarks>
[ParseInfo(14, alternateTitle: "!Tleaf", units: "oC")]
public double? Tleaf { get; set; }
/// <summary>IRGA Block temperature</summary>
[ParseInfo(15, units: "oC")]
public double? TBlk { get; set; }
/// <summary>reference CO2 concentration</summary>
[ParseInfo(16, units: "umol/mol")]
public double? CO2R { get; set; }
/// <summary>Sample CO2 concentration</summary>
[ParseInfo(17, units: "umol/mol")]
public double? CO2S { get; set; }
/// <summary>reference cell water vapor concentration</summary>
[ParseInfo(18, units: "mmol/mol")]
public double? H2OR { get; set; }
/// <summary>sample cell water vapor concentration</summary>
[ParseInfo(19, units: "mmol/mol")]
public double? H2OS { get; set; }
/// <summary>(%) Reference cell relative humidity</summary>
[ParseInfo(20)]
public double? RH_R { get; set; }
/// <summary>(%) sample cell relative humidity</summary>
[ParseInfo(21)]
public double? RH_S { get; set; }
/// <summary>(umol/s) molar flow rate of air entering the leaf chamber</summary>
[ParseInfo(22)]
public double? Flow { get; set; }
/// <summary> PAR measured by the in-chamber quantum sensor</summary>
/// <remarks>required</remarks>
[ParseInfo(23, alternateTitle: "!PARi", units: "umol/m2/s")]
public double? PARi { get; set; }
/// <summary>PAR measured by the external quantum sensor</summary>
[ParseInfo(24, units: "umol/m2/s")]
public double? PARo { get; set; }
/// <summary>atmospheric pressure</summary>
[ParseInfo(25, units: "KPa")]
public double? Press { get; set; }
/// <summary>sample CO2 offset</summary>
[ParseInfo(26, units: "umol/mol")]
public double? CsMch { get; set; }
/// <summary>sample H2O offset</summary>
[ParseInfo(27, units: "mmol/mol")]
public double? HsMch { get; set; }
/// <summary>a stability indicator as a decimal value</summary>
[ParseInfo(28, units: "NA")]
public double? StableF { get; set; }
/// <summary>status flag</summary>
[ParseInfo(29, units: "NA")]
public string Status { get; set; }
/// <summary>DeltaF/Fm, the fraction of absorbed PSII photons that are used in photochemistry</summary>
[ParseInfo(30, units: "NA")]
public double? PhiPS2 { get; set; }
/// <summary>atmospheric O2 partial pressure</summary>
[ParseInfo(31, units: "Pa")]
public double? OxygenPress { get; set; }
public virtual LeafInput LeafInput { get; set; }
}
}
+11
View File
@@ -0,0 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace LeafWeb.Core.Models
{
public class LeafInputFile
{
[Key]
public string LeafInputId { get; set; }
public byte[] File { get; set; }
}
}
+41
View File
@@ -0,0 +1,41 @@
using LeafWeb.Core.Services;
namespace LeafWeb.Core.Models
{
/// <summary>
/// Photosynthetic parameters of Leaf Input
/// </summary>
public class LeafInputPhotosynthetic
{
/// <summary>chloroplastic CO2 photocompensation point</summary>
/// <remarks>must be positive</remarks>
[ParseInfo(1, alternateTitle:"Gamma*", units: "Pa")]
public double GammaStar { get; set; }
/// <summary>Michaelis-Menten constant for RuBP carboxylation</summary>
/// <remarks>must be positive</remarks>
[ParseInfo(2, units: "Pa")]
public double Kc { get; set; }
/// <summary>Michaelis-Menten constant for RuBP oxygenation</summary>
/// <remarks>must be positive</remarks>
[ParseInfo(3, units: "Pa")]
public double Ko { get; set; }
/// <summary>the fraction of glycolate carbon not returned to the chloroplast</summary>
/// <remarks>must be between 0~1 if provided</remarks>
[ParseInfo(4)]
public double Alpha { get; set; }
/// <summary>dark respiration</summary>
/// <remarks>must be positive if provided</remarks>
[ParseInfo(5, units: "umol/m2/s")]
public double Rd { get; set; }
/// <summary>internal (also known as mesophyll) conductance</summary>
[ParseInfo(6, units: "umol/m2/s/Pa")]
public double gi { get; set; }
public virtual LeafInput LeafInput { get; set; }
}
}
+96
View File
@@ -0,0 +1,96 @@
using LeafWeb.Core.Services;
namespace LeafWeb.Core.Models
{
/// <summary>
/// Contains info about the site such as elevation, canopy height, site ID, etc
/// </summary>
public class LeafInputSite
{
/// <summary>Site identifier</summary>
/// <remarks>do not leave blank between letters</remarks>
[ParseInfo(1)]
public string SiteID { get; set; }
/// <summary>Site latitude, northern hermisphere positive</summary>
[ParseInfo(2, units:"degrees")]
public double? Latitude { get; set; }
/// <summary>Site longitude, east positive</summary>
[ParseInfo(3, units: "degrees")]
public double? Longitude { get; set; }
/// <summary>site elevation</summary>
[ParseInfo(4, units: "m")]
public double? Elevation { get; set; }
/// <summary>the year when the A/Ci data is taken</summary>
[ParseInfo(5, units: "year")]
public int? SampleYear { get; set; }
/// <summary>the day of year (since 1 Jan) when the A/Ci data is taken</summary>
[ParseInfo(6, units: "day")]
public int? SampleDayOfYear { get; set; }
/// <summary>the approximate start day (since 1 Jan) of growing season</summary>
[ParseInfo(7, units: "day")]
public int? GrowSeasonStart { get; set; }
/// <summary>the approximate end day (since 1 Jan) of growing season</summary>
[ParseInfo(8, units: "day")]
public int? GrowSeasonEnd { get; set; }
/// <summary>stand age since the last disturbance</summary>
[ParseInfo(9, units: "year")]
public double? StandAge { get; set; }
/// <summary>the height of the canopy</summary>
[ParseInfo(10, units: "m")]
public double? CanopyHeight { get; set; }
/// <summary>the leaf area index in the middle of growing season</summary>
[ParseInfo(11, units: "m2/m2")]
public double? LeafAreaIndex { get; set; }
/// <summary>the species of the leaf sample</summary>
/// <remarks>don't leave blank between letters</remarks>
[ParseInfo(12, units: "dimensionless")]
public string SpeciesSampled { get; set; }
/// <summary>the average time interval between two consecutive A/Ci data points</summary>
[ParseInfo(13, alternateTitle: "AveTimeResolution", units: "minutes")]
public double? AverageTimeResolution { get; set; }
/// <summary>the height at which the leaf is located</summary>
[ParseInfo(14, units: "m")]
public double? SampleHeight { get; set; }
/// <summary>the age of the leaf</summary>
[ParseInfo(15, units: "day")]
public int? LeafAge { get; set; }
/// <summary>specific leaf area of the sample</summary>
[ParseInfo(16, units: "cm2/g")]
public double? SpecificLeafArea { get; set; }
/// <summary>dry leaf nitrogen content of the sample</summary>
[ParseInfo(17, units: "%")]
public double? LfNitrogenContent { get; set; }
/// <summary>dry leaf carbon content of the sample</summary>
[ParseInfo(18, units: "%")]
public double? LfCarbonContent { get; set; }
/// <summary>dry leaf phosphorus content of the sample</summary>
[ParseInfo(19, units: "%")]
public double? LfPhosphContent { get; set; }
// WoodPorosity
// SapWoodDensity
// DataType,TissueArea,TissueMass,Fo'_or_Fo,Fm'_or_Fm,Fs,MeasLight
public virtual LeafInput LeafInput { get; set; }
}
}
+36
View File
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Core")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Core")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("678132a7-2bfc-426b-a14a-761822c06bd5")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+155
View File
@@ -0,0 +1,155 @@
using System;
using System.Collections.Generic;
using System.IO;
using CsvHelper;
using CsvHelper.Configuration;
using LeafWeb.Core.Models;
namespace LeafWeb.Core.Services
{
public class LeafInputCsvParser : IDisposable
{
private readonly FileSystemInfo _csvFile;
private readonly StreamReader _reader;
private readonly CsvReader _csv;
public LeafInputCsvParser(FileSystemInfo csvFile)
{
_csvFile = csvFile;
if (!csvFile.Exists)
throw new FileNotFoundException("Cannot find file '" + csvFile.Name + "'");
_reader = File.OpenText(csvFile.FullName);
var csvConfiguration = new CsvConfiguration {HasHeaderRecord = false};
_csv = new CsvReader(_reader, csvConfiguration);
}
public LeafInput Parse()
{
// First 10 lines
var leafInput = ParseLeafInput();
leafInput.FileName = _csvFile.Name;
// Next 3 (Header, Units, and Values)
leafInput.Site = ParseLeafInputSite();
// Next 3 (Header, Units, and Values)
leafInput.Photosynthetic = ParseLeafInputPhotosynthetic();
// Remaining lines (Header, Units, and Data)
leafInput.Data = ParseLeafInputData();
return leafInput;
}
private LeafInput ParseLeafInput()
{
var items = new List<string>();
for (var i = 0; i < 10; i++)
{
if (!_csv.Read())
throw new ParseException("Could not read line number " + _csv.Row);
string field;
if (!_csv.TryGetField(0, out field))
throw new ParseException("Could not read first field on line number " + _csv.Row);
items.Add(field);
}
return ParsedObjectFactory<LeafInput>.Create(items.ToArray());
}
private string[] GetNextCsvRowValues()
{
// get values from row
if (!_csv.Read())
return null;
// put all the values from this row into an array
var values = new List<string>();
var index = 0;
string value;
while (_csv.TryGetField(index, out value))
{
values.Add(value);
index++;
}
return values.ToArray();
}
private LeafInputSite ParseLeafInputSite()
{
var titles = GetNextCsvRowValues();
if (titles == null)
throw new ParseException("Could not read site header row on line number " + _csv.Row);
var units = GetNextCsvRowValues();
if (units == null)
throw new ParseException("Could not read site units row on line number " + _csv.Row);
var values = GetNextCsvRowValues();
if (values == null)
throw new ParseException("Could not read site value row on line number " + _csv.Row);
var items = new List<Tuple<string, string>>();
for (var i = 0; i < titles.Length && i < values.Length; i++)
{
var item = Tuple.Create(titles[i], values[i]);
items.Add(item);
}
return ParsedObjectFactory<LeafInputSite>.Create(items.ToArray());
}
private LeafInputPhotosynthetic ParseLeafInputPhotosynthetic()
{
var titles = GetNextCsvRowValues();
if (titles == null)
throw new ParseException("Could not read photosynthetic header row on line number " + _csv.Row);
var units = GetNextCsvRowValues();
if (units == null)
throw new ParseException("Could not read photosynthetic units row on line number " + _csv.Row);
var values = GetNextCsvRowValues();
if (values == null)
throw new ParseException("Could not read photosynthetic value row on line number " + _csv.Row);
var items = new List<Tuple<string, string>>();
for (var i = 0; i < titles.Length && i < values.Length; i++)
{
var item = Tuple.Create(titles[i], values[i]);
items.Add(item);
}
return ParsedObjectFactory<LeafInputPhotosynthetic>.Create(items.ToArray());
}
private LeafInputData[] ParseLeafInputData()
{
var titles = GetNextCsvRowValues();
if (titles == null)
throw new ParseException("Could not read data header row on line number " + _csv.Row);
var units = GetNextCsvRowValues();
if (units == null)
throw new ParseException("Could not read data units row on line number " + _csv.Row);
var valueArrays = new List<string[]>();
while (true)
{
var values = GetNextCsvRowValues();
if (values == null)
break;
valueArrays.Add(values);
}
return ParsedObjectFactory<LeafInputData>.Create(titles, valueArrays.ToArray());
}
public void Dispose()
{
_reader.Dispose();
}
public static void ExportCsv(string filename, IEnumerable<LeafInput> leafInputs)
{
using (var textWriter = new StreamWriter(filename))
{
var csv = new CsvWriter(textWriter);
csv.WriteRecords(leafInputs);
}
}
}
}
+12
View File
@@ -0,0 +1,12 @@
using System;
namespace LeafWeb.Core.Services
{
public class ParseException : Exception
{
public ParseException(string message)
: base(message)
{
}
}
}
+46
View File
@@ -0,0 +1,46 @@
using System;
using System.Linq;
using System.Runtime.CompilerServices;
using LeafWeb.Core.Utility;
namespace LeafWeb.Core.Services
{
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class ParseInfoAttribute : Attribute
{
public int Position { get; private set; }
public string Units { get; private set; }
public string Title { get; private set; }
public string AlterateTitle { get; private set; }
public string ExampleValue { get; private set; }
public string[] FieldNames
{
get
{
var fieldNames = new[] {Title, Title.SplitCamelCase()};
if (!string.IsNullOrEmpty(AlterateTitle))
fieldNames = fieldNames.Concat(new[] { AlterateTitle }).ToArray();
return fieldNames;
}
}
public ParseInfoAttribute(int position, [CallerMemberName]string title = null, string units = null, string alternateTitle = null, string exampleValue = null)
{
AlterateTitle = alternateTitle;
ExampleValue = exampleValue;
Title = title;
Position = position;
Units = units;
}
public bool IsTitleMatch(string title)
{
return FieldNames.Any(t => string.Compare(title, t, StringComparison.InvariantCultureIgnoreCase) == 0);
}
public bool IsPositionMatch(int index)
{
return Position == index;
}
}
}
+159
View File
@@ -0,0 +1,159 @@
using System;
using System.Linq;
using System.Reflection;
using Fasterflect;
namespace LeafWeb.Core.Services
{
public static class ParsedObjectFactory<T> where T : new()
{
private static PropertyInfo[] GetProperties()
{
var propertyInfos = typeof(T).Properties();
return propertyInfos.Where(p => p.HasAttribute<ParseInfoAttribute>()).ToArray();
}
/// <summary>
/// Create an object type T filling properties from the given title values
/// </summary>
/// <param name="titleValues">Colon separated title: values</param>
public static T Create(string[] titleValues)
{
var properties = GetProperties();
var obj = new T();
// take each of the
for (var index = 0; index < titleValues.Length; index++)
{
PropertyInfo property = null;
string value = null;
var lineNumber = index + 1;
var row = titleValues[index];
var split = row.Split(':');
if (split.Length > 1)
{
// handles case for "Title : Value"
var title = split[0].Trim();
value = split[1].Trim();
property =
properties
.FirstOrDefault(p => p.Attribute<ParseInfoAttribute>().IsTitleMatch(title));
}
if (property == null)
{
// handles case for row number, i.e. "Value"
value = row.Trim();
property =
properties
.FirstOrDefault(p => p.Attribute<ParseInfoAttribute>().IsPositionMatch(lineNumber));
}
if (property != null)
{
object convertedVal;
if (!TryConvertValue(property, value, out convertedVal))
throw new ParseException(string.Format("Cannot convert value '{0}' for {1} at line number {2}", value, property.Name, lineNumber));
property.Set(obj, convertedVal);
}
}
return obj;
}
public static T[] Create(string[] titles, string[][] valueArrays)
{
var properties = GetProperties();
var objs = new T[valueArrays.Length];
for (var vIndex = 0; vIndex < valueArrays.Length; vIndex++)
{
var obj = new T();
var values = valueArrays[vIndex];
for (var tIndex = 0; tIndex < titles.Length; tIndex++)
{
var title = titles[tIndex];
var value = values[tIndex];
var position = tIndex + 1;
if (IsMissingValue(value))
continue;
var property = MatchProperty(properties, title, position);
if (property != null)
{
object convertedVal;
if (!TryConvertValue(property, value, out convertedVal))
throw new ParseException(string.Format("Cannot convert value '{0}' for {1} in position {2}", value, property.Name, position));
property.Set(obj, convertedVal);
}
}
objs[vIndex] = obj;
}
return objs;
}
public static T Create(Tuple<string, string>[] titleValues)
{
var properties = GetProperties();
var obj = new T();
for (var index = 0; index < titleValues.Length; index++)
{
var item = titleValues[index];
var position = index + 1;
var title = item.Item1.Trim();
var value = item.Item2.Trim();
if (IsMissingValue(value))
continue;
var property = MatchProperty(properties, title, position);
if (property != null)
{
object convertedVal;
if (!TryConvertValue(property, value, out convertedVal))
throw new ParseException(string.Format("Cannot convert value '{0}' for {1} in position {2}", value, property.Name, position));
property.Set(obj, convertedVal);
}
}
return obj;
}
private static bool IsMissingValue(string value)
{
return string.IsNullOrEmpty(value) || value == "NA" || value == "-9999";
}
private static PropertyInfo MatchProperty(PropertyInfo[] properties, string title, int position)
{
var property =
properties
.FirstOrDefault(p => p.Attribute<ParseInfoAttribute>().IsTitleMatch(title));
if (property == null)
{
property =
properties
.FirstOrDefault(p => p.Attribute<ParseInfoAttribute>().IsPositionMatch(position));
}
return property;
}
private static bool TryConvertValue(PropertyInfo property, object value, out object convertedValue)
{
try
{
// http://stackoverflow.com/questions/3531318/convert-changetype-fails-on-nullable-types
var t = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
convertedValue = Convert.ChangeType(value, t);
}
catch (Exception)
{
convertedValue = null;
return false;
}
return true;
}
}
}
+17
View File
@@ -0,0 +1,17 @@
using System;
using System.Globalization;
using System.Linq;
namespace LeafWeb.Core.Utility
{
public static class StringExtensions
{
public static string SplitCamelCase(this string str)
{
return str.Aggregate(
String.Empty,
(current, c) =>
current + (Char.IsUpper(c) && current.Length > 0 ? " " + c : c.ToString(CultureInfo.InvariantCulture)));
}
}
}
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CsvHelper" version="2.13.2.0" targetFramework="net45" />
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />
<package id="fasterflect" version="2.1.3" targetFramework="net45" />
</packages>
+12
View File
@@ -5,6 +5,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web", "Web\Web.csproj", "{0
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Tests", "Web.Tests\Web.Tests.csproj", "{0DBE7CB9-71B3-46BA-8045-0F1E36C1C8F7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{25BAED75-7E75-4D11-90D9-358472054DF6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Tests", "Core.Tests\Core.Tests.csproj", "{8207F6FE-EA80-41CA-81B5-ACD020FB0F3C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -19,6 +23,14 @@ Global
{0DBE7CB9-71B3-46BA-8045-0F1E36C1C8F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0DBE7CB9-71B3-46BA-8045-0F1E36C1C8F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0DBE7CB9-71B3-46BA-8045-0F1E36C1C8F7}.Release|Any CPU.Build.0 = Release|Any CPU
{25BAED75-7E75-4D11-90D9-358472054DF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{25BAED75-7E75-4D11-90D9-358472054DF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25BAED75-7E75-4D11-90D9-358472054DF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25BAED75-7E75-4D11-90D9-358472054DF6}.Release|Any CPU.Build.0 = Release|Any CPU
{8207F6FE-EA80-41CA-81B5-ACD020FB0F3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8207F6FE-EA80-41CA-81B5-ACD020FB0F3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8207F6FE-EA80-41CA-81B5-ACD020FB0F3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8207F6FE-EA80-41CA-81B5-ACD020FB0F3C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+1 -1
View File
@@ -7,7 +7,7 @@
<ProjectGuid>{0DBE7CB9-71B3-46BA-8045-0F1E36C1C8F7}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Web.Tests</RootNamespace>
<RootNamespace>LeafWeb.Web.Tests</RootNamespace>
<AssemblyName>Web.Tests</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>