Central Finger Lakes vegetation survey, 1973–1992

A clean, analysis-ready baseline for resurveying the plots, rebuilt from the backup-CD spreadsheets. This page covers what the data contain, what was done to them, and what could not be resolved from the files alone.

181
tenth-hectare plots, 1973–1992
79,937
woody stems counted
7,101
ground-layer species records
223
rapid releve plots (separate)
1,163
flags raised
23
questions for the collectors

1. What is in the data

Between 1973 and 1992, Marks, Mohler, Gardescu and colleagues sampled forests, swamps, bogs, marshes and old fields across the central Finger Lakes region. The survey was the basis for the 2006 guide to the region's plant communities. At each site they laid out a tenth-hectare plot (50 × 20 m) and recorded three things:

  • Woody layer. Every tree, shrub and woody vine over 1 m tall, counted by species in three trunk-diameter classes (<1 cm, 1–5 cm, >5 cm at breast height). Basal area (the summed cross-section of the trunks) was calculated from those counts.
  • Ground layer. Plants under 1 m in 25 small quadrats along the plot's midline (10 at 20 sites): how many quadrats held each species, and its percent cover. Species seen in the plot but in no quadrat are listed too.
  • Site environment. Slope, aspect, landscape position, soil drainage, elevation and surface-soil pH (plot-level; for 111 of the plots).

Separately, 223 relevés (1985–1992) used a faster method, with visual cover estimates of the woody species only. They are kept in their own tables.

Plots sampled per year

020401973: 6 plots731974: 13 plots1975: 9 plots751976: 14 plots1977: 7 plots771978: 8 plots1979: 53 plots791980: 43 plots1981: 21 plots811982: 2 plots831984: 2 plots8587891991: 2 plots911992: 1 plot

Most plots date from 1979–81. The two 1991 plots are probably 1981 (see Q03).

Plots by major type

major type (as recorded)plots
Upland forest84
X: old field / disturbed40
Bottomland35
Open (natural)12
Streamside10

The output files

filerowscontents
sites.csv181one row per 0.1 ha plot: name, place, date, vegetation type, which layers have data
site_environment.csv111slope, aspect, landscape position, drainage, elevation, soil pH and soil notes
woody_stems.csv2058stems >1 m tall per species: counts in 3 diameter classes + basal area
woody_dbh_tally.csv131stem counts by 2-cm diameter class (the only three plots whose tallies survive)
ground_layer.csv7101plants <1 m per species: quadrats present and summed % cover
taxa.csv995species codes to names, separately for each file family
releve_sites / releve_environment / releve_woody_cover.csv223 / 223 / 2203the separate rapid-survey plots (visual cover of woody species only)
flags.csv1163every value that needed a judgement or could not be settled
raw_inventory.csv17every raw file, its checksum, and what it was used for

Everything is plain CSV, documented column by column in output/DATA_DICTIONARY.md. The 0.1 ha tables join on site_id. Species join to taxa.csv on (file family, code), never on the code alone. Across the whole survey there are 786 distinct names, and 744 ground-layer codes that are plants (the rest are logs, rock, water, moss and the like).

2. What was done to it

The raw files were never edited. A Python pipeline reads raw/ and writes output/. The whole thing rebuilds, and checks itself, with one command:

python3 run.py

Several datasets exist in two copies (an early-2000s export and a 2004–06 corrected workbook). The corrected copy is the base, because it carries documented fixes made from pencil notes on the 1985 printouts. The other copy, the surviving diameter tallies and the compilers' own summary sheets are then used to check it. Every judgement call is written up in DECISIONS.md with its evidence and the alternative not taken. Every affected value carries a flag ID pointing into flags.csv. The main problems the files posed:

Fixed-width text read by position

The 2002 tree file wraps every record over two lines, and values of 100 or more run into their neighbour (230.0022.23932 is two numbers). Parsed by character position, it matches the 2004 spreadsheet exactly on all 2,019 shared records, once you divide by 10 (it is per hectare).

An importance value that was never a number

The spreadsheet's IMPORTANCE column is the text file's importance value with a one-digit flag glued onto the end (33.90 and 1 became 33.901). Derived columns like this are not carried forward; they can be recomputed from the stem counts.

Two date systems

Some workbooks count days from 1900 (Windows), others from 1904 (Mac). Mixing them shifts dates by four years. Each workbook's own system is used, and every date is checked against the separate month/day columns and a sample of the scanned stand index.

Codes that mean different plants

COAM is Corylus americana in the ground-layer files but Cornus amomum in the tree files. ROSP is Rorippa or Rosa; SAPU is Sarracenia or Sambucus. Codes are therefore looked up per file family, and layers are joined on the cleaned name.

Blanks with three meanings

In the ground layer a blank can mean 'in the plot but in no quadrat' (documented, so filled with 0), 'cover not entered or a trace' (kept, flagged) or 'placeholder row' (dropped). In the tree file an all-zero row can mean 'no stems' or 'never entered' (site 87's trees exist on a separate tally sheet).

Independent copies disagree

Where an older copy, a diameter tally or the compilers' own summary sheet disagrees with the base file, the base value is kept and the disagreement is flagged: e.g. site 79 Betula nigra vs B. lenta, releve R37 white ash 10% vs 40%, site 207 basal area.

How the result was checked

The test suite (tests/test_outputs.py) re-reads the raw files independently of the pipeline and compares them with the outputs, row by row. It also checks the outputs against the compilers' own site totals (basal area, stem counts, cover matrices, the 10-quadrat sheet), and a dozen rows against the scanned stand index. It checks too that every column is documented and that every flag points to a real decision. The report is written only if all tests pass. To check the tests themselves, tests/mutation_check.py deliberately breaks five steps (wrong date system, naive text parsing, blanks left unfilled, one global species list, shifted diameter classes). When last run, the suite caught all five. Build environment: Python 3.9.6, pandas 2.3.3, xlrd 2.0.2.

3. What could not be resolved

Where the files do not settle a question, the value is left as recorded, flagged, and turned into a question for the people who collected the data (QUESTIONS.md). Nothing was guessed. These eight matter most for a resurvey:

questionflagged records
Q02Plot locations
No file in raw/ gives coordinates, a plot origin, an orientation of the 50 x 20 m plot, or the line the quadrats were placed on. Location is given only as a topographic quadrangle and quadrant, and many sites mark even that as uncertain. Relocating plots for the resurvey needs the field maps, datasheets, photos (several X sites say 'see photo'), or any corner markers. Where are they?
23
Q08Diameter classes and units, 1973-74 versus later
At sites 31-46 (1973-74), basal area of the small stems works out to exactly 1-inch-diameter stems. From 1975 on it works out to 2-cm classes. The column headers say '<1 cm, 1-5 cm, >5 cm'. Were the early plots tallied in inches (e.g. <1 in, 1-2 in, >2 in), and what were the exact class limits in each period? The resurvey needs matching limits to compare stem counts.
whole dataset
Q14Zero cover for species present in quadrats
Ground-layer records (count below) have the species in one or more quadrats but a cover sum of 0 or blank. The 2005 Notes say early stands 'have 0 entered for any woody spp in quads', but most of these rows are herbs, spread over every year, and most are single-quadrat occurrences. Were trace covers (<1%) entered as 0, or was cover not entered? Do the original datasheets have the values?
988
Q03Sites 187 and 188: 1991 or 1981?
Both are dated 30 June 1991 in the spreadsheet and the stand index, but every neighbouring site (184-189) was sampled 18 June to 2 July 1981. Is 1991 a typing error for 1981?
2
Q18Keys to the environment codes
No document gives the keys for 'aspect#' (1-5), slope 'position' (1-5), 'dist'/'disturb' (1-5) or drainage (1-6). Drainage is probably the six USDA classes, 1 = very poorly drained. Please confirm, and give the other keys. Flat sites have aspect# 3 in one sheet and blank in the other.
47
Q06Sites with no woody rows
Several sites (count below) have only an empty all-zero row in the woody file. For open sites (marshes, young fields) that may mean 'no stems >1 m tall'. But 47 and 49 are described as woods, and 87's trees are known to be missing from the files. For which sites was the woody layer sampled and truly empty, and for which was it not sampled or not entered?
19
Q10Undocumented species-code changes between file versions
Stem or cover values stay the same but the code changed, and no note explains it: site 79 BENI (Betula nigra, 2002) -> BELE (Betula lenta, 2004); site 208 ROSA -> ROSP; ground layer site 89 EUSE (Eupatorium sessilifolium, 2002) -> HEDI (Helianthus divaricatus, 2005). Which identification is right?
2
Q16Quadrat size
The methods say 1 x 1 m quadrats, but a sheet header says '1m2 (or 1/2)'. Which sites used half-square-metre quadrats? Also: why 10 rather than 25 quadrats at the 20 ten-quadrat sites (mostly old fields, plus site 140)?
whole dataset

The biggest practical gap is the first one. No file gives plot coordinates, orientation or corner markers, only a map quadrangle, which is uncertain for many sites. Relocating the plots will depend on field maps and photographs that are not in raw/.

Two more caveats for anyone comparing old and new data. First, in 149 of 180 plots, some species found in quadrats have zero cover (988 records). Frequency is still usable for those records, but cover is not. Second, the 1973–74 stem counts appear to use inch-based size classes. Stem counts by size class may therefore not be comparable across the two periods until Q08 is answered.

Other open questions

questionflagged records
Q01Survey scope and site numbering
The methods chapter counts 140 tenth-hectare sites and 222 releves. The files hold 181 tenth-hectare sites (31-210, plus 219) and 223 releves. Which 140 sites does the chapter mean? Did sites 1-30 and 211-218 ever exist (another survey, discarded, or numbers never used)?
whole dataset
Q04Site 219 date
Site 219 (Chicago/'Donut' Bog) has a date serial of 8 Oct 1992 but blank month/day columns, and is described as 'not in old files'. Is 8 Oct 1992 the actual sampling date? Who sampled it, and was it the same protocol?
1
Q05Sites 47 and 49 share the code SM-MISS
Two different Smith Woods plots (cemetery side; lowland) have the same acronym, and both are 'not on map'. Are they separate plots, and where were they?
2
Q07Releve plot size and method
The releves are described only as a 'more rapid method' with visually estimated cover of trees and shrubs. What area did a releve cover, how was its centre chosen, and were canopy and subcanopy estimated separately? A resurvey needs this to repeat the method.
whole dataset
Q09Trailing digit in ALLT.DATA
Each record of the 2002 text file ends in a one-digit field: 1 in 2,017 records, 0 at 66 ACRU and 68 ACRU, 2 at 153 OSVI. What does it mean?
3
Q11Site 87 (Lounsberry Cow Lot) tally sheet
Which species are 'Hawthorn' and 'Elderberry'? 'Ribes' and 'Viburnum prunifolium' are listed with no stems: were they present below 1 m, or tallied elsewhere? The 39 cm basswood: 38 or 40 cm class? Should the dead 34 cm hemlock count?
7
Q12Conflicting names for the same code
VIRI is Vitis vulpina in the woody files but Vitis riparia in the releve files, and SAPB is Sambucus racemosa (2005) vs S. pubens (2002) in the ground files. Which species was meant?
2
Q13Smilax growth form
Smilax sp. (site 81) is coded 2.5, 'vine? herb?'. Which category should it count in for the shrub/vine vs herb totals?
1
Q15Site 219 cover arithmetic
At site 219, mean cover does not equal cover sum / 25 for CHCA, ERVI and VAMA (e.g. 94.80 vs 2371/25 = 94.84). Which number was entered from the datasheet?
3
Q17Soil pH gaps and oddities
Site 197 pH reads '[6.2muck below peat no#' in one sheet and 6.4 in another. Sites 209 and 210 read 'no#'. Site 148 has an unexplained number (193.65) beside its pH. What are the correct surface pH values?
7
Q19Maple swamp soil sheet vs environment sheet
Where 'Maple swamp soils.xls' disagrees with the environment sheet on drainage, disturbance or pH (listed in flags.csv), which is current?
whole dataset
Q20Releve map code and missing releve data
What do 'R' and 'X' in the releve 'Map' column mean? RELEVE.DATA stops at R215. Cover for R218, R219, R222 and R223 survives only in the compilers' EstPctCov matrix, with the note 'SG est. 10:1 for subc for 218-223'. What does that note mean (a canopy:subcanopy weighting?), and is there woody data for R216, R217, R220 and R221?
4
Q21Doubted identifications (Polygonatum / Uvularia)
The 2005 Notes doubt the P. biflorum and U. sessilifolia records at sites 43, 50, 102, 124, 157, 189 and 191. Should they be re-identified to P. pubescens / P. commutatum for the baseline, or kept as recorded?
7
Q22Species entered twice in a releve
In RELEVE.DATA, 10 species are entered twice for the same releve (e.g. R18 TSCA 40 and 5). Are these separate canopy and subcanopy estimates (so the sum is right, as the EstPctCov matrix assumes), or duplicate entries?
10
Q23Releve R37 white ash cover
RELEVE.DATA gives FRAM (white ash) 10% at R37; the compilers' EstPctCov matrix gives 40%. Every other releve-species value agrees between the two. Which is right?
1

4. Using it