Skip to content

nigeLab_libs

Max-Home-Tower edited this page Jul 1, 2020 · 1 revision

+libs

"Helper" classes for nigeLab

alignInfo behaviorInfo boxVideoParser ChannelUI DashBoard
DiskData FeaturesUI graphicsUpdater HighDimsUI nigelBar
nigelButton nigelPanel nigelProgress NotesUI ProgressCat
ProgressCircle ratskull_plot remoteMonitor SpikeImage splitMultiAnimalsUI
VideosFieldType vidInfo VidStreamsType

Class Summaries

Keeps track of synchronization information between video record and digital (neural) streams record. This class is used by the nigeLab.Block/alignVideoManual method.

Similar to alignInfo, this class is used to relate video information to neural information. The main concept here is that each "trial," "event," "epoch," or "phase" (all somewhat synonymous here) is a discrete observation in a data table. Columns are variables that represent metadata associated with each row. behaviorInfo parses the "type" of metadata (which can either be timing relating to a single video frame), or a qualitative descriptor of that trial/event/epoch/phase (such as "successful"). This is used primarily in video interfaces that allow the appending of metadata to video frames, such as the nigeLab.Block/scoreVideo method.

(WIP as of 2020-01-02)
This class is in charge of extracting trial/event/epoch/phase in an automated fashion for behavior videotaped in a way that contains an LED indicator of when the "trial" is running. There is a method to set a region of interest (ROI) for the pixels to set thresholds on the LED lighting up. Ultimately, this class should allow the automated export of a (much-reduced in size) subset of video frames as individual videos, which can then be handled much more easily by the other scoring interfaces (rather than the very-large high framerate videos from multiple GoPro angles, when 99% of the video is not of interest to the experiment).

This class is part of the "modular" interface design to nigeLab. It is simply a window with a dropdown box that gets the channel names from the current block or array of blocks. When a new channel is opened in the list, it emits a notification that the channel has been changed, which can be listened for by other classes that are used to handle analyses or curation of data that needs to be evaluated on a per-channel basis, such as the Spike Sorting UI.

Main graphical user interface (GUI) to visually interact with data linked via nigeLab. Hopefully convenient for those who dislike the Command Window.

Core library class for storing and accessing data that is saved to a disk file. Essentially, this acts a pointer that allows nigeLab to avoid loading too much data into RAM all at once.

User-interface that is accessed by the Spike Sorting UI to give a graphical representation of features that have been estimated using snippets in short epochs around detected spike peaks.

This class updates graphic labels that display metadata tagged on a per-trial basis for nigeLab.Block/scoreVideo. It works together with the behaviorInfo class to make sure the desired trial metadata is displayed correctly next to the video display.

Idea borrowed from DataHigh, except for visualizing high-dimensional spike features cluster space. Basically, we want to be able to "scroll" through all the wavelet features and find various orientations that allow us to understand if our spike clusters are well-separated in the given feature space. This class is invoked by the Spike Sorting UI to populate another modular window that shows how rotating a given cluster along a given axis (feature) will change the "visible radius" (approximately) of each cluster.

Helper class that can be used to create a formatted "title bar" on a given interface.

Helper class that can be used to create a formatted "button" on a given interface. Follows the color-convention scheme used in the nigelDash interface by default.

Helper class that can be used to create a formatted uipanel for a given interface. Follows the color-convention scheme used in the nigelDash interface by default.

Helper class to create a formatted "progress bar" (used by the nigelDash interface only at this point). The bar can be canceled by clicking the red 'x', which hides it from the parent object. Each bar has an associated timer object, which is started using the startBar method. This timer can then be used to periodically update the progress of the bar by parsing the current tag of a job associated with the bar (if a job is run using parallel processing or on a remote), or using an event listener for the ProgressChangedEvent that is issued by nigeLab.Block/reportProgress (if a job is run serially). nigelProgress bars are mediated by the remoteMonitor class, so any bars that are added to an interface should be done so using the remoteMonitor class.

Small application that can be used to enter in metadata about experiments after they were performed. Ideally, this is invoked on the constructor of each nigeLab.Block object to force the experimenter to make sure they have entered the metadata correctly (except most people find that annoying, so it's not). Notes entered here should follow the syntax that allows dynamic variable creation and assignment of metadata to said variable names.

Class that indicates the completion of a process of interest by "animating" Nigel's whiskers, which are actually just time-shifted versions of some experimentally-obtained spike data. May be broken now since the .svg has been moved/removed. Federico doesn't like it but Max doesn't want to remove it from the repository yet.

Class that indicates the completion of a process of interest. Inspired by loading icon of simple_clust.

Class to generate a stereotaxic spatial plot of a rat skull with objects of interest superimposed as a scatter that is normalized in units of millimeters relative to bregma. Useful for visualizing things, for example either with different colored scatter markers or different sizes of scatter markers, which may correspond to the known locations of implanted or acute electrodes.

Class that acts as an intermediate between a user-interface of interest and the nigelProgress class. Basically, it should be used in the constructor of a user-interface to initialize any number of nigelProgress progress bars (which are hidden as long as their index in remoteMonitor is NaN) that correspond to any nigeLab.Block object that is under consideration by the interface. Then, any time a job is run via the interface that uses data corresponding to a given Block, the remoteMonitor/startBar method should be invoked to start monitoring that job (if a job is submitted in parallel or remotely).

Class used by Spike Sorting UI to display spikes without overlaying a million graphics objects onto a single plot. Instead, it uses the y-axis to quantize the spikes as if they were in an image, then displays the quantized "intensities" as pixels where many or few spikes crossed a given <relative-time-to-peak,amplitude> combination. Automatically colors different plots according to the default color scheme, so that waveforms of different clusters appear as different colors.

Class used to split blocks that were recorded simultaneously, as may occur during yolked experiments wherein one animal is a control that receives "random" stimuli in accordance to the exact same stimuli that are locked to the second (experimental) rat's behavior. Because of the hierarchical format of nigeLab, it is desirable to "split" the corresponding channels of a given recording; however, this may not always be done exactly in an identical way, so this interface allows the manual selection of a subset of channels from the original recording to be assigned to "Animal A," while a second subset of channels is assigned to "Animal B." The assignment is done from a Matlab uiw.widget.Tree object, wherein nodes containing the desired channels are dragged from the combined "multi-animal" block to the desired corresponding "individual animal" block. After the splitting is complete, nigeLab retains the information that these two animals were recorded "together" (since it may be desirable from an analytical standpoint), but puts the corresponding matfiles into separate folder hierarchies to keep them apart.

In order to use this interface, the recording block file must follow a very specific naming convention, which typically requires that the AnimalID metadata field is split using "&&". For example, R19-162&&R19-163_2019_12_31_1_Experimental&&Control.rhs would split and assign R19-162 to "Animal A" and R19-163 to "Animal B"; in addition, if the corresponding metadata variable--see suggestions--is set, then R19-162 metadata for that variable will be 'Experimental' while R19-163 metadata for that variable will be 'Control'. See previous links in this section for more details.

Class used for the .Videos FieldType of nigeLab.Block.

Class used in any Video UI to track information about the current video, such as current frame time or to interface with the VideoReader object and make sure it gets destroyed correctly on interface destruction (so that Matlab doesn't suddenly begin eating up RAM for apparently no reason).

Class that tracks VidStreams. This is a Field of nigeLab.Block that associates "pseudo-streams" that were extracted from video data (not the same as Streams, which are recorded directly by the acquisition hardware) with each VideosFieldType object (elements of the nigeLab.Block.Video array that correspond to different videos from the recording).

Clone this wiki locally