Events#
CSV Events#
- class CSVEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, timestamps_column: str | int, event_type_column: str | int | None, value_columns: list[str | int] | None = None, durations_column: str | int | None = None, time_unit: Literal['seconds', 'milliseconds', 'microseconds'] = 'seconds', metadata_key: str | None = None, read_kwargs: dict | None = None, verbose: bool = False)[source]#
Bases:
BaseEventsInterfaceData Interface for converting discrete events from a single CSV file.
This is a general-purpose CSV events reader: the caller points at one CSV file and assigns each column a role. Every row is one event occurrence at
timestamps_column(intime_unit, seconds by default – passtime_unitwhen the file records onsets in milliseconds or microseconds); the other roles are optional:event_type_column– the column, if any, whose value names the type of each event. Each distinct value becomes its own event type and, by default, its ownpynwb.event.EventsTable. Merging several types into one table with anevent_typediscriminator column is opt-in by pointing theirtable_metadata_keyat a shared key in the editable metadata.value_columns– columns carried along as per-event values (payload). Each becomes a value column named after its source header, carrying the raw cell values.durations_column– a column of per-event durations (intime_unit), making the events durative (written to the table’sdurationcolumn). A blank cell becomesNaN(a missing offset).
Columns without an assigned role are ignored.
Notes
CSV recordings carry no embedded recording-start timestamp, so
get_metadata()does NOT populateNWBFile/session_start_time. The user must supply it via editable metadata.Two source layouts are anticipated but not yet supported: a wide format that spreads one event type per timestamp column (this interface reads the long/tidy format, one timestamp column plus an event-type column), and an onset/offset duration style that names a stop-time column and derives each duration from it (use
durations_columnwith the duration precomputed instead).Initialize the CSVEventsInterface.
- Parameters:
file_path (FilePath) – The path to the CSV file holding the events.
timestamps_column (str or int) – The column holding the event timestamps (in
time_unit, seconds by default). A column name for a CSV with a header row, or a positional index (0-based) for a header-less CSV.event_type_column (str, int, or None) – The column, if any, that names the type of each event. Pass a column name or index when the file holds several event types told apart by that column: each distinct value becomes its own event type (and, by default, its own
EventsTable). Pass None when the file is a single event type, in which case it is written as one table named after the file stem.value_columns (list of (str or int), optional) – The columns, if any, carried along as per-event values. Each becomes a value column on the event table(s), named after its source header and carrying the raw cell values. Default None ignores every column except the timestamp, event-type, and duration columns.
durations_column (str, int, or None, optional) – The column, if any, holding per-event durations (in
time_unit, seconds by default). When set, the events are durative and each duration is written to the table’sdurationcolumn; a blank cell becomesNaN. Default None writes point (timestamp-only) events.time_unit ({“seconds”, “milliseconds”, “microseconds”}, optional) – The unit of the
timestamps_columnanddurations_columnvalues, default = “seconds”. Both are divided by the corresponding factor to convert them to seconds;value_columnsare left untouched (they are arbitrary payload, not time).metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default), the file stem is used, so several CSV events interfaces in one conversion get distinct keys without any manual naming.read_kwargs (dict, optional) – Additional keyword arguments forwarded to
pandas.read_csv, used to handle format quirks such assep,encoding,decimal, orskiprows. Any value given here overrides the interface’s own defaults (header,float_precision, andkeep_default_na=False– the latter keeps label tokens such as'None','NA', or'null'from collapsing into a single missing label). Default is None.verbose (bool, optional) – Whether to print status messages, default = False.
- keywords: tuple[str] = ('events', 'CSV')#
- display_name: str | None = 'CSVEvents'#
- info: str | None = 'Data Interface for converting discrete events from a single CSV file.'#
- associated_suffixes: tuple[str] = ('csv',)#
- get_event_type_source_ids() list[str][source]#
One type per distinct label, in first-appearance order, or the file stem when the file is one type.
A CSV has no header that lists its types, so this is a pass over the label column, cached with the rest of the read. An empty single-type file yields no type, so no phantom table is seeded.
- get_metadata() DeepDict[source]#
Get metadata for the CSVEventsInterface.
NWBFile/session_start_timeis intentionally left unset: CSV recordings carry no embedded recording-start timestamp, so it must be supplied by the user via editable metadata.- Returns:
The metadata dictionary for this interface.
- Return type:
Doric Events#
Interface for discrete events (digital IO) from Doric Neuroscience Studio .doric files.
- class DoricEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, detection_configuration: dict | None = None, metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
BaseEventsInterfaceConvert discrete events (digital IO) from Doric Neuroscience Studio
.doricfiles to NWB.A
.doricfile records digital IO lines (e.g. a camera-exposure TTL, a behavior trigger) as sampled0/1traces. Each line is a signal, and the events derived from it are set bydetection_configuration: one entry per signal holding a list of detection specs, since a signal can yield more than one event type. Each event type is written as its ownpynwb.event.EventsTableintonwbfile.events. By default every line is read as ahigh_period(each rising edge is an event onset, its duration the span to the next falling edge). A line that never toggles still yields its event type, written as a zero-row table, since the type existed in the recording and nothing fired.session_start_timeis read from the file’sCreatedattribute when present.Both
.doricHDF5 generations are read: the modern layout (root groupDataAcquisition, digital lines inDigitalIOgroups) and the legacy “EPConsole” layout (root groupTraces, digital lines theDI--O-*streams under each console). The DoricStudio CSV export is handled byDoricCSVEventsInterface.Initialize the DoricEventsInterface.
- Parameters:
file_path (FilePath) – Path to the
.doricHDF5 file.detection_configuration (dict, optional) – Which digital lines to read and how, keyed by the line’s
signal_source_id(itsDigitalIOdataset key, e.g.{"Camera1": [{"signal_conditioning": {"binarize": "midpoint"}, "detection": "high_period"}]}). Each value is a list of detection specs, one per event type derived from that line, since a line can yield more than one. A spec’sdetectionis one of"rising"/"falling"(a point event at each edge) or"high_period"/"low_period"(a durative event, onset at one edge and duration to the next opposite edge), and it is required.signal_conditioningis required too and says how the signal becomes a line: a.doricline is already0/1, so it takes{"binarize": "midpoint"}, whose cut falls strictly between the two levels whatever they are. An optionalevent_namereplaces the derived identifier and pins it against later edits. If None (default), every digital line in the file is read as ahigh_period, lossless for an active-high line; use"low_period"for an active-low one. When given, only the named lines are read.metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default),"doric_events"is used.verbose (bool, optional) – Whether to print status messages, default = False.
- keywords: tuple[str] = ('events', 'Doric')#
- display_name: str | None = 'DoricEvents'#
- info: str | None = 'Data Interface for converting discrete events (digital IO) from Doric Neuroscience Studio files.'#
- associated_suffixes: tuple[str] = ('doric',)#
Doric CSV Events#
Interface for discrete events (digital IO) from Doric Neuroscience Studio CSV exports.
- class DoricCSVEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, detection_configuration: dict | None = None, metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
BaseEventsInterfaceConvert discrete events from a Doric Neuroscience Studio CSV export to NWB.
A DoricStudio CSV export stores its channels under a grouped two-row header: the first row names each channel’s group (e.g.
Analog In. | Ch.1,Digital I/O | Ch.1) and the second row names each column (e.g.Time(s),DI/O-1). The digital IO lines (the columns whose group isDigital I/O) are sampled0/1traces on the sharedTime(s)clock. Each such column is a signal, and the events derived from it are set bydetection_configuration: one entry per signal holding a list of detection specs, since a signal can yield more than one event type. Each event type is written as its ownpynwb.event.EventsTableintonwbfile.events. By default every line is read as ahigh_period(each rising edge is an event onset, its duration the span to the next falling edge). A line that never toggles still yields its event type, written as a zero-row table, since the type existed in the recording and nothing fired.This reads the DoricStudio CSV export only; the
.doricHDF5 layouts are handled byDoricEventsInterface. The CSV export carries no session start time, so the user must supplyNWBFile/session_start_timevia editable metadata.Initialize the DoricCSVEventsInterface.
- Parameters:
file_path (FilePath) – Path to the DoricStudio CSV export.
detection_configuration (dict, optional) – Which digital lines to read and how, keyed by the line’s
signal_source_id(its column name, e.g.{"DI/O-1": [{"signal_conditioning": {"binarize": "midpoint"}, "detection": "high_period"}]}). Each value is a list of detection specs, one per event type derived from that line, since a line can yield more than one. A spec’sdetectionis one of"rising"/"falling"(a point event at each edge) or"high_period"/"low_period"(a durative event, onset at one edge and duration to the next opposite edge), and it is required.signal_conditioningis required too and says how the signal becomes a line: a DoricStudio digital column is already0/1, so it takes{"binarize": "midpoint"}, whose cut falls strictly between the two levels whatever they are. An optionalevent_namereplaces the derived identifier and pins it against later edits. If None (default), every digital line in the file is read as ahigh_period, lossless for an active-high line; use"low_period"for an active-low one. When given, only the named lines are read.metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default),"doric_events"is used.verbose (bool, optional) – Whether to print status messages, default = False.
- keywords: tuple[str] = ('events', 'Doric')#
- display_name: str | None = 'DoricCSVEvents'#
- info: str | None = 'Data Interface for converting discrete events (digital IO) from Doric Neuroscience Studio CSV exports.'#
- associated_suffixes: tuple[str] = ('csv',)#
- get_event_type_source_ids() list[str][source]#
The event types the configuration resolves to, read from nothing.
- get_metadata() DeepDict[source]#
Get metadata for the DoricCSVEventsInterface.
The DoricStudio CSV export carries no session start time, so
NWBFile/session_start_timeis not populated here; the user must supply it via editable metadata.- Returns:
The metadata dictionary for this interface.
- Return type:
MedPC Events#
- class MedPCArrayEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, session_header: dict, event_configuration: dict, time_unit: Literal['decaseconds', 'seconds', 'deciseconds', 'centiseconds', 'milliseconds'] | float = 'seconds', relative_mode: bool = False, metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
_MedPCEventsInterfaceData Interface for the discrete events of a MedPC file that holds one array per event type.
Each lettered array is one event type, holding that type’s onset times in seconds, so the array’s name is the event type’s identity. Which arrays those are is decided by the MSN program that wrote the file and stated through
event_configuration. An entry naming adurationis durative and takes its per-event durations from a second array; one naming apayloadcarries a per-event value from each array it names as a column of the event type’s table.Use
MedPCPackedEventsInterfaceinstead for a file whose events are all in one array asTIME.EVENTCODEvalues. This interface replacesMedPCInterface, which reads the same layout and writes it asndx-eventsobjects andIntervalSeriesinto the behavior processing module.Initialize MedPCArrayEventsInterface.
- Parameters:
file_path (FilePath) – Path to the MedPC file.
session_header (dict) – The header fields identifying which of the file’s sessions to read, keyed by the header line’s name (‘Start Date’, ‘End Date’, ‘Subject’, ‘Experiment’, ‘Group’, ‘Box’, ‘Start Time’, ‘End Time’, ‘MSN’) and valued as that session carries them. Whichever fields tell the sessions apart is a property of how the file was collected, so pass as many as it takes to name exactly one; the first session matching all of them is read. ex. {“Start Date”: “04/10/19”, “Start Time”: “12:36:13”} where one animal ran on several days and the date, or the date and the time where it ran twice in a day, is what separates them ex. {“Start Date”: “10/06/22”, “Subject”: “cohort10-M3.3”} where a cohort’s animals were pooled into one file and the subject is needed as well
event_configuration (dict) – The event types of a per-array file, keyed by the MedPC variable holding their onset times (ex. ‘A’). That variable is the event type’s identifier, the handle
get_event_timestakes and the key of its metadata entry. Each value states how that array is read, or is None where the array is a plain list of onsets: an optional ‘duration’ naming the MedPC variable that holds the per-event durations, which makes the type durative rather than a point event, and an optional ‘payload’ listing MedPC variables holding one value per event, each written as a column of the same table.Nothing here names anything. A MedPC variable is a slot number rather than a label, so an event type arrives called ‘A’ and a payload column called ‘K’; set
event_nameandcolumn_namein the editable metadata, which is also where a payload column’s raw codes are relabelled and explained throughcolumn_categories. ex. {“A”: None, “G”: {“duration”: “E”}, “S”: {“payload”: [“K”]}}time_unit (str or float, optional) – What one stored value is worth, default = “seconds”. Either a named unit, “decaseconds”, “seconds”, “deciseconds”, “centiseconds” or “milliseconds”, or a number of seconds. MedPC stores whatever the MSN program divided by before writing and records neither that choice nor the box’s timing resolution, so it is stated rather than detected. A program that stored the raw BTIME counter takes the resolution as a number: 0.002 on a 2 ms system, 0.005 on a 5 ms one.
relative_mode (bool, optional) – Whether the program wrote each value as the time since the previous event rather than the time since the session began, default = False. This is Med Associates’ own term, from the shipped example procedures that use it: “Relative Mode means that each event is listed by the amount of time that has passed since the last event has happened”. The values are accumulated when True, because a time written into NWB is the time since the session started.
metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default), “medpc” is used, so several MedPC interfaces in one conversion need a key each.verbose (bool, optional) – Whether to print verbose output, by default False.
- display_name: str | None = 'MedPCArrayEvents'#
- info: str | None = 'Interface for the discrete events of MedPC files holding one array per event type.'#
- class MedPCPackedEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, session_header: dict, events_variable: str, time_unit: Literal['decaseconds', 'seconds', 'deciseconds', 'centiseconds', 'milliseconds'] | float = 'seconds', relative_mode: bool = False, metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
_MedPCEventsInterfaceData Interface for the discrete events of a MedPC file that packs the event type into the time value.
One array holds every event of the session as a single
TIME.EVENTCODEvalue, written by a line likeSet A(Y) = BTIME-U + code/1000: the code rides in the fractional digits and the time is the integer part. How many digits the code occupies is fixed by the program’sDISKFORMAT, which is what prints them, so the file states its own code width and nothing has to be declared beyond the unit the integer part counts in.Every code found becomes an event type identified by its digits, so the file names its own event types.
Use
MedPCArrayEventsInterfaceinstead for a file that holds one array per event type. A file that keeps its codes in a companion array of the same length, beside the times rather than inside them, is a layout NeuroConv does not read yet: please open an issue at catalystneuro/neuroconv#issues with the program and a sample file.Initialize MedPCPackedEventsInterface.
- Parameters:
file_path (FilePath) – Path to the MedPC file.
session_header (dict) – The header fields identifying which of the file’s sessions to read, keyed by the header line’s name (‘Start Date’, ‘End Date’, ‘Subject’, ‘Experiment’, ‘Group’, ‘Box’, ‘Start Time’, ‘End Time’, ‘MSN’) and valued as that session carries them. Whichever fields tell the sessions apart is a property of how the file was collected, so pass as many as it takes to name exactly one; the first session matching all of them is read. ex. {“Start Date”: “04/10/19”, “Start Time”: “12:36:13”} where one animal ran on several days and the date, or the date and the time where it ran twice in a day, is what separates them ex. {“Start Date”: “09/25/15”, “Subject”: “ML03”} where a cohort’s animals were pooled into one file
events_variable (str) – The MedPC variable holding every event of the session (ex. ‘A’). A file has up to 26 arrays and only one of them is this; the rest hold counters, schedules, flags and session parameters, and nothing in the file’s syntax tells them apart. The MSN program picks the letter, so it is stated rather than defaulted: ‘A’ is what the readers of this convention happen to use, not something the format fixes.
time_unit (str or float, optional) – What one stored value is worth, default = “seconds”. Either a named unit, “decaseconds”, “seconds”, “deciseconds”, “centiseconds” or “milliseconds”, or a number of seconds. MedPC stores whatever the MSN program divided by before writing and records neither that choice nor the box’s timing resolution, so it is stated rather than detected. A program that stored the raw BTIME counter takes the resolution as a number: 0.002 on a 2 ms system, 0.005 on a 5 ms one.
relative_mode (bool, optional) – Whether the program wrote each value as the time since the previous event rather than the time since the session began, default = False. This is Med Associates’ own term, from the shipped example procedures that use it: “Relative Mode means that each event is listed by the amount of time that has passed since the last event has happened”. The values are accumulated when True, because a time written into NWB is the time since the session started.
metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default), “medpc” is used, so several MedPC interfaces in one conversion need a key each.verbose (bool, optional) – Whether to print verbose output, by default False.
- display_name: str | None = 'MedPCPackedEvents'#
- info: str | None = 'Interface for the discrete events of MedPC files packing the event type into the time value.'#
NPM Events#
- class NPMEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, time_unit: Literal['seconds', 'milliseconds', 'microseconds'] = 'seconds', metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
CSVEventsInterfaceData Interface for converting discrete events from Neurophotometrics (NPM) files.
NPM stores discrete events in a raw, headerless two-column stimuli CSV: the first column holds the event onset time (in the recording’s raw time base) and the second column holds the event type label (e.g.
whitenoise,pinknoise, a booleanTrue/Falseannotation, or a numeric code). This is exactly a headerless CSV with a timestamp column and an event-type column, so this interface is a thinCSVEventsInterfacethat fixes those two columns. Each distinct label becomes its ownpynwb.event.EventsTable(onset timestamps only) innwbfile.events.Notes
Note that we assume the second column is the event type. Each distinct value becomes its own event type/table rather than a per-event value/payload column.
The raw onset times are scaled to seconds by
time_unit(seeCSVEventsInterface) but are otherwise written as-is: they remain in the recording’s raw time base. NPM recordings carry no embedded recording-start timestamp, soget_metadata()does NOT populateNWBFile/session_start_time; the user must supply it via editable metadata.This interface targets the standalone Bonsai stimuli CSV only. NPM can also embed discrete events directly in the photometry/signal CSV, alongside the fluorescence columns: older firmware writes each digital I/O line (e.g.
Stimulation,Output0/Output1,Input0/Input1) as its own 0/1-per-frame column, while newer firmware bit-packs those same lines into theFlags/LedStatecolumn. This interface’s fixed headerless two-column layout does not fit that photometry CSV; useCSVEventsInterfacedirectly to select the relevant columns from it.Initialize the NPMEventsInterface.
- Parameters:
file_path (FilePath) – The path to the raw NPM event/stimuli CSV file: a headerless two-column CSV whose first column is the event onset time and whose second column is the event type label.
time_unit ({“seconds”, “milliseconds”, “microseconds”}, optional) – The unit of the raw onset-time column, default = “seconds”. Onset times are divided by the corresponding factor to convert them to seconds.
metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default), the file stem is used (inherited fromCSVEventsInterface).verbose (bool, optional) – Whether to print status messages, default = False.
- keywords: tuple[str] = ('events', 'Neurophotometrics')#
- display_name: str | None = 'NPMEvents'#
- info: str | None = 'Data Interface for converting discrete events from Neurophotometrics files.'#
- associated_suffixes: tuple[str] = ('csv',)#
pyPhotometry Events#
- class PyPhotometryEventsInterface(file_path: Annotated[pathlib._local.Path, PathType(path_type='file')], *, detection_configuration: dict | None = None, metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
BaseEventsInterfaceConvert discrete events (digital IO) from pyPhotometry
.ppdrecordings to NWB.The lines are the board’s digital inputs, named
digital_1anddigital_2the way pyPhotometry’s own reader names them. They are sampled rather than logged, so an event’s time is only as precise as the sampling rate, 7.7 ms at 130 Hz, and the two lines are not sampled at the same instant but half a sample period apart. A recording carries both lines except in3EX_2EM_pulsed, where the board uses the second one to drive its third LED.Which events come off a line is set by
detection_configuration: one entry per line holding a list of detection specs, since a line can yield more than one event type. Each event type is written as its ownpynwb.event.EventsTableintonwbfile.events. By default every line is read as ahigh_period(each rising edge is an event onset, its duration the span to the next falling edge). A line that never toggles still yields its event type, written as a zero-row table, since the type existed in the recording and nothing fired.session_start_timeandsubject_idare read from the header’sdate_timeandsubject_ID.The fluorescence in the same recording is a separate interface,
PyPhotometryFiberPhotometryInterface; put both in a converter of your own to write a recording whole.Initialize the PyPhotometryEventsInterface.
- Parameters:
file_path (FilePath) – Path to the
.ppdfile.detection_configuration (dict, optional) – Which digital lines to read and how, keyed by the line’s
signal_source_id("digital_1"or"digital_2", e.g.{"digital_1": [{"signal_conditioning": {"binarize": "midpoint"}, "detection": "high_period"}]}). Each value is a list of detection specs, one per event type derived from that line, since a line can yield more than one. A spec’sdetectionis one of"rising"/"falling"(a point event at each edge) or"high_period"/"low_period"(a durative event, onset at one edge and duration to the next opposite edge), and it is required.signal_conditioningis required too and says how the signal becomes a line: the reader has already pulled the bit out of the word, so a.ppdline arrives0/1and takes{"binarize": "midpoint"}, whose cut falls strictly between the two levels whatever they are. An optionalevent_namereplaces the derived identifier and pins it against later edits. If None (default), every digital line the file carries is read as ahigh_period, lossless for an active-high line; use"low_period"for an active-low one. When given, only the named lines are read.metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default),"pyphotometry_events"is used.verbose (bool, optional) – Whether to print status messages, default = False.
- keywords: tuple[str] = ('events', 'pyPhotometry')#
- display_name: str | None = 'pyPhotometry Events'#
- info: str | None = 'Data Interface for converting discrete events (digital IO) from pyPhotometry recordings.'#
- associated_suffixes: tuple[str] = ('.ppd',)#
- get_event_type_source_ids() list[str][source]#
The event types the configuration resolves to, read from nothing.
- get_metadata() DeepDict[source]#
Get metadata for the PyPhotometryEventsInterface.
NWBFile/session_start_timeis populated from the header’sdate_timeandSubject/subject_idfrom itssubject_ID, both of which every header generation carries.- Returns:
The metadata dictionary for this interface.
- Return type:
TDT Events#
- class TDTEventsInterface(folder_path: Annotated[pathlib._local.Path, PathType(path_type='dir')], *, exclude_events: list[str] | None = None, metadata_key: str | None = None, verbose: bool = False)[source]#
Bases:
TDTLoadMixin,BaseEventsInterfaceData Interface for converting discrete events (epocs) from a TDT output folder.
The TDT tank stores discrete events as epocs (e.g. camera TTL pulses, port entries, nose pokes). This interface reads those epocs via
tdt.read_blockand writes each selected epoc as onepynwb.event.EventsTableinsidenwbfile.events.Most epoc stores are onset-type epocs whose
dataarray is a meaningless incrementing counter, so only the onsets are written (a timestamp-only table). A store whosedatacarries real strobe codes (e.g. thePAB_store’s[16, 2064, 0]cycle) additionally gets a categoricalstrobecolumn, with the codes as per-event labels. Theoffsetarray of an onset-type epoc is derived from the onsets (offset[i] == onset[i + 1], last valueinf) and is not written. Epocs that carry real offset (STROFF) durations are written as durative events, with each event’s duration (offsetminusonset) in the table’sdurationcolumn.Initialize the TDTEventsInterface.
- Parameters:
folder_path (DirectoryPath) – The path to the folder containing the TDT data.
exclude_events (list[str], optional) – The names of the TDT epocs to skip. If None (default), every epoc in the tank is stored.
metadata_key (str, optional) – The key under
metadata["Events"]that namespaces this interface’s events metadata. If None (default),"tdt_events"is used.verbose (bool, optional) – Whether to print status messages, default = False.
- keywords: tuple[str] = ('events', 'TDT')#
- display_name: str | None = 'TDTEvents'#
- info: str | None = 'Data Interface for converting discrete events (epocs) from TDT files.'#
- associated_suffixes: tuple[str] = ('Tbk', 'Tdx', 'tev', 'tin', 'tsq')#