3
d}                 @   s   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZ d dlmZmZ G dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)Path)InputMultiPathTraitedSpectraits	isdefinedFileStr)Cell)
SPMCommand)SPMCommandInputSpecImageFileSPMscans_for_fnamesscans_for_fname)split_filenamefname_presuffixc            	   @   s  e Zd ZeedddddddZdZeedddedddZd	Zedd
ed dddZ	eded dddZ
eded dddZeded dddZeded dddZejddddddZdZedddedZdZejdddedZdZejddeddZd Zejdd!eddZd"Zejdd#ded$Zd%Zejdd&eddZd'Zejdd(eddZ d)Z!ejd*d+e!ddZ"d,Z#ej$ejdejd-dddd.d/d0Z%d1Z&ejdd2e&ddZ'd3Z(ejdd4e(ddZ)ejdd5dd6d$Z*ej+dd7dd8d$Z,ej+dd9dd:d$Z-ej+dd;dd<d$Z.ej+dd=dd>d$Z/eeddd?d@dddZ0ej+ddAddBd$Z1ej+ddCddDd$Z2ej+ddEddFd$Z3dGZ4ej+ddHddId$Z5ej+ddJddId$Z6ej+ddKddId$Z7dLZ8ej+ddMddNd$Z9ej+ddOddNd$Z:ej+ddPddNd$Z;dQZ<ej+ddRde<dS d$Z=ej+ddTde<dU d$Z>ej+ddVde<dW d$Z?ej+ddXde<dS d$Z@ej+ddYddZd$ZAd[ZBej+dd\deBdS d$ZCej+dd]deBdU d$ZDej+dd^deBdW d$ZEd_ZFej+dd`deFd$ZGdaZHej$ejdejddddbdeHdcZIddS )eCAT12SegmentInputSpecT)existsdatazfile to segmentF)fielddesc	mandatorycopyfilea  Tissue Probability Map. Select the tissue probability image that includes 6 tissue probability classes for (1) grey matter, (2) white matter, (3) cerebrospinal fluid, (4) bone, (5) non-brain  soft tissue, and (6) the background.  CAT uses the TPM only for the initial SPM segmentation.tpmzShooting Template %d.  The Shooting template must be in multi-volume nifti format and should contain GM, WM, and background segmentations and have to be saved with at least 16 bit. z)extopts.registration.shooting.shootingtpmr   )r   r   r   r   r      )r   r   r   r            ZnproczNumber of threads)
usedefaultr   r   r   ab  Affine Regularization. The procedure is a local optimisation, so it needs reasonable initial starting estimates. Images should be placed in approximate alignment using the Display function of SPM before beginning.  A Mutual Information affine registration with the tissue probability maps (DAgostino et al, 2004) is used to achieve approximate alignment.Zmnizopts.affreg)default_valuer   r   r   zStrength of the SPM inhomogeneity (bias) correction that simultaneously controls the SPM biasreg, biasfwhm, samp (resolution), and tol (iteration) parameter.g      ?zopts.biasacca]  Affine registration and SPM preprocessing can fail in some subjects with deviating anatomy (e.g. other species/neonates) or in images with strong signal inhomogeneities, or untypical intensities (e.g. synthetic images). An initial bias correction can help to reduce such problems (see details below). Recommended are the "default" and "full" option.i.  zextopts.APP)r   r   r   aI  In rare cases the Unified Segmentation can fail in highly abnormal brains, where e.g. the cerebrospinal fluid of superlarge ventricles (hydrocephalus) were classified as white matter. However, if the affine registration is correct, the AMAP segmentation with an prior-independent k-means initialization can be used to replace the SPM brain tissue classification. Moreover, if the default Dartel and Shooting registrations will fail then rhe "Optimized Shooting - superlarge ventricles" option for "Spatial registration" is ! required Values: 
none: 0;
light: 1;
full: 2;
default: 1070.zextopts.spm_kamapa}  Additionally to WM-inhomogeneities, GM intensity can vary across different regions such as the motor cortex, the basal ganglia, or the occipital lobe. These changes have an anatomical background (e.g. iron content, myelinization), but are dependent on the MR-protocol and often lead to underestimation of GM at higher intensities and overestimation of CSF at lower intensities. Therefore, a local intensity transformation of all tissue classes is used to reduce these effects in the image. This local adaptive segmentation (LAS) is applied before the final AMAP segmentation.Possible Values: 
SPM Unified Segmentation: 0 
k-means AMAP: 2zextopts.LASstr)r   r   r   a"  Method of initial skull-stripping before AMAP segmentation. The SPM approach works quite stable for the majority of data. However, in some rare cases parts of GM (i.e. in frontal lobe) might be cut. If this happens the GCUT approach is a good alternative. GCUT is a graph-cut/region-growing approach starting from the WM area. APRG (adaptive probability region-growing) is a new method that refines the probability maps of the SPM approach by region-growing techniques of the gcut approach with a final surface-based optimization strategy. This is currently the method with the most accurate and reliable results. If you use already skull-stripped data you can turn off skull-stripping although this is automaticaly detected in most cases. Please note that the choice of the skull-stripping method will also influence the estimation of TIV, because the methods mainly differ in the handling of the outer CSF around the cortical surface. 
Possible Values:
 - none (already skull-stripped): -1;
 - SPM approach: 0; 
 - GCUT approach: 0.50; 
 - APRG approach: 2zextopts.gcutstra  WARNING: Please note that the detection of WM hyperintensies is still under development and does not have the same accuracy as approaches that additionally consider FLAIR images (e.g. Lesion Segmentation Toolbox)! In aging or (neurodegenerative) diseases WM intensity can be reduced locally in T1 or increased in T2/PD images. These so-called WM hyperintensies (WMHs) can lead to preprocessing errors. Large GM areas next to the ventricle can cause normalization problems. Therefore, a temporary correction for normalization is useful if WMHs are expected. CAT allows different ways to handle WMHs: 
0) No Correction (handled as GM). 
1) Temporary (internal) correction as WM for spatial normalization and estimation of cortical thickness. 
2) Permanent correction to WM. zextopts.WMHCzThe (isotropic) voxel sizes of any spatially normalised written images. A non-finite value will be replaced by the average voxel size of the tissue probability maps used by the segmentation.g      ?zextopts.voxa  Internal resampling for preprocessing.
 The default fixed image resolution offers a good trade-off between optimal quality and preprocessing time and memory demands. Standard structural data with a voxel resolution around 1mm or even data with high in-plane resolution and large slice thickness (e.g. 0.5x0.5x1.5 mm) will benefit from this setting. If you have higher native resolutions the highres option "Fixed 0.8 mm" will sometimes offer slightly better preprocessing quality with an increase of preprocessing time and memory demands. In case of even higher resolutions and high signal-to-noise ratio (e.g. for 7 T data) the "Best native" option will process the data on the highest native resolution. A resolution of 0.4x0.7x1.0 mm will be interpolated to 0.4x0.4x0.4 mm. A tolerance range of 0.1 mm is used to avoid interpolation artifacts, i.e. a resolution of 0.95x1.01x1.08 mm will not be interpolated in case of the "Fixed 1.0 mm"! This "optimal" option prefers an isotropic voxel size with at least 1.1 mm that is controlled by the median voxel size and a volume term that penalizes highly anisotropic voxels.Values:
Optimal: [1.0 0.1]
Fixed 1.0 mm: [1.0 0.1];
Fixed 0.8 mm:[0.8 0.1]
Best native: [0.5 0.1]g?zextopts.restypes.optimalZhelp_resampling)minlenmaxlenr   r   r   a  Error handling.
Try to catch preprocessing errors and continue with the next data set or ignore all warnings (e.g., bad intensities) and use an experimental pipeline which is still in development. In case of errors, CAT continues with the next subject if this option is enabled. If the experimental option with backup functions is selected and warnings occur, CAT will try to use backup routines and skip some processing steps which require good T1 contrasts (e.g., LAS). If you want to avoid processing of critical data and ensure that only the main pipeline is used then select the option "Ignore errors (continue with the next subject)". It is strongly recommended to check for preprocessing problems, especially with non-T1 contrasts. 
Values:
none: 0,
default: 1,
details: 2.zextopts.ignoreErrorsa  Surface and thickness estimation. 
Use projection-based thickness (PBT) (Dahnke et al. 2012) to estimate cortical thickness and to create the central cortical surface for left and right hemisphere. Surface reconstruction includes topology correction (Yotter et al. 2011), spherical inflation (Yotter et al.) and spherical registration. Additionally you can also estimate surface parameters such as gyrification, cortical complexity or sulcal depth that can be subsequently analyzed at each vertex of the surface. Please note, that surface reconstruction and spherical registration additionally requires about 20-60 min of computation time. A fast (1-3 min) surface pipeline is available for visual preview (e.g., to check preprocessing quality) in the cross-sectional, but not in the longitudinal pipeline.  Only the initial surfaces are created with a lower resolution and without topology correction, spherical mapping and surface registration. Please note that the files with the estimated surface thickness can therefore not be used for further analysis!  For distinction, these files contain "preview" in their filename and they are not available as batch dependencies objects. Zsurfacezoutput.surf_measureszExtract surface measuresz)output.ROImenu.atlases.neuromorphometricsz6Extract brain measures for Neuromorphometrics templatezoutput.ROImenu.atlases.lpba40z*Extract brain measures for LPBA40 templatezoutput.ROImenu.atlases.hammersz)Extract brain measures for COBRA templatezoutput.ROImenu.atlases.cobraz+Extract brain measures for Hammers templatezoutput.ROImenu.atlases.ownatlasz+Extract brain measures for a given templatezoutput.GM.nativez"Save modulated grey matter images.zoutput.GM.modzSave native grey matter images.zoutput.GM.dartelzSave dartel grey matter images.z$Options to save white matter images.zoutput.WM.nativez Save dartel white matter images.zoutput.WM.modzoutput.WM.dartelzOptions to save CSF images.zoutput.CSF.nativezSave dartel CSF images.zoutput.CSF.modzoutput.CSF.dartela#  This is the option to save a labeled version of your segmentations in the %s space for fast visual comparision. Labels are saved as Partial Volume Estimation (PVE) values with different mix classes for GM-WM (2.5) and GM-CSF (1.5). BG=0, CSF=1, GM=2, WM=3, WMH=4 (if WMHC=3), SL=1.5 (if SLC)zoutput.label.nativenativezoutput.label.warpedZwarpedzoutput.label.darteldartelzoutput.labelnativezoutput.bias.warpedzSave bias corrected imageak  This is the option to save a bias, noise, and local intensity corrected version of the original T1 image in the %s space. MR images are usually corrupted by a smooth, spatially varying artifact that modulates the intensity of the image (bias). These artifacts, although not usually a problem for visual inspection, can impede automated processing of the images. The bias corrected version should have more uniform intensities within the different types of tissues and can be saved in native space and/or normalised. Noise is corrected by an adaptive non-local mean (NLM) filter (Manjon 2008, Medical Image Analysis 12).zoutput.las.nativezoutput.las.warpedzoutput.las.dartelaG  This is the option to save the Jacobian determinant, which expresses local volume changes. This image can be used in a pure deformation based morphometry (DBM) design. Please note that the affine part of the deformation field is ignored. Thus, there is no need for any additional correction for different brain sizes using ICV.zoutput.jacobianwarpeda  Deformation fields can be saved to disk, and used by the Deformations Utility and/or applied to coregistered data from other modalities (e.g. fMRI). For spatially normalising images to MNI space, you will need the forward deformation, whereas for spatially normalising (eg) GIFTI surface files, youll need the inverse. It is also possible to transform data in MNI space on to the individual subject, which also requires the inverse transform. Deformations are saved as .nii files, which contain three volumes to encode the x, y and z coordinates.
Values: No:[0 0];
Image->Template (forward): [1 0];
Template->Image (inverse): [0 1]; 
inverse + forward: [1 1]zoutput.warps)r   r    r   r   r   N)J__name__
__module____qualname__r   r   in_filesZ	_help_tpmr   Z_help_shoots_tpmshooting_tpmZshooting_tpm_template_1Zshooting_tpm_template_2Zshooting_tpm_template_3Zshooting_tpm_template_4r   IntZn_jobsZ_help_affine_regr   Zaffine_regularizationZ_help_bias_accFloatZ"power_spm_inhomogeneity_correctionZ	_help_appZaffine_preprocessingZ_help_initial_segZinitial_segmentationZ	_help_lasZlocal_adaptive_segZ_help_gcutstrZskull_stripZ
_help_wmhcZwm_hyper_intensity_correctionZ	_help_voxZ
voxel_sizeZ_help_resamplingTupleZinternal_resampling_processZ_errors_helpignore_errorsZ
_help_surfZ surface_and_thickness_estimationZsurface_measuresBoolZneuromorphometricsZlpba40ZcobraZhammersZ	own_atlasZgm_output_nativeZgm_output_modulatedZgm_output_dartelZ_wm_descZwm_output_nativeZwm_output_modulatedZwm_output_dartelZ	_csf_descZcsf_output_nativeZcsf_output_modulatedZcsf_output_dartelZ_help_label_descZlabel_nativeZlabel_warpedZlabel_dartelZoutput_labelnativesave_bias_correctedZ	_las_descZ
las_nativeZ
las_warpedZ
las_dartelZ_help_jacobianZjacobianwarpedZ
_help_warpZwarps r.   r.   D/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/cat12/preprocess.pyr      sx  


r   c               @   s(  e Zd ZejeddddZedddZedddZejeddddZ	edd	dZ
edd
dZedddZedddZedddZedddZedddZedddZedddZedddZejeddddZedddZedddZedddZedddZejeddddZedddZdS )CAT12SegmentOutputSpecT)r   z2Files with the measures extracted for OI ands ROIs)r   z$Files with thickness values of ROIs.)r   r   z#Files with thickness values of ROI.zDifferent segmented images.zGrey matter modulated image.zGrey matter dartel image.zGrey matter native space.zWhite matter modulated image.zWhite matter dartel image.zWhite matter in native space.zCSF modulated image.zCSF dartel image.zCSF in native space.zBias corrected imagezSurface fileszCentral right hemisphere fileszSphere right hemisphere fileszCentral left hemisphere fileszSphere left hemisphere fileszReport files.zReport file.N)r#   r$   r%   r   Listr   label_files
label_rois	label_roi
mri_imagesZgm_modulated_imageZgm_dartel_imageZgm_native_imageZwm_modulated_imageZwm_dartel_imageZwm_native_imageZcsf_modulated_imageZcsf_dartel_imageZcsf_native_imagebias_corrected_imagesurface_filesZrh_central_surfaceZrh_sphere_surfaceZlh_central_surfaceZlh_sphere_surfacereport_filesreportr.   r.   r.   r/   r0     s,   r0   c                   s8   e Zd ZdZeZeZdd Z fddZ	dd Z
  ZS )CAT12Segmentap  
    CAT12: Segmentation

    This toolbox is an extension to the default segmentation in SPM12, but uses a completely different segmentation
    approach.
    The segmentation approach is based on an Adaptive Maximum A Posterior (MAP) technique without the need for a priori
    information about tissue probabilities. That is, the Tissue Probability Maps (TPM) are not used constantly in the
    sense of the classical Unified Segmentation approach (Ashburner et. al. 2005), but just for spatial normalization.
    The following AMAP estimation is adaptive in the sense that local variations of the parameters (i.e., means and
    variance) are modeled as slowly varying spatial functions (Rajapakse et al. 1997). This not only accounts for
    intensity inhomogeneities but also for other local variations of intensity.
    Additionally, the segmentation approach uses a Partial Volume Estimation (PVE) with a simplified mixed model of at
    most two tissue types (Tohka et al. 2004). We start with an initial segmentation into three pure classes: gray
    matter (GM), white matter (WM), and cerebrospinal fluid (CSF) based on the above described AMAP estimation. The
    initial segmentation is followed by a PVE of two additional mixed classes: GM-WM and GM-CSF. This results in an
    estimation of the amount (or fraction) of each pure tissue type present in every voxel (as single voxels - given by
    Another important extension to the SPM12 segmentation is the integration of the Dartel or Geodesic Shooting
    registration into the toolbox by an already existing Dartel/Shooting template in MNI space. This template was
    derived from 555 healthy control subjects of the IXI-database (http://www.brain-development.org) and provides the
    several Dartel or Shooting iterations. Thus, for the majority of studies the creation of sample-specific templates
    is not necessary anymore and is mainly recommended for children data.'};

    http://www.neuro.uni-jena.de/cat12/CAT12-Manual.pdf#page=15

    Examples
    --------
    >>> path_mr = 'structural.nii'
    >>> cat = CAT12Segment(in_files=path_mr)
    >>> cat.run() # doctest: +SKIP
    c             K   s2   t  j}|r d|kr d| _d| _t j| f| d S )Nz12.toolszcat.estwrite)r
   version_jobtype_jobname__init__)selfinputs_local_versionr.   r.   r/   r?     s
    zCAT12Segment.__init__c                sH   |dkr$t |trt|S t|S n|dkr4t|S tt| j|||S )z+Convert input to appropriate format for spmr&   r   r'   )r   r'   )
isinstancelistr   r   Cell2Strsuperr:   _format_arg)r@   optspecval)	__class__r.   r/   rG     s    

zCAT12Segment._format_argc          
   C   s*  | j  j }| jjd }t|\}}}dd t|jdD |d< xtdddgD ]\}}xd8D ]\}}	| d| }
tt	| j|
r`t	| j|
r`| d| d}t
jjd|	 d|d  }	|dkrt||	d||< q`t||	dd||< q`W qRW | jjrt|t
jjddd|d< dd t|jdD |d< xXd9D ]P}xHd:D ]@}| d| d!}t|t
jjd"| d#| d#d$d%d&||< qBW q8W d'd t|jd(D  |d)< |d)< t|t
jjd*d+d,d%d&|d*< d-d t|jd.D |d/< t|t
jjd0d1d,d%d&|d2< t|t
jjd0d3d,d%d&|d4< |S );Nr   c             S   s   g | ]}|j  rt|qS r.   )is_filestr).0mrir.   r.   r/   
<listcomp>  s    z.CAT12Segment._list_outputs.<locals>.<listcomp>zmri/*r5   ZgmZwmZcsf	modulatedmwr"   rr!    Z_output__Z_imagerO   pr   )prefixZ_rigid)rW   suffixZwmir6   c             S   s   g | ]}|j  rt|qS r.   )rL   rM   )rN   surfr.   r.   r/   rP   1  s    zsurf/*r7   rhlhcentralsphereZ_surfacerY   .z.giiF)rW   rX   Zuse_extc             S   s   g | ]}|j  rt|qS r.   )rL   rM   )rN   r9   r.   r.   r/   rP   ?  s    zreport/*r8   r9   Zcat_z.xmlc             S   s   g | ]}|j  rt|qS r.   )rL   rM   )rN   labelr.   r.   r/   rP   G  s    zlabel/*r2   r_   ZcatROIs_r3   ZcatROI_r4   rQ   rR   r"   rS   r!   rT   )r`   ra   rb   )rZ   r[   )r\   r]   )_outputsgetrA   r&   r   r   glob	enumerater   getattrospathjoinr   r-   )r@   outputsfpthbaseextZtidxZtissueimagerW   ZouttypeZoutfieldZ
hemisphererX   r.   r.   r/   _list_outputs  sH    



$zCAT12Segment._list_outputs)r#   r$   r%   __doc__r   
input_specr0   output_specr?   rG   rq   __classcell__r.   r.   )rK   r/   r:     s   r:   c            	   @   s   e Zd ZeedddddddZejddd	d
ddddZej	dddddZ
ejdddddZejdddddZejdddddZejdddddZejdddddZejd d!d"d#dd$dZd%S )&CAT12SANLMDenoisingInputSpecT)r   r   zImages for filtering.F)r   r   r   r   float32uint16uint8samespm_typezDData type of the output images. 'same' matches the input image type.)r   r   r   intlimd   z$intensity limitation (default = 100))r   r   r   r   rW   Zsanlm_zfFilename prefix. Specify  the  string  to be prepended to the filenames of the filtered image file(s).rX   rT   zhFilename suffix. Specify  the  string  to  be  appended  to the filenames of the filtered image file(s).g      ?addnoisea  Strength of additional noise in noise-free regions.
        Add  minimal  amount  of noise in regions without any noise to avoid image segmentation problems.
        This parameter defines the strength of additional noise as percentage of the average signal intensity.)r   r   r   r   riciana'  Rician noise
        MRIs  can  have  Gaussian  or  Rician  distributed  noise with uniform or nonuniform variance across the image.
        If SNR is high enough (>3)  noise  can  be  well  approximated by Gaussian noise in the foreground. However, for
        SENSE reconstruction or DTI data a Rician distribution is expected. Please note that the Rician noise estimation
        is sensitive for large signals in the neighbourhood and can lead to artefacts, e.g. cortex can be affected by
        very high values in the scalp or in blood vessels.ZreplaceNANandINFzJReplace NAN by 0, -INF by the minimum and INF by the maximum of the image.z-Infr   r   znlmfilter.optimized.NCstra  Strength of Noise Corrections
        Strength  of  the  (sub-resolution)  spatial  adaptive    non local means (SANLM) noise correction. Please note
        that the filter strength is automatically  estimated.  Change this parameter only for specific conditions. The
        "light" option applies half of the filter strength of the adaptive  "medium"  cases,  whereas  the  "strong"
        option  uses  the  full  filter  strength,  force sub-resolution filtering and applies an additional  iteration.
        Sub-resolution  filtering  is  only  used  in  case  of  high image resolution below 0.8 mm or in case of the
        "strong" option. light = 2, medium = -Inf, strong = 4N)r#   r$   r%   r   r   r&   r   Enumr{   r(   r|   r   filename_prefixfilename_suffixr)   r~   r,   r   Zreplace_nan_and_infZnoisecorr_strengthr.   r.   r.   r/   rv   T  sf   rv   c               @   s   e Zd ZeddZdS )CAT12SANLMDenoisingOutputSpeczout file)r   N)r#   r$   r%   r   out_filer.   r.   r.   r/   r     s   r   c                   s8   e Zd ZdZeZeZdd Z fddZ	dd Z
  ZS )CAT12SANLMDenoisinga  
    Spatially adaptive non-local means (SANLM) denoising filter

    This  function  applies  an spatial adaptive (sub-resolution) non-local means denoising filter
    to  the  data.  This  filter  will  remove  noise  while  preserving  edges. The filter strength is
    automatically estimated based on the standard deviation of the noise.

    This   filter   is  internally  used  in  the  segmentation  procedure  anyway.  Thus,  it  is  not
    necessary (and not recommended) to apply the filter before segmentation.
    ______________________________________________________________________
    Christian Gaser, Robert Dahnke
    Structural Brain Mapping Group (http://www.neuro.uni-jena.de)
    Departments of Neurology and Psychiatry
    Jena University Hospital
    ______________________________________________________________________

    Examples
    --------
    >>> from nipype.interfaces import cat12
    >>> c = cat12.CAT12SANLMDenoising()
    >>> c.inputs.in_files = 'anatomical.nii'
    >>> c.run() # doctest: +SKIP
    c             K   s2   t  j}|r d|kr d| _d| _t j| f| d S )Nz12.r;   zcat.tools.sanlm)r
   r<   r=   r>   r?   )r@   rA   rB   r.   r.   r/   r?     s
    zCAT12SANLMDenoising.__init__c                sT   |dkr"t |trt|S t|S |dkr@ddddd}|| }tt| j|||S )z+Convert input to appropriate format for spmr&   r{   r   r   i      )rz   ry   rx   rw   )rC   rD   r   r   rF   r   rG   )r@   rH   rI   rJ   Ztype_map)rK   r.   r/   rG     s    
zCAT12SANLMDenoising._format_argc             C   s8   | j  j }t| jjd tj | jj| jjd|d< |S )Nr   )newpathrW   rX   r   )	rc   rd   r   rA   r&   rh   getcwdr   r   )r@   rk   r.   r.   r/   rq     s    
z!CAT12SANLMDenoising._list_outputs)r#   r$   r%   rr   rv   rs   r   rt   r?   rG   rq   ru   r.   r.   )rK   r/   r     s   r   c               @   s   e Zd Zdd ZdS )rE   c             C   s   d| j   S )z-Convert input to appropriate format for cat12z{'%s'})Z	to_string)r@   r.   r.   r/   __str__  s    zCell2Str.__str__N)r#   r$   r%   r   r.   r.   r.   r/   rE     s   rE   )rh   Zpathlibr   Znipype.interfaces.baser   r   r   r   r   r   Znipype.interfaces.cat12.baser	   Znipype.interfaces.spmr
   Znipype.interfaces.spm.baser   r   r   r   Znipype.utils.filemanipr   r   r   r0   r:   rv   r   r   rE   r.   r.   r.   r/   <module>   s        4yU;