diff --git a/CLAUDE.md b/CLAUDE.md index f5858d9..db9fbbb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -312,6 +312,24 @@ handed a 0.1 row back to #54's repair. `bc79027` reads ÷10 but spacing rejects logs 80% overlap against the ~60% window. `bcb98013` frame 52 is a leading-digit typo that no factor recovers. Neither case moved the rule +- **A same-roll adjacent frame is a third witness, and its tolerance is the catalogue's +storage, not 2%** (#74) — where no logbook settles a roll-height, a frame one number away on the +same roll, lens and scale, itself in band, whose height the catalogue's stands in an +**exact** relation to (×10, ÷10, ÷100, ×10.764, one leading digit) settles it at the +neighbour's height, with spacing agreeing and a logbook vetoing only by naming a different +factor. Rule fixed before running, run over all 521 excluded roll-heights: 5 settle (138 +frames), `bc5596` and `bcb98013` plus `bc7675`/`bc87070`/`bcc822` in the lower tail, each +corroborated by a logbook row its own rule could not accept. **The tolerance is load-bearing +in both directions.** `bc5596` 204–211 sit between 2,621 m (×10 to 2 m) and 2,438 m (×10.764 +to 30 m, 0.12%), so at 2% the two neighbours name different relations and the generator's +control stops. And the catalogue **truncates** as well as rounds (2,000 ft is 609 on +`bc5449`), so `exact()` is `big − k·small ∈ [−(1 + k/2), k + 1/2]`; the rounding-only form +refused `bc7675`, and a test pins it. That bound covers 0.3048 m/ft conversions only; a +figure converted at 3.28 ft/m (20,000 ft as 6,098) falls outside and refuses, which moves no +outcome today. ×10.764 is named so a neighbour confirming #54 +*can* contradict one naming ×10 — without it the tolerance guarded nothing. Blind to a roll +whose every frame carries the defect, which is most of the upper tail + ## Gotchas - `.lintr` must be single-line DCF format — multi-line breaks newer lintr versions diff --git a/NEWS.md b/NEWS.md index 57498c5..54d187f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,9 @@ # fly (development version) +- **A frame beside a disputed roll-height on the same roll is now a third witness, and it settles five roll-heights no logbook does** ([#74](https://github.com/NewGraphEnvironment/fly/issues/74)). The rule was fixed before it was run. A neighbour one frame away, on the same roll, lens and scale, must itself sit in the band, and the catalogue's height must stand in an **exact** named relation to it: ×10, ÷10, ÷100, ×10.764 or one leading digit. Exact means within what storing whole metres of a 0.3048 m/ft conversion can move a figure, and the catalogue both rounds and truncates. A figure converted at 3.28 ft/m can only be refused by it, never wrongly accepted. Every neighbour naming a relation must name the same one, and spacing must agree. A logbook vetoes it only by naming a different factor. The rule was run over all 521 roll-heights the logbook leaves excluded, in both tails. `bc5596` 204–211 (26,212 m, ten times frame 203) and `bcb98013` frame 52 (97,924 m, a leading 9 on its neighbours' 7,924) leave #54's ÷10.764, which drew them 10.3–11.2% narrow and 17.1% wide in linear size. Three lower-tail roll-heights beyond the issue come out of `"implausible"`: `bc7675` 609 → 6,096 m, `bc87070` 396 → 3,962 m and `bcc822` 701 → 7,010 m. The logbook corroborates each in rows its own rule could not accept +- **The tolerance is the catalogue's storage, not the logbook's 2%, and that is load-bearing.** `bc5596` 204–211 sit between 2,621 m and 2,438 m. The first is ×10 to 2 m; the second is ×10.764 to 30 m, only 0.12%. At 2% the two neighbours name different relations, and the generator's control stops the run. The first form assumed rounding only. Code review found truncated heights (2,000 ft stored as 609 m), and that form had refused `bc7675`; the corrected form changes that outcome and no other +- `flying_height_rolls.csv` gains **`witness`** (`"logbook"` | `"sibling"`) and **`sibling_frame`**. A sibling row ships the neighbour's catalogued height and has no `logbook_ft`. A leading-digit row's `factor` is the ratio it implies, and its cause is `height_leading_digit_added`. `flying_height_rolls_excluded.csv` gains **`sibling_reason`**. The table now reaches 1,438 frames (1,130 lower, 308 upper), and 1,281 slipped frames stay on ÷10.764. No change to `fly_footprint()`'s logic + ## 0.16.0 (2026-09-26) - **Where a logbook reads #54's slipped frames, their height is ÷10, not ÷10.764, and those roll-heights are now carried in the roll table** ([#71](https://github.com/NewGraphEnvironment/fly/issues/71)). #54 divides `flying_height` by 3.28084² on 1,589 film frames, and ÷10 lands every one of them in the band just as well, so the terrain could not choose. The logbook pages covering the slipped frames of five rolls were fetched and read blind, with the catalogue values withheld from the reader. On four (`bc78078`, `bc79027`, `bc79103`, `bcc00085`), and on the fly#60 control `bc78065`, the crew's height is the catalogue's ÷10: within 0.01%, and 0.9% off on `bc79027`. It sits 6.7–7.6% above ÷10.764 on every one. On the tabled roll-heights #54 was drawing frames **7.6–9.9% narrow** (15–19% in area); width follows height above ground, so the error exceeds the 7.6% gap between the factors diff --git a/R/fly_footprint.R b/R/fly_footprint.R index c43c0c5..9448898 100644 --- a/R/fly_footprint.R +++ b/R/fly_footprint.R @@ -205,11 +205,12 @@ fly_dem_coverage_min <- function() 0.95 # choose between them. The logbooks can: on five of the six rolls before 2003 whose # slipped frames a page covers, the crew's height is the catalogue's divided by 10, to 0.9% # (the sixth is a one-frame typo no factor fits), and the roll-heights that also pass the -# spacing check are carried in `flying_height_rolls.csv`, which is consulted first. What -# reaches this factor is the 2003-2005 rolls, which have no logbook (the 2003 ones carry -# measured per-frame heights and fit 10.764 better; `bcc05001` is undecided), plus 19 -# older frames the table does not reach, each listed with its reason in -# `flying_height_rolls_excluded.csv`. +# spacing check are carried in `flying_height_rolls.csv`, which is consulted first. Two more +# are settled there by the same roll's adjacent frames (fly#74): `bc5596` 204-211, ten times +# frame 203, and that one-frame typo. What reaches this factor is the 2003-2005 rolls, which +# have no logbook (the 2003 ones carry measured per-frame heights and fit 10.764 better; +# `bcc05001` is undecided), plus the 10 frames of `bc79027` whose spacing rejects its +# logbook, each listed with its reason in `flying_height_rolls_excluded.csv`. fly_height_slip_factor <- function() 3.28084^2 # How far a frame's height above ground may sit from `scale x focal_length` before the DEM @@ -254,6 +255,14 @@ fly_flying_height_max <- function() 16000 # which side of the band the roll-height came from. `height_m` is the height used — the logbook's, # converted, since the catalogue's rounding survives multiplying by the factor. # +# fly#74 added a third witness where no logbook settles a roll-height: a frame adjacent by +# number on the same roll, lens and scale, itself in band, whose height the catalogue's stands +# in an EXACT relation to (x10, /10, /100 to what storing whole metres of a 0.3048 m/ft +# conversion, rounded or truncated, can move a figure, or one leading digit). +# `witness` says which settled a row; a sibling row ships the sibling's catalogued height, +# names it in `sibling_frame`, and has no `logbook_ft`. A leading-digit row's `factor` is the +# ratio it implies rather than a named slip; only `factor != 1` is read from it here. +# # Keyed on roll, height, lens and scale together, so the table reaches only the frames it # was measured on. Every lower-tail roll-height it does not correct, and every #54-slipped one # it does not reach, is listed with its reason in `flying_height_rolls_excluded.csv`: an @@ -266,7 +275,7 @@ fly_height_roll_table <- function() { stop("`flying_height_rolls.csv` is missing from the installed package.", call. = FALSE) } utils::read.csv(path, colClasses = c(film_roll = "character", cause = "character", - tail = "character")) + tail = "character", witness = "character")) } # The DEM-aligned grid a single footprint is counted against. @@ -688,7 +697,8 @@ fly_is_square <- function(footprints) { #' 1974 and 2005 — a feet-to-metres conversion applied the wrong way round, which #' draws a 1:35000 frame 110 km across. On six roll-heights flown 1978-2000 the flight #' logbooks show the factor is exactly 10 instead (fly#71), and those frames are -#' carried in the roll table below. A film frame states its height above +#' carried in the roll table below, as are two more that the same roll's +#' adjacent frames settle (fly#74). A film frame states its height above #' ground twice, as `flying_height` minus terrain and as scale times focal length, #' so the two are compared, and `height_source` records the outcome: #' @@ -702,10 +712,11 @@ fly_is_square <- function(footprints) { #' elevation} #' \item{`"corrected_roll_table"`}{they disagree, and the frame sits on one of #' the roll-heights in `inst/extdata/flying_height_rolls.csv`, which the -#' province's flight logbooks and the spacing between adjacent frames settled -#' (fly#60, fly#71): a height with one or two digits dropped (a logbook "20.0", +#' province's flight logbooks, or failing them an adjacent frame on the same +#' roll in an exact named relation, together with the spacing between adjacent +#' frames, settled (fly#60, fly#71, fly#74): a height with one or two digits dropped (a logbook "20.0", #' thousands of feet, catalogued as 2,000 ft), a height recorded ten times too -#' large, or a correct height beside a wrong `scale`. Checked before the +#' large, a leading digit added, or a correct height beside a wrong `scale`. Checked before the #' 10.76 slip above. Sized from the measured height; matched on `film_roll`, #' `flying_height`, `focal_length` and `scale` together, so it needs a #' `film_roll` column. As with the slip, `flying_height` is not overwritten} @@ -723,7 +734,7 @@ fly_is_square <- function(footprints) { #' } #' #' Measured over the whole catalogue, the two corrections for a height that is too -#' large apply to those 1,589 frames and to nothing else: 299 by the roll table, +#' large apply to those 1,589 frames and to nothing else: 308 by the roll table, #' the rest by 10.76. A digital frame's `scale` is a nominal figure, not #' its image scale, so it is not compared: only the 16,000 m ceiling, or terrain at #' or above the aircraft, can refuse one. To list the frames worth a second look: @@ -1108,8 +1119,9 @@ fly_footprint <- function(centroids_sf, negative_size = 9, format_size = NULL, # two are compared, and a frame outside `fly_height_ratio_band()` is not sized from # its `flying_height` as it stands. Where dividing by `fly_height_slip_factor()` brings # it back inside, that is the slip and the corrected height is used; measured over the - # whole catalogue the repair fires on the 1,589 and on nothing else, less the 299 on - # 1978-2000 rolls whose logbooks say x10, which the roll table takes first (fly#71). + # whole catalogue the repair fires on the 1,589 and on nothing else, less the 308 the + # roll table takes first: 299 on 1978-2000 rolls whose logbooks say x10 (fly#71), and 9 + # an adjacent frame on the same roll settles (fly#74). # Anywhere else the two disagree and nothing here can say which is wrong, so the frame # falls back to nominal scale, exactly as one with unusable metadata does. # @@ -1316,9 +1328,10 @@ fly_footprint <- function(centroids_sf, negative_size = 9, format_size = NULL, if (any(roll_tabled)) { warning( sum(roll_tabled), " of ", sum(dem_eligible), " frames sit on a roll whose ", - "`flying_height` disagreement was settled by the flight logbooks and the spacing ", - "between frames (`flying_height_rolls.csv`): a height with dropped digits or ", - "recorded ten times too large, or a ", + "`flying_height` disagreement was settled by the flight logbooks or an adjacent ", + "frame on the same roll, and the spacing between frames ", + "(`flying_height_rolls.csv`): a height with dropped digits, recorded ten times ", + "too large or with a leading digit added, or a ", "correct height beside a wrong `scale`. Sized from the measured height; ", "`flying_height` is left as supplied and `height_agl` is the height used. ", "See `height_source`.", diff --git a/data-raw/height_calibrate-lower_tail_rolls.R b/data-raw/height_calibrate-lower_tail_rolls.R index 13b3d10..0a3c82a 100644 --- a/data-raw/height_calibrate-lower_tail_rolls.R +++ b/data-raw/height_calibrate-lower_tail_rolls.R @@ -405,6 +405,170 @@ v$reason <- dplyr::case_when( v$n_base == 0 ~ "no adjacent frames to measure spacing on", TRUE ~ "spacing rejects the logbook's height" ) +# Numbers formatted as `fly_footprint()` formats them, so the two keys cannot spell one +# value two ways (100000L is "100000" to `paste()`, 100000 is "1e+05"). +num <- function(x) formatC(as.numeric(x), format = "f", digits = 3) +key4 <- function(roll, h, f, sc) paste(roll, num(h), num(f), num(sc)) + +# --------------------------------------------------------------------------- +# Stage 5b — a third witness: the same roll's adjacent frames (fly#74) +# --------------------------------------------------------------------------- +# +# Some roll-heights no logbook settles are one digit away from the frame beside them: bc5596 +# 204-211 read 26,212 m where frame 203 reads 2,621, and bcb98013 frame 52 reads 97,924 where +# frames 51 and 53 read 7,924. The rule, fixed before it was run over the population, and run +# over EVERY roll-height the logbook rule left excluded, in both tails: +# 1. adjacent: a frame numbered one away from a frame of the roll-height, on the same roll, +# lens and scale, at a different height — the adjacency `fly_bearing()` demands; +# 2. that neighbour's height is itself in the band, against this roll-height's own median +# terrain (neighbours are not sampled, so this is a proxy; `fly_footprint()` holds each +# frame to the band again); +# 3. the catalogue height stands in an EXACT named relation to it: upper tail x10, x10.764 +# or one leading digit added; lower tail /10, /100 or the leading digit dropped. x10.764 +# is named for the reason the logbook names it: a neighbour confirming #54 must be able +# to contradict one naming x10, and a roll-height every neighbour puts at x10.764 is left +# to #54's repair, which already sizes it from the same height. Exact means within +# what the catalogue's storage of a converted figure can move it: it keeps whole +# metres, sometimes ROUNDED and sometimes TRUNCATED (2,000 ft = 609.6 m is stored as +# 609 on bc5449, whose logbook this table already reads). So with the larger height +# `big`, the smaller `small`, and each off its true value by a in [-0.5, 1), +# big - k small lies in [-(1 + k/2), k + 1/2]; and string identity for the digits. +# That covers figures converted at 0.3048 m/ft. Some were converted at 3.28 ft/m and +# rounded (20,000 ft is 6,098 on 2,677 frames), which can put a genuine relation +# outside the bound: such a pair is REFUSED, never wrongly accepted, and no pair in +# today's data sits between the bound and twice its width (code-check round 4); +# Not the logbook's 2%: bc5596 204-211 sit between 2,621 m (x10 to 2 m) and 2,438 m +# (x10.764 to 30 m, 0.12%), and 2% lets both name a relation; +# 4. every in-band neighbour that names a relation names the same one, at one height, and +# at least one does. A neighbour naming nothing is a new leg, not a contradiction; +# 5. a logbook that named a factor for these frames named this one. A logbook that names +# none vetoes nothing — it is evidence for no repair, #54's included; +# 6. spacing under the sibling's height inside the window, as for the logbook. +# The height shipped is the sibling's catalogued height. + +frames$scale_n <- suppressWarnings(as.numeric(sub("^1:", "", frames$scale))) +cat_key <- key4(frames$film_roll, frames$flying_height, frames$focal_length, frames$scale_n) +cols_lt <- c("film_roll", "flying_height", "focal_length", "scale_n", "frame_number", "elev", + "base", "f_m", "nominal_agl") +lt_all <- rbind(lower_v$frames[, cols_lt], upper_v$frames[, cols_lt]) +lt_key <- key4(lt_all$film_roll, lt_all$flying_height, lt_all$focal_length, lt_all$scale_n) +digits <- function(x) formatC(x, format = "d", big.mark = "") + +# The relation `h` stands in to sibling height `sib`, named as the factor that takes the +# catalogue to the truth (the table's `factor`), or NA. Heights are whole metres. +relation <- function(h, sib, tail) { + exact <- function(big, small, k) { + r <- big - k * small + r >= -(1 + k / 2) && r <= k + 1 / 2 + } + hd <- digits(h) + sd <- digits(sib) + if (tail == "upper") { + named <- c(x10 = exact(h, sib, 10), xK = exact(h, sib, K), + digit = nchar(hd) == nchar(sd) + 1 && substring(hd, 2) == sd) + } else { + named <- c(d10 = exact(sib, h, 10), d100 = exact(sib, h, 100), + digit = nchar(sd) == nchar(hd) + 1 && substring(sd, 2) == hd) + } + names(named)[named] +} +rel_factor <- function(rel, h, sib) { + switch(rel, x10 = 1 / 10, xK = 1 / K, d10 = 10, d100 = 100, digit = round(sib / h, 6)) +} + +sibling <- function(i) { + out <- list(ok = FALSE, reason = NA_character_, factor = NA_real_, height = NA_real_, + rel = NA_character_, frame = NA_real_, p = NA_real_, r = NA_real_) + k <- key4(v$film_roll[i], v$flying_height[i], v$focal_length[i], v$scale_n[i]) + own <- frames[cat_key == k, ] + d <- lt_all[lt_key == k, ] + nb <- frames[frames$film_roll == v$film_roll[i] & + frames$focal_length == v$focal_length[i] & + frames$scale_n %in% v$scale_n[i] & + frames$flying_height != v$flying_height[i] & + frames$frame_number %in% c(own$frame_number - 1, own$frame_number + 1), ] + if (!nrow(nb)) return(modifyList(out, list(reason = "no adjacent frame at another height"))) + nominal <- v$scale_n[i] * v$focal_length[i] / 1000 + nb <- nb[in_band((nb$flying_height - median(d$elev)) / nominal), ] + if (!nrow(nb)) return(modifyList(out, list(reason = "no adjacent frame in band"))) + rels <- lapply(nb$flying_height, function(sib) relation(v$flying_height[i], sib, v$tail[i])) + naming <- lengths(rels) > 0 + if (!any(naming)) { + return(modifyList(out, list(reason = "no adjacent frame in an exact named relation"))) + } + named <- unlist(rels[naming]) + sib_h <- unique(nb$flying_height[naming]) + if (any(lengths(rels) > 1) || length(unique(named)) > 1 || length(sib_h) > 1) { + return(modifyList(out, list(reason = "adjacent frames name different relations"))) + } + if (named[1] == "xK") { + return(modifyList(out, list(reason = "adjacent frames confirm #54's 10.764"))) + } + f <- rel_factor(named[1], v$flying_height[i], sib_h) + if (is.finite(v$log_factor[i]) && abs(v$log_factor[i] - f) > 1e-9) { + return(modifyList(out, list(reason = "logbook names a different factor"))) + } + base_ok <- is.finite(d$base) + p <- NA_real_ + if (any(base_ok)) { + p <- median(1 - d$base[base_ok] / (FORMAT_M * (sib_h - d$elev[base_ok]) / d$f_m[base_ok])) + } + out <- modifyList(out, list(factor = f, height = sib_h, rel = named[1], + frame = min(nb$frame_number[naming]), p = p, + r = median((sib_h - d$elev) / d$nominal_agl))) + if (!any(base_ok)) return(modifyList(out, list(reason = "no adjacent frames to measure spacing on"))) + if (!fits(p)) return(modifyList(out, list(reason = "spacing rejects the sibling's height"))) + modifyList(out, list(ok = TRUE)) +} + +v$log_factor <- v$factor +v$witness <- ifelse(v$accept, "logbook", NA_character_) +v$sibling_frame <- NA_real_ +v$sibling_reason <- NA_character_ +v$sibling_rel <- NA_character_ +for (i in which(!v$accept)) { + sb <- sibling(i) + v$sibling_reason[i] <- sb$reason + if (!sb$ok) next + v$accept[i] <- TRUE + v$witness[i] <- "sibling" + v$reason[i] <- NA_character_ + v$factor[i] <- sb$factor + v$height_m[i] <- sb$height + v$sibling_frame[i] <- sb$frame + v$sibling_rel[i] <- sb$rel + v$log_ft[i] <- NA_real_ + v$n_agree[i] <- NA_integer_ + v$p_corrected[i] <- sb$p + v$r_corrected[i] <- sb$r +} +sib <- v[which(v$witness == "sibling"), ] +message(sprintf("\n== sibling witness: %d roll-heights settled (%d frames) of %d the logbook left ==", + nrow(sib), sum(sib$n), sum(!is.na(v$sibling_reason)) + nrow(sib))) +print(sib[, c("tail", "film_roll", "flying_height", "focal_length", "scale_n", "n", + "sibling_rel", "sibling_frame", "height_m", "p_corrected", "r_corrected")], + row.names = FALSE) +print(table(v$tail, v$sibling_reason)) +print(tapply(v$n, list(v$tail, v$sibling_reason), sum)) + +# Controls: the two cases fly#74 was opened on must return what their neighbours say, and +# bc5596's other neighbour (2,438 m, frame 212, which 10.764 reaches to 0.12%) must name +# nothing under the rounding tolerance. +ctl_sib <- function(roll, h) v[v$film_roll == roll & v$flying_height == h, ] +c1 <- ctl_sib("bc5596", 26212) +c2 <- ctl_sib("bcb98013", 97924) +c1_ok <- nrow(c1) == 1 && identical(c1$witness, "sibling") && c1$height_m == 2621 && + c1$sibling_frame == 203 && isTRUE(all.equal(c1$factor, 0.1)) && + length(relation(26212, 2438, "upper")) == 0 +if (!c1_ok) { + stop("sibling control bc5596 does not settle at x10 from frame 203") +} +c2_ok <- nrow(c2) == 1 && identical(c2$witness, "sibling") && c2$height_m == 7924 && + identical(c2$sibling_rel, "digit") +if (!c2_ok) { + stop("sibling control bcb98013 does not settle at its neighbours' 7,924 m") +} + # An excluded slipped roll-height is not refused: #54's repair still sizes it. Say so, so # the table is not read as a list of frames drawn at nominal scale. up <- v$tail == "upper" & !v$accept & v$reason != "logbook confirms #54's 10.764" @@ -414,15 +578,17 @@ v$cause <- dplyr::case_when( is_f(1) ~ "scale_wrong", is_f(10) ~ "height_digit_dropped", is_f(100) ~ "height_two_digits_dropped", - is_f(1 / 10) ~ "height_decimal_dropped" + is_f(1 / 10) ~ "height_decimal_dropped", + v$sibling_rel %in% "digit" & v$tail == "upper" ~ "height_leading_digit_added", + v$sibling_rel %in% "digit" & v$tail == "lower" ~ "height_leading_digit_dropped" ) stopifnot(!anyNA(v$cause[v$accept])) rolls_out <- data.frame( tail = v$tail, film_roll = v$film_roll, flying_height = v$flying_height, focal_length = v$focal_length, - scale_n = v$scale_n, factor = v$factor, cause = v$cause, logbook_ft = v$log_ft, - height_m = v$height_m, + scale_n = v$scale_n, factor = v$factor, cause = v$cause, witness = v$witness, + logbook_ft = v$log_ft, sibling_frame = v$sibling_frame, height_m = v$height_m, frames_measured = v$n, frames_logbook = v$n_agree, overlap_corrected = round(v$p_corrected, 3), r_corrected = round(v$r_corrected, 3) )[v$accept, ] @@ -430,7 +596,8 @@ rolls_out <- rolls_out[order(rolls_out$tail, rolls_out$film_roll, rolls_out$flyi excluded_out <- data.frame( tail = v$tail, film_roll = v$film_roll, flying_height = v$flying_height, focal_length = v$focal_length, - scale_n = v$scale_n, frames_measured = v$n, reason = v$reason + scale_n = v$scale_n, frames_measured = v$n, reason = v$reason, + sibling_reason = v$sibling_reason )[!v$accept, ] excluded_out <- excluded_out[order(excluded_out$tail, excluded_out$film_roll, excluded_out$flying_height), ] @@ -449,10 +616,6 @@ print(rolls_out, row.names = FALSE) # The key reaches only the frames it was measured on: count what each row would touch # across the whole catalogue, on the same four fields `fly_footprint()` matches. -# Numbers formatted as `fly_footprint()` formats them, so the two keys cannot spell one -# value two ways (100000L is "100000" to `paste()`, 100000 is "1e+05"). -num <- function(x) formatC(as.numeric(x), format = "f", digits = 3) -key4 <- function(roll, h, f, sc) paste(roll, num(h), num(f), num(sc)) key_all <- key4(frames$film_roll, frames$flying_height, frames$focal_length, suppressWarnings(as.numeric(sub("^1:", "", frames$scale)))) reach <- vapply(seq_len(nrow(rolls_out)), function(i) { diff --git a/inst/extdata/flying_height_rolls.csv b/inst/extdata/flying_height_rolls.csv index 8ebcbb8..21dfa4e 100644 --- a/inst/extdata/flying_height_rolls.csv +++ b/inst/extdata/flying_height_rolls.csv @@ -1,29 +1,34 @@ -"tail","film_roll","flying_height","focal_length","scale_n","factor","cause","logbook_ft","height_m","frames_measured","frames_logbook","overlap_corrected","r_corrected" -"lower","bc5224",1082,153,15840,1,"scale_wrong",3550,1082,46,46,0.614,0.333 -"lower","bc5449",609,153,15000,1,"scale_wrong",2000,609.6,3,3,0.585,0.261 -"lower","bc5536",731,153,12000,1,"scale_wrong",2400,731.5,9,9,0.604,0.384 -"lower","bc5651",701,153,31680,10,"height_digit_dropped",23000,7010.4,41,41,0.64,1.121 -"lower","bc5655",1158,153,75062,1,"scale_wrong",3800,1158.2,9,9,0.586,0.096 -"lower","bc5697",457,153,6000,1,"scale_wrong",1500,457.2,102,102,0.619,0.487 -"lower","bc7280",60,305,16000,100,"height_two_digits_dropped",20000,6096,101,101,0.652,1.073 -"lower","bc7584",609,305,20000,10,"height_digit_dropped",20000,6096,124,124,0.647,0.805 -"lower","bc7692",4511,305,63360,1,"scale_wrong",14800,4511,31,31,0.639,0.197 -"lower","bc77014",853,153,50000,10,"height_digit_dropped",28000,8534.4,7,7,0.614,0.887 -"lower","bc7703",1561,305,20000,1,"scale_wrong",5120,1560.6,10,10,0.618,0.19 -"lower","bc77032",701,610,10000,10,"height_digit_dropped",23000,7010.4,54,54,0.608,0.905 -"lower","bc7717",1676,305,12500,1,"scale_wrong",5500,1676.4,84,84,0.628,0.409 -"lower","bc7717",1829,305,12500,1,"scale_wrong",6000,1828.8,43,43,0.656,0.405 -"lower","bc78105",1295,153,20000,1,"scale_wrong",4250,1295.4,17,17,0.637,0.216 -"lower","bc78151",1295,153,20000,1,"scale_wrong",4250,1295.4,35,35,0.668,0.22 -"lower","bc7835",640,305,20000,10,"height_digit_dropped",21000,6400.8,8,8,0.629,0.995 -"lower","bc79122",640,305,20000,10,"height_digit_dropped",21000,6400.8,149,149,0.618,1.039 -"lower","bc81013",823,153,40000,10,"height_digit_dropped",27000,8229.6,59,59,0.643,1.176 -"lower","bc81027",732,153,40000,10,"height_digit_dropped",24000,7315.2,18,18,0.631,1.026 -"lower","bc85036",686,305,15000,10,"height_digit_dropped",22500,6858,34,34,0.606,1.176 -"lower","bc88054",655,305,15000,10,"height_digit_dropped",21500,6553.2,17,17,0.602,1.072 -"upper","bc78065",4115,153,2000,0.1,"height_decimal_dropped",1350,411.5,24,24,0.594,0.975 -"upper","bc78078",9449,153,6000,0.1,"height_decimal_dropped",3100,944.9,15,15,0.622,0.957 -"upper","bc79103",21946,153,10000,0.1,"height_decimal_dropped",7200,2194.6,24,24,0.644,1.031 -"upper","bcc00085",54860,305,15000,0.1,"height_decimal_dropped",18000,5486.4,68,68,0.617,1.026 -"upper","bcc00085",56390,305,15000,0.1,"height_decimal_dropped",18500,5638.8,127,127,0.617,1.026 -"upper","bcc00085",57910,305,15000,0.1,"height_decimal_dropped",19000,5791.2,41,41,0.631,1.052 +"tail","film_roll","flying_height","focal_length","scale_n","factor","cause","witness","logbook_ft","sibling_frame","height_m","frames_measured","frames_logbook","overlap_corrected","r_corrected" +"lower","bc5224",1082,153,15840,1,"scale_wrong","logbook",3550,,1082,46,46,0.614,0.333 +"lower","bc5449",609,153,15000,1,"scale_wrong","logbook",2000,,609.6,3,3,0.585,0.261 +"lower","bc5536",731,153,12000,1,"scale_wrong","logbook",2400,,731.5,9,9,0.604,0.384 +"lower","bc5651",701,153,31680,10,"height_digit_dropped","logbook",23000,,7010.4,41,41,0.64,1.121 +"lower","bc5655",1158,153,75062,1,"scale_wrong","logbook",3800,,1158.2,9,9,0.586,0.096 +"lower","bc5697",457,153,6000,1,"scale_wrong","logbook",1500,,457.2,102,102,0.619,0.487 +"lower","bc7280",60,305,16000,100,"height_two_digits_dropped","logbook",20000,,6096,101,101,0.652,1.073 +"lower","bc7584",609,305,20000,10,"height_digit_dropped","logbook",20000,,6096,124,124,0.647,0.805 +"lower","bc7675",609,305,16000,10,"height_digit_dropped","sibling",,214,6096,84,,0.616,1 +"lower","bc7692",4511,305,63360,1,"scale_wrong","logbook",14800,,4511,31,31,0.639,0.197 +"lower","bc77014",853,153,50000,10,"height_digit_dropped","logbook",28000,,8534.4,7,7,0.614,0.887 +"lower","bc7703",1561,305,20000,1,"scale_wrong","logbook",5120,,1560.6,10,10,0.618,0.19 +"lower","bc77032",701,610,10000,10,"height_digit_dropped","logbook",23000,,7010.4,54,54,0.608,0.905 +"lower","bc7717",1676,305,12500,1,"scale_wrong","logbook",5500,,1676.4,84,84,0.628,0.409 +"lower","bc7717",1829,305,12500,1,"scale_wrong","logbook",6000,,1828.8,43,43,0.656,0.405 +"lower","bc78105",1295,153,20000,1,"scale_wrong","logbook",4250,,1295.4,17,17,0.637,0.216 +"lower","bc78151",1295,153,20000,1,"scale_wrong","logbook",4250,,1295.4,35,35,0.668,0.22 +"lower","bc7835",640,305,20000,10,"height_digit_dropped","logbook",21000,,6400.8,8,8,0.629,0.995 +"lower","bc79122",640,305,20000,10,"height_digit_dropped","logbook",21000,,6400.8,149,149,0.618,1.039 +"lower","bc81013",823,153,40000,10,"height_digit_dropped","logbook",27000,,8229.6,59,59,0.643,1.176 +"lower","bc81027",732,153,40000,10,"height_digit_dropped","logbook",24000,,7315.2,18,18,0.631,1.026 +"lower","bc85036",686,305,15000,10,"height_digit_dropped","logbook",22500,,6858,34,34,0.606,1.176 +"lower","bc87070",396,153,23000,10,"height_digit_dropped","sibling",,203,3962,34,,0.597,0.795 +"lower","bc88054",655,305,15000,10,"height_digit_dropped","logbook",21500,,6553.2,17,17,0.602,1.072 +"lower","bcc822",701,305,15000,10,"height_digit_dropped","sibling",,119,7010,11,,0.613,1.098 +"upper","bc5596",26212,153,12000,0.1,"height_decimal_dropped","sibling",,203,2621,8,,0.619,0.957 +"upper","bc78065",4115,153,2000,0.1,"height_decimal_dropped","logbook",1350,,411.5,24,24,0.594,0.975 +"upper","bc78078",9449,153,6000,0.1,"height_decimal_dropped","logbook",3100,,944.9,15,15,0.622,0.957 +"upper","bc79103",21946,153,10000,0.1,"height_decimal_dropped","logbook",7200,,2194.6,24,24,0.644,1.031 +"upper","bcb98013",97924,153,40000,0.08092,"height_leading_digit_added","sibling",,51,7924,1,,0.656,1.124 +"upper","bcc00085",54860,305,15000,0.1,"height_decimal_dropped","logbook",18000,,5486.4,68,68,0.617,1.026 +"upper","bcc00085",56390,305,15000,0.1,"height_decimal_dropped","logbook",18500,,5638.8,127,127,0.617,1.026 +"upper","bcc00085",57910,305,15000,0.1,"height_decimal_dropped","logbook",19000,,5791.2,41,41,0.631,1.052 diff --git a/inst/extdata/flying_height_rolls_excluded.csv b/inst/extdata/flying_height_rolls_excluded.csv index 9dd1339..43de361 100644 --- a/inst/extdata/flying_height_rolls_excluded.csv +++ b/inst/extdata/flying_height_rolls_excluded.csv @@ -1,522 +1,517 @@ -"tail","film_roll","flying_height","focal_length","scale_n","frames_measured","reason" -"lower","bc5097",2012,153,31680,15,"logbook covers under half the frames" -"lower","bc5097",2073,153,31680,1,"logbook height is not a named multiple of the catalogue's" -"lower","bc5280",457,153,6000,3,"spacing rejects the logbook's height" -"lower","bc5524",243,153,12000,30,"logbook height or frame range not read" -"lower","bc5524",274,153,12000,18,"logbook height or frame range not read" -"lower","bc5524",304,153,12000,21,"logbook height or frame range not read" -"lower","bc5593",1066,153,15000,8,"logbook height is not a named multiple of the catalogue's" -"lower","bc5597",777,153,12000,18,"spacing rejects the logbook's height" -"lower","bc5598",2,153,16000,29,"logbook rows covering these frames disagree" -"lower","bc5628",1371,153,80000,35,"spacing rejects the logbook's height" -"lower","bc7211",4877,305,32000,18,"spacing rejects the logbook's height" -"lower","bc7675",609,305,16000,84,"logbook covers under half the frames" -"lower","bc78104",1295,153,20000,52,"no logbook page covers these frames" -"lower","bc79067",4770,305,50000,47,"spacing rejects the logbook's height" -"lower","bc79067",4968,305,50000,60,"spacing rejects the logbook's height" -"lower","bc79067",5067,305,50000,8,"spacing rejects the logbook's height" -"lower","bc79067",5624,305,50000,10,"spacing rejects the logbook's height" -"lower","bc79086",6325,305,60000,107,"logbook names a different lens; nominal scale already sizes it" -"lower","bc79209",7620,305,50000,85,"logbook rows covering these frames disagree" -"lower","bc80001",1524,305,10000,106,"logbook names a different lens; nominal scale already sizes it" -"lower","bc81026",762,305,5000,11,"logbook names a different lens; nominal scale already sizes it" -"lower","bc87070",396,153,23000,34,"logbook height or frame range not read" -"lower","bcb05001",1051,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1053,305,20000,3,"no logbook page covers these frames" -"lower","bcb05001",1054,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1055,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1056,305,20000,3,"no logbook page covers these frames" -"lower","bcb05001",1057,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1058,305,20000,4,"no logbook page covers these frames" -"lower","bcb05001",1059,305,20000,4,"no logbook page covers these frames" -"lower","bcb05001",1060,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1061,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1062,305,20000,3,"no logbook page covers these frames" -"lower","bcb05001",1063,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1064,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1065,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1066,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1069,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1215,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1216,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1217,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1218,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1220,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1222,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1225,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1226,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1227,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1228,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1229,305,20000,1,"no logbook page covers these frames" -"lower","bcb05001",1230,305,20000,2,"no logbook page covers these frames" -"lower","bcb05001",1231,305,20000,1,"no logbook page covers these frames" -"lower","bcc162",2438,305,16000,86,"logbook names a different lens; nominal scale already sizes it" -"lower","bcc401",1219,305,10000,12,"logbook height is not a named multiple of the catalogue's" -"lower","bcc822",701,305,15000,11,"logbook height or frame range not read" -"lower","bcc94147",5511,305,52000,1,"logbook height is not a named multiple of the catalogue's" -"upper","bc5596",26212,153,12000,8,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bc79027",19995,153,13000,10,"spacing rejects the logbook's height; #54's 10.764 still applies" -"upper","bcb98013",97924,153,40000,1,"logbook height is not a named multiple of the catalogue's; #54's 10.764 still applies" -"upper","bcc03004",71640,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71641,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71642,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71644,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71645,153,30000,6,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71646,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71647,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71649,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71710,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71712,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71714,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71715,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71716,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71718,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71719,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71941,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71943,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71944,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71947,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71948,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71949,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71970,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71971,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71972,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71973,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71974,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71975,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71976,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71978,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71979,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71990,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71991,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71992,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71993,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71994,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71995,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71996,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71997,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71998,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",71999,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72030,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72031,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72032,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72033,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72034,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72035,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72036,153,30000,6,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72037,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72038,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72039,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72040,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72041,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72043,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72044,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72045,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72047,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72048,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72049,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72222,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72223,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72226,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72227,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72228,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72229,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72250,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72251,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72253,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72254,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72256,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72259,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72270,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72271,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72272,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72273,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72274,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72275,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72276,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72277,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72279,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72280,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72282,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72283,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72285,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72287,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72288,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72289,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72380,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72381,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72382,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72383,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72384,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72386,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72387,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72389,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72460,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72462,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72463,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72464,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72466,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72467,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72468,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03004",72469,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72030,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72031,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72032,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72033,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72034,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72035,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72036,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72037,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",72039,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75030,153,35000,7,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75031,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75032,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75033,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75034,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75036,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75037,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75038,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75039,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75110,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75111,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75112,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75113,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75114,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75115,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75116,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75117,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75118,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75220,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75221,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75222,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75223,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75224,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75226,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75227,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75228,153,35000,6,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",75229,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76600,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76601,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76602,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76603,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76604,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76605,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76606,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76607,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76608,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76609,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76680,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76681,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76682,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76683,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76684,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76685,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76686,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76687,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76688,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03006",76689,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69751,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69753,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69754,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69755,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69756,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69757,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69758,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69920,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69923,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69924,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69925,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69926,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69927,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69928,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69962,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69963,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69964,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69967,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",69969,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70040,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70042,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70043,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70045,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70046,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70048,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",70049,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72830,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72831,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72832,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72833,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72834,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72835,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72836,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72838,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72839,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72941,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72942,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72943,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72944,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72945,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72946,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72948,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72949,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72991,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72992,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72994,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72997,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72998,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",72999,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73130,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73131,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73133,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73134,153,35000,8,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73135,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73136,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73137,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73138,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73139,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73190,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73191,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73194,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73195,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73196,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73197,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73198,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73199,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73210,153,35000,7,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73212,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73213,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73215,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73216,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73217,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73218,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73219,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73310,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73311,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73312,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73313,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73314,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73315,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73316,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73317,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73318,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73319,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73330,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73331,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73332,153,35000,6,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73333,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73334,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73335,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73336,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73337,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",73339,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74940,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74941,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74942,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74943,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74944,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74945,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74946,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74947,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74948,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03007",74949,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72130,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72131,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72133,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72134,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72135,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72136,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72137,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72138,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72139,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72860,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72861,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72865,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72867,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72868,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72869,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72990,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72991,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72992,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72994,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72995,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72997,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",72999,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73010,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73012,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73013,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73014,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73017,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73018,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73019,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73060,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73061,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73062,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73063,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73064,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73065,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73066,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73067,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73068,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",73069,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74121,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74122,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74123,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74124,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74128,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74363,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74365,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74366,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74367,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74368,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74369,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74680,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74683,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74684,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74685,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74686,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74688,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74689,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74990,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74991,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74992,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74993,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74994,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74996,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74997,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74998,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",74999,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78010,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78011,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78012,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78013,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78015,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78017,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78019,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78030,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78032,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78033,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78035,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78036,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78037,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78038,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78210,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78211,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78212,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78213,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78215,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78217,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78218,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",78219,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",79792,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",79793,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",79796,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",79798,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03008",79799,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70881,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70882,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70885,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70886,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70888,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70980,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70982,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70983,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70988,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",70989,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71090,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71091,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71092,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71093,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71094,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71095,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71096,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71098,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71099,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71121,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71123,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71126,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71128,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71550,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71551,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71552,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71553,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71554,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71555,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71556,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71557,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71558,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71559,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71650,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71651,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71652,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71653,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71654,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71655,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71656,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71657,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71658,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71659,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71670,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71671,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71672,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71673,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71674,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71675,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71676,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71677,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71678,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71679,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71690,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71691,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71692,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71693,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71694,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71695,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71696,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71697,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71698,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71699,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71720,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71721,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71722,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71723,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71724,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71725,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71726,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71728,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71729,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71732,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71733,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71734,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71736,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71737,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71738,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71739,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71780,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71781,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71782,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71783,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71785,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71786,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71787,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71788,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71789,153,30000,6,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71800,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71802,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71803,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71804,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71805,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71806,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71807,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71808,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71840,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71841,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71842,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71843,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71844,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71846,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71848,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc03046",71849,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc05001",62500,153,30000,106,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc05001",64000,153,30000,32,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc05001",64020,153,30000,28,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc05001",65550,153,30000,25,"no logbook page covers these frames; #54's 10.764 still applies" -"upper","bcc05001",67070,153,30000,26,"no logbook page covers these frames; #54's 10.764 still applies" +"tail","film_roll","flying_height","focal_length","scale_n","frames_measured","reason","sibling_reason" +"lower","bc5097",2012,153,31680,15,"logbook covers under half the frames","no adjacent frame in an exact named relation" +"lower","bc5097",2073,153,31680,1,"logbook height is not a named multiple of the catalogue's","no adjacent frame in band" +"lower","bc5280",457,153,6000,3,"spacing rejects the logbook's height","no adjacent frame in an exact named relation" +"lower","bc5524",243,153,12000,30,"logbook height or frame range not read","no adjacent frame in an exact named relation" +"lower","bc5524",274,153,12000,18,"logbook height or frame range not read","no adjacent frame in band" +"lower","bc5524",304,153,12000,21,"logbook height or frame range not read","no adjacent frame in an exact named relation" +"lower","bc5593",1066,153,15000,8,"logbook height is not a named multiple of the catalogue's","no adjacent frame at another height" +"lower","bc5597",777,153,12000,18,"spacing rejects the logbook's height","no adjacent frame in an exact named relation" +"lower","bc5598",2,153,16000,29,"logbook rows covering these frames disagree","no adjacent frame at another height" +"lower","bc5628",1371,153,80000,35,"spacing rejects the logbook's height","no adjacent frame at another height" +"lower","bc7211",4877,305,32000,18,"spacing rejects the logbook's height","no adjacent frame at another height" +"lower","bc78104",1295,153,20000,52,"no logbook page covers these frames","no adjacent frame in band" +"lower","bc79067",4770,305,50000,47,"spacing rejects the logbook's height","no adjacent frame in band" +"lower","bc79067",4968,305,50000,60,"spacing rejects the logbook's height","no adjacent frame in band" +"lower","bc79067",5067,305,50000,8,"spacing rejects the logbook's height","no adjacent frame in band" +"lower","bc79067",5624,305,50000,10,"spacing rejects the logbook's height","no adjacent frame in band" +"lower","bc79086",6325,305,60000,107,"logbook names a different lens; nominal scale already sizes it","no adjacent frame at another height" +"lower","bc79209",7620,305,50000,85,"logbook rows covering these frames disagree","no adjacent frame at another height" +"lower","bc80001",1524,305,10000,106,"logbook names a different lens; nominal scale already sizes it","no adjacent frame at another height" +"lower","bc81026",762,305,5000,11,"logbook names a different lens; nominal scale already sizes it","no adjacent frame at another height" +"lower","bcb05001",1051,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1053,305,20000,3,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1054,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1055,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1056,305,20000,3,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1057,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1058,305,20000,4,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1059,305,20000,4,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1060,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1061,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1062,305,20000,3,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1063,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1064,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1065,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1066,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1069,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1215,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1216,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1217,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1218,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1220,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1222,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1225,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1226,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1227,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1228,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1229,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1230,305,20000,2,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcb05001",1231,305,20000,1,"no logbook page covers these frames","no adjacent frame in band" +"lower","bcc162",2438,305,16000,86,"logbook names a different lens; nominal scale already sizes it","no adjacent frame at another height" +"lower","bcc401",1219,305,10000,12,"logbook height is not a named multiple of the catalogue's","no adjacent frame in an exact named relation" +"lower","bcc94147",5511,305,52000,1,"logbook height is not a named multiple of the catalogue's","no adjacent frame at another height" +"upper","bc79027",19995,153,13000,10,"spacing rejects the logbook's height; #54's 10.764 still applies","no adjacent frame in an exact named relation" +"upper","bcc03004",71640,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71641,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71642,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71644,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71645,153,30000,6,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71646,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71647,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71649,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71710,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71712,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71714,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71715,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71716,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71718,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71719,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71941,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71943,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71944,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71947,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71948,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71949,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71970,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71971,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71972,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71973,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71974,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71975,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71976,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71978,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71979,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71990,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71991,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71992,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71993,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71994,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71995,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71996,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71997,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71998,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",71999,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72030,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72031,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72032,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72033,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72034,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72035,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72036,153,30000,6,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72037,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72038,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72039,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72040,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72041,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72043,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72044,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72045,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72047,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72048,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72049,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72222,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72223,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72226,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72227,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72228,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72229,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72250,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72251,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72253,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72254,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72256,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72259,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72270,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72271,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72272,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72273,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72274,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72275,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72276,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72277,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72279,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72280,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72282,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72283,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72285,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72287,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72288,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72289,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72380,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72381,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72382,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72383,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72384,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72386,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72387,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72389,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72460,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72462,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72463,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72464,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72466,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72467,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72468,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03004",72469,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72030,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72031,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72032,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72033,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72034,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72035,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72036,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72037,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",72039,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75030,153,35000,7,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75031,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75032,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75033,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75034,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75036,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75037,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75038,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75039,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75110,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75111,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75112,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75113,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75114,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75115,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75116,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75117,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75118,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75220,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75221,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75222,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75223,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75224,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75226,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75227,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75228,153,35000,6,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",75229,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76600,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76601,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76602,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76603,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76604,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76605,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76606,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76607,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76608,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76609,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76680,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76681,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76682,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76683,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76684,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76685,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76686,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76687,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76688,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03006",76689,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69751,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69753,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69754,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69755,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69756,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69757,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69758,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69920,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69923,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69924,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69925,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69926,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69927,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69928,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69962,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69963,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69964,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69967,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",69969,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70040,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70042,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70043,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70045,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70046,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70048,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",70049,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72830,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72831,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72832,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72833,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72834,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72835,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72836,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72838,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72839,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72941,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72942,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72943,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72944,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72945,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72946,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72948,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72949,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72991,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72992,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72994,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72997,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72998,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",72999,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73130,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73131,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73133,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73134,153,35000,8,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73135,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73136,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73137,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73138,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73139,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73190,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73191,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73194,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73195,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73196,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73197,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73198,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73199,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73210,153,35000,7,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73212,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73213,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73215,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73216,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73217,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73218,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73219,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73310,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73311,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73312,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73313,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73314,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73315,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73316,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73317,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73318,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73319,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73330,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73331,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73332,153,35000,6,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73333,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73334,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73335,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73336,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73337,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",73339,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74940,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74941,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74942,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74943,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74944,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74945,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74946,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74947,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74948,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03007",74949,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72130,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72131,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72133,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72134,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72135,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72136,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72137,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72138,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72139,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72860,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72861,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72865,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72867,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72868,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72869,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72990,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72991,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72992,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72994,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72995,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72997,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",72999,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73010,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73012,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73013,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73014,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73017,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73018,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73019,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73060,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73061,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73062,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73063,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73064,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73065,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73066,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73067,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73068,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",73069,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74121,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74122,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74123,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74124,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74128,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74363,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74365,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74366,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74367,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74368,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74369,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74680,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74683,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74684,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74685,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74686,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74688,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74689,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74990,153,35000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74991,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74992,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74993,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74994,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74996,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74997,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74998,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",74999,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78010,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78011,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78012,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78013,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78015,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78017,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78019,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78030,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78032,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78033,153,35000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78035,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78036,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78037,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78038,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78210,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78211,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78212,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78213,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78215,153,35000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78217,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78218,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",78219,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",79792,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",79793,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",79796,153,35000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",79798,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03008",79799,153,35000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70881,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70882,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70885,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70886,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70888,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70980,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70982,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70983,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70988,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",70989,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71090,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71091,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71092,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71093,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71094,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71095,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71096,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71098,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71099,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71121,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71123,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71126,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71128,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71550,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71551,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71552,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71553,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71554,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71555,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71556,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71557,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71558,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71559,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71650,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71651,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71652,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71653,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71654,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71655,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71656,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71657,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71658,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71659,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71670,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71671,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71672,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71673,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71674,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71675,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71676,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71677,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71678,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71679,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71690,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71691,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71692,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71693,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71694,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71695,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71696,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71697,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71698,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71699,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71720,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71721,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71722,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71723,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71724,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71725,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71726,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71728,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71729,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71732,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71733,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71734,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71736,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71737,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71738,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71739,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71780,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71781,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71782,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71783,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71785,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71786,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71787,153,30000,5,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71788,153,30000,4,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71789,153,30000,6,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71800,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71802,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71803,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71804,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71805,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71806,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71807,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71808,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71840,153,30000,3,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71841,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71842,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71843,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71844,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71846,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71848,153,30000,1,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc03046",71849,153,30000,2,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc05001",62500,153,30000,106,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc05001",64000,153,30000,32,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc05001",64020,153,30000,28,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc05001",65550,153,30000,25,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" +"upper","bcc05001",67070,153,30000,26,"no logbook page covers these frames; #54's 10.764 still applies","no adjacent frame in band" diff --git a/inst/notes/terrain-correction.md b/inst/notes/terrain-correction.md index d4a47a2..0583afc 100644 --- a/inst/notes/terrain-correction.md +++ b/inst/notes/terrain-correction.md @@ -326,7 +326,8 @@ catalogue stores whole metres of a converted figure, so `bc7280`'s 20,000 ft is `fly_footprint(dem = )` consults `inst/extdata/flying_height_rolls.csv` before #54's repair, keyed on roll, height, lens and scale together — which reaches exactly the 1,001 measured -frames (1,300 since fly#71 added the upper tail, below) — and marks those frames +frames (1,300 since fly#71 added the upper tail, and 1,438 since fly#74 added a same-roll +witness, both below) — and marks those frames `"corrected_roll_table"`. A height slip must still reconcile the frame's own ratio, as #54's does. A scale-wrong row cannot be asked that, since the ratio is against the wrong scale, but its height must clear the ground. The table also reaches a @@ -369,7 +370,8 @@ frames become `"corrected_roll_table"` and are sized from the logbook's height. whose logbook named 1/10.764 would be excluded ("logbook confirms #54's 10.764") rather than tabled, since the repair already sizes it. No roll did. -**Where #54's factor still applies, 1,290 frames**, each listed in +**Where #54's factor still applied, 1,290 frames** (1,281 since fly#74 settled two of the +roll-heights below), each listed in `flying_height_rolls_excluded.csv` with a reason ending "#54's 10.764 still applies": - **The six 2003/2005 rolls** (`bcc03004/06/07/08/46`, `bcc05001`; 1,271 frames) have no logbook @@ -381,7 +383,7 @@ tabled, since the repair already sizes it. No roll did. logbook to decide between them it stays on #54's factor. - **`bc5596` frames 204–211** have no logbook page. Their 26,212 m is ten times the 2,621 m of frames 141–203 on the same roll, which points to ÷10, but a same-roll sibling is not - one of the two instruments (fly#74). + one of the two instruments. Settled by fly#74 (next section). - **`bc79027`**: the logbook reads 1/10, but **spacing rejects it**. The implied overlap is 0.82, outside the 0.557–0.780 window. The page itself records "80% fwd overlap", so the spacing is right and this roll does not fit the window's ~60% design assumption. The rule fixed in fly#60 @@ -389,12 +391,101 @@ tabled, since the repair already sizes it. No roll did. - **`bcb98013` frame 52** is not a slip. The other 207 frames on the roll read 7,924 m, and 97,924 is that figure with a leading 9. Neither factor recovers it: ÷10.764 gives 9,097 m, about 17% wide in linear size. The page the catalogue links is headed roll 15BCB**99**013, flown 1999 at - 24,000 ft, so it may not be this roll's page at all (fly#74). + 24,000 ft, so it may not be this roll's page at all. Settled by fly#74 (next section). Reproduce with `data-raw/height_calibrate-lower_tail_rolls.R`, which prints every figure in this section; `test-fly_footprint_height_rolls.R` holds the table to the sweep and the logbook heights it was measured from. +## A third witness: the same roll's adjacent frame (fly#74) + +fly#71 left two slipped roll-heights on ÷10.764 that the evidence said were wrong, and neither +fits the logbook rule. `bc5596` 204–211 have no logbook page. `bcb98013` frame 52's page reads +24,000 ft, which names no factor. Both point at a witness the rule did not have: **the frame +beside them on the same roll**. The rule below was fixed before it was run, and then run over +every roll-height the logbook rule leaves excluded, in both tails, not just the two it was +written from. + +A roll-height is settled by a sibling only where: + +1. a frame numbered one away, on the same roll, lens and scale, carries a different height. + That is the adjacency `fly_bearing()` demands; +2. that neighbour's height is itself in the band, against this roll-height's own median + terrain. Neighbours are not sampled, so this is a proxy; `fly_footprint()` holds every + frame to the band again; +3. the catalogue's height stands in an **exact** named relation to it. The upper tail names + ×10, ×10.764 and one leading digit added; the lower tail names ÷10, ÷100 and the leading + digit dropped. *Exact* means within what storing whole metres can move a converted figure, + and string identity for the digits. The catalogue sometimes rounds and sometimes + **truncates**: 2,000 ft (609.6 m) is 609 on `bc5449`, a row the logbook already settles. With + each figure off its true value by a ∈ [−0.5, 1), the larger height less k times the smaller + lies in [−(1 + k/2), k + 1/2]. That covers figures converted at 0.3048 m/ft. Some were + converted at 3.28 ft/m and rounded (20,000 ft is 6,098 m on 2,677 frames). Such a figure + can put a genuine relation outside the bound, so it is refused, never wrongly accepted. + Enumerating every adjacent pair of the 521 roll-heights finds none between the bound and + twice its width; +4. every in-band neighbour that names a relation names the same one, at one height, and at + least one does. A neighbour naming nothing is a new leg at a new altitude, not a + contradiction. A unanimous ×10.764 is left to #54's repair, as it is for the logbook; +5. where the logbook named a factor for these frames, it named this one. **A logbook that + names no factor vetoes nothing**: it is evidence for no repair, #54's included; +6. spacing under the sibling's height sits inside the random-frame window. + +The height shipped is the sibling's catalogued height. `witness` in `flying_height_rolls.csv` +says which instrument settled a row, and `sibling_frame` names the neighbour. +`flying_height_rolls_excluded.csv` gains `sibling_reason` beside the logbook's `reason`, so +every excluded row says why each witness passed it over. + +**Why the tolerance is the catalogue's storage and not the logbook's 2%.** `bc5596` 204–211 read +26,212 m, between frame 203 at 2,621 m and frame 212 at 2,438 m. 212's height is the logbook's +8,000 ft, so that neighbour is sound. 26,212 is ten times 2,621 to 2 m, and it is also 10.764 +times 2,438 to 30 m, which is 0.12%. Under 2% both neighbours name a relation and they name +different ones. Under the storage tolerance, [−6.4, 11.3] m at k = 10.764, only 203 does. Measured by mutation: with `exact()` +swapped for 2%, `bc5596` is refused as "adjacent frames name different relations" and the +generator stops at its control. Round feet agree, though they gate nothing: ÷10 gives 2,621.2 m, +which is 8,600 ft to 0.3 ft, while ÷10.764 gives 7,989 ft, 11 ft short of 8,000. + +**The tolerance was corrected once, after the first run, and the correction is recorded +here.** As first fixed, it assumed the catalogue only rounds, |h − k·s| ≤ 0.5(k + 1). Code review +found the truncation above in rows that owe nothing to Stage 5b. The rounding-only form wrongly +refused `bc7675` 609 m: its neighbour, frame 214, reads 6,096 m, exactly 20,000 ft, and +6,096 − 10 × 609 = 6 m against a limit of 5.5. The other witnesses agree on the relation. The +logbook names ×10 on all 34 frames it reads, and was refused only for covering 40%, though its +20,200 ft (6,157 m) sits 1.0% above the sibling's height, so it agrees on the factor rather than +the height. Spacing under 6,096 m gives 0.616. The corrected form changes that outcome and no other, and both +controls hold under it. Its evidence is the catalogue's storage, not the Stage 5b result, which +is why it was taken rather than held to "fixed before looking". + +**What it settles: 5 roll-heights, 138 frames, of the 521 the logbook leaves.** + +| tail | roll | catalogue m | lens | scale | frames | relation | from frame | height m | overlap | +|---|---|---|---|---|---|---|---|---|---| +| lower | `bc7675` | 609 | 305 | 1:16000 | 84 | ÷10 | 214 | 6,096 | 0.616 | +| lower | `bc87070` | 396 | 153 | 1:23000 | 34 | ÷10 | 203 | 3,962 | 0.597 | +| lower | `bcc822` | 701 | 305 | 1:15000 | 11 | ÷10 | 119 | 7,010 | 0.613 | +| upper | `bc5596` | 26,212 | 153 | 1:12000 | 8 | ×10 | 203 | 2,621 | 0.619 | +| upper | `bcb98013` | 97,924 | 153 | 1:40000 | 1 | leading digit | 51 | 7,924 | 0.656 | + +The three lower-tail rows were not in the issue, and the logbook corroborates each one +independently in a way its own rule could not accept. `bc7675`'s is covered above. On `bc87070` the row covering 169–202 reads +13.0, which is 13,000 ft or 3,962 m, but its frame range was transcribed "169-20?", so the rule +counts it as not read. On `bcc822` the crew wrote "2300" for 120–130, between rows of 22,500 +and 23,000 ft. The catalogue copied the dropped zero: 701 m is 2,300 ft. + +What it refuses, as roll-heights / frames: in the lower tail, 10 / 486 have no adjacent frame +at another height, 6 / 99 have no adjacent frame in an exact relation, and 36 / 247 have no +adjacent frame in band. In the upper tail, 1 / 10 have no exact relation (`bc79027`), and +463 / 1,271 have no adjacent frame in band. Those are the 2003/2005 rolls, where every +neighbour is slipped too. + +**What it cannot do.** It speaks only where a neighbour at the right height happens to sit +one frame away. It is blind to a roll whose every frame carries the defect, and that is most +of the upper tail. Spacing still cannot separate ×10 from ×10.764, so wherever the relation is +not exact to the metre, nothing here chooses between them. + +Reproduce with `data-raw/height_calibrate-lower_tail_rolls.R` (Stage 5b), which prints every +figure in this section and stops unless both controls return their neighbours' heights. + ## What a partially covered footprint costs (fly#58) A footprint hanging off the edge of the DEM is sized from the mean of the part that is diff --git a/man/fly_footprint.Rd b/man/fly_footprint.Rd index b2ca22b..54fb1e7 100644 --- a/man/fly_footprint.Rd +++ b/man/fly_footprint.Rd @@ -210,7 +210,8 @@ inheriting whatever is wrong with it, and the catalogue's is about 10.76 times 1974 and 2005 — a feet-to-metres conversion applied the wrong way round, which draws a 1:35000 frame 110 km across. On six roll-heights flown 1978-2000 the flight logbooks show the factor is exactly 10 instead (fly#71), and those frames are -carried in the roll table below. A film frame states its height above +carried in the roll table below, as are two more that the same roll's +adjacent frames settle (fly#74). A film frame states its height above ground twice, as \code{flying_height} minus terrain and as scale times focal length, so the two are compared, and \code{height_source} records the outcome: @@ -224,10 +225,11 @@ overwritten, so on these rows \code{flying_height - height_agl} is not the groun elevation} \item{\code{"corrected_roll_table"}}{they disagree, and the frame sits on one of the roll-heights in \code{inst/extdata/flying_height_rolls.csv}, which the -province's flight logbooks and the spacing between adjacent frames settled -(fly#60, fly#71): a height with one or two digits dropped (a logbook "20.0", +province's flight logbooks, or failing them an adjacent frame on the same +roll in an exact named relation, together with the spacing between adjacent +frames, settled (fly#60, fly#71, fly#74): a height with one or two digits dropped (a logbook "20.0", thousands of feet, catalogued as 2,000 ft), a height recorded ten times too -large, or a correct height beside a wrong \code{scale}. Checked before the +large, a leading digit added, or a correct height beside a wrong \code{scale}. Checked before the 10.76 slip above. Sized from the measured height; matched on \code{film_roll}, \code{flying_height}, \code{focal_length} and \code{scale} together, so it needs a \code{film_roll} column. As with the slip, \code{flying_height} is not overwritten} @@ -245,7 +247,7 @@ all for another reason), one the DEM does not cover, or \code{flying_height} or } Measured over the whole catalogue, the two corrections for a height that is too -large apply to those 1,589 frames and to nothing else: 299 by the roll table, +large apply to those 1,589 frames and to nothing else: 308 by the roll table, the rest by 10.76. A digital frame's \code{scale} is a nominal figure, not its image scale, so it is not compared: only the 16,000 m ceiling, or terrain at or above the aircraft, can refuse one. To list the frames worth a second look: diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/README.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/README.md new file mode 100644 index 0000000..95c8cf4 --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/README.md @@ -0,0 +1,37 @@ +## Outcome + +fly#74 added a third witness for out-of-band `flying_height` roll-heights: a frame one number +away on the same roll, lens and scale, itself in band, whose height the catalogue's stands in an +exact named relation to (×10, ÷10, ÷100, ×10.764, one leading digit). Where no logbook settles a +roll-height, the neighbour's catalogued height is used, provided spacing agrees and no logbook +names a different factor. The rule was fixed at the plan gate and run over all 521 roll-heights +the logbook rule left excluded, in both tails. It settles the two the issue named (`bc5596` +204–211, `bcb98013` frame 52) and three lower-tail roll-heights nobody had flagged (`bc7675`, +`bc87070`, `bcc822`). A logbook row the logbook rule could not accept corroborates each one. +The durable account is the fly#74 section of `inst/notes/terrain-correction.md`. + +## Measurement + +- 5 roll-heights / 138 frames settled of 521 excluded. The table now reaches 1,438 frames + (lower 1,001 logbook + 129 sibling, upper 299 + 9); 1,281 slipped frames stay on ÷10.764 + (was 1,290). Catalogue reach = measured, 1,438. +- #54 had drawn `bc5596` 10.3–11.2% narrow and `bcb98013` frame 52 17.1% wide (linear). +- **The tolerance is load-bearing both ways, and it went wrong twice before it was right.** + `bc5596` 204–211 sit between 2,621 m (×10 to 2 m) and 2,438 m (×10.764 to 30 m, 0.12%). At 2% + the two neighbours name different relations, and the generator's control stops (shown by + mutation, with the CSVs left untouched). + - First wrong turn: with only ×10 named in the upper tail, the tolerance guarded nothing. + ×10.764 was added. + - Second: the first bound assumed the catalogue rounds. It also truncates (2,000 ft = 609 on + `bc5449`), which is code-check round 3's finding. The corrected bound + big − k·small ∈ [−(1 + k/2), k + 1/2] changed one outcome (`bc7675`, 84 frames, now tabled). + - Third: round 4 found a 3.28 ft/m storage beyond that (20,000 ft = 6,098 on 2,677 frames). + It can only refuse, so it was documented rather than widened. Round 4's enumeration of all + 3,876 neighbour-relation pairs found no pair between any bound and twice its width. + +## Evidence + +`data-raw/height_calibrate-lower_tail_rolls.R` (Stage 5b) prints every figure. The +`review-round*.md` files in this directory are the four code-check rounds. + +Closed by: PR for branch `74-sibling-frame-witness` diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/findings.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/findings.md new file mode 100644 index 0000000..77fc510 --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/findings.md @@ -0,0 +1,142 @@ +# Findings — Two #54-slipped roll-heights a sibling frame settles and no logbook does (#74) + +## Issue context + +## Problem + +fly#71 moved the pre-2000 #54-slipped roll-heights that a flight logbook reaches onto +`flying_height_rolls.csv` at ÷10. Two slipped roll-heights are still sized by #54's ÷10.764, +and in both cases the evidence says that is wrong: + +- **`bcb98013` frame 52** is catalogued at 97,924 m. The other 207 frames on the roll read + 7,924 m, so this is a leading-digit typo and not a slip. ÷10.764 gives 9,097 m, which draws the + frame about 15% wide in linear size. The logbook page the catalogue links (`bcb98013_1.jpg`) is + headed roll **15BCB99013**, flight B-010-E-99, 1999, 24,000 ft. That fits neither 7,924 m + (26,000 ft) nor the file name, so the catalogue may link the wrong scan. +- **`bc5596` frames 204–211** are catalogued at 26,212 m, ten times the 2,621 m (to the metre) (8,600 ft) + of frames 141–203 on the same roll. No logbook page covers them: the catalogue's + `flight_log_url` is NA for frames 141–211. + +Neither frame fits the fly#60 rule, which needs a logbook page naming a factor. Both point at one +more witness the rule does not have: **the same roll's other frames**. For `bc5596` that witness +gives an exact ×10; for `bcb98013` it gives an exact leading digit. + +## What would settle it + +Decide whether a same-roll sibling height counts as an instrument, and under what rule. The rule +has to be fixed before looking: *adjacent by frame number*, *an exact named relation to the +neighbours' height*, and *the neighbours themselves in band*. Otherwise leave both on ÷10.764 and +close this issue as recorded. + +## Evidence + +`inst/extdata/flying_height_rolls_excluded.csv` (`tail == "upper"`) and the fly#71 section of +`inst/notes/terrain-correction.md`. + + + +## Plan-mode probe (2026-09-27, centroid cache) + +- `bc5596` at 1:12000/153: frames 200-203 read 2,621; 204-211 read 26,212; 212-215 read 2,438 + (logbook row 212-227 reads 8.0 = 8,000 ft = 2,438 m). So the run has TWO adjacent + neighbours at different heights. 26212 / 2621 = 10.0008 (x10, |d| = 2 m); 26212 / 2438 = + 10.751, within 0.12% of 10.764 (|d| = 30 m with 3.28084²). A 2% tolerance lets both neighbours name a + factor, and they name different ones. Only the whole-metre rounding tolerance + (0.5 * (k + 1) m) separates them. +- `bcb98013` at 1:40000/153: 207 frames at 7,924, frame 52 at 97,924; frames 51 and 53 both 7,924. +- bc5596 carries nine roll-heights (2286 to 2621 at 1:12000, 2529 at 1:16000): legs stepping altitude. + +## Generator run, fixed rule (2026-09-27) + +`Rscript data-raw/height_calibrate-lower_tail_rolls.R` (frozen copy), exit 0, all controls pass. + +- Sibling witness settles **4 roll-heights (54 frames) of the 521 the logbook left**: + + | tail | roll | catalogue m | lens | scale | frames | relation | sibling frame | height m | overlap | r | + |---|---|---|---|---|---|---|---|---|---|---| + | lower | bc87070 | 396 | 153 | 23000 | 34 | /10 | 203 | 3,962 | 0.597 | 0.795 | + | lower | bcc822 | 701 | 305 | 15000 | 11 | /10 | 119 | 7,010 | 0.613 | 1.098 | + | upper | bc5596 | 26,212 | 153 | 12000 | 8 | x10 | 203 | 2,621 | 0.619 | 0.957 | + | upper | bcb98013 | 97,924 | 153 | 40000 | 1 | leading digit | 51 | 7,924 | 0.656 | 1.124 | + +- The two lower-tail rows were not in the issue, and the logbook corroborates both + independently, though not in a way the logbook rule could read: + - `bc87070` 169-202: logbook row "169-20?" reads 13.0 (13,000 ft = 3,962 m), but its frame + range did not parse, so "logbook height or frame range not read". Frames 203+ read 3,962. + - `bcc822` 120-130: the crew wrote "2300" (four digits) between rows of 22,500 and 23,000 ft; + the catalogue copied the dropped zero (701 m = 2,300 ft). Frame 119 reads 7,010 (23,000 ft). + Frame 131 on the other side reads 6,858 (22,500 ft), which names nothing, so it doesn't + contradict. +- Refused, by reason (roll-heights / frames): lower: no adjacent frame at another height 10 / 486, + no exact relation 7 / 183, no adjacent frame in band 36 / 247. upper: no exact relation 1 / 10 + (`bc79027`), no adjacent frame in band 463 / 1,271 (the 2003/05 rolls, every neighbour slipped too). +- Totals: 32 roll-heights corrected (1,354 frames; lower 1,001 logbook + 45 sibling, upper 299 + + 9), 517 excluded (2,197). Catalogue reach 1,354 = measured. Slipped frames still on ÷10.764: + 1,281 (was 1,290). + +## Plan correction: x10.764 is a named sibling relation in the upper tail + +The approved rule named only x10 and leading digit for the upper tail. With that set the +2,438 m neighbour of bc5596 could never name anything, so the whole-metre tolerance guarded +nothing: loosening it to 2% changed no result. The logbook rule's upper set is {1/10, 1/10.764}, +so the sibling set now matches it. A unanimous x10.764 is "adjacent frames confirm #54's +10.764" and is not tabled, the same as for the logbook. No roll-height hit that reason. + +Restore-the-bug, measured: with `exact()` swapped for a 2% relative tolerance, bc5596 is refused +("adjacent frames name different relations", 8 frames) and the generator stops at the bc5596 +control, leaving the CSVs untouched (checked with `cmp`). Under 2%, bc79027 also flips to +"spacing rejects the sibling's height". + +## Deviation: excluded table carries `sibling_reason`, not `witness` + +`witness` means nothing on a row nobody settled. The excluded table instead says why the sibling +witness passed each row over, beside the logbook's `reason`. So every excluded row carries the +reason each witness actually fired on. + +## Correction after code-check round 3: the catalogue truncates as well as rounds + +Round 3 (`review-round3.md`) found `exact()` assumed rounding only. The catalogue also truncates: +2,000 ft = 609.6 m is stored as 609 on bc5449/bc7584/bc5536, which the logbook table already +settles. That evidence owes nothing to Stage 5b. Across the cache the reviewer counted 50,579 +frames at floored round-foot values and 363,865 at rounded ones. + +- New bound: with the larger height `big`, each figure off its true value by a ∈ [−0.5, 1), + big − k·small ∈ [−(1 + k/2), k + 1/2]. At k = 10.764 that is [−6.4, 11.3], so bc5596's 2,438 m + neighbour (−30.4 with 3.28084²) still names nothing. +- Outcome change: exactly one. **bc7675 609 m (305 mm, 1:16000, 84 frames)** is accepted at + 6,096 m from frame 214. The residual is 6 m against 5.5 under the old form. The logbook names + x10 on all 34 frames it reads (refused for 40% coverage); spacing 0.616, r 1.000. +- New totals: sibling 5 roll-heights / 138 frames. Corrected 33 / 1,438 (lower 1,001 logbook + + 129 sibling, upper 299 + 9). Excluded 516 / 2,113. Catalogue reach 1,438 = measured. Lower + "no exact relation" 6 / 99. +- The 2% mutation still stops at the bc5596 control, CSVs untouched (`cmp`). The test pins + bc7675 with the premise that 6096 − 6090 > 5.5. +- The sweep test's own exactness check had the symmetric form and, for lower-tail rows, the wrong + direction (k = 0.1). It passed bc87070/bcc822 by luck. Rewritten to the big/small form. +- Methodology: the rule was amended after the first population run. The amendment's evidence is + independent of the outcome, and the rule's stated intent (the catalogue's storage precision) + was already this; the first form got the storage wrong. Recorded in the note. +- Accepted, not changed: "adjacent frames name different relations" also labels one neighbour + naming two relations, and two neighbours at different heights naming one relation. Neither + occurs in the data (round 3). +- Round 2's vignette finding ("28 roll-heights") is fixed in the Phase 4 docs. + +## Code-check round 4: a third storage, and the enumeration that ended the loop + +Round 4 found a defect inside round 3's fix, and it was documentary only. "Rounds or +truncates" is not everything the catalogue does: some figures were converted at 3.28 ft/m and +rounded (20,000 ft = 6,098 on 2,677 frames; 15,000 ft = 4,573 on 770; 10,000 ft = 3,049 on 106). +Such a figure is off by about −(0.5 + 0.000256·T), which can only push a genuine relation +outside the bound, toward refusal. The bound was not widened after the fact; the docs now say +it covers 0.3048 conversions and that a 3.28 figure refuses. + +**Enumeration (terminal):** every adjacent neighbour of all 521 roll-heights the logbook left +gives 3,876 (pair, relation) rows. Under the new interval exactly the four tabled factor rows +name a relation; the old interval gives the same four minus bc7675. The only near-bound pair is +bc5596's 2,438 m under x10.764, at r = −30.4 against [−6.4, 11.3]. No "different relations" +case occurs. No pair sits between either bound and two widths past it. Loosening the digit +string relation to ±1 finds nothing beyond bcb98013 frames 51/53. + +Doc slips fixed: "31 m" → 30 m (3.28084², not the rounded 10.764). bc7675's logbook agrees on +the factor, not the height (20,200 ft = 6,157 m, 1.0% above). The vignette's "where they are +silent" becomes "where they do not settle it" (bc7675 and bcb98013 have logbooks that speak). diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/progress.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/progress.md new file mode 100644 index 0000000..be87d68 --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/progress.md @@ -0,0 +1,19 @@ +# Progress — Two #54-slipped roll-heights a sibling frame settles and no logbook does (#74) + +## Session 2026-09-27 + +- Plan-mode exploration; phases approved by user, with two gate decisions (scope: both tails; + logbook vetoes only when it names a different factor) +- Created branch `74-sibling-frame-witness` off main +- Scaffolded PWF baseline from issue #74 with approved phases +- Next: Phase 1 +- Phase 1: tests pinned (commit 146389f), failing against the old table +- Phase 2: Stage 5b sibling witness in the generator; regenerated both CSVs; 4 roll-heights + settled (two beyond the issue, both logbook-corroborated); tolerance guard proven by mutation +- Phase 3: loader reads `witness`; docs/comments/warning in R/fly_footprint.R; counts 299 -> 308 +- /code-check: four rounds. R1 clean. R2 found a stale vignette count. R3 found the tolerance + assumed rounding only (catalogue also truncates); fixed, bc7675 now tabled. R4 found a third + storage (3.28 ft/m) inside R3's fix (docs only, refuses toward safety), and ended the loop + by enumerating all 3,876 neighbour-relation pairs. Commit 8f29789 +- Phase 4: fly#74 section in terrain-correction.md, NEWS, CLAUDE.md Key Decision, vignette count + 28 -> 33, issue #74 body edited with the two-neighbour finding and the adopted rule diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round1.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round1.md new file mode 100644 index 0000000..c8eddbe --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round1.md @@ -0,0 +1,54 @@ +# Code-check review, round 1 — fly#74 sibling witness (staged diff) + +## Clean + +No issues found. + +## What was checked, and how + +- **Reproduced the generator from the staged index** (`git checkout-index -a` into a temp dir, + `centroids/` and `logbooks/` caches copied): exit 0, both controls pass, and the regenerated + `flying_height_rolls.csv` / `_excluded.csv` are byte-identical to the staged ones. + `test-fly_footprint_height_rolls.R` passes against that tree with `NOT_CRAN=true`. +- **Rules 1-6 against `sibling()`** + - Adjacency is frame number ±1 of any catalogue frame on the key, same roll, lens and scale (`%in%` + for scale, so the 5,831 NA scales cannot give NA rows), at a different height. The cache has + 0 NA `flying_height`, 0 NA `focal_length`, 0 non-integer heights and 0 duplicated + (roll, frame) keys, so the `==` subsets cannot inject NA rows and `digits()` never rounds. + - The band proxy uses `median(d$elev)`. It is never NA: 0 of 549 v rows, 0 NA elev in `lt_all`. + - Exact relations: the tolerance matches `|h - k s| <= 0.5 (k+1)` for each of x10, xK, /10 + and /100. The digit relations are string identity. A neighbour naming two relations is + rejected, so an x10/digit coincidence cannot slip through. `rel_factor("digit")` can never + land on 0.1 or 10 exactly, so the `case_when` cause order is safe. + - Unanimity: one relation, one sibling height, at least one naming neighbour. An all-xK result + goes to #54. + - Logbook veto: this fires only when the logbook's modal factor is finite and different. + Five focal-conflict rows could have let a sibling override the "different lens" exclusion, + but all five carry `log_factor = 1`, which a sibling never names, so the veto would fire + anyway (and today none of them has a neighbour at another height). + - Spacing is gated through the same `fits()` window. +- **Reach**: `fly_footprint()` matches on the same four-field `num()` key. The generator's reach + check prints 1,354 reached and 1,354 measured, so no sibling row touches an unmeasured frame. + `r_tabled` is still held to the band per frame. +- **Accounting**: accepted rows move from excluded to tabled with `reason` set to NA. The + partition `stopifnot` and the per-tail census reconciliation in the test both still hold. + Counts in the doc text (299 + 8 + 1 = 308) check out. +- **CSV consumers**: `fly_height_roll_table()` is the only reader in `R/`. It reads `witness` + as character, and the new columns do not disturb the key or `factor`/`height_m`. Written + with `na = ""`, the empty `sibling_frame` reads back as NA integer. For `sibling_reason`, an + empty value would read as "" and the `nzchar` check catches it. +- **Tests can fail**: the named-row pins, the `nzchar`/`anyNA` checks on `sibling_reason`, and the + fixture test (26212 vs 26213, 97924 vs 97925 separating table from #54) all bind to values that + a wrong rule would move. + +## Observations (not defects) + +- Four sibling rows ship, not two: `bc87070` 396 (34 frames) and `bcc822` 701 (11 frames) in the + lower tail as well. Both are corroborated by logbook rows the transcription left uninterpreted + ("169-20?" at 13.0 = 3,962 m; "2300" beside 23,000 ft = 7,010 m). The planned note and NEWS + update (Phase 3) should state all four. `inst/notes/terrain-correction.md` still says the table + reaches "exactly the 1,001 measured frames" in the lower tail, and that is now 1,046. +- `bcb98013`'s linked page reads 24,000 ft (7,315 m) where the shipped height is 7,924 m. Rule 5 + treats that as naming no factor. The page's roll number (99013) and scale (1:35000) also + disagree with the catalogue for the neighbours, so it does not discriminate. It is worth one + sentence in the note. diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round2.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round2.md new file mode 100644 index 0000000..dde4f6a --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round2.md @@ -0,0 +1,50 @@ +# Review round 2: fly#74 staged diff (consumer side and tests) + +Reviewer scope: R/fly_footprint.R consumer logic, other readers of the rolls table, tests, doc figures. +Worked in a copy (`git checkout-index` into the session scratchpad); repo tree untouched. + +## Findings + +- **[fragile, doc]** vignettes/airphoto-selection.Rmd:410-415. It says "On 28 roll-heights the + province's flight logbooks and the spacing between adjacent frames settled the disagreement" and + lists the causes as dropped digits, x10 or wrong scale. The shipped table now has 32 roll-heights: + 4 are settled by a sibling frame, and one cause (a leading digit added) is missing from that list. + The 28 count is still correct for the logbook rows alone, but the sentence describes everything + marked `"corrected_roll_table"`, so it is now incomplete. The caller said notes and NEWS come in a + later commit; the vignette is a third place that needs the same edit and was not in that list. + +No bugs found in the code or tests. + +## Checked and correct + +- **Consumer flow (R/fly_footprint.R ~1164-1210).** The code there is unchanged. Every sibling row + has `factor != 1`: that is 10 for bc87070 and bcc822, 0.1 for bc5596, and 0.08092 for bcb98013. So + each row goes through `in_band(r_tabled)` using `height_m`, and `factor` is only read in `!= 1` / + `== 1`. The leading-digit ratio is never used as a multiplier. `fh_used` for the leading-digit row + is 7924, under the 16,000 m ceiling. `tabled` is excluded from `slipped` and `implausible`, and it + feeds the second DEM pass and the `roll_tabled` warning count and `height_source`, the same as + logbook rows. The table has no duplicate keys, so `match()` is unambiguous. +- **Other readers.** Only `fly_height_roll_table()` reads the CSV. The mocked tables in the test file + replace the function outright. Nothing reads columns by position, and nothing outside tests reads + `cause` or `logbook_ft`. The new `witness` entry in `colClasses` exists in the shipped CSV. + `test-fly_footprint_invariants.R` only lists the `height_source` values, and those are unchanged. +- **Doc figures, checked against the shipped CSVs.** + - Upper-tail tabled frames: logbook 299 + sibling 9 (bc5596 8, bcb98013 1) = 308. + - Excluded upper-tail frames sum to 1,281 = 1,589 - 308. + - The only pre-2003 excluded upper-tail row is bc79027 at 10 frames. The rest are bcc03004/6/7/8/46 + and bcc05001. + - So "299 -> 308", "10 frames of bc79027" and "9 an adjacent frame settles" all hold. "22 + roll-heights" (line 248, test header) is still correct for the logbook instruments: there are 22 + lower-tail logbook rows (1,001 frames). +- **Tests pass on the staged tree** (`NOT_CRAN=true test_file`, all green). +- **Mutation results, run in the copy:** + - Drop the 4 sibling rows: 3 tests fail (census, sibling pin, sibling sizing). + - Set sibling `height_m` to catalogue x factor: 2 tests fail (the bc5596/bcb98013 pin and the + sizing test). The census test stays green. That is expected: for bc87070 and bcc822 the two + readings differ by at most 2 m, which is inside the rounding that defines the relation, so it is + not a gap. + - Consumer gate `!= 1` changed to `> 1`: 2 tests fail. +- **Tolerances.** The rounding bound `0.5 * (k + 1)` is right for both k = 10 and k = 0.1: it is the + whole-metre rounding on the frame plus k times the sibling's. + +/Users/airvine/Projects/repo/fly/planning/active/review-round2.md diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round3.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round3.md new file mode 100644 index 0000000..8f76503 --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round3.md @@ -0,0 +1,69 @@ +# Code-check review, round 3: fly#74 Stage 5b logic (adversarial) + +## Findings + +- **[severity: bug]** `data-raw/height_calibrate-lower_tail_rolls.R`, `relation()` (the `exact()` tolerance and + the `d10`/`d100` tolerances), plus rule 3 in the Stage 5b comment. **Rule 3 assumes the catalogue rounds to + whole metres. It does not always round. It sometimes truncates, and that makes the rule refuse a sibling + that every other witness supports.** + + The tolerance `|h - k s| <= 0.5 (k + 1)` is derived from "whole-metre rounding on both sides". But the + catalogue stores 2,000 ft (609.6 m) as **609**, and 2,400 ft (731.5 m) as 731. Both are truncations, and + both sit in the shipped `flying_height_rolls.csv` (bc5449, bc7584, bc5536). Across the cache, for + round-50-ft heights where floor and round differ, 50,579 frames sit at the floored value and 363,865 at + the rounded one. Truncation is a minority convention, but it is real. Under truncation the error on + each height is in (-1, +0.5], not ±0.5. + + The wrong refusal happens in the real data. `lower bc7675 609 (305 mm, 1:16000)` has **84 frames**, and + its neighbour frame 214 reads **6,096 m = 20,000 ft exactly**. `6096 - 10 x 609 = 6`, which is 0.5 m past + the 5.5 limit, so the row is excluded with `sibling_reason = "no adjacent frame in an exact named + relation"`. Every other witness agrees with the sibling: + - The logbook names factor 10 on all 34 frames it reads (0.40 coverage, so the logbook rule refused + it only on coverage). + - Spacing under 6,096 m gives overlap 0.616, and `r_corrected` = 1.00. + - It is the same 609 ↔ 20,000 ft pairing the logbook settles for bc7584. + + I re-ran `sibling()` over all 549 roll-heights with a tolerance that admits truncation on both sides + (`|h - k s| <= k + 1`; `d10` <= 11, `d100` <= 101). **bc7675 is the only outcome that changes**, and it + changes to ACCEPT. Both controls still hold: bc5596 frame 212 at 2,438 m is still 30.6 m off + x10.764, far outside 11.8. So the rule as written drops 84 frames that its own design intends to settle, + because a premise stated in the comment is false for this catalogue. + + The rule was fixed before the run, so changing it now is a methodology decision for the author. The + evidence for the rounding convention is independent of the Stage 5b outcome: it comes from the shipped + logbook rows. At minimum, the comment's "within the whole-metre rounding on both sides" is factually + wrong. + +## Checked and found sound (with evidence) + +- **Duplicated (roll, frame) keys:** there are 0 in the full `frames` cache, so the ±1 adjacency cannot + pair a frame with itself or reach a frame that Stage 1 excluded from spacing. +- **`own` from the catalogue key vs `d` from the sampled set:** reach = measured (1,354 = 1,354), so every + key frame is sampled and `own` and `d` hold the same frames. +- **Non-contiguous runs:** all four accepted roll-heights are single contiguous runs (bc87070 169-202, + bcc822 120-130, bc5596 204-211, bcb98013 52). No accepted row relies on one run's neighbour while + another run's neighbour names something else. +- **Neighbour on a disputed or tabled roll-height:** rule 2's band gate removes these. Of the four accepted + rows, three have exactly one naming neighbour and one non-naming in-band neighbour (bc87070 at + 168 = 4,054, bcc822 at 131 = 6,858, bc5596 at 212 = 2,438). That is rule 4's "new leg" clause working as + designed. None of those non-naming neighbours comes near a named relation. +- **Digit relation:** the string test cannot produce a leading zero. `digit` and `x10`/`d10` coincide only + near h ≈ 1111·10^n / 9-type values, and then the row is refused because it names more than one + relation. `rel_factor("digit")` can never equal 0.1, 10 or 100 exactly, so the `case_when` cause order + is safe. +- **Veto (`log_factor`):** it fires on the logbook's modal named factor even when coverage is under half, + which matches rule 5 as written. In the real data no excluded row reaches the veto stage. Every + `sibling_reason` is one of the three early exits: 10 have no adjacent frame at another height, 499 + have no in-band neighbour, and 8 have no exact relation. +- **Fields on moved rows:** `factor`, `height_m`, `log_ft` (NA), `n_agree` (NA), `p_corrected`, + `r_corrected`, `reason` (NA) and `witness` are all overwritten. The remaining stale fields (`n_logbook`, + `covered`, `n_base`, `focal_logbook`) are not written to either CSV. `cause` reads the overwritten + `factor`. I reproduced the generator from the staged index and got output byte-identical to the staged + CSVs. + +## Observations (not defects today) + +- `"adjacent frames name different relations"` also covers two cases that are not different relations: + one neighbour naming two relations, and two naming neighbours at different heights naming the *same* + relation (the `d10` tolerance admits sibling heights 3958 and 3962 for h = 396). Neither case occurs in + the current data. The label would be wrong only if one did. diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round4.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round4.md new file mode 100644 index 0000000..57f46a7 --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/review-round4.md @@ -0,0 +1,106 @@ +# Review round 4 — fly#74 exact() fix, storage assumptions, doc figures + +Reviewed in a scratch copy (generator re-run from the copy's root, 60 s; the workspace was +saved after Stage 5b and probed). The staged CSVs reproduce byte-for-byte: after the re-run, +`git status` shows no unstaged change to `inst/extdata/`. `test-fly_footprint_height_rolls.R` +passes (251, `NOT_CRAN=true`). + +## 1. The fix itself — correct, nothing wrong found + +- **Derivation.** A stored figure S = T − a. Rounding gives a ∈ [−0.5, 0.5] and truncation + a ∈ [0, 1), so a ∈ [−0.5, 1). With Tb = k·Ts, B − k·s = k·b − a ∈ [−(1 + k/2), k + 1/2]. + Correct. +- **Direction.** Upper: `exact(h, sib, k)` puts big = catalogue h. Lower: `exact(sib, h, k)` + puts big = sibling. Both correct. The test's `max(hs) − k·min(hs)` with + `k = max(f, 1/f)` is the same in both tails. +- **Whether the looser interval admits a wrong neighbour.** I enumerated every adjacent + neighbour of every roll-height the logbook left: 3,876 (pair, relation) rows, in band or + not. Under the new interval, four pairs name a relation, and they are the four tabled + factor rows. The old interval gives the same set minus `bc7675`. Outside the interval, the + only pair within two interval widths of either bound is `bc5596` / 2,438 m under ×10.764 + (r = −30.4 against [−6.4, 11.3]). Nothing else comes near. No "different relations" + outcome occurs at all (the refusal table has no such row), and the fix flips nothing. +- **Controls.** `bc5596` still settles from 203 and 2,438 still names nothing. `bcb98013` + still settles on `digit`. + +## 2. Storage assumptions in Stage 5b and the tests, checked against the catalogue + +| assumption | where | against the data | +|---|---|---| +| Heights are integers | `digits()` (`formatC format="d"`), comment "Heights are whole metres" | Holds. `flying_height` is class integer and every value is whole. No NA in height or focal; NA `scale_n` is handled by `%in%`; no NA reaches the neighbour subset. | +| a ∈ [−0.5, 1): stored by round or truncate only | `exact()`, the test check, note step 3, NEWS, CLAUDE.md | **Incomplete, see finding D1.** A third storage exists. It fails only toward refusal, and no current outcome changes. | +| Digit relation is string identity | `relation()` | Holds only if the typo was made on the stored metre string and both frames were stored the same way (97,925 beside 7,924 would refuse). It fails toward refusal. Loosening it to ±1 on the remainder finds no additional pair: only `bcb98013` 51/53. | +| `abs(log_factor − f) > 1e-9` | `sibling()` | Safe. The two sides are the same literal expressions (1/10, 1/K, 10, 100). A digit factor `round(sib/h, 6)` can never equal a named factor, so any logbook factor vetoes a digit relation. That matches rule 5 and does not fire on current data (`bcb98013`'s page names no factor). | +| `is_f()` 1e-9 in `cause` | stage 5 | Safe for the same reason. The digit factor 0.08092 matches no named factor and falls to the `sibling_rel` arms. | + +## Findings + +- **[doc] `inst/notes/terrain-correction.md:418-422`, `data-raw/height_calibrate-lower_tail_rolls.R:430-435`, `NEWS.md:3` ("Exact means within what storing whole metres can move a figure, and the catalogue both rounds and truncates"), `CLAUDE.md` #74 entry, `R/fly_footprint.R:260`.** (D1) + The interval rests on "each figure off its true value by a ∈ [−0.5, 1)". That is the same + kind of assumption round 3 found, one level further out, and the catalogue contradicts it. + Some figures were converted at **3.28 ft/m** and then rounded, not at 0.3048: + - 20,000 ft: **6,098** on 2,677 frames (20000/3.28 = 6097.6), beside 6,096 on 198,669 and + 6,097 on 175. + - 15,000 ft: **4,573** on 770 frames (4573.2), beside 4,572 on 11,903. + - 10,000 ft: **3,049** on 106 frames. + + A figure stored this way sits a ≈ −(0.5 + 0.000256·T) off its true value: −2 at 6,096 m and + about −7 at 26,000 m. So a genuine ×10 whose large figure came through 3.28 reaches + r ≈ +17 against a limit of 10.5, and a ÷10 whose sibling came through 3.28 reaches about + +12. + + **Impact today: none.** The error only widens the true interval, so it can only cause + refusals, never a false accept. The enumeration in §1 finds no neighbour pair between + either bound and two interval widths past it, so no outcome changes. The claim as written, + that this is what the catalogue's storage can do, is false, and it is the premise the note + offers as the justification. The fix is either to state the bound as covering rounding and + truncation of a 0.3048 conversion, with 3.28-converted figures refusing, or to widen it. + +- **[doc, minor] "×10.764 to 31 m" — `NEWS.md:4`, `CLAUDE.md:324`, `inst/notes/terrain-correction.md:438`, generator comment `:437`.** + With the package's own factor, `fly_height_slip_factor()` = 3.28084² = 10.76391, the gap is + 26,212 − 10.76391 × 2,438 = **−30.4 m**, so 30 m. "31" comes from the rounded 10.764 + (30.6). The 0.12% is right (0.116%), and so is [−6.4, 11.3]. + +- **[doc, minor] `inst/notes/terrain-correction.md:448`: "Every other witness agrees with the sibling there."** + On `bc7675` the logbook's height is **20,200 ft (6,157 m)** on all 34 frames it reads + (logbook row 113–248, "20.2"). The shipped height is the sibling's 6,096 m (20,000 ft), 1.0% + lower. The logbook agrees on the *factor* (×10, within its 2%), not on the height. Had it + covered half the frames, the table would ship 6,157.1 m. The sentence should say "names the + same factor", or note the 61 m. + +- **[doc, minor] `vignettes/airphoto-selection.Rmd:411`: "the province's flight logbooks, or where they are silent an adjacent frame".** + Two of the five sibling rows have a logbook that speaks: + - `bc7675`: read on 34 frames, naming ×10. + - `bcb98013` frame 52: its page reads 24,000 ft, which contradicts the shipped 7,924 m + (26,000 ft) by 7.7%. The note does flag that the page may belong to another roll. + + "Where they do not settle it" would be accurate. + +## Re-derived and correct + +All from the shipped CSVs, the sweep, and the re-run: + +- Tables and counts: + - 33 roll-heights, 1,438 frames: 1,130 lower, 308 upper. + - 516 excluded, 2,113 frames. Upper excluded is 1,281, every row "#54's 10.764 still + applies", which is 1,290 − 8 − 1. + - 5 sibling rows, 138 frames, of 521. + - The table rows (frames, relation, from-frame, height, overlap) all match. +- Refusal counts: lower 10/486, 6/99, 36/247; upper 1/10 (`bc79027`), 463/1,271. The 463 all + sit on `bcc03004/06/07/08/46` and `bcc05001`. +- Figures quoted for `bc5596` and `bcb98013`: + - [−6.4, 11.3] at k = 10.764. + - #54 widths: `bc5596` 204–211 are −10.28% to −11.23% (10.3–11.2% narrow) and `bcb98013` + 52 is +17.05% (17.1% wide), from sweep terrain. + - 8,600 ft to 0.3 ft (0.26), and 7,989 ft, 11 ft short. + - 212 is 8,000 ft in the logbook. +- Figures quoted for `bc7675`: + - 6,096 − 6,090 = 6 against 5.5. + - Logbook coverage 40%. +- Logbook reads for the other lower-tail rows: + - `bc87070`: row "169-20?" at 13.0 = 3,962 m. + - `bcc822`: "2300" for 120–130, between 22,500 and 23,000. +- `R/fly_footprint.R`: 308 by the roll table (299 + 9); 308 + 1,281 = 1,589; "the 10 frames + of `bc79027`"; 1,271 on the 2003–2005 rolls. + +/Users/airvine/Projects/repo/fly/planning/active/review-round4.md diff --git a/planning/archive/2026-09-issue-74-sibling-frame-witness/task_plan.md b/planning/archive/2026-09-issue-74-sibling-frame-witness/task_plan.md new file mode 100644 index 0000000..86846ee --- /dev/null +++ b/planning/archive/2026-09-issue-74-sibling-frame-witness/task_plan.md @@ -0,0 +1,101 @@ +# Task: Two #54-slipped roll-heights a sibling frame settles and no logbook does (#74) + +## Problem + +fly#71 moved the pre-2000 #54-slipped roll-heights that a flight logbook reaches onto +`flying_height_rolls.csv` at ÷10. Two slipped roll-heights are still sized by #54's ÷10.764, +and in both cases the evidence says that is wrong: + +- **`bcb98013` frame 52** is catalogued at 97,924 m. The other 207 frames on the roll read + 7,924 m, so this is a leading-digit typo and not a slip. ÷10.764 gives 9,097 m, which draws the + frame about 15% wide in linear size. The logbook page the catalogue links (`bcb98013_1.jpg`) is + headed roll **15BCB99013**, flight B-010-E-99, 1999, 24,000 ft. That fits neither 7,924 m + (26,000 ft) nor the file name, so the catalogue may link the wrong scan. +- **`bc5596` frames 204–211** are catalogued at 26,212 m, ten times the 2,621 m (to the metre) (8,600 ft) + of frames 141–203 on the same roll. No logbook page covers them: the catalogue's + `flight_log_url` is NA for frames 141–211. + +Neither frame fits the fly#60 rule, which needs a logbook page naming a factor. Both point at one +more witness the rule does not have: **the same roll's other frames**. For `bc5596` that witness +gives an exact ×10; for `bcb98013` it gives an exact leading digit. + +## The rule (fixed here, before it is run over the population) + +A roll-height the logbook rule excluded is settled by a sibling only if all of these hold: +1. **Adjacent**: a frame numbered ±1 from a frame of the roll-height, on the same roll with + the same focal length and scale and a different height. This uses the adjacency rule from + `fly_bearing()`/Stage 1. +2. **Neighbour in band**: `(sibling − elev) / nominal_agl` is in `fly_height_ratio_band()`, + using the roll-height's own median terrain from the sweep. Neighbours are unsampled, so the + note states this as a proxy. `fly_footprint()` re-checks the band per frame anyway. +3. **Exact named relation**: upper tail is catalogue = 10 × sibling, or catalogue = one digit + prepended to the sibling's digits. Lower tail is catalogue = sibling / 10 or / 100, or the + sibling with its leading digit dropped. "Exact" for a factor k means + |catalogue − k·sibling| ≤ 0.5·(k + 1) m (whole-metre rounding on both sides). For the digit + relations it means string identity. +4. **Unanimous**: every in-band adjacent neighbour that names a relation names the same one, + and at least one does. A neighbour that names none, such as a new leg at a new altitude, + is not a contradiction. +5. **No logbook contradiction**: if the logbook rule named a factor for these frames, it must + be the same one. A logbook that names no factor vetoes nothing. +6. **Spacing**: under the sibling's height, spacing falls in the random-frame window (fly#60 + condition 3). With no adjacent base the roll-height is refused, as in the logbook route. + +The shipped height is the sibling's catalogued height. + +## Phase 1: Tests first (fail until the table carries sibling rows) +- [x] `test-fly_footprint_height_rolls.R`: extend the contract. There are two witnesses + (`logbook`, `sibling`). Causes grow by `height_leading_digit_added` / `_dropped`. Sibling + rows have `logbook_ft` NA and `height_m` equal to the sibling's catalogued height. The + factor/cause pairing is checked per witness. +- [x] Pin both issue cases against the table: `bc5596` 26212 → 2621, factor 0.1; + `bcb98013` 97924 → 7924, leading digit. +- [x] A fixture test checks that a sibling-tabled frame becomes `corrected_roll_table` and is + sized from `height_m`, ahead of #54. Only the tabled key moves; a frame differing in + height or scale does not. +- [x] Pin the rule against the population with the sweep plus the table: every sibling row's + corrected ratio is recomputed from the sweep. The frame count still reconciles to the + census (tabled + excluded == set). + +## Phase 2: Generator (`data-raw/height_calibrate-lower_tail_rolls.R`) +- [x] Add a Stage 4b `sibling()` implementing rules 1–6 over `frames` (the centroid cache) + for the roll-heights `v` did not accept, in both tails. The rule block is written as a + comment before the code, as in Stage 5. +- [x] Controls, which must return known answers before anything ships. `bc5596` 26212 names + ×10 from frame 203 and nothing from 212 (the 10.764 near-miss is rejected by the rounding + tolerance). `bcb98013` 97924 names the leading digit from 51 and 53. `stop()` otherwise. +- [x] Add a `witness` column (`logbook` | `sibling`) to both shipped CSVs. Sibling-excluded + rows keep their logbook reason. Accepted sibling rows move from excluded to rolls. The + reconciliation `stopifnot`s and the key-reach check stay. +- [x] Run the generator and record every printed figure (how many roll-heights and frames it + settles per tail and relation, and what it refuses and why) in `findings.md`. +- [x] Regenerate `flying_height_rolls.csv` / `_excluded.csv`. + +## Phase 3: Package code and docs +- [x] `fly_height_roll_table()` reads `witness` as character. Its comment (R/fly_footprint.R + ~243) and the `height_source` roxygen (~703) name the sibling witness. No change to the + application logic (`tab_factor != 1` + band check already covers it). Verify rather + than assume. +- [x] `devtools::document()`, full `devtools::test()`, `lintr::lint_package()`. + +## Phase 4: Record +- [x] `inst/notes/terrain-correction.md`: add a fly#74 section with the rule, the two-neighbour + finding on `bc5596`, the whole-metre tolerance and why it separates them, the population + result, and what it cannot do (it cannot tell ×10 from ×10.764 without an exact + neighbour). Update the fly#71 bullets that say "(fly#74)". +- [x] NEWS.md entry (no version bump). CLAUDE.md Key Decisions gets a short fly#74 bullet + pointing at the note. +- [x] Edit the issue body to add the two-neighbour finding (spec, not comment). + +## Validation +- [ ] Tests pass +- [x] `/code-check` clean on each commit +- [ ] PWF checkboxes match landed work +- [ ] `/planning-archive` on completion + +Gate decisions (2026-09-27): rule runs over every excluded roll-height in both tails; a logbook vetoes only if it names a different factor. + +**Plan corrections during the run** (see findings.md): x10.764 was added as an upper-tail +sibling relation, so the tolerance guards something. Rule 3's "exact" became the catalogue's +actual storage (rounds or truncates): big − k·small ∈ [−(1 + k/2), k + 1/2]. The excluded +table carries `sibling_reason` rather than `witness`. diff --git a/tests/testthat/test-fly_footprint_height_rolls.R b/tests/testthat/test-fly_footprint_height_rolls.R index 4577bbb..4403252 100644 --- a/tests/testthat/test-fly_footprint_height_rolls.R +++ b/tests/testthat/test-fly_footprint_height_rolls.R @@ -199,16 +199,34 @@ test_that("the table holds against the sweep and the logbooks it was measured fr expect_identical(nrow(sets$upper), 1589L) # premise: #54's census # Contract: the named slips, one cause each, and nothing else. The upper tail names only - # 1/10: a logbook confirming 10.764 is excluded, since #54's repair already sizes it. + # 1/10 by factor: a logbook confirming 10.764 is excluded, since #54's repair already sizes + # it. The one relation that is not a factor is a leading digit, which only a same-roll + # sibling can name (fly#74), so its row carries the ratio it implies and a cause saying so. expect_setequal(unique(tab$tail), c("lower", "upper")) expect_setequal(unique(excl$tail), c("lower", "upper")) - expect_setequal(unique(tab$factor[tab$tail == "lower"]), c(1, 10, 100)) - expect_setequal(unique(tab$factor[tab$tail == "upper"]), 0.1) - expect_identical(tab$cause, c(`1` = "scale_wrong", `10` = "height_digit_dropped", - `100` = "height_two_digits_dropped", - `0.1` = "height_decimal_dropped")[as.character(tab$factor)], + expect_true(all(tab$witness %in% c("logbook", "sibling"))) + # An excluded row says why each witness passed it over: the logbook in `reason`, the + # same-roll sibling in `sibling_reason`. + expect_false(anyNA(excl$sibling_reason) || any(!nzchar(excl$sibling_reason))) + digit <- grepl("leading_digit", tab$cause, fixed = TRUE) + expect_true(all(tab$witness[digit] == "sibling")) + expect_setequal(unique(tab$factor[tab$tail == "lower" & !digit]), c(1, 10, 100)) + expect_setequal(unique(tab$factor[tab$tail == "upper" & !digit]), 0.1) + expect_identical(tab$cause[!digit], + c(`1` = "scale_wrong", `10` = "height_digit_dropped", + `100` = "height_two_digits_dropped", + `0.1` = "height_decimal_dropped")[as.character(tab$factor[!digit])], ignore_attr = TRUE) - expect_false(anyNA(tab)) + expect_identical(tab$cause[digit], + ifelse(tab$tail[digit] == "upper", "height_leading_digit_added", + "height_leading_digit_dropped")) + expect_equal(tab$factor[digit], round(tab$height_m[digit] / tab$flying_height[digit], 6)) + # A row carries the witness that settled it, and nothing from the one that did not. + lb <- tab$witness == "logbook" + expect_false(anyNA(tab[lb, setdiff(names(tab), "sibling_frame")])) + expect_true(all(is.na(tab$logbook_ft[!lb]))) + expect_true(all(is.finite(tab$sibling_frame[!lb])) && all(is.na(tab$sibling_frame[lb]))) + expect_false(anyNA(tab[!lb, setdiff(names(tab), c("logbook_ft", "frames_logbook"))])) expect_false(anyNA(excl$reason) || any(!nzchar(excl$reason))) # An excluded slipped roll-height is still repaired by #54, and its reason says so. expect_true(all(grepl("10.764", excl$reason[excl$tail == "upper"], fixed = TRUE))) @@ -242,21 +260,91 @@ test_that("the table holds against the sweep and the logbooks it was measured fr } # The height used is the logbook's, converted; and it is the catalogue's times the # factor to within the catalogue's rounding, which is what makes the factor the - # defect's name. - expect_equal(tb$height_m[i], round(tb$logbook_ft[i] * 0.3048, 1), info = key(tb)[i]) - expect_true(abs(tb$height_m[i] / (tb$flying_height[i] * tb$factor[i]) - 1) <= 0.02, - info = key(tb)[i]) + # defect's name. A sibling row ships the sibling's catalogued height, and a factor + # relation to it is exact to what storing whole metres can move a figure, rounded or + # truncated: big - k small in [-(1 + k/2), k + 1/2] (fly#74). + if (tb$witness[i] == "logbook") { + expect_equal(tb$height_m[i], round(tb$logbook_ft[i] * 0.3048, 1), info = key(tb)[i]) + expect_true(abs(tb$height_m[i] / (tb$flying_height[i] * tb$factor[i]) - 1) <= 0.02, + info = key(tb)[i]) + } else if (!grepl("leading_digit", tb$cause[i], fixed = TRUE)) { + hs <- c(tb$flying_height[i], tb$height_m[i]) + k <- max(tb$factor[i], 1 / tb$factor[i]) + r <- max(hs) - k * min(hs) + expect_true(r >= -(1 + k / 2) && r <= k + 1 / 2, info = key(tb)[i]) + } } } # fly#71's finding, pinned: on every tabled slipped roll-height the logbook sits within # 1% of the catalogue divided by 10, and over 6% above it divided by 10.764 — which is # the height #54 drew these frames from. - u <- tab[tab$tail == "upper", ] + u <- tab[tab$tail == "upper" & tab$witness == "logbook", ] expect_true(all(abs(u$height_m / (u$flying_height / 10) - 1) < 0.01)) expect_true(all(u$height_m / (u$flying_height / fly_height_slip_factor()) - 1 > 0.06)) }) +test_that("a same-roll sibling settles roll-heights no logbook does (fly#74)", { + tab <- fly_height_roll_table() + excl <- utils::read.csv(system.file("extdata/flying_height_rolls_excluded.csv", + package = "fly")) + key <- function(d) paste(d$film_roll, d$flying_height, d$focal_length, d$scale_n) + row <- function(k) tab[key(tab) == k, ] + # bc5596 204-211: 26,212 m, ten times frame 203's 2,621 m to within the rounding, and no + # logbook page. Frame 212 on the other side reads 2,438 m, which 10.764 reaches to 0.12%, + # so the sibling that names the relation is 203 and the height is its height. + a <- row("bc5596 26212 153 12000") + expect_identical(nrow(a), 1L) + expect_identical(a$witness, "sibling") + expect_identical(a$tail, "upper") + expect_equal(a$height_m, 2621) + expect_equal(a$factor, 0.1) + expect_identical(a$cause, "height_decimal_dropped") + expect_equal(a$sibling_frame, 203) + expect_identical(a$frames_measured, 8L) + # bcb98013 frame 52: 97,924 m is 7,924 with a leading 9, and frames 51 and 53 both read + # 7,924. Its linked logbook page reads 24,000 ft, which names no factor, so it vetoes + # nothing. + b <- row("bcb98013 97924 153 40000") + expect_identical(nrow(b), 1L) + expect_identical(b$witness, "sibling") + expect_equal(b$height_m, 7924) + expect_identical(b$cause, "height_leading_digit_added") + expect_identical(b$frames_measured, 1L) + # bc7675 609 m: 2,000 ft TRUNCATED (609.6), beside frame 214 at 6,096 m (20,000 ft). The + # residual 6096 - 10 x 609 = 6 m is past what rounding alone allows (5.5), so a tolerance + # that assumes the catalogue only rounds refuses the one row here that needs truncation. + t7 <- row("bc7675 609 305 16000") + expect_identical(t7$witness, "sibling") + expect_equal(t7$height_m, 6096) + expect_equal(t7$factor, 10) + expect_equal(t7$sibling_frame, 214) + expect_gt(6096 - 10 * 609, 0.5 * 11) # premise: rounding alone would refuse it + expect_false(any(key(excl) %in% key(rbind(a[, c("film_roll", "flying_height", + "focal_length", "scale_n")], + b[, c("film_roll", "flying_height", + "focal_length", "scale_n")])))) +}) + + +test_that("a sibling-tabled frame is sized from the sibling's height, ahead of #54", { + skip_if_no_terra() + rf <- roll_fixture()[c(1, 1, 1, 1), ] + rf$film_roll <- c("bc5596", "bc5596", "bcb98013", "bcb98013") + rf$scale <- c("1:12000", "1:12000", "1:40000", "1:40000") + rf$focal_length <- 153 + # The second and fourth differ from a tabled key by one metre, so only #54 reaches them. + rf$flying_height <- c(26212, 26213, 97924, 97925) + dem <- roll_dem(800) + fp <- suppressWarnings(fly_footprint(rf, dem = dem)) + expect_identical(fp$height_source, c("corrected_roll_table", "corrected_unit_slip", + "corrected_roll_table", "corrected_unit_slip")) + expect_equal(fp$height_agl, c(2621 - 800, 26213 / fly_height_slip_factor() - 800, + 7924 - 800, 97925 / fly_height_slip_factor() - 800)) + expect_identical(fp$flying_height, rf$flying_height) +}) + + test_that("a factor below 1 is applied ahead of #54's slip, and only where it is tabled", { skip_if_no_terra() # fly#71: a 1978 roll #54 divides by 10.764 whose logbook says 10 — bc78065 is diff --git a/vignettes/airphoto-selection.Rmd b/vignettes/airphoto-selection.Rmd index 7d6b713..0fc1f4c 100644 --- a/vignettes/airphoto-selection.Rmd +++ b/vignettes/airphoto-selection.Rmd @@ -407,11 +407,12 @@ times too large on 1,589 film frames from 13 rolls flown between 1974 and draw a 1:35000 frame 110 km across. A film frame states its height twice, once as `flying_height` and once as scale times focal length, so the two are compared. Where dividing by that factor brings them back into agreement the -corrected height is used and the frame is marked `"corrected_unit_slip"`. On 28 -roll-heights the province's flight logbooks and the spacing between adjacent -frames settled the disagreement — dropped digits in the height, a height ten -times too large where the factor is 10 and not 10.76, or a right height beside a -wrong scale — and those frames are sized from the measured height and +corrected height is used and the frame is marked `"corrected_unit_slip"`. On 33 +roll-heights the province's flight logbooks, or where they do not settle it an +adjacent frame on the same roll, together with the spacing between adjacent +frames, settled the disagreement — dropped digits in the height, a height ten +times too large where the factor is 10 and not 10.76, a leading digit added, or +a right height beside a wrong scale — and those frames are sized from the measured height and marked `"corrected_roll_table"`. Where they disagree any other way nothing can say which is wrong, so the frame is sized from nominal scale and marked `"implausible"`. Your `flying_height` column is never overwritten. The bundled frames all agree with their own scale: