Skip to content

REMETA gene aborts on a condition lead that one cohort observed but could not fit #12

Description

@sklasfeld-p4
  • Component: remeta gene, conditional mode (--condition-list / --condition-htp)
  • Version: v0.11.2-9462889 (source checkout: /home/sklasfeld/remeta, commit 9462889, matches the container banner)
    Severity: fatal — SIGABRT, exit 134, no partial output. One lead kills the whole run, not just
    the affected chromosome, and it is uncatchable at the task level.

Two ways REMETA GENE handles a missing ancestry:

  1. If an ancestry has no row for the lead/conditional variant in the respective HTP, REMETA handles it gracefully. This is the case where the variant was never captured in that ancestry's data, or did not pass its QC. REMETA conditions using the ancestries that DO have the variant and ignores the one that does not. I confirmed this holds even when four of five ancestries are missing the variant.
  2. If an ancestry has a row but no usable effect estimate, REMETA aborts. The variant was observed, but regenie could not fit it, so the beta is NA. REMETA exits 134 partway through with could not find beta for: `. There is no way to catch this and no partial output; one such lead terminates the entire run, not just that chromosome.
that cohort's HTP, for the lead remeta gene what()
no row at all (never captured, or failed QC) exit 0 — conditions on the cohorts that have it —
row present, no usable effect estimate (Effect=NA, no *_BETA= key) exit 134 could not find beta for: <variant>
row present, REGENIE_BETA=NA beside a good Effect exit 134 stod

The last two abort by different routes, and only one is diagnosable. get_beta throws
runtime_error when no beta exists in any encoding, but a present key goes to stod, which
throws std::invalid_argument — a sibling of runtime_error under logic_error. So
has_beta's catch (const runtime_error&) (htpv4_reader.cpp:352-359) structurally cannot catch
it, and the message that reaches the user carries no variant, cohort or file.

Expected behavior

Treat a lead whose record carries no usable effect estimate in cohort i the same as a lead absent from cohort i: cohort i contributes nothing to the conditioning, the run continues on the cohorts that can supply an estimate. Failing that, abort with the variant, cohort and file named in every path, so the offending row can be found without a source dive.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions