#LyX 1.6.7svn created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
\textclass article
\begin_preamble
\usepackage{ifthen}
\usepackage{ifpdf}

% if normal PS or PDF LaTeX processing
%begin{latexonly}
%\newif\ifpdf 
%  \ifx\pdfoutput\undefined \pdffalse % we are not running PDFLaTeX 
%\else 
%  \pdfoutput=1 % we are running PDFLaTeX 
%  \pdftrue 
%\fi

\ifpdf 
  \usepackage[pdftex]{graphicx} 
  \pdfcompresslevel=9 
  \DeclareGraphicsExtensions{.pdf,.gif,.png,.jpeg}
  %\pdfpagewidth 11truein \pdfpageheight 8.5truein 
  %\pdfhorigin 1truein \pdfvorigin 1truein
\else 
  \usepackage[dvips]{graphicx} 
  \DeclareGraphicsExtensions{.eps,.pstex,.ps}
\fi

%% following is special latex2html command:
%end{latexonly}

\ifpdf
\else
\usepackage{html}

\begin{htmlonly}
  \usepackage[none]{graphicx} 
\end{htmlonly}
\fi

\usepackage{epsfig}
%\usepackage{color}
%\usepackage{url}
\usepackage{index}
\usepackage{subfigure}

% hyperref as last
\ifpdf\else
\begin{htmlonly}
\newcommand{\hypertarget}[2]{#2}
\newcommand{\hyperlink}[2]{#2}
\end{htmlonly}
\fi

%begin{latexonly}
\ifpdf 
  \usepackage[colorlinks=true,pdftex]{hyperref}
\else 
  %\usepackage[colorlinks=false]{hyperref}
  \newcommand{\hyperpage}[1]{#1}
\fi
%end{latexonly}

%\newcommand{\shorter}{} % Shorter 25 pg for Biol Cybern
%\newcommand{\forspringer}
%\newcommand{\production}{}
%\newcommand{\techreport}{}

% Name of the software package
\newcommand{\appname}{PANDORA Toolbox}

%% Common preambles
%\input{../over-delays/formals.tex}
%\input{../over-delays/preamble.tex}

%begin{latexonly}
\def\idstring{Id}
\gdef\CVSKeyword$#1 ${\expandafter\cCVSKeyword#1\endcCVSKeyword\relax}
\gdef\cCVSKeyword#1: #2\endcCVSKeyword{%
\gdef\myparam{#1}%
%\typeout{************This is IT:'\myparam'}%
\ifx\idstring\myparam%
\expandafter\cCVSId#2\endcCVSId\relax
\else%
\expandafter\gdef\csname CVS#1\endcsname{#2}%
\fi%
}
\gdef\cCVSId#1 #2\endcCVSId{%
\gdef\CVSIdp{\shortstack{\url{#1} \\ #2}}%
}

%% Version info
\CVSKeyword$Date$ 
\CVSKeyword$Revision$ 
\CVSKeyword$Id$ 
\CVSKeyword$Author$

%% Version number on footer
\fancyfoot[RE,LO]{\footnotesize{\appname{}: Prog.'s Manual}}
{\fancyfoot[LE,RO]{\parbox{.5\textwidth}{\begin{flushright}\footnotesize{Draft v\CVSRevision{}\\ on \CVSDate}\end{flushright}}}}

%% Fix overlap in headers
\fancyhead[L]{\slshape \leftmark} 
\fancyhead[R]{} % otherwise they overwrite one another
%\bibpunct{(}{)}{;}{a}{,}{,}

\renewenvironment{lyxcode}
   {\small\begin{list}{}{
     \setlength{\leftmargin}{-60pt}
     \setlength{\rightmargin}{\leftmargin}
     \setlength{\listparindent}{0pt}% needed for AMS classes
     \raggedright
     \setlength{\itemsep}{0pt}
     \setlength{\parsep}{0pt}
     \normalfont\ttfamily}%
    \item[]}
   {\end{list}}
%end{latexonly}

\ifpdf\else
\begin{htmlonly}
\renewenvironment{lyxcode}{\begin{rawhtml}<div style="font-family: monospace">\end{rawhtml}}{\begin{rawhtml}</div>\end{rawhtml}}
\end{htmlonly}
\fi

\newindex{funcref}{frx}{fnd}{Function Index}
\end_preamble
\use_default_options false
\language english
\inputencoding auto
\font_roman times
\font_sans default
\font_typewriter default
\font_default_family default
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100

\graphics none
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry false
\use_amsmath 2
\use_esint 0
\cite_engine natbib_authoryear
\use_bibtopic false
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle fancy
\tracking_changes false
\output_changes false
\author "" 
\author "" 
\end_header

\begin_body

\begin_layout Title
Plotting and Analysis for Neural Database-Oriented Research Applications
 (PANDORA) Toolbox --- 
\begin_inset Newline newline
\end_inset

User's and Programmer's Manual
\end_layout

\begin_layout Author
Cengiz G
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
"
\end_layout

\end_inset

unay 
\end_layout

\begin_layout Date
Document Revision 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
CVSRevision{}
\end_layout

\end_inset

, 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
today
\end_layout

\end_inset


\end_layout

\begin_layout Standard
\begin_inset Note Comment
status collapsed

\begin_layout Plain Layout
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
begin{latexonly}
\end_layout

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
end{latexonly}
\end_layout

\end_inset


\end_layout

\end_inset


\end_layout

\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents

\end_inset


\end_layout

\begin_layout Standard
\begin_inset Note Comment
status collapsed

\begin_layout Plain Layout
\begin_inset FloatList figure

\end_inset


\end_layout

\end_inset


\end_layout

\begin_layout Standard
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
TODO:
\end_layout

\begin_layout Plain Layout
- make a tutorial section that explains usage bottom-up.
 start from trace, profile, and dataset to database.
\end_layout

\begin_layout Plain Layout
- more visualization.
 look at paper figures and do similar examples.
 weed out obsolete methods, put examples into funcref of current usage.
\end_layout

\begin_layout Plain Layout
- add section on extensibility.
 maybe at end of software part.
\end_layout

\begin_layout Plain Layout
- put download info in install section.
 before that include all external functions, choose a license, and make
 an ant file to create binary and documentation packages.
\end_layout

\begin_layout Plain Layout
- separate document into two? user's and admin manuals? [no...]
\end_layout

\end_inset


\end_layout

\begin_layout Section
Introduction
\end_layout

\begin_layout Subsection
What is the 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
appname{}
\end_layout

\end_inset

?
\end_layout

\begin_layout Standard
The 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
appname{}
\end_layout

\end_inset

 is a software package which consists of a collection of 
\noun on
Matlab
\noun default
 object-oriented classes and script functions for creating, analyzing and
 visualizing databases based on data from electrophysiological neuron simulation
s and recordings.
\end_layout

\begin_layout Subsection
Why did you make it?
\end_layout

\begin_layout Standard
Motivations to create this software were:
\end_layout

\begin_layout Itemize
Analyze data generated by brute-force and other parameter search methods.
\end_layout

\begin_layout Itemize
Analyze subsets of parameter spaces and special cases.
\end_layout

\begin_layout Itemize
Evaluate robustness of model neurons.
\end_layout

\begin_layout Itemize
Find functional roles of specific conductances.
\end_layout

\begin_layout Subsection
How is it implemented?
\end_layout

\begin_layout Standard
A custom database management system (DBMS) is written from scratch in the
 
\noun on
Matlab
\noun default
 language.
 The toolbox design follows object-oriented programming principles.
 It uses functions from the statistics and signal processing toolboxes of
 
\noun on
Matlab
\noun default
, but they are not strictly necessary.
 It does not use 
\noun on
Matlab
\noun default
's database (DB) toolbox.
\begin_inset Foot
status collapsed

\begin_layout Plain Layout
At the time of initial design, the author did not have access to the DB
 toolbox.
 Future versions may support the DB toolbox.
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
How can I use it?
\end_layout

\begin_layout Standard
The 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
appname{}
\end_layout

\end_inset

 uses an object-oriented approach to provide maximal flexibility for interactive
 use on the 
\noun on
Matlab 
\noun default
command-line.
\begin_inset Foot
status collapsed

\begin_layout Plain Layout
This version of the toolbox does not yet have a general graphical user interface
 (GUI).
 The author prefers to have a flexible command-line interface than to maintain
 a limited GUI.
 However, once commonly used functions can be conveniently placed within
 a GUI, it will be added to the toolbox.
\end_layout

\end_inset

 Objects can be created, modified, analyzed, and visualized interactively
 in few steps.
 It is straightforward to save and load binary representations of these
 objects into files.
 Scripts can be made to programmatically repeat these procedures.
 Existing object classes are designed with the prospect of future extension,
 to accommodate new types of data and analyses.
\end_layout

\begin_layout Subsection
Who is it made for?
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
appname{}
\end_layout

\end_inset

 is customized for neuroscientific research.
 However, the concepts of a complex dataset, extraction of multiple observations
 from each item of the dataset, and analysis of multi-dimensional parameter
 spaces are universal.
 In its current form the database and dataset classes can be used for data
 other than electrophysiologic sources.
 As this toolbox is designed for flexible extensibility, one can add extensions
 that deal with different types of data and analyses.
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
link to extensibility section
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Finding your way around
\begin_inset CommandInset label
LatexCommand label
name "sub:Finding-your-way-around"

\end_inset


\end_layout

\begin_layout Standard
The source code uses 
\noun on
Matlab
\noun default
's documentation system, therefore all methods and classes are documented.
 To get help about all classes, issue the 
\end_layout

\begin_layout LyX-Code
>> help djlab
\end_layout

\begin_layout Standard
at the 
\noun on
Matlab
\noun default
 prompt.
 This should give you an overview of available classes.
 Then, to learn about a specific class, ask for the documentation for the
 constructor method.
 For instance, for the 
\family typewriter
trace
\family default
 class, issuing
\end_layout

\begin_layout LyX-Code
>> help trace
\end_layout

\begin_layout Standard
gives you the documentation for the constructor together with an overview
 for the class.
 Sometimes, if there are multiple methods with the same name under different
 classes, you may get the wrong documentation.
 In that case, you can specify the class from which to take the method by
 prepending the class name to the method, such as in
\end_layout

\begin_layout LyX-Code
>> help trace/spikes
\end_layout

\begin_layout Standard
In order to learn all methods available for a class, you can use 
\noun on
Matlab
\noun default
's 
\family typewriter
methods
\family default
 command.
 For the 
\family typewriter
trace
\family default
 class, do
\end_layout

\begin_layout LyX-Code
>> methods(trace)
\end_layout

\begin_layout Standard
However, some documentation may be outdated or simply wrong.
 Please report these to the author via e-mail to 
\family typewriter
cgunay AT emory.edu
\family default
.
\end_layout

\begin_layout Subsection
Overview of this document
\end_layout

\begin_layout Standard
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
put this in the preface?
\end_layout

\end_inset

Next, Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Installation"

\end_inset

 guides the reader through the installation of the package and other dependencie
s.
 You can skip this section if you already have a running software environment.
 Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Class-hierarchies"

\end_inset

 introduces the essential components of the software and talks about their
 design decisions.
 You can also skip this part if you're not interested in the guts of the
 system and you are in favor of a quick start.
 The recipes in Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Recipes"

\end_inset

 provide a tutorial for some common tasks.
 It may be easier for some readers to follow these recipes to jump-start
 using the software.
 However, it is recommended that you familiarize yourself with the basic
 organization of the classes before proceeding into more complex tasks.
 Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Visualization"

\end_inset

 takes the tutorial approach to describe common visualization tasks.
 Finally, Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Function-Reference"

\end_inset

 points to the list of individual methods provided by the software.
 These methods are documented in detail using the 
\noun on
Matlab
\noun default
 online help system.
\end_layout

\begin_layout Section
Installation
\begin_inset CommandInset label
LatexCommand label
name "sec:Installation"

\end_inset


\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
move everything from alf and cengiz directories into the toolbox, and make
 the installation automatic.
 make package available on ftp/http site.
\end_layout

\end_inset


\end_layout

\begin_layout Standard
Download the latest package file from: 
\end_layout

\begin_layout Standard
\begin_inset Flex URL
status collapsed

\begin_layout Plain Layout

http://userwww.service.emory.edu/~cgunay/pandora
\end_layout

\end_inset

.
 
\end_layout

\begin_layout Standard
Unpack the archive anywhere in your system, using
\end_layout

\begin_layout LyX-Code
$ tar xzf pandora-xyz.tar.gz
\end_layout

\begin_layout Standard
and follow the instructions in the README file.
 
\end_layout

\begin_layout Standard
Basically it involves pointing your 
\noun on
Matlab
\noun default
 installation to look at the 
\family typewriter
pandora/
\family default
 subdirectory for loading the PANDORA files.
 This can be achieved 
\begin_inset Note Comment
status collapsed

\begin_layout Plain Layout
either by copying the 
\family typewriter
pandora/
\family default
 directory under the 
\family typewriter
toolbox/
\family default
 directory in your 
\noun on
Matlab
\noun default
 installation, or [this doesn't work!] 
\end_layout

\end_inset

by adding this directory to your 
\noun on
Matlab
\noun default
 search path using the 
\family typewriter
addpath
\family default
 Matlab command.
 To avoid its repeated application for each new session, you can have a
 startup script, 
\family typewriter
startup.m
\family default
, in the directory that you run 
\noun on
Matlab
\noun default
 with the following commands:
\end_layout

\begin_layout LyX-Code
%--- startup.m for matlab
\end_layout

\begin_layout LyX-Code
addpath 
\family typewriter
/my/download/directory/pandora-1.0b/pandora
\end_layout

\begin_layout LyX-Code
%--- end startup.m
\end_layout

\begin_layout Standard
This will be loaded everytime you run 
\noun on
Matlab
\noun default
 from this directory.
 in UN*X systems, this can be improved further by placing the command in
 the file 
\family typewriter
$HOME/matlab/startup.m, which
\family default
 is executed no matter from where 
\noun on
Matlab
\noun default
 is called, especially if you are running Matlab from different or unknown
 places each time.
 In Windows, place the file under 
\family typewriter
My Documents/MATLAB
\family default
, or add the directory to the search path using the 
\emph on
File->Set Path
\emph default
 menu option.
\end_layout

\begin_layout Part
Software Architecture
\end_layout

\begin_layout Section
Toolbox Components
\begin_inset CommandInset label
LatexCommand label
name "sec:Class-hierarchies"

\end_inset


\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
makebox[0pt]{
\end_layout

\end_inset


\begin_inset Graphics
	filename db-overview.eps
	lyxscale 50
	width 80page%

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Database-overview"

\end_inset

Schematic overview of the database software.
\end_layout

\end_inset


\end_layout

\end_inset

An overview of the toolbox functionality is shown in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Database-overview"

\end_inset

.
 In the figure, boxes represent objects that can be created with the toolbox.
 Flow starts from the dataset object on the top left which represents the
 collection of raw data files.
 The raw data is loaded using information in the dataset to create intermediate
 objects that, for instance, contain data traces.
 These objects define electrophysiological measurements to be entered into
 the data matrix of the database object on the top right.
 The database object allows filtering and querying to refine its contents.
 From the database object, one can always go back to the dataset and find
 the raw data that results from a query.
 The arrows going to bottom objects and corresponding plots show the types
 of possible analyses that can be done on a database object.
 These analyses are typically for displaying statistical information.
 The red arrow is a speacial analysis for searching and matching rows between
 different databases.
 The match is done by taking a row from a database created with data from
 real neurons and finding best matching model neurons from a simulation
 database.
 
\end_layout

\begin_layout Standard
The objects in the figure are instances of classes that define their properties
 in the object-oriented framework.
 Each class comes with a hierarchy of of subclasses that specialize to specific
 functions.
 Subsequent sections describe each of these class hierarchies that make
 up the main components of the toolbox.
\end_layout

\begin_layout Subsection
Databases hold all the information
\end_layout

\begin_layout Standard
The database object is at the center of this toolbox (see Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Database-overview"

\end_inset

).
 It holds a data matrix with rows as observations and columns as attributes.
 The rows would normally correspond to results from individual data traces,
 or simply neurons.
 The columns hold values of separate measurements, statistical data, or
 parameter values.
 
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
makebox[0pt]{
\end_layout

\end_inset


\begin_inset Graphics
	filename DB-classes.eps
	lyxscale 50
	width 90page%

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Database-class-hierarchy"

\end_inset

Database class hierarchy.
\end_layout

\end_inset


\end_layout

\end_inset

A database object can be created from any of the classes in the hierarchy
 of Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Database-class-hierarchy"

\end_inset

.
 The top-level database class is 
\family typewriter
tests_db
\family default
 which contains a two-dimensional data matrix of real numbers and some metadata.
 The metadata consists of column labels (e.g., measure names), a dataset label,
 and data properties (e.g., time resolution).
 The subclasses are specialized for different tasks.
 
\end_layout

\begin_layout Standard
If the database object is created using a dataset object, this maintains
 a connection from the elements of the database (e.g., neurons) to the raw
 data.
 This allows raw data associated with database contents to be visualized
 during analysis.
 However, a database can be created from any data matrix given in the proper
 format.
\end_layout

\begin_layout Standard
Some specialized subclasses of 
\family typewriter
tests_db
\family default
 are as follows:
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
put links to reference section?
\end_layout

\end_inset


\end_layout

\begin_layout Description

\family typewriter
params_tests_db
\family default
 The first 
\family typewriter
num_params
\family default
 columns are reserved for parameters that were changed between different
 rows.
 It contains methods that treat these columns specially.
 Parameters can be simulation parameters, or pharmacological applications
 to experiments.
\end_layout

\begin_layout Description

\family typewriter
tests_3D_db
\family default
 Contains a three-dimensional data matrix that has additional dimension
 for pages of information.
 This is mainly used to look at change in measurements with a parameter
 using the 
\family typewriter
invarParam
\family default
 method of 
\family typewriter
params_tests_db
\family default
.
 Three dimensional databases can be useful for other purposes as well.
\end_layout

\begin_layout Description

\family typewriter
stats_db
\family default
 Contains few rows that describe the statistics obtained possibly from another
 database.
 It can contain the mean and standard deviation or error, or in some cases,
 the minimal and maximal values of columns in a database.
 It contains special plotting functions.
 There are methods that use the statistics collected by this class.
\end_layout

\begin_layout Description

\family typewriter
ranked_db
\family default
 Contains distances that resulted from a comparison of a database with a
 criterion.
 Its rows are ranked and sorted according to this distance value.
 Each row would point to a row in dex into the original database.
 Contains methods to generate reports from information about matching neurons.
\end_layout

\begin_layout Description

\family typewriter
spikes_db
\family default
 Contains results from individual spike shapes of a 
\family typewriter
trace
\family default
 object.
 It can be obtained using the 
\family typewriter
trace/analyzeSpikesInPeriod
\family default
 method.
\end_layout

\begin_layout Description

\family typewriter
histogram_db
\family default
 Each row corresponds to a histogram bin.
 Contains plotting methods.
\end_layout

\begin_layout Description

\family typewriter
corrcoefs_db
\family default
 Each row corresponds to a correlation coefficient.
 Contains plotting methods.
\end_layout

\begin_layout Description

\family typewriter
cluster_db
\family default
 Each row corresponds to a cluster centroid.
 Contains plotting methods.
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
clearpage
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Datasets create the databases
\end_layout

\begin_layout Standard
The dataset object is responsible for creating the database objects (see
 Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Database-overview"

\end_inset

).
 It defines where the raw data is stored and what parameters are used to
 load and analyze it.
 It knows that raw data has parameters associated which individual raw data
 traces and how and which measures will be generated.
 This information is used to automatically generate a database from the
 dataset.
 It also allows reaching back the raw data from rows of an analyzed database.
 
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\align center
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
makebox[0pt]{
\end_layout

\end_inset


\begin_inset Graphics
	filename Dataset-classes.eps
	display false
	width 80page%

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Dataset-class-hierarchy"

\end_inset

Dataset class hierarchy.
\end_layout

\end_inset


\end_layout

\end_inset

Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Dataset-class-hierarchy"

\end_inset

 shows the hierarchy for the dataset classes.
 The top-level dataset class is 
\family typewriter
params_tests_dataset
\family default
 which is an incomplete class.
 That is, this class defines general utilities that can work for a variety
 of dataset subclasses, but one cannot make a object from the 
\family typewriter
params_tests_dataset
\family default
 class directly.
 Instead, one of its subclasses must be chosen and used.
 Some of these specialized subclasses are as follows:
\end_layout

\begin_layout Description

\family typewriter
params_tests_fileset
\family default
 This class assumes each raw data item resides in a file and all of these
 files are in the same directory.
 The parameter names and values are obtained from each file name itself.
 This class is mostly useful for simulation filesets.
\end_layout

\begin_layout Description

\family typewriter
params_cip_trace_fileset
\family default
 This is a subclass of 
\family typewriter
params_tests_fileset
\family default
, therefore it inherits the notion of one file per data item.
 The files must conform to the current-pulse injection experiments and have
 a starting time and duration for the pulses.
 The pulse magnitude is read from the 
\family typewriter
pAcip
\family default
 parameter.
 This class is mostly useful for simulation filesets.
\end_layout

\begin_layout Description

\family typewriter
physiol_cip_traceset
\family default
 This is a subclass of 
\family typewriter
params_tests_dataset
\family default
.
 It is designed to load a set of physiology traces from a single file generated
 by the PCDX stimulation and acquisition software.
 
\end_layout

\begin_layout Description

\family typewriter
physiol_cip_traceset_fileset
\family default
 This is a subclass of 
\family typewriter
params_tests_dataset
\family default
.
 It is designed to load traces from multiple PCDX data files.
 It uses the 
\family typewriter
physiol_cip_traceset
\family default
 class for this purpose.
 
\end_layout

\begin_layout Description

\family typewriter
cip_traces_dataset,
\begin_inset space ~
\end_inset

cip_traceset,
\begin_inset space ~
\end_inset

cip_traceset_dataset
\family default
 These are obsolete classes that allow loading physiology traces from older
 
\noun on
Matlab
\noun default
 formatted objects.
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
clearpage
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Bundling the database and dataset together
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename bundle-classes.eps
	display false
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Bundle-class-hierarchy"

\end_inset

Bundle class hierarchy.
\end_layout

\end_inset


\end_layout

\end_inset

Since dataset and database objects are related and work together for some
 operations, it is convenient to have another object that bundles them together.
 There are several analysis routines that start from the database, retrieve
 raw data traces and other related information from the dataset and create
 a result.
 For instance, matching neurons from one database to another requires first
 comparing the measurements to find match candidates, and then comparing
 raw traces to visually represent the match quality.
 
\end_layout

\begin_layout Standard
The top-level 
\family typewriter
dataset_db_bundle
\family default
 class in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Bundle-class-hierarchy"

\end_inset

 fulfills this purpose by bundling a 
\family typewriter
dataset
\family default
 with the raw database, 
\family typewriter
db
\family default
, created from it, and with the reduced database, 
\family typewriter
joined_db
\family default
, that contains a one-row-per-neuron representation.
 Although being a virtual class that cannot be instantiated, it contains
 general methods and prototype methods that must be implemented in subclasses.
 This way, it provides guidelines for defining subclasses.
 Its two subclasses provide specialize methods for model and physiology
 databases, respectively.
\end_layout

\begin_layout Description

\family typewriter
model_ct_bundle
\family default
 Contains methods to name and visualize neurons in the model database.
 It has methods to compare real neurons to model neurons to find best matching
 candidates.
 
\end_layout

\begin_layout Description

\family typewriter
physiol_bundle
\family default
 Contains methods to name and visualize neurons in the physiology database.
 It contains a new attribute, 
\family typewriter
joined_control_db
\family default
, that holds only the neurons recorded without any pharmacological treatments.
\end_layout

\begin_layout Standard
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
put bundles here, and in recipes
\end_layout

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
clearpage
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Wrapper classes hold raw data
\end_layout

\begin_layout Standard
Wrapper classes are designed to hold data and provide simple methods that
 operate on them.
 They can either hold raw data, or intermediate processed forms of data
 being byproducts of analysis routines.
 In the overall schema of Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Database-overview"

\end_inset

, the raw traces obtained from the dataset object are kept in data wrapper
 objects.
 
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename data-wrapper-diagram.eps
	display false
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Datawrapper-class-hierarchy"

\end_inset

Data wrapper class hierarchy.
\end_layout

\end_inset


\end_layout

\end_inset

Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Datawrapper-class-hierarchy"

\end_inset

 shows the hierarchy for the data wrapper classes.
 The most basic data wrapper class in this toolbox is the 
\family typewriter
trace
\family default
 class, which holds raw voltage or current traces.
 The 
\family typewriter
spikes
\family default
 object contains the spike times obtained by analyzing a 
\family typewriter
trace
\family default
 object.
\end_layout

\begin_layout Standard
A data wrapper class does more than just holding the data.
 It defines a set of operations in terms of method functions that can work
 on the data held by the class.
 As a rule of thumb, if one needs to add some new functionality into the
 toolbox, it should be added as a method into a class holding the data on
 which to operate.
\end_layout

\begin_layout Standard
Some of the data wrapper classes are as follows:
\end_layout

\begin_layout Description

\family typewriter
trace
\family default
 Generic object that holds a vector of data that changes over time.
 It has a time resolution and y-axis resolution.
 Contains simple analysis routines such as finding average values within
 different periods, or finding spikes given a threshold.
\end_layout

\begin_layout Description

\family typewriter
cip_trace
\family default
 A subclass of 
\family typewriter
trace
\family default
 class for current-injection recording protocols.
 It defines an initial spontaneous period, followed by a current-injection
 period, and final recovery period.
 It contains period-specific analyses that apply to the experimental protocol.
\end_layout

\begin_layout Description

\family typewriter
spike_shape
\family default
 A subclass of 
\family typewriter
trace
\family default
 that holds the shape of a single spike.
 It contains spike shape measurements.
\end_layout

\begin_layout Description

\family typewriter
spikes
\family default
 A generic class to hold the event times for spikes.
 It contains methods for making measurements based on spike times, such
 as rate and ISI calculations.
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
clearpage
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Profiles hold results of measurements
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename Profile-classes.eps
	display false
	width 90text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Profile-class-hierarchy"

\end_inset

Profile class hierarchy.
\end_layout

\end_inset


\end_layout

\end_inset


\end_layout

\begin_layout Standard
Profile classes are designed to hold results of analysis and measurements
 on the data wrapper or database objects.
 The data and results are separated into different classes for added flexibility
 of saving data and results separately.
 Yet, the profiles normally keep a copy of the data wrapper object from
 which they obtained the measurements.
 The intention is to save the measurement results for possible visualization
 or later inspection, without having to repeat the analyses.
\end_layout

\begin_layout Standard
In Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Profile-class-hierarchy"

\end_inset

, the top-level 
\family typewriter
results_profile
\family default
 class contains a simple 
\noun on
Matlab
\noun default
 structure variable, 
\family typewriter
results
\family default
, that holds a set of name-value pairs.
 These are names of measurements and their corresponding values.
 Most of the subclasses are simplistic, and they exist only for organizational
 reasons.
 Some of them may implement specialized plotting methods that make use of
 the saved measurements.
 These subclasses can be briefly described as follows:
\end_layout

\begin_layout Description

\family typewriter
trace_profile
\family default
 Holds measurements from a 
\family typewriter
trace
\family default
 object.
 It contains the 
\family typewriter
trace
\family default
 object and the 
\family typewriter
spikes
\family default
 found in it, and averaged 
\family typewriter
spike_shape
\family default
 object.
\end_layout

\begin_layout Description

\family typewriter
cip_trace_profile
\family default
 Holds measurements from a 
\family typewriter
cip_trace
\family default
 object with a current-injection period.
 It contains the original 
\family typewriter
cip_trace
\family default
 object and the 
\family typewriter
spikes
\family default
 found in it.
 In addition, it holds averaged 
\family typewriter
spike_shape
\family default
 objects from the spontaneous and current-injection periods.
\end_layout

\begin_layout Description

\family typewriter
cip_trace_allspikes_profile
\family default
 Extended version of 
\family typewriter
cip_trace_profile
\family default
.
 Instead of single averaged spike shapes, it contains spike databases from
 the spontaneous, current-injection and recovery periods.
 These databases only retain measurements made from individual spikes, but
 not their shapes.
\end_layout

\begin_layout Description

\family typewriter
spike_shape_profile
\family default
 Holds measurements made from a 
\family typewriter
spike_shape
\family default
 object.
\end_layout

\begin_layout Description

\family typewriter
params_tests_profile
\family default
 Holds analysis results from a 
\family typewriter
params_tests_db
\family default
 object.
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
clearpage
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Integrated plotting for easy visualization
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename plot-classes.eps
	display false
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Plot-class-hierarchy"

\end_inset

Plot classes hierarchy.
\end_layout

\end_inset


\end_layout

\end_inset

To integrate visualization into each class, common 
\noun on
Matlab
\noun default
 plotting features are implemented in the supporting classes seen in Figure
 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Plot-class-hierarchy"

\end_inset

.
 These bring an object-oriented approach to plot generation in 
\noun on
Matlab
\noun default
.
 Plots can be generated as objects, saved, modified and included as subplots
 in larger plots.
 
\end_layout

\begin_layout Standard
The main plotting classes are 
\family typewriter
plot_abstract
\family default
, 
\family typewriter
plot_superpose
\family default
, and 
\family typewriter
plot_stack
\family default
.
 The most general plotting template class, and the top-level class in the
 hierarchy, is 
\family typewriter
plot_abstract
\family default
, which plots an axis using a single 
\noun on
Matlab
\noun default
 command, like 
\family typewriter
plot
\family default
 or 
\family typewriter
bar
\family default
.
 Multiple 
\family typewriter
plot_abstract
\family default
 objects that use the same command can be superposed and still act as a
 single 
\family typewriter
plot_abstract
\family default
 object.
 If they require different plotting commands (e.g., mixing 
\family typewriter
plot
\family default
 and 
\family typewriter
text
\family default
 labels), a 
\family typewriter
plot_superpose
\family default
 object must be used that is composed of an array of 
\family typewriter
plot_abstract
\family default
 objects.
 Multiple 
\family typewriter
plot_abstract
\family default
 objects or any of the subclass objects can be composed together in a horizontal
 or vertical stack using the 
\family typewriter
plot_stack
\family default
 class.
 Since 
\family typewriter
plot_stack
\family default
 is itself a subclass of 
\family typewriter
plot_abstract
\family default
, it can be stacked as well.
 This allows creating virtually any complex structured figure using the
 three classes.
 Each of these classes have several properties that control the layout and
 details of placement and looks.
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
use an example figure here? or point to one later?
\end_layout

\end_inset


\end_layout

\begin_layout Standard
The rest of the classes in the hierarchy create typical types of plots for
 convenience:
\end_layout

\begin_layout Description

\family typewriter
plot_bars
\family default
 Multi-axis bar plot with extending errorbars using a combination of the
 
\family typewriter
bar
\family default
, 
\family typewriter
errorbar
\family default
, and 
\family typewriter
text
\family default
 commands.
\end_layout

\begin_layout Description

\family typewriter
plot_errorbar
\family default
 Single-axis errorbar plot using the 
\family typewriter
errorbar
\family default
 command.
\end_layout

\begin_layout Description

\family typewriter
plot_errorbars
\family default
 Multi-axis errorbar plot using the 
\family typewriter
errorbar
\family default
 command.
\end_layout

\begin_layout Description

\family typewriter
plot_simple
\family default
 Simplified single-axis, single command plot.
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
clearpage
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Miscellaneous classes
\end_layout

\begin_layout Standard
These are miscellaneous classes that do not fit into any of the above categories
:
\end_layout

\begin_layout Description

\family typewriter
period
\family default
 Defines a period composed of a start and end time for operations on traces,
 etc.
\end_layout

\begin_layout Description

\family typewriter
script_array
\family default
 Defines a looping construct that can be extended.
 It defines an initialization routine, a job that needs to be repeated,
 and a finalization routine.
\end_layout

\begin_layout Description

\family typewriter
script_array_for_cluster
\family default
 Subclass of 
\family typewriter
script_array
\family default
, it can submit the array job to run in parallel on a computing cluster
 that supports the Sun Grid Engine (SGE) commands.
\end_layout

\begin_layout Description

\family typewriter
script_factory
\family default
 Factory class to generate an enumerated array of script files to be distributed
 on several machines and run in parallel.
 It also defines a final function to gather results.
 It is recommended to use 
\family typewriter
script_array_for_cluster
\family default
 instead.
\end_layout

\begin_layout Section
Programming Conventions
\end_layout

\begin_layout Subsection
Using property structures for passing optional arguments to methods
\end_layout

\begin_layout Standard
For flexibility in passing optional arguments to methods, this toolbox adopted
 using property structures.
 A 
\noun on
Matlab
\noun default
 structure, mostly called 
\family typewriter
props
\family default
, is passed to a method as the last argument:
\end_layout

\begin_layout LyX-Code
>> props.optionalParam = 1
\end_layout

\begin_layout LyX-Code
>> myFunc('hello', props)
\end_layout

\begin_layout Standard
Each method defines a list of accepted arguments that can be defined as
 fields in the structure, but should be able to execute without them by
 substituting defaults.
 Using a property structure is advantageous over using the 
\family typewriter
varargin
\family default
 keyword for variable number of arguments, because properties allow adding
 and deleting arguments in methods without causing changes to the contents
 of the method.
 Since arguments are addressed by names rather than positional arguments,
 missing arguments do not affect the other arguments.
\end_layout

\begin_layout Standard
Most objects keep a property structure that define custom attributes passed
 at time of construction.
 These classes define a 
\family typewriter
setProp
\family default
 method to modify properties after being created.
\end_layout

\begin_layout Subsection
Overloaded operators for transparent access to object contents
\end_layout

\begin_layout Standard
The simplistic implementation of object-oriented programming features in
 Matlab impose several strict limitations.
 
\noun on
Matlab
\noun default
's powerful and flexible operator overloading feature helps overcome these
 limitations.
\end_layout

\begin_layout Standard
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
appname{}
\end_layout

\end_inset


\noun on
 
\noun default
uses
\noun on
 Matlab 
\noun default
operator overloading to facilitate manipulation of local and parent object
 fields.
 In 
\noun on
Matlab
\noun default
, object fields can only be accessed from the object's private methods.
 This means one cannot access the object fields using the dot operator.
 To give an example, the 
\family typewriter
trace
\family default
 object has a 
\family typewriter
dt
\family default
 field for time resolution.
 The following command fails:
\end_layout

\begin_layout LyX-Code
>> mytrace.dt = 1e-4;
\end_layout

\begin_layout LyX-Code
??? Object fields can only be accessed within methods.
\end_layout

\begin_layout Standard
Everytime object contents need to be addressed, a method must be called.
 The recommended way to do this is by defining separate getter/setter methods
 for each field of the object.
 For instance, writing 
\family typewriter
getDt
\family default
 and 
\family typewriter
setDt
\family default
 methods for accessing the 
\family typewriter
dt
\family default
 field.
 This creates a lot of burden for the programmer not just creating a class,
 but also maintaining it later.
 Although this probably was intended for strictness in building object-oriented
 constructs, it is highly inconvenient for command-line manipulations.
 Therefore our toolbox objects offer generic 
\family typewriter
get
\family default
 and 
\family typewriter
set
\family default
 methods that can read or write the value of any of its fields:
\end_layout

\begin_layout LyX-Code
>> mytrace = set(mytrace, 'dt', 1e-4)
\end_layout

\begin_layout LyX-Code
>> get(mytrace, 'dt')
\end_layout

\begin_layout LyX-Code
ans = 1e-04
\end_layout

\begin_layout Standard
These methods are almost identical across different classes.
 In addition to this, defining the special 
\family typewriter
subsref
\family default
 method for objects allow overloading the dot (
\family typewriter
.
\family default
), parenthesis (
\family typewriter
()
\family default
), and curly brace (
\family typewriter
{}
\family default
) operators.
 Most
\begin_inset Foot
status collapsed

\begin_layout Plain Layout
May not be implemented for all objects.
\end_layout

\end_inset

 of the objects in the toolbox allows using the dot operator to read or
 write to fields.
 Overloading these operators also help with the limitation of accessing
 parent object fields, a problem not found in other object-oriented languages
 such as 
\noun on
Java
\noun default
.
 For example without any overloading, from the subclass class 
\family typewriter
cip_trace
\family default
 one needs to first address the parent class name, and then 
\family typewriter
dt
\family default
: 
\end_layout

\begin_layout LyX-Code
>> myciptrace.trace.dt
\end_layout

\begin_layout LyX-Code
ans = 1e-4
\end_layout

\begin_layout Standard
After defining the overloaded operator that call parent methods, one get
 reach 
\family typewriter
dt
\family default
 directly:
\end_layout

\begin_layout LyX-Code
>> myciptrace.dt
\end_layout

\begin_layout LyX-Code
ans = 1e-4
\end_layout

\begin_layout Standard
Some classes overload indexing operators to allow accessing special functions.
 For instance the main database class, 
\family typewriter
tests_db
\family default
, overloads parenthesized indexing to access cells in the database matrix.
 Some classes define the special 
\family typewriter
subsasgn
\family default
 method to overload the assignment operations when the object is on the
 left-hand-side of the operation.
 This allows the command: 
\end_layout

\begin_layout LyX-Code
>> mytrace.dt = 1e-4;
\end_layout

\begin_layout Standard
which would otherwise need to be done the following way:
\end_layout

\begin_layout LyX-Code
>> mytrace = set(mytrace, 'dt', 1e-4);
\end_layout

\begin_layout Subsection
Troubleshooting errors
\end_layout

\begin_layout Standard
For debugging problems with methods, one can turn on the verbosity of informatio
n display during execution with:
\end_layout

\begin_layout LyX-Code
>> warning on verbose
\end_layout

\begin_layout LyX-Code
>> warning on backtrace
\end_layout

\begin_layout Subsection
Creating a new class
\end_layout

\begin_layout Standard
To get the benefit of overloading, the top-level class must have the generic
 
\family typewriter
subsref
\family default
 and 
\family typewriter
subsasgn
\family default
 methods.
 These methods can be copied from any of the other top-level classes.
 Any subclasses should have the generic 
\family typewriter
get
\family default
 and 
\family typewriter
set
\family default
 methods in place.
 
\end_layout

\begin_layout Part
User's Manual
\end_layout

\begin_layout Section
Recipes for Common Tasks
\begin_inset CommandInset label
LatexCommand label
name "sec:Recipes"

\end_inset


\end_layout

\begin_layout Subsection
Loading a database
\end_layout

\begin_layout Standard
A database can be created directly from a data matrix, or indirectly by
 loading a dataset.
 For the latter, first a dataset object must be created that point to the
 data sources.
 There are different dataset classes that allow using different data sources.
 For instance, physiology and simulation data require different operations.
 In physiology data, one can record information about the treatments and
 other conditions, whereas in simulations one can keep track of changing
 parameters.
 
\end_layout

\begin_layout Standard
Once the dataset object is obtained, the database object can be created
 with 
\end_layout

\begin_layout LyX-Code
>> mydb = params_tests_db(dataset)
\end_layout

\begin_layout Standard
which initiates the loading of files.
 This operation is the same no matter what type of dataset or fileset object
 is used.
 The following commands reduce the verbosity of output during this long
 process:
\end_layout

\begin_layout LyX-Code
>> warning off verbose
\end_layout

\begin_layout LyX-Code
>> warning off backtrace
\end_layout

\begin_layout LyX-Code
>> warning off calcInitVm:info
\end_layout

\begin_layout Subsubsection
Creating a dataset for physiology data
\begin_inset CommandInset label
LatexCommand label
name "sub:loading-phys"

\end_inset


\end_layout

\begin_layout Standard
Physiology data can be obtained from multiple sources.
 
\end_layout

\begin_layout Paragraph
Loading data by specifying tracesets in a text file
\end_layout

\begin_layout Standard
The preferred way to load physiology traces is to first create a text file
 where each line specifies traces to load from a single data source (e.g.,
 a PCDX file).
 The format of this text file is explained in the help of the 
\family typewriter
physiol_cip_traceset_fileset
\family default
 class.
 The physiology fileset can be created from the text file with a command
 such as follows:
\end_layout

\begin_layout LyX-Code
>> phys_fileset = 
\end_layout

\begin_layout LyX-Code
     physiol_cip_traceset_fileset('cell_traces.txt', 1e-4, 1e-3,
\end_layout

\begin_layout LyX-Code
                                  struct('profile_method_name', 
\end_layout

\begin_layout LyX-Code
                                         'getProfileAllSpikes',
\end_layout

\begin_layout LyX-Code
                                         'offset_y', -9,
\end_layout

\begin_layout LyX-Code
                                         'cip_list', 
\end_layout

\begin_layout LyX-Code
                                         [-200 -100:20:100 200 300]))
\end_layout

\begin_layout Standard
This command reads the 
\family typewriter
cell_traces.txt
\family default
 file and records the tracesets to read from each file.
 The structure passed indicates to use the 
\family typewriter
getProfileAllSpikes
\family default
 method to calculate the measurements on the traces.
\end_layout

\begin_layout Standard
The fileset can then be used to generate the database, as shown above, using
 its 
\family typewriter
params_tests_db
\family default
 method.
 The fileset object holds within, a separate 
\family typewriter
physiol_cip_traceset
\family default
 object for each line in the text file.
 
\end_layout

\begin_layout Standard
The 
\family typewriter
cip_list
\family default
 optional parameter must be used with caution.
 To determine actual CIP-levels, the current channel of the trace is analyzed.
 
\family typewriter
cip_list
\family default
 entries are used to discretize the noisy current channel.
 Current levels will coerce to the nearest entry from 
\family typewriter
cip_list
\family default
.
 In the above example, all current levels below 
\begin_inset Formula $-200$
\end_inset


\begin_inset space ~
\end_inset

pA will be assumed to be 
\begin_inset Formula $-200$
\end_inset


\begin_inset space ~
\end_inset

pA.
 The default 
\family typewriter
cip_list
\family default
 resides in the 
\family typewriter
physiol_cip_traceset/CIPform
\family default
 method.
\end_layout

\begin_layout Paragraph
Loading data from existing 
\family typewriter
cip_traces
\family default
 objects
\end_layout

\begin_layout Standard
The now obsolete 
\family typewriter
cip_traces
\family default
 Matlab objects have been used to hold some earlier physiological data.
 Each object holds a set of traces with varying CIP levels applied to the
 cell.
 The following command creates a dataset object from a cell array 
\family typewriter
ct_list
\family default
 of 
\family typewriter
cip_traces
\family default
 objects by choosing only the traces with 
\begin_inset Formula $100$
\end_inset


\begin_inset space ~
\end_inset

pA and 
\begin_inset Formula $-100$
\end_inset


\begin_inset space ~
\end_inset

pA CIP levels
\end_layout

\begin_layout LyX-Code
>> phys_dataset = 
\end_layout

\begin_layout LyX-Code
  cip_traceset_dataset(ct_list, [100, -100], 1e-3, 
\end_layout

\begin_layout LyX-Code
                       'dataset gpd 0411-21', 
\end_layout

\begin_layout LyX-Code
                       struct('offsetPotential', -9)
\end_layout

\begin_layout Subsubsection
Creating a dataset for simulation data
\end_layout

\begin_layout Standard
First a dataset or a fileset must be created.
 An example to load 
\noun on
Genesis
\noun default
 
\family typewriter
.bin
\family default
 files would be
\end_layout

\begin_layout LyX-Code
>> fileset = 
\end_layout

\begin_layout LyX-Code
  params_cip_trace_fileset('/home/cengiz/data/*.bin', 
\end_layout

\begin_layout LyX-Code
                           1e-4, 1e-3, 
\end_layout

\begin_layout LyX-Code
                           20001, 10000, 
\end_layout

\begin_layout LyX-Code
                           'sim dataset gpsc0501', 
\end_layout

\begin_layout LyX-Code
                           struct('trace_time_start', 10001, 
\end_layout

\begin_layout LyX-Code
                                  'type', 'sim',  
\end_layout

\begin_layout LyX-Code
                                  'scale_y', 1e3))
\end_layout

\begin_layout Standard
The explanation of arguments can be obtained by issuing a 
\end_layout

\begin_layout LyX-Code
>> help params_cip_trace_fileset
\end_layout

\begin_layout Standard
in 
\noun on
Matlab
\noun default
.
\begin_inset Note Note
status collapsed

\begin_layout Plain Layout
Point to reference manual at the end of this manual.
 You know, the automatically generated one.
\end_layout

\end_inset

 In this example, all 
\noun on
Genesis
\noun default
 files were created with the same characteristics: 
\begin_inset Formula $\mathrm{d}t=10^{-4}$
\end_inset

, 
\begin_inset Formula $\mathrm{d}V=10^{-3}$
\end_inset

, pulse during samples 
\begin_inset Formula $[20001,30000]$
\end_inset

.
 Optional properties (the last argument) indicates that the first 
\begin_inset Formula $10000$
\end_inset

 samples should be discarded and that the data should be prescaled to yield
 the 
\begin_inset Formula $\mathrm{d}V$
\end_inset

 indicated.
 Note that, using an absolute path to refer to data files ensures that they
 can be reached from different directories after the fileset object is saved.
 
\end_layout

\begin_layout Paragraph
Loading heterogeneous set of simulation files
\end_layout

\begin_layout Standard
Sometimes not all data files in a simulation set would have the same length,
 or CIP start time.
 The brute-force simulation set is such an example, where the spontaneous
 trace and different CIP level traces are in different files.
 I have a special superclass that contains multiple fileset objects to automatic
ally handle this kind of data.
 It resides not in the general distribution directory, but in my personal
 directory 
\family typewriter
/djlab/shared/matlab/classes/cengiz
\family default
.
 This class is an example of how to create composite fileset objects.
 An instance of this class can be created with:
\end_layout

\begin_layout LyX-Code
>> m_filesetall = 
\end_layout

\begin_layout LyX-Code
     multi_fileset_gpsim_cns2005('.../data', '.../paramRanges.txt', 
\end_layout

\begin_layout LyX-Code
                                 '.../all_0.par', 'sim db gpsc0502')
\end_layout

\begin_layout Standard
which will find all the files in the given directory and put them in separate
 pre-defined fileset objects according to their 
\family typewriter
_pAcip_
\family default
 suffixes.
 Parameter range definition and value files are used to read parameter values
 for each simulation.
 A single database object can be loaded using the 
\family typewriter
params_tests_db
\family default
 method on the 
\family typewriter
m_filesetall
\family default
 object above.
 The help on this method explains how to load only certain filesets at a
 time.
 This helps to load different filesets in parallel, since databases can
 be concatanated easily afterwards.
\end_layout

\begin_layout Subsection
Finding constrained subsets in a database
\end_layout

\begin_layout Standard
Once a database with more-than-sufficient number of measures is available,
 subsets of this database can be extracted easily for other tasks.
 New databases can be formed by filtering rows, columns or pages of an existing
 database.
 For choosing any of these dimensions, the user can specify an array of
 indices, or a logical array.
 For instance, 
\end_layout

\begin_layout LyX-Code
>> db2 = db1(1:10, :);
\end_layout

\begin_layout Standard
creates a database object 
\family typewriter
db2
\family default
 by the first ten rows of 
\family typewriter
db1
\family default
 and all its columns.
 For three-dimensional databases, a third parameter can be specified, as
 in 
\end_layout

\begin_layout LyX-Code
>> db2 = db1(1:10, :, [1 3]);
\end_layout

\begin_layout Standard
which will take only the first and third page from 
\family typewriter
db1
\family default
.
\end_layout

\begin_layout Standard
For measures, columns can also be specified as a single string value, or
 a cell array of strings, as in 
\end_layout

\begin_layout LyX-Code
>> db2 = db1(1:10, 'pAcip');
\end_layout

\begin_layout Standard
which chooses only the 
\family typewriter
pAcip
\family default
 column of the first 10 rows of 
\family typewriter
db1
\family default
 or 
\end_layout

\begin_layout LyX-Code
>> db2 = db1(1:10, {'pAcip', 'IniSpontSpikeRate'});
\end_layout

\begin_layout Standard
which chooses two columns.
 Finally, composite queries can be formed when cell arrays are used for
 addressing:
\end_layout

\begin_layout LyX-Code
>> db2 = db1(1:10, {1:10, 'IniSpontSpikeRate', 234});
\end_layout

\begin_layout Standard
which will select the first ten measures, the spontaneous spike rate, and
 the measure number 234.
\end_layout

\begin_layout Standard
Rows of the database signify neurons or simulation runs.
 Therefore it is important to find subset of neurons that match a certain
 criteria.
 This can be done specifying a list of rows that is the result of a logical
 operation.
 A logical operation finds rows that satisfy constraints on a single parameter
 or measure of a database.
 For instance, 
\end_layout

\begin_layout LyX-Code
>> rows = db1(:, 'IniSpontSpikeRate') > 10;
\end_layout

\begin_layout Standard
gives a logical array that contains a 
\family typewriter
true
\family default
 value for all rows in 
\family typewriter
db1
\family default
 that has spontaneous firing faster than 10 Hz.
 If this is used as the row specifier in a subset operation, a new database
 with only these neurons can be obtained by 
\end_layout

\begin_layout LyX-Code
>> db2 = db1(rows, :);
\end_layout

\begin_layout Standard
If we want more constrains it is straightforward to use any logical operation
 such as AND (
\family typewriter
&
\family default
), OR (
\family typewriter
|
\family default
) and NOT(
\family typewriter
~
\family default
) on these logical arrays such as 
\end_layout

\begin_layout LyX-Code
>> db2 = db1((rows | rows2) & rows3, :);
\end_layout

\begin_layout Standard
which says choose all rows from 
\family typewriter
db1
\family default
 where either the tests 
\family typewriter
rows
\family default
 and 
\family typewriter
rows2
\family default
 are satisfied and while 
\family typewriter
rows3
\family default
 is always satisfied.
 All these operations can be specified in-place such as in 
\end_layout

\begin_layout LyX-Code
>> db2 = db1(db1(:, 'IniSpontSpikeRate') > 10 & 
\end_layout

\begin_layout LyX-Code
             db1(:, 'IniSpontSpikeRate') <= 20, :);
\end_layout

\begin_layout Standard
which will create a database of neurons that spontaneously fire between
 10--20 Hz.
\end_layout

\begin_layout Subsubsection
Complex Queries
\end_layout

\begin_layout Standard
Complex queries can be constructed using results of queries in nested fashion.
 The following example shows an example of finding all neurons that match
 any of the neurons in another database and then find the ones that match
 certain criteria:
\end_layout

\begin_layout LyX-Code
>> sub_phys_es2 = phys_joined_db(phys_joined_db(:, 'NeuronId') == es2(:,
 'NeuronId'), :); 
\end_layout

\begin_layout LyX-Code
>> displayRows(sub_phys_es2(sub_phys_es2(:, 'Apamin') > 0, 'NeuronId'))
\end_layout

\begin_layout Standard
Here, the first query returns all rows that match the 
\family typewriter
NeuronId
\family default
s from the 
\family typewriter
es3
\family default
 database.
 The inner term in the second query finds among these neurons the ones for
 which apamin blocker data is present.
 The final enclosing block uses these rows to get a subset of the 
\family typewriter
phys_joined_db
\family default
 with only the 
\family typewriter
NeuronId
\family default
 column.
 This type query has equivalent computational power to using nested SELECT
 statements in the SQL language.
\end_layout

\begin_layout Subsection
Sorting the database according to a measure
\begin_inset CommandInset label
LatexCommand label
name "sub:Sorting-the-database"

\end_inset


\end_layout

\begin_layout Standard
First, all rows where the desired measure value is 
\family typewriter
NaN
\family default
 should be eliminated:
\end_layout

\begin_layout LyX-Code
>> ampDecayTau_nonNaN_db = 
\end_layout

\begin_layout LyX-Code
     dball(~isnan(dball(:, 'PulseSpikeAmpDecayTau')), :)
\end_layout

\begin_layout Standard
This finds all rows in 
\family typewriter
dball
\family default
 that the 
\family typewriter
PulseSpikeAmpDecayTau
\family default
 measure is not 
\family typewriter
NaN
\family default
 and creates a new DB object 
\family typewriter
ampDecayTau_nonNaN_db
\family default
, which includes these rows with all measures from 
\family typewriter
dball
\family default
.
 Notice that the newly created DB contains less rows than the original DB.
 The number of rows in the new DB can be obtained by just typing the name
 of the DB and pressing enter at the 
\noun on
Matlab
\noun default
 prompt.
\end_layout

\begin_layout Standard
Then, one can sort the new database using:
\end_layout

\begin_layout LyX-Code
>> ampDecayTau_sorted_db = sortrows(ampDecayTau_nonNaN_db, 
\end_layout

\begin_layout LyX-Code
                                    'PulseSpikeAmpDecayTau') 
\end_layout

\begin_layout Standard
This will create DB which is sorted with increasing values of the 
\family typewriter
PulseSpikeAmpDecayTau
\family default
 measure.
 Displaying the first few rows gives lowest values:
\end_layout

\begin_layout LyX-Code
>> displayRows(ampDecayTau_sorted_db, 1:3)
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    'NaF'                    [      1000]    [     250]    [     250]
\end_layout

\begin_layout LyX-Code
    'NaP'                    [    0.5000]    [  0.5000]    [  2.5000]
\end_layout

\begin_layout LyX-Code
    'Kv3'                    [        60]    [      15]    [      30]
\end_layout

\begin_layout LyX-Code
    'Kv2'                    [         9]    [       3]    [       3]
\end_layout

\begin_layout LyX-Code
    'Kv4f'                   [         5]    [       1]    [      25]
\end_layout

\begin_layout LyX-Code
    'KCNQ'                   [    0.1000]    [  0.0100]    [  0.1000]
\end_layout

\begin_layout LyX-Code
    'SK'                     [    8.5000]    [      34]    [  8.5000]
\end_layout

\begin_layout LyX-Code
    'CaHVA'                  [        10]    [  0.1000]    [      10]
\end_layout

\begin_layout LyX-Code
    'HCN'                    [        30]    [  0.3000]    [      30]
\end_layout

\begin_layout LyX-Code
    'pAcip'                  [       100]    [     100]    [     100]
\end_layout

\begin_layout LyX-Code
    'IniSpontISICV'          [3.9448e-04]    [  0.0051]    [  0.0452]
\end_layout

\begin_layout LyX-Code
    'IniSpontPotAvg'         [  -64.9161]    [-52.6859]    [-41.5876]
\end_layout

\begin_layout LyX-Code
    'IniSpontSpikeRate'      [   14.0014]    [ 18.0018]    [ 81.0081]
\end_layout

\begin_layout LyX-Code
    'PulseISICV'             [    0.0226]    [       0]    [  0.0366]
\end_layout

\begin_layout LyX-Code
    'PulseIni100msISICV'     [    0.0541]    [       0]    [  0.0814]
\end_layout

\begin_layout LyX-Code
              [1x27 char]    [   28.8953]    [       0]    [ 88.9086]
\end_layout

\begin_layout LyX-Code
              [1x27 char]    [   26.6785]    [       0]    [ 86.7052]
\end_layout

\begin_layout LyX-Code
              [1x22 char]    [        30]    [      20]    [     100]
\end_layout

\begin_layout LyX-Code
              [1x25 char]    [   29.4118]    [166.6667]    [ 96.0512]
\end_layout

\begin_layout LyX-Code
    'PulsePotAvg'            [  -61.0044]    [-32.7775]    [-34.1518]
\end_layout

\begin_layout LyX-Code
    'PulsePotMin'            [       NaN]    [     NaN]    [     NaN]
\end_layout

\begin_layout LyX-Code
    'PulsePotSag'            [       NaN]    [     NaN]    [     NaN]
\end_layout

\begin_layout LyX-Code
    'PulseSFA'               [    1.1254]    [     NaN]    [  1.3571]
\end_layout

\begin_layout LyX-Code
    'PulseSpikeAmpDecayDelta'[    4.2764]    [  9.2041]    [ 17.8389]
\end_layout

\begin_layout LyX-Code
    'PulseSpikeAmpDecayTau'  [    0.2000]    [  0.2000]    [  0.3000]
\end_layout

\begin_layout LyX-Code
    'PulseSpikeRate'         [   28.0028]    [  2.0002]    [ 89.0089]
\end_layout

\begin_layout LyX-Code
...
\end_layout

\begin_layout Standard
Displaying the last few rows gives the highest values:
\end_layout

\begin_layout LyX-Code
>> displayRows(ampDecayTau_sorted_db, 13879:13881)
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    'NaF'                    [     250]    [     250]    [      1000]
\end_layout

\begin_layout LyX-Code
    'NaP'                    [  2.5000]    [  2.5000]    [    2.5000]
\end_layout

\begin_layout LyX-Code
    'Kv3'                    [      15]    [      15]    [        60]
\end_layout

\begin_layout LyX-Code
    'Kv2'                    [       3]    [       3]    [         9]
\end_layout

\begin_layout LyX-Code
    'Kv4f'                   [       5]    [       5]    [        25]
\end_layout

\begin_layout LyX-Code
    'KCNQ'                   [  0.1000]    [  0.1000]    [    0.0100]
\end_layout

\begin_layout LyX-Code
    'SK'                     [  8.5000]    [  8.5000]    [        17]
\end_layout

\begin_layout LyX-Code
    'CaHVA'                  [      10]    [      10]    [        10]
\end_layout

\begin_layout LyX-Code
    'HCN'                    [      30]    [       3]    [        30]
\end_layout

\begin_layout LyX-Code
    'pAcip'                  [    -100]    [    -100]    [       100]
\end_layout

\begin_layout LyX-Code
    'IniSpontISICV'          [  0.0027]    [  0.0027]    [9.1376e-04]
\end_layout

\begin_layout LyX-Code
    'IniSpontPotAvg'         [-28.5685]    [-28.5687]    [  -67.7567]
\end_layout

\begin_layout LyX-Code
    'IniSpontSpikeRate'      [ 69.0069]    [ 69.0069]    [   14.0014]
\end_layout

\begin_layout LyX-Code
    'PulseISICV'             [  0.0046]    [  0.0046]    [    0.0091]
\end_layout

\begin_layout LyX-Code
    'PulseIni100msISICV'     [  0.0080]    [  0.0080]    [         0]
\end_layout

\begin_layout LyX-Code
              [1x27 char]    [ 71.1269]    [ 71.1269]    [   24.4499]
\end_layout

\begin_layout LyX-Code
              [1x27 char]    [ 71.1427]    [ 71.1427]    [   26.6785]
\end_layout

\begin_layout LyX-Code
              [1x22 char]    [      80]    [      80]    [        20]
\end_layout

\begin_layout LyX-Code
              [1x25 char]    [ 70.6357]    [ 70.6357]    [   25.4453]
\end_layout

\begin_layout LyX-Code
    'PulsePotAvg'            [-30.1705]    [-30.1718]    [  -65.2721]
\end_layout

\begin_layout LyX-Code
    'PulsePotMin'            [     NaN]    [     NaN]    [       NaN]
\end_layout

\begin_layout LyX-Code
    'PulsePotSag'            [     NaN]    [     NaN]    [       NaN]
\end_layout

\begin_layout LyX-Code
    'PulseSFA'               [  0.9792]    [  0.9792]    [    1.0407]
\end_layout

\begin_layout LyX-Code
    'PulseSpikeAmpDecayDelta'[ -1.2791]    [ -1.2868]    [    1.2201]
\end_layout

\begin_layout LyX-Code
    'PulseSpikeAmpDecayTau'  [999.6000]    [999.6000]    [      1000]
\end_layout

\begin_layout LyX-Code
    'PulseSpikeRate'         [ 72.0072]    [ 72.0072]    [   25.0025]
\end_layout

\begin_layout LyX-Code
...
\end_layout

\begin_layout Subsection
Preprocessing a raw (physiology) database by elimination and averaging 
\begin_inset OptArg
status collapsed

\begin_layout Plain Layout
Preprocessing a raw (physiology) database
\end_layout

\end_inset


\end_layout

\begin_layout Standard
Mostly, raw physiology databases are subject to redundancies and unwanted
 recordings.
 We usually apply the following steps before we start analyzing a raw physiology
 database.
 Similar steps may be employed for simulation databases, too.
\end_layout

\begin_layout Subsubsection
Limiting range of bias currents
\end_layout

\begin_layout Standard
Recordings with high bias current are undesirable.
 We commonly filter-out high bias currents with:
\end_layout

\begin_layout LyX-Code
>> db_bias_small = 
\end_layout

\begin_layout LyX-Code
     phys_dball(phys_dball(:, 'pAbias') > -30 & 
\end_layout

\begin_layout LyX-Code
                phys_dball(:, 'pAbias') < 30, :)
\end_layout

\begin_layout Standard
which will limit the bias current, 
\begin_inset Formula $i_{b}$
\end_inset

, to 
\begin_inset Formula $-30\,\mathrm{pA}<i_{b}<30\,\mathrm{pA}$
\end_inset

.
 
\end_layout

\begin_layout Subsubsection
Choosing few current levels
\end_layout

\begin_layout Standard
To get a profile for a neuron, usually both hyperpolarizing and depolarizing
 CIP-levels need to be included.
 Moreover, to capture the spiking frequency vs.
 current response of the neuron, multiple depolarizing CIP-level information
 may need to be included.
 
\end_layout

\begin_layout Standard
There are two counterparts to selecting which CIP-levels to include in a
 DB.
 First, one can select what CIP-levels are available in the raw data and
 what discretization levels should be used while loading the database.
 This is done with the 
\family typewriter
cip_list
\family default
 optional parameter described in Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:loading-phys"

\end_inset

.
 GP recordings prior to mid-2005 have current channel data which are too
 noisy to be quantized to levels of 10 pA.
 Instead, at least a step size of 20 pA needs to be used.
 Later recordings have both better recordings, and feature 20 pA steps in
 the experimental protocol anyway.
 
\end_layout

\begin_layout Standard
Second, after the database is loaded, one can filter-out unwanted CIP-level
 traces:
\end_layout

\begin_layout LyX-Code
>> phys_dball_limitedcip = 
\end_layout

\begin_layout LyX-Code
     phys_dball_big(phys_dball_big(:, 'pAcip') == -100 | 
\end_layout

\begin_layout LyX-Code
                    phys_dball_big(:, 'pAcip') == 0 | 
\end_layout

\begin_layout LyX-Code
                    phys_dball_big(:, 'pAcip') == 50 | 
\end_layout

\begin_layout LyX-Code
                    phys_dball_big(:, 'pAcip') == 100 | 
\end_layout

\begin_layout LyX-Code
                    phys_dball_big(:, 'pAcip') == 200, :)
\end_layout

\begin_layout Standard
This operation can be simplified to take advantage of complex query form:
\end_layout

\begin_layout LyX-Code
>> phys_dball_limitedcip = 
\end_layout

\begin_layout LyX-Code
     phys_dball_big(phys_dball_big(:, 'pAcip') == [-100; 0; 50; 100; 200])
 
\end_layout

\begin_layout Standard
which will choose rows with current levels matching any of the given values.
\end_layout

\begin_layout Subsubsection
Adding new columns calculated from existing measures
\end_layout

\begin_layout Standard
Some measures can be deduced from measures collected from raw data.
 These do not need to be calculated at time of loading the raw data, but
 rather can be added to the database later.
 Some measures must be added later because they may be composed of measurements
 from multiple traces or averages.
 Here is an example for adding a new measure:
\end_layout

\begin_layout LyX-Code
>> phys_db_limitedcip_addedcols = 
\end_layout

\begin_layout LyX-Code
     addColumn(phys_db_limitedcip, 'PulsePotSagDivMin', 
\end_layout

\begin_layout LyX-Code
               phys_db_limitedcip(:, 'PulsePotSag').data ./ 
\end_layout

\begin_layout LyX-Code
               phys_db_limitedcip(:, 'PulsePotMin').data)
\end_layout

\begin_layout Subsubsection
Averaging multiple traces of same neuron with same CIP-level and (pharmacologica
l) parameters 
\begin_inset OptArg
status collapsed

\begin_layout Plain Layout
Averaging multiple traces of same neuron
\end_layout

\end_inset


\end_layout

\begin_layout Standard
In making a one-row-per-CIP-level database, it is essential to include all
 available information from the raw database.
 Especially in physiology datasets, there may be multiple traces of a neuron
 where the same CIP-level and the same pharmacological conditions were applied.
 These rows can be averaged to obtain a single row for each CIP-level of
 a neuron.
\end_layout

\begin_layout Standard
Before doing this, the parameters of the raw database should only include
 parameters that uniquely distinguish neurons.
 The averaging operation tries to find each distinct set of parameters and
 then averages all rows that has this combination.
 For example, the 
\family typewriter
NeuronId
\family default
 and 
\family typewriter
pAcip
\family default
 parameters need to be distinct.
 However, the 
\family typewriter
pAbias
\family default
 parameter does not need to be distinct for each neuron.
 The non-unique parameters need to be filtered-out before the averaging
 process.
 The following shows all the parameters of a raw physiology database:
\end_layout

\begin_layout LyX-Code
>> phys_db
\end_layout

\begin_layout LyX-Code
params_tests_db, tracesets from .../cip_traces_all_axoclamp.txt
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    num_params: 16
\end_layout

\begin_layout LyX-Code
         props: [0x0 struct]
\end_layout

\begin_layout LyX-Code
      tests_db: [1x1 tests_db]
\end_layout

\begin_layout LyX-Code
Optional properties of params_tests_db:
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
0x0 struct array with no fields.
\end_layout

\begin_layout LyX-Code
tests_db, tracesets from .../cip_traces_all_axoclamp.txt
\end_layout

\begin_layout LyX-Code
1527 rows in database with 182 columns, and 1 pages.
\end_layout

\begin_layout LyX-Code
Column names:
\end_layout

\begin_layout LyX-Code
    [  1]    'pulseOn'                    
\end_layout

\begin_layout LyX-Code
    [  2]    'pulseOff'                   
\end_layout

\begin_layout LyX-Code
    [  3]    'traceEnd'                   
\end_layout

\begin_layout LyX-Code
    [  4]    'pAcip'                      
\end_layout

\begin_layout LyX-Code
    [  5]    'pAbias'                     
\end_layout

\begin_layout LyX-Code
    [  6]    'Cadmium'                    
\end_layout

\begin_layout LyX-Code
    [  7]    'PicroTx'                    
\end_layout

\begin_layout LyX-Code
    [  8]    'Apamin'                     
\end_layout

\begin_layout LyX-Code
    [  9]    'Glycine'                    
\end_layout

\begin_layout LyX-Code
    [ 10]    'KynAcid'                    
\end_layout

\begin_layout LyX-Code
    [ 11]    'TTX'                        
\end_layout

\begin_layout LyX-Code
    [ 12]    'XE991'                      
\end_layout

\begin_layout LyX-Code
    [ 13]    'drug_4AP'                   
\end_layout

\begin_layout LyX-Code
    [ 14]    'EBIO'                       
\end_layout

\begin_layout LyX-Code
    [ 15]    'NeuronId'                   
\end_layout

\begin_layout LyX-Code
    [ 16]    'TracesetIndex'            
\end_layout

\begin_layout LyX-Code
...
\end_layout

\begin_layout Standard
One can choose which parameters need to be distinct for each row by specifying
 as the second argument in the call to the 
\family typewriter
meanDuplicateRows
\family default
 method, whereas the third argument specifies the measures to be averaged:
\end_layout

\begin_layout LyX-Code
>> phys_mean_db = meanDuplicateRows(phys_db, [4 6:15], [17:161])
\end_layout

\begin_layout LyX-Code
params_tests_db, averaged tracesets from .../cip_traces_all.txt
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    num_params: 13
\end_layout

\begin_layout LyX-Code
         props: [0x0 struct]
\end_layout

\begin_layout LyX-Code
      tests_db: [1x1 tests_db]
\end_layout

\begin_layout LyX-Code
Optional properties of params_tests_db:
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
0x0 struct array with no fields.
\end_layout

\begin_layout LyX-Code
tests_db, averaged tracesets from .../cip_traces_all.txt
\end_layout

\begin_layout LyX-Code
690 rows in database with 158 columns, and 1 pages.
\end_layout

\begin_layout LyX-Code
Column names:
\end_layout

\begin_layout LyX-Code
    [  1]    'pAcip'                      
\end_layout

\begin_layout LyX-Code
    [  2]    'Cadmium'                    
\end_layout

\begin_layout LyX-Code
    [  3]    'PicroTx'                    
\end_layout

\begin_layout LyX-Code
    [  4]    'Apamin'                     
\end_layout

\begin_layout LyX-Code
    [  5]    'Glycine'                    
\end_layout

\begin_layout LyX-Code
    [  6]    'KynAcid'                    
\end_layout

\begin_layout LyX-Code
    [  7]    'TTX'                        
\end_layout

\begin_layout LyX-Code
    [  8]    'XE991'                      
\end_layout

\begin_layout LyX-Code
    [  9]    'drug_4AP'                   
\end_layout

\begin_layout LyX-Code
    [ 10]    'EBIO'                       
\end_layout

\begin_layout LyX-Code
    [ 11]    'NeuronId'                   
\end_layout

\begin_layout LyX-Code
    [ 12]    'NumDuplicates'              
\end_layout

\begin_layout LyX-Code
    [ 13]    'RowIndex'                   
\end_layout

\begin_layout LyX-Code
    [ 14]    'IniSpontISICV'    
\end_layout

\begin_layout LyX-Code
...
\end_layout

\begin_layout Standard
This command ignores the pulse time information and the bias current, but
 includes all the pharmacological parameters, in distinguising the unique
 traces.
 It also eliminates some measures, such as the 
\family typewriter
ItemIndex
\family default
, from averaging.
\end_layout

\begin_layout Subsection
Making a database by merging multiple rows from another database
\end_layout

\begin_layout Standard
A simple example for making a new database out of multiple rows in an existing
 database is combining multiple traces from the same neuron with different
 current pulse injection (CIP) levels.
 The initial database contains a row for each CIP level with redundant informati
on, such as spontaneous period measurements.
 
\end_layout

\begin_layout Subsubsection
Making a one-row-per-neuron DB from multiple CIP-level rows
\end_layout

\begin_layout Standard
Measures of same cell obtained with multiple CIP-levels can be merged to
 make a single row.
 Note that, different pharmacological conditions applied to one cell must
 be kept in a different rows.
 The following command selects measures from each of the 
\begin_inset Formula $\{-100,0,40,100,200\}$
\end_inset

 CIP levels to be included in the merged database:
\end_layout

\begin_layout LyX-Code
>> phys_joined_db = 
\end_layout

\begin_layout LyX-Code
     mergeMultipleCIPsInOne(phys_mean_db(:, [1:13 16:180]), 
\end_layout

\begin_layout LyX-Code
                            {'_H100pA', 13 + [5:14 19:24 (119 + spike_tests)
 165],
\end_layout

\begin_layout LyX-Code
                             '_0pA', 13 + [1:4 (27 + spike_tests)], 
\end_layout

\begin_layout LyX-Code
                             '_D40pA', 13 + [5:11 19:24 (73 + spike_tests)
 165],
\end_layout

\begin_layout LyX-Code
                             '_D100pA', 13 + [5:11 14:16 19:24 (73 + spike_tests
) 
\end_layout

\begin_layout LyX-Code
                                              (119 + spike_tests) 165],
 
\end_layout

\begin_layout LyX-Code
                             '_D200pA', 13 + [5:11 19:24 (73 + spike_tests)
 165]},
\end_layout

\begin_layout LyX-Code
                            'RowIndex_D200pA')
\end_layout

\begin_layout Standard
This command operates on the previously averaged database, 
\family typewriter
phys_mean_db
\family default
, where each CIP level only occurs once for each distinct pharmacological
 setting for each neuron.
 Note that, we filter-out columns 14 and 15 from the averaged DB while supplying
 the first argument to 
\family typewriter
mergeMultipleCIPsInOne
\family default
, which are artifacts of the averaging process and need not be included
 in the merged database.
 The second argument is a cell array of pairs of a suffix string and a correspon
ding list of measures for each of the CIP levels in 
\family typewriter
phys_mean_db
\family default
, in increasing order.
 The merged 
\family typewriter
phys_joined_db
\family default
 looks like this:
\end_layout

\begin_layout LyX-Code
params_tests_db, averaged tracesets from .../cip_traces_all_axoclamp.txt mult
 CIP
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    num_params: 12
\end_layout

\begin_layout LyX-Code
      tests_db: [1x1 tests_db]
\end_layout

\begin_layout LyX-Code
tests_db, averaged tracesets from .../cip_traces_all_axoclamp.txt mult CIP
\end_layout

\begin_layout LyX-Code
179 rows in database with 258 columns, and 1 pages.
\end_layout

\begin_layout LyX-Code
Column names:
\end_layout

\begin_layout LyX-Code
    [  1]    'Cadmium'                           
\end_layout

\begin_layout LyX-Code
    [  2]    'PicroTx'                           
\end_layout

\begin_layout LyX-Code
    [  3]    'Apamin'                            
\end_layout

\begin_layout LyX-Code
    [  4]    'Glycine'                           
\end_layout

\begin_layout LyX-Code
    [  5]    'KynAcid'                           
\end_layout

\begin_layout LyX-Code
    [  6]    'TTX'                               
\end_layout

\begin_layout LyX-Code
    [  7]    'XE991'                             
\end_layout

\begin_layout LyX-Code
    [  8]    'drug_4AP'                          
\end_layout

\begin_layout LyX-Code
    [  9]    'EBIO'                              
\end_layout

\begin_layout LyX-Code
    [ 10]    'Gabazine'                          
\end_layout

\begin_layout LyX-Code
    [ 11]    'NeuronId'                          
\end_layout

\begin_layout LyX-Code
    [ 12]    'TracesetIndex'                     
\end_layout

\begin_layout LyX-Code
    [ 13]    'PulseISICV_H100pA'                 
\end_layout

\begin_layout LyX-Code
    [ 14]    'PulseIni100msISICV_H100pA'         
\end_layout

\begin_layout LyX-Code
    [ 15]    'PulseIni100msRest1SpikeRate_H100pA'
\end_layout

\begin_layout LyX-Code
    [ 16]    'PulseIni100msRest2SpikeRate_H100pA'
\end_layout

\begin_layout LyX-Code
    [ 17]    'PulseIni100msSpikeRate_H100pA'     
\end_layout

\begin_layout LyX-Code
    [ 18]    'PulseIni100msSpikeRateISI_H100pA'  
\end_layout

\begin_layout LyX-Code
    ...
\end_layout

\begin_layout LyX-Code
    [255]    'PulseSpikeRiseTimeMean_D200pA'     
\end_layout

\begin_layout LyX-Code
    [256]    'PulseSpikeRiseTimeMode_D200pA'     
\end_layout

\begin_layout LyX-Code
    [257]    'PulseSpikeRiseTimeSTD_D200pA'      
\end_layout

\begin_layout LyX-Code
    [258]    'PulseSpontAmpRatio_D200pA'         
\end_layout

\begin_layout Standard
Note how each measure suffix indicate the CIP-level it belongs.
\end_layout

\begin_layout Subsubsection
Making a one-row-per-neuron DB from dual CIP-level rows
\end_layout

\begin_layout Standard
The following statement uses the 
\family typewriter
params_tests_db/getDualCIPdb
\family default
 method to merge rows of depolarizing and hyperpolarizing CIP-levels:
\end_layout

\begin_layout LyX-Code
>> sdball = getDualCIPdb(dball, depol_tests, hyper_tests, 
\end_layout

\begin_layout LyX-Code
                         '', 'Hyp100pA')
\end_layout

\begin_layout Standard
Here, the cell array variables 
\family typewriter
depol_tests
\family default
 and 
\family typewriter
hyper_tests
\family default
 hold the names of measures to be selected from depolarizing CIP and hyperpolari
zing CIP, respectively.
 The last two arguments define the suffixes to be applied to distinguish
 the measures from each CIP.
 The original DB is 
\end_layout

\begin_layout LyX-Code
>> dball
\end_layout

\begin_layout LyX-Code
dball
\end_layout

\begin_layout LyX-Code
params_tests_db, sim dataset gpsc0501
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    num_params: 10
\end_layout

\begin_layout LyX-Code
         props: [0x0 struct]
\end_layout

\begin_layout LyX-Code
      tests_db: [1x1 tests_db]
\end_layout

\begin_layout LyX-Code
Optional properties of params_tests_db:
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
0x0 struct array with no fields.
\end_layout

\begin_layout LyX-Code
tests_db, sim dataset gpsc0501
\end_layout

\begin_layout LyX-Code
39366 rows in database with 62 columns, and 1 pages.
\end_layout

\begin_layout LyX-Code
Column names:
\end_layout

\begin_layout LyX-Code
    [ 1]    'NaF'                        
\end_layout

\begin_layout LyX-Code
    [ 2]    'NaP'                        
\end_layout

\begin_layout LyX-Code
    [ 3]    'Kv3'                        
\end_layout

\begin_layout LyX-Code
    [ 4]    'Kv2'                        
\end_layout

\begin_layout LyX-Code
    [ 5]    'Kv4f'                       
\end_layout

\begin_layout LyX-Code
    [ 6]    'KCNQ'                       
\end_layout

\begin_layout LyX-Code
    [ 7]    'SK'                         
\end_layout

\begin_layout LyX-Code
    [ 8]    'CaHVA'                      
\end_layout

\begin_layout LyX-Code
    [ 9]    'HCN'                        
\end_layout

\begin_layout LyX-Code
    [10]    'pAcip'                      
\end_layout

\begin_layout LyX-Code
    [11]    'IniSpontISICV'              
\end_layout

\begin_layout LyX-Code
    [12]    'IniSpontPotAvg'             
\end_layout

\begin_layout LyX-Code
    [13]    'IniSpontSpikeRate'          
\end_layout

\begin_layout LyX-Code
    [14]    'PulseISICV'                 
\end_layout

\begin_layout LyX-Code
    [15]    'PulseIni100msISICV'         
\end_layout

\begin_layout LyX-Code
    [16]    'PulseIni100msRest1SpikeRate'
\end_layout

\begin_layout LyX-Code
    [17]    'PulseIni100msRest2SpikeRate'
\end_layout

\begin_layout LyX-Code
    [18]    'PulseIni100msSpikeRate'     
\end_layout

\begin_layout LyX-Code
    [19]    'PulseIni100msSpikeRateISI'  
\end_layout

\begin_layout LyX-Code
    [20]    'PulsePotAvg'                
\end_layout

\begin_layout LyX-Code
    [21]    'PulsePotMin'                
\end_layout

\begin_layout LyX-Code
    [22]    'PulsePotSag'                
\end_layout

\begin_layout LyX-Code
    [23]    'PulseSFA'                   
\end_layout

\begin_layout LyX-Code
    [24]    'PulseSpikeAmpDecayDelta'    
\end_layout

\begin_layout LyX-Code
    [25]    'PulseSpikeAmpDecayTau'      
\end_layout

\begin_layout LyX-Code
    [26]    'PulseSpikeRate'             
\end_layout

\begin_layout LyX-Code
    [27]    'PulseSpikeRateISI'          
\end_layout

\begin_layout LyX-Code
    [28]    'RecIniSpontPotRatio'        
\end_layout

\begin_layout LyX-Code
    [29]    'RecIniSpontRateRatio'       
\end_layout

\begin_layout LyX-Code
    [30]    'RecSpont1SpikeRate'         
\end_layout

\begin_layout LyX-Code
    [31]    'RecSpont2SpikeRate'         
\end_layout

\begin_layout LyX-Code
    [32]    'RecSpontISICV'              
\end_layout

\begin_layout LyX-Code
    [33]    'RecSpontPotAvg'             
\end_layout

\begin_layout LyX-Code
    [34]    'RecSpontSpikeRate'          
\end_layout

\begin_layout LyX-Code
    [35]    'SpontAmplitude'             
\end_layout

\begin_layout LyX-Code
    [36]    'SpontBaseWidth'             
\end_layout

\begin_layout LyX-Code
    [37]    'SpontDAHPMag'               
\end_layout

\begin_layout LyX-Code
    [38]    'SpontFallTime'              
\end_layout

\begin_layout LyX-Code
    [39]    'SpontHalfVm'                
\end_layout

\begin_layout LyX-Code
    [40]    'SpontHalfWidth'             
\end_layout

\begin_layout LyX-Code
    [41]    'SpontInitTime'              
\end_layout

\begin_layout LyX-Code
    [42]    'SpontInitVm'                
\end_layout

\begin_layout LyX-Code
    [43]    'SpontMaxAHP'                
\end_layout

\begin_layout LyX-Code
    [44]    'SpontMinTime'               
\end_layout

\begin_layout LyX-Code
    [45]    'SpontMinVm'                 
\end_layout

\begin_layout LyX-Code
    [46]    'SpontPeakVm'                
\end_layout

\begin_layout LyX-Code
    [47]    'SpontRiseTime'              
\end_layout

\begin_layout LyX-Code
    [48]    'PulseAmplitude'             
\end_layout

\begin_layout LyX-Code
    [49]    'PulseBaseWidth'             
\end_layout

\begin_layout LyX-Code
    [50]    'PulseDAHPMag'               
\end_layout

\begin_layout LyX-Code
    [51]    'PulseFallTime'              
\end_layout

\begin_layout LyX-Code
    [52]    'PulseHalfVm'                
\end_layout

\begin_layout LyX-Code
    [53]    'PulseHalfWidth'             
\end_layout

\begin_layout LyX-Code
    [54]    'PulseInitTime'              
\end_layout

\begin_layout LyX-Code
    [55]    'PulseInitVm'                
\end_layout

\begin_layout LyX-Code
    [56]    'PulseMaxAHP'                
\end_layout

\begin_layout LyX-Code
    [57]    'PulseMinTime'               
\end_layout

\begin_layout LyX-Code
    [58]    'PulseMinVm'                 
\end_layout

\begin_layout LyX-Code
    [59]    'PulsePeakVm'                
\end_layout

\begin_layout LyX-Code
    [60]    'PulseRiseTime'              
\end_layout

\begin_layout LyX-Code
    [61]    'PulseSpontAmpRatio'         
\end_layout

\begin_layout LyX-Code
    [62]    'ItemIndex'                  
\end_layout

\begin_layout LyX-Code
Optional properties of tests_db:
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
0x0 struct array with no fields.
\end_layout

\begin_layout Standard
After merging, it becomes 
\end_layout

\begin_layout LyX-Code
>> sdball
\end_layout

\begin_layout LyX-Code
sdball
\end_layout

\begin_layout LyX-Code
params_tests_db, sim dataset gpsc0501 dual cip
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    num_params: 9
\end_layout

\begin_layout LyX-Code
         props: [0x0 struct]
\end_layout

\begin_layout LyX-Code
      tests_db: [1x1 tests_db]
\end_layout

\begin_layout LyX-Code
Optional properties of params_tests_db:
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
0x0 struct array with no fields.
\end_layout

\begin_layout LyX-Code
tests_db, sim dataset gpsc0501 dual cip
\end_layout

\begin_layout LyX-Code
19683 rows in database with 50 columns, and 1 pages.
\end_layout

\begin_layout LyX-Code
Column names:
\end_layout

\begin_layout LyX-Code
    [ 1]    'NaF'                         
\end_layout

\begin_layout LyX-Code
    [ 2]    'NaP'                         
\end_layout

\begin_layout LyX-Code
    [ 3]    'Kv3'                         
\end_layout

\begin_layout LyX-Code
    [ 4]    'Kv2'                         
\end_layout

\begin_layout LyX-Code
    [ 5]    'Kv4f'                        
\end_layout

\begin_layout LyX-Code
    [ 6]    'KCNQ'                        
\end_layout

\begin_layout LyX-Code
    [ 7]    'SK'                          
\end_layout

\begin_layout LyX-Code
    [ 8]    'CaHVA'                       
\end_layout

\begin_layout LyX-Code
    [ 9]    'HCN'                         
\end_layout

\begin_layout LyX-Code
    [10]    'RecIniSpontPotRatioHyp100pA' 
\end_layout

\begin_layout LyX-Code
    [11]    'RecIniSpontRateRatioHyp100pA'
\end_layout

\begin_layout LyX-Code
    [12]    'RecSpont1SpikeRateHyp100pA'  
\end_layout

\begin_layout LyX-Code
    [13]    'RecSpont2SpikeRateHyp100pA'  
\end_layout

\begin_layout LyX-Code
    [14]    'RecSpontISICVHyp100pA'       
\end_layout

\begin_layout LyX-Code
    [15]    'RecSpontPotAvgHyp100pA'      
\end_layout

\begin_layout LyX-Code
    [16]    'ItemIndexHyp100pA'           
\end_layout

\begin_layout LyX-Code
    [17]    'IniSpontSpikeRate'           
\end_layout

\begin_layout LyX-Code
    [18]    'PulseIni100msSpikeRate'      
\end_layout

\begin_layout LyX-Code
    [19]    'PulseIni100msSpikeRateISI'   
\end_layout

\begin_layout LyX-Code
    [20]    'PulseIni100msISICV'          
\end_layout

\begin_layout LyX-Code
    [21]    'PulseIni100msRest1SpikeRate' 
\end_layout

\begin_layout LyX-Code
    [22]    'PulseIni100msRest2SpikeRate' 
\end_layout

\begin_layout LyX-Code
    [23]    'RecSpont1SpikeRate'          
\end_layout

\begin_layout LyX-Code
    [24]    'RecSpont2SpikeRate'          
\end_layout

\begin_layout LyX-Code
    [25]    'RecIniSpontRateRatio'        
\end_layout

\begin_layout LyX-Code
    [26]    'IniSpontISICV'               
\end_layout

\begin_layout LyX-Code
    [27]    'PulseISICV'                  
\end_layout

\begin_layout LyX-Code
    [28]    'RecSpontISICV'               
\end_layout

\begin_layout LyX-Code
    [29]    'PulseSFA'                    
\end_layout

\begin_layout LyX-Code
    [30]    'PulseSpikeAmpDecayTau'       
\end_layout

\begin_layout LyX-Code
    [31]    'PulseSpikeAmpDecayDelta'     
\end_layout

\begin_layout LyX-Code
    [32]    'IniSpontPotAvg'              
\end_layout

\begin_layout LyX-Code
    [33]    'PulsePotAvg'                 
\end_layout

\begin_layout LyX-Code
    [34]    'RecSpontPotAvg'              
\end_layout

\begin_layout LyX-Code
    [35]    'RecIniSpontPotRatio'         
\end_layout

\begin_layout LyX-Code
    [36]    'SpontInitVm'                 
\end_layout

\begin_layout LyX-Code
    [37]    'SpontAmplitude'              
\end_layout

\begin_layout LyX-Code
    [38]    'SpontMaxAHP'                 
\end_layout

\begin_layout LyX-Code
    [39]    'SpontDAHPMag'                
\end_layout

\begin_layout LyX-Code
    [40]    'SpontRiseTime'               
\end_layout

\begin_layout LyX-Code
    [41]    'SpontFallTime'               
\end_layout

\begin_layout LyX-Code
    [42]    'SpontHalfWidth'              
\end_layout

\begin_layout LyX-Code
    [43]    'PulseInitVm'                 
\end_layout

\begin_layout LyX-Code
    [44]    'PulseAmplitude'              
\end_layout

\begin_layout LyX-Code
    [45]    'PulseMaxAHP'                 
\end_layout

\begin_layout LyX-Code
    [46]    'PulseDAHPMag'                
\end_layout

\begin_layout LyX-Code
    [47]    'PulseRiseTime'               
\end_layout

\begin_layout LyX-Code
    [48]    'PulseFallTime'               
\end_layout

\begin_layout LyX-Code
    [49]    'PulseHalfWidth'              
\end_layout

\begin_layout LyX-Code
    [50]    'ItemIndex'                   
\end_layout

\begin_layout LyX-Code
Optional properties of tests_db:
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
0x0 struct array with no fields.
\end_layout

\begin_layout Section
Visualization
\begin_inset CommandInset label
LatexCommand label
name "sec:Visualization"

\end_inset


\end_layout

\begin_layout Standard
By default, 
\noun on
Matlab
\noun default
 prints figures in portrait orientation with a 8x6 aspect ratio, ignoring
 their size on the screen.
 The command; 
\end_layout

\begin_layout LyX-Code
>> orient tall
\end_layout

\begin_layout Standard
changes that behavior to print a full page in portrait orientation.
 The command;
\end_layout

\begin_layout LyX-Code
>> orient landscape
\end_layout

\begin_layout Standard
does the same but rotates the figure to landscape orientation.
 If you want the printed figure to reflect its current screen size, issue
 the command;
\end_layout

\begin_layout LyX-Code
>> set(figurenum, 'PaperPositionMode', 'auto')
\end_layout

\begin_layout Standard
Figures generated by the plotting system of the 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
appname{}
\end_layout

\end_inset

 has a special resizing capability.
 Everytime the figure is resized, it will be drawn from scratch after calculatin
g proper spacing between subplots according to font size.
 However, in some conditions this may cause other problems, such as crashing
 
\noun on
Matlab
\noun default
 in figure editing mode or causing loss of manual changes to the figure.
 To disable the auto-resize function, issue the following command after
 creating the figure;
\end_layout

\begin_layout LyX-Code
>> set(figurenum, 'ResizeFcn', '')
\end_layout

\begin_layout Standard
Finally, to print the figure, consult your Matlab manual or issue a command
 such as;
\end_layout

\begin_layout LyX-Code
>> print -depsc2 figurename.eps
\end_layout

\begin_layout Standard
See below for specific types of figures you can create.
\end_layout

\begin_layout Subsection
Visualizing traces
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename cip_trace_plot_compact.eps
	display false
	width 50text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:cip_trace"

\end_inset

Example trace plot.
\end_layout

\end_inset


\end_layout

\end_inset

The 
\family typewriter
trace,
\family default
 and its subclasses such as 
\family typewriter
cip_trace
\family default
, has the plot command overloaded to draw the raw trace in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:cip_trace"

\end_inset

:
\end_layout

\begin_layout LyX-Code
>> a_ct = ctFromRows(mbundle, 9842, 100);
\end_layout

\begin_layout LyX-Code
>> plot(a_ct)
\end_layout

\begin_layout Standard
Note that the plot in the figure has been created with a more precise control:
\end_layout

\begin_layout LyX-Code
>> plotFigure(plotData(a_ct, '', struct('PaperPosition', [0 0 3 2])))
\end_layout

\begin_layout Subsection
Displaying database contents
\end_layout

\begin_layout Standard
The 
\family typewriter
displayRows
\family default
 method of 
\family typewriter
tests_db
\family default
 can be used to display rows of a database:
\end_layout

\begin_layout LyX-Code
>> displayRows(sdball, 1:3)
\end_layout

\begin_layout LyX-Code
ans = 
\end_layout

\begin_layout LyX-Code
    'NaF'                    [     250]    [     250]    [      1000]
\end_layout

\begin_layout LyX-Code
    'NaP'                    [  2.5000]    [  2.5000]    [    2.5000]
\end_layout

\begin_layout LyX-Code
    'Kv3'                    [      15]    [      15]    [        60]
\end_layout

\begin_layout LyX-Code
    'Kv2'                    [       3]    [       3]    [         9]
\end_layout

\begin_layout LyX-Code
    'Kv4f'                   [       5]    [       5]    [        25]
\end_layout

\begin_layout LyX-Code
    'KCNQ'                   [  0.1000]    [  0.1000]    [    0.0100]
\end_layout

\begin_layout LyX-Code
    'SK'                     [  8.5000]    [  8.5000]    [        17]
\end_layout

\begin_layout LyX-Code
    'CaHVA'                  [      10]    [      10]    [        10]
\end_layout

\begin_layout LyX-Code
    'HCN'                    [      30]    [       3]    [        30]
\end_layout

\begin_layout LyX-Code
    'pAcip'                  [    -100]    [    -100]    [       100]
\end_layout

\begin_layout LyX-Code
    'IniSpontISICV'          [  0.0027]    [  0.0027]    [9.1376e-04]
\end_layout

\begin_layout LyX-Code
...
\end_layout

\begin_layout Standard
Note that, in the output, database rows appear as columns, and database
 columns appear as rows.
 See in above Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:Sorting-the-database"

\end_inset

 for more example outputs from 
\family typewriter
displayRows
\family default
.
\end_layout

\begin_layout Standard

\family typewriter
displayRows
\family default
 returns a cell array of column names justapoxed to a matrix of values.
 This cell array is intended for display on the screen and for generating
 reports.
 The 
\family typewriter
displayRowsTeX
\family default
 method uses output from 
\family typewriter
displayRows
\family default
 to generate a LaTeX table that can be printed or converted to PDF:
\end_layout

\begin_layout LyX-Code
>> tex_string = 
\end_layout

\begin_layout LyX-Code
     displayRowsTeX(a_db(:, rows), 
\end_layout

\begin_layout LyX-Code
                    'Selected rows indicating fast spiking neurons',
\end_layout

\begin_layout LyX-Code
                    struct('height', '!'));
\end_layout

\begin_layout LyX-Code
>> string2File(tex_string, 'fast_spiking.tex');
\end_layout

\begin_layout Standard
With this the LaTeX code to generate a table with the given caption is saved
 in a text file called 
\family typewriter
fast_spiking.tex
\family default
.
 This file can then be included from a regular LaTeX document to generate
 PDF output.
 See a LaTeX manual on how to do that.
\end_layout

\begin_layout Standard
An alternative to 
\family typewriter
displayRows
\family default
 is using the 
\family typewriter
tests_db/rows2Struct
\family default
 method:
\end_layout

\begin_layout LyX-Code
>> s = rows2Struct(dball_full, 54023)
\end_layout

\begin_layout LyX-Code
s = 
\end_layout

\begin_layout LyX-Code
                            NaF: 500
\end_layout

\begin_layout LyX-Code
                            NaP: 2
\end_layout

\begin_layout LyX-Code
                            Kv2: 1
\end_layout

\begin_layout LyX-Code
                            Kv3: 10
\end_layout

\begin_layout LyX-Code
                           Kv4f: 40
\end_layout

\begin_layout LyX-Code
                           KCNQ: 2
\end_layout

\begin_layout LyX-Code
                             SK: 4
\end_layout

\begin_layout LyX-Code
                          CaHVA: 0.0300
\end_layout

\begin_layout LyX-Code
                            HCN: 1
\end_layout

\begin_layout LyX-Code
                          trial: 7739
\end_layout

\begin_layout LyX-Code
                          pAcip: 100
\end_layout

\begin_layout LyX-Code
                  IniSpontISICV: NaN
\end_layout

\begin_layout LyX-Code
                 IniSpontPotAvg: NaN
\end_layout

\begin_layout LyX-Code
              IniSpontSpikeRate: 0
\end_layout

\begin_layout LyX-Code
           IniSpontSpikeRateISI: 0
\end_layout

\begin_layout LyX-Code
                     PulseISICV: 0.0265
\end_layout

\begin_layout LyX-Code
             PulseIni100msISICV: 0.0584
\end_layout

\begin_layout LyX-Code
    PulseIni100msRest1SpikeRate: 40.0089
\end_layout

\begin_layout LyX-Code
    PulseIni100msRest2SpikeRate: 40.0178
\end_layout

\begin_layout LyX-Code
         PulseIni100msSpikeRate: 50
\end_layout

\begin_layout LyX-Code
      PulseIni100msSpikeRateISI: 43.5256
\end_layout

\begin_layout LyX-Code
                    PulsePotAvg: -57.3737
\end_layout

\begin_layout LyX-Code
                    PulsePotMin: NaN
\end_layout

\begin_layout LyX-Code
                    PulsePotSag: NaN
\end_layout

\begin_layout LyX-Code
                       PulseSFA: 1.1698
\end_layout

\begin_layout LyX-Code
...
\end_layout

\begin_layout Standard
This method returns the database contents as a structure array.
 It is more natural for programming interfaces to use the database contents
 in a structure array than a cell array.
 The database columns become field names in the the structure.
 If multiple rows are requested, the displayed output would not contain
 the values.
 The desired row can be reached via indexing (e.g., 
\family typewriter
s(1)
\family default
).
 For instance, analysis in 
\family typewriter
cip_trace/getProfileAllSpikes
\family default
 method is done using this method for getting statistics from the 
\family typewriter
spikes_db
\family default
 databases.
\end_layout

\begin_layout Subsection
Plotting all measure histograms
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename tests_db_plot_tests.eps
	display false
	width 120text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:tests_hists"

\end_inset

Example measure distribution plot.
\end_layout

\end_inset


\end_layout

\end_inset

For plotting all measure histograms in a DB, the following method of 
\family typewriter
tests_db
\family default
 creates the horizontal stack plot in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:tests_hists"

\end_inset

:
\end_layout

\begin_layout LyX-Code
>> mp = plotTestsHistsMatrix(renamed_model_db(:, 2:end), '', 
\end_layout

\begin_layout LyX-Code
                             struct('orient', 'x', 'quiet', 1, 'border',
 [0 0.05 0 0])))
\end_layout

\begin_layout LyX-Code
>> plotFigure(mp);
\end_layout

\begin_layout Subsection
Plotting all parameter histograms
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename params_tests_db_plot_param_hists.eps
	display false
	width 120text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:params_hists"

\end_inset

Example parameter distribution plot.
\end_layout

\end_inset


\end_layout

\end_inset

For plotting all parameter histograms in a DB, the following method of 
\family typewriter
params_tests_db
\family default
 creates the horizontal stack plot in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:params_hists"

\end_inset

:
\end_layout

\begin_layout LyX-Code
>> plotFigure(plotParamsHists(sdball));
\end_layout

\begin_layout Subsection
Plotting database statistics
\end_layout

\begin_layout Standard
The 
\family typewriter
stats_db
\family default
 object allows keeping statistical information obtained from a database.
 Statistics are calculated using one of the 
\family typewriter
tests_db
\family default
 converter methods, such as 
\family typewriter
statsAll
\family default
, 
\family typewriter
statsMeanStd
\family default
, etc.: 
\end_layout

\begin_layout LyX-Code
>> my_stats = statsMeanStd(my_db(:, {'IniSpontSpikeRate', 'PulseSpikeRate'}));
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
subfigure[
\end_layout

\end_inset

Default visualization for 
\family typewriter
stats_db
\family default
.
\begin_inset ERT
status collapsed

\begin_layout Plain Layout

]{
\end_layout

\end_inset


\begin_inset Graphics
	filename plot_stats_abstract.eps
	display false
	scale 50

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset

 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
subfigure[
\end_layout

\end_inset

Optional 
\family typewriter
plot_bars
\family default
 visualization for 
\family typewriter
stats_db
\family default
.
\begin_inset ERT
status collapsed

\begin_layout Plain Layout

]{
\end_layout

\end_inset


\begin_inset Graphics
	filename plot_stats_bars_single.eps
	display false
	scale 50

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout
\align center
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
subfigure[
\end_layout

\end_inset

Comparing multiple 
\family typewriter
stats_db
\family default
s with 
\family typewriter
plot_bars
\family default
.
\begin_inset ERT
status collapsed

\begin_layout Plain Layout

]{
\end_layout

\end_inset


\begin_inset Graphics
	filename plot_stats_bars_multi.eps
	display false
	scale 50

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset

 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
subfigure[
\end_layout

\end_inset

Plotting parameter-measure variation with 
\family typewriter
plotVar
\family default
.
\begin_inset ERT
status collapsed

\begin_layout Plain Layout

]{
\end_layout

\end_inset


\begin_inset Graphics
	filename plot_stats_Var.eps
	display false
	scale 50

\end_inset


\begin_inset ERT
status collapsed

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "figcap:Statistics-plots"

\end_inset

Plotting statistics for two selected measures.
\end_layout

\end_inset


\end_layout

\end_inset

Then, the statistics can be plotted with diamonds indicating the mean and
 symmetric errorbars indicating upper and lower extensions (SE or Std):
\end_layout

\begin_layout LyX-Code
>> plot(my_stats);
\end_layout

\begin_layout Standard
which is equivalent to:
\end_layout

\begin_layout LyX-Code
>> plotFigure(plot_abstract(my_stats));
\end_layout

\begin_layout Standard
An alternative plotting form is using filled bars with extending errorbars:
\end_layout

\begin_layout LyX-Code
>> plotFigure(plot_bars(my_stats));
\end_layout

\begin_layout Standard
which are both seen in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Statistics-plots"

\end_inset

 (a) and (b).
 The 
\family typewriter
plot_bars
\family default
 method is better suited for comparing statistics from multiple 
\family typewriter
stats_db
\family default
s coming from different sources.
 In this case, we take the first 1000 rows from the DB as a subset, and
 compare it with the statistics from the second 1000 rows:
\end_layout

\begin_layout LyX-Code
>> compared_two_subset_stats = 
\end_layout

\begin_layout LyX-Code
     compareStats(statsAll(mbundle.joined_db(1:1000, 
\end_layout

\begin_layout LyX-Code
                                             {'IniSpontSpikeRateISI_0pA',
\end_layout

\begin_layout LyX-Code
                                              'PulseIni100msSpikeRateISI_D100pA'
})), 
\end_layout

\begin_layout LyX-Code
                  statsAll(mbundle.joined_db(1001:2000, 
\end_layout

\begin_layout LyX-Code
                                             {'IniSpontSpikeRateISI_0pA',
\end_layout

\begin_layout LyX-Code
                                              'PulseIni100msSpikeRateISI_D100pA'
})))));
\end_layout

\begin_layout Standard
The combined statistics object can then be fed into 
\family typewriter
plot_bars
\family default
 as seen in Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Statistics-plots"

\end_inset

 (c):
\end_layout

\begin_layout LyX-Code
>> plotFigure(plot_bars(compared_two_subset_stats));
\end_layout

\begin_layout Subsection
Plotting parameter-measure variations
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename plotVarBoxMatrix_example.eps
	display false
	width 95col%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "cap:plot-varboxmatrix"

\end_inset

Example parameter-measure variation statistics plot.
\end_layout

\end_inset


\end_layout

\end_inset

To plot the variation of a measure with a parameter the 
\family typewriter
plotVar
\family default
 method of 
\family typewriter
stats_db
\family default
 can be used to achieve Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "figcap:Statistics-plots"

\end_inset

 (d):
\end_layout

\begin_layout LyX-Code
>> plotFigure(plotVar(a_stats_db, 'CaHVA', 'AHP_depth', 'AHP change with
 change in CaHVA', 
\end_layout

\begin_layout LyX-Code
                      struct('quiet', 1, 'PaperPosition', [0 0 3 3])))
\end_layout

\begin_layout Standard
To plot all parameter-measure variations, the 
\family typewriter
plotVarMatrix
\family default
 method of 
\family typewriter
stats_db
\family default
 can be used (see Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "cap:plot-varboxmatrix"

\end_inset

).
 
\family typewriter
plotVarMatrix
\family default
 requires the a 
\family typewriter
p_stats
\family default
 array of 
\family typewriter
stats_db
\family default
 objects that hold the mean and standard error information (or possibly
 other statistics) for each of the possible parameter-measure combinations.
 The 
\family typewriter
p_stats
\family default
 array can be created using the 
\family typewriter
paramsTestsHistsStats
\family default
 method, which in turn requires the 
\family typewriter
p_t3ds
\family default
 array of 3-dimensional databases each of which contain effects of a parameter
 invariant of other parameters.
 The 
\family typewriter
p_t3ds
\family default
 array can be created using the 
\family typewriter
params_tests_db/invarParams
\family default
 method.
 The sequence of commands
\begin_inset Foot
status open

\begin_layout Plain Layout
The 
\family typewriter
noNaNRows
\family default
 function is required to filter out any rows containing 
\family typewriter
NaN
\family default
 values in measurements before running statistic functions.
 Otherwise, the statistics functions (such as 
\family typewriter
mean
\family default
 and 
\family typewriter
std
\family default
) will eliminate 
\family typewriter
NaN
\family default
 values within each database column automatically, scrambling the row order
 and loosing the association with parameters.
\end_layout

\end_inset

 is then becomes:
\end_layout

\begin_layout LyX-Code
>> p_t3ds = invarParams(noNaNRows(sdball))
\end_layout

\begin_layout LyX-Code
>> [pt_hists, p_stats] = paramsTestsHistsStats(p_t3ds)
\end_layout

\begin_layout LyX-Code
>> ap = plotVarMatrix(p_stats)
\end_layout

\begin_layout LyX-Code
>> plotFigure(ap)
\end_layout

\begin_layout Standard
This will create a matrix plot with as many columns as parameters and as
 many rows as measures in the 
\family typewriter
sdball
\family default
 object.
 It may be difficult to read if 
\family typewriter
sdball
\family default
 contains large number of measures.
 One can divide the measures into two plots with the following sequence
 of commands
\end_layout

\begin_layout LyX-Code
>> sdb1 = sdball(:, [1:9, 10:35])
\end_layout

\begin_layout LyX-Code
>> sdb2 = sdball(:, [1:9, 36:49])
\end_layout

\begin_layout Standard
by choosing all parameters in both DBs, but only some measures for each.
 Then, the plots can be created for each DB by issuing
\end_layout

\begin_layout LyX-Code
>> p1_t3ds = invarParams(sdb1)
\end_layout

\begin_layout LyX-Code
>> p2_t3ds = invarParams(sdb2)
\end_layout

\begin_layout LyX-Code
>> [pt1_hists, p1_stats] = paramsTestsHistsStats(p1_t3ds)
\end_layout

\begin_layout LyX-Code
>> [pt2_hists, p2_stats] = paramsTestsHistsStats(p2_t3ds)
\end_layout

\begin_layout LyX-Code
>> ap1 = plotVarMatrix(p1_stats)
\end_layout

\begin_layout LyX-Code
>> plotFigure(ap1)
\end_layout

\begin_layout LyX-Code
>> ap2 = plotVarMatrix(p2_stats)
\end_layout

\begin_layout LyX-Code
>> plotFigure(ap2)
\end_layout

\begin_layout Subsection
Insets
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename plot_inset.eps
	display false
	width 50text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "fig:insets"

\end_inset

Creating insets in figures.
\end_layout

\end_inset


\end_layout

\end_inset

See Figure 
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:insets"

\end_inset

 which was created with the following set of commands.
\end_layout

\begin_layout LyX-Code
>> im_p = plot_abstract({50 * rand(5)}, {}, '', {}, 'image');
\end_layout

\begin_layout LyX-Code
>> plotFigure(plot_absolute([im_p, im_p], [0 0 1 1; 0.5 0.5 0.3 0.3])) 
\end_layout

\begin_layout Subsection
Generating a report comparing two databases
\end_layout

\begin_layout Standard
Most commonly a database of physiology neurons need to be compared to a
 database of a large body of simulation neurons and find best matches.
 One may need to see the match quality for a number of best matching candidates
 for each of the physiology neurons.
 Assuming multiple plots and tables are required to do a fair job of comparing
 a neuron to a thousands of simulation neurons, it becomes a difficult job
 to do this manually.
 An automatic report generation system has been built into the system for
 this purpose.
 
\end_layout

\begin_layout Standard
Currently a LaTeX document is created that needs to be included in either
 a proper LaTeX document, or included in a LyX document.
\begin_inset Foot
status collapsed

\begin_layout Plain Layout
This document is prepared using the LyX document preparation system 
\begin_inset CommandInset citation
LatexCommand citep
key "lyx-03"

\end_inset

 which uses the 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
LaTeXe{}
\end_layout

\end_inset

 typesetting language 
\begin_inset CommandInset citation
LatexCommand citep
key "lamport-94"

\end_inset

.
 LyX is copyrighted by Matthias Ettrich and covered by the terms of the
 GNU General Public License (GPL), and 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
LaTeXe{}
\end_layout

\end_inset

 is copyrighted by D.
\begin_inset space ~
\end_inset

E.
\begin_inset space ~
\end_inset

Knuth and the Free Software Foundation, Inc.
\begin_inset space ~
\end_inset

and is covered by both the TeX copyright and the GNU GPL.
\end_layout

\end_inset

 The including document should provide the context in which the included
 part becomes meaningful.
 The report contains a set of tables and figures with proper captions.
 The table of contents, list of figures and list of tables facilities of
 LaTeX becomes useful to make the automatically generated document eaisly
 readable.
 
\end_layout

\begin_layout Standard
The report can be created with the command
\end_layout

\begin_layout LyX-Code
>> tex_string = rankVsAllDB(sdb, phys_sdb, 
\end_layout

\begin_layout LyX-Code
                            fileset, phys_fileset);
\end_layout

\begin_layout Standard
where the simulation database 
\family typewriter
sdb
\family default
 is searched for best matches to each row of physiology database 
\family typewriter
phys_sdb
\family default
.
 The dataset for each is provided for the report to contain raw data associated
 with best matches.
 The obtained report contained in 
\family typewriter
tex_string
\family default
 can be saved as a ASCII LaTeX file with
\end_layout

\begin_layout LyX-Code
>> string2File(tex_string, 'myreport.tex');
\end_layout

\begin_layout Standard
\begin_inset CommandInset bibtex
LatexCommand bibtex
bibfiles "~/Documents/writings/refs/ref"
options "bibtotoc,plainnat"

\end_inset


\end_layout

\begin_layout Part*
\start_of_appendix
Appendices
\end_layout

\begin_layout Section
Function Reference
\begin_inset CommandInset label
LatexCommand label
name "sec:Function-Reference"

\end_inset


\end_layout

\begin_layout Standard
See Section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:Finding-your-way-around"

\end_inset

 on how to get online help about the software within 
\noun on
Matlab
\noun default
.
\end_layout

\begin_layout Standard
\begin_inset Note Comment
status collapsed

\begin_layout Plain Layout
[Supposed to have all class and method documentation automagically generated
 from matlab help files.]
\end_layout

\end_inset


\end_layout

\begin_layout Standard
\begin_inset CommandInset include
LatexCommand input
filename "func-ref.tex"

\end_inset


\end_layout

\begin_layout Standard
\begin_inset Newpage clearpage
\end_inset


\end_layout

\begin_layout Standard
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
addcontentsline{toc}{section}{Function Index}
\end_layout

\begin_layout Plain Layout


\backslash
printindex[funcref]
\end_layout

\end_inset


\end_layout

\end_body
\end_document
