
     i                     B    d dl mZ d dlmZ d dlZ G d de          ZdS )    )decode_array)decoder_utilsNc                   :    e Zd ZdZdZdZdZdZd Zd Z	d Z
d ZdS )MMTFDecoderz\Class to decode raw mmtf data into a parsed data model that can be fed into other data modelr   c                     g }t          t          | j                            D ];}|                    | j        |         | j        |         | j        |         f           <|S )zCUtility function to get the coordinates as a single list of tuples.)rangelenx_coord_listappendy_coord_listz_coord_list)selfout_listis      ^/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/mmtf/api/mmtf_reader.py
get_coordszMMTFDecoder.get_coords   se    s4,--.. 	_ 	_AOOT.q1$2CA2FtGXYZG[]^^^^    c                 *    t          j        |           S )zMUtility function to get all the inter group bonds for the structure in pairs.)r   	get_bonds)r   s    r   r   zMMTFDecoder.get_bonds   s    &t,,,r   c                 4   t          |d                   | _        t          |d                   | _        t          |d                   | _        t          |d                   | _        d|v rt          |d                   | _        ng | _        d|v rt          |d                   | _        ng | _        d|v rt          |d                   | _        ng | _        d|v rt          |d                   | _        ng | _        d	|v rt          |d	                   | _	        ng | _	        t          |d
                   | _
        |d         | _        d|v rt          |d                   | _        ng | _        |d         | _        |d         | _        d|v rt          |d                   | _        ng | _        t          |d                   | _        d|v r|d         | _        nd| _        d|v rt          |d                   | _        nd| _        d|v rt          |d                   | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d|v r|d         | _        ng | _        d|v r|d         | _        ng | _        d|v r|d         | _        nd| _        d|v r|d         | _        nd| _        d |v r|d          | _        nd| _        d!|v r|d!         | _         nd| _         d"|v rt          |d"                   | _!        tE          |d#                   | _#        tE          |d$                   | _$        tE          |d%                   | _%        tE          |d&                   | _&        tE          |d'                   | _'        dS )(zrFunction to decode the input data and place it onto the class.
        :param input_data: the input data as a dictgroupTypeList
xCoordList
yCoordList
zCoordListbFactorListoccupancyList
atomIdList
altLocListinsCodeListgroupIdList	groupListsequenceIndexListchainsPerModelgroupsPerChainchainNameListchainIdList
spaceGroupNbondAtomListbondOrderListmmtfVersionmmtfProducerstructureIdtitleexperimentalMethodsdepositionDatereleaseDate
entityListbioAssemblyListrFreerWork
resolutionunitCellsecStructListnumBonds	numChains	numModelsnumAtoms	numGroups)(r   group_type_listr
   r   r   b_factor_listoccupancy_listatom_id_listalt_loc_listins_code_listgroup_id_list
group_listsequence_index_listchains_per_modelgroups_per_chainchain_name_listchain_id_listspace_groupbond_atom_listbond_order_listmmtf_versionmmtf_producerstructure_idr-   experimental_methodsdeposition_daterelease_dateentity_listbio_assemblyr_freer_workr5   	unit_cellsec_struct_listint	num_bonds
num_chains
num_models	num_atoms
num_groups)r   
input_datas     r   decode_datazMMTFDecoder.decode_data   s     ,J,GHH(L)ABB(L)ABB(L)ABBJ&&!-j.G!H!HD!#Dj((".z//J"K"KD"$D:%% ,Z-E F FD "D:%% ,Z-E F FD "DJ&&!-j.G!H!HD!#D)*]*CDD$[1*,,'3J?R4S'T'TD$$')D$ *+; < *+; <j((#/
?0K#L#LD  #%D )*]*CDD:%%),7D#DZ''".z./I"J"JD"&Dj((#/
?0K#L#LD  #'D J&& *= 9D $DZ''!+N!;D!%DJ&& *= 9D $Dj  #G,DJJDJ J..(23H(ID%%(,D%z))#-.>#?D  #'D J&& *= 9D $D:%%),7D!D
** *+< =D "Dj  $W-DKKDKj  $W-DKKDK:%%(6DOO"DO##'
3DNN!DNj((#/
?0K#L#LD Z
344j566j566Z
344j566r   c           	         |                     | j        t          | j                  t          | j                  t          | j                  t          | j                  | j                   t          j	        | |           t          j
        | |           t          j        | |           t          j        | |           t          j        | |           t          j        | |           |                                 dS )zWrite the data from the getters to the setters.

        :param data_setters: a series of functions that can fill a chemical
        data structure
        :type data_setters: DataTransferInterface
        N)init_structurerZ   r	   r
   r=   rI   rF   rO   r   add_entity_infoadd_atomic_informationadd_header_infoadd_xtalographic_infogenerate_bio_assemblyadd_inter_group_bondsfinalize_structure)r   data_setterss     r   pass_data_onzMMTFDecoder.pass_data_on   s     	##DNC8I4J4JCPTPdLeLe$'(:$;$;SAV=W=WY]Yj	l 	l 	l%dL999,T<@@@%dL999+D,???+D,???+D,???'')))))r   N)__name__
__module____qualname____doc__model_counterchain_countergroup_counteratom_counterr   r   r`   rk    r   r   r   r      sn        ffMMML  - - -o7 o7 o7d* * * * *r   r   )mmtf.codecsr   
mmtf.utilsr   sysobjectr   rt   r   r   <module>ry      sp    $ $ $ $ $ $ $ $ $ $ $ $ 



T* T* T* T* T*& T* T* T* T* T*r   