Skip to main content

pub.layers.acquisition

The acquisition namespace models the events that produce data and the people they capture: a session is a synchronized recording event with one or more streams, and a participant is a pseudonymous person or animal recorded in it. Together they give Layers a type level (judgment.experimentDef, a protocol) and a token level (a session, the event that ran it), and they carry the acquisition metadata that BIDS keeps in participants.tsv, sessions.tsv, and the electrophysiology sidecars, and that NWB keeps on Subject and the session object.

Two design commitments run through the namespace. First, the session clock is the shared time base: every stream offset and every anchor into a session is measured from session.clock, and pub.layers.defs#mediaScope.sessionRef, media.syncInfo.sessionRef, and a stream's uuid all resolve against it. Second, de-identification is by field absence, not by scrubbing. A participant record must not carry a name, an email, a DID, a handle, an institutional identifier, a worker-platform identifier, or any string derived from a birth date, and its consent block declares, in typed terms, whether the underlying bytes may live in a public PDS at all.

Types

participant

NSID: pub.layers.acquisition.participant Type: Record (key: any)

A pseudonymous participant. De-identified by field absence. Required: participantId, consent, createdAt.

FieldTypeDescription
participantIdstringPseudonymous identifier, stable within the authoring repo and meaningless outside it (sub-01, P17). BIDS participant_id. Must not be a name, email, DID, handle, institutional or worker-platform identifier, or any string derived from a birth date.
speciesUri / speciesat-uri / stringSpecies. Ground the NCBI Taxonomy binomial through knowledgeRefs (source ncbi-taxonomy) rather than a Layers-local vocabulary. Known values include homo-sapiens, macaca-mulatta, mus-musculus, custom. BIDS species; NWB Subject.species.
strainRefrefStrain for non-human subjects, grounded via rrid. BIDS strain_rrid; NWB Subject.strain. Ref: pub.layers.defs#knowledgeRef.
genotypestringGenotype for non-human subjects. NWB Subject.genotype.
ageMonthsintegerAge at first participation in whole months (no floats). BIDS caps age at 89 years for privacy; values above 1068 should be clamped with ageIsCapped. May be omitted as a quasi-identifier in small populations.
ageIsCappedbooleanTrue when ageMonths is clamped and the true value is greater.
ageReferenceUri / ageReferenceat-uri / stringWhat ageMonths is measured from. NWB Subject.age__reference. Known values: birth, gestational, post-natal-day, unknown.
sexUri / sexat-uri / stringBiological sex as recorded by the study. BIDS sex; NWB Subject.sex. Deliberately distinct from gender. Known values: female, male, intersex, other, not-reported, undisclosed.
genderUri / genderat-uri / stringSelf-reported gender. No BIDS or NWB counterpart; added because sociolinguistic and psycholinguistic work routinely collects it. Known values: woman, man, non-binary, other, not-reported, undisclosed.
handednessUri / handednessat-uri / stringHandedness. BIDS handedness, a near-universal inclusion criterion in neurolinguistic work. Known values: right, left, ambidextrous, not-reported, undisclosed.
handednessScoreintegerLaterality quotient scaled to per mille (an Edinburgh Handedness Inventory score of -100.0 to +100.0 becomes -1000 to 1000).
hearingStatusUri / hearingStatusat-uri / stringHearing status, load-bearing for sign language and speech-perception research. Known values: hearing, deaf, hard-of-hearing, deafblind, not-reported, undisclosed.
visionStatusUri / visionStatusat-uri / stringVision status, relevant to eye-tracking and reading studies. Known values: normal, corrected-to-normal, impaired, blind, not-reported, undisclosed.
weightGramsintegerBody weight in grams. NWB Subject.weight. Primarily an animal-work field.
languageProfilesarrayPer-language background, each a languageCompetence. A bare BCP-47 array cannot distinguish an L1 Finnish speaker with late L2 English from a simultaneous bilingual. Array of ref: defs#languageCompetence.
languagesarrayCanonical BCP-47 tags this participant produced or comprehended data in, including sign language tags. A flat facet for filtering. No array-level cap.
languageRefsarrayStructured language references complementing languages. Array of ref: pub.layers.defs#languageRef. No array-level cap.
consentrefRequired. The basis on which this participant's data may be published and redistributed. Ref: defs#consent.
accessrefConditions under which this participant's data may be obtained, when narrower than the collection's. Ref: defs#accessCondition.
knowledgeRefsarrayExternal grounding: ncbi-taxonomy for species, rrid for strain. Must not carry an ORCID or any identifier resolving to a named human. Array of ref: pub.layers.defs#knowledgeRef.
metadatarefProvenance for this participant record. Ref: pub.layers.defs#annotationMetadata.
featuresrefStudy-specific variables (education, clinical group, screening scores). Must not reintroduce a direct identifier the typed fields deliberately omit. Ref: pub.layers.defs#featureMap.
createdAtdatetimeWhen this participant record was created.

session

NSID: pub.layers.acquisition.session Type: Record (key: any)

A synchronized recording event: the token that instantiates an experimentDef protocol. Its clock is the shared time base every stream and anchor resolves against. Required: sessionId, streams, createdAt.

FieldTypeDescription
sessionIdstringStable session identifier within the authoring repo (ses-01, buckeye-s01-b03). BIDS session_id; NWB session_id.
labelstringHuman-readable label. NWB session_description.
participantRefsarrayAT-URIs of the participant records recorded. An array because dialogue, interview, and elicitation sessions have several, and each stream may belong to a different one.
experimentRefat-uriAT-URI of the judgment.experimentDef this session instantiates (a type-level protocol; the session is the token event that ran it).
taskUri / taskat-uri / stringWhat the participant was doing. Ground to the Cognitive Atlas via knowledgeRefs. BIDS TaskName is required in every EEG, MEG, iEEG, and NIRS sidecar. Known values include rest, naturalistic-listening, reading, self-paced-reading, acceptability-judgment, picture-naming, lexical-decision, visual-world, elicitation, free-conversation, interview, narrative, map-task, custom.
startedAtdatetimeAcquisition start. BIDS acq_time; NWB session_start_time. May be coarsened for de-identification; say so in features when it is.
durationNanosintegerSession duration in nanoseconds.
clockUri / clockat-uri / stringWhat t=0 means. Every stream offset and anchor is measured from it, so it cannot be left implicit. Known values: session-start, first-stream-start, master-stream-start, first-trigger, wall-clock, custom.
masterStreamrefThe stream whose clock defines t=0, when clock is master-stream-start. Ref: pub.layers.defs#objectRef.
streamsarrayThe synchronized media streams making up this session. Inline rather than an edge record because a session is authored by one party who controls all its streams. Array of ref: defs#stream.
runsarraySub-divisions of the session. BIDS run-<index>. A session routinely spans several runs at different sampling rates, which is why a session cannot carry one sampling rate. Array of ref: defs#run.
devicesarrayInstruments used, structured rather than a free-text device string. Array of ref: pub.layers.defs#deviceInfo.
presentationrefHow stimuli were displayed, including screen geometry (which gaze-on-screen eye-tracking requires). Ref: pub.layers.judgment.defs#presentationSpec.
environmentUri / environmentat-uri / stringRecording environment. Determines what a consumer may assume about noise floor, lighting, and interference. Known values: sound-booth, laboratory, field, home, classroom, clinic, mri-scanner, meg-shielded-room, operating-room, online, custom.
siteRefrefInstitution or site, grounded via ror. Not an at-uri: an institution is an external entity. NWB institution/lab. Ref: pub.layers.defs#knowledgeRef.
consentrefSession-level consent when it differs from the participants' standing consent. Ref: defs#consent.
accessrefConditions under which this session's data may be obtained. Ref: defs#accessCondition.
ethicsApprovalsarrayHuman-subjects or animal-care approvals, each the shared pub.layers.defs#ethicsApproval. BIDS EthicsApprovals. Array of ref.
licensingrefGoverns the artifact; consent governs the person; access governs the gate. Ref: pub.layers.defs#licensing.
reproducibilityrefHow the acquisition was driven computationally, plus funding. Ref: pub.layers.defs#reproducibilityInfo.
eprintRefsarrayAT-URIs of eprint records describing this session.
knowledgeRefsarrayKnowledge graph references (task via cognitive-atlas, site via ror). Array of ref: pub.layers.defs#knowledgeRef.
metadatarefProvenance for this session record. Ref: pub.layers.defs#annotationMetadata.
featuresrefProtocol deviations, timestamp coarsening, surgery, pharmacology, stimulus notes. NWB protocol/surgery/pharmacology/stimulus_notes land here. Ref: pub.layers.defs#featureMap.
languagesarrayCanonical BCP-47 tags this session's data covers, including sign language tags. No array-level cap.
languageRefsarrayStructured language references complementing languages. Array of ref: pub.layers.defs#languageRef. No array-level cap.
createdAtdatetimeWhen this session record was created.

stream

NSID: pub.layers.acquisition.defs#stream Type: Object

One synchronized media stream within a session. Required: uuid. The uuid requirement is load-bearing across partitions: mediaScope.stream and media.syncInfo both point at a stream by its uuid, and a session-local label string is a name join that cannot be validated.

FieldTypeDescription
uuidrefStable identifier for this stream within this session. The addressable target of mediaScope.stream. Ref: pub.layers.defs#uuid.
streamIdstringHuman-readable session-local label (cam-left, lapel-a, eeg, eyetrack-right). Display cache; uuid is the join key.
mediaRefat-uriAT-URI of the media.media carrying this stream.
mediaCidstringCID of the media revision this session's offsets were measured against.
participantRefat-uriAT-URI of the participant this stream records, when streams are per-participant.
streamRoleUri / streamRoleat-uri / stringWhat this stream is for, distinct from the medium's kind (two audio streams can be close-talk and room, the same kind and not interchangeable). Known values include primary, reference, close-talk, far-field, camera, face, hands, neural, physiological, gaze, motion, articulatory, stimulus, trigger, custom.
offsetNanosintegerSigned offset from the session clock's zero to this stream's first sample. Negative when the stream began before t=0 (BIDS StartTime permits it). Duplicates media.sync.offsetNanos; the session is authoritative.
driftPartsPerBillionintegerSigned measured clock drift against the session master. Zero is a claim, not a safe default.
syncMethodUri / syncMethodat-uri / stringHow this stream was aligned, the same node set as media.defs#syncInfo.clockSourceUri. Known values: hardware-trigger, shared-clock, ltc-timecode, clapperboard, audio-cross-correlation, ptp, ntp, manual, unsynchronized, custom.
syncUncertaintyNanosintegerEstimated alignment uncertainty. A hardware trigger and a clapperboard differ by three orders of magnitude.
featuresrefStream-specific properties. Ref: pub.layers.defs#featureMap.

run

NSID: pub.layers.acquisition.defs#run Type: Object

An uninterrupted sub-division of a session with the same acquisition parameters and task. BIDS run-<index>. Required: uuid (the target of motionInfo.trackingSystem).

FieldTypeDescription
uuidrefStable identifier for this run within this session. Ref: pub.layers.defs#uuid.
runIndexinteger0-based run number within the session.
labelstringHuman-readable run name.
taskUri / taskat-uri / stringThis run's task, when it differs from the session's.
streamsarrayStreams active during this run, as objectRefs into the session's streams.
startNanosintegerSigned start on the session clock.
durationNanosintegerRun duration in nanoseconds.
eventLayerRefat-uriAT-URI of a pub.layers.annotation.annotationLayer of kind tier carrying this run's trigger and event codes. Where BIDS events.tsv lands.
judgmentSetRefsarrayAT-URIs of pub.layers.judgment.judgmentSet records collected during this run.
featuresrefRun-specific properties. Ref: pub.layers.defs#featureMap.

NSID: pub.layers.acquisition.defs#consent Type: Object

The basis on which a participant's data may be published and redistributed. Required: status, scope, identifiability. The three typed axes decide whether the underlying bytes may live in Layers at all: identifiability of identifiable, or scope of not-redistributable/controlled-access, is a hard signal to reference the data by media.externalUri behind a gate rather than carry it as a Layers blob.

FieldTypeDescription
statusUri / statusat-uri / stringCurrent consent status. A consumer must not redistribute data whose status is withdrawn. Known values: granted, granted-with-restrictions, withdrawn, expired, not-reported.
scopeUri / scopeat-uri / stringWhat redistribution the participant agreed to. Known values: public, research-only, restricted, controlled-access, not-redistributable, not-reported.
identifiabilityUri / identifiabilityat-uri / stringHow identifiable the retained data is. Known values: anonymous, pseudonymous, de-identified, identifiable, not-reported.
ethicsApprovalsarrayApprovals this consent falls under, reusing pub.layers.defs#ethicsApproval. Array of ref.
grantedAtdatetimeWhen consent was granted. May be coarsened.
expiresAtdatetimeWhen consent expires, if it does.
withdrawnAtdatetimeWhen consent was withdrawn. Its presence obliges the publisher to delete or tombstone the associated records and every indexer to suppress them. It cannot guarantee erasure: Layers is a read-only indexer with no authority over third-party consumers. Do not write into a Layers record anything whose later erasure you would need to guarantee.
withdrawalContactstringWhere a withdrawal request should be sent: a URL or institutional address, never a personal one.
notesstringFree-text consent detail the typed fields do not capture.

languageCompetence

NSID: pub.layers.acquisition.defs#languageCompetence Type: Object

Per-language background for a participant. Composes pub.layers.defs#languageRef (whose role carries l1, l2, heritage, signed-l1, signed-l2) plus a proficiency axis. A hearing L2 signer and a deaf L1 signer are different participants for essentially every research question. Required: language.

FieldTypeDescription
languagerefThe language, including sign languages (ase, bfi, gsg). Ref: pub.layers.defs#languageRef.
proficiencyUri / proficiencyat-uri / stringProficiency. Known values: native, near-native, advanced, intermediate, beginner, receptive-only, not-reported.
ageOfAcquisitionMonthsintegerAge of first exposure in whole months.
featuresrefCompetence detail not yet promoted to a typed field. Ref: pub.layers.defs#featureMap.

XRPC Queries

getParticipant

NSID: pub.layers.acquisition.getParticipant

Retrieve a single participant record by AT-URI.

ParameterTypeDescription
uriat-uri (required)The AT-URI of the participant record.

Output: { uri, cid, value: participant }.

listParticipants

NSID: pub.layers.acquisition.listParticipants

List participant records in a repository with pagination.

ParameterTypeDescription
repoat-identifier (required)The DID or handle of the repository.
speciesstringFilter by species slug.
languagestringFilter by a canonical BCP-47 tag in languages.
limit, cursorinteger, stringPagination.

Output: { records: { uri, cid, value: participant }[], cursor? }.

getSession

NSID: pub.layers.acquisition.getSession

Retrieve a single session record by AT-URI.

ParameterTypeDescription
uriat-uri (required)The AT-URI of the session record.

Output: { uri, cid, value: session }.

listSessions

NSID: pub.layers.acquisition.listSessions

List session records in a repository with pagination.

ParameterTypeDescription
repoat-identifier (required)The DID or handle of the repository.
taskstringFilter by task slug.
participantstringFilter by an AT-URI in participantRefs.
limit, cursorinteger, stringPagination.

Output: { records: { uri, cid, value: session }[], cursor? }.