Tutorial¶
Changing parameters¶
Most of the parameters are described through a “params.json” file, that is given as input of the processing pipeline Some example files are given in the workflow directory
{
"my_node":
{
"my_val": my_old_val
}
}
becomes
{
"my_node":
{
"my_val": my_new_val
}
}
Adding a parameter to a node absent from params.json¶
the “old fashioned” way:¶
forcing a node input to a value
my_node = pe.Node(interface=MyInterface(), name="my_node")
my_node.inputs.my_val = my_new_val
or
my_node = pe.Node(interface=MyInterface(my_val=my_new_val), name="my_node")
the “semi-dirty” way¶
adding to the json:
{
"my_node":
{
"my_val": my_new_val
}
}
(my_new_val possibly can be a string -> between “”)
and in the code
my_node = pe.Node(interface=MyInterface(), name = "my_node")
if "my_node" in params.keys() and "my_val" in params["my_node"]:
my_node.inputs.my_val = my_new_val
the new way: using NodeParams¶
NodeParams is a class inheriting from pipeline engine Node class, with a method load_inputs_from_dict allowing to load inputs from a dictionnary. It is particularly useful if multiple inputs have to be set for a single node
from macapype.utils.utils_node import NodeParams
my_node = NodeParams(interface=MyInterface(), name="my_node")
if "my_node" in params.keys():
my_node.load_inputs_from_dict(params["my_node"])
Or even better, using parse_key at the creation of the NodeParams and fill the parameter params:
from macapype.utils.utils_node import NodeParams
from macapype.utils.misc import parse_key
my_node = NodeParams(interface=MyInterface(),
params=parse_key(params, "my_node")
name="my_node")
New: multi_params¶
Since version 0.1.2, it is possible to add a multi_params json file, containing specific parameter for specific instance of pipelines (e.g., a specific subject or session). The parameter of the params.json will be overloaded for that specific instance if defined in the multi_params.json
To include a parameter specific my_val in my_node to an instance sub-001/ses-001, you have to fill a multi_params.json like this example:
{
"sub-001":
{
"ses-001":
{
"my_node":
{
"my_val": my_new_val
}
}
}
}
and add the path to the multi_params.json with -multi_params:
workflows/segment_pnh.py -data path/to/dataset -out path/to/res -soft ANTS -params path/to/params.json -multi_params path/to/multi_params.json
N.B.: the sub-pipeline name or incoporated in the params.json (i.e. data_preparation/crop/args), but are dropped in multi_params (only crop/args are specified); this was done because the subpart of the dictionnary can not be passed along with nipype at each step, and would require to specify all the sub-pipeline tree names leading to a node). Thus, be careful with ambiguous node names (same node name in different sub-pipelines)
Modifying an existing pipeline¶
#TODO
Wrapping new nodes¶
#TODO