a e@sddlZddlZddlZddlmZedejd<ejd dejd dddl Z ddl Z ddl mZGd d d ZdS) NZpdfzsavefig.formatz keymap.backleftzkeymap.forwardright)Hovertipc@seZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZdZdZdZdZgZgdZgdZdZdZdZdZdZdZdZdZdZ dZ!iZ"d e"d <d e"d <d e"d<de"d<de"d<ddZ#ddZ$ddZ%ddZ&ddZ'ddZ(dd Z)d!d"Z*dcd#d$Z+d%d&Z,d'd(Z-d)d*Z.d+d,Z/ddd-d.Z0d/d0Z1d1d2Z2ded3d4Z3d5d6Z4d7d8Z5d9d:Z6d;d<Z7d=d>Z8d?d@Z9dAdBZ:dCdDZ;dEdFZdKdLZ?dMdNZ@dOdPZAdQdRZBdSdTZCdUdVZDdWdXZEdYdZZFd[d\ZGd]d^ZHd_d`ZIdadbZJdS)f DisplayWindowNFFFFZfixedTZbluedataZdimgreybaseZ darkorangemainZcrimsonexpZgreenT*cCs |dSN) mainwindowselfr#/u1/labor_progs/Fajho2/FHdisplay.py__init__<szDisplayWindow.__init__cCs|j|_||_dSr) currentcallprevcallrZfunctionrrrpushcall@szDisplayWindow.pushcallcCs|j|_||_dSr) active_indexprevious_index)r new_indexrrr pushindexDszDisplayWindow.pushindexc sjjdkrZt_jddjjddjddjddjD] }| qdj dtj jtj d dd }|j d d d d d tj|d dddd}|jd d dtj jtj ddd }|j d dd d d tj|dddddjd}|jd d dt|d}tj jtj ddd }|j ddd d d tj|dddddtd}|jd d dtjd}tj jtj d|rdndd }|j dd d d d tj|d| dd| fdd d}|jd d dt|d!}tj jtj d|r dndd }|j ddd d d tj|d"|dd|fd#d d}|jd d dt|d$}tj jtj d|rdndd }|j dd%d d d tj|d&|dd|fd'd d}|jd d dt|d(}jrVtj jtj dd)d }|j d%d d d d tj|d*d+ddd,jd}|jd d dt|d-}jjgd.dd/d0jjgd.dd1d0jd2jj dS)3Nz %dx%d+%d+%d)iirrblack)bgz *foregroundz*highlightThicknessg333333?uFajhő kiértékelő 2rmasterZrelief borderwidthrZrowZcolumnpadxpadyuMérés betöltése:whiter!textrfgactiveforegroundr%r&#000064Beállítások#00008B#006ec5r!r)rr*r+activebackgroundcommandÁbrázolási beállításokF Kilépész .fh_config#3b3b3e#004200u VízértékcsdjS)NuVízérték mérés) newfilewindow calibwindowrrrrz*DisplayWindow.mainwindow..u3Vízérték mérés megnyitása és kiértékeléseuBeejtéscsdjS)NuBeejtéses mérés)r: beejteswindowrrrrr<r=u8Beejtéses fajhőmérés megnyitása és kiértékeléseru RáfűtéscsdjS)NuRáfűtéses mérés)r: futeswindowrrrrr<r=u?Együtt fűtéses fajhőmérés megnyitása és kiértékelése#800080uElőzőt folytat#8B008B#a841b0uVissza a megnyitott méréshez)rr-rr/KZweightZminsize2ZWM_DELETE_WINDOW)!rrwindowtkZTkZgeometryZ configureZ option_addwinfo_childrendestroytitleFrameRAISEDgridLabelpackButton optionswindowr framecolor buttoncoloractivebuttoncolorquitospathexistsactive_measurementevalcallcolumnconfigure rowconfigureZprotocol on_closingZmainloop)rwidgetframelabel label_ttpZ bCalibFoundrrrrHs      $  0  ,  ,  zDisplayWindow.mainwindowcCs|jD] }|q tj|jtjddd}|jdddddtj||ddddd}|jddd t }|r||_ | |j | d d |j js||jkrtd |n|dS) Nrrr r#r$u megnyitása... (másik ablak)r'r(r,rzFigure 1ucVigyázat: még hiányoznak a kalibrációs adatok! Először a vízérték mérést értékeld ki!)rGrIrJrHrLrMrNrOrPFHutilnewrZshow setfigtitleZbCalibr;printr)rZmtyper5r_r`raZtemprrrr:s(   zDisplayWindow.newfilewindowcCs |rdSdS)Nr9r8rrZ conditionrrrrSszDisplayWindow.framecolorcCs |rdSdS)Nz#006400r8rrhrrrrTszDisplayWindow.buttoncolorcCs |rdSdS)Nz#008b20z#47474arrhrrrrUszDisplayWindow.activebuttoncolorc Cs|r||j|jD] }|q|jdtj|jtjddd}|j dddddtj |dd d d d |j d }|j ddd t |d}tj|jtjd||jd}|j dddddtj ||jrdnd||jd d ||j|jd }|j ddd t |d}tj|jtjd||jd}|j dddddtj ||jrLdnd||jd d ||j|jd }|j ddd t |d}dS)Nr0r-r@r rr#r$VisszarAr'rBr3r,Vissza a főmenübez Legend: bez Legend: kiu$Legyen-e színmagyarázat az ábránz AutoZoom: bez AutoZoom: kiuhBekapcsolva a program magától odanagyít az ábrába ahova kell illesztéseknél. (Kényelmi funkció))rrRrGrIrJrKrHrLrMrNrQrrPrrSbLegendrTrU toggleLegend bAutoZoomtoggleAutoZoom)r bPushcallr_r`rarbrrrrRsF     4  6zDisplayWindow.optionswindowcCs&|j |_||j|jdddSNF)ro)rkrerZrRrrrrrl s  zDisplayWindow.toggleLegendcCs|j |_|jdddSrp)rmrRrrrrrn&s zDisplayWindow.toggleAutoZoomc s0jj_js*tdddjD] }| q@j dt j jt j ddd}|jddd d d t j|d d d d djd}|jd d dt|d}t j jt j ddd}|jddd d d t j|ddd d dfddd}|jd d dt|d}t j jt j ddd}|jddd d d t j|ddd d djd}|jd d dt|d}t j jt j djj d}|jddd d d t j|jjsdndjj d d jj fd dd}|jd d dt|d!}t j jt j djj o$jjd}|jddd d d jjrt j|jjs\d"nd#jj otjjjj ojjd d fd$dd%}nt j|d"d&d d d'}|jd d dt|d(}t j jt j djj ojjd}|jd)dd d d jjrft j|d*jj o6jjjj oNjjd d fd+dd%}nt j|d*d&d d d'}|jd d dt|d,}t j jt j djj ojjd}|jddd d d jjr6t j|jjsd-nd.jj ojjjj ojjd d fd/dd%}nt j|d-d&d d d'}|jd d dt|d0}t j jt j djjd}|jd1dd d d jjrt j|d2jjjjd d fd3dd%}nt j|d2d&d d d'}|jd d dt|d4}jjgd5dd6d7jjgd5dd8d7dS)9Nz4Error : No active measurementuVízérték méréseZ vizertek_abrauVízérték kiértékeléser-r@r rr#r$rirAr'rBr3r,rj#000080r/ Ábrázol#0000CDr2cs jSrrerZrrrrr<Pr=z+DisplayWindow.calibwindow..GÁbra újrarajzolása Ha becsuktad az ablakot, ezzel tudod visszahozni.r.r0r1r61) Előszakasz illesztése1) Előszakasz módosításacs jSr)selecteloszakaszwindowr;rrrrr<fr=Előszakasz illesztése2) Utószakasz illesztése2) Utószakasz módosításacs jSr)selectutoszakaszwindowr;rrrrr<sr=r!r)rr4r*r+r5r8r(Utószakasz illesztéser(3) Korrigált hőmérséklet számolásacs jSr) calculateTsr;rrrrr<r=*Korrigált hőmérséklet felintegrálása4) Főszakasz illesztése4) Főszakasz módosításacs jSr)selectfoszakaszwindowr;rrrrr<r=Főszakasz illesztéserCu!5) Vízérték és α számolásacs tjSr)FHevalZcalibrZrrrrr<r=u4Vízérték és hőátadási tényező kiszámolásarr-rr/rCr#rDrErF)rr;r[rZrgrrfrGrIrJrKrHrLrMrNrQrrPrrRrSbBaserTrUbExprObTsbMainCorrectedr\r]rr_r`rarbrrrr;*s        F  \  N  \   6 zDisplayWindow.calibwindowc sTjj_js*tdddjD] }| q@j djj ddddjj ddd dt jjt jdd d }|jddd d d t j|dddddjd}|jd d dt|d}t jjt jddd }|jddd d d t j|dddddfddd}|jd d dt|d}t jjt jddd }|jddd d d t j|dddddjd}|jd d dt|d }t jjt jdjj d }|jddd d d t j|jjsd!nd"jj jj ddfd#dd$}|jd d dt|d%}t jjt jdjj oHjjd }|jddd d d jjrt j|jjsd&nd'jj ojjjj ojjddfd(dd$}nt j|d&d)ddd*}|jd d dt|d+}t jjt jdjj ojjd }|jd,dd d d jjrt j|d-jj oZjjjj orjjddfd.dd$}nt j|d-d)ddd*}|jd d dt|d/}t jjt jdjj oڈjjd }|jddd d d jjrZt j|jjsd0nd1jj o*jjjj oBjjddfd2dd$}nt j|d0d)ddd*}|jd d dt|d3}t jjt jdjjd }|jd4dd d d jjrt j|d5jjjjddfd6dd$}nt j|d5d)ddd*}|jd d dt|d7}jj gd8dddjj gd8dd ddS)9Nz4Error : No active measurementuFajhő mérése ráfűtésselZ rafutes_abrauRáfűtés kiértékeléserr-rDrErFr@r r#r$rirAr'rBr3r,rjrqr/rrrsr2cs jSrrtrrrrr<r=z+DisplayWindow.futeswindow..rur.r0r1r6rvrwcs jSr)rxr?rrrrr<r=r}ryrzr{cs jSr)r|r?rrrrr<r=r8r(r~rrcs jSr)rr?rrrrr< r=rrrcs jSr)rr?rrrrr<r=rrCu5) Hőkapacitás számolásacs tjSr)rZrafutrZrrrrr<'r=uHőkapacitás kiszámolásar)rr?r[rZrgrrfrGrIrJrKr\r]rHrLrMrNrQrrPrrRrSrrTrUrrOrrrrrrr?s        F  \  N  \   6 zDisplayWindow.futeswindowc sjj_js*tdjD] }|q4j d|r^ ddt j jt j ddd}|jddd d d t j|d d d d djd}|jd d dt|d}t j jt j ddd}|jddd d d t j|ddd d djd}|jd d dt|d}t j jt j ddd}|jddd d d t j|ddd d dfddd}|jd d dt|d}t j jt j djj d}|jddd d d t j|jjsdndjj jj d d fd dd!}|jd d dt|d"}t j jt j djj o(jjd}|jddd d d jjrt j|jjs`d#nd$jj oxjjjj ojjd d fd%dd!}nt j|d#d&d d d'}|jd d dt|d(}t j jt j djj ojjd}|jd)dd d d jjrjt j|d*jj o:jjjj oRjjd d fd+dd!}nt j|d*d&d d d'}|jd d dt|d,}t j jt j djjd}|jddd d d jjrt j|d-jjjjd d fd.dd!}nt j|d-d&d d d'}|jd d dt|d/}t j jt j djjd}|jd0dd d d jjrt j|d1jjjjd d fd2dd!}nt j|d1d&d d d'}|jd d dt|d3}jjgd4dd5d6jjgd4dd7d6dS)8Nz6Error : No active measurementuBeejtés kiértékeléseuFajhő mérése beejtésselZ beejtes_abrar-r@r rr#r$rirAr'rBr3r,rjr.r/r0r1r2r6rqrrrscs jSrrtrrrrr<cr=z-DisplayWindow.beejteswindow..rurvrwcs jSr)rxr>rrrrr<or=r}ryrzr{cs jSr)r|r>rrrrr<{r=r8r(r~rrcs jSr)rr>rrrrr<r=ru4) Integráláscs jSr)selectintegralwindowr>rrrrr<r=u5Hőkapacitás kiszámolása a görbe integráljábólrCu!5) Variált határú integráláscsfddS)Ncs dSNF)r>rrrrr<r=z?DisplayWindow.beejteswindow....)selectSIwindowrrrrr<r=u_Integrálás variált felső határral Hőkapacitás felsőhatár függésének vizsgálatáhozrrDrErF)rr>r[rZrgrrGrIrJrKrfrHrLrMrNrQrrPrrRrSrrTrUrrOrr\r])rrfr_r`rarbrrrr>6s        F  \  N   6   6 zDisplayWindow.beejteswindowc Cs0|jdkr,|d|jD] }|q |jd|jjdddd|jjddddtj |jtj ddd}|j ddd d d tj |d t d|d d d d}|jd d d|jjdddd|jjddddtj |jtj ddd}|j ddd d d tj |d|jd|d d d d}|jd d ddS)NuBiztos ki akarsz lépni?rr-rDrErFr8r r#r$r7Fr'r!r)r5rr4r*r+r,ri)rrrGrIrJrKr\r]rHrLrMrNrQrVrUrPrrr_r`rarrrr^s6     zDisplayWindow.on_closingcCs|jj|jd|_dSr)figurecanvasmpl_disconnectccloseidreventrrron_figure_closeszDisplayWindow.on_figure_closec s|jstddS|js6t|_|jjd|j|_|rJtj nt tj j j|jdddtdtdt}t}|jrtjdd d tj d j d d }jr\jrtj |t|jjj|jdddnXjr6fdd}tj ||||jdddn&tj |t|j j!|jdddj"rtj j j#|jdddt}j$rtj |t|j%j&|jdj'rdnddj(r tj)j*d }tj |t|j+j,j-|jdddj.r`tj |t|j/j0j1|jdddtj |t|d j1|jdd dgd}t2t3|j4D],} |j4| }|rvtj5||| dddqv|j6D]}|rtj5|d d!ddq|j7rt8|t9||j:rt;t<|j=tj>d"d#dS)$Nz(Error : No selected dataZ close_eventr uKaloriméter hőmérséklet)colorrazt (s)zT $(^{\circ}C)$truez--) linestylerr dr u#Előszakasz illesztés (exp. korr.)csbg}|D]T}|jkr0|t|jjq|jkrP|t|q|j q|Sr) Zbase_endappendrcflinbase_abase_bZ exp_startfloatZ basesplineexp_c)Zx_arrZret_yZx_imeasrrgetcomplexbases  z*DisplayWindow.show..getcomplexbaseuElőszakasz illesztésruKorrigált hőmérsékletr uFőszakasz illesztés (korr.)uFőszakasz illesztésuExp. főszakasz illesztésr uUtószakasz illesztés)rr#FF00FF#FF1493#4B0082g?)r)r-r-)xrZalpharZgreygQ?F)block)?rZrgrpltr mpl_connectrrZgcalinesclearclfplotrycolorsxlabelylabelZget_ylimZget_xlimrNnpZlinspacerZbBaseExprcZfexpZ baseexp_AZ baseexp_bZ baseexp_cZ bBaseSplinerrrrZTsZbMainZmain_aZmain_brZbMainExpZ mainexp_startZ mainexp_endZ mainexp_AZ mainexp_bZ mainexp_crZexp_AZexp_brrangelenrangeSelectorGuideLinesZaxvlinerangeSelectorGhosts scaletodataZxlimZylimrkZlegendrKfigtitlere) rr bKeepZoomZ auto_ylimZ auto_xlimZxsrZxs2rirrrresf     , & 2**$      zDisplayWindow.showcCs&||_||j|jjj|dSr)rrerZrrZmanagerZset_window_title)rrKZwintitlerrrrfBs zDisplayWindow.setfigtitlec sjjD] }|qjdjjddddjjddddtj jddd}|j ddd d d tj |d dd d d }|j d d dtj jtj ddd}|j ddd d d tj|dddd d fddd}|j d d dtj jtj ddd}|j ddd d d tj|dddd d fddd}|j d d dtj jtj ddd}|j ddd d d tj|dddd d fddd}|j d d ddS)NuKettős illesztésrr-rDrErFr)r!r"rr#r$uKettős illesztés:r'r(r,Tr ZSplinecs dS)NZspline do_dualfitrrrrr<fr=z-DisplayWindow.dualfitwindow..r}FuExponenciáliscs dS)Nr rrrrrr<qr=ru Kihagyáscs dS)NZomitrrrrrr<|r=)r dualfitwindowrGrIrJrKr\r]rHrLrNrOrPrMrSrQrTrUrrrrrIsR   ,,,zDisplayWindow.dualfitwindowcCs0t|j||j|jr$||j|dSr)rZdualfitrZ dualfitlimitautoshowre parentfunc)rmethodrrrrs zDisplayWindow.do_dualfitcCsRd|_||_||_|jjr"|j|_tj|_d|_ |j rFt t |jd|dS)Nrryr )numberofrangesrfinishfunctionrZrrrZfitbase evaltargetrangewindowtitlermrcautozoomrrangeSelectorMainWindowrparentrrrrxsz$DisplayWindow.selecteloszakaszwindowcCsDd|_||_|j|_tj|_d|_|jr8t t |j d| dS)Nrr~r )rrrrrZfitexprrrmrcrrrZrrrrrr|sz$DisplayWindow.selectutoszakaszwindowcCsd|_||_||_tj|_d|_|jr6t t |j d|j j r| |j||d|j j |j|j<|j j |j|j<|n|dS)NrIntegrál számításaintr)rrrrZ integraterrrmrcrrrZt_beejtrrresetRangeSelectorDataraBoundsrrupdateRangeSelectorMainWindowrrrrrs   z"DisplayWindow.selectintegralwindowcCsd|_||_|j|_tj|_d|_|jr8t t |j d|j j r||j||d|j j |j|j<|j j |j|j<|n|dS)Nr/rrr)rrdrawSIrrZserialintegrateOptimizedrrrmrcrrrZrrrrrrrrrrrrrrs   zDisplayWindow.selectSIwindowcCs<tt||tdtdtd|dS)NuIntegrál felső határa (s)z$C_{m}$ $(J/K)$u%Variált felső határú integrálás)rrrrrrK)ruplimscmsr5rrrrs     zDisplayWindow.drawSIcCs(t|j|jr||j|dSr)rZgetTsOptimizedrZrrerrrrrs  zDisplayWindow.calculateTscCsBd|_||_||_tj|_d|_|jr6t t |j d| dS)Nrrr ) rrrrZfitmaincorrectedrrrmrcrrrZrrrrrrsz#DisplayWindow.selectfoszakaszwindowcCs<||||_|js*|jjd|j|_d|_|dS)NZbutton_press_eventT) r boundstargetbCRiggedrrronclickcid rig_arrows)rZtargetfrrrr rig_for_inputs  zDisplayWindow.rig_for_inputcCs$|js|jjd|j|_d|_dS)NZkey_press_eventT)bKRiggedrrron_presskidrrrrrszDisplayWindow.rig_arrowscCs`||||_|j||_d|j|<|j||j|<d|j|<d|_||jd| dS)NFT) rrr modifybufferrr bModifyingrerZr)rZ new_targetfrrrrmodifyRangeSelects    zDisplayWindow.modifyRangeSelectcCs@|j|j|j<d|j|j<|j|j|j<d|_d|_|dS)NFr )rrrrrrrrrrr cancelModifys  zDisplayWindow.cancelModifycCs:d|_d|_gd|_gd|_||j||dS)Nr)rrrrrerZbackfromrangeselectrrrrcancelrangeselect s    zDisplayWindow.cancelrangeselectcCs||dSr) stop_inputrrrrrsz!DisplayWindow.backfromrangeselectcCs<|jr|jj|j|jr,|jj|jd|_d|_dSr)rrrrrrrrrrrrs zDisplayWindow.stop_inputcCs|js|jdkr|jdkr@|jdr@|jd|jkr@tddS|jdkr|jd|jkrftddS|jdr|jd|jkrtddS|jdkr|jd|jkrtddSd|_||j|j|j<|j|j|j<d|j |j<| dSdS)Nrrr-u0A magas határ nem lehet kisebb az alacsonynál!Fu:A felső magas határ nem lehet kisebb az alacsonyabbnál!T) ZdblclickZbuttonrrZxdatargrrrrrrrrrr s2    zDisplayWindow.onclickcCsV|jr dS|jdkrR|j|jdrR|jdkrR|j|jd|j|jdkrRdS|jdkr|j|jdr|jdkr|j|jd|j|jdkrdS|jdkrv|j|jd7<|j|jd7<||jdgd}tj|j tj d||jd}|j |jdd d d d |j d kr&d nddg}tj |||jtt|j|jd||jddd}|jd d ddS|jdkrR|j|jd8<|j|jd8<||jdgd}tj|j tj d||jd}|j |jdd d d d |j d krd nddg}tj |||jtt|j|jd||jddd}|jd d ddSdS)NFr-rg?rTrr r#r$Alsó határ: rFelső határ: Felső határ 1: Felső határ 2: r'r(r,)rrrkeyrrerZrHrLrGrMrNrrOstrroundrP)rrrr`ZtextsrarrrrDsR** 6 6zDisplayWindow.on_presscCs4d|_d|_d|_gd|_gd|_gd|_dS)NFr)rrrrrrrrrrr|s   z$DisplayWindow.resetRangeSelectorDatacCs ||j||dSr)rrrrrrrrrs z%DisplayWindow.rangeSelectorMainWindowc sjD] }|q jjjjddddjjddddtjjtj d dd}|j ddddd tj |d ddd d fd d d}|jdddjdstjjtj d dd}|j ddddd tj|d dd d d}t|d}|jdddjdjrftjjtj d dd}|j ddddd tj |dj ddd d d}|jdddntjjtj ddd}|j ddddd tj|dttjdddd d d}|jdddjsftjjtj d dd}|j ddddd tj |d ddd d fdd d}|jdddjdsXjdrXtjjtj d dd}|j ddddd tj|d dd d d}t|d}|jdddjdjrVtjjtj d dd}|j ddddd tj |d ddd d jd}|jdddnjdrVtjjtj ddd}|j ddddd tj|jdkrdttjddndttjdddd d d}|jdddjsVtjjtj d dd}|j ddddd tj |d ddd d fd d d}|jdddjdsTjdrTjd!krTtjjtj d dd}|j ddddd tj|d" dd d d}t|d}|jdddjdjr.tjjtj d dd}|j ddddd tj |d ddd d jd}|jdddnڈjdr.tjjtj dd#d}|j ddddd tj|d$ttjddd#d d d}|jdddjs.tjjtj d dd}|j ddddd tj |d ddd d fd%d d}|jdddtjjtj dd&d}|j dd!ddd tj |d'd(d d d)fd*d d+}|jdddt|d,}js:jddksˆjddkr:jdkr:tjjtj d dd}|j d!dddd tj |j ddd d jd}|jdddjjjgd-dddjjgd-dddjjdd.d/djjdd0dS)1Nrr-rDrErFFr r#r$rir'cs jSr)rrrrrrr<r=z=DisplayWindow.updateRangeSelectorMainWindow..r}r,Tu"Alsó határ: <ábrán dupla katt>r(uaElfogad középső egérgombbal való kattintást is Határ lerakása után nyilakkal mozgathatóru(Mégse módosít)rrrru (Módosít)csjdS)Nrrrrrrrr<r=u#Felső határ: <ábrán dupla katt>rrrcsjdS)Nr-rrrrrr<r=r/u%Felső határ 2: <ábrán dupla katt>rrcsjdS)Nrrrrrrr<)r=rqz Zoom resetrsr2cs jSrrtrrrrr<4r=r3u)Nagyítás alapértelmezettbe állítása)rr-rr/rC)r)rGrIrJrKrr\r]rHrLrMrSrNrQrTrUrPrrOrrrrrrrrrangeSelectorFinishrrrerZrrrrrsJ ,  &(, & L,$ & (,  4( z+DisplayWindow.updateRangeSelectorMainWindowcCs|gd|_gd|_|jdkrX||j|jd|jd||j|nL||j|jd|jd|jd\}}||j|r|r||||j dS)Nrrrr-) rrrrrrZrrerr)rrrrrrrQs     ( z!DisplayWindow.rangeSelectorFinish)T)T)F)K__name__ __module__ __qualname__rGrrr[rZrrrrrrrrrrrrrrrrrrrrrrNrkrrrmrrrrrr:rSrTrUrRrlrnr;r?r>r^rrerfrrrxr|rrrrrrrrrrrrrrrrrrrrrrrst ; $ c9     $8 Hr)rWZtkinterrHrcZmatplotlib.pyplotZpyplotrZionrcParamsremoveZnumpyrrZ FHtooltiprrrrrrs