Skip to content

NovelaNeuro/rec_to_nwb

Repository files navigation

rec_to_nwb

About

rec_to_nwb is a python conda package for converting SpikeGadgets rec files to NWB files.
It converts experiment data from /raw or /preprocessing folder to .nwb file. It utilizes rec_to_binaries package for preprocessing phase.
https://github.com/LorenFrankLab/rec_to_binaries

Prerequisites

For users

  1. Install Spike Gadgets
    https://bitbucket.org/mkarlsso/trodes/downloads/
  2. Add SpikeGadgets to path.
    If Spike Gadgets is in default location:
    export PATH="$HOME/SpikeGadgets/:$PATH"
  3. Download miniconda from
    https://docs.conda.io/en/latest/miniconda.html
  4. Install rec_to_nwb package:
    conda install -c conda-forge -c novelakrk rec_to_nwb
  5. Install Jupyter notebook
    pip install jupyter notebook

For developers

  1. Install Spike Gadgets
    https://bitbucket.org/mkarlsso/trodes/downloads/
  2. Add SpikeGadgets to path.
    If Spike Gadgets is in default location:
    export PATH="$HOME/SpikeGadgets/:$PATH"
  3. Download miniconda from
    https://docs.conda.io/en/latest/miniconda.html
  4. clone repository
    git clone https://github.com/NovelaNeuro/rec_to_nwb.git
    
    cd rec_to_nwb/rec_to_nwb
  5. Create conda environment.
    conda env create -f environment.yml
  6. jupyter notebook installation
    pip install jupyter notebook
  7. Documentation can be viewed at
    https://novelaneuro.github.io/rec_to_nwb-docs/

How to use it

  1. Download example notebook file from
    https://anaconda.org/NovelaKRK/nwb_generation/notebook

  2. In terminal navigate to notebook file location

    rec_to_nwb/rec_to_nwb/notebooks
  3. Run jupyter notebook

    jupyter notebook nwb_generation.ipynb
  4. Metadata.yml description:

     # general information about the experiment 
     experimenter name: Alison Comrie
     lab: Loren Frank
     institution: University of California, San Francisco
     experiment description: Reinforcement learning
     session description: Reinforcement leaarning
     session_id: beans_01
     subject:
       description: Long Evans Rat
       genotype: Wild Type
       sex: Male
       species: Rat
       subject id: Beans
       weight: Unknown
    #Units of analog and behavioral_events
    units:
       analog: 'unspecified'
       behavioral_events: 'unspecified'  
    #data acq device used in experiment   
    data acq device:
       - name: acq_0
         system: sample_system
         amplifier: sample_amplifier
         adc_circuit: sample_adc_circuit
       - name: acq_1
         system: sample_system_2
    #CameraDevice that were used in experiment    
     cameras:
       - id: 0
         meters_per_pixel: 0.02
       - id: 1
         meters_per_pixel: 0.03
       - id: 2
         meters_per_pixel: 0.05  
     #Tasks represent epochs in experiment. Contains task_name, task_description, camera_id that were used in this task and task_epochs that this task correspond to. Stored in behavioral section in output nwb file.
     tasks:
       - task_name:          Sleep,
         task_description:   The animal sleeps in a small empty box.
         camera_id:
           - 0
         task_epochs:
           - 1
           - 3
           - 5
       - task_name:            Stem+Leaf,
         task_description:     Spatial Bandit,
         camera_id:
           - 1
         task_epochs:
           - 2
           - 4
     # Associated files which describe content of files stored inside nwb as text.
        associated_files:
       -  name: example_name1
          description: exmaple description 1
          path: C:/Users/sampleuser/PycharmProjects/rec_to_nwb/test/processing/res/test_text_files/test1_file
          task_epochs: [1, 2]
       -  name: example_name2
          description: exmaple description 2
          path: C:/Users/sampleuser/PycharmProjects/rec_to_nwb/test/processing/res/test_text_files/test2_file
          task_epochs: [3, 4]
     # Associated video files describe .h264 files stored as ImageSeries in nwb.
        associated_video_files:
       - name: 20190718_beans_01_s1.1.h264
         camera_id : 0
     # Times period multiplier is used in pos/mda invalid/valid times, to multiply the period when detecting gaps,
         to avoid creating invalid times in case of only small deviations. (optional parameter, default 1.5)
        times_period_multiplier: 1.5      
     # Din/Dout events which filter out files from DIO data in data directory. Each name has to be unique. Stored in behavioral_events section in output nwb file.
     behavioral_events: 
       - name: Poke2
         description: Din2
     # Device name. Stored in output nwb file.
     device: 
       name:
         - Trodes
     # Electrode Groups list used in experiment. Each Id has to be unique, device_type has to refer to existing device_type in probe.yml. Target_x,y,z fields describe the specified location where this group should be. Possible value of units: 'um' or 'mm' 
     electrode groups:
       - id: 0
         location: mPFC
         device_type: 128c-4s8mm6cm-20um-40um-sl
         description: 'Probe 1'
         targeted_location: 'Sample predicted location'
         targeted_x: 0.0
         targeted_y: 0.0
         targeted_z: 0.0
         units: 'um'
       - id: 1
         location: mPFC
         device_type: 128c-4s8mm6cm-20um-40um-sl
         description: 'Probe 2'
         targeted_location: 'Sample predicted location'
         targeted_x: 0.0
         targeted_y: 0.0
         targeted_z: 0.0
         units: 'um'
     # Ntrodes list which refer 1:1 to <SpikeNTrode> elements from xml header existing in rec binary file.
     # ntrode_id has to match to SpikeNTrode id, electrode_group_id refers to electrode group,
     # bad_channels is a list of broken channels in the map, where map corresponds to the electrode channels
       - ntrode_id: 1 
         electrode_group_id: 0 
         bad_channels: [0,2]
         map:  
           0: 0
           1: 1
           2: 2
           3: 3
       - ntrode_id: 2
         electrode_group_id: 0
         bad_channels: [0,2]
         map:
           0: 4
           1: 5
           2: 6
           3: 7
    
  5. Probe.yml description:

     probe_type: tetrode_12.5 # Type of the probe that refers to device_type in electrode_group in metadata.yml
     units: 'um' # possible value for unit is um or mm
     probe_description: 'four wire electrode'
     num_shanks: 1 # Number of shanks (sets of electrodes) in this probe type
     contact_side_numbering: true
     contact_size: 12.5
     shanks:
       - shank_id: 0 # Shank_id has to be unique
         electrodes: # List of electrodes that is used to initialize the electrode_table in output nwb file
           - id: 0 # Electrode id has to be unique
             rel_x: 0.0
             rel_y: 0.0
             rel_z: 0.0
           - id: 1
             rel_x: 0.0
             rel_y: 0.0
             rel_z: 0.0
    
  6. Set up paths to metadata and probe yaml files, which corresponds to the experiment you are going to process.

    metadata = MetadataManager(
         '../test/processing/res/metadata.yml',
         ['../test/processing/res/probe1.yml',
         '../test/processing/res/probe2.yml',
         '../test/processing/res/probe3.yml']  
    )
  7. Input files metadata.yml as well as probe[1-N].yml are validated against rec files headers.

  8. We provide two class to generate the NWB file.

  • RawToNWBBuilder - To generate NWB file from raw data.
  • NWBFileBuilder - To generate NWB file from preprocessed data.
Raw data

Initialize RawToNWBBuilder, which requires animal_name, data_path and dates which exist in your experiment folder. Next build the NWB using build_nwb().
If you don't want mda or pos invalid/valid times in your nwb, set accordingly flag to false in 'build_nwb' method.

builder = RawToNWBBuilder(
          animal_name='beans',
          data_path='../test/test_data/',
          dates=['20190718'],
          nwb_metadata=metadata,
          output_path='/out/nwb'
           )
builder.build_nwb()

raw_to_nwb_builder arguments

  **data_path** = `string` path to the parent folder of animal_name <br>

  **animal_name** = `string` name of the folder that contain few dates-folders <br>

  **dates** = `list of strings` names of folders that contain experiment data <br>

  **nwb_metadata** = `MetadataManager` object with metadata.yml and probes.yml <br>
  
  **output_path** = `string` path specifying location and name of result file (dafault 'output.nwb') <br>
  
  **video_path** = `string` path specifying location of video files .h264 where those are copied <b4>

  **extract_analog** = `boolean` flag specifying if analog data should be extracted from raw (default True) <br>

  **extract_spikes** = `boolean` flag specifying if spikes data should be extracted from raw (default False) <br>

  **extract_lfps** = `boolean` flag specifying if lfp data should be extracted from raw (default False) <br>

  **extract_dio** = `boolean` flag specifying if dio data should be extracted from raw (default True) <br>

  **extract_mda** = `boolean` flag specifying if mda data should be extracted from raw (default True) <br>

  **parallel_instances** = `int` number of threads, optimal value highly depends on hardware (default 4) <br>
  
  **overwrite** = `boolean`  If true, will overwrite existing files. (default True) <br>
  
  **trodes_rec_export_args** = `tuple of strings` path to rec header file which overrides all headers existing in rec binary files e.g `_DEFAULT_TRODES_REC_EXPORT_ARGS = ('-reconfig', str(path) + '/test/processing/res/reconfig_header.xml')` <br>  

build_nwb arguments:

 **process_mda_valid_time** = 'boolean' True if the mda valid times should be build and append to nwb.
            Need the mda data inside the nwb. (default True) <br>
 
 **process_mda_invalid_time** = 'boolean' True if the mda invalid times should be build and append to nwb.
            Need the mda data inside the nwb. (default True) <br>
 
 **process_pos_valid_time** = 'boolean' True if the pos valid times should be build and append to nwb.
            Need the pos data inside the nwb. (default True) <br>
 
 **process_pos_invalid_time** = 'boolean' True if the pos invalid times should be build and append to nwb.
            Need the pos data inside the nwb. (default True) <br>
Preprocessed data

If you have already preprocessed data or RawToNwb process crashed during building file you can initialize NWBFileBuilder, which requires data_path, animal_name, date, nwb_metadata.
Next build the NWB using build() and write it to file by write(content) method. After that, you can add mda or pos invalid/valid data to your NWB, using 'build_and_append_to_nwb' method.

builder = NWBFileBuilder(
         data_path='../data/',
         animal_name='beans',
         date='20190718',
         nwb_metadata=metadata,
         process_dio=True,
         process_mda=True,
         process_analog=True
     )
content = builder.build()
builder.write(content)

NWBFileBuilder arguments

 **data_path** = `string` path to directory containing all experiments data <br>
 
 **animal_name** = `string` directory name which represents animal subject of experiment <br>
 
 **date** = `string` date of experiment <br>
 
 **nwb_metadata** = `MetadataManager` object contains metadata about experiment <br>

 **process_dio** = `boolean` flag if dio data should be processed <br>
 
 **process_mda** = `boolean` flag if mda data should be processed <br>
 
 **process_analog** = `boolean` flag if analog data should be processed <br>
 
 **video_path** = `string` path specifying location of video files .h264 where those are copied <b4>
 
 **output_file** = `string` path and name specifying where .nwb file gonna be written <br>

build_and_append_to_nwb arguments:

 **process_mda_valid_time** = 'boolean' True if the mda valid times should be build and append to nwb.
            Need the mda data inside the nwb. (default True) <br>
 
 **process_mda_invalid_time** = 'boolean' True if the mda invalid times should be build and append to nwb.
            Need the mda data inside the nwb. (default True) <br>
 
 **process_pos_valid_time** = 'boolean' True if the pos valid times should be build and append to nwb.
            Need the pos data inside the nwb. (default True) <br>
 
 **process_pos_invalid_time** = 'boolean' True if the pos invalid times should be build and append to nwb.
            Need the pos data inside the nwb. (default True) <br>
  1. Make sure that the data structure in given directory (in that case test_data) looks similar to following example:

     --test_data
       |
       `-- beans
           |   |
           |   `-- raw
           |       |
           |       `-- 20190718
           |           |-- 20190718_beans_01_s1.1.h264
           |           |-- 20190718_beans_01_s1.1.trackgeometry
           |           |-- 20190718_beans_01_s1.1.videoPositionTracking
           |           |-- 20190718_beans_01_s1.1.videoTimeStamps
           |           |-- 20190718_beans_01_s1.1.videoTimeStamps.cameraHWSync
           |           |-- 20190718_beans_01_s1.rec
           |           `-- 20190718_beans_01_s1.stateScriptLog
           `-- README.md
    
  2. Double check if there is enough disc space on your Laptop/PC.

  3. Run processing (generation may take from mins to even hours and it depends on the size of experiment datasets).

  4. rec_to_nwb.log contains useful information about processing phases as well as all of the exceptions and errors.

  5. Example structure of preprocessed experiment data

|-- beans
|   |-- preprocessing
|   |   |
|   |   |-- 20190718
|   |       |-- 20190718_beans_01_s1.1.pos
|   |       |   |-- 20190718_beans_01_s1.1.pos_cameraHWFrameCount.dat
|   |       |   |-- 20190718_beans_01_s1.1.pos_online.dat
|   |       |   |-- 20190718_beans_01_s1.1.pos_timestamps.dat
|   |       |-- 20190718_beans_01_s1.analog
|   |       |   |-- 20190718_beans_01_s1.analog_AccelX.dat
|   |       |   |-- 20190718_beans_01_s1.analog_AccelY.dat
|   |       |   |-- 20190718_beans_01_s1.analog_AccelZ.dat
|   |       |   |-- 20190718_beans_01_s1.analog_GyroX.dat
|   |       |   |-- 20190718_beans_01_s1.analog_GyroY.dat
|   |       |   |-- 20190718_beans_01_s1.analog_GyroZ.dat
|   |       |   |-- 20190718_beans_01_s1.analog_MagX.dat
|   |       |   |-- 20190718_beans_01_s1.analog_MagY.dat
|   |       |   |-- 20190718_beans_01_s1.analog_MagZ.dat
|   |       |   |-- 20190718_beans_01_s1.exportanalog.log
|   |       |   |-- 20190718_beans_01_s1.timestamps.dat
|   |       |-- 20190718_beans_01_s1.DIO
|   |       |   |-- 20190718_beans_01_s1.dio_Din10.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din11.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din12.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din13.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din14.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din15.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din16.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din17.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din18.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din19.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din1.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din20.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din21.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din22.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din23.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din24.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din25.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din26.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din27.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din28.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din29.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din2.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din30.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din31.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din32.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din3.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din4.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din5.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din6.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din7.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din8.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Din9.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout10.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout11.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout12.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout13.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout14.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout15.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout16.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout17.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout18.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout19.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout1.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout20.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout21.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout22.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout23.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout24.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout25.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout26.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout27.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout28.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout29.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout2.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout30.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout31.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout32.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout3.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout4.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout5.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout6.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout7.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout8.dat
|   |       |   |-- 20190718_beans_01_s1.dio_Dout9.dat
|   |       |   |-- 20190718_beans_01_s1.exportdio.log
|   |       |-- 20190718_beans_01_s1.LFP
|   |       |   |-- 20190718_beans_01_s1.exportLFP.log
|   |       |   |-- 20190718_beans_01_s1.LFP_nt10ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt11ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt12ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt13ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt14ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt15ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt16ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt17ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt18ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt19ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt1ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt20ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt21ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt22ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt23ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt24ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt25ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt26ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt27ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt28ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt29ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt2ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt30ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt31ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt32ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt3ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt4ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt5ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt6ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt7ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt8ch1.dat
|   |       |   |-- 20190718_beans_01_s1.LFP_nt9ch1.dat
|   |       |   |-- 20190718_beans_01_s1.timestamps.dat
|   |       |-- 20190718_beans_01_s1.mda
|   |       |   |-- 20190718_beans_01_s1.exportmda.log
|   |       |   |-- 20190718_beans_01_s1.nt10.mda
|   |       |   |-- 20190718_beans_01_s1.nt11.mda
|   |       |   |-- 20190718_beans_01_s1.nt12.mda
|   |       |   |-- 20190718_beans_01_s1.nt13.mda
|   |       |   |-- 20190718_beans_01_s1.nt14.mda
|   |       |   |-- 20190718_beans_01_s1.nt15.mda
|   |       |   |-- 20190718_beans_01_s1.nt16.mda
|   |       |   |-- 20190718_beans_01_s1.nt17.mda
|   |       |   |-- 20190718_beans_01_s1.nt18.mda
|   |       |   |-- 20190718_beans_01_s1.nt19.mda
|   |       |   |-- 20190718_beans_01_s1.nt1.mda
|   |       |   |-- 20190718_beans_01_s1.nt20.mda
|   |       |   |-- 20190718_beans_01_s1.nt21.mda
|   |       |   |-- 20190718_beans_01_s1.nt22.mda
|   |       |   |-- 20190718_beans_01_s1.nt23.mda
|   |       |   |-- 20190718_beans_01_s1.nt24.mda
|   |       |   |-- 20190718_beans_01_s1.nt25.mda
|   |       |   |-- 20190718_beans_01_s1.nt26.mda
|   |       |   |-- 20190718_beans_01_s1.nt27.mda
|   |       |   |-- 20190718_beans_01_s1.nt28.mda
|   |       |   |-- 20190718_beans_01_s1.nt29.mda
|   |       |   |-- 20190718_beans_01_s1.nt2.mda
|   |       |   |-- 20190718_beans_01_s1.nt30.mda
|   |       |   |-- 20190718_beans_01_s1.nt31.mda
|   |       |   |-- 20190718_beans_01_s1.nt32.mda
|   |       |   |-- 20190718_beans_01_s1.nt3.mda
|   |       |   |-- 20190718_beans_01_s1.nt4.mda
|   |       |   |-- 20190718_beans_01_s1.nt5.mda
|   |       |   |-- 20190718_beans_01_s1.nt6.mda
|   |       |   |-- 20190718_beans_01_s1.nt7.mda
|   |       |   |-- 20190718_beans_01_s1.nt8.mda
|   |       |   |-- 20190718_beans_01_s1.nt9.mda
|   |       |   |-- 20190718_beans_01_s1.timestamps.mda
|   |       |-- 20190718_beans_01_s1.mountain
|   |       |-- 20190718_beans_01_s1.spikes
|   |       |   |-- 20190718_beans_01_s1.exportspikes.log
|   |       |   |-- 20190718_beans_01_s1.spikes_nt10.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt11.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt12.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt13.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt14.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt15.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt16.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt17.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt18.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt19.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt1.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt20.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt21.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt22.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt23.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt24.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt25.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt26.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt27.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt28.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt29.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt2.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt30.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt31.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt32.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt3.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt4.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt5.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt6.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt7.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt8.dat
|   |       |   |-- 20190718_beans_01_s1.spikes_nt9.dat
|   |       |-- 20190718_beans_01_s1.time
|   |           |-- 20190718_beans_01_s1.continuoustime.dat
|   |           |-- 20190718_beans_01_s1.exporttime.log
|   |           |-- 20190718_beans_01_s1.time.dat
|   |-- raw
|       |-- 20190718
|           |-- 20190718_beans_01_s1.1.h264
|           |-- 20190718_beans_01_s1.1.trackgeometry
|           |-- 20190718_beans_01_s1.1.videoPositionTracking
|           |-- 20190718_beans_01_s1.1.videoTimeStamps
|           |-- 20190718_beans_01_s1.1.videoTimeStamps.cameraHWSync
|           |-- 20190718_beans_01_s1.rec
|           |-- 20190718_beans_01_s1.stateScriptLog
|-- README.md

When processing completes, a nwb file is created in the output_path directory