
     i                     X    d Z ddlZddlZddlmZ ddlmZ  G d dej                  Z	dS )a  
DESRES file format --- :mod:`MDAnalysis.coordinates.DMS`
========================================================

Classes to read 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
    N   )base)triclinic_boxc                   <    e Zd ZdZdZddddZd ZddZd	 Zd
 Z	dS )	DMSReaderz}
    Reads both coordinates and velocities.

    .. versionchanged:: 0.11.0
       Frames now 0-based instead of 1-based
    DMSNAzA/ps)timelengthvelocityc                 l    |                     d           |                                }d |D             S )NSELECT * FROM particlec                 <    g | ]}|d          |d         |d         fS xyz ).0ps     d/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/MDAnalysis/coordinates/DMS.py
<listcomp>z-DMSReader.get_coordinates.<locals>.<listcomp>8   s+    <<<Q333(<<<    executefetchall)selfcur	particless      r   get_coordinateszDMSReader.get_coordinates5   s6    ,---LLNN	<<)<<<<r   c                 ~    g d|                     d           |                                }fd|D             S )Nr   r   c                 H    g | ]t          fd D                       S )c                      g | ]
}|         S r   r   )r   cr   s     r   r   z@DMSReader.get_particle_by_columns.<locals>.<listcomp>.<listcomp>?   s    ---qt---r   )tuple)r   r   columnss    @r   r   z5DMSReader.get_particle_by_columns.<locals>.<listcomp>?   s7    BBB1----W---..BBBr   r   )r   r   r&   r   s     ` r   get_particle_by_columnsz!DMSReader.get_particle_by_columns:   sK    ?%ooG,---LLNN	BBBB	BBBBr   c                     |                     d           |                                }t          |          dk    sJ d |D             }d |D             }d |D             }|||dS )NzSELECT * FROM global_cell   c                     g | ]
}|d          S )r   r   r   rows     r   r   z-DMSReader.get_global_cell.<locals>.<listcomp>E       &&&#SX&&&r   c                     g | ]
}|d          S )r   r   r+   s     r   r   z-DMSReader.get_global_cell.<locals>.<listcomp>F   r-   r   c                     g | ]
}|d          S )r   r   r+   s     r   r   z-DMSReader.get_global_cell.<locals>.<listcomp>G   r-   r   r   )r   r   len)r   r   rowsr   r   r   s         r   get_global_cellzDMSReader.get_global_cellA   s~    /000||~~4yyA~~~~&&&&&&&&&&&&&&&QQ'''r   c                    d }d }d }t          j        | j                  5 }||_        |                                }|                     |          }|                     |g d          }|                     |          }d d d            n# 1 swxY w Y   |st          d          t          |          | _
        t          j        |t          j                  }|                                sd } | j        j        t          j        |t          j                  fd|i| j        | _        d| j        _        t)          |d         |d	         |d
                   | j        _        | j        r|                     | j        j                   | j        j        '|                     | j        j        d d                    | j        j        r#|                     | j        j                   d S d S d S )Nc                 `    i }t          | j                  D ]\  }}||         ||d         <   |S )Nr   )	enumeratedescription)cursorr,   didxcols        r   dict_factoryz1DMSReader._read_first_frame.<locals>.dict_factoryN   s=    A%f&899 % %SH#a&		Hr   )vxvyvz)r&   zFound no coordinates)dtype
velocitiesr   r   r   r   r)   )sqlite3connectfilenamerow_factoryr7   r    r'   r2   IOErrorr0   n_atomsnparrayfloat32any	_Timestepfrom_coordinates
_ts_kwargstsframer   
dimensionsconvert_unitsconvert_pos_from_native_poshas_velocitiesconvert_velocities_from_native_velocities)r   coords_listvelocities_listr;   conr   unitcellr@   s           r   _read_first_framezDMSReader._read_first_frameJ   sP   	 	 	 _T]++ 	1s*CO**,,C..s33K"::/// ;  O ++C00H	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1  	20111;''XoRZ@@@
~~ 	J1$.1H[
333
 
!
 o
 

 *SM8C=(3-
 
  	I((666w!-,,G&rr*   w% I33DG4GHHHHH	I 	II Is   ABBB)N)
__name__
__module____qualname____doc__formatunitsr    r'   r2   r[   r   r   r   r   r   *   s~          FSf==E= = =
C C C C( ( (/I /I /I /I /Ir   r   )
r_   numpyrG   rA    r   corer   SingleFrameReaderBaser   r   r   r   <module>rf      s   0
 
                 OI OI OI OI OI* OI OI OI OI OIr   