
     i                         d Z ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZ  G d d	e          Z G d
 de          ZdS )a  
DESRES Molecular Structure file format topology parser
======================================================

Classes to read a topology from a DESRES_ Molecular Structure file
format (DMS_) coordinate files (as used by the Desmond_ MD package).

.. _DESRES: http://www.deshawresearch.com
.. _Desmond: http://www.deshawresearch.com/resources_desmond.html
.. _DMS: http://www.deshawresearch.com/Desmond_Users_Guide-0.7.pdf

Classes
-------

.. autoclass:: DMSParser
   :members:
   :inherited-members:

    N   )TopologyReaderBasechange_squash   )Topology)Atomids	AtomnamesBondsChargesChainIDsMassesResidsResnumsResnamesSegidsAtomAttrc                       e Zd ZdZdZdZdS )AtomnumszThe number for each AtomatomnumsatomnumN)__name__
__module____qualname____doc__attrnamesingular     g/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/MDAnalysis/topology/DMSParser.pyr   r   @   s        ""HHHHr   r   c                       e Zd ZdZdZd ZdS )	DMSParsera{  Read a topology from a DESRES_ Molecular Structure file.

    Format (DMS_) coordinate files (as used by the Desmond_ MD package).

    Reads the following attributes:
      Atom:
        - Atomids
        - Atomnums
        - Atomnames
        - Masses
        - Charges
        - Chainids
      Residue:
        - Resnames
        - Resids
      Segment:
        - Segids

    .. note::

        By default, atomtypes will be guessed on Universe creation.
        This may change in release 3.0.
        See :ref:`Guessers` for more information.

    .. _DESRES: http://www.deshawresearch.com
    .. _Desmond: http://www.deshawresearch.com/resources_desmond.html
    .. _DMS: http://www.deshawresearch.com/Desmond_Users_Guide-0.7.pdf
    .. versionchanged:: 2.8.0
        Removed type guessing (attributes guessing takes place now
        through universe.guess_TopologyAttrs() API).

    DMSc                 	   t           j                            | j                  s't	          d                    | j                            d }i }t          j        d t          j        d t          d i}t          j        | j                  5 }dt          j        fdt          j        fdt          j        fd	t          j        fd
t          fdt          fdt          j        fdt          fdt          ff	D ]\  }}	 |                                }||         |_        |                    d                    |                     |                                }	t          j        |	|          ||<   }# t          j        $ r d}
t	          |
          dw xY w	 ||_        |                    d           |                                }g }i }|D ]L}t%          t'          |d         |d         g                    }|                    |           |d         ||<   M||d<   ||d<   n%# t          j        $ r d}
t	          |
          dw xY w	 ddd           n# 1 swxY w Y   g }dt*          fdt,          fdt.          fd	t0          fd
t2          fdt4          ffD ])\  }}|                     |||                              *t7          |d         |d         |d         f|d         |d                                         |d         |d         f          \  }\  }}}t;          |          }|                    t=          |                     |                    t?          |                     |                    tA          |                     tC                    rtC          d D                       st7          ff          \  }\  t          j"                  }fd|D             |d tG          |          D             t          j        fd|D                       }t;                    }|                    tI                               n@d}|                    tI          t          j        dgt                                         d}|                    tK          |d                              tM          t;          |d                   |||||           }|S )!z8Parse DMS file *filename* and return the Topology objectzNo such file: {0}c                 `    i }t          | j                  D ]\  }}||         ||d         <   |S )z\
            Fetch SQL records as dictionaries, rather than the default tuples.
            r   )	enumeratedescription)cursorrowdidxcols        r   dict_factoryz%DMSParser.parse.<locals>.dict_factoryr   s?     A%f&899 % %SH#a&		Hr   c                     |d         S Nr   r   crs     r   <lambda>z!DMSParser.parse.<locals>.<lambda>   s
    1Q4 r   c                     |d         S r.   r   r/   s     r   r2   z!DMSParser.parse.<locals>.<lambda>   s
    QqT r   c                 P    t          |d                                                   S r.   )strstripr/   s     r   r2   z!DMSParser.parse.<locals>.<lambda>   s    QqTZZ\\!2!2 r   idanummasschargenameresnameresidchainsegidzSELECT {} FROM particle)dtypez*Failed reading the atoms from DMS DatabaseNzSELECT * FROM bondp0p1orderbond	bondorderz*Failed reading the bonds from DMS Databasec              3      K   | ]}|d u V  	d S )Nr   ).0vals     r   	<genexpr>z"DMSParser.parse.<locals>.<genexpr>   s&      &I&Issd{&I&I&I&I&I&Ir   c                 "    i | ]}||         S r   r   )rG   r*   
res_segidss     r   
<dictcomp>z#DMSParser.parse.<locals>.<dictcomp>   s    BBBsJsOBBBr   c                     i | ]\  }}||	S r   r   )rG   nidxr?   s      r   rL   z#DMSParser.parse.<locals>.<dictcomp>   s    GGGKD%E4GGGr   c                 ,    g | ]}|                  S r   r   )rG   r*   idx2segrN   s     r   
<listcomp>z#DMSParser.parse.<locals>.<listcomp>   s"    "L"L"L#4#5"L"L"Lr   r   SYSTEM)attrsatom_resindexresidue_segindex)'ospathisfilefilenameIOErrorformatnpint32float32objectsqlite3connectr'   row_factoryexecutefetchallarrayDatabaseErrortuplesortedappendr   r   r   r   r	   r   r   copylenr   r   r   anyuniquer%   r   r
   r   )selfkwargsr,   rS   facsconr   dtcurvalserrmsgbondsbondlistrE   bdesctopattrsattrclsatom_residx
res_residsres_resnumsres_resnames
n_residues
res_segidxuniq_seg
n_segmentstoprP   rN   rK   s                               @@@r   parsezDMSParser.parsek   sd    w~~dm,, 	E-44T]CCDDD	 	 	  H''J))22
 _T]++ '	/s rx "$2:& F#"(#&!&!
! ? ?"	?**,,C&*2hCOKK < C CH M MNNN<<>>D
 ')ht2&>&>&>E(OO	 , 4 4 4IF!&//t34/".0111
 	 1 1A 4!D'(:!;!;<<DOOD)))&'jIdOO (f%.k"" ( 0 0 0Efoo4/0 #O'	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/R  7OXVwYh
 	. 	.ID# OOCCd,,---- wy!15>B'N'N'')))$'N	  	IHj+|Z __
z**+++,,---..///z?? 	3&I&Ij&I&I&I#I#I 	(5
}) )%J y,,HBBBBzBBBG!JGG9X3F3FGGGD"L"L"L"L"L"L"L"LMMJZJOOF:..////JOOF28XJf#E#E#EFFGGGJeFm,,---d%'
 
 
 
sE   A)I;AE2I2"FI0H&AI&"IIIIN)r   r   r   r   r[   r   r   r   r   r!   r!   G   s:         B F~ ~ ~ ~ ~r   r!   )r   numpyr\   r`   rV   baser   r   core.topologyr   core.topologyattrsr   r	   r
   r   r   r   r   r   r   r   r   r   r!   r   r   r   <module>r      sD  0 &      				 3 3 3 3 3 3 3 3 $ $ $ $ $ $                             x   b b b b b" b b b b br   