Example #1
0
void rsOrientationBuildInterface(rsOrientationParameters *p)
{  
    // initialize the most common options
    rsUIOption *o;
    p->interface = rsUINewInterface();
    p->interface->description   = "Ensures an LPI orientation (unless specified differently) of the output nifti, optionally attaches the header of the DICOM to the nifti header and furthermore saves some properties from the Siemens DICOM header in the nifti which can be used for further processing (such as the TR, multiband-factor, multiband slice-timing information, grappa factor, bandwith, etc.). The attached header information are accesible through rsinfo.";

    o = rsUINewOption();
    o->name                = "input";
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->inputpath;
    o->cli_description     = "the 4D volume to processed";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "output";
    o->shorthand           = 'o';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->outputpath;
    o->cli_description     = "the volume in which the result will be saved";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
	
    o = rsUINewOption();
    o->name                = "dicom";
    o->shorthand           = 'd';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->dicompath;
    o->cli_description     = "Either the path to a DICOM file from which the header information will be taken or a path to a directory that contains DICOM files. In the latter case the DICOM scan sequence with the most DICOM files is automatically detected and one DICOM in the middle selected for copying the header. The first DICOM file in a sequence is always omitted as it contains some wrong information (such as the slice acquisition times).";
    o->cli_arg_description = "<dicom>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "orientation";
    o->shorthand           = 'a';
    o->type                = G_OPTION_ARG_STRING;
    o->storage             = &p->orientation;
    o->cli_description     = "the desired orientation of the output as a 3 letter-code, such as LPI. The following letters are possible: R(Right-to-left), L(Left-to-right), A(Anterior-to-posterior), P(Posterior-to-anterior, I(Inferior-to-superior), S(Superior-to-inferior)";
    o->cli_arg_description = "<ori-code>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "phaseencdir";
    o->shorthand           = 'p';
    o->type                = G_OPTION_ARG_STRING;
    o->storage             = &p->phaseencdir;
    o->cli_description     = "the phase encoding direction of the input volume. If specified, the phase encdoing direction will be written to the resulting nifti output with respect to the new orientation and will be available using rsinfo. The expected format is a two letter string such as: y-, x+, etc.";
    o->cli_arg_description = "<direction>";
    rsUIAddOption(p->interface, o);
	
    o = rsUINewOption();
    o->name                = "verbose";
    o->shorthand           = 'v';
    o->storage             = &p->verbose;
    o->cli_description     = "show debug information";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);
}
Example #2
0
void rsFitBuildInterface(rsFitParameters *p)
{
    // initialize the most common options
    rsUIOption *o;
    p->interface = rsUINewInterface();
    p->interface->description   = "Performs a temporal regression of the following format: target = input * betas. The constant term is added automatically. The resulting betas will contain 2 volumes with the first refering to the constant term and the second to the input.";
    
    o = rsUINewOption();
    o->name                = "input";
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->inputpath;
    o->cli_description     = "the input volume used for regression";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "target";
    o->shorthand           = 't';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->targetpath;
    o->cli_description     = "the target volume that will be regressed on";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "betas";
    o->shorthand           = 'b';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->betaspath;
    o->cli_description     = "the betas as explained int the program description";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "threads";
    o->shorthand           = 't';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->threads;
    o->cli_description     = "number of threads used for processing";
    o->cli_arg_description = "<n>";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "verbose";
    o->shorthand           = 'v';
    o->storage             = &p->verbose;
    o->cli_description     = "show debug information";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);
}
Example #3
0
void rsDeobliqueBuildInterface(rsDeobliqueParameters *p)
{  
    // initialize the most common options
    rsUIOption *o;
    p->interface = rsUINewInterface();
    p->interface->description   = "Resamples the volume such that ";

    o = rsUINewOption();
    o->name                = "input";
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->inputpath;
    o->cli_description     = "the 4D volume to processed";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "output";
    o->shorthand           = 'o';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->outputpath;
    o->cli_description     = "the volume in which the result will be saved";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "retainVoxelSizes";
    o->storage             = &p->retainVoxelSizes;
    o->cli_description     = "only orthogonalize matrix, but switch to an isotropic resolution";
    rsUIAddOption(p->interface, o);
	
    o = rsUINewOption();
    o->name                = "transformation";
    o->shorthand           = 'r';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->transformationpath;
    o->cli_description     = "if specified, an ITK transformation file will be saved to this file path describing the input to output transformation. This file can be used with ANTs.";
    o->cli_arg_description = "<*.txt>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "verbose";
    o->shorthand           = 'v';
    o->storage             = &p->verbose;
    o->cli_description     = "show debug information";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);
}
Example #4
0
rsUIInterface* Unix::createUI()
{
    rsUIOption *o;
    rsUIInterface* interface = rsUINewInterface();
    interface->description   = rsString("Execute Unix Command");

    o = rsUINewOption();
    o->name                = rsString("command");
    o->type                = G_OPTION_ARG_STRING;
    o->cli_description     = rsString("the unix command that is to be executed");
    o->cli_arg_description = rsString("<unix cmd>");
    o->nLines              = 20;
    rsUIAddOption(interface, o);

    return interface;
}
Example #5
0
void rsZeropaddingBuildInterface(rsZeropaddingParameters *p)
{  
    // initialize the most common options
    rsUIOption *o;
    p->interface = rsUINewInterface();
    p->interface->description   = "Allows to pad the volume by a specified number of voxels on the corresponding side. The value that the newly created space is filled with can be specified. It may also be used for cropping by supplying a negative padding. The world matrices (sform/qform) are adjusted accordingly.";

    o = rsUINewOption();
    o->name                = "input";
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->inputpath;
    o->cli_description     = "the 4D volume to processed";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "output";
    o->shorthand           = 'o';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->outputpath;
    o->cli_description     = "the volume in which the result will be saved";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
	
    o = rsUINewOption();
    o->name                = "lx";
    o->shorthand           = 'a';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->padding[0];
    o->cli_description     = "number of voxels the lower end of x is padded";
    o->cli_arg_description = "<int>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "ux";
    o->shorthand           = 'b';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->padding[1];
    o->cli_description     = "number of voxels the upper end of x is padded";
    o->cli_arg_description = "<int>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "ly";
    o->shorthand           = 'c';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->padding[2];
    o->cli_description     = "number of voxels the lower end of y is padded";
    o->cli_arg_description = "<int>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "uy";
    o->shorthand           = 'd';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->padding[3];
    o->cli_description     = "number of voxels the upper end of y is padded";
    o->cli_arg_description = "<int>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "lz";
    o->shorthand           = 'e';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->padding[4];
    o->cli_description     = "number of voxels the lower end of z is padded";
    o->cli_arg_description = "<int>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "uz";
    o->shorthand           = 'f';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->padding[5];
    o->cli_description     = "number of voxels the upper end of z is padded";
    o->cli_arg_description = "<int>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "value";
    o->shorthand           = 'p';
    o->type                = G_OPTION_ARG_DOUBLE;
    o->storage             = &p->paddingValue;
    o->cli_description     = "the value that padded is used for the padded space (defaults to 0)";
    o->cli_arg_description = "<double>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "mirroredPadding";
    o->shorthand           = 'm';
    o->storage             = &p->mirroredPadding;
    o->cli_description     = "instead of padding a constant value the volume is mirrored on the edges. (overwrites --value, -p)";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "verbose";
    o->shorthand           = 'v';
    o->storage             = &p->verbose;
    o->cli_description     = "show debug information";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);
}
rsUIInterface* Normalization::createUI()
{    
    rsUIOption *o;
    rsUIInterface* interface = rsUINewInterface();
    if (useNewAnts) {
        interface->description = rsString("Normalization (new ANTs)");
    } else {
        interface->description = rsString("Normalization (old ANTs)");
    }
    
    o = rsUINewOption();
    o->name                = rsString("input");
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->cli_description     = rsString("path to a 3D/4D volume for which normalization is to be computed");
    o->cli_arg_description = rsString("<volume>");
    rsUIAddOption(interface, o);
    
    o = rsUINewOption();
    o->name                = rsString("mean");
    o->shorthand           = 'm';
    o->type                = G_OPTION_ARG_FILENAME;
    o->cli_description     = rsString("path where the mean image of the input volume is saved to");
    o->cli_arg_description = rsString("<volume>");
    rsUIAddOption(interface, o);

    if (!useNewAnts) {
        o = rsUINewOption();
        o->name = rsString("stripskull");
        o->shorthand = 's';
        o->cli_description = rsString("strip skull from the volume and let it \"float in CSF\" which helps the registration in estimating the CSF/GM boundaries");
        rsUIAddOption(interface, o);
    }

    o = rsUINewOption();
    o->name                = rsString("epiTemplate");
    o->type                = G_OPTION_ARG_FILENAME;
    o->group               = RS_UI_GROUP_EXTENDED;
    o->cli_description     = rsString("path of the epi template used for registration");
    o->cli_arg_description = rsString("<volume>");
    o->defaultValue        = rsString("${epiTemplate}");
    rsUIAddOption(interface, o);
    
    o = rsUINewOption();
    o->name                = rsString("epi2EpiTemplateWarp");
    o->type                = G_OPTION_ARG_FILENAME;
    o->group               = RS_UI_GROUP_EXTENDED;
    o->cli_description     = rsString("output path of the resulting warp to the epi template");
    o->cli_arg_description = rsString("<volume>");
    o->defaultValue        = rsString("${epi2EpiTemplateWarp}");
    rsUIAddOption(interface, o);
        
    o = rsUINewOption();
    o->name                = rsString("epi2EpiTemplateInvWarp");
    o->type                = G_OPTION_ARG_FILENAME;
    o->group               = RS_UI_GROUP_EXTENDED;
    o->cli_description     = rsString("output path of the resulting inverse warp from the epi template");
    o->cli_arg_description = rsString("<volume>");
    o->defaultValue        = rsString("${epi2EpiTemplateInvWarp}");
    rsUIAddOption(interface, o);
    
    o = rsUINewOption();
    o->name                = rsString("epi2EpiTemplateAffine");
    o->type                = G_OPTION_ARG_FILENAME;
    o->group               = RS_UI_GROUP_EXTENDED;
    o->cli_description     = rsString("output path of the resulting affine transformation matrix to the epi template");
    o->cli_arg_description = rsString("<volume>");
    o->defaultValue        = rsString("${epi2EpiTemplateAffine}");
    rsUIAddOption(interface, o);

    if (!useNewAnts) {
        o = rsUINewOption();
        o->name                = rsString("transformationType");
        o->type                = G_OPTION_ARG_STRING;
        o->group               = RS_UI_GROUP_EXTENDED;
        o->cli_description     = rsString("Type of transformation model used for registration");
        o->cli_arg_description = rsString("<type>");
        o->defaultValue        = rsString("GR");
        rsUIOptionValue allowedValues[] = {
          {rsString("EL"),  rsString("Elastic transformation model (less deformation possible)")},
          {rsString("SY"),  rsString("SyN with time (default) with arbitrary number of time points in time discretization")},
          {rsString("S2"),  rsString("SyN with time optimized specifically for 2 time points in the time discretization")},
          {rsString("GR"),  rsString("Greedy SyN")},
          {rsString("EX"),  rsString("Exponential")},
          {rsString("DD"),  rsString("Diffeomorphic Demons style exponential mapping")},
          NULL
        };
        rsUISetOptionValues(o, allowedValues);
        rsUIAddOption(interface, o);

        o = rsUINewOption();
        o->name                = rsString("similarityMetric");
        o->type                = G_OPTION_ARG_STRING;
        o->group               = RS_UI_GROUP_EXTENDED;
        o->cli_description     = rsString("Type of similarity metric used for registration.");
        o->cli_arg_description = rsString("<type>");
        o->defaultValue        = rsString("PR");
        rsUIOptionValue allowedValues2[] = {
          {rsString("CC"),  rsString("cross-correlation(intramodal only)")},
          {rsString("MI"),  rsString("mutual information")},
          {rsString("PR"),  rsString("probability mapping")},
          {rsString("MSQ"), rsString("mean square difference(intramodal only)")},
          NULL
        };
        rsUISetOptionValues(o, allowedValues2);
        rsUIAddOption(interface, o);

        o = rsUINewOption();
        o->name                = rsString("maxIterations");
        o->type                = G_OPTION_ARG_INT;
        o->group               = RS_UI_GROUP_EXTENDED;
        o->cli_description     = rsString("Maximum number of iterations for all registration stages");
        o->cli_arg_description = rsString("<n>x<n>x<n>");
        o->defaultValue        = rsString("30x90x20");
        rsUIAddOption(interface, o);

        o = rsUINewOption();
        o->name                = rsString("maxAffineIterations");
        o->type                = G_OPTION_ARG_INT;
        o->group               = RS_UI_GROUP_EXTENDED;
        o->cli_description     = rsString("Maximum number of iterations for all affine registration stages");
        o->cli_arg_description = rsString("<n>x<n>x<n>x<n>");
        o->defaultValue        = rsString("10000x10000x10000x10000x10000");
        rsUIAddOption(interface, o);
    }

    return interface;
}
Example #7
0
void rsInfoBuildInterface(rsInfoParameters *p)
{
    // initialize the most common options
    rsUIOption *o;
    p->interface = rsUINewInterface();
    p->interface->description   = "Given a Nifti that has been created by any of the rstools, this tool reads out the header information it entails.";
    
    o = rsUINewOption();
    o->name                = "input";
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->inputpath;
    o->cli_description     = "the input volume from which the header information will be read out";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "dicom";
    o->shorthand           = 'd';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->dicompath;
    o->cli_description     = "save the dicom in the nifti header to the specified location";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "key";
    o->shorthand           = 'k';
    o->type                = G_OPTION_ARG_STRING;
    o->storage             = &p->infoKey;
    o->cli_description     = "key that will be read out  from the extended nifti header information (overwrites --info). For a list of keys see --info. The keys are not case-sensitive.";
    o->cli_arg_description = "<key>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "m";
    o->shorthand           = 'm';
    o->type                = G_OPTION_ARG_STRING_ARRAY;
    o->storage             = &p->modArgs;
    o->cli_description     = "key/value pairs that define header properties that will be modified in-place (--input / -i). The keys are not case-sensitive. Example: '-i foo.nii -m PatientAge=045Y' changes the patient age in the header of foo.nii. It can be specified more than once to modify multiple header properties. To set a string containing spaces, use quotes around the value (f.e. -m InstitutionName=\"My Institution Name\"). Arrays should be supplied as a list of comma-separated values (f.e. -m MosaicRefAcqTimes=1.23,4.56,7.89,...)";
    o->cli_arg_description = "<key=val>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "copyExtension";
    o->shorthand           = 'x';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->extensionSource;
    o->cli_description     = "allows to specify a nifti from which all extensions will be copied over to the output. (requires the specification of --output / -o)";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "output";
    o->shorthand           = 'o';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->outputpath;
    o->cli_description     = "instead of applying the changes in-place, a modified copy of the whole file will be created at the specified path";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "comments";
    o->shorthand           = 'c';
    o->storage             = &p->showComments;
    o->cli_description     = "show only the comments in the nifti header";
    rsUIAddOption(p->interface, o);
}
void rsApplyTransformationBuildInterface(rsApplyTransformationParameters *p)
{  
    // initialize the most common options
    rsUIOption *o;
    p->interface = rsUINewInterface();
    p->interface->description   = "Applies a complex sequence of various transformations using ANTs as speecified by the --trans/-T parameter.";

    o = rsUINewOption();
    o->name                = "input";
    o->shorthand           = 'i';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->inputpath;
    o->cli_description     = "the 4D volume to processed";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);
    
    o = rsUINewOption();
    o->name                = "output";
    o->shorthand           = 'o';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->outputpath;
    o->cli_description     = "the volume in which the result will be saved";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "reference";
    o->shorthand           = 'r';
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->referencepath;
    o->cli_description     = "a reference volume that has the desired orientation/scaling";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "headerReference";
    o->type                = G_OPTION_ARG_FILENAME;
    o->storage             = &p->headerReferencePath;
    o->cli_description     = "a volume from which the extended header information will be copied (world matrices, voxel sizes and dim lengths will be taken from the volume supplied with --reference/-r)";
    o->cli_arg_description = "<volume>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "trans";
    o->shorthand           = 'T';
    o->type                = G_OPTION_ARG_STRING_ARRAY;
    o->nLines              = 10;
    o->storage             = &p->transformations;
    o->cli_description     = "Specifies one transformation which is applied using antsApplyTransforms in the reversed order of occurrence, therefore the first transformation that is specified is also the first one that is applied to the data (which corresponds to the last transformation in ANTs' notation). Transformations should be given in the following format \"-T type,path\" or \"--trans=type,path\", where 'type' is the type of the transformation (i.e. ants, mcflirt, mcflirt_inv, fugue, mult, div) and 'path' the path to a transformation file or folder. In the case of 'mcflirt'/'mcflirt_inv', the 'path' is assumed to be a folder with rotation matrices. The types 'mult' and 'div' can be used to specify a multiplication/division with a constant 3D or 4D nifti such as the estimated bias field, which will be warped as well and applied after interpolating the input nifti in the same space. The transformation type 'fugue' can be used to specify a voxel shift map for distortion correction.";
    o->gui_description     = "Specify one transformation per line which will be applied using antsApplyTransforms in the reversed order of occurrence, therefore the first transformation that is specified is also the first one that is applied to the data (which corresponds to the last transformation in ANTs' notation). Transformations should be given in the following format \"type,path\", where 'type' is the type of the transformation (i.e. ants, mcflirt, mcflirt_inv, fugue, mult, div) and 'path' the path to a transformation file or folder. In the case of 'mcflirt'/'mcflirt_inv', the 'path' is assumed to be a folder with rotation matrices. The types 'mult' and 'div' can be used to specify a multiplication/division with a constant 3D or 4D nifti such as the estimated bias field, which will be warped as well and applied after interpolating the input nifti in the same space. The transformation type 'fugue' can be used to specify a voxel shift map for distortion correction.";
    o->cli_arg_description = "<type,param>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "defaultValue";
    o->shorthand           = 'd';
    o->type                = G_OPTION_ARG_DOUBLE;
    o->storage             = &p->defaultValue;
    o->cli_description     = "Default value to be used for points that occur in the output volume, but are not part of the input volume. Defaults to NaN.";
    o->cli_arg_description = "<float>";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "space";
    o->shorthand           = 's';
    o->type                = G_OPTION_ARG_STRING;
    o->storage             = &p->coordinateSpaceTypeInput;
    o->cli_description     = "Specifies the coordinate space of the output and can take the following values: 'input' (same as input), 'scanner', 'aligned' (aligned to an anatomical image), 'talairach' and 'mni'. This information is stored in the nifti header only, it does not affect the result of the transformation in any way. The hopes are though, that a viewing program might pick up on the specified value chooses the appropriate atlas or similar.";
    o->cli_arg_description = "<space>";
    o->defaultValue        = rsString("input");
    rsUIOptionValue allowedValues[] = {
        {rsString("input"),     rsString("copy from input")},
        {rsString("unknown"),   rsString("coordinate space unknown")},
        {rsString("scanner"),   rsString("scanner orientation")},
        {rsString("aligned"),   rsString("aligned to a second image such as the subject's T1 scan")},
        {rsString("talairach"), rsString("aligned to the Talairach space")},
        {rsString("mni"),       rsString("aligned to the MNI 152 space")},
        NULL
    };
    rsUISetOptionValues(o, allowedValues);
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "verbose";
    o->shorthand           = 'v';
    o->storage             = &p->verbose;
    o->cli_description     = "show debug information";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "interpolation";
    o->shorthand           = 'n';
    o->type                = G_OPTION_ARG_STRING;
    o->storage             = &p->interpolationMethod;
    o->cli_description     = "this parameter allows to set the filter that is used for interpolation. As this value is directly passed onto antsApplyTransform, please refer to its help description to see all possible values. Default value: LanczosWindowedSinc";
    o->cli_arg_description = "<method>";
    o->defaultValue        = "LanczosWindowedSinc";
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "threads";
    o->shorthand           = 't';
    o->type                = G_OPTION_ARG_INT;
    o->storage             = &p->threads;
    o->cli_description     = "number of threads used for processing. a value greater one disables some of the debug information that were activated using (-verbose)";
    o->cli_arg_description = "<n>";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);

    o = rsUINewOption();
    o->name                = "keepFiles";
    o->shorthand           = 'k';
    o->storage             = &p->keepFiles;
    o->cli_description     = "(DEBUG) does not delete temporary files that were created while applying the transformations. (use together with --verbose)";
    o->showInGUI           = FALSE;
    rsUIAddOption(p->interface, o);
}