# Modify existing models

In this document, we assume that we already have a xolotl model set up. Here, we will learn how to

- modify parameters of a model one by one
- modify parameters of a model using pattern matching
- remove components from a model
- add new components to a model

## Modifying the parameters of an existing model¶

### Modify model parameter manually¶

Numerical parameters of xolotl objects, such as maximal
conductances can be changed by setting the value of
the parameter to the new parameter. For example, to
change the maximal conductance `gbar`

of the `NaV`

conductance in the `AB`

compartment of the `x`

xolotl
object to , you can do this:

```
x = xolotl.examples.neurons.BurstingNeuron;
x.AB.NaV.gbar = 10;
```

### Modify model parameters using pattern matching¶

The `find`

and `get`

functions are robust searching tools for accessing parameters in `xolotl`

. They are especially useful when you want to change many parameters at once.

Both functions accept cells of character vectors or character vectors as arguments. The `find`

function returns a list of all fields of the `xolotl`

structure as a cell of character vectors that fit that description. The `get`

function works the same way, except that it returns the actual values of those fields. Under the hood, the `get`

function is really just an extension of `find`

.

It is important to note that both functions will find all fields that match any part of the search query. You can use asterisks `*`

to "wildcard" that is, mean "anything here." This is useful especially between parts you want to specifically match for (such as `'AB*gbar'`

).

These functions also work "down the tree," meaning that they are functions of each compartment, conductance, and so on, and search only within the part of the tree specified. For example, `x.AB.find('*')`

will fetch every property of the `AB`

compartment, but none in other compartments.

Get all conductances in all compartments.

```
x = xolotl.examples.neurons.BurstingNeuron;
x.find('cond')
% x.find('condu'), x.find('conduct'),
% ... x.find('conductance') also work
```

Will show you this:

```
ans =
8×1 cell array
{'AB.ACurrent'}
{'AB.CaS' }
{'AB.CaT' }
{'AB.HCurrent'}
{'AB.KCa' }
{'AB.Kd' }
{'AB.Leak' }
{'AB.NaV' }
```

Get the names of all conductances in the `AB`

compartment.

```
x.AB.find('conductance')
```

will show you:

```
ans =
8×1 cell array
{'ACurrent'}
{'CaS' }
{'CaT' }
{'HCurrent'}
{'KCa' }
{'Kd' }
{'Leak' }
{'NaV' }
```

Get the names of all maximal conductances in in `AB`

compartment.

```
x.find('AB*gbar')
```

will show you

```
ans =
8×1 cell array
{'AB.ACurrent.gbar'}
{'AB.CaS.gbar' }
{'AB.CaT.gbar' }
{'AB.HCurrent.gbar'}
{'AB.KCa.gbar' }
{'AB.Kd.gbar' }
{'AB.Leak.gbar' }
{'AB.NaV.gbar' }
```

Get the names of all maximal conductances in the `AB`

compartment from within the compartment's scope (note the importance of the wildcard `*`

).

```
x.AB.find('*gbar')
```

```
ans =
8×1 cell array
{'ACurrent.gbar'}
{'CaS.gbar' }
{'CaT.gbar' }
{'HCurrent.gbar'}
{'KCa.gbar' }
{'Kd.gbar' }
{'Leak.gbar' }
{'NaV.gbar' }
```

Get the values of some arbitrary properties. In this case, we find the reversal
potentials of the `ACurrent`

and the `HCurrent`

conductances in the `AB`

compartment.

```
x.get('AB*Current.E')
```

will get

```
ans =
-80
-20
```

To get multiple, specific parameters, use a cell array as follows:

```
x.AB.NaV.get({'E', 'gbar'})
```

will show

```
ans =
30.0000
0.1815
```

### Using `set`

to change many parameters at once¶

Sometimes you want to set a bunch of parameters at once, such as all of the maximal
conductances, to values stored in a vector. You can do this line by line using
the "dot" notation as above, or use the `set`

function to set all the parameters
at once.

The `set`

function expects the same searching syntax as `find`

and `get`

, however
it also takes another argument which is the vector of values to assign to the
parameters.

If you wanted to set the maximal conductances of a single-compartment Hodgkin-Huxley
cell (`HH`

) with fast sodium (`NaV`

), delayed rectifier potassium (`Kd`

), and `Leak`

conductances, you could set the parameters manually by

```
x = xolotl.examples.neurons.HodgkinHuxley;
x.HH.Kd.gbar = 300;
x.HH.Leak.gbar = 0.1;
x.HH.NaV.gbar = 1000;
```

or use the `set`

function with the argument `'*gbar'`

, meaning "all parameters of `x`

ending
in `'gbar'`

."

```
x.set('*gbar', [300, 0.1, 1000]);
```

## Remove a component from a model¶

You can remove any component from the model by calling its `destroy`

method. For example:

```
x.HH.Leak.destroy()
```

destroys the `Leak`

conductance from the `HH`

compartment.

## Add a new component to an existing model¶

Xolotl objects are MATLAB objects. You can add new network components on-the-fly
by using the `add`

function for compartments, conductances, and mechanisms, and
the `connect`

function for synapses.