U
    Phi                     @  s   d dl mZ d dl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 eddd\ZZed\ZZejjeZdd	d
dgZG dd de
ZddddddZddddddddd	Zddddddddd
ZdS )    )annotationsN)ConfigParser)StrEnumensure_tupleoptional_importtqdm)namenibabelanalyze_datacreate_new_data_copycreate_new_dataset_json
NNUNETModec                   @  s   e Zd ZdZdZdZdZdS )r   Z2dZ
3d_fullresZ	3d_lowresZ3d_cascade_fullresN)__name__
__module____qualname__N_2DN_3D_FULLRESN_3D_LOWRESN_3D_CASCADE_FULLRES r   r   L/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/apps/nnunet/utils.pyr      s   dictstrztuple[int, int])datalist_jsondata_dirreturnc                 C  s   t jjddddtj|| d d d }| dkrD| d nd}t	d|  d}t
t| d D ]B}t jjddddtj|| d | d	 }t|t| }qlt	d
|  ||fS )z
    Analyze (training) data

    Args:
        datalist_json: original data list .json (required by most monai tutorials).
        data_dir: raw data directory.
    T
image_onlyensure_channel_firstsimple_keystrainingr   image      znum_input_channels: labelznum_foreground_classes: )monai
transforms	LoadImageospathjoindimsizeloggerinforangelenmaxint)r   r   imgnum_input_channelsnum_foreground_classes_isegr   r   r   r
   &   s    r2   None)test_keyr   r   r4   output_datafolderr   c                 C  s  d}dg | g i}t td| gddgddgD ]T\}}}	|dkrBq,td| d	 trlttt|| ntt|| D ]}
t|| |
 t	r|| |
 d
 n
|| |
 }d| }|d7 }t
jjddddtj||}|jd }| }t|D ]P}t||df |}dt|d dd  }t|tj|||| d  qt|| |
 t	rd|| |
 krt
jjddddtj||| |
 d }|jd }| tj}|jdkr|jd dkr|d n|}tt||tj||	|d  t|| |
 t	rDt|| |
 }||d< || | n|| || |
 |d tj|tj|dddddd q|q,dS )a  
    Create and organize a new copy of data to meet the requirements of nnU-Net V2

    Args:
        test_key: key for test data in the data list .json.
        datalist_json: original data list .json (required by most monai tutorials).
        data_dir: raw data directory.
        num_input_channels: number of input (image) channels.
        output_datafolder: output folder.
    r   r    imagesTrimagesTslabelsTrlabelsTsNzconverting data section: z...r!   Zcase_r#   Tr   original_affine._i'  .nii.gzr$   r"   )r   .new_name)r!   rC   zdatalist.jsonjsonFconfigfilepathfmt	sort_keysindentensure_ascii) listzipr-   r.   has_tqdmr   r/   r0   
isinstancer   r%   r&   r'   r(   r)   r*   metanumpynibNifti1Imager   saveastypenpuint8ndimshapecopydeepcopyappendr   export_config_file)r9   r   r   r4   r:   _indexZnew_datalist_json_keyZ_folderZ_label_folder_kZorig_img_nameZimg_namendaaffine_lZoutimgindex_valr   r   r   r   ?   sb    .


"&
(
 
	)modalityr5   r4   num_training_dataoutput_filepathr   c                 C  s   i }t | } i |d< t|D ]}| | |d t|< qi |d< d|d d< t|D ]}|d |d d|d  < qR||d< d|d	< tj||d
dddd dS )a  
    Create a new copy of dataset .json to meet the requirements of nnU-Net V2

    Args:
        modality: image modality, could a string or a list of strings.
        num_foreground_classes: number of foreground classes.
        num_input_channels: number of input (image) channels.
        num_training_data: number of training data.
        output_filepath: output file path/name.
    Zchannel_nameslabelsr   
backgroundr#   classnumTrainingrB   Zfile_endingrD   Tr"   FrE   N)r   r/   r   r   r]   )rf   r5   r4   rg   rh   Znew_json_data_jr   r   r   r      s(    
)
__future__r   rZ   r(   rQ   rV   r%   monai.bundler   monai.utilsr   r   r   r   rN   rR   r@   appsutils
get_loggerr   r-   __all__r   r
   r   r   r   r   r   r   <module>   s   J