Basic xform Usage

The combination of xforms and modelspecs allows for a compact representation of a workflow, from data loading to model fitting to analysis and more. Below is a simple example of how in a few lines of code, this can be achieved.

[1]:
from pathlib import Path

import nems0.uri
import nems0.recording as recording
import nems0.xform_helper as xhelp

Download Sample Data

Here we quickly download a sample recording to be used in this example. This data is in the form of a recording object, which contains a set of signals which are containers for each of the data channels (here, the stim and resp data that we use in the fit).

[2]:
# save the demo data the default data directory
signals_dir = nems.get_setting('NEMS_RECORDINGS_DIR')
# download the demo data: cell "TAR010c-18-1"
recording.get_demo_recordings(signals_dir, 'TAR010c-18-1.tgz')
datafile = Path(signals_dir) / 'TAR010c-18-1.tgz'

Run the Analysis

We specify the name of the analysis we want to run, which consists of a set of keywords for the loader (ld-sev), the model (dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1), and the fitter (basic), and pass that information to the xform function which will build the analysis pipeline and fit the model.

[3]:
# pass in the relevant information
xfspec, ctx = xhelp.fit_model_xform(
    cellid='TAR010c-18-1',
    batch=289,
    modelname='ld-sev_dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1_basic',
    returnModel=True,
    saveInDB=False,
    recording_uri=str(datafile),
)
[nems.xform_helper INFO] Initializing modelspec(s) for cell/batch TAR010c-18-1/289...
[nems.xform_helper INFO] TODO: simplify generate_xforms_spec parameters
[nems.xform_helper INFO] Initializing modelspec(s) for recording/model C:\Users\Alex\PycharmProjects\NEMS\recordings\TAR010c-18-1.tgz/ld-sev_dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1_basic...
[nems.xform_helper INFO] [['nems.xforms.init_context', {'cellid': 'TAR010c-18-1', 'batch': 289, 'keywordstring': 'dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1', 'meta': {'batch': 289, 'cellid': 'TAR010c-18-1', 'modelname': 'ld-sev_dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1_basic', 'loader': 'ld-sev', 'fitkey': 'basic', 'modelspecname': 'dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1', 'username': 'nems', 'labgroup': 'lbhb', 'public': 1, 'githash': '', 'recording': 'ld-sev'}, 'recording_uri_list': ['C:\\Users\\Alex\\PycharmProjects\\NEMS\\recordings\\TAR010c-18-1.tgz']}], ['nems.xforms.load_recordings', {'recording_uri_list': ['C:\\Users\\Alex\\PycharmProjects\\NEMS\\recordings\\TAR010c-18-1.tgz'], 'normalize': False}], ['nems.xforms.split_by_occurrence_counts', {'epoch_regex': '^STIM'}], ['nems.xforms.average_away_stim_occurrences', {'epoch_regex': '^STIM'}], ['nems.xforms.init_from_keywords', {'registry': <nems.registry.KeywordRegistry object at 0x000001802CCA8908>}], ['nems.xforms.fit_basic', {'max_iter': 3000, 'fitter': 'scipy_minimize', 'tolerance': 1e-07}], ['nems.xforms.predict', {}], ['nems.xforms.add_summary_statistics', {}], ['nems.xforms.plot_summary', {}]]
[nems.xforms INFO] Evaluating: nems.xforms.init_context
[nems.xforms INFO] xf argument recording_uri_list overlaps with existing context key: nems.xforms.load_recordings
[nems.xforms INFO] Evaluating: nems.xforms.load_recordings
[nems.xforms INFO] Extracting cellid(s) TAR010c-18-1
[nems.preprocessing INFO] Adding to epoch_onsets: TRIAL with shift = 0
[nems.xforms INFO] Evaluating: nems.xforms.split_by_occurrence_counts
[nems.xforms INFO] Evaluating: nems.xforms.average_away_stim_occurrences
[nems.xforms INFO] Evaluating: nems.xforms.init_from_keywords
[nems.initializers INFO] kw: dlog
[nems.initializers INFO] kw: wc.18x2.g
[nems.initializers INFO] kw: fir.2x15
[nems.initializers INFO] kw: lvl.1
[nems.initializers INFO] kw: dexp.1
[nems.initializers INFO] Setting modelspec[0] input to stim
[nems.utils INFO] model save destination: C:\Users\Alex\PycharmProjects\NEMS\results\289\TAR010c\ld-sev.dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1.basic.2020-06-01T211002
[nems.xforms INFO] Evaluating: nems.xforms.fit_basic
[nems.xforms INFO] ----------------------------------------------------
[nems.xforms INFO] Fitting: fit 1/1, fold 1/1 (tol=1.00e-07, max_iter=3000)
[nems.analysis.fit_basic INFO] Data len pre-mask: 49500
[nems.analysis.fit_basic INFO] Data len post-mask: 49500
[nems.modelspec INFO] Freezing fast rec at start=0
[nems.fitters.fitter INFO] options {'ftol': 1e-07, 'maxiter': 3000, 'maxfun': 30000}
[nems.fitters.fitter INFO] Start sigma: [ 0.      0.4167  0.5833  0.3192  0.3192  0.      0.1    -0.05    0.
  0.      0.      0.      0.      0.      0.      0.      0.      0.
  0.      0.      0.      0.1    -0.05    0.      0.      0.      0.
  0.      0.      0.      0.      0.      0.      0.      0.      0.
  1.      0.      1.      0.    ]
[nems.analysis.cost_functions INFO] Eval #100. E=1.217028
[nems.analysis.cost_functions INFO] Eval #200. E=1.027959
[nems.analysis.cost_functions INFO] Eval #300. E=0.985556
[nems.analysis.cost_functions INFO] Eval #400. E=0.939016
[nems.analysis.cost_functions INFO] Eval #500. E=0.902691
[nems.analysis.cost_functions INFO] Eval #600. E=0.889720
[nems.analysis.cost_functions INFO] Eval #700. E=0.877641
[nems.analysis.cost_functions INFO] Eval #800. E=0.871184
[nems.analysis.cost_functions INFO] Eval #900. E=0.869203
[nems.analysis.cost_functions INFO] Eval #1000. E=0.865613
[nems.analysis.cost_functions INFO] Eval #1100. E=0.865103
[nems.analysis.cost_functions INFO] Eval #1200. E=0.860403
[nems.analysis.cost_functions INFO] Eval #1300. E=0.859730
[nems.analysis.cost_functions INFO] Eval #1400. E=0.858844
[nems.analysis.cost_functions INFO] Eval #1500. E=0.858287
[nems.analysis.cost_functions INFO] Eval #1600. E=0.856442
[nems.analysis.cost_functions INFO] Eval #1700. E=0.855742
[nems.analysis.cost_functions INFO] Eval #1800. E=0.856675
[nems.analysis.cost_functions INFO] Eval #1900. E=0.853384
[nems.analysis.cost_functions INFO] Eval #2000. E=0.852814
[nems.analysis.cost_functions INFO] Eval #2100. E=0.852627
[nems.analysis.cost_functions INFO] Eval #2200. E=0.850885
[nems.analysis.cost_functions INFO] Eval #2300. E=0.849727
[nems.analysis.cost_functions INFO] Eval #2400. E=0.849098
[nems.analysis.cost_functions INFO] Eval #2500. E=0.848956
[nems.analysis.cost_functions INFO] Eval #2600. E=0.847830
[nems.analysis.cost_functions INFO] Eval #2700. E=0.847674
[nems.analysis.cost_functions INFO] Eval #2800. E=0.847266
[nems.analysis.cost_functions INFO] Eval #2900. E=0.848356
[nems.analysis.cost_functions INFO] Eval #3000. E=0.847122
[nems.analysis.cost_functions INFO] Eval #3100. E=0.846130
[nems.analysis.cost_functions INFO] Eval #3200. E=0.845608
[nems.analysis.cost_functions INFO] Eval #3300. E=0.845040
[nems.analysis.cost_functions INFO] Eval #3400. E=0.844774
[nems.analysis.cost_functions INFO] Eval #3500. E=0.844682
[nems.analysis.cost_functions INFO] Eval #3600. E=0.844589
[nems.analysis.cost_functions INFO] Eval #3700. E=0.844261
[nems.analysis.cost_functions INFO] Eval #3800. E=0.844068
[nems.analysis.cost_functions INFO] Eval #3900. E=0.843731
[nems.analysis.cost_functions INFO] Eval #4000. E=0.843663
[nems.analysis.cost_functions INFO] Eval #4100. E=0.843511
[nems.analysis.cost_functions INFO] Eval #4200. E=0.843448
[nems.analysis.cost_functions INFO] Eval #4300. E=0.843435
[nems.analysis.cost_functions INFO] Eval #4400. E=0.843345
[nems.analysis.cost_functions INFO] Eval #4500. E=0.843250
[nems.analysis.cost_functions INFO] Eval #4600. E=0.843237
[nems.analysis.cost_functions INFO] Eval #4700. E=0.843227
[nems.analysis.cost_functions INFO] Eval #4800. E=0.843215
[nems.analysis.cost_functions INFO] Eval #4900. E=0.843185
[nems.analysis.cost_functions INFO] Eval #5000. E=0.843158
[nems.analysis.cost_functions INFO] Eval #5100. E=0.843086
[nems.analysis.cost_functions INFO] Eval #5200. E=0.843049
[nems.analysis.cost_functions INFO] Eval #5300. E=0.843714
[nems.analysis.cost_functions INFO] Eval #5400. E=0.843025
[nems.analysis.cost_functions INFO] Eval #5500. E=0.842897
[nems.analysis.cost_functions INFO] Eval #5600. E=0.842886
[nems.analysis.cost_functions INFO] Eval #5700. E=0.842884
[nems.analysis.cost_functions INFO] Eval #5800. E=0.842875
[nems.analysis.cost_functions INFO] Eval #5900. E=0.842847
[nems.analysis.cost_functions INFO] Eval #6000. E=0.842803
[nems.analysis.cost_functions INFO] Eval #6100. E=0.842781
[nems.analysis.cost_functions INFO] Eval #6200. E=0.842785
[nems.analysis.cost_functions INFO] Eval #6300. E=0.842656
[nems.analysis.cost_functions INFO] Eval #6400. E=0.842572
[nems.analysis.cost_functions INFO] Eval #6500. E=0.842586
[nems.analysis.cost_functions INFO] Eval #6600. E=0.842498
[nems.analysis.cost_functions INFO] Eval #6700. E=0.842461
[nems.analysis.cost_functions INFO] Eval #6800. E=0.842449
[nems.analysis.cost_functions INFO] Eval #6900. E=0.842340
[nems.analysis.cost_functions INFO] Eval #7000. E=0.842286
[nems.analysis.cost_functions INFO] Eval #7100. E=0.842141
[nems.analysis.cost_functions INFO] Eval #7200. E=0.842100
[nems.analysis.cost_functions INFO] Eval #7300. E=0.842062
[nems.analysis.cost_functions INFO] Eval #7400. E=0.842023
[nems.analysis.cost_functions INFO] Eval #7500. E=0.842006
[nems.analysis.cost_functions INFO] Eval #7600. E=0.841963
[nems.analysis.cost_functions INFO] Eval #7700. E=0.841931
[nems.analysis.cost_functions INFO] Eval #7800. E=0.841922
[nems.analysis.cost_functions INFO] Eval #7900. E=0.841906
[nems.analysis.cost_functions INFO] Eval #8000. E=0.841899
[nems.analysis.cost_functions INFO] Eval #8100. E=0.841875
[nems.analysis.cost_functions INFO] Eval #8200. E=0.841857
[nems.analysis.cost_functions INFO] Eval #8300. E=0.841843
[nems.analysis.cost_functions INFO] Eval #8400. E=0.841841
[nems.analysis.cost_functions INFO] Eval #8500. E=0.841827
[nems.analysis.cost_functions INFO] Eval #8600. E=0.841826
[nems.analysis.cost_functions INFO] Eval #8700. E=0.841822
[nems.analysis.cost_functions INFO] Eval #8800. E=0.841808
[nems.analysis.cost_functions INFO] Eval #8900. E=0.841801
[nems.analysis.cost_functions INFO] Eval #9000. E=0.841799
[nems.analysis.cost_functions INFO] Eval #9100. E=0.841802
[nems.analysis.cost_functions INFO] Eval #9200. E=0.841793
[nems.analysis.cost_functions INFO] Eval #9300. E=0.841789
[nems.analysis.cost_functions INFO] Eval #9400. E=0.841769
[nems.analysis.cost_functions INFO] Eval #9500. E=0.841768
[nems.analysis.cost_functions INFO] Eval #9600. E=0.841762
[nems.analysis.cost_functions INFO] Eval #9700. E=0.841762
[nems.analysis.cost_functions INFO] Eval #9800. E=0.841760
[nems.analysis.cost_functions INFO] Eval #9900. E=0.841753
[nems.analysis.cost_functions INFO] Eval #10000. E=0.841752
[nems.analysis.cost_functions INFO] Eval #10100. E=0.841751
[nems.analysis.cost_functions INFO] Eval #10200. E=0.841751
[nems.analysis.cost_functions INFO] Eval #10300. E=0.841750
[nems.analysis.cost_functions INFO] Eval #10400. E=0.841748
[nems.analysis.cost_functions INFO] Eval #10500. E=0.841747
[nems.analysis.cost_functions INFO] Eval #10600. E=0.841747
[nems.analysis.cost_functions INFO] Eval #10700. E=0.841746
[nems.analysis.cost_functions INFO] Eval #10800. E=0.841743
[nems.analysis.cost_functions INFO] Eval #10900. E=0.841738
[nems.analysis.cost_functions INFO] Eval #11000. E=0.841737
[nems.analysis.cost_functions INFO] Eval #11100. E=0.841736
[nems.analysis.cost_functions INFO] Eval #11200. E=0.841736
[nems.analysis.cost_functions INFO] Eval #11300. E=0.841739
[nems.analysis.cost_functions INFO] Eval #11400. E=0.841733
[nems.analysis.cost_functions INFO] Eval #11500. E=0.841745
[nems.analysis.cost_functions INFO] Eval #11600. E=0.841732
[nems.analysis.cost_functions INFO] Eval #11700. E=0.841731
[nems.analysis.cost_functions INFO] Eval #11800. E=0.841729
[nems.analysis.cost_functions INFO] Eval #11900. E=0.841727
[nems.analysis.cost_functions INFO] Eval #12000. E=0.841725
[nems.analysis.cost_functions INFO] Eval #12100. E=0.841724
[nems.analysis.cost_functions INFO] Eval #12200. E=0.841723
[nems.analysis.cost_functions INFO] Eval #12300. E=0.841724
[nems.fitters.fitter INFO] Starting error: 1.111072 -- Final error: 0.841723
[nems.fitters.fitter INFO] Final sigma: [-1.2696e+00  4.8600e-02  5.6740e-01  6.0000e-01  2.3120e-01  1.4100e-02
  6.8940e-01  3.6480e-01 -3.7660e-01 -1.3910e-01 -1.4460e-01  2.8100e-02
 -2.4000e-03  4.5400e-02 -5.7400e-02 -1.3000e-03  5.3000e-02 -1.7100e-02
  1.1200e-02 -6.3100e-02 -1.0000e-04 -4.4980e-01 -1.5070e-01  3.1580e-01
  1.8180e-01  8.9000e-03 -8.8300e-02 -4.4400e-02 -3.4600e-02  3.5500e-02
  2.9000e-03 -5.9600e-02 -2.9100e-02  9.1000e-03  7.4000e-03 -5.3090e-01
  2.4922e+00  1.1180e-01  5.0930e-01  5.3090e-01]
[nems.analysis.fit_basic INFO] Delta error: 1.111072 - 0.841723 = -2.693489e-01
[nems.xforms INFO] Evaluating: nems.xforms.predict
[nems.xforms INFO] Evaluating: nems.xforms.add_summary_statistics
[nems.xforms INFO] Evaluating: nems.xforms.plot_summary
[nems.modelspec INFO] Quickplot: no epoch specified, falling back to "REFERENCE"
[nems.modelspec INFO] plotting row 1/6
[nems.modelspec INFO] plotting row 2/6
[nems.modelspec INFO] plotting row 3/6
[nems.modelspec INFO] plotting row 4/6
[nems.modelspec INFO] plotting row 5/6
[nems.modelspec INFO] plotting row 6/6
[nems.modelspec INFO] Quickplot: generated fig with title "Cell: TAR010c-18-1, Batch: 289, REFERENCE #0 ld-sev_dlog-wc.18x2.g-fir.2x15-lvl.1-dexp.1_basic"
[nems.xforms INFO] Done (re-)evaluating xforms.
../_images/demos_demo_basic_xform_8_1.png