3
d*(                 @   s   d dl Z d dljZd dlZd dlZ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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dS )    N   )split_filename   )BaseInterfaceInputSpectraitsFileTraitedSpecInputMultiPath	isdefined   )CFFBaseInterfacehave_cfflibc               @   s<  e Zd ZeeddddZeeddddZeeddddZeeddddZeeddddZ	eeddd	dZ
eeddd
dZeeddddZeeddddZejddZejddZejddZejddZejddZejddZejddZejddZejddddZejddddZeddddZdS )CFFConverterInputSpecT)existszlist of graphML networks)descz list of gpickled Networkx graphszlist of GIFTI surfaceszlist of GIFTI labelszlist of NIFTI volumeszlist of Trackvis fiber fileszlist of HDF5 timeseries fileszlist of script files to includez3list of external data files (i.e. Numpy, HD5, XML) zConnectome TitleZCreatorzEmail addressZ	PublisherZLicenseZRights
ReferencesZRelationzHomo sapiensZSpecies)r   
usedefaultz%Created with the Nipype CFF converterDescriptionzconnectome.cffzOutput connectome file)r   r   N)__name__
__module____qualname__r	   r   graphml_networksgpickled_networksgifti_surfacesgifti_labelsnifti_volumestract_filesZtimeseries_filesscript_files
data_filesr   Strtitlecreatoremail	publisherlicenserights
referencesrelationspeciesdescriptionout_file r+   r+   @/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/cmtk/convert.pyr      s4   r   c               @   s   e Zd ZedddZdS )CFFConverterOutputSpecTzOutput connectome file)r   r   N)r   r   r   r   connectome_filer+   r+   r+   r,   r-   <   s   r-   c               @   s(   e Zd ZdZeZeZdd Zdd Z	dS )CFFConvertera  
    Creates a Connectome File Format (CFF) file from input networks, surfaces, volumes, tracts, etcetera....

    Example
    -------

    >>> import nipype.interfaces.cmtk as cmtk
    >>> cvt = cmtk.CFFConverter()
    >>> cvt.inputs.title = 'subject 1'
    >>> cvt.inputs.gifti_surfaces = ['lh.pial_converted.gii', 'rh.pial_converted.gii']
    >>> cvt.inputs.tract_files = ['streamlines.trk']
    >>> cvt.inputs.gpickled_networks = ['network0.gpickle']
    >>> cvt.run()                 # doctest: +SKIP
    c             C   s  dd l }|j }t| jjr.|jj| jj n|jj| jj t| jjr\|jj	| jj n|jj	t
jd t| jjr|jj| jj t| jjr|jj| jj t| jjr|jj| jj t| jjr|jj| jj t| jjr|jj| jj t| jjr|jj| jj t| jjr6|jj| jj t| jjrT|jj| jj |jjtjj  d}t| jj rx2| jj D ]&}dj!|d}|j"|| |d7 }qW t| jj#rg }xR| jj#D ]F}t$|\}}}t%j&|}|j'|d}	|	j(| |j)|	 |d7 }qW d}t| jj*rdx>| jj*D ]2}
t$|
\}}}|j+||
}|j,| |d7 }q.W d}t| jj-rxT| jj-D ]H}t$|\}}}|j.j/d||f |}d|_0d	|_1|j2| |d7 }qW d}t| jj3r4xT| jj3D ]H}t$|\}}}|j.j/d
||f |}d|_0d|_1|j2| |d7 }qW t| jj4r|x8| jj4D ],}t$|\}}}|j5j6||}|j7| qLW t| jj8rx8| jj8D ],}t$|\}}}|j9j:||}|j;| qW t| jj<rVx| jj<D ]v}t$|\}}}|j=||dd}t>j?|ddksd|_1t>j?|ddks.d|_1t>j?|ddksFd|_1|j@| qW |jA  t$| jj\}}}|dks~d}|jB|tCjD||  |S )Nr   USERzNetwork {cnt})Zcntr   )namezSurface %d - %sZGiftiZ
SurfacesetzSurface Label %d - %sZLabelsZNumPy)r1   src
fileformatlengthsZFinalFiberLengthArrayZ	endpointsZFiberEndpointslabelsZFinalFiberLabelsz.cffr6   r6   )Ecfflib
connectomer
   inputsr    Zconnectome_meta	set_titler*   r!   set_creatorosgetenvr"   	set_emailr#   Zset_publisherr$   Zset_licenser%   Z
set_rightsr&   Zset_referencesr'   Zset_relationr(   Zset_speciesr)   set_descriptionZset_createddatetimedatetodayr   formatZ#add_connectome_network_from_graphmlr   r   nxZread_gpickleZCNetworkZset_with_nxgraphZadd_connectome_networkr   ZCTrackZadd_connectome_trackr   ZCSurfaceZcreate_from_giftir3   ZdtypeZadd_connectome_surfacer   r   ZCVolumeZcreate_from_niftiZadd_connectome_volumer   ZCScriptZcreate_from_fileZadd_connectome_scriptr   ZCDatastringfindZadd_connectome_dataZprint_summarysave_to_cffopabspath)selfruntimecfacountZntwkZ	ntwk_nameZ	unpickled_ZcnetZtrkZtrk_nameZctrackZsurfZ	surf_nameZcsurflabelZ
label_nameZvolZvol_nameZcvolscriptscript_nameZcscriptdataZ	data_nameZcdar1   extr+   r+   r,   _run_interfaceS   s    






zCFFConverter._run_interfacec             C   s@   | j  j }t| jj\}}}|dks*d}tj|| |d< |S )Nz.cffr.   )_outputsgetr   r9   r*   rH   rI   )rJ   outputsrO   r1   rT   r+   r+   r,   _list_outputs   s    zCFFConverter._list_outputsN)
r   r   r   __doc__r   
input_specr-   output_specrU   rY   r+   r+   r+   r,   r/   @   s
   }r/   c               @   s.   e Zd ZeedddddZeddddZdS )	MergeCNetworksInputSpecT)r   z*List of CFF files to extract networks from)	mandatoryr   zmerged_network_connectome.cffz+Output CFF file with all the networks added)r   r   N)r   r   r   r	   r   in_filesr*   r+   r+   r+   r,   r]      s   r]   c               @   s   e Zd ZedddZdS )MergeCNetworksOutputSpecTz+Output CFF file with all the networks added)r   r   N)r   r   r   r   r.   r+   r+   r+   r,   r`      s   r`   c               @   s(   e Zd ZdZeZeZdd Zdd Z	dS )MergeCNetworksa  Merges networks from multiple CFF files into one new CFF file.

    Example
    -------

    >>> import nipype.interfaces.cmtk as cmtk
    >>> mrg = cmtk.MergeCNetworks()
    >>> mrg.inputs.in_files = ['subj1.cff','subj2.cff']
    >>> mrg.run()                  # doctest: +SKIP

    c             C   s   dd l }g }xt| jjD ]v\}}|j|}|j }xZ|D ]R}|j  |j j }	|jt	|d |	 d |j
   |j|j
  |j| q:W qW |jd|d}
|
j }|jd |jd t| jj\}}}|dksd}|j|
tj||  |S )	Nr   z: z - zAll CNetworks)r    Zconnectome_networkzMy NamezMy Emailz.cff)r7   	enumerater9   r_   loadZget_connectome_networkZget_connectome_metaZ	get_titleset_namestrget_nameZset_srcappendr8   r;   r>   r   r*   rG   rH   rI   )rJ   rK   rL   Zextracted_networksiconZmyconnetsneZcontitleZnewconmetadatarO   r1   rT   r+   r+   r,   rU      s*    

"


zMergeCNetworks._run_interfacec             C   s@   | j  j }t| jj\}}}|dks*d}tj|| |d< |S )Nz.cffr.   )rV   rW   r   r9   r*   rH   rI   )rJ   rX   rO   r1   rT   r+   r+   r,   rY     s    zMergeCNetworks._list_outputsN)
r   r   r   rZ   r]   r[   r`   r\   rU   rY   r+   r+   r+   r,   ra      s
   !ra   )r<   os.pathpathrH   r@   rE   ZnetworkxrD   Zutils.filemanipr   baser   r   r   r   r	   r
   r   r   r   r-   r/   r]   r`   ra   r+   r+   r+   r,   <module>   s   
 ' 