;i dZddlZddlZddlZddlZddlZddlm Z ej ej Z e de dde ddGddejZdd Zeejd krejd Znfd ZejesJe jdd dd\ZZesejdneeedzejedZeZ e !ede "e e#dkrej$dSdS)a  In this example we create a subclass of PlotCurveItem for displaying a very large data set from an HDF5 file that does not fit in memory. The basic approach is to override PlotCurveItem.viewRangeChanged such that it reads only the portion of the HDF5 data that is necessary to display the visible portion of the data. This is further downsampled to reduce the number of samples being displayed. A more clever implementation of this class would employ some kind of caching to avoid re-reading the entire visible waveform at every update. N) QtWidgetsz pyqtgraph example: HDF5 big dataFic&eZdZdZdZdZdZdS)HDF5PlotcVd|_d|_tjj|g|Ri|dS)Ni')hdf5limitpg PlotCurveItem__init__)selfargskwdss KC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/examples/hdf5.pyr zHDF5Plot.__init__ s:   !$666666666c<||_|dSN)rupdateHDF5Plot)r datas rsetHDF5zHDF5Plot.setHDF5%s!  rc.|dSr)r)r s rviewRangeChangedzHDF5Plot.viewRangeChanged)s rc|j|gdS|}|dS|d}t dt |ddz }t t|jt |ddz}t ||z |jz dz}|dkr|j||}d}nEd||z |zz}tj |dz|jj }|} d} d|z|z} | |dz kr|j| t || | z} | t| z } | dt| |z|z t| |z|} | d} | d}||| | | j ddzzd<| |d| zd| z| j ddzzd<| | j ddzz } | |dz k|d| }|dz}||||d|||ddS)Nr)dtype@B)axisg?)rsetData getViewBox viewRangemaxintminlenrnpzerosrreshapeshapesetPosresetTransformscale)r vbrange_startstopdsvisibler+samples sourcePtr targetPtr chunkSizechunkchunkMaxchunkMins rrzHDF5Plot.updateHDF5Plot,s 9  LL    F __   : F"Ac&)nnQ&''3ty>>3vay{#3#344$u* * + +a / 77id +GEEDJ2-.Ghwqy @@@GII!"*Id1f$$ )CYy5H,I,I"IJSZZ' 4E B"445==c%jj"nbQQ!99!9,, 99!9,,CK )EKN1,<"?FN) AiK Aq0@$@BCU[^A-- d1f$$ jyj)GHE W E1  5!rN)__name__ __module__ __qualname__r rrrrrrrsP777 55555rr5wctjdtj}t jdd}|d|dd|d}||j|j zz}tj d d |5}t|D]}|j d |j d zg}|||||j d  d <|d z }|r;|t#jdt'j|d z }d d d n #1swxYwY|d S) zzCreate a large HDF5 data file for testing. Data consists of 1M random samples tiled through the end of the array. r)size test.hdf5wrTr)rchunksmaxshapezGenerating test.hdf5...rNr)r%randomnormalastypefloat32h5pyFilecreate_datasetr?itemsizer ProgressDialogranger(resize wasCanceledcloseosremovesysexit) finalSizer6frnChunksdlginewshapes r createFiler[fs I  '  * * 1 1"* = =E +s##AV%wGGG V9DEJ78G 4a A A Sw  A 1  A67H KK ! ! !%*D%+a.!! " 1HC     +&&&  q               GGIIIIIsB0EEErr@zCreate HDF5 Dataset?zeThis demo requires a large HDF5 array. To generate a file, enter the array size (in GB) and press OK.g@geArr__main__)r=)%__doc__rQrSrHnumpyr% pyqtgraphr pyqtgraph.QtrmkQAppplotpltsetWindowTitleenableAutoRange setXRanger rr[r$argvfileNamepathisfile QInputDialog getDoubler?okrTr"rIrVcurveraddItemr9execr<rrrrs    """"""  bgii5666E5!!! aBBBBBrBBBN23sx==1x{HHH 7>>( # #&)33D:PSz|@@b & CHQKKKK Jss48}} % % %DIh  ai E z BGIIIIIr