
     i                          d Z ddlmZ ddlZddlmZ ddlmZ  G d d	ej	                  Z
 G d
 dej                  ZdS )a  NAMDBIN files format --- :mod:`MDAnalysis.coordinates.NAMDBIN`
================================================================================

Read/Write coordinates in `NAMD double-precision binary format`_ (suffix "coor" or "namdbin").

.. _`NAMD double-precision binary format` : https://www.ks.uiuc.edu/Research/namd/2.10/ug/node11.html#SECTION00061500000000000000


Classes
-------

.. autoclass:: NAMDBINReader
   :members:

.. autoclass:: NAMDBINWriter
   :members:

    )packN   )base   )utilc                   D    e Zd ZdZddgZddiZd Zed             Zd Z	d	S )
NAMDBINReaderzKReader for NAMD binary coordinate files.


    .. versionadded:: 1.0.0
    COORNAMDBINlengthAngstromc                    t          | j        d          5 }t          j        |t          j        d          d         | _         | j        | j        fi | j        | _        d| j        _	        t          j        |t          j
        | j        dz            }t          j        |t                                        | j        d          | j        j        d d <   d d d            d S # 1 swxY w Y   d S )Nrbr   dtypecountr      )openfilenamenpfromfileint32n_atoms	_Timestep
_ts_kwargstsframefloat64arrayfloatreshape_pos)selfnamdbincoord_doubles      h/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/MDAnalysis/coordinates/NAMDBIN.py_read_first_framezNAMDBINReader._read_first_frame<   s   $-&& 		';wbhaHHHKDL$dnT\EET_EEDGDGM;rz1A  L !h|U;;CCa DGLO		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   CC$$C(+C(c                     t          | d          5 }t          j        |t          j        d          d         }d d d            n# 1 swxY w Y   |S )Nr   r   r   r   )r   r   r   r   )r   kwargsr$   r   s       r&   parse_n_atomszNAMDBINReader.parse_n_atomsI   s    (D!! 	GWk'CCCAFG	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   (AA	A	c                     t          |fi |S )zReturns a NAMDBINWriter for *filename*.

        Parameters
        ----------
        filename: str
            filename of the output NAMDBIN file

        Returns
        -------
        :class:`NAMDBINWriter`

        )NAMDBINWriter)r#   r   r)   s      r&   WriterzNAMDBINReader.WriterO   s     X00000    N)
__name__
__module____qualname____doc__formatunitsr'   staticmethodr*   r-    r.   r&   r	   r	   2   sm          i Fz"E     \
1 1 1 1 1r.   r	   c                   2    e Zd ZdZddgZdddZd	dZd ZdS )
r,   zWriter for NAMD binary coordinate files.


    Note
    ----
    * Does not handle writing to bz2 or gz compressed file types.


    .. versionadded:: 1.0.0
    r
   r   Nr   )timer   c                 8    t          j        |          | _        dS )z
        Parameters
        ----------
        filename : str or :class:`~MDAnalysis.lib.util.NamedStream`
             name of the output file or a stream
        n_atoms  : int
            number of atoms for the output coordinate
        N)r   r   )r#   r   r   r)   s       r&   __init__zNAMDBINWriter.__init__n   s     h//r.   c           
         t          |d          r4|j        }t          |          }|j                            |dz            }nd}t          |          dt          j        | j        d          5 }|	                    t          d|                     |	                    t          d                    t          |                    g|R             ddd           dS # 1 swxY w Y   dS )a<  Write information associated with ``obj`` at current frame into
        trajectory


        Parameters
        ----------
        obj : :class:`~MDAnalysis.core.groups.AtomGroup` or
              :class:`~MDAnalysis.core.universe.Universe`
              write coordinate information associated with `obj`


        .. versionchanged:: 1.0.0
           Renamed from `write` to `_write_next_frame`.
        .. versionchanged:: 2.0.0
           Deprecated support for Timestep argument has now been removed.
           Use AtomGroup or Universe as an input instead.
        atomsr   z-Input obj is neither an AtomGroup or UniverseNwbiz{:d}d)hasattrr<   len	positionsr!   	TypeErrorr   openanyr   writer   r3   )r#   objr<   r   coorerrmsgr$   s          r&   _write_next_framezNAMDBINWriter._write_next_framey   s0   $ 3   	.IE%jjG?**7Q;77DDDFF##-\$-.. 	B'MM$sG,,---MM$w~~c$ii88@4@@@AAA		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   1A$C""C&)C&)N)r/   r0   r1   r2   r3   r4   r:   rH   r6   r.   r&   r,   r,   _   s_        	 	 i FZ00E	0 	0 	0 	0B B B B Br.   r,   )r2   structr   numpyr    r   libr   SingleFrameReaderBaser	   
WriterBaser,   r6   r.   r&   <module>rO      s   2 $                      *1 *1 *1 *1 *1D. *1 *1 *1Z8B 8B 8B 8B 8BDO 8B 8B 8B 8B 8Br.   