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.
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
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 forest | 84 |
| X: old field / disturbed | 40 |
| Bottomland | 35 |
| Open (natural) | 12 |
| Streamside | 10 |
The output files
| file | rows | contents |
|---|---|---|
sites.csv | 181 | one row per 0.1 ha plot: name, place, date, vegetation type, which layers have data |
site_environment.csv | 111 | slope, aspect, landscape position, drainage, elevation, soil pH and soil notes |
woody_stems.csv | 2058 | stems >1 m tall per species: counts in 3 diameter classes + basal area |
woody_dbh_tally.csv | 131 | stem counts by 2-cm diameter class (the only three plots whose tallies survive) |
ground_layer.csv | 7101 | plants <1 m per species: quadrats present and summed % cover |
taxa.csv | 995 | species codes to names, separately for each file family |
releve_sites / releve_environment / releve_woody_cover.csv | 223 / 223 / 2203 | the separate rapid-survey plots (visual cover of woody species only) |
flags.csv | 1163 | every value that needed a judgement or could not be settled |
raw_inventory.csv | 17 | every 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:
| question | flagged records | |
|---|---|---|
| Q02 | Plot 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 |
| Q08 | Diameter 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 |
| Q14 | Zero 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 |
| Q03 | Sites 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 |
| Q18 | Keys 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 |
| Q06 | Sites 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 |
| Q10 | Undocumented 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 |
| Q16 | Quadrat 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
| question | flagged records | |
|---|---|---|
| Q01 | Survey 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 |
| Q04 | Site 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 |
| Q05 | Sites 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 |
| Q07 | Releve 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 |
| Q09 | Trailing 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 |
| Q11 | Site 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 |
| Q12 | Conflicting 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 |
| Q13 | Smilax 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 |
| Q15 | Site 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 |
| Q17 | Soil 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 |
| Q19 | Maple 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 |
| Q20 | Releve 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 |
| Q21 | Doubted 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 |
| Q22 | Species 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 |
| Q23 | Releve 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
- Start with
output/DATA_DICTIONARY.md. Units are per plot (0.1 ha); multiply by 10 for per hectare. - Filter on flags before analysis. For example, drop or model the cover of ground-layer rows
with
cover_missing_or_trace, and exclude growth form 4 when counting species. - Do not compare woody records with ground-layer records on the code. Join through
taxa.csv. - Names are as recorded, with spelling tidied. Nomenclature has not been updated to a modern checklist; that is a separate, reviewable step for the resurvey.