From a4197770bd6615b75c348a2acd8b582ff79d52f5 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Feb 2026 19:02:52 +0100 Subject: [PATCH 01/28] better UI for preprocessing and postprocessing, added a panel layout file, and updated the main file to use the new layout. --- panel_layout.json | 97 + preprocessing_config.json | 28 + .../__pycache__/analysis_core.cpython-38.pyc | Bin 25015 -> 25822 bytes .../gui_postprocessing.cpython-38.pyc | Bin 66986 -> 123425 bytes .../gui_preprocessing.cpython-38.pyc | Bin 73322 -> 85200 bytes pyBer/__pycache__/styles.cpython-38.pyc | Bin 3340 -> 6553 bytes pyBer/analysis_core.py | 80 +- pyBer/gui_postprocessing.py | 2415 ++++++++++++++++- pyBer/gui_preprocessing.py | 788 ++++-- pyBer/gui_widgets.py | 2 +- pyBer/main.py | 2250 ++++++++++++++- pyBer/styles.py | 365 ++- 12 files changed, 5483 insertions(+), 542 deletions(-) create mode 100644 panel_layout.json create mode 100644 preprocessing_config.json diff --git a/panel_layout.json b/panel_layout.json new file mode 100644 index 0000000..22e92e7 --- /dev/null +++ b/panel_layout.json @@ -0,0 +1,97 @@ +{ + "version": 3, + "pre": { + "pre_data_panel_visible": false, + "pre_splitter_sizes": [ + 317, + 317 + ], + "pre_main_dock_state": "", + "tab_groups": [], + "sections": { + "artifacts": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8hP///gv///4L" + }, + "filtering": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAD///wt///7sf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///7sf///gv///4L" + }, + "baseline": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAAAAARTAAACogAABjEAAAPQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAACogAABjEAAAPQ" + }, + "output": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAD///wt///87P///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///87P///gv///4L" + }, + "qc": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAD///wt///87P///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///87P///gv///4L" + }, + "export": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAAAAARTAAAD9QAABjEAAASPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAD9QAABjEAAASP" + }, + "config": { + "visible": false, + "floating": false, + "area": 8, + "geometry": "AdnQywADAAAAAAAAAAAEkgAABjEAAATWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAEkgAABjEAAATW" + } + }, + "artifact": { + "visible": false, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAAJ9AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAAAAAABjEAAAJ9" + } + }, + "post": { + "post_main_dock_state": "", + "sections": { + "setup": { + "visible": true, + "floating": true, + "area": 2, + "geometry": "AdnQywADAAAAAAqgAAAB1gAADNkAAAOMAAAKoAAAAfUAAAzZAAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADNkAAAOM" + }, + "psth": { + "visible": true, + "floating": true, + "area": 2, + "geometry": "AdnQywADAAAAAAqgAAAB1gAADJgAAAOMAAAKoAAAAfUAAAyYAAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADJgAAAOM" + }, + "signal": { + "visible": true, + "floating": true, + "area": 2, + "geometry": "AdnQywADAAAAAAqgAAAB1gAADBQAAAOMAAAKoAAAAfUAAAwUAAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADBQAAAOM" + }, + "behavior": { + "visible": true, + "floating": true, + "area": 2, + "geometry": "AdnQywADAAAAAAqgAAAB1gAADHcAAAOMAAAKoAAAAfUAAAx3AAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADHcAAAOM" + }, + "export": { + "visible": true, + "floating": true, + "area": 8, + "geometry": "AdnQywADAAAAAAqgAAAB1gAAC98AAAKYAAAKoAAAAfUAAAvfAAACmAAAAAIAAAAAB4AAAAqgAAAB9QAAC98AAAKY" + } + } + } +} \ No newline at end of file diff --git a/preprocessing_config.json b/preprocessing_config.json new file mode 100644 index 0000000..3460fea --- /dev/null +++ b/preprocessing_config.json @@ -0,0 +1,28 @@ +{ + "artifact_detection_enabled": true, + "artifact_overlay_visible": true, + "filtering_enabled": true, + "parameters": { + "artifact_detection_enabled": true, + "artifact_mode": "Adaptive MAD (windowed)", + "mad_k": 25.0, + "adaptive_window_s": 1.0, + "artifact_pad_s": 0.5, + "lowpass_hz": 2.1, + "filter_order": 1, + "target_fs_hz": 120.0, + "baseline_method": "arpls", + "baseline_lambda": 100000000000.0, + "baseline_diff_order": 2, + "baseline_max_iter": 50, + "baseline_tol": 0.001, + "asls_p": 0.01, + "output_mode": "zscore (motion corrected with fitted ref)", + "invert_polarity": false, + "reference_fit": "OLS (recommended)", + "lasso_alpha": 0.001, + "rlm_huber_t": 1.345, + "rlm_max_iter": 50, + "rlm_tol": 1e-06 + } +} \ No newline at end of file diff --git a/pyBer/__pycache__/analysis_core.cpython-38.pyc b/pyBer/__pycache__/analysis_core.cpython-38.pyc index e817050bdfa56d616e071f4f48b74a11da67e40a..0b8225ebe8145428de5c8d2ebf43ab7e48ac1fb5 100644 GIT binary patch delta 10061 zcmai43v`@Eb>9Eqhjv%5mG!hN+v~U2mS6HCu`Sz?Eje~#%eHLA&L;L|wew3_X|*fQ zt}ILZVj&7`N(gZ>2ioQVHm8pyC6pq{BlK{9rW^_ZLJm;+mv>#BfdeH#8yeE@n_re> z#R0AN+nGCeUU%-?xpT)K{b%Fb|7uipmzRe<`1{Y-9!x*-R}WV-8IgzAzgiS^eZlw= zD{!kv)Qg7uJfdOJoHXJ~HD#e_1f@|^qMEWuG=b8jDa$lvu~-7i5=~hymf{n|ciH1U zv0SXU&lg{zX)7N$#VWBH`ITY_lqF(~SSwSLTKiBAqHs zsHxB$hZmDrnMfqF*<2x6NawQoL_#iQrDcTWgcXF9gf)bhBS;CE)K7oQi!8gAE5H^Fx?5E5qGvo<$xY!s_50xEk z^IKj~*6I=bEyr(-Fhr$@h$^h?0#S|i_lXKDQ>{~ZB$vcux94O!bugW=DKyQ~V3!P(+TMZEK~sK6mw8cAoNe+Y zJ1|fxUm}})sZhoo)05^zh@IM@w_!*aK*>zH#2t*D0=V@rI=GhCoq3rB_lH=RuvtXQeMh2%cMS@kcK>xxF! zF?;iK_N2B$;i2T9mB1!QX5I_lJomE42=in544)A+1K5=dj0)`23Zuq|AXjGAAdO$| zTKrZR0iyw2VRM~nqK4_#HX8KD{Ox$7-ka(~WYO^(*^Ds`@kW;7910Y^`5M6WmO|SM zQ=X%7ntDFcWYoI*olWV*ImJ}BdbKKw?Z0HfGUIM_%YqNXa{YS2s>u9Ns6*9@jeC`S zSJNK(XRP>kLYi=%@BrZ*ga-*X8tXU;zM`&FZ{5I@wm#z(?Xd25OoLX8l(D4Dg#P&@Zea1x4_RIV1;AL!5+dql@V0i3+eD^dZFimmG zu~%3w!k0_z;1xqXThkn+-o{JvRz8nY#PRF3)gyY!bc~DW^i!QRs$COaB z{7BDJhJ2WVpPir95PvFTC9|(7ReMwM5!MJgW-hPi;so=<8ED(Zf)ngX<}F%OIS3xd zj~Sr6b%&F(@H$1U&nJ7;wz`__ z{|lac6TkxntKr9t_z*%T0+>=fAdB8CVc#)QGLM!rZY~Cv$#Si+(jat$P z<7maWN7IG=m?_`K5-)n6FV3pmNMU%SkkA856vl?FN&^#$fZt7y=pZ2JC z)vq$T)F~ne2s7u<(^J2yH;uEGC&IQDb`+*?qSQ8F;P%?)<;WFJyXWlk zyUmHRiE_L2a+UDgWsiA8z%GBx^MtQY>(C|Re4`zNSq!4q_cd3E2#Sy$>hn>@3JX+r z;o@R7j)01V9&KtLDfrx+Hn+w=Nx^^_E}1FE3FYRlEBDWozld_3yH@V@gpr8svvWrv z!hQbfF@ziEj=_{0|KJ!*+4%>@V9M5!2Vun+awMH}PtTk?~h>n}PqVA#bH)IN>^SK@?4`)mkk&o3l z-cG|4SV_h81$wFdS=29>~mPlYyi>Tm-l+m<8t!;`K&rWqU70n{s!ZDV_uHjMY`1;1v z!`L~WV5T&c8yc3b3Dfh}vyy+R%cge__l|3uwOOWtc1o~A6L8R{6Pve73R`}Vpe6Jc zq~c|;JL>q-2ICo(Ub?xcE&UB-J}XXbJ{^CuP>^{&hOj*Np z)+kQ>&wEHqOX+zJRM=C*c0=x2rcrk3~MuM)kQDW$F@5 zp89$8qeo_^rwh31uF7zzPGH)h@Fsimkp9D@c|n`su`e-{6l3a_%W6x%1RmH{V+?k+ zYWdd&=p(_nU*C`8OXY^gw2nF6WOmH)kM>*Aa(m9QhF5-Bch-{>abI5!_mMW_UC<{_ z#C3aenPkC&x1P;Us^cpb8DCYI70b$8of%5z2W9KjU#{3~Y`(sK$sem9+Zw1x(-3*u^Dvd{wOeTWrENrwNCZd5AxE=Z!jlfyF}r z2sC-|skxo&n)=B52ASSNCZoqO3!CxXGIv1gnbiyH|C&3f3``!g3@%v2sKZBIrTd^> zS^f0jx7o;d3G=2>E3Kj21q*AJ9Z6;q(-Zsq*EiQ-$p2#f)qt4abp$RV?F3RIg&bT> ze@+URjMk~jwO*sRlSN(}eDEA{(3`lwM{h@(s#w@n1+8d$TSY;YUm<*zK#|Dr5JH47 zAQqhMQvQI{9}=h_ac_3)eB2z(%Ab&=C)l7-D@j=bqZm%+^9c;(QMW7gVS@s-ZWNOBT*T>-4ljFgx(K6Yz*z)yuJ$13zQqQT6k6n-*vp1T~+0iR7QD zP3sp$w3V47Ulm{9RR6i_MM>`im)MupgX?c@;QBh|#Vz=@%xSH4>Rao7WCZk9y`-J7 z?`+6K-v#EUO!+JJ_uqusDS8uf_$O*`V{5UWOornZ6gFfwPwTYAUuI=3V(L9yFm3E( zWv++yYnJ|oKry(}(-Zq0nawc_cC1B?A`=gYLIUSk+^>H)o}fp*!dm-P^QNfrqB^>1 zy=fR~eACLP)@2$GeLTRw%?Zm1j;6CBH=2Nqr#`vqlo_CYKb#a=7H{8r)zAWv|3;1gxKG8Z=8Hj3S(jD)0~;EOD!RAP~NgONw;IC;Hn+6#$ckMQoOx?b#(kOEBuiw&~ofF{U zR}lIzoz;1mGOb(Fy861~vuZq_%1PLM9Wh9tfwXz;81a|sTRQLcav3@vuU_WbOKl~a zqcg@*_do@KnS5pUt3j?4%v8U6t+lD1t8~rU&l-BETK23j&Q{b~Wt^cyVD-vJ*jC#N zXd7OV%j6Ti>B0q$FM={2b7i>N@j@3h8V$Jt-O3%TwSmCn2Rb&>hf~r&(! zd)bvS68FJJ8_`a<|4-=CJ^cMW=Dn`yb@%g-Jj@qUqbJ}!2Hqcqv$-_ z;hMuq-p>IXAn1lQXhkkXkitS#|3X?=zos$=QNi`uY7E(~{^{Ud#UpI!D4~;3250EYTKn7wQc^^0#t<#hgGIRgb zyKl{{IRT0e^2@I=MOnuJPH6hpmXq=!l6R@*L(i4oj%Kgre|M;3hOH3~aD;-B!iC1L~Z}$Bi@~R?Kr#^D{FN!m@oibbm zFQl!}1eZ2e;hrq)%PF58up7Ue9wa;LBAg_gA{+uZK5Hml&_j`*WygnELZL$aZz19P z0LRBB9mA@fzqDRCl5JGqzir#ec?-x1$h+A?`Sko!7H;a(b8KVF-DIJH$lH(#%&t*W zwWg#Vu3D(>z5UH?dUu=yBb2O*{H=f#6lvzK0V%2s+A#9pMM=SP*{}^^Trn@14}ET` z?a0rJV%4NEQJwZo)YuUn=0=pnuDWdMC{W!*Z6SbYVWbeeV%jx!Z7V|=b)xQm4`TJE z{NVi_QHL0Pov5+vH07M;M}DD4Ao9a{43$sR+jY}zwomwM-(|0;M^wm^1D$RK+c#Um zuC{%x9=m>eI0KraetHNf!4L)t5!=A)0>hp`J7QO1aMhyW!I0Y5xzM+;Q*KvxcOG*C zy{8}n+&}}pxs1M)z>7|`QPfz=>rD?X?F_TW44H)J5#oFTT(j!ugmEW=SH?G?ok|?r zUt}xsvLm_F;NfiBvF=lwx47nR6YKHZh=PVjgj_mZO3sliooty3Q(i=S^?c{i40aTX=+vzWT?cwLbP0o{J= zZ*6v&mN>h$x2RnrP9Yu^t|0K3rXw8jFoM4NiLGZWe(hoH+H;%Z)9-D*B%(L*5K))7 zOCc}WY8yOJ|(<6Z29yFHo?E#U}F!Jit=ck~v!1VzqqtiyzvBKRm3 z>^nyITec9{-*&R&$l=b8#LG0&4ew4N)P52++bLelbLl~T+y_VrsWe#FwW07=mT8RRXH{$B!ckU@Rfv;BceMVc?+JYC4w#%|U zd-=q&KF>sKru@5h?D9rY$9Qmdzo@s(flUajHx%&jJFt1u5DOpkiN+`V6YEf85sax% zHs~5nDBpt6yUCiQ*z1@Qi!Zm>F?DPF);&uetVKk5X{X!@$sE+rkg}iRS`0WPeH03< zk^C*7?~Bj#@0JP3&G zn4??Wq(%vM5Ka@g+QEny{Li11T_-Xv?7!UD|w&kL?4P3Co6i`N9%0xqWv#{GEr zsl?IZvG$IWvYiFX2yFzK>pA}=V;i%N6R6x3{59p*)oXXJPQ65~9}wP3xEFvJVoMzF$9+K9?H2dl@)4B8z5VHyI0APl z5$Rlud<%&%L%D>j5eVeb?DK~f-{hn|qV7MtH1Hm9%I~RX&Nl8&<)A$m5#{HDSG@e% z?oJ3RpK`j;%QO6TKsa5!{ax($q2d zKWD3o(5;?G><#GC_S5QniQA0Ns^)vv6wjlD)YL^PJ+IbnRu3eb{~w&&fSUjS delta 9125 zcmai33v`^tb>8{+t(RBU`(;VCYsWz%$+-T?%aR=pS;Ze_S-Dycy@M%h5kN#`?l~mFWi$;&T{Ul|0Ffw^smqz z`z*YW7u{;%Md!40%wMTE#k_<#C5ls}IHkOdIAw}ctvKbpf;bh5vy!i%PbGb;F4}lC zUwNy|ze@2|UDS9DUrps29wANzU&CwpT9Qh6dEKpc|7t$6h+WSch`WY2@^ySYHE!Y? zsBtZo8+kL8H}XwXUaQJ2eDg&s-@>mUj(3jJ$hT7G+juMS>K5^~^Bu&iC*C^x>`W2S zcG1p#yq(w$in)vLrVcy!9^zm?d?37+@4M*W`}qOlubbnpApW)dAn`l-A>yx3OE>bv z)NdC*Lfob_7wwLc^fBH|{0%&X&N0Itew-N1O7J>jkAl zTZy%eSVMf6Si|Que=FCzE#BCy&-yHz_1GVhDw)s@zPn$O57}8a$lD!2Xk2<5R67+iC`iei^c;1 zu>y^%0M&q%fK`AsfLg#>fEQ2?XauYWGyygMngJUDn*f^uTL4=Dy9kVitT;vujp&KN z7#G)~!nYWpwkRd=$?s%rWu;Qfl&nJDo4K1+N+Yv-`#}hF0uBKV1Fi@70jB`I#h|)8 zLcCjLIIB!MVv$?-movYt$}E&mXEkkD&Kb|e_e~Ekd5LtTPtmI`4>y zaAZTQ zIceD9;j_A-MMn)sIGWJKsHh}i!yOGqM|2(zMhzPe_xBrCVyI zV7e??EBkeW>X8TXs>p+f@~YVl^3J@!roGjkzq;mXqmQG(1YiE3+AVm-yVwS!RQC_mxWvU?nDcR zp~d2+OS$5s5%QyngyHH7#`S1$gt{8g6Na5;93J($=BF$^Pi+kw#0(ZRSX@Lg*!d+R z%9*0_eeV-fExm;mlWWmO^VqXk9TQ)s8dBLF3HDJ4QubrSy8NdRfv>XPcIheJVWYk0 zk^{vZ4EwurPUCffysK%evrkBrHIxMGGp3*SH64=q-_#v<+pPW3r&ED3wnkHK)Wf!$|h=gv~6eXvc<}2{xTi zzIM6(yHu}Ai|Xy^`VXmIl`hwtkMME`D~9z1ivZfYVQEvs0dgC?&1gF0wp=nv|k ziQAXzpyuG3(@_(TP`xUpb+o6T%6aX^@)MR8%TdcQ%Sj8jkk@1#7H}b4Xz?K6Apo}EX~RmB5r0XfVI`H-IDRMbXm$~U z^@~4;=zhQf2(j?OT>?(NJ~0{-i9mWQ1ZbibvR=GXexYKO)y4AVqZM`R>$7iFq_hiD^|C%jf>S1Wf~ zYo7$^OM}uVSLg%knL|C6V3cwB#u{(YnrFKSRzKLradM&MWNQ&^Ij`UU4tqs9j=sD z#K^z=_CB>`v9&1YR1;SYskWZ-&+kx`cm?o%zz+a!03IkPkAQ~?3@LsJcpCsO@mr&l zH~O{lsQ5Rqe1KwwYF)Adq{V139uJTr)3UCR&;-{9!|R(G!a;h9o$PiAyr4@tR_+n4wK< zpl|bn-dbnRH2#b^)ULfTVKzSQ8)6kN5?^2T-%H2E^za@`Lr;Q#$b;W`>=^ zo@ACKKBSC#3GI{>=Nwrb1Kun%;rbA@{|QjmR8v!v`j~izHc5(3HXAJJcko1j4m`hI z{g~P~eu;+d@`FY;tr6lErMEGz8?Nzil*h&cWZl{J4LzCz z@j&SE!p8E{e-rt0JApTE=_H`Fc!|KspoeOah>wR8gCY#>5MVU`4nhZ9Y%I#feDr+` zRch+W63?Od0sx-nU2a+cYUY~f*>6$z3E)NP+f-Bk&qNwl+V*n9G8n_5?RX!&VZs7*d^1N&%@tEoF$-eqdO;=33L=VFgHcj>Iv)ReAD z^SL|!tA}CCCZ3Hxe!pR^dfrJ_=I>Jgq2Kd z1~&&u7)t4=cmv}+3Ahhn0DNg^mw&URk}Z>OZE377rdD3Z(&3az)sU^THP@WbQp+)X z4SK-B3(B}mLkJBN?DAtb3NuxIa0iNhH|_Yug;k*lq|2LkmKR}7F30NmFg+q4-&x->-%$AwqbrF} zOz#(WqAy<>+KDopu}D17A5NT>Ic+6d*U}K81riMa92Dd|>HZAo;8>q70`xpd$6o-M zEqQ2+p7dsW+dkA%%5N&r2kfVO>9AM73`4Oo zzm1ZvF_l$QjuRd**a^ROa@?;?j*D9A%x@2xfwvDo3+QDM0O3!-rc)P zH&HvvGe${3#31Du4T|6hBJVT1e@zJ+l&p|{zo#((rGNf=`ZL23mFN&X)_I5=Z1JSL z`JZmd3JkOnU_;N@ppUon3#zvgkVB%x9IC~W^Z1>)#J^} zd&}9Q^8LMS%ePY_x`nhx$3_e**Q4aRTlRf5pth4^slGTw%(NVhD1 zDOM~)o$I?6EESqUZE*slWY5hiq|?*(+{}CsIRcS(P+0! z>t*5;O@(gu?j@=DMKm%3LZ|d35gyU2f<7KWIOwcAmNXYOE(vYsXuNxS7QDLK`Oq!XF$fJ%Qkdl$AVP zg&NR;jwW@|tMk1N5*gf_OrUSld_?yVR|KdhZlAm)|_<-fUj8FW$Gxi|BMq@6aV1j6zp;&!#Qvofo?-tla!lTPQ6Rw999E z3fT$yW>0gGatqsha%)D`*4Y)uJGIn4nwUY;?e7nm&uH_9mWQgya|SW%Fd$t;E15%; z=F73Kpa;*c_U=8M2M+HE9NN>fzpJBLy>l>MoT(sK5BWyGdO#CknT0a11uKpLMJ|Ci z+gwn!D(VQpVc>Vrd4|iZZBXVaY6(on%tmptn*Qtq)lNX+3b)I+p$lTsRua!52T$%k z@L7nc^f5uyr!2`a4663C0}bc?8tAu(zPquX_s)KN@?CA~tH~<9Y?$^ly&P&tt~|%4 zs-sU4&qF+`a3pJ}{1BCMRk@U8YLv_uW$vjmdf(Z2s)g;6p;J4K+L9}$s(C?D8(K%# zxP=KTQR~k!UUb36iyyF0c?T?0b<|VIu!DO3k7V6+6E7v14Y(Y}y(KtFFDPC%-JGnG zm8bXZD8H+K?k_72s~4Ah)hj2V(;Ng|lJ+n+buB;m;k67N%h`D-gc%q<=wnstyLqOj0@grVF?T;J#phY&CG94 zKw?P{7zWRS<){Lsg6;}X)c}=nl%N(1Ebss#)bl~=O_bF=#g9R$)BhDvwSZNC?*rZi zD5qTm>NfyCK)qu%qfaodZY+k;`v$5rvM4AXIo=aE)YY-4TeN|XR9YY*G51N>i$1;w z*oYRkp;$O7;BjVOqB49?sp7^19ZFTcSK_N6|c$i-ZgFS zLFlJ|n*m7zx(I6a)7!xTLJE4#=KCs@gjxr~&3?L)p&A~JHPhR!&-AWv{1z?0CjX+h z(s3V1L;hoLY3t=(6ySP1thw*P+ z_$VQ#`-(E}LF>B!J@UD}osI#JPf17UTK0@Q8meVOaxzqwieX?Ct&czeXNxCvY3Xd9hOD*ylh diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc index d496bd56545c4ef82c3fa0f0ad8218666d31b460..2b2f2db6bfcb4ce0da095b129f7d2b0deb189bfa 100644 GIT binary patch literal 123425 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 literal 66986 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 k-Vun0m@ucb}V(@b~WB}q-@3i17@k+ZU6uP diff --git a/pyBer/__pycache__/styles.cpython-38.pyc b/pyBer/__pycache__/styles.cpython-38.pyc index f81ca14fea78ebe783646c27e98e5d2c3ff8a604..472fb55347083ed1cdbd4f8f95e37d646c0767f1 100644 GIT binary patch literal 6553 zcmc&(&2HO95LVJd0|Dv1H`X~NupEg$lFanaPWlrdDQqZdfHpy~)pMHK7!5t`}dp^%px*K=>>5xDlVKHrKGBebMJot{3)W@ z3z}hedFY(KpmL z(sUg<2QxBf#CiVs;LtfZDJV+ej}m3&pdmWd#dt14N(DvML>vVW&b-N(8oiQG^u4)-%4o zJ;2$})Qd0!`Jv$UzcGIU;0oYIU8w9-DPJ&~cNwF^U9k!4#)u_oQ1CA$z7we&g` zI|9Ozq$I8gwn@?tRiL%93;W4bhL}<{sXrzlI_$It-x37T`aLC=A;^!p|83$S%7$Jf zL@DtkPKL?Y6u%X3Z9Sapj1{)6fEmkxfk=3q`mZpp0FRTXtO^uYvz%s- zZLso)tso$p@6BHi*)n2AO16-SAW(MjkOB zA)|GRGGWXuAlL??8D5qny~f#)bEm7SVwp&~vsJke->qT|DzJ#%kt>@t3wh#VR^Ui98iot@Gf_TiybZO5$BA0j78X5&XzX*s?1;+?QkGlr^xUZjEYNua z(~{py$^}Z@X)sNWWuem2%MDz_#c1=0s#jvRgcxl~mKN(YWrL8bNlF91 ziE!JP&M~tkN>g1P>9hD1rbTv+(tNmi6gRkD6(!sB$mQh}Up47%RCDJ}way9(CCvKZ z)u9;)9o^+7X@YfUl&(m7n>F4ImbUs!a3;4y`QD`N77n^9Y694<_9p23TG{R3eK30` zINrhW|C)P_kuUCdh|TveAh>rF%8L2y;nX=>vaO~UD3F|ERSdkx zz2d8TrG4-2U$<1`sv4k_&Y>3;eehoPTpuuYF$;BPNrd>jO0!HrN?LeDOWO87&x?qQh2>_pwPmL_EE z#k>Hj&)qUCY3XAQmUJxDMJ0zD&OJp1%tTP6&U_0d@gjfJncPGSD&=M9WGs^%iaxYm z&Pvb0FlE4lNLORJIW#uFWM*O6A%{ZsQ|P8tZnT_KH_jX^m4i_n2N)Q?WBq>7X~4C6 z-e8;NZO$8%PO2*aoggTll58bMJ&dJJWb_{V(RF@OLa*xxNB(gjD`_s)K97Nd)fwr2 zui3ZTdZUMY1}6L$-IA`Pb$D@ptn2RDv-;S*91EyFV(|rZxAlmv%u@>U+d||feUO7^728a@F$@ zt1kSg?*2VbiD7!2o)iSB@Q|!6C=digbe*NFa*}%3Tdwk)6_p&0qkKW*a_gkW9Zg)< zWc$`k$s2hSzg4|z8r3<=6Yv?$m2NF|$DZ#?>3fE*Vk#atI>z+a@^$~ayEoo^cyf03 z)A?-nd#|_&|1YV3{ryQCzC6iLx-Mz?GGCvPLjEqRHH@>5^7WfrpDr0*rR4Ju;H|&l Gr}q!jamZ%? literal 3340 zcmcIn(T>|h6!n$|R#8{t6Nc?mtM#t!ByQqDMV2C1389TbL4sCjY>$&s#~#b$unA}% z5TC$T@JoH=6L{l^J06ccPQ0s76-%+~nep5^=iGbl&C8RMfd$v`AHUO&PAuy$`C?v2 z@bVe_#4+4r>jx`7T3C-C;NKov*5Kj^y2OH@Cl`bH_cUIT68$Jiv#q? zN!*beKC31o&UgW1#3v+))L6o^(oS$n*)~86vg8E4ygEa(f?{@t1kQvlNI?^0wV=O{ z08P)wdHHN`I~dHr1Y`Ln-)Q^1hzZzn^9>T5(HK2)6Auq3YLBp*whJ87wSZMlzEKk? zE|xU2OP-sfIgVqREzP0c1DcKmK}kzSYJbE!jNp_7XErY=m-*iC=qRZaFDOP)nG;maS{`r8$y?>GC)rqr-BD~`kIPTR7A$->S5mxhicn)p`O)P$!OH)34*xbxgGPHOhc|xKnB>IF5l3&Tm{G* zNne3Ry<3av6_EKIB{zE0_lQ?}upR_-jKCSC2Cd7IXDYg{*J7pK`+RbJ&ly5aR2sFf z5ugy!cx+BLVb*FyLzo;wuBVBtWK3tCuQG4mx)ZGU&!p&eDg?WbzJRc?JTHh4cVvhM zrvUyX!|fM8Mhpw_>1o8%9K!wdb#1Hh7c#|=x*ZLi9(ar$D~l8}wr>hRX=Q51QWN9* zfJs`aQKj#bb4TjC98E!$SGB6S)earBcD%YSD9Gz}->-LoU?Q26F0^3?^~)QN@Y7Ca zce5z*Lz$rmIQiZXY#i-J@c(rm${pG0>MtK{%;*xTn5tlh<8XJHc;OgNp)wt?*Xiqb z+-5~sz8^I@0Cu_tXfE2|)LPldL5er_{-6=YUT3Ke?sl}39u2u28r@nss_?v9&Xh`i zi$f)m@Sy5{5ac-1ElN-MI;dr8Qjq>Y~O4dcRk`=Ymr<5eb}mRN!(`JR3p{BJ+* z_ORW^Ggxfcs9G_J%05=g!LMjmiVMb LoadedTrial: t = self.time_by_channel[channel] @@ -162,15 +166,30 @@ def make_trial(self, channel: str, trigger_name: Optional[str] = None) -> Loaded trig_name = trigger_name or "" if trigger_name: - if self.digital_time is not None and trigger_name in self.digital_by_name: - trig_t = self.digital_time - trig = self.digital_by_name[trigger_name] - - # Align analog signals to DIO time base (so DIO overlays correctly). + if trigger_name in self.trigger_by_name: + trig = np.asarray(self.trigger_by_name[trigger_name], float) + trig_t = self.trigger_time_by_name.get(trigger_name, None) + if trig_t is not None: + trig_t = np.asarray(trig_t, float) + elif self.digital_time is not None and trigger_name in self.digital_by_name: + trig_t = np.asarray(self.digital_time, float) + elif trig.size == t.size: + trig_t = np.asarray(t, float) + + if trig_t is not None and trig_t.size and trig.size: + n = min(trig_t.size, trig.size) + trig_t = trig_t[:n] + trig = trig[:n] + + # Align analog signals to selected trigger time base for overlays/event alignment. if trig_t is not None and trig_t.size and t.size and trig_t.size != t.size: sig = np.interp(trig_t, t, sig) ref = np.interp(trig_t, t, ref) t = trig_t + elif self.digital_time is not None and trigger_name in self.digital_by_name: + # Backward compatibility for sessions loaded before trigger map support. + trig_t = self.digital_time + trig = self.digital_by_name[trigger_name] fs = 1.0 / float(np.nanmedian(np.diff(t))) if t.size > 2 else np.nan @@ -200,7 +219,7 @@ class ProcessedTrial: raw_thr_hi: Optional[np.ndarray] = None raw_thr_lo: Optional[np.ndarray] = None - # Optional DIO aligned to processed time + # Optional analog/digital trigger channel aligned to processed time dio: Optional[np.ndarray] = None dio_name: str = "" @@ -256,6 +275,8 @@ def output_label_type(label: str) -> str: return "z-score" if "dff" in lab: return "dFF" + if "raw signal" in lab or lab.startswith("raw"): + return "raw_signal" return "output" @@ -283,8 +304,6 @@ def export_processed_csv( with open(path, "w", newline="") as f: w = csv.writer(f) - if processed.output_context: - w.writerow([f"# output_context: {processed.output_context}"]) if metadata: for k, v in metadata.items(): w.writerow([f"# {k}: {v}"]) @@ -848,6 +867,21 @@ def _read_time(folder: str) -> np.ndarray: if k.startswith("DIO"): digital_by[k] = np.asarray(dio[k][()], float) + trigger_by: Dict[str, np.ndarray] = dict(digital_by) + trigger_time_by: Dict[str, np.ndarray] = {} + if digital_time is not None: + for name in digital_by.keys(): + trigger_time_by[name] = np.asarray(digital_time, float) + + if "AnalogOut" in base: + aout = base["AnalogOut"] + aout_time = np.asarray(aout["Time"][()], float) if "Time" in aout else None + for k in aout.keys(): + if k.startswith("AOUT"): + trigger_by[k] = np.asarray(aout[k][()], float) + if aout_time is not None: + trigger_time_by[k] = np.asarray(aout_time, float) + return LoadedDoricFile( path=path, channels=chans, @@ -856,6 +890,8 @@ def _read_time(folder: str) -> np.ndarray: reference_by_channel=ref_by, digital_time=digital_time, digital_by_name=digital_by, + trigger_time_by_name=trigger_time_by, + trigger_by_name=trigger_by, ) def make_preview_task( @@ -982,7 +1018,7 @@ def process_trial( _, hi2, lo2, _ = _resample_pair_to_target_fs(t, hi_raw, lo_raw, fs, target_fs) # --------------------------------------------------------------------- - # 7) DIO overlay (if present): interpolate and binarize + # 7) A/D overlay (if present): interpolate and binarize # --------------------------------------------------------------------- dio2 = None dio_name = "" @@ -998,7 +1034,7 @@ def process_trial( b_ref = self._baseline(t2, ref2, params) # --------------------------------------------------------------------- - # 9) Compute requested output mode (7 user-defined options) + # 9) Compute requested output mode # --------------------------------------------------------------------- mode = params.output_mode if params.output_mode in OUTPUT_MODES else OUTPUT_MODES[0] out: Optional[np.ndarray] = None @@ -1052,18 +1088,26 @@ def process_trial( dff_fit = safe_divide(sig2 - fitted_ref, fitted_ref) out = zscore_median_std(dff_fit) + elif mode == "Raw signal (465)": + # (8) raw signal (processed 465 trace) + # Directly expose the filtered/resampled 465 channel. + out = np.asarray(sig2, float) + else: # Safety fallback (should not happen if OUTPUT_MODES is authoritative) out = dff_sig - baseline_desc = f"Baseline: {params.baseline_method} (lambda={float(params.baseline_lambda):.2e})" context_parts = [] - if mode in ( - "dFF (motion corrected with fitted ref)", - "zscore (motion corrected with fitted ref)", - ): - context_parts.append(f"Fit: {params.reference_fit}") - context_parts.append(baseline_desc) + if mode == "Raw signal (465)": + context_parts.append("Raw 465 after artifact interpolation, filtering, and resampling") + else: + baseline_desc = f"Baseline: {params.baseline_method} (lambda={float(params.baseline_lambda):.2e})" + if mode in ( + "dFF (motion corrected with fitted ref)", + "zscore (motion corrected with fitted ref)", + ): + context_parts.append(f"Fit: {params.reference_fit}") + context_parts.append(baseline_desc) output_context = " | ".join(context_parts) # --------------------------------------------------------------------- diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 013690a..17fb89b 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -4,6 +4,7 @@ import os import re import json +import logging from pathlib import Path from dataclasses import dataclass from typing import Any, Dict, List, Optional, Tuple @@ -16,6 +17,14 @@ from analysis_core import ProcessedTrial from ethovision_process_gui import clean_sheet +_DOCK_STATE_VERSION = 3 +_POST_DOCK_STATE_KEY = "post_main_dock_state_v4" +_POST_DOCK_PREFIX = "post." +_PRE_DOCK_PREFIX = "pre." +_BEHAVIOR_PARSE_BINARY = "binary_columns" +_BEHAVIOR_PARSE_TIMESTAMPS = "timestamp_columns" +_LOG = logging.getLogger(__name__) + def _opt_plot(w: pg.PlotWidget) -> None: w.setMenuEnabled(True) @@ -33,6 +42,17 @@ def _compact_combo(combo: QtWidgets.QComboBox, min_chars: int = 6) -> None: combo.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) +_AIN_SUFFIX_RE = re.compile(r"_AIN0*([0-9]+)$", re.IGNORECASE) + + +def _strip_ain_suffix(name: str) -> str: + return _AIN_SUFFIX_RE.sub("", str(name)) + + +def _is_doric_channel_align(text: str) -> bool: + return "doric" in (text or "").strip().lower() + + class FileDropList(QtWidgets.QListWidget): filesDropped = QtCore.Signal(list) orderChanged = QtCore.Signal() @@ -82,6 +102,55 @@ def _extract_rising_edges(time: np.ndarray, dio: np.ndarray, threshold: float = on = np.where((~b[:-1]) & (b[1:]))[0] + 1 return t[on] + +def _dock_area_to_int(value: object, fallback: int = 2) -> int: + """ + Convert Qt DockWidgetArea enum/flag objects (or stored values) to int safely. + Some PySide6 builds do not allow int(Qt enum) directly. + """ + try: + enum_value = getattr(value, "value", None) + if enum_value is not None: + return int(enum_value) + except Exception: + pass + try: + if isinstance(value, str): + v = value.strip().lower() + if "left" in v: + return 1 + if "right" in v: + return 2 + if "top" in v: + return 4 + if "bottom" in v: + return 8 + except Exception: + pass + try: + return int(value) + except Exception: + return int(fallback) + + +def _to_bool(value: object, default: bool = False) -> bool: + """ + Convert mixed QSettings bool payloads (bool/int/str) safely. + """ + if isinstance(value, bool): + return value + if value is None: + return bool(default) + if isinstance(value, (int, float)): + return bool(value) + if isinstance(value, str): + v = value.strip().lower() + if v in {"1", "true", "yes", "y", "on"}: + return True + if v in {"0", "false", "no", "n", "off", ""}: + return False + return bool(default) + def _extract_events_with_durations( time: np.ndarray, dio: np.ndarray, @@ -181,23 +250,57 @@ def _binary_columns_from_df(df) -> Tuple[str, Dict[str, np.ndarray]]: return time_col, behaviors -def _load_behavior_csv(path: str) -> Dict[str, Any]: +def _timestamp_columns_from_df(df) -> Dict[str, np.ndarray]: + import pandas as pd + + behaviors: Dict[str, np.ndarray] = {} + for c in df.columns: + name = str(c).strip() + if not name: + continue + if name.lower() in {"time", "trial time", "recording time", "timestamp", "timestamps"}: + continue + vals = pd.to_numeric(df[c], errors="coerce") + arr = np.asarray(vals, float) + arr = arr[np.isfinite(arr)] + if arr.size == 0: + continue + behaviors[name] = np.sort(np.unique(arr)) + return behaviors + + +def _load_behavior_csv(path: str, parse_mode: str = _BEHAVIOR_PARSE_BINARY) -> Dict[str, Any]: import pandas as pd df = pd.read_csv(path) + if str(parse_mode) == _BEHAVIOR_PARSE_TIMESTAMPS: + return {"kind": _BEHAVIOR_PARSE_TIMESTAMPS, "time": np.array([], float), "behaviors": _timestamp_columns_from_df(df)} time_col, behaviors = _binary_columns_from_df(df) - return {"kind": "binary_columns", "time": np.asarray(df[time_col], float), "behaviors": behaviors} + return {"kind": _BEHAVIOR_PARSE_BINARY, "time": np.asarray(df[time_col], float), "behaviors": behaviors} -def _load_behavior_ethovision(path: str, sheet_name: Optional[str] = None) -> Dict[str, Any]: +def _load_behavior_ethovision( + path: str, + sheet_name: Optional[str] = None, + parse_mode: str = _BEHAVIOR_PARSE_BINARY, +) -> Dict[str, Any]: + import pandas as pd + if sheet_name is None: - import pandas as pd xls = pd.ExcelFile(path, engine="openpyxl") sheet_name = xls.sheet_names[0] if xls.sheet_names else None if not sheet_name: - return {"kind": "binary_columns", "time": np.array([], float), "behaviors": {}} + return {"kind": _BEHAVIOR_PARSE_BINARY, "time": np.array([], float), "behaviors": {}} + if str(parse_mode) == _BEHAVIOR_PARSE_TIMESTAMPS: + df = pd.read_excel(path, sheet_name=sheet_name, engine="openpyxl") + return { + "kind": _BEHAVIOR_PARSE_TIMESTAMPS, + "time": np.array([], float), + "behaviors": _timestamp_columns_from_df(df), + "sheet": sheet_name, + } df = clean_sheet(Path(path), sheet_name, interpolate=True) time_col, behaviors = _binary_columns_from_df(df) - return {"kind": "binary_columns", "time": np.asarray(df[time_col], float), "behaviors": behaviors, "sheet": sheet_name} + return {"kind": _BEHAVIOR_PARSE_BINARY, "time": np.asarray(df[time_col], float), "behaviors": behaviors, "sheet": sheet_name} def _compute_psth_matrix( @@ -260,6 +363,7 @@ class PostProcessingPanel(QtWidgets.QWidget): requestCurrentProcessed = QtCore.Signal() requestDioList = QtCore.Signal() requestDioData = QtCore.Signal(str, str) # (path, dio) + statusUpdate = QtCore.Signal(str, int) def __init__(self, parent=None) -> None: super().__init__(parent) @@ -272,8 +376,12 @@ def __init__(self, parent=None) -> None: self._last_durations: Optional[np.ndarray] = None self._last_metrics: Optional[Dict[str, float]] = None self._last_global_metrics: Optional[Dict[str, float]] = None + self._last_event_rows: List[Dict[str, object]] = [] + self.last_signal_events: Optional[Dict[str, object]] = None + self.last_behavior_analysis: Optional[Dict[str, object]] = None self._event_labels: List[pg.TextItem] = [] self._event_regions: List[pg.LinearRegionItem] = [] + self._signal_peak_lines: List[pg.InfiniteLine] = [] self._pre_region: Optional[pg.LinearRegionItem] = None self._post_region: Optional[pg.LinearRegionItem] = None self._settings = QtCore.QSettings("FiberPhotometryApp", "DoricProcessor") @@ -285,18 +393,33 @@ def __init__(self, parent=None) -> None: "heatmap_min": None, "heatmap_max": None, } + self._section_popups: Dict[str, QtWidgets.QDockWidget] = {} + self._section_scroll_hosts: Dict[str, QtWidgets.QScrollArea] = {} + self._section_buttons: Dict[str, QtWidgets.QPushButton] = {} + self._section_popup_initialized: set[str] = set() + self._is_restoring_panel_layout: bool = False + self._panel_layout_persistence_ready: bool = False + self._last_opened_section: Optional[str] = None + self._suspend_panel_layout_persistence: bool = False + self._post_docks_hidden_for_tab_switch: bool = False + self._post_section_visibility_before_hide: Dict[str, bool] = {} + self._post_section_state_before_hide: Dict[str, Dict[str, object]] = {} + self._dock_host: Optional[QtWidgets.QMainWindow] = None + self._dock_layout_restored: bool = False + self._app_closing: bool = False + self._post_snapshot_applied: bool = False + self._force_fixed_default_layout: bool = False self._build_ui() self._restore_settings() + self._panel_layout_persistence_ready = True + app = QtWidgets.QApplication.instance() + if app is not None: + app.aboutToQuit.connect(self._on_about_to_quit) def _build_ui(self) -> None: - root = QtWidgets.QHBoxLayout(self) + root = QtWidgets.QVBoxLayout(self) root.setContentsMargins(10, 10, 10, 10) - root.setSpacing(10) - - # Left controls (scroll) - left = QtWidgets.QWidget() - lv = QtWidgets.QVBoxLayout(left) - lv.setSpacing(10) + root.setSpacing(8) grp_src = QtWidgets.QGroupBox("Signal Source") vsrc = QtWidgets.QVBoxLayout(grp_src) @@ -333,7 +456,7 @@ def _build_ui(self) -> None: group_layout.addWidget(self.lbl_group) group_layout.addStretch(1) - self.btn_refresh_dio = QtWidgets.QPushButton("Refresh DIO list") + self.btn_refresh_dio = QtWidgets.QPushButton("Refresh A/D channel list") self.btn_refresh_dio.setProperty("class", "compactSmall") self.btn_refresh_dio.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) @@ -346,22 +469,36 @@ def _build_ui(self) -> None: fal.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) self.combo_align = QtWidgets.QComboBox() - self.combo_align.addItems(["DIO (from Doric)", "Behavior (CSV/XLSX)"]) + self.combo_align.addItems(["Analog/Digital channel (from Doric)", "Behavior (CSV/XLSX)"]) self.combo_align.setCurrentIndex(1) _compact_combo(self.combo_align, min_chars=6) self.combo_dio = QtWidgets.QComboBox() _compact_combo(self.combo_dio, min_chars=6) self.combo_dio_polarity = QtWidgets.QComboBox() - self.combo_dio_polarity.addItems(["Event high (0→1)", "Event low (1→0)"]) + self.combo_dio_polarity.addItems(["Event high (0->1)", "Event low (1->0)"]) _compact_combo(self.combo_dio_polarity, min_chars=6) self.combo_dio_align = QtWidgets.QComboBox() self.combo_dio_align.addItems(["Align to onset", "Align to offset"]) _compact_combo(self.combo_dio_align, min_chars=6) - self.btn_load_beh = QtWidgets.QPushButton("Load behavior CSV/XLSX…") + self.btn_load_beh = QtWidgets.QPushButton("Load behavior CSV/XLSX...") self.btn_load_beh.setProperty("class", "compactSmall") self.btn_load_beh.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + self.lbl_behavior_file_type = QtWidgets.QLabel("Behavior file type") + self.combo_behavior_file_type = QtWidgets.QComboBox() + self.combo_behavior_file_type.addItems( + [ + "Binary states (time + 0/1 columns)", + "Timestamps per behavior (columns = behaviors)", + ] + ) + self.combo_behavior_file_type.setToolTip( + "Choose how behavior files are parsed.\n" + "Binary states expects a time column and 0/1 behavior columns.\n" + "Timestamps mode expects one column per behavior containing event times." + ) + _compact_combo(self.combo_behavior_file_type, min_chars=10) self.lbl_beh = QtWidgets.QLabel("(none)") self.lbl_beh.setProperty("class", "hint") @@ -377,8 +514,8 @@ def _build_ui(self) -> None: # Control buttons for ordering order_layout = QtWidgets.QHBoxLayout() - self.btn_move_up = QtWidgets.QPushButton("↑ Move Up") - self.btn_move_down = QtWidgets.QPushButton("↓ Move Down") + self.btn_move_up = QtWidgets.QPushButton("Move Up") + self.btn_move_down = QtWidgets.QPushButton("Move Down") self.btn_auto_match = QtWidgets.QPushButton("Auto Match") self.btn_remove_pre = QtWidgets.QPushButton("Remove selected") self.btn_remove_beh = QtWidgets.QPushButton("Remove selected") @@ -410,20 +547,21 @@ def _build_ui(self) -> None: lists_layout.addLayout(beh_col) fal.addRow("Align source", self.combo_align) - fal.addRow("DIO channel", self.combo_dio) - fal.addRow("DIO polarity", self.combo_dio_polarity) - fal.addRow("DIO align", self.combo_dio_align) + fal.addRow("A/D channel", self.combo_dio) + fal.addRow("A/D polarity", self.combo_dio_polarity) + fal.addRow("A/D align", self.combo_dio_align) + fal.addRow(self.lbl_behavior_file_type, self.combo_behavior_file_type) fal.addRow(self.btn_load_beh) fal.addRow("Loaded files", self.lbl_beh) fal.addRow(files_layout) fal.addRow(lists_layout) fal.addRow(order_layout) - # Legacy behavior controls (hidden by default but kept for compatibility) + # Behavior controls self.combo_behavior_name = QtWidgets.QComboBox() _compact_combo(self.combo_behavior_name, min_chars=6) self.combo_behavior_align = QtWidgets.QComboBox() - self.combo_behavior_align.addItems(["Align to onset", "Align to offset", "Transition A→B"]) + self.combo_behavior_align.addItems(["Align to onset", "Align to offset", "Transition A->B"]) _compact_combo(self.combo_behavior_align, min_chars=6) self.combo_behavior_from = QtWidgets.QComboBox() self.combo_behavior_to = QtWidgets.QComboBox() @@ -434,21 +572,15 @@ def _build_ui(self) -> None: self.spin_transition_gap.setValue(1.0) self.spin_transition_gap.setDecimals(2) - # Hide legacy controls initially - legacy_group = QtWidgets.QGroupBox("Legacy Behavior Selection (deprecated)") - legacy_group.setCheckable(True) - legacy_group.setChecked(False) - legacy_layout = QtWidgets.QFormLayout(legacy_group) - legacy_layout.addRow("Behavior name", self.combo_behavior_name) - legacy_layout.addRow("Behavior align", self.combo_behavior_align) self.lbl_trans_from = QtWidgets.QLabel("Transition from") self.lbl_trans_to = QtWidgets.QLabel("Transition to") self.lbl_trans_gap = QtWidgets.QLabel("Transition gap (s)") - legacy_layout.addRow(self.lbl_trans_from, self.combo_behavior_from) - legacy_layout.addRow(self.lbl_trans_to, self.combo_behavior_to) - legacy_layout.addRow(self.lbl_trans_gap, self.spin_transition_gap) + fal.addRow("Behavior name", self.combo_behavior_name) + fal.addRow("Behavior align", self.combo_behavior_align) + fal.addRow(self.lbl_trans_from, self.combo_behavior_from) + fal.addRow(self.lbl_trans_to, self.combo_behavior_to) + fal.addRow(self.lbl_trans_gap, self.spin_transition_gap) - fal.addRow(legacy_group) grp_opt = QtWidgets.QGroupBox("PSTH Options") fopt = QtWidgets.QFormLayout(grp_opt) @@ -470,6 +602,7 @@ def _build_ui(self) -> None: self.btn_hide_filters.setCheckable(True) self.spin_event_start = QtWidgets.QSpinBox(); self.spin_event_start.setRange(1, 1000000); self.spin_event_start.setValue(1) self.spin_event_end = QtWidgets.QSpinBox(); self.spin_event_end.setRange(0, 1000000); self.spin_event_end.setValue(0) + self.spin_group_window = QtWidgets.QDoubleSpinBox(); self.spin_group_window.setRange(0.0, 1e6); self.spin_group_window.setValue(0.0); self.spin_group_window.setDecimals(3) self.spin_dur_min = QtWidgets.QDoubleSpinBox(); self.spin_dur_min.setRange(0, 1e6); self.spin_dur_min.setValue(0.0); self.spin_dur_min.setDecimals(2) self.spin_dur_max = QtWidgets.QDoubleSpinBox(); self.spin_dur_max.setRange(0, 1e6); self.spin_dur_max.setValue(0.0); self.spin_dur_max.setDecimals(2) self.cb_metrics = QtWidgets.QCheckBox("Enable PSTH metrics") @@ -488,7 +621,7 @@ def _build_ui(self) -> None: for w in ( self.spin_pre, self.spin_post, self.spin_b0, self.spin_b1, self.spin_resample, self.spin_smooth, - self.spin_event_start, self.spin_event_end, self.spin_dur_min, self.spin_dur_max, + self.spin_event_start, self.spin_event_end, self.spin_group_window, self.spin_dur_min, self.spin_dur_max, self.spin_metric_pre0, self.spin_metric_pre1, self.spin_metric_post0, self.spin_metric_post1, ): w.setMinimumWidth(60) @@ -565,13 +698,15 @@ def _build_ui(self) -> None: fopt.addRow(filt_widget) self.lbl_event_start = QtWidgets.QLabel("Event index start (1-based)") self.lbl_event_end = QtWidgets.QLabel("Event index end (0=all)") + self.lbl_group_window = QtWidgets.QLabel("Group events within (s) (0=off)") self.lbl_dur_min = QtWidgets.QLabel("Event duration min (s)") self.lbl_dur_max = QtWidgets.QLabel("Event duration max (s)") fopt.addRow(self.lbl_event_start, self.spin_event_start) fopt.addRow(self.lbl_event_end, self.spin_event_end) + fopt.addRow(self.lbl_group_window, self.spin_group_window) fopt.addRow(self.lbl_dur_min, self.spin_dur_min) fopt.addRow(self.lbl_dur_max, self.spin_dur_max) - fopt.addRow("Gaussian smooth σ (s)", self.spin_smooth) + fopt.addRow("Gaussian smooth sigma (s)", self.spin_smooth) met_row = QtWidgets.QHBoxLayout() met_row.addWidget(self.cb_metrics) met_row.addStretch(1) @@ -657,40 +792,319 @@ def _build_ui(self) -> None: self.btn_load_cfg.setProperty("class", "compactSmall") self.btn_load_cfg.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - lv.addWidget(grp_src) - lv.addWidget(grp_align) - lv.addWidget(grp_opt) - lv.addWidget(self.btn_compute) - lv.addWidget(self.btn_update) - lv.addWidget(self.btn_export) - lv.addWidget(self.btn_export_img) - lv.addWidget(self.btn_style) - lv.addWidget(self.btn_save_cfg) - lv.addWidget(self.btn_load_cfg) - lv.addStretch(1) - - scroll = QtWidgets.QScrollArea() - scroll.setWidgetResizable(True) - scroll.setWidget(left) + grp_signal = QtWidgets.QGroupBox("Signal Event Analyzer") + f_signal = QtWidgets.QFormLayout(grp_signal) + f_signal.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) + f_signal.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) + self.combo_signal_source = QtWidgets.QComboBox() + self.combo_signal_source.addItems(["Use processed output trace (loaded file)", "Use PSTH input trace"]) + _compact_combo(self.combo_signal_source, min_chars=10) + self.combo_signal_scope = QtWidgets.QComboBox() + self.combo_signal_scope.addItems(["Per file", "Pooled"]) + _compact_combo(self.combo_signal_scope, min_chars=8) + self.combo_signal_file = QtWidgets.QComboBox() + _compact_combo(self.combo_signal_file, min_chars=8) + self.combo_signal_method = QtWidgets.QComboBox() + self.combo_signal_method.addItems(["SciPy find_peaks"]) + self.spin_peak_prominence = QtWidgets.QDoubleSpinBox() + self.spin_peak_prominence.setRange(0.0, 1e6) + self.spin_peak_prominence.setValue(0.5) + self.spin_peak_prominence.setDecimals(4) + self.spin_peak_height = QtWidgets.QDoubleSpinBox() + self.spin_peak_height.setRange(0.0, 1e6) + self.spin_peak_height.setValue(0.0) + self.spin_peak_height.setDecimals(4) + self.spin_peak_distance = QtWidgets.QDoubleSpinBox() + self.spin_peak_distance.setRange(0.0, 3600.0) + self.spin_peak_distance.setValue(0.5) + self.spin_peak_distance.setDecimals(3) + self.spin_peak_smooth = QtWidgets.QDoubleSpinBox() + self.spin_peak_smooth.setRange(0.0, 30.0) + self.spin_peak_smooth.setValue(0.0) + self.spin_peak_smooth.setDecimals(3) + self.combo_peak_baseline = QtWidgets.QComboBox() + self.combo_peak_baseline.addItems(["Use trace as-is", "Detrend with rolling median", "Detrend with rolling mean"]) + self.spin_peak_baseline_window = QtWidgets.QDoubleSpinBox() + self.spin_peak_baseline_window.setRange(0.1, 3600.0) + self.spin_peak_baseline_window.setValue(10.0) + self.spin_peak_baseline_window.setDecimals(2) + self.spin_peak_rate_bin = QtWidgets.QDoubleSpinBox() + self.spin_peak_rate_bin.setRange(0.5, 3600.0) + self.spin_peak_rate_bin.setValue(60.0) + self.spin_peak_rate_bin.setDecimals(2) + self.spin_peak_auc_window = QtWidgets.QDoubleSpinBox() + self.spin_peak_auc_window.setRange(0.0, 30.0) + self.spin_peak_auc_window.setValue(0.5) + self.spin_peak_auc_window.setDecimals(3) + self.cb_peak_overlay = QtWidgets.QCheckBox("Show detected peaks on trace") + self.cb_peak_overlay.setChecked(True) + self.btn_detect_peaks = QtWidgets.QPushButton("Detect peaks") + self.btn_detect_peaks.setProperty("class", "compactPrimarySmall") + self.btn_export_peaks = QtWidgets.QPushButton("Export peaks CSV") + self.btn_export_peaks.setProperty("class", "compactSmall") + self.lbl_signal_msg = QtWidgets.QLabel("") + self.lbl_signal_msg.setProperty("class", "hint") + f_signal.addRow("Signal source", self.combo_signal_source) + f_signal.addRow("Group mode", self.combo_signal_scope) + f_signal.addRow("File", self.combo_signal_file) + f_signal.addRow("Method", self.combo_signal_method) + f_signal.addRow("Min prominence", self.spin_peak_prominence) + f_signal.addRow("Min height (0=off)", self.spin_peak_height) + f_signal.addRow("Min distance (s)", self.spin_peak_distance) + f_signal.addRow("Smooth sigma (s)", self.spin_peak_smooth) + f_signal.addRow("Baseline handling", self.combo_peak_baseline) + f_signal.addRow("Baseline window (s)", self.spin_peak_baseline_window) + f_signal.addRow("Rate bin (s)", self.spin_peak_rate_bin) + f_signal.addRow("AUC window (+/- s)", self.spin_peak_auc_window) + f_signal.addRow(self.cb_peak_overlay) + signal_btn_row = QtWidgets.QHBoxLayout() + signal_btn_row.addWidget(self.btn_detect_peaks) + signal_btn_row.addWidget(self.btn_export_peaks) + signal_btn_row.addStretch(1) + signal_btn_wrap = QtWidgets.QWidget() + signal_btn_wrap.setLayout(signal_btn_row) + f_signal.addRow(signal_btn_wrap) + + self.tbl_signal_metrics = QtWidgets.QTableWidget(0, 2) + self.tbl_signal_metrics.setHorizontalHeaderLabels(["Metric", "Value"]) + self.tbl_signal_metrics.verticalHeader().setVisible(False) + self.tbl_signal_metrics.horizontalHeader().setStretchLastSection(True) + self.tbl_signal_metrics.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) + self.tbl_signal_metrics.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.NoSelection) + + grp_behavior_analysis = QtWidgets.QGroupBox("Behavior Analysis") + f_behavior = QtWidgets.QFormLayout(grp_behavior_analysis) + f_behavior.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) + f_behavior.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) + self.combo_behavior_analysis = QtWidgets.QComboBox() + _compact_combo(self.combo_behavior_analysis, min_chars=8) + self.spin_behavior_bin = QtWidgets.QDoubleSpinBox() + self.spin_behavior_bin.setRange(0.5, 3600.0) + self.spin_behavior_bin.setValue(30.0) + self.spin_behavior_bin.setDecimals(2) + self.cb_behavior_aligned = QtWidgets.QCheckBox("Use aligned timeline when possible") + self.cb_behavior_aligned.setChecked(False) + self.btn_compute_behavior = QtWidgets.QPushButton("Compute behavior metrics") + self.btn_compute_behavior.setProperty("class", "compactPrimarySmall") + self.btn_export_behavior_metrics = QtWidgets.QPushButton("Export behavior metrics") + self.btn_export_behavior_metrics.setProperty("class", "compactSmall") + self.btn_export_behavior_events = QtWidgets.QPushButton("Export event list") + self.btn_export_behavior_events.setProperty("class", "compactSmall") + self.lbl_behavior_msg = QtWidgets.QLabel("") + self.lbl_behavior_msg.setProperty("class", "hint") + f_behavior.addRow("Behavior", self.combo_behavior_analysis) + f_behavior.addRow("Bin size (s)", self.spin_behavior_bin) + f_behavior.addRow(self.cb_behavior_aligned) + behavior_btn_row = QtWidgets.QHBoxLayout() + behavior_btn_row.addWidget(self.btn_compute_behavior) + behavior_btn_row.addWidget(self.btn_export_behavior_metrics) + behavior_btn_row.addWidget(self.btn_export_behavior_events) + behavior_btn_row.addStretch(1) + behavior_btn_wrap = QtWidgets.QWidget() + behavior_btn_wrap.setLayout(behavior_btn_row) + f_behavior.addRow(behavior_btn_wrap) + + self.tbl_behavior_metrics = QtWidgets.QTableWidget(0, 8) + self.tbl_behavior_metrics.setHorizontalHeaderLabels( + [ + "file_id", + "event_count", + "total_time", + "mean_duration", + "median_duration", + "std_duration", + "rate_per_min", + "fraction_time", + ] + ) + self.tbl_behavior_metrics.verticalHeader().setVisible(False) + self.tbl_behavior_metrics.horizontalHeader().setStretchLastSection(True) + self.tbl_behavior_metrics.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) + self.tbl_behavior_metrics.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows) + self.lbl_behavior_summary = QtWidgets.QLabel("Group metrics: -") + self.lbl_behavior_summary.setProperty("class", "hint") + + self.section_setup = QtWidgets.QWidget() + setup_layout = QtWidgets.QVBoxLayout(self.section_setup) + setup_layout.setContentsMargins(6, 6, 6, 6) + setup_layout.setSpacing(8) + setup_layout.addWidget(grp_src) + setup_layout.addWidget(grp_align) + setup_btn_row = QtWidgets.QHBoxLayout() + self.btn_setup_load = QtWidgets.QPushButton("Load") + self.btn_setup_load.setProperty("class", "compactPrimarySmall") + self.btn_setup_refresh = QtWidgets.QPushButton("Refresh A/D") + self.btn_setup_refresh.setProperty("class", "compactSmall") + setup_btn_row.addWidget(self.btn_setup_load) + setup_btn_row.addWidget(self.btn_setup_refresh) + setup_btn_row.addStretch(1) + setup_wrap = QtWidgets.QWidget() + setup_wrap.setLayout(setup_btn_row) + setup_layout.addWidget(setup_wrap) + setup_layout.addStretch(1) + + self.section_psth = QtWidgets.QWidget() + psth_layout = QtWidgets.QVBoxLayout(self.section_psth) + psth_layout.setContentsMargins(6, 6, 6, 6) + psth_layout.setSpacing(8) + psth_layout.addWidget(grp_opt) + psth_btn_row = QtWidgets.QHBoxLayout() + psth_btn_row.addWidget(self.btn_compute) + psth_btn_row.addWidget(self.btn_update) + psth_btn_row.addStretch(1) + psth_btn_wrap = QtWidgets.QWidget() + psth_btn_wrap.setLayout(psth_btn_row) + psth_layout.addWidget(psth_btn_wrap) + psth_layout.addStretch(1) + + self.section_signal = QtWidgets.QWidget() + signal_layout = QtWidgets.QVBoxLayout(self.section_signal) + signal_layout.setContentsMargins(6, 6, 6, 6) + signal_layout.setSpacing(8) + signal_layout.addWidget(grp_signal) + signal_layout.addWidget(self.tbl_signal_metrics) + signal_layout.addStretch(1) + + self.section_behavior = QtWidgets.QWidget() + behavior_layout = QtWidgets.QVBoxLayout(self.section_behavior) + behavior_layout.setContentsMargins(6, 6, 6, 6) + behavior_layout.setSpacing(8) + behavior_layout.addWidget(grp_behavior_analysis) + behavior_layout.addWidget(self.tbl_behavior_metrics) + behavior_layout.addWidget(self.lbl_behavior_summary) + behavior_layout.addStretch(1) + + self.section_export = QtWidgets.QWidget() + export_layout = QtWidgets.QVBoxLayout(self.section_export) + export_layout.setContentsMargins(6, 6, 6, 6) + export_layout.setSpacing(8) + export_layout.addWidget(self.btn_export) + export_layout.addWidget(self.btn_export_img) + export_layout.addWidget(self.btn_style) + export_layout.addWidget(self.btn_save_cfg) + export_layout.addWidget(self.btn_load_cfg) + export_layout.addStretch(1) + + action_row = QtWidgets.QHBoxLayout() + action_row.setContentsMargins(0, 0, 0, 0) + action_row.setSpacing(6) + + self.btn_action_load = QtWidgets.QPushButton("Load") + self.btn_action_load.setProperty("class", "compactPrimarySmall") + self.menu_action_load = QtWidgets.QMenu(self.btn_action_load) + self.act_load_current = self.menu_action_load.addAction("Use current preprocessed selection") + self.act_load_single = self.menu_action_load.addAction("Load processed file (single)") + self.act_load_group = self.menu_action_load.addAction("Load processed files (group)") + self.menu_action_load.addSeparator() + self.act_load_behavior = self.menu_action_load.addAction("Load behavior CSV/XLSX") + self.act_refresh_dio = self.menu_action_load.addAction("Refresh A/D channel list") + self.btn_action_load.setMenu(self.menu_action_load) + + self.btn_action_compute = QtWidgets.QPushButton("Compute PSTH") + self.btn_action_compute.setProperty("class", "compactPrimarySmall") + self.btn_action_export = QtWidgets.QPushButton("Export") + self.btn_action_export.setProperty("class", "compactPrimarySmall") + self.btn_action_hide = QtWidgets.QPushButton("Hide Panels") + self.btn_action_hide.setProperty("class", "compactSmall") + + self.btn_panel_setup = QtWidgets.QPushButton("Setup") + self.btn_panel_psth = QtWidgets.QPushButton("PSTH") + self.btn_panel_signal = QtWidgets.QPushButton("Signal") + self.btn_panel_behavior = QtWidgets.QPushButton("Behavior") + self.btn_panel_export = QtWidgets.QPushButton("Export") + self._section_buttons = { + "setup": self.btn_panel_setup, + "psth": self.btn_panel_psth, + "signal": self.btn_panel_signal, + "behavior": self.btn_panel_behavior, + "export": self.btn_panel_export, + } + for b in self._section_buttons.values(): + b.setCheckable(True) + b.setProperty("class", "compactSmall") + + action_row.addWidget(self.btn_action_load) + action_row.addWidget(self.btn_action_compute) + action_row.addWidget(self.btn_action_export) + action_row.addWidget(self.btn_action_hide) + action_row.addSpacing(8) + action_row.addWidget(QtWidgets.QLabel("Panels:")) + action_row.addWidget(self.btn_panel_setup) + action_row.addWidget(self.btn_panel_psth) + action_row.addWidget(self.btn_panel_signal) + action_row.addWidget(self.btn_panel_behavior) + action_row.addWidget(self.btn_panel_export) + action_row.addStretch(1) + root.addLayout(action_row) # Right plots: trace preview + heatmap + avg right = QtWidgets.QWidget() self._right_panel = right + right.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) rv = QtWidgets.QVBoxLayout(right) rv.setSpacing(10) - self.plot_trace = pg.PlotWidget(title="Trace preview (events as vertical lines)") - self.plot_heat = pg.PlotWidget(title="Heatmap (trials or recordings)") + rv.setContentsMargins(0, 0, 0, 0) + rv.setSpacing(8) + + header_row = QtWidgets.QHBoxLayout() + self.lbl_plot_file = QtWidgets.QLabel("File: (none)") + header_font = self.lbl_plot_file.font() + header_font.setBold(True) + self.lbl_plot_file.setFont(header_font) + header_row.addWidget(self.lbl_plot_file) + header_row.addStretch(1) + rv.addLayout(header_row) + + view_row = QtWidgets.QHBoxLayout() + view_row.addWidget(QtWidgets.QLabel("View layout")) + self.combo_view_layout = QtWidgets.QComboBox() + self.combo_view_layout.addItems(["Standard", "Heatmap focus", "Trace focus", "Metrics focus", "All"]) + _compact_combo(self.combo_view_layout, min_chars=9) + view_row.addWidget(self.combo_view_layout) + view_row.addStretch(1) + rv.addLayout(view_row) + + self.plot_trace = pg.PlotWidget(title="Trace preview") + self.plot_heat = pg.PlotWidget(title="Heatmap") self.plot_dur = pg.PlotWidget(title="Event duration") - self.plot_avg = pg.PlotWidget(title="Average PSTH ± SEM") - self.plot_metrics = pg.PlotWidget(title="Metrics (pre vs post)") + self.plot_avg = pg.PlotWidget(title="Average PSTH +/- SEM") + self.plot_metrics = pg.PlotWidget(title="PSTH metrics") self.plot_global = pg.PlotWidget(title="Global metrics") + self.plot_peak_amp = pg.PlotWidget(title="Peak amplitudes") + self.plot_peak_ibi = pg.PlotWidget(title="Inter-peak intervals") + self.plot_peak_rate = pg.PlotWidget(title="Peak rate over time") + self.plot_behavior_raster = pg.PlotWidget(title="Behavior raster") + self.plot_behavior_rate = pg.PlotWidget(title="Behavior frequency over time") + self.plot_behavior_duration = pg.PlotWidget(title="Behavior duration distribution") + self.plot_behavior_starts = pg.PlotWidget(title="Behavior start times") - for w in (self.plot_trace, self.plot_heat, self.plot_dur, self.plot_avg, self.plot_metrics, self.plot_global): + for w in ( + self.plot_trace, + self.plot_heat, + self.plot_dur, + self.plot_avg, + self.plot_metrics, + self.plot_global, + self.plot_peak_amp, + self.plot_peak_ibi, + self.plot_peak_rate, + self.plot_behavior_raster, + self.plot_behavior_rate, + self.plot_behavior_duration, + self.plot_behavior_starts, + ): _opt_plot(w) self.curve_trace = self.plot_trace.plot(pen=pg.mkPen(self._style["trace"], width=1.1)) self.curve_behavior = self.plot_trace.plot(pen=pg.mkPen(self._style["behavior"], width=1.0)) + self.curve_peak_markers = self.plot_trace.plot( + pen=None, + symbol="o", + symbolSize=6, + symbolBrush=pg.mkBrush(240, 120, 80), + symbolPen=pg.mkPen((240, 120, 80), width=1.0), + ) self.event_lines: List[pg.InfiniteLine] = [] self.img = pg.ImageItem() @@ -699,6 +1113,20 @@ def _build_ui(self) -> None: self.plot_heat.setLabel("left", "Trials / Recordings") self.plot_dur.setLabel("bottom", "Duration (s)") self.plot_dur.setLabel("left", "Count") + self.plot_peak_amp.setLabel("bottom", "Amplitude") + self.plot_peak_amp.setLabel("left", "Count") + self.plot_peak_ibi.setLabel("bottom", "Interval (s)") + self.plot_peak_ibi.setLabel("left", "Count") + self.plot_peak_rate.setLabel("bottom", "Time (s)") + self.plot_peak_rate.setLabel("left", "Peaks/min") + self.plot_behavior_raster.setLabel("bottom", "Time (s)") + self.plot_behavior_raster.setLabel("left", "File index") + self.plot_behavior_rate.setLabel("bottom", "Time (s)") + self.plot_behavior_rate.setLabel("left", "Events/min") + self.plot_behavior_duration.setLabel("bottom", "Duration (s)") + self.plot_behavior_duration.setLabel("left", "Count") + self.plot_behavior_starts.setLabel("bottom", "Start time (s)") + self.plot_behavior_starts.setLabel("left", "Count") self.curve_avg = self.plot_avg.plot(pen=pg.mkPen(self._style["avg"], width=1.3)) self.curve_sem_hi = self.plot_avg.plot(pen=pg.mkPen((220, 220, 220), width=1.0)) @@ -718,35 +1146,73 @@ def _build_ui(self) -> None: self.plot_global.setXRange(-0.5, 1.5, padding=0) self.plot_global.getAxis("bottom").setTicks([[(0, "amp"), (1, "freq")]]) - heat_row = QtWidgets.QHBoxLayout() + self.row_heat = QtWidgets.QWidget() + heat_row = QtWidgets.QHBoxLayout(self.row_heat) + heat_row.setContentsMargins(0, 0, 0, 0) + heat_row.setSpacing(8) heat_row.addWidget(self.plot_heat, stretch=4) heat_row.addWidget(self.plot_dur, stretch=1) - avg_row = QtWidgets.QHBoxLayout() + self.row_avg = QtWidgets.QWidget() + avg_row = QtWidgets.QHBoxLayout(self.row_avg) + avg_row.setContentsMargins(0, 0, 0, 0) + avg_row.setSpacing(8) avg_row.addWidget(self.plot_avg, stretch=4) avg_row.addWidget(self.plot_metrics, stretch=1) avg_row.addWidget(self.plot_global, stretch=1) + self.row_signal = QtWidgets.QWidget() + signal_row = QtWidgets.QHBoxLayout(self.row_signal) + signal_row.setContentsMargins(0, 0, 0, 0) + signal_row.setSpacing(8) + signal_row.addWidget(self.plot_peak_amp, stretch=1) + signal_row.addWidget(self.plot_peak_ibi, stretch=1) + signal_row.addWidget(self.plot_peak_rate, stretch=1) + + self.row_behavior = QtWidgets.QWidget() + behavior_grid = QtWidgets.QGridLayout(self.row_behavior) + behavior_grid.setContentsMargins(0, 0, 0, 0) + behavior_grid.setHorizontalSpacing(8) + behavior_grid.setVerticalSpacing(8) + behavior_grid.addWidget(self.plot_behavior_raster, 0, 0, 1, 3) + behavior_grid.addWidget(self.plot_behavior_rate, 1, 0) + behavior_grid.addWidget(self.plot_behavior_duration, 1, 1) + behavior_grid.addWidget(self.plot_behavior_starts, 1, 2) + behavior_grid.setColumnStretch(0, 1) + behavior_grid.setColumnStretch(1, 1) + behavior_grid.setColumnStretch(2, 1) + + # Keep a visible minimum plot footprint even with aggressive docking/resizing. + self.plot_trace.setMinimumHeight(140) + self.row_heat.setMinimumHeight(180) + self.row_avg.setMinimumHeight(140) + rv.addWidget(self.plot_trace, stretch=1) - rv.addLayout(heat_row, stretch=2) - rv.addLayout(avg_row, stretch=1) - self.lbl_log = QtWidgets.QLabel("") - self.lbl_log.setProperty("class", "hint") - rv.addWidget(self.lbl_log) - - # Layout - splitter = QtWidgets.QSplitter(QtCore.Qt.Orientation.Horizontal) - splitter.addWidget(scroll) - splitter.addWidget(right) - splitter.setStretchFactor(0, 0) - splitter.setStretchFactor(1, 1) - splitter.setSizes([260, 1240]) - - root.addWidget(splitter) + rv.addWidget(self.row_heat, stretch=2) + rv.addWidget(self.row_avg, stretch=1) + rv.addWidget(self.row_signal, stretch=1) + rv.addWidget(self.row_behavior, stretch=1) + root.addWidget(right, stretch=1) + root.setStretch(0, 0) + root.setStretch(1, 1) + self._setup_section_popups() # Wiring + self.act_load_current.triggered.connect(self.requestCurrentProcessed.emit) + self.act_load_single.triggered.connect(self._load_processed_files_single) + self.act_load_group.triggered.connect(self._load_processed_files) + self.act_load_behavior.triggered.connect(self._load_behavior_files) + self.act_refresh_dio.triggered.connect(self.requestDioList.emit) + self.btn_action_compute.clicked.connect(self._compute_psth) + self.btn_action_export.clicked.connect(self._export_results) + self.btn_action_hide.clicked.connect(self._hide_all_section_popups) + for key, btn in self._section_buttons.items(): + btn.toggled.connect(lambda checked, section_key=key: self._toggle_section_popup(section_key, checked)) + self.btn_use_current.clicked.connect(self.requestCurrentProcessed.emit) self.btn_refresh_dio.clicked.connect(self.requestDioList.emit) + self.btn_setup_refresh.clicked.connect(self.requestDioList.emit) + self.btn_setup_load.clicked.connect(self._load_processed_files) self.btn_load_beh.clicked.connect(self._load_behavior_files) self.btn_load_processed.clicked.connect(self._load_processed_files) self.btn_load_processed_single.clicked.connect(self._load_processed_files_single) @@ -756,6 +1222,11 @@ def _build_ui(self) -> None: self.list_behaviors.orderChanged.connect(self._sync_behavior_order_from_list) self.btn_compute.clicked.connect(self._compute_psth) self.btn_update.clicked.connect(self._compute_psth) + self.btn_detect_peaks.clicked.connect(self._detect_signal_events) + self.btn_export_peaks.clicked.connect(self._export_signal_events_csv) + self.btn_compute_behavior.clicked.connect(self._compute_behavior_analysis) + self.btn_export_behavior_metrics.clicked.connect(self._export_behavior_metrics_csv) + self.btn_export_behavior_events.clicked.connect(self._export_behavior_events_csv) self.btn_export.clicked.connect(self._export_results) self.btn_export_img.clicked.connect(self._export_images) self.btn_style.clicked.connect(self._open_style_dialog) @@ -766,8 +1237,15 @@ def _build_ui(self) -> None: self.cb_global_metrics.stateChanged.connect(self._update_global_metrics_enabled) self.btn_hide_filters.toggled.connect(self._toggle_filter_panel) self.btn_hide_metrics.toggled.connect(self._toggle_metrics_panel) + self.combo_view_layout.currentIndexChanged.connect(self._apply_view_layout) + self.combo_view_layout.currentIndexChanged.connect(lambda *_: self._save_settings()) + self.cb_peak_overlay.toggled.connect(self._refresh_signal_overlay) + self.combo_signal_source.currentIndexChanged.connect(self._refresh_signal_file_combo) + self.combo_signal_scope.currentIndexChanged.connect(self._refresh_signal_file_combo) + self.tab_sources.currentChanged.connect(self._refresh_signal_file_combo) self.combo_align.currentIndexChanged.connect(self._update_align_ui) + self.combo_behavior_file_type.currentIndexChanged.connect(self._update_align_ui) self.combo_behavior_align.currentIndexChanged.connect(self._update_align_ui) self.combo_align.currentIndexChanged.connect(self._refresh_behavior_list) self.combo_align.currentIndexChanged.connect(self._compute_psth) @@ -785,6 +1263,7 @@ def _build_ui(self) -> None: for w in ( self.spin_event_start, self.spin_event_end, + self.spin_group_window, self.spin_dur_min, self.spin_dur_max, self.spin_metric_pre0, @@ -807,14 +1286,392 @@ def _build_ui(self) -> None: self._update_global_metrics_enabled() self._toggle_filter_panel(False) self._toggle_metrics_panel(False) + self._apply_view_layout() + self._refresh_signal_file_combo() + self._update_data_availability() + self._update_status_strip() QtGui.QShortcut(QtGui.QKeySequence("Ctrl+S"), self, activated=self._export_results) QtGui.QShortcut(QtGui.QKeySequence("F5"), self, activated=self._compute_psth) + def _dock_main_window(self) -> Optional[QtWidgets.QMainWindow]: + host = self.window() + return host if isinstance(host, QtWidgets.QMainWindow) else None + + def _setup_section_popups(self) -> None: + if self._section_popups: + return + host = self._dock_main_window() + if host is None: + # The tab can be created before it is attached to the main window. + # Retry from showEvent once host is available. + return + self._dock_host = host + section_map: Dict[str, Tuple[str, QtWidgets.QWidget]] = { + "setup": ("Setup", self.section_setup), + "psth": ("PSTH", self.section_psth), + "signal": ("Signal Event Analyzer", self.section_signal), + "behavior": ("Behavior Analysis", self.section_behavior), + "export": ("Export", self.section_export), + } + for key, (title, widget) in section_map.items(): + scroll = QtWidgets.QScrollArea() + scroll.setWidgetResizable(True) + scroll.setFrameShape(QtWidgets.QFrame.Shape.NoFrame) + scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) + # Keep viewport painted with dock background to avoid dark paint gaps + # when section rows are dynamically shown/hidden. + scroll.viewport().setAutoFillBackground(True) + scroll.viewport().setStyleSheet("background: #242a34;") + # Keep section widgets shrinkable so dock stacks do not clip content. + widget.setMinimumSize(0, 0) + widget.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) + scroll.setWidget(widget) + self._section_scroll_hosts[key] = scroll + + dock = QtWidgets.QDockWidget(title, host) + dock.setObjectName(f"post.{key}.dock") + dock.setAllowedAreas(QtCore.Qt.DockWidgetArea.AllDockWidgetAreas) + dock.setMinimumWidth(320) + dock.setFeatures( + QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetFloatable + ) + dock.setWidget(scroll) + dock.visibilityChanged.connect( + lambda visible, section_key=key: self._on_section_popup_visibility(section_key, visible) + ) + dock.topLevelChanged.connect(lambda *_: self._save_panel_layout_state()) + dock.dockLocationChanged.connect(lambda *_: self._save_panel_layout_state()) + host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) + # Match preprocessing behavior: popups open floating by default. + dock.setFloating(True) + dock.hide() + self._section_popups[key] = dock + + # If popups become available after delayed host attachment, restore once here. + if self._panel_layout_persistence_ready and not self._dock_layout_restored: + self._restore_panel_layout_state() + self._dock_layout_restored = True + # Main window can use this callback to retry pending dock restores. + try: + if hasattr(host, "on_post_docks_ready"): + host.on_post_docks_ready() + elif hasattr(host, "onPostDocksReady"): + host.onPostDocksReady() + except Exception: + pass + + def _set_section_button_checked(self, key: str, checked: bool) -> None: + btn = self._section_buttons.get(key) + if btn is None: + return + btn.blockSignals(True) + btn.setChecked(bool(checked)) + btn.blockSignals(False) + + def _toggle_section_popup(self, key: str, checked: bool) -> None: + if not self._section_popups: + self._setup_section_popups() + dock = self._section_popups.get(key) + if dock is None: + return + if checked: + # Keep user-selected docking mode. Only reposition if currently floating off-screen. + if dock.isFloating(): + if key not in self._section_popup_initialized or not self._is_popup_on_screen(dock): + self._position_section_popup(dock, key) + self._section_popup_initialized.add(key) + dock.show() + dock.raise_() + dock.activateWindow() + self._last_opened_section = key + else: + dock.hide() + self._save_panel_layout_state() + + def _on_section_popup_visibility(self, key: str, visible: bool) -> None: + self._set_section_button_checked(key, visible) + if visible: + self._last_opened_section = key + elif self._last_opened_section == key: + self._last_opened_section = None + self._save_panel_layout_state() + + def _hide_all_section_popups(self) -> None: + for key, dock in self._section_popups.items(): + dock.hide() + self._set_section_button_checked(key, False) + self._last_opened_section = None + self._save_panel_layout_state() + + def _default_popup_size(self, key: str) -> Tuple[int, int]: + size_map = { + "setup": (420, 620), + "psth": (420, 640), + "signal": (420, 640), + "behavior": (500, 620), + "export": (340, 300), + } + return size_map.get(key, (420, 620)) + + def _active_screen_geometry(self) -> QtCore.QRect: + handle = self.windowHandle() + screen = handle.screen() if handle else None + if screen is None: + screen = QtGui.QGuiApplication.screenAt(self.mapToGlobal(self.rect().center())) + if screen is None: + screen = QtGui.QGuiApplication.primaryScreen() + if screen is None: + return QtCore.QRect(0, 0, 1920, 1080) + return screen.availableGeometry() + + def _position_section_popup(self, dock: QtWidgets.QDockWidget, key: str) -> None: + panel_global = self.mapToGlobal(self.rect().topLeft()) + panel_rect = QtCore.QRect(panel_global, self.size()) + screen_rect = self._active_screen_geometry() + pref_w, pref_h = self._default_popup_size(key) + w = min(pref_w, max(320, screen_rect.width() - 40)) + h = min(pref_h, max(240, screen_rect.height() - 40)) + + x_right = panel_rect.x() + panel_rect.width() + 12 + x_left = panel_rect.x() - w - 12 + y_pref = panel_rect.y() + 60 + + x_min = screen_rect.x() + 8 + x_max = screen_rect.x() + max(8, screen_rect.width() - w - 8) + y_min = screen_rect.y() + 8 + y_max = screen_rect.y() + max(8, screen_rect.height() - h - 8) + + if x_right <= x_max: + x = x_right + elif x_left >= x_min: + x = x_left + else: + x = x_max + y = min(max(y_pref, y_min), y_max) + + dock.resize(int(w), int(h)) + dock.move(int(x), int(y)) + + def _is_popup_on_screen(self, dock: QtWidgets.QDockWidget) -> bool: + rect = dock.frameGeometry() + if rect.width() <= 0 or rect.height() <= 0: + return False + for screen in QtGui.QGuiApplication.screens(): + if screen.availableGeometry().intersects(rect): + return True + return False + + def _dock_area_from_settings( + self, + value: object, + default: QtCore.Qt.DockWidgetArea = QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + ) -> QtCore.Qt.DockWidgetArea: + left_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.LeftDockWidgetArea, 1) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + top_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.TopDockWidgetArea, 4) + bottom_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, 8) + area_int = _dock_area_to_int(value, _dock_area_to_int(default, right_i)) + area_map: Dict[int, QtCore.Qt.DockWidgetArea] = { + left_i: QtCore.Qt.DockWidgetArea.LeftDockWidgetArea, + right_i: QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + top_i: QtCore.Qt.DockWidgetArea.TopDockWidgetArea, + bottom_i: QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, + } + if area_int in area_map: + return area_map[area_int] + return default + + def _to_qbytearray(self, value: object) -> Optional[QtCore.QByteArray]: + if isinstance(value, QtCore.QByteArray): + return value + if isinstance(value, (bytes, bytearray)): + return QtCore.QByteArray(bytes(value)) + if isinstance(value, str): + try: + return QtCore.QByteArray.fromBase64(value.encode("utf-8")) + except Exception: + return None + return None + + def _sync_section_button_states_from_docks(self) -> None: + self._last_opened_section = None + for key, dock in self._section_popups.items(): + visible = bool(dock.isVisible()) + self._set_section_button_checked(key, visible) + if visible: + self._last_opened_section = key + + def _has_saved_layout_state(self) -> bool: + try: + if self._settings.contains(_POST_DOCK_STATE_KEY): + return True + keys = list(self._section_popups.keys()) or ["setup", "psth", "signal", "behavior", "export"] + for key in keys: + if self._settings.contains(f"post_section_docks/{key}/visible"): + return True + except Exception: + pass + return False + + def _save_panel_layout_state(self) -> None: + if not self._panel_layout_persistence_ready: + return + if self._is_restoring_panel_layout: + return + if self._suspend_panel_layout_persistence: + return + # Do not overwrite stored layout while post panels are hidden for tab switching. + if self._post_docks_hidden_for_tab_switch: + return + host = self._dock_host or self._dock_main_window() + if host is None: + return + self._dock_host = host + if not self._section_popups: + return + for key, dock in self._section_popups.items(): + try: + base = f"post_section_docks/{key}" + # Preserve pre-hide state while switching tabs so settings are not overwritten + # with temporary hidden values. + cached = self._post_section_state_before_hide.get(key, {}) if self._post_docks_hidden_for_tab_switch else {} + visible = bool(cached.get("visible", dock.isVisible())) + floating = bool(cached.get("floating", dock.isFloating())) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + area_val = _dock_area_to_int(cached.get("area", host.dockWidgetArea(dock)), right_i) + geom = cached.get("geometry", dock.saveGeometry()) + self._settings.setValue(f"{base}/visible", visible) + self._settings.setValue(f"{base}/floating", floating) + self._settings.setValue(f"{base}/area", area_val) + self._settings.setValue(f"{base}/geometry", geom) + except Exception: + continue + try: + self._settings.sync() + except Exception: + pass + + def _persist_hidden_layout_state_from_cache(self) -> None: + """Persist cached post layout captured when tab-switch hiding post docks.""" + if not self._post_docks_hidden_for_tab_switch: + return + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + if not self._section_popups: + return + for key in self._section_popups.keys(): + try: + state = self._post_section_state_before_hide.get(key, {}) + base = f"post_section_docks/{key}" + self._settings.setValue(f"{base}/visible", bool(state.get("visible", False))) + self._settings.setValue(f"{base}/floating", bool(state.get("floating", True))) + self._settings.setValue(f"{base}/area", _dock_area_to_int(state.get("area", right_i), right_i)) + geom = state.get("geometry") + if isinstance(geom, QtCore.QByteArray) and not geom.isEmpty(): + self._settings.setValue(f"{base}/geometry", geom) + except Exception: + continue + try: + self._settings.sync() + except Exception: + pass + + def flush_post_section_state_to_settings(self) -> None: + """Flush latest post section visibility/layout into QSettings immediately.""" + if self._post_docks_hidden_for_tab_switch: + self._persist_hidden_layout_state_from_cache() + return + self._save_panel_layout_state() + + def persist_layout_state_snapshot(self) -> None: + """ + Persist post dock state safely. + Uses cached tab-switch state while hidden, otherwise captures current host topology. + """ + if self._post_docks_hidden_for_tab_switch: + self._persist_hidden_layout_state_from_cache() + return + + host = self._dock_host or self._dock_main_window() + if host is not None: + self._dock_host = host + try: + state = None + if hasattr(host, "captureDockSnapshotForTab"): + state = host.captureDockSnapshotForTab("post") + elif hasattr(host, "saveState"): + state = host.saveState(_DOCK_STATE_VERSION) + if state is not None and not state.isEmpty(): + self._settings.setValue(_POST_DOCK_STATE_KEY, state) + except Exception: + pass + self.flush_post_section_state_to_settings() + + def _restore_panel_layout_state(self) -> None: + if self._force_fixed_default_layout: + self.apply_fixed_default_layout() + return + self._is_restoring_panel_layout = True + try: + if not self._section_popups: + self._setup_section_popups() + host = self._dock_host or self._dock_main_window() + if host is None or not self._section_popups: + return + self._dock_host = host + has_saved_layout = any( + bool(self._settings.contains(f"post_section_docks/{key}/visible")) + for key in self._section_popups.keys() + ) + for key, dock in self._section_popups.items(): + base = f"post_section_docks/{key}" + default_visible = (key == "setup") if not has_saved_layout else False + visible = _to_bool(self._settings.value(f"{base}/visible", default_visible), bool(default_visible)) + floating = _to_bool(self._settings.value(f"{base}/floating", True), True) + area_val = self._settings.value( + f"{base}/area", + _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2), + ) + area = self._dock_area_from_settings(area_val, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) + geom = self._to_qbytearray(self._settings.value(f"{base}/geometry", None)) + + dock.blockSignals(True) + try: + if floating: + dock.setFloating(True) + else: + host.addDockWidget(area, dock) + dock.setFloating(False) + + # Apply geometry for both floating and docked states. + if geom is not None and not geom.isEmpty(): + dock.restoreGeometry(geom) + self._section_popup_initialized.add(key) + + if visible: + if dock.isFloating() and not self._is_popup_on_screen(dock): + self._position_section_popup(dock, key) + dock.show() + else: + dock.hide() + finally: + dock.blockSignals(False) + except Exception: + pass + finally: + self._sync_section_button_states_from_docks() + self._is_restoring_panel_layout = False + # ---- bridge reception ---- def set_current_source_label(self, filename: str, channel: str) -> None: self.lbl_current.setText(f"Current: {filename} [{channel}]") + if hasattr(self, "lbl_plot_file"): + self.lbl_plot_file.setText(f"File: {filename}") + self._update_status_strip() def notify_preprocessing_updated(self, _processed: ProcessedTrial) -> None: # no-op; user presses compute or update @@ -833,6 +1690,7 @@ def _set_resample_from_processed(self) -> None: if np.isfinite(fs) and fs > 0: fs = max(1.0, min(1000.0, float(fs))) self.spin_resample.setValue(fs) + self._update_status_strip() @QtCore.Slot(list) def receive_current_processed(self, processed_list: List[ProcessedTrial]) -> None: @@ -841,6 +1699,8 @@ def receive_current_processed(self, processed_list: List[ProcessedTrial]) -> Non self._refresh_behavior_list() self._set_resample_from_processed() self._update_trace_preview() + self._update_data_availability() + self._update_status_strip() def append_processed(self, processed_list: List[ProcessedTrial]) -> None: if not processed_list: @@ -849,12 +1709,15 @@ def append_processed(self, processed_list: List[ProcessedTrial]) -> None: self._refresh_behavior_list() self._set_resample_from_processed() self._update_trace_preview() + self._update_data_availability() + self._update_status_strip() @QtCore.Slot(list) def receive_dio_list(self, dio_list: List[str]) -> None: self.combo_dio.clear() for d in dio_list or []: self.combo_dio.addItem(d) + self._update_status_strip() @QtCore.Slot(str, str, object, object) def receive_dio_data(self, path: str, dio_name: str, t: Optional[np.ndarray], x: Optional[np.ndarray]) -> None: @@ -865,12 +1728,13 @@ def receive_dio_data(self, path: str, dio_name: str, t: Optional[np.ndarray], x: def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: if replace: self._behavior_sources.clear() + parse_mode = self._current_behavior_parse_mode() for p in paths: stem = os.path.splitext(os.path.basename(p))[0] ext = os.path.splitext(p)[1].lower() try: if ext == ".csv": - info = _load_behavior_csv(p) + info = _load_behavior_csv(p, parse_mode=parse_mode) elif ext == ".xlsx": import pandas as pd xls = pd.ExcelFile(p, engine="openpyxl") @@ -886,9 +1750,15 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: ) if not ok: continue - info = _load_behavior_ethovision(p, sheet_name=sheet) + info = _load_behavior_ethovision(p, sheet_name=sheet, parse_mode=parse_mode) else: continue + if not (info.get("behaviors") or {}): + QtWidgets.QMessageBox.warning( + self, + "Behavior load warning", + f"No behavior columns detected in {os.path.basename(p)} for the selected file type.", + ) self._behavior_sources[stem] = info except Exception as exc: QtWidgets.QMessageBox.warning( @@ -897,7 +1767,10 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: f"Could not load {os.path.basename(p)}:\n{exc}", ) continue - self.lbl_beh.setText(f"{len(self._behavior_sources)} file(s) loaded") + mode_label = "timestamps" if parse_mode == _BEHAVIOR_PARSE_TIMESTAMPS else "binary" + self.lbl_beh.setText(f"{len(self._behavior_sources)} file(s) loaded [{mode_label}]") + self._update_data_availability() + self._update_status_strip() def _load_processed_paths(self, paths: List[str], replace: bool) -> None: loaded: List[ProcessedTrial] = [] @@ -921,6 +1794,8 @@ def _load_processed_paths(self, paths: List[str], replace: bool) -> None: self._update_file_lists() self._set_resample_from_processed() self._compute_psth() + self._update_data_availability() + self._update_status_strip() def _on_preprocessed_files_dropped(self, paths: List[str]) -> None: allowed = {".csv", ".h5", ".hdf5"} @@ -940,14 +1815,22 @@ def _on_behavior_files_dropped(self, paths: List[str]) -> None: # ---- behavior files ---- def _update_align_ui(self) -> None: - use_dio = self.combo_align.currentText().startswith("DIO") + use_dio = _is_doric_channel_align(self.combo_align.currentText()) for w in (self.combo_dio, self.combo_dio_polarity, self.combo_dio_align): w.setEnabled(use_dio) + w.setVisible(use_dio) use_beh = not use_dio + self.lbl_behavior_file_type.setEnabled(use_beh) + self.lbl_behavior_file_type.setVisible(use_beh) + self.combo_behavior_file_type.setEnabled(use_beh) + self.combo_behavior_file_type.setVisible(use_beh) self.btn_load_beh.setEnabled(use_beh) + self.btn_load_beh.setVisible(use_beh) self.combo_behavior_name.setEnabled(use_beh) + self.combo_behavior_name.setVisible(use_beh) self.combo_behavior_align.setEnabled(use_beh) + self.combo_behavior_align.setVisible(use_beh) is_transition = self.combo_behavior_align.currentText().startswith("Transition") and use_beh for w in ( @@ -965,10 +1848,146 @@ def _update_align_ui(self) -> None: self.combo_behavior_to.setEnabled(is_transition) self.spin_transition_gap.setEnabled(is_transition) self._update_trace_preview() + self._update_status_strip() + + def _current_behavior_parse_mode(self) -> str: + text = self.combo_behavior_file_type.currentText().strip().lower() if hasattr(self, "combo_behavior_file_type") else "" + if "timestamp" in text: + return _BEHAVIOR_PARSE_TIMESTAMPS + return _BEHAVIOR_PARSE_BINARY + + def _apply_view_layout(self) -> None: + layout = self.combo_view_layout.currentText() if hasattr(self, "combo_view_layout") else "Standard" + show_trace = True + show_heat = True + show_avg = True + show_signal = False + show_behavior = False + + self.plot_dur.setVisible(True) + self.plot_metrics.setVisible(True) + self.plot_global.setVisible(self.cb_global_metrics.isChecked()) + + if layout == "Heatmap focus": + show_signal = False + show_behavior = False + self.plot_dur.setVisible(False) + self.plot_metrics.setVisible(False) + self.plot_global.setVisible(False) + elif layout == "Trace focus": + show_heat = False + show_signal = False + show_behavior = False + self.plot_metrics.setVisible(False) + self.plot_global.setVisible(False) + elif layout == "Metrics focus": + show_heat = False + show_signal = False + show_behavior = False + self.plot_metrics.setVisible(True) + self.plot_global.setVisible(True) + elif layout == "All": + show_signal = True + show_behavior = True + + self.plot_trace.setVisible(show_trace) + self.row_heat.setVisible(show_heat) + self.row_avg.setVisible(show_avg) + self.row_signal.setVisible(show_signal) + self.row_behavior.setVisible(show_behavior) + + def _refresh_signal_file_combo(self) -> None: + if not hasattr(self, "combo_signal_file"): + return + prev = self.combo_signal_file.currentText().strip() + self.combo_signal_file.blockSignals(True) + self.combo_signal_file.clear() + for proc in self._processed: + stem = os.path.splitext(os.path.basename(proc.path))[0] if proc.path else "import" + self.combo_signal_file.addItem(stem) + if prev: + idx = self.combo_signal_file.findText(prev) + if idx >= 0: + self.combo_signal_file.setCurrentIndex(idx) + self.combo_signal_file.blockSignals(False) + has_multi = self.combo_signal_file.count() > 1 + self.combo_signal_scope.setEnabled(has_multi) + self.combo_signal_file.setEnabled(self.combo_signal_scope.currentText() == "Per file") + + def _update_data_availability(self) -> None: + has_processed = bool(self._processed) + has_behavior = bool(self._behavior_sources) + for w in ( + self.btn_compute, + self.btn_update, + self.btn_export, + self.btn_export_img, + self.btn_detect_peaks, + self.btn_export_peaks, + ): + w.setEnabled(has_processed) + for w in ( + self.combo_signal_source, + self.combo_signal_scope, + self.combo_signal_file, + self.combo_signal_method, + self.spin_peak_prominence, + self.spin_peak_height, + self.spin_peak_distance, + self.spin_peak_smooth, + self.combo_peak_baseline, + self.spin_peak_baseline_window, + self.spin_peak_rate_bin, + self.spin_peak_auc_window, + self.cb_peak_overlay, + ): + w.setEnabled(has_processed) + for w in ( + self.btn_compute_behavior, + self.btn_export_behavior_metrics, + self.btn_export_behavior_events, + self.combo_behavior_analysis, + self.spin_behavior_bin, + self.cb_behavior_aligned, + ): + w.setEnabled(has_behavior) + self._refresh_signal_file_combo() + + def _update_status_strip(self) -> None: + if not hasattr(self, "lbl_status"): + return + n_files = len(self._processed) + src_mode = "Group" if self.tab_sources.currentIndex() == 1 else "Single" + if self._processed: + proc0 = self._processed[0] + file_txt = os.path.basename(proc0.path) if proc0.path else "import" + self.lbl_plot_file.setText(f"File: {file_txt}") + fs_actual = float(proc0.fs_actual) if np.isfinite(proc0.fs_actual) else np.nan + fs_used = float(proc0.fs_used) if np.isfinite(proc0.fs_used) else np.nan + fs_txt = f"{fs_actual:.3g}->{fs_used:.3g}" if np.isfinite(fs_actual) and np.isfinite(fs_used) else "-" + output_label = proc0.output_label or "output" + else: + self.lbl_plot_file.setText("File: (none)") + fs_txt = "-" + output_label = "-" + align_src = self.combo_align.currentText() + if _is_doric_channel_align(align_src): + align_detail = self.combo_dio.currentText().strip() or "(none)" + align_mode = self.combo_dio_align.currentText() + else: + align_detail = self.combo_behavior_name.currentText().strip() or "(none)" + align_mode = self.combo_behavior_align.currentText() + ev_count = int(self._last_events.size) if isinstance(self._last_events, np.ndarray) else 0 + win_txt = f"{float(self.spin_pre.value()):.3g}/{float(self.spin_post.value()):.3g}s" + rs_txt = f"{float(self.spin_resample.value()):.3g}Hz" + status_msg = ( + f"Source: {src_mode} ({n_files}) | Output: {output_label} | Align: {align_src} [{align_detail}] {align_mode} | Events: {ev_count} | Window: {win_txt} | Resample: {rs_txt} | Fs: {fs_txt}" + ) + self.statusUpdate.emit(status_msg, 30000) def _update_event_filter_enabled(self) -> None: enabled = self.cb_filter_events.isChecked() - for w in (self.spin_event_start, self.spin_event_end, self.spin_dur_min, self.spin_dur_max): + for w in (self.spin_event_start, self.spin_event_end, self.spin_group_window, self.spin_dur_min, self.spin_dur_max): w.setEnabled(enabled) self._save_settings() @@ -996,21 +2015,41 @@ def _update_global_metrics_enabled(self) -> None: ): w.setEnabled(enabled) self._render_global_metrics() + self._apply_view_layout() self._save_settings() + def _refresh_section_scroll(self, key: str) -> None: + scroll = self._section_scroll_hosts.get(key) + if scroll is None: + return + try: + content = scroll.widget() + if content is not None: + if content.layout() is not None: + content.layout().activate() + content.updateGeometry() + scroll.updateGeometry() + scroll.viewport().update() + scroll.update() + except Exception: + pass + def _toggle_filter_panel(self, hide: bool) -> None: self.btn_hide_filters.setText("Show" if hide else "Hide") for w in ( self.lbl_event_start, self.lbl_event_end, + self.lbl_group_window, self.lbl_dur_min, self.lbl_dur_max, self.spin_event_start, self.spin_event_end, + self.spin_group_window, self.spin_dur_min, self.spin_dur_max, ): w.setVisible(not hide) + self._refresh_section_scroll("psth") def _toggle_metrics_panel(self, hide: bool) -> None: self.btn_hide_metrics.setText("Show" if hide else "Hide") @@ -1025,6 +2064,7 @@ def _toggle_metrics_panel(self, hide: bool) -> None: self.spin_metric_post1, ): w.setVisible(not hide) + self._refresh_section_scroll("psth") def _load_behavior_files(self) -> None: start_dir = self._settings.value("postprocess_last_dir", os.getcwd(), type=str) @@ -1107,7 +2147,7 @@ def _find_col(names: List[str]) -> Optional[int]: return None time_idx = header.index("time") if "time" in header else None - output_idx = _find_col(["dff", "z-score", "zscore", "z score", "output"]) + output_idx = _find_col(["dff", "z-score", "zscore", "z score", "output", "raw_signal", "raw_465"]) has_header = time_idx is not None and output_idx is not None raw_idx = _find_col(["raw", "raw_465", "signal", "signal_465"]) if has_header else None @@ -1168,6 +2208,8 @@ def _find_col(names: List[str]) -> Optional[int]: col = "z-score" elif col == "dff": col = "dFF" + elif col == "raw_signal": + col = "Raw signal (465)" output_label = f"Imported CSV ({col})" return ProcessedTrial( @@ -1249,12 +2291,20 @@ def _load_processed_h5(self, path: str) -> Optional[ProcessedTrial]: def _refresh_behavior_list(self) -> None: self.combo_behavior_name.clear() + if hasattr(self, "combo_behavior_analysis"): + self.combo_behavior_analysis.clear() if not self._behavior_sources: + self._update_data_availability() return - any_info = next(iter(self._behavior_sources.values())) - behaviors = sorted(list((any_info.get("behaviors") or {}).keys())) + behavior_names: set[str] = set() + for info in self._behavior_sources.values(): + behaviors = info.get("behaviors") or {} + behavior_names.update(str(k) for k in behaviors.keys()) + behaviors = sorted(list(behavior_names)) for name in behaviors: self.combo_behavior_name.addItem(name) + if hasattr(self, "combo_behavior_analysis"): + self.combo_behavior_analysis.addItem(name) self.combo_behavior_from.clear() self.combo_behavior_to.clear() for name in behaviors: @@ -1263,25 +2313,26 @@ def _refresh_behavior_list(self) -> None: # Update the lists with numbered items self._update_file_lists() + self._update_data_availability() + self._update_status_strip() def _update_file_lists(self) -> None: """Update the preprocessed files and behaviors lists with numbered entries.""" self.list_preprocessed.clear() for i, proc in enumerate(self._processed, 1): filename = os.path.splitext(os.path.basename(proc.path))[0] - # Remove _AIN01/_AIN02 suffix for matching - filename_clean = filename.replace('_AIN01', '').replace('_AIN02', '') + filename_clean = _strip_ain_suffix(filename) item = QtWidgets.QListWidgetItem(f"{i}. {filename_clean}") item.setData(QtCore.Qt.ItemDataRole.UserRole, id(proc)) self.list_preprocessed.addItem(item) self.list_behaviors.clear() for i, (stem, _) in enumerate(self._behavior_sources.items(), 1): - # Remove _AIN01/_AIN02 suffix for matching - stem_clean = stem.replace('_AIN01', '').replace('_AIN02', '') + stem_clean = _strip_ain_suffix(stem) item = QtWidgets.QListWidgetItem(f"{i}. {stem_clean}") item.setData(QtCore.Qt.ItemDataRole.UserRole, stem) self.list_behaviors.addItem(item) + self._refresh_signal_file_combo() def _sync_processed_order_from_list(self) -> None: new_order: List[ProcessedTrial] = [] @@ -1295,6 +2346,7 @@ def _sync_processed_order_from_list(self) -> None: if new_order and len(new_order) == len(self._processed): self._processed = new_order self._update_file_lists() + self._update_status_strip() def _sync_behavior_order_from_list(self) -> None: keys: List[str] = [] @@ -1306,6 +2358,7 @@ def _sync_behavior_order_from_list(self) -> None: if keys and len(keys) == len(self._behavior_sources): self._behavior_sources = {k: self._behavior_sources[k] for k in keys} self._update_file_lists() + self._update_status_strip() def _move_selected_up(self) -> None: """Move selected items up in the list.""" @@ -1362,12 +2415,12 @@ def _auto_match_files(self) -> None: proc_names = [] for proc in self._processed: filename = os.path.splitext(os.path.basename(proc.path))[0] - filename_clean = filename.replace('_AIN01', '').replace('_AIN02', '') + filename_clean = _strip_ain_suffix(filename) proc_names.append(filename_clean) beh_names = [] for stem in self._behavior_sources.keys(): - stem_clean = stem.replace('_AIN01', '').replace('_AIN02', '') + stem_clean = _strip_ain_suffix(stem) beh_names.append(stem_clean) # Simple auto-matching: sort both lists and try to match by position @@ -1393,9 +2446,9 @@ def _auto_match_files(self) -> None: # Reorder behavior sources to match processed files new_behavior_order = [] for proc in self._processed: - proc_clean = os.path.splitext(os.path.basename(proc.path))[0].replace('_AIN01', '').replace('_AIN02', '') + proc_clean = _strip_ain_suffix(os.path.splitext(os.path.basename(proc.path))[0]) for stem, data in self._behavior_sources.items(): - stem_clean = stem.replace('_AIN01', '').replace('_AIN02', '') + stem_clean = _strip_ain_suffix(stem) if stem_clean == proc_clean: new_behavior_order.append((stem, data)) break @@ -1407,6 +2460,7 @@ def _auto_match_files(self) -> None: self._behavior_sources = dict(new_behavior_order) self._update_file_lists() + self._update_status_strip() def _remove_selected_preprocessed(self) -> None: selected = self.list_preprocessed.selectedItems() @@ -1417,6 +2471,8 @@ def _remove_selected_preprocessed(self) -> None: if 0 <= row < len(self._processed): del self._processed[row] self._update_file_lists() + self._update_data_availability() + self._update_status_strip() def _remove_selected_behaviors(self) -> None: selected = self.list_behaviors.selectedItems() @@ -1430,6 +2486,8 @@ def _remove_selected_behaviors(self) -> None: if key in self._behavior_sources: del self._behavior_sources[key] self._refresh_behavior_list() + self._update_data_availability() + self._update_status_strip() # ---- PSTH compute ---- @@ -1437,9 +2495,9 @@ def _match_behavior_source(self, proc: ProcessedTrial) -> Optional[Dict[str, Any stem = os.path.splitext(os.path.basename(proc.path))[0] info = self._behavior_sources.get(stem, None) if info is None: - stem_clean = stem.replace('_AIN01', '').replace('_AIN02', '') + stem_clean = _strip_ain_suffix(stem) for key, val in self._behavior_sources.items(): - key_clean = key.replace('_AIN01', '').replace('_AIN02', '') + key_clean = _strip_ain_suffix(key) if key_clean == stem_clean: info = val break @@ -1456,15 +2514,40 @@ def _match_behavior_source(self, proc: ProcessedTrial) -> Optional[Dict[str, Any info = next(iter(self._behavior_sources.values())) return info + def _extract_behavior_events(self, info: Dict[str, Any], behavior_name: str) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + behaviors = info.get("behaviors") or {} + if behavior_name not in behaviors: + return np.array([], float), np.array([], float), np.array([], float) + kind = str(info.get("kind", _BEHAVIOR_PARSE_BINARY)) + if kind == _BEHAVIOR_PARSE_TIMESTAMPS: + on = np.asarray(behaviors[behavior_name], float) + on = on[np.isfinite(on)] + if on.size == 0: + return np.array([], float), np.array([], float), np.array([], float) + on = np.sort(np.unique(on)) + off = on.copy() + dur = np.full(on.shape, np.nan, dtype=float) + return on, off, dur + t = np.asarray(info.get("time", np.array([], float)), float) + if t.size == 0: + return np.array([], float), np.array([], float), np.array([], float) + return _extract_onsets_offsets(t, np.asarray(behaviors[behavior_name], float), threshold=0.5) + def _get_events_for_proc(self, proc: ProcessedTrial) -> Tuple[np.ndarray, np.ndarray]: align = self.combo_align.currentText() - if align.startswith("DIO"): + if _is_doric_channel_align(align): dio_name = self.combo_dio.currentText().strip() if not dio_name and proc.dio is None: return np.array([], float), np.array([], float) - if proc.dio is not None and proc.time is not None: + use_embedded = ( + proc.dio is not None + and proc.time is not None + and (not dio_name or dio_name == (proc.dio_name or "")) + ) + + if use_embedded: t = np.asarray(proc.time, float) x = np.asarray(proc.dio, float) else: @@ -1476,7 +2559,7 @@ def _get_events_for_proc(self, proc: ProcessedTrial) -> Tuple[np.ndarray, np.nda t, x = self._dio_cache[key] polarity = self.combo_dio_polarity.currentText() align_edge = self.combo_dio_align.currentText() - sig = np.asarray(x, float) + sig = (np.asarray(x, float) > 0.5).astype(float) if polarity.startswith("Event low"): sig = 1.0 - sig on, off, dur = _extract_onsets_offsets(t, sig, threshold=0.5) @@ -1488,9 +2571,8 @@ def _get_events_for_proc(self, proc: ProcessedTrial) -> Tuple[np.ndarray, np.nda info = self._match_behavior_source(proc) if not info: return np.array([], float), np.array([], float) - t = np.asarray(info.get("time", np.array([], float)), float) behaviors = info.get("behaviors") or {} - if t.size == 0 or not behaviors: + if not behaviors: return np.array([], float), np.array([], float) align_mode = self.combo_behavior_align.currentText() @@ -1499,8 +2581,8 @@ def _get_events_for_proc(self, proc: ProcessedTrial) -> Tuple[np.ndarray, np.nda beh_b = self.combo_behavior_to.currentText().strip() if beh_a not in behaviors or beh_b not in behaviors: return np.array([], float), np.array([], float) - on_a, off_a, _ = _extract_onsets_offsets(t, behaviors[beh_a], threshold=0.5) - on_b, _, dur_b = _extract_onsets_offsets(t, behaviors[beh_b], threshold=0.5) + on_a, off_a, _ = self._extract_behavior_events(info, beh_a) + on_b, _, dur_b = self._extract_behavior_events(info, beh_b) if on_a.size == 0 or on_b.size == 0: return np.array([], float), np.array([], float) gap = float(self.spin_transition_gap.value()) @@ -1520,13 +2602,52 @@ def _get_events_for_proc(self, proc: ProcessedTrial) -> Tuple[np.ndarray, np.nda beh = self.combo_behavior_name.currentText().strip() if not beh and behaviors: beh = next(iter(behaviors.keys())) - if beh not in behaviors: + on, off, dur = self._extract_behavior_events(info, beh) + if on.size == 0: return np.array([], float), np.array([], float) - on, off, dur = _extract_onsets_offsets(t, behaviors[beh], threshold=0.5) if align_mode.endswith("offset"): return off, dur return on, dur + def _group_close_events( + self, + times: np.ndarray, + durations: np.ndarray, + window_s: float, + ) -> Tuple[np.ndarray, np.ndarray]: + t = np.asarray(times, float) + d = np.asarray(durations, float) + if t.size < 2 or window_s <= 0: + return t, d + + grouped_t: List[float] = [] + grouped_d: List[float] = [] + + start = float(t[0]) + prev = float(t[0]) + d0 = float(d[0]) if d.size else np.nan + cluster_end = (start + max(0.0, d0)) if np.isfinite(d0) else np.nan + + for i in range(1, t.size): + ti = float(t[i]) + di = float(d[i]) if i < d.size else np.nan + if (ti - prev) <= window_s: + if np.isfinite(di): + end_i = ti + max(0.0, di) + cluster_end = end_i if not np.isfinite(cluster_end) else max(cluster_end, end_i) + prev = ti + continue + + grouped_t.append(start) + grouped_d.append(max(0.0, cluster_end - start) if np.isfinite(cluster_end) else np.nan) + start = ti + prev = ti + cluster_end = (ti + max(0.0, di)) if np.isfinite(di) else np.nan + + grouped_t.append(start) + grouped_d.append(max(0.0, cluster_end - start) if np.isfinite(cluster_end) else np.nan) + return np.asarray(grouped_t, float), np.asarray(grouped_d, float) + def _filter_events(self, times: np.ndarray, durations: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: if not self.cb_filter_events.isChecked(): return np.asarray(times, float), np.asarray(durations, float) @@ -1537,6 +2658,18 @@ def _filter_events(self, times: np.ndarray, durations: np.ndarray) -> Tuple[np.n if times.size == 0: return times, durations + finite = np.isfinite(times) + if not np.any(finite): + return np.array([], float), np.array([], float) + times = times[finite] + durations = durations[finite] + order = np.argsort(times) + times = times[order] + durations = durations[order] + + group_window_s = max(0.0, float(self.spin_group_window.value())) + times, durations = self._group_close_events(times, durations, group_window_s) + start_idx = int(self.spin_event_start.value()) end_idx = int(self.spin_event_end.value()) if start_idx < 1: @@ -1567,9 +2700,19 @@ def _update_trace_preview(self) -> None: if not self._processed: self.curve_trace.setData([], []) self.curve_behavior.setData([], []) + self.curve_peak_markers.setData([], []) for ln in self.event_lines: self.plot_trace.removeItem(ln) self.event_lines = [] + for lab in self._event_labels: + self.plot_trace.removeItem(lab) + self._event_labels = [] + for reg in self._event_regions: + self.plot_trace.removeItem(reg) + self._event_regions = [] + for ln in self._signal_peak_lines: + self.plot_trace.removeItem(ln) + self._signal_peak_lines = [] return proc = self._processed[0] @@ -1610,6 +2753,7 @@ def _update_trace_preview(self) -> None: reg = pg.LinearRegionItem(values=(t0, t1), brush=(200, 200, 200, 40), movable=False) self.plot_trace.addItem(reg) self._event_regions.append(reg) + self._refresh_signal_overlay() def _update_behavior_overlay(self, proc: ProcessedTrial) -> None: if not proc or proc.time is None: @@ -1622,29 +2766,684 @@ def _update_behavior_overlay(self, proc: ProcessedTrial) -> None: if not info: self.curve_behavior.setData([], []) return - t = np.asarray(info.get("time", np.array([], float)), float) behaviors = info.get("behaviors") or {} beh = self.combo_behavior_name.currentText().strip() if not beh and behaviors: beh = next(iter(behaviors.keys())) - if beh not in behaviors or t.size == 0: + if beh not in behaviors: self.curve_behavior.setData([], []) return - b = np.asarray(behaviors[beh], float) - # Resample to processed time for overlay t_proc = np.asarray(proc.time, float) if t_proc.size == 0: self.curve_behavior.setData([], []) return + kind = str(info.get("kind", _BEHAVIOR_PARSE_BINARY)) + if kind == _BEHAVIOR_PARSE_TIMESTAMPS: + events = np.asarray(behaviors[beh], float) + events = events[np.isfinite(events)] + if events.size == 0: + self.curve_behavior.setData([], []) + return + events = np.sort(np.unique(events)) + marker = np.zeros_like(t_proc, dtype=float) + for ev in events: + pos = int(np.searchsorted(t_proc, ev, side="left")) + if pos <= 0: + idx = 0 + elif pos >= t_proc.size: + idx = t_proc.size - 1 + else: + idx = pos if abs(float(t_proc[pos] - ev)) <= abs(float(t_proc[pos - 1] - ev)) else (pos - 1) + marker[idx] = 1.0 + self.curve_behavior.setData(t_proc, marker, connect="finite", skipFiniteCheck=True) + return + + t = np.asarray(info.get("time", np.array([], float)), float) + if t.size == 0: + self.curve_behavior.setData([], []) + return + b = np.asarray(behaviors[beh], float) b_interp = np.interp(t_proc, t, b) self.curve_behavior.setData(t_proc, b_interp, connect="finite", skipFiniteCheck=True) + def _resolve_signal_detection_targets(self) -> List[Tuple[str, np.ndarray, np.ndarray]]: + targets: List[Tuple[str, np.ndarray, np.ndarray]] = [] + source_mode = self.combo_signal_source.currentText() + if source_mode.startswith("Use PSTH input trace"): + if self._last_mat is None or self._last_tvec is None or self._last_mat.size == 0: + return [] + trace = np.nanmean(self._last_mat, axis=0) + targets.append(("psth_trace", np.asarray(self._last_tvec, float), np.asarray(trace, float))) + return targets + + if not self._processed: + return [] + + pooled = self.combo_signal_scope.currentText() == "Pooled" + if pooled: + for proc in self._processed: + if proc.time is None or proc.output is None: + continue + file_id = os.path.splitext(os.path.basename(proc.path))[0] if proc.path else "import" + targets.append((file_id, np.asarray(proc.time, float), np.asarray(proc.output, float))) + return targets + + if self.combo_signal_file.count() == 0: + return [] + idx = self.combo_signal_file.currentIndex() + idx = max(0, min(idx, len(self._processed) - 1)) + proc = self._processed[idx] + if proc.time is None or proc.output is None: + return [] + file_id = os.path.splitext(os.path.basename(proc.path))[0] if proc.path else "import" + targets.append((file_id, np.asarray(proc.time, float), np.asarray(proc.output, float))) + return targets + + def _preprocess_signal_for_peaks(self, t: np.ndarray, y: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + t = np.asarray(t, float) + y = np.asarray(y, float) + m = np.isfinite(t) & np.isfinite(y) + t = t[m] + y = y[m] + if t.size < 3: + return np.array([], float), np.array([], float) + + dt = float(np.nanmedian(np.diff(t))) if t.size > 2 else np.nan + if not np.isfinite(dt) or dt <= 0: + dt = 1.0 + + baseline_mode = self.combo_peak_baseline.currentText() + baseline_window_sec = max(0.1, float(self.spin_peak_baseline_window.value())) + win = max(3, int(round(baseline_window_sec / dt))) + if win % 2 == 0: + win += 1 + + y_proc = y.copy() + if baseline_mode.endswith("rolling median"): + try: + from scipy.ndimage import median_filter + y_proc = y - median_filter(y, size=win, mode="nearest") + except Exception: + pass + elif baseline_mode.endswith("rolling mean"): + try: + from scipy.ndimage import uniform_filter1d + y_proc = y - uniform_filter1d(y, size=win, mode="nearest") + except Exception: + pass + + sigma_sec = max(0.0, float(self.spin_peak_smooth.value())) + if sigma_sec > 0: + try: + from scipy.ndimage import gaussian_filter1d + sigma_samp = sigma_sec / dt + y_proc = gaussian_filter1d(y_proc, sigma=sigma_samp, mode="nearest") + except Exception: + pass + + return t, y_proc + + def _refresh_signal_overlay(self) -> None: + for ln in self._signal_peak_lines: + try: + self.plot_trace.removeItem(ln) + except Exception: + pass + self._signal_peak_lines = [] + self.curve_peak_markers.setData([], []) + + if not self.cb_peak_overlay.isChecked(): + return + if not self.last_signal_events or not self._processed: + return + + current_file = os.path.splitext(os.path.basename(self._processed[0].path))[0] if self._processed[0].path else "import" + file_ids = self.last_signal_events.get("file_ids", []) + times = np.asarray(self.last_signal_events.get("peak_times_sec", np.array([], float)), float) + heights = np.asarray(self.last_signal_events.get("peak_heights", np.array([], float)), float) + if times.size == 0 or heights.size == 0: + return + if file_ids and len(file_ids) == times.size: + mask = np.asarray([fid == current_file or fid == "psth_trace" for fid in file_ids], bool) + times = times[mask] + heights = heights[mask] + if times.size == 0: + return + self.curve_peak_markers.setData(times, heights, connect="finite", skipFiniteCheck=True) + for t0 in times[:600]: + ln = pg.InfiniteLine( + pos=float(t0), + angle=90, + pen=pg.mkPen((240, 120, 80), width=1.0, style=QtCore.Qt.PenStyle.DotLine), + ) + self.plot_trace.addItem(ln) + self._signal_peak_lines.append(ln) + + def _detect_signal_events(self) -> None: + self.last_signal_events = None + targets = self._resolve_signal_detection_targets() + if not targets: + self.statusUpdate.emit("No signal available for peak detection.", 5000) + self.tbl_signal_metrics.setRowCount(0) + self._refresh_signal_overlay() + return + + all_times: List[float] = [] + all_idx: List[int] = [] + all_heights: List[float] = [] + all_proms: List[float] = [] + all_widths_sec: List[float] = [] + all_auc: List[float] = [] + all_file_ids: List[str] = [] + + for file_id, t_raw, y_raw in targets: + t, y = self._preprocess_signal_for_peaks(t_raw, y_raw) + if t.size < 5: + continue + dt = float(np.nanmedian(np.diff(t))) + if not np.isfinite(dt) or dt <= 0: + continue + + prominence = max(0.0, float(self.spin_peak_prominence.value())) + min_height = float(self.spin_peak_height.value()) + min_distance_sec = max(0.0, float(self.spin_peak_distance.value())) + min_dist_samples = max(1, int(round(min_distance_sec / dt))) if min_distance_sec > 0 else None + + kwargs: Dict[str, object] = {} + if prominence > 0: + kwargs["prominence"] = prominence + if min_height > 0: + kwargs["height"] = min_height + if min_dist_samples is not None: + kwargs["distance"] = min_dist_samples + + try: + from scipy.signal import find_peaks, peak_widths + peaks, props = find_peaks(y, **kwargs) + except Exception as exc: + self.statusUpdate.emit(f"Peak detection failed: {exc}", 5000) + self.tbl_signal_metrics.setRowCount(0) + self._refresh_signal_overlay() + return + + if peaks.size == 0: + continue + + p_heights = y[peaks] + p_proms = np.asarray(props.get("prominences", np.full(peaks.size, np.nan)), float) + try: + widths_samp = peak_widths(y, peaks, rel_height=0.5)[0] + widths_sec = np.asarray(widths_samp, float) * dt + except Exception: + widths_sec = np.full(peaks.size, np.nan, float) + + auc_half_win = max(0.0, float(self.spin_peak_auc_window.value())) + auc_samp = int(round(auc_half_win / dt)) + auc_vals: List[float] = [] + for pk in peaks: + if auc_samp <= 0: + auc_vals.append(np.nan) + continue + i0 = max(0, int(pk - auc_samp)) + i1 = min(y.size, int(pk + auc_samp + 1)) + if i1 - i0 < 2: + auc_vals.append(np.nan) + continue + auc_vals.append(float(np.trapz(y[i0:i1], t[i0:i1]))) + + all_times.extend(t[peaks].tolist()) + all_idx.extend(peaks.tolist()) + all_heights.extend(np.asarray(p_heights, float).tolist()) + all_proms.extend(np.asarray(p_proms, float).tolist()) + all_widths_sec.extend(np.asarray(widths_sec, float).tolist()) + all_auc.extend(np.asarray(auc_vals, float).tolist()) + all_file_ids.extend([file_id] * peaks.size) + + if not all_times: + self.statusUpdate.emit("No peaks detected with current settings.", 5000) + self.tbl_signal_metrics.setRowCount(0) + self._refresh_signal_overlay() + return + + peak_times = np.asarray(all_times, float) + peak_idx = np.asarray(all_idx, int) + peak_heights = np.asarray(all_heights, float) + peak_proms = np.asarray(all_proms, float) + peak_widths_sec = np.asarray(all_widths_sec, float) + peak_auc = np.asarray(all_auc, float) + + sort_idx = np.argsort(peak_times) + peak_times = peak_times[sort_idx] + peak_idx = peak_idx[sort_idx] + peak_heights = peak_heights[sort_idx] + peak_proms = peak_proms[sort_idx] + peak_widths_sec = peak_widths_sec[sort_idx] + peak_auc = peak_auc[sort_idx] + all_file_ids = [all_file_ids[i] for i in sort_idx] + + ipi = np.diff(peak_times) if peak_times.size >= 2 else np.array([], float) + freq_per_min = float(peak_times.size) / max((float(np.nanmax(peak_times) - np.nanmin(peak_times)) / 60.0), 1e-12) + metrics = { + "number_of_peaks": float(peak_times.size), + "mean_amplitude": float(np.nanmean(peak_heights)), + "median_amplitude": float(np.nanmedian(peak_heights)), + "amplitude_std": float(np.nanstd(peak_heights)), + "mean_prominence": float(np.nanmean(peak_proms)), + "mean_width_half_prom_s": float(np.nanmean(peak_widths_sec)) if peak_widths_sec.size else np.nan, + "peak_frequency_per_min": freq_per_min, + "mean_inter_peak_interval_s": float(np.nanmean(ipi)) if ipi.size else np.nan, + "mean_auc": float(np.nanmean(peak_auc)) if np.any(np.isfinite(peak_auc)) else np.nan, + } + + self.last_signal_events = { + "peak_times_sec": peak_times, + "peak_indices": peak_idx, + "peak_heights": peak_heights, + "peak_prominences": peak_proms, + "peak_widths_sec": peak_widths_sec, + "peak_auc": peak_auc, + "file_ids": all_file_ids, + "derived_metrics": metrics, + "params": { + "method": self.combo_signal_method.currentText(), + "prominence": float(self.spin_peak_prominence.value()), + "min_height": float(self.spin_peak_height.value()), + "min_distance_sec": float(self.spin_peak_distance.value()), + "smooth_sigma_sec": float(self.spin_peak_smooth.value()), + "baseline_mode": self.combo_peak_baseline.currentText(), + "baseline_window_sec": float(self.spin_peak_baseline_window.value()), + "rate_bin_sec": float(self.spin_peak_rate_bin.value()), + "auc_half_window_sec": float(self.spin_peak_auc_window.value()), + }, + } + + self.statusUpdate.emit(f"Detected {peak_times.size} peak(s).", 5000) + self._refresh_signal_overlay() + self._render_signal_event_plots() + self._update_signal_metrics_table() + self._save_settings() + self._update_status_strip() + + def _render_signal_event_plots(self) -> None: + for pw in (self.plot_peak_amp, self.plot_peak_ibi, self.plot_peak_rate): + pw.clear() + if not self.last_signal_events: + return + peak_times = np.asarray(self.last_signal_events.get("peak_times_sec", np.array([], float)), float) + peak_heights = np.asarray(self.last_signal_events.get("peak_heights", np.array([], float)), float) + if peak_times.size == 0 or peak_heights.size == 0: + return + + def _bar_hist(plot: pg.PlotWidget, values: np.ndarray, color: Tuple[int, int, int]) -> None: + vals = np.asarray(values, float) + vals = vals[np.isfinite(vals)] + if vals.size == 0: + return + bins = min(40, max(8, int(np.sqrt(vals.size)))) + hist, edges = np.histogram(vals, bins=bins) + bars = pg.BarGraphItem(x=edges[:-1], height=hist, width=np.diff(edges), brush=color) + plot.addItem(bars) + + _bar_hist(self.plot_peak_amp, peak_heights, (240, 120, 80)) + ipi = np.diff(np.sort(peak_times)) + _bar_hist(self.plot_peak_ibi, ipi, (120, 180, 220)) + + bin_sec = max(0.5, float(self.spin_peak_rate_bin.value())) + t0 = float(np.nanmin(peak_times)) + t1 = float(np.nanmax(peak_times)) + if t1 > t0: + edges = np.arange(t0, t1 + bin_sec, bin_sec) + hist, edges = np.histogram(peak_times, bins=edges) + rate = hist / (bin_sec / 60.0) + bars = pg.BarGraphItem(x=edges[:-1], height=rate, width=np.diff(edges), brush=(180, 180, 120)) + self.plot_peak_rate.addItem(bars) + + def _update_signal_metrics_table(self) -> None: + self.tbl_signal_metrics.setRowCount(0) + if not self.last_signal_events: + return + metrics = self.last_signal_events.get("derived_metrics", {}) or {} + rows = [ + ("number of peaks", metrics.get("number_of_peaks", np.nan)), + ("mean amplitude", metrics.get("mean_amplitude", np.nan)), + ("median amplitude", metrics.get("median_amplitude", np.nan)), + ("amplitude std", metrics.get("amplitude_std", np.nan)), + ("mean prominence", metrics.get("mean_prominence", np.nan)), + ("mean width at half prom (s)", metrics.get("mean_width_half_prom_s", np.nan)), + ("peak frequency (per min)", metrics.get("peak_frequency_per_min", np.nan)), + ("mean inter-peak interval (s)", metrics.get("mean_inter_peak_interval_s", np.nan)), + ("mean AUC", metrics.get("mean_auc", np.nan)), + ] + for key, value in rows: + r = self.tbl_signal_metrics.rowCount() + self.tbl_signal_metrics.insertRow(r) + self.tbl_signal_metrics.setItem(r, 0, QtWidgets.QTableWidgetItem(str(key))) + if isinstance(value, (int, float)) and np.isfinite(value): + txt = f"{float(value):.6g}" + else: + txt = "nan" + self.tbl_signal_metrics.setItem(r, 1, QtWidgets.QTableWidgetItem(txt)) + + def _export_signal_events_csv(self) -> None: + if not self.last_signal_events: + return + start_dir = self._export_start_dir() + out_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "Select export folder", start_dir) + if not out_dir: + return + self._remember_export_dir(out_dir) + peak_times = np.asarray(self.last_signal_events.get("peak_times_sec", np.array([], float)), float) + peak_heights = np.asarray(self.last_signal_events.get("peak_heights", np.array([], float)), float) + peak_proms = np.asarray(self.last_signal_events.get("peak_prominences", np.array([], float)), float) + peak_widths = np.asarray(self.last_signal_events.get("peak_widths_sec", np.array([], float)), float) + file_ids = self.last_signal_events.get("file_ids", []) + if peak_times.size == 0: + return + prefix = "signal_events" + if self._processed: + prefix = os.path.splitext(os.path.basename(self._processed[0].path))[0] + out_path = os.path.join(out_dir, f"{prefix}_peaks.csv") + import csv + with open(out_path, "w", newline="") as f: + w = csv.writer(f) + w.writerow(["peak_time_sec", "height", "prominence", "width_sec", "file_id"]) + for i in range(peak_times.size): + fid = file_ids[i] if isinstance(file_ids, list) and i < len(file_ids) else "" + w.writerow( + [ + float(peak_times[i]), + float(peak_heights[i]) if i < peak_heights.size else np.nan, + float(peak_proms[i]) if i < peak_proms.size else np.nan, + float(peak_widths[i]) if i < peak_widths.size else np.nan, + fid, + ] + ) + + def _compute_behavior_analysis(self) -> None: + self.last_behavior_analysis = None + self.tbl_behavior_metrics.setRowCount(0) + self.lbl_behavior_summary.setText("Group metrics: -") + for pw in ( + self.plot_behavior_raster, + self.plot_behavior_rate, + self.plot_behavior_duration, + self.plot_behavior_starts, + ): + pw.clear() + + if not self._behavior_sources: + self.statusUpdate.emit("No behavior files loaded.", 5000) + return + + behavior_name = self.combo_behavior_analysis.currentText().strip() + if not behavior_name: + self.statusUpdate.emit("Select a behavior to analyze.", 5000) + return + + per_file_events: List[Dict[str, object]] = [] + per_file_metrics: List[Dict[str, float]] = [] + all_durations: List[float] = [] + all_starts: List[float] = [] + + if self._processed: + iter_rows: List[Tuple[str, Dict[str, Any], int]] = [] + for idx, proc in enumerate(self._processed): + info = self._match_behavior_source(proc) + if not info: + continue + file_id = os.path.splitext(os.path.basename(proc.path))[0] if proc.path else f"file_{idx + 1}" + iter_rows.append((file_id, info, idx)) + else: + iter_rows = [(stem, info, idx) for idx, (stem, info) in enumerate(self._behavior_sources.items())] + + for file_id, info, idx in iter_rows: + behaviors = info.get("behaviors") or {} + if behavior_name not in behaviors: + continue + kind = str(info.get("kind", _BEHAVIOR_PARSE_BINARY)) + on, off, dur = self._extract_behavior_events(info, behavior_name) + if on.size == 0: + continue + if kind == _BEHAVIOR_PARSE_BINARY: + t = np.asarray(info.get("time", np.array([], float)), float) + session_dur = float(t[-1] - t[0]) if t.size > 1 else 0.0 + total_time = float(np.nansum(dur)) + frac_time = total_time / session_dur if session_dur > 0 else np.nan + else: + session_dur = np.nan + if self._processed and 0 <= idx < len(self._processed): + t_proc = np.asarray(self._processed[idx].time, float) if self._processed[idx].time is not None else np.array([], float) + if t_proc.size > 1: + session_dur = float(t_proc[-1] - t_proc[0]) + if (not np.isfinite(session_dur) or session_dur <= 0) and on.size > 1: + session_dur = float(np.nanmax(on) - np.nanmin(on)) + total_time = np.nan + frac_time = np.nan + rate_per_min = float(on.size) / (session_dur / 60.0) if np.isfinite(session_dur) and session_dur > 0 else np.nan + finite_dur = dur[np.isfinite(dur)] + + metric_row = { + "file_id": file_id, + "event_count": float(on.size), + "total_time": total_time, + "mean_duration": float(np.nanmean(finite_dur)) if finite_dur.size else np.nan, + "median_duration": float(np.nanmedian(finite_dur)) if finite_dur.size else np.nan, + "std_duration": float(np.nanstd(finite_dur)) if finite_dur.size else np.nan, + "rate_per_min": rate_per_min, + "fraction_time": frac_time, + } + per_file_metrics.append(metric_row) + all_durations.extend(np.asarray(dur, float).tolist()) + all_starts.extend(np.asarray(on, float).tolist()) + per_file_events.append( + { + "file_id": file_id, + "start_sec": np.asarray(on, float), + "end_sec": np.asarray(off, float), + "duration_sec": np.asarray(dur, float), + "row_index": idx + 1, + } + ) + + if not per_file_metrics: + self.statusUpdate.emit("No behavior events found.", 5000) + return + + def _mstd(key: str) -> Tuple[float, float]: + vals = np.asarray([r.get(key, np.nan) for r in per_file_metrics], float) + vals = vals[np.isfinite(vals)] + if vals.size == 0: + return np.nan, np.nan + return float(np.nanmean(vals)), float(np.nanstd(vals)) + + gm_count, gs_count = _mstd("event_count") + gm_total, gs_total = _mstd("total_time") + gm_mean, gs_mean = _mstd("mean_duration") + gm_rate, gs_rate = _mstd("rate_per_min") + gm_frac, gs_frac = _mstd("fraction_time") + group_metrics = { + "event_count_mean": gm_count, + "event_count_std": gs_count, + "total_time_mean": gm_total, + "total_time_std": gs_total, + "mean_duration_mean": gm_mean, + "mean_duration_std": gs_mean, + "rate_per_min_mean": gm_rate, + "rate_per_min_std": gs_rate, + "fraction_time_mean": gm_frac, + "fraction_time_std": gs_frac, + } + + self.last_behavior_analysis = { + "behavior_name": behavior_name, + "per_file_events": per_file_events, + "per_file_metrics": per_file_metrics, + "group_metrics": group_metrics, + "params": { + "bin_sec": float(self.spin_behavior_bin.value()), + "aligned_view": bool(self.cb_behavior_aligned.isChecked()), + }, + } + self.statusUpdate.emit(f"Analyzed {len(per_file_metrics)} file(s).", 5000) + self._render_behavior_analysis_outputs() + self._save_settings() + + def _render_behavior_analysis_outputs(self) -> None: + self.tbl_behavior_metrics.setRowCount(0) + if not self.last_behavior_analysis: + return + per_file_metrics = self.last_behavior_analysis.get("per_file_metrics", []) or [] + for row in per_file_metrics: + r = self.tbl_behavior_metrics.rowCount() + self.tbl_behavior_metrics.insertRow(r) + values = [ + row.get("file_id", ""), + row.get("event_count", np.nan), + row.get("total_time", np.nan), + row.get("mean_duration", np.nan), + row.get("median_duration", np.nan), + row.get("std_duration", np.nan), + row.get("rate_per_min", np.nan), + row.get("fraction_time", np.nan), + ] + for c, v in enumerate(values): + if isinstance(v, (int, float)) and np.isfinite(v): + txt = f"{float(v):.6g}" + else: + txt = str(v) + self.tbl_behavior_metrics.setItem(r, c, QtWidgets.QTableWidgetItem(txt)) + + gm = self.last_behavior_analysis.get("group_metrics", {}) or {} + self.lbl_behavior_summary.setText( + "Group metrics: " + f"count={gm.get('event_count_mean', np.nan):.4g}+-{gm.get('event_count_std', np.nan):.3g} | " + f"rate={gm.get('rate_per_min_mean', np.nan):.4g}+-{gm.get('rate_per_min_std', np.nan):.3g} per min | " + f"frac={gm.get('fraction_time_mean', np.nan):.4g}+-{gm.get('fraction_time_std', np.nan):.3g}" + ) + + for pw in ( + self.plot_behavior_raster, + self.plot_behavior_rate, + self.plot_behavior_duration, + self.plot_behavior_starts, + ): + pw.clear() + + per_file_events = self.last_behavior_analysis.get("per_file_events", []) or [] + all_starts: List[float] = [] + all_durations: List[float] = [] + for ev_row in per_file_events: + starts = np.asarray(ev_row.get("start_sec", np.array([], float)), float) + ends = np.asarray(ev_row.get("end_sec", np.array([], float)), float) + row_idx = float(ev_row.get("row_index", 0)) + if starts.size != ends.size: + continue + all_starts.extend(starts.tolist()) + all_durations.extend(np.asarray(ev_row.get("duration_sec", np.array([], float)), float).tolist()) + for s, e in zip(starts, ends): + s_f = float(s) + e_f = float(e) + if np.isfinite(e_f) and e_f > s_f: + self.plot_behavior_raster.plot([s_f, e_f], [row_idx, row_idx], pen=pg.mkPen((220, 180, 90), width=2.0)) + else: + self.plot_behavior_raster.plot( + [s_f], + [row_idx], + pen=None, + symbol="o", + symbolSize=5, + symbolBrush=(220, 180, 90), + ) + + starts_arr = np.asarray(all_starts, float) + dur_arr = np.asarray(all_durations, float) + starts_arr = starts_arr[np.isfinite(starts_arr)] + dur_arr = dur_arr[np.isfinite(dur_arr)] + + if starts_arr.size: + bin_sec = max(0.5, float(self.spin_behavior_bin.value())) + t0 = float(np.nanmin(starts_arr)) + t1 = float(np.nanmax(starts_arr)) + if t1 > t0: + edges = np.arange(t0, t1 + bin_sec, bin_sec) + hist, edges = np.histogram(starts_arr, bins=edges) + rate = hist / (bin_sec / 60.0) + bars = pg.BarGraphItem(x=edges[:-1], height=rate, width=np.diff(edges), brush=(180, 200, 120)) + self.plot_behavior_rate.addItem(bars) + + bins = min(40, max(8, int(np.sqrt(starts_arr.size)))) + hist, edges = np.histogram(starts_arr, bins=bins) + bars = pg.BarGraphItem(x=edges[:-1], height=hist, width=np.diff(edges), brush=(140, 190, 220)) + self.plot_behavior_starts.addItem(bars) + + if dur_arr.size: + bins = min(40, max(8, int(np.sqrt(dur_arr.size)))) + hist, edges = np.histogram(dur_arr, bins=bins) + bars = pg.BarGraphItem(x=edges[:-1], height=hist, width=np.diff(edges), brush=(220, 150, 110)) + self.plot_behavior_duration.addItem(bars) + + def _export_behavior_metrics_csv(self) -> None: + if not self.last_behavior_analysis: + return + start_dir = self._export_start_dir() + out_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "Select export folder", start_dir) + if not out_dir: + return + self._remember_export_dir(out_dir) + behavior_name = str(self.last_behavior_analysis.get("behavior_name", "behavior")) + safe_beh = re.sub(r"[^A-Za-z0-9_\\-]+", "_", behavior_name).strip("_") or "behavior" + out_path = os.path.join(out_dir, f"behavior_metrics_{safe_beh}.csv") + import csv + with open(out_path, "w", newline="") as f: + w = csv.writer(f) + w.writerow(["file_id", "behavior_name", "event_count", "total_time", "mean_duration", "median_duration", "rate_per_min", "fraction_time"]) + for row in self.last_behavior_analysis.get("per_file_metrics", []) or []: + w.writerow( + [ + row.get("file_id", ""), + behavior_name, + row.get("event_count", np.nan), + row.get("total_time", np.nan), + row.get("mean_duration", np.nan), + row.get("median_duration", np.nan), + row.get("rate_per_min", np.nan), + row.get("fraction_time", np.nan), + ] + ) + + def _export_behavior_events_csv(self) -> None: + if not self.last_behavior_analysis: + return + start_dir = self._export_start_dir() + out_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "Select export folder", start_dir) + if not out_dir: + return + self._remember_export_dir(out_dir) + behavior_name = str(self.last_behavior_analysis.get("behavior_name", "behavior")) + safe_beh = re.sub(r"[^A-Za-z0-9_\\-]+", "_", behavior_name).strip("_") or "behavior" + out_path = os.path.join(out_dir, f"behavior_events_{safe_beh}.csv") + import csv + with open(out_path, "w", newline="") as f: + w = csv.writer(f) + w.writerow(["start_sec", "end_sec", "duration_sec", "file_id", "behavior_name"]) + for ev_row in self.last_behavior_analysis.get("per_file_events", []) or []: + file_id = ev_row.get("file_id", "") + starts = np.asarray(ev_row.get("start_sec", np.array([], float)), float) + ends = np.asarray(ev_row.get("end_sec", np.array([], float)), float) + durs = np.asarray(ev_row.get("duration_sec", np.array([], float)), float) + n = min(starts.size, ends.size, durs.size) + for i in range(n): + w.writerow([float(starts[i]), float(ends[i]), float(durs[i]), file_id, behavior_name]) + def _compute_psth(self) -> None: if not self._processed: - self.lbl_log.setText("No processed data loaded.") + self.statusUpdate.emit("No processed data loaded.", 5000) self._last_global_metrics = None + self._last_events = np.array([], float) + self._last_event_rows = [] if hasattr(self, "lbl_global_metrics"): self.lbl_global_metrics.setText("Global metrics: -") + self._update_status_strip() return # Update trace preview each time (also updates event lines) @@ -1665,6 +3464,8 @@ def _compute_psth(self) -> None: mats: List[np.ndarray] = [] animal_rows: List[np.ndarray] = [] all_dur = [] + all_events: List[float] = [] + event_rows: List[Dict[str, object]] = [] total_events = 0 tvec = None @@ -1673,6 +3474,20 @@ def _compute_psth(self) -> None: ev, dur = self._filter_events(ev, dur) if ev.size == 0: continue + file_id = os.path.splitext(os.path.basename(proc.path))[0] if proc.path else "import" + all_events.extend(np.asarray(ev, float).tolist()) + if dur is None or len(dur) != ev.size: + dur_row = np.full(ev.shape, np.nan, dtype=float) + else: + dur_row = np.asarray(dur, float) + for i in range(ev.size): + event_rows.append( + { + "file_id": file_id, + "event_time_sec": float(ev[i]), + "duration_sec": float(dur_row[i]) if i < dur_row.size else np.nan, + } + ) tvec, mat = _compute_psth_matrix(proc.time, proc.output, ev, window, baseline, res_hz, smooth_sigma_s=smooth) if mat.size == 0: continue @@ -1688,13 +3503,21 @@ def _compute_psth(self) -> None: self._render_global_metrics() if not mats or tvec is None: - self.lbl_log.setText("No events found for the current alignment.") + self.statusUpdate.emit("No events found for the current alignment.", 5000) + self._last_events = np.array([], float) + self._last_event_rows = [] + self._last_durations = np.array([], float) + self._update_status_strip() return mat_events = np.vstack(mats) if group_mode: if not animal_rows: self.lbl_log.setText("No events found for the current alignment.") + self._last_events = np.array([], float) + self._last_event_rows = [] + self._last_durations = np.array([], float) + self._update_status_strip() return mat_display = np.vstack(animal_rows) else: @@ -1707,16 +3530,19 @@ def _compute_psth(self) -> None: self._render_metrics(mat_display, tvec) self._last_mat = mat_display self._last_tvec = tvec - self._last_events = None + self._last_events = np.asarray(all_events, float) if all_events else np.array([], float) self._last_durations = dur_all + self._last_event_rows = event_rows if group_mode: - self.lbl_log.setText(f"Computed PSTH for {total_events} event(s) across {mat_display.shape[0]} animal(s).") + self.statusUpdate.emit(f"Computed PSTH for {total_events} event(s) across {mat_display.shape[0]} animal(s).", 5000) else: - self.lbl_log.setText(f"Computed PSTH for {total_events} event(s).") + self.statusUpdate.emit(f"Computed PSTH for {total_events} event(s).", 5000) self._update_metric_regions() + self._update_status_strip() self._save_settings() except Exception as e: - self.lbl_log.setText(f"Post-processing error: {e}") + self.statusUpdate.emit(f"Post-processing error: {e}", 5000) + self._update_status_strip() def _render_heatmap(self, mat: np.ndarray, tvec: np.ndarray) -> None: if mat.size == 0: @@ -2035,6 +3861,7 @@ def _collect_settings(self) -> Dict[str, object]: "dio_channel": self.combo_dio.currentText(), "dio_polarity": self.combo_dio_polarity.currentText(), "dio_align": self.combo_dio_align.currentText(), + "behavior_file_type": self.combo_behavior_file_type.currentText(), "behavior": self.combo_behavior_name.currentText(), "behavior_align": self.combo_behavior_align.currentText(), "behavior_from": self.combo_behavior_from.currentText(), @@ -2049,6 +3876,7 @@ def _collect_settings(self) -> Dict[str, object]: "filter_enabled": self.cb_filter_events.isChecked(), "event_start": int(self.spin_event_start.value()), "event_end": int(self.spin_event_end.value()), + "group_window_s": float(self.spin_group_window.value()), "dur_min": float(self.spin_dur_min.value()), "dur_max": float(self.spin_dur_max.value()), "metrics_enabled": self.cb_metrics.isChecked(), @@ -2062,6 +3890,23 @@ def _collect_settings(self) -> Dict[str, object]: "global_end": float(self.spin_global_end.value()), "global_amp": self.cb_global_amp.isChecked(), "global_freq": self.cb_global_freq.isChecked(), + "view_layout": self.combo_view_layout.currentText(), + "signal_source": self.combo_signal_source.currentText(), + "signal_scope": self.combo_signal_scope.currentText(), + "signal_file": self.combo_signal_file.currentText(), + "signal_method": self.combo_signal_method.currentText(), + "signal_prominence": float(self.spin_peak_prominence.value()), + "signal_height": float(self.spin_peak_height.value()), + "signal_distance": float(self.spin_peak_distance.value()), + "signal_smooth": float(self.spin_peak_smooth.value()), + "signal_baseline": self.combo_peak_baseline.currentText(), + "signal_baseline_window": float(self.spin_peak_baseline_window.value()), + "signal_rate_bin": float(self.spin_peak_rate_bin.value()), + "signal_auc_window": float(self.spin_peak_auc_window.value()), + "signal_overlay": self.cb_peak_overlay.isChecked(), + "behavior_analysis_name": self.combo_behavior_analysis.currentText(), + "behavior_analysis_bin": float(self.spin_behavior_bin.value()), + "behavior_analysis_aligned": self.cb_behavior_aligned.isChecked(), "style": dict(self._style), } @@ -2069,6 +3914,8 @@ def _apply_settings(self, data: Dict[str, object]) -> None: def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: if val is None: return + if combo is self.combo_align and str(val) == "DIO (from Doric)": + val = "Analog/Digital channel (from Doric)" idx = combo.findText(str(val)) if idx >= 0: combo.setCurrentIndex(idx) @@ -2077,6 +3924,7 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: _set_combo(self.combo_dio, data.get("dio_channel")) _set_combo(self.combo_dio_polarity, data.get("dio_polarity")) _set_combo(self.combo_dio_align, data.get("dio_align")) + _set_combo(self.combo_behavior_file_type, data.get("behavior_file_type")) _set_combo(self.combo_behavior_name, data.get("behavior")) _set_combo(self.combo_behavior_align, data.get("behavior_align")) _set_combo(self.combo_behavior_from, data.get("behavior_from")) @@ -2100,6 +3948,8 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: self.spin_event_start.setValue(int(data["event_start"])) if "event_end" in data: self.spin_event_end.setValue(int(data["event_end"])) + if "group_window_s" in data: + self.spin_group_window.setValue(float(data["group_window_s"])) if "dur_min" in data: self.spin_dur_min.setValue(float(data["dur_min"])) if "dur_max" in data: @@ -2123,6 +3973,34 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: self.cb_global_amp.setChecked(bool(data["global_amp"])) if "global_freq" in data: self.cb_global_freq.setChecked(bool(data["global_freq"])) + _set_combo(self.combo_view_layout, data.get("view_layout")) + _set_combo(self.combo_signal_source, data.get("signal_source")) + _set_combo(self.combo_signal_scope, data.get("signal_scope")) + self._refresh_signal_file_combo() + _set_combo(self.combo_signal_file, data.get("signal_file")) + _set_combo(self.combo_signal_method, data.get("signal_method")) + if "signal_prominence" in data: + self.spin_peak_prominence.setValue(float(data["signal_prominence"])) + if "signal_height" in data: + self.spin_peak_height.setValue(float(data["signal_height"])) + if "signal_distance" in data: + self.spin_peak_distance.setValue(float(data["signal_distance"])) + if "signal_smooth" in data: + self.spin_peak_smooth.setValue(float(data["signal_smooth"])) + _set_combo(self.combo_peak_baseline, data.get("signal_baseline")) + if "signal_baseline_window" in data: + self.spin_peak_baseline_window.setValue(float(data["signal_baseline_window"])) + if "signal_rate_bin" in data: + self.spin_peak_rate_bin.setValue(float(data["signal_rate_bin"])) + if "signal_auc_window" in data: + self.spin_peak_auc_window.setValue(float(data["signal_auc_window"])) + if "signal_overlay" in data: + self.cb_peak_overlay.setChecked(bool(data["signal_overlay"])) + _set_combo(self.combo_behavior_analysis, data.get("behavior_analysis_name")) + if "behavior_analysis_bin" in data: + self.spin_behavior_bin.setValue(float(data["behavior_analysis_bin"])) + if "behavior_analysis_aligned" in data: + self.cb_behavior_aligned.setChecked(bool(data["behavior_analysis_aligned"])) style = data.get("style") if isinstance(style, dict): self._style.update(style) @@ -2133,6 +4011,10 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: self._update_metrics_enabled() self._update_global_metrics_enabled() self._update_metric_regions() + self._apply_view_layout() + self._refresh_signal_file_combo() + self._update_data_availability() + self._update_status_strip() def _save_settings(self) -> None: try: @@ -2140,6 +4022,11 @@ def _save_settings(self) -> None: self._settings.setValue("postprocess_json", json.dumps(data)) except Exception: pass + self._save_panel_layout_state() + try: + self._settings.sync() + except Exception: + pass def _restore_settings(self) -> None: try: @@ -2213,8 +4100,17 @@ def _export_results(self) -> None: sem = np.nanstd(self._last_mat, axis=0) / np.sqrt(max(1, np.sum(np.any(np.isfinite(self._last_mat), axis=1)))) arr = np.vstack([self._last_tvec, avg, sem]).T np.savetxt(os.path.join(out_dir, f"{prefix}_avg_psth.csv"), arr, delimiter=",", header="time,avg,sem", comments="") - if choices.get("events") and self._last_events is not None: - np.savetxt(os.path.join(out_dir, f"{prefix}_events.csv"), self._last_events, delimiter=",") + if choices.get("events"): + event_path = os.path.join(out_dir, f"{prefix}_events.csv") + if self._last_event_rows: + import csv + with open(event_path, "w", newline="") as f: + w = csv.writer(f) + w.writerow(["file_id", "event_time_sec", "duration_sec"]) + for row in self._last_event_rows: + w.writerow([row.get("file_id", ""), row.get("event_time_sec", np.nan), row.get("duration_sec", np.nan)]) + elif self._last_events is not None: + np.savetxt(event_path, self._last_events, delimiter=",") if choices.get("durations") and self._last_durations is not None: np.savetxt(os.path.join(out_dir, f"{prefix}_durations.csv"), self._last_durations, delimiter=",") if choices.get("metrics") and (self._last_metrics or self._last_global_metrics): @@ -2271,6 +4167,14 @@ def _export_images(self) -> None: "duration": self.plot_dur, "avg": self.plot_avg, "metrics": self.plot_metrics, + "global": self.plot_global, + "peaks_amp": self.plot_peak_amp, + "peaks_ibi": self.plot_peak_ibi, + "peaks_rate": self.plot_peak_rate, + "behavior_raster": self.plot_behavior_raster, + "behavior_rate": self.plot_behavior_rate, + "behavior_duration": self.plot_behavior_duration, + "behavior_starts": self.plot_behavior_starts, } for name, widget in targets.items(): try: @@ -2279,6 +4183,291 @@ def _export_images(self) -> None: except Exception: pass + def hideEvent(self, event: QtGui.QHideEvent) -> None: + super().hideEvent(event) + if self._app_closing: + return + self.hide_section_popups_for_tab_switch() + + def hide_section_popups_for_tab_switch(self) -> None: + """Hide and detach post-processing docks when tab is inactive.""" + if not self._section_popups: + return + if self._post_docks_hidden_for_tab_switch: + return + host = self._dock_host or self._dock_main_window() + self._post_section_visibility_before_hide = {} + self._post_section_state_before_hide = {} + for key, dock in self._section_popups.items(): + visible = bool(dock.isVisible()) + self._post_section_visibility_before_hide[key] = visible + area = ( + _dock_area_to_int(host.dockWidgetArea(dock), _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2)) + if host is not None + else _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + ) + self._post_section_state_before_hide[key] = { + "visible": visible, + "floating": bool(dock.isFloating()), + "area": area, + "geometry": dock.saveGeometry(), + } + try: + if host is not None: + state = None + if hasattr(host, "captureDockSnapshotForTab"): + state = host.captureDockSnapshotForTab("post") + else: + state = host.saveState(_DOCK_STATE_VERSION) + if state is not None and not state.isEmpty(): + self._settings.setValue(_POST_DOCK_STATE_KEY, state) + self._settings.sync() + except Exception: + pass + # Mark tab-switch hide before any dock visibility changes so delayed signals + # do not persist temporary hidden/default states. + self._post_docks_hidden_for_tab_switch = True + self._persist_hidden_layout_state_from_cache() + self._suspend_panel_layout_persistence = True + try: + for key, dock in self._section_popups.items(): + dock.hide() + # Detach post docks while tab is inactive so preprocessing and postprocessing + # layouts cannot mutate each other in the shared main-window dock host. + if host is not None: + try: + host.removeDockWidget(dock) + except Exception: + pass + self._set_section_button_checked(key, False) + finally: + self._suspend_panel_layout_persistence = False + + def _ensure_plot_rows_visible(self) -> None: + """Guarantee the plot area remains visible after tab switches and dock operations.""" + if hasattr(self, "_right_panel"): + self._right_panel.setVisible(True) + if not (self.plot_trace.isVisible() or self.row_heat.isVisible() or self.row_avg.isVisible()): + self.combo_view_layout.blockSignals(True) + self.combo_view_layout.setCurrentText("Standard") + self.combo_view_layout.blockSignals(False) + self._apply_view_layout() + + def showEvent(self, event: QtGui.QShowEvent) -> None: + super().showEvent(event) + self._setup_section_popups() + if not self._section_popups: + # Defer until the widget is fully attached to a main-window host. + QtCore.QTimer.singleShot(0, self._setup_section_popups) + if self._force_fixed_default_layout and self._section_popups: + # Always enforce fixed docking on show to override any late floating restores. + self.apply_fixed_default_layout() + self._dock_layout_restored = True + elif not self._dock_layout_restored and self._section_popups: + self._restore_panel_layout_state() + self._dock_layout_restored = True + + if not self._force_fixed_default_layout: + self._apply_post_main_dock_snapshot_if_needed() + self._enforce_only_post_docks_visible() + self._ensure_plot_rows_visible() + if self._force_fixed_default_layout: + # Fixed mode ignores cached tab-switch floating/visibility state. + self._post_docks_hidden_for_tab_switch = False + self._post_section_visibility_before_hide.clear() + self._post_section_state_before_hide.clear() + return + if not self._section_popups: + return + if not self._post_docks_hidden_for_tab_switch: + return + host = self._dock_host or self._dock_main_window() + self._suspend_panel_layout_persistence = True + try: + for key, dock in self._section_popups.items(): + state = self._post_section_state_before_hide.get(key, {}) + visible = bool(state.get("visible", self._post_section_visibility_before_hide.get(key, False))) + floating = bool(state.get("floating", dock.isFloating())) + area = self._dock_area_from_settings( + state.get("area", _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2)), + QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + ) + geom = state.get("geometry") + dock.blockSignals(True) + try: + if floating: + dock.setFloating(True) + if isinstance(geom, QtCore.QByteArray) and not geom.isEmpty(): + dock.restoreGeometry(geom) + self._section_popup_initialized.add(key) + if key not in self._section_popup_initialized or not self._is_popup_on_screen(dock): + self._position_section_popup(dock, key) + self._section_popup_initialized.add(key) + else: + if host is not None: + host.addDockWidget(area, dock) + dock.setFloating(False) + if isinstance(geom, QtCore.QByteArray) and not geom.isEmpty(): + dock.restoreGeometry(geom) + finally: + dock.blockSignals(False) + if visible: + dock.show() + self._set_section_button_checked(key, True) + self._last_opened_section = key + else: + dock.hide() + self._set_section_button_checked(key, False) + finally: + self._suspend_panel_layout_persistence = False + self._post_docks_hidden_for_tab_switch = False + self._post_section_visibility_before_hide.clear() + self._post_section_state_before_hide.clear() + self._enforce_only_post_docks_visible() + self._ensure_plot_rows_visible() + self._save_panel_layout_state() + + def _apply_post_main_dock_snapshot_if_needed(self) -> None: + if self._post_snapshot_applied: + return + host = self._dock_host or self._dock_main_window() + if host is None: + return + try: + raw = self._settings.value(_POST_DOCK_STATE_KEY, None) + state = self._to_qbytearray(raw) + if state is not None and not state.isEmpty(): + if hasattr(host, "restoreDockSnapshotForTab"): + ok = bool(host.restoreDockSnapshotForTab("post", state)) + else: + ok = bool(host.restoreState(state, _DOCK_STATE_VERSION)) + if ok: + self._post_snapshot_applied = True + _LOG.info("Post dock snapshot applied successfully") + else: + _LOG.warning("Post dock snapshot restore failed") + self._sync_section_button_states_from_docks() + self._enforce_only_post_docks_visible() + except Exception: + _LOG.exception("Post dock snapshot restore crashed") + + def _on_about_to_quit(self) -> None: + self._app_closing = True + self.persist_layout_state_snapshot() + self._save_settings() + + def _enforce_only_post_docks_visible(self) -> None: + """ + Ensure preprocessing docks cannot stay visible while postprocessing tab is active. + """ + if not self.isVisible(): + return + host = self._dock_host or self._dock_main_window() + if host is None: + return + tabs = getattr(host, "tabs", None) + if isinstance(tabs, QtWidgets.QTabWidget) and tabs.currentWidget() is not self: + return + for dock in host.findChildren(QtWidgets.QDockWidget): + name = str(dock.objectName() or "") + if name.startswith(_PRE_DOCK_PREFIX): + dock.hide() + + def mark_app_closing(self) -> None: + self._app_closing = True + + def set_force_fixed_default_layout(self, enabled: bool) -> None: + self._force_fixed_default_layout = bool(enabled) + + def apply_fixed_default_layout(self) -> None: + """ + Apply deterministic Post Processing docking: + right-side tab stack with Setup active, and Export docked as bottom strip. + """ + self._setup_section_popups() + host = self._dock_host or self._dock_main_window() + if host is None or not self._section_popups: + return + self._dock_host = host + + setup = self._section_popups.get("setup") + ordered_right_keys = ["setup", "psth", "signal", "behavior"] + export = self._section_popups.get("export") + + self._suspend_panel_layout_persistence = True + try: + # Reset previous split/tab topology before rebuilding the fixed stack. + for key in ("setup", "psth", "signal", "behavior", "export"): + dock = self._section_popups.get(key) + if dock is None: + continue + try: + host.removeDockWidget(dock) + except Exception: + pass + + for key in ordered_right_keys: + dock = self._section_popups.get(key) + if dock is None: + continue + dock.blockSignals(True) + try: + dock.setFloating(False) + host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) + dock.show() + finally: + dock.blockSignals(False) + + if export is not None: + export.blockSignals(True) + try: + export.setFloating(False) + host.addDockWidget(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, export) + export.show() + finally: + export.blockSignals(False) + + if setup is not None: + for key in ("psth", "signal", "behavior"): + dock = self._section_popups.get(key) + if dock is None: + continue + try: + host.tabifyDockWidget(setup, dock) + except Exception: + continue + + if setup is not None: + setup.show() + setup.raise_() + setup.setFocus(QtCore.Qt.FocusReason.OtherFocusReason) + self._last_opened_section = "setup" + if export is not None: + export.raise_() + + self._sync_section_button_states_from_docks() + self._post_docks_hidden_for_tab_switch = False + self._post_section_visibility_before_hide.clear() + self._post_section_state_before_hide.clear() + finally: + self._suspend_panel_layout_persistence = False + + self._enforce_only_post_docks_visible() + + def ensure_section_popups_initialized(self) -> None: + self._setup_section_popups() + + def get_section_dock_widgets(self) -> List[QtWidgets.QDockWidget]: + self._setup_section_popups() + return list(self._section_popups.values()) + + def get_section_popup_keys(self) -> List[str]: + self._setup_section_popups() + return list(self._section_popups.keys()) + + def mark_dock_layout_restored(self) -> None: + self._dock_layout_restored = True + class ExportDialog(QtWidgets.QDialog): def __init__(self, parent=None) -> None: diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 9fe0341..c8f9ade 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -67,6 +67,7 @@ def _compact_combo(combo: QtWidgets.QComboBox, min_chars: int = 6) -> None: "zscore (subtractions)": "z = zscore(dFF_sig) - zscore(dFF_ref)", "dFF (motion corrected with fitted ref)": "dFF = (sig_f - fitted_ref) / fitted_ref", "zscore (motion corrected with fitted ref)": "z = zscore((sig_f - fitted_ref) / fitted_ref)", + "Raw signal (465)": "output = filtered/resampled 465 signal", } @@ -96,6 +97,114 @@ def _parse_float_text(text: str) -> Optional[float]: return None +class PlaceholderListWidget(QtWidgets.QListWidget): + def __init__(self, placeholder_text: str = "", parent=None) -> None: + super().__init__(parent) + self._placeholder_text = placeholder_text + + def setPlaceholderText(self, text: str) -> None: + self._placeholder_text = str(text or "") + self.viewport().update() + + def paintEvent(self, event) -> None: + super().paintEvent(event) + if self.count() > 0 or not self._placeholder_text: + return + p = QtGui.QPainter(self.viewport()) + p.setRenderHint(QtGui.QPainter.RenderHint.TextAntialiasing, True) + color = self.palette().color(QtGui.QPalette.ColorRole.Text) + color.setAlpha(110) + p.setPen(color) + rect = self.viewport().rect().adjusted(12, 12, -12, -12) + p.drawText( + rect, + QtCore.Qt.AlignmentFlag.AlignTop | QtCore.Qt.AlignmentFlag.AlignHCenter | QtCore.Qt.TextFlag.TextWordWrap, + self._placeholder_text, + ) + p.end() + + +class CollapsibleSection(QtWidgets.QWidget): + toggled = QtCore.Signal(bool) + + def __init__(self, title: str, parent=None) -> None: + super().__init__(parent) + self._title = title + self._expanded = True + self._build_ui() + + def _build_ui(self) -> None: + root = QtWidgets.QVBoxLayout(self) + root.setContentsMargins(0, 0, 0, 0) + root.setSpacing(4) + + self.btn_toggle = QtWidgets.QToolButton() + self.btn_toggle.setToolButtonStyle(QtCore.Qt.ToolButtonStyle.ToolButtonTextBesideIcon) + self.btn_toggle.setArrowType(QtCore.Qt.ArrowType.DownArrow) + self.btn_toggle.setCheckable(True) + self.btn_toggle.setChecked(True) + self.btn_toggle.setText(self._title) + self.btn_toggle.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_toggle.clicked.connect(self._on_toggle) + + self.lbl_summary = QtWidgets.QLabel("") + self.lbl_summary.setProperty("class", "hint") + self.lbl_summary.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight | QtCore.Qt.AlignmentFlag.AlignVCenter) + self.lbl_summary.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + + header = QtWidgets.QHBoxLayout() + header.setContentsMargins(0, 0, 0, 0) + header.setSpacing(8) + header.addWidget(self.btn_toggle, stretch=1) + header.addWidget(self.lbl_summary, stretch=1) + + self.content = QtWidgets.QWidget() + self.content_layout = QtWidgets.QVBoxLayout(self.content) + self.content_layout.setContentsMargins(8, 8, 8, 8) + self.content_layout.setSpacing(8) + + frame = QtWidgets.QFrame() + frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) + frame_layout = QtWidgets.QVBoxLayout(frame) + frame_layout.setContentsMargins(0, 0, 0, 0) + frame_layout.setSpacing(0) + frame_layout.addWidget(self.content) + self.frame = frame + + root.addLayout(header) + root.addWidget(frame) + + def set_summary(self, text: str) -> None: + self.lbl_summary.setText(str(text or "")) + + def set_content_widget(self, widget: QtWidgets.QWidget) -> None: + while self.content_layout.count(): + item = self.content_layout.takeAt(0) + w = item.widget() + if w is not None: + w.setParent(None) + self.content_layout.addWidget(widget) + + def is_expanded(self) -> bool: + return self._expanded + + def set_expanded(self, expanded: bool) -> None: + exp = bool(expanded) + self._expanded = exp + self.btn_toggle.setChecked(exp) + self.btn_toggle.setArrowType(QtCore.Qt.ArrowType.DownArrow if exp else QtCore.Qt.ArrowType.RightArrow) + self.frame.setVisible(exp) + self.lbl_summary.setVisible(not exp) + self.toggled.emit(exp) + + def _on_toggle(self, checked: bool) -> None: + self._expanded = bool(checked) + self.btn_toggle.setArrowType(QtCore.Qt.ArrowType.DownArrow if checked else QtCore.Qt.ArrowType.RightArrow) + self.frame.setVisible(bool(checked)) + self.lbl_summary.setVisible(not bool(checked)) + self.toggled.emit(bool(checked)) + + # ----------------------------- Metadata dialog ----------------------------- class MetadataForm(QtWidgets.QWidget): @@ -647,39 +756,37 @@ def __init__(self, parent=None) -> None: def _build_ui(self) -> None: v = QtWidgets.QVBoxLayout(self) - v.setSpacing(10) + v.setSpacing(8) + v.setContentsMargins(8, 8, 8, 8) - row = QtWidgets.QVBoxLayout() - row.setSpacing(4) + # Top actions + top_row = QtWidgets.QHBoxLayout() self.btn_open = QtWidgets.QPushButton("Open File") self.btn_folder = QtWidgets.QPushButton("Add Folder") - self.btn_open.setProperty("class", "compactSmall") - self.btn_folder.setProperty("class", "compactSmall") - self.btn_open.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - self.btn_folder.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - row.addWidget(self.btn_open) - row.addWidget(self.btn_folder) - - # File list with remove button - file_layout = QtWidgets.QVBoxLayout() - self.list_files = QtWidgets.QListWidget() + self.btn_open.setProperty("class", "bluePrimarySmall") + self.btn_folder.setProperty("class", "blueSecondarySmall") + for b in (self.btn_open, self.btn_folder): + b.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + top_row.addWidget(self.btn_open) + top_row.addWidget(self.btn_folder) + + # File list fills available height + self.list_files = PlaceholderListWidget("Drop files here or click Open File") self.list_files.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection) - self.list_files.setMinimumHeight(110) + self.list_files.setMinimumHeight(180) self.btn_remove_file = QtWidgets.QPushButton("Remove selected") - self.btn_remove_file.setProperty("class", "compactSmall") - self.btn_remove_file.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_remove_file.setProperty("class", "blueSecondarySmall") + self.btn_remove_file.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) self.btn_remove_file.setEnabled(False) self.btn_remove_file.clicked.connect(self._remove_selected_files) - file_layout.addWidget(self.list_files) - file_layout.addWidget(self.btn_remove_file) - + # Selection block self.grp_sel = QtWidgets.QGroupBox("Selection") - form = QtWidgets.QFormLayout(self.grp_sel) - form.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) - form.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) - form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + form = QtWidgets.QGridLayout(self.grp_sel) + form.setContentsMargins(8, 8, 8, 8) + form.setHorizontalSpacing(6) + form.setVerticalSpacing(6) self.combo_channel = QtWidgets.QComboBox() self.combo_channel.setMinimumWidth(60) @@ -694,73 +801,55 @@ def _build_ui(self) -> None: self.edit_time_end = QtWidgets.QLineEdit() for ed in (self.edit_time_start, self.edit_time_end): ed.setPlaceholderText("Start (s)" if ed is self.edit_time_start else "End (s)") - ed.setMinimumWidth(70) val = QtGui.QDoubleValidator(0.0, 1e9, 3, ed) val.setLocale(_system_locale()) ed.setValidator(val) - ed.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Fixed) - - time_row = QtWidgets.QGridLayout() - time_row.setHorizontalSpacing(6) - time_row.setContentsMargins(0, 0, 0, 0) - lbl_start = QtWidgets.QLabel("Start:") - lbl_end = QtWidgets.QLabel("End:") - lbl_start.setMinimumWidth(45) - lbl_end.setMinimumWidth(35) - time_row.addWidget(lbl_start, 0, 0) - time_row.addWidget(self.edit_time_start, 0, 1) - time_row.addWidget(lbl_end, 0, 2) - time_row.addWidget(self.edit_time_end, 0, 3) - time_row.setColumnStretch(1, 1) - time_row.setColumnStretch(3, 1) - time_widget = QtWidgets.QWidget() - time_widget.setLayout(time_row) - - form.addRow("Channel (preview)", self.combo_channel) - form.addRow("Digital trigger (overlay)", self.combo_trigger) - form.addRow("Time window (s)", time_widget) - - btncol = QtWidgets.QVBoxLayout() - btncol.setSpacing(6) - - self.btn_metadata = QtWidgets.QPushButton("Metadata") - self.btn_update = QtWidgets.QPushButton("Update") - self.btn_artifacts = QtWidgets.QPushButton("Artifacts?") - self.btn_export = QtWidgets.QPushButton("Export CSV/H5?") - - self.btn_advanced = QtWidgets.QPushButton("Advanced options") - self.btn_qc = QtWidgets.QPushButton("Quality check") - self.btn_qc_batch = QtWidgets.QPushButton("Batch quality metrics") - - for b in ( - self.btn_metadata, self.btn_update, self.btn_artifacts, self.btn_export, - self.btn_advanced, self.btn_qc, self.btn_qc_batch, - ): - b.setProperty("class", "compactSmall") - b.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, - QtWidgets.QSizePolicy.Policy.Fixed) - - self.btn_update.setProperty("class", "compactPrimarySmall") - self.btn_export.setProperty("class", "compactPrimarySmall") - - btncol.addWidget(self.btn_metadata) - btncol.addWidget(self.btn_update) - btncol.addWidget(self.btn_artifacts) - btncol.addWidget(self.btn_export) - btncol.addWidget(self.btn_advanced) - btncol.addWidget(self.btn_qc) - btncol.addWidget(self.btn_qc_batch) + ed.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + + form.addWidget(QtWidgets.QLabel("Channel"), 0, 0) + form.addWidget(self.combo_channel, 0, 1, 1, 3) + form.addWidget(QtWidgets.QLabel("Analog/Digital channel"), 1, 0) + form.addWidget(self.combo_trigger, 1, 1, 1, 3) + form.addWidget(QtWidgets.QLabel("Time window"), 2, 0) + form.addWidget(self.edit_time_start, 2, 1) + form.addWidget(QtWidgets.QLabel("to"), 2, 2) + form.addWidget(self.edit_time_end, 2, 3) + self.btn_cutting = QtWidgets.QPushButton("Cutting / Sectioning") + self.btn_cutting.setProperty("class", "blueSecondarySmall") + self.btn_cutting.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + form.addWidget(self.btn_cutting, 3, 0, 1, 4) + form.setColumnStretch(1, 1) + form.setColumnStretch(3, 1) self.lbl_hint = QtWidgets.QLabel("") self.lbl_hint.setProperty("class", "hint") self.lbl_hint.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) - v.addLayout(row) - v.addLayout(file_layout) + v.addLayout(top_row) + v.addWidget(self.list_files, stretch=1) + v.addWidget(self.btn_remove_file) v.addWidget(self.grp_sel) - v.addLayout(btncol) v.addWidget(self.lbl_hint) + # Legacy action buttons removed from layout; keep hidden buttons for compatibility. + self.btn_metadata = QtWidgets.QPushButton("Metadata") + self.btn_update = QtWidgets.QPushButton("Update") + self.btn_artifacts = QtWidgets.QPushButton("Artifacts") + self.btn_export = QtWidgets.QPushButton("Export") + self.btn_advanced = QtWidgets.QPushButton("Cutting / Sectioning") + self.btn_qc = QtWidgets.QPushButton("Quality check") + self.btn_qc_batch = QtWidgets.QPushButton("Batch quality metrics") + for b in ( + self.btn_metadata, + self.btn_update, + self.btn_artifacts, + self.btn_export, + self.btn_advanced, + self.btn_qc, + self.btn_qc_batch, + ): + b.setVisible(False) + self.btn_open.clicked.connect(self.openFileRequested.emit) self.btn_folder.clicked.connect(self.openFolderRequested.emit) self.list_files.itemSelectionChanged.connect(self.selectionChanged.emit) @@ -776,6 +865,7 @@ def _build_ui(self) -> None: self.btn_export.clicked.connect(self.exportRequested.emit) self.btn_artifacts.clicked.connect(self.toggleArtifactsRequested.emit) self.btn_advanced.clicked.connect(self.advancedOptionsRequested.emit) + self.btn_cutting.clicked.connect(self.advancedOptionsRequested.emit) self.btn_qc.clicked.connect(self.qcRequested.emit) self.btn_qc_batch.clicked.connect(self.batchQcRequested.emit) @@ -796,7 +886,10 @@ def current_dir_hint(self) -> str: return self._current_dir_hint def add_file(self, path: str) -> None: - self.list_files.addItem(path) + item = QtWidgets.QListWidgetItem(os.path.basename(path)) + item.setToolTip(path) + item.setData(QtCore.Qt.ItemDataRole.UserRole, path) + self.list_files.addItem(item) if self.list_files.count() == 1: self.list_files.setCurrentRow(0) item0 = self.list_files.item(0) @@ -810,10 +903,21 @@ def add_file(self, path: str) -> None: pass def all_paths(self) -> List[str]: - return [self.list_files.item(i).text() for i in range(self.list_files.count())] + out: List[str] = [] + for i in range(self.list_files.count()): + item = self.list_files.item(i) + if item is None: + continue + path = item.data(QtCore.Qt.ItemDataRole.UserRole) + out.append(str(path if path else item.text())) + return out def selected_paths(self) -> List[str]: - return [it.text() for it in self.list_files.selectedItems()] + out: List[str] = [] + for it in self.list_files.selectedItems(): + path = it.data(QtCore.Qt.ItemDataRole.UserRole) + out.append(str(path if path else it.text())) + return out def set_available_channels(self, chans: List[str]) -> None: self.combo_channel.blockSignals(True) @@ -1157,10 +1261,20 @@ def get_sections(self) -> List[Dict[str, object]]: class ParameterPanel(QtWidgets.QGroupBox): paramsChanged = QtCore.Signal() + metadataRequested = QtCore.Signal() + previewRequested = QtCore.Signal() + artifactsRequested = QtCore.Signal() + artifactOverlayToggled = QtCore.Signal(bool) + exportRequested = QtCore.Signal() + advancedOptionsRequested = QtCore.Signal() + qcRequested = QtCore.Signal() + batchQcRequested = QtCore.Signal() def __init__(self, parent=None) -> None: super().__init__("Processing Parameters", parent) self._help_texts = self._build_help_texts() + self._config_state_exporter: Optional[Callable[[], Dict[str, object]]] = None + self._config_state_importer: Optional[Callable[[Dict[str, object]], None]] = None self._build_ui() self._wire() @@ -1274,10 +1388,9 @@ def _label_with_help(self, text: str, key: str) -> QtWidgets.QWidget: return w def _build_ui(self) -> None: - form = QtWidgets.QFormLayout(self) - form.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) - form.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) - form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + root = QtWidgets.QVBoxLayout(self) + root.setContentsMargins(0, 0, 0, 0) + root.setSpacing(8) def mk_dspin(minw=60, decimals=3) -> QtWidgets.QDoubleSpinBox: s = QtWidgets.QDoubleSpinBox() @@ -1294,139 +1407,119 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: s.setKeyboardTracking(False) return s - # Artifact detection toggle and dropdown - artifact_row = QtWidgets.QHBoxLayout() + # Artifacts controls self.cb_artifact = QtWidgets.QCheckBox("Enable artifact detection") self.cb_artifact.setChecked(True) + self.cb_show_artifact_overlay = QtWidgets.QCheckBox("Show artifact detection overlay") + self.cb_show_artifact_overlay.setChecked(True) + self.cb_show_artifact_overlay.setToolTip( + "Toggle detected artifact interval overlays on the raw plot." + ) self.combo_artifact = QtWidgets.QComboBox() self.combo_artifact.addItems(["Global MAD (dx)", "Adaptive MAD (windowed)"]) _compact_combo(self.combo_artifact, min_chars=6) - artifact_row.addWidget(self.cb_artifact) - artifact_row.addWidget(self.combo_artifact, stretch=1) - artifact_widget = QtWidgets.QWidget() - artifact_widget.setLayout(artifact_row) - self.spin_mad = mk_dspin() self.spin_mad.setRange(1.0, 50.0) self.spin_mad.setValue(8.0) - self.spin_adapt_win = mk_dspin() self.spin_adapt_win.setRange(0.2, 60.0) self.spin_adapt_win.setValue(5.0) - self.spin_pad = mk_dspin() self.spin_pad.setRange(0.0, 10.0) self.spin_pad.setValue(0.25) - # Filtering toggle and dropdown - filter_row = QtWidgets.QHBoxLayout() + art_content = QtWidgets.QWidget() + art_form = QtWidgets.QFormLayout(art_content) + art_form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + art_form.addRow(self.cb_artifact) + art_form.addRow(self.cb_show_artifact_overlay) + art_form.addRow(self._label_with_help("Method", "artifact_mode"), self.combo_artifact) + art_form.addRow(self._label_with_help("MAD threshold (k)", "mad_k"), self.spin_mad) + art_form.addRow(self._label_with_help("Adaptive window (s)", "adaptive_window_s"), self.spin_adapt_win) + art_form.addRow(self._label_with_help("Artifact pad (s)", "artifact_pad_s"), self.spin_pad) + + # Filtering controls self.cb_filtering = QtWidgets.QCheckBox("Enable filtering") self.cb_filtering.setChecked(True) - filter_row.addWidget(self.cb_filtering) - filter_widget = QtWidgets.QWidget() - filter_widget.setLayout(filter_row) - self.spin_lowpass = mk_dspin() self.spin_lowpass.setRange(0.1, 200.0) self.spin_lowpass.setValue(12.0) - self.spin_filt_order = mk_spin() self.spin_filt_order.setRange(1, 8) self.spin_filt_order.setValue(3) - self.spin_target_fs = mk_dspin(decimals=1) self.spin_target_fs.setRange(1.0, 1000.0) self.spin_target_fs.setValue(100.0) - self.cb_invert = QtWidgets.QCheckBox("Invert signal polarity (465/405)") self.cb_invert.setChecked(False) self.cb_invert.setToolTip( "Flips both raw channels before artifact detection, filtering, baseline, and output computation." ) - # Baseline method and lambda (main parameters) - baseline_main_row = QtWidgets.QHBoxLayout() + filt_content = QtWidgets.QWidget() + filt_form = QtWidgets.QFormLayout(filt_content) + filt_form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + filt_form.addRow(self.cb_filtering) + filt_form.addRow(self._label_with_help("Low-pass cutoff (Hz)", "lowpass_hz"), self.spin_lowpass) + filt_form.addRow(self._label_with_help("Filter order", "filter_order"), self.spin_filt_order) + filt_form.addRow(self._label_with_help("Target FS (Hz)", "target_fs_hz"), self.spin_target_fs) + filt_form.addRow(self._label_with_help("Invert signal polarity", "invert_polarity"), self.cb_invert) + + # Baseline controls self.combo_baseline = QtWidgets.QComboBox() self.combo_baseline.addItems([m for m in BASELINE_METHODS]) _compact_combo(self.combo_baseline, min_chars=6) - - lam_row = QtWidgets.QHBoxLayout() - lam_row.setSpacing(6) - self.spin_lam_x = mk_dspin(minw=90, decimals=3) self.spin_lam_x.setRange(0.1, 9.999) self.spin_lam_x.setValue(1.0) - - self.lbl_e = QtWidgets.QLabel("e") - self.lbl_e.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.spin_lam_y = mk_spin(minw=80) self.spin_lam_y.setRange(-3, 12) self.spin_lam_y.setValue(9) - self.lbl_lam_preview = QtWidgets.QLabel("= 1e9") self.lbl_lam_preview.setProperty("class", "hint") - - lam_row.addWidget(self.spin_lam_x) - lam_row.addWidget(self.lbl_e) - lam_row.addWidget(self.spin_lam_y) - lam_row.addWidget(self.lbl_lam_preview, stretch=1) - - lam_widget = QtWidgets.QWidget() - lam_widget.setLayout(lam_row) - - baseline_main_row.addWidget(QtWidgets.QLabel("Method:")) - baseline_main_row.addWidget(self.combo_baseline) - baseline_main_row.addWidget(QtWidgets.QLabel("Lambda:")) - baseline_main_row.addWidget(lam_widget, stretch=1) - baseline_main_widget = QtWidgets.QWidget() - baseline_main_widget.setLayout(baseline_main_row) - - # Baseline advanced parameters (hidden by default) - self.baseline_advanced_group = QtWidgets.QGroupBox("Baseline advanced parameters") - self.baseline_advanced_group.setCheckable(True) - self.baseline_advanced_group.setChecked(False) - self.baseline_advanced_group.setVisible(False) # Hidden by default - baseline_form = QtWidgets.QFormLayout(self.baseline_advanced_group) - baseline_form.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) - baseline_form.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) - self.spin_diff = mk_spin() self.spin_diff.setRange(1, 3) self.spin_diff.setValue(2) - self.spin_iter = mk_spin() self.spin_iter.setRange(1, 200) self.spin_iter.setValue(50) - self.spin_tol = mk_dspin(decimals=6) self.spin_tol.setRange(1e-8, 1e-1) self.spin_tol.setValue(1e-3) - self.spin_asls_p = mk_dspin(decimals=4) self.spin_asls_p.setRange(0.001, 0.5) self.spin_asls_p.setValue(0.01) - baseline_form.addRow(self._label_with_help("diff_order", "baseline_diff_order"), self.spin_diff) - baseline_form.addRow(self._label_with_help("max_iter", "baseline_max_iter"), self.spin_iter) - baseline_form.addRow(self._label_with_help("tol", "baseline_tol"), self.spin_tol) - baseline_form.addRow(self._label_with_help("AsLS p", "asls_p"), self.spin_asls_p) + lam_row = QtWidgets.QHBoxLayout() + lam_row.setSpacing(6) + lam_row.addWidget(self.spin_lam_x) + lam_row.addWidget(QtWidgets.QLabel("e")) + lam_row.addWidget(self.spin_lam_y) + lam_row.addWidget(self.lbl_lam_preview, stretch=1) + lam_widget = QtWidgets.QWidget() + lam_widget.setLayout(lam_row) + + self.baseline_advanced_group = QtWidgets.QGroupBox("Advanced parameters") + self.baseline_advanced_group.setVisible(False) + baseline_adv_form = QtWidgets.QFormLayout(self.baseline_advanced_group) + baseline_adv_form.addRow(self._label_with_help("diff_order", "baseline_diff_order"), self.spin_diff) + baseline_adv_form.addRow(self._label_with_help("max_iter", "baseline_max_iter"), self.spin_iter) + baseline_adv_form.addRow(self._label_with_help("tol", "baseline_tol"), self.spin_tol) + baseline_adv_form.addRow(self._label_with_help("AsLS p", "asls_p"), self.spin_asls_p) - # Button to show/hide baseline advanced parameters self.btn_toggle_advanced = QtWidgets.QPushButton("Show advanced baseline options") self.btn_toggle_advanced.setProperty("class", "compactSmall") self.btn_toggle_advanced.clicked.connect(self._toggle_advanced_baseline) - self.output_group = QtWidgets.QGroupBox("Output") - out_v = QtWidgets.QVBoxLayout(self.output_group) - out_v.setContentsMargins(6, 6, 6, 6) - out_v.setSpacing(6) - - out_form = QtWidgets.QFormLayout() - out_form.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) - out_form.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) - out_form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + base_content = QtWidgets.QWidget() + base_form = QtWidgets.QFormLayout(base_content) + base_form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + base_form.addRow(self._label_with_help("Method", "baseline_method"), self.combo_baseline) + base_form.addRow(self._label_with_help("Lambda", "baseline_lambda"), lam_widget) + base_form.addRow(self.btn_toggle_advanced) + base_form.addRow(self.baseline_advanced_group) + # Output controls self.combo_output = QtWidgets.QComboBox() self.combo_output.addItems(OUTPUT_MODES) _compact_combo(self.combo_output, min_chars=8) @@ -1437,105 +1530,140 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: if mode == "zscore (subtractions)": tip = "Difference of z-scored channels; not the same as zscore of the difference." self.combo_output.setItemData(i, tip, QtCore.Qt.ItemDataRole.ToolTipRole) - self.ed_output_definition = QtWidgets.QLineEdit() self.ed_output_definition.setReadOnly(True) self.ed_output_definition.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) self.ed_output_definition.setPlaceholderText("Definition updates with output mode") - self.combo_ref_fit = QtWidgets.QComboBox() self.combo_ref_fit.addItems(REFERENCE_FIT_METHODS) _compact_combo(self.combo_ref_fit, min_chars=6) self.combo_ref_fit.setToolTip("Used only for fitted-reference motion correction modes.") - self.spin_lasso = mk_dspin(decimals=6) self.spin_lasso.setRange(1e-6, 1.0) self.spin_lasso.setValue(1e-3) self.spin_lasso.setToolTip( "Higher alpha means stronger shrinkage; if sklearn is missing, Lasso falls back to OLS." ) - self.spin_rlm_huber_t = mk_dspin(decimals=3) self.spin_rlm_huber_t.setRange(0.1, 10.0) self.spin_rlm_huber_t.setValue(1.345) - self.spin_rlm_max_iter = mk_spin() self.spin_rlm_max_iter.setRange(1, 500) self.spin_rlm_max_iter.setValue(50) - self.spin_rlm_tol = mk_dspin(decimals=8) self.spin_rlm_tol.setRange(1e-12, 1e-2) self.spin_rlm_tol.setValue(1e-6) self.output_params_stack = QtWidgets.QStackedWidget() - self.output_params_stack.setSizePolicy( - QtWidgets.QSizePolicy.Policy.Expanding, - QtWidgets.QSizePolicy.Policy.Fixed, - ) - page_none = QtWidgets.QWidget() self.output_params_stack.addWidget(page_none) - page_lasso = QtWidgets.QWidget() page_lasso_form = QtWidgets.QFormLayout(page_lasso) page_lasso_form.setContentsMargins(0, 0, 0, 0) page_lasso_form.addRow(self._label_with_help("Lasso alpha", "lasso_alpha"), self.spin_lasso) self.output_params_stack.addWidget(page_lasso) - page_rlm = QtWidgets.QWidget() - page_rlm_layout = QtWidgets.QVBoxLayout(page_rlm) - page_rlm_layout.setContentsMargins(0, 0, 0, 0) + page_rlm_v = QtWidgets.QVBoxLayout(page_rlm) + page_rlm_v.setContentsMargins(0, 0, 0, 0) robust_group = QtWidgets.QGroupBox("Robust fit") robust_form = QtWidgets.QFormLayout(robust_group) - robust_form.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows) robust_form.addRow(self._label_with_help("HuberT (t)", "rlm_huber_t"), self.spin_rlm_huber_t) robust_form.addRow(self._label_with_help("Max iter", "rlm_max_iter"), self.spin_rlm_max_iter) robust_form.addRow(self._label_with_help("Tol", "rlm_tol"), self.spin_rlm_tol) - page_rlm_layout.addWidget(robust_group) + page_rlm_v.addWidget(robust_group) self.output_params_stack.addWidget(page_rlm) - out_form.addRow(self._label_with_help("Output mode", "output_mode"), self.combo_output) + out_content = QtWidgets.QWidget() + out_form = QtWidgets.QFormLayout(out_content) + out_form.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) + self.lbl_output_mode = self._label_with_help("Output mode", "output_mode") + self.lbl_reference_fit = self._label_with_help("Reference fit method", "reference_fit") + out_form.addRow(self.lbl_output_mode, self.combo_output) out_form.addRow("Definition", self.ed_output_definition) - out_form.addRow(self._label_with_help("Reference fit method", "reference_fit"), self.combo_ref_fit) - out_v.addLayout(out_form) - out_v.addWidget(self.output_params_stack) + out_form.addRow(self.lbl_reference_fit, self.combo_ref_fit) + out_form.addRow(self.output_params_stack) - # Config buttons - config_row = QtWidgets.QHBoxLayout() + # QC + Export card + self.btn_artifacts_panel = QtWidgets.QPushButton("Artifacts") + self.btn_qc = QtWidgets.QPushButton("Quality check") + self.btn_qc_batch = QtWidgets.QPushButton("Batch quality metrics") + self.btn_export = QtWidgets.QPushButton("Export CSV/H5") + self.btn_metadata = QtWidgets.QPushButton("Metadata") + self.btn_advanced = QtWidgets.QPushButton("Cutting / Sectioning") self.btn_save_config = QtWidgets.QPushButton("Save config") self.btn_load_config = QtWidgets.QPushButton("Load config") - self.btn_save_config.setProperty("class", "compactSmall") - self.btn_load_config.setProperty("class", "compactSmall") + for b in ( + self.btn_artifacts_panel, + self.btn_qc, + self.btn_qc_batch, + self.btn_export, + self.btn_metadata, + self.btn_advanced, + self.btn_save_config, + self.btn_load_config, + ): + b.setProperty("class", "compactSmall") + b.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_export.setProperty("class", "compactPrimarySmall") self.btn_save_config.clicked.connect(self._save_config) self.btn_load_config.clicked.connect(self._load_config) - config_row.addWidget(self.btn_save_config) - config_row.addWidget(self.btn_load_config) - config_row.addStretch(1) + self.btn_artifacts_panel.clicked.connect(self.artifactsRequested.emit) + self.btn_qc.clicked.connect(self.qcRequested.emit) + self.btn_qc_batch.clicked.connect(self.batchQcRequested.emit) + self.btn_export.clicked.connect(self.exportRequested.emit) + self.btn_metadata.clicked.connect(self.metadataRequested.emit) + self.btn_advanced.clicked.connect(self.advancedOptionsRequested.emit) + + qc_content = QtWidgets.QWidget() + qc_grid = QtWidgets.QGridLayout(qc_content) + qc_grid.setContentsMargins(0, 0, 0, 0) + qc_grid.setHorizontalSpacing(6) + qc_grid.setVerticalSpacing(6) + qc_grid.addWidget(self.btn_export, 0, 0, 1, 2) + qc_grid.addWidget(self.btn_artifacts_panel, 1, 0) + qc_grid.addWidget(self.btn_advanced, 1, 1) + qc_grid.addWidget(self.btn_qc, 2, 0) + qc_grid.addWidget(self.btn_qc_batch, 2, 1) + qc_grid.addWidget(self.btn_metadata, 3, 0) + qc_grid.addWidget(self.btn_save_config, 3, 1) + qc_grid.addWidget(self.btn_load_config, 4, 1) + qc_grid.setColumnStretch(0, 1) + qc_grid.setColumnStretch(1, 1) self.lbl_fs = QtWidgets.QLabel("FS: -") self.lbl_fs.setProperty("class", "hint") - - form.addRow(self._label_with_help("Artifact detection", "artifact_mode"), artifact_widget) - form.addRow(self._label_with_help("MAD threshold (k)", "mad_k"), self.spin_mad) - form.addRow(self._label_with_help("Adaptive window (s)", "adaptive_window_s"), self.spin_adapt_win) - form.addRow(self._label_with_help("Artifact pad (s)", "artifact_pad_s"), self.spin_pad) - form.addRow("Filtering", filter_widget) - form.addRow(self._label_with_help("Low-pass cutoff (Hz)", "lowpass_hz"), self.spin_lowpass) - form.addRow(self._label_with_help("Filter order", "filter_order"), self.spin_filt_order) - form.addRow(self._label_with_help("Target FS (Hz)", "target_fs_hz"), self.spin_target_fs) - form.addRow(self._label_with_help("Invert signal polarity", "invert_polarity"), self.cb_invert) - - form.addRow("Baseline", baseline_main_widget) - form.addRow(self.btn_toggle_advanced) - form.addRow(self.baseline_advanced_group) - - form.addRow(self.output_group) - form.addRow("Configuration", config_row) - form.addRow("", self.lbl_fs) + qc_grid.addWidget(self.lbl_fs, 5, 0, 1, 2) + + # Cards + self.card_artifacts = CollapsibleSection("Artifacts") + self.card_artifacts.set_content_widget(art_content) + self.card_filtering = CollapsibleSection("Filtering") + self.card_filtering.set_content_widget(filt_content) + self.card_baseline = CollapsibleSection("Baseline") + self.card_baseline.set_content_widget(base_content) + self.card_output = CollapsibleSection("Output") + self.card_output.set_content_widget(out_content) + self.card_actions = CollapsibleSection("QC + Export") + self.card_actions.set_content_widget(qc_content) + self.card_actions.set_expanded(True) + + # Expand defaults + self.card_artifacts.set_expanded(bool(self.cb_artifact.isChecked())) + self.card_filtering.set_expanded(bool(self.cb_filtering.isChecked())) + self.card_baseline.set_expanded(True) + self.card_output.set_expanded(True) + + root.addWidget(self.card_artifacts) + root.addWidget(self.card_filtering) + root.addWidget(self.card_baseline) + root.addWidget(self.card_output) + root.addWidget(self.card_actions) + root.addStretch(1) self._update_lambda_preview() self._update_output_definition() self._update_output_controls() + self._update_section_summaries() def _update_artifact_enabled(self) -> None: enabled = self.cb_artifact.isChecked() @@ -1543,12 +1671,18 @@ def _update_artifact_enabled(self) -> None: self.spin_mad.setEnabled(enabled) self.spin_adapt_win.setEnabled(enabled) self.spin_pad.setEnabled(enabled) + if not enabled and self.card_artifacts.is_expanded(): + self.card_artifacts.set_expanded(False) + self._update_section_summaries() self.paramsChanged.emit() def _update_filtering_enabled(self) -> None: enabled = self.cb_filtering.isChecked() self.spin_lowpass.setEnabled(enabled) self.spin_filt_order.setEnabled(enabled) + if not enabled and self.card_filtering.is_expanded(): + self.card_filtering.set_expanded(False) + self._update_section_summaries() self.paramsChanged.emit() def _update_lambda_preview(self) -> None: @@ -1567,11 +1701,14 @@ def _update_output_definition(self) -> None: def _update_output_controls(self) -> None: fitted_mode = self._is_fitted_output_mode() + self.lbl_reference_fit.setVisible(fitted_mode) + self.combo_ref_fit.setVisible(fitted_mode) self.combo_ref_fit.setEnabled(fitted_mode) if not fitted_mode: self.output_params_stack.setCurrentIndex(0) self.output_params_stack.setVisible(False) + self._update_section_summaries() return method = self.combo_ref_fit.currentText() @@ -1584,6 +1721,45 @@ def _update_output_controls(self) -> None: self.output_params_stack.setCurrentIndex(idx) self.output_params_stack.setVisible(idx != 0) + self._update_section_summaries() + + def _fmt_num(self, value: float, decimals: int = 3) -> str: + text = f"{float(value):.{int(decimals)}f}" + text = text.rstrip("0").rstrip(".") + return text if text else "0" + + def _update_section_summaries(self) -> None: + if self.cb_artifact.isChecked(): + mode = self.combo_artifact.currentText() + method = "Adaptive MAD" if mode.startswith("Adaptive") else "Global MAD" + if mode.startswith("Adaptive"): + summary = ( + f"{method}, k={self._fmt_num(self.spin_mad.value(), 2)}, " + f"window={self._fmt_num(self.spin_adapt_win.value(), 2)}s, " + f"pad={self._fmt_num(self.spin_pad.value(), 2)}s" + ) + else: + summary = ( + f"{method}, k={self._fmt_num(self.spin_mad.value(), 2)}, " + f"pad={self._fmt_num(self.spin_pad.value(), 2)}s" + ) + else: + summary = "Off" + self.card_artifacts.set_summary(summary) + + if self.cb_filtering.isChecked(): + summary = ( + f"LP {self._fmt_num(self.spin_lowpass.value(), 2)} Hz, " + f"order {int(self.spin_filt_order.value())}, " + f"target {self._fmt_num(self.spin_target_fs.value(), 2)} Hz" + ) + else: + summary = "Off" + self.card_filtering.set_summary(summary) + + summary = f"{self.combo_baseline.currentText()}, lambda={self._lambda_value():.2e}" + self.card_baseline.set_summary(summary) + self.card_output.set_summary(self.combo_output.currentText()) def _wire(self) -> None: def emit_noargs(*_args) -> None: @@ -1623,9 +1799,17 @@ def emit_noargs(*_args) -> None: self.combo_output.currentIndexChanged.connect(lambda *_: self._update_output_controls()) self.combo_ref_fit.currentIndexChanged.connect(lambda *_: self._update_output_controls()) + # Keep collapsed card summaries synchronized with current values. + for w in widgets: + if isinstance(w, QtWidgets.QComboBox): + w.currentIndexChanged.connect(lambda *_: self._update_section_summaries()) + else: + w.valueChanged.connect(lambda *_: self._update_section_summaries()) + self.cb_artifact.stateChanged.connect(self._update_artifact_enabled) self.cb_filtering.stateChanged.connect(self._update_filtering_enabled) self.cb_invert.stateChanged.connect(emit_noargs) + self.cb_show_artifact_overlay.toggled.connect(lambda v: self.artifactOverlayToggled.emit(bool(v))) def _toggle_advanced_baseline(self) -> None: """Toggle visibility of baseline advanced parameters.""" @@ -1635,6 +1819,14 @@ def _toggle_advanced_baseline(self) -> None: "Hide advanced baseline options" if not is_visible else "Show advanced baseline options" ) + def set_config_state_hooks( + self, + exporter: Optional[Callable[[], Dict[str, object]]], + importer: Optional[Callable[[Dict[str, object]], None]], + ) -> None: + self._config_state_exporter = exporter + self._config_state_importer = importer + def _save_config(self) -> None: """Save current preprocessing parameters to a JSON file.""" params = self.get_params() @@ -1650,9 +1842,17 @@ def _save_config(self) -> None: config = { "artifact_detection_enabled": self.cb_artifact.isChecked(), + "artifact_overlay_visible": self.cb_show_artifact_overlay.isChecked(), "filtering_enabled": self.cb_filtering.isChecked(), "parameters": params.to_dict(), } + if callable(self._config_state_exporter): + try: + extra_state = self._config_state_exporter() + if isinstance(extra_state, dict) and extra_state: + config["ui_state"] = extra_state + except Exception: + pass try: import json @@ -1687,8 +1887,17 @@ def _load_config(self) -> None: # Load toggles if "artifact_detection_enabled" in config: self.cb_artifact.setChecked(config["artifact_detection_enabled"]) + if "artifact_overlay_visible" in config: + self.cb_show_artifact_overlay.setChecked(bool(config["artifact_overlay_visible"])) if "filtering_enabled" in config: self.cb_filtering.setChecked(config["filtering_enabled"]) + if callable(self._config_state_importer): + try: + ui_state = config.get("ui_state") + if isinstance(ui_state, dict): + self._config_state_importer(ui_state) + except Exception: + pass QtWidgets.QMessageBox.information(self, "Success", "Configuration loaded successfully.") except Exception as e: @@ -1760,10 +1969,16 @@ def set_params(self, params: ProcessingParams) -> None: self._update_lambda_preview() self._update_output_definition() self._update_output_controls() + self._update_section_summaries() def set_fs_info(self, fs_actual: float, fs_target: float, fs_used: float) -> None: - self.lbl_fs.setText(f"FS: actual={fs_actual:.2f} Hz → used={fs_used:.2f} Hz (target={fs_target:.2f})") + self.lbl_fs.setText(f"FS: actual={fs_actual:.2f} Hz -> used={fs_used:.2f} Hz (target={fs_target:.2f})") + + def artifact_overlay_visible(self) -> bool: + return bool(self.cb_show_artifact_overlay.isChecked()) + def set_artifact_overlay_visible(self, visible: bool) -> None: + self.cb_show_artifact_overlay.setChecked(bool(visible)) # ----------------------------- Plot dashboard ----------------------------- @@ -1831,15 +2046,21 @@ class PlotDashboard(QtWidgets.QWidget): clearManualRegionsRequested = QtCore.Signal() showArtifactsRequested = QtCore.Signal() boxSelectionCleared = QtCore.Signal() + artifactThresholdsToggled = QtCore.Signal(bool) xRangeChanged = QtCore.Signal(float, float) def __init__(self, parent=None) -> None: super().__init__(parent) self._sync_guard = False + self._artifact_overlay_visible = True + self._artifact_thresholds_visible = True self._artifact_regions: List[pg.LinearRegionItem] = [] self._artifact_region_bounds: List[Tuple[float, float]] = [] self._artifact_labels: List[pg.TextItem] = [] + self._last_overlay_time: Optional[np.ndarray] = None + self._last_overlay_signal: Optional[np.ndarray] = None + self._last_overlay_regions: List[Tuple[float, float]] = [] self._artifact_pen_default = pg.mkPen((240, 130, 90), width=1.0) self._artifact_brush_default = pg.mkBrush(240, 130, 90, 40) self._artifact_pen_selected = pg.mkPen((255, 220, 120), width=2.0) @@ -1853,23 +2074,41 @@ def _build_ui(self) -> None: top = QtWidgets.QHBoxLayout() self.lbl_title = QtWidgets.QLabel("No file loaded") self.lbl_title.setStyleSheet("font-weight: 900; font-size: 12pt;") + self.lbl_status = QtWidgets.QLabel("Channel: - | A/D: None | Fs: - -> - Hz | Mode: -") + self.lbl_status.setProperty("class", "hint") + self.lbl_status.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) top.addWidget(self.lbl_title) top.addStretch(1) + top.addWidget(self.lbl_status) + v.addLayout(top) + tools = QtWidgets.QHBoxLayout() self.btn_add_region = QtWidgets.QPushButton("Add from selector") self.btn_clear_regions = QtWidgets.QPushButton("Clear manual") - self.btn_artifacts = QtWidgets.QPushButton("Artifacts…") + self.btn_artifacts = QtWidgets.QPushButton("Artifacts") self.btn_box_select = QtWidgets.QPushButton("Box select") self.btn_box_select.setCheckable(True) - self.btn_box_select.setProperty("class", "compactSmall") - top.addWidget(self.btn_add_region) - top.addWidget(self.btn_clear_regions) - top.addWidget(self.btn_artifacts) - top.addWidget(self.btn_box_select) - v.addLayout(top) + self.btn_thresholds = QtWidgets.QPushButton("Thresholds: ON") + self.btn_thresholds.setCheckable(True) + self.btn_thresholds.setChecked(True) + for b in ( + self.btn_add_region, + self.btn_clear_regions, + self.btn_artifacts, + self.btn_box_select, + self.btn_thresholds, + ): + b.setProperty("class", "compactSmall") + tools.addWidget(self.btn_add_region) + tools.addWidget(self.btn_clear_regions) + tools.addWidget(self.btn_artifacts) + tools.addWidget(self.btn_box_select) + tools.addWidget(self.btn_thresholds) + tools.addStretch(1) + v.addLayout(tools) self._raw_vb = ArtifactSelectViewBox() - self.plot_raw = pg.PlotWidget(viewBox=self._raw_vb, title="Raw signals (465 / 405)") + self.plot_raw = pg.PlotWidget(viewBox=self._raw_vb, title="Raw signals (465 /405)") self.plot_proc = pg.PlotWidget(title="Filtered + baselines") self.plot_out = pg.PlotWidget(title="Output") for w in (self.plot_raw, self.plot_proc, self.plot_out): @@ -1909,14 +2148,17 @@ def _build_ui(self) -> None: ) self.curve_out = self.plot_out.plot(pen=pg.mkPen((90, 190, 255), width=1.2)) + self._raw_y_curves = [self.curve_465, self.curve_405, self.curve_b465_raw, self.curve_b405_raw] + self._proc_y_curves = [self.curve_f465, self.curve_f405, self.curve_b465, self.curve_b405] + self._out_y_curves = [self.curve_out] self.selector = pg.LinearRegionItem(values=(0, 1), brush=(80, 120, 200, 60)) self.plot_raw.addItem(self.selector) self._dio_pen = pg.mkPen((230, 180, 80), width=1.2) - self.vb_dio_raw, self.curve_dio_raw = self._add_dio_axis(self.plot_raw, "DIO") - self.vb_dio_proc, self.curve_dio_proc = self._add_dio_axis(self.plot_proc, "DIO") - self.vb_dio_out, self.curve_dio_out = self._add_dio_axis(self.plot_out, "DIO") + self.vb_dio_raw, self.curve_dio_raw = self._add_dio_axis(self.plot_raw, "A/D") + self.vb_dio_proc, self.curve_dio_proc = self._add_dio_axis(self.plot_proc, "A/D") + self.vb_dio_out, self.curve_dio_out = self._add_dio_axis(self.plot_out, "A/D") self.lbl_log = QtWidgets.QLabel("") self.lbl_log.setProperty("class", "hint") @@ -1934,6 +2176,7 @@ def _build_ui(self) -> None: self.btn_clear_regions.clicked.connect(self.clearManualRegionsRequested.emit) self.btn_artifacts.clicked.connect(self.showArtifactsRequested.emit) self.btn_box_select.toggled.connect(self._toggle_box_select) + self.btn_thresholds.toggled.connect(self._on_thresholds_toggled) self.plot_raw.getViewBox().sigXRangeChanged.connect(self._emit_xrange_from_any) self.plot_proc.getViewBox().sigXRangeChanged.connect(self._emit_xrange_from_any) @@ -1942,6 +2185,7 @@ def _build_ui(self) -> None: self._raw_vb.dragSelectionFinished.connect(self._on_drag_select_finished) self._raw_vb.dragSelectionCleared.connect(self._on_drag_select_cleared) + self._sync_artifact_threshold_curves_visibility() self._toggle_box_select(False) def _add_dio_axis(self, plot: pg.PlotWidget, label: str): @@ -1990,6 +2234,19 @@ def _toggle_box_select(self, enabled: bool) -> None: self._raw_vb.set_drag_enabled(enabled) self.btn_box_select.setText("Box select: ON" if enabled else "Box select") + def _sync_artifact_threshold_curves_visibility(self) -> None: + visible = bool(self._artifact_thresholds_visible) + self.curve_thr_hi.setVisible(visible) + self.curve_thr_lo.setVisible(visible) + self.btn_thresholds.blockSignals(True) + self.btn_thresholds.setChecked(visible) + self.btn_thresholds.setText("Thresholds: ON" if visible else "Thresholds: OFF") + self.btn_thresholds.blockSignals(False) + + def _on_thresholds_toggled(self, checked: bool) -> None: + self.set_artifact_thresholds_visible(bool(checked)) + self.artifactThresholdsToggled.emit(bool(checked)) + def set_xrange_all(self, x0: float, x1: float) -> None: self._sync_guard = True try: @@ -2007,10 +2264,67 @@ def set_full_xrange(self, t: np.ndarray) -> None: if not np.isfinite(x0) or not np.isfinite(x1) or x0 == x1: return self.set_xrange_all(x0, x1) + self.auto_range_all(x0=x0, x1=x1) + + def _auto_range_plot( + self, + plot: pg.PlotWidget, + curves: List[pg.PlotCurveItem], + x0: Optional[float], + x1: Optional[float], + ) -> None: + ymins: List[float] = [] + ymaxs: List[float] = [] + for curve in curves: + try: + xx, yy = curve.getData() + except Exception: + continue + if xx is None or yy is None: + continue + x = np.asarray(xx, float) + y = np.asarray(yy, float) + if x.size == 0 or y.size == 0: + continue + m = np.isfinite(x) & np.isfinite(y) + if x0 is not None and x1 is not None: + m &= (x >= float(x0)) & (x <= float(x1)) + if not np.any(m): + continue + yv = y[m] + ymins.append(float(np.nanmin(yv))) + ymaxs.append(float(np.nanmax(yv))) + + if ymins and ymaxs: + ymin = min(ymins) + ymax = max(ymaxs) + if not np.isfinite(ymin) or not np.isfinite(ymax): + return + if ymin == ymax: + span = abs(ymin) if ymin != 0 else 1.0 + ymin -= 0.5 * span + ymax += 0.5 * span + plot.setYRange(float(ymin), float(ymax), padding=0.08) + else: + try: + plot.getPlotItem().enableAutoRange(axis=pg.ViewBox.YAxis, enable=True) + plot.getPlotItem().autoRange() + except Exception: + pass + + def auto_range_all(self, x0: Optional[float] = None, x1: Optional[float] = None) -> None: + if x0 is not None and x1 is not None and np.isfinite(x0) and np.isfinite(x1) and x1 > x0: + self.set_xrange_all(float(x0), float(x1)) + self._auto_range_plot(self.plot_raw, self._raw_y_curves, x0, x1) + self._auto_range_plot(self.plot_proc, self._proc_y_curves, x0, x1) + self._auto_range_plot(self.plot_out, self._out_y_curves, x0, x1) def set_title(self, text: str) -> None: self.lbl_title.setText(text) + def set_status(self, text: str) -> None: + self.lbl_status.setText(text or "") + def set_log(self, msg: str) -> None: self.lbl_log.setText(msg) @@ -2047,7 +2361,12 @@ def _update_artifact_overlays( raw_sig: np.ndarray, regions: Optional[List[Tuple[float, float]]], ) -> None: + self._last_overlay_time = None if t is None else np.asarray(t, float) + self._last_overlay_signal = None if raw_sig is None else np.asarray(raw_sig, float) + self._last_overlay_regions = list(regions or []) self._clear_artifact_overlays() + if not self._artifact_overlay_visible: + return if t is None or raw_sig is None or not regions: return tt = np.asarray(t, float) @@ -2077,6 +2396,28 @@ def _update_artifact_overlays( self.plot_raw.addItem(label) self._artifact_labels.append(label) + def set_artifact_overlay_visible(self, visible: bool) -> None: + self._artifact_overlay_visible = bool(visible) + if not self._artifact_overlay_visible: + self._clear_artifact_overlays() + return + if self._last_overlay_time is not None and self._last_overlay_signal is not None: + self._update_artifact_overlays( + self._last_overlay_time, + self._last_overlay_signal, + self._last_overlay_regions, + ) + + def artifact_overlay_visible(self) -> bool: + return bool(self._artifact_overlay_visible) + + def set_artifact_thresholds_visible(self, visible: bool) -> None: + self._artifact_thresholds_visible = bool(visible) + self._sync_artifact_threshold_curves_visibility() + + def artifact_thresholds_visible(self) -> bool: + return bool(self._artifact_thresholds_visible) + def highlight_artifact_regions(self, regions: List[Tuple[float, float]]) -> None: if not self._artifact_regions or not self._artifact_region_bounds: return @@ -2111,13 +2452,13 @@ def _set_dio(self, t: np.ndarray, dio: Optional[np.ndarray], name: str = "") -> self.curve_dio_out.setData(tt, yy, connect="finite", skipFiniteCheck=True) if name: - self.plot_raw.getPlotItem().getAxis("right").setLabel(f"DIO ({name})") - self.plot_proc.getPlotItem().getAxis("right").setLabel(f"DIO ({name})") - self.plot_out.getPlotItem().getAxis("right").setLabel(f"DIO ({name})") + self.plot_raw.getPlotItem().getAxis("right").setLabel(f"A/D ({name})") + self.plot_proc.getPlotItem().getAxis("right").setLabel(f"A/D ({name})") + self.plot_out.getPlotItem().getAxis("right").setLabel(f"A/D ({name})") else: - self.plot_raw.getPlotItem().getAxis("right").setLabel("DIO") - self.plot_proc.getPlotItem().getAxis("right").setLabel("DIO") - self.plot_out.getPlotItem().getAxis("right").setLabel("DIO") + self.plot_raw.getPlotItem().getAxis("right").setLabel("A/D") + self.plot_proc.getPlotItem().getAxis("right").setLabel("A/D") + self.plot_out.getPlotItem().getAxis("right").setLabel("A/D") # -------------------- Compatibility API expected by main.py -------------------- @@ -2147,6 +2488,7 @@ def show_raw(self, *args, **kwargs) -> None: self.curve_405.setData([], []) self.curve_thr_hi.setData([], []) self.curve_thr_lo.setData([], []) + self._sync_artifact_threshold_curves_visibility() self._set_dio(np.asarray([]), None, "") return @@ -2162,7 +2504,7 @@ def show_raw(self, *args, **kwargs) -> None: self.set_full_xrange(t) self._clear_artifact_overlays() - # Thresholds (either scalars or arrays) — MUST NOT use "or" on arrays + # Thresholds (either scalars or arrays): do not use "or" on arrays. thr_hi = _first_not_none(kwargs, "thr_hi", "raw_thr_hi", "mad_hi", "hi_thr") thr_lo = _first_not_none(kwargs, "thr_lo", "raw_thr_lo", "mad_lo", "lo_thr") @@ -2179,6 +2521,7 @@ def show_raw(self, *args, **kwargs) -> None: nn = min(t.size, th.size, tl.size) self.curve_thr_hi.setData(t[:nn], th[:nn], connect="finite", skipFiniteCheck=True) self.curve_thr_lo.setData(t[:nn], tl[:nn], connect="finite", skipFiniteCheck=True) + self._sync_artifact_threshold_curves_visibility() # Baselines for raw plot (if available) baseline_sig = _first_not_none(kwargs, "baseline_sig", "b_sig", "sig_base") @@ -2312,3 +2655,4 @@ def update_plots(self, processed: ProcessedTrial) -> None: dio=processed.dio, dio_name=processed.dio_name ) self._update_artifact_overlays(t, processed.raw_signal, processed.artifact_regions_sec) + diff --git a/pyBer/gui_widgets.py b/pyBer/gui_widgets.py index 70af07d..c91981c 100644 --- a/pyBer/gui_widgets.py +++ b/pyBer/gui_widgets.py @@ -513,7 +513,7 @@ def __init__(self, parent=None) -> None: self.btn_artifacts = QtWidgets.QPushButton("Artifacts…") form.addRow("Channel (preview)", self.combo_channel) - form.addRow("Digital trigger (overlay)", self.combo_trigger) + form.addRow("Analog/Digital channel (overlay)", self.combo_trigger) form.addRow(self.chk_split) form.addRow(self.btn_metadata) form.addRow(self.btn_update) diff --git a/pyBer/main.py b/pyBer/main.py index 8b910b8..f6cac33 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -1,6 +1,6 @@ # main.py """ -Fiber Photometry Processor (Doric .doric) — PySide6 + pyqtgraph +Fiber Photometry Processor (Doric .doric) - PySide6 + pyqtgraph Run: python main.py @@ -13,9 +13,10 @@ import os import json +import logging from typing import Callable, Dict, List, Optional, Tuple -from PySide6 import QtCore, QtWidgets +from PySide6 import QtCore, QtGui, QtWidgets import pyqtgraph as pg import h5py @@ -34,11 +35,81 @@ safe_divide, _lowpass_sos, ) -from gui_preprocessing import FileQueuePanel, ParameterPanel, PlotDashboard, MetadataDialog, ArtifactPanel, AdvancedOptionsDialog +from gui_preprocessing import ( + FileQueuePanel, + ParameterPanel, + PlotDashboard, + MetadataDialog, + ArtifactPanel, + AdvancedOptionsDialog, +) from gui_postprocessing import PostProcessingPanel from styles import APP_QSS import numpy as np + +def _dock_area_to_int(value: object, fallback: int = 2) -> int: + """ + Convert Qt DockWidgetArea enum/flag objects (or stored values) to int safely. + Some PySide6 builds do not allow int(Qt enum) directly. + """ + try: + enum_value = getattr(value, "value", None) + if enum_value is not None: + return int(enum_value) + except Exception: + pass + try: + if isinstance(value, str): + v = value.strip().lower() + if "left" in v: + return 1 + if "right" in v: + return 2 + if "top" in v: + return 4 + if "bottom" in v: + return 8 + except Exception: + pass + try: + return int(value) + except Exception: + return int(fallback) + + +def _to_bool(value: object, default: bool = False) -> bool: + """ + Convert mixed QSettings bool payloads (bool/int/str) safely. + """ + if isinstance(value, bool): + return value + if value is None: + return bool(default) + if isinstance(value, (int, float)): + return bool(value) + if isinstance(value, str): + v = value.strip().lower() + if v in {"1", "true", "yes", "y", "on"}: + return True + if v in {"0", "false", "no", "n", "off", ""}: + return False + return bool(default) + + +_DOCK_STATE_VERSION = 3 +# Dock snapshot keys are versioned because object names changed from pre_/post_ +# to pre./post. and old blobs are incompatible with restoreState. +_PRE_DOCK_STATE_KEY = "pre_main_dock_state_v4" +_POST_DOCK_STATE_KEY = "post_main_dock_state_v4" +_PRE_TAB_GROUPS_KEY = "pre_tab_groups_v1" +_PRE_DOCK_PREFIX = "pre." +_POST_DOCK_PREFIX = "post." +_FORCE_FIXED_DOCK_LAYOUTS = True + +_LOG = logging.getLogger(__name__) + + def _rolling_corr(x: np.ndarray, y: np.ndarray, win: int) -> Tuple[np.ndarray, np.ndarray]: x = np.asarray(x, float) y = np.asarray(y, float) @@ -192,6 +263,12 @@ def __init__(self) -> None: super().__init__() self.setWindowTitle("Pyber - Fiber Photometry") self.resize(1500, 900) + self.setDockOptions( + QtWidgets.QMainWindow.DockOption.AllowNestedDocks + | QtWidgets.QMainWindow.DockOption.AllowTabbedDocks + | QtWidgets.QMainWindow.DockOption.AnimatedDocks + ) + self.setDockNestingEnabled(True) # Core self.processor = PhotometryProcessor() @@ -213,6 +290,31 @@ def __init__(self) -> None: self._advanced_dialog: Optional[AdvancedOptionsDialog] = None self._box_select_callback: Optional[Callable[[float, float], None]] = None self._last_artifact_params: Optional[Tuple[object, ...]] = None + self._section_docks: Dict[str, QtWidgets.QDockWidget] = {} + self._shortcuts: List[QtGui.QShortcut] = [] + self._last_opened_section: Optional[str] = None + self._section_popup_initialized: set[str] = set() + self._is_restoring_panel_layout: bool = False + # Prevent startup widget initialization from overwriting previously saved panel layout. + self._panel_layout_persistence_ready: bool = False + # Prevent temporary tab-switch popup visibility changes from overwriting persisted layout. + self._suspend_panel_layout_persistence: bool = False + self._pre_popups_hidden_by_tab_switch: bool = False + self._pre_section_visibility_before_tab_switch: Dict[str, bool] = {} + self._pre_section_state_before_tab_switch: Dict[str, Dict[str, object]] = {} + self._pre_artifact_visible_before_tab_switch: bool = False + self._pre_artifact_state_before_tab_switch: Dict[str, object] = {} + self._pre_advanced_visible_before_tab_switch: bool = False + self._pre_main_dock_state_before_tab_switch: Optional[QtCore.QByteArray] = None + self._pre_tab_groups_before_tab_switch: List[Dict[str, object]] = [] + self._pre_last_interacted_dock_name: Optional[str] = None + self._pre_snapshot_applied: bool = False + self._pre_snapshot_retry_attempts: int = 0 + self._pre_snapshot_retry_scheduled: bool = False + self._pre_snapshot_max_retries: int = 6 + self._post_docks_ready: bool = False + self._handling_main_tab_change: bool = False + self._force_fixed_dock_layouts: bool = bool(_FORCE_FIXED_DOCK_LAYOUTS) # Worker infra (stable) self._pool = QtCore.QThreadPool.globalInstance() @@ -227,9 +329,13 @@ def __init__(self) -> None: # Settings (persist folder + params) self.settings = QtCore.QSettings("FiberPhotometryApp", "DoricProcessor") + self._migrate_legacy_dock_state_settings() + # Load panel layout JSON into QSettings before UI is built. + self._load_panel_config_json_into_settings() self._build_ui() self._restore_settings() + self._panel_layout_persistence_ready = True # ---------------- UI ---------------- @@ -238,56 +344,125 @@ def _build_ui(self) -> None: self.tabs = QtWidgets.QTabWidget() self.setCentralWidget(self.tabs) + self._status_bar = QtWidgets.QStatusBar(self) + self.setStatusBar(self._status_bar) # Preprocessing tab - pre = QtWidgets.QWidget() - self.tabs.addTab(pre, "Preprocessing") + self.pre_tab = QtWidgets.QWidget() + self.tabs.addTab(self.pre_tab, "Preprocessing") - self.file_panel = FileQueuePanel() - self.param_panel = ParameterPanel() - self.plots = PlotDashboard() - self.artifact_panel = ArtifactPanel() + self.file_panel = FileQueuePanel(self.pre_tab) + self.param_panel = ParameterPanel(self.pre_tab) + self.param_panel.setVisible(False) + self.plots = PlotDashboard(self.pre_tab) + self.artifact_panel = ArtifactPanel(self.pre_tab) # Right artifact panel dock (hidden by default) - self.art_dock = QtWidgets.QDockWidget("Artifacts", self) + self.art_dock = QtWidgets.QDockWidget("Artifacts list", self) + self.art_dock.setObjectName("pre.artifact.dock") self.art_dock.setWidget(self.artifact_panel) self.art_dock.setAllowedAreas(QtCore.Qt.DockWidgetArea.RightDockWidgetArea) self.art_dock.setVisible(False) + self.art_dock.visibilityChanged.connect(lambda *_: self._save_panel_layout_state()) + self.art_dock.topLevelChanged.connect(lambda *_: self._save_panel_layout_state()) + self.art_dock.dockLocationChanged.connect(lambda *_: self._save_panel_layout_state()) + self.art_dock.installEventFilter(self) + self.artifact_panel.installEventFilter(self) self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.art_dock) - # Left column: file + selection + buttons + parameters, all scrollable - left_container = QtWidgets.QWidget() - left_v = QtWidgets.QVBoxLayout(left_container) - left_v.setContentsMargins(0, 0, 0, 0) - left_v.setSpacing(10) - left_v.addWidget(self.file_panel) - left_v.addWidget(self.param_panel, stretch=1) - - left_scroll = QtWidgets.QScrollArea() - left_scroll.setWidgetResizable(True) - left_scroll.setMinimumWidth(160) - left_scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) - left_scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) - left_scroll.setWidget(left_container) - - # Make panels resizable: left | plots (right dock already resizable by Qt) - splitter = QtWidgets.QSplitter(QtCore.Qt.Orientation.Horizontal) - splitter.addWidget(left_scroll) - splitter.addWidget(self.plots) - splitter.setStretchFactor(0, 0) - splitter.setStretchFactor(1, 1) - # Set initial sizes: smaller left panel, larger visualization - splitter.setSizes([160, 1540]) # Narrower left panel to favor plots - # Connect splitter size changes to save settings - splitter.splitterMoved.connect(self._save_splitter_sizes) - - pre_layout = QtWidgets.QVBoxLayout(pre) + # Left pane: data browser + self.file_panel.setMinimumWidth(320) + self.file_panel.setMaximumWidth(380) + self.file_panel.setSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Expanding) + + # Center pane: workflow toolbar + plots + self.btn_workflow_load = QtWidgets.QPushButton("Load") + self.btn_workflow_load.setProperty("class", "blueSecondarySmall") + self.menu_workflow_load = QtWidgets.QMenu(self.btn_workflow_load) + self.act_open_file = self.menu_workflow_load.addAction("Open File...") + self.act_add_folder = self.menu_workflow_load.addAction("Add Folder...") + self.menu_workflow_load.addSeparator() + self.act_focus_data = self.menu_workflow_load.addAction("Focus Data Browser") + self.btn_workflow_load.setMenu(self.menu_workflow_load) + + self.btn_workflow_artifacts = QtWidgets.QPushButton("Detected artifacts") + self.btn_workflow_qc = QtWidgets.QPushButton("QC") + self.btn_workflow_export = QtWidgets.QPushButton("Export") + self.btn_toggle_data = QtWidgets.QPushButton("Data") + self.btn_toggle_data.setCheckable(True) + self.btn_toggle_data.setChecked(True) + self.btn_toggle_data.setProperty("class", "blueSecondarySmall") + self.btn_workflow_export.setProperty("class", "bluePrimarySmall") + for b in (self.btn_workflow_artifacts, self.btn_workflow_qc): + b.setProperty("class", "blueSecondarySmall") + + # Inline parameter section buttons (same row as workflow actions). + self.btn_section_artifacts = QtWidgets.QPushButton("Artifacts") + self.btn_section_filtering = QtWidgets.QPushButton("Filtering") + self.btn_section_baseline = QtWidgets.QPushButton("Baseline") + self.btn_section_output = QtWidgets.QPushButton("Output") + self.btn_section_qc = QtWidgets.QPushButton("QC") + self.btn_section_export = QtWidgets.QPushButton("Export") + self.btn_section_config = QtWidgets.QPushButton("Configuration") + self._section_buttons: Dict[str, QtWidgets.QPushButton] = { + "artifacts": self.btn_section_artifacts, + "filtering": self.btn_section_filtering, + "baseline": self.btn_section_baseline, + "output": self.btn_section_output, + "qc": self.btn_section_qc, + "export": self.btn_section_export, + "config": self.btn_section_config, + } + for btn in self._section_buttons.values(): + btn.setCheckable(True) + btn.setProperty("class", "blueSecondarySmall") + btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + + workflow_row = QtWidgets.QHBoxLayout() + workflow_row.setContentsMargins(0, 0, 0, 0) + workflow_row.setSpacing(6) + workflow_row.addWidget(self.btn_toggle_data) + workflow_row.addWidget(self.btn_workflow_load) + workflow_row.addWidget(self.btn_workflow_artifacts) + workflow_row.addWidget(self.btn_workflow_qc) + workflow_row.addWidget(self.btn_workflow_export) + workflow_row.addSpacing(8) + workflow_row.addWidget(QtWidgets.QLabel("Parameters:")) + for btn in self._section_buttons.values(): + workflow_row.addWidget(btn) + workflow_row.addStretch(1) + + center_widget = QtWidgets.QWidget() + center_v = QtWidgets.QVBoxLayout(center_widget) + center_v.setContentsMargins(0, 0, 0, 0) + center_v.setSpacing(6) + center_v.addLayout(workflow_row) + center_v.addWidget(self.plots, stretch=1) + + # Main splitter: data panel + visuals. Parameter popups are floating by default. + self.pre_splitter = QtWidgets.QSplitter(QtCore.Qt.Orientation.Horizontal) + self.pre_splitter.setObjectName("preprocessing_splitter") + self.pre_splitter.addWidget(self.file_panel) + self.pre_splitter.addWidget(center_widget) + self.pre_splitter.setChildrenCollapsible(False) + self.pre_splitter.setStretchFactor(0, 0) + self.pre_splitter.setStretchFactor(1, 1) + self.pre_splitter.setSizes([350, 1350]) + self.pre_splitter.splitterMoved.connect(self._save_splitter_sizes) + + pre_layout = QtWidgets.QVBoxLayout(self.pre_tab) pre_layout.setContentsMargins(10, 10, 10, 10) - pre_layout.addWidget(splitter) + pre_layout.addWidget(self.pre_splitter) # Postprocessing tab self.post_tab = PostProcessingPanel() + if hasattr(self.post_tab, "set_force_fixed_default_layout"): + try: + self.post_tab.set_force_fixed_default_layout(self._force_fixed_dock_layouts) + except Exception: + pass self.tabs.addTab(self.post_tab, "Post Processing") + self.post_tab.statusUpdate.connect(self._show_status_message) # Wiring - file panel self.file_panel.openFileRequested.connect(self._open_files_dialog) @@ -305,8 +480,34 @@ def _build_ui(self) -> None: self.file_panel.qcRequested.connect(self._run_qc_dialog) self.file_panel.batchQcRequested.connect(self._run_batch_qc) - # Parameters -> debounce preview + # Parameters: changes and actions self.param_panel.paramsChanged.connect(self._on_params_changed) + self.param_panel.previewRequested.connect(self._trigger_preview) + self.param_panel.metadataRequested.connect(self._edit_metadata_for_current) + self.param_panel.exportRequested.connect(self._export_selected_or_all) + self.param_panel.artifactsRequested.connect(self._toggle_artifacts_panel) + self.param_panel.artifactOverlayToggled.connect(self._on_artifact_overlay_toggled) + self.param_panel.advancedOptionsRequested.connect(self._open_advanced_options) + self.param_panel.qcRequested.connect(self._run_qc_dialog) + self.param_panel.batchQcRequested.connect(self._run_batch_qc) + self.param_panel.set_config_state_hooks( + self._export_preprocessing_ui_state_for_config, + self._import_preprocessing_ui_state_from_config, + ) + + # Workflow toolbar + self.act_open_file.triggered.connect(self._open_files_dialog) + self.act_add_folder.triggered.connect(self._open_folder_dialog) + self.act_focus_data.triggered.connect(self._focus_data_browser) + self.btn_toggle_data.toggled.connect(self._set_data_panel_visible) + self.btn_workflow_artifacts.clicked.connect(self._toggle_artifacts_panel) + self.btn_workflow_qc.clicked.connect(self._run_qc_dialog) + self.btn_workflow_export.clicked.connect(self._export_selected_or_all) + + # Section popup controls + self._setup_section_popups() + for key, btn in self._section_buttons.items(): + btn.toggled.connect(lambda checked, section_key=key: self._toggle_section_popup(section_key, checked)) # Plot sync self.plots.xRangeChanged.connect(self.plots.set_xrange_all) @@ -317,6 +518,7 @@ def _build_ui(self) -> None: self.plots.clearManualRegionsRequested.connect(self._clear_manual_regions_current) self.plots.showArtifactsRequested.connect(self._toggle_artifacts_panel) self.plots.boxSelectionCleared.connect(self._cancel_box_select_request) + self.plots.artifactThresholdsToggled.connect(self._on_artifact_thresholds_toggled) self.artifact_panel.regionsChanged.connect(self._artifact_regions_changed) self.artifact_panel.selectionChanged.connect(self.plots.highlight_artifact_regions) @@ -325,9 +527,1101 @@ def _build_ui(self) -> None: self.post_tab.requestCurrentProcessed.connect(self._post_get_current_processed) self.post_tab.requestDioList.connect(self._post_get_current_dio_list) self.post_tab.requestDioData.connect(self._post_get_dio_data_for_path) + self.tabs.currentChanged.connect(self._on_main_tab_changed) + self._init_shortcuts() + self.plots.set_artifact_overlay_visible(self.param_panel.artifact_overlay_visible()) + self.plots.set_artifact_thresholds_visible(True) + self._update_plot_status() self.setAcceptDrops(True) + def _setup_section_popups(self) -> None: + """Create one floating popup per processing section and reuse existing controls.""" + # Move section cards out of the hidden ParameterPanel container and into docks. + root_layout = self.param_panel.layout() + section_cards = [ + self.param_panel.card_artifacts, + self.param_panel.card_filtering, + self.param_panel.card_baseline, + self.param_panel.card_output, + self.param_panel.card_actions, + ] + if root_layout is not None: + for w in section_cards: + root_layout.removeWidget(w) + w.setParent(None) + self.param_panel.card_actions.setVisible(False) + + section_widgets: Dict[str, QtWidgets.QWidget] = { + "artifacts": self.param_panel.card_artifacts, + "filtering": self.param_panel.card_filtering, + "baseline": self.param_panel.card_baseline, + "output": self.param_panel.card_output, + "qc": self._build_qc_actions_widget(), + "export": self._build_export_actions_widget(), + "config": self._build_config_actions_widget(), + } + section_titles: Dict[str, str] = { + "artifacts": "Artifacts", + "filtering": "Filtering", + "baseline": "Baseline", + "output": "Output", + "qc": "QC", + "export": "Export", + "config": "Configuration", + } + + for key, title in section_titles.items(): + widget = section_widgets[key] + dock = QtWidgets.QDockWidget(title, self) + dock.setObjectName(f"pre.{key}.dock") + dock.setAllowedAreas(QtCore.Qt.DockWidgetArea.AllDockWidgetAreas) + dock.setFeatures( + QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetFloatable + ) + dock.setWidget(widget) + dock.visibilityChanged.connect(lambda visible, section_key=key: self._on_section_dock_visibility(section_key, visible)) + dock.topLevelChanged.connect(lambda *_: self._save_panel_layout_state()) + dock.dockLocationChanged.connect(lambda *_: self._save_panel_layout_state()) + # Register with main window once; each popup opens floating by default. + self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) + dock.setFloating(True) + dock.hide() + dock.installEventFilter(self) + widget.installEventFilter(self) + self._section_docks[key] = dock + + def _build_qc_actions_widget(self) -> QtWidgets.QWidget: + panel = QtWidgets.QWidget() + v = QtWidgets.QVBoxLayout(panel) + v.setContentsMargins(8, 8, 8, 8) + v.setSpacing(6) + self.param_panel.btn_qc.setProperty("class", "blueSecondarySmall") + self.param_panel.btn_qc_batch.setProperty("class", "blueSecondarySmall") + self.param_panel.btn_artifacts_panel.setProperty("class", "blueSecondarySmall") + v.addWidget(self.param_panel.btn_qc) + v.addWidget(self.param_panel.btn_qc_batch) + v.addWidget(self.param_panel.btn_artifacts_panel) + v.addWidget(self.param_panel.lbl_fs) + v.addStretch(1) + return panel + + def _build_export_actions_widget(self) -> QtWidgets.QWidget: + panel = QtWidgets.QWidget() + v = QtWidgets.QVBoxLayout(panel) + v.setContentsMargins(8, 8, 8, 8) + v.setSpacing(6) + self.param_panel.btn_export.setProperty("class", "bluePrimarySmall") + v.addWidget(self.param_panel.btn_export) + v.addStretch(1) + return panel + + def _build_config_actions_widget(self) -> QtWidgets.QWidget: + panel = QtWidgets.QWidget() + row = QtWidgets.QHBoxLayout(panel) + row.setContentsMargins(8, 8, 8, 8) + row.setSpacing(6) + self.param_panel.btn_metadata.setProperty("class", "blueSecondarySmall") + self.param_panel.btn_advanced.setProperty("class", "blueSecondarySmall") + self.param_panel.btn_save_config.setProperty("class", "blueSecondarySmall") + self.param_panel.btn_load_config.setProperty("class", "blueSecondarySmall") + for btn in ( + self.param_panel.btn_metadata, + self.param_panel.btn_advanced, + self.param_panel.btn_save_config, + self.param_panel.btn_load_config, + ): + btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + row.addWidget(btn) + return panel + + def _set_section_button_checked(self, key: str, checked: bool) -> None: + btn = self._section_buttons.get(key) + if btn is None: + return + btn.blockSignals(True) + btn.setChecked(bool(checked)) + btn.blockSignals(False) + + def _toggle_section_popup(self, key: str, checked: bool) -> None: + dock = self._section_docks.get(key) + if dock is None: + return + if checked: + if key not in self._section_popup_initialized or not self._is_popup_on_screen(dock): + dock.setFloating(True) + self._position_section_popup(dock) + self._section_popup_initialized.add(key) + dock.show() + dock.raise_() + dock.activateWindow() + self._last_opened_section = key + else: + dock.hide() + + def _on_section_dock_visibility(self, key: str, visible: bool) -> None: + self._set_section_button_checked(key, visible) + if not visible and self._last_opened_section == key: + self._last_opened_section = None + if visible: + self._last_opened_section = key + self._save_panel_layout_state() + + def _position_section_popup(self, dock: QtWidgets.QDockWidget) -> None: + """Place floating popups near the window while keeping them inside visible screen bounds.""" + geom = self.frameGeometry() + screen_rect = self._active_screen_geometry() + + pref_w, pref_h = self._default_popup_size(dock) + max_w = max(320, screen_rect.width() - 40) + max_h = max(260, screen_rect.height() - 40) + width = min(pref_w, max_w) + height = min(pref_h, max_h) + + # Prefer right side of main window, then fall back to left, then clamp. + x_right = geom.x() + geom.width() + 12 + x_left = geom.x() - width - 12 + y_pref = geom.y() + 60 + + x_min = screen_rect.x() + 10 + y_min = screen_rect.y() + 10 + x_max = screen_rect.x() + max(10, screen_rect.width() - width - 10) + y_max = screen_rect.y() + max(10, screen_rect.height() - height - 10) + + if x_right <= x_max: + x = x_right + elif x_left >= x_min: + x = x_left + else: + x = x_max + y = min(max(y_pref, y_min), y_max) + + dock.resize(width, height) + dock.move(int(x), int(y)) + + def _default_popup_size(self, dock: QtWidgets.QDockWidget) -> Tuple[int, int]: + """Compact default popup sizes, with smaller heights per section.""" + geom = self.frameGeometry() + name = str(dock.objectName() or "") + if name.startswith(f"{_PRE_DOCK_PREFIX}") and name.endswith(".dock"): + key = name[len(_PRE_DOCK_PREFIX):-len(".dock")] + else: + key = name + height_by_section = { + "artifacts": 380, + "filtering": 340, + "baseline": 380, + "output": 410, + "qc": 300, + "export": 270, + "config": 280, + } + pref_h = int(height_by_section.get(key, 340)) + pref_w = max(360, int(geom.width() * 0.24)) + return pref_w, pref_h + + def _active_screen_geometry(self) -> QtCore.QRect: + handle = self.windowHandle() + screen = handle.screen() if handle else None + if screen is None: + screen = QtGui.QGuiApplication.screenAt(self.frameGeometry().center()) + if screen is None: + screen = QtGui.QGuiApplication.primaryScreen() + if screen is None: + return QtCore.QRect(0, 0, 1920, 1080) + return screen.availableGeometry() + + def _is_popup_on_screen(self, dock: QtWidgets.QDockWidget) -> bool: + rect = dock.frameGeometry() + if rect.width() <= 0 or rect.height() <= 0: + return False + for screen in QtGui.QGuiApplication.screens(): + if screen.availableGeometry().intersects(rect): + return True + return False + + def eventFilter(self, obj: QtCore.QObject, event: QtCore.QEvent) -> bool: + try: + if event.type() in (QtCore.QEvent.Type.MouseButtonPress, QtCore.QEvent.Type.FocusIn): + dock: Optional[QtWidgets.QDockWidget] = None + if isinstance(obj, QtWidgets.QDockWidget): + dock = obj + elif isinstance(obj, QtWidgets.QWidget): + parent = obj + while parent is not None and not isinstance(parent, QtWidgets.QDockWidget): + parent = parent.parentWidget() + if isinstance(parent, QtWidgets.QDockWidget): + dock = parent + if dock is not None: + name = str(dock.objectName() or "") + if name.startswith(_PRE_DOCK_PREFIX): + self._pre_last_interacted_dock_name = name + except Exception: + pass + return super().eventFilter(obj, event) + + def getPreDockWidgets(self) -> List[QtWidgets.QDockWidget]: + docks: List[QtWidgets.QDockWidget] = list(self._section_docks.values()) + if hasattr(self, "art_dock") and isinstance(self.art_dock, QtWidgets.QDockWidget): + docks.append(self.art_dock) + seen: set[int] = set() + out: List[QtWidgets.QDockWidget] = [] + for dock in docks: + did = id(dock) + if did in seen: + continue + seen.add(did) + out.append(dock) + return out + + def getPostDockWidgets(self) -> List[QtWidgets.QDockWidget]: + docks: List[QtWidgets.QDockWidget] = [] + try: + self.post_tab.ensure_section_popups_initialized() + docks = list(self.post_tab.get_section_dock_widgets()) + except Exception: + docks = [] + if docks: + return docks + # Fallback for legacy sessions where post docks may already exist but not registered. + return [ + d for d in self.findChildren(QtWidgets.QDockWidget) + if str(d.objectName() or "").startswith(_POST_DOCK_PREFIX) + ] + + def _hide_dock_widgets(self, docks: List[QtWidgets.QDockWidget], *, remove: bool = True) -> None: + for dock in docks: + if dock is None: + continue + try: + dock.hide() + except Exception: + pass + if remove: + try: + self.removeDockWidget(dock) + except Exception: + pass + + def hideOtherTabDocks(self, tab_name: str) -> None: + if tab_name == "pre": + self._hide_dock_widgets(self.getPostDockWidgets(), remove=True) + elif tab_name == "post": + self._hide_dock_widgets(self.getPreDockWidgets(), remove=True) + # Final guard: keep post dock registry initialized before post restore paths run. + try: + self.post_tab.ensure_section_popups_initialized() + except Exception: + pass + + def _enforce_only_tab_docks_visible(self, tab_name: str) -> None: + self.hideOtherTabDocks(tab_name) + + def captureDockSnapshotForTab(self, tab_name: str) -> Optional[QtCore.QByteArray]: + """ + Capture a tab-scoped dock snapshot. Other-tab docks are hidden first so + QMainWindow.saveState() cannot serialize mixed-tab layouts. + """ + if tab_name not in {"pre", "post"}: + return None + try: + self.hideOtherTabDocks(tab_name) + QtWidgets.QApplication.processEvents(QtCore.QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + state = self.saveState(_DOCK_STATE_VERSION) + self.hideOtherTabDocks(tab_name) + if state is None or state.isEmpty(): + _LOG.warning("Dock snapshot capture returned empty state for tab=%s", tab_name) + return None + if not self._is_tab_scoped_dock_state(tab_name, state): + _LOG.warning("Discarding contaminated dock snapshot for tab=%s", tab_name) + return None + return state + except Exception: + _LOG.exception("Dock snapshot capture failed for tab=%s", tab_name) + return None + + def restoreDockSnapshotForTab(self, tab_name: str, state: QtCore.QByteArray) -> bool: + """ + Restore a tab-scoped dock snapshot with hard post-restore enforcement so + foreign tab docks cannot leak back into the active tab. + """ + if tab_name not in {"pre", "post"}: + return False + if state is None or state.isEmpty(): + return False + if not self._is_tab_scoped_dock_state(tab_name, state): + _LOG.warning("Rejecting invalid/contaminated dock snapshot for tab=%s", tab_name) + try: + if tab_name == "pre": + self.settings.remove(_PRE_DOCK_STATE_KEY) + else: + self.settings.remove(_POST_DOCK_STATE_KEY) + except Exception: + pass + return False + try: + self.hideOtherTabDocks(tab_name) + ok = bool(self.restoreState(state, _DOCK_STATE_VERSION)) + self.hideOtherTabDocks(tab_name) + self._enforce_only_tab_docks_visible(tab_name) + if not ok: + _LOG.warning("Dock snapshot restore failed for tab=%s", tab_name) + else: + _LOG.info("Dock snapshot restore succeeded for tab=%s", tab_name) + return ok + except Exception: + _LOG.exception("Dock snapshot restore crashed for tab=%s", tab_name) + return False + + def _capture_pre_tab_groups_state(self) -> List[Dict[str, object]]: + """ + Capture tabified pre-dock groups + active tab candidate for fallback restore. + """ + docks = [d for d in self.getPreDockWidgets() if not d.isFloating()] + by_name: Dict[str, QtWidgets.QDockWidget] = { + str(d.objectName()): d for d in docks if str(d.objectName() or "") + } + groups: List[Dict[str, object]] = [] + visited: set[str] = set() + for dock in docks: + name = str(dock.objectName() or "") + if not name or name in visited: + continue + members = [dock] + [d for d in self.tabifiedDockWidgets(dock) if d in docks] + member_names = sorted({str(d.objectName() or "") for d in members if str(d.objectName() or "")}) + if len(member_names) < 2: + continue + visited.update(member_names) + active = "" + if self._pre_last_interacted_dock_name and self._pre_last_interacted_dock_name in member_names: + active = self._pre_last_interacted_dock_name + if not active: + for n in member_names: + d = by_name.get(n) + if d is not None and d.isVisible(): + active = n + break + if not active: + active = member_names[0] + groups.append({"members": member_names, "active": active}) + return groups + + def _save_pre_tab_groups_to_settings(self, groups: List[Dict[str, object]]) -> None: + try: + self.settings.setValue(_PRE_TAB_GROUPS_KEY, json.dumps(groups)) + except Exception: + pass + + def _load_pre_tab_groups_from_settings(self) -> List[Dict[str, object]]: + try: + raw = self.settings.value(_PRE_TAB_GROUPS_KEY, "", type=str) + if not raw: + return [] + data = json.loads(raw) + if isinstance(data, list): + return [g for g in data if isinstance(g, dict)] + except Exception: + pass + return [] + + def _restore_pre_tab_groups_fallback(self, groups: List[Dict[str, object]]) -> None: + if not groups: + return + by_name = { + str(d.objectName() or ""): d for d in self.getPreDockWidgets() if str(d.objectName() or "") + } + for group in groups: + members_raw = group.get("members", []) + if not isinstance(members_raw, list): + continue + members = [by_name.get(str(n)) for n in members_raw] + members = [d for d in members if isinstance(d, QtWidgets.QDockWidget)] + members = [d for d in members if not d.isFloating()] + if len(members) < 2: + continue + root = members[0] + for d in members[1:]: + try: + self.tabifyDockWidget(root, d) + except Exception: + continue + active_name = str(group.get("active", "")) + active = by_name.get(active_name) + if isinstance(active, QtWidgets.QDockWidget) and active in members: + try: + active.show() + active.raise_() + active.setFocus(QtCore.Qt.FocusReason.OtherFocusReason) + self._pre_last_interacted_dock_name = active_name + except Exception: + pass + + def _schedule_pre_snapshot_retry(self, delay_ms: int) -> None: + if self._pre_snapshot_retry_scheduled: + return + self._pre_snapshot_retry_scheduled = True + QtCore.QTimer.singleShot(max(0, int(delay_ms)), self._retry_pre_snapshot_restore) + + def _retry_pre_snapshot_restore(self) -> None: + self._pre_snapshot_retry_scheduled = False + self._apply_pre_main_dock_snapshot_if_needed() + + def onPostDocksReady(self) -> None: + self.on_post_docks_ready() + + def on_post_docks_ready(self) -> None: + self._post_docks_ready = True + if self._force_fixed_dock_layouts: + self._pre_snapshot_applied = True + return + if not self._pre_snapshot_applied: + self._schedule_pre_snapshot_retry(0) + + def _set_data_panel_visible(self, visible: bool, persist: bool = True) -> None: + vis = bool(visible) + self.file_panel.setVisible(vis) + self.btn_toggle_data.blockSignals(True) + self.btn_toggle_data.setChecked(vis) + self.btn_toggle_data.blockSignals(False) + self._save_splitter_sizes() + if persist: + self._save_settings() + + def _toggle_data_panel_shortcut(self) -> None: + self._set_data_panel_visible(not self.file_panel.isVisible()) + + def _toggle_all_parameter_popups_shortcut(self) -> None: + any_open = any(d.isVisible() for d in self._section_docks.values()) + if any_open: + for key, dock in self._section_docks.items(): + dock.hide() + self._set_section_button_checked(key, False) + self._last_opened_section = None + return + self._toggle_section_shortcut("output") + + def _toggle_section_shortcut(self, key: str) -> None: + btn = self._section_buttons.get(key) + if btn is None: + return + next_state = not btn.isChecked() + self._set_section_button_checked(key, next_state) + self._toggle_section_popup(key, next_state) + + def _close_focused_popup(self) -> None: + fw = QtWidgets.QApplication.focusWidget() + while fw is not None and not isinstance(fw, QtWidgets.QDockWidget): + fw = fw.parentWidget() + if isinstance(fw, QtWidgets.QDockWidget): + fw.close() + return + if self._last_opened_section: + dock = self._section_docks.get(self._last_opened_section) + if dock is not None and dock.isVisible(): + dock.close() + + def _is_text_entry_focused(self) -> bool: + fw = QtWidgets.QApplication.focusWidget() + if fw is None: + return False + if isinstance(fw, (QtWidgets.QLineEdit, QtWidgets.QPlainTextEdit, QtWidgets.QTextEdit)): + return True + if isinstance(fw, (QtWidgets.QSpinBox, QtWidgets.QDoubleSpinBox, QtWidgets.QAbstractSpinBox)): + return True + if isinstance(fw, QtWidgets.QComboBox) and fw.isEditable(): + return True + return False + + def _bind_shortcut( + self, + sequence: str, + callback: Callable[[], None], + *, + require_non_text_focus: bool = False, + ) -> None: + shortcut = QtGui.QShortcut(QtGui.QKeySequence(sequence), self) + shortcut.setContext(QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) + + def _on_activated() -> None: + if self.tabs.currentWidget() is not self.pre_tab: + return + if require_non_text_focus and self._is_text_entry_focused(): + return + callback() + + shortcut.activated.connect(_on_activated) + self._shortcuts.append(shortcut) + + def _init_shortcuts(self) -> None: + # Keyboard-first workflow for preprocessing actions. + self._bind_shortcut("Ctrl+O", self._open_files_dialog) + self._bind_shortcut("Ctrl+Shift+O", self._open_folder_dialog) + self._bind_shortcut("Delete", self.file_panel._remove_selected_files, require_non_text_focus=True) + self._bind_shortcut("Ctrl+Return", self._trigger_preview, require_non_text_focus=True) + self._bind_shortcut("Ctrl+Enter", self._trigger_preview, require_non_text_focus=True) + self._bind_shortcut("Ctrl+E", self._export_selected_or_all, require_non_text_focus=True) + self._bind_shortcut("Ctrl+K", lambda: self._toggle_section_shortcut("artifacts"), require_non_text_focus=True) + self._bind_shortcut("Ctrl+F", lambda: self._toggle_section_shortcut("filtering"), require_non_text_focus=True) + self._bind_shortcut("Ctrl+B", lambda: self._toggle_section_shortcut("baseline"), require_non_text_focus=True) + self._bind_shortcut("Ctrl+M", lambda: self._toggle_section_shortcut("output"), require_non_text_focus=True) + self._bind_shortcut("Ctrl+Q", self._run_qc_dialog, require_non_text_focus=True) + self._bind_shortcut("Ctrl+Shift+Q", self._run_batch_qc, require_non_text_focus=True) + self._bind_shortcut("Ctrl+L", self.param_panel._load_config, require_non_text_focus=True) + self._bind_shortcut("Ctrl+S", self.param_panel._save_config, require_non_text_focus=True) + self._bind_shortcut("Ctrl+D", self._toggle_data_panel_shortcut, require_non_text_focus=True) + self._bind_shortcut("Ctrl+P", self._toggle_all_parameter_popups_shortcut, require_non_text_focus=True) + self._bind_shortcut("Escape", self._close_focused_popup, require_non_text_focus=True) + + def _dock_area_from_settings( + self, + value: object, + default: QtCore.Qt.DockWidgetArea = QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + ) -> QtCore.Qt.DockWidgetArea: + left_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.LeftDockWidgetArea, 1) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + top_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.TopDockWidgetArea, 4) + bottom_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, 8) + area_int = _dock_area_to_int(value, _dock_area_to_int(default, right_i)) + area_map: Dict[int, QtCore.Qt.DockWidgetArea] = { + left_i: QtCore.Qt.DockWidgetArea.LeftDockWidgetArea, + right_i: QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + top_i: QtCore.Qt.DockWidgetArea.TopDockWidgetArea, + bottom_i: QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, + } + if area_int in area_map: + return area_map[area_int] + return default + + def _to_qbytearray(self, value: object) -> Optional[QtCore.QByteArray]: + if isinstance(value, QtCore.QByteArray): + return value + if isinstance(value, (bytes, bytearray)): + return QtCore.QByteArray(bytes(value)) + if isinstance(value, str): + # QSettings may return serialized bytearrays as text with some backends. + try: + return QtCore.QByteArray.fromBase64(value.encode("utf-8")) + except Exception: + return None + return None + + def _qbytearray_to_b64(self, value: Optional[QtCore.QByteArray]) -> str: + if value is None: + return "" + try: + if value.isEmpty(): + return "" + return bytes(value.toBase64()).decode("ascii") + except Exception: + return "" + + def _b64_to_qbytearray(self, value: object) -> Optional[QtCore.QByteArray]: + if not value: + return None + if isinstance(value, QtCore.QByteArray): + return value + if isinstance(value, (bytes, bytearray)): + try: + return QtCore.QByteArray.fromBase64(bytes(value)) + except Exception: + return None + if isinstance(value, str): + try: + return QtCore.QByteArray.fromBase64(value.encode("ascii")) + except Exception: + return None + return None + + def _dock_state_prefix_presence(self, state: QtCore.QByteArray) -> Tuple[bool, bool]: + """ + Return (has_pre_prefix, has_post_prefix) for a Qt dock-state blob. + Object names may be serialized as ASCII or UTF-16LE. + """ + try: + raw = bytes(state) + except Exception: + return False, False + pre_ascii = b"pre." + post_ascii = b"post." + pre_utf16 = "pre.".encode("utf-16-le") + post_utf16 = "post.".encode("utf-16-le") + has_pre = (pre_ascii in raw) or (pre_utf16 in raw) + has_post = (post_ascii in raw) or (post_utf16 in raw) + return has_pre, has_post + + def _is_tab_scoped_dock_state(self, tab_name: str, state: QtCore.QByteArray) -> bool: + if tab_name not in {"pre", "post"}: + return False + if state is None or state.isEmpty(): + return False + has_pre, has_post = self._dock_state_prefix_presence(state) + if tab_name == "pre" and has_post: + return False + if tab_name == "post" and has_pre: + return False + return True + + def _migrate_legacy_dock_state_settings(self) -> None: + """ + Drop legacy full-window dock blobs that reference old object names. + New snapshots are tab-scoped and use pre./post. dock prefixes. + """ + try: + if self.settings.contains("pre_main_dock_state_v3") and not self.settings.contains(_PRE_DOCK_STATE_KEY): + self.settings.remove("pre_main_dock_state_v3") + if self.settings.contains("post_main_dock_state_v3") and not self.settings.contains(_POST_DOCK_STATE_KEY): + self.settings.remove("post_main_dock_state_v3") + pre_state = self._to_qbytearray(self.settings.value(_PRE_DOCK_STATE_KEY, None)) + if pre_state is not None and not pre_state.isEmpty(): + if not self._is_tab_scoped_dock_state("pre", pre_state): + self.settings.remove(_PRE_DOCK_STATE_KEY) + post_state = self._to_qbytearray(self.settings.value(_POST_DOCK_STATE_KEY, None)) + if post_state is not None and not post_state.isEmpty(): + if not self._is_tab_scoped_dock_state("post", post_state): + self.settings.remove(_POST_DOCK_STATE_KEY) + except Exception: + pass + + def _panel_config_json_path(self) -> str: + base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + return os.path.join(base_dir, "panel_layout.json") + + def _load_panel_config_json_into_settings(self) -> None: + """Load panel layout JSON into QSettings so existing restore logic can use it.""" + path = self._panel_config_json_path() + if not os.path.isfile(path): + return + try: + with open(path, "r", encoding="utf-8") as f: + data = json.load(f) + except Exception: + return + self._load_panel_config_payload_into_settings(data) + + def _load_panel_config_payload_into_settings(self, data: object) -> None: + """Load a panel layout payload (same schema as panel_layout.json) into QSettings.""" + if not isinstance(data, dict): + return + + try: + layout_version = int(data.get("version", 1)) + except Exception: + layout_version = 1 + # Snapshot blobs are considered stable starting from layout schema v3. + # v2 files may contain mixed pre/post docks from legacy full-window capture. + allow_snapshot_blobs = layout_version >= 3 + + pre = data.get("pre", {}) if isinstance(data.get("pre"), dict) else {} + post = data.get("post", {}) if isinstance(data.get("post"), dict) else {} + + try: + if "pre_data_panel_visible" in pre: + self.settings.setValue("pre_data_panel_visible", bool(pre["pre_data_panel_visible"])) + if "pre_splitter_sizes" in pre and isinstance(pre["pre_splitter_sizes"], list): + self.settings.setValue("pre_splitter_sizes", [int(x) for x in pre["pre_splitter_sizes"]]) + if allow_snapshot_blobs and "pre_main_dock_state" in pre: + ba = self._b64_to_qbytearray(pre.get("pre_main_dock_state")) + if ba is not None and self._is_tab_scoped_dock_state("pre", ba): + self.settings.setValue(_PRE_DOCK_STATE_KEY, ba) + else: + self.settings.remove(_PRE_DOCK_STATE_KEY) + if allow_snapshot_blobs and "post_main_dock_state" in post: + ba = self._b64_to_qbytearray(post.get("post_main_dock_state")) + if ba is not None and self._is_tab_scoped_dock_state("post", ba): + self.settings.setValue(_POST_DOCK_STATE_KEY, ba) + else: + self.settings.remove(_POST_DOCK_STATE_KEY) + if "tab_groups" in pre and isinstance(pre.get("tab_groups"), list): + self.settings.setValue(_PRE_TAB_GROUPS_KEY, json.dumps(pre.get("tab_groups"))) + except Exception: + pass + + def _apply_section_settings(prefix: str, section_map: object) -> None: + if not isinstance(section_map, dict): + return + for key, sec in section_map.items(): + if not isinstance(sec, dict): + continue + base = f"{prefix}/{key}" + if "visible" in sec: + self.settings.setValue(f"{base}/visible", bool(sec["visible"])) + if "floating" in sec: + self.settings.setValue(f"{base}/floating", bool(sec["floating"])) + if "area" in sec: + try: + self.settings.setValue(f"{base}/area", int(sec["area"])) + except Exception: + pass + if "geometry" in sec: + ba = self._b64_to_qbytearray(sec.get("geometry")) + if ba is not None: + self.settings.setValue(f"{base}/geometry", ba) + + _apply_section_settings("pre_section_docks", pre.get("sections")) + _apply_section_settings("post_section_docks", post.get("sections")) + + art = pre.get("artifact", {}) if isinstance(pre.get("artifact"), dict) else {} + if art: + base = "pre_artifact_dock_state" + if "visible" in art: + self.settings.setValue(f"{base}/visible", bool(art["visible"])) + if "floating" in art: + self.settings.setValue(f"{base}/floating", bool(art["floating"])) + if "area" in art: + try: + self.settings.setValue(f"{base}/area", int(art["area"])) + except Exception: + pass + if "geometry" in art: + ba = self._b64_to_qbytearray(art.get("geometry")) + if ba is not None: + self.settings.setValue(f"{base}/geometry", ba) + + try: + self.settings.sync() + except Exception: + pass + + def _collect_panel_layout_payload(self) -> Dict[str, object]: + """Build the panel layout payload used for both JSON persistence and config export.""" + # Ensure QSettings has the latest dock values + try: + self._save_panel_layout_state() + except Exception: + pass + try: + self.post_tab.flush_post_section_state_to_settings() + self.post_tab._save_panel_layout_state() + except Exception: + pass + + splitter_sizes: Optional[List[int]] = None + try: + raw_sizes = self.settings.value("pre_splitter_sizes", None) + if raw_sizes is not None and hasattr(raw_sizes, "__len__"): + splitter_sizes = [int(x) for x in raw_sizes] + except Exception: + splitter_sizes = None + + def _read_section_settings(prefix: str, keys: List[str]) -> Dict[str, Dict[str, object]]: + out: Dict[str, Dict[str, object]] = {} + for key in keys: + base = f"{prefix}/{key}" + visible = self.settings.value(f"{base}/visible", None) + floating = self.settings.value(f"{base}/floating", None) + area = self.settings.value(f"{base}/area", None) + geom = self._to_qbytearray(self.settings.value(f"{base}/geometry", None)) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + out[key] = { + "visible": _to_bool(visible, False) if visible is not None else False, + "floating": _to_bool(floating, True) if floating is not None else True, + "area": _dock_area_to_int(area, right_i) if area is not None else right_i, + "geometry": self._qbytearray_to_b64(geom), + } + return out + + pre_sections = list(self._section_docks.keys()) + post_sections = [] + try: + self.post_tab.ensure_section_popups_initialized() + post_sections = list(self.post_tab.get_section_popup_keys()) + except Exception: + post_sections = [] + + pre_main = self._to_qbytearray(self.settings.value(_PRE_DOCK_STATE_KEY, None)) + post_main = self._to_qbytearray(self.settings.value(_POST_DOCK_STATE_KEY, None)) + pre_tab_groups = self._load_pre_tab_groups_from_settings() + + art_geom = self._to_qbytearray(self.settings.value("pre_artifact_dock_state/geometry", None)) + art_visible = self.settings.value("pre_artifact_dock_state/visible", None) + art_floating = self.settings.value("pre_artifact_dock_state/floating", None) + art_area = self.settings.value("pre_artifact_dock_state/area", None) + + data = { + "version": 3, + "pre": { + "pre_data_panel_visible": _to_bool(self.settings.value("pre_data_panel_visible", True), True), + "pre_splitter_sizes": splitter_sizes, + "pre_main_dock_state": self._qbytearray_to_b64(pre_main), + "tab_groups": pre_tab_groups, + "sections": _read_section_settings("pre_section_docks", pre_sections), + "artifact": { + "visible": _to_bool(art_visible, False) if art_visible is not None else False, + "floating": _to_bool(art_floating, False) if art_floating is not None else False, + "area": int(art_area) if art_area is not None else _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2), + "geometry": self._qbytearray_to_b64(art_geom), + }, + }, + "post": { + "post_main_dock_state": self._qbytearray_to_b64(post_main), + "sections": _read_section_settings("post_section_docks", post_sections), + }, + } + return data + + def _save_panel_config_json(self) -> None: + """Persist current panel layout into a JSON file.""" + try: + data = self._collect_panel_layout_payload() + path = self._panel_config_json_path() + with open(path, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2) + except Exception: + _LOG.exception("Failed to write panel layout JSON") + + def _export_preprocessing_ui_state_for_config(self) -> Dict[str, object]: + """Extra UI payload stored in preprocessing_config.json.""" + return { + "artifact_overlay_visible": bool(self.param_panel.artifact_overlay_visible()), + "artifact_thresholds_visible": bool(self.plots.artifact_thresholds_visible()), + "panel_layout": self._collect_panel_layout_payload(), + } + + def _apply_panel_layout_from_settings(self) -> None: + """ + Apply dock disposition from current QSettings values. + Used after importing panel layout from preprocessing config files. + """ + if self._force_fixed_dock_layouts: + self._apply_pre_fixed_layout() + try: + self.post_tab.ensure_section_popups_initialized() + if hasattr(self.post_tab, "apply_fixed_default_layout"): + self.post_tab.apply_fixed_default_layout() + except Exception: + pass + if self.tabs.currentWidget() is self.pre_tab: + self._enforce_only_tab_docks_visible("pre") + else: + self._enforce_only_tab_docks_visible("post") + return + + self._restore_panel_layout_state() + self._pre_snapshot_applied = False + self._pre_snapshot_retry_attempts = 0 + self._pre_snapshot_retry_scheduled = False + self._apply_pre_main_dock_snapshot_if_needed() + try: + self.post_tab.ensure_section_popups_initialized() + self.post_tab._restore_panel_layout_state() + self.post_tab._post_snapshot_applied = False + self.post_tab._apply_post_main_dock_snapshot_if_needed() + except Exception: + pass + if self.tabs.currentWidget() is self.pre_tab: + self._enforce_only_tab_docks_visible("pre") + else: + self._enforce_only_tab_docks_visible("post") + + def _import_preprocessing_ui_state_from_config(self, ui_state: Dict[str, object]) -> None: + if not isinstance(ui_state, dict): + return + if "artifact_overlay_visible" in ui_state: + visible = bool(ui_state.get("artifact_overlay_visible")) + self.param_panel.set_artifact_overlay_visible(visible) + self.plots.set_artifact_overlay_visible(visible) + if "artifact_thresholds_visible" in ui_state: + self.plots.set_artifact_thresholds_visible(bool(ui_state.get("artifact_thresholds_visible"))) + panel_layout = ui_state.get("panel_layout") + if isinstance(panel_layout, dict): + self._load_panel_config_payload_into_settings(panel_layout) + self._apply_panel_layout_from_settings() + self._save_panel_config_json() + self._save_settings() + + def _sync_section_button_states_from_docks(self) -> None: + self._last_opened_section = None + for key, dock in self._section_docks.items(): + vis = bool(dock.isVisible()) + self._set_section_button_checked(key, vis) + if vis: + self._last_opened_section = key + + def _save_panel_layout_state(self) -> None: + """Persist popup/artifact panel visibility, docking mode, area, and geometry.""" + if not self._panel_layout_persistence_ready: + return + if self._is_restoring_panel_layout: + return + if self._suspend_panel_layout_persistence: + return + # Do not overwrite stored layout while preprocessing panels are hidden for tab switching. + if self._pre_popups_hidden_by_tab_switch: + return + + # Per-dock persistence is isolated so one faulty dock payload cannot drop all others. + for key, dock in self._section_docks.items(): + try: + base = f"pre_section_docks/{key}" + cached = ( + self._pre_section_state_before_tab_switch.get(key, {}) + if self._pre_popups_hidden_by_tab_switch + else {} + ) + visible = bool(cached.get("visible", dock.isVisible())) + floating = bool(cached.get("floating", dock.isFloating())) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + area_val = _dock_area_to_int(cached.get("area", self.dockWidgetArea(dock)), right_i) + geom = cached.get("geometry", dock.saveGeometry()) + self.settings.setValue(f"{base}/visible", visible) + self.settings.setValue(f"{base}/floating", floating) + self.settings.setValue(f"{base}/area", area_val) + self.settings.setValue(f"{base}/geometry", geom) + except Exception: + continue + + try: + base = "pre_artifact_dock_state" + cached = self._pre_artifact_state_before_tab_switch if self._pre_popups_hidden_by_tab_switch else {} + visible = bool(cached.get("visible", self.art_dock.isVisible())) + floating = bool(cached.get("floating", self.art_dock.isFloating())) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + area_val = _dock_area_to_int(cached.get("area", self.dockWidgetArea(self.art_dock)), right_i) + geom = cached.get("geometry", self.art_dock.saveGeometry()) + self.settings.setValue(f"{base}/visible", visible) + self.settings.setValue(f"{base}/floating", floating) + self.settings.setValue(f"{base}/area", area_val) + self.settings.setValue(f"{base}/geometry", geom) + except Exception: + pass + try: + self._save_pre_tab_groups_to_settings(self._capture_pre_tab_groups_state()) + except Exception: + pass + try: + self.settings.sync() + except Exception: + pass + + def _save_full_main_dock_state(self) -> None: + """ + Save full main-window dock disposition (tabified/split relationships). + This complements per-dock visibility settings. + """ + try: + self.settings.setValue("main_dock_state_v2", self.saveState(_DOCK_STATE_VERSION)) + self.settings.sync() + except Exception: + pass + + def _restore_full_main_dock_state(self) -> None: + """ + Restore full main-window dock disposition after all docks are registered. + """ + try: + raw = self.settings.value("main_dock_state_v2", None) + state = self._to_qbytearray(raw) + if state is None or state.isEmpty(): + return + ok = self.restoreState(state, _DOCK_STATE_VERSION) + if not ok: + # Drop invalid payload and fall back to per-dock restore. + self.settings.remove("main_dock_state_v2") + return + try: + self.post_tab.mark_dock_layout_restored() + except Exception: + pass + except Exception: + pass + + def _restore_panel_layout_state(self) -> None: + """Restore popup/artifact panel layout from the previous app session.""" + self._is_restoring_panel_layout = True + for key, dock in self._section_docks.items(): + base = f"pre_section_docks/{key}" + try: + visible = _to_bool(self.settings.value(f"{base}/visible", False), False) + floating = _to_bool(self.settings.value(f"{base}/floating", True), True) + area_val = self.settings.value( + f"{base}/area", + _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2), + ) + area = self._dock_area_from_settings(area_val, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) + geom = self._to_qbytearray(self.settings.value(f"{base}/geometry", None)) + + dock.blockSignals(True) + if bool(floating): + dock.setFloating(True) + else: + self.addDockWidget(area, dock) + dock.setFloating(False) + + if geom is not None and not geom.isEmpty(): + dock.restoreGeometry(geom) + self._section_popup_initialized.add(key) + + if visible: + dock.show() + if dock.isFloating() and not self._is_popup_on_screen(dock): + self._position_section_popup(dock) + self._set_section_button_checked(key, True) + self._last_opened_section = key + else: + dock.hide() + self._set_section_button_checked(key, False) + except Exception: + continue + finally: + try: + dock.blockSignals(False) + except Exception: + pass + + try: + base = "pre_artifact_dock_state" + visible = _to_bool(self.settings.value(f"{base}/visible", False), False) + floating = _to_bool(self.settings.value(f"{base}/floating", False), False) + area_val = self.settings.value( + f"{base}/area", + _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2), + ) + area = self._dock_area_from_settings(area_val, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) + geom = self._to_qbytearray(self.settings.value(f"{base}/geometry", None)) + + if bool(floating): + self.art_dock.setFloating(True) + else: + self.addDockWidget(area, self.art_dock) + self.art_dock.setFloating(False) + + if geom is not None and not geom.isEmpty(): + self.art_dock.restoreGeometry(geom) + self.art_dock.setVisible(bool(visible)) + except Exception: + pass + + self._sync_section_button_states_from_docks() + self._restore_pre_tab_groups_fallback(self._load_pre_tab_groups_from_settings()) + self._is_restoring_panel_layout = False + + def _has_saved_pre_layout_state(self) -> bool: + try: + if self.settings.contains(_PRE_DOCK_STATE_KEY): + return True + if self.settings.contains("pre_artifact_dock_state/visible"): + return True + for key in self._section_docks.keys(): + if self.settings.contains(f"pre_section_docks/{key}/visible"): + return True + except Exception: + pass + return False + + def _has_saved_post_layout_state(self) -> bool: + try: + if self.settings.contains(_POST_DOCK_STATE_KEY): + return True + self.post_tab.ensure_section_popups_initialized() + for key in self.post_tab.get_section_popup_keys(): + if self.settings.contains(f"post_section_docks/{key}/visible"): + return True + except Exception: + pass + return False + # ---------------- Settings persistence ---------------- def _restore_settings(self) -> None: @@ -348,19 +1642,95 @@ def _restore_settings(self) -> None: self.settings.setValue("params_json", json.dumps(d)) p = ProcessingParams.from_dict(d) self.param_panel.set_params(p) + self._update_plot_status(fs_target=float(p.target_fs_hz)) except Exception: pass - # restore splitter sizes try: - splitter_sizes = self.settings.value("splitter_sizes", None) - if splitter_sizes and hasattr(splitter_sizes, '__len__') and len(splitter_sizes) >= 2: - # Find the splitter in the preprocessing tab - pre_tab = self.tabs.widget(0) # Assuming preprocessing is tab 0 - if pre_tab: - splitter = pre_tab.findChild(QtWidgets.QSplitter) - if splitter: - splitter.setSizes([int(splitter_sizes[0]), int(splitter_sizes[1])]) + show_overlay = self.settings.value("artifact_overlay_visible", True, type=bool) + self.param_panel.set_artifact_overlay_visible(bool(show_overlay)) + self.plots.set_artifact_overlay_visible(bool(show_overlay)) + except Exception: + pass + try: + show_thresholds = self.settings.value("artifact_thresholds_visible", True, type=bool) + self.plots.set_artifact_thresholds_visible(bool(show_thresholds)) + except Exception: + pass + + if self._force_fixed_dock_layouts: + # Fixed mode: always enforce deterministic defaults. + try: + self.pre_splitter.setSizes([300, 1200]) + except Exception: + pass + try: + splitter_sizes = self.settings.value("pre_splitter_sizes", None) + if splitter_sizes is None: + splitter_sizes = self.settings.value("splitter_sizes", None) + if splitter_sizes and hasattr(splitter_sizes, "__len__"): + vals = [int(x) for x in splitter_sizes] + if len(vals) >= 3: + left = max(260, vals[0]) + center = max(640, vals[1] + vals[2]) + self.pre_splitter.setSizes([left, center]) + elif len(vals) == 2: + self.pre_splitter.setSizes(vals[:2]) + except Exception: + pass + try: + show_data = self.settings.value("pre_data_panel_visible", False, type=bool) + except Exception: + show_data = False + self._set_data_panel_visible(bool(show_data), persist=False) + + self._apply_pre_fixed_layout() + + try: + self.post_tab.ensure_section_popups_initialized() + if hasattr(self.post_tab, "apply_fixed_default_layout"): + self.post_tab.apply_fixed_default_layout() + # Keep post docks detached while Preprocessing is active at startup. + self._hide_dock_widgets(self.getPostDockWidgets(), remove=True) + except Exception: + pass + else: + # restore splitter sizes (2-pane layout; migrate older layouts) + try: + splitter_sizes = self.settings.value("pre_splitter_sizes", None) + if splitter_sizes is None: + splitter_sizes = self.settings.value("splitter_sizes", None) + if splitter_sizes and hasattr(splitter_sizes, "__len__"): + vals = [int(x) for x in splitter_sizes] + if len(vals) >= 3: + # Migrate old 3-pane [left, center, right] into [left, center+right]. + left = max(260, vals[0]) + center = max(640, vals[1] + vals[2]) + self.pre_splitter.setSizes([left, center]) + elif len(vals) == 2: + self.pre_splitter.setSizes(vals[:2]) + except Exception: + pass + + # restore data panel visibility + try: + show_data = self.settings.value("pre_data_panel_visible", True, type=bool) + self._set_data_panel_visible(bool(show_data), persist=False) + except Exception: + pass + + # restore panel layout/disposition (floating popups + artifacts dock). + self._restore_panel_layout_state() + # Apply default preprocessing dock layout if no saved layout exists. + self._apply_pre_default_layout_if_missing() + # Apply saved preprocessing dock snapshot at startup. + self._apply_pre_main_dock_snapshot_if_needed() + + # restore last selected main tab + try: + idx = self.settings.value("main_current_tab", 0, type=int) + if isinstance(idx, int) and 0 <= idx < self.tabs.count(): + self.tabs.setCurrentIndex(idx) except Exception: pass @@ -378,16 +1748,35 @@ def _save_settings(self) -> None: except Exception: pass - def _save_splitter_sizes(self) -> None: + try: + self.settings.setValue("artifact_overlay_visible", bool(self.param_panel.artifact_overlay_visible())) + except Exception: + pass + try: + self.settings.setValue("artifact_thresholds_visible", bool(self.plots.artifact_thresholds_visible())) + except Exception: + pass + + try: + self.settings.setValue("pre_data_panel_visible", bool(self.file_panel.isVisible())) + except Exception: + pass + try: + self.settings.setValue("main_current_tab", int(self.tabs.currentIndex())) + except Exception: + pass + try: + self.settings.sync() + except Exception: + pass + + def _save_splitter_sizes(self, *_args) -> None: """Save the current splitter sizes to settings.""" try: - # Find the splitter in the preprocessing tab - pre_tab = self.tabs.widget(0) # Assuming preprocessing is tab 0 - if pre_tab: - splitter = pre_tab.findChild(QtWidgets.QSplitter) - if splitter: - sizes = splitter.sizes() - self.settings.setValue("splitter_sizes", sizes) + if hasattr(self, "pre_splitter") and self.pre_splitter: + sizes = self.pre_splitter.sizes() + self.settings.setValue("pre_splitter_sizes", sizes) + self.settings.setValue("splitter_sizes", sizes) except Exception: pass @@ -429,7 +1818,7 @@ def _add_files(self, paths: List[str]) -> None: doric = self.processor.load_file(p) self._loaded_files[p] = doric self.file_panel.add_file(p) - self.plots.set_log(f"Loaded: {p}") + self._show_status_message(f"Loaded: {os.path.basename(p)}", 5000) except Exception as e: QtWidgets.QMessageBox.critical(self, "Load error", f"Failed to load:\n{p}\n\n{e}") @@ -446,6 +1835,631 @@ def _current_key(self) -> Optional[Tuple[str, str]]: return None return (self._current_path, self._current_channel) + def _focus_data_browser(self) -> None: + if not self.file_panel.isVisible(): + self._set_data_panel_visible(True) + self.file_panel.setFocus() + self.file_panel.list_files.setFocus() + + def _hide_preprocessing_popups_for_tab_switch(self) -> None: + if self._pre_popups_hidden_by_tab_switch: + # Re-apply hide in case late dock events re-show a preprocessing dock. + self._enforce_preprocessing_popups_hidden() + return + host = self + self._pre_section_visibility_before_tab_switch = { + key: bool(dock.isVisible()) for key, dock in self._section_docks.items() + } + self._pre_section_state_before_tab_switch = {} + for key, dock in self._section_docks.items(): + area = _dock_area_to_int(host.dockWidgetArea(dock), _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2)) + self._pre_section_state_before_tab_switch[key] = { + "visible": bool(dock.isVisible()), + "floating": bool(dock.isFloating()), + "area": area, + "geometry": dock.saveGeometry(), + } + self._pre_artifact_visible_before_tab_switch = bool(self.art_dock.isVisible()) + self._pre_artifact_state_before_tab_switch = { + "visible": bool(self.art_dock.isVisible()), + "floating": bool(self.art_dock.isFloating()), + "area": _dock_area_to_int(host.dockWidgetArea(self.art_dock), _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2)), + "geometry": self.art_dock.saveGeometry(), + } + self._pre_advanced_visible_before_tab_switch = bool( + self._advanced_dialog is not None and self._advanced_dialog.isVisible() + ) + self._pre_tab_groups_before_tab_switch = self._capture_pre_tab_groups_state() + self._pre_main_dock_state_before_tab_switch = self.captureDockSnapshotForTab("pre") + self._store_pre_main_dock_snapshot() + # Mark switch-hide state before any dock visibility changes so asynchronous + # visibility signals cannot persist temporary hidden defaults. + self._pre_popups_hidden_by_tab_switch = True + # Persist cached state now; dock hide/remove operations below are temporary. + self._persist_hidden_preprocessing_layout_state() + + self._suspend_panel_layout_persistence = True + try: + for key in self._section_docks.keys(): + self._set_section_button_checked(key, False) + self._hide_dock_widgets(self.getPreDockWidgets(), remove=True) + if self._advanced_dialog is not None: + self._advanced_dialog.hide() + finally: + self._suspend_panel_layout_persistence = False + + def _enforce_preprocessing_popups_hidden(self) -> None: + """ + Hard-hide preprocessing docks/dialogs while Post Processing is active. + This protects against late Qt dock re-show events when dock tab stacks are rebuilt. + """ + if hasattr(self, "tabs") and self.tabs.currentWidget() is self.pre_tab: + return + self._suspend_panel_layout_persistence = True + try: + for key in self._section_docks.keys(): + self._set_section_button_checked(key, False) + self._hide_dock_widgets(self.getPreDockWidgets(), remove=True) + if self._advanced_dialog is not None: + self._advanced_dialog.hide() + # Extra safety: hide any dock that belongs to preprocessing by object name prefix. + for dock in self.findChildren(QtWidgets.QDockWidget): + name = str(dock.objectName() or "") + if name.startswith(_PRE_DOCK_PREFIX): + dock.hide() + try: + self.removeDockWidget(dock) + except Exception: + pass + finally: + self._suspend_panel_layout_persistence = False + + def _enforce_postprocessing_popups_hidden(self) -> None: + """Hide post-processing docks while Preprocessing is active.""" + if hasattr(self, "tabs") and self.tabs.currentWidget() is not self.pre_tab: + return + self._hide_dock_widgets(self.getPostDockWidgets(), remove=True) + + def _store_pre_main_dock_snapshot(self) -> None: + """Persist the current preprocessing dock arrangement.""" + try: + state = self.captureDockSnapshotForTab("pre") + if state is not None and not state.isEmpty(): + self.settings.setValue(_PRE_DOCK_STATE_KEY, state) + self._save_pre_tab_groups_to_settings(self._capture_pre_tab_groups_state()) + self.settings.sync() + except Exception: + pass + + def _persist_hidden_preprocessing_layout_state(self) -> None: + """ + Persist cached preprocessing layout while preprocessing docks are hidden + during a main-tab switch. + """ + if not self._pre_popups_hidden_by_tab_switch: + return + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + try: + for key in self._section_docks.keys(): + state = self._pre_section_state_before_tab_switch.get(key, {}) + base = f"pre_section_docks/{key}" + self.settings.setValue(f"{base}/visible", bool(state.get("visible", False))) + self.settings.setValue(f"{base}/floating", bool(state.get("floating", True))) + self.settings.setValue(f"{base}/area", _dock_area_to_int(state.get("area", right_i), right_i)) + geom = state.get("geometry") + if isinstance(geom, QtCore.QByteArray) and not geom.isEmpty(): + self.settings.setValue(f"{base}/geometry", geom) + except Exception: + pass + + try: + art_state = self._pre_artifact_state_before_tab_switch or {} + base = "pre_artifact_dock_state" + self.settings.setValue(f"{base}/visible", bool(art_state.get("visible", False))) + self.settings.setValue(f"{base}/floating", bool(art_state.get("floating", False))) + self.settings.setValue(f"{base}/area", _dock_area_to_int(art_state.get("area", right_i), right_i)) + art_geom = art_state.get("geometry") + if isinstance(art_geom, QtCore.QByteArray) and not art_geom.isEmpty(): + self.settings.setValue(f"{base}/geometry", art_geom) + except Exception: + pass + + try: + state = self._pre_main_dock_state_before_tab_switch + if isinstance(state, QtCore.QByteArray) and not state.isEmpty(): + self.settings.setValue(_PRE_DOCK_STATE_KEY, state) + except Exception: + pass + self._save_pre_tab_groups_to_settings(self._pre_tab_groups_before_tab_switch) + + try: + self.settings.sync() + except Exception: + pass + + def _apply_pre_main_dock_snapshot_if_needed(self) -> None: + if self._force_fixed_dock_layouts: + self._pre_snapshot_applied = True + return + if self._pre_snapshot_applied: + return + try: + raw = self.settings.value(_PRE_DOCK_STATE_KEY, None) + state = self._to_qbytearray(raw) + if state is None or state.isEmpty(): + self._pre_snapshot_applied = True + return + + ok = self.restoreDockSnapshotForTab("pre", state) + if ok: + self._pre_snapshot_applied = True + self._pre_snapshot_retry_attempts = 0 + self._sync_section_button_states_from_docks() + _LOG.info("Pre dock snapshot applied successfully") + return + + self._pre_snapshot_retry_attempts += 1 + _LOG.warning( + "Pre dock snapshot restore failed (attempt %s/%s)", + self._pre_snapshot_retry_attempts, + self._pre_snapshot_max_retries, + ) + if self._pre_snapshot_retry_attempts >= self._pre_snapshot_max_retries: + # Incompatible payload (old object names or stale version): drop and continue + # with per-dock fallback settings. + self.settings.remove(_PRE_DOCK_STATE_KEY) + self._pre_snapshot_applied = True + return + + delay = 0 if self._post_docks_ready else 120 + self._schedule_pre_snapshot_retry(delay) + except Exception: + _LOG.exception("Pre dock snapshot restore raised unexpectedly") + + def _apply_pre_default_layout_if_missing(self) -> None: + """Set a sensible preprocessing dock layout when no saved layout exists.""" + try: + if self.settings.contains(_PRE_DOCK_STATE_KEY): + return + has_any = False + for key in self._section_docks.keys(): + if self.settings.contains(f"pre_section_docks/{key}/visible"): + has_any = True + break + if self.settings.contains("pre_artifact_dock_state/visible"): + has_any = True + if has_any: + return + except Exception: + return + + if not self._section_docks: + return + + right = QtCore.Qt.DockWidgetArea.RightDockWidgetArea + self._suspend_panel_layout_persistence = True + try: + self._enforce_postprocessing_popups_hidden() + # Default dock layout: Artifacts on top, tabbed Filtering/Baseline/Output, + # QC below, Export at bottom. Config remains hidden. + artifacts = self._section_docks.get("artifacts") + filtering = self._section_docks.get("filtering") + baseline = self._section_docks.get("baseline") + output = self._section_docks.get("output") + qc = self._section_docks.get("qc") + export = self._section_docks.get("export") + config = self._section_docks.get("config") + + for dock in (artifacts, filtering, baseline, output, qc, export, config): + if dock is None: + continue + dock.setFloating(False) + dock.show() + + if artifacts is not None: + self.addDockWidget(right, artifacts) + if filtering is not None: + self.addDockWidget(right, filtering) + if artifacts is not None: + self.splitDockWidget(artifacts, filtering, QtCore.Qt.Orientation.Vertical) + + if baseline is not None and filtering is not None: + self.addDockWidget(right, baseline) + self.tabifyDockWidget(filtering, baseline) + if output is not None and filtering is not None: + self.addDockWidget(right, output) + self.tabifyDockWidget(filtering, output) + filtering.raise_() + + if qc is not None: + self.addDockWidget(right, qc) + if filtering is not None: + self.splitDockWidget(filtering, qc, QtCore.Qt.Orientation.Vertical) + elif artifacts is not None: + self.splitDockWidget(artifacts, qc, QtCore.Qt.Orientation.Vertical) + if export is not None: + self.addDockWidget(right, export) + if qc is not None: + self.splitDockWidget(qc, export, QtCore.Qt.Orientation.Vertical) + elif filtering is not None: + self.splitDockWidget(filtering, export, QtCore.Qt.Orientation.Vertical) + + if config is not None: + config.hide() + + self._sync_section_button_states_from_docks() + finally: + self._suspend_panel_layout_persistence = False + + self._save_panel_layout_state() + self._store_pre_main_dock_snapshot() + + def _apply_pre_fixed_layout(self) -> None: + """ + Force a deterministic preprocessing dock layout matching the project default: + - Right column top: Artifacts list tab group (Artifacts list / Filtering / Artifacts) + - Right column middle: Baseline tab group (Baseline / Output / QC) + - Right column bottom: Export + - Bottom strip: Configuration + """ + if not self._section_docks: + return + + host = self + right = QtCore.Qt.DockWidgetArea.RightDockWidgetArea + bottom = QtCore.Qt.DockWidgetArea.BottomDockWidgetArea + + artifacts = self._section_docks.get("artifacts") + filtering = self._section_docks.get("filtering") + baseline = self._section_docks.get("baseline") + output = self._section_docks.get("output") + qc = self._section_docks.get("qc") + export = self._section_docks.get("export") + config = self._section_docks.get("config") + + self._suspend_panel_layout_persistence = True + try: + self._hide_dock_widgets(self.getPostDockWidgets(), remove=True) + # Attach all preprocessing docks in a deterministic non-floating state first. + ordered_right: List[QtWidgets.QDockWidget] = [] + if isinstance(self.art_dock, QtWidgets.QDockWidget): + ordered_right.append(self.art_dock) + for dock in (artifacts, filtering, baseline, output, qc, export): + if isinstance(dock, QtWidgets.QDockWidget): + ordered_right.append(dock) + + for dock in ordered_right: + dock.blockSignals(True) + try: + dock.setFloating(False) + host.addDockWidget(right, dock) + dock.show() + finally: + dock.blockSignals(False) + + if isinstance(config, QtWidgets.QDockWidget): + config.blockSignals(True) + try: + config.setFloating(False) + host.addDockWidget(bottom, config) + config.show() + finally: + config.blockSignals(False) + + # Vertical stack in right area: artifacts list (top) -> baseline group (middle) -> export (bottom). + if baseline is not None: + host.splitDockWidget(self.art_dock, baseline, QtCore.Qt.Orientation.Vertical) + if export is not None: + if baseline is not None: + host.splitDockWidget(baseline, export, QtCore.Qt.Orientation.Vertical) + else: + host.splitDockWidget(self.art_dock, export, QtCore.Qt.Orientation.Vertical) + + # Top tab group: Artifacts list + Filtering + Artifacts. + if artifacts is not None: + host.tabifyDockWidget(self.art_dock, artifacts) + if filtering is not None: + host.tabifyDockWidget(self.art_dock, filtering) + + # Middle tab group: Baseline + Output + QC. + if baseline is not None and output is not None: + host.tabifyDockWidget(baseline, output) + if baseline is not None and qc is not None: + host.tabifyDockWidget(baseline, qc) + + # Keep active tabs consistent with the default arrangement. + try: + self.art_dock.raise_() + except Exception: + pass + if baseline is not None: + baseline.raise_() + if export is not None: + export.raise_() + if config is not None: + config.raise_() + + # Approximate default height proportions for right-column groups. + try: + vdocks: List[QtWidgets.QDockWidget] = [] + sizes: List[int] = [] + if isinstance(self.art_dock, QtWidgets.QDockWidget): + vdocks.append(self.art_dock) + sizes.append(520) + if baseline is not None: + vdocks.append(baseline) + sizes.append(260) + if export is not None: + vdocks.append(export) + sizes.append(120) + if vdocks and sizes: + host.resizeDocks(vdocks, sizes, QtCore.Qt.Orientation.Vertical) + except Exception: + pass + + self._sync_section_button_states_from_docks() + finally: + self._suspend_panel_layout_persistence = False + + def _restore_preprocessing_popups_after_tab_switch(self) -> None: + if not self._pre_popups_hidden_by_tab_switch: + return + + host = self + restored_from_snapshot = False + self._suspend_panel_layout_persistence = True + try: + snapshot = self._pre_main_dock_state_before_tab_switch + if ( + not self._force_fixed_dock_layouts + and isinstance(snapshot, QtCore.QByteArray) + and not snapshot.isEmpty() + ): + try: + restored_from_snapshot = self.restoreDockSnapshotForTab("pre", snapshot) + except Exception: + restored_from_snapshot = False + if restored_from_snapshot: + self._sync_section_button_states_from_docks() + if self._pre_advanced_visible_before_tab_switch and self._advanced_dialog is not None: + self._advanced_dialog.show() + self._advanced_dialog.raise_() + self._advanced_dialog.activateWindow() + else: + for key, dock in self._section_docks.items(): + state = self._pre_section_state_before_tab_switch.get(key, {}) + visible = bool(state.get("visible", self._pre_section_visibility_before_tab_switch.get(key, False))) + floating = bool(state.get("floating", dock.isFloating())) + area = self._dock_area_from_settings( + state.get("area", _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2)), + QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + ) + geom = state.get("geometry", None) + + dock.blockSignals(True) + try: + if floating: + dock.setFloating(True) + else: + host.addDockWidget(area, dock) + dock.setFloating(False) + if isinstance(geom, QtCore.QByteArray) and not geom.isEmpty(): + dock.restoreGeometry(geom) + self._section_popup_initialized.add(key) + if visible: + if dock.isFloating() and not self._is_popup_on_screen(dock): + self._position_section_popup(dock) + dock.show() + self._set_section_button_checked(key, True) + self._last_opened_section = key + else: + dock.hide() + self._set_section_button_checked(key, False) + finally: + dock.blockSignals(False) + + art_state = self._pre_artifact_state_before_tab_switch or {} + art_visible = bool(art_state.get("visible", self._pre_artifact_visible_before_tab_switch)) + art_floating = bool(art_state.get("floating", self.art_dock.isFloating())) + art_area = self._dock_area_from_settings( + art_state.get("area", _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2)), + QtCore.Qt.DockWidgetArea.RightDockWidgetArea, + ) + art_geom = art_state.get("geometry", None) + if art_floating: + self.art_dock.setFloating(True) + else: + host.addDockWidget(art_area, self.art_dock) + self.art_dock.setFloating(False) + if isinstance(art_geom, QtCore.QByteArray) and not art_geom.isEmpty(): + self.art_dock.restoreGeometry(art_geom) + self.art_dock.setVisible(art_visible) + + if self._pre_advanced_visible_before_tab_switch and self._advanced_dialog is not None: + self._advanced_dialog.show() + self._advanced_dialog.raise_() + self._advanced_dialog.activateWindow() + self._restore_pre_tab_groups_fallback(self._pre_tab_groups_before_tab_switch) + finally: + self._suspend_panel_layout_persistence = False + + self._pre_popups_hidden_by_tab_switch = False + self._pre_section_visibility_before_tab_switch.clear() + self._pre_section_state_before_tab_switch.clear() + self._pre_artifact_visible_before_tab_switch = False + self._pre_artifact_state_before_tab_switch.clear() + self._pre_advanced_visible_before_tab_switch = False + self._pre_main_dock_state_before_tab_switch = None + self._pre_tab_groups_before_tab_switch = [] + self._enforce_postprocessing_popups_hidden() + self._save_panel_layout_state() + + def _on_main_tab_changed(self, index: int) -> None: + if self._handling_main_tab_change: + return + self._handling_main_tab_change = True + try: + current = self.tabs.widget(index) + if self._force_fixed_dock_layouts: + try: + if current is self.pre_tab: + try: + self.post_tab.hide_section_popups_for_tab_switch() + except Exception: + pass + self._enforce_postprocessing_popups_hidden() + self._restore_preprocessing_popups_after_tab_switch() + self._apply_pre_fixed_layout() + self._enforce_only_tab_docks_visible("pre") + else: + self._hide_preprocessing_popups_for_tab_switch() + self._enforce_preprocessing_popups_hidden() + QtCore.QTimer.singleShot(0, self._enforce_preprocessing_popups_hidden) + try: + self.post_tab.ensure_section_popups_initialized() + if hasattr(self.post_tab, "apply_fixed_default_layout"): + self.post_tab.apply_fixed_default_layout() + # Re-apply after queued dock events from tab switch. + QtCore.QTimer.singleShot(0, self.post_tab.apply_fixed_default_layout) + except Exception: + _LOG.exception("Failed to apply fixed post layout on tab switch") + self._enforce_only_tab_docks_visible("post") + try: + self._save_panel_layout_state() + except Exception: + pass + if current is self.pre_tab: + try: + self._store_pre_main_dock_snapshot() + except Exception: + pass + else: + try: + self._persist_hidden_preprocessing_layout_state() + except Exception: + pass + try: + self.post_tab.persist_layout_state_snapshot() + except Exception: + pass + self._save_settings() + self._save_panel_config_json() + except Exception: + _LOG.exception("Failed to handle fixed-layout tab switch") + return + try: + if current is self.pre_tab: + try: + self.post_tab.hide_section_popups_for_tab_switch() + except Exception: + pass + self._enforce_postprocessing_popups_hidden() + self._restore_preprocessing_popups_after_tab_switch() + self._apply_pre_main_dock_snapshot_if_needed() + self._enforce_only_tab_docks_visible("pre") + else: + self._hide_preprocessing_popups_for_tab_switch() + # Run once now and once after queued dock events so preprocessing panels + # cannot bleed into Post Processing. + self._enforce_preprocessing_popups_hidden() + QtCore.QTimer.singleShot(0, self._enforce_preprocessing_popups_hidden) + self._enforce_only_tab_docks_visible("post") + # Persist active main tab immediately. + self._save_settings() + # Persist panel layout JSON on each tab switch. + self._save_panel_config_json() + except Exception: + _LOG.exception("Failed to handle main tab switch") + finally: + self._handling_main_tab_change = False + + def _on_artifact_overlay_toggled(self, visible: bool) -> None: + self.plots.set_artifact_overlay_visible(bool(visible)) + self._save_settings() + + def _on_artifact_thresholds_toggled(self, visible: bool) -> None: + self.plots.set_artifact_thresholds_visible(bool(visible)) + self._save_settings() + + def _auto_range_for_processed(self, processed: ProcessedTrial) -> None: + try: + start_s, end_s = self._time_window_bounds() + t = np.asarray(processed.time, float) + if t.size > 1: + x0 = float(np.nanmin(t)) if start_s is None else float(start_s) + x1 = float(np.nanmax(t)) if end_s is None else float(end_s) + if np.isfinite(x0) and np.isfinite(x1) and x1 > x0: + self.plots.auto_range_all(x0=x0, x1=x1) + else: + self.plots.auto_range_all() + else: + self.plots.auto_range_all() + except Exception: + self.plots.auto_range_all() + + def _fmt_fs(self, fs: Optional[float]) -> str: + if fs is None or not np.isfinite(float(fs)): + return "-" + return f"{float(fs):.2f}" + + def _current_fs_actual(self) -> Optional[float]: + key = self._current_key() + if key: + proc = self._last_processed.get(key) + if proc is not None and np.isfinite(float(getattr(proc, "fs_actual", np.nan))): + return float(proc.fs_actual) + if not self._current_path or not self._current_channel: + return None + doric = self._loaded_files.get(self._current_path) + if doric is None: + return None + try: + trial = doric.make_trial(self._current_channel, trigger_name=self._current_trigger) + trial = self._apply_time_window(trial) + fs = float(trial.sampling_rate) + return fs if np.isfinite(fs) else None + except Exception: + return None + + def _show_status_message(self, message: str, timeout_ms: int = 0) -> None: + sb = getattr(self, "_status_bar", None) + if not isinstance(sb, QtWidgets.QStatusBar): + attr = getattr(self, "statusBar", None) + if callable(attr): + try: + sb = attr() + except Exception: + sb = None + elif isinstance(attr, QtWidgets.QStatusBar): + sb = attr + if not isinstance(sb, QtWidgets.QStatusBar): + return + try: + sb.showMessage(str(message), int(timeout_ms)) + except Exception: + pass + + def _update_plot_status(self, fs_actual: Optional[float] = None, fs_target: Optional[float] = None) -> None: + channel = self._current_channel or "-" + trig = self._current_trigger or "None" + mode = "-" + target = fs_target + try: + p = self.param_panel.get_params() + mode = str(p.output_mode) + if target is None: + target = float(p.target_fs_hz) + except Exception: + pass + if fs_actual is None: + fs_actual = self._current_fs_actual() + + status = ( + f"Channel: {channel} | A/D: {trig} | Fs: {self._fmt_fs(fs_actual)} -> " + f"{self._fmt_fs(target)} Hz | Mode: {mode}" + ) + self._show_status_message(status, 30000) + def _on_file_selection_changed(self) -> None: sel = self._selected_paths() if not sel: @@ -459,6 +2473,9 @@ def _on_file_selection_changed(self) -> None: if not sel: self._current_path = None self._current_channel = None + self._current_trigger = None + self.plots.set_title("No file loaded") + self._update_plot_status() return # preview shows first selected @@ -470,7 +2487,7 @@ def _on_file_selection_changed(self) -> None: return self.file_panel.set_available_channels(doric.channels) - self.file_panel.set_available_triggers(sorted(doric.digital_by_name.keys())) + self.file_panel.set_available_triggers(sorted(doric.trigger_by_name.keys())) # keep channel if still valid if self._current_channel in doric.channels: @@ -481,7 +2498,7 @@ def _on_file_selection_changed(self) -> None: self.file_panel.set_channel(self._current_channel) # keep trigger if still valid - if self._current_trigger and self._current_trigger not in doric.digital_by_name: + if self._current_trigger and self._current_trigger not in doric.trigger_by_name: self._current_trigger = None self.file_panel.set_trigger("") @@ -490,16 +2507,19 @@ def _on_file_selection_changed(self) -> None: # update post tab selection context self.post_tab.set_current_source_label(os.path.basename(path), self._current_channel or "") + self._update_plot_status() def _on_channel_changed(self, ch: str) -> None: self._current_channel = ch self._update_raw_plot() self._trigger_preview() self.post_tab.set_current_source_label(os.path.basename(self._current_path or ""), self._current_channel or "") + self._update_plot_status() def _on_trigger_changed(self, trig: str) -> None: self._current_trigger = trig if trig else None self._update_raw_plot() + self._update_plot_status() def _on_time_window_changed(self) -> None: self._last_processed.clear() @@ -514,6 +2534,7 @@ def _on_time_window_changed(self) -> None: self.artifact_panel.set_regions(manual_win) self._update_raw_plot() self._trigger_preview() + self._update_plot_status() def _open_advanced_options(self) -> None: key = self._current_key() @@ -850,6 +2871,7 @@ def _update_raw_plot(self) -> None: trig_label=self._current_trigger or "", manual_regions=manual, ) + self._update_plot_status(fs_actual=float(trial.sampling_rate), fs_target=float(params.target_fs_hz)) # ---------------- Preview processing (worker) ---------------- @@ -868,6 +2890,7 @@ def _on_params_changed(self) -> None: except Exception: self._trigger_preview() return + self._update_plot_status(fs_target=float(params.target_fs_hz)) sig = self._artifact_param_signature(params) if self._last_artifact_params is None: self._last_artifact_params = sig @@ -913,10 +2936,11 @@ def _start_preview_processing(self) -> None: job_id = self._job_counter self._latest_job_id = job_id - self.plots.set_log( - f"Processing preview… (fs={trial.sampling_rate:.2f} Hz → target {params.target_fs_hz:.1f} Hz, " + self._show_status_message( + f"Processing preview... (fs={trial.sampling_rate:.2f} Hz -> target {params.target_fs_hz:.1f} Hz, " f"baseline={params.baseline_method})" ) + self._update_plot_status(fs_actual=float(trial.sampling_rate), fs_target=float(params.target_fs_hz)) task = self.processor.make_preview_task( trial=trial, @@ -951,31 +2975,18 @@ def _on_preview_finished(self, processed: ProcessedTrial, job_id: int, elapsed_s manual_regs = self._clip_regions_to_window(self._manual_regions_by_key.get(key, []), start_s, end_s) self.artifact_panel.set_regions(manual_regs) - # Preserve current x/y ranges before updating plots - current_xrange = None - try: - # Get current x range from the first plot - view_box = self.plots.plot_raw.getViewBox() - if view_box: - x_range = view_box.viewRange()[0] # x axis range - current_xrange = (x_range[0], x_range[1]) - except Exception: - pass - # Update plots (decimated signals) self.plots.update_plots(processed) + # Auto-range on each update so file/time-window changes do not require manual reset. + self._auto_range_for_processed(processed) - # Restore x range if it was preserved - if current_xrange is not None: - try: - self.plots.set_xrange_all(current_xrange[0], current_xrange[1]) - except Exception: - pass - - self.plots.set_log( - f"Preview updated: {processed.output_label} | fs={processed.fs_actual:.2f}→{processed.fs_used:.2f} Hz " + log_msg = ( + f"Preview updated: {processed.output_label} | fs={processed.fs_actual:.2f}->{processed.fs_used:.2f} Hz " f"(target {processed.fs_target:.2f}) | n={processed.time.size} | {elapsed_s*1000:.0f} ms" ) + self._show_status_message(log_msg, 10000) + self.param_panel.set_fs_info(processed.fs_actual, processed.fs_target, processed.fs_used) + self._update_plot_status(fs_actual=float(processed.fs_actual), fs_target=float(processed.fs_target)) # Inform post tab that current processed changed self.post_tab.notify_preprocessing_updated(processed) @@ -984,7 +2995,7 @@ def _on_preview_finished(self, processed: ProcessedTrial, job_id: int, elapsed_s def _on_preview_failed(self, err: str, job_id: int) -> None: if job_id != self._latest_job_id: return - self.plots.set_log(f"Preview error: {err}") + self._show_status_message(f"Preview error: {err}") # ---------------- Manual artifacts ---------------- @@ -1080,7 +3091,7 @@ def _clear_manual_regions_current(self) -> None: def _request_box_select(self, callback: Callable[[float, float], None]) -> None: self._box_select_callback = callback self.plots.btn_box_select.setChecked(True) - self.plots.set_log("Box select: drag on the raw plot to set the time window; right-click to cancel.") + self._show_status_message("Box select: drag on the raw plot to set the time window; right-click to cancel.") def _cancel_box_select_request(self) -> None: if not self._box_select_callback: @@ -1110,9 +3121,11 @@ def _contains(target: Tuple[float, float], arr: List[Tuple[float, float]]) -> bo def _toggle_artifacts_panel(self) -> None: if self.art_dock.isVisible(): self.art_dock.setVisible(False) + self._save_panel_layout_state() return self.artifact_panel.show() self.art_dock.setVisible(True) + self._save_panel_layout_state() # ---------------- Metadata ---------------- @@ -1271,7 +3284,7 @@ def _export_one(proc: ProcessedTrial, suffix: str = "") -> None: except Exception as e: QtWidgets.QMessageBox.warning(self, "Export error", f"Failed export:\n{path} [{ch}]\n\n{e}") - self.plots.set_log(f"Export complete: {n_total} recording(s) written to {out_dir}") + self._show_status_message(f"Export complete: {n_total} recording(s) written to {out_dir}") # optional: update post tab list by loading exported results? (user can load later) @@ -1324,7 +3337,7 @@ def _post_get_current_processed(self): @QtCore.Slot() def _post_get_current_dio_list(self): - # DIO list for current/selected files: intersection or union; easiest = union + # Analog/digital channel list for current/selected files: union. paths = self._selected_paths() if not paths: paths = [self._current_path] if self._current_path else [] @@ -1333,7 +3346,7 @@ def _post_get_current_dio_list(self): for p in paths: f = self._loaded_files.get(p) if f: - dio |= set(f.digital_by_name.keys()) + dio |= set(f.trigger_by_name.keys()) self.post_tab.receive_dio_list(sorted(dio)) @QtCore.Slot(str, str) @@ -1349,23 +3362,34 @@ def _post_get_dio_data_for_path(self, path: str, dio_name: str): if f is None: return - # digital_time may be a numpy array - if getattr(f, "digital_time", None) is None: + trigger_map = getattr(f, "trigger_by_name", None) + if not isinstance(trigger_map, dict) or dio_name not in trigger_map: return - t_dio = np.asarray(f.digital_time) - if t_dio.size == 0: + y_dio = np.asarray(trigger_map[dio_name], float) + if y_dio.size == 0: return - digital_map = getattr(f, "digital_by_name", None) - if not isinstance(digital_map, dict) or dio_name not in digital_map: + t_map = getattr(f, "trigger_time_by_name", None) + t_dio = None + if isinstance(t_map, dict): + t_dio = t_map.get(dio_name) + if t_dio is None and getattr(f, "digital_time", None) is not None and dio_name in getattr(f, "digital_by_name", {}): + t_dio = f.digital_time + if t_dio is None: + # Fallback: use any analog channel timebase with matching length. + for t_candidate in getattr(f, "time_by_channel", {}).values(): + arr = np.asarray(t_candidate, float) + if arr.size == y_dio.size: + t_dio = arr + break + if t_dio is None: return - - y_dio = np.asarray(digital_map[dio_name]) - if y_dio.size == 0: + t_dio = np.asarray(t_dio, float) + if t_dio.size == 0: return - # Ensure same length + # Ensure same length. n = min(t_dio.size, y_dio.size) t_dio = t_dio[:n] y_dio = y_dio[:n] @@ -1458,7 +3482,7 @@ def _find_col(names: List[str]) -> Optional[int]: return None time_idx = header.index("time") if "time" in header else None - output_idx = _find_col(["dff", "z-score", "zscore", "z score", "output"]) + output_idx = _find_col(["dff", "z-score", "zscore", "z score", "output", "raw_signal", "raw_465"]) has_header = time_idx is not None and output_idx is not None raw_idx = _find_col(["raw", "raw_465", "signal", "signal_465"]) if has_header else None @@ -1519,6 +3543,8 @@ def _find_col(names: List[str]) -> Optional[int]: col = "z-score" elif col == "dff": col = "dFF" + elif col == "raw_signal": + col = "Raw signal (465)" output_label = f"Imported CSV ({col})" return ProcessedTrial( @@ -1599,7 +3625,37 @@ def _load_processed_h5(self, path: str) -> Optional[ProcessedTrial]: ) def closeEvent(self, event): + try: + self.post_tab.mark_app_closing() + except Exception: + pass + try: + current = self.tabs.currentWidget() if hasattr(self, "tabs") else None + if current is self.pre_tab: + # Closing on preprocessing: capture the live preprocessing dock topology. + self._store_pre_main_dock_snapshot() + else: + # Closing on postprocessing: preprocessing docks are hidden by tab switch. + self._persist_hidden_preprocessing_layout_state() + except Exception: + pass + try: + # Persist post layout from live state or cached tab-switch state without + # overwriting it with preprocessing topology. + self.post_tab.persist_layout_state_snapshot() + except Exception: + pass + try: + self.post_tab._on_about_to_quit() + except Exception: + pass + self._save_panel_layout_state() + self._save_panel_config_json() self._save_settings() + try: + self.settings.sync() + except Exception: + pass super().closeEvent(event) diff --git a/pyBer/styles.py b/pyBer/styles.py index 8c61fcd..2398e27 100644 --- a/pyBer/styles.py +++ b/pyBer/styles.py @@ -1,169 +1,352 @@ # styles.py APP_QSS = r""" -/* Base */ -QWidget { - background: #0f141b; - color: #e6eefc; - font-family: Segoe UI, Arial, sans-serif; +/* Adobe-like dark palette */ +QMainWindow, QWidget { + background: #1f2229; + color: #f3f5f8; + font-family: "Segoe UI", "Arial", sans-serif; font-size: 9.5pt; } +QLabel { + color: #f3f5f8; +} + +QLabel[class="hint"] { + color: #aeb6c5; + font-size: 8.9pt; +} + +/* Panels */ QGroupBox { - border: 1px solid #1f2a38; - border-radius: 10px; + border: 1px solid #3a4050; + border-radius: 8px; margin-top: 10px; padding: 10px; - background: #0f141b; + background: #262b35; } QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; - padding: 0 6px; - color: #cfe0ff; + padding: 0 7px; + color: #f3f5f8; font-weight: 700; } -/* Lists */ -QListWidget { - background: #0b1016; - border: 1px solid #1f2a38; - border-radius: 10px; - padding: 6px; +QFrame { + border-color: #3a4050; +} + +/* Lists and tables */ +QListWidget, QTableWidget { + background: #20242d; + border: 1px solid #3a4050; + border-radius: 7px; + padding: 4px; + gridline-color: #343a47; } -QListWidget::item:selected { - background: #1b3558; + +QListWidget::item, QTableWidget::item { + padding: 2px 4px; +} + +QListWidget::item:selected, QTableWidget::item:selected { + background: #1d4f80; color: #ffffff; - border-radius: 6px; + border-radius: 4px; +} + +QHeaderView::section { + background: #2b303b; + color: #ecf0f6; + border: 1px solid #3a4050; + padding: 4px 6px; + font-weight: 600; } /* Inputs */ QLineEdit, QAbstractSpinBox, QDoubleSpinBox, QSpinBox, QComboBox { - background: #0b1016; - color: #e6eefc; - border: 1px solid #26364a; - border-radius: 8px; - padding: 6px 8px; - selection-background-color: #2a66b3; + background: #1b2029; + color: #f3f5f8; + border: 1px solid #4a5163; + border-radius: 6px; + padding: 5px 8px; + selection-background-color: #2680eb; selection-color: #ffffff; + min-height: 20px; +} + +QLineEdit:focus, QAbstractSpinBox:focus, QComboBox:focus { + border: 1px solid #378ef0; } QComboBox::drop-down { - border-left: 1px solid #26364a; - width: 24px; + border-left: 1px solid #4a5163; + width: 20px; } + QComboBox QAbstractItemView { - background: #0b1016; - color: #e6eefc; - border: 1px solid #26364a; - selection-background-color: #1b3558; + background: #1f242e; + color: #f3f5f8; + border: 1px solid #4a5163; + selection-background-color: #1d4f80; +} + +QCheckBox { + spacing: 6px; +} + +QCheckBox::indicator { + width: 14px; + height: 14px; + border-radius: 3px; + border: 1px solid #5a6274; + background: #1b2029; +} + +QCheckBox::indicator:checked { + background: #2680eb; + border: 1px solid #378ef0; } /* Buttons */ QPushButton { - background: #162030; - border: 1px solid #2a3c55; - border-radius: 10px; - padding: 10px 12px; + background: #2b303b; + border: 1px solid #4a5163; + border-radius: 7px; + padding: 8px 12px; font-weight: 600; + color: #f3f5f8; } + QPushButton:hover { - background: #1b2a3f; + background: #343a48; + border: 1px solid #5b6480; } + QPushButton:pressed { - background: #122033; + background: #232833; +} + +QPushButton:disabled { + color: #858f9f; + background: #252a33; + border: 1px solid #373d4a; } QPushButton[class="compact"] { - padding: 6px 10px; - border-radius: 9px; + padding: 5px 10px; + border-radius: 7px; font-weight: 600; } + QPushButton[class="compactSmall"] { - padding: 2px 6px; - border-radius: 8px; + padding: 2px 7px; + border-radius: 6px; font-weight: 600; - font-size: 8.0pt; + font-size: 8.2pt; min-height: 18px; } + +QPushButton[class="compactPrimary"], +QPushButton[class="compactPrimarySmall"], +QPushButton[class="bluePrimarySmall"] { + background: #2680eb; + border: 1px solid #378ef0; + color: #ffffff; + font-weight: 700; +} + QPushButton[class="compactPrimary"] { - padding: 6px 10px; - border-radius: 9px; - font-weight: 800; - background: #254a7a; - border: 1px solid #2f6bb3; -} -QPushButton[class="compactPrimarySmall"] { - padding: 2px 6px; - border-radius: 8px; - font-weight: 800; - font-size: 8.0pt; - background: #254a7a; - border: 1px solid #2f6bb3; + padding: 5px 10px; + border-radius: 7px; } -QPushButton[class="compactPrimarySmall"]::text { - text-align: left; + +QPushButton[class="compactPrimarySmall"], +QPushButton[class="bluePrimarySmall"] { + padding: 2px 7px; + border-radius: 6px; + font-size: 8.2pt; + min-height: 18px; +} + +QPushButton[class="compactPrimary"]:hover, +QPushButton[class="compactPrimarySmall"]:hover, +QPushButton[class="bluePrimarySmall"]:hover { + background: #378ef0; + border: 1px solid #4b9df8; } -QPushButton[class="compactPrimarySmall"]:hover { - background: #2b5a96; + +QPushButton[class="compactPrimary"]:pressed, +QPushButton[class="compactPrimarySmall"]:pressed, +QPushButton[class="bluePrimarySmall"]:pressed { + background: #1473e6; + border: 1px solid #2680eb; } -QPushButton[class="compactPrimary"]:hover { - background: #2b5a96; + +QPushButton[class="blueSecondarySmall"] { + padding: 2px 7px; + border-radius: 6px; + font-weight: 600; + font-size: 8.2pt; + min-height: 18px; + background: #2b303b; + border: 1px solid #4a5163; + color: #eef2f7; +} + +QPushButton[class="blueSecondarySmall"]:hover { + background: #343a48; + border: 1px solid #5b6480; } + +QPushButton[class="blueSecondarySmall"]:pressed { + background: #232833; +} + +QPushButton[class="blueSecondarySmall"]:checked, +QPushButton[class="sectionButton"]:checked { + background: #2680eb; + border: 1px solid #378ef0; + color: #ffffff; +} + +QPushButton[class="sectionButton"] { + padding: 3px 9px; + border-radius: 6px; + font-weight: 600; + font-size: 8.4pt; + background: #2b303b; + border: 1px solid #4a5163; + text-align: left; +} + +QPushButton[class="sectionButton"]:hover { + background: #343a48; +} + QPushButton[class="help"] { padding: 0; - border-radius: 11px; - min-width: 22px; - max-width: 22px; - min-height: 22px; - max-height: 22px; - font-weight: 800; - background: #1b2a3f; - border: 1px solid #2a3c55; + border-radius: 10px; + min-width: 20px; + max-width: 20px; + min-height: 20px; + max-height: 20px; + font-weight: 700; + background: #2f3543; + border: 1px solid #4d5568; } /* Tabs */ QTabWidget::pane { - border: 1px solid #1f2a38; - border-radius: 10px; + border: 1px solid #363c4a; + border-radius: 8px; + background: #1f2229; padding: 2px; } + QTabBar::tab { - background: #121a25; - border: 1px solid #1f2a38; + background: #2b303b; + border: 1px solid #3b4150; border-bottom: none; - padding: 10px 14px; - border-top-left-radius: 10px; - border-top-right-radius: 10px; + padding: 8px 12px; + border-top-left-radius: 8px; + border-top-right-radius: 8px; margin-right: 2px; - font-weight: 700; - color: #b8c9e8; + font-weight: 600; + color: #bcc5d6; +} + +QTabBar::tab:hover { + background: #343a48; } + QTabBar::tab:selected { - background: #0f141b; + background: #1f2229; color: #ffffff; + border-color: #4a5163; } -/* Scroll */ -QScrollArea { - border: none; +/* Menus and tool buttons */ +QMenu { + background: #2b303b; + color: #f3f5f8; + border: 1px solid #41495a; } -/* Dock */ +QMenu::item { + padding: 6px 16px; +} + +QMenu::item:selected { + background: #1d4f80; +} + +QToolButton { + background: #2b303b; + border: 1px solid #4a5163; + border-radius: 6px; + padding: 3px 7px; +} + +QToolButton:hover { + background: #343a48; +} + +/* Docking and splitters */ QDockWidget { - background: #0f141b; - color: #e6eefc; + background: #242a34; + color: #f3f5f8; + border: 1px solid #3b4150; } + QDockWidget::title { - background: #121a25; - padding: 6px; + background: #2d3340; + border-bottom: 1px solid #3b4150; + padding: 6px 8px; + text-align: left; font-weight: 700; } -/* Hints/log */ -QLabel[class="hint"] { - color: #aab4c4; - font-size: 9.0pt; +QDockWidget QWidget { + background: #242a34; +} + +QMainWindow::separator { + background: #3f4758; + width: 2px; + height: 2px; +} + +QMainWindow::separator:hover { + background: #2680eb; +} + +QSplitter::handle { + background: #3f4758; +} + +QSplitter::handle:hover { + background: #2680eb; +} + +QScrollArea { + border: none; +} + +/* Plot frame support */ +QGraphicsView { + background: #121722; + border: 1px solid #313746; + border-radius: 6px; +} + +QToolTip { + background: #2d3442; + color: #f3f5f8; + border: 1px solid #4a5163; + padding: 4px 6px; } """ From 98ade9167553ae129f090c650455f1580fa173c9 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Feb 2026 19:04:13 +0100 Subject: [PATCH 02/28] UI improvements for the post-processing tab, including a new "Save" button to save the processed image, and a "Reset" button to clear the current image and reset the post-processing settings. Additionally, added a dropdown menu to select different post-processing filters, and updated the layout for better user experience. --- panel_layout.json | 36 +++++++------- .../gui_postprocessing.cpython-38.pyc | Bin 123425 -> 124016 bytes pyBer/gui_postprocessing.py | 47 ++++++++++++++++-- pyBer/main.py | 2 - 4 files changed, 60 insertions(+), 25 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index 22e92e7..f136a7d 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -13,50 +13,50 @@ "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8hP///gv///4L" + "geometry": "AdnQywADAAD///wt///8Sv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Sv///gv///4L" }, "filtering": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///7sf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///7sf///gv///4L" + "geometry": "AdnQywADAAD///wt///7UP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///7UP///gv///4L" }, "baseline": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAACogAABjEAAAPQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAACogAABjEAAAPQ" + "geometry": "AdnQywADAAAAAAWhAAACEQAAB38AAAL2AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACEQAAB38AAAL2" }, "output": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///87P///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///87P///gv///4L" + "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8nf///gv///4L" }, "qc": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///87P///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///87P///gv///4L" + "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8nf///gv///4L" }, "export": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAD9QAABjEAAASPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAD9QAABjEAAASP" + "geometry": "AdnQywADAAAAAAWhAAADGwAAB38AAAOTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGwAAB38AAAOT" }, "config": { "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAEkgAABjEAAATWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAEkgAABjEAAATW" + "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADlgAAB38AAAPa" } }, "artifact": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAAJ9AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAAAAAABjEAAAJ9" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAHsAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAHs" } }, "post": { @@ -64,33 +64,33 @@ "sections": { "setup": { "visible": true, - "floating": true, + "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB1gAADNkAAAOMAAAKoAAAAfUAAAzZAAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADNkAAAOM" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" }, "psth": { "visible": true, - "floating": true, + "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB1gAADJgAAAOMAAAKoAAAAfUAAAyYAAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADJgAAAOM" + "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///81v///gv///4L" }, "signal": { "visible": true, - "floating": true, + "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB1gAADBQAAAOMAAAKoAAAAfUAAAwUAAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADBQAAAOM" + "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///81v///gv///4L" }, "behavior": { "visible": true, - "floating": true, + "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB1gAADHcAAAOMAAAKoAAAAfUAAAx3AAADjAAAAAIAAAAAB4AAAAqgAAAB9QAADHcAAAOM" + "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///81v///gv///4L" }, "export": { "visible": true, - "floating": true, + "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAqgAAAB1gAAC98AAAKYAAAKoAAAAfUAAAvfAAACmAAAAAIAAAAAB4AAAAqgAAAB9QAAC98AAAKY" + "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" } } } diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc index 2b2f2db6bfcb4ce0da095b129f7d2b0deb189bfa..2e5ebd2a3bc5688f8bc45fe8a448f3c78f9ca094 100644 GIT binary patch delta 14977 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 delta 14408 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 diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 17fb89b..c1a54a5 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -1351,6 +1351,8 @@ def _setup_section_popups(self) -> None: dock.hide() self._section_popups[key] = dock + self._apply_fixed_dock_features() + # If popups become available after delayed host attachment, restore once here. if self._panel_layout_persistence_ready and not self._dock_layout_restored: self._restore_panel_layout_state() @@ -1372,6 +1374,28 @@ def _set_section_button_checked(self, key: str, checked: bool) -> None: btn.setChecked(bool(checked)) btn.blockSignals(False) + def _apply_fixed_dock_features(self) -> None: + if not self._section_popups: + return + for dock in self._section_popups.values(): + if dock is None: + continue + if self._force_fixed_default_layout: + features = ( + QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable + ) + else: + features = ( + QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetFloatable + ) + try: + dock.setFeatures(features) + except Exception: + pass + def _toggle_section_popup(self, key: str, checked: bool) -> None: if not self._section_popups: self._setup_section_popups() @@ -4260,9 +4284,9 @@ def showEvent(self, event: QtGui.QShowEvent) -> None: # Defer until the widget is fully attached to a main-window host. QtCore.QTimer.singleShot(0, self._setup_section_popups) if self._force_fixed_default_layout and self._section_popups: - # Always enforce fixed docking on show to override any late floating restores. - self.apply_fixed_default_layout() - self._dock_layout_restored = True + if not self._dock_layout_restored: + self.apply_fixed_default_layout() + self._dock_layout_restored = True elif not self._dock_layout_restored and self._section_popups: self._restore_panel_layout_state() self._dock_layout_restored = True @@ -4378,6 +4402,7 @@ def mark_app_closing(self) -> None: def set_force_fixed_default_layout(self, enabled: bool) -> None: self._force_fixed_default_layout = bool(enabled) + self._apply_fixed_dock_features() def apply_fixed_default_layout(self) -> None: """ @@ -4396,6 +4421,7 @@ def apply_fixed_default_layout(self) -> None: self._suspend_panel_layout_persistence = True try: + self._apply_fixed_dock_features() # Reset previous split/tab topology before rebuilding the fixed stack. for key in ("setup", "psth", "signal", "behavior", "export"): dock = self._section_popups.get(key) @@ -4412,8 +4438,8 @@ def apply_fixed_default_layout(self) -> None: continue dock.blockSignals(True) try: - dock.setFloating(False) host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) + dock.setFloating(False) dock.show() finally: dock.blockSignals(False) @@ -4421,8 +4447,8 @@ def apply_fixed_default_layout(self) -> None: if export is not None: export.blockSignals(True) try: - export.setFloating(False) host.addDockWidget(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, export) + export.setFloating(False) export.show() finally: export.blockSignals(False) @@ -4445,6 +4471,17 @@ def apply_fixed_default_layout(self) -> None: if export is not None: export.raise_() + # Final hard enforcement: all post docks must be docked (non-floating). + for key in ("setup", "psth", "signal", "behavior", "export"): + dock = self._section_popups.get(key) + if dock is None: + continue + try: + if dock.isFloating(): + dock.setFloating(False) + except Exception: + pass + self._sync_section_button_states_from_docks() self._post_docks_hidden_for_tab_switch = False self._post_section_visibility_before_hide.clear() diff --git a/pyBer/main.py b/pyBer/main.py index f6cac33..28031a1 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -2319,8 +2319,6 @@ def _on_main_tab_changed(self, index: int) -> None: self.post_tab.ensure_section_popups_initialized() if hasattr(self.post_tab, "apply_fixed_default_layout"): self.post_tab.apply_fixed_default_layout() - # Re-apply after queued dock events from tab switch. - QtCore.QTimer.singleShot(0, self.post_tab.apply_fixed_default_layout) except Exception: _LOG.exception("Failed to apply fixed post layout on tab switch") self._enforce_only_tab_docks_visible("post") From b52f65f2a45824ccbf548e71aab9a9a9a97a5d45 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Feb 2026 19:14:52 +0100 Subject: [PATCH 03/28] UI modification --- panel_layout.json | 26 +++++++++++++------------- pyBer/main.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index f136a7d..d40a69b 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -13,50 +13,50 @@ "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Sv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Sv///gv///4L" + "geometry": "AdnQywADAAD///wt///8Sv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Sv///gv///4L" }, "filtering": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///7UP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///7UP///gv///4L" + "geometry": "AdnQywADAAD///wt///7UP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///7UP///gv///4L" }, "baseline": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAACEQAAB38AAAL2AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACEQAAB38AAAL2" + "geometry": "AdnQywADAAAAAAWhAAADgAAAB38AAAUdAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAADgAAAB38AAAUd" }, "output": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8nf///gv///4L" + "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8nf///gv///4L" }, "qc": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8nf///gv///4L" + "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8nf///gv///4L" }, "export": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADGwAAB38AAAOTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGwAAB38AAAOT" + "geometry": "AdnQywADAAAAAAWhAAAFQgAAB38AAAYPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAFQgAAB38AAAYP" }, "config": { "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADlgAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAAGEgAAB38AAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGEgAAB38AAAZW" } }, "artifact": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAHsAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAHs" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAANb" } }, "post": { @@ -66,31 +66,31 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAXQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAAXQ" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///81v///gv///4L" + "geometry": "AdnQywADAAD///wt///61////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///61////gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///81v///gv///4L" + "geometry": "AdnQywADAAD///wt///61////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///61////gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///81v///gv///4L" + "geometry": "AdnQywADAAD///wt///61////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///61////gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAAF9QAAB38AAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAF9QAAB38AAAZW" } } } diff --git a/pyBer/main.py b/pyBer/main.py index 28031a1..39abf52 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -110,6 +110,11 @@ def _to_bool(value: object, default: bool = False) -> bool: _LOG = logging.getLogger(__name__) +def _pyber_icon_path() -> str: + base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + return os.path.join(base_dir, "assets", "pyBer_logo_big.png") + + def _rolling_corr(x: np.ndarray, y: np.ndarray, win: int) -> Tuple[np.ndarray, np.ndarray]: x = np.asarray(x, float) y = np.asarray(y, float) @@ -262,6 +267,14 @@ class MainWindow(QtWidgets.QMainWindow): def __init__(self) -> None: super().__init__() self.setWindowTitle("Pyber - Fiber Photometry") + try: + icon_path = _pyber_icon_path() + if os.path.isfile(icon_path): + icon = QtGui.QIcon(icon_path) + if not icon.isNull(): + self.setWindowIcon(icon) + except Exception: + pass self.resize(1500, 900) self.setDockOptions( QtWidgets.QMainWindow.DockOption.AllowNestedDocks @@ -3660,8 +3673,28 @@ def closeEvent(self, event): def main() -> None: pg.setConfigOptions(antialias=True) app = QtWidgets.QApplication([]) + icon_path = _pyber_icon_path() + try: + if os.path.isfile(icon_path): + app_icon = QtGui.QIcon(icon_path) + if not app_icon.isNull(): + app.setWindowIcon(app_icon) + except Exception: + pass + splash = None + try: + if os.path.isfile(icon_path): + pix = QtGui.QPixmap(icon_path) + if not pix.isNull(): + splash = QtWidgets.QSplashScreen(pix, QtCore.Qt.WindowType.WindowStaysOnTopHint) + splash.show() + app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) + except Exception: + splash = None w = MainWindow() w.show() + if splash is not None: + splash.finish(w) app.exec() From 9c86afaf7252712d94fa778cc14caed64cb82dff Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Feb 2026 19:26:49 +0100 Subject: [PATCH 04/28] improved gui performance by ensuring fullscreen is set after the window is shown --- panel_layout.json | 47 ++++++++++++++++++++++++++++++++--------------- pyBer/main.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 15 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index d40a69b..8fd8032 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -7,56 +7,73 @@ 317 ], "pre_main_dock_state": "", - "tab_groups": [], + "tab_groups": [ + { + "members": [ + "pre.artifact.dock", + "pre.artifacts.dock", + "pre.filtering.dock" + ], + "active": "pre.artifact.dock" + }, + { + "members": [ + "pre.baseline.dock", + "pre.output.dock", + "pre.qc.dock" + ], + "active": "pre.baseline.dock" + } + ], "sections": { "artifacts": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///8Sv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Sv///gv///4L" }, "filtering": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///7UP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///7UP///gv///4L" }, "baseline": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADgAAAB38AAAUdAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAADgAAAB38AAAUd" + "geometry": "AdnQywADAAAAAARTAAADgAAABjEAAAUdAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAADgAAABjEAAAUd" }, "output": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8nf///gv///4L" }, "qc": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8nf///gv///4L" }, "export": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAFQgAAB38AAAYPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAFQgAAB38AAAYP" + "geometry": "AdnQywADAAAAAARTAAAFQgAABjEAAAYPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAFQgAABjEAAAYP" }, "config": { - "visible": false, + "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAGEgAAB38AAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGEgAAB38AAAZW" + "geometry": "AdnQywADAAAAAAAAAAAGEgAABjEAAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGEgAABjEAAAZW" } }, "artifact": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAANb" + "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAANbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAAAAAABjEAAANb" } }, "post": { @@ -66,7 +83,7 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAXQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAAXQ" + "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAAXQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAAAAAABjEAAAXQ" }, "psth": { "visible": true, @@ -90,7 +107,7 @@ "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAF9QAAB38AAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAF9QAAB38AAAZW" + "geometry": "AdnQywADAAAAAAAAAAAF9QAABjEAAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAF9QAABjEAAAZW" } } } diff --git a/pyBer/main.py b/pyBer/main.py index 39abf52..ce5f2cb 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -2307,10 +2307,39 @@ def _restore_preprocessing_popups_after_tab_switch(self) -> None: self._enforce_postprocessing_popups_hidden() self._save_panel_layout_state() + def _restore_window_state_after_tab_switch(self, was_fullscreen: bool, was_maximized: bool) -> None: + """ + Keep the top-level window mode stable across heavy dock add/remove/tabify + operations triggered by main-tab switches. + """ + if was_fullscreen: + if self.isFullScreen(): + return + + def _ensure_fullscreen() -> None: + if not self.isFullScreen(): + self.showFullScreen() + + try: + _ensure_fullscreen() + QtCore.QTimer.singleShot(0, _ensure_fullscreen) + QtCore.QTimer.singleShot(120, _ensure_fullscreen) + except Exception: + pass + return + + if was_maximized and not self.isMaximized() and not self.isFullScreen(): + try: + self.showMaximized() + except Exception: + pass + def _on_main_tab_changed(self, index: int) -> None: if self._handling_main_tab_change: return self._handling_main_tab_change = True + was_fullscreen = bool(self.isFullScreen()) + was_maximized = bool(self.isMaximized()) try: current = self.tabs.widget(index) if self._force_fixed_dock_layouts: @@ -2382,6 +2411,7 @@ def _on_main_tab_changed(self, index: int) -> None: except Exception: _LOG.exception("Failed to handle main tab switch") finally: + self._restore_window_state_after_tab_switch(was_fullscreen, was_maximized) self._handling_main_tab_change = False def _on_artifact_overlay_toggled(self, visible: bool) -> None: From 5bb18aba125a62d4e4ba80dbff806ce70646e4cc Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Feb 2026 19:32:18 +0100 Subject: [PATCH 05/28] updated environment.yml to include pyqt5 and pyqtwebengine for better support of the GUI components. This should enhance the user experience and provide more stability when running the application on different platforms. --- environment.yml | 55 +++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/environment.yml b/environment.yml index 163423f..98e68f6 100644 --- a/environment.yml +++ b/environment.yml @@ -1,37 +1,28 @@ -name: pyBer -channels: - - conda-forge - - defaults - -dependencies: - # Core interpreter - - python=3.11 - - # Numeric + signal processing - - numpy>=1.24 - - scipy>=1.10 - - pyqtgraph>=0.13 - # File IO (Doric H5) - - h5py>=3.9 - - # Baseline correction - - pybaselines>=1.1 - - # GUI - - pyside6>=6.6 - - - - scikit-learn>=1.3 - - # Quality-of-life / packaging - - pip - - setuptools - - wheel - - - - matplotlib>=3.8 +name: pyBer +channels: + - conda-forge +dependencies: + # Core + - python=3.11 + # Numeric and signal processing + - numpy>=1.24 + - scipy>=1.10 + - h5py>=3.9 + - scikit-learn>=1.3 + - pybaselines>=1.1 - pandas>=2.0 + - openpyxl>=3.1 + + # GUI + - pyside6>=6.6 + - pyqtgraph>=0.13 + - matplotlib>=3.8 + + # Quality-of-life / packaging + - pip + - setuptools + - wheel - pyinstaller>=6.0 - pyinstaller-hooks-contrib>=2024.0 From 88d715828f85b10d08cd253e595dd8f4027d58a0 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Feb 2026 20:22:15 +0100 Subject: [PATCH 06/28] new filtering method for panel layout, added a new function to analysis_core to filter the data based on the new method, and updated the main.py and gui_preprocessing.py to use the new filtering method. --- panel_layout.json | 24 ++--- .../__pycache__/analysis_core.cpython-311.pyc | Bin 52960 -> 60156 bytes pyBer/analysis_core.py | 98 +++++++++++++++++- pyBer/gui_preprocessing.py | 74 +++++++++++++ pyBer/main.py | 90 ++++++++-------- 5 files changed, 227 insertions(+), 59 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index 8fd8032..a1a7ae8 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -1,10 +1,10 @@ { "version": 3, "pre": { - "pre_data_panel_visible": false, + "pre_data_panel_visible": true, "pre_splitter_sizes": [ - 317, - 317 + 0, + 1413 ], "pre_main_dock_state": "", "tab_groups": [ @@ -42,7 +42,7 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAADgAAABjEAAAUdAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAADgAAABjEAAAUd" + "geometry": "AdnQywADAAAAAAWhAAADgAAAB38AAAUdAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAADgAAAB38AAAUd" }, "output": { "visible": true, @@ -60,20 +60,20 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAFQgAABjEAAAYPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAFQgAABjEAAAYP" + "geometry": "AdnQywADAAAAAAWhAAAFQgAAB38AAAYPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAFQgAAB38AAAYP" }, "config": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAGEgAABjEAAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGEgAABjEAAAZW" + "geometry": "AdnQywADAAAAAAAAAAAGEgAAB38AAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGEgAAB38AAAZW" } }, "artifact": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAANbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAAAAAABjEAAANb" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAANb" } }, "post": { @@ -83,31 +83,31 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAAXQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAARTAAAAAAAABjEAAAXQ" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAANU" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///61////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///61////gv///4L" + "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///81v///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///61////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///61////gv///4L" + "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///81v///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///61////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///61////gv///4L" + "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///81v///gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAF9QAABjEAAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAF9QAABjEAAAZW" + "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAADeQAAB38AAAPa" } } } diff --git a/pyBer/__pycache__/analysis_core.cpython-311.pyc b/pyBer/__pycache__/analysis_core.cpython-311.pyc index ec75647e883e3bce120f27d46db0aaaa3a2a9b54..1b86e0aa44e7682ee0e04701cd9f4504943c4488 100644 GIT binary patch delta 17375 zcmcJ03s_snweH?}B9IUm2}wM~8)05HHhvpp9=3@Me#gd1Wm#Kb*&yMOFouYTq

Z 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 VkC?A&Eal!RO=(;vf2)oM{J)b?>JI<_ delta 11603 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 np.ndar return np.asarray(sosfiltfilt(sos, y), float) +def _window_samples_from_seconds( + fs: float, + window_s: float, + *, + minimum: int = 1, + require_odd: bool = False, +) -> int: + if not np.isfinite(fs) or fs <= 0: + return int(max(1, minimum)) + n = int(round(float(window_s) * float(fs))) + n = max(int(minimum), n) + if require_odd and (n % 2 == 0): + n += 1 + return int(n) + + +def _apply_optional_smoothing(x: np.ndarray, fs: float, params: ProcessingParams) -> np.ndarray: + """ + Optional smoothing stage applied on the processed timebase. + Supported methods: + - Savitzky-Golay + - Moving average + - Moving median + """ + y = np.asarray(x, float) + if y.size < 3: + return y + if not bool(getattr(params, "smoothing_enabled", False)): + return y + + method = str(getattr(params, "smoothing_method", "Savitzky-Golay") or "Savitzky-Golay").strip() + window_s = float(getattr(params, "smoothing_window_s", 0.0)) + if not np.isfinite(window_s) or window_s <= 0: + return y + + if np.any(~np.isfinite(y)): + y = interpolate_nans(y) + + if method.startswith("Savitzky"): + polyorder = int(max(1, getattr(params, "smoothing_polyorder", 2))) + win = _window_samples_from_seconds(fs, window_s, minimum=polyorder + 2, require_odd=True) + if win > y.size: + win = y.size if (y.size % 2 == 1) else max(1, y.size - 1) + if win <= polyorder: + polyorder = max(1, min(polyorder, win - 1)) + if win < 3 or win <= polyorder: + return y + try: + return np.asarray(savgol_filter(y, window_length=int(win), polyorder=int(polyorder), mode="interp"), float) + except Exception: + return y + + if method.startswith("Moving average"): + win = _window_samples_from_seconds(fs, window_s, minimum=1, require_odd=False) + if win <= 1: + return y + try: + return np.asarray(uniform_filter1d(y, size=int(win), mode="nearest"), float) + except Exception: + return y + + if method.startswith("Moving median"): + win = _window_samples_from_seconds(fs, window_s, minimum=3, require_odd=True) + if win > y.size: + win = y.size if (y.size % 2 == 1) else max(1, y.size - 1) + if win <= 1: + return y + try: + return np.asarray(median_filter(y, size=int(win), mode="nearest"), float) + except Exception: + return y + + return y + + def _compute_resample_ratio(fs: float, target_fs: float) -> Tuple[int, int, float]: """Compute a rational resampling ratio (up/down) limited to manageable denominators.""" from fractions import Fraction @@ -1013,6 +1099,8 @@ def process_trial( # 6) Resample signals together to target fs (only if true decimation) # --------------------------------------------------------------------- t2, sig2, ref2, fs_used = _resample_pair_to_target_fs(t, sig_f, ref_f, fs, target_fs) + sig2 = _apply_optional_smoothing(sig2, fs_used, params) + ref2 = _apply_optional_smoothing(ref2, fs_used, params) # Resample the envelope for display (same timebase as processed) _, hi2, lo2, _ = _resample_pair_to_target_fs(t, hi_raw, lo_raw, fs, target_fs) @@ -1108,6 +1196,14 @@ def process_trial( ): context_parts.append(f"Fit: {params.reference_fit}") context_parts.append(baseline_desc) + if bool(getattr(params, "smoothing_enabled", False)): + sm_method = str(getattr(params, "smoothing_method", "Savitzky-Golay") or "Savitzky-Golay") + sm_win = float(getattr(params, "smoothing_window_s", 0.0)) + sm_desc = f"Smoothing: {sm_method} (window={sm_win:.3g}s" + if sm_method.startswith("Savitzky"): + sm_desc += f", poly={int(getattr(params, 'smoothing_polyorder', 2))}" + sm_desc += ")" + context_parts.append(sm_desc) output_context = " | ".join(context_parts) # --------------------------------------------------------------------- diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index c8f9ade..74c1c02 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -15,6 +15,7 @@ OUTPUT_MODES, BASELINE_METHODS, REFERENCE_FIT_METHODS, + SMOOTHING_METHODS, ) @@ -1308,6 +1309,24 @@ def _build_help_texts(self) -> Dict[str, str]: "Target sampling rate (Hz) for decimation.\n" "Lower values speed processing and plotting but reduce time resolution." ), + "smoothing_enabled": ( + "Optional post-filter smoothing stage on the processed timebase.\n" + "Use it to reduce residual high-frequency noise after low-pass/resampling." + ), + "smoothing_method": ( + "Smoothing algorithm:\n" + "- Savitzky-Golay: polynomial local fit, preserves peak shapes.\n" + "- Moving average: uniform sliding mean.\n" + "- Moving median: robust to spikes and impulsive noise." + ), + "smoothing_window_s": ( + "Smoothing window in seconds.\n" + "Larger windows produce stronger smoothing but can attenuate fast transients." + ), + "smoothing_polyorder": ( + "Polynomial order for Savitzky-Golay smoothing.\n" + "Lower order is smoother; higher order follows curvature more closely." + ), "baseline_method": ( "Baseline method (pybaselines):\n" "- asls: asymmetric least squares; uses p to favor baseline below peaks.\n" @@ -1450,6 +1469,17 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: self.spin_target_fs = mk_dspin(decimals=1) self.spin_target_fs.setRange(1.0, 1000.0) self.spin_target_fs.setValue(100.0) + self.cb_smoothing = QtWidgets.QCheckBox("Enable smoothing") + self.cb_smoothing.setChecked(False) + self.combo_smoothing = QtWidgets.QComboBox() + self.combo_smoothing.addItems(SMOOTHING_METHODS) + _compact_combo(self.combo_smoothing, min_chars=8) + self.spin_smoothing_window = mk_dspin(decimals=3) + self.spin_smoothing_window.setRange(0.001, 60.0) + self.spin_smoothing_window.setValue(0.200) + self.spin_smoothing_poly = mk_spin() + self.spin_smoothing_poly.setRange(1, 7) + self.spin_smoothing_poly.setValue(2) self.cb_invert = QtWidgets.QCheckBox("Invert signal polarity (465/405)") self.cb_invert.setChecked(False) self.cb_invert.setToolTip( @@ -1463,6 +1493,10 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: filt_form.addRow(self._label_with_help("Low-pass cutoff (Hz)", "lowpass_hz"), self.spin_lowpass) filt_form.addRow(self._label_with_help("Filter order", "filter_order"), self.spin_filt_order) filt_form.addRow(self._label_with_help("Target FS (Hz)", "target_fs_hz"), self.spin_target_fs) + filt_form.addRow(self._label_with_help("Enable smoothing", "smoothing_enabled"), self.cb_smoothing) + filt_form.addRow(self._label_with_help("Smoothing method", "smoothing_method"), self.combo_smoothing) + filt_form.addRow(self._label_with_help("Smoothing window (s)", "smoothing_window_s"), self.spin_smoothing_window) + filt_form.addRow(self._label_with_help("Savitzky polyorder", "smoothing_polyorder"), self.spin_smoothing_poly) filt_form.addRow(self._label_with_help("Invert signal polarity", "invert_polarity"), self.cb_invert) # Baseline controls @@ -1663,6 +1697,7 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: self._update_lambda_preview() self._update_output_definition() self._update_output_controls() + self._update_smoothing_controls(emit_signal=False) self._update_section_summaries() def _update_artifact_enabled(self) -> None: @@ -1680,11 +1715,25 @@ def _update_filtering_enabled(self) -> None: enabled = self.cb_filtering.isChecked() self.spin_lowpass.setEnabled(enabled) self.spin_filt_order.setEnabled(enabled) + self.spin_target_fs.setEnabled(enabled) + self.cb_invert.setEnabled(enabled) + self.cb_smoothing.setEnabled(enabled) + self._update_smoothing_controls(emit_signal=False) if not enabled and self.card_filtering.is_expanded(): self.card_filtering.set_expanded(False) self._update_section_summaries() self.paramsChanged.emit() + def _update_smoothing_controls(self, emit_signal: bool = True) -> None: + enabled = self.cb_filtering.isChecked() and self.cb_smoothing.isChecked() + self.combo_smoothing.setEnabled(enabled) + self.spin_smoothing_window.setEnabled(enabled) + is_savgol = str(self.combo_smoothing.currentText()).startswith("Savitzky") + self.spin_smoothing_poly.setEnabled(enabled and is_savgol) + self._update_section_summaries() + if emit_signal: + self.paramsChanged.emit() + def _update_lambda_preview(self) -> None: lam = self._lambda_value() self.lbl_lam_preview.setText(f"= {lam:.2e}") @@ -1753,6 +1802,18 @@ def _update_section_summaries(self) -> None: f"order {int(self.spin_filt_order.value())}, " f"target {self._fmt_num(self.spin_target_fs.value(), 2)} Hz" ) + if self.cb_smoothing.isChecked(): + method = self.combo_smoothing.currentText() + if method.startswith("Savitzky"): + smooth_desc = ( + f"SG win={self._fmt_num(self.spin_smoothing_window.value(), 3)}s, " + f"poly={int(self.spin_smoothing_poly.value())}" + ) + elif method.startswith("Moving average"): + smooth_desc = f"Mean win={self._fmt_num(self.spin_smoothing_window.value(), 3)}s" + else: + smooth_desc = f"Median win={self._fmt_num(self.spin_smoothing_window.value(), 3)}s" + summary = f"{summary} | {smooth_desc}" else: summary = "Off" self.card_filtering.set_summary(summary) @@ -1773,6 +1834,8 @@ def emit_noargs(*_args) -> None: self.spin_lowpass, self.spin_filt_order, self.spin_target_fs, + self.spin_smoothing_window, + self.spin_smoothing_poly, self.combo_baseline, self.spin_lam_x, self.spin_lam_y, @@ -1808,6 +1871,8 @@ def emit_noargs(*_args) -> None: self.cb_artifact.stateChanged.connect(self._update_artifact_enabled) self.cb_filtering.stateChanged.connect(self._update_filtering_enabled) + self.cb_smoothing.stateChanged.connect(self._update_smoothing_controls) + self.combo_smoothing.currentIndexChanged.connect(lambda *_: self._update_smoothing_controls()) self.cb_invert.stateChanged.connect(emit_noargs) self.cb_show_artifact_overlay.toggled.connect(lambda v: self.artifactOverlayToggled.emit(bool(v))) @@ -1918,6 +1983,10 @@ def get_params(self) -> ProcessingParams: lowpass_hz=float(self.spin_lowpass.value()), filter_order=int(self.spin_filt_order.value()), target_fs_hz=float(self.spin_target_fs.value()), + smoothing_enabled=self.cb_filtering.isChecked() and self.cb_smoothing.isChecked(), + smoothing_method=self.combo_smoothing.currentText(), + smoothing_window_s=float(self.spin_smoothing_window.value()), + smoothing_polyorder=int(self.spin_smoothing_poly.value()), baseline_method=self.combo_baseline.currentText(), baseline_lambda=float(self._lambda_value()), baseline_diff_order=int(self.spin_diff.value()), @@ -1944,6 +2013,10 @@ def set_params(self, params: ProcessingParams) -> None: self.spin_lowpass.setValue(float(params.lowpass_hz)) self.spin_filt_order.setValue(int(params.filter_order)) self.spin_target_fs.setValue(float(params.target_fs_hz)) + self.cb_smoothing.setChecked(bool(getattr(params, "smoothing_enabled", False))) + self.combo_smoothing.setCurrentText(str(getattr(params, "smoothing_method", "Savitzky-Golay"))) + self.spin_smoothing_window.setValue(float(getattr(params, "smoothing_window_s", 0.200))) + self.spin_smoothing_poly.setValue(int(getattr(params, "smoothing_polyorder", 2))) self.cb_invert.setChecked(bool(getattr(params, "invert_polarity", False))) self.combo_baseline.setCurrentText(str(params.baseline_method)) @@ -1969,6 +2042,7 @@ def set_params(self, params: ProcessingParams) -> None: self._update_lambda_preview() self._update_output_definition() self._update_output_controls() + self._update_smoothing_controls(emit_signal=False) self._update_section_summaries() def set_fs_info(self, fs_actual: float, fs_target: float, fs_used: float) -> None: diff --git a/pyBer/main.py b/pyBer/main.py index ce5f2cb..21a5360 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -2050,11 +2050,15 @@ def _apply_pre_default_layout_if_missing(self) -> None: return right = QtCore.Qt.DockWidgetArea.RightDockWidgetArea + bottom = QtCore.Qt.DockWidgetArea.BottomDockWidgetArea self._suspend_panel_layout_persistence = True try: self._enforce_postprocessing_popups_hidden() - # Default dock layout: Artifacts on top, tabbed Filtering/Baseline/Output, - # QC below, Export at bottom. Config remains hidden. + # Default preprocessing layout: + # - top tab group: Artifacts list / Artifacts / Filtering / Baseline / Output + # - middle: QC + # - bottom: Export + # - bottom strip: Configuration artifacts = self._section_docks.get("artifacts") filtering = self._section_docks.get("filtering") baseline = self._section_docks.get("baseline") @@ -2063,42 +2067,37 @@ def _apply_pre_default_layout_if_missing(self) -> None: export = self._section_docks.get("export") config = self._section_docks.get("config") - for dock in (artifacts, filtering, baseline, output, qc, export, config): + for dock in (self.art_dock, artifacts, filtering, baseline, output, qc, export, config): if dock is None: continue dock.setFloating(False) dock.show() - if artifacts is not None: - self.addDockWidget(right, artifacts) - if filtering is not None: - self.addDockWidget(right, filtering) - if artifacts is not None: - self.splitDockWidget(artifacts, filtering, QtCore.Qt.Orientation.Vertical) - - if baseline is not None and filtering is not None: - self.addDockWidget(right, baseline) - self.tabifyDockWidget(filtering, baseline) - if output is not None and filtering is not None: - self.addDockWidget(right, output) - self.tabifyDockWidget(filtering, output) - filtering.raise_() + self.addDockWidget(right, self.art_dock) + for dock in (artifacts, filtering, baseline, output, qc, export): + if dock is not None: + self.addDockWidget(right, dock) if qc is not None: - self.addDockWidget(right, qc) - if filtering is not None: - self.splitDockWidget(filtering, qc, QtCore.Qt.Orientation.Vertical) - elif artifacts is not None: - self.splitDockWidget(artifacts, qc, QtCore.Qt.Orientation.Vertical) + self.splitDockWidget(self.art_dock, qc, QtCore.Qt.Orientation.Vertical) if export is not None: - self.addDockWidget(right, export) if qc is not None: self.splitDockWidget(qc, export, QtCore.Qt.Orientation.Vertical) - elif filtering is not None: - self.splitDockWidget(filtering, export, QtCore.Qt.Orientation.Vertical) + else: + self.splitDockWidget(self.art_dock, export, QtCore.Qt.Orientation.Vertical) if config is not None: - config.hide() + self.addDockWidget(bottom, config) + config.raise_() + + for dock in (artifacts, filtering, baseline, output): + if dock is not None: + self.tabifyDockWidget(self.art_dock, dock) + self.art_dock.raise_() + if qc is not None: + qc.raise_() + if export is not None: + export.raise_() self._sync_section_button_states_from_docks() finally: @@ -2110,8 +2109,9 @@ def _apply_pre_default_layout_if_missing(self) -> None: def _apply_pre_fixed_layout(self) -> None: """ Force a deterministic preprocessing dock layout matching the project default: - - Right column top: Artifacts list tab group (Artifacts list / Filtering / Artifacts) - - Right column middle: Baseline tab group (Baseline / Output / QC) + - Right column top: Artifacts list tab group + (Artifacts list / Artifacts / Filtering / Baseline / Output) + - Right column middle: QC - Right column bottom: Export - Bottom strip: Configuration """ @@ -2159,34 +2159,32 @@ def _apply_pre_fixed_layout(self) -> None: finally: config.blockSignals(False) - # Vertical stack in right area: artifacts list (top) -> baseline group (middle) -> export (bottom). - if baseline is not None: - host.splitDockWidget(self.art_dock, baseline, QtCore.Qt.Orientation.Vertical) + # Vertical stack in right area: top tab group -> QC -> Export. + if qc is not None: + host.splitDockWidget(self.art_dock, qc, QtCore.Qt.Orientation.Vertical) if export is not None: - if baseline is not None: - host.splitDockWidget(baseline, export, QtCore.Qt.Orientation.Vertical) + if qc is not None: + host.splitDockWidget(qc, export, QtCore.Qt.Orientation.Vertical) else: host.splitDockWidget(self.art_dock, export, QtCore.Qt.Orientation.Vertical) - # Top tab group: Artifacts list + Filtering + Artifacts. + # Top tab group: Artifacts list + Artifacts + Filtering + Baseline + Output. if artifacts is not None: host.tabifyDockWidget(self.art_dock, artifacts) if filtering is not None: host.tabifyDockWidget(self.art_dock, filtering) - - # Middle tab group: Baseline + Output + QC. - if baseline is not None and output is not None: - host.tabifyDockWidget(baseline, output) - if baseline is not None and qc is not None: - host.tabifyDockWidget(baseline, qc) + if baseline is not None: + host.tabifyDockWidget(self.art_dock, baseline) + if output is not None: + host.tabifyDockWidget(self.art_dock, output) # Keep active tabs consistent with the default arrangement. try: self.art_dock.raise_() except Exception: pass - if baseline is not None: - baseline.raise_() + if qc is not None: + qc.raise_() if export is not None: export.raise_() if config is not None: @@ -2198,10 +2196,10 @@ def _apply_pre_fixed_layout(self) -> None: sizes: List[int] = [] if isinstance(self.art_dock, QtWidgets.QDockWidget): vdocks.append(self.art_dock) - sizes.append(520) - if baseline is not None: - vdocks.append(baseline) - sizes.append(260) + sizes.append(560) + if qc is not None: + vdocks.append(qc) + sizes.append(220) if export is not None: vdocks.append(export) sizes.append(120) From eddb577dae7dfc384a65d0e1c6c64c7cc60d0188 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 19 Feb 2026 18:55:57 +0100 Subject: [PATCH 07/28] spatial map --- panel_layout.json | 73 +- .../__pycache__/analysis_core.cpython-311.pyc | Bin 60156 -> 60138 bytes .../__pycache__/analysis_core.cpython-38.pyc | Bin 25822 -> 28107 bytes .../gui_postprocessing.cpython-311.pyc | Bin 175568 -> 391715 bytes .../gui_postprocessing.cpython-38.pyc | Bin 124016 -> 148294 bytes .../gui_preprocessing.cpython-38.pyc | Bin 85200 -> 87552 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 102611 -> 238211 bytes pyBer/gui_postprocessing.py | 1084 ++++++++++++++++- 8 files changed, 1091 insertions(+), 66 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index a1a7ae8..388410a 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -1,79 +1,62 @@ { "version": 3, "pre": { - "pre_data_panel_visible": true, + "pre_data_panel_visible": false, "pre_splitter_sizes": [ - 0, - 1413 + 317, + 317 ], "pre_main_dock_state": "", - "tab_groups": [ - { - "members": [ - "pre.artifact.dock", - "pre.artifacts.dock", - "pre.filtering.dock" - ], - "active": "pre.artifact.dock" - }, - { - "members": [ - "pre.baseline.dock", - "pre.output.dock", - "pre.qc.dock" - ], - "active": "pre.baseline.dock" - } - ], + "tab_groups": [], "sections": { "artifacts": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Sv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Sv///gv///4L" + "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8hP///gv///4L" }, "filtering": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///7UP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///7UP///gv///4L" + "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADgAAAB38AAAUdAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAADgAAAB38AAAUd" + "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8hP///gv///4L" }, "output": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8nf///gv///4L" + "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8hP///gv///4L" }, "qc": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8nf///gv///4L" + "geometry": "AdnQywADAAAAAARTAAAC8gAABjEAAAP4AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAARTAAAC8gAABjEAAAP4" }, "export": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAFQgAAB38AAAYPAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAFQgAAB38AAAYP" + "geometry": "AdnQywADAAAAAARTAAAD+wAABjEAAARyAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAARTAAAD+wAABjEAAARy" }, "config": { - "visible": true, + "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAGEgAAB38AAAZWAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGEgAAB38AAAZW" + "geometry": "AdnQywADAAAAAAAAAAAEdQAABjEAAATWAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAAEdQAABjEAAATW" } }, "artifact": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAANb" + "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAALNAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAARTAAAAAAAABjEAAALN" } }, "post": { @@ -83,31 +66,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAANU" + "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///81v///gv///4L" + "geometry": "AdnQywADAAD///wt///8tf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8tf///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///81v///gv///4L" + "geometry": "AdnQywADAAD///wt///8tf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8tf///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///81v///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///81v///gv///4L" + "geometry": "AdnQywADAAD///wt///8tf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8tf///gv///4L" + }, + "spatial": { + "visible": true, + "floating": false, + "area": 2, + "geometry": "AdnQywADAAAAAAUTAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAUTAAAAAAAAB38AAANU" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAADeQAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" } } } diff --git a/pyBer/__pycache__/analysis_core.cpython-311.pyc b/pyBer/__pycache__/analysis_core.cpython-311.pyc index 1b86e0aa44e7682ee0e04701cd9f4504943c4488..19dceab4faf8337342aab24c5c0a7b5a2b573590 100644 GIT binary patch delta 22 ecmex!mHE|G<_!lp*~JPfol=YRH{aw`eh2`2fC={i delta 40 qcmaELmHE$A<_!lpB{iI_VjS}lb1I87i(?8Zol=XSr1 diff --git a/pyBer/__pycache__/analysis_core.cpython-38.pyc b/pyBer/__pycache__/analysis_core.cpython-38.pyc index 0b8225ebe8145428de5c8d2ebf43ab7e48ac1fb5..725b7e1cbe82f85ea70b5708561263c3c097404d 100644 GIT binary patch delta 11224 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 delta 8955 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 diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index ec368b35b6f025d8d66767026ece18cb67ce063e..9bcfd161852830dd9339ad49a070ec14c389aea9 100644 GIT binary patch literal 391715 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

!$HWR?%!i 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 z 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%0As#Z#e?(y{h-0_zB*oSDlr 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 Xfw)_mM&t%)#88XnSYFNv{ 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�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 delta 39191 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%0DtR^4cdk#6zg`bI}&`9x)=9no7btnp6 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 diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc index b5c571f22ceb096c4f384e513e77f16c7a51c90a..7fa0a82e2aa42ea62daebe56b6931783939e5fe1 100644 GIT binary patch delta 30030 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 tt?p=~3oSis0YfP{qmz6tjgfTOXym@c#nOu0g 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%0AxZJOyEd8BZ}Ud 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

`tKOqRBZU?PTZDv*q`TD0T=^jzhh>qaKibjy9 zy33ERwPP$V;;ZGoXyGo);xhBiX3Z!|4q7pOT)S}?VOmKb*Lm?F(2eCm+(dY0QtRkX z!Y@_Bi9b_ymXM=Pq@aBnbB>?qD;mDd3Ir5#xwXDBqFM?Va?){gmMRK^zjIac6c8GsM<@BUl#P4+;{j~k#!0uuN8nlNT(22%Ju`at zqTc%V0I_*TPeS3-H-3)zxMbaBUYAiLNk`(poyf9&Mw#j}%9 zYea3|J=80EJI&_48C6X!+GWZKWwxzATW*22%L3m=|AgozSA`+ydtod6yh>O9nv-M2 z0jiPp%Z-U;_m8_NE_nhKTu2K1RC(*G`2VDmkB|9bdlq#Qs_cKGdOk|LW&MOkN|cm3 z8_W?SDxU$3IQpJtV-o^J;0_8*7R(l>i>1M_q?43k;I6MS6g@EEyQPL~5@ zC>yEeU=aZuI3vtIjFxwbnVWDTUf9(VazJczdDp4%Nv!VB4g1sRo^^f5xn6Q^WX_GEbK_F;rkU=` zyWn~=`m`(L?2?>t*4ZucQ`xs>(P~N#5K|N0f1H+id2={zO(<=RlvWB)IoOgq#k3Zj z{3A4koDJZ~DeuE8aehpnhd;@coST?)lc=2B!||(~$(?1ETV<)8O?EP>YqEc6>GbyG zSw6~3?J2W=RBA;SaVV3!!L*Jh9rRu6r{wtCv<7>q;xLqYtxz;QXi(f=&b-d#VbnO) zKveNi*{<2ll`tbThJ5^qI5rK`kEzUC3~AM=S0nC_!s%9i%Noy_2(PhL#$PD!a&2QG z$R@+V2dGyIZI}{NtpI)LV-0f=Q(ZFXW16Sk54P}g`ZJyivlmDPT;Ib;cw|iIYpv8jhj2+zktw9 zt=BJl<=JT2MK5Nz=&JV`5lRmyl;qO9@{MjOvnuL_SN0UYlvXwm1f52l_i_v7HoeyR zN~>7eB^7RGh1;dvZkF2(|Lq{L&Z4k$bI7@Qu|jfoF=v

>}DR5Oy|)oXudTJ6oBv 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%0D~4Icu;f0#+y`d5Kgo2@ z_PzANDcnve^le%^CqmE_vUTpLB#Mty=Z$<@GI z4Wg?7f+_%q%_qF={GRj8j2jvF5sg?Ea=`#yay2tov*>D$vK321&eAuA=PSN_?Db=k zvza-YMSeb%rJiI-Ne?@kLyl(2v7R~Bi;neNwb)4#njtZQC-vK#&t8a6Eh3#+3t%DBR-&CXy6ea#mBfoCW8A!GLG&OY~FY%{d zD}{wtJpE~r9Wj6E%Nf{c`{~Bi!NkO$C0HqRSO*&tf0mjv=u7%pF~9bu4%VgotlCER zYprx$XQ%6y-kN%%r-Z7i1h=ok$BfjaQ+0H~w zhv_Anj@Yy@hjCQ^)xWjGh}AJYQHR(A3RO_!@+Z7%Qk*5gF~Y~bT*}uuMn*s1XK3r3 zs9VQj;cc2DwN-+`RwoCCvga|rD&Us(G#LYHngA&{aD^T^CQ>*;jy_2e>n9DT$58TJEY5B{Jn1>{3>F?LsRT||<;BAVhRbx+0e9a3f=%k0xV^%gR3b=bQu z`I9dFNsPfqY8tUCg};*<|@JrOvg?wLq4b<%0w_ z-S=ylfVqfDM^)ST6~>{)^7|NE%8P*#)Zi<{oo$vsE|AOylu;N*IhU5V)ZWhl-xtiJ@lJ(SK42pyKb@k zai<&MtxZ-6x1@F@+ixdX5ytPTTfj#&sgl8M|>sJSgsux5-Ew6F=_V$ul<2#hcHa|JH2YE#z{8w-?-B4!`=tq)RQ`{V@zAY zRc~MytPAb_WI{1A%oTCD(f&j;t`Z;US~=pUN-)$(9hzpd3Nr^`QpY3Ilw{4RIPYFn zoLz=fVd6M*&SG3ORs*nH;u)2DYusbsFhRgYtx}DOUZy#6MLi_d?|9%BgPcH95{}O! zp44%U&G3B2TJUeD@{fP>+*YVWr}dWj>yfmFv;nEeYNd|L*EY0)33|cY1`jVa-j}Bo zde$ba;a^haeFs&(wi1W_0!T9bl!?3kh4qpQGx{1NF^(6ByQdam8S0rCFQxDolN;59 zgYBpI9^Jb+^kDy8Wa9(*>jt)Z*r>^3($}$evjICCNqFbsfM^Y zh?}d$#V@b+YYLef%XujcEucn-|6Qh2r_=?-a}}+lf%OrDG~wXCS7vs;bFmHjL!$vQxOxura$RMzOm&wJzWu}laC!AwI&@a z;cfy=K;JtpXM8*<0)K(A6dX-JeHvV&#MA#ZE;@O+*Xo}u*Jzhg%=RHq-RC5!GHg8Ui2^H{GZ)8fAEUH`9+Q3mCS>|GW}Rku8m`Y zkEwFynf`B_coq8R%C$M(ipI(+zh`ofl7qz(v(`IPS?jZj$ol1K*Z@MY|q)A z;_DM(6{vo-k~UbQT6Gi~bn~i&(kcJrQxkfsP?M_F zLy`2equ6hrzW{7s|F|G@B5&b8V&00RT^JQc&jq-T=t$o91e}Thf%p8`QNThyKN5A- z?(dCcnjQ_qKXA&)0I&rG;34Wvj-N%Y9FVa;NwPgtfgke}^6>_M`9P#39Jpbof?;oJv!v9T0?MK-ou5+aK8buc) z#K@{Tom8%gs<)2<8Yhv&@c{LrKfn-(q@!`UbMcYWfFa}VpoRZT?ZPcTxXlLnu@OiW z2t9@@zx{w(=Jw~2R5>yAK%szQ?Vwmrxl@gxd!3$=c_}7C^#gdb@G}a2K>^1YnWpq( zRL1{G_x_ryrm!P7{o0{Q_Sq7m?91V|z0#yNl#M;wviI~yr;4q);} zRLo2ie)~m1fO>I1aMhkuP&^%ctWg7TO~*I!zKBB^NfGM>*tVR8zn=3LYG42%8~UXI zQ3*6;A_=fd2?(@K5WY$or0`he_Ag=|_dgdPy)RY3$S-6m<4M$gs^~$3;50sbzzKa1 z*e`4Nh`}!{+CGAdsdCBP!`wZpl1l8JG)P*?o2Qto36} zo+z&Czq9`Cp~u9+da3YnR`@uXh5(t;p4D$%s%e<*6mu&iPbFkwS9gUye{z z;$=klV7~2x()X)x?)_oi`*o71k9qn;Pv1RHDf86NKP`D0nWu5q3V8=}`NFQ6kgI0C zQ*zZaSH0*WH$P!lWyn?egY}D9@2{4c`&e_I=&F=l{mj)by82Z>PqRuU0k?59(xgN* zg|T8ScMl%r6?=>oJ~p!xZKy&Pz)8!rv}GsTvQu&b^JJIk+(k_sg)aC(_hOOM(#u+U zRa5~03p`Zp!U0iNuep9Myt*;8x>0P}E$%&V_wgsi)s52XQMP(?W_R=@QTT)1(#D-^ zqgDiz;-N1|lEH0$W$Ch}Y=t0^Yq~O5N!V2#a#hc7U+~OtRpn3+MJ=c8N@g^KRdYWf z9a)r=5nO3YsH8<)-+!k?D%rzI_RMB1xl2TM)lym2>&L=nn?hxq#Le`yY!55jGdqN* z_btg;ZEu{KpI981%KKP3nDn@@#EJSmp!T*(g-)ZcpE_ez3GAeA_dP0Y&akJm&))z3 z=igzT6}YkXtoZf6(qg4FwQQi$^2Z#ki`CJk~2!6*sOsD{B{Aw~Y0?Y*Cn&qrX12Z9g zK={9iwE8tAY`u@G7CZ`9f?+4 zO-D!uP9$;~k~gBc-Q~^%h}FbNu~m1h9ZrJDUI6T}-pD^vm;MRK1pX7TBvVNFxSB4| zQ%KyVU*Qq_Wf}?)iBF0lgv3Kw{)K3MdnCVI%I{$L9Z(4K!cV`|(?{e3S$&aRI_M{d z>bh|qWB}?SId00v%Q3n!}6FLN^gIo{PpVP!#{rHhmZW=BES^s6J=L+k&BDp`y+@BTsZ_RpjffeO? zcf3=6bMo!!=$=cFJ(r|Cm)V}nQr{KU_sOb_#ePr*K-{?PM}s%Z->#4Los9IIl=@Dy zzSGk7N7?pACHD|>4~hKu$$Q)S#>8^Vn;p?@ha=k#OQe=}RB9h&?Sqp07;_&J`R|id z`{@jB!DGe1 zIhNZwuDzx9+aW7b1F`@V!2*QA`r$w0gpdWJYj3mFj_@!*8Wym82uJl->#+@lX|G-d zh+2<3U@;hPv$b|9xBxS6+@#W@{0E3LYOBd04mnhQY3g(hw?-#j_ZV~uDUn%16X&PL zCdhHV0x;@iMihllB=!-J|;-@8tMV0f?NEoJ6`yhn}1aD)-W%EklQ^wtV@2@*e9PVWN3XP zP%i}U60J2& zZ;glc{$lSY@?Br&>g}?VzFL=YGOC#C*D((3QT#FPWmj4-xz@tMNL5I;*O^5ESF$H{ z*qEmBV{B>0n%Dp{F|HZLB!mH6>L25Ke@~tA+(4H6>zCC;+&&$Oa6%MgtR?V+di)~gwZ zcO#BP|M}sIm(Q*GfJ;#GbZcPv(%6K+xzEJ076vJ|YiM|M6n?5Nj!ndD(ZN;)uX&PW zBCDxah9@7J5L~F-Xp=7dC2ma@=~p8cr0|MRlp0UNl%4oi*x9*T4xx_wz38vfw1$HmS=Qs+h1c@a-PxFWDCPfJ%m$F6*C)(L0MET=M> z(-Fz(06MVZ4y?FySKK>(<4pCt{=tIes$({F_Ol50y#ru|2*P-mQ z7^@0zC?APcNQ|rF-}XBEV@xj!6(%3#YhwNDFMf+bWL>)fVyLUqymp{^eQE~Eb%|H2 zaRd{uMnDkE$nW95d$Vdh$F%n99(j%KmYheD<*&aOC4u8IH&#$2tIpkOr{3 z>Ib0M^%Mkv@cq(%UVt;S%fizfSgfX#T#!UJE!36I0T2t1(-{XM;KD#KGXXdIf&=wb zrOI@Mlj=;9J1e;8!gh9?9KaLJp->$w1Vf7BVF-W47!dIj5OE;m?*NEo6|$^N(X4He ztZmEvVjrAsjY(N&S=QOvG=y;1zy^SU1~!(`Bu6`Qw2O}RyBmsTQ}1N^uUF3>m$J)Q zb~%)Uo$Wk<+Y4{jSDt$AsjJi1rla1nh!;+2woBe_=7sH*)dPEz+!x%>yI(qTc_N-^-v1_$F0}goYRC{@{t%lHLp_g3Zt(nY>O$ust{uVUpoFU*TdI> z%H`7M$1bk&Rp20kU@boq`;al$OTKl@o^`N7zXLqL)qH}MtP24Eag?} zrc2Ioh@lLJV6i%UZmjR}Q>%^0JGC zR+^tEqg9-V>adEl^6puj&Jm!>l!CnX`p8^wljx-%{Kp|Cf@j1E-26snG|&(UG%RIF zfo2wH26A3mOWvQ$78)gA1tH{KSthxdCHb~6-xkrg1$Si*xLCdajU%r=6m8uVY29^m zSZdwNTKD26elXzl9cI46BL68If9jGIEz9X0Ujg$~M16G;U)|#5(kXH0u=vo!l;Zd3 zkbENf&M@B@G42P+(nrK_AE9_vkQk7y*XD?0v*f5kI0#YsO^}xCTyINXs_j;)Yo{gk zmUnaCw$xkOQgLn|MG5=mE1O{OC&&I3FXA?NUSv*;QB-L%72^0E$US&!M9r}%mR|S> z*Jqe6)PGguvu66Vq+N_p3wxn2M7^~UZ>{95XWn|zQO^;mj|(2SLJrA>FPkL zh%sG*=v2b#(}~}*JMJyHpI_=CKUAzlxj`yJ>eI9E7$tj6w+RinD>PDKeo42g*?~}{ z)A{;0RM>QQ&_=IUi)Q%iF>fht6M;oPt0J)O43PC>3+5b6%6?YfA$mJSM`t|RNFb7b zKoKXO`~z}7BPt1`zBNwbJ-+Bc^nwbS^<~V!M_=LsRk_Xg#U`~VnhJWULKj67$TL9p)4d!vp}#1WDlWr)NgA{YzZ!)es9CF0m3Ick}sR#blRAB-d; z{DXC+nLij0c%{y^*l6)T=7E)I*BLl?ftu)=^tZ9JS$P~T3e-drJLo5``Sf=b z3VTvV+af{;20Q*RW2pKvlRhoKW_+W$ankly^UiE!NMT3T2yzQ>YF)py7K|fg#KleJ zKe5asoPt(WdO&N_>_lkPjxgpr36+cmUHh(~eZ6es6Tb<*tx8e+?rKe1(_+8B&d=GUVuKybjsaTdO3jF)jOYjUgB%2xF)bcotc2r zig|{iglevX68Ty_?F{aJ0D&}m7iCnF8<1@$qG^A?RUZqYK>ENffnuj4h6)zG`wNM-+(m zO`oNpirNv1%mS%P4^TEpvo~|KynDgqA}}-598zo3xV>}n-!0M zVXHyLU|SDM$v6@I&~~j7J93nEWSiz{9PIT)+~S7g!Va7nnd^UzJJWmhIM8F~N5@RD zint@32_Bx4!lzGw2{G~*)P@!PVG>W0d)e+iv}bR}>wybzv30t%^S_vk%!rllkCU^b_9MyEWNfqiYMM{ z-AVDp=?|{_{d9p8K1Sf}J>}b(-^!Fi4J_0kZD?d08hPmWZnFX6c zuJT~BwUJ=06s$)~dITcxMu(8hB0^v5(g;++pa=GkZp+rL<^DGhMZ1nhx{gX+$5_`f zsr@)>KTdDf@@u#{?3T$P8 zt?)CnFdE&|5!uv1Jat*g^Mm~-KR9)Uof>1OCh<0>t@|i``T^TPdcyh9Uno!g+15a({f>VXkI z61bZno@3wZ*_iYmS@1vz-u`Bx4@^69=o}Xs+ZabK5`FXbU;0B{$kI;B5 z8taEY$9gseK_u!9ceSua+@cZyMm`d=?TlL$wl>r*ABfcp1{vhOVB=}T1mD6{Vq!f? zXM77Mm(_{M1*_RNA((Kqh3iC%N{@K>k##7cjoM!|1$g3HxGD*5p{!3o2@(&uM0!;u~E6qqI`X14gNxSeu$3&ugE9XH4>yrxK#FQ+wk* z74b=*e%-~{{Ydr>3!}BPlNdvh%kH-8Wr5*D=*h<*hzvc5y)5*g8m>G9ul2(tljolp z)BJFASN4bAGj;yrq*gcAp&E!`8r&?bDp%HC;C3!rpx%Dk^ELlG=IxoDaxZ$X(QZwj zOZX$Y*FcBnWp6Xlr-Rh;t*VOs`vZ2YZAV0!uU_u>#?-$%Qw&Vq_DiWxA zt%_CmNP!(JumhXEr-&zWDcpwP8$Dm|kv7z@4K?D1rX`ykn-cEya`Ip3dA{d^jm=U{ z3(IN2#+FqC$+YGn4qnM~i?9nu1GSL=dHdpQXED%>-$!>gK-^=^MN3M8ob#lPpIby+ zUMFh1mr7m9wzO?qYfqqW{pUMtcNJRRuFCE2vAx}GrSl%wE_doXP8-hO$*|J7JB7{* zox3&~w+&i?eA{>vC;!6RhE?7+0K(OUk4Du4_tot~y@?Yezy%05xv&Klh0Ulcb-H6O z2Mk#DwOG?5=}g zD=@U<3+9RQM zDb&G29XHEGM~URv!yJ1=O_<>C+Hcbo_T zr2x2+j|COEQ0~xQy%tft9(=O-g8OOuT9k8R`^K%1qXAlP5+WqV^75?1R;SypvDIO6 zJi_Orx_#NFo0TYIdaXBO;CQ~H3=6{W_&FX_rH+%S1MrQ?i9sG0LR0enC4qTkd@dR4 z$K1O86wfEMOF} z3R;mGI3=n$I}`6^l$k&P1W$XDy2+>a6QyCinl$5r3Zl%6=ou@=fYqs&7^^i-BE)g9 zp6=rsn<`eDM8VBw4&6Fqr;w~X5G*m0*T7my;0#}bHUo>&p13V|n=%FTG%gk+En&o< z6XTP-_4IYN?zq3N?N8Y{LXGObGqB}^^ulO{8PJ%oZv*7SuhpQPVHK$&9V4`rsc#*8 zSA{xSX)}@x+N?w9w0>&VI<6ptL0vIklA;B5LmTLw3@ieqa!JiDyFu}})eCK=uLMgzMdfn7I8 zZZ}DR0Tvj5o|HZest&)?MGA#`g{dDu{llkk7l?z8NIfT5&k3pXBQ{Qvma^9{MkDrisoMbyrO50AcZKovPY34gE`c50l$#F$LXy1D~_g4i! zEf9}BBAz@W?HghHM#Qm;Qu`&=eo69;GvB!A8(+x}zVP((PcIZo`86!R2IPEB(fsHu zyIFawl+(s?+AwTcyR6HTKMwye{DaTG2^KzGlXiK`^~K_-xMjQiTZRh^=#}-0{{H`Z zFN?z!54X!Bxa|bn z7Gq{h?o-TtN_3x!A;{cv4dr4%Jl~jH-uL4}KRiSucv9**#kx*O?Wb8g9Ed;4+>eUx zM-AoV(4ZeQ_uqWvz0=)+D%$fvq~`&t=P>IzEZ;MHHZ9<*7B6-k7JOtINWTAjW_MA; z6|dxxfW+G@2mkf#v@Y+WH~+x{Z<14gTyy19|qJ)>|# z&%3Nhf3cz9P@Cl!ZLWb7`!DTQqy~aUW%U#1#z@czP99iJrN3p(Ax)FqU?Df1A<2NJZ0pq5A!`K{Bb(%1T?BmwabVB_T3oBsl zV3-B+_<&bZru6{m2z>h+#zaN(v|Lb3j0^4t{t8B0MPZx+gPd8y4Vo_o+32A<@}farA-*-Qmc`Ul1bk0A=CPao(j% ziIVpyIZO|DG|(e-<{^ZGqbu*@siIrWU1D*BB!at8utxmer%lp(?s99oNsoWf@I0MF z!+@N1jgO5%ll*-`J{Hkm_PiKmmHuDOGm*>BL-P*#9g~MCb?UfyG2xfily{H(k91X$|-ek;5qnQ+Ap~e zF!upb_ahYKAgPN_5TWu%z1h2REpOHL`tj!{sl7G$^LBFx={vdQySCfk>9QgS-|J!Uw1TwJ~br@i0(ptQO$F@rMx%Lo!;<`C@9u#BIww zumn*wQbto}tZOj0^ zf}(+UP0bZF?OJ)&)@Sfu0M4q^mcGw=%-uMbPVHf0^}|t<$8PT7eXTMk@H|6X*ji;w z9;;`_v-nzNT*jFN&)aL4$uO01uA_{ZbK+V@8Iu=L?hjktbi=9Pv~YUZ5q6Rf?6VHc z?7A6u*!_(4T58yxn8RX@M1!yAPQ29`R}G}^^_UMTmrkAbIN?TDYOlJ@?o*rFT*tKyVdt|AD3Nd@$2h93hn-1gysBexK}EviP#@Q`kD{HLr0rmwKYi`v z>+An-(Ly-mS&9pr_#35!Gt8qJ&RCDKFJ?$=o}Ep>*DK*)4-Tdl5^{?S-y;4yl4wr- zR_kot2{hli&b%(kkDCiA8wVX;Zw&E6vv_7+N#SknU}HA!5m zd^sq6-iFydiSz;O9)ur6vX1amwyeUH;Spj2{iW$vw_dn+6t067h8i3Z4*$x?>wN)zlW z;$_9(jcH5PMe^$wr=|Q(mfr~%PPqjvw=$Yr6UnVvd|1kDW4Ud!yH~PuSyp*8t1^;B zAs(~pSXLd-_r!S<-UZrxqiE5&)Uo{7?KJU0gu;a7^%*fRLfCkaCtNvau4}~~4-qr2X$+0XNa%OgH$4ZnPPsqaT=Z#vo5Lu~7D z$@dWRJtX=bf{nQ7EnUgUo$Ka;bsqFGd-3=i$6tShweDxFM?QJL9ag6PFRPqlo|B&b(x+~X51P_l-*tXav`I?xoN%S>gCcof$-t$%Ob?=<_ zuJU3cDLdIbJv=eIR8_=}xQDOSLe<&d&HUY>zx$&Y7cmrZha`6ybC-$kG8n1Tt7dEC z8G9>3do;b;Bkp#|-ND=)qPs(<<9{ZNtR7e&rPn~bDQ8VX_gTR;4LpwmXanT)cBE$})6 zV5S@z4@E;yHB|s8ZmyMA<&l9qr6)qDCvk@v>EohRHCJMtmQhnQHjc8dRmQ}f;VAoB zWlVlCILf|O852>(QTDaUm`M;q+1Dy#CP7@IC^ZCVFCUylQn`T2UHXenejOaaQRk~J zGg1bhBpD_@i7H7psY5Vy96ZbwP3VqbXBmn8ir{_KnvCQNP`nfc$qPF1 zuC{ZNwrwJQKu$D;Gk{M1KB1FINEH(?$HkRNh?P+jL54T7CP9R4;W)GuJxEAc#G!7< zdK%aIwM!d`uu?gj`neI`R|SPMjJRuEBmVDz?j~*}(dfAnlX~$zN;-P>aNLYV57sw& z$$A<$dgFx{y>;hSMh~Ip8_;i+(9@5(e(r}INuaAr80rM(fa;pRAwS5wEC(FYgaK)>j*53X!b|ZDY+Xhh?&LU3r}r><}LO&on>_ z-TYV=+^7$GKE*DPnYheo9CXJ>RVQu1w5#GfC#%=Q{^IK|dA)HEFKNA*ar>V~s10Wd zTd+0~66ax0IPC7#x}@ z0M{Vmd=r9VvR%&ObasU5=DZY|!!kpqg*Yw5KM`8#jB`ym|Agk;Y6c{a@PA6ImI=;G zsq)IoMpcyglWzsv!U{B?-2 zBl_z;x*LF?HQiIo6Oiyk{g+03r3>XMy8|w^vuZhqp*-R*UpOZDw=n+}(Z7Y?i(_Bl zu4ci+xegT(SOkwr{u<`55&7?!R?R0q$-%-^hy;gYnQxRnRhGos~+5ksBdG$ z2eVkoSH*l)qOXd2g;y$!`sE%-{#xd*75#Eg`MoC=pHRGewjt*W2cAFh)kD`0%^kW+ z#WqL$n-^2nk)Xkt+nw;X%o)r6*Wk$zORhllmhQiSh|z$7KPvi zPulw02iq<0*7fYQ+up0q!})D{{@%jW+l5Uyf8W!yzs&MeH{JhfS^oYG`%gRiow)dw zz2Jc&%ddh~IxliPP;LL!W*ePXS?RpGHx(CR!_I<1mxVbg7jwA=^X<$}xmcc+&hzu> zyxn=sVq}bg9VRozo`W1Zjxokno5=ap46MF^#9#-L501WLbCD0u;==wR9}^Ex>R2mb zyIy{-bNP(YI;KcB^t4sBjZzc+HKO7Z)yY{p&<8MSWzX1nL|z^73zC5%^5T6A5qWLG zWiW(jEaDDh`#^AYh`ewFSE~H}*#r8k#B%lowW;M3qwe=Dk&v-qE-{xf{wjLrQ(i4G z+r?N4)=9S0SGiA_6wX*w$1n-`o)TxHlr~wVvCOhf*wL*@-gY#rcDys7&{E>LM3W0sJ;U(sMZe9&M>SN zF_xQgCheyqPVLi$@d_$E*Z(!Mt~nFX0S9-fiQO~B=N~7cu2^5Eat^(TcxFYidQIx5 zP%zX(A(vs4(v%jABO>esQ)@j?s2*>p^W31+hIww%RpIa=q�JRnGK(<5ecZ>B1GX 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 delta 24142 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 diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index c1a54a5..bf8501b 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -221,23 +221,40 @@ def _extract_onsets_offsets( fi += 1 return np.asarray(on, float), np.asarray(off, float), np.asarray(dur, float) -def _binary_columns_from_df(df) -> Tuple[str, Dict[str, np.ndarray]]: - cols = [c.strip() for c in df.columns] - time_col = None +def _detect_time_column(df, fallback_to_first: bool = False) -> Optional[str]: for c in df.columns: if str(c).strip().lower() in {"time", "trial time", "recording time"}: - time_col = c + return str(c) + if fallback_to_first and len(df.columns): + return str(df.columns[0]) + return None + + +def _numeric_column_array(df, col_name: str) -> np.ndarray: + import pandas as pd + + col_key = None + for c in df.columns: + if str(c) == str(col_name): + col_key = c break - if time_col is None and cols: - time_col = df.columns[0] + if col_key is None: + return np.array([], float) + vals = pd.to_numeric(df[col_key], errors="coerce") + return np.asarray(vals, float) - t = np.asarray(df[time_col], float) - behaviors: Dict[str, np.ndarray] = {} +def _binary_columns_from_df(df) -> Tuple[str, Dict[str, np.ndarray]]: + time_col = _detect_time_column(df, fallback_to_first=True) + if not time_col: + return "", {} + + behaviors: Dict[str, np.ndarray] = {} for c in df.columns: - if c == time_col: + name = str(c) + if name == time_col: continue - arr = np.asarray(df[c], float) + arr = _numeric_column_array(df, name) if arr.size == 0: continue finite = arr[np.isfinite(arr)] @@ -245,11 +262,32 @@ def _binary_columns_from_df(df) -> Tuple[str, Dict[str, np.ndarray]]: continue uniq = np.unique(finite) if np.all(np.isin(uniq, [0.0, 1.0])): - behaviors[str(c)] = arr.astype(float) - + behaviors[name] = arr.astype(float) return time_col, behaviors +def _trajectory_columns_from_df(df, time_col: Optional[str]) -> Dict[str, np.ndarray]: + trajectory: Dict[str, np.ndarray] = {} + for c in df.columns: + name = str(c).strip() + if not name: + continue + if time_col and name == time_col: + continue + arr = _numeric_column_array(df, name) + if arr.size == 0: + continue + finite = arr[np.isfinite(arr)] + if finite.size < 8: + continue + uniq = np.unique(finite) + # Skip classic binary behavior columns from trajectory candidates. + if uniq.size <= 2 and np.all(np.isin(uniq, [0.0, 1.0])): + continue + trajectory[name] = arr + return trajectory + + def _timestamp_columns_from_df(df) -> Dict[str, np.ndarray]: import pandas as pd @@ -271,11 +309,30 @@ def _timestamp_columns_from_df(df) -> Dict[str, np.ndarray]: def _load_behavior_csv(path: str, parse_mode: str = _BEHAVIOR_PARSE_BINARY) -> Dict[str, Any]: import pandas as pd + df = pd.read_csv(path) + time_col = _detect_time_column(df) + trajectory = _trajectory_columns_from_df(df, time_col=time_col) + trajectory_time = _numeric_column_array(df, time_col) if time_col else np.array([], float) if str(parse_mode) == _BEHAVIOR_PARSE_TIMESTAMPS: - return {"kind": _BEHAVIOR_PARSE_TIMESTAMPS, "time": np.array([], float), "behaviors": _timestamp_columns_from_df(df)} + return { + "kind": _BEHAVIOR_PARSE_TIMESTAMPS, + "time": np.array([], float), + "behaviors": _timestamp_columns_from_df(df), + "trajectory": trajectory, + "trajectory_time": trajectory_time, + "trajectory_time_col": time_col or "", + } time_col, behaviors = _binary_columns_from_df(df) - return {"kind": _BEHAVIOR_PARSE_BINARY, "time": np.asarray(df[time_col], float), "behaviors": behaviors} + time = _numeric_column_array(df, time_col) if time_col else np.array([], float) + return { + "kind": _BEHAVIOR_PARSE_BINARY, + "time": time, + "behaviors": behaviors, + "trajectory": trajectory, + "trajectory_time": trajectory_time if trajectory_time.size else time, + "trajectory_time_col": time_col or "", + } def _load_behavior_ethovision( @@ -289,18 +346,38 @@ def _load_behavior_ethovision( xls = pd.ExcelFile(path, engine="openpyxl") sheet_name = xls.sheet_names[0] if xls.sheet_names else None if not sheet_name: - return {"kind": _BEHAVIOR_PARSE_BINARY, "time": np.array([], float), "behaviors": {}} + return { + "kind": _BEHAVIOR_PARSE_BINARY, + "time": np.array([], float), + "behaviors": {}, + "trajectory": {}, + "trajectory_time": np.array([], float), + "trajectory_time_col": "", + } if str(parse_mode) == _BEHAVIOR_PARSE_TIMESTAMPS: df = pd.read_excel(path, sheet_name=sheet_name, engine="openpyxl") + time_col = _detect_time_column(df) return { "kind": _BEHAVIOR_PARSE_TIMESTAMPS, "time": np.array([], float), "behaviors": _timestamp_columns_from_df(df), + "trajectory": _trajectory_columns_from_df(df, time_col=time_col), + "trajectory_time": _numeric_column_array(df, time_col) if time_col else np.array([], float), + "trajectory_time_col": time_col or "", "sheet": sheet_name, } df = clean_sheet(Path(path), sheet_name, interpolate=True) time_col, behaviors = _binary_columns_from_df(df) - return {"kind": _BEHAVIOR_PARSE_BINARY, "time": np.asarray(df[time_col], float), "behaviors": behaviors, "sheet": sheet_name} + time = _numeric_column_array(df, time_col) if time_col else np.array([], float) + return { + "kind": _BEHAVIOR_PARSE_BINARY, + "time": time, + "behaviors": behaviors, + "trajectory": _trajectory_columns_from_df(df, time_col=time_col), + "trajectory_time": _numeric_column_array(df, time_col) if time_col else np.array([], float), + "trajectory_time_col": time_col or "", + "sheet": sheet_name, + } def _compute_psth_matrix( @@ -376,6 +453,10 @@ def __init__(self, parent=None) -> None: self._last_durations: Optional[np.ndarray] = None self._last_metrics: Optional[Dict[str, float]] = None self._last_global_metrics: Optional[Dict[str, float]] = None + self._last_spatial_occupancy_map: Optional[np.ndarray] = None + self._last_spatial_activity_map: Optional[np.ndarray] = None + self._last_spatial_velocity_map: Optional[np.ndarray] = None + self._last_spatial_extent: Optional[Tuple[float, float, float, float]] = None self._last_event_rows: List[Dict[str, object]] = [] self.last_signal_events: Optional[Dict[str, object]] = None self.last_behavior_analysis: Optional[Dict[str, object]] = None @@ -924,6 +1005,135 @@ def _build_ui(self) -> None: self.lbl_behavior_summary = QtWidgets.QLabel("Group metrics: -") self.lbl_behavior_summary.setProperty("class", "hint") + grp_spatial = QtWidgets.QGroupBox("Spatial Heatmap") + f_spatial = QtWidgets.QFormLayout(grp_spatial) + f_spatial.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows) + f_spatial.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) + + self.combo_spatial_x = QtWidgets.QComboBox() + self.combo_spatial_y = QtWidgets.QComboBox() + _compact_combo(self.combo_spatial_x, min_chars=10) + _compact_combo(self.combo_spatial_y, min_chars=10) + self.spin_spatial_bins_x = QtWidgets.QSpinBox() + self.spin_spatial_bins_x.setRange(8, 512) + self.spin_spatial_bins_x.setValue(64) + self.spin_spatial_bins_y = QtWidgets.QSpinBox() + self.spin_spatial_bins_y.setRange(8, 512) + self.spin_spatial_bins_y.setValue(64) + self.combo_spatial_weight = QtWidgets.QComboBox() + self.combo_spatial_weight.addItems( + [ + "Occupancy (samples)", + "Occupancy time (s)", + "Probability (% of time)", + ] + ) + _compact_combo(self.combo_spatial_weight, min_chars=10) + self.cb_spatial_clip = QtWidgets.QCheckBox("Enabled") + self.cb_spatial_clip.setChecked(True) + self.spin_spatial_clip_low = QtWidgets.QDoubleSpinBox() + self.spin_spatial_clip_low.setRange(0.0, 49.0) + self.spin_spatial_clip_low.setValue(1.0) + self.spin_spatial_clip_low.setDecimals(2) + self.spin_spatial_clip_high = QtWidgets.QDoubleSpinBox() + self.spin_spatial_clip_high.setRange(51.0, 100.0) + self.spin_spatial_clip_high.setValue(99.0) + self.spin_spatial_clip_high.setDecimals(2) + self.spin_spatial_smooth = QtWidgets.QDoubleSpinBox() + self.spin_spatial_smooth.setRange(0.0, 20.0) + self.spin_spatial_smooth.setValue(0.0) + self.spin_spatial_smooth.setDecimals(2) + self.cb_spatial_log = QtWidgets.QCheckBox("Log scale (log1p)") + self.cb_spatial_log.setChecked(False) + self.cb_spatial_invert_y = QtWidgets.QCheckBox("Invert Y axis") + self.cb_spatial_invert_y.setChecked(False) + self.combo_spatial_activity_mode = QtWidgets.QComboBox() + self.combo_spatial_activity_mode.addItems( + [ + "Mean z-score/bin (occupancy normalized)", + "Velocity-normalized z-score/bin", + "Sum z-score/bin", + ] + ) + _compact_combo(self.combo_spatial_activity_mode, min_chars=12) + self.cb_spatial_time_filter = QtWidgets.QCheckBox("Enabled") + self.cb_spatial_time_filter.setChecked(False) + self.spin_spatial_time_min = QtWidgets.QDoubleSpinBox() + self.spin_spatial_time_min.setRange(-1e9, 1e9) + self.spin_spatial_time_min.setDecimals(3) + self.spin_spatial_time_min.setValue(0.0) + self.spin_spatial_time_max = QtWidgets.QDoubleSpinBox() + self.spin_spatial_time_max.setRange(-1e9, 1e9) + self.spin_spatial_time_max.setDecimals(3) + self.spin_spatial_time_max.setValue(0.0) + self.btn_spatial_help = QtWidgets.QToolButton() + self.btn_spatial_help.setText("?") + self.btn_spatial_help.setToolTip( + "Spatial heatmap help:\n" + "- Top plot: occupancy map.\n" + "- Middle plot: activity map (mode selected below).\n" + "- Bottom plot: velocity map (mean speed/bin).\n" + "- Enable Time filter to restrict trajectory/activity samples to [min,max] seconds.\n" + "- Use right-side color cursors on each plot to set min/max display range." + ) + self.btn_compute_spatial = QtWidgets.QPushButton("Compute spatial heatmap") + self.btn_compute_spatial.setProperty("class", "compactPrimarySmall") + self.lbl_spatial_msg = QtWidgets.QLabel("") + self.lbl_spatial_msg.setProperty("class", "hint") + + bins_row = QtWidgets.QGridLayout() + bins_row.setHorizontalSpacing(6) + bins_row.setContentsMargins(0, 0, 0, 0) + bins_row.addWidget(QtWidgets.QLabel("X"), 0, 0) + bins_row.addWidget(self.spin_spatial_bins_x, 0, 1) + bins_row.addWidget(QtWidgets.QLabel("Y"), 0, 2) + bins_row.addWidget(self.spin_spatial_bins_y, 0, 3) + bins_widget = QtWidgets.QWidget() + bins_widget.setLayout(bins_row) + + clip_row = QtWidgets.QGridLayout() + clip_row.setHorizontalSpacing(6) + clip_row.setContentsMargins(0, 0, 0, 0) + clip_row.addWidget(QtWidgets.QLabel("Low"), 0, 0) + clip_row.addWidget(self.spin_spatial_clip_low, 0, 1) + clip_row.addWidget(QtWidgets.QLabel("High"), 0, 2) + clip_row.addWidget(self.spin_spatial_clip_high, 0, 3) + clip_widget = QtWidgets.QWidget() + clip_widget.setLayout(clip_row) + + time_row = QtWidgets.QGridLayout() + time_row.setHorizontalSpacing(6) + time_row.setContentsMargins(0, 0, 0, 0) + time_row.addWidget(QtWidgets.QLabel("Start"), 0, 0) + time_row.addWidget(self.spin_spatial_time_min, 0, 1) + time_row.addWidget(QtWidgets.QLabel("End"), 0, 2) + time_row.addWidget(self.spin_spatial_time_max, 0, 3) + time_widget = QtWidgets.QWidget() + time_widget.setLayout(time_row) + + help_row = QtWidgets.QHBoxLayout() + help_row.setContentsMargins(0, 0, 0, 0) + help_row.addStretch(1) + help_row.addWidget(self.btn_spatial_help) + help_widget = QtWidgets.QWidget() + help_widget.setLayout(help_row) + + f_spatial.addRow("X trajectory column", self.combo_spatial_x) + f_spatial.addRow("Y trajectory column", self.combo_spatial_y) + f_spatial.addRow("Help", help_widget) + f_spatial.addRow("Bins (X/Y)", bins_widget) + f_spatial.addRow("Occupancy map value", self.combo_spatial_weight) + f_spatial.addRow("Clip ranges", self.cb_spatial_clip) + f_spatial.addRow("Percentiles", clip_widget) + f_spatial.addRow("Time filter", self.cb_spatial_time_filter) + f_spatial.addRow("Time range (s)", time_widget) + f_spatial.addRow("Spatial smooth (bins)", self.spin_spatial_smooth) + f_spatial.addRow("Activity map mode", self.combo_spatial_activity_mode) + f_spatial.addRow("Log scale", self.cb_spatial_log) + f_spatial.addRow("Invert Y axis", self.cb_spatial_invert_y) + f_spatial.addRow("", self.btn_compute_spatial) + f_spatial.addRow("", self.lbl_spatial_msg) + self.section_setup = QtWidgets.QWidget() setup_layout = QtWidgets.QVBoxLayout(self.section_setup) setup_layout.setContentsMargins(6, 6, 6, 6) @@ -974,6 +1184,13 @@ def _build_ui(self) -> None: behavior_layout.addWidget(self.lbl_behavior_summary) behavior_layout.addStretch(1) + self.section_spatial = QtWidgets.QWidget() + spatial_layout = QtWidgets.QVBoxLayout(self.section_spatial) + spatial_layout.setContentsMargins(6, 6, 6, 6) + spatial_layout.setSpacing(8) + spatial_layout.addWidget(grp_spatial) + spatial_layout.addStretch(1) + self.section_export = QtWidgets.QWidget() export_layout = QtWidgets.QVBoxLayout(self.section_export) export_layout.setContentsMargins(6, 6, 6, 6) @@ -1011,12 +1228,14 @@ def _build_ui(self) -> None: self.btn_panel_psth = QtWidgets.QPushButton("PSTH") self.btn_panel_signal = QtWidgets.QPushButton("Signal") self.btn_panel_behavior = QtWidgets.QPushButton("Behavior") + self.btn_panel_spatial = QtWidgets.QPushButton("Spatial") self.btn_panel_export = QtWidgets.QPushButton("Export") self._section_buttons = { "setup": self.btn_panel_setup, "psth": self.btn_panel_psth, "signal": self.btn_panel_signal, "behavior": self.btn_panel_behavior, + "spatial": self.btn_panel_spatial, "export": self.btn_panel_export, } for b in self._section_buttons.values(): @@ -1033,6 +1252,7 @@ def _build_ui(self) -> None: action_row.addWidget(self.btn_panel_psth) action_row.addWidget(self.btn_panel_signal) action_row.addWidget(self.btn_panel_behavior) + action_row.addWidget(self.btn_panel_spatial) action_row.addWidget(self.btn_panel_export) action_row.addStretch(1) root.addLayout(action_row) @@ -1078,6 +1298,9 @@ def _build_ui(self) -> None: self.plot_behavior_rate = pg.PlotWidget(title="Behavior frequency over time") self.plot_behavior_duration = pg.PlotWidget(title="Behavior duration distribution") self.plot_behavior_starts = pg.PlotWidget(title="Behavior start times") + self.plot_spatial_occupancy = pg.PlotWidget(title="Spatial occupancy") + self.plot_spatial_activity = pg.PlotWidget(title="Spatial activity (mean z-score)") + self.plot_spatial_velocity = pg.PlotWidget(title="Spatial velocity (mean speed)") for w in ( self.plot_trace, @@ -1093,6 +1316,9 @@ def _build_ui(self) -> None: self.plot_behavior_rate, self.plot_behavior_duration, self.plot_behavior_starts, + self.plot_spatial_occupancy, + self.plot_spatial_activity, + self.plot_spatial_velocity, ): _opt_plot(w) @@ -1127,6 +1353,30 @@ def _build_ui(self) -> None: self.plot_behavior_duration.setLabel("left", "Count") self.plot_behavior_starts.setLabel("bottom", "Start time (s)") self.plot_behavior_starts.setLabel("left", "Count") + self.plot_spatial_occupancy.setLabel("bottom", "X") + self.plot_spatial_occupancy.setLabel("left", "Y") + self.plot_spatial_activity.setLabel("bottom", "X") + self.plot_spatial_activity.setLabel("left", "Y") + self.plot_spatial_velocity.setLabel("bottom", "X") + self.plot_spatial_velocity.setLabel("left", "Y") + self.img_spatial_occupancy = pg.ImageItem() + self.img_spatial_activity = pg.ImageItem() + self.img_spatial_velocity = pg.ImageItem() + self.plot_spatial_occupancy.addItem(self.img_spatial_occupancy) + self.plot_spatial_activity.addItem(self.img_spatial_activity) + self.plot_spatial_velocity.addItem(self.img_spatial_velocity) + self.spatial_lut_occupancy = pg.HistogramLUTWidget() + self.spatial_lut_activity = pg.HistogramLUTWidget() + self.spatial_lut_velocity = pg.HistogramLUTWidget() + self.spatial_lut_occupancy.setMinimumWidth(110) + self.spatial_lut_occupancy.setMaximumWidth(150) + self.spatial_lut_activity.setMinimumWidth(110) + self.spatial_lut_activity.setMaximumWidth(150) + self.spatial_lut_velocity.setMinimumWidth(110) + self.spatial_lut_velocity.setMaximumWidth(150) + self.spatial_lut_occupancy.setImageItem(self.img_spatial_occupancy) + self.spatial_lut_activity.setImageItem(self.img_spatial_activity) + self.spatial_lut_velocity.setImageItem(self.img_spatial_velocity) self.curve_avg = self.plot_avg.plot(pen=pg.mkPen(self._style["avg"], width=1.3)) self.curve_sem_hi = self.plot_avg.plot(pen=pg.mkPen((220, 220, 220), width=1.0)) @@ -1182,6 +1432,36 @@ def _build_ui(self) -> None: behavior_grid.setColumnStretch(1, 1) behavior_grid.setColumnStretch(2, 1) + self.spatial_plot_dialog = QtWidgets.QDialog(self) + self.spatial_plot_dialog.setWindowTitle("Spatial Heatmap") + self.spatial_plot_dialog.setModal(False) + self.spatial_plot_dialog.resize(980, 920) + spatial_dialog_layout = QtWidgets.QVBoxLayout(self.spatial_plot_dialog) + spatial_dialog_layout.setContentsMargins(8, 8, 8, 8) + spatial_dialog_layout.setSpacing(8) + spatial_top_row = QtWidgets.QHBoxLayout() + spatial_top_row.setContentsMargins(0, 0, 0, 0) + spatial_top_row.setSpacing(8) + spatial_top_row.addWidget(self.plot_spatial_occupancy, stretch=1) + spatial_top_row.addWidget(self.spatial_lut_occupancy, stretch=0) + spatial_bottom_row = QtWidgets.QHBoxLayout() + spatial_bottom_row.setContentsMargins(0, 0, 0, 0) + spatial_bottom_row.setSpacing(8) + spatial_bottom_row.addWidget(self.plot_spatial_activity, stretch=1) + spatial_bottom_row.addWidget(self.spatial_lut_activity, stretch=0) + spatial_velocity_row = QtWidgets.QHBoxLayout() + spatial_velocity_row.setContentsMargins(0, 0, 0, 0) + spatial_velocity_row.setSpacing(8) + spatial_velocity_row.addWidget(self.plot_spatial_velocity, stretch=1) + spatial_velocity_row.addWidget(self.spatial_lut_velocity, stretch=0) + spatial_dialog_layout.addLayout(spatial_top_row, stretch=1) + spatial_dialog_layout.addLayout(spatial_bottom_row, stretch=1) + spatial_dialog_layout.addLayout(spatial_velocity_row, stretch=1) + self.lbl_spatial_cursor_hint = QtWidgets.QLabel("Use the right-side color cursors to set min/max display range for each map.") + self.lbl_spatial_cursor_hint.setProperty("class", "hint") + spatial_dialog_layout.addWidget(self.lbl_spatial_cursor_hint) + self.spatial_plot_dialog.hide() + # Keep a visible minimum plot footprint even with aggressive docking/resizing. self.plot_trace.setMinimumHeight(140) self.row_heat.setMinimumHeight(180) @@ -1218,8 +1498,10 @@ def _build_ui(self) -> None: self.btn_load_processed_single.clicked.connect(self._load_processed_files_single) self.list_preprocessed.filesDropped.connect(self._on_preprocessed_files_dropped) self.list_preprocessed.orderChanged.connect(self._sync_processed_order_from_list) + self.list_preprocessed.itemSelectionChanged.connect(self._compute_spatial_heatmap) self.list_behaviors.filesDropped.connect(self._on_behavior_files_dropped) self.list_behaviors.orderChanged.connect(self._sync_behavior_order_from_list) + self.list_behaviors.itemSelectionChanged.connect(self._compute_spatial_heatmap) self.btn_compute.clicked.connect(self._compute_psth) self.btn_update.clicked.connect(self._compute_psth) self.btn_detect_peaks.clicked.connect(self._detect_signal_events) @@ -1227,6 +1509,7 @@ def _build_ui(self) -> None: self.btn_compute_behavior.clicked.connect(self._compute_behavior_analysis) self.btn_export_behavior_metrics.clicked.connect(self._export_behavior_metrics_csv) self.btn_export_behavior_events.clicked.connect(self._export_behavior_events_csv) + self.btn_compute_spatial.clicked.connect(self._on_compute_spatial_clicked) self.btn_export.clicked.connect(self._export_results) self.btn_export_img.clicked.connect(self._export_images) self.btn_style.clicked.connect(self._open_style_dialog) @@ -1279,6 +1562,26 @@ def _build_ui(self) -> None: self.cb_global_freq.stateChanged.connect(self._compute_psth) for w in (self.spin_metric_pre0, self.spin_metric_pre1, self.spin_metric_post0, self.spin_metric_post1): w.valueChanged.connect(self._update_metric_regions) + for w in (self.combo_spatial_x, self.combo_spatial_y, self.combo_spatial_weight): + w.currentIndexChanged.connect(self._compute_spatial_heatmap) + for w in ( + self.spin_spatial_bins_x, + self.spin_spatial_bins_y, + self.spin_spatial_clip_low, + self.spin_spatial_clip_high, + self.spin_spatial_time_min, + self.spin_spatial_time_max, + self.spin_spatial_smooth, + ): + w.valueChanged.connect(self._compute_spatial_heatmap) + self.cb_spatial_clip.toggled.connect(self._compute_spatial_heatmap) + self.cb_spatial_clip.toggled.connect(self._update_spatial_clip_enabled) + self.cb_spatial_time_filter.toggled.connect(self._compute_spatial_heatmap) + self.cb_spatial_time_filter.toggled.connect(self._update_spatial_time_filter_enabled) + self.cb_spatial_log.toggled.connect(self._compute_spatial_heatmap) + self.cb_spatial_invert_y.toggled.connect(self._compute_spatial_heatmap) + self.combo_spatial_activity_mode.currentIndexChanged.connect(self._compute_spatial_heatmap) + self.btn_spatial_help.clicked.connect(self._show_spatial_help) self._update_align_ui() self._update_event_filter_enabled() @@ -1289,6 +1592,10 @@ def _build_ui(self) -> None: self._apply_view_layout() self._refresh_signal_file_combo() self._update_data_availability() + self._update_spatial_clip_enabled() + self._update_spatial_time_filter_enabled() + self._refresh_spatial_columns() + self._compute_spatial_heatmap() self._update_status_strip() QtGui.QShortcut(QtGui.QKeySequence("Ctrl+S"), self, activated=self._export_results) @@ -1312,6 +1619,7 @@ def _setup_section_popups(self) -> None: "psth": ("PSTH", self.section_psth), "signal": ("Signal Event Analyzer", self.section_signal), "behavior": ("Behavior Analysis", self.section_behavior), + "spatial": ("Spatial Heatmap", self.section_spatial), "export": ("Export", self.section_export), } for key, (title, widget) in section_map.items(): @@ -1320,6 +1628,7 @@ def _setup_section_popups(self) -> None: scroll.setFrameShape(QtWidgets.QFrame.Shape.NoFrame) scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) + scroll.setStyleSheet("QScrollArea { background: #242a34; border: none; }") # Keep viewport painted with dock background to avoid dark paint gaps # when section rows are dynamically shown/hidden. scroll.viewport().setAutoFillBackground(True) @@ -1437,6 +1746,7 @@ def _default_popup_size(self, key: str) -> Tuple[int, int]: "psth": (420, 640), "signal": (420, 640), "behavior": (500, 620), + "spatial": (420, 520), "export": (340, 300), } return size_map.get(key, (420, 620)) @@ -1533,7 +1843,7 @@ def _has_saved_layout_state(self) -> bool: try: if self._settings.contains(_POST_DOCK_STATE_KEY): return True - keys = list(self._section_popups.keys()) or ["setup", "psth", "signal", "behavior", "export"] + keys = list(self._section_popups.keys()) or ["setup", "psth", "signal", "behavior", "spatial", "export"] for key in keys: if self._settings.contains(f"post_section_docks/{key}/visible"): return True @@ -1723,6 +2033,7 @@ def receive_current_processed(self, processed_list: List[ProcessedTrial]) -> Non self._refresh_behavior_list() self._set_resample_from_processed() self._update_trace_preview() + self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() @@ -1733,6 +2044,7 @@ def append_processed(self, processed_list: List[ProcessedTrial]) -> None: self._refresh_behavior_list() self._set_resample_from_processed() self._update_trace_preview() + self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() @@ -1777,11 +2089,13 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: info = _load_behavior_ethovision(p, sheet_name=sheet, parse_mode=parse_mode) else: continue - if not (info.get("behaviors") or {}): + has_behaviors = bool(info.get("behaviors") or {}) + has_trajectory = bool(info.get("trajectory") or {}) + if not has_behaviors and not has_trajectory: QtWidgets.QMessageBox.warning( self, "Behavior load warning", - f"No behavior columns detected in {os.path.basename(p)} for the selected file type.", + f"No behavior or trajectory numeric columns detected in {os.path.basename(p)} for the selected file type.", ) self._behavior_sources[stem] = info except Exception as exc: @@ -1818,6 +2132,7 @@ def _load_processed_paths(self, paths: List[str], replace: bool) -> None: self._update_file_lists() self._set_resample_from_processed() self._compute_psth() + self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() @@ -1941,6 +2256,7 @@ def _refresh_signal_file_combo(self) -> None: def _update_data_availability(self) -> None: has_processed = bool(self._processed) has_behavior = bool(self._behavior_sources) + spatial_ready = has_processed and has_behavior for w in ( self.btn_compute, self.btn_update, @@ -1975,6 +2291,28 @@ def _update_data_availability(self) -> None: self.cb_behavior_aligned, ): w.setEnabled(has_behavior) + for w in ( + self.combo_spatial_x, + self.combo_spatial_y, + self.spin_spatial_bins_x, + self.spin_spatial_bins_y, + self.combo_spatial_weight, + self.cb_spatial_clip, + self.spin_spatial_clip_low, + self.spin_spatial_clip_high, + self.cb_spatial_time_filter, + self.spin_spatial_time_min, + self.spin_spatial_time_max, + self.spin_spatial_smooth, + self.combo_spatial_activity_mode, + self.cb_spatial_log, + self.cb_spatial_invert_y, + self.btn_compute_spatial, + ): + w.setEnabled(spatial_ready) + self.btn_spatial_help.setEnabled(True) + self._update_spatial_clip_enabled() + self._update_spatial_time_filter_enabled() self._refresh_signal_file_combo() def _update_status_strip(self) -> None: @@ -2318,6 +2656,8 @@ def _refresh_behavior_list(self) -> None: if hasattr(self, "combo_behavior_analysis"): self.combo_behavior_analysis.clear() if not self._behavior_sources: + self._refresh_spatial_columns() + self._compute_spatial_heatmap() self._update_data_availability() return behavior_names: set[str] = set() @@ -2337,9 +2677,621 @@ def _refresh_behavior_list(self) -> None: # Update the lists with numbered items self._update_file_lists() + self._refresh_spatial_columns() + self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() + def _guess_spatial_column(self, columns: List[str], axis: str) -> Optional[str]: + if not columns: + return None + axis_l = axis.lower() + patterns = { + "x": ["x", "center x", "centrex", "nose x", "body x", "position x", "x center"], + "y": ["y", "center y", "centrey", "nose y", "body y", "position y", "y center"], + }.get(axis_l, []) + for col in columns: + name = str(col).strip().lower() + for pat in patterns: + if pat == name or pat in name: + return col + return columns[0] + + def _refresh_spatial_columns(self) -> None: + if not hasattr(self, "combo_spatial_x") or not hasattr(self, "combo_spatial_y"): + return + + prev_x = self.combo_spatial_x.currentText().strip() + prev_y = self.combo_spatial_y.currentText().strip() + cols: set[str] = set() + for info in self._behavior_sources.values(): + trajectory = info.get("trajectory") or {} + cols.update(str(k) for k in trajectory.keys()) + ordered = sorted(cols) + + for combo in (self.combo_spatial_x, self.combo_spatial_y): + combo.blockSignals(True) + combo.clear() + combo.addItems(ordered) + combo.blockSignals(False) + + if not ordered: + return + + if prev_x: + ix = self.combo_spatial_x.findText(prev_x) + if ix >= 0: + self.combo_spatial_x.setCurrentIndex(ix) + if prev_y: + iy = self.combo_spatial_y.findText(prev_y) + if iy >= 0: + self.combo_spatial_y.setCurrentIndex(iy) + + if not self.combo_spatial_x.currentText().strip(): + gx = self._guess_spatial_column(ordered, "x") + if gx: + self.combo_spatial_x.setCurrentText(gx) + if not self.combo_spatial_y.currentText().strip(): + gy = self._guess_spatial_column(ordered, "y") + if gy: + self.combo_spatial_y.setCurrentText(gy) + + if self.combo_spatial_x.currentText().strip() == self.combo_spatial_y.currentText().strip() and len(ordered) > 1: + for col in ordered: + if col != self.combo_spatial_x.currentText().strip(): + self.combo_spatial_y.setCurrentText(col) + break + + def _update_spatial_clip_enabled(self) -> None: + enabled = bool(self.cb_spatial_clip.isChecked() and self.cb_spatial_clip.isEnabled()) + self.spin_spatial_clip_low.setEnabled(enabled) + self.spin_spatial_clip_high.setEnabled(enabled) + + def _update_spatial_time_filter_enabled(self) -> None: + enabled = bool(self.cb_spatial_time_filter.isChecked() and self.cb_spatial_time_filter.isEnabled()) + self.spin_spatial_time_min.setEnabled(enabled) + self.spin_spatial_time_max.setEnabled(enabled) + + def _show_spatial_help(self) -> None: + QtWidgets.QMessageBox.information( + self, + "Spatial Heatmap Help", + "Top plot: occupancy heatmap.\n" + "Middle plot: activity heatmap (mean, sum, or velocity-normalized z-score per bin).\n" + "Bottom plot: velocity heatmap (mean speed per bin).\n" + "Enable time filter to include only samples within [start, end] seconds.\n" + "Use the right-side color cursors on each plot to set min/max display range interactively.", + ) + + def _selected_processed_for_spatial(self) -> List[ProcessedTrial]: + if not self._processed: + return [] + selected = self.list_preprocessed.selectedItems() if hasattr(self, "list_preprocessed") else [] + if not selected: + return list(self._processed) + id_map = {id(proc): proc for proc in self._processed} + picked: List[ProcessedTrial] = [] + for item in selected: + proc_id = item.data(QtCore.Qt.ItemDataRole.UserRole) if item else None + proc = id_map.get(proc_id) + if proc is not None: + picked.append(proc) + return picked or list(self._processed) + + def _spatial_weight_values( + self, + x: np.ndarray, + y: np.ndarray, + t: np.ndarray, + mode: str, + ) -> Tuple[np.ndarray, np.ndarray, Optional[np.ndarray]]: + xx = np.asarray(x, float) + yy = np.asarray(y, float) + n = min(xx.size, yy.size) + if n <= 0: + return np.array([], float), np.array([], float), None + xx = xx[:n] + yy = yy[:n] + weights: Optional[np.ndarray] = None + if "time" in mode.lower() or "probability" in mode.lower(): + tt = np.asarray(t, float) if t is not None else np.array([], float) + if tt.size >= n: + tt = tt[:n] + else: + tt = np.array([], float) + if tt.size == n: + dt = np.diff(tt) + dt = dt[np.isfinite(dt) & (dt > 0)] + default_dt = float(np.nanmedian(dt)) if dt.size else 1.0 + w = np.full(n, default_dt, dtype=float) + if n > 1: + step = np.diff(tt, prepend=tt[0]) + step[~np.isfinite(step)] = default_dt + step[step <= 0] = default_dt + w = step + weights = w + else: + weights = np.ones(n, dtype=float) + return xx, yy, weights + + def _spatial_velocity_values( + self, + x: np.ndarray, + y: np.ndarray, + t: np.ndarray, + ) -> np.ndarray: + xx = np.asarray(x, float) + yy = np.asarray(y, float) + n = min(xx.size, yy.size) + if n <= 1: + return np.array([], float) + xx = xx[:n] + yy = yy[:n] + tt = np.asarray(t, float) if t is not None else np.array([], float) + if tt.size >= n: + tt = tt[:n] + dt = np.diff(tt) + use_time = True + else: + dt = np.ones(n - 1, dtype=float) + use_time = False + dx = np.diff(xx) + dy = np.diff(yy) + speed_steps = np.full(n - 1, np.nan, dtype=float) + valid = np.isfinite(dx) & np.isfinite(dy) & np.isfinite(dt) & (dt > 0) + if np.any(valid): + dist = np.sqrt(dx[valid] * dx[valid] + dy[valid] * dy[valid]) + speed_steps[valid] = dist / dt[valid] if use_time else dist + speed = np.full(n, np.nan, dtype=float) + speed[1:] = speed_steps + if np.isfinite(speed_steps).any(): + speed[0] = float(speed_steps[np.where(np.isfinite(speed_steps))[0][0]]) + return speed + + def _render_spatial_map( + self, + plot_widget: pg.PlotWidget, + image_item: pg.ImageItem, + heat: Optional[np.ndarray], + extent: Optional[Tuple[float, float, float, float]], + x_label: str, + y_label: str, + title: str, + ) -> None: + plot_widget.setTitle(title) + plot_widget.setLabel("bottom", x_label or "X") + plot_widget.setLabel("left", y_label or "Y") + invert_y = bool(self.cb_spatial_invert_y.isChecked()) if hasattr(self, "cb_spatial_invert_y") else False + vb = plot_widget.getViewBox() + if vb is not None: + vb.invertY(invert_y) + + if heat is None or heat.size == 0 or extent is None: + image_item.setImage(np.zeros((1, 1)), autoLevels=True) + image_item.setRect(QtCore.QRectF(0.0, 0.0, 1.0, 1.0)) + plot_widget.setXRange(0.0, 1.0, padding=0.0) + plot_widget.setYRange(0.0, 1.0, padding=0.0) + return + + cmap_name = str(self._style.get("heatmap_cmap", "viridis")) + try: + cmap = pg.colormap.get(cmap_name) + image_item.setLookupTable(cmap.getLookupTable()) + if image_item is getattr(self, "img_spatial_occupancy", None): + self.spatial_lut_occupancy.item.gradient.setColorMap(cmap) + elif image_item is getattr(self, "img_spatial_activity", None): + self.spatial_lut_activity.item.gradient.setColorMap(cmap) + elif image_item is getattr(self, "img_spatial_velocity", None): + self.spatial_lut_velocity.item.gradient.setColorMap(cmap) + except Exception: + pass + + arr = np.asarray(heat, float) + image_item.setImage(arr, autoLevels=True) + hmin = self._style.get("heatmap_min", None) + hmax = self._style.get("heatmap_max", None) + if hmin is not None and hmax is not None: + image_item.setLevels([float(hmin), float(hmax)]) + xmin, xmax, ymin, ymax = extent + dx = max(1e-9, float(xmax - xmin)) + dy = max(1e-9, float(ymax - ymin)) + image_item.setRect(QtCore.QRectF(float(xmin), float(ymin), dx, dy)) + plot_widget.setXRange(float(xmin), float(xmax), padding=0.0) + plot_widget.setYRange(float(ymin), float(ymax), padding=0.0) + + def _render_spatial_heatmap( + self, + occupancy_heat: Optional[np.ndarray], + activity_heat: Optional[np.ndarray], + velocity_heat: Optional[np.ndarray], + extent: Optional[Tuple[float, float, float, float]], + x_label: str, + y_label: str, + occupancy_title: str, + activity_title: str, + velocity_title: str, + ) -> None: + self._render_spatial_map( + self.plot_spatial_occupancy, + self.img_spatial_occupancy, + occupancy_heat, + extent, + x_label, + y_label, + occupancy_title, + ) + self._render_spatial_map( + self.plot_spatial_activity, + self.img_spatial_activity, + activity_heat, + extent, + x_label, + y_label, + activity_title, + ) + self._render_spatial_map( + self.plot_spatial_velocity, + self.img_spatial_velocity, + velocity_heat, + extent, + x_label, + y_label, + velocity_title, + ) + + def _show_spatial_heatmap_panel(self) -> None: + if not hasattr(self, "spatial_plot_dialog"): + return + try: + self.spatial_plot_dialog.show() + self.spatial_plot_dialog.raise_() + self.spatial_plot_dialog.activateWindow() + except Exception: + pass + + def _on_compute_spatial_clicked(self) -> None: + self._compute_spatial_heatmap(show_panel=True) + + def _compute_spatial_heatmap(self, show_panel: bool = False) -> None: + if not hasattr(self, "plot_spatial_occupancy"): + return + if show_panel: + self._show_spatial_heatmap_panel() + activity_mode_text = self.combo_spatial_activity_mode.currentText().strip().lower() + activity_mode = "mean" + if "velocity" in activity_mode_text: + activity_mode = "velocity" + elif "sum" in activity_mode_text: + activity_mode = "sum" + + def _activity_title_default() -> str: + if activity_mode == "velocity": + return "Spatial activity (velocity-normalized z-score/bin)" + if activity_mode == "sum": + return "Spatial activity (sum z-score/bin)" + return "Spatial activity (mean z-score/bin)" + + def _clear_spatial(msg: str, x_label: str = "", y_label: str = "") -> None: + self._last_spatial_occupancy_map = None + self._last_spatial_activity_map = None + self._last_spatial_velocity_map = None + self._last_spatial_extent = None + self.lbl_spatial_msg.setText(msg) + self._render_spatial_heatmap( + None, + None, + None, + None, + x_label, + y_label, + "Spatial occupancy", + _activity_title_default(), + "Spatial velocity (mean speed/bin)", + ) + + if not self._processed: + _clear_spatial("Load processed files to compute spatial heatmap.") + return + if not self._behavior_sources: + _clear_spatial("Load behavior file(s) with trajectory columns.") + return + + x_col = self.combo_spatial_x.currentText().strip() + y_col = self.combo_spatial_y.currentText().strip() + if not x_col or not y_col: + _clear_spatial("Select X and Y trajectory columns.", x_col, y_col) + return + + selected = self._selected_processed_for_spatial() + mode = self.combo_spatial_weight.currentText().strip() + use_time_filter = bool(self.cb_spatial_time_filter.isChecked()) + time_min = float(self.spin_spatial_time_min.value()) + time_max = float(self.spin_spatial_time_max.value()) + if use_time_filter and time_max <= time_min: + _clear_spatial("Invalid time range: end must be greater than start.", x_col, y_col) + return + bins_x = int(self.spin_spatial_bins_x.value()) + bins_y = int(self.spin_spatial_bins_y.value()) + + rows: List[Dict[str, np.ndarray]] = [] + all_x: List[np.ndarray] = [] + all_y: List[np.ndarray] = [] + skipped_missing_time = 0 + for proc in selected: + info = self._match_behavior_source(proc) + if not info: + continue + traj = info.get("trajectory") or {} + if x_col not in traj or y_col not in traj: + continue + x = np.asarray(traj.get(x_col, np.array([], float)), float) + y = np.asarray(traj.get(y_col, np.array([], float)), float) + t = np.asarray(info.get("trajectory_time", np.array([], float)), float) + if t.size == 0: + t = np.asarray(info.get("time", np.array([], float)), float) + n = min(x.size, y.size) + if n <= 2: + continue + xx = x[:n] + yy = y[:n] + tt_full = t[:n] if t.size >= n else np.array([], float) + finite = np.isfinite(xx) & np.isfinite(yy) + if use_time_filter: + if tt_full.size != n: + skipped_missing_time += 1 + continue + finite = finite & np.isfinite(tt_full) & (tt_full >= time_min) & (tt_full <= time_max) + if not np.any(finite): + continue + + xx_occ = xx[finite] + yy_occ = yy[finite] + tt_occ = tt_full[finite] if tt_full.size == n else np.array([], float) + vel_occ = self._spatial_velocity_values(xx_occ, yy_occ, tt_occ) + if vel_occ.size != xx_occ.size: + vel_occ = np.full(xx_occ.shape, np.nan, dtype=float) + + act_vals = np.array([], float) + if proc.output is not None: + yy_out = np.asarray(proc.output, float) + is_zscore_output = "zscore" in (proc.output_label or "").lower() or "z-score" in (proc.output_label or "").lower() + if is_zscore_output: + yy_z = yy_out + else: + yy_z = np.asarray(yy_out, float).copy() + m_out = np.isfinite(yy_z) + if np.any(m_out): + mu = float(np.nanmean(yy_z[m_out])) + sd = float(np.nanstd(yy_z[m_out])) + if not np.isfinite(sd) or sd <= 1e-12: + sd = 1.0 + yy_z = (yy_z - mu) / sd + if proc.time is not None and np.asarray(proc.time, float).size == yy_out.size and t.size >= n: + tt_proc = np.asarray(proc.time, float) + act_full = np.interp(t[:n], tt_proc, yy_z, left=np.nan, right=np.nan) + act_vals = np.asarray(act_full[finite], float) + elif yy_z.size >= n: + act_vals = np.asarray(yy_z[:n][finite], float) + + rows.append( + { + "x_occ": xx_occ, + "y_occ": yy_occ, + "t_occ": tt_occ, + "vel_occ": vel_occ, + "x_act": xx_occ.copy(), + "y_act": yy_occ.copy(), + "t_act": tt_occ.copy(), + "vel_act": vel_occ.copy(), + "act": act_vals, + } + ) + all_x.append(xx_occ) + all_y.append(yy_occ) + + if not rows or not all_x or not all_y: + if use_time_filter: + _clear_spatial("No trajectory samples in the selected time range.", x_col, y_col) + else: + _clear_spatial("No matching trajectory data found for selected files.", x_col, y_col) + return + + x_all = np.concatenate(all_x) + y_all = np.concatenate(all_y) + if self.cb_spatial_clip.isChecked(): + lo = float(self.spin_spatial_clip_low.value()) + hi = float(self.spin_spatial_clip_high.value()) + if hi <= lo: + hi = min(100.0, lo + 1.0) + xmin, xmax = np.nanpercentile(x_all, [lo, hi]) + ymin, ymax = np.nanpercentile(y_all, [lo, hi]) + else: + xmin, xmax = float(np.nanmin(x_all)), float(np.nanmax(x_all)) + ymin, ymax = float(np.nanmin(y_all)), float(np.nanmax(y_all)) + if not np.isfinite(xmin) or not np.isfinite(xmax) or xmin == xmax: + xmin, xmax = 0.0, 1.0 + if not np.isfinite(ymin) or not np.isfinite(ymax) or ymin == ymax: + ymin, ymax = 0.0, 1.0 + + occ_maps: List[np.ndarray] = [] + act_maps: List[np.ndarray] = [] + vel_maps: List[np.ndarray] = [] + for row in rows: + xx, yy, weights = self._spatial_weight_values(row["x_occ"], row["y_occ"], row["t_occ"], mode) + if xx.size == 0 or yy.size == 0: + continue + occ_hist, _, _ = np.histogram2d( + xx, + yy, + bins=[bins_x, bins_y], + range=[[xmin, xmax], [ymin, ymax]], + weights=weights, + ) + occ_hist = np.asarray(occ_hist, float) + if "probability" in mode.lower(): + denom = float(np.nansum(occ_hist)) + if denom > 0: + occ_hist = (occ_hist / denom) * 100.0 + occ_maps.append(occ_hist) + + vel = np.asarray(row.get("vel_occ", np.array([], float)), float) + if vel.size > 0: + xv = np.asarray(row["x_occ"], float) + yv = np.asarray(row["y_occ"], float) + tv = np.asarray(row["t_occ"], float) + m_vel = np.isfinite(vel) & np.isfinite(xv) & np.isfinite(yv) + if np.any(m_vel): + xv = xv[m_vel] + yv = yv[m_vel] + vel = np.clip(vel[m_vel], a_min=0.0, a_max=None) + tv = tv[m_vel] if tv.size == m_vel.size else np.array([], float) + xx_v, yy_v, w_v = self._spatial_weight_values(xv, yv, tv, mode) + n_v = min(xx_v.size, yy_v.size, vel.size) + if n_v > 0: + xx_v = xx_v[:n_v] + yy_v = yy_v[:n_v] + vel = vel[:n_v] + vel_w = w_v[:n_v] if w_v is not None and w_v.size >= n_v else np.ones(n_v, dtype=float) + vel_num, _, _ = np.histogram2d( + xx_v, + yy_v, + bins=[bins_x, bins_y], + range=[[xmin, xmax], [ymin, ymax]], + weights=vel * vel_w, + ) + vel_den, _, _ = np.histogram2d( + xx_v, + yy_v, + bins=[bins_x, bins_y], + range=[[xmin, xmax], [ymin, ymax]], + weights=vel_w, + ) + with np.errstate(divide="ignore", invalid="ignore"): + vel_hist = np.divide(vel_num, vel_den, out=np.full_like(vel_num, np.nan), where=vel_den > 0) + vel_maps.append(np.asarray(vel_hist, float)) + + act = np.asarray(row.get("act", np.array([], float)), float) + if act.size == 0: + continue + xa = np.asarray(row["x_act"], float) + ya = np.asarray(row["y_act"], float) + ta = np.asarray(row["t_act"], float) + va = np.asarray(row.get("vel_act", np.array([], float)), float) + m_act = np.isfinite(act) & np.isfinite(xa) & np.isfinite(ya) + if not np.any(m_act): + continue + xa = xa[m_act] + ya = ya[m_act] + act = act[m_act] + ta = ta[m_act] if ta.size == m_act.size else np.array([], float) + if va.size == m_act.size: + va = va[m_act] + else: + va = np.full(act.shape, np.nan, dtype=float) + xx_a, yy_a, w_a = self._spatial_weight_values(xa, ya, ta, mode) + if xx_a.size == 0 or yy_a.size == 0 or act.size == 0: + continue + n_a = min(xx_a.size, yy_a.size, act.size) + xx_a = xx_a[:n_a] + yy_a = yy_a[:n_a] + act = act[:n_a] + va = va[:n_a] if va.size >= n_a else np.full(n_a, np.nan, dtype=float) + den_w = w_a[:n_a] if w_a is not None and w_a.size >= n_a else np.ones(n_a, dtype=float) + num_hist, _, _ = np.histogram2d( + xx_a, + yy_a, + bins=[bins_x, bins_y], + range=[[xmin, xmax], [ymin, ymax]], + weights=act * den_w, + ) + + if activity_mode == "sum": + act_hist = np.asarray(num_hist, float) + elif activity_mode == "velocity": + vel_weights = np.nan_to_num(np.clip(va, a_min=0.0, a_max=None), nan=0.0, posinf=0.0, neginf=0.0) * den_w + vel_den, _, _ = np.histogram2d( + xx_a, + yy_a, + bins=[bins_x, bins_y], + range=[[xmin, xmax], [ymin, ymax]], + weights=vel_weights, + ) + with np.errstate(divide="ignore", invalid="ignore"): + act_hist = np.divide(num_hist, vel_den, out=np.full_like(num_hist, np.nan), where=vel_den > 1e-12) + else: + den_hist, _, _ = np.histogram2d( + xx_a, + yy_a, + bins=[bins_x, bins_y], + range=[[xmin, xmax], [ymin, ymax]], + weights=den_w, + ) + with np.errstate(divide="ignore", invalid="ignore"): + act_hist = np.divide(num_hist, den_hist, out=np.full_like(num_hist, np.nan), where=den_hist > 0) + act_maps.append(np.asarray(act_hist, float)) + + if not occ_maps: + _clear_spatial("Could not compute heatmap for selected trajectories.", x_col, y_col) + return + + occupancy_map = np.nanmean(np.stack(occ_maps, axis=0), axis=0) + activity_map = np.nanmean(np.stack(act_maps, axis=0), axis=0) if act_maps else None + velocity_map = np.nanmean(np.stack(vel_maps, axis=0), axis=0) if vel_maps else None + sigma = float(self.spin_spatial_smooth.value()) + if sigma > 0: + from scipy.ndimage import gaussian_filter + + def _smooth_map(arr: np.ndarray) -> np.ndarray: + a = np.asarray(arr, float) + if not np.any(~np.isfinite(a)): + return gaussian_filter(a, sigma=max(0.0, sigma), mode="nearest") + valid = np.isfinite(a).astype(float) + num = gaussian_filter(np.nan_to_num(a, nan=0.0), sigma=max(0.0, sigma), mode="nearest") + den = gaussian_filter(valid, sigma=max(0.0, sigma), mode="nearest") + return np.divide(num, den, out=np.full_like(num, np.nan), where=den > 1e-9) + + occupancy_map = _smooth_map(occupancy_map) + if activity_map is not None: + activity_map = _smooth_map(activity_map) + if velocity_map is not None: + velocity_map = _smooth_map(velocity_map) + if self.cb_spatial_log.isChecked(): + occupancy_map = np.log1p(np.clip(occupancy_map, a_min=0.0, a_max=None)) + if activity_map is not None: + activity_map = np.sign(activity_map) * np.log1p(np.abs(activity_map)) + if velocity_map is not None: + velocity_map = np.log1p(np.clip(velocity_map, a_min=0.0, a_max=None)) + + self._last_spatial_occupancy_map = occupancy_map + self._last_spatial_activity_map = activity_map + self._last_spatial_velocity_map = velocity_map + self._last_spatial_extent = (float(xmin), float(xmax), float(ymin), float(ymax)) + occ_title = f"Spatial occupancy ({mode.lower()})" + if len(occ_maps) > 1: + occ_title += f" - avg {len(occ_maps)} files" + act_title = _activity_title_default() + if len(act_maps) > 1: + act_title += f" - avg {len(act_maps)} files" + vel_title = "Spatial velocity (mean speed/bin)" + if len(vel_maps) > 1: + vel_title += f" - avg {len(vel_maps)} files" + self._render_spatial_heatmap( + occupancy_map, + activity_map, + velocity_map, + self._last_spatial_extent, + x_col, + y_col, + occ_title, + act_title, + vel_title, + ) + time_txt = f", time={time_min:g}-{time_max:g}s" if use_time_filter else "" + skip_txt = f", skipped {skipped_missing_time} file(s) without valid time" if skipped_missing_time > 0 else "" + self.lbl_spatial_msg.setText( + f"Rendered occupancy {len(occ_maps)} map(s), activity {len(act_maps)} map(s), velocity {len(vel_maps)} map(s), bins={bins_x}x{bins_y}{time_txt}{skip_txt}." + ) + def _update_file_lists(self) -> None: """Update the preprocessed files and behaviors lists with numbered entries.""" self.list_preprocessed.clear() @@ -2370,6 +3322,7 @@ def _sync_processed_order_from_list(self) -> None: if new_order and len(new_order) == len(self._processed): self._processed = new_order self._update_file_lists() + self._compute_spatial_heatmap() self._update_status_strip() def _sync_behavior_order_from_list(self) -> None: @@ -2382,6 +3335,7 @@ def _sync_behavior_order_from_list(self) -> None: if keys and len(keys) == len(self._behavior_sources): self._behavior_sources = {k: self._behavior_sources[k] for k in keys} self._update_file_lists() + self._compute_spatial_heatmap() self._update_status_strip() def _move_selected_up(self) -> None: @@ -2484,6 +3438,7 @@ def _auto_match_files(self) -> None: self._behavior_sources = dict(new_behavior_order) self._update_file_lists() + self._compute_spatial_heatmap() self._update_status_strip() def _remove_selected_preprocessed(self) -> None: @@ -2495,6 +3450,7 @@ def _remove_selected_preprocessed(self) -> None: if 0 <= row < len(self._processed): del self._processed[row] self._update_file_lists() + self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() @@ -3848,6 +4804,17 @@ def _open_style_dialog(self) -> None: self.curve_behavior.setPen(pg.mkPen(self._style["behavior"], width=1.0)) self.curve_avg.setPen(pg.mkPen(self._style["avg"], width=1.3)) self._render_heatmap(self._last_mat if self._last_mat is not None else np.zeros((1, 1)), self._last_tvec if self._last_tvec is not None else np.array([0.0, 1.0])) + self._render_spatial_heatmap( + self._last_spatial_occupancy_map, + self._last_spatial_activity_map, + self._last_spatial_velocity_map, + self._last_spatial_extent, + self.combo_spatial_x.currentText().strip(), + self.combo_spatial_y.currentText().strip(), + "Spatial occupancy", + "Spatial activity", + "Spatial velocity", + ) self._save_settings() def _save_config_file(self) -> None: @@ -3875,6 +4842,7 @@ def _load_config_file(self) -> None: data = json.load(f) self._apply_settings(data) self._compute_psth() + self._compute_spatial_heatmap() self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) except Exception: pass @@ -3931,6 +4899,22 @@ def _collect_settings(self) -> Dict[str, object]: "behavior_analysis_name": self.combo_behavior_analysis.currentText(), "behavior_analysis_bin": float(self.spin_behavior_bin.value()), "behavior_analysis_aligned": self.cb_behavior_aligned.isChecked(), + "spatial_x": self.combo_spatial_x.currentText(), + "spatial_y": self.combo_spatial_y.currentText(), + "spatial_bins_x": int(self.spin_spatial_bins_x.value()), + "spatial_bins_y": int(self.spin_spatial_bins_y.value()), + "spatial_weight": self.combo_spatial_weight.currentText(), + "spatial_clip": self.cb_spatial_clip.isChecked(), + "spatial_clip_low": float(self.spin_spatial_clip_low.value()), + "spatial_clip_high": float(self.spin_spatial_clip_high.value()), + "spatial_time_filter": self.cb_spatial_time_filter.isChecked(), + "spatial_time_min": float(self.spin_spatial_time_min.value()), + "spatial_time_max": float(self.spin_spatial_time_max.value()), + "spatial_smooth": float(self.spin_spatial_smooth.value()), + "spatial_activity_mode": self.combo_spatial_activity_mode.currentText(), + "spatial_activity_norm": self.combo_spatial_activity_mode.currentText().strip().lower().startswith("mean"), + "spatial_log": self.cb_spatial_log.isChecked(), + "spatial_invert_y": self.cb_spatial_invert_y.isChecked(), "style": dict(self._style), } @@ -4025,6 +5009,38 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: self.spin_behavior_bin.setValue(float(data["behavior_analysis_bin"])) if "behavior_analysis_aligned" in data: self.cb_behavior_aligned.setChecked(bool(data["behavior_analysis_aligned"])) + _set_combo(self.combo_spatial_x, data.get("spatial_x")) + _set_combo(self.combo_spatial_y, data.get("spatial_y")) + if "spatial_bins_x" in data: + self.spin_spatial_bins_x.setValue(int(data["spatial_bins_x"])) + if "spatial_bins_y" in data: + self.spin_spatial_bins_y.setValue(int(data["spatial_bins_y"])) + _set_combo(self.combo_spatial_weight, data.get("spatial_weight")) + if "spatial_clip" in data: + self.cb_spatial_clip.setChecked(bool(data["spatial_clip"])) + if "spatial_clip_low" in data: + self.spin_spatial_clip_low.setValue(float(data["spatial_clip_low"])) + if "spatial_clip_high" in data: + self.spin_spatial_clip_high.setValue(float(data["spatial_clip_high"])) + if "spatial_time_filter" in data: + self.cb_spatial_time_filter.setChecked(bool(data["spatial_time_filter"])) + if "spatial_time_min" in data: + self.spin_spatial_time_min.setValue(float(data["spatial_time_min"])) + if "spatial_time_max" in data: + self.spin_spatial_time_max.setValue(float(data["spatial_time_max"])) + if "spatial_smooth" in data: + self.spin_spatial_smooth.setValue(float(data["spatial_smooth"])) + if "spatial_activity_mode" in data: + _set_combo(self.combo_spatial_activity_mode, data.get("spatial_activity_mode")) + elif "spatial_activity_norm" in data: + if bool(data["spatial_activity_norm"]): + _set_combo(self.combo_spatial_activity_mode, "Mean z-score/bin (occupancy normalized)") + else: + _set_combo(self.combo_spatial_activity_mode, "Sum z-score/bin") + if "spatial_log" in data: + self.cb_spatial_log.setChecked(bool(data["spatial_log"])) + if "spatial_invert_y" in data: + self.cb_spatial_invert_y.setChecked(bool(data["spatial_invert_y"])) style = data.get("style") if isinstance(style, dict): self._style.update(style) @@ -4034,9 +5050,12 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: self._update_event_filter_enabled() self._update_metrics_enabled() self._update_global_metrics_enabled() + self._update_spatial_clip_enabled() + self._update_spatial_time_filter_enabled() self._update_metric_regions() self._apply_view_layout() self._refresh_signal_file_combo() + self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() @@ -4199,6 +5218,9 @@ def _export_images(self) -> None: "behavior_rate": self.plot_behavior_rate, "behavior_duration": self.plot_behavior_duration, "behavior_starts": self.plot_behavior_starts, + "spatial_occupancy": self.plot_spatial_occupancy, + "spatial_activity": self.plot_spatial_activity, + "spatial_velocity": self.plot_spatial_velocity, } for name, widget in targets.items(): try: @@ -4211,6 +5233,11 @@ def hideEvent(self, event: QtGui.QHideEvent) -> None: super().hideEvent(event) if self._app_closing: return + try: + if hasattr(self, "spatial_plot_dialog"): + self.spatial_plot_dialog.hide() + except Exception: + pass self.hide_section_popups_for_tab_switch() def hide_section_popups_for_tab_switch(self) -> None: @@ -4271,7 +5298,11 @@ def _ensure_plot_rows_visible(self) -> None: """Guarantee the plot area remains visible after tab switches and dock operations.""" if hasattr(self, "_right_panel"): self._right_panel.setVisible(True) - if not (self.plot_trace.isVisible() or self.row_heat.isVisible() or self.row_avg.isVisible()): + if not ( + self.plot_trace.isVisible() + or self.row_heat.isVisible() + or self.row_avg.isVisible() + ): self.combo_view_layout.blockSignals(True) self.combo_view_layout.setCurrentText("Standard") self.combo_view_layout.blockSignals(False) @@ -4377,6 +5408,11 @@ def _apply_post_main_dock_snapshot_if_needed(self) -> None: def _on_about_to_quit(self) -> None: self._app_closing = True + try: + if hasattr(self, "spatial_plot_dialog"): + self.spatial_plot_dialog.hide() + except Exception: + pass self.persist_layout_state_snapshot() self._save_settings() @@ -4416,14 +5452,14 @@ def apply_fixed_default_layout(self) -> None: self._dock_host = host setup = self._section_popups.get("setup") - ordered_right_keys = ["setup", "psth", "signal", "behavior"] + ordered_right_keys = ["setup", "psth", "signal", "behavior", "spatial"] export = self._section_popups.get("export") self._suspend_panel_layout_persistence = True try: self._apply_fixed_dock_features() # Reset previous split/tab topology before rebuilding the fixed stack. - for key in ("setup", "psth", "signal", "behavior", "export"): + for key in ("setup", "psth", "signal", "behavior", "spatial", "export"): dock = self._section_popups.get(key) if dock is None: continue @@ -4454,7 +5490,7 @@ def apply_fixed_default_layout(self) -> None: export.blockSignals(False) if setup is not None: - for key in ("psth", "signal", "behavior"): + for key in ("psth", "signal", "behavior", "spatial"): dock = self._section_popups.get(key) if dock is None: continue @@ -4472,7 +5508,7 @@ def apply_fixed_default_layout(self) -> None: export.raise_() # Final hard enforcement: all post docks must be docked (non-floating). - for key in ("setup", "psth", "signal", "behavior", "export"): + for key in ("setup", "psth", "signal", "behavior", "spatial", "export"): dock = self._section_popups.get(key) if dock is None: continue From 5c4f238f3f467039356e3af41f8cd794fe9971c0 Mon Sep 17 00:00:00 2001 From: andrianj Date: Fri, 20 Feb 2026 16:47:33 +0100 Subject: [PATCH 08/28] improved spatial heatmaps --- panel_layout.json | 16 +-- .../gui_postprocessing.cpython-311.pyc | Bin 391715 -> 397410 bytes .../gui_postprocessing.cpython-38.pyc | Bin 148294 -> 150184 bytes pyBer/__pycache__/styles.cpython-311.pyc | Bin 3342 -> 6752 bytes pyBer/__pycache__/styles.cpython-38.pyc | Bin 6553 -> 6750 bytes pyBer/gui_postprocessing.py | 132 +++++++++++++++--- pyBer/styles.py | 8 +- 7 files changed, 131 insertions(+), 25 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index 388410a..5f25b02 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -37,26 +37,26 @@ "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAC8gAABjEAAAP4AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAARTAAAC8gAABjEAAAP4" + "geometry": "AdnQywADAAAAAAWhAAACSwAAB38AAAMXAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACSwAAB38AAAMX" }, "export": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAD+wAABjEAAARyAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAARTAAAD+wAABjEAAARy" + "geometry": "AdnQywADAAAAAAWhAAADGgAAB38AAAN2AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGgAAB38AAAN2" }, "config": { "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAEdQAABjEAAATWAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAAEdQAABjEAAATW" + "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" } }, "artifact": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAARTAAAAAAAABjEAAALNAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAARTAAAAAAAABjEAAALN" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAImAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIm" } }, "post": { @@ -72,25 +72,25 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8tf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8tf///gv///4L" + "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8tf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8tf///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8tf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8tf///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAUTAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAUTAAAAAAAAB38AAANU" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" }, "export": { "visible": true, diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index 9bcfd161852830dd9339ad49a070ec14c389aea9..2bccbd530d921beb2722ace71b6e0304bd8844c7 100644 GIT binary patch delta 30952 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 delta 27569 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

0G0zJzzI0i@~_>Sg~-%r+<#c?*E1iO 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 diff --git a/pyBer/__pycache__/styles.cpython-311.pyc b/pyBer/__pycache__/styles.cpython-311.pyc index 8d9354c40ce80f1c75eff1e73eb78d667deabe3f..c42680c893d7c589d8dcc221e9dffe0672020e56 100644 GIT binary patch literal 6752 zcmc&(OOG2x5cWbykWqvbT_006xtsPH~X2$Gp zqDcG;_y>sJ!;LF{Adp*5R8K$V;r6VPfN-S9?&+zn`s%Cds@h+#UhVhb^H=r@{rlry z?@#_ieRkxRmwe05y|DLPFWi~+uD^qShpqivH_$=Id@_jX2|*#wPEd+tQWON;xYa*? zh-vbeCLue$iH;xBa83&JtdHR1q&%yx%{5fPE56 z1={E6=idi0&ht-q7c?n$pR{&k;*SG&?TqQ(zB~f}Il>8v^V0q=z{2#9ohhSP77{RS zl%AoS#WY0MZ0ro(p%Cboj|UkJ=_>coG(8jROPtMVGALLIuMX8}io=j5^ZHT)RBLSc zHmC}Qfl^-)lA;BPQ<9;Koelzk6r2OUPD{7sh$cA=3F1ykkst&0w8AG zKm1)-N)k94MJ!wLl^lf(C9FU=O$p8rh6PTA11Sg_~afl`g+BP@%zLJBd zgw7X*hbBXC8E4Gr8D1(~r2Ev%%CiFh2Q)8o1R$US`!Qh4!-Fr1sDSWz#Md{+h&8kv zE36Y`TOMh%w5g6Vbe_>L1{MGvMAX?1s6CO{5CePAvgm zPGS-iBs59V4^^x*5=7`kQyC>n)u{Z`0nw48HTaTX2)J)4IrTt(!2NF$4}mhYeIZJT zCqXof#&z)<@z&PExoE7gZ4hQG2?LRMKS@_W1>ygMd=^p&uHyqg2g(P?SW^5cC77|uJTPQynLgfeN;t$y8I;G+sm1L`9gDICGO z3lf}EJb|7)VlII)nw5_QPS)lbsNOOKK zDHkYpr|vY`m$g>KLMYoT*TP&3x6PoJJ+VUvw@*fdWSy$=5ps2s(!j4H z+%%?j%xsC{SXX%ZEPjP)k*%Y2K3qSF8(gl6s&l$$@rsbI*3;Xl%$=QT9c2_snDgBy zH|tDj=`J@(6O23kctx7qOg!2$jJO@j_x04>z(H3<6@krauY=C7m2L-bgV`Iw@dl3n z*IX>(+vq+S3r!Dp>|b|xNAi%#k$cq;q>jHI^44n`$akN3GO4_V6-ZTw6BVRx42gv zb+0t<-R`(cUC42x^s zgW9TUR#B(()%EL&uQq{a#J;rLw5xaKpKWID?r8_KmlDH!E!48MTH_K7&em>A^H7ksXRYv{}wd z&%rQdz)7U5G2I;2Ho#94r-seh|1JWc-%(+p)6-SNFWZ zG>}}MHz=J{R{%NzDISt!B}YAs!Q`vfd+w2{xmfc&1`1X*(*0hw zuiN@s5BUg8_%FI8T}f+t@%&iU-KA&sv0FJ7P`}556F!sVBepz^DU6^q5u5yp2u>sP z4m2#XH{B9?6*gSaN_cZH*@$5)v~8!E@l>4EN5Qpd)TnR=>X2H`+&nTG@uF++N-@+m zXT1iah|+#;Of|0O<1!fh)+PcCgY3wexUxi0Sz3j!&boYIqtwlAt=DWb=}6C8fM500 z*Qg6Ws=a^9Qv#SD#|Ig~iXd`$B$6Nq27VpIFyD^Kac{m#Q9y@QVea!k+{nmTQ|NQgn!}R=+WViC-946O$>G`YoKUuPH6_Y#JWq8j2MwEX9|Gjv3XJ_Zd R<>0*!F8y?c|I04H>Ob9B4Tk^# delta 1116 zcmah}O-$2Z7^cvbt?Y-<{XjwUZAgFxSpV5NFBlUwF_DEB4~Ceww4~Pz8>1V-}^rA^F8nP^rQ5EjX#UU=svu{ zaMvD=?Z;=6d(pl=x>!Kxw3dkqMY;<22iUWm#Y?;dx$7ztB=0b7SQ_O115O3i@M7>xhuBeApm;^#M9ynYVaW_x?ubUiDCJ7EIu?eU~MG8yQU6LkC99My@G!v2~ZBg?mMg&XIbYGXg6M(D8X_f zjS*iaGk>c|tZZnGlV4R;*W7l|E__Lj;qEzjAIn7qUDnEYI3D^LILNR)krdn*nZL## z-<=J+K7Tv|;UuVS{~?Go*G;>&?&5Lvr2dLxJvs;8Cz+71boWd|M*Z#9B~GOF5!>*Z z$x*z(Yl7?-1`c?Xnt?Y2iRUQ6LJIZckz7gTyw_H0j$On8_t;D?8D+EN3Gg{pICjiL zax97+v0^kEj)N@$KSrm?^9|!B9Azd?{mZRwsAQ*^fKOuL0T!cywn zHMA>Wri#yfCpkGEqwjIH%(Apr?$_Sk-&@v8zAlr`L6tVr@OKzEov&8x(t9x*+4n(fA2<@%G%9+K&`(>&F0Gx|v5 delta 43 xcmca-GSiqhl$V!_0SN3*c4q2M None: fopt.addRow("Baseline (s)", base_widget) fopt.addRow("Resample (Hz)", self.spin_resample) filt_row = QtWidgets.QHBoxLayout() + filt_row.setContentsMargins(0, 0, 0, 0) + filt_row.setSpacing(6) filt_row.addWidget(self.cb_filter_events) filt_row.addStretch(1) filt_row.addWidget(self.btn_hide_filters) @@ -789,6 +791,8 @@ def _build_ui(self) -> None: fopt.addRow(self.lbl_dur_max, self.spin_dur_max) fopt.addRow("Gaussian smooth sigma (s)", self.spin_smooth) met_row = QtWidgets.QHBoxLayout() + met_row.setContentsMargins(0, 0, 0, 0) + met_row.setSpacing(6) met_row.addWidget(self.cb_metrics) met_row.addStretch(1) met_row.addWidget(self.btn_hide_metrics) @@ -836,6 +840,8 @@ def _build_ui(self) -> None: self.cb_global_freq = QtWidgets.QCheckBox("Transient frequency") self.cb_global_freq.setChecked(True) global_opts = QtWidgets.QHBoxLayout() + global_opts.setContentsMargins(0, 0, 0, 0) + global_opts.setSpacing(6) global_opts.addWidget(self.cb_global_amp) global_opts.addWidget(self.cb_global_freq) global_opts.addStretch(1) @@ -1051,10 +1057,11 @@ def _build_ui(self) -> None: self.combo_spatial_activity_mode.addItems( [ "Mean z-score/bin (occupancy normalized)", - "Velocity-normalized z-score/bin", - "Sum z-score/bin", + "Mean z-score/bin (velocity normalized)", + "Sum z-score/bin (no normalization)", ] ) + self.combo_spatial_activity_mode.setCurrentIndex(0) _compact_combo(self.combo_spatial_activity_mode, min_chars=12) self.cb_spatial_time_filter = QtWidgets.QCheckBox("Enabled") self.cb_spatial_time_filter.setChecked(False) @@ -1073,6 +1080,8 @@ def _build_ui(self) -> None: "- Top plot: occupancy map.\n" "- Middle plot: activity map (mode selected below).\n" "- Bottom plot: velocity map (mean speed/bin).\n" + "- Mean z-score/bin (occupancy normalized) = sum(z*weight) / sum(weight).\n" + "- Mean z-score/bin (velocity normalized) = sum(z*weight) / sum(speed*weight).\n" "- Enable Time filter to restrict trajectory/activity samples to [min,max] seconds.\n" "- Use right-side color cursors on each plot to set min/max display range." ) @@ -1386,6 +1395,26 @@ def _build_ui(self) -> None: self.metrics_bar_post = pg.BarGraphItem(x=[1], height=[0], width=0.6, brush=(214, 122, 90)) self.plot_metrics.addItem(self.metrics_bar_pre) self.plot_metrics.addItem(self.metrics_bar_post) + # Overlay paired trial/event points (pre vs post) and links. + self.metrics_pairs_curve = self.plot_metrics.plot( + pen=pg.mkPen((210, 215, 225, 130), width=1.0), + connect="finite", + skipFiniteCheck=True, + ) + self.metrics_scatter_pre = self.plot_metrics.plot( + pen=None, + symbol="o", + symbolSize=5, + symbolBrush=pg.mkBrush(90, 143, 214, 220), + symbolPen=pg.mkPen((90, 143, 214), width=0.8), + ) + self.metrics_scatter_post = self.plot_metrics.plot( + pen=None, + symbol="o", + symbolSize=5, + symbolBrush=pg.mkBrush(214, 122, 90, 220), + symbolPen=pg.mkPen((214, 122, 90), width=0.8), + ) self.plot_metrics.setXRange(-0.5, 1.5, padding=0) self.plot_metrics.getAxis("bottom").setTicks([[(0, "pre"), (1, "post")]]) @@ -2686,14 +2715,41 @@ def _guess_spatial_column(self, columns: List[str], axis: str) -> Optional[str]: if not columns: return None axis_l = axis.lower() + # First choice: exact column labels "X" / "Y" (case-insensitive). + for col in columns: + name = str(col).strip().lower() + if name == axis_l: + return col + # Second choice: explicit EthoVision center labels. + preferred_center = { + "x": ["x center", "x_center", "x-center", "center x", "center_x", "center-x"], + "y": ["y center", "y_center", "y-center", "center y", "center_y", "center-y"], + }.get(axis_l, []) + for col in columns: + name = str(col).strip().lower() + if name in preferred_center: + return col + # Third choice: labels starting with X/Y token (e.g. "X nose", "Y_center"). + token_re = re.compile(rf"^{re.escape(axis_l)}(?:$|[\s_\-:/\(\[])") + for col in columns: + name = str(col).strip().lower() + if token_re.match(name): + return col patterns = { "x": ["x", "center x", "centrex", "nose x", "body x", "position x", "x center"], "y": ["y", "center y", "centrey", "nose y", "body y", "position y", "y center"], }.get(axis_l, []) + # Third choice: known exact labels. for col in columns: name = str(col).strip().lower() for pat in patterns: - if pat == name or pat in name: + if pat == name: + return col + # Last choice: known partial labels. + for col in columns: + name = str(col).strip().lower() + for pat in patterns: + if pat in name: return col return columns[0] @@ -2757,8 +2813,10 @@ def _show_spatial_help(self) -> None: self, "Spatial Heatmap Help", "Top plot: occupancy heatmap.\n" - "Middle plot: activity heatmap (mean, sum, or velocity-normalized z-score per bin).\n" + "Middle plot: activity heatmap (mean occupancy-normalized, mean velocity-normalized, or sum z-score/bin).\n" "Bottom plot: velocity heatmap (mean speed per bin).\n" + "Mean z-score/bin (occupancy normalized) = sum(z*weight) / sum(weight).\n" + "Mean z-score/bin (velocity normalized) = sum(z*weight) / sum(speed*weight).\n" "Enable time filter to include only samples within [start, end] seconds.\n" "Use the right-side color cursors on each plot to set min/max display range interactively.", ) @@ -2966,10 +3024,10 @@ def _compute_spatial_heatmap(self, show_panel: bool = False) -> None: def _activity_title_default() -> str: if activity_mode == "velocity": - return "Spatial activity (velocity-normalized z-score/bin)" + return "Spatial activity (mean z-score/bin, velocity normalized)" if activity_mode == "sum": return "Spatial activity (sum z-score/bin)" - return "Spatial activity (mean z-score/bin)" + return "Spatial activity (mean z-score/bin, occupancy normalized)" def _clear_spatial(msg: str, x_label: str = "", y_label: str = "") -> None: self._last_spatial_occupancy_map = None @@ -4600,6 +4658,9 @@ def _render_metrics(self, mat: np.ndarray, tvec: np.ndarray) -> None: if mat.size == 0 or not self.cb_metrics.isChecked(): self.metrics_bar_pre.setOpts(height=[0]) self.metrics_bar_post.setOpts(height=[0]) + self.metrics_pairs_curve.setData([], []) + self.metrics_scatter_pre.setData([], []) + self.metrics_scatter_post.setData([], []) self._last_metrics = None return metric = self.combo_metric.currentText() @@ -4619,6 +4680,9 @@ def _window_vals(a: float, b: float) -> np.ndarray: if pre.size == 0 or post.size == 0: self.metrics_bar_pre.setOpts(height=[0]) self.metrics_bar_post.setOpts(height=[0]) + self.metrics_pairs_curve.setData([], []) + self.metrics_scatter_pre.setData([], []) + self.metrics_scatter_post.setData([], []) self._last_metrics = None return @@ -4631,18 +4695,54 @@ def _metric_vals(win: np.ndarray, duration: float) -> np.ndarray: else: with np.errstate(all="ignore"): vals = np.nanmean(win, axis=1) - vals = np.asarray(vals, float) - vals = vals[np.isfinite(vals)] - return vals - - pre_vals = _metric_vals(pre, pre1 - pre0) - post_vals = _metric_vals(post, post1 - post0) - pre_mean = float(np.nanmean(pre_vals)) if pre_vals.size else 0.0 - post_mean = float(np.nanmean(post_vals)) if post_vals.size else 0.0 + return np.asarray(vals, float) + + pre_vals_all = _metric_vals(pre, pre1 - pre0) + post_vals_all = _metric_vals(post, post1 - post0) + pre_vals_finite = pre_vals_all[np.isfinite(pre_vals_all)] + post_vals_finite = post_vals_all[np.isfinite(post_vals_all)] + pre_mean = float(np.nanmean(pre_vals_finite)) if pre_vals_finite.size else 0.0 + post_mean = float(np.nanmean(post_vals_finite)) if post_vals_finite.size else 0.0 self.metrics_bar_pre.setOpts(height=[pre_mean]) self.metrics_bar_post.setOpts(height=[post_mean]) - ymin = min(pre_mean, post_mean, 0.0) - ymax = max(pre_mean, post_mean, 0.0) + + pair_mask = np.isfinite(pre_vals_all) & np.isfinite(post_vals_all) + pre_pair = pre_vals_all[pair_mask] + post_pair = post_vals_all[pair_mask] + if pre_pair.size and post_pair.size: + n_pair = int(min(pre_pair.size, post_pair.size)) + pre_pair = pre_pair[:n_pair] + post_pair = post_pair[:n_pair] + # Build segmented polyline: (0, pre_i) -> (1, post_i), NaN separator. + x_line = np.empty(n_pair * 3, dtype=float) + y_line = np.empty(n_pair * 3, dtype=float) + x_line[0::3] = 0.0 + x_line[1::3] = 1.0 + x_line[2::3] = np.nan + y_line[0::3] = pre_pair + y_line[1::3] = post_pair + y_line[2::3] = np.nan + self.metrics_pairs_curve.setData(x_line, y_line, connect="finite", skipFiniteCheck=True) + self.metrics_scatter_pre.setData(np.zeros(n_pair, dtype=float), pre_pair) + self.metrics_scatter_post.setData(np.ones(n_pair, dtype=float), post_pair) + else: + self.metrics_pairs_curve.setData([], []) + self.metrics_scatter_pre.setData([], []) + self.metrics_scatter_post.setData([], []) + + finite_all = np.concatenate( + [ + pre_vals_finite if pre_vals_finite.size else np.array([], float), + post_vals_finite if post_vals_finite.size else np.array([], float), + np.array([pre_mean, post_mean, 0.0], float), + ] + ) + finite_all = finite_all[np.isfinite(finite_all)] + if finite_all.size: + ymin = float(np.nanmin(finite_all)) + ymax = float(np.nanmax(finite_all)) + else: + ymin, ymax = 0.0, 1.0 if ymin == ymax: ymax = ymin + 1.0 self.plot_metrics.setYRange(ymin, ymax, padding=0.2) diff --git a/pyBer/styles.py b/pyBer/styles.py index 2398e27..93e6ddb 100644 --- a/pyBer/styles.py +++ b/pyBer/styles.py @@ -27,6 +27,12 @@ background: #262b35; } +/* Keep helper row-container widgets inside group boxes transparent, so + row-spanning form rows do not appear as dark horizontal bands. */ +QGroupBox > QWidget { + background: transparent; +} + QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; @@ -310,7 +316,7 @@ font-weight: 700; } -QDockWidget QWidget { +QDockWidget > QWidget { background: #242a34; } From 60ab36817bd53a06de0850c0d983af5d1897b4b2 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 26 Feb 2026 09:07:19 +0100 Subject: [PATCH 09/28] compiled --- .gitignore | 19 ++++++++++++++++++ .../gui_postprocessing.cpython-38.pyc | Bin 150184 -> 150396 bytes 2 files changed, 19 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3f11db5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +pyBer.spec +build/pyBer/Analysis-00.toc +build/pyBer/base_library.zip +build/pyBer/EXE-00.toc +build/pyBer/PKG-00.toc +build/pyBer/pyBer.pkg +build/pyBer/PYZ-00.pyz +build/pyBer/PYZ-00.toc +build/pyBer/warn-pyBer.txt +build/pyBer/xref-pyBer.html +build/pyBer/localpycs/pyimod01_archive.pyc +build/pyBer/localpycs/pyimod02_importers.pyc +build/pyBer/localpycs/pyimod03_ctypes.pyc +build/pyBer/localpycs/pyimod04_pywin32.pyc +build/pyBer/localpycs/struct.pyc +dist/pyBer.exe +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc index e9fed1b183fb071764bc55cb36026e1c75c26a2f..64ca3aa922c509612a16f0f0430775f9548d3d5c 100644 GIT binary patch delta 7752 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 X1Bn!&_lKIB{U1Zs%XTUCnkWAY9#zUa delta 7684 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 From aaa37c045624104f5896d52429136ed0c6b16741 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 26 Feb 2026 10:22:59 +0100 Subject: [PATCH 10/28] added .github/workflows/build-and-publish.yml --- .github/workflows/build-and-publish.yml | 105 ++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 .github/workflows/build-and-publish.yml diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml new file mode 100644 index 0000000..8bc5565 --- /dev/null +++ b/.github/workflows/build-and-publish.yml @@ -0,0 +1,105 @@ +name: Build and Publish + +on: + push: + branches: [main, master, Pyber_v0.15] + tags: ["v*"] + pull_request: + branches: [main, master, Pyber_v0.15] + workflow_dispatch: + +permissions: + contents: write + +jobs: + build-windows: + runs-on: windows-latest + defaults: + run: + shell: bash -el {0} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Conda environment + uses: conda-incubator/setup-miniconda@v3 + with: + activate-environment: pyBer + auto-activate-base: false + environment-file: environment.yml + channels: conda-forge + channel-priority: strict + use-mamba: true + + - name: Show build environment + run: | + python --version + python -m pip --version + python -c "import os, sys; print('CONDA_PREFIX=', os.environ.get('CONDA_PREFIX')); print('PYTHON=', sys.executable)" + + - name: Build with PyInstaller (last known good method) + run: | + DLLS=( + "hdf5.dll" + "hdf5_hl.dll" + "zlib.dll" + "blosc.dll" + "libblosc2.dll" + "libmmd.dll" + "libifcoremd.dll" + "libifportmd.dll" + "libiomp5md.dll" + "libimalloc.dll" + "svml_dispmd.dll" + "libpng16.dll" + "freetype.dll" + ) + + ADD_ARGS=() + for dll in "${DLLS[@]}"; do + dll_path="$CONDA_PREFIX/Library/bin/$dll" + if [[ -f "$dll_path" ]]; then + echo "Bundling $dll" + ADD_ARGS+=(--add-binary "$dll_path;.") + else + echo "Skipping missing $dll" + fi + done + + python -m PyInstaller \ + --noconfirm \ + --clean \ + --onefile \ + --windowed \ + --name pyBer \ + "${ADD_ARGS[@]}" \ + pyBer/main.py + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: windows-exe + path: dist/pyBer.exe + if-no-files-found: error + + publish: + needs: [build-windows] + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/Pyber_v0.15' || startsWith(github.ref, 'refs/tags/')) + runs-on: ubuntu-latest + steps: + - name: Download Windows Artifact + uses: actions/download-artifact@v4 + with: + name: windows-exe + path: ./publish + + - name: Create Release + uses: ncipollo/release-action@v1 + with: + artifacts: "./publish/*" + token: ${{ secrets.GITHUB_TOKEN }} + generateReleaseNotes: true + allowUpdates: true + tag: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || 'latest' }} + name: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || 'Latest Build' }} + prerelease: ${{ !startsWith(github.ref, 'refs/tags/') }} From d9365e8c6e2145f1c4651320dd7ec5a3af9b0650 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 26 Feb 2026 11:37:24 +0100 Subject: [PATCH 11/28] modifactions to .gitignore, panel_layout.json --- .gitignore | 3 + panel_layout.json | 28 +- .../gui_postprocessing.cpython-311.pyc | Bin 397410 -> 417074 bytes .../gui_postprocessing.cpython-38.pyc | Bin 150396 -> 154391 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 238211 -> 243771 bytes pyBer/gui_postprocessing.py | 377 +++++++++++++++--- pyBer/main.py | 80 +++- 7 files changed, 417 insertions(+), 71 deletions(-) diff --git a/.gitignore b/.gitignore index 3f11db5..5d3af23 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ dist/pyBer.exe pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-311.pyc +pyBer/__pycache__/main.cpython-311.pyc diff --git a/panel_layout.json b/panel_layout.json index 5f25b02..6cfc522 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -3,8 +3,8 @@ "pre": { "pre_data_panel_visible": false, "pre_splitter_sizes": [ - 317, - 317 + 0, + 1413 ], "pre_main_dock_state": "", "tab_groups": [], @@ -13,50 +13,50 @@ "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8hP///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" }, "filtering": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" }, "baseline": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8hP///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" }, "output": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8hP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8hP///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" }, "qc": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAACSwAAB38AAAMXAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACSwAAB38AAAMX" + "geometry": "AdnQywADAAAAAAWhAAACOQAAB38AAAMYAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACOQAAB38AAAMY" }, "export": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADGgAAB38AAAN2AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGgAAB38AAAN2" + "geometry": "AdnQywADAAAAAAWhAAADGwAAB38AAAOTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGwAAB38AAAOT" }, "config": { "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADlgAAB38AAAPa" } }, "artifact": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAImAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIm" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIU" } }, "post": { @@ -72,25 +72,25 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "export": { "visible": true, diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index 2bccbd530d921beb2722ace71b6e0304bd8844c7..47d7480c919ffbac90df474794faab321e93ad07 100644 GIT binary patch delta 67990 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 Hl3wzEe{|E< delta 36915 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

    _fCPi!#igN(14;14DuxF{1^(}Q!6 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 K=R^_j=Klk8U46p< delta 92895 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 M35Smdapi3MFP;C84FCWD diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc index e449c208cec7ad8c6035c8f43df21a5d7012506a..364e0cca1d60029016505e72756ac0f16497a400 100644 GIT binary patch literal 213702 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

    HS+Sp{DFxPQ0S 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

    x)gJ4@xtdy*S)ETXSR6rzW#bH?!&l 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 delta 74541 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

    W_t|_;69Fh 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 L{LnKwGW!1kgZ`dj diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-311.pyc index 1f5c70e6408053e5832ea5e9a5aa317f2ac95569..2263658b1df2d30f5d77b0ed39c4ea9d0158598c 100644 GIT binary patch delta 32601 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 NT>b4h+j{m4|G$?TrUw83 delta 29981 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 diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc index 420990353233d5f531fa5d30423140d3564d4560..c3df11c8476e2a8ba42d8b1b94fdc1481b223bdd 100644 GIT binary patch delta 27786 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%0Dd;slDz`YlLm8U7h+zMd%9j1_2c_ka87LhXAey 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 delta 26245 zcma)l34D~r`G00N+1v-@APETxca|e0oC4tpfp7;%0%#DHP2Nqiu-T2Xn-C(f9(dpd zIO;2&ptXv&9*v4e|JqhtZM~=#kGHj=)hf1XJ=$7Z<^O!2cQ?CPLx0tePiE(Q=9%Z3 zXJ%eMcrM|YClfN(r>CdH(LcXvI^sU`+QEz>@$A8g!9^lYvuTN1(k&J(Sxea)-&CMk zwbWaLmZqf>%+NCT+L{WrMcNQ;DAmip#j53KxqB0uhHH7+uy#vR(ZRpv28*?kt`XX( zsyJ=5Hinvw)y7d*CE9qcOtVwh6SRr+yL4%sHc6YjH%^=E%GfsYVr$bV$|={TP|g&} z8BIB3D5pZJq@2o7&REKss!gMuX_PaL>WrtH>Dmm+nPKJxo60C_rZ$VRW>J=%DovoA zv$WZiGdt95BIV4{=2FhwP|hUEsnX_A&b&~o$&@o+TR=GrTtl{%Q$JHEXQ5V2In`7L zC{}3JhB$l8DNxfcj8vyrSuJaYtVSUTNDRB#9)EM*pPPN&Gv`c^QexT z4-nI3hNH#T(dldn;BT{UI#u!82*imD^tHV2qr`NJZ3SAcRR2z1P5oA<<*3am`KuRD zrrj!&=#P=OZk4aa>2Vo0|4x6v)e$vJ1pN$$S?KU^-IdhPZy^vTWWD-D%Bc7pN~@>p z3Y8`Gq4D+f!$=DF7W=xIspEuJkIxw}5~Zut<7{!s$y98&$qmX#9iAFBscX~n#2Pg$ z%`Tb=(~HwKQoTCaKu``<$J6pfj=sBAzj)ZbKhQ-EP;8PM-`IwysXi8E_r7$aX4_ z8vvqkMCGA=S70q>((dzUF4^en32ajfGiF)V#Od!Y7Dej%j5mZ!bz~09MduQdY$UB) z>vVeqE-5?Iq0BcXqjw|0)lHZiqEq&w;spTP0QxB}{q)nTZp~ULHmXxu6PI8*vJ(I$ zMtW$C0o^{L&uC}VjRS8H$V)MKMO|plOTk@&ACcktgguIwkfn) ztVG^0Rh+j*>{T6k`W&V~y!82q?CmZm(Ng|Ds@Ig(DxDoJhsU|o*A{IiH zxp_SyC!=P0D3AF00St040ME;Z6cd91%V8?5ox|VN(czRkf1(QVmyuLtyi=@#`RkmI zp?-jXVGB67yQ%~78T?4bax;s`N9Z^44HJXQ;@yy#Y&47+2uwnPNh|IRICi+THdo*g zRawwFg=J63>!{69VRjYMG}Y~QxOzIBUd^TbKfp6j#si5SkgWXr2i}`4Vu&^2?V29sqa+ z;5dP>IQ|Y91IZV&2BZUWc-YT zZl|Y945ZD*;2uD8ll9|Dk$A)#qaZNzbB1 z0yXa#JADKg(y;nnp4j@|QbE3YdTd$7YSg#L8T3cyur|(Chd)T}8#3-(=p*m=#@v%A zyBC0!#7v~#ReL6k7k^c!$LBA=;4~z2Kl(9}q|5J;-7Za@g}R_r3<5@StMqj^GmRLUVJ9}18SkOPoQpef!@+DHz=?|gvdYbWN6IwQ^`?~L(WHFKi3 zl~h<=vZEEylanaL($(l}X1y*SM)ue0@`?$ze zj(&2MNLH^`PMpUoJwZ;V8ge4ay+}fGEri zt6S?aXBLGRbxZ3Q>cIhJb4Oq5^wC0Ot0^;v4Skc!$!oK@sc&zBhC zP$cJ`)sfY(lvkWtvQw%c)o`@uzof37wYZ`Ny{!OP3BdY#6{Uitl#!hf9mHbq>&U(EvGzSoi zmUaW0F=KIm1J^)qq|#TFXZE5=;ChoWeuHrb)-%#*3XTp}z=@%MtBl!G)(@r&z}6Bx z#XKXKBA~nkcJf?+{R4ZCn9EWs)zp?bC8D%%&z!47*eqsMU0qa8W%iUPV>k|7jR&Yy zk5^TV#lT@t;7p?b`@X_?+pOXSb;&|~85FOPP~-9WUG|EQZ3Si@1N;SrDa6qpmjjzV z`3Z7A1^5i$ZvgCze6AeTMe2g;oYY5<$6ESfb$fM7?brDIF9Jpi*-nSKcaYyuMpH5} zT0AbNl=q{SsZ&rjR6b50$;~3pbzTd=P4_mt0+&-^=k}{U88-`j&W=p%PWxI>q60<10&uFSW z!MrRlMPFyaVP-TAy;GHQ#R#=$>BiAaq$~eh%UQ~?ygfB~m+hE$ZOgxoX$TL)1@~rHuswL=%=jmR-h( z0h<62aIX4f*_!_W)p>+!O%wMhC}3a`iY%Z5D@T0KgFvNG8vdB69S4pzKSC%Ad@To6 zH{$)Yvz1%bf0hp~jI7&1Dl(^kBT^Nraz(DFR7+PlCoC{$Rfha60E1`?iDj);udY~F z0_J0P+8&RslO#35rG_=&^N^{lTzShhh+-WDV64t&KQA*);x=@BJ3#*=jO3~|mlyku z`Ae={wXBTM<$BC(k;+HVj7fY0r53BsRo$By?Rdl5>+Y0WQO>isIXg)$YhlN81Qi(Z z+g+|s!%8GJhmMS&%euf3!>vnI_3FFI`Z-8mi{80We@m$-Z!M8uUZ*nZX05oMe$trt zpk{=ShmdQ=7L0fr-XGJ8F@&QzZf`_V>iYKA6$uRlBx{+#cJLc(`LtFE18UDP^-%$J zY$Ut9U1WJEeqk@sc26VWb6AZ(E-5E&;g2iOMyo-`8OiAMx^BLxl}}YVBV{5L1x%p#?lm`D3Io z2iZm`dy#Y^qXPi5k@o{&2~C%Hka@@lQ2HQ168hmy??d?c6M#MdOh-P9lt@(H)z1=J z)y#%5B|M#E)4>+*n90aT)Xs*IoR|f^i8|S;e$;SP6*HRE$O!4Ons#{a8t+u)y%=f` zc`*_k*jVpYfyPhkz)AL0bLCRdAQb>Uq+#{AyyoiNg*+w)^KlmKd|WL7(yP(qVM)}3 z>vQbv>tJD;l4%d;H%(g13^3^n)F}y%os?o$*}%Ix7W4Bc?`UXy z^bBh9xDj568F3F)xdu8Zi)M_-WIX+wCREkNIve&l>c+Fb{vV|Ks43l# zoijPe(w)v`SAtBum6aflVexhvNp62Dwk|Gt6$-BgV3P8hLJ3I7#Q=QINW&hgc?a-C z2mv(A5Pe!xo|ue9G$(f^eRPa5ruMzlRQtIj)$^OOP1G|7U3y;OfzyeaK!h;{PC)(= zQ;Avlos{=uAe|pV+FbYyp_TJ@m#be;C{#@b zjRY=&QG}Y&ya{nI5?eyz$($O4W-rxvQqA77%Z$re%~k5}Z7@NW=TnlXW3wr}J(A3Kdke7l3~bp**!Liy$!QsinIB_gg)qZL)K$>kxo9rcI8{Y}c$1G@*iN~Cek*|wsf7QL z?Z|@FYD$DM_EJoWeo&-GRc^D3H`S(XBeHHl#*F}o^2xDk-?om$upCD%#*l!!!?lq% zzP=sN%AAH}Co*C_cnnPDXL7m%~uj;qYZAWMFBg&H>0}Rq?OSqN2K5F}O zJKEg_V8%Qs)s%$oijQd1#5p1f;u-Vqiuh1uvJwk$6YNcZ?C8 z%HA<9rydm%awb#crtPVZc2%mSV{efP)D&Ri+u;lfw z^SWGg$VH}Ft??Gvb_0i>E3fyHx$I~nw%0^~u}*|cP2c7;WyyFWKW8(;qdBU{6bNUJ_4VmWupy9n}xB{s<0!D({k0^$L3}1hr{TyqgBe34-474+6 zyH)ym>npfBi`m@Bq+xP@Bd@ylyvoo&2V!(b=4 zC$l?MNiNuVYNb58h=&$tyVz0H(-e8^Rwrb6BBmA&x$37UQe11C{|Sn{z3U%kGv}_7 z17%h4(2O)J?_!EE)cfdoFljw)gprbeK_7ny2%s7WQDX{vJuSy`sv}UiBnOx>?Kp}O z()K($3_ekp`mQh|z)=%IQ4*r!VB4MQ#lS)_Ql)q8F%MJHWHCnN@i8=qU*#s`MZAm= z7`X(1jW{nj)*>969D(XT1z^vEQHsGJ*-58#SS9}zB$)7tR7&?%CJre)JSGh<&&49( z|DSOP9ZCTQ!{QE@!K9ecGs0b)C|m~=QfLAycgHkh779qJ%{#o}OZDQ8f>l@sBQvrB z8~_a49XnCM5G~Oh0|MuPbDiBzw}*o&AxZb&tSWm}^$(D&ZtiKC5z^^jfm{9%I1qpPI09xcH%}-8tVfPpE?%i092gt}%drvkxAQN2z_#u= zk?Pj-lg&N0kj>yAG3Yt7jn+x}T~Dgx=g*$?51`MY|4&MVV1igZ{Oos6XwQ zYI&0#7&R@pE;khugu_nO9yb)6M8+I-DEQSx-UUy=I28o!*%8M^jzjKv0N$_Psvf&w zJRkI#hMGf&U!&t$r~{)HIrWogA#XN;@L69KCget??*MrHW}wncfNjV#wLMZG-;2-) zqbR|Ld~}kEf7O-?XVA5bwVU!)-FZ2cAxnfflaYdWacFLXt?xpr^sf5+!ips^>&t6} z(lb+e4wb$DeBucmy0wri=k&E+bfX}HfBNELk*bRKE~I0mEqmvPoW4VQ_gh7|vR^(g z3r?AA0WjS*)qVLmGDEjsK9*v_&s;upWQ6k52c>+aD%>||`mHo-RG2u~3=_A|b%g&K zB`!|&VrbK?Qg`f|Xhw|9*spqXUu`O{TIYYhEn!Dw5ol8b zuoz$ofVq>mR~#9i#kas_%WKt=)p$5;}P zVg^h?3Y$VBi^7qubP(E3u6MxU*8E|s$3t9>di%H;z(Bhr8)%G0w2b}?HS+4&Hl9`v z9fTjQ_z`Nq%Z)*AFf46{Rt|y_?@VW^ifhVeF@ewt&VpOa_yc#eFWg5g0*zF8rMmu_ zbB4jUCnd+*NhTue?;Mq|-(!YE(xWEM%H{!J_aH#T6F6gp36u*HCT0xw2?i3zNOQno zhT>*ogZg|wByIeGb#tL32v7D(c!_v*&Y^iw*pvw{*k*P;m7lBn4g{w+Q7YV?$=Tmt zZla=C0&S$ct*Z6lid4orhemG^>cRAU_1eM7tDeKG;$;emkP5)69poc3#0@wQ6f?OT znw;s$IQ(ue-7JAmt*KSlcAXW{ATXy6y4IT% zZmfK2c)?&*>#1s|x>L=`0@EC&1HM27{Z~oq_Y?K|SP{sOzrmDV0AMDI1Z>Wwj!XeL zqilfUu$EyzwT7-?g@dG9(cB3T5s!2+jD8QKl-x{py85Hy?F8S{tvu(Rhg;I z=%#W+VLH(uO175)pAt-V15#Lc*-U^`0kKsr?Q)RwJ*;V#sivamI|EVvam-w{Q1gqF zrti#U@rsel9QB2MqK*wso|qEK|9MMr|!d zyNG~BTy;#9R0@mCU>IFVQIbK8zkE2Z*0NC(o=*AYyB2P7@yVX?b zZk2V*RW;DKZqUl)jPKwXJ6pIqyH$>J}h{AoF%SzhI;6l zVd{e0QkCVl-1(tNF&2YOiV2+QCRAJ4n}3_(rQKM?f>oVUd71kJ*B5s?@r}xv@tHI462i^&Sq! z|BBXvP818(up^Z--RR58djiwf$C#vKxwoy9jwOYc8oZ+R9C^se%*lLdi!~dlWOi{E z7Cy9P=Itt5k%)R4$T3DL{5#UfbpOczx;k*jpG@V6QA~lg%7Fq-(R(&o5zdN?eMU9K zNQG`g42D#Mlv9fONr32!d0&Bi0Gx^VPpXU`ERDVJ$Bria4+$T@R4)(~R(upsqJso? z3x$l@eVSx-4?81aL0BtGs54VjLTDvKNP_<*cu?|bAJ6bS{FIis(*NSoR#Tl1)K@>4 zEvi-dUB#9^3jMqxbd}t2W-0$&Q^az0=UqOrLS_GOxmc+-|8PyvqFL#B{tRs!TLD8x%d$fTrQ2+kX#xW+t4`${AgqJ0O)XP-mIyT*Ub8o3y_d;HAyUWw* z2+$oRf9QS>pV>>kx{PayURxK|YNlH9*w`s-7A!!T%XxbpBLgW8f4gso1KrZa?Z?W7 z{(|r)8Rfd%G)KMm*sqciIyS@t3MAk0_?o%wqzHK}hWeQLC*{m_dBDgp979BO_k5a& z8QrZ^Bc3c#E1$?_S+i%D{^+CBySc02uO?OL6- zCR7b5d9};YP^&yb-eSO~?YS6rJE^4e@Oiu9F*(ZJ$GMVnCFR;exmR$mpK|?_n;Oc! zl5&G_jsRr`D0^5a`zo&7MY&y+OY|g6k?z*gL+Q@L-GLpHmvFe}NZiFDlq*BI1p{*Z zQSAc#X~9(QJR*YBx%oqKH)h%&l@3IuyF%%mL_kLCaPN^gpm+HE(BEC=-)+0;CDGMa zn|1aePm3cxaG=gSM!`vqdIZ}BXA^mHRU z8h44_$R^(k`53IHMCu70?N^&VakyRcZ$HO3VCqxeFy()iU62r6)k8ola^% z*}FM=i5CIbQi^rc2{diK+HN{@=#cv3i^I(O*h1c>zJ1Y7569@ZE0OS!Z>q|dZr!>E zjnn9$gj$vQB;I2Lk(JTNcX~=|8%oQT_1fhHlqoOdks3Pa^#+~5wUvgf=taoRiDXBi ze6cEjIe+9{RLEQI?RLpPsh_Xnmv;I*PU#Nplvhw;=zdjUS^o+VwKou|hKPQg#Jcke z%08){dU;Whm*X~S-sW#V_{px*qZgi9OEaU;DoRd$d;0WgDJkO=7^F90UTLLkw$w5A z8I^2p6B{VO6@F-WHcew3kj5 zd?kDQr8JU}M0e?M5k|_(=%;zT>2gZ-+N%Al8cI9mKK1x3Q}bI<*S3mpoXJa2b0@&6 zKI`#mV)<2QkW%k!?(zp{83Vm3%etEBsZnWJz%H*wVbW@6Pbm*`4gGAgHquS2{U}IX z(-r9K3Y6jnn{=t*ZwqH!i5e-3U3?{hd?oolkxl*?;6nnv=}UU>_Nla{VZ)SVGvrtl z{7Jq1+i9r@wGDGhC!Zqg6sLM$ts2cT36UhaB5exWs(-vX!p26Z zS{1%FB6m6UKvzjfEF2w9P5Lp!vugEgBTCq`{ho^D9{}D4_#?n6fSc77uWc1s>MyUY zoSs1$^lk-x&`mu@PgHs*TSFt0Y#5hyN*7*q$p_W8-&N*uI1VO|-}0<7pA~(q9{OGJ zSey?^7*Qh|r-$Yn7>6^owBh@iU;b`#YC3ANcNPn70gjNjO38mWywpQq8?$!A#a zsFo9}>Cp0_6WJnD{qn?-+<2-Z696m#v=O4)BI^9t#|iU2)Z?#Lu04*=#G#+8vHQ zFNFW~wdniwtsjU2ykN}YkZ}(Ejrv#p>Gvl)SfQrNr!dAp0e%L+Ck4Mi>KTA%0lolu z0SNH~{zE^FbTjxc;H*4!i!RZ{%1(<`=&IuFVsW>sd;6p2C#ktTQ~na2^0>c3ipPBp zspkP+0{At+zX84k7>I%V4tcyxr;&;xhPv^OBg9YCu|KXz2eC<6{S-CuuI%QL$hh47 zZ&1R6zkpPOdj6f_#V;a>X+{R2a2vad+*2Hd!JB9a9e!tb8;N<;*q{e!^g+hVE?O+&4B<^ET=i0U+i|-Zf9Y z7;V2rZp@7TMR~_<#Cj=xzj`lA)MD>zSnF4jbI{daI)M3knuNz+#5`hU&ke>fT>p#Nh_)$z_#^CwZiFlLGzmlPCS;R66+n!~0e1 z&OxR15L8h?^XYG6*yt6oba#dqIMM-o7MWWE;cKl{A5D-Oc(rl#_CH3Rwq=z zUuUdd+h5&8W!Qg1Woduq@HCmt&xHA^{_1Am`Two&y8g-&nfk)im1pX^fvXF(Zd11U z^wSaaU_1S@5kXdrF z_#MCr0zp$zu|9YonI8cB8Q?<9CkXEEqL2nB)p) z36PRS$AVPIwk)9}n*cUAPh-eesJpN-$fc@AqWM_ZAN8u3i3E0*J=A1mpZ9MCqV6Y@ ztRsnf1A~)w2tVd!jrS(HjuX!rTH`yJ}LFQ)Z9{rCF?IXd2dZcjy|!MyLi zOuhfl`XGl^S3s&(0x;cIA+;Ky4qy!c$ZOherWjMTgbIu#`fdSVHIa;LXQwb`WyK6LP9erh9@lrR*1YW=s9)zmL@`}A+8h(xAduSGro z-Hb7( z&QvmN+hX)fH5APMpu+Pjx z<1XkStA49ZEFcU*-nLtmIEMyA`6$nhrRDTLoU zQ6HHgvh@oopO3EX_A_5J{|*z*AYf#LcIT1XxPL<#Pow~2X5uIBe1{^H4ZtTk0i>=4 zxETOjP|23oVhvJ~*N7cE-T*`vkKJ4>9ve`$cyc60f*O~f0kBB3MZ$u~87O7_JsYY0 z7%8$O+whYGcOF*PUznSNiAC`{cxG=6ASMldcISEe6N5(Sx~Gwc}&8O2!>bF3Lw zIS)radO@qV{r#RE|&=K+oR1WuJv4fjWs zqHV1UwOe&PMJ%=v1>&S#e>X+gr?C_8caqMK_NC7nkppblwv*{2CzF^{#+f034 zs+h|=SXzH^vlS|Mu(4$j#SD>B_?|3t4*w!IkD;J@BFeYA21trH`NE16nVF|Uj7s?vS zGHlIVfdIv{h%M;>n7$=LEVOec{Ue!T$pX3-y4VmKUa;8xlBPQ2jEE6jqt)@Tv%OB|I z9fIc|_>f1bd2xxJ7;HyJ94xIR{2RZ?XbeZ^{c}p!)X6^myCNF@Zo{=^$m0kXJyYne5c13khLgJrY&H%%Q1cC3_0f5 zPfF{ zdq#;x%RN*oI|zi2V)5t%FQq%_3tSXP_L~{IZ)7mf|UbqX5f$fsvRy#S?$!! z?2rRBQTkoKb&MEe`9qTa%oy?|eyv-_icuox*f{zYo(OWUK%1CgG`jc|hG7tqet4`@ zJ{0BGQ~J~hZooWs>Lp5_dILqd05~s`d0cM9dt9vnxrcfrh3_MU-(epjpTPi3Pcll| zOsYyK1%uAuYJ47&U@W4%24FwH0RsH4WRbIFdzigNH!1_ zlj@9ltf|wh%S3^&=$p#K#_&Z+Ho0J#!3?7@1l;OqlXQO%RL6V6n;mV_NbAiu=6;5*73F7J2$J z6U4lAOflBL6Hs|H0X|+ir=CA$q|lfNdOfA+*?J2->*og^ct7Ud-ssyv2Q>V;`0Q2m zTb|I@O%&Nn??&wuIv1>W`RO8q#$U7w2M(F!uW^4Ym(su}jN)5J!2yx?P%25kZ=$$o zGgCW3y3r!NhY<@0Xd*VB*Vnuh)np}AU?ldCQo!e!&PAVF0HS07Lp(-#BlHI+i7FeL zSBL(^B(ZDQwNyr%>)(KH`9kRr(e`EilF6ccc4R>IKj3MEWo;`7f_djMW}L^V{doPa zlZ8K>-KTgN>d{j!3Px~`vHSz{o}gys`km!sx@DDB4XMgj^axDp)Qda^@z}$`^ z?_PkjkQXz{Cn;~H?ynH*#B2TAllLk}uP)G2DoL?p1fw8)ycI#A(fneac`S1R-N*F& z2=%-`_f?7+sgbqJ(I2Q3m(2xJux4PcJ=^5kekE}iw;eq^_j zL*C~A{oHQ4+`mU2>y9#XWhxNpTse_|k&Lh6?u_#F@22TcR<{w4+JMd;S^)a4Vl3^l=n{H_B>2aX8< zThM@Guy^YRs>F!skIU+hSBVmFqyAQvc;MWSUGQSMSVDuoI@RIpHebVaBG*SCOoZnK zS%-Y{(@yS&awIPMfAr|YN_7E zKq8S)z`Y&07Z~gYz(uH#(LUP00pMK#03isOWk6}{A?TBK-j;T}jz+!)nbHrK!2cGbc&gJ=_0X>-`o=m!HSqOmb7z z!*yq_7;gDXvVPZMF~fE-mSpd-lZ!>NU@uNyiJZ#-qT~!TxPtONPuA0G#fovb0wy8C zrhsBdV#mmh@Y_+up9EepllN}ui~N?D8Ush54>6nK(CPm&S^u_H>}CbSco3iBE*Hz{ zQHvZ#w1-Dej(F%(NbJMiK~?^ltUs_+tZW8~${hUW#!m9_2#Uh8+ShXOzb9aXSr8n z>%BQF&{oY&p9p7vKj+w&%f#&>$ftst{_XD0TK?_}U$h}SP$C#Dub%Noh_5|D0|(bYHe zGfu^nNsfYkVx3sI-blmODapZiLE}+afd3>>+JS_iU`GdQIb*mC7MB9&?jEuT6x^T?Jjvcat{MQm&xxaWzREJ*b3yX z1Q?C>7O)*VZV}s5N(D_x(&5Kf*ELy=dKDPLLT4P7fQLRHMrJHh8}+)4V#aVDX&N%71MrwL zk(w1xPwcbtjna7ik&VK2PH3U2jLtxqs%Ih|DF`@aChnLo-E!c8Sx-R14Z2rPZUj4| zhjstiVp)*qcos&U4Z!nUfYd^Osnm!*h|4;$8X4?~{tWcxrM?;CF;cf6bt}Ma0E4YE zFB{g@p4Pu?jo(|hr5I)z4-UYTS%DN|%J}homLrcRmB~xcDSa(2KOQ}vf9#rb#6RdX zk80GJXLJ!M8@L>Xjb7Q%y-oA~Mqt%iTMb*UzXhKFf&(#-0n3`j&BnM6iL zD4#z)-VY3_M`o**EeRPc^W`qj#dCx+U(weG7`R< zd5Q=3O6DQ25P+GOSA)sTq}_mm{j{zj`Y@Aiqu*v&sfBu2qCf8xo6?b_m_4rc+bi{o zW-)CjU)xwg!fhnbb-m7=@;7={Get1$`mN2PGFXXjSWhiSDjC?+QHnnE>7dUc`S1>n z-muaC!J!`I%_vG;w~D^A6#ArC3$ppD^Z}&a0N4(pFNFr&4Dd1X-b88+3h>;FA8*MC iaTLepqZ$d!qwIz$N4l>?jI)%c=z5D-X&p6m&i@A~Bur!g diff --git a/pyBer/__pycache__/main.cpython-311.pyc b/pyBer/__pycache__/main.cpython-311.pyc index cf97ab8818b285709d3ccc087c34a808e3110ba2..4a40298bd41b991abf298af44cc111369ff93833 100644 GIT binary patch delta 85976 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 t6Csf7WO@s0KdIMEN=_BzG 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 AbpQYW diff --git a/pyBer/__pycache__/styles.cpython-311.pyc b/pyBer/__pycache__/styles.cpython-311.pyc index c42680c893d7c589d8dcc221e9dffe0672020e56..634986b5339d49e802a98f0fa6587af24eacba35 100644 GIT binary patch delta 3041 zcma);-ESMm5y0>GsfeOTS#nI-vPD^mY+ABJ-Zv9jj{Ft7m1WmXU+fg>-OX;Tn2wYq zZ6k(+<3k=4AO(W(!G0(T6-87OF4`0Y`ZuIN3Q(>J3j_?LDEiPhq5}Gmr_SusvTU?K zPrSL`%+Bo1?#xpB*7*0O@K@<{w}RKcUv4ZO8&Q%fkqD#}9zlpD&T0xCor zDnucMGA=j)N#rhg4Q02mq=f8&G+KHggE9+!DEA3_zwjS`{f$tC*WmyT4q&OZA2d-(wN@ zK8x@e%zYBO5sfG;%9IVqZPNvv|jA9=#H9<+@V1>i%U=QM#v2iucL;ySRh z7;!XH=Q@sjmC#F?YshI#Zn#dl@yE=~xTkAoNx0fYv+Nepb)w;B564~2&>f-uE_?C6 zxfv!2aj(|ntjC^pw)r|)szSZIm_sL|UiJTbY8mFl>OY?M7fK!xVo?g@` zo;m16DQckW1|`Hw%;B1}7zP2?I|*rAH;vBBI(KnMFX^^{;o+$7fW|0ZH+0vq5kLc1 ztX^0s4*+KI68TuVZ&1ANg3g4+#ug+Cme^|`9WEZcBsX3Yq7P3(DzW9{ui295HtAjr-q zFdbf|+~k2lkf(@1oErp};j%@mh_*+IJS_y`gdpICVtNS7=S9&xETmSWy}@2Fxf4Y2 zn76v<k-$g z`q|KmieFW+`Ms<8p+fQfc<)T0cy&3T;@4W|dijeGXNt`KlZFavD_UV6;v;hVUX^wu z-xxVK5LVnf9=J0PjxKn27b~z(S^UYZ8tv-jbY;nRE7chU>GKPWs%9~=uKYRr^_j0f z`sVzfy1(hJD?9Xp_X?3#^fvprl?>QD7F1aw-ilUhK`T*R3Tg~m*@d}F?_PXw;p~;U zE7uk-&t7fC7i%HAQ>BRIitDpNETH{s#YGaW7!|mc@B&JyN;{CpE1>_AIN2-d1_#jm zbIR~0LS1>*lli>s)61V-uAl!$?#N$lZe&<6GJBwfI_mJC&`^1wE8NckLFt!xru=0oz+C z(Q~wjozGFcTBv0e)RzksuJ36~jObi1ci8%Fe>@+j=gU5;>I(iKxTgfkTH=M*b*0v| zS1Uy4TgnV=WlOEJ)cZj=Kpek+Yq5p}3o=5(sx2;K6_)O^pp~AzdUfFk*RRX!wUQmR z5D9YR9HSkmQi9J*lXRDtseyt~H2#_@auxwAlImT1(98@!y0)3hZ>922Q)5q3;n-&C z_*Uxp)70dX)Z}KWxRol_&uu4D&CGZ+NuOt#p=Q_6v(&!&yx95qLNXY^2?P37BoY>- z5AvwC5=-6(%&*B;E5cv&%XeMVnCIOJn+e9ykM_KJ6O(R-QB_sj2|u2S)syYHlr|9A zj-}T=Zby;66%2PGdO9+G^R_=x0T;=JS$;-ivBi4_uWNW+`NW0H>%9~T_93#6Qo1LMRK zl1~y(N}eJvN-hy=l67K3vPo=7wuv3dW#YFazfC+X`4sU?D3#NsyrW8GRweCBM>{LD za~+&IZkH{*0Bh74n{lI3n bu$3*;)9pk|?SGVLEBIK~#p8bp(SiQ~MO*mN delta 276 zcmez7`M|_%IWI340}y;HnvwZQl7Zndhyw$RP{wDFlIaX73{eazjKK_=Oq){}k8@An zE6FkW4X6C(Al`F~Y{upmsc8n29l4}flPpuxEG9SdX->}LuVFJZF*i;%14>A;8JSra zq$W+?D5x{pTA*dJ0UOWc|3dPUUkQXxE)Zs){F+O5@&;~>$pV6+lP3tuOg7~fh4b$T zy2I?79KkSb(Ac+>uL7 diff --git a/pyBer/__pycache__/styles.cpython-38.pyc b/pyBer/__pycache__/styles.cpython-38.pyc index 06c184cc7d09b50c7b5f29c88ea1cd797ea69fe7..0381106f481c549880309131e64a6ba7a76f162c 100644 GIT binary patch delta 1976 zcmcIl%a0UA81L$ym#~jnT#!X}c`S(I1G}rLUxus_NQ49ybn&ukCe{5_$-1-b(lbCL zyXga5O-#mv2V!<(V#3J~F2;YrqxU{|F){I~H!t{oHA@6N+movP)%X5>Rn_y0{OxS{ z;rRF-2cLc4ez$V!nB)9Pi)SB>i+6GKzs3oiWd|6zI6SD~%%BbpXxeoPUVuHY7sg;5 zCSVfUXfp--;6<2*{cr$Yf`c#vhu~#6jAIt&a9o^)BXAUs!Eu;}6L1n$D@}5rYK7hfmrwjnt2% zF~hm31CQSx`;j#ghH)Nv|gb{&2Cx(-a z*!4n%FbXAk0$lqDfP>Ox44@+u+$~Y3KX5oD=K!5~OXlmdBWiApF%IiEsoY-t!SQPg7Qr^?n5 zLZo6qiO#gNedt*GwrK#s%|cZa#WJCYNII94H85O>xI-NUJcv0l63AHCwu6lOoXi7| zCh@6%wC5v{;gVbWeFT)33!Vtdf@>wH6CNV4l89%5+U8N>+nvF+FQ|SFLP#PTfs~Y< z8xczK5`l;%(J!P>RBbszM4O02E{R$Z3)lsTHWUbL{m_C;1|wi(9Fms|B=Su_g+W9) zWQJT@6@+0#AXE{LsroRBBsNW(MyDA;Il2Id>{%w==q4c;T?hhUVp6+(_9mfZbj1kZ zg)*d48h79FVUIsbMwf?xy)X#y@Zgpr(7EwPN4BI>OuL2$H8e@V@Ke)qs}`tYwR^MQ zuNs9O+$wJ5qL` zvhCWYyXoz?TkPiCCc|$>{ruu{ktvIZV~HY|lsL$?ER$Zgy*>2i@Mvr`HG6%jq+{^<4G(3kXKW*RWM@RexSJ z3w>J`ech>7UVl(jjsAKu&``CzmoC0{;ad0Hl}lGX=w3d1wW_ZS^je=BHhL=8om$~y zvZ`L%G*yj=TW(|pB`un$8ci)SYX7^UZ?M=tsT|gF=hy@*rV(RNdj{9_n(nTxgD!}V z=SZT2G%Wom5D@+4Mhn5v z+SnknAO6$YG;6UMD~_PkVy9Wm;=7oniE`SGi^GVj#(MUd&Ii`;8R~2X8@qJ|Q{L+7 d1)`*X1E*T)l+KFFTx=Gn|Lym4BW$-?-rrx_*6IKN delta 241 zcmaFnc+bQll$V!_0SG=8&B**D$-wX!#6bp(K#l_t7jpoK6ox2<6vki%O{R?}j&o1; z;8dTyK~QA#DV|-7Y{upmsc8n2^~I!ElPpuxEGFOM(U{E4FFVgC0 z?iZ9~GcvOE>RRQ zM?nve-J3TEe&7)G(`3BG?idgd9~d0GlA(wR=*%Lf$+2>p0=fAqr8%i~%s`RPK+FID D+wneZ diff --git a/pyBer/analysis_core.py b/pyBer/analysis_core.py index 392bda9..19329be 100644 --- a/pyBer/analysis_core.py +++ b/pyBer/analysis_core.py @@ -4,6 +4,7 @@ import os import re import time +import json from dataclasses import dataclass from typing import Any, Dict, List, Optional, Tuple @@ -253,6 +254,39 @@ class ProcessedTrial: fs_used: float = np.nan +@dataclass +class ExportSelection: + raw: bool = True + isobestic: bool = True + output: bool = True + dio: bool = True + baseline_sig: bool = True + baseline_ref: bool = True + + def to_dict(self) -> Dict[str, bool]: + return { + "raw": bool(self.raw), + "isobestic": bool(self.isobestic), + "output": bool(self.output), + "dio": bool(self.dio), + "baseline_sig": bool(self.baseline_sig), + "baseline_ref": bool(self.baseline_ref), + } + + @classmethod + def from_dict(cls, data: Optional[Dict[str, object]]) -> "ExportSelection": + if not isinstance(data, dict): + return cls() + return cls( + raw=bool(data.get("raw", True)), + isobestic=bool(data.get("isobestic", True)), + output=bool(data.get("output", True)), + dio=bool(data.get("dio", True)), + baseline_sig=bool(data.get("baseline_sig", True)), + baseline_ref=bool(data.get("baseline_ref", True)), + ) + + # ============================================================================= # Export helpers # ============================================================================= @@ -295,9 +329,11 @@ def export_processed_csv( path: str, processed: ProcessedTrial, metadata: Optional[Dict[str, str]] = None, + selection: Optional[ExportSelection] = None, ) -> None: import csv + selection = selection if isinstance(selection, ExportSelection) else ExportSelection() t = np.asarray(processed.time, float) out = np.asarray(processed.output if processed.output is not None else np.full_like(t, np.nan), float) raw = np.asarray(processed.raw_signal if processed.raw_signal is not None else np.full_like(t, np.nan), float) @@ -308,7 +344,7 @@ def export_processed_csv( iso = np.full_like(t, np.nan) dio = None - if processed.dio is not None and processed.dio.size == t.size: + if selection.dio and processed.dio is not None and processed.dio.size == t.size: dio = np.asarray(processed.dio, float) out_col = output_label_type(processed.output_label) @@ -318,32 +354,34 @@ def export_processed_csv( if metadata: for k, v in metadata.items(): w.writerow([f"# {k}: {v}"]) - if dio is None: - w.writerow(["time", "raw", "isobestic", out_col]) - for i in range(t.size): - w.writerow([ - float(t[i]), - float(raw[i]) if np.isfinite(raw[i]) else np.nan, - float(iso[i]) if np.isfinite(iso[i]) else np.nan, - float(out[i]) if np.isfinite(out[i]) else np.nan, - ]) - else: - w.writerow(["time", "raw", "isobestic", out_col, "dio"]) - for i in range(t.size): - w.writerow([ - float(t[i]), - float(raw[i]) if np.isfinite(raw[i]) else np.nan, - float(iso[i]) if np.isfinite(iso[i]) else np.nan, - float(out[i]) if np.isfinite(out[i]) else np.nan, - float(dio[i]) if np.isfinite(dio[i]) else np.nan, - ]) - - -def export_processed_h5(path: str, processed: ProcessedTrial, metadata: Optional[Dict[str, str]] = None) -> None: + columns = [("time", t)] + if selection.raw: + columns.append(("raw", raw)) + if selection.isobestic: + columns.append(("isobestic", iso)) + if selection.output: + columns.append((out_col, out)) + if dio is not None: + columns.append(("dio", dio)) + w.writerow([name for name, _ in columns]) + for i in range(t.size): + row = [] + for _, values in columns: + v = float(values[i]) + row.append(v if np.isfinite(v) else np.nan) + w.writerow(row) + + +def export_processed_h5( + path: str, + processed: ProcessedTrial, + metadata: Optional[Dict[str, str]] = None, + selection: Optional[ExportSelection] = None, +) -> None: + selection = selection if isinstance(selection, ExportSelection) else ExportSelection() with h5py.File(path, "w") as f: g = f.create_group("data") g.create_dataset("time", data=np.asarray(processed.time, float), compression="gzip") - g.create_dataset("output", data=np.asarray(processed.output, float), compression="gzip") out_type = output_label_type(processed.output_label) g.attrs["output_label"] = str(processed.output_label) g.attrs["output_context"] = str(processed.output_context) @@ -351,28 +389,34 @@ def export_processed_h5(path: str, processed: ProcessedTrial, metadata: Optional g.attrs["fs_actual"] = float(processed.fs_actual) g.attrs["fs_used"] = float(processed.fs_used) g.attrs["fs_target"] = float(processed.fs_target) + g.attrs["export_selection"] = json.dumps(selection.to_dict()) + + if selection.output: + g.create_dataset("output", data=np.asarray(processed.output, float), compression="gzip") raw_sig = np.asarray(processed.raw_signal if processed.raw_signal is not None else np.full_like(processed.time, np.nan), float) raw_ref = np.asarray(processed.raw_reference if processed.raw_reference is not None else np.full_like(processed.time, np.nan), float) - g.create_dataset("raw_465", data=raw_sig, compression="gzip") - g.create_dataset("raw_405", data=raw_ref, compression="gzip") + if selection.raw: + g.create_dataset("raw_465", data=raw_sig, compression="gzip") + if selection.isobestic: + g.create_dataset("raw_405", data=raw_ref, compression="gzip") try: - if "raw" not in g: + if selection.raw and "raw" not in g: g["raw"] = g["raw_465"] - if "isobestic" not in g: + if selection.isobestic and "isobestic" not in g: g["isobestic"] = g["raw_405"] - if out_type and out_type != "output" and out_type not in g: + if selection.output and out_type and out_type != "output" and out_type not in g: g[out_type] = g["output"] except Exception: pass - if processed.dio is not None: + if selection.dio and processed.dio is not None: g.create_dataset("dio", data=np.asarray(processed.dio, float), compression="gzip") g.attrs["dio_name"] = str(processed.dio_name) - if processed.baseline_sig is not None: + if selection.baseline_sig and processed.baseline_sig is not None: g.create_dataset("baseline_465", data=np.asarray(processed.baseline_sig, float), compression="gzip") - if processed.baseline_ref is not None: + if selection.baseline_ref and processed.baseline_ref is not None: g.create_dataset("baseline_405", data=np.asarray(processed.baseline_ref, float), compression="gzip") if metadata: diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 9ae6126..56600e9 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -13,6 +13,7 @@ import numpy as np from PySide6 import QtCore, QtWidgets, QtGui import pyqtgraph as pg +from pyqtgraph.dockarea import DockArea, Dock import h5py from analysis_core import ProcessedTrial @@ -20,10 +21,23 @@ _DOCK_STATE_VERSION = 3 _POST_DOCK_STATE_KEY = "post_main_dock_state_v4" +_POST_DOCKAREA_STATE_KEY = "post_dockarea_state_v1" +_POST_DOCKAREA_VISIBLE_KEY = "post_dockarea_visible_v1" +_POST_DOCKAREA_ACTIVE_KEY = "post_dockarea_active_v1" _POST_DOCK_PREFIX = "post." _PRE_DOCK_PREFIX = "pre." _BEHAVIOR_PARSE_BINARY = "binary_columns" _BEHAVIOR_PARSE_TIMESTAMPS = "timestamp_columns" +_FIXED_POST_RIGHT_SECTIONS = frozenset({"setup", "spatial", "psth", "export"}) +_FIXED_POST_VISIBLE_SECTIONS = frozenset({"setup", "spatial", "psth", "export"}) +_FIXED_POST_RIGHT_TAB_ORDER = ("setup", "psth", "spatial", "export") +_FIXED_POST_RIGHT_TAB_TITLES: Dict[str, str] = { + "setup": "Setup", + "psth": "PSTH", + "spatial": "Spatial", + "export": "Export", +} +_USE_PG_DOCKAREA_POST_LAYOUT = True _LOG = logging.getLogger(__name__) @@ -483,6 +497,11 @@ def __init__(self, parent=None) -> None: self._section_popups: Dict[str, QtWidgets.QDockWidget] = {} self._section_scroll_hosts: Dict[str, QtWidgets.QScrollArea] = {} self._section_buttons: Dict[str, QtWidgets.QPushButton] = {} + self._use_pg_dockarea_layout: bool = bool(_USE_PG_DOCKAREA_POST_LAYOUT) + self._dockarea: Optional[DockArea] = None + self._dockarea_docks: Dict[str, Dock] = {} + self._dockarea_splitter: Optional[QtWidgets.QSplitter] = None + self._fixed_right_tab_widget: Optional[QtWidgets.QTabWidget] = None self._section_popup_initialized: set[str] = set() self._is_restoring_settings: bool = True self._settings_save_timer = QtCore.QTimer(self) @@ -501,6 +520,9 @@ def __init__(self, parent=None) -> None: self._app_closing: bool = False self._post_snapshot_applied: bool = False self._force_fixed_default_layout: bool = False + self._app_theme_mode: str = "dark" + self._applying_fixed_default_layout: bool = False + self._pending_fixed_layout_retry: bool = False self._pending_project_recompute_from_current: bool = False self._project_dirty: bool = False self._autosave_restoring: bool = False @@ -522,9 +544,16 @@ def _build_ui(self) -> None: root.setSpacing(8) grp_src = QtWidgets.QGroupBox("Signal Source") + grp_src.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Maximum) vsrc = QtWidgets.QVBoxLayout(grp_src) self.tab_sources = QtWidgets.QTabWidget() + self.tab_sources.setObjectName("postSourceTabs") + self.tab_sources.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Maximum) + self.tab_sources.setStyleSheet( + "QTabWidget::pane { border: 0px; background: transparent; padding: 0px; }" + "QTabBar::tab { margin-right: 0px; }" + ) tab_single = QtWidgets.QWidget() tab_group = QtWidgets.QWidget() self.tab_sources.addTab(tab_single, "Single") @@ -544,7 +573,6 @@ def _build_ui(self) -> None: single_layout.addWidget(self.lbl_current) single_layout.addWidget(self.btn_use_current) single_layout.addWidget(self.btn_load_processed_single) - single_layout.addStretch(1) group_layout = QtWidgets.QVBoxLayout(tab_group) self.btn_load_processed = QtWidgets.QPushButton("Load processed files (CSV/H5)") @@ -554,7 +582,6 @@ def _build_ui(self) -> None: self.lbl_group.setProperty("class", "hint") group_layout.addWidget(self.btn_load_processed) group_layout.addWidget(self.lbl_group) - group_layout.addStretch(1) self.btn_refresh_dio = QtWidgets.QPushButton("Refresh A/D channel list") self.btn_refresh_dio.setProperty("class", "compactSmall") @@ -581,6 +608,9 @@ def _build_ui(self) -> None: self.combo_dio_align = QtWidgets.QComboBox() self.combo_dio_align.addItems(["Align to onset", "Align to offset"]) _compact_combo(self.combo_dio_align, min_chars=6) + self.lbl_dio_channel = QtWidgets.QLabel("A/D channel") + self.lbl_dio_polarity = QtWidgets.QLabel("A/D polarity") + self.lbl_dio_align = QtWidgets.QLabel("A/D align") self.btn_load_beh = QtWidgets.QPushButton("Load behavior CSV/XLSX...") self.btn_load_beh.setProperty("class", "compactSmall") @@ -647,9 +677,9 @@ def _build_ui(self) -> None: lists_layout.addLayout(beh_col) fal.addRow("Align source", self.combo_align) - fal.addRow("A/D channel", self.combo_dio) - fal.addRow("A/D polarity", self.combo_dio_polarity) - fal.addRow("A/D align", self.combo_dio_align) + fal.addRow(self.lbl_dio_channel, self.combo_dio) + fal.addRow(self.lbl_dio_polarity, self.combo_dio_polarity) + fal.addRow(self.lbl_dio_align, self.combo_dio_align) fal.addRow(self.lbl_behavior_file_type, self.combo_behavior_file_type) fal.addRow(self.btn_load_beh) fal.addRow("Loaded files", self.lbl_beh) @@ -888,9 +918,9 @@ def _build_ui(self) -> None: self.btn_export_img = QtWidgets.QPushButton("Export images") self.btn_export_img.setProperty("class", "compactSmall") self.btn_export_img.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - self.btn_style = QtWidgets.QPushButton("Styling") + self.btn_style = QtWidgets.QPushButton("Plot style") self.btn_style.setProperty("class", "compactSmall") - self.btn_style.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_style.setSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) self.btn_save_cfg = QtWidgets.QPushButton("Save config") self.btn_save_cfg.setProperty("class", "compactSmall") self.btn_save_cfg.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) @@ -1036,7 +1066,7 @@ def _build_ui(self) -> None: self.lbl_behavior_summary = QtWidgets.QLabel("Group metrics: -") self.lbl_behavior_summary.setProperty("class", "hint") - grp_spatial = QtWidgets.QGroupBox("Spatial Heatmap") + grp_spatial = QtWidgets.QGroupBox("Spatial") f_spatial = QtWidgets.QFormLayout(grp_spatial) f_spatial.setRowWrapPolicy(QtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows) f_spatial.setLabelAlignment(QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop) @@ -1241,13 +1271,14 @@ def _build_ui(self) -> None: action_row.setContentsMargins(0, 0, 0, 0) action_row.setSpacing(6) - self.btn_action_load = QtWidgets.QPushButton("Load") + self.btn_action_load = QtWidgets.QPushButton("File") self.btn_action_load.setProperty("class", "compactPrimarySmall") self.menu_action_load = QtWidgets.QMenu(self.btn_action_load) self.act_load_current = self.menu_action_load.addAction("Use current preprocessed selection") self.act_load_single = self.menu_action_load.addAction("Load processed file (single)") self.act_load_group = self.menu_action_load.addAction("Load processed files (group)") self.menu_action_load.addSeparator() + self.act_save_project = self.menu_action_load.addAction("Save project (.h5)") self.act_load_project = self.menu_action_load.addAction("Load project (.h5)") self.menu_action_load.addSeparator() self.act_load_behavior = self.menu_action_load.addAction("Load behavior CSV/XLSX") @@ -1257,6 +1288,8 @@ def _build_ui(self) -> None: self.menu_recent_projects = self.menu_action_recent.addMenu("Projects") self.menu_action_recent.aboutToShow.connect(self._refresh_recent_postprocessing_menus) self.act_refresh_dio = self.menu_action_load.addAction("Refresh A/D channel list") + self.menu_action_load.addSeparator() + self.act_open_plot_style = self.menu_action_load.addAction("Plot style...") self.btn_action_load.setMenu(self.menu_action_load) self.btn_action_compute = QtWidgets.QPushButton("Compute PSTH") @@ -1268,17 +1301,17 @@ def _build_ui(self) -> None: self.btn_panel_setup = QtWidgets.QPushButton("Setup") self.btn_panel_psth = QtWidgets.QPushButton("PSTH") - self.btn_panel_signal = QtWidgets.QPushButton("Signal") - self.btn_panel_behavior = QtWidgets.QPushButton("Behavior") self.btn_panel_spatial = QtWidgets.QPushButton("Spatial") self.btn_panel_export = QtWidgets.QPushButton("Export") + self.btn_panel_signal = QtWidgets.QPushButton("Signal") + self.btn_panel_behavior = QtWidgets.QPushButton("Behavior") self._section_buttons = { "setup": self.btn_panel_setup, "psth": self.btn_panel_psth, - "signal": self.btn_panel_signal, - "behavior": self.btn_panel_behavior, "spatial": self.btn_panel_spatial, "export": self.btn_panel_export, + "signal": self.btn_panel_signal, + "behavior": self.btn_panel_behavior, } for b in self._section_buttons.values(): b.setCheckable(True) @@ -1288,16 +1321,15 @@ def _build_ui(self) -> None: action_row.addWidget(self.btn_action_compute) action_row.addWidget(self.btn_action_export) action_row.addWidget(self.btn_action_hide) + action_row.addWidget(self.btn_style) action_row.addSpacing(8) action_row.addWidget(QtWidgets.QLabel("Panels:")) action_row.addWidget(self.btn_panel_setup) action_row.addWidget(self.btn_panel_psth) - action_row.addWidget(self.btn_panel_signal) - action_row.addWidget(self.btn_panel_behavior) action_row.addWidget(self.btn_panel_spatial) action_row.addWidget(self.btn_panel_export) - action_row.addStretch(1) - action_row.addWidget(self.btn_style) + action_row.addWidget(self.btn_panel_signal) + action_row.addWidget(self.btn_panel_behavior) action_row.addStretch(1) root.addLayout(action_row) @@ -1460,6 +1492,24 @@ def _build_ui(self) -> None: symbolBrush=pg.mkBrush(214, 122, 90, 220), symbolPen=pg.mkPen((214, 122, 90), width=0.8), ) + self.metrics_err_pre = pg.ErrorBarItem( + x=np.array([0.0], float), + y=np.array([0.0], float), + top=np.array([0.0], float), + bottom=np.array([0.0], float), + beam=0.22, + pen=pg.mkPen((230, 236, 246), width=2.0), + ) + self.metrics_err_post = pg.ErrorBarItem( + x=np.array([1.0], float), + y=np.array([0.0], float), + top=np.array([0.0], float), + bottom=np.array([0.0], float), + beam=0.22, + pen=pg.mkPen((230, 236, 246), width=2.0), + ) + self.plot_metrics.addItem(self.metrics_err_pre) + self.plot_metrics.addItem(self.metrics_err_post) self.plot_metrics.setXRange(-0.5, 1.5, padding=0) self.plot_metrics.getAxis("bottom").setTicks([[(0, "pre"), (1, "post")]]) @@ -1467,6 +1517,38 @@ def _build_ui(self) -> None: self.global_bar_freq = pg.BarGraphItem(x=[1], height=[0], width=0.6, brush=(220, 160, 120)) self.plot_global.addItem(self.global_bar_amp) self.plot_global.addItem(self.global_bar_freq) + self.global_scatter_amp = self.plot_global.plot( + pen=None, + symbol="o", + symbolSize=6, + symbolBrush=pg.mkBrush(120, 180, 220, 220), + symbolPen=pg.mkPen((120, 180, 220), width=0.9), + ) + self.global_scatter_freq = self.plot_global.plot( + pen=None, + symbol="o", + symbolSize=6, + symbolBrush=pg.mkBrush(220, 160, 120, 220), + symbolPen=pg.mkPen((220, 160, 120), width=0.9), + ) + self.global_err_amp = pg.ErrorBarItem( + x=np.array([0.0], float), + y=np.array([0.0], float), + top=np.array([0.0], float), + bottom=np.array([0.0], float), + beam=0.22, + pen=pg.mkPen((230, 236, 246), width=2.0), + ) + self.global_err_freq = pg.ErrorBarItem( + x=np.array([1.0], float), + y=np.array([0.0], float), + top=np.array([0.0], float), + bottom=np.array([0.0], float), + beam=0.22, + pen=pg.mkPen((230, 236, 246), width=2.0), + ) + self.plot_global.addItem(self.global_err_amp) + self.plot_global.addItem(self.global_err_freq) self.plot_global.setXRange(-0.5, 1.5, padding=0) self.plot_global.getAxis("bottom").setTicks([[(0, "amp"), (1, "freq")]]) @@ -1508,7 +1590,7 @@ def _build_ui(self) -> None: behavior_grid.setColumnStretch(2, 1) self.spatial_plot_dialog = QtWidgets.QDialog(self) - self.spatial_plot_dialog.setWindowTitle("Spatial Heatmap") + self.spatial_plot_dialog.setWindowTitle("Spatial") self.spatial_plot_dialog.setModal(False) self.spatial_plot_dialog.resize(980, 920) spatial_dialog_layout = QtWidgets.QVBoxLayout(self.spatial_plot_dialog) @@ -1559,18 +1641,35 @@ def _build_ui(self) -> None: rv.addWidget(self.row_avg, stretch=1) rv.addWidget(self.row_signal, stretch=1) rv.addWidget(self.row_behavior, stretch=1) - root.addWidget(right, stretch=1) + if self._use_pg_dockarea_layout: + workspace = QtWidgets.QSplitter(QtCore.Qt.Orientation.Horizontal) + workspace.setChildrenCollapsible(False) + workspace.addWidget(right) + self._dockarea = DockArea() + workspace.addWidget(self._dockarea) + workspace.setStretchFactor(0, 5) + workspace.setStretchFactor(1, 2) + self._dockarea_splitter = workspace + root.addWidget(workspace, stretch=1) + else: + root.addWidget(right, stretch=1) root.setStretch(0, 0) root.setStretch(1, 1) - self._setup_section_popups() + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + else: + self._setup_section_popups() + self._apply_widget_theme_mode() # Wiring self.act_load_current.triggered.connect(self.requestCurrentProcessed.emit) self.act_load_single.triggered.connect(self._load_processed_files_single) self.act_load_group.triggered.connect(self._load_processed_files) + self.act_save_project.triggered.connect(self._save_project_file) self.act_load_project.triggered.connect(self._load_project_file) self.act_load_behavior.triggered.connect(self._load_behavior_files) self.act_refresh_dio.triggered.connect(self.requestDioList.emit) + self.act_open_plot_style.triggered.connect(self._open_style_dialog) self.btn_action_compute.clicked.connect(self._compute_psth) self.btn_action_export.clicked.connect(self._export_results) self.btn_action_hide.clicked.connect(self._hide_all_section_popups) @@ -1704,7 +1803,314 @@ def _dock_main_window(self) -> Optional[QtWidgets.QMainWindow]: host = self.window() return host if isinstance(host, QtWidgets.QMainWindow) else None + def _normalize_app_theme_mode(self, value: object) -> str: + mode = str(value or "").strip().lower() + if mode in {"light", "white", "l", "w"}: + return "light" + return "dark" + + def _scroll_background_color(self) -> str: + if self._app_theme_mode == "light": + return "#f6f8fc" + return "#242a34" + + def _apply_scroll_theme(self, scroll: QtWidgets.QScrollArea) -> None: + bg = self._scroll_background_color() + scroll.setStyleSheet(f"QScrollArea {{ background: {bg}; border: none; }}") + # Keep viewport painted with dock background so dynamic row visibility + # does not produce unstyled gaps. + scroll.viewport().setAutoFillBackground(True) + scroll.viewport().setStyleSheet(f"background: {bg};") + + def _apply_widget_theme_mode(self) -> None: + if hasattr(self, "tab_sources"): + self.tab_sources.setStyleSheet( + "QTabWidget::pane { border: 0px; background: transparent; padding: 0px; }" + "QTabBar::tab { margin-right: 0px; }" + ) + for scroll in self._section_scroll_hosts.values(): + try: + self._apply_scroll_theme(scroll) + except Exception: + continue + + def set_app_theme_mode(self, theme_mode: object) -> None: + self._app_theme_mode = self._normalize_app_theme_mode(theme_mode) + self._apply_widget_theme_mode() + self._style["plot_bg"] = (248, 250, 255) if self._app_theme_mode == "light" else (36, 42, 52) + try: + self._apply_plot_style() + except Exception: + pass + + def _section_widget_map(self) -> Dict[str, Tuple[str, QtWidgets.QWidget]]: + return { + "setup": ("Setup", self.section_setup), + "psth": ("PSTH", self.section_psth), + "spatial": ("Spatial", self.section_spatial), + "export": ("Export", self.section_export), + "signal": ("Signal Event Analyzer", self.section_signal), + "behavior": ("Behavior Analysis", self.section_behavior), + } + + def _setup_dockarea_sections(self) -> None: + if not self._use_pg_dockarea_layout: + return + if self._dockarea is None: + return + if self._dockarea_docks: + return + for key, (title, widget) in self._section_widget_map().items(): + scroll = QtWidgets.QScrollArea() + scroll.setWidgetResizable(True) + scroll.setFrameShape(QtWidgets.QFrame.Shape.NoFrame) + scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self._apply_scroll_theme(scroll) + widget.setMinimumSize(0, 0) + widget.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) + scroll.setWidget(widget) + self._section_scroll_hosts[key] = scroll + dock = Dock( + title, + area=self._dockarea, + closable=False if key in _FIXED_POST_RIGHT_SECTIONS else True, + ) + dock.setObjectName(f"post.da.{key}.dock") + dock.addWidget(scroll) + self._lock_pg_dock_interactions(dock) + try: + dock.sigClosed.connect(lambda *_, section_key=key: self._on_dockarea_dock_closed(section_key)) + except Exception: + pass + self._dockarea_docks[key] = dock + if self._force_fixed_default_layout: + self._apply_fixed_dockarea_layout() + else: + self._restore_dockarea_layout_state() + self._dock_layout_restored = True + host = self._dock_main_window() + if host is not None: + self._dock_host = host + try: + if hasattr(host, "on_post_docks_ready"): + host.on_post_docks_ready() + elif hasattr(host, "onPostDocksReady"): + host.onPostDocksReady() + except Exception: + pass + + def _dockarea_dock(self, key: str) -> Optional[Dock]: + return self._dockarea_docks.get(key) + + def _dockarea_default_visibility_map(self) -> Dict[str, bool]: + visible_map = {key: False for key in self._dockarea_docks.keys()} + for key in _FIXED_POST_RIGHT_TAB_ORDER: + if key in visible_map: + visible_map[key] = True + return visible_map + + def _lock_pg_dock_interactions(self, dock: Dock) -> None: + label = getattr(dock, "label", None) + if label is None or bool(getattr(label, "_pyber_fixed_interaction_lock", False)): + return + + def _ignore_drag(event: QtGui.QMouseEvent) -> None: + event.ignore() + + def _ignore_double_click(event: QtGui.QMouseEvent) -> None: + event.accept() + + try: + label.mouseMoveEvent = _ignore_drag + label.mouseDoubleClickEvent = _ignore_double_click + label.setCursor(QtCore.Qt.CursorShape.ArrowCursor) + label._pyber_fixed_interaction_lock = True + except Exception: + pass + + def _dockarea_active_key(self) -> Optional[str]: + active = self._last_opened_section if self._last_opened_section in self._dockarea_docks else None + if active is not None: + return active + for key in _FIXED_POST_RIGHT_TAB_ORDER: + dock = self._dockarea_dock(key) + if dock is not None and dock.isVisible(): + return key + for key, dock in self._dockarea_docks.items(): + if dock.isVisible(): + return key + return None + + def _set_dockarea_visible(self, key: str, visible: bool) -> None: + dock = self._dockarea_dock(key) + if dock is None: + return + if visible: + dock.show() + else: + dock.hide() + + def _arrange_dockarea_default(self) -> None: + if self._dockarea is None: + return + setup = self._dockarea_dock("setup") + psth = self._dockarea_dock("psth") + spatial = self._dockarea_dock("spatial") + signal = self._dockarea_dock("signal") + behavior = self._dockarea_dock("behavior") + export = self._dockarea_dock("export") + if setup is None: + return + self._dockarea.addDock(setup, "right") + # Keep section panels in one tab stack to avoid layout churn/floating glitches. + if psth is not None: + self._dockarea.addDock(psth, "above", setup) + if spatial is not None: + self._dockarea.addDock(spatial, "above", setup) + if export is not None: + self._dockarea.addDock(export, "above", setup) + if signal is not None: + self._dockarea.addDock(signal, "above", setup) + if behavior is not None: + self._dockarea.addDock(behavior, "above", setup) + + def _dockarea_state_payload(self) -> Dict[str, object]: + if self._dockarea is None: + return {} + try: + return dict(self._dockarea.saveState() or {}) + except Exception: + return {} + + def _dockarea_apply_visibility_map(self, visible_map: Dict[str, bool]) -> None: + for key, dock in self._dockarea_docks.items(): + vis = bool(visible_map.get(key, False)) + if vis: + dock.show() + else: + dock.hide() + self._sync_section_button_states_from_docks() + + def _save_dockarea_layout_state(self) -> None: + if self._dockarea is None: + return + state = self._dockarea_state_payload() + visible = {key: bool(dock.isVisible()) for key, dock in self._dockarea_docks.items()} + active = self._dockarea_active_key() or "" + try: + self._settings.setValue(_POST_DOCKAREA_STATE_KEY, json.dumps(state)) + self._settings.setValue(_POST_DOCKAREA_VISIBLE_KEY, json.dumps(visible)) + self._settings.setValue(_POST_DOCKAREA_ACTIVE_KEY, active) + self._settings.sync() + except Exception: + pass + + def _restore_dockarea_layout_state(self) -> None: + if self._dockarea is None: + return + self._arrange_dockarea_default() + raw_state = self._settings.value(_POST_DOCKAREA_STATE_KEY, "") + try: + if isinstance(raw_state, str) and raw_state.strip(): + parsed = json.loads(raw_state) + if isinstance(parsed, dict): + self._dockarea.restoreState(parsed, missing="ignore", extra="bottom") + except Exception: + pass + visible_map: Dict[str, bool] = {} + raw_vis = self._settings.value(_POST_DOCKAREA_VISIBLE_KEY, "") + try: + if isinstance(raw_vis, str) and raw_vis.strip(): + parsed_vis = json.loads(raw_vis) + if isinstance(parsed_vis, dict): + visible_map = {str(k): bool(v) for k, v in parsed_vis.items()} + except Exception: + visible_map = {} + if not visible_map: + visible_map = self._dockarea_default_visibility_map() + self._dockarea_apply_visibility_map(visible_map) + active = str(self._settings.value(_POST_DOCKAREA_ACTIVE_KEY, "setup") or "setup") + dock = self._dockarea_dock(active) + if dock is not None and dock.isVisible(): + try: + dock.raiseDock() + except Exception: + pass + self._last_opened_section = active + return + self._last_opened_section = None + for key in _FIXED_POST_RIGHT_TAB_ORDER: + fallback = self._dockarea_dock(key) + if fallback is not None and fallback.isVisible(): + try: + fallback.raiseDock() + except Exception: + pass + self._last_opened_section = key + break + + def _apply_fixed_dockarea_layout(self) -> None: + if not self._use_pg_dockarea_layout: + return + if self._dockarea is None or not self._dockarea_docks: + return + self._apply_fixed_dock_features() + visible_map = {key: bool(dock.isVisible()) for key, dock in self._dockarea_docks.items()} + if not any(visible_map.values()): + visible_map = self._dockarea_default_visibility_map() + self._suspend_panel_layout_persistence = True + try: + self._arrange_dockarea_default() + for key in self._dockarea_docks.keys(): + should_show = bool(visible_map.get(key, False)) + self._set_dockarea_visible(key, should_show) + active = self._last_opened_section if bool(visible_map.get(self._last_opened_section or "", False)) else None + if active is None: + for key in _FIXED_POST_RIGHT_TAB_ORDER: + if bool(visible_map.get(key, False)): + active = key + break + if active is None: + for key in self._dockarea_docks.keys(): + if bool(visible_map.get(key, False)): + active = key + break + dock = self._dockarea_dock(active) if active else None + if dock is not None and dock.isVisible(): + try: + dock.raiseDock() + except Exception: + pass + self._last_opened_section = active + self._sync_section_button_states_from_docks() + self._dock_layout_restored = True + finally: + self._suspend_panel_layout_persistence = False + self._save_dockarea_layout_state() + + def _activate_dockarea_tab(self, key: str) -> None: + if key not in self._dockarea_docks: + return + self._set_dockarea_visible(key, True) + dock = self._dockarea_dock(key) + if dock is not None: + try: + dock.raiseDock() + except Exception: + pass + self._last_opened_section = key + + def _on_dockarea_dock_closed(self, key: str) -> None: + self._set_section_button_checked(key, False) + if self._last_opened_section == key: + self._last_opened_section = None + self._save_panel_layout_state() + def _setup_section_popups(self) -> None: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + return if self._section_popups: return host = self._dock_main_window() @@ -1718,7 +2124,7 @@ def _setup_section_popups(self) -> None: "psth": ("PSTH", self.section_psth), "signal": ("Signal Event Analyzer", self.section_signal), "behavior": ("Behavior Analysis", self.section_behavior), - "spatial": ("Spatial Heatmap", self.section_spatial), + "spatial": ("Spatial", self.section_spatial), "export": ("Export", self.section_export), } for key, (title, widget) in section_map.items(): @@ -1727,11 +2133,7 @@ def _setup_section_popups(self) -> None: scroll.setFrameShape(QtWidgets.QFrame.Shape.NoFrame) scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) - scroll.setStyleSheet("QScrollArea { background: #242a34; border: none; }") - # Keep viewport painted with dock background to avoid dark paint gaps - # when section rows are dynamically shown/hidden. - scroll.viewport().setAutoFillBackground(True) - scroll.viewport().setStyleSheet("background: #242a34;") + self._apply_scroll_theme(scroll) # Keep section widgets shrinkable so dock stacks do not clip content. widget.setMinimumSize(0, 0) widget.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) @@ -1783,15 +2185,33 @@ def _set_section_button_checked(self, key: str, checked: bool) -> None: btn.blockSignals(False) def _apply_fixed_dock_features(self) -> None: + if self._use_pg_dockarea_layout: + for key, dock in self._dockarea_docks.items(): + if dock is None or not hasattr(dock, "label"): + continue + closable = not (self._force_fixed_default_layout and key in _FIXED_POST_RIGHT_SECTIONS) + try: + dock.label.setClosable(bool(closable)) + except Exception: + pass + return if not self._section_popups: return - for dock in self._section_popups.values(): + for key, dock in self._section_popups.items(): if dock is None: continue if self._force_fixed_default_layout: - features = ( - QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable - | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable + if key in _FIXED_POST_RIGHT_SECTIONS: + features = QtWidgets.QDockWidget.DockWidgetFeature.NoDockWidgetFeatures + else: + features = ( + QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable + | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable + ) + allowed = ( + QtCore.Qt.DockWidgetArea.BottomDockWidgetArea + if key == "export" + else QtCore.Qt.DockWidgetArea.RightDockWidgetArea ) else: features = ( @@ -1799,17 +2219,44 @@ def _apply_fixed_dock_features(self) -> None: | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetFloatable ) + allowed = QtCore.Qt.DockWidgetArea.AllDockWidgetAreas try: + dock.setAllowedAreas(allowed) dock.setFeatures(features) except Exception: pass def _toggle_section_popup(self, key: str, checked: bool) -> None: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + dock = self._dockarea_dock(key) + if dock is None: + return + if checked: + self._activate_dockarea_tab(key) + else: + self._set_dockarea_visible(key, False) + self._sync_section_button_states_from_docks() + self._save_panel_layout_state() + return if not self._section_popups: self._setup_section_popups() dock = self._section_popups.get(key) if dock is None: return + host = self._dock_host or self._dock_main_window() + tabs = getattr(host, "tabs", None) if host is not None else None + post_active = not isinstance(tabs, QtWidgets.QTabWidget) or tabs.currentWidget() is self + fixed_required = ( + self._force_fixed_default_layout + and key in _FIXED_POST_RIGHT_SECTIONS + and post_active + and not self._post_docks_hidden_for_tab_switch + ) + if fixed_required: + self._activate_fixed_right_tab(key) + self._save_panel_layout_state() + return if checked: # Keep user-selected docking mode. Only reposition if currently floating off-screen. if dock.isFloating(): @@ -1825,6 +2272,31 @@ def _toggle_section_popup(self, key: str, checked: bool) -> None: self._save_panel_layout_state() def _on_section_popup_visibility(self, key: str, visible: bool) -> None: + if self._use_pg_dockarea_layout: + self._set_section_button_checked(key, visible) + if visible: + self._last_opened_section = key + elif self._last_opened_section == key: + self._last_opened_section = None + self._save_panel_layout_state() + return + host = self._dock_host or self._dock_main_window() + tabs = getattr(host, "tabs", None) if host is not None else None + post_active = not isinstance(tabs, QtWidgets.QTabWidget) or tabs.currentWidget() is self + fixed_required = ( + self._force_fixed_default_layout + and key in _FIXED_POST_RIGHT_SECTIONS + and post_active + and not self._post_docks_hidden_for_tab_switch + ) + if fixed_required and not visible: + # Spatial/PSTH are represented as tabs inside Setup dock in fixed mode. + if key == "setup": + self._activate_fixed_right_tab("setup") + else: + self._set_section_button_checked(key, True) + self._save_panel_layout_state() + return self._set_section_button_checked(key, visible) if visible: self._last_opened_section = key @@ -1833,10 +2305,47 @@ def _on_section_popup_visibility(self, key: str, visible: bool) -> None: self._save_panel_layout_state() def _hide_all_section_popups(self) -> None: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + for key in self._dockarea_docks.keys(): + self._set_dockarea_visible(key, False) + self._set_section_button_checked(key, False) + self._last_opened_section = None + self._save_panel_layout_state() + return + host = self._dock_host or self._dock_main_window() + if self._force_fixed_default_layout: + if host is not None: + self._apply_fixed_right_tabs_as_single_dock(host, active_key="setup") + for key in ("signal", "behavior", "export"): + dock = self._section_popups.get(key) + if dock is None: + continue + dock.hide() + self._set_section_button_checked(key, False) + self._last_opened_section = "setup" + self._save_panel_layout_state() + return for key, dock in self._section_popups.items(): - dock.hide() - self._set_section_button_checked(key, False) - self._last_opened_section = None + keep_visible = self._force_fixed_default_layout and key in _FIXED_POST_RIGHT_SECTIONS + if keep_visible: + dock.blockSignals(True) + try: + if host is not None: + host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) + dock.setFloating(False) + dock.show() + dock.raise_() + finally: + dock.blockSignals(False) + self._set_section_button_checked(key, True) + else: + dock.hide() + self._set_section_button_checked(key, False) + if self._force_fixed_default_layout: + self._last_opened_section = "setup" + else: + self._last_opened_section = None self._save_panel_layout_state() def _default_popup_size(self, key: str) -> Tuple[int, int]: @@ -1931,14 +2440,30 @@ def _to_qbytearray(self, value: object) -> Optional[QtCore.QByteArray]: return None def _sync_section_button_states_from_docks(self) -> None: + if self._use_pg_dockarea_layout: + self._last_opened_section = None + for key, dock in self._dockarea_docks.items(): + visible = bool(dock.isVisible()) + self._set_section_button_checked(key, visible) + if visible and self._last_opened_section is None: + self._last_opened_section = key + return self._last_opened_section = None for key, dock in self._section_popups.items(): visible = bool(dock.isVisible()) + if self._force_fixed_default_layout and key in _FIXED_POST_RIGHT_SECTIONS: + # In fixed mode these sections are always present as right-side tabs. + visible = True self._set_section_button_checked(key, visible) if visible: self._last_opened_section = key def _has_saved_layout_state(self) -> bool: + if self._use_pg_dockarea_layout: + try: + return bool(self._settings.contains(_POST_DOCKAREA_STATE_KEY) or self._settings.contains(_POST_DOCKAREA_VISIBLE_KEY)) + except Exception: + return False try: if self._settings.contains(_POST_DOCK_STATE_KEY): return True @@ -1953,6 +2478,14 @@ def _has_saved_layout_state(self) -> bool: def _save_panel_layout_state(self) -> None: if not self._panel_layout_persistence_ready: return + if self._use_pg_dockarea_layout: + if self._is_restoring_panel_layout or self._suspend_panel_layout_persistence: + return + self._save_dockarea_layout_state() + return + if self._force_fixed_default_layout: + self._persist_fixed_post_default_state() + return if self._is_restoring_panel_layout: return if self._suspend_panel_layout_persistence: @@ -1990,6 +2523,11 @@ def _save_panel_layout_state(self) -> None: def _persist_hidden_layout_state_from_cache(self) -> None: """Persist cached post layout captured when tab-switch hiding post docks.""" + if self._use_pg_dockarea_layout: + return + if self._force_fixed_default_layout: + self._persist_fixed_post_default_state() + return if not self._post_docks_hidden_for_tab_switch: return right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) @@ -2014,6 +2552,9 @@ def _persist_hidden_layout_state_from_cache(self) -> None: def flush_post_section_state_to_settings(self) -> None: """Flush latest post section visibility/layout into QSettings immediately.""" + if self._use_pg_dockarea_layout: + self._save_panel_layout_state() + return if self._post_docks_hidden_for_tab_switch: self._persist_hidden_layout_state_from_cache() return @@ -2024,6 +2565,12 @@ def persist_layout_state_snapshot(self) -> None: Persist post dock state safely. Uses cached tab-switch state while hidden, otherwise captures current host topology. """ + if self._use_pg_dockarea_layout: + self._save_panel_layout_state() + return + if self._force_fixed_default_layout: + self._persist_fixed_post_default_state() + return if self._post_docks_hidden_for_tab_switch: self._persist_hidden_layout_state_from_cache() return @@ -2044,6 +2591,13 @@ def persist_layout_state_snapshot(self) -> None: self.flush_post_section_state_to_settings() def _restore_panel_layout_state(self) -> None: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + if self._force_fixed_default_layout: + self._apply_fixed_dockarea_layout() + else: + self._restore_dockarea_layout_state() + return if self._force_fixed_default_layout: self.apply_fixed_default_layout() return @@ -2391,7 +2945,14 @@ def _on_behavior_files_dropped(self, paths: List[str]) -> None: def _update_align_ui(self) -> None: use_dio = _is_doric_channel_align(self.combo_align.currentText()) - for w in (self.combo_dio, self.combo_dio_polarity, self.combo_dio_align): + for w in ( + self.lbl_dio_channel, + self.combo_dio, + self.lbl_dio_polarity, + self.combo_dio_polarity, + self.lbl_dio_align, + self.combo_dio_align, + ): w.setEnabled(use_dio) w.setVisible(use_dio) @@ -3599,9 +4160,21 @@ def _clear_spatial(msg: str, x_label: str = "", y_label: str = "") -> None: _clear_spatial("Could not compute heatmap for selected trajectories.", x_col, y_col) return - occupancy_map = np.nanmean(np.stack(occ_maps, axis=0), axis=0) - activity_map = np.nanmean(np.stack(act_maps, axis=0), axis=0) if act_maps else None - velocity_map = np.nanmean(np.stack(vel_maps, axis=0), axis=0) if vel_maps else None + def _nanmean_stack_no_warning(maps: List[np.ndarray]) -> Optional[np.ndarray]: + if not maps: + return None + stack = np.asarray(np.stack(maps, axis=0), float) + valid = np.isfinite(stack) + counts = np.sum(valid, axis=0) + sums = np.nansum(stack, axis=0) + return np.divide(sums, counts, out=np.full_like(sums, np.nan, dtype=float), where=counts > 0) + + occupancy_map = _nanmean_stack_no_warning(occ_maps) + if occupancy_map is None: + _clear_spatial("Could not compute heatmap for selected trajectories.", x_col, y_col) + return + activity_map = _nanmean_stack_no_warning(act_maps) + velocity_map = _nanmean_stack_no_warning(vel_maps) sigma = float(self.spin_spatial_smooth.value()) if sigma > 0: from scipy.ndimage import gaussian_filter @@ -4972,6 +5545,40 @@ def _render_avg(self, mat: np.ndarray, tvec: np.ndarray) -> None: self.curve_sem_lo.setData(tvec, avg - sem, connect="finite", skipFiniteCheck=True) self.plot_avg.setXRange(float(tvec[0]), float(tvec[-1]), padding=0) + @staticmethod + def _finite_mean_sem(values: np.ndarray) -> Tuple[float, float, int]: + vals = np.asarray(values, float) + vals = vals[np.isfinite(vals)] + n = int(vals.size) + if n == 0: + return 0.0, 0.0, 0 + mean = float(np.nanmean(vals)) + if n < 2: + return mean, 0.0, n + sem = float(np.nanstd(vals, ddof=1) / np.sqrt(float(n))) + if not np.isfinite(sem): + sem = 0.0 + return mean, sem, n + + @staticmethod + def _jittered_x(center: float, n: int, half_width: float = 0.16) -> np.ndarray: + if n <= 0: + return np.array([], float) + if n == 1: + return np.array([float(center)], float) + return float(center) + np.linspace(-abs(float(half_width)), abs(float(half_width)), n) + + @staticmethod + def _set_error_bar(item: pg.ErrorBarItem, x: float, y: float, err: float) -> None: + yy = float(y) if np.isfinite(y) else 0.0 + ee = float(err) if np.isfinite(err) and err > 0 else 0.0 + item.setData( + x=np.array([float(x)], float), + y=np.array([yy], float), + top=np.array([ee], float), + bottom=np.array([ee], float), + ) + def _render_metrics(self, mat: np.ndarray, tvec: np.ndarray) -> None: if mat.size == 0 or not self.cb_metrics.isChecked(): self.metrics_bar_pre.setOpts(height=[0]) @@ -4979,6 +5586,8 @@ def _render_metrics(self, mat: np.ndarray, tvec: np.ndarray) -> None: self.metrics_pairs_curve.setData([], []) self.metrics_scatter_pre.setData([], []) self.metrics_scatter_post.setData([], []) + self._set_error_bar(self.metrics_err_pre, 0.0, 0.0, 0.0) + self._set_error_bar(self.metrics_err_post, 1.0, 0.0, 0.0) self._last_metrics = None return metric = self.combo_metric.currentText() @@ -5001,28 +5610,32 @@ def _window_vals(a: float, b: float) -> np.ndarray: self.metrics_pairs_curve.setData([], []) self.metrics_scatter_pre.setData([], []) self.metrics_scatter_post.setData([], []) + self._set_error_bar(self.metrics_err_pre, 0.0, 0.0, 0.0) + self._set_error_bar(self.metrics_err_post, 1.0, 0.0, 0.0) self._last_metrics = None return def _metric_vals(win: np.ndarray, duration: float) -> np.ndarray: if win.size == 0: return np.array([], float) + w = np.asarray(win, float) + valid = np.isfinite(w) + counts = np.sum(valid, axis=1) + sums = np.nansum(w, axis=1) + vals = np.divide(sums, counts, out=np.full(w.shape[0], np.nan, dtype=float), where=counts > 0) if metric.startswith("AUC"): - with np.errstate(all="ignore"): - vals = np.nanmean(win, axis=1) * float(abs(duration)) - else: - with np.errstate(all="ignore"): - vals = np.nanmean(win, axis=1) + vals = vals * float(abs(duration)) return np.asarray(vals, float) pre_vals_all = _metric_vals(pre, pre1 - pre0) post_vals_all = _metric_vals(post, post1 - post0) pre_vals_finite = pre_vals_all[np.isfinite(pre_vals_all)] post_vals_finite = post_vals_all[np.isfinite(post_vals_all)] - pre_mean = float(np.nanmean(pre_vals_finite)) if pre_vals_finite.size else 0.0 - post_mean = float(np.nanmean(post_vals_finite)) if post_vals_finite.size else 0.0 + pre_mean, pre_sem, pre_n = self._finite_mean_sem(pre_vals_finite) + post_mean, post_sem, post_n = self._finite_mean_sem(post_vals_finite) self.metrics_bar_pre.setOpts(height=[pre_mean]) self.metrics_bar_post.setOpts(height=[post_mean]) + group_mode = self.tab_sources.currentIndex() == 1 pair_mask = np.isfinite(pre_vals_all) & np.isfinite(post_vals_all) pre_pair = pre_vals_all[pair_mask] @@ -5041,18 +5654,42 @@ def _metric_vals(win: np.ndarray, duration: float) -> np.ndarray: y_line[1::3] = post_pair y_line[2::3] = np.nan self.metrics_pairs_curve.setData(x_line, y_line, connect="finite", skipFiniteCheck=True) - self.metrics_scatter_pre.setData(np.zeros(n_pair, dtype=float), pre_pair) - self.metrics_scatter_post.setData(np.ones(n_pair, dtype=float), post_pair) + if group_mode: + x_pre = self._jittered_x(0.0, n_pair, half_width=0.16) + x_post = self._jittered_x(1.0, n_pair, half_width=0.16) + else: + x_pre = np.zeros(n_pair, dtype=float) + x_post = np.ones(n_pair, dtype=float) + self.metrics_scatter_pre.setData(x_pre, pre_pair) + self.metrics_scatter_post.setData(x_post, post_pair) else: self.metrics_pairs_curve.setData([], []) self.metrics_scatter_pre.setData([], []) self.metrics_scatter_post.setData([], []) + if group_mode: + self._set_error_bar(self.metrics_err_pre, 0.0, pre_mean, pre_sem) + self._set_error_bar(self.metrics_err_post, 1.0, post_mean, post_sem) + else: + self._set_error_bar(self.metrics_err_pre, 0.0, 0.0, 0.0) + self._set_error_bar(self.metrics_err_post, 1.0, 0.0, 0.0) + finite_all = np.concatenate( [ pre_vals_finite if pre_vals_finite.size else np.array([], float), post_vals_finite if post_vals_finite.size else np.array([], float), - np.array([pre_mean, post_mean, 0.0], float), + np.array( + [ + pre_mean, + post_mean, + pre_mean - pre_sem, + pre_mean + pre_sem, + post_mean - post_sem, + post_mean + post_sem, + 0.0, + ], + float, + ), ] ) finite_all = finite_all[np.isfinite(finite_all)] @@ -5064,7 +5701,15 @@ def _metric_vals(win: np.ndarray, duration: float) -> np.ndarray: if ymin == ymax: ymax = ymin + 1.0 self.plot_metrics.setYRange(ymin, ymax, padding=0.2) - self._last_metrics = {"pre": pre_mean, "post": post_mean, "metric": metric} + self._last_metrics = { + "pre": pre_mean, + "post": post_mean, + "pre_sem": pre_sem, + "post_sem": post_sem, + "pre_n": float(pre_n), + "post_n": float(post_n), + "metric": metric, + } def _compute_global_metrics_for_trace( self, @@ -5123,6 +5768,10 @@ def _render_global_metrics(self) -> None: self.lbl_global_metrics.setText("Global metrics: -") self.global_bar_amp.setOpts(height=[0]) self.global_bar_freq.setOpts(height=[0]) + self.global_scatter_amp.setData([], []) + self.global_scatter_freq.setData([], []) + self._set_error_bar(self.global_err_amp, 0.0, 0.0, 0.0) + self._set_error_bar(self.global_err_freq, 1.0, 0.0, 0.0) return if not (self.cb_global_amp.isChecked() or self.cb_global_freq.isChecked()): @@ -5130,6 +5779,10 @@ def _render_global_metrics(self) -> None: self.lbl_global_metrics.setText("Global metrics: -") self.global_bar_amp.setOpts(height=[0]) self.global_bar_freq.setOpts(height=[0]) + self.global_scatter_amp.setData([], []) + self.global_scatter_freq.setData([], []) + self._set_error_bar(self.global_err_amp, 0.0, 0.0, 0.0) + self._set_error_bar(self.global_err_freq, 1.0, 0.0, 0.0) return start_s = float(self.spin_global_start.value()) @@ -5153,22 +5806,35 @@ def _render_global_metrics(self) -> None: durations.append(res["duration"]) thrs.append(res["thr"]) - if not amps and not freqs: + amp_vals = np.asarray(amps, float) + freq_vals = np.asarray(freqs, float) + amp_vals = amp_vals[np.isfinite(amp_vals)] + freq_vals = freq_vals[np.isfinite(freq_vals)] + if amp_vals.size == 0 and freq_vals.size == 0: self._last_global_metrics = None self.lbl_global_metrics.setText("Global metrics: -") self.global_bar_amp.setOpts(height=[0]) self.global_bar_freq.setOpts(height=[0]) + self.global_scatter_amp.setData([], []) + self.global_scatter_freq.setData([], []) + self._set_error_bar(self.global_err_amp, 0.0, 0.0, 0.0) + self._set_error_bar(self.global_err_freq, 1.0, 0.0, 0.0) return - avg_amp = float(np.nanmean(amps)) if amps else 0.0 - avg_freq = float(np.nanmean(freqs)) if freqs else 0.0 + avg_amp, sem_amp, n_amp = self._finite_mean_sem(amp_vals) + avg_freq, sem_freq, n_freq = self._finite_mean_sem(freq_vals) total_peaks = float(np.nansum(peaks)) if peaks else 0.0 avg_thr = float(np.nanmean(thrs)) if thrs else 0.0 avg_dur = float(np.nanmean(durations)) if durations else 0.0 + group_mode = self.tab_sources.currentIndex() == 1 self._last_global_metrics = { "amp": avg_amp, + "amp_sem": sem_amp, + "amp_n": float(n_amp), "freq": avg_freq, + "freq_sem": sem_freq, + "freq_n": float(n_freq), "peaks": total_peaks, "thr": avg_thr, "duration": avg_dur, @@ -5178,16 +5844,54 @@ def _render_global_metrics(self) -> None: parts = [] if self.cb_global_amp.isChecked(): - parts.append(f"amp={avg_amp:.4g}") + if group_mode: + parts.append(f"amp={avg_amp:.4g}+-{sem_amp:.3g}") + else: + parts.append(f"amp={avg_amp:.4g}") if self.cb_global_freq.isChecked(): - parts.append(f"freq={avg_freq:.4g} Hz") + if group_mode: + parts.append(f"freq={avg_freq:.4g}+-{sem_freq:.3g} Hz") + else: + parts.append(f"freq={avg_freq:.4g} Hz") parts.append(f"peaks={int(total_peaks)}") self.lbl_global_metrics.setText("Global metrics: " + " | ".join(parts)) self.global_bar_amp.setOpts(height=[avg_amp if self.cb_global_amp.isChecked() else 0.0]) self.global_bar_freq.setOpts(height=[avg_freq if self.cb_global_freq.isChecked() else 0.0]) - ymin = min(0.0, avg_amp if self.cb_global_amp.isChecked() else 0.0, avg_freq if self.cb_global_freq.isChecked() else 0.0) - ymax = max(avg_amp if self.cb_global_amp.isChecked() else 0.0, avg_freq if self.cb_global_freq.isChecked() else 0.0, 0.0) + if group_mode: + if self.cb_global_amp.isChecked() and amp_vals.size: + self.global_scatter_amp.setData(self._jittered_x(0.0, int(amp_vals.size), half_width=0.16), amp_vals) + self._set_error_bar(self.global_err_amp, 0.0, avg_amp, sem_amp) + else: + self.global_scatter_amp.setData([], []) + self._set_error_bar(self.global_err_amp, 0.0, 0.0, 0.0) + if self.cb_global_freq.isChecked() and freq_vals.size: + self.global_scatter_freq.setData(self._jittered_x(1.0, int(freq_vals.size), half_width=0.16), freq_vals) + self._set_error_bar(self.global_err_freq, 1.0, avg_freq, sem_freq) + else: + self.global_scatter_freq.setData([], []) + self._set_error_bar(self.global_err_freq, 1.0, 0.0, 0.0) + else: + self.global_scatter_amp.setData([], []) + self.global_scatter_freq.setData([], []) + self._set_error_bar(self.global_err_amp, 0.0, 0.0, 0.0) + self._set_error_bar(self.global_err_freq, 1.0, 0.0, 0.0) + y_candidates: List[float] = [0.0] + if self.cb_global_amp.isChecked(): + y_candidates.extend([avg_amp, avg_amp - sem_amp, avg_amp + sem_amp]) + if group_mode and amp_vals.size: + y_candidates.extend(np.asarray(amp_vals, float).tolist()) + if self.cb_global_freq.isChecked(): + y_candidates.extend([avg_freq, avg_freq - sem_freq, avg_freq + sem_freq]) + if group_mode and freq_vals.size: + y_candidates.extend(np.asarray(freq_vals, float).tolist()) + y_arr = np.asarray(y_candidates, float) + y_arr = y_arr[np.isfinite(y_arr)] + if y_arr.size: + ymin = float(np.nanmin(y_arr)) + ymax = float(np.nanmax(y_arr)) + else: + ymin, ymax = 0.0, 1.0 if ymin == ymax: ymax = ymin + 1.0 self.plot_global.setYRange(ymin, ymax, padding=0.2) @@ -6698,8 +7402,26 @@ def hideEvent(self, event: QtGui.QHideEvent) -> None: def hide_section_popups_for_tab_switch(self) -> None: """Hide and detach post-processing docks when tab is inactive.""" + if self._use_pg_dockarea_layout: + # DockArea lives inside the post tab widget; no main-window dock mutation is needed. + return if not self._section_popups: return + if self._applying_fixed_default_layout: + return + if self._force_fixed_default_layout: + self._suspend_panel_layout_persistence = True + try: + for key, dock in self._section_popups.items(): + dock.hide() + self._set_section_button_checked(key, False) + finally: + self._suspend_panel_layout_persistence = False + # Fixed mode does not use cached hidden-state restore. + self._post_docks_hidden_for_tab_switch = False + self._post_section_visibility_before_hide.clear() + self._post_section_state_before_hide.clear() + return if self._post_docks_hidden_for_tab_switch: return host = self._dock_host or self._dock_main_window() @@ -6766,14 +7488,25 @@ def _ensure_plot_rows_visible(self) -> None: def showEvent(self, event: QtGui.QShowEvent) -> None: super().showEvent(event) + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + if self._force_fixed_default_layout: + if not self._dock_layout_restored: + self._apply_fixed_dockarea_layout() + else: + self._sync_section_button_states_from_docks() + elif not self._dock_layout_restored: + self._restore_dockarea_layout_state() + self._dock_layout_restored = True + self._ensure_plot_rows_visible() + return self._setup_section_popups() if not self._section_popups: # Defer until the widget is fully attached to a main-window host. QtCore.QTimer.singleShot(0, self._setup_section_popups) if self._force_fixed_default_layout and self._section_popups: - if not self._dock_layout_restored: - self.apply_fixed_default_layout() - self._dock_layout_restored = True + self.apply_fixed_default_layout() + self._dock_layout_restored = True elif not self._dock_layout_restored and self._section_popups: self._restore_panel_layout_state() self._dock_layout_restored = True @@ -6839,6 +7572,8 @@ def showEvent(self, event: QtGui.QShowEvent) -> None: self._save_panel_layout_state() def _apply_post_main_dock_snapshot_if_needed(self) -> None: + if self._use_pg_dockarea_layout: + return if self._post_snapshot_applied: return host = self._dock_host or self._dock_main_window() @@ -6877,6 +7612,8 @@ def _enforce_only_post_docks_visible(self) -> None: """ Ensure preprocessing docks cannot stay visible while postprocessing tab is active. """ + if self._use_pg_dockarea_layout: + return if not self.isVisible(): return host = self._dock_host or self._dock_main_window() @@ -6896,26 +7633,212 @@ def mark_app_closing(self) -> None: def set_force_fixed_default_layout(self, enabled: bool) -> None: self._force_fixed_default_layout = bool(enabled) self._apply_fixed_dock_features() + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + if self._force_fixed_default_layout: + self._apply_fixed_dockarea_layout() + else: + self._restore_dockarea_layout_state() + return + + def _schedule_fixed_layout_retry(self) -> None: + if self._pending_fixed_layout_retry: + return + self._pending_fixed_layout_retry = True + QtCore.QTimer.singleShot(0, self._retry_apply_fixed_default_layout) + + def _retry_apply_fixed_default_layout(self) -> None: + self._pending_fixed_layout_retry = False + try: + self.apply_fixed_default_layout() + except Exception: + _LOG.exception("Deferred fixed post layout apply failed") + + def _ensure_fixed_right_tab_widget(self, host: QtWidgets.QMainWindow) -> Optional[QtWidgets.QTabWidget]: + setup_dock = self._section_popups.get("setup") + if setup_dock is None: + return None + tabw = self._fixed_right_tab_widget + if tabw is None: + tabw = QtWidgets.QTabWidget() + tabw.setObjectName("post.fixed.right.tabs") + tabw.setDocumentMode(True) + tabw.setTabPosition(QtWidgets.QTabWidget.TabPosition.South) + self._fixed_right_tab_widget = tabw + for key in _FIXED_POST_RIGHT_TAB_ORDER: + scroll = self._section_scroll_hosts.get(key) + if scroll is None: + continue + idx = tabw.indexOf(scroll) + title = _FIXED_POST_RIGHT_TAB_TITLES.get(key, key.title()) + if idx < 0: + idx = tabw.addTab(scroll, title) + else: + tabw.setTabText(idx, title) + if setup_dock.widget() is not tabw: + setup_dock.setWidget(tabw) + return tabw + + def _apply_fixed_right_tabs_as_single_dock(self, host: QtWidgets.QMainWindow, active_key: str = "setup") -> None: + setup_dock = self._section_popups.get("setup") + if setup_dock is None: + return + tabw = self._ensure_fixed_right_tab_widget(host) + if tabw is None: + return + # Setup dock hosts the fixed tabs; the individual PSTH/Spatial docks stay hidden. + setup_dock.blockSignals(True) + try: + host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, setup_dock) + setup_dock.setFloating(False) + setup_dock.show() + finally: + setup_dock.blockSignals(False) + for key in ("psth", "spatial", "signal", "behavior"): + dock = self._section_popups.get(key) + if dock is None: + continue + dock.blockSignals(True) + try: + host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) + dock.setFloating(False) + dock.hide() + finally: + dock.blockSignals(False) + active = active_key if active_key in _FIXED_POST_RIGHT_SECTIONS else "setup" + page = self._section_scroll_hosts.get(active) + idx = tabw.indexOf(page) if page is not None else -1 + if idx >= 0: + tabw.setCurrentIndex(idx) + try: + setup_dock.raise_() + setup_dock.setFocus(QtCore.Qt.FocusReason.OtherFocusReason) + except Exception: + pass + for key in _FIXED_POST_RIGHT_SECTIONS: + self._set_section_button_checked(key, True) + self._last_opened_section = active + + def _activate_fixed_right_tab(self, key: str) -> None: + host = self._dock_host or self._dock_main_window() + if host is None: + return + self._apply_fixed_right_tabs_as_single_dock(host, active_key=key) + + def _enforce_fixed_post_default_visibility(self) -> None: + if not self._force_fixed_default_layout: + return + if self._use_pg_dockarea_layout: + self._save_dockarea_layout_state() + return + host = self._dock_host or self._dock_main_window() + if host is None or not self._section_popups: + return + tabs = getattr(host, "tabs", None) + if isinstance(tabs, QtWidgets.QTabWidget) and tabs.currentWidget() is not self: + return + visible_keys = {"setup", "export"} + for key, dock in self._section_popups.items(): + if dock is None: + continue + dock.blockSignals(True) + try: + area = ( + QtCore.Qt.DockWidgetArea.BottomDockWidgetArea + if key == "export" + else QtCore.Qt.DockWidgetArea.RightDockWidgetArea + ) + host.addDockWidget(area, dock) + dock.setFloating(False) + if key in visible_keys: + dock.show() + else: + dock.hide() + finally: + dock.blockSignals(False) + self._apply_fixed_right_tabs_as_single_dock(host, active_key=self._last_opened_section or "setup") + setup = self._section_popups.get("setup") + if setup is not None: + try: + setup.raise_() + setup.setFocus(QtCore.Qt.FocusReason.OtherFocusReason) + self._last_opened_section = "setup" + except Exception: + pass + try: + self._sync_section_button_states_from_docks() + except Exception: + pass + + def _persist_fixed_post_default_state(self) -> None: + if not self._force_fixed_default_layout: + return + if self._use_pg_dockarea_layout: + self._save_dockarea_layout_state() + return + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + bottom_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, 8) + for key in ("setup", "psth", "signal", "behavior", "spatial", "export"): + dock = self._section_popups.get(key) + if dock is None: + continue + base = f"post_section_docks/{key}" + visible = key in _FIXED_POST_VISIBLE_SECTIONS + area_i = bottom_i if key == "export" else right_i + try: + self._settings.setValue(f"{base}/visible", visible) + self._settings.setValue(f"{base}/floating", False) + self._settings.setValue(f"{base}/area", area_i) + self._settings.setValue(f"{base}/geometry", dock.saveGeometry()) + except Exception: + continue + # Fixed mode should not depend on snapshot restore blobs. + try: + self._settings.remove(_POST_DOCK_STATE_KEY) + except Exception: + pass + try: + self._settings.sync() + except Exception: + pass def apply_fixed_default_layout(self) -> None: """ - Apply deterministic Post Processing docking: - right-side tab stack with Setup active, and Export docked as bottom strip. + Apply deterministic Post Processing docking default: + Setup, PSTH, Spatial, and Export as fixed right-side tabs. """ + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + if not self._dock_layout_restored: + self._apply_fixed_dockarea_layout() + else: + self._apply_fixed_dock_features() + self._sync_section_button_states_from_docks() + self._save_dockarea_layout_state() + return + if self._applying_fixed_default_layout: + return self._setup_section_popups() host = self._dock_host or self._dock_main_window() if host is None or not self._section_popups: return + tabs = getattr(host, "tabs", None) + if isinstance(tabs, QtWidgets.QTabWidget) and tabs.currentWidget() is not self: + return + self._pending_fixed_layout_retry = False self._dock_host = host + self._applying_fixed_default_layout = True setup = self._section_popups.get("setup") - ordered_right_keys = ["setup", "psth", "signal", "behavior", "spatial"] + ordered_right_keys = ["setup", "spatial", "psth", "signal", "behavior"] + visible_right_keys = {"setup"} export = self._section_popups.get("export") self._suspend_panel_layout_persistence = True try: self._apply_fixed_dock_features() - # Reset previous split/tab topology before rebuilding the fixed stack. + # Reset post dock topology first so stale tab groups from previous + # sessions cannot override the enforced default. for key in ("setup", "psth", "signal", "behavior", "spatial", "export"): dock = self._section_popups.get(key) if dock is None: @@ -6933,7 +7856,10 @@ def apply_fixed_default_layout(self) -> None: try: host.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, dock) dock.setFloating(False) - dock.show() + if key in visible_right_keys: + dock.show() + else: + dock.hide() finally: dock.blockSignals(False) @@ -6946,15 +7872,7 @@ def apply_fixed_default_layout(self) -> None: finally: export.blockSignals(False) - if setup is not None: - for key in ("psth", "signal", "behavior", "spatial"): - dock = self._section_popups.get(key) - if dock is None: - continue - try: - host.tabifyDockWidget(setup, dock) - except Exception: - continue + self._apply_fixed_right_tabs_as_single_dock(host, active_key=self._last_opened_section or "setup") if setup is not None: setup.show() @@ -6979,19 +7897,33 @@ def apply_fixed_default_layout(self) -> None: self._post_docks_hidden_for_tab_switch = False self._post_section_visibility_before_hide.clear() self._post_section_state_before_hide.clear() + self._dock_layout_restored = True finally: self._suspend_panel_layout_persistence = False + self._applying_fixed_default_layout = False + # Re-apply once after queued dock events for extra stability. + QtCore.QTimer.singleShot(0, self._enforce_fixed_post_default_visibility) + self._persist_fixed_post_default_state() self._enforce_only_post_docks_visible() def ensure_section_popups_initialized(self) -> None: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + return self._setup_section_popups() def get_section_dock_widgets(self) -> List[QtWidgets.QDockWidget]: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + return [] self._setup_section_popups() return list(self._section_popups.values()) def get_section_popup_keys(self) -> List[str]: + if self._use_pg_dockarea_layout: + self._setup_dockarea_sections() + return list(self._dockarea_docks.keys()) or list(self._section_widget_map().keys()) self._setup_section_popups() return list(self._section_popups.keys()) diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 2f32a9f..c716491 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -10,6 +10,7 @@ import pyqtgraph as pg from analysis_core import ( + ExportSelection, ProcessingParams, ProcessedTrial, OUTPUT_MODES, @@ -1384,6 +1385,10 @@ def _build_help_texts(self) -> Dict[str, str]: "Convergence tolerance for robust regression.\n" "Smaller values are stricter but may take more iterations." ), + "export_selection": ( + "Choose which processed signals are written during CSV/H5 export.\n" + "Time is always exported. These options are saved in the preprocessing configuration file." + ), } def _show_help(self, key: str, title: str) -> None: @@ -1648,6 +1653,35 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: self.btn_metadata.clicked.connect(self.metadataRequested.emit) self.btn_advanced.clicked.connect(self.advancedOptionsRequested.emit) + self.chk_export_raw = QtWidgets.QCheckBox("Raw 465") + self.chk_export_raw.setChecked(True) + self.chk_export_iso = QtWidgets.QCheckBox("Isobestic 405") + self.chk_export_iso.setChecked(True) + self.chk_export_output = QtWidgets.QCheckBox("Processed output") + self.chk_export_output.setChecked(True) + self.chk_export_dio = QtWidgets.QCheckBox("DIO / trigger") + self.chk_export_dio.setChecked(True) + self.chk_export_baseline_sig = QtWidgets.QCheckBox("Baseline 465") + self.chk_export_baseline_sig.setChecked(True) + self.chk_export_baseline_ref = QtWidgets.QCheckBox("Baseline 405") + self.chk_export_baseline_ref.setChecked(True) + + export_group = QtWidgets.QGroupBox() + export_form = QtWidgets.QFormLayout(export_group) + export_form.setContentsMargins(6, 6, 6, 6) + export_form.addRow(self._label_with_help("Export fields", "export_selection")) + export_checks = QtWidgets.QGridLayout() + export_checks.setContentsMargins(0, 0, 0, 0) + export_checks.setHorizontalSpacing(10) + export_checks.setVerticalSpacing(4) + export_checks.addWidget(self.chk_export_raw, 0, 0) + export_checks.addWidget(self.chk_export_iso, 0, 1) + export_checks.addWidget(self.chk_export_output, 1, 0) + export_checks.addWidget(self.chk_export_dio, 1, 1) + export_checks.addWidget(self.chk_export_baseline_sig, 2, 0) + export_checks.addWidget(self.chk_export_baseline_ref, 2, 1) + export_form.addRow(export_checks) + qc_content = QtWidgets.QWidget() qc_grid = QtWidgets.QGridLayout(qc_content) qc_grid.setContentsMargins(0, 0, 0, 0) @@ -1661,12 +1695,13 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: qc_grid.addWidget(self.btn_metadata, 3, 0) qc_grid.addWidget(self.btn_save_config, 3, 1) qc_grid.addWidget(self.btn_load_config, 4, 1) + qc_grid.addWidget(export_group, 5, 0, 1, 2) qc_grid.setColumnStretch(0, 1) qc_grid.setColumnStretch(1, 1) self.lbl_fs = QtWidgets.QLabel("FS: -") self.lbl_fs.setProperty("class", "hint") - qc_grid.addWidget(self.lbl_fs, 5, 0, 1, 2) + qc_grid.addWidget(self.lbl_fs, 6, 0, 1, 2) # Cards self.card_artifacts = CollapsibleSection("Artifacts") @@ -1892,6 +1927,25 @@ def set_config_state_hooks( self._config_state_exporter = exporter self._config_state_importer = importer + def export_selection(self) -> ExportSelection: + return ExportSelection( + raw=self.chk_export_raw.isChecked(), + isobestic=self.chk_export_iso.isChecked(), + output=self.chk_export_output.isChecked(), + dio=self.chk_export_dio.isChecked(), + baseline_sig=self.chk_export_baseline_sig.isChecked(), + baseline_ref=self.chk_export_baseline_ref.isChecked(), + ) + + def set_export_selection(self, selection: ExportSelection) -> None: + selection = selection if isinstance(selection, ExportSelection) else ExportSelection() + self.chk_export_raw.setChecked(bool(selection.raw)) + self.chk_export_iso.setChecked(bool(selection.isobestic)) + self.chk_export_output.setChecked(bool(selection.output)) + self.chk_export_dio.setChecked(bool(selection.dio)) + self.chk_export_baseline_sig.setChecked(bool(selection.baseline_sig)) + self.chk_export_baseline_ref.setChecked(bool(selection.baseline_ref)) + def _save_config(self) -> None: """Save current preprocessing parameters to a JSON file.""" params = self.get_params() diff --git a/pyBer/main.py b/pyBer/main.py index 5bffe0f..b287ceb 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -19,9 +19,11 @@ from PySide6 import QtCore, QtGui, QtWidgets import pyqtgraph as pg +from pyqtgraph.dockarea import DockArea, Dock import h5py from analysis_core import ( + ExportSelection, PhotometryProcessor, ProcessingParams, LoadedDoricFile, @@ -45,7 +47,7 @@ AdvancedOptionsDialog, ) from gui_postprocessing import PostProcessingPanel -from styles import APP_QSS +from styles import app_qss import numpy as np @@ -104,9 +106,16 @@ def _to_bool(value: object, default: bool = False) -> bool: _PRE_DOCK_STATE_KEY = "pre_main_dock_state_v4" _POST_DOCK_STATE_KEY = "post_main_dock_state_v4" _PRE_TAB_GROUPS_KEY = "pre_tab_groups_v1" +_PRE_DOCKAREA_STATE_KEY = "pre_dockarea_state_v1" +_PRE_DOCKAREA_VISIBLE_KEY = "pre_dockarea_visible_v1" +_PRE_DOCKAREA_ACTIVE_KEY = "pre_dockarea_active_v1" _PRE_DOCK_PREFIX = "pre." _POST_DOCK_PREFIX = "post." _FORCE_FIXED_DOCK_LAYOUTS = True +_USE_PG_DOCKAREA_PRE_LAYOUT = True +_PRE_DOCKAREA_PRIMARY_ORDER = ("artifacts_list", "artifacts", "filtering", "baseline", "output", "export") +_PRE_DOCKAREA_OPTIONAL_ORDER = ("qc", "config") +_PRE_DOCKAREA_DEFAULT_VISIBLE = frozenset(_PRE_DOCKAREA_PRIMARY_ORDER) _LOG = logging.getLogger(__name__) @@ -317,6 +326,11 @@ def __init__(self) -> None: self._box_select_callback: Optional[Callable[[float, float], None]] = None self._last_artifact_params: Optional[Tuple[object, ...]] = None self._section_docks: Dict[str, QtWidgets.QDockWidget] = {} + self._use_pg_dockarea_pre_layout: bool = bool(_USE_PG_DOCKAREA_PRE_LAYOUT) + self._pre_dockarea: Optional[DockArea] = None + self._pre_dockarea_docks: Dict[str, Dock] = {} + self._pre_section_scroll_hosts: Dict[str, QtWidgets.QScrollArea] = {} + self._pre_dockarea_fixed_layout_applied: bool = False self._shortcuts: List[QtGui.QShortcut] = [] self._last_opened_section: Optional[str] = None self._section_popup_initialized: set[str] = set() @@ -340,7 +354,9 @@ def __init__(self) -> None: self._pre_snapshot_max_retries: int = 6 self._post_docks_ready: bool = False self._handling_main_tab_change: bool = False + self._pending_main_tab_index: Optional[int] = None self._force_fixed_dock_layouts: bool = bool(_FORCE_FIXED_DOCK_LAYOUTS) + self._app_theme_mode: str = "dark" # Worker infra (stable) self._pool = QtCore.QThreadPool.globalInstance() @@ -382,12 +398,29 @@ def _set_initial_window_size(self) -> None: self.resize(width, height) def _build_ui(self) -> None: - self.setStyleSheet(APP_QSS) + self.setStyleSheet(app_qss(self._app_theme_mode)) self.tabs = QtWidgets.QTabWidget() self.setCentralWidget(self.tabs) self._status_bar = QtWidgets.QStatusBar(self) self.setStatusBar(self._status_bar) + self.btn_app_theme = QtWidgets.QPushButton("Theme") + self.btn_app_theme.setProperty("class", "blueSecondarySmall") + self.btn_app_theme.setSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_app_theme.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) + self.menu_app_theme = QtWidgets.QMenu(self.btn_app_theme) + self._app_theme_group = QtGui.QActionGroup(self) + self._app_theme_group.setExclusive(True) + self.act_app_theme_dark = self.menu_app_theme.addAction("Dark mode") + self.act_app_theme_dark.setCheckable(True) + self.act_app_theme_light = self.menu_app_theme.addAction("Light mode") + self.act_app_theme_light.setCheckable(True) + self._app_theme_group.addAction(self.act_app_theme_dark) + self._app_theme_group.addAction(self.act_app_theme_light) + self.act_app_theme_dark.setChecked(True) + self.btn_app_theme.setMenu(self.menu_app_theme) + self._status_bar.addPermanentWidget(QtWidgets.QLabel("App theme")) + self._status_bar.addPermanentWidget(self.btn_app_theme) # Preprocessing tab self.pre_tab = QtWidgets.QWidget() @@ -399,18 +432,20 @@ def _build_ui(self) -> None: self.plots = PlotDashboard(self.pre_tab) self.artifact_panel = ArtifactPanel(self.pre_tab) - # Right artifact panel dock (hidden by default) - self.art_dock = QtWidgets.QDockWidget("Artifacts list", self) - self.art_dock.setObjectName("pre.artifact.dock") - self.art_dock.setWidget(self.artifact_panel) - self.art_dock.setAllowedAreas(QtCore.Qt.DockWidgetArea.RightDockWidgetArea) - self.art_dock.setVisible(False) - self.art_dock.visibilityChanged.connect(lambda *_: self._save_panel_layout_state()) - self.art_dock.topLevelChanged.connect(lambda *_: self._save_panel_layout_state()) - self.art_dock.dockLocationChanged.connect(lambda *_: self._save_panel_layout_state()) - self.art_dock.installEventFilter(self) - self.artifact_panel.installEventFilter(self) - self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.art_dock) + self.art_dock: Optional[QtWidgets.QDockWidget] = None + # Legacy artifact list dock (kept for non-DockArea preprocessing mode). + if not self._use_pg_dockarea_pre_layout: + self.art_dock = QtWidgets.QDockWidget("Artifact list", self) + self.art_dock.setObjectName("pre.artifact.dock") + self.art_dock.setWidget(self.artifact_panel) + self.art_dock.setAllowedAreas(QtCore.Qt.DockWidgetArea.RightDockWidgetArea) + self.art_dock.setVisible(False) + self.art_dock.visibilityChanged.connect(lambda *_: self._save_panel_layout_state()) + self.art_dock.topLevelChanged.connect(lambda *_: self._save_panel_layout_state()) + self.art_dock.dockLocationChanged.connect(lambda *_: self._save_panel_layout_state()) + self.art_dock.installEventFilter(self) + self.artifact_panel.installEventFilter(self) + self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.art_dock) # Left pane: data browser self.file_panel.setMinimumWidth(260) @@ -468,7 +503,8 @@ def _build_ui(self) -> None: self.btn_plot_style.setMenu(self.menu_plot_style) # Inline parameter section buttons (same row as workflow actions). - self.btn_section_artifacts = QtWidgets.QPushButton("Artifacts") + self.btn_section_artifacts_list = QtWidgets.QPushButton("Artifact list") + self.btn_section_artifacts = QtWidgets.QPushButton("Artifact setup") self.btn_section_filtering = QtWidgets.QPushButton("Filtering") self.btn_section_baseline = QtWidgets.QPushButton("Baseline") self.btn_section_output = QtWidgets.QPushButton("Output") @@ -476,12 +512,13 @@ def _build_ui(self) -> None: self.btn_section_export = QtWidgets.QPushButton("Export") self.btn_section_config = QtWidgets.QPushButton("Configuration") self._section_buttons: Dict[str, QtWidgets.QPushButton] = { + "artifacts_list": self.btn_section_artifacts_list, "artifacts": self.btn_section_artifacts, "filtering": self.btn_section_filtering, "baseline": self.btn_section_baseline, "output": self.btn_section_output, - "qc": self.btn_section_qc, "export": self.btn_section_export, + "qc": self.btn_section_qc, "config": self.btn_section_config, } for btn in self._section_buttons.values(): @@ -522,10 +559,17 @@ def _build_ui(self) -> None: self.pre_splitter.setObjectName("preprocessing_splitter") self.pre_splitter.addWidget(self.file_panel) self.pre_splitter.addWidget(center_widget) + if self._use_pg_dockarea_pre_layout: + self._pre_dockarea = DockArea() + self.pre_splitter.addWidget(self._pre_dockarea) self.pre_splitter.setChildrenCollapsible(False) self.pre_splitter.setStretchFactor(0, 0) self.pre_splitter.setStretchFactor(1, 1) - self.pre_splitter.setSizes([350, 1350]) + if self._use_pg_dockarea_pre_layout: + self.pre_splitter.setStretchFactor(2, 0) + self.pre_splitter.setSizes([320, 1100, 520]) + else: + self.pre_splitter.setSizes([350, 1350]) self.pre_splitter.splitterMoved.connect(self._save_splitter_sizes) pre_layout = QtWidgets.QVBoxLayout(self.pre_tab) @@ -534,6 +578,11 @@ def _build_ui(self) -> None: # Postprocessing tab self.post_tab = PostProcessingPanel() + if hasattr(self.post_tab, "set_app_theme_mode"): + try: + self.post_tab.set_app_theme_mode(self._app_theme_mode) + except Exception: + pass if hasattr(self.post_tab, "set_force_fixed_default_layout"): try: self.post_tab.set_force_fixed_default_layout(self._force_fixed_dock_layouts) @@ -580,6 +629,8 @@ def _build_ui(self) -> None: self.act_plot_bg_dark.triggered.connect(self._on_pre_plot_style_changed) self.act_plot_bg_white.triggered.connect(self._on_pre_plot_style_changed) self.act_plot_grid.toggled.connect(self._on_pre_plot_style_changed) + self.act_app_theme_dark.triggered.connect(self._on_app_theme_changed) + self.act_app_theme_light.triggered.connect(self._on_app_theme_changed) self.btn_toggle_data.toggled.connect(self._set_data_panel_visible) self.btn_workflow_artifacts.clicked.connect(self._toggle_artifacts_panel) self.btn_workflow_qc.clicked.connect(self._run_qc_dialog) @@ -617,7 +668,12 @@ def _build_ui(self) -> None: self.setAcceptDrops(True) def _setup_section_popups(self) -> None: - """Create one floating popup per processing section and reuse existing controls.""" + """Create preprocessing section panels using DockArea or legacy floating docks.""" + if self._use_pg_dockarea_pre_layout and self._pre_dockarea_docks: + return + if (not self._use_pg_dockarea_pre_layout) and self._section_docks: + return + # Move section cards out of the hidden ParameterPanel container and into docks. root_layout = self.param_panel.layout() section_cards = [ @@ -634,24 +690,55 @@ def _setup_section_popups(self) -> None: self.param_panel.card_actions.setVisible(False) section_widgets: Dict[str, QtWidgets.QWidget] = { + "artifacts_list": self.artifact_panel, "artifacts": self.param_panel.card_artifacts, "filtering": self.param_panel.card_filtering, "baseline": self.param_panel.card_baseline, "output": self.param_panel.card_output, - "qc": self._build_qc_actions_widget(), "export": self._build_export_actions_widget(), + "qc": self._build_qc_actions_widget(), "config": self._build_config_actions_widget(), } section_titles: Dict[str, str] = { - "artifacts": "Artifacts", + "artifacts_list": "Artifact list", + "artifacts": "Artifact setup", "filtering": "Filtering", "baseline": "Baseline", "output": "Output", - "qc": "QC", "export": "Export", + "qc": "QC", "config": "Configuration", } + if self._use_pg_dockarea_pre_layout: + if self._pre_dockarea is None: + return + for key, title in section_titles.items(): + widget = section_widgets[key] + scroll = QtWidgets.QScrollArea() + scroll.setWidgetResizable(True) + scroll.setFrameShape(QtWidgets.QFrame.Shape.NoFrame) + scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) + widget.setMinimumSize(0, 0) + widget.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) + scroll.setWidget(widget) + self._pre_section_scroll_hosts[key] = scroll + + dock = Dock(title, area=self._pre_dockarea, closable=True) + dock.setObjectName(f"pre.da.{key}.dock") + dock.addWidget(scroll) + self._lock_pre_pg_dock_interactions(dock) + try: + dock.sigClosed.connect(lambda *_, section_key=key: self._on_pre_dockarea_dock_closed(section_key)) + except Exception: + pass + self._pre_dockarea_docks[key] = dock + + self._restore_pre_dockarea_layout_state() + self._pre_dockarea_fixed_layout_applied = False + return + for key, title in section_titles.items(): widget = section_widgets[key] dock = QtWidgets.QDockWidget(title, self) @@ -674,6 +761,205 @@ def _setup_section_popups(self) -> None: widget.installEventFilter(self) self._section_docks[key] = dock + def _pre_dockarea_dock(self, key: str) -> Optional[Dock]: + return self._pre_dockarea_docks.get(key) + + def _pre_dockarea_ordered_keys(self) -> List[str]: + ordered = list(_PRE_DOCKAREA_PRIMARY_ORDER) + list(_PRE_DOCKAREA_OPTIONAL_ORDER) + return [key for key in ordered if self._pre_dockarea_dock(key) is not None] + + def _pre_dockarea_default_visible_map(self) -> Dict[str, bool]: + return {key: (key in _PRE_DOCKAREA_DEFAULT_VISIBLE) for key in self._pre_dockarea_docks.keys()} + + def _lock_pre_pg_dock_interactions(self, dock: Dock) -> None: + label = getattr(dock, "label", None) + if label is None or bool(getattr(label, "_pyber_fixed_interaction_lock", False)): + return + + def _ignore_drag(event: QtGui.QMouseEvent) -> None: + event.ignore() + + def _ignore_double_click(event: QtGui.QMouseEvent) -> None: + event.accept() + + try: + label.mouseMoveEvent = _ignore_drag + label.mouseDoubleClickEvent = _ignore_double_click + label.setCursor(QtCore.Qt.CursorShape.ArrowCursor) + label._pyber_fixed_interaction_lock = True + except Exception: + pass + + def _arrange_pre_dockarea_default(self) -> None: + if self._pre_dockarea is None: + return + ordered = self._pre_dockarea_ordered_keys() + root = self._pre_dockarea_dock("artifacts_list") + if root is None and ordered: + root = self._pre_dockarea_dock(ordered[0]) + if root is None: + return + self._pre_dockarea.addDock(root, "right") + for key in ordered: + dock = self._pre_dockarea_dock(key) + if dock is not None and dock is not root: + self._pre_dockarea.addDock(dock, "above", root) + + def _pre_dockarea_active_key(self) -> Optional[str]: + active = self._last_opened_section + if isinstance(active, str) and active in self._pre_dockarea_docks: + return active + for key in self._pre_dockarea_ordered_keys(): + dock = self._pre_dockarea_dock(key) + if dock is not None and dock.isVisible(): + return key + return None + + def _set_pre_dockarea_visible(self, key: str, visible: bool) -> None: + dock = self._pre_dockarea_dock(key) + if dock is None: + return + if visible: + dock.show() + else: + dock.hide() + + def _save_pre_dockarea_layout_state(self) -> None: + if self._pre_dockarea is None: + return + try: + state = dict(self._pre_dockarea.saveState() or {}) + except Exception: + state = {} + visible = {key: bool(dock.isVisible()) for key, dock in self._pre_dockarea_docks.items()} + active = self._pre_dockarea_active_key() or "" + try: + self.settings.setValue(_PRE_DOCKAREA_STATE_KEY, json.dumps(state)) + self.settings.setValue(_PRE_DOCKAREA_VISIBLE_KEY, json.dumps(visible)) + self.settings.setValue(_PRE_DOCKAREA_ACTIVE_KEY, active) + self.settings.remove(_PRE_DOCK_STATE_KEY) + self.settings.remove(_PRE_TAB_GROUPS_KEY) + except Exception: + pass + + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + for key, dock in self._pre_dockarea_docks.items(): + if key == "artifacts_list": + continue + try: + base = f"pre_section_docks/{key}" + self.settings.setValue(f"{base}/visible", bool(dock.isVisible())) + self.settings.setValue(f"{base}/floating", False) + self.settings.setValue(f"{base}/area", right_i) + except Exception: + continue + try: + art_base = "pre_artifact_dock_state" + art_vis = bool(visible.get("artifacts_list", False)) + self.settings.setValue(f"{art_base}/visible", art_vis) + self.settings.setValue(f"{art_base}/floating", False) + self.settings.setValue(f"{art_base}/area", right_i) + except Exception: + pass + + def _restore_pre_dockarea_layout_state(self) -> None: + if self._pre_dockarea is None or not self._pre_dockarea_docks: + return + self._pre_dockarea_fixed_layout_applied = False + self._arrange_pre_dockarea_default() + + raw_state = self.settings.value(_PRE_DOCKAREA_STATE_KEY, "") + try: + if isinstance(raw_state, str) and raw_state.strip(): + parsed = json.loads(raw_state) + if isinstance(parsed, dict): + self._pre_dockarea.restoreState(parsed, missing="ignore", extra="bottom") + except Exception: + pass + + visible_map: Dict[str, bool] = {} + raw_vis = self.settings.value(_PRE_DOCKAREA_VISIBLE_KEY, "") + try: + if isinstance(raw_vis, str) and raw_vis.strip(): + parsed = json.loads(raw_vis) + if isinstance(parsed, dict): + visible_map = {str(k): bool(v) for k, v in parsed.items()} + except Exception: + visible_map = {} + + if not visible_map: + for key in self._pre_dockarea_docks.keys(): + if key == "artifacts_list": + raw = self.settings.value("pre_artifact_dock_state/visible", None) + if raw is not None: + visible_map[key] = _to_bool(raw, False) + continue + raw = self.settings.value(f"pre_section_docks/{key}/visible", None) + if raw is not None: + visible_map[key] = _to_bool(raw, False) + if not visible_map: + visible_map = self._pre_dockarea_default_visible_map() + + for key in self._pre_dockarea_docks.keys(): + self._set_pre_dockarea_visible(key, bool(visible_map.get(key, False))) + + active = str(self.settings.value(_PRE_DOCKAREA_ACTIVE_KEY, "artifacts_list") or "artifacts_list") + active_dock = self._pre_dockarea_dock(active) + if active_dock is not None and active_dock.isVisible(): + try: + active_dock.raiseDock() + except Exception: + pass + if active in self._section_buttons: + self._last_opened_section = active + else: + self._last_opened_section = None + for key in self._pre_dockarea_ordered_keys(): + dock = self._pre_dockarea_dock(key) + if dock is not None and dock.isVisible(): + try: + dock.raiseDock() + except Exception: + pass + self._last_opened_section = key + break + + self._sync_section_button_states_from_docks() + + def _apply_pre_fixed_dockarea_layout(self) -> None: + if self._pre_dockarea is None or not self._pre_dockarea_docks: + return + visible_map = {key: bool(dock.isVisible()) for key, dock in self._pre_dockarea_docks.items()} + if not any(visible_map.values()): + visible_map = self._pre_dockarea_default_visible_map() + self._arrange_pre_dockarea_default() + for key in self._pre_dockarea_docks.keys(): + self._set_pre_dockarea_visible(key, bool(visible_map.get(key, False))) + + active = self._last_opened_section if bool(visible_map.get(self._last_opened_section or "", False)) else None + if active is None: + for key in self._pre_dockarea_ordered_keys(): + if bool(visible_map.get(key, False)): + active = key + break + dock = self._pre_dockarea_dock(active) if active else None + if dock is not None and dock.isVisible(): + try: + dock.raiseDock() + except Exception: + pass + self._last_opened_section = active + self._sync_section_button_states_from_docks() + self._save_pre_dockarea_layout_state() + self._pre_dockarea_fixed_layout_applied = True + + def _on_pre_dockarea_dock_closed(self, key: str) -> None: + if key in self._section_buttons: + self._set_section_button_checked(key, False) + if self._last_opened_section == key: + self._last_opened_section = None + self._save_panel_layout_state() + def _build_qc_actions_widget(self) -> QtWidgets.QWidget: panel = QtWidgets.QWidget() v = QtWidgets.QVBoxLayout(panel) @@ -729,6 +1015,23 @@ def _set_section_button_checked(self, key: str, checked: bool) -> None: btn.blockSignals(False) def _toggle_section_popup(self, key: str, checked: bool) -> None: + if self._use_pg_dockarea_pre_layout: + dock = self._pre_dockarea_dock(key) + if dock is None: + return + if checked: + dock.show() + try: + dock.raiseDock() + except Exception: + pass + scroll = self._pre_section_scroll_hosts.get(key) + self._focus_first_editable(scroll.widget() if scroll is not None else None) + self._last_opened_section = key + else: + dock.hide() + self._save_panel_layout_state() + return dock = self._section_docks.get(key) if dock is None: return @@ -746,6 +1049,15 @@ def _toggle_section_popup(self, key: str, checked: bool) -> None: dock.hide() def _on_section_dock_visibility(self, key: str, visible: bool) -> None: + if self._use_pg_dockarea_pre_layout: + if key in self._section_buttons: + self._set_section_button_checked(key, visible) + if not visible and self._last_opened_section == key: + self._last_opened_section = None + if visible: + self._last_opened_section = key + self._save_panel_layout_state() + return self._set_section_button_checked(key, visible) if not visible and self._last_opened_section == key: self._last_opened_section = None @@ -847,9 +1159,14 @@ def eventFilter(self, obj: QtCore.QObject, event: QtCore.QEvent) -> bool: return super().eventFilter(obj, event) def getPreDockWidgets(self) -> List[QtWidgets.QDockWidget]: - docks: List[QtWidgets.QDockWidget] = list(self._section_docks.values()) - if hasattr(self, "art_dock") and isinstance(self.art_dock, QtWidgets.QDockWidget): - docks.append(self.art_dock) + if self._use_pg_dockarea_pre_layout: + docks: List[QtWidgets.QDockWidget] = [] + if isinstance(self.art_dock, QtWidgets.QDockWidget): + docks.append(self.art_dock) + else: + docks = list(self._section_docks.values()) + if isinstance(self.art_dock, QtWidgets.QDockWidget): + docks.append(self.art_dock) seen: set[int] = set() out: List[QtWidgets.QDockWidget] = [] for dock in docks: @@ -891,7 +1208,8 @@ def _hide_dock_widgets(self, docks: List[QtWidgets.QDockWidget], *, remove: bool def hideOtherTabDocks(self, tab_name: str) -> None: if tab_name == "pre": - self._hide_dock_widgets(self.getPostDockWidgets(), remove=True) + remove_post = not self._force_fixed_dock_layouts + self._hide_dock_widgets(self.getPostDockWidgets(), remove=remove_post) elif tab_name == "post": self._hide_dock_widgets(self.getPreDockWidgets(), remove=True) # Final guard: keep post dock registry initialized before post restore paths run. @@ -1077,6 +1395,21 @@ def _toggle_data_panel_shortcut(self) -> None: self._set_data_panel_visible(not self.file_panel.isVisible()) def _toggle_all_parameter_popups_shortcut(self) -> None: + if self._use_pg_dockarea_pre_layout: + any_open = any( + bool(dock.isVisible()) + for key, dock in self._pre_dockarea_docks.items() + if key in self._section_buttons + ) + if any_open: + for key in self._section_buttons.keys(): + self._set_pre_dockarea_visible(key, False) + self._set_section_button_checked(key, False) + self._last_opened_section = None + self._save_panel_layout_state() + return + self._toggle_section_shortcut("output") + return any_open = any(d.isVisible() for d in self._section_docks.values()) if any_open: for key, dock in self._section_docks.items(): @@ -1095,6 +1428,15 @@ def _toggle_section_shortcut(self, key: str) -> None: self._toggle_section_popup(key, next_state) def _close_focused_popup(self) -> None: + if self._use_pg_dockarea_pre_layout: + if self._last_opened_section: + dock = self._pre_dockarea_dock(self._last_opened_section) + if dock is not None and dock.isVisible(): + dock.hide() + self._set_section_button_checked(self._last_opened_section, False) + self._last_opened_section = None + self._save_panel_layout_state() + return fw = QtWidgets.QApplication.focusWidget() while fw is not None and not isinstance(fw, QtWidgets.QDockWidget): fw = fw.parentWidget() @@ -1446,7 +1788,10 @@ def _read_section_settings(prefix: str, keys: List[str]) -> Dict[str, Dict[str, } return out - pre_sections = list(self._section_docks.keys()) + if self._use_pg_dockarea_pre_layout and self._pre_dockarea_docks: + pre_sections = [k for k in self._pre_dockarea_docks.keys() if k != "artifacts_list"] + else: + pre_sections = list(self._section_docks.keys()) post_sections = [] try: self.post_tab.ensure_section_popups_initialized() @@ -1500,6 +1845,7 @@ def _export_preprocessing_ui_state_for_config(self) -> Dict[str, object]: return { "artifact_overlay_visible": bool(self.param_panel.artifact_overlay_visible()), "artifact_thresholds_visible": bool(self.plots.artifact_thresholds_visible()), + "export_selection": self.param_panel.export_selection().to_dict(), "panel_layout": self._collect_panel_layout_payload(), } @@ -1548,6 +1894,8 @@ def _import_preprocessing_ui_state_from_config(self, ui_state: Dict[str, object] self.plots.set_artifact_overlay_visible(visible) if "artifact_thresholds_visible" in ui_state: self.plots.set_artifact_thresholds_visible(bool(ui_state.get("artifact_thresholds_visible"))) + if "export_selection" in ui_state: + self.param_panel.set_export_selection(ExportSelection.from_dict(ui_state.get("export_selection"))) panel_layout = ui_state.get("panel_layout") if isinstance(panel_layout, dict): self._load_panel_config_payload_into_settings(panel_layout) @@ -1556,6 +1904,15 @@ def _import_preprocessing_ui_state_from_config(self, ui_state: Dict[str, object] self._save_settings() def _sync_section_button_states_from_docks(self) -> None: + if self._use_pg_dockarea_pre_layout: + self._last_opened_section = None + for key in self._section_buttons.keys(): + dock = self._pre_dockarea_dock(key) + visible = bool(dock.isVisible()) if dock is not None else False + self._set_section_button_checked(key, visible) + if visible and self._last_opened_section is None: + self._last_opened_section = key + return self._last_opened_section = None for key, dock in self._section_docks.items(): vis = bool(dock.isVisible()) @@ -1575,6 +1932,14 @@ def _save_panel_layout_state(self) -> None: if self._pre_popups_hidden_by_tab_switch: return + if self._use_pg_dockarea_pre_layout: + self._save_pre_dockarea_layout_state() + try: + self.settings.sync() + except Exception: + pass + return + # Per-dock persistence is isolated so one faulty dock payload cannot drop all others. for key, dock in self._section_docks.items(): try: @@ -1596,20 +1961,21 @@ def _save_panel_layout_state(self) -> None: except Exception: continue - try: - base = "pre_artifact_dock_state" - cached = self._pre_artifact_state_before_tab_switch if self._pre_popups_hidden_by_tab_switch else {} - visible = bool(cached.get("visible", self.art_dock.isVisible())) - floating = bool(cached.get("floating", self.art_dock.isFloating())) - right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) - area_val = _dock_area_to_int(cached.get("area", self.dockWidgetArea(self.art_dock)), right_i) - geom = cached.get("geometry", self.art_dock.saveGeometry()) - self.settings.setValue(f"{base}/visible", visible) - self.settings.setValue(f"{base}/floating", floating) - self.settings.setValue(f"{base}/area", area_val) - self.settings.setValue(f"{base}/geometry", geom) - except Exception: - pass + if isinstance(self.art_dock, QtWidgets.QDockWidget): + try: + base = "pre_artifact_dock_state" + cached = self._pre_artifact_state_before_tab_switch if self._pre_popups_hidden_by_tab_switch else {} + visible = bool(cached.get("visible", self.art_dock.isVisible())) + floating = bool(cached.get("floating", self.art_dock.isFloating())) + right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) + area_val = _dock_area_to_int(cached.get("area", self.dockWidgetArea(self.art_dock)), right_i) + geom = cached.get("geometry", self.art_dock.saveGeometry()) + self.settings.setValue(f"{base}/visible", visible) + self.settings.setValue(f"{base}/floating", floating) + self.settings.setValue(f"{base}/area", area_val) + self.settings.setValue(f"{base}/geometry", geom) + except Exception: + pass try: self._save_pre_tab_groups_to_settings(self._capture_pre_tab_groups_state()) except Exception: @@ -1653,6 +2019,15 @@ def _restore_full_main_dock_state(self) -> None: def _restore_panel_layout_state(self) -> None: """Restore popup/artifact panel layout from the previous app session.""" + if self._use_pg_dockarea_pre_layout: + self._is_restoring_panel_layout = True + try: + self._setup_section_popups() + self._restore_pre_dockarea_layout_state() + finally: + self._is_restoring_panel_layout = False + return + self._is_restoring_panel_layout = True for key, dock in self._section_docks.items(): base = f"pre_section_docks/{key}" @@ -1694,28 +2069,29 @@ def _restore_panel_layout_state(self) -> None: except Exception: pass - try: - base = "pre_artifact_dock_state" - visible = _to_bool(self.settings.value(f"{base}/visible", False), False) - floating = _to_bool(self.settings.value(f"{base}/floating", False), False) - area_val = self.settings.value( - f"{base}/area", - _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2), - ) - area = self._dock_area_from_settings(area_val, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) - geom = self._to_qbytearray(self.settings.value(f"{base}/geometry", None)) + if isinstance(self.art_dock, QtWidgets.QDockWidget): + try: + base = "pre_artifact_dock_state" + visible = _to_bool(self.settings.value(f"{base}/visible", False), False) + floating = _to_bool(self.settings.value(f"{base}/floating", False), False) + area_val = self.settings.value( + f"{base}/area", + _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2), + ) + area = self._dock_area_from_settings(area_val, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) + geom = self._to_qbytearray(self.settings.value(f"{base}/geometry", None)) - if bool(floating): - self.art_dock.setFloating(True) - else: - self.addDockWidget(area, self.art_dock) - self.art_dock.setFloating(False) + if bool(floating): + self.art_dock.setFloating(True) + else: + self.addDockWidget(area, self.art_dock) + self.art_dock.setFloating(False) - if geom is not None and not geom.isEmpty(): - self.art_dock.restoreGeometry(geom) - self.art_dock.setVisible(bool(visible)) - except Exception: - pass + if geom is not None and not geom.isEmpty(): + self.art_dock.restoreGeometry(geom) + self.art_dock.setVisible(bool(visible)) + except Exception: + pass self._sync_section_button_states_from_docks() self._restore_pre_tab_groups_fallback(self._load_pre_tab_groups_from_settings()) @@ -1723,11 +2099,17 @@ def _restore_panel_layout_state(self) -> None: def _has_saved_pre_layout_state(self) -> bool: try: + if self._use_pg_dockarea_pre_layout: + if self.settings.contains(_PRE_DOCKAREA_STATE_KEY) or self.settings.contains(_PRE_DOCKAREA_VISIBLE_KEY): + return True if self.settings.contains(_PRE_DOCK_STATE_KEY): return True if self.settings.contains("pre_artifact_dock_state/visible"): return True - for key in self._section_docks.keys(): + keys = list(self._section_docks.keys()) + if self._use_pg_dockarea_pre_layout and self._pre_dockarea_docks: + keys = [k for k in self._pre_dockarea_docks.keys() if k != "artifacts_list"] + for key in keys: if self.settings.contains(f"pre_section_docks/{key}/visible"): return True except Exception: @@ -1753,6 +2135,12 @@ def _restore_settings(self) -> None: if last_dir and os.path.isdir(last_dir): self.file_panel.set_path_hint(last_dir) + try: + app_theme = self.settings.value("app_theme_mode", "dark", type=str) + except Exception: + app_theme = "dark" + self._apply_app_theme(app_theme, persist=False) + # restore params try: raw = self.settings.value("params_json", "", type=str) @@ -1782,7 +2170,8 @@ def _restore_settings(self) -> None: except Exception: pass try: - plot_bg = self.settings.value("pre_plot_background", "dark", type=str) + default_bg = "white" if self._app_theme_mode == "light" else "dark" + plot_bg = self.settings.value("pre_plot_background", default_bg, type=str) except Exception: plot_bg = "dark" try: @@ -1803,7 +2192,12 @@ def _restore_settings(self) -> None: splitter_sizes = self.settings.value("splitter_sizes", None) if splitter_sizes and hasattr(splitter_sizes, "__len__"): vals = [int(x) for x in splitter_sizes] - if len(vals) >= 3: + if self._use_pg_dockarea_pre_layout: + if len(vals) >= 3: + self.pre_splitter.setSizes(vals[:3]) + elif len(vals) == 2: + self.pre_splitter.setSizes([vals[0], vals[1], 520]) + elif len(vals) >= 3: left = max(260, vals[0]) center = max(640, vals[1] + vals[2]) self.pre_splitter.setSizes([left, center]) @@ -1835,7 +2229,12 @@ def _restore_settings(self) -> None: splitter_sizes = self.settings.value("splitter_sizes", None) if splitter_sizes and hasattr(splitter_sizes, "__len__"): vals = [int(x) for x in splitter_sizes] - if len(vals) >= 3: + if self._use_pg_dockarea_pre_layout: + if len(vals) >= 3: + self.pre_splitter.setSizes(vals[:3]) + elif len(vals) == 2: + self.pre_splitter.setSizes([vals[0], vals[1], 520]) + elif len(vals) >= 3: # Migrate old 3-pane [left, center, right] into [left, center+right]. left = max(260, vals[0]) center = max(640, vals[1] + vals[2]) @@ -1894,6 +2293,10 @@ def _save_settings(self) -> None: self.settings.setValue("pre_plot_grid", bool(self.plots.plot_grid_visible())) except Exception: pass + try: + self.settings.setValue("app_theme_mode", str(self._app_theme_mode)) + except Exception: + pass try: self.settings.setValue("pre_data_panel_visible", bool(self.file_panel.isVisible())) @@ -2032,6 +2435,18 @@ def _add_files(self, paths: List[str]) -> None: self.file_panel.add_file(p) self._show_status_message(f"Loaded: {os.path.basename(p)}", 5000) except Exception as e: + loaded_from_processed: Optional[LoadedDoricFile] = None + ext = os.path.splitext(p)[1].lower() + if ext in (".h5", ".hdf5"): + loaded_from_processed = self._load_processed_h5_as_pre_file(p) + if loaded_from_processed is not None: + self._loaded_files[p] = loaded_from_processed + self.file_panel.add_file(p) + self._show_status_message( + f"Loaded processed H5 as preprocessing source: {os.path.basename(p)}", + 6000, + ) + continue QtWidgets.QMessageBox.critical(self, "Load error", f"Failed to load:\n{p}\n\n{e}") self._push_recent_preprocessing_files(paths) @@ -2056,6 +2471,10 @@ def _focus_data_browser(self) -> None: self.file_panel.list_files.setFocus() def _hide_preprocessing_popups_for_tab_switch(self) -> None: + if self._use_pg_dockarea_pre_layout: + # DockArea lives inside the Preprocessing tab widget; avoid costly hide/remove + # churn during main-tab switches for smoother transitions. + return if self._pre_popups_hidden_by_tab_switch: # Re-apply hide in case late dock events re-show a preprocessing dock. self._enforce_preprocessing_popups_hidden() @@ -2107,6 +2526,14 @@ def _enforce_preprocessing_popups_hidden(self) -> None: Hard-hide preprocessing docks/dialogs while Post Processing is active. This protects against late Qt dock re-show events when dock tab stacks are rebuilt. """ + if self._use_pg_dockarea_pre_layout: + if isinstance(self.art_dock, QtWidgets.QDockWidget): + try: + self.art_dock.hide() + self.removeDockWidget(self.art_dock) + except Exception: + pass + return if hasattr(self, "tabs") and self.tabs.currentWidget() is self.pre_tab: return self._suspend_panel_layout_persistence = True @@ -2132,10 +2559,14 @@ def _enforce_postprocessing_popups_hidden(self) -> None: """Hide post-processing docks while Preprocessing is active.""" if hasattr(self, "tabs") and self.tabs.currentWidget() is not self.pre_tab: return - self._hide_dock_widgets(self.getPostDockWidgets(), remove=True) + remove_post = not self._force_fixed_dock_layouts + self._hide_dock_widgets(self.getPostDockWidgets(), remove=remove_post) def _store_pre_main_dock_snapshot(self) -> None: """Persist the current preprocessing dock arrangement.""" + if self._use_pg_dockarea_pre_layout: + self._save_panel_layout_state() + return try: state = self.captureDockSnapshotForTab("pre") if state is not None and not state.isEmpty(): @@ -2150,6 +2581,9 @@ def _persist_hidden_preprocessing_layout_state(self) -> None: Persist cached preprocessing layout while preprocessing docks are hidden during a main-tab switch. """ + if self._use_pg_dockarea_pre_layout: + self._save_panel_layout_state() + return if not self._pre_popups_hidden_by_tab_switch: return right_i = _dock_area_to_int(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, 2) @@ -2192,6 +2626,9 @@ def _persist_hidden_preprocessing_layout_state(self) -> None: pass def _apply_pre_main_dock_snapshot_if_needed(self) -> None: + if self._use_pg_dockarea_pre_layout: + self._pre_snapshot_applied = True + return if self._force_fixed_dock_layouts: self._pre_snapshot_applied = True return @@ -2232,6 +2669,11 @@ def _apply_pre_main_dock_snapshot_if_needed(self) -> None: def _apply_pre_default_layout_if_missing(self) -> None: """Set a sensible preprocessing dock layout when no saved layout exists.""" + if self._use_pg_dockarea_pre_layout: + self._setup_section_popups() + self._restore_pre_dockarea_layout_state() + self._save_panel_layout_state() + return try: if self.settings.contains(_PRE_DOCK_STATE_KEY): return @@ -2316,6 +2758,13 @@ def _apply_pre_fixed_layout(self) -> None: - Right column bottom: Export - Bottom strip: Configuration """ + if self._use_pg_dockarea_pre_layout: + self._setup_section_popups() + if not self._pre_dockarea_fixed_layout_applied: + self._apply_pre_fixed_dockarea_layout() + else: + self._sync_section_button_states_from_docks() + return if not self._section_docks: return @@ -2414,6 +2863,8 @@ def _apply_pre_fixed_layout(self) -> None: self._suspend_panel_layout_persistence = False def _restore_preprocessing_popups_after_tab_switch(self) -> None: + if self._use_pg_dockarea_pre_layout: + return if not self._pre_popups_hidden_by_tab_switch: return @@ -2533,8 +2984,41 @@ def _ensure_fullscreen() -> None: except Exception: pass + def _apply_fixed_post_layout_deferred(self) -> None: + if not hasattr(self, "tabs") or self.tabs.currentWidget() is not self.post_tab: + return + try: + self.post_tab.ensure_section_popups_initialized() + if hasattr(self.post_tab, "apply_fixed_default_layout"): + self.post_tab.apply_fixed_default_layout() + except Exception: + _LOG.exception("Failed to apply fixed post layout on tab switch") + return + try: + self._enforce_only_tab_docks_visible("post") + except Exception: + pass + + def _enforce_fixed_layout_for_active_tab(self) -> None: + if not self._force_fixed_dock_layouts or not hasattr(self, "tabs"): + return + try: + current = self.tabs.currentWidget() + except Exception: + return + try: + if current is self.pre_tab: + self._apply_pre_fixed_layout() + self._enforce_only_tab_docks_visible("pre") + elif current is self.post_tab: + self._apply_fixed_post_layout_deferred() + self._enforce_only_tab_docks_visible("post") + except Exception: + _LOG.exception("Failed to enforce fixed layout for active tab") + def _on_main_tab_changed(self, index: int) -> None: if self._handling_main_tab_change: + self._pending_main_tab_index = int(index) return self._handling_main_tab_change = True was_fullscreen = bool(self.isFullScreen()) @@ -2556,12 +3040,9 @@ def _on_main_tab_changed(self, index: int) -> None: self._hide_preprocessing_popups_for_tab_switch() self._enforce_preprocessing_popups_hidden() QtCore.QTimer.singleShot(0, self._enforce_preprocessing_popups_hidden) - try: - self.post_tab.ensure_section_popups_initialized() - if hasattr(self.post_tab, "apply_fixed_default_layout"): - self.post_tab.apply_fixed_default_layout() - except Exception: - _LOG.exception("Failed to apply fixed post layout on tab switch") + self._apply_fixed_post_layout_deferred() + QtCore.QTimer.singleShot(0, self._apply_fixed_post_layout_deferred) + QtCore.QTimer.singleShot(120, self._apply_fixed_post_layout_deferred) self._enforce_only_tab_docks_visible("post") try: self._save_panel_layout_state() @@ -2577,10 +3058,11 @@ def _on_main_tab_changed(self, index: int) -> None: self._persist_hidden_preprocessing_layout_state() except Exception: pass - try: - self.post_tab.persist_layout_state_snapshot() - except Exception: - pass + if current is self.pre_tab: + try: + self.post_tab.persist_layout_state_snapshot() + except Exception: + pass self._save_settings() self._save_panel_config_json() except Exception: @@ -2612,6 +3094,13 @@ def _on_main_tab_changed(self, index: int) -> None: finally: self._restore_window_state_after_tab_switch(was_fullscreen, was_maximized) self._handling_main_tab_change = False + if self._force_fixed_dock_layouts: + QtCore.QTimer.singleShot(0, self._enforce_fixed_layout_for_active_tab) + QtCore.QTimer.singleShot(80, self._enforce_fixed_layout_for_active_tab) + if self._pending_main_tab_index is not None: + pending = int(self._pending_main_tab_index) + self._pending_main_tab_index = None + QtCore.QTimer.singleShot(0, lambda idx=pending: self._on_main_tab_changed(idx)) def _on_artifact_overlay_toggled(self, visible: bool) -> None: self.plots.set_artifact_overlay_visible(bool(visible)) @@ -2621,6 +3110,51 @@ def _on_artifact_thresholds_toggled(self, visible: bool) -> None: self.plots.set_artifact_thresholds_visible(bool(visible)) self._save_settings() + def _normalize_app_theme_mode(self, value: object) -> str: + mode = str(value or "").strip().lower() + if mode in {"light", "white", "l", "w"}: + return "light" + return "dark" + + def _selected_app_theme_mode(self) -> str: + if hasattr(self, "act_app_theme_light") and self.act_app_theme_light.isChecked(): + return "light" + return "dark" + + def _apply_app_theme(self, theme_mode: object, persist: bool = True) -> None: + mode = self._normalize_app_theme_mode(theme_mode) + self._app_theme_mode = mode + + if hasattr(self, "act_app_theme_dark"): + self.act_app_theme_dark.blockSignals(True) + self.act_app_theme_dark.setChecked(mode == "dark") + self.act_app_theme_dark.blockSignals(False) + if hasattr(self, "act_app_theme_light"): + self.act_app_theme_light.blockSignals(True) + self.act_app_theme_light.setChecked(mode == "light") + self.act_app_theme_light.blockSignals(False) + + try: + self.setStyleSheet(app_qss(mode)) + except Exception: + pass + + pre_bg = "white" if mode == "light" else "dark" + pre_grid = self.act_plot_grid.isChecked() if hasattr(self, "act_plot_grid") else True + self._apply_pre_plot_style(pre_bg, pre_grid, persist=False) + + try: + if hasattr(self.post_tab, "set_app_theme_mode"): + self.post_tab.set_app_theme_mode(mode) + except Exception: + pass + + if persist: + self._save_settings() + + def _on_app_theme_changed(self, *_args) -> None: + self._apply_app_theme(self._selected_app_theme_mode(), persist=True) + def _normalize_pre_plot_background(self, value: object) -> str: mode = str(value or "").strip().lower() if mode in {"white", "light", "w"}: @@ -3407,12 +3941,31 @@ def _contains(target: Tuple[float, float], arr: List[Tuple[float, float]]) -> bo self._trigger_preview() def _toggle_artifacts_panel(self) -> None: - if self.art_dock.isVisible(): - self.art_dock.setVisible(False) + if self._use_pg_dockarea_pre_layout: + self._setup_section_popups() + dock = self._pre_dockarea_dock("artifacts_list") + if dock is None: + return + if dock.isVisible(): + dock.hide() + else: + dock.show() + try: + dock.raiseDock() + except Exception: + pass + self._last_opened_section = "artifacts_list" + self._sync_section_button_states_from_docks() self._save_panel_layout_state() return - self.artifact_panel.show() - self.art_dock.setVisible(True) + + if isinstance(self.art_dock, QtWidgets.QDockWidget): + if self.art_dock.isVisible(): + self.art_dock.setVisible(False) + self._save_panel_layout_state() + return + self.artifact_panel.show() + self.art_dock.setVisible(True) self._save_panel_layout_state() # ---------------- Metadata ---------------- @@ -3539,8 +4092,8 @@ def _export_one(proc: ProcessedTrial, suffix: str = "") -> None: stem = f"{stem}_{suffix}" csv_path = os.path.join(out_dir, f"{stem}.csv") h5_path = os.path.join(out_dir, f"{stem}.h5") - export_processed_csv(csv_path, proc, metadata=meta) - export_processed_h5(h5_path, proc, metadata=meta) + export_processed_csv(csv_path, proc, metadata=meta, selection=export_selection) + export_processed_h5(h5_path, proc, metadata=meta, selection=export_selection) n_total += 1 try: @@ -3710,6 +4263,7 @@ def _can_accept_drop(self, paths: List[str]) -> bool: def _handle_drop(self, paths: List[str]) -> None: doric_paths: List[str] = [] processed: List[ProcessedTrial] = [] + pre_active = bool(hasattr(self, "tabs") and self.tabs.currentWidget() is self.pre_tab) for p in paths: if not p: @@ -3724,6 +4278,11 @@ def _handle_drop(self, paths: List[str]) -> None: processed.append(trial) continue if ext in (".h5", ".hdf5"): + if pre_active: + # On preprocessing tab, treat dropped H5 as a raw-input candidate. + # _add_files() will load Doric H5 natively and falls back to processed H5 import. + doric_paths.append(p) + continue trial = self._load_processed_h5(p) if trial is not None: processed.append(trial) @@ -3770,7 +4329,24 @@ def _find_col(names: List[str]) -> Optional[int]: return None time_idx = header.index("time") if "time" in header else None - output_idx = _find_col(["dff", "z-score", "zscore", "z score", "output", "raw_signal", "raw_465"]) + output_idx = _find_col([ + "dff", + "z-score", + "zscore", + "z score", + "output", + "raw_signal", + "raw_465", + "raw", + "isobestic", + "raw_405", + "reference", + "reference_405", + "ref", + "dio", + "baseline_465", + "baseline_405", + ]) has_header = time_idx is not None and output_idx is not None raw_idx = _find_col(["raw", "raw_465", "signal", "signal_465"]) if has_header else None @@ -3873,6 +4449,20 @@ def _load_processed_h5(self, path: str) -> Optional[ProcessedTrial]: out = np.asarray(g["z-score"][()], float) elif "zscore" in g: out = np.asarray(g["zscore"][()], float) + elif "raw_465" in g: + out = np.asarray(g["raw_465"][()], float) + elif "raw" in g: + out = np.asarray(g["raw"][()], float) + elif "raw_405" in g: + out = np.asarray(g["raw_405"][()], float) + elif "isobestic" in g: + out = np.asarray(g["isobestic"][()], float) + elif "dio" in g: + out = np.asarray(g["dio"][()], float) + elif "baseline_465" in g: + out = np.asarray(g["baseline_465"][()], float) + elif "baseline_405" in g: + out = np.asarray(g["baseline_405"][()], float) else: return None raw_sig = np.asarray(g["raw_465"][()], float) if "raw_465" in g else ( @@ -3912,6 +4502,66 @@ def _load_processed_h5(self, path: str) -> Optional[ProcessedTrial]: fs_used=fs_used, ) + def _processed_trial_to_loaded_doric(self, processed: ProcessedTrial) -> Optional[LoadedDoricFile]: + t = np.asarray(processed.time if processed.time is not None else np.array([], float), float) + if t.size < 2: + return None + + raw_sig = np.asarray( + processed.raw_signal if processed.raw_signal is not None else np.array([], float), + float, + ) + raw_ref = np.asarray( + processed.raw_reference if processed.raw_reference is not None else np.array([], float), + float, + ) + out = np.asarray(processed.output if processed.output is not None else np.array([], float), float) + + if raw_sig.size != t.size: + if out.size == t.size: + raw_sig = out.copy() + else: + return None + if raw_ref.size != t.size or not np.isfinite(raw_ref).any(): + # Keep preprocessing numerically stable even if original H5 has no raw_405. + raw_ref = raw_sig.copy() + + if not np.isfinite(raw_sig).any(): + return None + + channel = str(processed.channel_id or "AIN01").strip() or "AIN01" + dio_map: Dict[str, np.ndarray] = {} + dio_time_map: Dict[str, np.ndarray] = {} + digital_time: Optional[np.ndarray] = None + dio = np.asarray(processed.dio, float) if processed.dio is not None else np.array([], float) + if dio.size == t.size: + dio_name = str(processed.dio_name or "DIO_import").strip() or "DIO_import" + digital_time = t.copy() + dio_map[dio_name] = dio.copy() + dio_time_map[dio_name] = t.copy() + + return LoadedDoricFile( + path=str(processed.path or ""), + channels=[channel], + time_by_channel={channel: t.copy()}, + signal_by_channel={channel: raw_sig.copy()}, + reference_by_channel={channel: raw_ref.copy()}, + digital_time=digital_time, + digital_by_name={k: v.copy() for k, v in dio_map.items()}, + trigger_time_by_name={k: v.copy() for k, v in dio_time_map.items()}, + trigger_by_name={k: v.copy() for k, v in dio_map.items()}, + ) + + def _load_processed_h5_as_pre_file(self, path: str) -> Optional[LoadedDoricFile]: + processed = self._load_processed_h5(path) + if processed is None: + return None + loaded = self._processed_trial_to_loaded_doric(processed) + if loaded is None: + return None + loaded.path = path + return loaded + def closeEvent(self, event): try: self.post_tab.mark_app_closing() diff --git a/pyBer/styles.py b/pyBer/styles.py index 93e6ddb..d570b89 100644 --- a/pyBer/styles.py +++ b/pyBer/styles.py @@ -159,8 +159,8 @@ QPushButton[class="compactPrimary"], QPushButton[class="compactPrimarySmall"], QPushButton[class="bluePrimarySmall"] { - background: #2680eb; - border: 1px solid #378ef0; + background: #7d4df2; + border: 1px solid #9064ff; color: #ffffff; font-weight: 700; } @@ -181,15 +181,15 @@ QPushButton[class="compactPrimary"]:hover, QPushButton[class="compactPrimarySmall"]:hover, QPushButton[class="bluePrimarySmall"]:hover { - background: #378ef0; - border: 1px solid #4b9df8; + background: #8d60ff; + border: 1px solid #9f79ff; } QPushButton[class="compactPrimary"]:pressed, QPushButton[class="compactPrimarySmall"]:pressed, QPushButton[class="bluePrimarySmall"]:pressed { - background: #1473e6; - border: 1px solid #2680eb; + background: #6f3de9; + border: 1px solid #8253f3; } QPushButton[class="blueSecondarySmall"] { @@ -198,24 +198,24 @@ font-weight: 600; font-size: 8.2pt; min-height: 18px; - background: #2b303b; - border: 1px solid #4a5163; + background: #312a42; + border: 1px solid #5f4a89; color: #eef2f7; } QPushButton[class="blueSecondarySmall"]:hover { - background: #343a48; - border: 1px solid #5b6480; + background: #3b3251; + border: 1px solid #7059a0; } QPushButton[class="blueSecondarySmall"]:pressed { - background: #232833; + background: #2a2438; } QPushButton[class="blueSecondarySmall"]:checked, QPushButton[class="sectionButton"]:checked { - background: #2680eb; - border: 1px solid #378ef0; + background: #7d4df2; + border: 1px solid #9064ff; color: #ffffff; } @@ -356,3 +356,74 @@ padding: 4px 6px; } """ + + +_LIGHT_COLOR_MAP = { + "#121722": "#ffffff", + "#1473e6": "#1f6fce", + "#1b2029": "#ffffff", + "#1d4f80": "#2f7fd8", + "#1f2229": "#f4f6fb", + "#1f242e": "#ffffff", + "#20242d": "#ffffff", + "#232833": "#d7dfeb", + "#242a34": "#f6f8fc", + "#252a33": "#eef2f8", + "#262b35": "#ffffff", + "#2680eb": "#2f7fd8", + "#2b303b": "#e8eef6", + "#2d3340": "#e1e8f2", + "#2d3442": "#f3f6fb", + "#2f3543": "#eef3fa", + "#313746": "#c8d2e0", + "#343a47": "#d2dae6", + "#343a48": "#dde6f1", + "#363c4a": "#cad3e1", + "#373d4a": "#d4dce8", + "#378ef0": "#2f7fd8", + "#3a4050": "#c2ccda", + "#3b4150": "#c5cedc", + "#3f4758": "#bcc8d8", + "#41495a": "#bcc8da", + "#4a5163": "#adb8c9", + "#4b9df8": "#5fa8f5", + "#4d5568": "#aab6c8", + "#5a6274": "#95a3b7", + "#5b6480": "#9eadc4", + "#5f4a89": "#b9a9df", + "#6f3de9": "#8f69d9", + "#7059a0": "#b8a8da", + "#7d4df2": "#8f69d9", + "#8253f3": "#9d7fe0", + "#858f9f": "#8c98ab", + "#8d60ff": "#9d7fe0", + "#9064ff": "#9d7fe0", + "#9f79ff": "#b09ae8", + "#aeb6c5": "#5d6a7d", + "#2a2438": "#ebe4fa", + "#312a42": "#e7e0f8", + "#3b3251": "#ddd3f3", + "#bcc5d6": "#667489", + "#ecf0f6": "#243247", + "#eef2f7": "#1f2a37", + "#f3f5f8": "#1f2a37", + "#ffffff": "#ffffff", +} + + +def _build_light_qss(dark_qss: str) -> str: + light = str(dark_qss) + # Replace longer tokens first to avoid accidental partial replacement collisions. + for dark, bright in sorted(_LIGHT_COLOR_MAP.items(), key=lambda kv: len(kv[0]), reverse=True): + light = light.replace(dark, bright) + return light + + +APP_QSS_LIGHT = _build_light_qss(APP_QSS) + + +def app_qss(theme_mode: object) -> str: + mode = str(theme_mode or "").strip().lower() + if mode in {"light", "white", "l", "w"}: + return APP_QSS_LIGHT + return APP_QSS From d66d1bcbf490254c2cd026d1e371777e148910e0 Mon Sep 17 00:00:00 2001 From: andrianj Date: Mon, 9 Mar 2026 15:29:21 +0100 Subject: [PATCH 18/28] export better --- panel_layout.json | 6 +- .../gui_postprocessing.cpython-311.pyc | Bin 551653 -> 553044 bytes .../gui_preprocessing.cpython-311.pyc | Bin 215923 -> 217305 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 298534 -> 301639 bytes pyBer/gui_postprocessing.py | 34 ++++++++++ pyBer/gui_preprocessing.py | 38 +++++++++-- pyBer/main.py | 60 +++++++++++++++++- 7 files changed, 129 insertions(+), 9 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index 5480732..c00d374 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -1,17 +1,17 @@ { "version": 3, "pre": { - "pre_data_panel_visible": true, + "pre_data_panel_visible": false, "pre_splitter_sizes": [ 0, - 1030, + 1450, 439 ], "pre_main_dock_state": "", "tab_groups": [], "sections": { "artifacts": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index 92870fda73dc5b1915614ff926509d7bb820eb64..d69d98ee5b6d6f631f57517647013de301e637cd 100644 GIT binary patch delta 28925 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 VjBR+?pWy24>84JSJtsLf{vVaq9^wE1 delta 28244 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 delta 6772 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 delta 24497 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 HYrX#;hYk{$ diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 56600e9..a157a7f 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -1928,6 +1928,40 @@ def _ignore_double_click(event: QtGui.QMouseEvent) -> None: label._pyber_fixed_interaction_lock = True except Exception: pass + self._style_pg_dock_label_buttons(label) + + def _style_pg_dock_label_buttons(self, label: object) -> None: + if label is None: + return + try: + buttons = label.findChildren(QtWidgets.QToolButton) + except Exception: + buttons = [] + for btn in buttons: + try: + btn.setText("×") + btn.setIcon(QtGui.QIcon()) + btn.setAutoRaise(False) + btn.setFixedSize(13, 13) + btn.setToolTip("Close") + btn.setStyleSheet( + "QToolButton {" + " background: #222733;" + " color: #d7deea;" + " border: 1px solid #5a6274;" + " border-radius: 6px;" + " padding: 0px;" + " font-size: 9pt;" + " font-weight: 700;" + " }" + "QToolButton:hover {" + " background: #343a48;" + " color: #ffffff;" + " border: 1px solid #7b8498;" + " }" + ) + except Exception: + continue def _dockarea_active_key(self) -> Optional[str]: active = self._last_opened_section if self._last_opened_section in self._dockarea_docks else None diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index c716491..90d6c54 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -1666,8 +1666,8 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: self.chk_export_baseline_ref = QtWidgets.QCheckBox("Baseline 405") self.chk_export_baseline_ref.setChecked(True) - export_group = QtWidgets.QGroupBox() - export_form = QtWidgets.QFormLayout(export_group) + self.export_options_group = QtWidgets.QGroupBox("Export fields") + export_form = QtWidgets.QFormLayout(self.export_options_group) export_form.setContentsMargins(6, 6, 6, 6) export_form.addRow(self._label_with_help("Export fields", "export_selection")) export_checks = QtWidgets.QGridLayout() @@ -1695,13 +1695,12 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: qc_grid.addWidget(self.btn_metadata, 3, 0) qc_grid.addWidget(self.btn_save_config, 3, 1) qc_grid.addWidget(self.btn_load_config, 4, 1) - qc_grid.addWidget(export_group, 5, 0, 1, 2) qc_grid.setColumnStretch(0, 1) qc_grid.setColumnStretch(1, 1) self.lbl_fs = QtWidgets.QLabel("FS: -") self.lbl_fs.setProperty("class", "hint") - qc_grid.addWidget(self.lbl_fs, 6, 0, 1, 2) + qc_grid.addWidget(self.lbl_fs, 5, 0, 1, 2) # Cards self.card_artifacts = CollapsibleSection("Artifacts") @@ -1910,6 +1909,15 @@ def emit_noargs(*_args) -> None: self.combo_smoothing.currentIndexChanged.connect(lambda *_: self._update_smoothing_controls()) self.cb_invert.stateChanged.connect(emit_noargs) self.cb_show_artifact_overlay.toggled.connect(lambda v: self.artifactOverlayToggled.emit(bool(v))) + for cb in ( + self.chk_export_raw, + self.chk_export_iso, + self.chk_export_output, + self.chk_export_dio, + self.chk_export_baseline_sig, + self.chk_export_baseline_ref, + ): + cb.toggled.connect(emit_noargs) def _toggle_advanced_baseline(self) -> None: """Toggle visibility of baseline advanced parameters.""" @@ -1937,6 +1945,28 @@ def export_selection(self) -> ExportSelection: baseline_ref=self.chk_export_baseline_ref.isChecked(), ) + def export_selection_summary(self) -> str: + selection = self.export_selection() + parts: List[str] = [] + if selection.output: + parts.append("output") + if selection.dio: + parts.append("DIO") + if selection.raw: + parts.append("raw") + if selection.isobestic: + parts.append("isobestic") + if selection.baseline_sig or selection.baseline_ref: + if selection.baseline_sig and selection.baseline_ref: + parts.append("baselines") + elif selection.baseline_sig: + parts.append("baseline465") + else: + parts.append("baseline405") + if not parts: + parts.append("time only") + return "CSV/H5: " + " + ".join(parts) + def set_export_selection(self, selection: ExportSelection) -> None: selection = selection if isinstance(selection, ExportSelection) else ExportSelection() self.chk_export_raw.setChecked(bool(selection.raw)) diff --git a/pyBer/main.py b/pyBer/main.py index b287ceb..f9a4419 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -609,6 +609,7 @@ def _build_ui(self) -> None: # Parameters: changes and actions self.param_panel.paramsChanged.connect(self._on_params_changed) + self.param_panel.paramsChanged.connect(self._update_export_summary_label) self.param_panel.previewRequested.connect(self._trigger_preview) self.param_panel.metadataRequested.connect(self._edit_metadata_for_current) self.param_panel.exportRequested.connect(self._export_selected_or_all) @@ -789,6 +790,40 @@ def _ignore_double_click(event: QtGui.QMouseEvent) -> None: label._pyber_fixed_interaction_lock = True except Exception: pass + self._style_pg_dock_label_buttons(label) + + def _style_pg_dock_label_buttons(self, label: object) -> None: + if label is None: + return + try: + buttons = label.findChildren(QtWidgets.QToolButton) + except Exception: + buttons = [] + for btn in buttons: + try: + btn.setText("×") + btn.setIcon(QtGui.QIcon()) + btn.setAutoRaise(False) + btn.setFixedSize(13, 13) + btn.setToolTip("Close") + btn.setStyleSheet( + "QToolButton {" + " background: #222733;" + " color: #d7deea;" + " border: 1px solid #5a6274;" + " border-radius: 6px;" + " padding: 0px;" + " font-size: 9pt;" + " font-weight: 700;" + " }" + "QToolButton:hover {" + " background: #343a48;" + " color: #ffffff;" + " border: 1px solid #7b8498;" + " }" + ) + except Exception: + continue def _arrange_pre_dockarea_default(self) -> None: if self._pre_dockarea is None: @@ -980,15 +1015,23 @@ def _build_export_actions_widget(self) -> QtWidgets.QWidget: v = QtWidgets.QVBoxLayout(panel) v.setContentsMargins(8, 8, 8, 8) v.setSpacing(6) + self.lbl_export_summary = QtWidgets.QLabel("") + self.lbl_export_summary.setWordWrap(True) + self.lbl_export_summary.setProperty("class", "hint") + v.addWidget(self.lbl_export_summary) self.param_panel.btn_export.setProperty("class", "bluePrimarySmall") v.addWidget(self.param_panel.btn_export) v.addStretch(1) + self._update_export_summary_label() return panel def _build_config_actions_widget(self) -> QtWidgets.QWidget: panel = QtWidgets.QWidget() - row = QtWidgets.QHBoxLayout(panel) - row.setContentsMargins(8, 8, 8, 8) + layout = QtWidgets.QVBoxLayout(panel) + layout.setContentsMargins(8, 8, 8, 8) + layout.setSpacing(8) + row = QtWidgets.QHBoxLayout() + row.setContentsMargins(0, 0, 0, 0) row.setSpacing(6) self.param_panel.btn_metadata.setProperty("class", "blueSecondarySmall") self.param_panel.btn_advanced.setProperty("class", "blueSecondarySmall") @@ -1004,8 +1047,20 @@ def _build_config_actions_widget(self) -> QtWidgets.QWidget: btn.setMinimumWidth(90) btn.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) row.addWidget(btn) + layout.addLayout(row) + if hasattr(self.param_panel, "export_options_group"): + self.param_panel.export_options_group.setSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Fixed, + ) + layout.addWidget(self.param_panel.export_options_group) + layout.addStretch(1) return panel + def _update_export_summary_label(self) -> None: + if hasattr(self, "lbl_export_summary") and self.lbl_export_summary is not None: + self.lbl_export_summary.setText(self.param_panel.export_selection_summary()) + def _set_section_button_checked(self, key: str, checked: bool) -> None: btn = self._section_buttons.get(key) if btn is None: @@ -4063,6 +4118,7 @@ def _export_selected_or_all(self) -> None: self._remember_export_dir(out_dir, origin_dir) params = self.param_panel.get_params() + export_selection = self.param_panel.export_selection() # Process/export each selected file, for the currently selected channel. n_total = 0 From d8b25e4d38c0f5232d321a0497a21e0fcd9bd88c Mon Sep 17 00:00:00 2001 From: Snapyou2 Date: Mon, 9 Mar 2026 15:31:47 +0100 Subject: [PATCH 19/28] fixed gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 182af94..fb0e63b 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ pyBer/__pycache__/analysis_core.cpython-311.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc pyBer/__pycache__/gui_preprocessing.cpython-38.pyc +pyBer/__pycache__ +panel_layout.json \ No newline at end of file From 4376626871cf086f7f513211f79dcda2317b7b76 Mon Sep 17 00:00:00 2001 From: Snapyou2 Date: Mon, 9 Mar 2026 15:34:48 +0100 Subject: [PATCH 20/28] Fixed gitignore --- .gitignore | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.gitignore b/.gitignore index fb0e63b..0ca72d7 100644 --- a/.gitignore +++ b/.gitignore @@ -24,17 +24,5 @@ pyBer/__pycache__/gui_postprocessing.cpython-311.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc pyBer/main.py -pyBer/__pycache__/analysis_core.cpython-311.pyc -pyBer/__pycache__/gui_postprocessing.cpython-38.pyc -pyBer/__pycache__/gui_postprocessing.cpython-311.pyc -pyBer/__pycache__/gui_preprocessing.cpython-311.pyc -pyBer/__pycache__/main.cpython-311.pyc -pyBer/__pycache__/styles.cpython-38.pyc -pyBer/__pycache__/styles.cpython-311.pyc -pyBer/__pycache__/analysis_core.cpython-38.pyc -pyBer/__pycache__/analysis_core.cpython-311.pyc -pyBer/__pycache__/gui_postprocessing.cpython-38.pyc -pyBer/__pycache__/gui_postprocessing.cpython-311.pyc -pyBer/__pycache__/gui_preprocessing.cpython-38.pyc pyBer/__pycache__ panel_layout.json \ No newline at end of file From 5fc0aed8c75f9542b793b1e1bf6905e92670a8e5 Mon Sep 17 00:00:00 2001 From: Snapyou2 Date: Mon, 9 Mar 2026 16:32:49 +0100 Subject: [PATCH 21/28] Performance improvements with dynamic downsampling + minor bugfixes --- .gitignore | 1 - panel_layout.json | 18 ++++---- pyBer/gui_preprocessing.py | 90 ++++++++++++++++++++++++++------------ pyBer/main.py | 3 +- 4 files changed, 72 insertions(+), 40 deletions(-) diff --git a/.gitignore b/.gitignore index 0ca72d7..da91c77 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,5 @@ pyBer/__pycache__/main.cpython-311.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc -pyBer/main.py pyBer/__pycache__ panel_layout.json \ No newline at end of file diff --git a/panel_layout.json b/panel_layout.json index c00d374..a27a6cf 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -3,39 +3,39 @@ "pre": { "pre_data_panel_visible": false, "pre_splitter_sizes": [ - 0, - 1450, - 439 + 211, + 211, + 210 ], "pre_main_dock_state": "", "tab_groups": [], "sections": { "artifacts": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" }, "filtering": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9Nf///gv///4L" }, "output": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" }, "export": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAAAAAWhAAADFAAAB38AAAOMAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADFAAAB38AAAOM" @@ -54,7 +54,7 @@ } }, "artifact": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIQAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIQ" diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 90d6c54..d9b9568 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -2576,30 +2576,59 @@ def _update_artifact_overlays( return tt = np.asarray(t, float) yy = np.asarray(raw_sig, float) - for idx, (a, b) in enumerate(regions, start=1): - region = pg.LinearRegionItem( - values=(float(a), float(b)), - movable=False, - brush=self._artifact_brush_default, - pen=self._artifact_pen_default, - ) - region.setZValue(8) - self.plot_raw.addItem(region) - self._artifact_regions.append(region) - self._artifact_region_bounds.append((float(a), float(b))) - - mask = (tt >= float(a)) & (tt <= float(b)) - if np.any(mask) and np.any(np.isfinite(yy[mask])): - y_pos = float(np.nanmax(yy[mask])) - else: - (y0, y1) = self.plot_raw.getViewBox().viewRange()[1] - y_pos = float(y1 - 0.05 * (y1 - y0)) - label = pg.TextItem(str(idx), color=(240, 240, 240), anchor=(0.5, 0.5)) - label.setPos(float((a + b) * 0.5), y_pos) - label.setZValue(9) - self.plot_raw.addItem(label) - self._artifact_labels.append(label) + # Optimization: use a single PathItem for many regions to avoid scene graph bloat. + if len(regions) > 25: + y0, y1 = -1e12, 1e12 # Large range for vertical bars + path = QtGui.QPainterPath() + for a, b in regions: + path.addRect(QtCore.QRectF(float(a), y0, float(b - a), y1 - y0)) + + path_item = pg.PathItem(path, pen=self._artifact_pen_default, brush=self._artifact_brush_default) + path_item.setZValue(8) + self.plot_raw.addItem(path_item) + self._artifact_regions.append(path_item) + self._artifact_region_bounds.extend(regions) + + # Limit labels to first 100 to avoid lag + for idx, (a, b) in enumerate(regions[:100], start=1): + mask = (tt >= float(a)) & (tt <= float(b)) + if np.any(mask): + y_pos = float(np.nanmax(yy[mask])) + else: + (vy0, vy1) = self.plot_raw.getViewBox().viewRange()[1] + y_pos = float(vy1 - 0.05 * (vy1 - vy0)) + + label = pg.TextItem(str(idx), color=(240, 240, 240), anchor=(0.5, 0.5)) + label.setPos(float((a + b) * 0.5), y_pos) + label.setZValue(9) + self.plot_raw.addItem(label) + self._artifact_labels.append(label) + else: + for idx, (a, b) in enumerate(regions, start=1): + region = pg.LinearRegionItem( + values=(float(a), float(b)), + movable=False, + brush=self._artifact_brush_default, + pen=self._artifact_pen_default, + ) + region.setZValue(8) + self.plot_raw.addItem(region) + self._artifact_regions.append(region) + self._artifact_region_bounds.append((float(a), float(b))) + + mask = (tt >= float(a)) & (tt <= float(b)) + if np.any(mask) and np.any(np.isfinite(yy[mask])): + y_pos = float(np.nanmax(yy[mask])) + else: + (y0, y1) = self.plot_raw.getViewBox().viewRange()[1] + y_pos = float(y1 - 0.05 * (y1 - y0)) + + label = pg.TextItem(str(idx), color=(240, 240, 240), anchor=(0.5, 0.5)) + label.setPos(float((a + b) * 0.5), y_pos) + label.setZValue(9) + self.plot_raw.addItem(label) + self._artifact_labels.append(label) def set_artifact_overlay_visible(self, visible: bool) -> None: self._artifact_overlay_visible = bool(visible) @@ -2633,12 +2662,15 @@ def _overlaps(a: Tuple[float, float], b: Tuple[float, float], tol: float = 1e-3) for item, bounds in zip(self._artifact_regions, self._artifact_region_bounds): is_sel = any(_overlaps(bounds, s) for s in selected) - if is_sel: - item.setBrush(self._artifact_brush_selected) - item.setPen(self._artifact_pen_selected) - else: - item.setBrush(self._artifact_brush_default) - item.setPen(self._artifact_pen_default) + brush = self._artifact_brush_selected if is_sel else self._artifact_brush_default + pen = self._artifact_pen_selected if is_sel else self._artifact_pen_default + + item.setBrush(brush) + if hasattr(item, "setPen"): + item.setPen(pen) + elif hasattr(item, "lines"): + for line in item.lines: + line.setPen(pen) def _set_dio(self, t: np.ndarray, dio: Optional[np.ndarray], name: str = "") -> None: if dio is None or np.asarray(dio).size == 0: diff --git a/pyBer/main.py b/pyBer/main.py index f9a4419..a44e4c6 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -419,6 +419,7 @@ def _build_ui(self) -> None: self._app_theme_group.addAction(self.act_app_theme_light) self.act_app_theme_dark.setChecked(True) self.btn_app_theme.setMenu(self.menu_app_theme) + self._status_bar.addPermanentWidget(QtWidgets.QLabel("App theme")) self._status_bar.addPermanentWidget(self.btn_app_theme) @@ -4654,7 +4655,7 @@ def closeEvent(self, event): def main() -> None: - pg.setConfigOptions(antialias=True) + pg.setConfigOptions(antialias=False) smoke_test = str(os.environ.get("PYBER_SMOKE_TEST", "")).strip().lower() in {"1", "true", "yes", "on"} app = QtWidgets.QApplication([]) icon_path = _pyber_icon_path() From bb4f91c73020d24dcf6baafbb32de8fb75fc335a Mon Sep 17 00:00:00 2001 From: andrianj Date: Mon, 9 Mar 2026 16:45:20 +0100 Subject: [PATCH 22/28] improved export of DIO channels to .csv, added option to export all channels, and added option to export only channels with data. Also added option to export DIO channels to .xlsx. Updated GUI to reflect these changes. Updated panel layout. Updated documentation. --- panel_layout.json | 6 +- .../gui_postprocessing.cpython-311.pyc | Bin 553044 -> 555763 bytes .../gui_postprocessing.cpython-38.pyc | Bin 213702 -> 214966 bytes .../gui_preprocessing.cpython-311.pyc | Bin 217305 -> 221399 bytes .../gui_preprocessing.cpython-38.pyc | Bin 91109 -> 91701 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 301639 -> 304587 bytes pyBer/gui_postprocessing.py | 68 +++++++++++++--- pyBer/gui_preprocessing.py | 47 ++++++++++- pyBer/main.py | 74 ++++++++++++++---- 9 files changed, 164 insertions(+), 31 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index c00d374..0b12738 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -3,9 +3,9 @@ "pre": { "pre_data_panel_visible": false, "pre_splitter_sizes": [ - 0, - 1450, - 439 + 210, + 210, + 210 ], "pre_main_dock_state": "", "tab_groups": [], diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index d69d98ee5b6d6f631f57517647013de301e637cd..fb0d6bce083e4535c79ea7df8168b880418c9439 100644 GIT binary patch delta 68371 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 delta 66751 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 delta 62140 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


    x3aOgoq62CyJN7^gm*ExQdCh zr8a09Px+totj*0{l)__|EuG%w77R~j;%KAw&WAs;%z`M_2k`X)G>6kIYFQ{e>(jnY znp7Mk@$hjGD7I&c6YPa^*!Bys!l(x%dvUxyN7_<64R`@WGF(3)b|>Gi57a7;jflr_ zVwX_4I117CbtXQ7%5F?*c5YgZO^bB8GalOLVv2V|Z>N;ocUKDpwvKJI5Fs|Ivs$~swLls?Ui-7E_AmRui zZE=DG_YX3&-V3tR*zO`<>(1b^_5crW9_VA*a>&_7Hms%u0rqZ2CEK^Jz7P*9809+s7OPzJu8<1JJNu2~5~n z#x85&R%^RS%Qc#jXgB490$pYT(1xCpQXwC7A2qq2Sl^x~?AyNrv)TZ&om zAcAF2v*{Dna}pU8yeZDY9H2QUh1Peiy5%qfzR^^knpsJZUE$!lQwtZAk-uNt`erV zPB^)wwz@{V8RU9Q3Aj^NCHqK2(q%;->Z_IVUG$B*((y+06#9?dl`|y37qT6;%JKy} zEd$MBe>I>VHsI&e0CxZ!1M_7f#m;44EJePx0Fyx3cjc|WPhh#W)~t$kGR<(u$@ZSV zuU+n-c4ODGTYI5U_J2gDlTgQj%MLW^0_0;?=Oa}Pgihn_zW`1-!qxgHl8*t9`)ZJf z%!s*b(3Y%5Y3yyc^V!)Eq#TWEB4p*b&}V{gLX`6tkLR>Wj&W9bN!3-T$z^PJ3P)z_ z7ebv(!nVH$O1}tH$-^V?lY1G|yzG&`<5?519Vscy{6d&>T1=$7wzR4EuH?VZ^on)< zJ_Ra3bVQ3f0mY3%B@=-l*TP$1M}3PlZkKOPoU_n##YtdH%QVR<0kXK;^6e;-{Y4!c z4^j9~zVWw_^Sb4El~v-cBZo`gKrvG!uRp$K2{z5S1Np>#@lNtkbXc>-vQEmV>(~$y z77Z#rYc7d*ZW>Z71Fc+T~9(S#6y(^;Ww1vW>HM2tTI)k|W43V2hT%)hFe}v2^okTj$0Y za(cG!ns!c#CzVo70bBxf+&*e!9#3>edAFcVm&q&KUnQ3u&s?fA(4+g1J5f4QZf>cl zFDzZc8#6gIx)t3O=kg|VNaU|_(Y5|4*$r7`eKW2?(OfHKVUgsb$}<&7PFHmz-CUpK z)Fcq|Gx#jq_j!`DLsTx%pb57DSjjJJ(zuQK4+uiNK~2!oP(p?B7z(9gxD6>ZSf9qX zSlrd0$TOa3DyS)IsPiZA&zy?VI@7JA(|JJ?34-sSUxHf2MfOt^^lt!HzwAVjQMI_j zk0fZ`dVN-2D|2f{=dTxkCP`WEa3u=wf(sxlkTpdV@R4Nd>$|^`bJXLdxTFBdQ~`wr znnh+TrZL6o?iuLYlH#0^ z4Jb5g8^C^)aSVo`9C9`JE zEi9Qob?(%O)ALK_=I5EDR41m~wM}Tlu-QXFfRL#YBtRxm=>gz2IYqdP23c{8tYnoo z57v*SjF9}7`x;Z79#QOk+2<#PIL#5)5}8Jz2+9rHPEvp?tON}VQ);eJ@G9PO93s0k zqKHg9b6NA-j3b>NQu&%Hi^_(B|ItvF|Bob;ly;e^B|f4ZLGxpHgsth?E?=N_P>KUa zaB+vSbkZ^VGn`@FU6MEFE!sWT`m!@cgZAdA;Dk|(G>IH-%;GGkw|cL;xi!mqG?(AR zM1FH4dWIzYJ+w|_5%SjG#XR0aLI$4fZr1j2wl88iabe}Kh{fm``oY(udx#HwDfsbjG&um=XH+%T>O==b0}+DcTSgU zb21W~Xfvg!lbU#?5Lrgy?K1O{Khw?CJ)IQq+xj{**9&kx0EOxXq_Tl^4gd@SeHepj zE>fJ5E<);hG?7z=D&)HopcWttpbmg-r*XR(Kko;)9pF&_@8f{G0G?%F1Na8~ zd<|eV07*y-l0tA6wZD!R7Xf?)&>Ea{3aNhqlmg2`NKre`rlr+K0UCtc-|hYhW+QqW z0BtT9(|Q_yP6wbXMATfd`Zc?@2oDzmTmfKEODR&70961r0IL9g3og0_scQkQ1MmXe z#d#I|dj_Jup#akX=#McODeit1A+-=-0>DIoJb)HR2j~OP3!o>!!+84$ zz@_-vA6>ZsDeo-6*#L6@c=sXh4YW5CHXy|VrPm>adr$4<@bnTHgrCC*(8S>YFC*V8 z03+~oB)}+uop|;Zz*+KL_j-EH+VdOqXrad*-FWCh8St+}`)TRJ z-B81~PG0~(7n!?(8@x6&+#k4oZg=B2Bfv(R-7w+`NeSxYA`=$Rxl(Qykow_UEYxYN z;%F>cXe=#gOq#uRW{K&O#^i)^3Tk5gPyGA<;6nhIu9|inbv_Im?donCz+WND*8txD zw2BjO6GX#R+nly>bt6sC-|LYU*6lNKIZlt1mF=REV%kL~#kFgb)Vf`Ky8%f~yV#_T zCO^k{G`5RZR*}n+%ztv6v7Ssbtgo}vlV;xO>&$PnU+S7cuK|6)C(&xwc?RDhmHO4p zY5thJQi-%*Ew(7uVl;JD2VmY2fL3-Cm~*E2yq`13OZN=!ZgZ~4 zw4u6QUyP?i0j@$fG)Zyr$;FImr@f+3FGP(`Ndx_=YzePN^T#ZyUr|zXl|LST%ZOU| zL^eK%<2T*SQx`eYJolL24w2|Po%%Zy=7bhcHMSJEOQ5kUAnUf#AT-@iVvvdjhy!4I zS{N?4nwe@I>F*58k5K<45m&p<*>fQH*BE7_ZLQ)wox17$ru{G{-HaOGOl{*2>kbAF z^6ePlG#6vtxcb$jOk)Kwlc<^znwe#-Bnz4w(w!Qr`x- zD&2+}E4O55-f_A$s$-80K)18U*mvkQ9gnvO01;~nAVseXY3EQ$w34gVP0e8E(#}{V zkeh%La0x?MWd$#^&o&1JJBt;SGKB%#Fi0PK_wNOc701aOnkF1Vkbj0c?Rwn54j z7RpIyd6sY14smiVJ5($^C3J1#LBhB~9Bx5OR5 z$gYQp5!}jTb#7zaDCC8|4g69fJqI1b7CZ6JCu)YMgmvlyiSV7|)p>}RzvQZ;PD*ghDTxyW^UrD}A(hU8z$Gn~E%+H~zo{sjPEBjr6?APQv z{d3qg=goe1Ap4?=ogsbBn{%_xDO74@CQKB+hOE&}w~?a+!$NU5j9*nHA?Hi0Yb#6j zd5gIx48NjW5b3oas0 zKAC`*iFLK&(}C9k%=7RR9-MP!4XCWV6Wn1)lI{+#P@(Ec4N}|Y& z8|!RML)Bb5msJ5ySu&8{GWO=>8C`sdd%zEpk@VO z4f2fnWuBAkZAq=6MH+d|ZL>gk%@>IXsI}yYoia6^$#iNYXy?&4+dtf`@f5fZ>~lN- zZ8CD^_~T3Drs{fZCX~S2liPxU?bu(NO_Q8*2?+J?NzMhHS4?`o(?hnF#^*c3=5tY+ z%M;H+j-CT}UVxl4GNnR(MnX3fc$WeyZnE>+z z_!DMNmwQ_5UXCupJ=ms{S>q#0?Nx&BN uhsFp)+J`Y_sH^>PqnFo|H&j<(+q+fWY4e)`XSDgEzB*%!5EG6`%i-fkk1Sq8#(1M^S zg$Nh-I_ii&x1ur+w-J?5RKO$?ZOs6}_*bWHQx_a}f9KrS6`0@W^Unvq@4R!*J@?#m z&)v@JhYy8xz7`VtSV%~a3VyNYp00cS%N?P|LdjotkR0~(0h)j4X7Y)%L@eE{swSek zHKZa;oGxlx)fM4lnHU7m2yuoO0#AcjDu%){5}sl3jDlx4Jfp>#;w&+$RZ|fIoM_<0 zinGNSc*endEIi}k83)eg38fixi}s;sZcTjo@wyB4xZ`aVsRoo zP2v(U51wPhrD8rjGsGLjLU@|N*kMILWQxngY4FV2t!g3_+2tzJa_J;hso2@OXq;sF@vC#sJWI_L*y^GXF z`3=3@7V8=+do5rI2gwwtTBB0gTZu}wUDZPyNqA6~KCy?=h~=b5gReb$RY+71B@qir zPZ(!JsX~m%C?`F!oH0xll7x&YJtO%0C{;*2zONuXX`EqJg(P-`uj$F=Z)4#Ni=l-H zjZSQ0a<9gfq^E$3Oe3n05j|9hm_>S~6V93stYoZKNqQD3tfjyjiL7O$XSu>!4Xoik zRE=$06qZe4k%-l#r$J#k`YKN8nX*}7wE&Cv3R-k3tWw%*=mOF+gS)0@F0i7p#o451 z0c~V$hscCP9f`1!o)rQ&Q#Ax-{~JS^TV2DECnQSlz}UU|&}B-qTJd4VL1ZiIN_KSz8YrBb!1ZtUlaw>=rb zE(MXu;C@#72KLR}BwDy#+i>lJ$+P*iMee^8R6Nl@Ym{|7OJ7leJhj=H;-9d-*s$`?fQW4AQ-X-J7Cf+dH z_znrv5>-oL`)1CN&%aA1#ziz}B24 zG1PIH{pu!3EYl0MTF@J#CJ~k6a-W<^CAzNi!nVFraC|@A&TB`rj&u@n-4F$LU8Ufr zK??fmJ_Wydh+)ED0}ftQ-#Ms$KiyYeNg>=y088*FNq2s;OoMYL}?1U zbPhaFz6H2^jC+WlX({E<@By%5IMM5Idg+j+7%tq98ey7iW($~rJhDn|LQU@?%U0oAN6 zw$Cj$HcBPz-V3BqTZpBl^2H0#DKdk_UnIj4W}=*Ko~6mi70iNHzp%K$Ce3CGE)p{- zV=WiSONHHd8u~fxirtQH+07x-`3`NYuCv-iyEF$i2IC&uyKhNz1vdW@SrNYyO2G8l zu#A|f6b%}swaD7TUcW?MBNcM%KgoAOYIs${`n3&x`#x-dQVrCQDgpd~b@q~4Yt=fd z$TodS+E~PACw&d>1MfgvpyM>=^Hiic$jC@Oy8)P*iiEMm=V4h`P{FhoMd$A zB0F^nUR}cB@tuh|-o%`aBzMtbPvR0^;u7}_D||QDJi7Hh-Fmlfy`23!IZVmZ2T##V z^7OGE=tyDQZtUY52)7}iGo-yp-GOi?!kY+}(5u}D@3A>*x{3T>cj;(2(eA>63$A&2@$wsi z^jnfJ&=l8r7nbw(4zl-x>Bz!E$aoK-U#Cee*-bq8Ag=&5Q^;ZAKO-%KFvBJU}S!kFGSEyLe@`M_ZY$_ zDE|~vyr0h@bp)02UiRSYH|*wUI*y!Se~G3UR0xnij;5=L7Uwuj)2|Pac(x{%cEX}F zDURlmL|KZXyLIH>>=z?l?ED_YOo`GJ!JsHc4QlX_5*DLz5x62Y-beHJsPM5b!PkMY z9~h*AsEUsc4}in?dKn?<6yn=EgMus4yYh@=Ewo5_XbHdvC+986*EYxnfY=->g*sX zC)+ue{!DhT?c?YKLyj_)2hC!Zyn#l}7;r!L{N3p8dl2qJxF6vGga;9LIP;Ku8egA5 z=s-BilE>40Cx(h&Z+BQ6))KhL)L2F73oPbg@D);g-1&6pGn6j@d$8bBaIy3%Qm-Rm zNc$5i8|wR3=Dr&lF7v4OWt4ga;jaiM5JFx9?28jUdwo0|tsM)j<|uZ_Orx~(U^MKv z$pI7SIeG(MXA^z8luliSSC?_5)MqaCndf?R^L)B_Zrwa(9ro#RJ9T+pUEc9gzRAly zx(c7J!mX>gvM|G=EA#2f+`2OPkt+HrpGU?TO9x#pdpw*`<%zH}|%=N1EL6)79-?5$$@I-R6u`!zzG{O~loiO%N{@Deyhx`4pD!ehaVz2Fl79i_}4bb&G-ct?4B zU~l0R#J9UitY$i$O-{(qPNzYH8R=ScYiKy|U@ig= zk}2gXM*!=Rh#5pPncUlvu?dF@ z_dn?ujNr9M^0PbIU!sOMJOY+{-JxxfSl*imu4$wz208 z(QTqHCZjWEqBmxuCnnDqljn{pJbt~$P~S>hozb=mNp*QllH_n^0JJi0M>76-?yg7?JIpw~ba(B*h_YKQE z<_e#=qSL&_YhL3qul1SN@+6j9XM%syRH)6zOu~D(1o;(M#u_DSHJtmcVik;&iv4hi zL}+h=Vy1HCI8%kjNVxD)nhH6#HEo;P5dsQ(e=TZonxF($AFmy*UQw=#H-!al)3j)$LT3I z3y5lOiBcX935b;=NVs+zMkQrMFOuPtTC}2i9UR-CSF}ZoYu(VMz%Z1+9-;)Uh63a{ z0$rBzV-AH2;jWJ+XlaUycM;#&$~Y42)XrZlZO1sqydsbIGEBD{cSD)t5n|ykc zTW{)Pn!NBjCLiXLzR2m*7rFICU2(?4q3zRpR6@v94sGi5v2bTOJh^@Be&=1z&RDZI z*6fMR^2KJgsk8IbGM=N^wdL0*hI?u_e5=}0-T!K0t$)6a72XLaRIJ(2w4q~nu1 z0y+Xt8FrWY^qCiXdz0nWXC2w-(NFN{C%F6m{fHva)vF7C{P9OShVyIc5^ZU!>SXG$ z=~VFR2QODuu0?s##LFzPG?InC3JL0*D5_RNm{HfV#tgm*YPUhy-6-%V4{Z@d+8?w6 zYkQw2<`0CLNvkX(YoS%XhAQD!f>DDvg1(DR88S)%*hA4YGSMH4@iH_L_X0$(ir*W zGWxALeBctoPmBB5U+2*4wDWPsEnq*-p)(R3K-)2Kz-I&p$w8eCk zsT_5@j+2{f`>*D_$Q+BQkp}DJLyPJ2!mwJ<0lR>RW5-Y5{4!O7ulKO(WppImFZV2i z+va%riDmS*06JUErmUe8oS5E`!Vq|>r3k5F1kA=rB?zGiWe776W+Kc&n2j(UVL3Ep zGD;Y**SzU*yZEi)ic6mJTGu-6p=;gk2CjAgfAJb)Ar7Jj+o5yNkIJZ$(ikH^l_D8~cn8Kjg8A5!lkoJKf~du=yu-{wHo+RCBhoUHq*&)ef4gp zZzl3d_y$T}1nI$nFo!+YM9rj?U2LLH#B#a*;d#9G$SblxZGp@Bt?aigbPw6ZZf&L+ zX=_kh3A&so2XQwByZHrdG#ZeKkfuJg752=pnyKD22^sqS3Nb)E4!KdKUjH#kDptEL zS)#Ojv0cgjXr`%!yjLRDk&6rJLWkaZHqP;)$by!BS&G?_nw4kfnzaOvsyqR6bG# z2>kRi9I5FDGZ9`ukrxqoqUIEh0`g4^_qABe*VP)eYs%UQ1mL{kN_SD`jkb6t<>8emjw%Ai6Y2KB$_^$evR!^)7yVTYpVRKWonCL^ zqMK2kCl?dYu0(`ekmti2TMxp`EM_m=Pwrqx_EHmhRQB$rxk4HmCGA8A#5(&BcEPJZ z`1-n2EYA#A`Vwji{MCo=ppHU5dXDmKU6G<~$ zb(r2v-15c4^gI0G=zE417+awk&{hwRZrpXc+W~6MoW|exh0+F=+d)S=pXd4zuvthH z?gA-T6o>M=w`1LL{P$fUXyuk~z>f5H3074JRQNS^#}=FQvwQBw-!~}CZSDtPaOE5p zAVPEfrJU*(2N^LS{1V7Y^;m%_cl#$5G3=t$j)fc8sH1QXtY>qM(gbpXRUf7A5gWVi zSvr$6$NIt_dDBu#@% z`q+Q;m7MZ78cWF|EdMP!kKDrcyhS&VN7*lL(HXD{m7Ic8-5J?>ivCQ) zUqsDlnRE=GO2yhffG?D{yi30!$!z0kT1FUq`81V+-6-Qh@Upx!G<9Aw7~l_CXlro5 z2eVDqSq|%Z>Hk5wKM210U2nD5HAA`-*BMjqz48oJPQqFm$g#lJ!O_@-T=Z5lOAZ#I z0;Eqsq&bo8I}KsINB;N>O`+r=7T~566WXx$0RTJHQV!e7)cuJqbHn-hL3xLpW>NAn z>+n*m_Gi?T%AWGk;bCyqt+Ur!#Urpj*bk}Ljg=%tUiWvZBOvYY(Q)J#cEktE(lhMu zK3Ysa7g%vCjbmBw(}Ss}uw6da-$V)z4N^A@?vT{TW!C*Z9ZjB-!#<#XLXNV}J89D7 zhq1y32%liBPNd#K;1_a!THxxcfj30mudKKWPA#(R?4lk*eqf9Iu-=_uTm5vNR&j)U z)=x(e^Fyc(Lj?1Pj%C+llDaoqfcbduCmy8=i$6!Fl9TeXb95E$Rl{DoK*y6J)^mXx z`&cm_(PD^?Wgk(ZjpEUbYh}&WsHbOKYJR>DzV@#FgpQb0f}6GvKl&(-06`=}l#ZsjBZ21Vft~lW$Ql}9vAryj0@4DZcu%5xPzo5xf6C_{% z1zdT^Ypn1qn!xsb36ZA{V$Xj`ZzFFYuaJfXvF%^ceTFYl6OJ1!L;SS4k|lplv#BA7 zUH>(`3?Vi1-*h#N4w8@jn7j;RTIQYD$vQa4-i3_;J+yKL|IV*-xl3jo5&F z`4ch;O5@Tc{S#lGLUYxWO4gf=@T@9N}g>15%HB;f^7+(1z^lI?=We&3oLI$z22L<8&WIn-vy{4`_Xr?)n zEucaoYf=jaQp;{v3%lUsi$No-AU3&PBRoZkBoEUGWrR3bRiJP`+$Km6ls2(dK|*~N z_ZN57_vm)+uPxZxGYGe%!=FYXmr3w z28(S)ePdR=Xptn#mQ_3}Q>Auo*bpV3)eDbkoVXP|L7;IsWR zZ1)fjPd8FuAc$xXpY43e)9}@U1zrSY3j?ZeJK%$hrg0;r&1m={_KiWvBirSSNa4FM zvX+fV5ylR~S>q4nNnmSz75sT5YQ{f-SS;;j>r;fevG~QouUT6OJC9!nP`TD(w@Nw8 zogze&EcR)NFe^@)j6!;`uBOgmu_=FISq3b&WR#HUJd1|#4*eY|zH0LYn-A|kG;Y8J zVt-G$Gi+Eo69Hq*A6UK7W~;Q-t+Pt!P}g~cl~`pt6q{m{*lt1YHiQGfWn{DvU34c_ z*TK=c%3_1f^Fer(9!4I8J2rLL{ItG)&}SrmMCKmsK*`B!wsf?B=kRuT1SjqX=6nec zNy>5QAPRA>A7biUVR8chPV*RYk09irF^?nlKk~9%A(l+)^)ayEhRU7u-+TaPI9#ul zQ~RClv9ZDunjFl2A1mDK{7zLd`801T=n284AaQFqWy4tU8wpTSsLjx7X_~A$2u+h=D(NPJ>a;r^h zWe27R6KnoYAHiXf9}%zRo(tGAch9x_!Dl0nQ68SBSx$kFP%t#~6rb?8-~oj}s8||M z)ll!SHaVn+u*-eUxwSwjhNR%z1%idfz6io)_=TpS%4)Ym%!Z=q0lBzHh@{HM^YQKv zWghLY1YBzjdRssRXv5nGJk6ou_9%>@LNJ>KLXr=Phz7iXRqvjIct65GrFMLM1mPsY zwahq!1$;zLA+;Pmyp;_v5t6lMk#T@cFA<91l)bA&NQ1w~Mjp?aVD!O6;U{w*iEuoB zr&Jj3JcBAAS)uq29K@~1Q?9a_4kTmL%FHe9ZwwPR@Tq4&H9t(v z#&WJ{6*k8;ttvvYUzL=Od%X54si8uL;T0zJO4P@*Nzu+PVeUXZevsjI;JPdgScH^G zH^@%DbMtcCzNHTl2F$3#UKZdyuLWvIMLt}6P_u4qD`5nG~k1zpW`2?DbR2Bli!SkFIzlQyWatT;43<0kp(oYCKBm9DJ8G&yG zKOn`=oqSU9bLR}r5@6!`F0DXVjbK6Gn*;6(5f^x(CG(-jthX2nPgmj~p^bh#=%gHexRP2?eGbAZgF$3Q5E-ADb(z6Q(W;B}I@1 a`tOgn<-X|jZxn&=hsre#W2+YmTmKi!UNPAK delta 9907 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 diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc index c3df11c8476e2a8ba42d8b1b94fdc1481b223bdd..f411db5b25b2e0f3c8843f22395dd9783c564349 100644 GIT binary patch delta 6740 zcmaJ_34D}AmhabBI-R5;2T33Ykt=C(b0>gY;fP>>BwT?QL%t>iLpoM>I6|PqA-c{e zVvW}7;Qo?9RAjs+qdl{(_wJ~puBdZJd*L-dB8Uj6Frw`HSH}*x>~{aYf4}$Y)vH(U zRlTaOKY!WwK9CYH>y~N8bZ!}8jMUr=VRI;SnZyB^JRJu=vrH!Por{xciKBV~PyfXkFmCIn4pUvL z-_(`ZVOrPPOGQ`u%3DMB^_Ff;>+5-%!k|IURs}9 z3G7xn-0Mi^sbq9y{LH}&b}&J^mB9`s*u$h;{BmL-qYHjjN8AYWD%-1j`+^m+o&)Wc8AsA zVwyr=@Z|jl{;A4!BP$=dkT815!Xj=?Aq$z#xh%1pxd;Q`lOrtq=PS$wqMe3 zON1sJ^^M&mFTUcQjOle~E7aA=and7pZSOW=vkCh#@)Atb#Cfe_G(IW zY`bkvRcTg!uZjd0TvSjl$d3+SBoO7g1)< zFWz;M+<&B;3VOag@(fvGDONu6-gx=hd&i07;rBBJUf}&CUT34?9e`c_@ctrtRaSg( zmKA1wIBbN?!r~u(rUjV;@D@5ntL-x=T^{%_p8g_(AAZL@ANy#s-LAFdsgDMcQ`(Pa z+F{lX62d)9vbxS8VQ;A7Rp2D03pCSHL51of9dg*$>x zv&ic&rqBiX;IRq0dX{fNAs%f%g1QL!fWd7OO>hMjN2E$e??@Y*NS0%I+g!*>GCwRJ z-^rdQd!M1ATTJV+`N`qO&Ch6la{0+yV=pt+CTz8KSl5l}8q%TH)*W=?-=sJ`n;h~F z$MdO7{^NK9ndP%zrjtiDo>(QH`7(pn$d6AW_snnE5N1bS$XX zLFpy%2B^b;7d3@2oHffMXVRwq6q=#jBNVl<$!PTWeIki9Lgt3m;WWMmeVxnA+RZDi6D3$>=c$o$&nde+a4I_?*=(iA_n!_&dy>5IM3VgE)M?rw|N8Yg`)Ih8tBRv2 zQU2p}3f(GyJbi>$+`DJS)1A_FwnRSnO`OcSFD~#9o9E4C;>t;lrmf}bnwtACO+C?DnudTXDKURDDpAM0wTW)rWTK{Cgvw{ z+=TI$Fh%3rqy0_mJz3tC=FRPnSyf95=Z!DTY7bblaS=zKzW0J5YKy z=RoO+oCk&3upPZy$A=e6%Qu7QcRjnl`N+&G#W;6>p6+p;&od910+S_xQov-uRKV48 z(f2ttO>X|)OVefV_t`W<#$Ol_GgE6|l&Nz1g>?E*)?PScN4bb{^ep|Mm8e9%{NpV# zm(&_rb8#WX%ZD#knPVM27cZVSQ%R8FCQ>`Cl$a_|M%?zWzf)m40fWp|2d#7!xr47+ zDT&g*N5dfwtJ@mZoCl?Hz%_b~%EdvYYL#Z^`v|E{JEht%sb%UuJ4vd5Qc+wDUzU7q ziZ@<+uDZ%biE4WkjiNl+nVzIh4&=-@)Jst`(mouf2g=3UQkC67Nda9LbWPCZ02N#$ z0Z^L->Ms{l23?u4$Hn`AJjnDCoCs%M%E~jSP=_2eB4f5I#ub;~bXi>%SClI?$>z#;O>;RC94@CTIrxQx_L99CmX@gP zPI{Ue)YKT7$(LSUVGF579gd+v6dexV`520)78MgqJ7|@c+KAeox5OjKu2WQ2ZTQThzJ{w2X>^FOHzQ=qfG4 zVd=K?4(A{70hBags$!|yG>T@pGU#KKQeWjU0L z+~rUM?Fx(jmP3iWFTTj3vD`1yO~+&Y6{g^wkSb|3snipoBMUYZRoB*P)cZZ_)Jvmj zRm{U^Jp}lz8lB6f=Y(3EONn!zWl_lKYig|Y_?p^1hIj-a>AQ421pP0dVQXj;8$9A` z2=o}IKQpQ9Xkw-hZEX?Nh)?28$kgL`^d>!{I`gT~c9^SY-T^M7gImT76SMv-0<&yWVcypiq`YG$=hn|1htyY`5|h z(qnadm~0L;lc3HFTx$e zHL-0B?*pZ78biJIKDmD^$HQt>509mxKgn(;b2H`i?vu-v82jHP9X$Xv*- zljiHQ9jqNkcJp$6r#DrLp~&)}P!wMo%j*60q5yM!4Ykw8?V=W}9n|ZP-4D>$m?+2` z09|cwM}sc8r`6LFsBpMmF)?V5M54yFd3{rh4?p#reBzvnn@Ef4;b7fF%Az?|=<4B; zKJ_N zdm4JCtL;;`u$)jwrqEOAH^I72w^Ml5dpCH>{hsyWW=MCdLsMxI{WJL4RH`(Oy_aQN zH@q9_S2ugauc7fPz`Y#&#(VF<=U}7|>uTJgnx<1xpg%>oK>uF=Ze-$CP{ZKUc2JK& zhUz5#1MDvWzW`hh(4qboD%xe8-rZ=>+17d2iGG7+q38`wo{f6xh8!w&1|?@oE51 zfKJ5yHc;WXtHOD_HVf6Vc{GA%s*ZWQV2gss=F#&MKpAhh%_uC($`SL?FQzf+>6m}C@T~C&PfLSGEQjT>EUXse)L$3Vg8X7O6SA$YV z!B!AZ4JQY2vpYFF-+D+_14>w0E%^UIKDH3TI;c9qPT-arhp6*4)Hm}1SjMcF!@%o! zEkDg6b4$x5FKqh4sYAFJnw9FADt=*T34T;X3oU7rSXLo^4dZN^uhr1e15Q@u%cwLB zQ4{kZEeDJNdkv`hR=IasqB=T}tm?^Si)pItM%2HB5*9qtIhU z&cu+j4h2mg2xpaVInB$}Q&@nJuLV>BssPo1vFyBiVEC9^qNdkUMxX~n{2uTm;7Zxj z@kfr_u~&+JIQ%PNe-%K-LPy{_u-YT-hxWTxtFRxT0epCGjIC=G-Ug4)*VNMZX7KhE z^sRYhINC=d(bjRlB;>GAs1B~8wAlV=aw$5zimqw=e*?gGJ$*%30u%ald;x1^GKTsC zrmqunr5NbVs8_6BtPiT~wKQbv z=BOBTu9jNOC06-HFjeiijt&L-!xmY(dbRVOzf!3C)v+Z+0|1+wFMYV`g$0)@@ows0 zdOEy%Z`Ppe)$@Tf0sWn3gPjYg16;|CHE1ZrfU7~x0+pw}tK(a8BLpQX^LiRd6I9vt zv?uTin)RR;K)nk1GvEhJAyyYbod@XGvb!PE*Y$TGI|k?l;JzBZi5>>^763O!p=%KC zazbB9boTV6B-*-!g(xc`8ITGX0?;){A7A>=T7=G}030l~zf4dk`7C6xXTy*z^h delta 6104 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 delta 21067 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

    _BT|5 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 diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index a157a7f..f7bc39d 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -31,6 +31,7 @@ _FIXED_POST_RIGHT_SECTIONS = frozenset({"setup", "spatial", "psth", "export"}) _FIXED_POST_VISIBLE_SECTIONS = frozenset({"setup", "spatial", "psth", "export"}) _FIXED_POST_RIGHT_TAB_ORDER = ("setup", "psth", "spatial", "export") +_POST_RIGHT_PANEL_MIN_WIDTH = 420 _FIXED_POST_RIGHT_TAB_TITLES: Dict[str, str] = { "setup": "Setup", "psth": "PSTH", @@ -1411,6 +1412,14 @@ def _build_ui(self) -> None: self.img = pg.ImageItem() self.plot_heat.addItem(self.img) + self.heat_zero_line = pg.InfiniteLine( + pos=0.0, + angle=90, + movable=False, + pen=pg.mkPen((245, 245, 245), width=1.0, style=QtCore.Qt.PenStyle.DotLine), + ) + self.heat_zero_line.setZValue(20) + self.plot_heat.addItem(self.heat_zero_line) self.heat_lut = pg.HistogramLUTWidget() self.heat_lut.setMinimumWidth(110) self.heat_lut.setMaximumWidth(150) @@ -1646,9 +1655,11 @@ def _build_ui(self) -> None: workspace.setChildrenCollapsible(False) workspace.addWidget(right) self._dockarea = DockArea() + self._dockarea.setMinimumWidth(_POST_RIGHT_PANEL_MIN_WIDTH) workspace.addWidget(self._dockarea) workspace.setStretchFactor(0, 5) - workspace.setStretchFactor(1, 2) + workspace.setStretchFactor(1, 3) + workspace.setSizes([1280, _POST_RIGHT_PANEL_MIN_WIDTH + 40]) self._dockarea_splitter = workspace root.addWidget(workspace, stretch=1) else: @@ -1867,6 +1878,7 @@ def _setup_dockarea_sections(self) -> None: scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded) self._apply_scroll_theme(scroll) + scroll.setMinimumWidth(_POST_RIGHT_PANEL_MIN_WIDTH) widget.setMinimumSize(0, 0) widget.setSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) scroll.setWidget(widget) @@ -1912,7 +1924,12 @@ def _dockarea_default_visibility_map(self) -> Dict[str, bool]: def _lock_pg_dock_interactions(self, dock: Dock) -> None: label = getattr(dock, "label", None) - if label is None or bool(getattr(label, "_pyber_fixed_interaction_lock", False)): + if label is None: + return + if not self._force_fixed_default_layout: + self._style_pg_dock_label_buttons(label) + return + if bool(getattr(label, "_pyber_fixed_interaction_lock", False)): return def _ignore_drag(event: QtGui.QMouseEvent) -> None: @@ -1928,9 +1945,9 @@ def _ignore_double_click(event: QtGui.QMouseEvent) -> None: label._pyber_fixed_interaction_lock = True except Exception: pass - self._style_pg_dock_label_buttons(label) + self._style_pg_dock_label_buttons(dock, label) - def _style_pg_dock_label_buttons(self, label: object) -> None: + def _style_pg_dock_label_buttons(self, dock: Dock, label: object) -> None: if label is None: return try: @@ -1939,30 +1956,52 @@ def _style_pg_dock_label_buttons(self, label: object) -> None: buttons = [] for btn in buttons: try: - btn.setText("×") + btn.setText("x") btn.setIcon(QtGui.QIcon()) - btn.setAutoRaise(False) + btn.setAutoRaise(True) btn.setFixedSize(13, 13) btn.setToolTip("Close") + if not bool(btn.property("_pyber_hide_wired")): + try: + btn.clicked.disconnect() + except Exception: + pass + btn.clicked.connect(lambda _checked=False, section_dock=dock: self._hide_dockarea_dock(section_dock)) + btn.setProperty("_pyber_hide_wired", True) btn.setStyleSheet( "QToolButton {" - " background: #222733;" - " color: #d7deea;" - " border: 1px solid #5a6274;" - " border-radius: 6px;" + " background: transparent;" + " color: #f3f5f8;" + " border: none;" " padding: 0px;" - " font-size: 9pt;" + " margin: 0px;" + " font-size: 8pt;" " font-weight: 700;" " }" "QToolButton:hover {" - " background: #343a48;" + " background: transparent;" " color: #ffffff;" - " border: 1px solid #7b8498;" + " border: none;" " }" ) except Exception: continue + def _hide_dockarea_dock(self, dock: Dock) -> None: + if dock is None: + return + try: + dock.hide() + except Exception: + return + for key, candidate in self._dockarea_docks.items(): + if candidate is dock: + self._set_section_button_checked(key, False) + if self._last_opened_section == key: + self._last_opened_section = None + break + self._save_panel_layout_state() + def _dockarea_active_key(self) -> Optional[str]: active = self._last_opened_section if self._last_opened_section in self._dockarea_docks else None if active is not None: @@ -5508,6 +5547,7 @@ def _compute_psth(self) -> None: def _render_heatmap(self, mat: np.ndarray, tvec: np.ndarray) -> None: if mat.size == 0: self.img.setImage(np.zeros((1, 1))) + self.heat_zero_line.setVisible(False) return # ImageItem maps axis-0 -> x and axis-1 -> y; transpose so time is x, trials are y. @@ -5536,6 +5576,8 @@ def _render_heatmap(self, mat: np.ndarray, tvec: np.ndarray) -> None: self.img.setRect(QtCore.QRectF(x0, 0, x1 - x0, img.shape[1])) self.plot_heat.setXRange(x0, x1, padding=0) self.plot_heat.setYRange(0, float(img.shape[1]), padding=0) + self.heat_zero_line.setPos(0.0) + self.heat_zero_line.setVisible(bool(x0 <= 0.0 <= x1)) def _render_duration_hist(self, durations: np.ndarray) -> None: self.plot_dur.clear() diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 90d6c54..395bf37 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -1277,6 +1277,7 @@ def __init__(self, parent=None) -> None: self._help_texts = self._build_help_texts() self._config_state_exporter: Optional[Callable[[], Dict[str, object]]] = None self._config_state_importer: Optional[Callable[[Dict[str, object]], None]] = None + self._pending_export_trigger_name: str = "" self._build_ui() self._wire() @@ -1389,6 +1390,10 @@ def _build_help_texts(self) -> Dict[str, str]: "Choose which processed signals are written during CSV/H5 export.\n" "Time is always exported. These options are saved in the preprocessing configuration file." ), + "export_dio_channel": ( + "Choose which DIO / trigger channel to export.\n" + "If left on Current overlay, export uses the trigger currently selected in the file panel." + ), } def _show_help(self, key: str, title: str) -> None: @@ -1665,6 +1670,10 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: self.chk_export_baseline_sig.setChecked(True) self.chk_export_baseline_ref = QtWidgets.QCheckBox("Baseline 405") self.chk_export_baseline_ref.setChecked(True) + self.combo_export_dio = QtWidgets.QComboBox() + _compact_combo(self.combo_export_dio, min_chars=10) + self.combo_export_dio.addItem("Current overlay", "") + self.combo_export_dio.setEnabled(self.chk_export_dio.isChecked()) self.export_options_group = QtWidgets.QGroupBox("Export fields") export_form = QtWidgets.QFormLayout(self.export_options_group) @@ -1681,6 +1690,7 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: export_checks.addWidget(self.chk_export_baseline_sig, 2, 0) export_checks.addWidget(self.chk_export_baseline_ref, 2, 1) export_form.addRow(export_checks) + export_form.addRow(self._label_with_help("DIO channel", "export_dio_channel"), self.combo_export_dio) qc_content = QtWidgets.QWidget() qc_grid = QtWidgets.QGridLayout(qc_content) @@ -1909,6 +1919,9 @@ def emit_noargs(*_args) -> None: self.combo_smoothing.currentIndexChanged.connect(lambda *_: self._update_smoothing_controls()) self.cb_invert.stateChanged.connect(emit_noargs) self.cb_show_artifact_overlay.toggled.connect(lambda v: self.artifactOverlayToggled.emit(bool(v))) + self.chk_export_dio.toggled.connect(self.combo_export_dio.setEnabled) + self.combo_export_dio.currentIndexChanged.connect(self._on_export_trigger_changed) + self.combo_export_dio.currentIndexChanged.connect(emit_noargs) for cb in ( self.chk_export_raw, self.chk_export_iso, @@ -1951,7 +1964,8 @@ def export_selection_summary(self) -> str: if selection.output: parts.append("output") if selection.dio: - parts.append("DIO") + dio_name = self.export_trigger_name() + parts.append(f"DIO({dio_name})" if dio_name else "DIO") if selection.raw: parts.append("raw") if selection.isobestic: @@ -1976,6 +1990,37 @@ def set_export_selection(self, selection: ExportSelection) -> None: self.chk_export_baseline_sig.setChecked(bool(selection.baseline_sig)) self.chk_export_baseline_ref.setChecked(bool(selection.baseline_ref)) + def export_trigger_name(self) -> str: + if self.combo_export_dio.count() > 0 and self.combo_export_dio.currentIndex() == 0: + return "" + current = str(self.combo_export_dio.currentData() or "").strip() + return current or self._pending_export_trigger_name + + def _on_export_trigger_changed(self, *_args) -> None: + self._pending_export_trigger_name = str(self.combo_export_dio.currentData() or "").strip() + + def set_available_export_triggers(self, triggers: List[str], preferred: str = "") -> None: + current = preferred.strip() or self.export_trigger_name() + self.combo_export_dio.blockSignals(True) + try: + self.combo_export_dio.clear() + self.combo_export_dio.addItem("Current overlay", "") + for trig in triggers or []: + name = str(trig or "").strip() + if name: + self.combo_export_dio.addItem(name, name) + idx = self.combo_export_dio.findData(current) + self.combo_export_dio.setCurrentIndex(idx if idx >= 0 else 0) + self._pending_export_trigger_name = current if idx != 0 else "" + finally: + self.combo_export_dio.blockSignals(False) + + def set_export_trigger_name(self, trigger_name: str) -> None: + name = str(trigger_name or "").strip() + self._pending_export_trigger_name = name + idx = self.combo_export_dio.findData(name) + self.combo_export_dio.setCurrentIndex(idx if idx >= 0 else 0) + def _save_config(self) -> None: """Save current preprocessing parameters to a JSON file.""" params = self.get_params() diff --git a/pyBer/main.py b/pyBer/main.py index f9a4419..536d38b 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -111,7 +111,7 @@ def _to_bool(value: object, default: bool = False) -> bool: _PRE_DOCKAREA_ACTIVE_KEY = "pre_dockarea_active_v1" _PRE_DOCK_PREFIX = "pre." _POST_DOCK_PREFIX = "post." -_FORCE_FIXED_DOCK_LAYOUTS = True +_FORCE_FIXED_DOCK_LAYOUTS = False _USE_PG_DOCKAREA_PRE_LAYOUT = True _PRE_DOCKAREA_PRIMARY_ORDER = ("artifacts_list", "artifacts", "filtering", "baseline", "output", "export") _PRE_DOCKAREA_OPTIONAL_ORDER = ("qc", "config") @@ -774,7 +774,12 @@ def _pre_dockarea_default_visible_map(self) -> Dict[str, bool]: def _lock_pre_pg_dock_interactions(self, dock: Dock) -> None: label = getattr(dock, "label", None) - if label is None or bool(getattr(label, "_pyber_fixed_interaction_lock", False)): + if label is None: + return + if not self._force_fixed_dock_layouts: + self._style_pg_dock_label_buttons(label) + return + if bool(getattr(label, "_pyber_fixed_interaction_lock", False)): return def _ignore_drag(event: QtGui.QMouseEvent) -> None: @@ -790,9 +795,9 @@ def _ignore_double_click(event: QtGui.QMouseEvent) -> None: label._pyber_fixed_interaction_lock = True except Exception: pass - self._style_pg_dock_label_buttons(label) + self._style_pg_dock_label_buttons(dock, label) - def _style_pg_dock_label_buttons(self, label: object) -> None: + def _style_pg_dock_label_buttons(self, dock: Dock, label: object) -> None: if label is None: return try: @@ -801,30 +806,52 @@ def _style_pg_dock_label_buttons(self, label: object) -> None: buttons = [] for btn in buttons: try: - btn.setText("×") + btn.setText("x") btn.setIcon(QtGui.QIcon()) - btn.setAutoRaise(False) + btn.setAutoRaise(True) btn.setFixedSize(13, 13) btn.setToolTip("Close") + if not bool(btn.property("_pyber_hide_wired")): + try: + btn.clicked.disconnect() + except Exception: + pass + btn.clicked.connect(lambda _checked=False, section_dock=dock: self._hide_pre_dockarea_dock(section_dock)) + btn.setProperty("_pyber_hide_wired", True) btn.setStyleSheet( "QToolButton {" - " background: #222733;" - " color: #d7deea;" - " border: 1px solid #5a6274;" - " border-radius: 6px;" + " background: transparent;" + " color: #f3f5f8;" + " border: none;" " padding: 0px;" - " font-size: 9pt;" + " margin: 0px;" + " font-size: 8pt;" " font-weight: 700;" " }" "QToolButton:hover {" - " background: #343a48;" + " background: transparent;" " color: #ffffff;" - " border: 1px solid #7b8498;" + " border: none;" " }" ) except Exception: continue + def _hide_pre_dockarea_dock(self, dock: Dock) -> None: + if dock is None: + return + try: + dock.hide() + except Exception: + return + for key, candidate in self._pre_dockarea_docks.items(): + if candidate is dock: + self._set_section_button_checked(key, False) + if self._last_opened_section == key: + self._last_opened_section = None + break + self._save_panel_layout_state() + def _arrange_pre_dockarea_default(self) -> None: if self._pre_dockarea is None: return @@ -1901,6 +1928,7 @@ def _export_preprocessing_ui_state_for_config(self) -> Dict[str, object]: "artifact_overlay_visible": bool(self.param_panel.artifact_overlay_visible()), "artifact_thresholds_visible": bool(self.plots.artifact_thresholds_visible()), "export_selection": self.param_panel.export_selection().to_dict(), + "export_trigger_name": self.param_panel.export_trigger_name(), "panel_layout": self._collect_panel_layout_payload(), } @@ -1951,6 +1979,9 @@ def _import_preprocessing_ui_state_from_config(self, ui_state: Dict[str, object] self.plots.set_artifact_thresholds_visible(bool(ui_state.get("artifact_thresholds_visible"))) if "export_selection" in ui_state: self.param_panel.set_export_selection(ExportSelection.from_dict(ui_state.get("export_selection"))) + if "export_trigger_name" in ui_state: + self.param_panel.set_export_trigger_name(str(ui_state.get("export_trigger_name") or "")) + self._update_export_summary_label() panel_layout = ui_state.get("panel_layout") if isinstance(panel_layout, dict): self._load_panel_config_payload_into_settings(panel_layout) @@ -3357,6 +3388,8 @@ def _on_file_selection_changed(self) -> None: self.file_panel.set_available_channels(doric.channels) self.file_panel.set_available_triggers(sorted(doric.trigger_by_name.keys())) + self.param_panel.set_available_export_triggers(sorted(doric.trigger_by_name.keys())) + self._update_export_summary_label() # keep channel if still valid if self._current_channel in doric.channels: @@ -3370,6 +3403,7 @@ def _on_file_selection_changed(self) -> None: if self._current_trigger and self._current_trigger not in doric.trigger_by_name: self._current_trigger = None self.file_panel.set_trigger("") + self._update_export_summary_label() self._update_raw_plot() self._trigger_preview() @@ -3387,6 +3421,14 @@ def _on_channel_changed(self, ch: str) -> None: def _on_trigger_changed(self, trig: str) -> None: self._current_trigger = trig if trig else None + if self._current_path: + doric = self._loaded_files.get(self._current_path) + if doric is not None: + self.param_panel.set_available_export_triggers( + sorted(doric.trigger_by_name.keys()), + preferred=self.param_panel.export_trigger_name(), + ) + self._update_export_summary_label() self._update_raw_plot() self._update_plot_status() @@ -4119,6 +4161,7 @@ def _export_selected_or_all(self) -> None: params = self.param_panel.get_params() export_selection = self.param_panel.export_selection() + export_trigger_name = self.param_panel.export_trigger_name() # Process/export each selected file, for the currently selected channel. n_total = 0 @@ -4130,7 +4173,10 @@ def _export_selected_or_all(self) -> None: if not ch: continue key = (path, ch) - trial = doric.make_trial(ch, trigger_name=self._current_trigger) # export uses current trigger selection + export_trigger = self._current_trigger + if export_trigger_name: + export_trigger = export_trigger_name if export_trigger_name in doric.trigger_by_name else None + trial = doric.make_trial(ch, trigger_name=export_trigger) trial = self._apply_time_window(trial) cutouts = self._cutout_regions_by_key.get(key, []) trial = self._apply_cutouts(trial, cutouts) From b943670ecfae00d0d54260068da45b77ab302cf8 Mon Sep 17 00:00:00 2001 From: andrianj Date: Mon, 9 Mar 2026 16:51:30 +0100 Subject: [PATCH 23/28] improved export functionality, --- .../gui_postprocessing.cpython-311.pyc | Bin 555763 -> 555767 bytes .../gui_postprocessing.cpython-38.pyc | Bin 214966 -> 215648 bytes .../gui_preprocessing.cpython-38.pyc | Bin 91701 -> 93476 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 304587 -> 304591 bytes pyBer/gui_postprocessing.py | 2 +- pyBer/main.py | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index fb0d6bce083e4535c79ea7df8168b880418c9439..d73df0aa1adb0fa81df8c8dd765c5bb98b25378d 100644 GIT binary patch delta 135 zcmezTRq^{*Mc(DSyj%=G(EoZ}W_%-WD=*_#UZ(R>j9t_3N-^0?f3<>5a(aLalf-oS zckH~=V@|SiZ%>eB5@lgzo?a%;WXhAW!Sy1K)fFDA3p`fSx5_h}7Lc=Zl4Up~%jKlS hd`OegNvnN=0uvB312GE_vjQ<25VLQepumwF1pwamDvj2+YON-^0micc@BVUwJ$FqMga zy1_0sw#oX!Jkw`)v+!(Bl4cTRVPu?MA>JLQ>9i^$qJ$uJy} t;d0VsKBU12B#Y8nrhk~hEYZF}feDD2ftUq|S%H`hh}pMqP~dQn0swp(Ev^6n diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc index 8a4787a142ad7677326de67cba2aa8706c30ac71..046c78f68ce20cfe9400150861183fd63e7fea86 100644 GIT binary patch delta 27386 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 delta 26099 zcmb_^2Ygh;_ituyc2hP9fshU)flxvTozRPv&|9cM2}$lk0%_b01Q3i03W`!(WE2o- zqM$S*Tt$B>C<>MzML<|oP*6doNl`)Mo$t9Jn_u+z-v52xgHO)RoH=vm%$YN1&XnCV z%Yt_;4h|U^931FF|6)&V&9%M1BVi zpwJ@4a6%9hw|nYH>)_`w~sP@)r703;p#0gaHqVX;@xkxSmG2MpQlmZRsQRQIt>8M>D@M`dG>}*3(OgKi{&`kzU(S$g(7TY3w^=z1{GI`xS}3*|uA zNqP?DS`i=Qa`nlSYh7M8MbD#LoAO+~?oMjnqBMwwm`04J>m^j&L7zbcGl}sm{Xxoi zEGM6>&!Jo=r?#fEv&&kcKScOaqIy_=WS;L_k>0fe^QbJMKwxa&{q?(FIRby zq+Fw~rF_4N{5pL-<@;CUH|Q@>egKIEm2V_rUe;eB%)m;RP5NfS3?huwUnQQe>02m2 zxFWw*-$wZ%5G#h{+OF@Q>`-a~QogR2QEr$n-B(&~)lk}&}^L78(s()8X z2GL(IBSW}CHOhw)v+4g(R-JG)sH~)12lHCDES*8PX!?s;1;(-TSBoefq|e&SyAGw| zm~%X(5~yspjyiSe&#F_8Qi+7016@(NetBtwRlbyJNPmr}^r7-n)JtN1jVaY+0u_~3 z^sOnOni1w<%w$Si4J1>lIbk26&lVUm`fN#mtqAvMCAO`ZZ5t|SOC@v5JGrdQwo(i& z`1NOs0hAg@6pPBSgShL12@Bu27#u564<$T2|n$R^V zUtfQQArvv16)Ih1;cO4gK@ICKZ4N||Hn!;~ZsoxYYn(H!|CN(UgSXh!n|okJd}Hr{@xAZtdghA5rRKDtWI$DfWyOqmI$% zK`uE&sl!xrFV%#X`~=;m&m;8r1smc~N*$YLYn1*$g=ohK^(9sMutI&huQYWGNzgS;)3F||eJPIr#Aj*p+k}_1~n8n`xOsD%&3Gd*smE?@19!$j^ zn&2>5sfW;CHNu=Kmq+TMgsD!Lujc#s`lNrI=F=!vQluW{KD;litb6BC3nE3H$5xV) zTkQ1M@^UBT6dUyru9vvCe7Ikfluh6FkVYRj_IC&ro88U7h>vSJ+h>iOE!PU+qx+=! z6l=vkvnAS_tIZWgcX!bjY2hn`5B`t!DUf4)?$MWdzIZ~4K(~Ipzppf2)zsQYWmIVZ zwbs+eN4PdnVm7VYQ~Zq}FrF1UTdeUZ7L%!|IdZg5L6k2wHYLz#V=T@BOK0UUcd4(?LtnJ01VP2s@d78FPXJ)7PtiH5~auTLx(TsRkVP38tU$1Ru zyH+V}sEmu68JT+SG*`#?c11Hf#TRAj*mHG^Z-Lyz!h+&vuH0G9j`1Db$tP3%>a}ju zIPEM{IXbTmr+DHqaE-J zQjmI`aI5`%d|Zi?^AY~SS4a^mLPQ{?X+Sv@L<3vu>0~qBCmMBVzX*4C{_4DV&t3oP zqvAvNt*?{CXJtv>{9A})WxtioShK*Ib_Nd1iB#gfxG9q$NWA-aeF-vVx*4g%04D&}0qk+lKR-z9 zbssz5Km?Wjd48JoI|BR{np!hoM2N2L#XqmRkDGcK_+e;j4N@Ng6ruT7kg~WT^(|*X zcMz%RAUWlB{ZhBiUgTE;RMGxQ!nH3e`^6?4%$Avb>;B+kZ;{~+xU|^+-$an4d1Bqw zev5U_KNaWRaw%F&Df{@+P|ebkuXOMDHNx?NKQZ^Ck)PFxCVzx`xfw zN_5qt+zWq=@iTsb3>V$oe~lDt%3`ja65@OJ&Fk~T)UpR}IEC#;D&AH0{mpB_ehHM< z+~52j6Mh}Z8vvLPMi#&ockmxE;kSXj32+tQGQh9y&VO{aeNV}E%jWzMFGGI-mV3u) zIq%+bdn*~l{eSilHuvg3+lcdJU;MdV)VBE&T_iCdkyOpdfbt-YrRno(LXcLsqa7qO zQS=;&45a)Bm*i)edm*rFJO)zCF$8t0sl%g0nC)l6hL`!>?Jq-Fpvnzo3Na#y+^COn z3w0}X60Z5eiM)iS6%$XAzL7&XQ&$f;(AN+ zl2pf)Z8)6;E+Y=Pz}$jjr{QvD7rXAwdbTvMHzKWm2T*#MIV3=|6|q-Heoqaw*{d*n z%II8ulC!vn;mo8isuu&v@}=4pC|u$Nv#~==7h;FGHb^80`yTZBN3}m#Bu2A}tC%td z_g|(hgjQ|)QP6&=R#p=e#UWFMiYC(D3-WxZTGtSDMQ=5#hDZ^o)S?<}b2;0XPfFy`V7z2@< z2f6wqHHbh`xMgN+P=kSGgZeK*)Q=EN+H@rFZvyFH-##De8-+W@421L6m+5jx{XVn6iq1 zBhkt<@OFVu7QkrWP|*{X(Q8Q00U2o{dW`6uF{=0Qw0=Vd8zWH6E^`q12qP6)mVOka zk~B+to--azJrP6dZfEX}5tMYE678^4SCwlAv zIok?s+Q8H>_NhK`Vqi0`Wef+F$2tuuHdGt>%`4s=5@3Y+UYxjJ*dIXoc#Kd}u}lq4 z5N|kE(DAB^h<$vd%G5=KS+6ckIuVrh)LZpLx>#-2OcZt@?`o=6eGx4tt9JFt8%(iA z`my>VMr=`Q>Wd#^CZkp!zg~y)nG$uK9<017>Q_)!d5~wye6<5SVmh@Yj35UEJsNQZS z2HBbE!zv_M^pJM~&0)!6y&(T^qq$fvm-wm)g|eo(wuN{|H1POmWal`ur+_atmn4iO z5Xc*6*h!^LRQFb5o_JX8YbEN57V1JP(YN`c3cBYjQanzm(b_>wu&gBo8!i-=stK({ zc=!UOAEG{b{IfD$&Vo$p(-Z2+)*>-pp@`=oOYjtBJpq~7#TibXvtOxyw-#+{av6t6 z+?JcD!pz7vVu)~5@FtE^+lpM|wJ&+;}#{KuYMB|B6SKpA4@?O2=gzK+nw->2$t*<(CQPea~wig|> z8WYgMQUXbFMsIcqs(xotx3YR%MR^qc&nPxls{1?Bkd_O$t+S{t9#@}t7KxE-!R1Gi zGd&RTlT**gESO2=;on6}vb{ouL(SqY;w2$AtC(&gvBqLF7+$IS+ttu+WQv9A>29KS z%;Qw-sgW_QNY5;GW=zb@b7tg`>A8%_>O-m?hUPqWt0guT;|+DYn~1T!L zv6+&_Zh*JdrS2lFxmRD?fgJ^{K1r!f!te#cYiJ88yHOSO5M%r?SY(MWsY5+PY_$(T z$D`eirql*?tB2TN=Z0QI8~qZEy`cC20IUtJ@SlvgsOmk%h{nuV8qke#Kj!B?q?pv( zN>3_y)m+?DTo7V~n%P?n6nW~S-lCt_sY3gRvtqxx-bb{yZKJwp%%-VgzaZ3&zG4kc z>gD~!GLf_&YgQo1CwT!-D*+DD+%p~kSd1o*0XR`G zAE`jdqN_)S6TkiH`Qc(|7#He9k#3*p$|xqoJE^*)k?+b-YtzKxxKB`d0vKijWC3IY z=m0C!(h;JiC{-Vf5M}ZcUzM35YK5X-#(3y?G{863Y#K)C$J9F`#V6tuHGdSXMl00j zQKEt1@<{QFx-d#y6W^+@M~gaQjrr$j(Mc1pn(fDl8G?N6j{C(_`FoI=_yDy?!P}_u zv_ku<((z&+#c91WL>K!7H2jOz+z4te+FX-CnzX|K7&F!96GU6!IN;lOP37GTtNtR2*qO6axrFRx089~s zmvFWKuZOw9LI$=WA-hrl<*KDV-z+0lTDI8G6$4BWGRll9*280*MdhBr?3~Pk0%u-E zu6{2bVB>kf>V0dfJlGthi_WD#itDo+(n z5o1IW6NLd&1lj1*$L=G2jH&AK6ycJ$eU+X^<7TLZd19(Ks_x{`qWYkU%oj@|A^fHq zmcjo@X})SSH1%FSh1DhMM7~J29|iuT3MvqdtHb_00WiHxTIGt#I#UZotH=XD+t?Wz ze}a4;>^D&@DG(i6M%t)QOf;hL>1!00xQv>VG_G-_Y-e6x3r_%fv&;-GyX&iN6^Py> zX!kjQj3Z_Vv?~8tmmk_Vi6m|ZK0XJaki}C zT`D?gzEvy|Wb`*MI(Cd+M+*B1Q`e@8G~rUIB{chfR5ME`0De!sSR&%dJ-%N;I}Shd zyAp9nisKxZ_}MZF3XS~6=B-(DJQ33YB3H2V1ax*ei?a*!i@LT^iL=E3QA-ug7LSYe z>bKeCdzz_nb3`lAMJ<{m;zR>;>l|T9du#A$qY^$4VIhzyn`o!F6yam57Tar zobaDsxBHB?GrawZCq8T%{O(G?vt6h(Xa}DAC zJOQ+UD9FspqhM(}dp%U&L8(pBio{Q=J&%%0ov%(lDmKKh%N&Ge%?j!_ks55VpFr%N zGPlhYPfM|0b$MJQiKXVG$7zEla;y>ANE92CIbX~XvsK##B7+KebNb2x()Vifzyk5O zjH?GRc=!1XMtc;%B;eTVPgDg9Nrzk1+J!W5Tg)2^MIR}~sm_Z;YM! zW09(K?OYK}lcXx-)n8iZ+lIO1N7H1kHQZp1%a6py^+I)ZlfI@&GfT^n9GBM0P z5$Q>4)-ushUJFs{mx)&$m5IhaD|U#dlw-L_N_rZ!ivSh_R3bxm3BXc-XVe4BMHA6L zJ+WMzcUW6|^gLM2R-%I#tad4}NsLhwo)cYyms1V$k>7$qnVX*zwrb*ewf$vrn$)`F z72)!;#Ik89RU|1ISUgx6rm`x|y<7j2HH4z-?74w~4qO7%$@_wdM&d z$SlYxF3c#HmT&xx*H@qrnMMv(^=L%m(R614b^A?qo7jjaRP1(9*gTkuXZgi9i_e@s zDSnnc9xqXk<30?i&*Z*3PV9M1x=6VqV78oz^dI95HfLxhn@@CJdPZSR0}5=nfa}B;|*YZv-5I` zjPXeNI}L;0ztCxmx1+nk_jO279nHL{-g#ZL5pH$$brEh?DEw9hm5HdDt0|psn~_25 zLAq@wK8#VSeVOPgYO9hm(Wo)6wmYeV>GXmpbF$G8W7!CReJ@WQYc8n+WumcIr>>WY ziJ=S7#uETf0xVRM-yp}6sh)X5Od;#}>kS%qQ)TTG&1tjw%udnWu@ZDE0Nzwz?<6-f z&b+ZxoYvyt`wR!V!BGN7A{=Iv$C%gN60IB~P;n%{Fx6tWNV1nl2^qU-%`Q_jcZ)>Z zd&KA+bKP!{D(pi+I^1$pa6^Zb-#a3sbQ93+ptpac)c~Y;8KeNA{D{%p5+A#kpkN;W z*jxK)Y^BT3{?Y>qoFy52sBVk~^9Xc=`Hn%B#jIF})HkDq-PWC||J%IsjuO#RkN0SwpQe)E7a8)WP__7d z;i2s0J+ugZ%eu06qqctMk|=Y}9$F6RJmBnJksNv!f}R85&KEM z%h`tlK6L*ST;EgAe=HK>EgM0_Z>aI~fGlTD2KMYOqYTK?%JVS=le2lTQbYIC9YmBl zaz7a`b$ZVM5oha4)kdoC4~QvoX_Pd05$3koR7)||4*|TV3O^As^+tiHHUMjbhtzul z)Pr<8%zW(=8uvO}egTwK1|Lm2RsGMzum(S&n7Cup&o;m^%tcpufGr)URiBBZaBi6q z-sTJ4hYyC??xR*Gs9!&$h&RU<*JCx!2R|39MJx_XXdmmf&=hb+L{h5S92BENtB!zL zc~Fc=WqQ^hyoPZaLgL)RqfO7uOAnahBrlWa%q%btp_oNtJ^TVfZsL7Pxm3qPr0AXI z#zQ!?9;fOZ5owOSpn=nK#ffc6|;in{eKqWm%dx|USO3Lc;oiizp2v%n}(5hp~C@NH=OT>$O`%m0jsO#J7V4nN;ToM*dRhp z+ZpkwCcaY(&WaN8_40F~eK@aN+)4#UPn2r@lZc8i?m*f=di!YwbG!(Cq#is+=X5#h z);W=C%Oml-nSH(&%{3Bx`gxJi%K>`qL6T})TagRU_19o!4H$aNU#o< zT*WyVv=C-HjSa9v-mtI*MH}788aufaK)xR!u zxDNWLr}kbEW9*Emr{b@YnH)6puZnR}e5MXu6FH)eYIR*S=WTMRns}YgUL5M}>!NnQ zAYwwtc_Sg&aWoiO!S!ckc}SKZ#g;Y=sQq3lm_5>9< zGpA(a7U;Rz~T|KzvF)c2~qFCLzs}fae4ouUElrrHSgmT~Rwa zk=eSkbBkssyJ#k7<{7O}xwX1`S2RpQXy>t!Z4}Ki3X!%K)7`qO*w8@4miH0HWZ$zx zWR%$dY>vzqanBx?QyeWoa34TVHBiVp(H2`mcx>o}i$09PB9~#Rxk65hY>JXV?jPav zT}CSE_EpuSY+fw|X;xWpQdyiiNXkvp4waA+{`8d{Wr*F{0SvUs&2$j-n@uK#a$L%G z*a^yasup$`oxnDBnFck<-}nJz`x!t8cpU=SD{8V`wh-^Am3BErJfQsiWLw%ickz=A zleq3VP%+y@sLB3gAC$nF@Q0C%S5N!NIzz{>fB;zl;|S0Tf!u-&x+kWy>QQD8vv#L>upXD^-3n#|2I*sG+9;bLupro*CbWqWyTPnq+iU#euSJlWw5$=juI1_B6Uv_Li31Zj!YpU>_4| zEQ1;cs6Bx)zt#OjVMP;sufWQ^2E)^EzF9>nLy7pPIl&>Hl;M^!pmrYsww}i7Zm>)i z*Hv-|S!WBC8X{YZOX|T8nHIl*m|90&))Yn?zLN`c3k)1l8Byv|h>Q@Ml&zYKn{*YW zeudMDGxS`;@D6J_nraPzY45SqLGZ-f86JO77G=`P%Dix}V?74qK)D&{tMsG~nf0YG zb73`^VH3^O&o$+22gedt&|w`dAW&>$J{d0G7qP!nngSVClGjSClR#&r+*bWTv;x!d z*fR2Ie5aW8qhtdSp%Xqmh*xd8eVCr>ETN6)Rh1bn!^7vG6Tx_EQ-#uEy~362a>eJ4g;tdG)HgRH(=pS=;X#RI=1Z?P)9{ zhrNLed;NXj$ES1FN{RxWTEUoA?7>2if-5oxqlYh6OhLXdU4!f=YJH6C;>boh$5D@| zpJQZWOQF0L?NsrxWD(m`hgjJ}#42a3OrTr2`LQx9`f*famCi*Brq&%d(aG%*>brbL#memrckj*PRciU$hgB#pvD3fl_=}c zsbuFw*&q>?`%hleaH4>n<}22=Yd#^CnX40JOKHzT;Z=34fov1L8EuoA%4Z{=;a*pD z8p?*HkT9vHrNjbMVV&`9Kq0b40KCs+6}N|F4gn{&d9O2>3OdV!fW$!71;A@Cj65mO z(g}QuQH&z8(F6*|U6~V|8MIw9rdROrdJb#vY41yl{9vun#fx8&SOv$`Ij#_&4Ddsly$>4PEBqhV}sF6x|6(%VR~IX(?Twz zXD|(0%1%KD%8lVL)#rWG+9R@7X-#A}aIF&3SM^`0$@7Kh5c{BgXu#URK`{1Y6+0ZG z7RH8s8i&s8$@rX%UECS)>nBt|E7?kXpgOmbhiK;z+?rhV5!Hr1qL-q_RhEm6WCjgQ zS8I7y(p8SLolK+%<;iw3Nz7Dlw38ji&4D1L01pB1UBg<4>5qQ$X~x4Scm!Y_3LZsj z762a$J&4pEfG<&_8YcK`WW!Y76d4yj59!AUc(lA}#m3{v&R4TjWUNh*z|WeiQe?i2 z35M`k=8cZUn+?0uI!p&zLwd*<`y1Rf zRoFu|kbi`ms)rn6^LrbuJWCc$2OjPgANi__2W5Z?NtI(9K*9I9_s2l~q7ZoDS**=rTU=6xxP>Sr{95N`q0gS70c zpUkSueEE4&CFO3XY81fiK<$^+_x)t|(Yq;~)W}k`6RPH2mmdusy~A@B4=JL(ls^VC z0Dw1Vfk-(3c7ahaQXv5SVPuoQWWSo-Up5`Q4dvch&N~8YcVj(P;aOV-B0p3ek8XSb zz{})5q&U9!fah#=v%hQ}`XzQg(S09j~g0ziFa1609Kif+fM$A~QAQ$mrf*jmzYmdp4P z?Z2gV50xFo0`taDdDWh1qS_Z2<)Z*hatCx3@))10z%eqVF(bgzvJ4#Gcr-d{n&nIT zjV{KMC|L+_L`@kZo2S7LjCTNDhJ61*3eF;_i7~Un2nL|3hmhq55;ZWydqEk7R80W3 zhj65Jsf%M|O9#7KcDx5w(pXu$ludvQo1JhKW8jsW4WJ?%vSLpj_ES9UBw$jkwR~6T zHXZ$<-7I!NE=wIIsfex?a_F)c;igBU_jT$1YTsCyBVJU==`!A4euIDuQ5)8Px6QnC zSx<^;YRUbwL1-xYHX5C_CIW1@ZUgp_HBrR-SDPithd}HD_z2)*74m?L6g|ua56J1l z?tzCHtk#W}N%tPs9Ud>k9elyf4r-3NI-a(;qs)dGva2SJsfk&#|2^7WS#lPIye+e3 znB7`2RR3%;Lypv}MZk)=oTT|l=F)8WxuDzn45w^qKZNl-Y!zoy@d|URQ#KW}Vx5{O z9}!ADFiF<-brY3Zvx)9-Hbckswq+76g|Dg4Cdm)z8hJ^M3>V$h#vIvAysv)9k?%C_ zLS5PV6eCS=OZ+ ztY(wt(~cj2{|Vrt<#P`fNk_nBS78C(XB}3*OqOZloY{Q}#P6c=^JHQ_RxGci90YWO zp1%VNjuNe>gb)IU^YvBe9ElGK3x-{+TDoQ%mFWWwaP|h1exIto3<4 zq~;*uCtm3wJoc#RT+-qK~{w9TNyCVtfBFwYWqs9zW|rh65Ado{zOQ9@n) zdmF5DzP$~Q>R^Ga6>yJv4fU`gzw8V%BB{Ny^6?q3{r?-OarH{~ZoIf}bjcc`p?b?D z-;?L;>Tr-2p_UXAu7$b2n8a_CZ}q+jbkZB3DL@|pKC|eH6rCpgv+DVjkRCovm)R-( zh|=RI%A^}qR|ag==ua5BH(^uZ!%EnmCy1V~(|$99_w~ka>g04;JMtQuxdi(1udk$| z6X#TLiEJ*~n_WsI9Yf};elzIXQ@^XNGh~Ap9xL9?aUg{S%Hxa6=%MP;3^}0m|JWs3 zCei9GfL>_YZtYiDUbd8{;qk7c{3^;Ti}n|=Ja*jr9b{RAhzz`M%y6kUXUb}#pSgdg z>?y@n6*ODMljmwSo4y-`eY({yRK#0qkB#grKf|N7Xro(up;;*6SoJ@5N=el%jq(PY zui9>d(z_WP31TiikJIrkD1&NvG?@8tO%Sq`6g8u5^pZ+92Bl1o|2vD z)xhwlWL?J%^yntQY*qS{jB)T-Z^Z0NRvVs@_3Uiom(=G^(ZSdWb@?gTTl}WlJ}n#c zfFm^i1n`3f>soqdiE&)v@t>A!8MY^oMl`eB$ZMcmVE{YTs;8+%wt7B{v#UK%%P}Nc z%p%#^&MWzFm9|KZ5}%lx7s;u9Db-M~CO{McPZ0fN3e6urVRac5gUN3QjUbTm1aYY0 z%Vh^U*9%rlm&=}wLr~ZRfLVqjRUM!y0BaMQz7fWB^RMMH0C%+h&&lN8bx_R90JaP? zgLt)S1}r;&_Dl6iC$yvC{hrrD`e&4%wd(4@=j6Cjj20bAaNTMZ!{Z%rzI+QO&V7ss z@P7gmi>=_F#`Yhd213N}N;XuBTU$)E zb})ssF!dEGVTDYUk$!61^RjmgbAa!fp*Sy`}zk1+AE`sk|}sqLhMN`}sJAJ%S}TO4GISEpCXh_-c+_PQ(9Jzr-xM}ak0sbYE{-4PVg zH36Ql?oo|b$u^x6K~YA^ux`&AP&VC`l|ioyjD{%U5VjFxiy4~)EbB2@tym>vL`QSy zDmg}0dd0xInv1ITi!{T&Qqy0QI~v@Dd-Ss|GWksfJHCo|!TRRWaQEVUQOdc7*3ci! z$JfaAf{vEnTPvNRUD2rb!1D>!W}U2S?+)xk6uE_|!gaEayc}&VUMHK0P%gL+r9A+8 zs?XNTZuV|S_g2+6$gm`4*cb@!x28x#K1K|1q_j8u}axQUk)^_-nAtYsHY}ulJAGCLoFzAR_wsSOf~dP z8KwGcmPsj=>?q|(r{X-E`!J-)Sy0i3O6sJO_Kllq$>^l^ZJ{03r2|Yly+ad?s=R=fA=z)Jjr@)a6im9}~24RHO z5SH$G*~)o&=hc2L)Xi`FUs2t+(jK#^8nsoHh*b6Otz>2W{j4wl+_z00^^NBxqhbNF z77q@`ux^Yn-cjw|klFM-hZS$oB;0A~7>}Cr)#q=>u?bs9f^=Jc?hJZ`ycOM;08pV7 zW3jrkQ>Ol{;|tYmJLOQZ^lzmx=;+h`*-^GfdZAjfOHQdY|DQlhm9+Mp3N&S&eM}V{ zKd+XV@_1@jAtTW~1u$7VW!7tEq3%auBE%za^vk@&thG zCq-8B%l#oHJ7<%M(u3*L5Z}XdW#AhH-UuSyuQ)S{zI`!+UJqP;OUA^#2~pEfc?7^P zfZ+fm0Y<4tyXklpW^*G87l1#m^;@ztm07gd_! z(C)o2SM%iv*W?F-920TPTGnaGAX3;~Gvr_NZQas}32dx^@-xs1+a_+>=)0}|gYUZx zsUjH$-WUrcE*h-&pa1Yp7?!p+5mXV^l9c*L(IvhMt`5CR&(9B;$KI8-HGdq1C-tO# z=&e0;k^O>tdoK;HU7g=chtj*v&=2H6N#6uGvyaX}K2hC1qSNgI7@aa0(i;Fghtp|& zinJTh=@~WoW4T+-=7)Y!X4n1lSwDHj_8+IXKtOsEbx78sgX)ck zi|xGi2!`RHVLU5fLwsd08{)_^}{l<*9!;}iU>2pm!Y2Sf|DIPa9=ap8k8*qU)3W6NKuF5fFzqh-q{ z&abP1$K^i9S~Sb+>P%JZOBvIES)4{iHV?Mh@?H7^pnVWSRnF&8;`6R5{!;F&!&3z7 z811@U^n`-OfOltjj%gHI2Vm(Z$eKS@1t;WZ4z}s?c6*!@W4sjY9-`rC1covWWzKb@4l=t~;SJ#;N-%~3VTBb!9O1VO8WpanE6N7Ygf z-KiI2j~K2ld*n+AUO6_PjR0dk>UuT0KKOZz5KwJXFQHVBX<%#^+CpX ziB8d zH+&n|o+LgV|6xNj`Ns*!qFbMl3+QRXJ7?s5^7q(X-^#nfz8#b`mF=u-6te^AFJL~u z0KATDFbtwhrJkiL#6&gqtQ^?oZQu{VT;Ds zSy~AV6@HEm6+c$J&dK_su9|#Ku9w^V_{+?y-uH4oiTUdHvR0e@RLNt{bq$`Dm&fs^ z#}|>5afI-sb+(lkV0B-BJ9qmdb^Cj|zv^!G|3Rkv($_s-`blO-w}ZS@#ukfZrb_r( z7KHx=6ZEGqFXiL>#c0p{R~vq&yQ*61;LkE5@;WS%uf~^w)l33pT3@R_f0ohp@HlB! z(7mTI$=R;y)_nF}0nJhEf02dZ-+>G3uF`FYdgm8eC*^CfWp&j?hrU7fGy#uac1|Hb z>w_&Ch!%}Pq+ln;Kvn%By;8vL)7ppPYL-s+3iGDr({r+7`iUH4EeLV%Ot)pEJiM3k z&JhkV`PzdY&{(&Z;8qPf@ZLv13noK>`-evi%DgBO!oLN{84QH?4u6`ucu_V>*g{3= zfqc64kMEz#U(k1=p7%G?F3}}G(8nZ1x-Y)gLccO`<}z(1_Cu@#%Kr)-Q?`dk9)gvz z{J{7t6uzxGUy%)LTSMiwSm>zQbzR2M!+_)0W%ufN zB-*Ti-ZRR-t7jZj4R6SiG5>8ij5BKa4SMFokdXzasesiImQFJAC@3UkcP zBj-U4j#l`w6hamb(s^+2eGjWbrRgC~mazOQl`hrirmSvfJx@~)+@#A4o&oG|c7fFi zus^9*-lXf1jpnJFa-ppL18|EVu0W5dRo12Fvfts0sY5CmYenAB)^3{oQiyly`gS*)B^NIX)_xGS61W2smm4~nXIq01zHg8A`XxkbdV zJW(Ku2KWMglMVyv8bB=)T8hXuKN4E8R<)meh2CEcv1!d62T^eqz*Y5xO{?uU4)yP7 zYKu)9OOHYP>{`Q8?o?+KaObOZnOpo5EY?F8T|vhky&owj)aO7d03Z!yb^aBr8P#RK`LC9LdIll2LDX7FeXV)gnELLz& z5V1f!B*Q>-1NL(UP4c*;BFit`vG28h3+g&>>pQgl|ws|O3j(Fw~_zRSNx6rY*< z12p z>gQlBn+~goglJLpg~*%`t(EXISB7X(h#G2jHSN>tJlxz%)gB&?u_a7QIdYtp>nHVynSqF9G_^gv?1!3Rd{HqG}Lnd(|XDJ5eK) zk`x_!e{!dW3XjwhZGMEGV0MkvzNOzG0_RB5oIzV)pAmfwt`ukeS{0AZDYZI*?4L)6 zzahn4tDLkx8)$0-Tg2U)itg$(@qcKb z#rZ!%l_>Dru7VqCb?9d=OY0A^*a86J^t~#Q^2u% zUWwEX0P_Kw1Mq}l-AYN>pMmQP5RQH%0In5)N$RdDg0MDV78Az1^JPhzSz#@Q8Af_9sWdP3t z&@biGqIY&k@-Z5I>BYbgu^8h3wy6V+w3hT+AGaH6wM+j6vUdUQM`3R$auQM*022T* z0mh;LUk|pvMf?;}cpzdt3(y}V_W|&UQg@_!0d$3Y_!_5i26W#6bVn9nKQ!*6`&8Po z0Lkyp`Gu!MI1&iJM^M#~N&rX#;LE?>VC}sD?1OA70ImUzzDV^0=m?;IdmaF<0X;$Z z_Hu4E-GJp3>W207h#wd6JGB*{I|y(FI^o}2IfkqgtngOG=m5ai8kbOT8Q>}aU&iwF z{dHu21K^ttzLVqo3O~$9e*nJS4D>_)`Ba(D@%V7uI)MibFMK%fHrk@ib^xPMunDr^ zsL2=%V4WtQ04D?nw)fV4m;*;^n}Sko=6L63aO~TO>XsUa)s2B*GXMb5oPm(YxC(%^ z-@syQJPxkBg#V809{{%ju(BDvY_ZS4dQfTZ^K$5bD+mGz1_%L|2fJ>k+)cDv^q_Wo z6RndBO;DGcXq!bXb462)ej@XgGbA{7o0p_;eUYTK|s8mfl1)OyJ?e(FhTzUFB{wSlXlc6|Ir z%~<2KpF1OqirXq=+*Iw$e@sdv$QCp_;YPdWo8feokh>a~SV5BByY5Z| z;xr+Q7^JF1xAh43plZ>M)LNiUwbNqi*9H{}{l96$3RMt?qSX}E zuW){(9_gZG+MA#W3-j^vu3Cr6i2a0Uy(cy8b7@~V;zNf({9o7Xyw7xA73t4Na!`-z=@wB?o zUE3m?`CAtgul3OEGLhec4TfFLMa`o~?L&&+V^l-xq&nVH8z6S5y1gh8ZKnG7(i-3U zwUnmB|DgGFFRfVgZi%+`qv>==(h6Dr`qg}JX^kw0;K@kwz&59pCy>tA%deQ|WEKPJ zXPhB1F2||tJ~X0ef)G5S;TW-}ydxTMU(I;qD|Nn)mTLVJ9B=oJsg9}IHrluUl&ZCD zX2tms>nM!+OMnvuJk>LX4oMqf{Q~3A;l2Cx8$)Nx1N+iy9jK=C)jEW7VB8+U_XX&# d-sr16;=n82;eluA;oh}5E{Ha=QKtF{6@(6;KfB3kV=qE}lL6)oKJKi`r>O8dLXFK5r3Idf*_ zyynbo9y{v(dCcv*IyKen;Ge9&{<8A9Pag4&zmI0>Lm8B1#Y)qx@O?w+dh6c%LUeA*o_K|ks9>Xj$r*C#G?908*J!H-> zXL74wymh&G1-JT}eWdS7a~8J(=4@%rG3Rn?0JjYDDwZ?PEavt==EbjJUcJX<&Nmk@ zZBTzRTZUX?UdzqF+%n9CJY#Pz4QnTmWWBR*VUJjDNo}yk zWQLO9n%atYLIjP*s<%9TeyBuM7vn{zyfzU5w3Gz1ANNRtL)>LDOGZBOFUpDyxJ3 z+ESimNT7T32aheIF0u6Zp3KTnNqhy??3NxLm)qe8kFvroquegTs`FbL4rf}=wR}LU zoA*6lLbS_Dc(OnJ$jX26NxI8A`DAxmXL+6~F$#TFPDbB!^KR2^de{vT%*4&^2E*Lb zy!WYRy)%-U*a9WBk(7EzRjs+r%-CkYCRMeKE6m%>?M>%eifPLm!%dDRB1gp0ILzG9 zL_9LWcn0@HtQ9Zj4c%exY%<~;E1Mh*IrTY>hDr8slZz$iG_EqYfrGKt)^A^|Ev)a} zn8i+zZQgELP3#&~wV0H}rn7)t{#;p~+e8g{^?B!s%41RKA}WtXUH|)S(KS3#K$e`> zxW)|FI7{ef-XV)!%hK022FzLJ>^Rp@P|Q0q&K%a{=6UPP^_#G~m z3AKT#4NUdKsamM(nYzBQK3bm~C;vpqQ6@*3IV(=xEz}K6-N01dlxTWG<3=+zj<0Ln z7`c)A-O%(Vic=fn)NVhZuJ14|DtHtEsS$fxCqr$#p##3Y10L;wZ;0cYSZA`V#?A5I z{89Y#Ci}B$i#f!+Yn#opwJmUeI!lq`-tw1-c32gMTd2wMAMw-f=E+CK64hG`N3(Jo z42PpGW3pLV8>w8y5m#AbhF1IghXZQ8b?|5=MXeW)UP?c+&K^BBWCM6p3M;EQ_WdDc z29??flCQW_l?NmK!g>Dw)9V82MkcCF)|rE%e>{GP^1F6ql0`7idVAfCTqqk zxvpE8&3gK9ckAKlDc1H^^66vi&?{4Nnjq+B49de5J3p;Id-0^!ImkGqnykE6SNGe> zU9rUFrE5wmc}ePKus0HeA2U|xnH;`ip1)SzVm6y|JFISR-RZd(tG=)KS8t6c&n?I`mo|U>_HU>^=TIO2rW+}gLTQvvi448`o7Umi zOPS5b{z5eTc}O_}@FD;vQ-1*V62M^qaxyr|n^kWBcrEukbLb6g{yQJddzSkHozxMq ziIAhfM99m)UIBOm;8lPmNHWe7hh_@EF-T9fb{-#0$E|0M&!y+A&hIvMZx=2yUV|W+ z;h1&g-HUp?j<)v)LIN&T30cpf%V+sc^l)S5lh&{kd+AN<*ooe554XRvPM=ujIRU10 zYuS56^sUwW-o0ry0Rk66$OqQa_lM^G4P1Eu#Y_x1?Fo8-A=!H5{S0>k5BR?MrT6>N zkZg?o9K5fhzZIA)_%mRG0c5@D;LEV`J{aLiWYn2pE%=}+89uGL^1w2u?lqFKtq(q^ z#F)TcHio#>R%B? z0B-}t0R93X4kupnF`6d*dcEdN|jlkL(WzXexVR>9)*FpRy;Du#Le_b=!*u@CS!0+k`vk3Wt77zgT}KR>8LlM*>FFMS*a_g?4XqoMz43dEd@s7s)Z;npo*6-@KW28Bu84@VfueX)!SRMGKK7&;1I zG{77*>}l zwW-lbES5_kMkOj_nrerXxfGL+vm<~brxp|Lq@hnU7DYIL(9_c zU1Wt$WrofL3=~?1dC&c@U?aeo1p_9!Fl zmkun8!-O@@VdAJV8l9%3bUZc@%Iyq!;yP(=})d@{y_jzK|#H-#HC!n4xL&WDYcJa zae)NeDWNGf1;Zx;jO1p_C9(34wOylm;b5esbX93(bt$K?^HOH`b$Cd3p25M%FNF*# zzfgF&q@7KfM%|#cd+{8(JN{RJ0V9^u(Y>t2*_k?jBqc>B@FeU`RGTP{1e+Q4xSQh= z=4^B!uZR_$tbbM;t9XPcR1_G$uXoU!$9BB7h_IDc02QE0Iafv%f-u$Tus&a#IX4Sy zzd-(ZzdcaWIF+POUEd3A`T_%+6TjJOq_vkZa$X&=T27Dh+yS%PX?=0Js9Q78^WyVM zrhU{r@4G=p_sg-w=>RhTW&&IRaHX~TU;VjIcmfdN%C-7S#(63S;pz_-uRNF=JHY>WBWed9N_;^3Ny9RT$hE-HHgXN7360W`S-tp_F-p(rp>;|5@& zMp5WSH07=%_uC67w6lE+l4`IV+*|Y<51aJ7%5W>X-UhfCKopJ(t6eCHFG#hx6f`Lr zw*iy7@it&50X_lv6ad#8g{z6e4a2^FpMg9 zE(v^lE~%_p8rrDML@G&;SUVH<2t?;* z{r5y_$P#*+o%YAegXRePxO5Kk0k0&DLTbVIccY`ISJr?m^{sz zyFOdb_L4ig3q5-Qc4044AWLm5cTdrW+|SyTA{QmOkkw%r%2G89QgLfn6M;vQ#IUP`)RKCdZ}>n!`%dk!BSW zuJklt)Dd;e^dWp{D=2K%P?64MiXUSC#PlF#FFc1cU~w2Vup<<$Qd zJX`D2EVuP6Hhe!f_fyQhy3&kPD0HeNSW1~bmO@X_4!tdvrjQR6-fXJSejjxu+_^LK z3?Fr-yY(U;-AGmXxQ}`oTc@0g#TRjB!;}#viSJWl61T7+_lbOcJ`f72Mle zR%el$Xqj%vrW{(XcV|;Iz1HICMnxWK(X)Eec>f`uhNV5kAFZcZKx-p|@|Ta|=gW!8 z)CYP}pIMC}4*=8hopc>@aq#_+-ns!}hs)0w6IrUP{9$aQZA%=zLEXbonN_mJHo)8> ztPQaAwobuX%?@+6v8jDnRVh|w*eUvMn+-cs+tB&2zQ<2}=^_1spZ-RR_5NNootCxy zvlmyx9#}4xt#8Pu>;$o3EK7G9Mp^om-ZaIt6XS2!nSIz-|JHJCA1b2miet;cj$OfT zaxr%`d_{c-zMJ)veQ5z*-;&;s?xYDq18>0DdNF^flVB3iZd)8Q+@FsA-LL_ka#$A+ z>ks==pUL;~keFvlh+T1cptJf25@b!1b8bg-01t>IEMHa-stzf&45Vg&UjaO(FAs1E zdqP(RsF$Y|q>uHE06)(CT0g-b?)R8frvDzGUB*rXS(d(Y07v2`eP95U(e1j^KpH?d z=`jOoI1i~ANGFr;hZHPKHEDAY>Fm?M+rlE2P_nYtGX~Rj$&aJ=34kYc-C(xE zY27rKGK!8eDdr7VmR}VNSJv@e{~_!={;Kn9@P7jiH(!eQi;}Y-$Q);Y$-U@h#%|W% z4W@&1n?5jvMte4*ZRiCOn|WO3yP+FqNarwyZmu8%;FMDamjIBNJs5btYmbGunTHjEAy{glzVPQ?`}7_JEM z^XeG??83srK$3kR?7+aM0VFX!1MFddfpAPYa766&BK8FLwCLYmLSMUMj2_a@45yJv z_I|i+O)AXP86zk>=r)Lefn!O0#$9t2-bv!NX5#+%gJ4_{NT)B1picC>{?iC*jq680 zKaxgJy8d<~`Om40IXicfLvv+yb;%k9u`la_QM4cfwupJe3}IypZh2@FeL+!i<41Wr zenMk!x`Lf7dBmh9R=;@0P?EP6|_tMN!+)g zL$Wu28|YAdV1)nxd|nOIJujo2G2$xS(BG!5h3>V>D{I2|C|wg)9`1}8Yu3b!wQE)T z0dYV_E~7E@X3N3L$WKM-5FsVkMZhG6eh+0!ApHT@V*oD!bOy_L*MKahxxG4bELG7j z^v1E&&q(p=2glNN^h-4JQoT?x-py8qJ9+i6aTFYS4AP{Mi5DJy{#|k`0pqGe<>_Ai z!ZB*hcad8#tAgAYXCzB0F*#KUTE)tJ~4r&8{NEmz(jg1*TQt- zJzf=D&fh@Jhy<6bJ3+lee>agXHTrp5Moyx+M)UzDa$X6o!evwK2g}a@?qb>HckRZ{ z{#ED0Vd~9VqhzCIw zqaQ}|E`Z$tH2`8NxnRro#FOqohd7qFnE2FR^fd+4*N@%ucLnk?KMZRfhIww{DPl$> zqVn`T1=K(JMhMsp@QprJK!Yh?pDmzTTBK{I(yE@aELmXt(#Jp!FP+^;V)_O~uhn_e zsKMACFJMrJ1@+_8D4Z<$0bw8KPT|oNdR8INu|q#o$PrrI@?{~F6DfV&boz`U`idE} zD|a08;Ye6n!(ZsMWnFbIuYZj`GlS+05iN)U?t|V$3)Prt55NZa#@)bdHR|Y0>PO@C zzM0gULi*@TT9z;p-BX>L*8n7@B%Z}k62PHk!hAq5x4ZNYtf&l9isPs-tn z2U*&#+_4}2vP9-=bMTnA1X)myp}D#m1xRJWqq=t z3eZr)#5!^5u)3tS?LSw(Z#lk*P8oe{E4BTlJT}Ukw*5cjb*pKOBCDeV~51qDy&x-58 zy!J{H%0e{}ynft{*=-%k6>!XAz8#IwMT=<#73wDz)AP2iMT2erEg`{a<3d_*S2*HE z)d1k3mJ3Xjl{VprOdN9U?kTF401jg4<(C7_252926`I8WRR9-S#tL+dz=X?zT?K56 zE?UCHxB{V2*DRqvRHpA(LffN%Mz>7rMdzDnz6FqsrkE%dSOS1tH05nUZUygw?-an- z0H}=>YG8F70Hv-%>8d1Ap~O^D@QB%@;K_1b%|zrL)f=EMKz{&9TyoaQ33meq;~-Nw zvea0Bi2&jtqAt;g>^bN+4%>MzzIsnxG delta 8286 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 H+;;>3XVfJE delta 110 zcmX?qTIlp?A>QS@yj%=GkaKrkCf`Qh&f82KjMD>-GmA`Kb6cHJeDZ-elGC`D1gEt! zvTSC#qrk$*I9c_9DOc)69+N9PCKq^2CZ|0(Eg);>B*Sn>hRaEl`H%*qlV-Ey!*<7q Oj6lq^-SHuF-w^;&LMHqG diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index f7bc39d..1b430e2 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -1927,7 +1927,7 @@ def _lock_pg_dock_interactions(self, dock: Dock) -> None: if label is None: return if not self._force_fixed_default_layout: - self._style_pg_dock_label_buttons(label) + self._style_pg_dock_label_buttons(dock, label) return if bool(getattr(label, "_pyber_fixed_interaction_lock", False)): return diff --git a/pyBer/main.py b/pyBer/main.py index 536d38b..f507c17 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -777,7 +777,7 @@ def _lock_pre_pg_dock_interactions(self, dock: Dock) -> None: if label is None: return if not self._force_fixed_dock_layouts: - self._style_pg_dock_label_buttons(label) + self._style_pg_dock_label_buttons(dock, label) return if bool(getattr(label, "_pyber_fixed_interaction_lock", False)): return From 27ceaadbfad205a5e0b6e79858e014268bb39c54 Mon Sep 17 00:00:00 2001 From: andrianj Date: Tue, 10 Mar 2026 10:47:08 +0100 Subject: [PATCH 24/28] DIO export --- panel_layout.json | 16 +- .../gui_postprocessing.cpython-311.pyc | Bin 555767 -> 566482 bytes .../gui_preprocessing.cpython-311.pyc | Bin 221399 -> 233326 bytes .../gui_preprocessing.cpython-38.pyc | Bin 93476 -> 99492 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 304591 -> 312693 bytes pyBer/gui_postprocessing.py | 168 +++++++++++- pyBer/gui_preprocessing.py | 163 ++++++++--- pyBer/main.py | 253 +++++++++++++----- 8 files changed, 469 insertions(+), 131 deletions(-) diff --git a/panel_layout.json b/panel_layout.json index c497803..96c2ea3 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -4,38 +4,38 @@ "pre_data_panel_visible": false, "pre_splitter_sizes": [ 0, - 1450, - 439 + 1501, + 388 ], "pre_main_dock_state": "", "tab_groups": [], "sections": { "artifacts": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" }, "filtering": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9Nf///gv///4L" }, "output": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" }, "export": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAAAAAWhAAADFAAAB38AAAOMAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADFAAAB38AAAOM" @@ -54,7 +54,7 @@ } }, "artifact": { - "visible": true, + "visible": false, "floating": false, "area": 2, "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIQAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIQ" diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index d73df0aa1adb0fa81df8c8dd765c5bb98b25378d..a6f58fb3486487d712bce7008a92668692ce5c3a 100644 GIT binary patch delta 83962 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�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 delta 74625 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 DvoTHc diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-311.pyc index b778ecca657d4d3867838b250eae5f7f3ed849d4..ee881c7a305d187270333f9fd92fd6cdba93fc58 100644 GIT binary patch delta 36801 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 cTL@glKzU069$K&m)Tfx2iNP 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 YIWEr~x5uw*-9rtV)pUe7lTl>;50nh!^8f$< delta 28503 zcmbV#3tUvy_VDa|W`+TV_xm9XAi^jj;9F5a5Z~`diWUNAL=*wfj4#B{vQjfs&$Vr4 zrMH*wG^(*OAKm-+S~m;0bHnCZY28wLV%fcBR^M9d00U}$-~XGRuCvd6uD$l!Yp=cb z+J|qS@^3!n7x03gpN|fH5$6w;zx6fS5)i@e+mf;_YN+h9R$mw`OS11yCJ&SS*BT3B zqZx4#?1F?PE^Q!*bQ&~^SFaRX9MI z-fpkbs>(`RsYCtOkjwmio%%mREym{|e@(1@GRUK0g3@>2y z^*;=MiVb)NV^#xj8y&?9ZMhER1AOte+Z>aM6K^BuX0QngHZ zpCX{y8Rho!k_wxGxVpU@Rb^!rHrcJWEh=|dB@K;FF-fv5ueM7NvREui7RH$EHnnzC z4|b}4#kdBDNYHnc|dr`fs@GNi8soiET zu4c_y%KxdW-#2HG-pg%RT3oTjRv%lul9>=gtC!-hK3y^*wkw0o$pG9;vFjlP245R} zC2nhJGz+PZDP6`)A7U8;l-VJViH(QsHDTjzj$*mkQCv`^EJ`nuZ52hpbx|+bt{LhE zVWk5R^hc15pdW(12nHY+f}jtA!3dBMtbq#0@G%H0G};3(Bw?H$fdPRLffoW30&fI9 z2>b!KeSwNo0;`tgRV}G>xD7b5>`I)vX5n-eU*EiNf>#~2Nq7)Ogdkx=_!8!X5g|=j zB5n!|YY}1@pkX;1V@v)Q2)YeQab=mGjSy8*5#{shi}vX5zlVogZwLG}>JcJo>JRoA zEW3V;;|Xr2fg>s2eWzgD_4da3$g!hK5?wum{(j` zYO9!LjdB|mo4vforr>&_yoecmCQmCaxvN|*vpL*)M{$W=nTa(K60;%XHUghQ7LtL$ zz>pTLezm5%R~O6%GbQ%EBx5W8j<|1dx&_N{;OPVmm>i3$iOZBsc(og$I4~>xNLne+ ztB3CE!j{#)dtU};mFh2R--<27YFA)0voM7G)F$#O)qg!OnQgD{`Cup;fVe5c5ac3I z0JP`Bhy(zgM58hXVqiJAxFt;8^pF>Ovi`A$#3_dZvaAjncG-iDZ|QO^;1@;KR!G;bu_k_fyf#)VTtX-65=RU97S@uqC9}_ ztVpfi7|JTt2R0_Mef4`bJ}3pQ#FA+UY7wkbhi{rNGt}2N&*1MdHF(Rw zuoakR4TAd+&^X?&&fOAbdZ3rVT4@Sxc%!Rlp4vuAiN=v41* z19%ft^R^AhAYPq-6%fNt!q8*{QxLREdRi-B5vWx6Z;Kx3fHZ6C>aY#NW@QIpt2}{V zCjyV$M@FEbR)|y;___$ecA8y2<1mcCrlvo3jg3<;UX7~H7HfIzJrHU2QL5YPn~qs$ zAShPPKb{?o>&o8Nc{Um;>Y%=zrB#_`)4fkEQ06Mv3u^R zqnT*PtEjTutQnrUr}DkzC#kvJL)E8_q_cGO?2*?)--G1N zEY`@>Cyr#YUh3JGa@kHbpgxAZt@fzz&wAFE*3aNkXQ700$6^hy_GA53?^h2+{o@bw z3{btC3sXKs0?Y!imnqTkutOQ0CbMpsvMY)gmB__IYckZUug9rFUNfu5oyORKu;|!v zKCag7DL%{&$g6eAPMULqV4iw`{fi=;Qwv+=i-CUVG6@)udr3 zzSOCHuSYPgf??{M*9V%Pgm_qlsuYLvl)C$Mi}`KLc&;_~+1H1&topz=l32`L7_}3@ z1;DXG|CG1Y3CE(@aJBr{BqOR{rF!*9X{h>-V?QP%A5X9{w*<=ss1}6D`&dTq?vV^>`xVjqHxJ}#6 zS1+8H$wt)=JlU05+J{B?80&-ot%IU`0^yoWHQ=pyb?2#IHd%e~RAl4@h=h8s!$a}( z_Y0~;DFRlk zmBeok4B@iwHi0TrP*GfFcN^y6!=v!KO{h9zn%f^kqwOQ)a+vdK(&?0h?pVP|0Bvi> za*Xg0Hcef4x(ok+sT)pP*tGinr+0f1-pa3-4>cS`2h2x^E6+n*fi+fn8q*FUz&(2t4}~J-!+c7!hp7w!9z|svy#Czt+A~qV$s0?~)^?015Ku+e#Ns zbs)W-!dyO{2)7r7VKd`By|NVZ*<`Kj-n2-$S$W5fBfcgz?ENg`B?#6esGCkl_@a<3 zB6(R{U-f>0WX3&;auf5yT63z&%I>ZIs%bB;Lw2$HY6F>$$-NMuBI1@RY?azz{)llz zCt^R)>01^0R>?*?pw@xG0mf9^i-G2B*OqM@Ew?wmll*R1a#a5hOzfl@@j)V6Q$Of~ zZ+ST(i>$2ojU??dkxw$9)me){%Z~$$3 z)_Ft?$=O**zoo7@pUNJu-*^5S9`grN7LW{8Pk$20_NkwI5?M#H)lcg$(tx%&)N?nl ztah8q?eoejVaZWknD|cwL@ye^FYxsP1RW9d5UArGS$Pfe)r8%$HhIAY7Bt;w>Q`O3 zUyA($w3!fq*Uaqeui~kB+O%4exAVsM4xM)kACgsOK*ys68%+0B;Vv zJiO2!3$#xUw-FZ)n3NuLJY?<2fyDJ*rP}hZHFyh-Z>Y_eyRl>Szg{k578Tk zj;X(V6{QE=pj zc1mxvP+%!o*1v=YG)$}9*O<{$7}qfin@g0mg<7q6yDUZ}w-yOM4<)~hu^N6UV9u_cH_isNP$%2Yj1>VZIhJLyDj{OoGZFb%Lwhx_CnJ;SBVuwFHiju;XBW28i}FCZxHy)>mWiS` z7G=byO1ZkYIaD+!OR>&Facna;w=YW5tgt6fjxcIyiP;Gt0rn>Muqbn|y)p!=kpzCI zT`W=1COZY}rRT-L1QwmT9@DAS49EnEDIrChT%2*5O({d^r|w=DB6uQ8WHrv@M4&&P zz|`DVL&UId%;0=7iOH;29ukIH#Re6cv46ri&tfRBx$OvkWFjM(g$CwhhCqy={11rT zkFXF?mdv`chn*Xf*%>w-t3>oQ^#Pf{uKYp0P}Ll4AIG3w6^2&ayxgHc{V71&ZO%_q zm^Y8LVb$i63J{Z;JrvYWZ68<0#Z4=V@p=|>uu^gAE*>H>yTgINPUphzY#xuDhe$t< z-~|Lo>9*B&31nwU(p?4`W*$3%!I9RA?Z374t_pl?+zT*fG&9i}j0`kLkpZ<=9j! z+Z`45EH;3>;XIJV=CXJiwcVJLR6G;f@@ck_SiK~A^kFekG(e=Y=z+8r_-T@4t|;om zy0cTx4SiTV%Oq?K$~{ZXr;OLe8cZ{t>17Rq8Nqp3gMH^p%Jl3w_(E~h8TQXK)p&A6#H)54l z_2<}I)7Qq7u9z@_-X*S^NMg)%{*n;3m1WzM)2EjfAhj5g{Xu1(R^Zl`;hL#p7NuEL0rGVLtp*NgT}qR(VT&mc#n; zGt_aPQ`jDYcSUwC2$EAy=yp6~?>J8lXK?|rFkP6;h8S@bR9+BCQ&=~4K#ZBfl7n&C z1McWxGZJg2uzm?1GWEG5nTo}^DJ*RcEna4<)(?Q&TQek;E^+*S+L4q)SXb*BICm=R zVWu%4@;B&&n94@@(gI0YM`IZ9K&D(^x;> zjw5nu8XLtgNzTma>^rXvVv_a^t<_sOhh=FO>)CmCM=Z7Nx0rM{OSDpZ?F#=L71GO4 zPfd~tn$9BpDyoX*BA`;$5{Es{dE##N7vAkRtaBVTwheg-SqRwa{4K4EJ#*QRXzZC= zvfE0vtr!*6N{Qd*vM}QnNU!NiZTVAMkQI-K?Bm3+V)ilf7jY#lHjt>0hpnML4W<@Y zA)WV>u(7O&M3CPtCWimjCY|=^ZOfrQc8;3Emf#!%7sD8tWwN`R<7GCO^+mb^Bhm^; zBqwTLhmL^$MU(2*ZH01`i#KgB=65?U+gKpWxB;2lsvx?xSE2k2NgcN&$~A}(tLL*Q zkz2+>yox~{D>u2AUB*62O4RB}M@)MmAn}XXgY2iC#E9AR*<@xD2j{bstXWi+vxx8u z(1VV1_Y0_|CYc5yprmSfk+%Heuvdsv;tZuUOfEiucSbBB^3ef@I3od9c()_?!6=9V#lsRF}J@*t;w@hRJ56a3|QQVz{A&> z3?y*7iJ@)v;*hB(g%A!0`&q?`BJ3`hNuaAsfw1;ianjDJoj+BwccnTKLNwap{}X)QJ$?KDX)zkR_XCD-q!kmO2y+?uC><k7_7TSEkYJ=h^UWvu@0_PL~) zjbpS9dFmsk_ns{cZ0LesRdF_5-Y&3p)V z;*@yEElxhdBKP(a*1z=WsSEkCswbhv>U&YShl z&mUojS|u*lr%hx@={(E8q)CgGhnGC9{I1-h=37rjZ*3kCX(ylEO9XFWx%{GDOy9!( zQ%8!%JD7#EoA+^aNX4PiBR!`HK29p+X`crEkOfDMTu>FOH9=j9#NdVtXv* z99jqM0dG(~B!D&Qjt8=+a4Dz>X_6P^1uX{Pr39w~<)vWmm|rC;v`pe!t>D6|;9{nr zz}J}mBF24+;4=jOMi7L&tk5VYW5yJTb|3FzEP^j2r}QE6YzI%)X zh*6KRYjt^Y{yN<}ChOPw6$Z#7WFz>>1Oj6Sk4ERI(=aXJOkhv3eP}z zhRLJk(Q@coLt!|?gh5P%JVp+OXC%Bwz%vS-k?@R`$I9d6ILH|TG4T)+3s1{heO+M} z2qZv6oIGCc2G4kTf}9FZi#$=b!ZSghB=>-4BD|-;GYRtdglAWIvOGo3f+~~csd68P z=>{o%;h6%@e(+3{r^)@{X_cqT1L4_So*@s0XAk)A{X|Ukej_wXTI%vp}D7=9m`FgJ!W71HQJHb$+2OoCQr{Eddk} zs`Im8#8lQ2K@qV!zb+V&-4ajlU3Gp@_&%Gpq)M;opVs^>=uVId6bxakR4>{!ut^GI^nX8(T8-lEL>R#*tOwEeN6aq@$pGIrvbZlhig8C)zd_v$gMoL2aS! z5E-PpiXAVpS!|{A+Dotz;ui*r#yTFY{??}=RNgK>E_yUJsx|Ho5lIn+*>rf!h-Uup)vY7K-F*i)#?_s$IBZI1U(P9q3KBb zFU5nM?eqj+0%Ny^MOPs&J;)MBA<|m>qvM^!EWU*U!1&Fg}m`}(fsL$+&|Jtus zSL6_&REMbnyS(+#hC{s=5g}gul$A)2$eYx~^ROseqOQ?Lh`T;xeb`cLTKs&01xqoz zmf?%@@1L;-#;VoD(;`Ln8I~;if5H6O5>fC48?WV8Yi0yXU9{{N7PBs~XycxIh zV#qge*09PGyw?+~YY&Q~Z{R@WeqxX0Z(#?wRz0O8s=dB6um{>g;s_4*++93`J%kyh zv;#uj5+1_VQI4Efyh3(PP>|~tJc&}q-~@f%8T}ob$`bm)3uwWb^$usK|bp9N2cGY^g4WRJ&E_FLJK2OwE0lDRae& zYs_l?5?Z_Bh4|yi*EP0t!~iU9h7&bdH!W2Po~8}NDF1223YaD>1ye1lqiU?mAc#~3 zQ&UqHRaH6W()Z(S(j+%ulEY(#NE3^uSVnX=n%B42NVX>3n zG^Q3S<&G7~2yx*@mK}{}$8NT$lcwJYaW!eUJSK|$BP1XGr9sI5VQDc%h|F97W%l`7 zzN!5!Dd);0=oEM^7K#1;VbKHjVi)l|?+QxZE9jnHHfUqUr<+!c7^>`nw@dIJeiw$7 ztqeUh@?y=}VQywq4vJs?!;({Spk}veQStI3Jo8s_u{AnX9S)%yW3GMNR7W%Tk76)_mut|H3wN^hnI@Go`9ziQQqD2So81wWP$ROtYjqtjZ`%G>tD_ zZlN|tV=dCOstRQcCiqTV;;3HYuq*=4Zcrfteqzym3owgMzKvWFz?`Q{Mi!ikU>blL zzY(O}Sn{UM=ryXZG7X5QOceM0#MTW##=H^GdU|E4f^n!QUO`Gyd#QQlwhGy@lm!D+bve2}6jwVy39AJ66MP3QR%p@u1?%}0!EXq3Sk4zgp(y^D zy&Z89V%-51B^5>B8dp@U*p`BiJZw92Z?epAT5)mhqze_}idTTiRWXZoH(3|s=U82| z*nbm_2(^V)ymOOf@jNDey~(U_S_j2^r&U!|Oe?RRQUy06m~+rCOk!cnAVpb@U{Oeb?Jjxviju0hPZHlN|UZtHd7KsmjW68ZsFl#9S z89^lgw-Ng`&#vskZuplLD{>L|^^$9&9WEJcOXov;uVAxy(64mawv=!3ZNy+PjD}(p z0gNx5)8IzaV3%ny1kRbvkk)KUZZah|bnAaKxY3mDGG#ZIvfENpn@p*D zLS5GEW@|x{wV=^D%4HqZXd3M@jczcF{=92XSJ(bW0~))Ia&;Yr4JCXO9`6e8;ruq7 zm$C3^jWN?*G1D9Fn(ex)qS3U-Wm?o=TI75zl7DKLKmylKS%+Qx3xW*@=(KDjh8{t% z3BhRu7m*%Br1#;~?WbA#+P$pA={R1(|6z1?kLOlt+5?aW{PrKkl2rL-3{mAe>^y|hG6Cc9}MBY;?XrH7CQe9t4qNW>8byC>lR8f5cSS)rc)tK92unbbeyxe`jHxizs`v_D=NR$-Z=e{Q^d86W{gVVc{P_ zxU-e(U5F74iJ+YKPUAuRrqNlD#$_o7^=Y>>W!!kp+~uSEgw?!)fadZ+3=z%hF|-F~ z5K)Yfzbc6@d-3=%G-up$bLFfgibwNMk(S2&MNS4cG08bPgHK|Cs2FL!U}SrkEB0pc zvuvYSmcSz`($cN zx*gwtL~sVd+X!&L+U#K#tVoAV2Z|Zl+@ePsYU811^B`t%K9|h{_559<)0x9h8N{yz z+(+!l53FT7jQp{QmgZWVPF*{ahl#gG^8H3_ z&WM^(d^(#T8bkiH#8%OhsNPk3lCJeczK(zblP$pxw7o-M=oH2Yx zB(m4<=7iIh56AGz$g_W#Nf8^yLYpCf)F!iwf#aYi;=tcSj4c;mj)R)Q|FEVS@%VVC ziR8@h)>J3POyCE+NZfp^6TeL0F}NWm8m$o{Ci1>@8Jd*5ML-hwco?UhT@+%J$B_^_ z5bQ+oB!Z_9JdJ=RI?cO7`1&G(!w8NbphFGPiATbayTwlvd06Rj44UbFS)2S_2bndq zoUJYDD=bgU{SDQGfcj5@k!0_BjQav=Q%+#$Ed)6G-O*zABpzZ#{RM6ZD9142O$5gg zoJ4R6KpVfC#idC+nPmyT$vnz99yrCm!I?Ihf5-E4U1{SQP2*jr@eQW&+N$OM}cFU3^ z*PjumW1{yAp2VIJcg^5E*`v+}W`Mg;L@!Lr0MOcGUz zIXqen`-KM>sR|?3*}n&nSo_(%pk7nkn=%95+S8OSm?kdH0qN?6k0delZeFbpzc*au z+{XfvYM>mL-25geJ%J=OdeB)@Z!oJ{f`HNksgx$J-_7&td`PLKT;MeY@#&E04!M&p zP%DOIdm+d`@E{avU20K_Z1vD~8$gF}*xe>j;mD5Ic};OgwpMSqiI48#1B`o-ucnEZ zA|5Li7xCo5`RrUoOmjr9rifmR5t*)t%ypyAnS&l3w_)6#8X(QIiG$S8 zW(D;brv`N#lzLJx1_-s3kKrf1#3!Zvrg+uK!u3&4Pd7ZY8{Q#z9yLWmoIY z`3AUrEzQ2&ntZ!8`lh;kQ}<*x`KC4arX3D-WfnANPHoDZ+L$@rl{vj(R$)_SVMAu& zxsb5USsw+5ZI(exZ4U3>6yCove4s0QU_COptZ>{7^(?XPaLhNy*MNfW{5MHB@Tbuw_bvJ3(s zHK^xAjXQQ<@r6>Ix*msJw~AF|F#lH1=cf6s((rwxz(AtFM`^td>s=WmnlmOhWlV0& znCi-y+K@4;;jUSYX@#z|!sfKOO=)u*(@I=vC1m+-Fj?WBW=F*V^0<$=y$-`IA~-j-SMqojs*tyM1fJw%5?dAS)kYvwc^hgCN(?X+ zM?Q;>g4bKkkQ?(TIcPcHVCe;tX%#XdS95m8`PUj{{X*CdLEm_-5#?A|7)FukgD9yI z8iq0QR-Yc-{jmvBpc)WwGOQ_OSYt}ADg3u649b# zK|{}lM!G_+&7ql1p_zxf9@RI74snGJX$T#1{akRkD>$V&IHM^z<8VY{@IY7az;$_T z2xK;yGmnOxWUogajXa!mIO*i#M)PQwd31xhZuGgqLr*5WKH%tp!(NBI&IGT^cbR)$ zXzfjUlR16Ql16i1m$`34+rR6W1-g2B;`Qs-?Z}Cz^m)eoZo0pAiygrwx4Gka67JsH ze=t^R^>!m`5+}arqeadV?!~xR{2$nC6!vA|>V=Vk##O*k3nb!KKS}28{3nUs(?Kgf zIhpCFfLv^6Ch&?NaZm!SkPOrqDi8Sr_dIRe!UBxQM{xU=#~mT6m+}Y>o*%_adAH(E zkw?m)!qvKu0)jVZH-seb%4!Vg<_hT69FW!&kk%NG?g~g>r$3jLL9*bSf3V9xso6iR z$vwQW2Ic&H2uN?dA46*qkViEx#T~XwqydtWh^{bhQ)zKU1zrYI zNNJ+wkeq`ukW%ZgEZtLHkD&=TK_>!mdo3$gDq)va29uN)JUWZsfSIUKJmJ9`OO^A= z%iO-`a$H=5N60p<%8i)OA#T?4NcNftTg5H>vX`^}Dt^M)9j{lnu4v?7Fdj!^41%!; z#vz!1V4|?B<*96v7`>Lq*WHN-Td)~VAGYGF$7SO*jJrk{TJ?!AwDc2oCSwz*L(+|Q zO)d8jrkxVX6vzieNGB?ECP0V2PQ}`YMud86*IyUu4{!_fbxwSMzaquXht^=-l9BSX zg`gd59=`4nmi0W5|0s$4^-!XZ)3%;(@Tw!Spru>sivW$F#{{ipW84q~ zXj)bR5RmB=Ew`Gzb~uLe5cnfNArw<8^lN-g+G z9l6t1d^4uzVZS_EC?fhDHsIQhiniXjZKh^G4S&3wqD{{QXsM$bkCUb*s{P zDHtN!)nJIMWrI3!A2OcX3y>&wI277)c62f%r+pG&G}v`SR5S!@G^W8PO9yelCTxM& zfCx>zK!nai>;_^gS>xz*;!Y$ds?koiok`sKMa7Q!culsdN~v=jDyqsdGc+#sY;=i{ zp2Yfd5j=%}Sc>+)(2#9XukCJsA<`H0P4#L!^`M-Y$^gG>)+@%23f?*r)H=5R?f z>OUAg8z)!{_AeU1ZT^-x*K49gaWxO|((ITsoS*%fk27>tvY;er#Q%e}9D}lLOTj%@ zBWjjluA01u4`OS?#y$L$g+v4i3)(zhz~(@(c=m{k_VP5gR_xfz_eW5^_D#j!*4=?D z=IrBz>>=UY$A<)ufzr?+I!LE6-Yty#L85sg!k~KX+dH3PUcI7OLNS(-&}m8e1^^r_ zpo#~zk?4>yelB(_uRSlefURN2k`Z)6kb^sP*Z(}tkg~%!+Iz(Fv&BdxI8)w!#uAeASp&mHmyA+m`aOU znI7Gt0??U}3dR(fuI^Ud#+WExOy_Jh9;rw?-Bi4AvIiZE%wK z`yqZNGKU$`T6DL;e6jyUJ|r~Eklv!}4ARBT7kT8}dP8=Lt}`$*Ln#A|^j2u}H}q@K z-2qtih5{&X8#Ie^hxz;LubMB|1|9f<#fghYct*DDOI~2oT63XEHj@{ax9kf(8~Q>Y z*{?O#8+^okTf;t((@g$Se$It2!4jIf2u9+{aTxe3zv1Z5gID~Xz_M}~4vH~Rslsuo z7O%X_*L#tv39e<0cm+&Ho5i+Q;5gz-%=EFicoMAbTVLglF2s0Cpp-j+?s2vHt>bYc z9AYFn`6%{;v%<+G=1*rZMr9c`0ha|=9pzEs4t%))$aIt=b>hHLu+;8yHXr3T_27Ns zdXrDFQr6bOPzYt6CiU*eI$SXKl@J~sw?Wa_Uz*GD#o>!|bekxfEi{l1$W0{Y5da!oh9|Rw<$VH>l zTRe<~saqn_!Dt;`r;LE&@Ua)9h4KIbj}P{P@ap!ZkEab^;&1?M>M$l$R*K7}wpobs z@N*_$eL!z~jhq^qnQtPrm$))Zjmt;)eh?qTwU@^X~#t`;bc?5yb z=6eN(5o|;p&xkkw$}_~zf8`4Y7!6%pbpH#W85k<`YT$%OZtmoB_{7xk&B}&m^cCohrM^bL9c> zOqPq~LGbJbD54W(3cP2-GZo&4z|$(1kW*!Mxm1?rd}yf$)Ly^Dz8ZmIJ_@ zBK~qHUU?dG?{ZeW!wsym_{cZC>$`3Wri7HvOGX>~Om~O#JkB9${=i zp1B0BmhqzRyZj5@C#=np4a|ot0@c+w{hX`M@?oKT*Q|Dbok5?1OeqACMf&GzEAlA-*!I`xbPkS8ISNq|1!;S!Xg7nyP=OYp_*@uO}6x~loW#jxV+M42kitCm9* z*e>mO9Di3aGYvvJfC#Fb0JRUzwWm_(irfJSPv$oe%}PX*Yu-)=v~1W#WfvwAMw;7) z+eimFaOt;1Sz@1Wm9Ef%%qU#^vA_)}w^zO*T>s`li6^n_L8z?2dUppGks}bJc}AWT zUZ3;s>2F~~HP+w}xQp=>(eXG!YPT?>MbYOxCBp$pZhySRUebQmN_ibB(jwd4rtI1W zF)PHYpTk17-1*z*JdSZ#6XP%O`Zh0+bC-AuyY$#)K9GN*6N4{v8BTn6U51>Gi4&K> ze*f!bK0N7J?9OvYr&bePHZ~_Ys;b=v2RMz`l?G9Ig(oGUVpbC|siMk}Uu>UWQUwki zp081ThMa%ex%UcRV-lmk=M&&0N<98OKiv&Ift8(DzvQv^;AUl+O@S!dqeI>YegO3D z7GM6r7qX8vH`S_Z++QM3VkHFHhCxY!hvI`367WoR-1k9xFs4s~@Rc|!Ktp`xEQGH# zV^SmnyfmYrS15cKPG4c0=TMx0o!eMa1uNhpYmj2Z28b-6MC5D4QPQA*+iTInysC;S zMM2@9yo2EH2;RjC@Lv7!;?jj>3Vei7R+6!;6aQ~6oF*nFM$ z_xVUQVG8@I(5sXP?7f=zseG}^_2>k*j6hkbq$!I z5kV6Gn2x2kN*lTI;8z+d7f!3fPj%9#bY_l&cO?Nj;r2r=057bi+THMfV^JUQhnqql zMuZP408VY}L`ZhQQU*BN0FSL?Bts?=Ccyy8lINRwIXT)@uFs*mnwV`9r5Lu}`3#ei zc-U@i!EgB#JPB<(TD>IxB}qv!n;}Wr3gFhyyZodVQF13Y>fsc@*QwXrKzWrX@P6{qbA+6^cUhR8)GDJ}qg z+wAjg@*bG`_Q!PMl$|9xdw5BV4Iy{R)A(erIj#0$|ut0sUDo%1x4$y(ml%fB)Qf%IQdeH@?QHOt zK4i0wAnF0r+PpIDgDevZ3JSpMpLp*Xtmy*;pJR2+82TFmGXB$6n%bEMah=+^sTbTV zWpk&u$T3TA@Gs#!-zsoKYKL=O%wC zo~0ot(99!GxS7Neo=Ld3RiJ1^#D@XWQ2tkM5fv!yW(S>b1WNTR6qh$x6WaL(dYK~b z3zkxisVEt8#9?r|_C1K<)@nWo24bJ}ejzGEGKP}S!GUjexO{mSSfF}FNzp^-3Tqy6 zw~S=U#}HNdJ+9SsVmkuk3J|n2m9{zPCe}tty#~=_8I9@f=(!Cm7L`}R%CrLfIN@tq zkm%;im%I6j6&>~(72=yHX&!I(c219$Ch5m`uG8jVZG_Ma43W_K1c^wJ>jH*Qd?^22d24_&bl*EjuFxN5l$nY>R(E<@>VYf&R8~@^oj!KY{;fBz#1Zi{d z*A%VMn*{wFaWO&a#ezjpqLjwJW@1>PbS43(g4-JmZBuMzxIvSVd>#V*%tdOFG!%9@ zWl7Qqr!!f4m&f8L(z*_E<`%-Iil9qZYhF!n3oLK72=<%(lYpz!g#Cn1514# z@k5HZeH7awa3`ftUF^Zw7XSd45Z33#{2tO|_`dh+J)}o`-^S6zZyJ^AMMgIk#*EJS zX;LjqmDvG~Gs1JFAYZqc-`#%>#H}(C^jc+dgo)kFJX9S$&rigz;Q=B$Ofrk8R4FiH z9(aerj?WC}(htIZZQ%oYM0P*?*M6(KYrRF#M?9R4>*~fB#ED20!ES zQJVL9h+qobRcP1__akD~@IX&{Vq707p%sS=DNIDCN&(Rep<^Hm0Iu?JP*`hkL8v$~ zibV!0({72Sn+;z_g5GMV^$}OQN!>*EzEX@@JKYnN;^kX84tf(Hj?}=Z`GuzfMB)8# zJ_;wQKs8*8wI9*Qyvol3qt^DT^^=XYezj&XH&cp<@^zr$sr9#@y`-bBx_f4HwCp9D z4tPHglXE}(*M6(~YyEe{h^r%DPkeHoxtCY1sRmMHpBiYS^UkZ*xAXA9(XBtxn4I@n zt$6cSo+x4`z`c`+&-n^(1+D?az?;bFFL~FQCum6UP(n4NTD#oJ^LzC&6xxUN)2FbI zQIslV{y$@gp)^AkM)?$94Q31ygtCIm?;hm|)DP?dfS<@5 zD9!ZBfI~C;UM@Bdl=jwr6w`IrU59fUV)`}4^mE04*($<2<0^vnW7p+v3E!NsdGbeL z5w5V*k0QHlFMiy#)AU^O9=1F6+0=%J9_J#voC}Y3g=f);Y99}4!|`8>k9B9 zT1c}ww#gj3eR88Y-erz&Fvo+vVdMB_b3&6jp>9{V&d0=w&1O6%-UHE@E^}ssIg_jt zsm47cjUoNk<$n|qv~lTXd4281TCj%r^?i;%YkW?5wr=I&ti$rl0~%AZ zT`Ad(mLV?75K4#MK3TG}d=KB#=YXj(F4Gm4*%+DSip<(<*lf5E6Tfpvb4>51nBI*s zeO)nqn`4GG#SCkV$#uo#o=kAXnE@t87lp|FR3TQ;l%5Ek(X!^tVAB9NpPD|QYM}s25ZnP z@xd_Z;}}m37l8dbDqCa4`#Dk%_&UbVInwrS9!2OTHga371EIm1o?`znDMtLwPYP!9 z#id+nji$Vl0tL#uW4JV(Rfu5&FJgG~UjU*SP4Mv9-;Mn?GXIN*11;bapdMwenN?)soYc!c%K^uJPDC+|LY)4)L z=e17;vlzZ{rk1d|4>zm7xctQ@joct!dJVjZD&r(yb@V@jOpl|c`YGCjia4s-Z z_-*yuF1z9eHwI?A0<#+evoX?ltMB%FS8V^rzyYqn0S)x;f+zE!#=ya@z`+fHgF9sI z*BIE}71+Ol{U)$eQgAOJy&gl#T*1&+2xKHA>2I{Mq~L2K zCg2{^qpY_QH(a4L1ku#oJeDC*CyT3-q=9U;v&UrVP(TbW)E+YqInKkE_RHbg^FeWK zuGF2Ci1=bDD;D)V_>L?(aoON|{hGH4-VB+hY!r)%rEwAH90+EfBG|6Nwzj;i2yJ0X zhG;03!om>=x0hUA2HzE~a2wDka)t7e__Q>P5VM00DRcIUbPk=~8;^TE#{c(NL>eJX-po4 z0HvMVd)|@?xGhw^(59Tn%05Cc2g}TYWNWy#K-XgIDg;}xB%NRq!97~>Cale*6xqS? z1PuL8W4>oFj>GXXcT~W)V=I-eC_hbA41k{Hk7@{HV1L(ou z6Nzk2!*~w6OznS&Avc15A-K~B(vaY=!5=yxoe74d?`>mp44XNDz(eT2 z;45KD_#G5|6ln~<>Em3jNcCPt8a>;0LYn&7fv8xzCt`&I=9c7n^W4T7dnta*70-wj z4>d^vbDQB-8C=%WxEOAFZLN{A7Wttz`iIm4liBYQ>SJu42z4jQwDEQ;SHG(lnJcBJ zA-~JA#CSBAWKhDtSL8rPCY*t7bP^A(lybov=k1kJF^_m1Xi$J|o%C@9U~YfRy49I` zuN1;HCLq$b^E}NGkW6lqBqLK3eOaciUm-}f+rkUJ>GtdRzTUGc#+QX;D(-vjz1 z2DpDBDFHKxERw{YCM-y!Na^IgfKCRQ3j=(71sg$Aqt;U@V@1x`jtSpF0#rvf3+f-* zc)%gaug#JosP;^a&4^w6CG`_D#PBbEO_Q#Q@ua&R_}?RqLclp#cWaxjKVH@sD-V6Ksd5S})Bqz6L{P%@Xge zmwE@2CnEYOx()F63946sDKKP%v1@u3QfMMMP2KZ K(zzJvmj4IfR-5hs diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc index 87cc999755d2b021dfd86a338b51a915b7fac008..ba1c94bf3d2f9ad5708bc68dba69817efee17c8b 100644 GIT binary patch delta 27873 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 delta 22863 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∋{tT3N52oC?z0O}B#6R!0pmZ72%P4|aBx^Ht-;4f7fi#~NeoDlvd`Wz{M%)M#5RKFj8C3W*O_0_O?&C1ZcN=$GcfIEDaJ z5SbP6yU(CEopVKo5r2tzbg%+{5QZ5meRcG9hCf1fJ+RjiAoXFc`GX?H_m_waF~~?? zBc@L}NFCE+g!Y(G(z~^S?3VS3-8AZ|lKSlaNu(5oVyzpm=Y(-!jkvNEhsgcfEZYIG zcElR3#YKNnEzzOajd3BZIckp}7`;bSk&j4z6`ocm=#Kr4mYC+4c6T`RZrhmHp41#; z`CuD+wI_F{Q`(b%+zQh;EZin%vm?~X&2JJjY%Q_$zA?3#uDT8gITvaAOQUOm*bI89 z8OCaa>)nOhBU<9>hY(AN?dcu#HWODl88#X~d`kj#k)XSp6Pn}u*ivnM=m}y=91SWX zl-cas!;eSxnEmz^cWbk|Jq!FaN2lBL*i<5l zhZ$dLec{qiX(CE!CVqlRjG`&z$n#Om;Ozi-Pgs5UCj1=j_U^9ab08c&nqjPD29$<} zNZ&?OUs*$2FBcr6QcuqL3U&jUHUK!UePPJFqS+hTyEH0nIe-yVe~C5bT5)hfAREd zWNZ-2#3e@U2C+F8_TCyLk2fNSN#Nr~qobEdcgc0s&1xf~Qf#xl4Hip}u$a&IS*57A z%6Kn28Lk*lt<)Iv>8h|tq2;E$u9M$aYy4Fg}+!X?o?N_Y`%E@8z=FtVz|yz{>kMjDq^i3R=e zlvCac!1f8kAl>U0ylkfj;Av{%z-S|`T8y6V1SJe9`3OCTy0DQTgc%clxYrO2VKPYR zC=_87)`+pjgVkc;V7$>}D|S?qQ%FW|A{*=J86lf#c7E<4l5NJo8ZmD@oprz|xiPF^ ztXy}Y1=g@y=)e(xUDS)b8L4g^?Q*!FU-D^y=ZUD?MPJ=VCpN3Qsm3=oVqo6@IEABY zBPDT&WUaToH-%52G;S^4nC=(ztnGCidYE-w`Nf^WdU}x<+~jX4;V-e^Z!2LBv&l)v zn7qLphL!hG9lUS@2fTao#`#;c)E5i(6{KDTi0l+tSu!7E>h?t=9z^){dvCVc(qakp z6QH*_#!H(-uGn?_(@o;6Gm9T=QP1Hob;C|WUtH#=8~ag)kYb4N7{jC(osGT4jFG-7 zAAO@&rO&$Bn?cAjS!6Uxv2f;i>VnQ~*dFMMO8nIo8@%*=Ex70hmTH>O1S~9gGNW{V zHGNM_t?9%~|8_afhz^Ret#TR)gi$0(!GaUOQb%K`TvrL!g1b zJIwlw;baWvI4ZF8{s$@c|Je0|e|jZCGSOE~bL=Xju`YYeRDSmx69N0Wxki^jAw? zc~UQPAxGDdUM`j&!qQ%RbL{cULZZ~3HJb>++XPSM98}=$=Ng}H z6_YZ#)r)~$0f1?dE0J1d%-kkgriZ7JFm#o`g8L8h!2)-oB6Ei!9TlW2=eCi@(9h_z zUCeD|mREzO9Dw<*K#Hev49$-x$#Txu1IxbSlaLor-3hS996X8CQvgo`TxiyK8ZcE9 zFy(E7reXEJ%|jKssRoD$*N-f7%KWi$sR0fa#!O@hH*|lz=Q|jH8AiuWk#>AhllX&{ zZ%Mq{Gqbkn9%4sRV~x@lk(C>ft#z)8r}xD44BOITdBV87MU3XhjTS%uNpf_GhQ7-S z3GKOVp|C-{VXc0Ii21vO%KRa^yM_!s#R=W=`#15i9(7N*H3od!Y6w@;9Hp}4 z7{24#Nmg;Jab&01td-D1E$ahD#-LVlpQRZr?{4MiyTQ8)Fk7`F3~Se0>R9U zGM?Wh@XFZwUHY=%D?<}|1eUW>lM19)Hr$7@&8y{UN#w7Ezf(2w1OecLqTElia z(GJ}s>O{IhpA8y6hu`=ggm~TtsKrLv4>n{Sz!~81eG&AX3It{XOamB-g7p|7x|D^m arpCxNksvl0Q`^KOV|$wzY#)$3>Hh%B05BZ@ diff --git a/pyBer/__pycache__/main.cpython-311.pyc b/pyBer/__pycache__/main.cpython-311.pyc index 2d380891524b0fd20a674d29f92f0fdc9c769ddb..03b44a5fb6103fcd0ccfb266af6f27574fbde55b 100644 GIT binary patch delta 36663 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 diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 1b430e2..8d10876 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -260,15 +260,20 @@ def _numeric_column_array(df, col_name: str) -> np.ndarray: return np.asarray(vals, float) +def _generated_time_array(n_rows: int, fps: float) -> np.ndarray: + n = int(max(0, n_rows)) + if n <= 0 or not np.isfinite(float(fps)) or float(fps) <= 0: + return np.array([], float) + return np.arange(n, dtype=float) / float(fps) + + def _binary_columns_from_df(df) -> Tuple[str, Dict[str, np.ndarray]]: - time_col = _detect_time_column(df, fallback_to_first=True) - if not time_col: - return "", {} + time_col = _detect_time_column(df, fallback_to_first=False) behaviors: Dict[str, np.ndarray] = {} for c in df.columns: name = str(c) - if name == time_col: + if time_col and name == time_col: continue arr = _numeric_column_array(df, name) if arr.size == 0: @@ -323,10 +328,11 @@ def _timestamp_columns_from_df(df) -> Dict[str, np.ndarray]: return behaviors -def _load_behavior_csv(path: str, parse_mode: str = _BEHAVIOR_PARSE_BINARY) -> Dict[str, Any]: +def _load_behavior_csv(path: str, parse_mode: str = _BEHAVIOR_PARSE_BINARY, fps: float = 0.0) -> Dict[str, Any]: import pandas as pd df = pd.read_csv(path) + row_count = int(len(df.index)) time_col = _detect_time_column(df) trajectory = _trajectory_columns_from_df(df, time_col=time_col) trajectory_time = _numeric_column_array(df, time_col) if time_col else np.array([], float) @@ -336,18 +342,22 @@ def _load_behavior_csv(path: str, parse_mode: str = _BEHAVIOR_PARSE_BINARY) -> D "time": np.array([], float), "behaviors": _timestamp_columns_from_df(df), "trajectory": trajectory, - "trajectory_time": trajectory_time, + "trajectory_time": trajectory_time if trajectory_time.size else _generated_time_array(row_count, fps), "trajectory_time_col": time_col or "", + "row_count": row_count, + "needs_generated_time": bool(not time_col), } time_col, behaviors = _binary_columns_from_df(df) - time = _numeric_column_array(df, time_col) if time_col else np.array([], float) + time = _numeric_column_array(df, time_col) if time_col else _generated_time_array(row_count, fps) return { "kind": _BEHAVIOR_PARSE_BINARY, "time": time, "behaviors": behaviors, "trajectory": trajectory, - "trajectory_time": trajectory_time if trajectory_time.size else time, + "trajectory_time": trajectory_time if trajectory_time.size else (time if time.size else _generated_time_array(row_count, fps)), "trajectory_time_col": time_col or "", + "row_count": row_count, + "needs_generated_time": bool(not time_col), } @@ -355,6 +365,7 @@ def _load_behavior_ethovision( path: str, sheet_name: Optional[str] = None, parse_mode: str = _BEHAVIOR_PARSE_BINARY, + fps: float = 0.0, ) -> Dict[str, Any]: import pandas as pd @@ -369,30 +380,38 @@ def _load_behavior_ethovision( "trajectory": {}, "trajectory_time": np.array([], float), "trajectory_time_col": "", + "row_count": 0, + "needs_generated_time": False, } if str(parse_mode) == _BEHAVIOR_PARSE_TIMESTAMPS: df = pd.read_excel(path, sheet_name=sheet_name, engine="openpyxl") time_col = _detect_time_column(df) + row_count = int(len(df.index)) return { "kind": _BEHAVIOR_PARSE_TIMESTAMPS, "time": np.array([], float), "behaviors": _timestamp_columns_from_df(df), "trajectory": _trajectory_columns_from_df(df, time_col=time_col), - "trajectory_time": _numeric_column_array(df, time_col) if time_col else np.array([], float), + "trajectory_time": _numeric_column_array(df, time_col) if time_col else _generated_time_array(row_count, fps), "trajectory_time_col": time_col or "", "sheet": sheet_name, + "row_count": row_count, + "needs_generated_time": bool(not time_col), } df = clean_sheet(Path(path), sheet_name, interpolate=True) + row_count = int(len(df.index)) time_col, behaviors = _binary_columns_from_df(df) - time = _numeric_column_array(df, time_col) if time_col else np.array([], float) + time = _numeric_column_array(df, time_col) if time_col else _generated_time_array(row_count, fps) return { "kind": _BEHAVIOR_PARSE_BINARY, "time": time, "behaviors": behaviors, "trajectory": _trajectory_columns_from_df(df, time_col=time_col), - "trajectory_time": _numeric_column_array(df, time_col) if time_col else np.array([], float), + "trajectory_time": _numeric_column_array(df, time_col) if time_col else _generated_time_array(row_count, fps), "trajectory_time_col": time_col or "", "sheet": sheet_name, + "row_count": row_count, + "needs_generated_time": bool(not time_col), } @@ -630,6 +649,24 @@ def _build_ui(self) -> None: "Timestamps mode expects one column per behavior containing event times." ) _compact_combo(self.combo_behavior_file_type, min_chars=10) + self.grp_behavior_time = QtWidgets.QGroupBox("Time") + time_layout = QtWidgets.QHBoxLayout(self.grp_behavior_time) + time_layout.setContentsMargins(6, 6, 6, 6) + time_layout.setSpacing(6) + self.lbl_behavior_time_hint = QtWidgets.QLabel("No time column detected. Generate time from FPS.") + self.lbl_behavior_time_hint.setProperty("class", "hint") + self.spin_behavior_fps = QtWidgets.QDoubleSpinBox() + self.spin_behavior_fps.setRange(0.01, 10000.0) + self.spin_behavior_fps.setDecimals(3) + self.spin_behavior_fps.setValue(30.0) + self.spin_behavior_fps.setSuffix(" fps") + self.spin_behavior_fps.setMinimumWidth(90) + self.btn_apply_behavior_time = QtWidgets.QPushButton("Apply FPS") + self.btn_apply_behavior_time.setProperty("class", "compactSmall") + time_layout.addWidget(self.lbl_behavior_time_hint, stretch=1) + time_layout.addWidget(self.spin_behavior_fps, stretch=0) + time_layout.addWidget(self.btn_apply_behavior_time, stretch=0) + self.grp_behavior_time.setVisible(False) self.lbl_beh = QtWidgets.QLabel("(none)") self.lbl_beh.setProperty("class", "hint") @@ -682,6 +719,7 @@ def _build_ui(self) -> None: fal.addRow(self.lbl_dio_polarity, self.combo_dio_polarity) fal.addRow(self.lbl_dio_align, self.combo_dio_align) fal.addRow(self.lbl_behavior_file_type, self.combo_behavior_file_type) + fal.addRow(self.grp_behavior_time) fal.addRow(self.btn_load_beh) fal.addRow("Loaded files", self.lbl_beh) fal.addRow(files_layout) @@ -928,6 +966,9 @@ def _build_ui(self) -> None: self.btn_load_cfg = QtWidgets.QPushButton("Load config") self.btn_load_cfg.setProperty("class", "compactSmall") self.btn_load_cfg.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_new_project = QtWidgets.QPushButton("New project") + self.btn_new_project.setProperty("class", "compactSmall") + self.btn_new_project.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) self.btn_save_project = QtWidgets.QPushButton("Save project (.h5)") self.btn_save_project.setProperty("class", "compactSmall") self.btn_save_project.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) @@ -1264,6 +1305,7 @@ def _build_ui(self) -> None: export_layout.addWidget(self.btn_export_img) export_layout.addWidget(self.btn_save_cfg) export_layout.addWidget(self.btn_load_cfg) + export_layout.addWidget(self.btn_new_project) export_layout.addWidget(self.btn_save_project) export_layout.addWidget(self.btn_load_project) export_layout.addStretch(1) @@ -1279,6 +1321,7 @@ def _build_ui(self) -> None: self.act_load_single = self.menu_action_load.addAction("Load processed file (single)") self.act_load_group = self.menu_action_load.addAction("Load processed files (group)") self.menu_action_load.addSeparator() + self.act_new_project = self.menu_action_load.addAction("New project") self.act_save_project = self.menu_action_load.addAction("Save project (.h5)") self.act_load_project = self.menu_action_load.addAction("Load project (.h5)") self.menu_action_load.addSeparator() @@ -1676,6 +1719,7 @@ def _build_ui(self) -> None: self.act_load_current.triggered.connect(self.requestCurrentProcessed.emit) self.act_load_single.triggered.connect(self._load_processed_files_single) self.act_load_group.triggered.connect(self._load_processed_files) + self.act_new_project.triggered.connect(self._new_project) self.act_save_project.triggered.connect(self._save_project_file) self.act_load_project.triggered.connect(self._load_project_file) self.act_load_behavior.triggered.connect(self._load_behavior_files) @@ -1714,8 +1758,10 @@ def _build_ui(self) -> None: self.btn_style.clicked.connect(self._open_style_dialog) self.btn_save_cfg.clicked.connect(self._save_config_file) self.btn_load_cfg.clicked.connect(self._load_config_file) + self.btn_new_project.clicked.connect(self._new_project) self.btn_save_project.clicked.connect(self._save_project_file) self.btn_load_project.clicked.connect(self._load_project_file) + self.btn_apply_behavior_time.clicked.connect(self._apply_behavior_time_settings) self.cb_filter_events.stateChanged.connect(self._update_event_filter_enabled) self.cb_metrics.stateChanged.connect(self._update_metrics_enabled) self.cb_global_metrics.stateChanged.connect(self._update_global_metrics_enabled) @@ -1803,6 +1849,7 @@ def _build_ui(self) -> None: self._update_data_availability() self._update_spatial_clip_enabled() self._update_spatial_time_filter_enabled() + self._update_behavior_time_panel() self._refresh_spatial_columns() self._compute_spatial_heatmap() self._update_status_strip() @@ -2919,13 +2966,14 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: if replace: self._behavior_sources.clear() parse_mode = self._current_behavior_parse_mode() + fps = float(self.spin_behavior_fps.value()) if hasattr(self, "spin_behavior_fps") else 0.0 loaded_any = False for p in paths: stem = os.path.splitext(os.path.basename(p))[0] ext = os.path.splitext(p)[1].lower() try: if ext == ".csv": - info = _load_behavior_csv(p, parse_mode=parse_mode) + info = _load_behavior_csv(p, parse_mode=parse_mode, fps=fps) elif ext == ".xlsx": import pandas as pd xls = pd.ExcelFile(p, engine="openpyxl") @@ -2941,7 +2989,7 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: ) if not ok: continue - info = _load_behavior_ethovision(p, sheet_name=sheet, parse_mode=parse_mode) + info = _load_behavior_ethovision(p, sheet_name=sheet, parse_mode=parse_mode, fps=fps) else: continue has_behaviors = bool(info.get("behaviors") or {}) @@ -2964,6 +3012,7 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: continue mode_label = "timestamps" if parse_mode == _BEHAVIOR_PARSE_TIMESTAMPS else "binary" self.lbl_beh.setText(f"{len(self._behavior_sources)} file(s) loaded [{mode_label}]") + self._update_behavior_time_panel() self._push_recent_paths("postprocess_recent_behavior_paths", paths) if loaded_any and not self._autosave_restoring: self._project_dirty = True @@ -3038,6 +3087,49 @@ def _update_align_ui(self) -> None: self.btn_load_beh.setVisible(use_beh) self.combo_behavior_name.setEnabled(use_beh) self.combo_behavior_name.setVisible(use_beh) + show_time_panel = bool(use_beh and self._behavior_sources_need_generated_time()) + self.grp_behavior_time.setEnabled(show_time_panel) + self.grp_behavior_time.setVisible(show_time_panel) + + def _behavior_sources_need_generated_time(self) -> bool: + for info in self._behavior_sources.values(): + if bool(info.get("needs_generated_time", False)): + return True + return False + + def _update_behavior_time_panel(self) -> None: + need_time = self._behavior_sources_need_generated_time() + count = sum(1 for info in self._behavior_sources.values() if bool(info.get("needs_generated_time", False))) + if need_time: + self.lbl_behavior_time_hint.setText( + f"No time column detected in {count} behavior file(s). Generate time from FPS." + ) + else: + self.lbl_behavior_time_hint.setText("No missing time columns detected.") + self._update_align_ui() + + def _apply_behavior_time_settings(self) -> None: + fps = float(self.spin_behavior_fps.value()) if hasattr(self, "spin_behavior_fps") else 0.0 + updated = False + for info in self._behavior_sources.values(): + if not bool(info.get("needs_generated_time", False)): + continue + row_count = int(info.get("row_count", 0) or 0) + t = _generated_time_array(row_count, fps) + info["time"] = t.copy() + traj_t = np.asarray(info.get("trajectory_time", np.array([], float)), float) + if traj_t.size == 0: + info["trajectory_time"] = t.copy() + updated = True + if not updated: + return + if not self._autosave_restoring: + self._project_dirty = True + self._refresh_behavior_list() + self._compute_psth() + self._compute_spatial_heatmap() + self._update_behavior_time_panel() + self._update_status_strip() self.combo_behavior_align.setEnabled(use_beh) self.combo_behavior_align.setVisible(use_beh) @@ -6746,6 +6838,52 @@ def _load_project_file(self) -> None: return self._load_project_from_path(path) + def _confirm_discard_current_project(self) -> bool: + if not self._project_dirty and not self._has_project_state_for_autosave(): + return True + ask = QtWidgets.QMessageBox.question( + self, + "New project", + "Discard the current postprocessing project and start a new one?", + QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No, + QtWidgets.QMessageBox.StandardButton.No, + ) + return ask == QtWidgets.QMessageBox.StandardButton.Yes + + def _new_project(self) -> None: + if not self._confirm_discard_current_project(): + return + + was_restoring = self._is_restoring_settings + self._is_restoring_settings = True + try: + self._clear_cached_analysis_outputs() + self._processed = [] + self._behavior_sources = {} + self._pending_project_recompute_from_current = False + self.lbl_group.setText("(none)") + self.lbl_beh.setText("(none)") + self.lbl_behavior_msg.setText("") + self.lbl_signal_msg.setText("") + self.lbl_status.setText("") + self.tab_sources.setCurrentIndex(0) + self._update_file_lists() + self._refresh_behavior_list() + self._update_trace_preview() + self._update_behavior_time_panel() + self._update_data_availability() + finally: + self._is_restoring_settings = was_restoring + + self._compute_psth() + self._compute_spatial_heatmap() + self._save_settings() + self._project_dirty = False + self._project_recovered_from_autosave = False + self._clear_project_autosave_cache(delete_file=True) + self._update_status_strip() + self.statusUpdate.emit("Started a new postprocessing project.", 5000) + def _import_project_source_paths(self, recent_paths: Dict[str, object]) -> bool: proc_raw = recent_paths.get("processed_paths", []) if isinstance(recent_paths, dict) else [] beh_raw = recent_paths.get("behavior_paths", []) if isinstance(recent_paths, dict) else [] @@ -6906,6 +7044,7 @@ def _collect_settings(self) -> Dict[str, object]: "dio_polarity": self.combo_dio_polarity.currentText(), "dio_align": self.combo_dio_align.currentText(), "behavior_file_type": self.combo_behavior_file_type.currentText(), + "behavior_time_fps": float(self.spin_behavior_fps.value()), "behavior": self.combo_behavior_name.currentText(), "behavior_align": self.combo_behavior_align.currentText(), "behavior_from": self.combo_behavior_from.currentText(), @@ -6985,6 +7124,8 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: _set_combo(self.combo_dio_polarity, data.get("dio_polarity")) _set_combo(self.combo_dio_align, data.get("dio_align")) _set_combo(self.combo_behavior_file_type, data.get("behavior_file_type")) + if "behavior_time_fps" in data: + self.spin_behavior_fps.setValue(float(data["behavior_time_fps"])) _set_combo(self.combo_behavior_name, data.get("behavior")) _set_combo(self.combo_behavior_align, data.get("behavior_align")) _set_combo(self.combo_behavior_from, data.get("behavior_from")) @@ -7097,6 +7238,7 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: if isinstance(style, dict): self._style.update(style) self._apply_plot_style() + self._apply_behavior_time_settings() self._update_event_filter_enabled() self._update_metrics_enabled() self._update_global_metrics_enabled() diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index f206f0e..45bf89f 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -126,6 +126,56 @@ def paintEvent(self, event) -> None: p.end() +class CheckableListWidget(QtWidgets.QListWidget): + changed = QtCore.Signal() + + def __init__(self, parent=None) -> None: + super().__init__(parent) + self.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.NoSelection) + self.itemChanged.connect(lambda *_: self.changed.emit()) + + def set_items(self, items: List[Tuple[str, str]], checked_values: Optional[List[str]] = None) -> None: + selected = {str(v) for v in (checked_values or []) if str(v)} + self.blockSignals(True) + try: + self.clear() + for label, value in items or []: + item = QtWidgets.QListWidgetItem(str(label)) + item.setData(QtCore.Qt.ItemDataRole.UserRole, str(value)) + item.setFlags(item.flags() | QtCore.Qt.ItemFlag.ItemIsUserCheckable | QtCore.Qt.ItemFlag.ItemIsEnabled) + item.setCheckState( + QtCore.Qt.CheckState.Checked if str(value) in selected else QtCore.Qt.CheckState.Unchecked + ) + self.addItem(item) + finally: + self.blockSignals(False) + + def checked_values(self) -> List[str]: + values: List[str] = [] + for i in range(self.count()): + item = self.item(i) + if item is None: + continue + if item.checkState() == QtCore.Qt.CheckState.Checked: + values.append(str(item.data(QtCore.Qt.ItemDataRole.UserRole) or "").strip()) + return [v for v in values if v] + + def set_checked_values(self, values: List[str]) -> None: + selected = {str(v) for v in values or [] if str(v)} + self.blockSignals(True) + try: + for i in range(self.count()): + item = self.item(i) + if item is None: + continue + value = str(item.data(QtCore.Qt.ItemDataRole.UserRole) or "").strip() + item.setCheckState( + QtCore.Qt.CheckState.Checked if value in selected else QtCore.Qt.CheckState.Unchecked + ) + finally: + self.blockSignals(False) + + class CollapsibleSection(QtWidgets.QWidget): toggled = QtCore.Signal(bool) @@ -1277,7 +1327,6 @@ def __init__(self, parent=None) -> None: self._help_texts = self._build_help_texts() self._config_state_exporter: Optional[Callable[[], Dict[str, object]]] = None self._config_state_importer: Optional[Callable[[Dict[str, object]], None]] = None - self._pending_export_trigger_name: str = "" self._build_ui() self._wire() @@ -1394,6 +1443,14 @@ def _build_help_texts(self) -> Dict[str, str]: "Choose which DIO / trigger channel to export.\n" "If left on Current overlay, export uses the trigger currently selected in the file panel." ), + "export_analog_channels": ( + "Choose one or more analog channels to export.\n" + "If none are checked, export uses the current preview channel." + ), + "export_dio_channels": ( + "Choose one or more DIO channels to export.\n" + "If none are checked, export uses the current overlay trigger." + ), } def _show_help(self, key: str, title: str) -> None: @@ -1670,10 +1727,15 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: self.chk_export_baseline_sig.setChecked(True) self.chk_export_baseline_ref = QtWidgets.QCheckBox("Baseline 405") self.chk_export_baseline_ref.setChecked(True) - self.combo_export_dio = QtWidgets.QComboBox() - _compact_combo(self.combo_export_dio, min_chars=10) - self.combo_export_dio.addItem("Current overlay", "") - self.combo_export_dio.setEnabled(self.chk_export_dio.isChecked()) + self.list_export_channels = CheckableListWidget() + self.list_export_channels.setMaximumHeight(84) + self.list_export_channels.setMinimumHeight(54) + self.list_export_dio = CheckableListWidget() + self.list_export_dio.setMaximumHeight(84) + self.list_export_dio.setMinimumHeight(54) + self._pending_export_channel_names: List[str] = [] + self._pending_export_trigger_names: List[str] = [] + self.list_export_dio.setEnabled(self.chk_export_dio.isChecked()) self.export_options_group = QtWidgets.QGroupBox("Export fields") export_form = QtWidgets.QFormLayout(self.export_options_group) @@ -1690,7 +1752,8 @@ def mk_spin(minw=60) -> QtWidgets.QSpinBox: export_checks.addWidget(self.chk_export_baseline_sig, 2, 0) export_checks.addWidget(self.chk_export_baseline_ref, 2, 1) export_form.addRow(export_checks) - export_form.addRow(self._label_with_help("DIO channel", "export_dio_channel"), self.combo_export_dio) + export_form.addRow(self._label_with_help("AN channels", "export_analog_channels"), self.list_export_channels) + export_form.addRow(self._label_with_help("DIO channels", "export_dio_channels"), self.list_export_dio) qc_content = QtWidgets.QWidget() qc_grid = QtWidgets.QGridLayout(qc_content) @@ -1919,9 +1982,11 @@ def emit_noargs(*_args) -> None: self.combo_smoothing.currentIndexChanged.connect(lambda *_: self._update_smoothing_controls()) self.cb_invert.stateChanged.connect(emit_noargs) self.cb_show_artifact_overlay.toggled.connect(lambda v: self.artifactOverlayToggled.emit(bool(v))) - self.chk_export_dio.toggled.connect(self.combo_export_dio.setEnabled) - self.combo_export_dio.currentIndexChanged.connect(self._on_export_trigger_changed) - self.combo_export_dio.currentIndexChanged.connect(emit_noargs) + self.chk_export_dio.toggled.connect(self.list_export_dio.setEnabled) + self.list_export_channels.changed.connect(self._on_export_channel_selection_changed) + self.list_export_channels.changed.connect(emit_noargs) + self.list_export_dio.changed.connect(self._on_export_trigger_selection_changed) + self.list_export_dio.changed.connect(emit_noargs) for cb in ( self.chk_export_raw, self.chk_export_iso, @@ -1961,11 +2026,14 @@ def export_selection(self) -> ExportSelection: def export_selection_summary(self) -> str: selection = self.export_selection() parts: List[str] = [] + chans = self.export_channel_names() + if chans: + parts.append(f"ANx{len(chans)}") if selection.output: parts.append("output") if selection.dio: - dio_name = self.export_trigger_name() - parts.append(f"DIO({dio_name})" if dio_name else "DIO") + dio_names = self.export_trigger_names() + parts.append(f"DIOx{len(dio_names)}" if dio_names else "DIO") if selection.raw: parts.append("raw") if selection.isobestic: @@ -1990,36 +2058,41 @@ def set_export_selection(self, selection: ExportSelection) -> None: self.chk_export_baseline_sig.setChecked(bool(selection.baseline_sig)) self.chk_export_baseline_ref.setChecked(bool(selection.baseline_ref)) - def export_trigger_name(self) -> str: - if self.combo_export_dio.count() > 0 and self.combo_export_dio.currentIndex() == 0: - return "" - current = str(self.combo_export_dio.currentData() or "").strip() - return current or self._pending_export_trigger_name + def export_channel_names(self) -> List[str]: + checked = self.list_export_channels.checked_values() + return checked or list(self._pending_export_channel_names) - def _on_export_trigger_changed(self, *_args) -> None: - self._pending_export_trigger_name = str(self.combo_export_dio.currentData() or "").strip() + def export_trigger_names(self) -> List[str]: + checked = self.list_export_dio.checked_values() + return checked or list(self._pending_export_trigger_names) - def set_available_export_triggers(self, triggers: List[str], preferred: str = "") -> None: - current = preferred.strip() or self.export_trigger_name() - self.combo_export_dio.blockSignals(True) - try: - self.combo_export_dio.clear() - self.combo_export_dio.addItem("Current overlay", "") - for trig in triggers or []: - name = str(trig or "").strip() - if name: - self.combo_export_dio.addItem(name, name) - idx = self.combo_export_dio.findData(current) - self.combo_export_dio.setCurrentIndex(idx if idx >= 0 else 0) - self._pending_export_trigger_name = current if idx != 0 else "" - finally: - self.combo_export_dio.blockSignals(False) + def _on_export_channel_selection_changed(self) -> None: + self._pending_export_channel_names = self.list_export_channels.checked_values() - def set_export_trigger_name(self, trigger_name: str) -> None: - name = str(trigger_name or "").strip() - self._pending_export_trigger_name = name - idx = self.combo_export_dio.findData(name) - self.combo_export_dio.setCurrentIndex(idx if idx >= 0 else 0) + def _on_export_trigger_selection_changed(self) -> None: + self._pending_export_trigger_names = self.list_export_dio.checked_values() + + def set_available_export_channels(self, channels: List[str], preferred: Optional[List[str]] = None) -> None: + current = list(preferred if preferred is not None else self.export_channel_names()) + items = [(name, name) for name in channels or [] if str(name or "").strip()] + self.list_export_channels.set_items(items, checked_values=current) + self._pending_export_channel_names = [name for name in current if name in {v for _, v in items}] + + def set_available_export_triggers(self, triggers: List[str], preferred: Optional[List[str]] = None) -> None: + current = list(preferred if preferred is not None else self.export_trigger_names()) + items = [(name, name) for name in triggers or [] if str(name or "").strip()] + self.list_export_dio.set_items(items, checked_values=current) + self._pending_export_trigger_names = [name for name in current if name in {v for _, v in items}] + + def set_export_channel_names(self, channel_names: List[str]) -> None: + names = [str(name or "").strip() for name in channel_names or [] if str(name or "").strip()] + self._pending_export_channel_names = names + self.list_export_channels.set_checked_values(names) + + def set_export_trigger_names(self, trigger_names: List[str]) -> None: + names = [str(name or "").strip() for name in trigger_names or [] if str(name or "").strip()] + self._pending_export_trigger_names = names + self.list_export_dio.set_checked_values(names) def _save_config(self) -> None: """Save current preprocessing parameters to a JSON file.""" @@ -2188,6 +2261,7 @@ def set_artifact_overlay_visible(self, visible: bool) -> None: class ArtifactSelectViewBox(pg.ViewBox): dragSelectionFinished = QtCore.Signal(float, float) dragSelectionCleared = QtCore.Signal() + dragSelectionContextRequested = QtCore.Signal() def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) @@ -2236,8 +2310,11 @@ def mouseDragEvent(self, ev, axis=None) -> None: def mouseClickEvent(self, ev) -> None: if self._drag_enabled and ev.button() == QtCore.Qt.MouseButton.RightButton: - self.clear_selection() - self.dragSelectionCleared.emit() + if self._rect_item.isVisible(): + self.dragSelectionContextRequested.emit() + else: + self.clear_selection() + self.dragSelectionCleared.emit() ev.accept() return super().mouseClickEvent(ev) @@ -2249,6 +2326,7 @@ class PlotDashboard(QtWidgets.QWidget): clearManualRegionsRequested = QtCore.Signal() showArtifactsRequested = QtCore.Signal() boxSelectionCleared = QtCore.Signal() + boxSelectionContextRequested = QtCore.Signal() artifactThresholdsToggled = QtCore.Signal(bool) xRangeChanged = QtCore.Signal(float, float) @@ -2389,6 +2467,7 @@ def _build_ui(self) -> None: self._raw_vb.dragSelectionFinished.connect(self._on_drag_select_finished) self._raw_vb.dragSelectionCleared.connect(self._on_drag_select_cleared) + self._raw_vb.dragSelectionContextRequested.connect(self.boxSelectionContextRequested.emit) self._sync_artifact_threshold_curves_visibility() self._toggle_box_select(False) @@ -2582,6 +2661,10 @@ def selector_region(self) -> Tuple[float, float]: r = self.selector.getRegion() return float(min(r)), float(max(r)) + def set_selector_region(self, t0: float, t1: float, visible: bool = True) -> None: + self.selector.setRegion((float(min(t0, t1)), float(max(t0, t1)))) + self.selector.setVisible(bool(visible)) + def _scale_reference_to_signal(self, sig: np.ndarray, ref: np.ndarray) -> np.ndarray: s = np.asarray(sig, float) r = np.asarray(ref, float) diff --git a/pyBer/main.py b/pyBer/main.py index f37030c..8c4616e 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -320,6 +320,7 @@ def __init__(self) -> None: self._metadata_by_key: Dict[Tuple[str, str], Dict[str, str]] = {} self._cutout_regions_by_key: Dict[Tuple[str, str], List[Tuple[float, float]]] = {} self._sections_by_key: Dict[Tuple[str, str], List[Dict[str, object]]] = {} + self._pending_box_region_by_key: Dict[Tuple[str, str], Tuple[float, float]] = {} self._last_processed: Dict[Tuple[str, str], ProcessedTrial] = {} self._advanced_dialog: Optional[AdvancedOptionsDialog] = None @@ -652,6 +653,7 @@ def _build_ui(self) -> None: self.plots.clearManualRegionsRequested.connect(self._clear_manual_regions_current) self.plots.showArtifactsRequested.connect(self._toggle_artifacts_panel) self.plots.boxSelectionCleared.connect(self._cancel_box_select_request) + self.plots.boxSelectionContextRequested.connect(self._show_box_selection_context_menu) self.plots.artifactThresholdsToggled.connect(self._on_artifact_thresholds_toggled) self.artifact_panel.regionsChanged.connect(self._artifact_regions_changed) @@ -1062,12 +1064,10 @@ def _build_config_actions_widget(self) -> QtWidgets.QWidget: row.setContentsMargins(0, 0, 0, 0) row.setSpacing(6) self.param_panel.btn_metadata.setProperty("class", "blueSecondarySmall") - self.param_panel.btn_advanced.setProperty("class", "blueSecondarySmall") self.param_panel.btn_save_config.setProperty("class", "blueSecondarySmall") self.param_panel.btn_load_config.setProperty("class", "blueSecondarySmall") for btn in ( self.param_panel.btn_metadata, - self.param_panel.btn_advanced, self.param_panel.btn_save_config, self.param_panel.btn_load_config, ): @@ -1621,6 +1621,9 @@ def _init_shortcuts(self) -> None: self._bind_shortcut("Ctrl+S", self.param_panel._save_config, require_non_text_focus=True) self._bind_shortcut("Ctrl+D", self._toggle_data_panel_shortcut, require_non_text_focus=True) self._bind_shortcut("Ctrl+P", self._toggle_all_parameter_popups_shortcut, require_non_text_focus=True) + self._bind_shortcut("A", self._assign_pending_box_to_artifact, require_non_text_focus=True) + self._bind_shortcut("C", self._assign_pending_box_to_cut, require_non_text_focus=True) + self._bind_shortcut("S", self._assign_pending_box_to_section, require_non_text_focus=True) self._bind_shortcut("Escape", self._close_focused_popup, require_non_text_focus=True) def _dock_area_from_settings( @@ -1929,7 +1932,8 @@ def _export_preprocessing_ui_state_for_config(self) -> Dict[str, object]: "artifact_overlay_visible": bool(self.param_panel.artifact_overlay_visible()), "artifact_thresholds_visible": bool(self.plots.artifact_thresholds_visible()), "export_selection": self.param_panel.export_selection().to_dict(), - "export_trigger_name": self.param_panel.export_trigger_name(), + "export_channel_names": self.param_panel.export_channel_names(), + "export_trigger_names": self.param_panel.export_trigger_names(), "panel_layout": self._collect_panel_layout_payload(), } @@ -1980,8 +1984,10 @@ def _import_preprocessing_ui_state_from_config(self, ui_state: Dict[str, object] self.plots.set_artifact_thresholds_visible(bool(ui_state.get("artifact_thresholds_visible"))) if "export_selection" in ui_state: self.param_panel.set_export_selection(ExportSelection.from_dict(ui_state.get("export_selection"))) - if "export_trigger_name" in ui_state: - self.param_panel.set_export_trigger_name(str(ui_state.get("export_trigger_name") or "")) + if "export_channel_names" in ui_state: + self.param_panel.set_export_channel_names(list(ui_state.get("export_channel_names") or [])) + if "export_trigger_names" in ui_state: + self.param_panel.set_export_trigger_names(list(ui_state.get("export_trigger_names") or [])) self._update_export_summary_label() panel_layout = ui_state.get("panel_layout") if isinstance(panel_layout, dict): @@ -3389,6 +3395,7 @@ def _on_file_selection_changed(self) -> None: self.file_panel.set_available_channels(doric.channels) self.file_panel.set_available_triggers(sorted(doric.trigger_by_name.keys())) + self.param_panel.set_available_export_channels(doric.channels) self.param_panel.set_available_export_triggers(sorted(doric.trigger_by_name.keys())) self._update_export_summary_label() @@ -3415,6 +3422,14 @@ def _on_file_selection_changed(self) -> None: def _on_channel_changed(self, ch: str) -> None: self._current_channel = ch + if self._current_path: + doric = self._loaded_files.get(self._current_path) + if doric is not None: + self.param_panel.set_available_export_channels( + doric.channels, + preferred=self.param_panel.export_channel_names(), + ) + self._update_export_summary_label() self._update_raw_plot() self._trigger_preview() self.post_tab.set_current_source_label(os.path.basename(self._current_path or ""), self._current_channel or "") @@ -3427,7 +3442,7 @@ def _on_trigger_changed(self, trig: str) -> None: if doric is not None: self.param_panel.set_available_export_triggers( sorted(doric.trigger_by_name.keys()), - preferred=self.param_panel.export_trigger_name(), + preferred=self.param_panel.export_trigger_names(), ) self._update_export_summary_label() self._update_raw_plot() @@ -3992,12 +4007,10 @@ def _add_manual_region_from_drag(self, t0: float, t1: float) -> None: return if not np.isfinite(t0) or not np.isfinite(t1) or t0 == t1: return - regs = self._manual_regions_by_key.get(key, []) - regs.append((min(t0, t1), max(t0, t1))) - self._manual_regions_by_key[key] = regs - start_s, end_s = self._time_window_bounds() - self.artifact_panel.set_regions(self._clip_regions_to_window(regs, start_s, end_s)) - self._trigger_preview() + region = (float(min(t0, t1)), float(max(t0, t1))) + self._pending_box_region_by_key[key] = region + self.plots.set_selector_region(*region, visible=True) + self._show_status_message("Selection ready: press A=artifact, C=cut, S=section, or right-click for actions.") def _clear_manual_regions_current(self) -> None: key = self._current_key() @@ -4005,6 +4018,7 @@ def _clear_manual_regions_current(self) -> None: return self._manual_regions_by_key[key] = [] self._manual_exclude_by_key[key] = [] + self._pending_box_region_by_key.pop(key, None) self.artifact_panel.set_regions([]) self._trigger_preview() @@ -4014,10 +4028,93 @@ def _request_box_select(self, callback: Callable[[float, float], None]) -> None: self._show_status_message("Box select: drag on the raw plot to set the time window; right-click to cancel.") def _cancel_box_select_request(self) -> None: - if not self._box_select_callback: - return + key = self._current_key() self._box_select_callback = None + if key: + self._pending_box_region_by_key.pop(key, None) + self.plots.set_selector_region(0.0, 1.0, visible=False) + self.plots.btn_box_select.setChecked(False) + + def _pending_box_region(self) -> Optional[Tuple[float, float]]: + key = self._current_key() + if not key: + return None + region = self._pending_box_region_by_key.get(key) + if not region: + return None + return (float(min(region)), float(max(region))) + + def _consume_pending_box_region(self) -> Optional[Tuple[float, float]]: + key = self._current_key() + if not key: + return None + region = self._pending_box_region_by_key.pop(key, None) + self.plots.set_selector_region(0.0, 1.0, visible=False) self.plots.btn_box_select.setChecked(False) + if not region: + return None + return (float(min(region)), float(max(region))) + + def _assign_pending_box_to_artifact(self) -> None: + region = self._consume_pending_box_region() + key = self._current_key() + if not region or not key: + return + regs = self._manual_regions_by_key.get(key, []) + regs.append(region) + self._manual_regions_by_key[key] = regs + start_s, end_s = self._time_window_bounds() + self.artifact_panel.set_regions(self._clip_regions_to_window(regs, start_s, end_s)) + self._trigger_preview() + + def _assign_pending_box_to_cut(self) -> None: + region = self._consume_pending_box_region() + key = self._current_key() + if not region or not key: + return + regs = self._cutout_regions_by_key.get(key, []) + regs.append(region) + regs.sort(key=lambda x: x[0]) + self._cutout_regions_by_key[key] = regs + self._last_processed.clear() + self._update_raw_plot() + self._trigger_preview() + + def _assign_pending_box_to_section(self) -> None: + region = self._consume_pending_box_region() + key = self._current_key() + if not region or not key: + return + sections = self._sections_by_key.get(key, []) + sections.append({ + "start": float(region[0]), + "end": float(region[1]), + "params": self.param_panel.get_params().to_dict(), + }) + sections.sort(key=lambda sec: float(sec.get("start", 0.0))) + self._sections_by_key[key] = sections + self._show_status_message(f"Section added: {region[0]:.3f}s to {region[1]:.3f}s") + + def _show_box_selection_context_menu(self) -> None: + region = self._pending_box_region() + if region is None: + self._cancel_box_select_request() + return + menu = QtWidgets.QMenu(self) + act_art = menu.addAction("Set as artifact") + act_cut = menu.addAction("Set as cut") + act_sec = menu.addAction("Set as section") + menu.addSeparator() + act_cancel = menu.addAction("Cancel selection") + chosen = menu.exec(QtGui.QCursor.pos()) + if chosen is act_art: + self._assign_pending_box_to_artifact() + elif chosen is act_cut: + self._assign_pending_box_to_cut() + elif chosen is act_sec: + self._assign_pending_box_to_section() + elif chosen is act_cancel: + self._cancel_box_select_request() def _artifact_regions_changed(self, regions: List[Tuple[float, float]]) -> None: key = self._current_key() @@ -4162,7 +4259,8 @@ def _export_selected_or_all(self) -> None: params = self.param_panel.get_params() export_selection = self.param_panel.export_selection() - export_trigger_name = self.param_panel.export_trigger_name() + export_channel_names = self.param_panel.export_channel_names() + export_trigger_names = self.param_panel.export_trigger_names() # Process/export each selected file, for the currently selected channel. n_total = 0 @@ -4170,63 +4268,78 @@ def _export_selected_or_all(self) -> None: doric = self._loaded_files.get(path) if not doric: continue - ch = self._current_channel if (self._current_channel in doric.channels) else (doric.channels[0] if doric.channels else None) - if not ch: - continue - key = (path, ch) - export_trigger = self._current_trigger - if export_trigger_name: - export_trigger = export_trigger_name if export_trigger_name in doric.trigger_by_name else None - trial = doric.make_trial(ch, trigger_name=export_trigger) - trial = self._apply_time_window(trial) - cutouts = self._cutout_regions_by_key.get(key, []) - trial = self._apply_cutouts(trial, cutouts) - start_s, end_s = self._time_window_bounds() - manual = self._clip_regions_to_window(self._manual_regions_by_key.get(key, []), start_s, end_s) - manual_exclude = self._clip_regions_to_window(self._manual_exclude_by_key.get(key, []), start_s, end_s) - meta = self._metadata_by_key.get(key, {}) - sections = self._sections_by_key.get(key, []) - - def _export_one(proc: ProcessedTrial, suffix: str = "") -> None: - nonlocal n_total - proc = self._apply_cutouts_to_processed(proc, cutouts) - stem = safe_stem_from_metadata(path, ch, meta) - if suffix: - stem = f"{stem}_{suffix}" - csv_path = os.path.join(out_dir, f"{stem}.csv") - h5_path = os.path.join(out_dir, f"{stem}.h5") - export_processed_csv(csv_path, proc, metadata=meta, selection=export_selection) - export_processed_h5(h5_path, proc, metadata=meta, selection=export_selection) - n_total += 1 + channels = [name for name in export_channel_names if name in doric.channels] + if not channels: + fallback = self._current_channel if (self._current_channel in doric.channels) else (doric.channels[0] if doric.channels else None) + channels = [fallback] if fallback else [] + dio_names = [name for name in export_trigger_names if name in doric.trigger_by_name] + if not export_selection.dio: + dio_names = [None] + elif not dio_names: + dio_names = [self._current_trigger] if self._current_trigger else [None] + + for ch in channels: + if not ch: + continue + key = (path, ch) + cutouts = self._cutout_regions_by_key.get(key, []) + start_s, end_s = self._time_window_bounds() + manual = self._clip_regions_to_window(self._manual_regions_by_key.get(key, []), start_s, end_s) + manual_exclude = self._clip_regions_to_window(self._manual_exclude_by_key.get(key, []), start_s, end_s) + meta = self._metadata_by_key.get(key, {}) + sections = self._sections_by_key.get(key, []) + + for export_trigger in dio_names: + trial = doric.make_trial(ch, trigger_name=export_trigger) + trial = self._apply_time_window(trial) + trial = self._apply_cutouts(trial, cutouts) + + def _export_one(proc: ProcessedTrial, suffix: str = "") -> None: + nonlocal n_total + proc = self._apply_cutouts_to_processed(proc, cutouts) + stem = safe_stem_from_metadata(path, ch, meta) + if export_trigger: + stem = f"{stem}_{export_trigger}" + if suffix: + stem = f"{stem}_{suffix}" + csv_path = os.path.join(out_dir, f"{stem}.csv") + h5_path = os.path.join(out_dir, f"{stem}.h5") + export_processed_csv(csv_path, proc, metadata=meta, selection=export_selection) + export_processed_h5(h5_path, proc, metadata=meta, selection=export_selection) + n_total += 1 - try: - if sections: - for i, sec in enumerate(sections, start=1): - s0 = float(sec.get("start", 0.0)) - s1 = float(sec.get("end", 0.0)) - sec_trial = self._slice_trial(trial, s0, s1) - if sec_trial is None: - continue - sec_params = ProcessingParams.from_dict(sec.get("params", {})) if isinstance(sec.get("params"), dict) else params - processed = self.processor.process_trial( - trial=sec_trial, - params=sec_params, - manual_regions_sec=manual, - manual_exclude_regions_sec=manual_exclude, - preview_mode=False, + try: + if sections: + for i, sec in enumerate(sections, start=1): + s0 = float(sec.get("start", 0.0)) + s1 = float(sec.get("end", 0.0)) + sec_trial = self._slice_trial(trial, s0, s1) + if sec_trial is None: + continue + sec_params = ProcessingParams.from_dict(sec.get("params", {})) if isinstance(sec.get("params"), dict) else params + processed = self.processor.process_trial( + trial=sec_trial, + params=sec_params, + manual_regions_sec=manual, + manual_exclude_regions_sec=manual_exclude, + preview_mode=False, + ) + _export_one(processed, suffix=f"sec{i}_{s0:.2f}_{s1:.2f}") + else: + processed = self.processor.process_trial( + trial=trial, + params=params, + manual_regions_sec=manual, + manual_exclude_regions_sec=manual_exclude, + preview_mode=False, + ) + _export_one(processed) + except Exception as e: + QtWidgets.QMessageBox.warning( + self, + "Export error", + f"Failed export:\n{path} [{ch}] [{export_trigger or 'no DIO'}]\n\n{e}", ) - _export_one(processed, suffix=f"sec{i}_{s0:.2f}_{s1:.2f}") - else: - processed = self.processor.process_trial( - trial=trial, - params=params, - manual_regions_sec=manual, - manual_exclude_regions_sec=manual_exclude, - preview_mode=False, - ) - _export_one(processed) - except Exception as e: - QtWidgets.QMessageBox.warning(self, "Export error", f"Failed export:\n{path} [{ch}]\n\n{e}") self._show_status_message(f"Export complete: {n_total} recording(s) written to {out_dir}") From 1285d077384e2c6fa7f3203e492cf1b7eed8c4f7 Mon Sep 17 00:00:00 2001 From: Snapyou2 Date: Tue, 10 Mar 2026 11:38:08 +0100 Subject: [PATCH 25/28] Untrack panel_layout.json as it is ignored --- panel_layout.json | 104 ---------------------------------------------- 1 file changed, 104 deletions(-) delete mode 100644 panel_layout.json diff --git a/panel_layout.json b/panel_layout.json deleted file mode 100644 index 96c2ea3..0000000 --- a/panel_layout.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "version": 3, - "pre": { - "pre_data_panel_visible": false, - "pre_splitter_sizes": [ - 0, - 1501, - 388 - ], - "pre_main_dock_state": "", - "tab_groups": [], - "sections": { - "artifacts": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" - }, - "filtering": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" - }, - "baseline": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9Nf///gv///4L" - }, - "output": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" - }, - "export": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADFAAAB38AAAOMAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADFAAAB38AAAOM" - }, - "qc": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAWhAAACNQAAB38AAAMRAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACNQAAB38AAAMR" - }, - "config": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAAAAAADjwAAB38AAAPTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADjwAAB38AAAPT" - } - }, - "artifact": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIQAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIQ" - } - }, - "post": { - "post_main_dock_state": "", - "sections": { - "setup": { - "visible": true, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALgAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAALg" - }, - "psth": { - "visible": true, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB9QAADIYAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADIYAAAOM" - }, - "spatial": { - "visible": true, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB9QAADLEAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADLEAAAOM" - }, - "export": { - "visible": true, - "floating": false, - "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAC4wAABdsAAANEAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC4wAABdsAAANE" - }, - "signal": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB9QAADBQAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADBQAAAOM" - }, - "behavior": { - "visible": false, - "floating": false, - "area": 2, - "geometry": "AdnQywADAAAAAAqgAAAB9QAADHcAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADHcAAAOM" - } - } - } -} \ No newline at end of file From 57193bd45a1addcbb758ab82079754a9ab831a95 Mon Sep 17 00:00:00 2001 From: Snapyou2 Date: Tue, 10 Mar 2026 11:38:32 +0100 Subject: [PATCH 26/28] Added right click on box selection to cut/artifact/section it directly --- pyBer/gui_preprocessing.py | 29 ++++++++++++++++++++++++++++- pyBer/main.py | 20 +++++++++++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 45bf89f..86ed934 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -2320,6 +2320,29 @@ def mouseClickEvent(self, ev) -> None: super().mouseClickEvent(ev) + def contextMenuEvent(self, ev) -> None: + if self._drag_enabled and self._rect_item.isVisible(): + self.dragSelectionContextRequested.emit() + ev.accept() + else: + super().contextMenuEvent(ev) + + +class PreprocessingSelector(pg.LinearRegionItem): + sigContextRequested = QtCore.Signal() + + def mouseClickEvent(self, ev) -> None: + if ev.button() == QtCore.Qt.MouseButton.RightButton: + self.sigContextRequested.emit() + ev.accept() + else: + super().mouseClickEvent(ev) + + def contextMenuEvent(self, ev) -> None: + self.sigContextRequested.emit() + ev.accept() + + class PlotDashboard(QtWidgets.QWidget): manualRegionFromSelectorRequested = QtCore.Signal() manualRegionFromDragRequested = QtCore.Signal(float, float) @@ -2435,7 +2458,7 @@ def _build_ui(self) -> None: self._proc_y_curves = [self.curve_f465, self.curve_f405, self.curve_b465, self.curve_b405] self._out_y_curves = [self.curve_out] - self.selector = pg.LinearRegionItem(values=(0, 1), brush=(80, 120, 200, 60)) + self.selector = PreprocessingSelector(values=(0, 1), brush=(80, 120, 200, 60)) self.plot_raw.addItem(self.selector) self._dio_pen = pg.mkPen((230, 180, 80), width=1.2) @@ -2468,6 +2491,7 @@ def _build_ui(self) -> None: self._raw_vb.dragSelectionFinished.connect(self._on_drag_select_finished) self._raw_vb.dragSelectionCleared.connect(self._on_drag_select_cleared) self._raw_vb.dragSelectionContextRequested.connect(self.boxSelectionContextRequested.emit) + self.selector.sigContextRequested.connect(self.boxSelectionContextRequested.emit) self._sync_artifact_threshold_curves_visibility() self._toggle_box_select(False) @@ -2661,6 +2685,9 @@ def selector_region(self) -> Tuple[float, float]: r = self.selector.getRegion() return float(min(r)), float(max(r)) + def selector_visible(self) -> bool: + return bool(self.selector.isVisible()) + def set_selector_region(self, t0: float, t1: float, visible: bool = True) -> None: self.selector.setRegion((float(min(t0, t1)), float(max(t0, t1)))) self.selector.setVisible(bool(visible)) diff --git a/pyBer/main.py b/pyBer/main.py index 8c4616e..8e17f74 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -4041,18 +4041,32 @@ def _pending_box_region(self) -> Optional[Tuple[float, float]]: return None region = self._pending_box_region_by_key.get(key) if not region: - return None + if not self.plots.selector_visible(): + return None + t0, t1 = self.plots.selector_region() + return (float(min(t0, t1)), float(max(t0, t1))) return (float(min(region)), float(max(region))) def _consume_pending_box_region(self) -> Optional[Tuple[float, float]]: key = self._current_key() if not key: return None + + is_tool_active = self.plots.btn_box_select.isChecked() region = self._pending_box_region_by_key.pop(key, None) + + if not region: + if not self.plots.selector_visible(): + return None + t0, t1 = self.plots.selector_region() + region = (float(min(t0, t1)), float(max(t0, t1))) + # If not using the box-select tool, we do NOT hide the persistent selector. + if not is_tool_active: + return region + + # Cleanup if we were in tool mode or had a temporary drag selection. self.plots.set_selector_region(0.0, 1.0, visible=False) self.plots.btn_box_select.setChecked(False) - if not region: - return None return (float(min(region)), float(max(region))) def _assign_pending_box_to_artifact(self) -> None: From 14a9298b9ec542043cbcd633cd0ce47dcd87bc07 Mon Sep 17 00:00:00 2001 From: Snapyou2 Date: Tue, 10 Mar 2026 11:52:13 +0100 Subject: [PATCH 27/28] Added multiple DIO/AOUT consolidation into a single file when exporting --- pyBer/analysis_core.py | 65 +++++++++++++++++-- pyBer/main.py | 142 +++++++++++++++++++++++++++-------------- 2 files changed, 154 insertions(+), 53 deletions(-) diff --git a/pyBer/analysis_core.py b/pyBer/analysis_core.py index 19329be..6c9b0b3 100644 --- a/pyBer/analysis_core.py +++ b/pyBer/analysis_core.py @@ -5,7 +5,7 @@ import re import time import json -from dataclasses import dataclass +from dataclasses import dataclass, field from typing import Any, Dict, List, Optional, Tuple import numpy as np @@ -154,6 +154,9 @@ class LoadedTrial: trigger_time: Optional[np.ndarray] = None trigger: Optional[np.ndarray] = None trigger_name: str = "" + # Support for multiple triggers (DIO/AOUT) + triggers: Dict[str, np.ndarray] = field(default_factory=dict) + trigger_times: Dict[str, np.ndarray] = field(default_factory=dict) @dataclass @@ -168,7 +171,7 @@ class LoadedDoricFile: trigger_time_by_name: Dict[str, np.ndarray] trigger_by_name: Dict[str, np.ndarray] - def make_trial(self, channel: str, trigger_name: Optional[str] = None) -> LoadedTrial: + def make_trial(self, channel: str, trigger_name: Optional[str] = None, trigger_names: Optional[List[str]] = None) -> LoadedTrial: t = self.time_by_channel[channel] sig = self.signal_by_channel[channel] ref = self.reference_by_channel[channel] @@ -176,6 +179,8 @@ def make_trial(self, channel: str, trigger_name: Optional[str] = None) -> Loaded trig_t = None trig = None trig_name = trigger_name or "" + all_triggers = {} + all_trigger_times = {} if trigger_name: if trigger_name in self.trigger_by_name: @@ -203,6 +208,26 @@ def make_trial(self, channel: str, trigger_name: Optional[str] = None) -> Loaded trig_t = self.digital_time trig = self.digital_by_name[trigger_name] + # Multiple triggers (for export) + names_to_collect = list(trigger_names) if trigger_names else [] + if trigger_name and trigger_name not in names_to_collect: + names_to_collect.append(trigger_name) + + for name in names_to_collect: + if name in self.trigger_by_name: + val = np.asarray(self.trigger_by_name[name], float) + vt = self.trigger_time_by_name.get(name, None) + if vt is not None: + vt = np.asarray(vt, float) + elif self.digital_time is not None and name in self.digital_by_name: + vt = np.asarray(self.digital_time, float) + elif val.size == t.size: + vt = np.asarray(t, float) + + if vt is not None: + all_triggers[name] = val + all_trigger_times[name] = vt + fs = 1.0 / float(np.nanmedian(np.diff(t))) if t.size > 2 else np.nan return LoadedTrial( @@ -215,6 +240,8 @@ def make_trial(self, channel: str, trigger_name: Optional[str] = None) -> Loaded trigger_time=np.asarray(trig_t, float) if trig_t is not None else None, trigger=np.asarray(trig, float) if trig is not None else None, trigger_name=trig_name, + triggers=all_triggers, + trigger_times=all_trigger_times, ) @@ -234,6 +261,8 @@ class ProcessedTrial: # Optional analog/digital trigger channel aligned to processed time dio: Optional[np.ndarray] = None dio_name: str = "" + # Support for multiple triggers + triggers: Dict[str, np.ndarray] = field(default_factory=dict) # Processing intermediates sig_f: Optional[np.ndarray] = None @@ -361,8 +390,18 @@ def export_processed_csv( columns.append(("isobestic", iso)) if selection.output: columns.append((out_col, out)) + + # Primary trigger name (e.g. "DIO01") + primary_name = str(processed.dio_name) if processed.dio_name else "dio" if dio is not None: - columns.append(("dio", dio)) + columns.append((primary_name, dio)) + + # Add additional triggers + if selection.dio and hasattr(processed, "triggers") and processed.triggers: + for name, val in processed.triggers.items(): + if name != processed.dio_name: # Avoid duplicates + columns.append((name, val)) + w.writerow([name for name, _ in columns]) for i in range(t.size): row = [] @@ -411,8 +450,17 @@ def export_processed_h5( pass if selection.dio and processed.dio is not None: - g.create_dataset("dio", data=np.asarray(processed.dio, float), compression="gzip") + primary_name = str(processed.dio_name) if processed.dio_name else "dio" + g.create_dataset(primary_name, data=np.asarray(processed.dio, float), compression="gzip") g.attrs["dio_name"] = str(processed.dio_name) + if primary_name != "dio": + g["dio"] = g[primary_name] # link for compatibility + + # Add all selected triggers + if selection.dio and hasattr(processed, "triggers") and processed.triggers: + for name, val in processed.triggers.items(): + if name not in g: + g.create_dataset(name, data=np.asarray(val, float), compression="gzip") if selection.baseline_sig and processed.baseline_sig is not None: g.create_dataset("baseline_465", data=np.asarray(processed.baseline_sig, float), compression="gzip") @@ -1159,6 +1207,14 @@ def process_trial( dio_interp = np.interp(t2, t, np.asarray(trial.trigger, float)) dio2 = (dio_interp > 0.5).astype(float) + all_triggers2 = {} + if hasattr(trial, "triggers") and trial.triggers: + for name, val in trial.triggers.items(): + vt = trial.trigger_times.get(name) + if vt is not None: + interp_val = np.interp(t2, vt, np.asarray(val, float)) + all_triggers2[name] = (interp_val > 0.5).astype(float) + # --------------------------------------------------------------------- # 8) Baseline estimation AFTER filtering/resampling (on final timebase) # --------------------------------------------------------------------- @@ -1263,6 +1319,7 @@ def process_trial( raw_thr_lo=lo2, dio=dio2, dio_name=dio_name, + triggers=all_triggers2, sig_f=sig2, ref_f=ref2, baseline_sig=b_sig, diff --git a/pyBer/main.py b/pyBer/main.py index 8e17f74..fc20c9d 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -3672,6 +3672,20 @@ def _mask_arr(arr: Optional[np.ndarray], use_time_mask: bool) -> Optional[np.nda fs = 1.0 / float(np.nanmedian(np.diff(time))) if time.size > 2 else np.nan + new_triggers = {} + new_trigger_times = {} + if hasattr(trial, "triggers") and trial.triggers: + for name, val in trial.triggers.items(): + vt = trial.trigger_times.get(name) + if vt is not None: + if vt.size == t.size: + new_triggers[name] = np.asarray(val, float)[mask] + new_trigger_times[name] = np.asarray(vt, float)[mask] + else: + tmask = (vt >= float(start_s)) & (vt <= float(end_s)) + new_triggers[name] = np.asarray(val, float)[tmask] + new_trigger_times[name] = np.asarray(vt, float)[tmask] + return LoadedTrial( path=trial.path, channel_id=trial.channel_id, @@ -3682,6 +3696,8 @@ def _mask_arr(arr: Optional[np.ndarray], use_time_mask: bool) -> Optional[np.nda trigger_time=trig_time, trigger=trig, trigger_name=trial.trigger_name, + triggers=new_triggers, + trigger_times=new_trigger_times, ) def _apply_cutouts(self, trial: LoadedTrial, cutouts: List[Tuple[float, float]]) -> LoadedTrial: @@ -3704,6 +3720,8 @@ def _apply_cutouts(self, trial: LoadedTrial, cutouts: List[Tuple[float, float]]) trigger_time=trial.trigger_time, trigger=trial.trigger, trigger_name=trial.trigger_name, + triggers=dict(trial.triggers) if hasattr(trial, "triggers") else {}, + trigger_times=dict(trial.trigger_times) if hasattr(trial, "trigger_times") else {}, ) def _apply_cutouts_to_processed(self, processed: ProcessedTrial, cutouts: List[Tuple[float, float]]) -> ProcessedTrial: @@ -3724,15 +3742,21 @@ def _mask_arr(arr: Optional[np.ndarray]) -> Optional[np.ndarray]: y[mask] = np.nan return y - raw_sig = _mask_arr(processed.raw_signal) - raw_ref = _mask_arr(processed.raw_reference) - processed.raw_signal = raw_sig if raw_sig is not None else processed.raw_signal - processed.raw_reference = raw_ref if raw_ref is not None else processed.raw_reference + processed.raw_signal = _mask_arr(processed.raw_signal) + processed.raw_reference = _mask_arr(processed.raw_reference) processed.sig_f = _mask_arr(processed.sig_f) processed.ref_f = _mask_arr(processed.ref_f) processed.baseline_sig = _mask_arr(processed.baseline_sig) processed.baseline_ref = _mask_arr(processed.baseline_ref) processed.output = _mask_arr(processed.output) + + # Mask triggers too if requested by convention, but here we keep them as-is or NaN them + if hasattr(processed, "triggers") and processed.triggers: + new_triggers = {} + for name, val in processed.triggers.items(): + new_triggers[name] = _mask_arr(val) + processed.triggers = new_triggers + return processed def _slice_trial(self, trial: LoadedTrial, start_s: float, end_s: float) -> Optional[LoadedTrial]: @@ -3753,6 +3777,21 @@ def _slice_trial(self, trial: LoadedTrial, start_s: float, end_s: float) -> Opti tmask = (trig_time >= float(start_s)) & (trig_time <= float(end_s)) trig_time = np.asarray(trig_time, float)[tmask] trig = np.asarray(trig, float)[tmask] + + new_triggers = {} + new_trigger_times = {} + if hasattr(trial, "triggers") and trial.triggers: + for name, val in trial.triggers.items(): + vt = trial.trigger_times.get(name) + if vt is not None: + if vt.size == t.size: + new_triggers[name] = np.asarray(val, float)[mask] + new_trigger_times[name] = np.asarray(vt, float)[mask] + else: + tmask = (vt >= float(start_s)) & (vt <= float(end_s)) + new_triggers[name] = np.asarray(val, float)[tmask] + new_trigger_times[name] = np.asarray(vt, float)[tmask] + fs = 1.0 / float(np.nanmedian(np.diff(time))) if time.size > 2 else np.nan return LoadedTrial( path=trial.path, @@ -3764,6 +3803,8 @@ def _slice_trial(self, trial: LoadedTrial, start_s: float, end_s: float) -> Opti trigger_time=trig_time, trigger=trig, trigger_name=trial.trigger_name, + triggers=new_triggers, + trigger_times=new_trigger_times, ) def _update_raw_plot(self, preserve_view: bool = False) -> None: @@ -4303,58 +4344,61 @@ def _export_selected_or_all(self) -> None: meta = self._metadata_by_key.get(key, {}) sections = self._sections_by_key.get(key, []) - for export_trigger in dio_names: - trial = doric.make_trial(ch, trigger_name=export_trigger) - trial = self._apply_time_window(trial) - trial = self._apply_cutouts(trial, cutouts) - - def _export_one(proc: ProcessedTrial, suffix: str = "") -> None: - nonlocal n_total - proc = self._apply_cutouts_to_processed(proc, cutouts) - stem = safe_stem_from_metadata(path, ch, meta) - if export_trigger: - stem = f"{stem}_{export_trigger}" - if suffix: - stem = f"{stem}_{suffix}" - csv_path = os.path.join(out_dir, f"{stem}.csv") - h5_path = os.path.join(out_dir, f"{stem}.h5") - export_processed_csv(csv_path, proc, metadata=meta, selection=export_selection) - export_processed_h5(h5_path, proc, metadata=meta, selection=export_selection) - n_total += 1 + # Use all selected triggers for one export per channel + # If current trigger is in dio_names, use it as primary for alignment. + # Otherwise, pick first available as primary. + primary_trigger = None + if export_selection.dio and dio_names: + primary_trigger = (self._current_trigger if self._current_trigger in dio_names else (dio_names[0] if dio_names[0] else None)) - try: - if sections: - for i, sec in enumerate(sections, start=1): - s0 = float(sec.get("start", 0.0)) - s1 = float(sec.get("end", 0.0)) - sec_trial = self._slice_trial(trial, s0, s1) - if sec_trial is None: - continue - sec_params = ProcessingParams.from_dict(sec.get("params", {})) if isinstance(sec.get("params"), dict) else params - processed = self.processor.process_trial( - trial=sec_trial, - params=sec_params, - manual_regions_sec=manual, - manual_exclude_regions_sec=manual_exclude, - preview_mode=False, - ) - _export_one(processed, suffix=f"sec{i}_{s0:.2f}_{s1:.2f}") - else: + trial = doric.make_trial(ch, trigger_name=primary_trigger, trigger_names=(dio_names if export_selection.dio else None)) + trial = self._apply_time_window(trial) + trial = self._apply_cutouts(trial, cutouts) + + def _export_one(proc: ProcessedTrial, suffix: str = "") -> None: + nonlocal n_total + proc = self._apply_cutouts_to_processed(proc, cutouts) + stem = safe_stem_from_metadata(path, ch, meta) + if suffix: + stem = f"{stem}_{suffix}" + csv_path = os.path.join(out_dir, f"{stem}.csv") + h5_path = os.path.join(out_dir, f"{stem}.h5") + export_processed_csv(csv_path, proc, metadata=meta, selection=export_selection) + export_processed_h5(h5_path, proc, metadata=meta, selection=export_selection) + n_total += 1 + + try: + if sections: + for i, sec in enumerate(sections, start=1): + s0 = float(sec.get("start", 0.0)) + s1 = float(sec.get("end", 0.0)) + sec_trial = self._slice_trial(trial, s0, s1) + if sec_trial is None: + continue + sec_params = ProcessingParams.from_dict(sec.get("params", {})) if isinstance(sec.get("params"), dict) else params processed = self.processor.process_trial( - trial=trial, - params=params, + trial=sec_trial, + params=sec_params, manual_regions_sec=manual, manual_exclude_regions_sec=manual_exclude, preview_mode=False, ) - _export_one(processed) - except Exception as e: - QtWidgets.QMessageBox.warning( - self, - "Export error", - f"Failed export:\n{path} [{ch}] [{export_trigger or 'no DIO'}]\n\n{e}", + _export_one(processed, suffix=f"sec{i}_{s0:.2f}_{s1:.2f}") + else: + processed = self.processor.process_trial( + trial=trial, + params=params, + manual_regions_sec=manual, + manual_exclude_regions_sec=manual_exclude, + preview_mode=False, ) - + _export_one(processed) + except Exception as e: + QtWidgets.QMessageBox.warning( + self, + "Export error", + f"Failed export:\n{path} [{ch}] [{primary_trigger or 'no DIO'}]\n\n{e}", + ) self._show_status_message(f"Export complete: {n_total} recording(s) written to {out_dir}") # optional: update post tab list by loading exported results? (user can load later) From e20114738e6c3a0b242b198d676ead09c31950f6 Mon Sep 17 00:00:00 2001 From: andrianj Date: Thu, 12 Mar 2026 19:01:02 +0100 Subject: [PATCH 28/28] new UI for Pyber, including a new icon and a new color scheme. The UI is now more user-friendly and visually appealing. --- assets/pyBer.ico | Bin 0 -> 56525 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/pyBer.ico diff --git a/assets/pyBer.ico b/assets/pyBer.ico new file mode 100644 index 0000000000000000000000000000000000000000..57b8f8e4cd79bfbb0b1226c22f84f2aae883aea4 GIT binary patch literal 56525 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

    +*Jny4^#BozUnBn0BB@T5Z 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 delta 48422 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 IIyOA6^>n2^Kf#+Qxt1R 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 None: self._post_snapshot_applied: bool = False self._force_fixed_default_layout: bool = False self._pending_project_recompute_from_current: bool = False + self._project_dirty: bool = False + self._autosave_restoring: bool = False + self._project_recovered_from_autosave: bool = False try: self._build_ui() self._restore_settings() @@ -506,6 +509,7 @@ def __init__(self, parent=None) -> None: app = QtWidgets.QApplication.instance() if app is not None: app.aboutToQuit.connect(self._on_about_to_quit) + QtCore.QTimer.singleShot(0, self._restore_project_autosave_if_needed) def _build_ui(self) -> None: root = QtWidgets.QVBoxLayout(self) @@ -2100,6 +2104,8 @@ def _set_resample_from_processed(self) -> None: @QtCore.Slot(list) def receive_current_processed(self, processed_list: List[ProcessedTrial]) -> None: self._processed = processed_list or [] + if not self._autosave_restoring: + self._project_dirty = True # update trace preview with first entry self._refresh_behavior_list() self._set_resample_from_processed() @@ -2116,6 +2122,8 @@ def append_processed(self, processed_list: List[ProcessedTrial]) -> None: if not processed_list: return self._processed.extend(processed_list) + if not self._autosave_restoring: + self._project_dirty = True self._refresh_behavior_list() self._set_resample_from_processed() self._update_trace_preview() @@ -2260,6 +2268,7 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: if replace: self._behavior_sources.clear() parse_mode = self._current_behavior_parse_mode() + loaded_any = False for p in paths: stem = os.path.splitext(os.path.basename(p))[0] ext = os.path.splitext(p)[1].lower() @@ -2294,6 +2303,7 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: ) info["source_path"] = str(p) self._behavior_sources[stem] = info + loaded_any = True except Exception as exc: QtWidgets.QMessageBox.warning( self, @@ -2304,6 +2314,8 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: mode_label = "timestamps" if parse_mode == _BEHAVIOR_PARSE_TIMESTAMPS else "binary" self.lbl_beh.setText(f"{len(self._behavior_sources)} file(s) loaded [{mode_label}]") self._push_recent_paths("postprocess_recent_behavior_paths", paths) + if loaded_any and not self._autosave_restoring: + self._project_dirty = True self._update_data_availability() self._update_status_strip() @@ -2325,6 +2337,8 @@ def _load_processed_paths(self, paths: List[str], replace: bool) -> None: self._processed = loaded else: self._processed.extend(loaded) + if not self._autosave_restoring: + self._project_dirty = True self.lbl_group.setText(f"{len(self._processed)} file(s) loaded") self._push_recent_paths("postprocess_recent_processed_paths", paths) self._update_file_lists() @@ -2582,6 +2596,8 @@ def _update_global_metrics_enabled(self) -> None: def _queue_settings_save(self, *_args: object) -> None: if self._is_restoring_settings: return + if not self._autosave_restoring: + self._project_dirty = True timer = getattr(self, "_settings_save_timer", None) if timer is None: self._save_settings() @@ -3774,6 +3790,8 @@ def _remove_selected_preprocessed(self) -> None: for row in rows: if 0 <= row < len(self._processed): del self._processed[row] + if not self._autosave_restoring: + self._project_dirty = True self._update_file_lists() self._compute_spatial_heatmap() self._update_data_availability() @@ -3790,6 +3808,8 @@ def _remove_selected_behaviors(self) -> None: key = keys[row] if key in self._behavior_sources: del self._behavior_sources[key] + if not self._autosave_restoring: + self._project_dirty = True self._refresh_behavior_list() self._update_data_availability() self._update_status_strip() @@ -4366,6 +4386,8 @@ def _detect_signal_events(self) -> None: self._refresh_signal_overlay() self._render_signal_event_plots() self._update_signal_metrics_table() + if not self._autosave_restoring: + self._project_dirty = True self._save_settings() self._update_status_strip() @@ -4591,6 +4613,8 @@ def _mstd(key: str) -> Tuple[float, float]: } self.statusUpdate.emit(f"Analyzed {len(per_file_metrics)} file(s).", 5000) self._render_behavior_analysis_outputs() + if not self._autosave_restoring: + self._project_dirty = True self._save_settings() def _render_behavior_analysis_outputs(self) -> None: @@ -5725,6 +5749,77 @@ def _aligned(values: Optional[np.ndarray], fill_nan: bool = True) -> np.ndarray: payload["behavior_sources"] = loaded_behavior return payload + def _autosave_project_cache_path(self) -> str: + cache_root = QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.StandardLocation.CacheLocation) + if not cache_root: + cache_root = QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.StandardLocation.AppDataLocation) + if not cache_root: + cache_root = os.path.join(os.getcwd(), "cache") + cache_dir = os.path.join(cache_root, "pyber_postprocessing") + os.makedirs(cache_dir, exist_ok=True) + return os.path.join(cache_dir, "autosave_project.h5") + + def _has_project_state_for_autosave(self) -> bool: + if self._processed or self._behavior_sources: + return True + if isinstance(self.last_signal_events, dict) and bool(self.last_signal_events): + return True + if isinstance(self.last_behavior_analysis, dict) and bool(self.last_behavior_analysis): + return True + return False + + def _clear_project_autosave_cache(self, delete_file: bool = True) -> None: + path = self._settings.value("postprocess_autosave_project_path", "", type=str).strip() + if not path: + path = self._autosave_project_cache_path() + if delete_file and path and os.path.isfile(path): + try: + os.remove(path) + except Exception: + pass + self._settings.setValue("postprocess_autosave_project_available", False) + self._settings.setValue("postprocess_autosave_project_path", "") + self._settings.setValue("postprocess_autosave_project_utc", "") + self._project_recovered_from_autosave = False + + def _autosave_project_to_cache(self) -> None: + if self._autosave_restoring: + return + if not self._has_project_state_for_autosave(): + self._clear_project_autosave_cache(delete_file=True) + return + should_write = bool(self._project_dirty or self._project_recovered_from_autosave) + if not should_write: + self._clear_project_autosave_cache(delete_file=True) + return + path = self._autosave_project_cache_path() + try: + self._save_project_h5(path) + self._settings.setValue("postprocess_autosave_project_available", True) + self._settings.setValue("postprocess_autosave_project_path", path) + self._settings.setValue("postprocess_autosave_project_utc", datetime.now(timezone.utc).isoformat()) + except Exception: + _LOG.exception("Failed to autosave postprocessing project to cache") + + def _restore_project_autosave_if_needed(self) -> None: + available = bool(self._settings.value("postprocess_autosave_project_available", False, type=bool)) + path = self._settings.value("postprocess_autosave_project_path", "", type=str).strip() + if not path: + path = self._autosave_project_cache_path() + if not available: + return + if not path or not os.path.isfile(path): + self._clear_project_autosave_cache(delete_file=False) + return + + try: + self._autosave_restoring = True + ok = self._load_project_from_path(path, from_autosave=True) + finally: + self._autosave_restoring = False + if not ok: + self._clear_project_autosave_cache(delete_file=False) + def _save_project_file(self) -> None: start_dir = self._settings.value("postprocess_last_dir", os.getcwd(), type=str) default_name = f"{self._default_export_prefix()}_project.h5" @@ -5742,6 +5837,9 @@ def _save_project_file(self) -> None: self._save_project_h5(path) self._push_recent_paths("postprocess_recent_project_paths", [path]) self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) + self._project_dirty = False + self._project_recovered_from_autosave = False + self._clear_project_autosave_cache(delete_file=True) self.statusUpdate.emit(f"Project saved: {os.path.basename(path)}", 5000) except Exception as exc: QtWidgets.QMessageBox.warning(self, "Save project", f"Could not save project:\n{exc}") @@ -5775,12 +5873,12 @@ def _import_project_source_paths(self, recent_paths: Dict[str, object]) -> bool: self._refresh_behavior_list() return bool(proc_existing or beh_existing) - def _load_project_from_path(self, path: str) -> None: + def _load_project_from_path(self, path: str, from_autosave: bool = False) -> bool: try: payload = self._load_project_h5(path) except Exception as exc: QtWidgets.QMessageBox.warning(self, "Load project", f"Could not load project:\n{exc}") - return + return False settings_data = payload.get("settings", {}) processed = payload.get("processed", []) @@ -5830,11 +5928,12 @@ def _load_project_from_path(self, path: str) -> None: if isinstance(beh_paths, list) and beh_paths: self._push_recent_paths("postprocess_recent_behavior_paths", [str(p) for p in beh_paths if str(p).strip()]) - self._push_recent_paths("postprocess_recent_project_paths", [path]) - try: - self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) - except Exception: - pass + if not from_autosave: + self._push_recent_paths("postprocess_recent_project_paths", [path]) + try: + self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) + except Exception: + pass proc_raw = recent_paths.get("processed_paths", []) if isinstance(recent_paths, dict) else [] beh_raw = recent_paths.get("behavior_paths", []) if isinstance(recent_paths, dict) else [] @@ -5843,7 +5942,7 @@ def _load_project_from_path(self, path: str) -> None: has_referenced_sources = bool(proc_existing or beh_existing) imported_sources = False - if has_referenced_sources: + if has_referenced_sources and not from_autosave: ask_sources = QtWidgets.QMessageBox.question( self, "Load project", @@ -5857,7 +5956,7 @@ def _load_project_from_path(self, path: str) -> None: if self._processed: self._compute_psth() self._compute_spatial_heatmap() - elif not imported_sources: + elif not imported_sources and not from_autosave: ask = QtWidgets.QMessageBox.question( self, "Load project", @@ -5872,7 +5971,13 @@ def _load_project_from_path(self, path: str) -> None: self._restore_cached_analysis_outputs(payload) self._save_settings() self._update_status_strip() - self.statusUpdate.emit(f"Project loaded: {os.path.basename(path)}", 5000) + self._project_dirty = False + self._project_recovered_from_autosave = bool(from_autosave) + if from_autosave: + self.statusUpdate.emit("Recovered autosaved postprocessing project.", 5000) + else: + self.statusUpdate.emit(f"Project loaded: {os.path.basename(path)}", 5000) + return True def _save_config_file(self) -> None: start_dir = self._settings.value("postprocess_last_dir", os.getcwd(), type=str) @@ -6600,6 +6705,7 @@ def _on_about_to_quit(self) -> None: self.spatial_plot_dialog.hide() except Exception: pass + self._autosave_project_to_cache() self.persist_layout_state_snapshot() self._save_settings() From 13162e2f57f1109af2f45ae987ceff6ba757175c Mon Sep 17 00:00:00 2001 From: andrianj Date: Fri, 27 Feb 2026 13:00:00 +0100 Subject: [PATCH 15/28] updated workflow to build and publish on push to main branch, updated environment.yml to include pyinstaller, and updated panel_layout.json to include the new "About" tab. --- .github/workflows/build-and-publish.yml | 80 ++++++++++++++++++------- environment.yml | 3 + panel_layout.json | 57 +++++++----------- 3 files changed, 85 insertions(+), 55 deletions(-) diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index 3f0b26a..8372a8d 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -58,32 +58,64 @@ jobs: - name: Build with PyInstaller (last known good method) run: | - DLLS=( - "hdf5.dll" - "hdf5_hl.dll" - "zlib.dll" - "blosc.dll" - "libblosc2.dll" - "libmmd.dll" - "libifcoremd.dll" - "libifportmd.dll" - "libiomp5md.dll" - "libimalloc.dll" - "svml_dispmd.dll" - "libpng16.dll" - "freetype.dll" + BIN_DIR="$CONDA_PREFIX/Library/bin" + DLL_PATTERNS=( + "hdf5*.dll" + "zlib*.dll" + "blosc*.dll" + "libblosc2*.dll" + "libpng16*.dll" + "freetype*.dll" + "liblapack*.dll" + "libblas*.dll" + "libcblas*.dll" + "mkl_rt*.dll" + "mkl_core*.dll" + "mkl_intel_thread*.dll" + "mkl_intel_lp64*.dll" + "mkl_sequential*.dll" + "libmmd*.dll" + "libifcoremd*.dll" + "libifportmd*.dll" + "libiomp5md*.dll" + "libimalloc*.dll" + "svml_dispmd*.dll" ) ADD_ARGS=() - for dll in "${DLLS[@]}"; do - dll_path="$CONDA_PREFIX/Library/bin/$dll" - if [[ -f "$dll_path" ]]; then - echo "Bundling $dll" - ADD_ARGS+=(--add-binary "$dll_path;.") - else - echo "Skipping missing $dll" + declare -A SEEN_DLLS + shopt -s nullglob + for pattern in "${DLL_PATTERNS[@]}"; do + matches=("$BIN_DIR"/$pattern) + if [[ ${#matches[@]} -eq 0 ]]; then + echo "No matches for pattern: $pattern" + continue fi + for dll_path in "${matches[@]}"; do + dll_name="$(basename "$dll_path")" + # Optional cluster/MPI BLACS DLLs are not required for local scipy use. + if [[ "$dll_name" =~ ^mkl_blacs_.*(intelmpi|msmpi).*\.dll$ ]]; then + echo "Skipping optional BLACS runtime: $dll_name" + continue + fi + if [[ -n "${SEEN_DLLS[$dll_name]:-}" ]]; then + continue + fi + echo "Bundling $dll_name" + ADD_ARGS+=(--add-binary "$dll_path;.") + SEEN_DLLS["$dll_name"]=1 + done done + shopt -u nullglob + + python - <<'PY' + import numpy, scipy, h5py, sklearn + print("Import smoke test OK") + print("numpy:", numpy.__version__) + print("scipy:", scipy.__version__) + print("h5py:", h5py.__version__) + print("sklearn:", sklearn.__version__) + PY python -m PyInstaller \ --noconfirm \ @@ -92,6 +124,12 @@ jobs: --windowed \ --icon build/pyBer_logo_big.ico \ --add-data "assets;assets" \ + --collect-binaries numpy \ + --collect-binaries scipy \ + --collect-binaries h5py \ + --collect-binaries sklearn \ + --exclude-module pyqtgraph.opengl \ + --exclude-module OpenGL \ --name pyBer \ "${ADD_ARGS[@]}" \ pyBer/main.py diff --git a/environment.yml b/environment.yml index 98e68f6..3859ef7 100644 --- a/environment.yml +++ b/environment.yml @@ -7,6 +7,9 @@ dependencies: - python=3.11 # Numeric and signal processing + - libblas=*=*openblas + - liblapack=*=*openblas + - libcblas=*=*openblas - numpy>=1.24 - scipy>=1.10 - h5py>=3.9 diff --git a/panel_layout.json b/panel_layout.json index bdf07e6..a25a432 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -7,67 +7,56 @@ 375 ], "pre_main_dock_state": "", - "tab_groups": [ - { - "members": [ - "pre.artifact.dock", - "pre.artifacts.dock", - "pre.baseline.dock", - "pre.filtering.dock", - "pre.output.dock" - ], - "active": "pre.artifact.dock" - } - ], + "tab_groups": [], "sections": { "artifacts": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" + "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///86////gv///4L" }, "filtering": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" + "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9Nf///gv///4L" + "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9Nf///gv///4L" }, "output": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" + "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9P////gv///4L" }, "qc": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAB4AAABdsAAAKbAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAAB4AAABdsAAAKb" + "geometry": "AdnQywADAAAAAAP9AAABsgAABdsAAAJ2AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAABsgAABdsAAAJ2" }, "export": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAACngAABdsAAAMEAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAACngAABdsAAAME" + "geometry": "AdnQywADAAAAAAP9AAACeQAABdsAAALnAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAACeQAABdsAAALn" }, "config": { - "visible": true, + "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADBwAABdsAAANLAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADBwAABdsAAANL" + "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC6gAABdsAAANL" } }, "artifact": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAAG7AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAAAAAAABdsAAAG7" + "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAAGNAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAAGN" } }, "post": { @@ -77,37 +66,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALFAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAAAAAAABdsAAALF" + "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALFAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAALF" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAAC6gAABdsAAANL" + "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC6gAABdsAAANL" } } } From f79b46f2c9dad4278b55b34899f1d45c7255852f Mon Sep 17 00:00:00 2001 From: andrianj Date: Fri, 27 Feb 2026 13:56:55 +0100 Subject: [PATCH 16/28] better post-processing GUI layout, and added a "select all" checkbox to the post-processing options. --- .github/workflows/build-and-publish.yml | 22 +- panel_layout.json | 28 +- pyBer/gui_postprocessing.py | 326 +++++++++++++++++++++--- pyBer/main.py | 46 +++- 4 files changed, 366 insertions(+), 56 deletions(-) diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index 8372a8d..cceed34 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -134,10 +134,15 @@ jobs: "${ADD_ARGS[@]}" \ pyBer/main.py + - name: Smoke test built EXE (switch to Postprocessing tab) + run: | + export PYBER_SMOKE_TEST=1 + ./dist/pyBer.exe + - name: Upload Artifact uses: actions/upload-artifact@v4 with: - name: windows-exe + name: pyber-windows-exe path: dist/pyBer.exe if-no-files-found: error @@ -156,13 +161,24 @@ jobs: - name: Download Windows Artifact uses: actions/download-artifact@v4 with: - name: windows-exe + name: pyber-windows-exe path: ./publish + - name: Normalize Release Asset Name + run: | + set -euo pipefail + exe_path="$(find ./publish -type f -name '*.exe' | head -n 1 || true)" + if [[ -z "$exe_path" ]]; then + echo "No EXE found in downloaded artifact" + find ./publish -maxdepth 4 -type f -print || true + exit 1 + fi + cp "$exe_path" ./publish/pyBer-windows.exe + - name: Create Release uses: ncipollo/release-action@v1 with: - artifacts: "./publish/*" + artifacts: "./publish/pyBer-windows.exe" token: ${{ secrets.GITHUB_TOKEN }} generateReleaseNotes: true allowUpdates: true diff --git a/panel_layout.json b/panel_layout.json index a25a432..ed5af01 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -13,50 +13,50 @@ "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///86////gv///4L" + "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" }, "filtering": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8fv///gv///4L" + "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9Nf///gv///4L" + "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9Nf///gv///4L" }, "output": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9P////gv///4L" + "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" }, "qc": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAABsgAABdsAAAJ2AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAABsgAABdsAAAJ2" + "geometry": "AdnQywADAAAAAAWhAAACOQAAB38AAAMXAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACOQAAB38AAAMX" }, "export": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAACeQAABdsAAALnAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAACeQAABdsAAALn" + "geometry": "AdnQywADAAAAAAWhAAADGgAAB38AAAOTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGgAAB38AAAOT" }, "config": { "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC6gAABdsAAANL" + "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADlgAAB38AAAPa" } }, "artifact": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAAGNAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAAGN" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIU" } }, "post": { @@ -66,37 +66,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALFAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAALF" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9lP///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC6gAABdsAAANL" + "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" } } } diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 233f7fd..9ae6126 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -471,6 +471,11 @@ def __init__(self, parent=None) -> None: "trace": (90, 190, 255), "behavior": (220, 180, 80), "avg": (90, 190, 255), + "sem_edge": (152, 201, 143), + "sem_fill": (188, 230, 178, 96), + "plot_bg": (36, 42, 52), + "grid_enabled": True, + "grid_alpha": 0.25, "heatmap_cmap": "viridis", "heatmap_min": None, "heatmap_max": None, @@ -1226,7 +1231,6 @@ def _build_ui(self) -> None: export_layout.setSpacing(8) export_layout.addWidget(self.btn_export) export_layout.addWidget(self.btn_export_img) - export_layout.addWidget(self.btn_style) export_layout.addWidget(self.btn_save_cfg) export_layout.addWidget(self.btn_load_cfg) export_layout.addWidget(self.btn_save_project) @@ -1293,6 +1297,8 @@ def _build_ui(self) -> None: action_row.addWidget(self.btn_panel_spatial) action_row.addWidget(self.btn_panel_export) action_row.addStretch(1) + action_row.addWidget(self.btn_style) + action_row.addStretch(1) root.addLayout(action_row) # Right plots: trace preview + heatmap + avg @@ -1373,6 +1379,10 @@ def _build_ui(self) -> None: self.img = pg.ImageItem() self.plot_heat.addItem(self.img) + self.heat_lut = pg.HistogramLUTWidget() + self.heat_lut.setMinimumWidth(110) + self.heat_lut.setMaximumWidth(150) + self.heat_lut.setImageItem(self.img) self.plot_heat.setLabel("bottom", "Time (s)") self.plot_heat.setLabel("left", "Trials / Recordings") self.plot_dur.setLabel("bottom", "Duration (s)") @@ -1417,8 +1427,14 @@ def _build_ui(self) -> None: self.spatial_lut_velocity.setImageItem(self.img_spatial_velocity) self.curve_avg = self.plot_avg.plot(pen=pg.mkPen(self._style["avg"], width=1.3)) - self.curve_sem_hi = self.plot_avg.plot(pen=pg.mkPen((220, 220, 220), width=1.0)) - self.curve_sem_lo = self.plot_avg.plot(pen=pg.mkPen((220, 220, 220), width=1.0)) + self.curve_sem_hi = self.plot_avg.plot(pen=pg.mkPen((152, 201, 143), width=1.0)) + self.curve_sem_lo = self.plot_avg.plot(pen=pg.mkPen((152, 201, 143), width=1.0)) + self.sem_band = pg.FillBetweenItem( + self.curve_sem_hi, + self.curve_sem_lo, + brush=pg.mkBrush(188, 230, 178, 96), + ) + self.plot_avg.addItem(self.sem_band) self.plot_avg.addLine(x=0, pen=pg.mkPen((200, 200, 200), style=QtCore.Qt.PenStyle.DashLine)) self.metrics_bar_pre = pg.BarGraphItem(x=[0], height=[0], width=0.6, brush=(90, 143, 214)) self.metrics_bar_post = pg.BarGraphItem(x=[1], height=[0], width=0.6, brush=(214, 122, 90)) @@ -1459,6 +1475,7 @@ def _build_ui(self) -> None: heat_row.setContentsMargins(0, 0, 0, 0) heat_row.setSpacing(8) heat_row.addWidget(self.plot_heat, stretch=4) + heat_row.addWidget(self.heat_lut, stretch=0) heat_row.addWidget(self.plot_dur, stretch=1) self.row_avg = QtWidgets.QWidget() @@ -1656,8 +1673,15 @@ def _build_ui(self) -> None: self.cb_spatial_invert_y.toggled.connect(self._compute_spatial_heatmap) self.combo_spatial_activity_mode.currentIndexChanged.connect(self._compute_spatial_heatmap) self.btn_spatial_help.clicked.connect(self._show_spatial_help) + if hasattr(self, "heat_lut") and getattr(self.heat_lut, "item", None) is not None: + level_signal = getattr(self.heat_lut.item, "sigLevelChangeFinished", None) + if level_signal is None: + level_signal = getattr(self.heat_lut.item, "sigLevelsChangeFinished", None) + if level_signal is not None: + level_signal.connect(self._on_heatmap_levels_changed) self._wire_settings_autosave() + self._apply_plot_style() self._update_align_ui() self._update_event_filter_enabled() self._update_metrics_enabled() @@ -4886,6 +4910,8 @@ def _render_heatmap(self, mat: np.ndarray, tvec: np.ndarray) -> None: cmap = pg.colormap.get(cmap_name) lut = cmap.getLookupTable() self.img.setLookupTable(lut) + if hasattr(self, "heat_lut") and getattr(self.heat_lut, "item", None) is not None: + self.heat_lut.item.gradient.setColorMap(cmap) except Exception: pass hmin = self._style.get("heatmap_min", None) @@ -5187,14 +5213,98 @@ def _update_metric_regions(self) -> None: self.plot_avg.addItem(self._pre_region) self.plot_avg.addItem(self._post_region) + def _style_color_tuple(self, key: str, fallback: Tuple[int, ...]) -> Tuple[int, ...]: + raw = self._style.get(key, fallback) + if isinstance(raw, np.ndarray): + vals = raw.tolist() + elif isinstance(raw, (list, tuple)): + vals = list(raw) + else: + vals = list(fallback) + out: List[int] = [] + for i, default in enumerate(list(fallback)): + try: + v = int(vals[i]) if i < len(vals) else int(default) + except Exception: + v = int(default) + out.append(max(0, min(255, v))) + return tuple(out) + + def _apply_plot_style(self) -> None: + self.curve_trace.setPen(pg.mkPen(self._style_color_tuple("trace", (90, 190, 255)), width=1.1)) + self.curve_behavior.setPen(pg.mkPen(self._style_color_tuple("behavior", (220, 180, 80)), width=1.0)) + self.curve_avg.setPen(pg.mkPen(self._style_color_tuple("avg", (90, 190, 255)), width=1.3)) + sem_edge = self._style_color_tuple("sem_edge", (152, 201, 143)) + sem_fill = self._style_color_tuple("sem_fill", (188, 230, 178, 96)) + self.curve_sem_hi.setPen(pg.mkPen(sem_edge, width=1.0)) + self.curve_sem_lo.setPen(pg.mkPen(sem_edge, width=1.0)) + if hasattr(self, "sem_band"): + self.sem_band.setBrush(pg.mkBrush(*sem_fill)) + bg = self._style_color_tuple("plot_bg", (36, 42, 52)) + grid_enabled = bool(self._style.get("grid_enabled", True)) + try: + grid_alpha = float(self._style.get("grid_alpha", 0.25)) + except Exception: + grid_alpha = 0.25 + grid_alpha = max(0.0, min(1.0, grid_alpha)) + for pw in ( + self.plot_trace, + self.plot_heat, + self.plot_dur, + self.plot_avg, + self.plot_metrics, + self.plot_global, + self.plot_peak_amp, + self.plot_peak_ibi, + self.plot_peak_rate, + self.plot_behavior_raster, + self.plot_behavior_rate, + self.plot_behavior_duration, + self.plot_behavior_starts, + self.plot_spatial_occupancy, + self.plot_spatial_activity, + self.plot_spatial_velocity, + ): + try: + pw.setBackground(QtGui.QColor(*bg[:3])) + except Exception: + pass + try: + pw.showGrid(x=grid_enabled, y=grid_enabled, alpha=grid_alpha) + except Exception: + pass + cmap_name = str(self._style.get("heatmap_cmap", "viridis")) + try: + cmap = pg.colormap.get(cmap_name) + if hasattr(self, "heat_lut") and getattr(self.heat_lut, "item", None) is not None: + self.heat_lut.item.gradient.setColorMap(cmap) + except Exception: + pass + + def _on_heatmap_levels_changed(self) -> None: + if self._is_restoring_settings: + return + if not hasattr(self, "heat_lut") or getattr(self.heat_lut, "item", None) is None: + return + try: + levels = self.heat_lut.item.getLevels() + except Exception: + return + if not isinstance(levels, (list, tuple)) or len(levels) < 2: + return + lo = float(levels[0]) + hi = float(levels[1]) + if np.isfinite(lo) and np.isfinite(hi) and hi > lo: + self._style["heatmap_min"] = lo + self._style["heatmap_max"] = hi + self._queue_settings_save() + def _open_style_dialog(self) -> None: dlg = StyleDialog(self._style, self) if dlg.exec() != QtWidgets.QDialog.DialogCode.Accepted: return self._style = dlg.get_style() - self.curve_trace.setPen(pg.mkPen(self._style["trace"], width=1.1)) - self.curve_behavior.setPen(pg.mkPen(self._style["behavior"], width=1.0)) - self.curve_avg.setPen(pg.mkPen(self._style["avg"], width=1.3)) + self._apply_plot_style() self._render_heatmap(self._last_mat if self._last_mat is not None else np.zeros((1, 1)), self._last_tvec if self._last_tvec is not None else np.array([0.0, 1.0])) self._render_spatial_heatmap( self._last_spatial_occupancy_map, @@ -6206,9 +6316,7 @@ def _set_combo(combo: QtWidgets.QComboBox, val: object) -> None: style = data.get("style") if isinstance(style, dict): self._style.update(style) - self.curve_trace.setPen(pg.mkPen(self._style["trace"], width=1.1)) - self.curve_behavior.setPen(pg.mkPen(self._style["behavior"], width=1.0)) - self.curve_avg.setPen(pg.mkPen(self._style["avg"], width=1.3)) + self._apply_plot_style() self._update_event_filter_enabled() self._update_metrics_enabled() self._update_global_metrics_enabled() @@ -6468,28 +6576,84 @@ def _behavior_suffix(self) -> str: def _export_images(self) -> None: if not hasattr(self, "_right_panel"): return + dlg = ExportImageDialog(self) + if dlg.exec() != QtWidgets.QDialog.DialogCode.Accepted: + return + choices = dlg.choices() + + export_targets: List[Tuple[str, QtWidgets.QWidget]] = [] + if choices.get("all", False): + export_targets.append(("psth_figure", self._right_panel)) + else: + if choices.get("trace"): + export_targets.append(("trace", self.plot_trace)) + if choices.get("heat"): + export_targets.append(("heatmap", self.row_heat)) + if choices.get("avg"): + export_targets.append(("avg_metrics", self.row_avg)) + if choices.get("signal"): + export_targets.append(("signal", self.row_signal)) + if choices.get("behavior"): + export_targets.append(("behavior", self.row_behavior)) + if choices.get("spatial"): + target_spatial = getattr(self, "spatial_plot_content", None) or getattr(self, "spatial_plot_dialog", None) + if target_spatial is not None: + export_targets.append(("spatial", target_spatial)) + + if not export_targets: + QtWidgets.QMessageBox.information(self, "Export images", "Select at least one panel to export.") + return + start_dir = self._export_start_dir() prefix = self._default_export_prefix() - default_path = os.path.join(start_dir, f"{prefix}_psth_figure.png") - path, _ = QtWidgets.QFileDialog.getSaveFileName( - self, - "Export PSTH figure (PNG + PDF)", - default_path, - "PNG image (*.png);;All files (*.*)", - ) - if not path: + if len(export_targets) == 1: + suffix, widget = export_targets[0] + default_path = os.path.join(start_dir, f"{prefix}_{suffix}.png") + path, _ = QtWidgets.QFileDialog.getSaveFileName( + self, + "Export image (PNG + PDF)", + default_path, + "PNG image (*.png);;All files (*.*)", + ) + if not path: + return + if not os.path.splitext(path)[1]: + path = f"{path}.png" + base_path, _ = os.path.splitext(path) + out_dir = os.path.dirname(base_path) + if out_dir: + self._remember_export_dir(out_dir) + ok, png_path, pdf_path = self._export_widget_png_pdf(widget, base_path, transparent=True) + if ok: + self.statusUpdate.emit( + f"Exported image: {os.path.basename(png_path or '')}, {os.path.basename(pdf_path or '')}", + 5000, + ) + else: + QtWidgets.QMessageBox.warning(self, "Export failed", "Could not export selected panel as PNG/PDF.") return - if not os.path.splitext(path)[1]: - path = f"{path}.png" - base_path, _ = os.path.splitext(path) - out_dir = os.path.dirname(base_path) - if out_dir: - self._remember_export_dir(out_dir) - ok, png_path, pdf_path = self._export_widget_png_pdf(self._right_panel, base_path, transparent=True) - if ok: - self.statusUpdate.emit(f"Exported PSTH figure: {os.path.basename(png_path or '')}, {os.path.basename(pdf_path or '')}", 5000) + + out_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "Select export folder", start_dir) + if not out_dir: + return + self._remember_export_dir(out_dir) + ok_count = 0 + failed: List[str] = [] + for suffix, widget in export_targets: + base_path = os.path.join(out_dir, f"{prefix}_{suffix}") + ok, _png_path, _pdf_path = self._export_widget_png_pdf(widget, base_path, transparent=True) + if ok: + ok_count += 1 + else: + failed.append(suffix) + if failed: + QtWidgets.QMessageBox.warning( + self, + "Export images", + f"Exported {ok_count}/{len(export_targets)} panel(s).\nFailed: {', '.join(failed)}", + ) else: - QtWidgets.QMessageBox.warning(self, "Export failed", "Could not export PSTH figure as PNG/PDF.") + self.statusUpdate.emit(f"Exported {ok_count} panel image set(s) (PNG + PDF).", 5000) def _export_spatial_figure(self) -> None: if self._last_spatial_occupancy_map is None or self._last_spatial_extent is None: @@ -6873,6 +7037,56 @@ def choices(self) -> Dict[str, bool]: } +class ExportImageDialog(QtWidgets.QDialog): + def __init__(self, parent=None) -> None: + super().__init__(parent) + self.setWindowTitle("Export Images") + self.setModal(True) + layout = QtWidgets.QVBoxLayout(self) + + self.cb_all = QtWidgets.QCheckBox("All panels") + self.cb_trace = QtWidgets.QCheckBox("Trace preview") + self.cb_heat = QtWidgets.QCheckBox("Heatmap + durations") + self.cb_avg = QtWidgets.QCheckBox("Average + metrics") + self.cb_signal = QtWidgets.QCheckBox("Signal analyzer") + self.cb_behavior = QtWidgets.QCheckBox("Behavior analysis") + self.cb_spatial = QtWidgets.QCheckBox("Spatial window") + + self.cb_all.setChecked(True) + for cb in (self.cb_all, self.cb_trace, self.cb_heat, self.cb_avg, self.cb_signal, self.cb_behavior, self.cb_spatial): + layout.addWidget(cb) + self._set_individual_enabled(self.cb_all.isChecked()) + + row = QtWidgets.QHBoxLayout() + row.addStretch(1) + btn_ok = QtWidgets.QPushButton("OK") + btn_cancel = QtWidgets.QPushButton("Cancel") + btn_ok.setDefault(True) + row.addWidget(btn_ok) + row.addWidget(btn_cancel) + layout.addLayout(row) + + self.cb_all.toggled.connect(self._set_individual_enabled) + btn_ok.clicked.connect(self.accept) + btn_cancel.clicked.connect(self.reject) + + def _set_individual_enabled(self, all_checked: bool) -> None: + enabled = not bool(all_checked) + for cb in (self.cb_trace, self.cb_heat, self.cb_avg, self.cb_signal, self.cb_behavior, self.cb_spatial): + cb.setEnabled(enabled) + + def choices(self) -> Dict[str, bool]: + return { + "all": self.cb_all.isChecked(), + "trace": self.cb_trace.isChecked(), + "heat": self.cb_heat.isChecked(), + "avg": self.cb_avg.isChecked(), + "signal": self.cb_signal.isChecked(), + "behavior": self.cb_behavior.isChecked(), + "spatial": self.cb_spatial.isChecked(), + } + + class StyleDialog(QtWidgets.QDialog): def __init__(self, style: Dict[str, object], parent=None) -> None: super().__init__(parent) @@ -6885,6 +7099,19 @@ def __init__(self, style: Dict[str, object], parent=None) -> None: self.btn_trace = QtWidgets.QPushButton("Pick") self.btn_behavior = QtWidgets.QPushButton("Pick") self.btn_avg = QtWidgets.QPushButton("Pick") + self.btn_sem_edge = QtWidgets.QPushButton("Pick") + self.btn_sem_fill = QtWidgets.QPushButton("Pick") + self.btn_plot_bg = QtWidgets.QPushButton("Pick") + self.cb_grid = QtWidgets.QCheckBox("Show grid on plots") + self.cb_grid.setChecked(bool(self._style.get("grid_enabled", True))) + self.spin_grid_alpha = QtWidgets.QDoubleSpinBox() + self.spin_grid_alpha.setRange(0.0, 1.0) + self.spin_grid_alpha.setSingleStep(0.05) + self.spin_grid_alpha.setDecimals(2) + try: + self.spin_grid_alpha.setValue(float(self._style.get("grid_alpha", 0.25))) + except Exception: + self.spin_grid_alpha.setValue(0.25) self.combo_cmap = QtWidgets.QComboBox() self.combo_cmap.addItems(["viridis", "plasma", "inferno", "magma", "cividis", "turbo", "gray"]) if self._style.get("heatmap_cmap"): @@ -6900,6 +7127,11 @@ def __init__(self, style: Dict[str, object], parent=None) -> None: layout.addRow("Trace color", self.btn_trace) layout.addRow("Behavior color", self.btn_behavior) layout.addRow("Avg color", self.btn_avg) + layout.addRow("SEM edge color", self.btn_sem_edge) + layout.addRow("SEM fill color", self.btn_sem_fill) + layout.addRow("Plot background", self.btn_plot_bg) + layout.addRow("Grid", self.cb_grid) + layout.addRow("Grid alpha", self.spin_grid_alpha) layout.addRow("Heatmap colormap", self.combo_cmap) layout.addRow("Heatmap min", self.spin_hmin) layout.addRow("Heatmap max", self.spin_hmax) @@ -6916,17 +7148,51 @@ def __init__(self, style: Dict[str, object], parent=None) -> None: self.btn_trace.clicked.connect(lambda *_: self._pick_color("trace")) self.btn_behavior.clicked.connect(lambda *_: self._pick_color("behavior")) self.btn_avg.clicked.connect(lambda *_: self._pick_color("avg")) + self.btn_sem_edge.clicked.connect(lambda *_: self._pick_color("sem_edge")) + self.btn_sem_fill.clicked.connect(lambda *_: self._pick_color("sem_fill", with_alpha=True)) + self.btn_plot_bg.clicked.connect(lambda *_: self._pick_color("plot_bg")) btn_ok.clicked.connect(self.accept) btn_cancel.clicked.connect(self.reject) - def _pick_color(self, key: str) -> None: - col = QtWidgets.QColorDialog.getColor(parent=self) + def _pick_color(self, key: str, with_alpha: bool = False) -> None: + current = self._style.get(key, (255, 255, 255, 255) if with_alpha else (255, 255, 255)) + if isinstance(current, np.ndarray): + current_vals = current.tolist() + elif isinstance(current, (list, tuple)): + current_vals = list(current) + else: + current_vals = [255, 255, 255, 255] if with_alpha else [255, 255, 255] + if with_alpha: + while len(current_vals) < 4: + current_vals.append(255) + qcol = QtGui.QColor( + int(current_vals[0]), + int(current_vals[1]), + int(current_vals[2]), + int(current_vals[3]), + ) + else: + qcol = QtGui.QColor( + int(current_vals[0]) if len(current_vals) > 0 else 255, + int(current_vals[1]) if len(current_vals) > 1 else 255, + int(current_vals[2]) if len(current_vals) > 2 else 255, + ) + options = QtWidgets.QColorDialog.ColorDialogOption.ShowAlphaChannel if with_alpha else QtWidgets.QColorDialog.ColorDialogOption(0) + col = QtWidgets.QColorDialog.getColor(qcol, self, "Select color", options) if not col.isValid(): return - self._style[key] = (col.red(), col.green(), col.blue()) + if with_alpha: + self._style[key] = (col.red(), col.green(), col.blue(), col.alpha()) + else: + self._style[key] = (col.red(), col.green(), col.blue()) def get_style(self) -> Dict[str, object]: self._style["heatmap_cmap"] = self.combo_cmap.currentText() self._style["heatmap_min"] = float(self.spin_hmin.value()) if self.spin_hmin.value() != 0.0 else None self._style["heatmap_max"] = float(self.spin_hmax.value()) if self.spin_hmax.value() != 0.0 else None + self._style["grid_enabled"] = bool(self.cb_grid.isChecked()) + self._style["grid_alpha"] = float(self.spin_grid_alpha.value()) + self._style.setdefault("plot_bg", (36, 42, 52)) + self._style.setdefault("sem_edge", (152, 201, 143)) + self._style.setdefault("sem_fill", (188, 230, 178, 96)) return dict(self._style) diff --git a/pyBer/main.py b/pyBer/main.py index 9d868f2..5bffe0f 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -3949,6 +3949,7 @@ def closeEvent(self, event): def main() -> None: pg.setConfigOptions(antialias=True) + smoke_test = str(os.environ.get("PYBER_SMOKE_TEST", "")).strip().lower() in {"1", "true", "yes", "on"} app = QtWidgets.QApplication([]) icon_path = _pyber_icon_path() try: @@ -3959,16 +3960,43 @@ def main() -> None: except Exception: pass splash = None - try: - if os.path.isfile(icon_path): - pix = QtGui.QPixmap(icon_path) - if not pix.isNull(): - splash = QtWidgets.QSplashScreen(pix, QtCore.Qt.WindowType.WindowStaysOnTopHint) - splash.show() - app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) - except Exception: - splash = None + if not smoke_test: + try: + if os.path.isfile(icon_path): + pix = QtGui.QPixmap(icon_path) + if not pix.isNull(): + splash = QtWidgets.QSplashScreen(pix, QtCore.Qt.WindowType.WindowStaysOnTopHint) + splash.show() + app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) + except Exception: + splash = None w = MainWindow() + + if smoke_test: + try: + w.show() + app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) + if hasattr(w, "tabs") and hasattr(w, "post_tab"): + idx = w.tabs.indexOf(w.post_tab) + if idx >= 0: + w.tabs.setCurrentIndex(idx) + for _ in range(8): + app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) + try: + if hasattr(w, "post_tab") and hasattr(w.post_tab, "ensure_section_popups_initialized"): + w.post_tab.ensure_section_popups_initialized() + except Exception: + pass + for _ in range(8): + app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) + finally: + try: + w.close() + except Exception: + pass + app.processEvents(QtCore.QEventLoop.ProcessEventsFlag.AllEvents) + return + w.show() if splash is not None: splash.finish(w) From 41ce5df923f99dcc3d44ce2f5730ee753b2a5bd9 Mon Sep 17 00:00:00 2001 From: andrianj Date: Mon, 9 Mar 2026 15:14:37 +0100 Subject: [PATCH 17/28] new GUI and export functions, and some updates to the README and .gitignore files. --- .gitignore | 13 + README.md | 11 +- panel_layout.json | 51 +- .../__pycache__/analysis_core.cpython-311.pyc | Bin 60138 -> 62387 bytes .../__pycache__/analysis_core.cpython-38.pyc | Bin 28107 -> 29428 bytes .../gui_postprocessing.cpython-311.pyc | Bin 480362 -> 551653 bytes .../gui_postprocessing.cpython-38.pyc | Bin 184360 -> 213702 bytes .../gui_preprocessing.cpython-311.pyc | Bin 211571 -> 215923 bytes .../gui_preprocessing.cpython-38.pyc | Bin 89539 -> 91109 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 255654 -> 298534 bytes pyBer/__pycache__/styles.cpython-311.pyc | Bin 6752 -> 9462 bytes pyBer/__pycache__/styles.cpython-38.pyc | Bin 6750 -> 8422 bytes pyBer/analysis_core.py | 108 +- pyBer/gui_postprocessing.py | 1076 +++++++++++++++-- pyBer/gui_preprocessing.py | 56 +- pyBer/main.py | 814 +++++++++++-- pyBer/styles.py | 97 +- 17 files changed, 1996 insertions(+), 230 deletions(-) diff --git a/.gitignore b/.gitignore index 068b44e..182af94 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,16 @@ pyBer/__pycache__/main.cpython-311.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc +pyBer/main.py +pyBer/__pycache__/analysis_core.cpython-311.pyc +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-311.pyc +pyBer/__pycache__/gui_preprocessing.cpython-311.pyc +pyBer/__pycache__/main.cpython-311.pyc +pyBer/__pycache__/styles.cpython-38.pyc +pyBer/__pycache__/styles.cpython-311.pyc +pyBer/__pycache__/analysis_core.cpython-38.pyc +pyBer/__pycache__/analysis_core.cpython-311.pyc +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-311.pyc +pyBer/__pycache__/gui_preprocessing.cpython-38.pyc diff --git a/README.md b/README.md index 659bca2..ec8485b 100644 --- a/README.md +++ b/README.md @@ -66,11 +66,12 @@ The GUI exposes seven explicit output definitions: - **Lasso**: sparse regression (requires `scikit-learn`) - **RLM (HuberT)**: robust linear model via IRLS + Huber weighting (no extra dependency) -### Export -- Export processed output to: - - CSV (`time`, `output`, optional `dio`) - - HDF5 with raw, baseline, and metadata fields -- Drag-and-drop support for preprocessing and post-processing files. +### Export +- Export processed output to: + - CSV with configurable fields (`time` always included; raw/isobestic/output/DIO selectable) + - HDF5 with configurable raw/output/DIO/baseline datasets plus metadata +- Export field selection is saved and restored through the preprocessing configuration file. +- Drag-and-drop support for preprocessing and post-processing files. --- diff --git a/panel_layout.json b/panel_layout.json index ed5af01..5480732 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -1,16 +1,17 @@ { "version": 3, "pre": { - "pre_data_panel_visible": false, + "pre_data_panel_visible": true, "pre_splitter_sizes": [ - 260, - 375 + 0, + 1030, + 439 ], "pre_main_dock_state": "", "tab_groups": [], "sections": { "artifacts": { - "visible": false, + "visible": true, "floating": false, "area": 2, "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" @@ -33,30 +34,30 @@ "area": 2, "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" }, - "qc": { + "export": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAACOQAAB38AAAMXAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACOQAAB38AAAMX" + "geometry": "AdnQywADAAAAAAWhAAADFAAAB38AAAOMAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADFAAAB38AAAOM" }, - "export": { + "qc": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADGgAAB38AAAOTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGgAAB38AAAOT" + "geometry": "AdnQywADAAAAAAWhAAACNQAAB38AAAMRAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACNQAAB38AAAMR" }, "config": { "visible": false, "floating": false, - "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADlgAAB38AAAPa" + "area": 2, + "geometry": "AdnQywADAAAAAAAAAAADjwAAB38AAAPTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADjwAAB38AAAPT" } }, "artifact": { "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIU" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIQAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIQ" } }, "post": { @@ -66,37 +67,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" + "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALgAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAALg" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAAAAAqgAAAB9QAADIYAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADIYAAAOM" }, - "signal": { + "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAAAAAqgAAAB9QAADLEAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADLEAAAOM" }, - "behavior": { + "export": { "visible": true, "floating": false, - "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "area": 8, + "geometry": "AdnQywADAAAAAAAAAAAC4wAABdsAAANEAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC4wAABdsAAANE" }, - "spatial": { - "visible": true, + "signal": { + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAAAAAqgAAAB9QAADBQAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADBQAAAOM" }, - "export": { - "visible": true, + "behavior": { + "visible": false, "floating": false, - "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" + "area": 2, + "geometry": "AdnQywADAAAAAAqgAAAB9QAADHcAAAOMAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAqgAAAB9QAADHcAAAOM" } } } diff --git a/pyBer/__pycache__/analysis_core.cpython-311.pyc b/pyBer/__pycache__/analysis_core.cpython-311.pyc index 19dceab4faf8337342aab24c5c0a7b5a2b573590..dcc83cfb5ffa3eacb68923442b178808d0f25d5d 100644 GIT binary patch delta 13642 zcmbt)4SZD9mH2z}J(Ec?NhTkYF9;zalRzNhBM9Lm2qGW}5L6h6<1lX$Cd@~;Ga&>g zPEe}IQVm{O(w0h8RQza{cGR`v-$LuZTCFytLrvdGx81GV+TCsAuDjc^yLHbwFEf*b z*#7(b58=Ff&pr3tbI(2ZoOADczqz80{YstnbY`YWfZxe0-}IXP=44ips$6}trY@@T zX&qWgkkme%U+>V10+cmAgWu>d`b`d#Kf{sXH#^M!Oh+cQseD{E2+#3NVv)Maqvw)1PhAbqhu}F6o-d2@GHWKt z3xK?k2gI_dUFw#~k7^vX(tc?+JnM`&AD`rx<{i~K=BH{kP+K4cr1?NoF9oG~crKKB zq(*oyk`72q;MoArrSNQ&n6v_(i=~xPv$X1rN(xEqj_Mpsq_DIe@Jpp$X(K$BNeA~x zw?Lsu>XWv?bGdX#+5yiSq<*O#o-3ro(oT4;lecxRJ>A0n$q<1GOnX$9hTCF4zZS zx$3jJf@efo6Y}^vLn5@!zE;rFzs|$<@HdQ$#rtFbWweMzJD@=pdt`CHEFKJLkPLpT zjaO#WiVyPEjNNm$1G3ewVjJPfZU$i2FziNU1>4Tw&Um?g8z5zKDC`P*-F{DaUr=Iq z0O}cmAq&=qpfU+I$G&AQREgVTKg?PyHt#`n2ZB2hI1%^|_z?sVxDccnxv`4i5x&7P zq@xBme>cmj`^<0hjNNP?&WnQoCc$+^=Y(0pzq8 zz^~vx{KnVVjZA_9^C0L#un&P3K{tY_qS>u1gxD~GUIhIBWL2O?*1JM3#$5fZ2GNHQ zt?u%K*+H!KVO7KXifSroHaMni@P<0Q0dLr2&tR=cbr?aAUn*)5+qlYBCq5Uex819{ zlV-db8tpoTrkV&5+>L;i3;Ei$Y$o*%A<;CY9zYy|vplQxF-55dP^qzZOZSN2TA-Pf z(ut)mzM_0KDEW@^3NgS3%4N&+aky{RvX-+*`xt`95!{2|egsb-IEUa#1k+@B1aSzi z#(p;IfT#%b2nrKD3fR+vM{tOe;85KvNTNe6sXQ7<-3%>I(^5?{QPWXPJ5ke9O*c_9 zP)$EkGg8e!wHzq}_M^#@A>~ThM>S6Y=jY%*{Ln-lX2}BkEKknfaHuE9!tEZP$Bh=Y zlg))@S(J1H7-Wv@1I@}_^Yq?eY zXC5@x@eha0nuyS?;uVVuu)+;bo4I{aRr3`)at9Y zvSH~=AZ}Zbur0V+P&~Zk%*uGdyhOpgtCNUIXOCDD6^-%I#fj3zSEtm*GxZkJxS#-| ziCluLkz8TdwUX2(SCqO1wHn;p4J*^paV=-wG)d>VQ*INa%!L1HK@k7#w<20s7+~@j z5yL8;b7xUa$fOb?!X#4wigp2UVQrFF5F)UIs|$^yq*8n{txL^AnWBORQ=Jj7`5ZhL z^NjRh)-&S4z|;8X^Ma@h^XWXP#6@Vg8-C&Ket#1ZyeQFmA|;gI#y6T zxM@^Vto+3_#bbGegEx(83YEXOrf}@KF1E74TShfy%3oYlHZ~nGt}$p~dnUmKrDzp& zIpZo5wj{wPYQP=6V;WY8@H7(%r&EpKa7?N&sUgM$=l)GOhHEfC74yjIQ14#5$X)?V z(k=1zRgL0&-dEL>NdfXzq}H%k_{Az)F>;g*p&lQE*F$01u-6sx1YCX(8|1&ODp^Yd zQn-Bq2{qU(i!NCVv15Q>-$ksp$Hl^-kP*s|C@DWOeYuctt18s7x1gmu)>-WqA-Q>L zUbzTze_XRTPw}lB8KDEVtJ(MYLc6X0ZK%jGFQk1Do|ZvVUu&uu>l}r0M^%zFQ5FFkpmoIBGEsm?J8-ETS68 z1=JkNdZD9Y4=@_Y9LS28NAi$vwWN(?eoc^ck*u!?U)OYrPl4xnE*1Gi;lvzCAJKNI zy2OEOn1eMnhr&qqNItTtkwCGXs_7kpxL_t?W5h5camu1tigS6y6w%E2N11$9I3+jOc@aN*pDjlf$qHmlwtv3u^&$hPa$8dC1(BTT>N?>w z3jBACOU>q1hKntWeJsEiEiMF^z+t3wx6}Ntm@Qfa$kRd>*^fMZ}Y;6NdJQ zJlX{mcD1akUnFbD#i1h%p{0Y%B7b$w)a>(y!tS8IXZ7J44`s2=9u{SVCVY8#{Y_KBv#S-=mxi$V;BW<|7CwZ$|gW9z|+RG}z+_$htlTew?ve5ob^; z!9GP-uOl&rQ(4Pgfi4ew0LpMqBNv~*#w!RuK=2C$=-_2FI9=*5t08lzVP!qwobI4c z7CYJBBIRyiBrpfk>jB^E4}@gV3kg4rjY^hv2VK5iP$F&?E}pik;55BrN%0N8gZj;= zzB^$V28D66pv@lKjQ>6=n|I#$;+lBbjft`wM=g#aiBRqSoT!mZ6nH3y$f> zGOQ<7VP<6?Gv__rdc1Xb!^q;{=D4{gVXhf9*FbwBqZ|nqCJDBj&l@dS5I5H+%=M$@ zdZH*nin=7l#*y~n)p2ue!dyFQt{uzBI<_X+MBJlk_6Fm_rsF2XD$eWS8P8jk0BC4P z7#c+VE zso%-dY%SEkQ!D~hVsXI^!*!<&wQ|ZxMqza_3TyfH?tFf7xmB%+X!!Q$3;1ixbJW_1 zmT#L=ppw-5^792*5JiBa@(Y8j_-(8s0(iF|6G6?ebkk^R0TuLa2`t(;f)&(xjl5d%T8l% z$A%Gn4Z#@%w*s)6XAJ$n;h(LY2d_7P3Ilowceiq+Qy@g{mKIx!4x)A+M(({DjNJcj z7Rqb>RKPZ7p0Euq8P1Cv%MwNiZFT(amNopNmM=T5R@a{EzF_;HVcmNT>*5XT6AkO* z)f*Dk8;*%5^rMzJaYN zPG%9wEF`HNxtSgpieBFJUc-jbh7E7lj5_WZ-Hdfg>&~mVh zi#M;{R;vEtiWburt?F%!2$i?BrY*VJx3g8-=0PP##7ge^RnRh8s@XPMKUygQq#Fv> ziDp*A&pu^~J+R@h*qYudHQ0g~s*>)ak;^*2NAkJ?vKlT1V2{6oI5ps=+!APp^ymAKyC1`p#|B zK{q_``ciPKxyx&f{cG!Xv16vevXJe)zz|gEI`qus!LYk>y#wz=1@;CKiF;*LcoF<> zxK4nPZN=IuApDSjciRIr$%(P=+P+h?!5dM5RRFlI-#a@>wDX|hANjxRIIbw?;n+ZX zzbc9cAiGI98<7o=_au|ZMs}!clAX=Q65g0Fy!Egf6tj955jEIkN1&`^p#OlZ>I<+1 zfC?FaBI(tXt17e87wqeS+eBx`5Dc*fpc>}`xBXa88Z8ug`|Z`b#mH_+EPDGF#2tlL zUW}vaCP`Y4L!(r1$_n-dBznsQubW7urPPIZAb1F9LwHF}l7M5qZTB4Qa%lOC5A1#v zEVtBgm%f0;S%PeFu$`R*r4=^ljgY^(6YJ@Zp)`Cn@9G} z(yfQaY*p;By$-E-Gym_dl{b)rHXtiJ5aJmXULDDrPUdpUs@@)Woe_k^!?-w|U(dcW z?RMz1nLo1ccpfd+F(8vwhZ^92UgsvVo&m{Q`otH8eqQmd-Z* z5nIuBC`JS~Ik5i_;KsD)DzhYQDT3hF6pW0*EOORYnNtFEvf2}n;J(_^#Y`f9s;?T} z<-XHbuEnfkFgD(|0N;d{A6}>-*%@sEFSPBn=S-ggNlOBd_9u;cWPxhZ-6Wr2YICErwS&<9Y;05XAl{8%8gy%;hmpYoWPpptx)I>S*?t75htE^N z5$qH}Dw^?3^Gq*YT3@6YRDeAn=Dr`grzcOVHdO&^07t+nGram@K?I}*Tvo;qpnljr z2%-pP(g~hM;V!74iVWE%dBSjW?}RrA-cFZ09CErO7i6#pJ?viK@PpXR4-|kwz*V0$ z7J4uyZb6M)zx!~?vJL}sSW=8LWwj8}Xn|@Xq4m#l zGN0eMuXnG9kusi!aWv{!y(9r8i1ie2*4Gp!;M_KELmAU&bEf(t+Ske(muUHWwC=f~=3d zjEoW7$G1MQMoD&F7Wt2}iuiL++*$h_By=O7nO8zd&h@(jy)K`VdAi_W4f&GC&GN( zQWcd*2;BH!J<6Q1tegI(9h4@p_fV?L3EjFq@ZP}*?~vaHYzY1fYgsla_%);%XCeuE1|&`k4KaQT6sgMpYo zL;gPi8pX&l8IxXECtl=Fzi{hfGFfCGn{Nra_iqZcwB5RMQG>GWSK`psZ&pJCCqO znkKSxNW)m8BuY*c9FL8%4z8QLka=vuwgUj{He7g{pxm|m25GeJeRyEpjU<21O)pg} zd63XyC+r1=z6P^B2JwP&4hppRahzd4<$A zBFmo=;P}5?T%}TLc;l<{EVP0&B~&|ne{izh7Q6S=e^=kQYhretoz5Tw_b@5c;2R@Y zxBo^B{||yx6oN!87x^qhFv?%KwEDJmDvsS4W*G2o2}w)ilH*n!69im*QHH*ICgu!9 zqTG$W%3CiNKyK=}yg-$yiJiK?@V1SD?@jHe_?-H1DaAZ^t5 zW3>-S>{zNsFb_er7GWI0z1Uobr9mu35a3+|!*e~uO9ACzf#(9Y6zS$uHv|octH;tp z1bBpDcr2XseXFviTp_xtg>T9Pwi-yIvKhAiwp({Px3;a{&`yDmVfw}}yt3Dk8yQ6t zmewNpzX<5-NeN4+OZ&plH)C2-vKZW%v?b}NChPWjos8SAWT>nnuf9^Xh7PQB)9@9f z{3-yrBWZ-Z%G(7HHgTh}Dz9RTdY`uuzH13Wi{uS9vSEJwO1W+gO8qPT%`3BXZy=L7 z{QWEKMqK0&Y6kZ30^>x8VDECzPpVaQn%EbA(qV|A8N%kEInnx%Q#*iI^Isk)lrTYC z+@QD~WuF2&<)SW?0!*BLF<-H(TU&4XQ=^SwcM3~XO79ku71snlw49WrAo+iyM*e_+ z7X4i;xv&8ztOWZjfYULAf6agUcSEEKszM@>*2iI_C(XQor56#&gs3ABEdI> zyOAXgNgJvftLeGXJUrOlG)c9|?vr~TLNSO>T3_Zr(`V`GRHqrbvpaEI-6Z`@Gl>Uy z{XY~&)54^izm(!jagW^P=@gCxd;pmn6emS`B%ej4X&aU(b;?XiD zE0NBP0KJj2eV)eBTL|dw*YB{TLkZ|)N+E(`M-}2IfKZ57j#UZ_+p$D(g2EDo9Ew2X z{7+%)(_%Y7iUTh}UDj`Jqi>z*h$9=f@8}H#Tzh>UN^HnqOmi&P49#!^==FJ4vpSdv z@DM_+{5u~t#eVfsn`#-DuPS3)RVKn$o7aO+5ceqp_>xnVanz zd=b8`m;u17YU_!jQG_=(GXNGF{`EptWtOfbU$~sFZ<(dOTrMK4)V0(KmuoXxma8u} Hi2(l>ke;h$ delta 11671 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 J)Kn4hzX7s4$dLd5 diff --git a/pyBer/__pycache__/analysis_core.cpython-38.pyc b/pyBer/__pycache__/analysis_core.cpython-38.pyc index 725b7e1cbe82f85ea70b5708561263c3c097404d..97f9bc251fe1c1e86c9670e7a284338f4b095ba5 100644 GIT binary patch delta 10670 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 delta 9326 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 UJ~oNrKB{k8Z2Z;RoH6A80igXn{Qv*} delta 24654 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 B!VCZa diff --git a/pyBer/__pycache__/main.cpython-311.pyc b/pyBer/__pycache__/main.cpython-311.pyc index 614a7697de4ecf1eee35d3d61e46fdfdc5e6ceea..5cf1f0260b1285e655a5c9d0d139ef7dc04c0757 100644 GIT binary patch delta 25430 zcmbun33wDm6EM8pv%A?OoBJdLa*_}T5bpa3kZ^|^JOI&GM8vPEW;dGz{NC?>{t&8bdb+EttE;Q4t9!Eg zJ^$CP`1|km^YhWc&$%``@-N-@qJLew{VRh`cfU^Pth$*@*3IPdr7GQgCQEC~GbQdqNWCF7$v?^dka|NJ0I84svm6Aeul$P~3aMGXEQdqt zCtr~xA@!H9%B>&`kbkYRV`FWhu|WBn91EF2kj6n8EXT_U+nM~EoV3O`GerJfZV$Pk zkfuNyCjVFN2x++dhuj&`2>H6425F@Hr`!$FR`A>%(kOWD0cmUbhTI#{Xy{5GNZUZ# z7t*$)0qF-wjQp2;Qy#F!Ff$f%20~68q=O)hm;aUrLz)23Lm*9*Z^`M9wv&g-!+^nm ze zERgnxGzZcFkmf=<5K3fMTn%<^); zvY=Esq~jsI8`24oRzNxt(n?4tLAnCc$&lJ1odW4fNT))&3est^{gQkSAk!gZHKca| zX+QZsz-9pEFINFJ6R-ezEnu?Uj^mm=-t^KRp-mbq*8q02zMo0OZ+oZ7p+Wr>WegM+* zkZuI7QsoPPZ34_&{tmEez&gp_1Gbs4AJ9BLNCx=g8q-X*O1F&7+%j3$zH^Oz#JC{# zaLuQ8<$I}l^J08^xCdilPxZ>eIQ8!Nt^C*O7ItxG@93=tJ&~wp&Pz~lJ|3WswV3gB zYUAs^s>Lr<-I{Gy^PdTPFwal@e4dZ$YYArk)Cratbs%8<0qd%MkrS&fFAs=XtIHnf zt__qL@g0N2=5{Phj2zDb0-3JatHGXEM(vfFniHpv$qv#(xdHeP7v5Z&RIFcozcP;olxTFa!U!AEtu>W2k@{wjh*^#j!w%3{)-8w34J9l%WovALDt|ujwl+ z+rMST09VF1P3Rv^WC0*_Xo;wawAtKjUYOyaududA$=#nIuZT+SDj%j^=@(#P zx($(#F`g*0IQ7bcVQhj}{3MGsRvIb{|ErS*PbY&V!;Xon+(+1+e(=GC+Q+^zdUNh_0q9s?cI63bBTI?>OCMC-4)Y^q%91G-MOhz*+IeN@Io5E!`xrkMQp{6*6j_#1Wi|wRx#S{pQigBoNnZx424Q zb7MN3nT`2!@`D9ozKxGN=DIa7TdaDLwP8opAVajO6ts(JEF-tSL;q&iWEN&i>fZ%E z>i&{Jl>Si?&nl1~)km4i>|~twEly&K)!M}))NExWTdBsD3{-zE@nNf|@ApvYOC^5l zWo3l=Ldham{SG!iw%X0u8nvV}OkApA0odWL>bcU6>Z^s(>RUD+^5?iY;)X5l(y#<#y)Oz?aFo(D8}o~I1pJJzE$MUst%V8;gW z;uMzXKPPcEs7Iw2OdU?mwDqa*n$O6Hr>HlV#Ho(5cy(}@58Fune5TA#{ikdpd(i#F zRN`$*lq_Zb>bx?4 zzT;_9Xfpd`+js0k5y9Z>c*gTaym^{=u?{ugmOsnQzGI6ma_l5)uC=JNW9Clv{+d* zzo2+&b^*}KR*0U{*OF7bq;yL0GdhotMv7zqz022V7;l^DO11WrhbQd)c4P+Gv(Hs za%)YwHC;CDHTd+YGxe=E^{qAatvRQjHUxd27?Y>h{h;^B3zB{aWO+ei$fGQx=KQvI zjQS0*9I4~%k?QDOebgH}K4df0cXl3zxxZppB8>6wT?K5L8n}CAA_t99d_nZecBrB} zj$j7@Z_N7?!A^DK?$VeiFmpG8Gnn}#VoxF1i(r=;_hbayqxOAr5=&AyJlWC6fN*)N zTD>!trPO@&bDpP8L}B2KM5IL){T+szY;!&p+yKL^KfHb@6geAQfxFclAXWP8G?%+@zT!LGB7Zi`32DY^_rn|$eKaYK=$v~k7DMUz%RCPqsEi^!l{KUQEkJjlHQRp8tfss$M;R7bw-}3;h_3{k`A4+gND)#lh?~b<@Rrqdvx3pCUMh z;1dKn*!)4Y^Q9jBs2QAPPBU2A(qhFrxzqw8{|L(+0pQf<7tJqLJ_FRP0I%Y^&(-ah zrm@*I*Dj4U1V0BkHuw*-S~DK|)rnWq!7)&;d>8x-ynrs!q$Y_!r>?s?gWaQExcXSi z8Ki|EMN*ze`~?IkQkU+oY)Wvw`qQu9_##2&9D?W6hHKN=1~u)sia-)9j<%~M_4VK4 zfP=4o8_|ho6iue@pqA5IXf4dKD%nMrLaR;r4-&%7gsW+F((gH}vgY9L`l+cd9f0DrZmDeDT*leRPxlLb+z-z7dxh>+gdN z<`x&0461qPYgVYoUW&~>f|ov@u^DM3UQT9{nsbYqI{hP()C|8{)JStUJ1lx|wynKu zY-oOY*0S3NT&wh&=qIra(KM=OfwJ;%1z#7*dNwqUgr5#VO9|Fy2HJL)2(bDpu};t0 z`H~%(iy7JCu$~QLKZ#p<7MVc9saJ}NOKI@HeE{27W~GtU2KGnM*TCkp1CAXA)xeV6&)B?az+j4r)+|L}rELh_LNFb9r$y=ucy#(_+bqDQ&01Ot{!*i5 z#nnTJf|i_8S-!2sGO6QYygy4~-#Nb;@1h^wstXj%AT-4L2f9 zrK8}j*>aXDDq6GA#z0t zOUeKo=6>RITTqfD(Jh8ujOveBT0US-leTEX^@A zg`Ltz?L?ZvW3BT`hl5+CNhV#fT9jR)duR3@8}9hCGy99PyBxoFWrtY&$0&0vP=&DJ;VVmjkdFaDL;DCah0I(g2piHajK^VCVJy8tJ9@&@$>Yfy_(6 zYq2ROkj_B_^#~Rs#dz!yHT$V3OlNuQF~`YtcDKY{a!kr#67Q4?rS>tW$yx-W16u&y zT8$MaVMPp~C^5R!wz7x#={quJl$(-CYWd&Lnxk|i_tw`0&K_Kdg7JrKW4Vr3oB z{_bN+JE#vUFRiOH0dKZ+?1wVtBgDj6th@TdjZk*dadI-tl2}L4ZaNzq_$T&(>;`!Y zSH-I7EF@wv@`iIV#Y<5U-+~}XJUbmM$PbQTcd>t%oy?fP7h4f*L+}WKM-gmC@E8Da zi--iRfJ7$&`E{q@P&)?$mOxB@$(SReMbN$qo}WXBUEz_@Wr=_-cZG0f|3_ zVnL(cn!4JujY51qTZ~!+rmdsnqebi#v#*DGQe7GjMupt+&kQC8yZB3Nc?#Kj`E1SVT{F&qJgJKim3cNvU0U6p%9 z{1Vo;>)VLaWYuOT&sV~S@xLE<=uG)PFe+$lrwkrufl z;z%V+gDC&iO16hBaco_|D)e@0oZ9^eN~V~b%sQG}INfQ@QKB2!Y>QYG60Sw?K7weh z?b`6yVFsxy(rn=#+yt)5d%CxJLS4-|v2Bi{t62Xp!n3oKC}kK*W+;N;2r>|m1`z`z@R9oMVdX1q`A!PM zc8Pa4vE*4-u>gsE6jpx>!S9%N8Nps`*JX1&JwfZ@H0D}z^T5~gOz+v4ZL+}nn_Xrp zPznVc(5AB&9aYurf+3I^`VfiIE^V)%wYU)c!R1OizM6xD<{}`$&q8cA0`f@7 zK_rKk1WvLhZ@V7bn`B0K3rf4agys@&B55a;7>$08pYlNdz5Xq2k>= zESPyaPVHe|7(2a;RXrjC^F^zY9ka>okVwcPrRl`Z**r>Id!A*m@s7SPu--fsO?@V; zqn=u1r#zGS6{JM{yCAk70FQLG(x3ey2E4__#Cj%f1@NAK0DNA}{5r7WbCP)C z2pgsC#WrHj?JJTnA7MS25JQi!t{tr?UHGrdUx`=>jx!B5+VvDh8xw_W%gf^NBW(2l zrfhT=fyNav_$V7V9=9q^KiKkQmsm>kvhyIYq+G*>{z5>CL5ht_wBiSiJH6*C#f90p zx7A!;AFZ-tDYPju;@D9ZJ+XyFqWxMes?P}oWDQp#Ju7yGc1)k3Bs?;v{&=D@pNc+j zvkrk_ScqH>+V^e}%G<1?k><$@V)xrDEeJ*I)WhVoDeaN=T5;iRmc(&8;uQsd|>kZi<`r>=Q}Z zFNt$&SR~6*=e?3Fj(o`sBKRfN#^|l9U`nXyVufJK$A1K-6|n`nN?sJ4pev<|P(TuX z5_O7!>F~`AU6FpNZkaSgw-ifC>RW%N#0{?C!*z28RO(9&T6u&O`VzRPqn$yD#r>tW zqIxk8Fu8VMJ za}kZHj!j3e$q~z)3Y)xOVBUl#R_Yr3gEthO@{c?2A6FaSOB?tA4A`4!(K(mhq=T zQ!goHQmjv70pi?L7AVGi&XVjrOYsFQh5eyt zDmG3!vc=%S(pdSSGQ&{mJVQcTaF2F0IjXwDkleBGFg!lfv??6O1b2Zebtv_q26Nzs zai`4j$IbDz2|W*%zFdB!U0v^y^}R>dnMc)|N7cH2#g!N-A>Ir%@9ET4_oB~W=}k6R zx`>i-dKX%jW#^Y#3vI4L6~BIkkM#Y1jrP`ZwB#dp@7C&q6FZ`czMLH1VILDotMFR z0Laa0EVL>Mz>mTyFoBvTd8pr4(Xawd>0IH>T zNP{`JDzhOZ;#5eV;~{NS!IY-jrVJ`eo_rkt^Zqxt|RE&VUs0N@*!*i2G-)PG);xfSyIgrytTA zyp+&bs*6fj-*IVQ#NcbD4L5i1COrlgPX1n z|MQf+^8h$&1y^SfAeO=$*)k{{H9rD0;QC74ktrW!znxt>ZF=q0yXrD#)Mw0CsZ&P5 zyK?ie0*D~GdXuXu3_)>sJJvx&-GZgHk!hOVo>=8d%|j?gnf(9dHWRrG*SLLp_^H&1 z$5SWPPMT7eIdf$p0(SI%N^x<)l>8FqZ_K5WeL9hR73;^rI=rOFnr;90^}@AVbn5YEP-^RrQ7ro*;HJFO|0i|mgyOsi^sSoM{ zCNaPchE4*r85#YA|0Djj$^Ggg``1VIuNu{04m)LzJ#LQO5mskTt~V#wnv==6o@*0R z<<$@xbw%gn-Ht%j@Ux-eTSlA;O*|f&xMNCPXovdH4z;1(o|daJ&W40-=`995IA}*= zT}X0$NHW^hP7SSNYa>(fcSK}rwV@$6Ty%c0Gqe<(TpyfVHLSrLuqkU@*47?%=Gc03 zY^^!gmGfA)?Y*BE^vIy66YE-csc+q-&YV_nPOCMiiLN7Ah+Xn)*AN)8#qU&LyW@fF z4p4 zghq<22eWnzstfH_AKIoBZG%Ha0cx~OO&uzQ;-y2HYNj@2{&mKPBa>N}eH?0MN8o3rt~Q{z z_FHXvYSNR__s-ol_dt4GyI%F}dO?0QYkW`U3K$`;gWL?){wNMT4E-W&Non(qOAO?f zr{0OTNq8^nPEPh1H>P#2lS?i<65g_@lhCz!&hd>o4t!WBX!=j z0P)zD>@o4uN%p>YZ!9cJjf3Lvm8H<`GaZ^z{t)X=u~FUu+CibD7yf5htoZvBi|s<& zOgdqhf+fSDM@lOIu5g>v8&39=Qrw#==4q!EbvkGza0oDrdjYj%5W$?sl*3CP#DT8rvikEhV zMTH`ZPA|Offn4BSX=SCDdxo`&@o?)p$>|I%I*s#-3*h`o@e`ZRun2Zm>^s8}yt0wm zXeKr`unZA-mL15rjb*e_0qX*`8tP1K>rHKI-M^$4xsA>aFo63_P*is9j6?d0?POx! zIUcMH!4-vvibG#RKqWx@@-+(&q=<*fy%H;5iqLbcM+C9{H7dS~b(AigV9h+o+Qi`i zl!rCdD|dBU5q2X{Y(2-WM;LY9ez$evicxI-hOLKiPMdGp1hz^PeapULYaHXwvvw?E zCeA&B>%bUrEgE7FYcH@^c1t{S0S>a)IzGF=dU?4o3^c|*Vb0PNZH%HdpA6rK9zU^h z>>+W_Pi%r89tKcQe@dqEviSNZ*2_vU)lBHJLV;BZqMpKH7;bZ2gu}PH5Hz-`1^yba z9L4uW;#&%>;-*CzjetU{V-c$rA+n|nC1nvh@?}{*c0Dt(ID|h(aD#Pj_2A0#RDoa zZv_H70tW(&48X)|Pg~1IG1CRG7Qyq;s3Bd%gg+sSfAe=Z!F|&a@n7}@Z?CaVoVx=t zEtuBATq5*Oh@Ce$R{hETW?6Xpk_A!HTI7Oa#GZ}s3CwFA!EUw%#*lF{i#gkwkk9b7SqngByJ@WO$<2~Gwo=`A_j*^LY z3b2rhj6t37bbwTZLhvSS|2P}fiUdu8Z;Zp!oja%58?7GQYEa%3gAF{KjTO@jydMPE zHye1A7kf=SXXY=>A>tI-rluQESmUu(3PIE9&q>Vt1i?gnK{0o_R}zfP5wmna2NFFYJ^=8pL!sH0>=kvYIjiQ|bb8J-v?>zC&VP|OOPIGJ~ zwof`d5slA#I1Ooz4MJw;BG~(IBoFKR8Sw2iO|vSc`LF>{D6Xi-%G60ZjvE6MQv67& zPOm(RE!$GG98QF@A~}4-Ay!7hwT$axdnE6{2bmnlBe^M%y(~_*=k1z|H1R`R5L23> zA{R8i#F=LjkrPd)3B>JQ6fLoQ7xo1?R%ReZd=kefX{Rq7GeAfZuQ%9;eV>#7O&7-L z#rR0xMI1`ufdOb0oW?SlikbAnQYJ+kF=$*KuMI>%2X1ET9nl^5qTnbxy!4#gkVeO$ zG`EYL19)Ozk7|;B(2$ep$a;~TAl8Y^dDvr8dd|hI0X)L~73R%Hpt+0_RXcx1g;&N3uc1P4v z;)HcC>xG!1bw*5>%A?^XQsGpd2nVMb6wwT8-I0Y)^3G5%o@##|Dfrt7y{#?pmktR|2(nslvgz#G* zMI(uid-1VFtRM|v#K2Ix!^+QKBk-(qACY_`SOrhu89pMZ0{ST6J;Z=YPJplZSp~05 zphlWfz!J?UoJR_wK`?p?7Qn67+&oJWL`lc`>{Tndo;@$Ntb*~27YA4I3^qgj1&JvE z^;oYwFGk+O+q3;*@jbjhynFs0p65#jA_M!fRK%`^k$qH5TFn#UJiR4uT5}&f7@l zD1sz$c^#j~mWlNBe0L9GhHU92oD?2g+8d=y%Ss=_+M?}nt6by;-ai9vuPdVL^nzQ8 z@a>6ByRz~=Hq)d*C`jStc@Rw=GGvGroVtvih!X+pd7N<`>W1xCiQH=5Ck^#TSx?TNk zD8*kPRqxW+Khn3INU2G4_(&r76tT|`lwms(R>OOi?)wPZ4g{wk@rFA1Zw&U-E<=G7 zTtAv5uAw9%o9f#C-^AXp``BMyI~Y- zcks?^t@vjLzc-8ovjUiNN;bIIC}D82Qf%AF?}iJyVY_%a`%F~t0;i(J@!T$c%g6V3 zNX()D6;Ee~ zZP#^7Vw+SN$53fxR{0(ue;}aOh2Qz6h3I&Yx8(zU9b*piCnarUX%Ldsx-UY-*Uxc- z2ziwsjVAU;hR7b61{$w{L>-kN!ie%J?<>*{!U4hB*SMePei)+jbHs?ld`5(4bUkD0 zuPhUe!?0c@h%<-z)YK)|N9u@&b0q5YQY=feQ8fuc_54B1d5v4xWXD^t@ny`H293u5 zZpY9!_zHbLl6LSNrJaX7{|^nxYM~*Tv#rfgkA{%Ee?YFAtBG<8^H4#Qe-KoPd2jP{ z-x6@{Y&9@#SL%f2AP;f8^)~;*&*=B?&VR_` zT?@PL{fI~P`B&?+6zLv9&>h-zTVcSozKb~@@isZ&d_i*N(9aWEk#Q#1x};u_CyFA{41dVY`B?l8!$*U8@30yD{t+xVIult z9tvTBt{-!M&Z7*D^iTL228j6JQ$8MyPsC^3EZKhsW|UW;VoFexK9Lhc3qP?^PQai9*C z)7Kp*>UbN@qQ%t{JT@NrXzUh#Se5Ozd~k!IEZ@5Hq@#O1zo3WpD)LL-4y^K^FL|ne z1hfdPlW?Ke%f93jb6jgDu=4*p&eY8r*rk~W(4F&)qB9@|E{+%E!!Zb4{K_kq!71zL z?@Vw#f=$w)#L%uPm`r0{RUt+ayTPJeC8v#rZ=3zk4Eu%kHbBee8p%^SpagV>^kK^4JrL|Q2=K_zh)6^j?A(48tgr?JBXqE1dI?Y;>*(C+V;L21$ zzS9g|P05ndY&su;KkI@vY`!gfi4BgfenI`Esg{d|h{gv;+3Aa(GL)i^zhXG-(iBqT zlj4Ezc*7L$MWXuX*ILtJr)ImbYZHo%qEMjzw#*fKxOQ&Jk56+lE9-CWxBZkS3cH02QGimVc$yK z*2O!5wwJEd&ST-*Bx0;5bVyr_#$i<&*B0ElmY7NSesVJwwW~>4m^U6l2PEc^^#p@X z5Ag$ou)GcT9T#8YL-}YJoooDiZX`?hh}iXCo;b_X9<2`8k;93{lR}QY84$ru5**rD-^UHzAEUCqe}Zh|D00rQj3?t zmskb(J?l|?(?T8@V#Qy)&ES7!)3wp@aL99WvuCUsyBI9_Ga1|GEy2RH*;B)3V27`aXT)TKpBcl^WY$cCL$7OXqN~_&{^TJGi2zzq-7n61Ndw_nEY0ixUKc0bo$Ed>TAQSP9sj-0ICZ@h z8aU0R5i3nnWZVp7iL}<`nb5o@)zuV0ylRsACU`hU4`klFSnbEXpA3SYiYuSOT@tgG z6aXKF4DgnA@%~*(1~3iwy$w`28f_n}r)2ijpr|GvNqLijsDk zkR04rzA2uIl7_QO;%b!CHR2|=L8mX8>f$hZDR$AfwUiQvO*wsvVKbFqMCYA1ptRHE zrmUPImb)U(q}AU6?QZo#d8l}U}d#K3L)A`-NCCm)>dlG z?i1g)l}1AZv|Eg{$K-o2_KvEobDU3>HnOO$kOMb&OyCJwz-h41{cGUS-yqhfNC}kpr4TrYJ(a9QvVyKu zrpLd70x4Lk0|2Ml5Z=r0D9yA#gL-6Ch_68GJTd2yF@3_7 ztOY7)9o>#SuwyItBfuG;q+(uo1RF5V<6!>J&_;06*oJE=PDz#8hXo-aIyayX$M7b( z^1IlaDz(WOfDMs~liiFa`vhNflJN&`2!~d|lVlQ)77U>|Og?AhnnRwZ(hUpmM&Ue! zSTVNqxCrbdB}9>TG#Kg7M9{_r3vChOI!Qf@_&q1g&DI^Hc!*s-(+MueQd}n!+>FLy zPz2O~Z=NX9Lvg}8$)qn13_27|WY@wu*Mx)Ic$S*ZSZy1!L_Vj#0UbQrwwx5*drL{f zC?rI;kZJ1B)TYjmJUov0orFRvaZEcp0qe7Is1zkm^p=7klK)+A>04=`r%OYS4^O{# zBbRi9i#PPOtJe5Ex13*`O@H;_2UNNy=jKicUeSe5B^+v?$~r~( zTc8YFR|ps(^=EH6#*C1iv5Sdb3qP&LruZx(`QdjnYm^fPcH82fDjK)UkhM-zZ9wSxz;TIpEe00ixQ(PGX zD?+^R8w>WUPNa{OMkKn{Xfn;D8}9;XmlHfh6ZT>8+*m1=eeU>ltaLXIriQAa6oj_5 z_QcHb(nw<~Z1$vhdc4%84^nda%3ykPUD0})I;e7Brk0h`_VacZ?}+$&JaBlz5j8;? z>laDF*XLRb3YrNkUaXiSrE|T%I66n_P1`m&V0r%Gxl$PH+D2zfz46`nxzdG*6*vsX zu}6S_0%;v`6*BmX)!EV;+FwH83f)J>yC~2vZP@efRLk36?3^bJf|kzBlUA7up{F3= z29a-(W^rGC@xBF?gJmKpN9vGZgqF2%62w@*)uBc69A+9J&;)v^Nh)S6>W2Wi)YwDLZevEwE0fxQ*;r8qMljE@vrKx#G;|Y? zhb@$5o(nC?qHIe^Np@~QG2TwrRuJL<%QgA(bPSH|SOg`a(k?{@HhwXxIZJ!RKFIA$ z=5R3d3NF^?PS zBJl*|LfPH;5^?Re$Zf2>Dvqv}LhO3wRV?H2wvKAmJ-Ku~Ux$TmYwAlZt5<%)mxwp( zr5}1U?ND7keP>gEGmogEq%e4W8*53(T3i_Yy$oUuH>Aoy1pUMxtEI$w(-0@Jhye@n z*iJ%YW7G*(F5+5Qqy=SLbVvaTV9tq}tHj^p?ln@Jk-j}%CRVPI!n&Y=g1WR~d5jee zC{qGK(V%0VmqCKvD}{)SYb3As!?c&VsEpKAxe@aSMh~CnLX|M>6Xe?@LW>#s#!aix z`OFHW=3(B|5zK|X3v?YBdjQLjBsU_~d{C6pFlV6*rm45h!=rFxD|+r zojh4O&Y{NZutB{R<@Mwu2BbY@$%FOm{9W%o-D~k4yA0bPPkr(d(a*9gcVkz`7p&qUg{5}+T(1ICs6h&c; zO!3QoQj~q9R%8seL|rAONu0#9N3i%7j!r2!MkOczKh`lS6eS|=F__gv4$JX^4+w(h zj0N9$*w-r_rkdu`7J0vT>wYN;wwccRrI=t^#$D4v(`(^dCB+zzAv5X?m-QnCY#KvajXV-QP1kcfc(UQHjwMj>d8MPO@k+a*!D6GfNrim}{c1my@m z#TvQTk=6JpBSwFxfc~Zet~z$*FU+LBTY!IwpvhIXvsmREkwNesg6|Q`$8yn#eSw%6 zbr`RSYqzEkVIJNHZ}R7R$jhaD4#kRYVG-@VksS+8L@)*cEsFHL@pYt6x07=4MFD~+ z?9QK9IRG(?=W7>ZHXw$(Sh_u;;C*7{8wBSO;Oz?KGJ>lJt|6fF|0=yM4upi2>4>c8tku)~73CFJd9jR+0i!lu%!zBZJ zEP5Lp>nK_;`AHM6>VgdsSDJ&X?R^cQS9Hz5)hLqzKFVtbu7(C+xn|(1_+%sO(5?#8 zCMg+`v`tb3BqKM$zUr!@e3KN&>{lbrhL9_|X5ebH-Vg*|xHbh>%>jm?>?$-c6uz^# z4aP?s@cWC~-~h?c13r~$27LSsF;{dN=;}t>Hpz75U2Pj+=zwiC0aue8A683Wc(ZrJ zU8fo?tfGY z=G@CD9(_!j41aL!@?+98&WvKj&3+I4Yiy9^$>qdNELlJHzT$^+8Ej R>E&-ti@@SNVwW`F{{ZA#2L}KE delta 21619 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 Iw=M?$KayN6`Tzg` diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 8e2fb49..619d193 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -7,7 +7,7 @@ import logging from pathlib import Path from dataclasses import dataclass -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Callable, Dict, List, Optional, Tuple import numpy as np from PySide6 import QtCore, QtWidgets, QtGui @@ -857,7 +857,7 @@ def _build_ui(self) -> None: w.setMinimumWidth(60) w.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - self.btn_compute = QtWidgets.QPushButton("Post-process (compute PSTH)") + self.btn_compute = QtWidgets.QPushButton("Postprocessing (compute PSTH)") self.btn_compute.setProperty("class", "compactPrimarySmall") self.btn_compute.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) self.btn_update = QtWidgets.QPushButton("Update Preview") @@ -1223,6 +1223,10 @@ def _build_ui(self) -> None: self.act_load_group = self.menu_action_load.addAction("Load processed files (group)") self.menu_action_load.addSeparator() self.act_load_behavior = self.menu_action_load.addAction("Load behavior CSV/XLSX") + self.menu_action_recent = self.menu_action_load.addMenu("Load recent") + self.menu_recent_processed = self.menu_action_recent.addMenu("Processed files") + self.menu_recent_behavior = self.menu_action_recent.addMenu("Behavior files") + self.menu_action_recent.aboutToShow.connect(self._refresh_recent_postprocessing_menus) self.act_refresh_dio = self.menu_action_load.addAction("Refresh A/D channel list") self.btn_action_load.setMenu(self.menu_action_load) @@ -1468,6 +1472,10 @@ def _build_ui(self) -> None: spatial_dialog_layout = QtWidgets.QVBoxLayout(self.spatial_plot_dialog) spatial_dialog_layout.setContentsMargins(8, 8, 8, 8) spatial_dialog_layout.setSpacing(8) + self.spatial_plot_content = QtWidgets.QWidget(self.spatial_plot_dialog) + spatial_content_layout = QtWidgets.QVBoxLayout(self.spatial_plot_content) + spatial_content_layout.setContentsMargins(0, 0, 0, 0) + spatial_content_layout.setSpacing(8) spatial_top_row = QtWidgets.QHBoxLayout() spatial_top_row.setContentsMargins(0, 0, 0, 0) spatial_top_row.setSpacing(8) @@ -1483,12 +1491,20 @@ def _build_ui(self) -> None: spatial_velocity_row.setSpacing(8) spatial_velocity_row.addWidget(self.plot_spatial_velocity, stretch=1) spatial_velocity_row.addWidget(self.spatial_lut_velocity, stretch=0) - spatial_dialog_layout.addLayout(spatial_top_row, stretch=1) - spatial_dialog_layout.addLayout(spatial_bottom_row, stretch=1) - spatial_dialog_layout.addLayout(spatial_velocity_row, stretch=1) + spatial_content_layout.addLayout(spatial_top_row, stretch=1) + spatial_content_layout.addLayout(spatial_bottom_row, stretch=1) + spatial_content_layout.addLayout(spatial_velocity_row, stretch=1) self.lbl_spatial_cursor_hint = QtWidgets.QLabel("Use the right-side color cursors to set min/max display range for each map.") self.lbl_spatial_cursor_hint.setProperty("class", "hint") - spatial_dialog_layout.addWidget(self.lbl_spatial_cursor_hint) + spatial_content_layout.addWidget(self.lbl_spatial_cursor_hint) + spatial_dialog_layout.addWidget(self.spatial_plot_content, stretch=1) + self.btn_export_spatial_img = QtWidgets.QPushButton("Export image") + self.btn_export_spatial_img.setProperty("class", "compactSmall") + spatial_export_row = QtWidgets.QHBoxLayout() + spatial_export_row.setContentsMargins(0, 0, 0, 0) + spatial_export_row.addStretch(1) + spatial_export_row.addWidget(self.btn_export_spatial_img) + spatial_dialog_layout.addLayout(spatial_export_row) self.spatial_plot_dialog.hide() # Keep a visible minimum plot footprint even with aggressive docking/resizing. @@ -1539,6 +1555,7 @@ def _build_ui(self) -> None: self.btn_export_behavior_metrics.clicked.connect(self._export_behavior_metrics_csv) self.btn_export_behavior_events.clicked.connect(self._export_behavior_events_csv) self.btn_compute_spatial.clicked.connect(self._on_compute_spatial_clicked) + self.btn_export_spatial_img.clicked.connect(self._export_spatial_figure) self.btn_export.clicked.connect(self._export_results) self.btn_export_img.clicked.connect(self._export_images) self.btn_style.clicked.connect(self._open_style_dialog) @@ -2090,6 +2107,115 @@ def receive_dio_data(self, path: str, dio_name: str, t: Optional[np.ndarray], x: return self._dio_cache[(path, dio_name)] = (np.asarray(t, float), np.asarray(x, float)) + def _load_recent_paths(self, key: str) -> List[str]: + raw = self._settings.value(key, "[]", type=str) + try: + data = json.loads(raw) if raw else [] + except Exception: + data = [] + out: List[str] = [] + if isinstance(data, list): + for item in data: + p = str(item or "").strip() + if p: + out.append(p) + return out + + def _save_recent_paths(self, key: str, paths: List[str]) -> None: + try: + self._settings.setValue(key, json.dumps(paths)) + except Exception: + pass + + def _push_recent_paths(self, key: str, paths: List[str], max_items: int = 15) -> None: + if not paths: + return + existing = self._load_recent_paths(key) + merged: List[str] = [] + for p in paths: + sp = str(p or "").strip() + if not sp: + continue + if sp in merged: + continue + merged.append(sp) + for p in existing: + if p not in merged: + merged.append(p) + self._save_recent_paths(key, merged[:max_items]) + + def _prune_recent_paths(self, key: str) -> None: + recent = self._load_recent_paths(key) + kept = [p for p in recent if os.path.isfile(p)] + self._save_recent_paths(key, kept) + + def _refresh_recent_postprocessing_menus(self) -> None: + self._refresh_recent_menu( + self.menu_recent_processed, + key="postprocess_recent_processed_paths", + loader=self._load_recent_processed_path, + ) + self._refresh_recent_menu( + self.menu_recent_behavior, + key="postprocess_recent_behavior_paths", + loader=self._load_recent_behavior_path, + ) + + def _refresh_recent_menu( + self, + menu: QtWidgets.QMenu, + key: str, + loader: Callable[[str], None], + ) -> None: + if menu is None: + return + menu.clear() + recent = self._load_recent_paths(key) + if not recent: + act_empty = menu.addAction("(No recent files)") + act_empty.setEnabled(False) + return + + missing: List[str] = [] + for path in recent: + label = os.path.basename(path) or path + if not os.path.isfile(path): + label = f"{label} (missing)" + act = menu.addAction(label) + act.setToolTip(path) + act.setEnabled(os.path.isfile(path)) + if os.path.isfile(path): + act.triggered.connect(lambda _checked=False, p=path: loader(p)) + else: + missing.append(path) + menu.addSeparator() + act_clear = menu.addAction("Clear recent") + act_clear.triggered.connect(lambda: self._save_recent_paths(key, [])) + if missing: + act_prune = menu.addAction("Remove missing") + act_prune.triggered.connect(lambda: self._prune_recent_paths(key)) + + def _load_recent_processed_path(self, path: str) -> None: + if not path or not os.path.isfile(path): + QtWidgets.QMessageBox.warning(self, "Load recent", "Selected recent processed file is missing.") + return + self._load_processed_paths([path], replace=True) + try: + self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) + except Exception: + pass + + def _load_recent_behavior_path(self, path: str) -> None: + if not path or not os.path.isfile(path): + QtWidgets.QMessageBox.warning(self, "Load recent", "Selected recent behavior file is missing.") + return + self._load_behavior_paths([path], replace=True) + self._refresh_behavior_list() + try: + self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) + except Exception: + pass + def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: if replace: self._behavior_sources.clear() @@ -2136,6 +2262,7 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: continue mode_label = "timestamps" if parse_mode == _BEHAVIOR_PARSE_TIMESTAMPS else "binary" self.lbl_beh.setText(f"{len(self._behavior_sources)} file(s) loaded [{mode_label}]") + self._push_recent_paths("postprocess_recent_behavior_paths", paths) self._update_data_availability() self._update_status_strip() @@ -2158,6 +2285,7 @@ def _load_processed_paths(self, paths: List[str], replace: bool) -> None: else: self._processed.extend(loaded) self.lbl_group.setText(f"{len(self._processed)} file(s) loaded") + self._push_recent_paths("postprocess_recent_processed_paths", paths) self._update_file_lists() self._set_resample_from_processed() self._compute_psth() @@ -2337,6 +2465,7 @@ def _update_data_availability(self) -> None: self.cb_spatial_log, self.cb_spatial_invert_y, self.btn_compute_spatial, + self.btn_export_spatial_img, ): w.setEnabled(spatial_ready) self.btn_spatial_help.setEnabled(True) @@ -2715,19 +2844,29 @@ def _guess_spatial_column(self, columns: List[str], axis: str) -> Optional[str]: if not columns: return None axis_l = axis.lower() - # First choice: exact column labels "X" / "Y" (case-insensitive). - for col in columns: - name = str(col).strip().lower() - if name == axis_l: - return col - # Second choice: explicit EthoVision center labels. + def _norm(value: str) -> str: + s = str(value).strip().lower() + s = re.sub(r"[\s_\-:/\(\)\[\]]+", " ", s) + return re.sub(r"\s+", " ", s).strip() + + # First choice: explicit EthoVision center labels (set as default). preferred_center = { "x": ["x center", "x_center", "x-center", "center x", "center_x", "center-x"], "y": ["y center", "y_center", "y-center", "center y", "center_y", "center-y"], }.get(axis_l, []) + preferred_center_norm = {_norm(v) for v in preferred_center} for col in columns: - name = str(col).strip().lower() - if name in preferred_center: + name_norm = _norm(str(col)) + if name_norm in preferred_center_norm: + return col + # Fallback center match for labels like "Center X (cm)" / "X center px". + for col in columns: + name_norm = _norm(str(col)) + if "center" in name_norm and axis_l in name_norm: + return col + # Second choice: exact column labels "X" / "Y" (case-insensitive). + for col in columns: + if _norm(str(col)) == axis_l: return col # Third choice: labels starting with X/Y token (e.g. "X nose", "Y_center"). token_re = re.compile(rf"^{re.escape(axis_l)}(?:$|[\s_\-:/\(\[])") @@ -3010,7 +3149,7 @@ def _show_spatial_heatmap_panel(self) -> None: def _on_compute_spatial_clicked(self) -> None: self._compute_spatial_heatmap(show_panel=True) - def _compute_spatial_heatmap(self, show_panel: bool = False) -> None: + def _compute_spatial_heatmap(self, *_args: object, show_panel: bool = False) -> None: if not hasattr(self, "plot_spatial_occupancy"): return if show_panel: @@ -4579,7 +4718,7 @@ def _compute_psth(self) -> None: self._update_status_strip() self._save_settings() except Exception as e: - self.statusUpdate.emit(f"Post-processing error: {e}", 5000) + self.statusUpdate.emit(f"Postprocessing error: {e}", 5000) self._update_status_strip() def _render_heatmap(self, mat: np.ndarray, tvec: np.ndarray) -> None: @@ -5216,6 +5355,97 @@ def _remember_export_dir(self, out_dir: str) -> None: except Exception: pass + def _default_export_prefix(self) -> str: + prefix = "postprocess" + if self._processed: + prefix = os.path.splitext(os.path.basename(self._processed[0].path))[0] + beh_suffix = self._behavior_suffix() + if beh_suffix: + prefix = f"{prefix}_{beh_suffix}" + return prefix + + def _render_widget_image( + self, + widget: QtWidgets.QWidget, + transparent: bool = True, + ) -> Optional[QtGui.QImage]: + if widget is None: + return None + size = widget.size() + if not size.isValid() or size.width() <= 0 or size.height() <= 0: + size = widget.sizeHint() + if not size.isValid() or size.width() <= 0 or size.height() <= 0: + size = QtCore.QSize(1280, 720) + dpr = 1.0 + try: + dpr = max(1.0, float(widget.devicePixelRatioF())) + except Exception: + dpr = 1.0 + image = QtGui.QImage( + max(1, int(round(size.width() * dpr))), + max(1, int(round(size.height() * dpr))), + QtGui.QImage.Format.Format_ARGB32, + ) + image.setDevicePixelRatio(dpr) + if transparent: + image.fill(QtCore.Qt.GlobalColor.transparent) + else: + image.fill(QtGui.QColor(255, 255, 255)) + painter = QtGui.QPainter(image) + try: + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) + painter.setRenderHint(QtGui.QPainter.RenderHint.TextAntialiasing, True) + # Keep alpha background while rendering children. + widget.render( + painter, + QtCore.QPoint(), + QtGui.QRegion(), + QtWidgets.QWidget.RenderFlag.DrawChildren, + ) + finally: + painter.end() + return image + + def _write_widget_pdf(self, widget: QtWidgets.QWidget, path: str) -> bool: + if widget is None: + return False + size = widget.size() + if not size.isValid() or size.width() <= 0 or size.height() <= 0: + size = widget.sizeHint() + if not size.isValid() or size.width() <= 0 or size.height() <= 0: + size = QtCore.QSize(1280, 720) + writer = QtGui.QPdfWriter(path) + writer.setResolution(300) + width_px = float(size.width()) + height_px = float(size.height()) + width_pt = max(1.0, width_px * 72.0 / 96.0) + height_pt = max(1.0, height_px * 72.0 / 96.0) + writer.setPageSize(QtGui.QPageSize(QtCore.QSizeF(width_pt, height_pt), QtGui.QPageSize.Unit.Point)) + writer.setPageMargins(QtCore.QMarginsF(0.0, 0.0, 0.0, 0.0)) + painter = QtGui.QPainter(writer) + try: + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) + painter.setRenderHint(QtGui.QPainter.RenderHint.TextAntialiasing, True) + widget.render( + painter, + QtCore.QPoint(), + QtGui.QRegion(), + QtWidgets.QWidget.RenderFlag.DrawChildren, + ) + finally: + painter.end() + return True + + def _export_widget_png_pdf(self, widget: QtWidgets.QWidget, base_path: str, transparent: bool = True) -> Tuple[bool, Optional[str], Optional[str]]: + image = self._render_widget_image(widget, transparent=transparent) + if image is None or image.isNull(): + return False, None, None + png_path = f"{base_path}.png" + pdf_path = f"{base_path}.pdf" + ok_png = bool(image.save(png_path, "PNG")) + ok_pdf = self._write_widget_pdf(widget, pdf_path) + return (ok_png and ok_pdf), (png_path if ok_png else None), (pdf_path if ok_pdf else None) + def _export_results(self) -> None: if self._last_mat is None or self._last_tvec is None: return @@ -5228,21 +5458,36 @@ def _export_results(self) -> None: if not out_dir: return self._remember_export_dir(out_dir) - prefix = "postprocess" - if self._processed: - prefix = os.path.splitext(os.path.basename(self._processed[0].path))[0] - beh_suffix = self._behavior_suffix() - if beh_suffix: - prefix = f"{prefix}_{beh_suffix}" + prefix = self._default_export_prefix() if choices.get("heatmap"): - np.savetxt(os.path.join(out_dir, f"{prefix}_heatmap.csv"), self._last_mat, delimiter=",") - np.savetxt(os.path.join(out_dir, f"{prefix}_heatmap_tvec.csv"), self._last_tvec, delimiter=",") + mat = np.asarray(self._last_mat, float) + if mat.ndim == 1: + mat = mat[np.newaxis, :] + time = np.asarray(self._last_tvec, float) + n_time = min(time.size, mat.shape[1]) + time = time[:n_time] + mat = mat[:, :n_time] + arr = np.column_stack([time, mat.T]) + header_cols = ["time"] + [f"trial_{i + 1}" for i in range(mat.shape[0])] + np.savetxt( + os.path.join(out_dir, f"{prefix}_heatmap.csv"), + arr, + delimiter=",", + header=",".join(header_cols), + comments="", + ) if choices.get("avg"): avg = np.nanmean(self._last_mat, axis=0) sem = np.nanstd(self._last_mat, axis=0) / np.sqrt(max(1, np.sum(np.any(np.isfinite(self._last_mat), axis=1)))) arr = np.vstack([self._last_tvec, avg, sem]).T - np.savetxt(os.path.join(out_dir, f"{prefix}_avg_psth.csv"), arr, delimiter=",", header="time,avg,sem", comments="") + np.savetxt( + os.path.join(out_dir, f"{prefix}_avg_psth.csv"), + arr, + delimiter=",", + header="time,average_psth,sem", + comments="", + ) if choices.get("events"): event_path = os.path.join(out_dir, f"{prefix}_events.csv") if self._last_event_rows: @@ -5294,40 +5539,60 @@ def _behavior_suffix(self) -> str: return cleaned def _export_images(self) -> None: + if not hasattr(self, "_right_panel"): + return start_dir = self._export_start_dir() - out_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "Select export folder", start_dir) - if not out_dir: + prefix = self._default_export_prefix() + default_path = os.path.join(start_dir, f"{prefix}_psth_figure.png") + path, _ = QtWidgets.QFileDialog.getSaveFileName( + self, + "Export PSTH figure (PNG + PDF)", + default_path, + "PNG image (*.png);;All files (*.*)", + ) + if not path: return - self._remember_export_dir(out_dir) - prefix = "postprocess" - if self._processed: - prefix = os.path.splitext(os.path.basename(self._processed[0].path))[0] + if not os.path.splitext(path)[1]: + path = f"{path}.png" + base_path, _ = os.path.splitext(path) + out_dir = os.path.dirname(base_path) + if out_dir: + self._remember_export_dir(out_dir) + ok, png_path, pdf_path = self._export_widget_png_pdf(self._right_panel, base_path, transparent=True) + if ok: + self.statusUpdate.emit(f"Exported PSTH figure: {os.path.basename(png_path or '')}, {os.path.basename(pdf_path or '')}", 5000) + else: + QtWidgets.QMessageBox.warning(self, "Export failed", "Could not export PSTH figure as PNG/PDF.") - targets = { - "overview": self._right_panel, - "trace": self.plot_trace, - "heatmap": self.plot_heat, - "duration": self.plot_dur, - "avg": self.plot_avg, - "metrics": self.plot_metrics, - "global": self.plot_global, - "peaks_amp": self.plot_peak_amp, - "peaks_ibi": self.plot_peak_ibi, - "peaks_rate": self.plot_peak_rate, - "behavior_raster": self.plot_behavior_raster, - "behavior_rate": self.plot_behavior_rate, - "behavior_duration": self.plot_behavior_duration, - "behavior_starts": self.plot_behavior_starts, - "spatial_occupancy": self.plot_spatial_occupancy, - "spatial_activity": self.plot_spatial_activity, - "spatial_velocity": self.plot_spatial_velocity, - } - for name, widget in targets.items(): - try: - pix = widget.grab() - pix.save(os.path.join(out_dir, f"{prefix}_{name}.png")) - except Exception: - pass + def _export_spatial_figure(self) -> None: + if self._last_spatial_occupancy_map is None or self._last_spatial_extent is None: + QtWidgets.QMessageBox.information(self, "Spatial heatmap", "Compute spatial heatmap first.") + return + target = getattr(self, "spatial_plot_content", None) or getattr(self, "spatial_plot_dialog", None) + if target is None: + return + start_dir = self._export_start_dir() + prefix = self._default_export_prefix() + default_path = os.path.join(start_dir, f"{prefix}_spatial_figure.png") + path, _ = QtWidgets.QFileDialog.getSaveFileName( + self, + "Export spatial figure (PNG + PDF)", + default_path, + "PNG image (*.png);;All files (*.*)", + ) + if not path: + return + if not os.path.splitext(path)[1]: + path = f"{path}.png" + base_path, _ = os.path.splitext(path) + out_dir = os.path.dirname(base_path) + if out_dir: + self._remember_export_dir(out_dir) + ok, png_path, pdf_path = self._export_widget_png_pdf(target, base_path, transparent=True) + if ok: + self.statusUpdate.emit(f"Exported spatial figure: {os.path.basename(png_path or '')}, {os.path.basename(pdf_path or '')}", 5000) + else: + QtWidgets.QMessageBox.warning(self, "Export failed", "Could not export spatial figure as PNG/PDF.") def hideEvent(self, event: QtGui.QHideEvent) -> None: super().hideEvent(event) diff --git a/pyBer/main.py b/pyBer/main.py index 21a5360..4da7250 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -394,6 +394,8 @@ def _build_ui(self) -> None: self.menu_workflow_load = QtWidgets.QMenu(self.btn_workflow_load) self.act_open_file = self.menu_workflow_load.addAction("Open File...") self.act_add_folder = self.menu_workflow_load.addAction("Add Folder...") + self.menu_workflow_load_recent = self.menu_workflow_load.addMenu("Load Recent") + self.menu_workflow_load_recent.aboutToShow.connect(self._refresh_recent_preprocessing_menu) self.menu_workflow_load.addSeparator() self.act_focus_data = self.menu_workflow_load.addAction("Focus Data Browser") self.btn_workflow_load.setMenu(self.menu_workflow_load) @@ -474,7 +476,7 @@ def _build_ui(self) -> None: self.post_tab.set_force_fixed_default_layout(self._force_fixed_dock_layouts) except Exception: pass - self.tabs.addTab(self.post_tab, "Post Processing") + self.tabs.addTab(self.post_tab, "Postprocessing") self.post_tab.statusUpdate.connect(self._show_status_message) # Wiring - file panel @@ -1795,6 +1797,78 @@ def _save_splitter_sizes(self, *_args) -> None: # ---------------- File loading ---------------- + def _load_recent_preprocessing_files(self) -> List[str]: + raw = self.settings.value("recent_pre_files", "[]", type=str) + try: + data = json.loads(raw) if raw else [] + except Exception: + data = [] + out: List[str] = [] + if isinstance(data, list): + for item in data: + p = str(item or "").strip() + if p: + out.append(p) + return out + + def _save_recent_preprocessing_files(self, paths: List[str]) -> None: + try: + self.settings.setValue("recent_pre_files", json.dumps(paths)) + except Exception: + pass + + def _push_recent_preprocessing_files(self, paths: List[str], max_items: int = 15) -> None: + if not paths: + return + existing = self._load_recent_preprocessing_files() + merged: List[str] = [] + for p in paths: + sp = str(p or "").strip() + if not sp: + continue + if sp in merged: + continue + merged.append(sp) + for p in existing: + if p not in merged: + merged.append(p) + self._save_recent_preprocessing_files(merged[:max_items]) + + def _refresh_recent_preprocessing_menu(self) -> None: + if not hasattr(self, "menu_workflow_load_recent"): + return + menu = self.menu_workflow_load_recent + menu.clear() + recent = self._load_recent_preprocessing_files() + if not recent: + act_empty = menu.addAction("(No recent files)") + act_empty.setEnabled(False) + return + + missing: List[str] = [] + for path in recent: + label = os.path.basename(path) or path + if not os.path.isfile(path): + label = f"{label} (missing)" + act = menu.addAction(label) + act.setToolTip(path) + act.setEnabled(os.path.isfile(path)) + if os.path.isfile(path): + act.triggered.connect(lambda _checked=False, p=path: self._add_files([p])) + else: + missing.append(path) + menu.addSeparator() + act_clear = menu.addAction("Clear recent") + act_clear.triggered.connect(lambda: self._save_recent_preprocessing_files([])) + if missing: + act_prune = menu.addAction("Remove missing") + act_prune.triggered.connect(self._prune_recent_preprocessing_files) + + def _prune_recent_preprocessing_files(self) -> None: + recent = self._load_recent_preprocessing_files() + kept = [p for p in recent if os.path.isfile(p)] + self._save_recent_preprocessing_files(kept) + def _open_files_dialog(self) -> None: start_dir = self.file_panel.current_dir_hint() or self.settings.value("last_open_dir", "", type=str) or os.getcwd() paths, _ = QtWidgets.QFileDialog.getOpenFileNames( @@ -1807,6 +1881,7 @@ def _open_files_dialog(self) -> None: return self.settings.setValue("last_open_dir", os.path.dirname(paths[0])) + self._push_recent_preprocessing_files(paths) self._add_files(paths) def _open_folder_dialog(self) -> None: @@ -1821,6 +1896,7 @@ def _open_folder_dialog(self) -> None: if fn.lower().endswith((".doric", ".h5", ".hdf5")): paths.append(os.path.join(folder, fn)) paths.sort() + self._push_recent_preprocessing_files(paths) self._add_files(paths) def _add_files(self, paths: List[str]) -> None: @@ -1835,6 +1911,8 @@ def _add_files(self, paths: List[str]) -> None: except Exception as e: QtWidgets.QMessageBox.critical(self, "Load error", f"Failed to load:\n{p}\n\n{e}") + self._push_recent_preprocessing_files(paths) + # set current selection -> triggers preview self._on_file_selection_changed() From e30561af8c89a47d0b21615b0e2b16f7960dbdb8 Mon Sep 17 00:00:00 2001 From: andrianj Date: Fri, 27 Feb 2026 09:09:48 +0100 Subject: [PATCH 12/28] windows adjustments --- .github/workflows/build-and-publish.yml | 21 +++ panel_layout.json | 61 ++++---- .../gui_postprocessing.cpython-311.pyc | Bin 417074 -> 420576 bytes .../gui_postprocessing.cpython-38.pyc | Bin 154391 -> 160817 bytes .../gui_preprocessing.cpython-311.pyc | Bin 174060 -> 210395 bytes .../gui_preprocessing.cpython-38.pyc | Bin 87552 -> 89059 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 243771 -> 252264 bytes pyBer/gui_postprocessing.py | 113 ++++++++++++++- pyBer/gui_preprocessing.py | 49 ++++++- pyBer/main.py | 132 ++++++++++++++++-- 10 files changed, 335 insertions(+), 41 deletions(-) diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index 8bc5565..b81f851 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -37,6 +37,25 @@ jobs: python -m pip --version python -c "import os, sys; print('CONDA_PREFIX=', os.environ.get('CONDA_PREFIX')); print('PYTHON=', sys.executable)" + - name: Build Windows icon from assets + run: | + python -m pip install --upgrade pillow + mkdir -p build + python - <<'PY' + from pathlib import Path + from PIL import Image + + src = Path("assets/pyBer_logo_big.png") + dst = Path("build/pyBer_logo_big.ico") + if not src.exists(): + raise SystemExit(f"Missing icon source: {src}") + + img = Image.open(src).convert("RGBA") + sizes = [(256, 256), (128, 128), (64, 64), (48, 48), (32, 32), (16, 16)] + img.save(dst, format="ICO", sizes=sizes) + print(f"Wrote {dst}") + PY + - name: Build with PyInstaller (last known good method) run: | DLLS=( @@ -71,6 +90,8 @@ jobs: --clean \ --onefile \ --windowed \ + --icon build/pyBer_logo_big.ico \ + --add-data "assets;assets" \ --name pyBer \ "${ADD_ARGS[@]}" \ pyBer/main.py diff --git a/panel_layout.json b/panel_layout.json index 6cfc522..5634acd 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -3,60 +3,71 @@ "pre": { "pre_data_panel_visible": false, "pre_splitter_sizes": [ - 0, - 1413 + 317, + 317 ], "pre_main_dock_state": "", - "tab_groups": [], + "tab_groups": [ + { + "members": [ + "pre.artifact.dock", + "pre.artifacts.dock", + "pre.baseline.dock", + "pre.filtering.dock", + "pre.output.dock" + ], + "active": "pre.artifact.dock" + } + ], "sections": { "artifacts": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" }, "filtering": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" }, "baseline": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" }, "output": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" }, "qc": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAACOQAAB38AAAMYAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAACOQAAB38AAAMY" + "geometry": "AdnQywADAAAAAAOiAAAENQAABYAAAAXbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAENQAABYAAAAXb" }, "export": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADGwAAB38AAAOTAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAADGwAAB38AAAOT" + "geometry": "AdnQywADAAAAAAOiAAAF3gAABYAAAAbDAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAF3gAABYAAAAbD" }, "config": { - "visible": false, + "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADlgAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAAGxgAABYAAAAcKAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGxgAABYAAAAcK" } }, "artifact": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAAIU" + "geometry": "AdnQywADAAAAAAOiAAAAAAAABYAAAAQQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAAAAAABYAAAAQQ" } }, "post": { @@ -66,37 +77,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" + "geometry": "AdnQywADAAAAAAOiAAAAAAAABYAAAAJ0AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAAAAAABYAAAAJ0" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAANUAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAWhAAAAAAAAB38AAANU" + "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" + "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///6t////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///6t////gv///4L" + "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADeQAAB38AAAPaAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADeQAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAACmQAABYAAAAL6AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAACmQAABYAAAAL6" } } } diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index 47d7480c919ffbac90df474794faab321e93ad07..cbedc198fabba96495b7904f5c75c37df25cc92c 100644 GIT binary patch delta 37593 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 BV1xhw delta 34850 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 diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-38.pyc index e2d34dc9e5fff79f92032ebb79382d8c57f63882..a4e8b3a52347e68789ed4a8acff67106a4ceb098 100644 GIT binary patch delta 53983 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 U49|YG-rQhcsW%zvE#Zp)21?GNO#lD@ delta 48691 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 mP|~>>R>F@)2CwA+#}bL^O&cH- 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 diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc index 7fa0a82e2aa42ea62daebe56b6931783939e5fe1..cc89f53739d26642d9f5cc6c4d6205da1ce9811f 100644 GIT binary patch delta 24458 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 delta 22924 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 delta 31638 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 J_qViR{~t$JTWJ6Q diff --git a/pyBer/gui_postprocessing.py b/pyBer/gui_postprocessing.py index 619d193..b55cacc 100644 --- a/pyBer/gui_postprocessing.py +++ b/pyBer/gui_postprocessing.py @@ -478,6 +478,11 @@ def __init__(self, parent=None) -> None: self._section_scroll_hosts: Dict[str, QtWidgets.QScrollArea] = {} self._section_buttons: Dict[str, QtWidgets.QPushButton] = {} self._section_popup_initialized: set[str] = set() + self._is_restoring_settings: bool = True + self._settings_save_timer = QtCore.QTimer(self) + self._settings_save_timer.setSingleShot(True) + self._settings_save_timer.setInterval(250) + self._settings_save_timer.timeout.connect(self._save_settings) self._is_restoring_panel_layout: bool = False self._panel_layout_persistence_ready: bool = False self._last_opened_section: Optional[str] = None @@ -490,8 +495,11 @@ def __init__(self, parent=None) -> None: self._app_closing: bool = False self._post_snapshot_applied: bool = False self._force_fixed_default_layout: bool = False - self._build_ui() - self._restore_settings() + try: + self._build_ui() + self._restore_settings() + finally: + self._is_restoring_settings = False self._panel_layout_persistence_ready = True app = QtWidgets.QApplication.instance() if app is not None: @@ -1567,7 +1575,7 @@ def _build_ui(self) -> None: self.btn_hide_filters.toggled.connect(self._toggle_filter_panel) self.btn_hide_metrics.toggled.connect(self._toggle_metrics_panel) self.combo_view_layout.currentIndexChanged.connect(self._apply_view_layout) - self.combo_view_layout.currentIndexChanged.connect(lambda *_: self._save_settings()) + self.combo_view_layout.currentIndexChanged.connect(self._queue_settings_save) self.cb_peak_overlay.toggled.connect(self._refresh_signal_overlay) self.combo_signal_source.currentIndexChanged.connect(self._refresh_signal_file_combo) self.combo_signal_scope.currentIndexChanged.connect(self._refresh_signal_file_combo) @@ -1628,6 +1636,7 @@ def _build_ui(self) -> None: self.cb_spatial_invert_y.toggled.connect(self._compute_spatial_heatmap) self.combo_spatial_activity_mode.currentIndexChanged.connect(self._compute_spatial_heatmap) self.btn_spatial_help.clicked.connect(self._show_spatial_help) + self._wire_settings_autosave() self._update_align_ui() self._update_event_filter_enabled() @@ -2509,7 +2518,7 @@ def _update_event_filter_enabled(self) -> None: enabled = self.cb_filter_events.isChecked() for w in (self.spin_event_start, self.spin_event_end, self.spin_group_window, self.spin_dur_min, self.spin_dur_max): w.setEnabled(enabled) - self._save_settings() + self._queue_settings_save() def _update_metrics_enabled(self) -> None: enabled = self.cb_metrics.isChecked() @@ -2522,7 +2531,7 @@ def _update_metrics_enabled(self) -> None: ): w.setEnabled(enabled) self._update_metric_regions() - self._save_settings() + self._queue_settings_save() def _update_global_metrics_enabled(self) -> None: enabled = self.cb_global_metrics.isChecked() @@ -2536,7 +2545,93 @@ def _update_global_metrics_enabled(self) -> None: w.setEnabled(enabled) self._render_global_metrics() self._apply_view_layout() - self._save_settings() + self._queue_settings_save() + + def _queue_settings_save(self, *_args: object) -> None: + if self._is_restoring_settings: + return + timer = getattr(self, "_settings_save_timer", None) + if timer is None: + self._save_settings() + return + timer.start() + + def _wire_settings_autosave(self) -> None: + for combo in ( + self.combo_align, + self.combo_dio, + self.combo_dio_polarity, + self.combo_dio_align, + self.combo_behavior_file_type, + self.combo_behavior_name, + self.combo_behavior_align, + self.combo_behavior_from, + self.combo_behavior_to, + self.combo_metric, + self.combo_signal_source, + self.combo_signal_scope, + self.combo_signal_file, + self.combo_signal_method, + self.combo_peak_baseline, + self.combo_behavior_analysis, + self.combo_spatial_x, + self.combo_spatial_y, + self.combo_spatial_weight, + self.combo_spatial_activity_mode, + ): + combo.currentIndexChanged.connect(self._queue_settings_save) + + for spin in ( + self.spin_transition_gap, + self.spin_pre, + self.spin_post, + self.spin_b0, + self.spin_b1, + self.spin_resample, + self.spin_smooth, + self.spin_event_start, + self.spin_event_end, + self.spin_group_window, + self.spin_dur_min, + self.spin_dur_max, + self.spin_metric_pre0, + self.spin_metric_pre1, + self.spin_metric_post0, + self.spin_metric_post1, + self.spin_global_start, + self.spin_global_end, + self.spin_peak_prominence, + self.spin_peak_height, + self.spin_peak_distance, + self.spin_peak_smooth, + self.spin_peak_baseline_window, + self.spin_peak_rate_bin, + self.spin_peak_auc_window, + self.spin_behavior_bin, + self.spin_spatial_bins_x, + self.spin_spatial_bins_y, + self.spin_spatial_clip_low, + self.spin_spatial_clip_high, + self.spin_spatial_time_min, + self.spin_spatial_time_max, + self.spin_spatial_smooth, + ): + spin.valueChanged.connect(self._queue_settings_save) + + for chk in ( + self.cb_filter_events, + self.cb_metrics, + self.cb_global_metrics, + self.cb_global_amp, + self.cb_global_freq, + self.cb_peak_overlay, + self.cb_behavior_aligned, + self.cb_spatial_clip, + self.cb_spatial_time_filter, + self.cb_spatial_log, + self.cb_spatial_invert_y, + ): + chk.toggled.connect(self._queue_settings_save) def _refresh_section_scroll(self, key: str) -> None: scroll = self._section_scroll_hosts.get(key) @@ -3150,6 +3245,7 @@ def _on_compute_spatial_clicked(self) -> None: self._compute_spatial_heatmap(show_panel=True) def _compute_spatial_heatmap(self, *_args: object, show_panel: bool = False) -> None: + self._queue_settings_save() if not hasattr(self, "plot_spatial_occupancy"): return if show_panel: @@ -4613,6 +4709,7 @@ def _export_behavior_events_csv(self) -> None: w.writerow([float(starts[i]), float(ends[i]), float(durs[i]), file_id, behavior_name]) def _compute_psth(self) -> None: + self._queue_settings_save() if not self._processed: self.statusUpdate.emit("No processed data loaded.", 5000) self._last_global_metrics = None @@ -5311,6 +5408,8 @@ def _save_settings(self) -> None: pass def _restore_settings(self) -> None: + was_restoring = self._is_restoring_settings + self._is_restoring_settings = True try: raw = self._settings.value("postprocess_json", "", type=str) if raw: @@ -5318,6 +5417,8 @@ def _restore_settings(self) -> None: self._apply_settings(data) except Exception: pass + finally: + self._is_restoring_settings = was_restoring def _export_origin_dir(self) -> str: if self._processed: diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 74c1c02..83d6126 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -2129,6 +2129,8 @@ def __init__(self, parent=None) -> None: self._sync_guard = False self._artifact_overlay_visible = True self._artifact_thresholds_visible = True + self._plot_background_mode = "dark" + self._plot_grid_visible = True self._artifact_regions: List[pg.LinearRegionItem] = [] self._artifact_region_bounds: List[Tuple[float, float]] = [] self._artifact_labels: List[pg.TextItem] = [] @@ -2182,7 +2184,7 @@ def _build_ui(self) -> None: v.addLayout(tools) self._raw_vb = ArtifactSelectViewBox() - self.plot_raw = pg.PlotWidget(viewBox=self._raw_vb, title="Raw signals (465 /405)") + self.plot_raw = pg.PlotWidget(viewBox=self._raw_vb, title="raw signal") self.plot_proc = pg.PlotWidget(title="Filtered + baselines") self.plot_out = pg.PlotWidget(title="Output") for w in (self.plot_raw, self.plot_proc, self.plot_out): @@ -2261,6 +2263,51 @@ def _build_ui(self) -> None: self._sync_artifact_threshold_curves_visibility() self._toggle_box_select(False) + self.set_plot_appearance(self._plot_background_mode, self._plot_grid_visible) + + def _normalize_plot_background_mode(self, value: object) -> str: + mode = str(value or "").strip().lower() + if mode in {"white", "light", "w"}: + return "white" + return "dark" + + def set_plot_appearance(self, background_mode: str, show_grid: bool) -> None: + self._plot_background_mode = self._normalize_plot_background_mode(background_mode) + self._plot_grid_visible = bool(show_grid) + + if self._plot_background_mode == "white": + bg = pg.mkColor("w") + axis_pen = pg.mkPen((35, 35, 35), width=1.0) + text_pen = pg.mkPen((35, 35, 35), width=1.0) + grid_alpha = 0.20 + else: + bg = pg.mkColor((18, 22, 30)) + axis_pen = pg.mkPen((200, 205, 215), width=1.0) + text_pen = pg.mkPen((200, 205, 215), width=1.0) + grid_alpha = 0.25 + + for plot in (self.plot_raw, self.plot_proc, self.plot_out): + try: + plot.setBackground(bg) + plot.showGrid( + x=self._plot_grid_visible, + y=self._plot_grid_visible, + alpha=grid_alpha if self._plot_grid_visible else 0.0, + ) + pi = plot.getPlotItem() + for axis_name in ("left", "right", "bottom"): + axis = pi.getAxis(axis_name) + if axis is not None: + axis.setPen(axis_pen) + axis.setTextPen(text_pen) + except Exception: + pass + + def plot_background_mode(self) -> str: + return str(self._plot_background_mode) + + def plot_grid_visible(self) -> bool: + return bool(self._plot_grid_visible) def _add_dio_axis(self, plot: pg.PlotWidget, label: str): pi = plot.getPlotItem() diff --git a/pyBer/main.py b/pyBer/main.py index 4da7250..0f49f7b 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -14,6 +14,7 @@ import os import json import logging +import sys from typing import Callable, Dict, List, Optional, Tuple from PySide6 import QtCore, QtGui, QtWidgets @@ -111,8 +112,20 @@ def _to_bool(value: object, default: bool = False) -> bool: def _pyber_icon_path() -> str: - base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - return os.path.join(base_dir, "assets", "pyBer_logo_big.png") + if getattr(sys, "frozen", False): + base_dir = str(getattr(sys, "_MEIPASS", "")) or os.path.dirname(sys.executable) + candidates = [ + os.path.join(base_dir, "assets", "pyBer_logo_big.png"), + os.path.join(os.path.dirname(sys.executable), "assets", "pyBer_logo_big.png"), + ] + else: + base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + candidates = [os.path.join(base_dir, "assets", "pyBer_logo_big.png")] + + for path in candidates: + if os.path.isfile(path): + return path + return candidates[0] def _rolling_corr(x: np.ndarray, y: np.ndarray, win: int) -> Tuple[np.ndarray, np.ndarray]: @@ -275,7 +288,7 @@ def __init__(self) -> None: self.setWindowIcon(icon) except Exception: pass - self.resize(1500, 900) + self._set_initial_window_size() self.setDockOptions( QtWidgets.QMainWindow.DockOption.AllowNestedDocks | QtWidgets.QMainWindow.DockOption.AllowTabbedDocks @@ -352,6 +365,20 @@ def __init__(self) -> None: # ---------------- UI ---------------- + def _set_initial_window_size(self) -> None: + """Choose a sensible non-fullscreen default size relative to the active screen.""" + screen = QtGui.QGuiApplication.primaryScreen() + if screen is None: + self.resize(1280, 780) + return + rect = screen.availableGeometry() + width = max(1024, min(1500, int(rect.width() * 0.86))) + height = max(680, min(900, int(rect.height() * 0.84))) + min_w = max(860, min(980, int(rect.width() * 0.65))) + min_h = max(560, min(640, int(rect.height() * 0.60))) + self.setMinimumSize(min_w, min_h) + self.resize(width, height) + def _build_ui(self) -> None: self.setStyleSheet(APP_QSS) @@ -384,8 +411,8 @@ def _build_ui(self) -> None: self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.art_dock) # Left pane: data browser - self.file_panel.setMinimumWidth(320) - self.file_panel.setMaximumWidth(380) + self.file_panel.setMinimumWidth(260) + self.file_panel.setMaximumWidth(340) self.file_panel.setSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Expanding) # Center pane: workflow toolbar + plots @@ -403,14 +430,41 @@ def _build_ui(self) -> None: self.btn_workflow_artifacts = QtWidgets.QPushButton("Detected artifacts") self.btn_workflow_qc = QtWidgets.QPushButton("QC") self.btn_workflow_export = QtWidgets.QPushButton("Export") + self.btn_plot_style = QtWidgets.QPushButton("Plot style") self.btn_toggle_data = QtWidgets.QPushButton("Data") self.btn_toggle_data.setCheckable(True) self.btn_toggle_data.setChecked(True) self.btn_toggle_data.setProperty("class", "blueSecondarySmall") self.btn_workflow_export.setProperty("class", "bluePrimarySmall") - for b in (self.btn_workflow_artifacts, self.btn_workflow_qc): + for b in ( + self.btn_toggle_data, + self.btn_workflow_load, + self.btn_workflow_artifacts, + self.btn_workflow_qc, + self.btn_workflow_export, + self.btn_plot_style, + ): + b.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + b.setMinimumWidth(44) + for b in (self.btn_workflow_artifacts, self.btn_workflow_qc, self.btn_plot_style): b.setProperty("class", "blueSecondarySmall") + self.menu_plot_style = QtWidgets.QMenu(self.btn_plot_style) + self._plot_bg_group = QtGui.QActionGroup(self) + self._plot_bg_group.setExclusive(True) + self.act_plot_bg_dark = self.menu_plot_style.addAction("Dark background") + self.act_plot_bg_dark.setCheckable(True) + self.act_plot_bg_white = self.menu_plot_style.addAction("White background") + self.act_plot_bg_white.setCheckable(True) + self._plot_bg_group.addAction(self.act_plot_bg_dark) + self._plot_bg_group.addAction(self.act_plot_bg_white) + self.menu_plot_style.addSeparator() + self.act_plot_grid = self.menu_plot_style.addAction("Show grid") + self.act_plot_grid.setCheckable(True) + self.act_plot_bg_dark.setChecked(True) + self.act_plot_grid.setChecked(True) + self.btn_plot_style.setMenu(self.menu_plot_style) + # Inline parameter section buttons (same row as workflow actions). self.btn_section_artifacts = QtWidgets.QPushButton("Artifacts") self.btn_section_filtering = QtWidgets.QPushButton("Filtering") @@ -431,7 +485,8 @@ def _build_ui(self) -> None: for btn in self._section_buttons.values(): btn.setCheckable(True) btn.setProperty("class", "blueSecondarySmall") - btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + btn.setMinimumWidth(56) workflow_row = QtWidgets.QHBoxLayout() workflow_row.setContentsMargins(0, 0, 0, 0) @@ -441,6 +496,7 @@ def _build_ui(self) -> None: workflow_row.addWidget(self.btn_workflow_artifacts) workflow_row.addWidget(self.btn_workflow_qc) workflow_row.addWidget(self.btn_workflow_export) + workflow_row.addWidget(self.btn_plot_style) workflow_row.addSpacing(8) workflow_row.addWidget(QtWidgets.QLabel("Parameters:")) for btn in self._section_buttons.values(): @@ -514,6 +570,9 @@ def _build_ui(self) -> None: self.act_open_file.triggered.connect(self._open_files_dialog) self.act_add_folder.triggered.connect(self._open_folder_dialog) self.act_focus_data.triggered.connect(self._focus_data_browser) + self.act_plot_bg_dark.triggered.connect(self._on_pre_plot_style_changed) + self.act_plot_bg_white.triggered.connect(self._on_pre_plot_style_changed) + self.act_plot_grid.toggled.connect(self._on_pre_plot_style_changed) self.btn_toggle_data.toggled.connect(self._set_data_panel_visible) self.btn_workflow_artifacts.clicked.connect(self._toggle_artifacts_panel) self.btn_workflow_qc.clicked.connect(self._run_qc_dialog) @@ -648,7 +707,8 @@ def _build_config_actions_widget(self) -> QtWidgets.QWidget: self.param_panel.btn_save_config, self.param_panel.btn_load_config, ): - btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + btn.setMinimumWidth(90) row.addWidget(btn) return panel @@ -1672,6 +1732,15 @@ def _restore_settings(self) -> None: self.plots.set_artifact_thresholds_visible(bool(show_thresholds)) except Exception: pass + try: + plot_bg = self.settings.value("pre_plot_background", "dark", type=str) + except Exception: + plot_bg = "dark" + try: + plot_grid = _to_bool(self.settings.value("pre_plot_grid", True), True) + except Exception: + plot_grid = True + self._apply_pre_plot_style(plot_bg, plot_grid, persist=False) if self._force_fixed_dock_layouts: # Fixed mode: always enforce deterministic defaults. @@ -1771,6 +1840,11 @@ def _save_settings(self) -> None: self.settings.setValue("artifact_thresholds_visible", bool(self.plots.artifact_thresholds_visible())) except Exception: pass + try: + self.settings.setValue("pre_plot_background", str(self.plots.plot_background_mode())) + self.settings.setValue("pre_plot_grid", bool(self.plots.plot_grid_visible())) + except Exception: + pass try: self.settings.setValue("pre_data_panel_visible", bool(self.file_panel.isVisible())) @@ -2498,6 +2572,46 @@ def _on_artifact_thresholds_toggled(self, visible: bool) -> None: self.plots.set_artifact_thresholds_visible(bool(visible)) self._save_settings() + def _normalize_pre_plot_background(self, value: object) -> str: + mode = str(value or "").strip().lower() + if mode in {"white", "light", "w"}: + return "white" + return "dark" + + def _selected_pre_plot_background(self) -> str: + if hasattr(self, "act_plot_bg_white") and self.act_plot_bg_white.isChecked(): + return "white" + return "dark" + + def _apply_pre_plot_style(self, background: object, show_grid: object, persist: bool = True) -> None: + mode = self._normalize_pre_plot_background(background) + grid = bool(show_grid) + if hasattr(self, "act_plot_bg_dark"): + self.act_plot_bg_dark.blockSignals(True) + self.act_plot_bg_dark.setChecked(mode == "dark") + self.act_plot_bg_dark.blockSignals(False) + if hasattr(self, "act_plot_bg_white"): + self.act_plot_bg_white.blockSignals(True) + self.act_plot_bg_white.setChecked(mode == "white") + self.act_plot_bg_white.blockSignals(False) + if hasattr(self, "act_plot_grid"): + self.act_plot_grid.blockSignals(True) + self.act_plot_grid.setChecked(grid) + self.act_plot_grid.blockSignals(False) + try: + self.plots.set_plot_appearance(mode, grid) + except Exception: + pass + if persist: + self._save_settings() + + def _on_pre_plot_style_changed(self, *_args) -> None: + self._apply_pre_plot_style( + self._selected_pre_plot_background(), + self.act_plot_grid.isChecked() if hasattr(self, "act_plot_grid") else True, + persist=True, + ) + def _auto_range_for_processed(self, processed: ProcessedTrial) -> None: try: start_s, end_s = self._time_window_bounds() @@ -2978,7 +3092,7 @@ def _update_raw_plot(self) -> None: raw465 = -np.asarray(raw465, float) raw405 = -np.asarray(raw405, float) - self.plots.set_title(os.path.basename(self._current_path)) + self.plots.set_title("raw signal") self.plots.show_raw( time=trial.time, raw465=raw465, From 196f84a79e8fc69cc948b8cc5541b4ecdac6d527 Mon Sep 17 00:00:00 2001 From: andrianj Date: Fri, 27 Feb 2026 12:07:30 +0100 Subject: [PATCH 13/28] improved window focus handling in postprocessing tab --- .github/workflows/build-and-publish.yml | 9 +- panel_layout.json | 61 +- .../gui_postprocessing.cpython-311.pyc | Bin 420576 -> 473738 bytes .../gui_preprocessing.cpython-311.pyc | Bin 210395 -> 211571 bytes .../gui_preprocessing.cpython-38.pyc | Bin 89059 -> 89539 bytes pyBer/__pycache__/main.cpython-311.pyc | Bin 252264 -> 255654 bytes pyBer/gui_postprocessing.py | 721 ++++++++++++++++++ pyBer/gui_preprocessing.py | 44 +- pyBer/main.py | 91 ++- 9 files changed, 865 insertions(+), 61 deletions(-) diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index b81f851..3f0b26a 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -105,7 +105,14 @@ jobs: publish: needs: [build-windows] - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/Pyber_v0.15' || startsWith(github.ref, 'refs/tags/')) + if: | + needs.build-windows.result == 'success' && ( + github.event_name == 'workflow_dispatch' || + ( + github.event_name == 'push' && + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/Pyber_v0.15' || startsWith(github.ref, 'refs/tags/')) + ) + ) runs-on: ubuntu-latest steps: - name: Download Windows Artifact diff --git a/panel_layout.json b/panel_layout.json index 5634acd..7555115 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -3,71 +3,60 @@ "pre": { "pre_data_panel_visible": false, "pre_splitter_sizes": [ - 317, - 317 + 260, + 375 ], "pre_main_dock_state": "", - "tab_groups": [ - { - "members": [ - "pre.artifact.dock", - "pre.artifacts.dock", - "pre.baseline.dock", - "pre.filtering.dock", - "pre.output.dock" - ], - "active": "pre.artifact.dock" - } - ], + "tab_groups": [], "sections": { "artifacts": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///86////gv///4L" }, "filtering": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9Nf///gv///4L" }, "output": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8Vf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8Vf///gv///4L" + "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9P////gv///4L" }, "qc": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAOiAAAENQAABYAAAAXbAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAENQAABYAAAAXb" + "geometry": "AdnQywADAAAAAAWhAAACOQAAB38AAAMXAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAACOQAAB38AAAMX" }, "export": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAOiAAAF3gAABYAAAAbDAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAF3gAABYAAAAbD" + "geometry": "AdnQywADAAAAAAWhAAADGgAAB38AAAOTAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAADGgAAB38AAAOT" }, "config": { - "visible": true, + "visible": false, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAGxgAABYAAAAcKAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAGxgAABYAAAAcK" + "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAADlgAAB38AAAPa" } }, "artifact": { - "visible": true, + "visible": false, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAOiAAAAAAAABYAAAAQQAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAAAAAABYAAAAQQ" + "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIUAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAAIU" } }, "post": { @@ -77,37 +66,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAOiAAAAAAAABYAAAAJ0AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAOiAAAAAAAABYAAAAJ0" + "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALFAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAALF" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9qv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9qv///gv///4L" + "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAACmQAABYAAAAL6AAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAACmQAABYAAAAL6" + "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC6gAABdsAAANL" } } } diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index cbedc198fabba96495b7904f5c75c37df25cc92c..55316d47a93af85a0563c2a9c1864fab6b0376ff 100644 GIT binary patch delta 91714 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 delta 54073 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 _i}lzpn5{lNYG2vLKnVR5e)D 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 delta 4050 zcmbVPeQX>@72ny}y}MoC_xG32=Wn0CUAt`v4Xvt>1mcFcrX?|LQpYbPaT3Q_Uul57 z*e-5~Lsf!LWeQc04alI{4YCBfKTsP9{y?IrAt6$wfYb&dq(Tvn8mbtXk2kxv&$o6U zV&!{p=FOX#H}C!Cz43>)oWJ{v)BQu2OBL|@g+6_>_42s;c{ll~TkO_90XK3#>;(_<0Q5irc@Xu3$V2cb zM3INFA4492UPvI1Vn2yI2A_o#@;E#OmB1)wpyQ@)|e*TaeenLD-7C4o&ZhBlN=|*p53j;R>IesFnJfv9SY(T9EHV-U z`jZJjPLmwPpOlmHd+$wt0>oo7ceEDM3D6jC8XxwglAc`brhqh)ZONVJXougU0 zI!_RE5fo6N44mMawF$zUEq~@nxBVJ}`m<_Q0E)rxfR8e1yKwuWF znp?As;Ng3P6&*>Z*)Z$5A;u_OomPE{B&D3RrXh0;k=7-3I_O$8R+rYb74Z=GGrydj{r)zo zR;X@Yr_6e5&<}0(KGxYpqxtlE-u#b_I(MPVBM^lc#Ah+ab4Hx`GC7AOUI|D-IixIF zitfOWC}UfgcZrxGVXIyb+Rl?9bH(;^Zf(ZsW0Xmc&Z6N=)a@O6WF; zEi99k%*IJ&n@=*sckya1kHNzjg9=DPrMc8f6os725`ikHh8l~GTX&5Qthv~=;?Hu= z9nb8+bNUdD#Kukr#Ht520j0+Z!Sx4SwT=iw31bC*ze2KmofYo8w?ek*!eD^Ccbil^ zxbb$}wIO_w{8(*@+Y-z_@df87y0jMRpdK0^W6305i(4C^37T~}-(rEb&!X1~ZO{$@ ztKKjsk(^%_rX8!UL7w*`3MB9zP)Vd}1 znwwT`J&qS!8%ADxDkJ!Lo>SE0IwqAkt z93o+9Qq2Z=wvS5Z)GU2@fL11~HOs75#)aqgY9B_;s8^+C=48uJu$p0^F{YtQjW1_A ztKy?1IN`|IMM1YCg4go5PFdwF33#{=Cz+ov8A4)bJEF8w=3_Q?JWAsn?%UCj5QHIO z*~FT|jXV$b`9vwy5yJMI!fxy)QQM@dJ22UP^ABR2UFawN{ENQ|M<>-;f>{oK=4ZMs zlVsnC(GTO=97;8AzIKS?W*(c`0Jiq9*W>j5xPh`~_{bMIG4OVpx4u;PSDgNUkZ-W> zC+XRWFLT*fI5FTi&RfrM(uqrFTx@?ieRx}03Al0a>s;d{PKs!r;#~vH#!B3vkuqF_ z{jr=r<#V8jUe1AciE|*k9$tvMz zUiVUQfqUM=OI^cM)X$PX5uFDRsK)DVe#3pRcnV)R;M|~P*X<)Rgmv4i!Ub{2Znhwz z+p#a@9Bh26SUq*#XY9o=v{8o&~R9CVI^8s>V z7xCHv9hyn8Xf3^z(3a3yCi;zguOIm#_d4cfv!Jr~ zpCnaW^Q|V@J}RxdZ)?RSW83t47H{Ua`9(c|re-AV0}PX92-e0kVXclQ6F*lo96P|B zJ;}RIb27*YSMM@&#tGg(#Yvu%&2qy9KJYRpudp|oX-$Zl8RffNWMm5d-vC=~ruW!? z$sPW0f!*6e9||wp1tok_kQDV6CyNGA*-I_7F}$btxLPH1j($U9>T)!x6pu=K|oL&@4$pKO& zw=4>!q?-ifr^upkw^ZX8(vD(SFgpIi8(s8OLS8HEzmNW!?s-fle62gP^PjpFti5R} L-1;wi#xDN>e`r(R diff --git a/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc b/pyBer/__pycache__/gui_preprocessing.cpython-38.pyc index cc89f53739d26642d9f5cc6c4d6205da1ce9811f..420990353233d5f531fa5d30423140d3564d4560 100644 GIT binary patch delta 3265 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 Rrv2m5ShRD=e~Lb(9|7upY;phq diff --git a/pyBer/__pycache__/main.cpython-311.pyc b/pyBer/__pycache__/main.cpython-311.pyc index 97d0af7b04e7cd6ae047e95ff3780a0af905f4f2..cf97ab8818b285709d3ccc087c34a808e3110ba2 100644 GIT binary patch delta 27459 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 None: self._app_closing: bool = False self._post_snapshot_applied: bool = False self._force_fixed_default_layout: bool = False + self._pending_project_recompute_from_current: bool = False try: self._build_ui() self._restore_settings() @@ -886,6 +888,12 @@ def _build_ui(self) -> None: self.btn_load_cfg = QtWidgets.QPushButton("Load config") self.btn_load_cfg.setProperty("class", "compactSmall") self.btn_load_cfg.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_save_project = QtWidgets.QPushButton("Save project (.h5)") + self.btn_save_project.setProperty("class", "compactSmall") + self.btn_save_project.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) + self.btn_load_project = QtWidgets.QPushButton("Load project (.h5)") + self.btn_load_project.setProperty("class", "compactSmall") + self.btn_load_project.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) grp_signal = QtWidgets.QGroupBox("Signal Event Analyzer") f_signal = QtWidgets.QFormLayout(grp_signal) @@ -1217,6 +1225,8 @@ def _build_ui(self) -> None: export_layout.addWidget(self.btn_style) export_layout.addWidget(self.btn_save_cfg) export_layout.addWidget(self.btn_load_cfg) + export_layout.addWidget(self.btn_save_project) + export_layout.addWidget(self.btn_load_project) export_layout.addStretch(1) action_row = QtWidgets.QHBoxLayout() @@ -1230,10 +1240,13 @@ def _build_ui(self) -> None: self.act_load_single = self.menu_action_load.addAction("Load processed file (single)") self.act_load_group = self.menu_action_load.addAction("Load processed files (group)") self.menu_action_load.addSeparator() + self.act_load_project = self.menu_action_load.addAction("Load project (.h5)") + self.menu_action_load.addSeparator() self.act_load_behavior = self.menu_action_load.addAction("Load behavior CSV/XLSX") self.menu_action_recent = self.menu_action_load.addMenu("Load recent") self.menu_recent_processed = self.menu_action_recent.addMenu("Processed files") self.menu_recent_behavior = self.menu_action_recent.addMenu("Behavior files") + self.menu_recent_projects = self.menu_action_recent.addMenu("Projects") self.menu_action_recent.aboutToShow.connect(self._refresh_recent_postprocessing_menus) self.act_refresh_dio = self.menu_action_load.addAction("Refresh A/D channel list") self.btn_action_load.setMenu(self.menu_action_load) @@ -1534,6 +1547,7 @@ def _build_ui(self) -> None: self.act_load_current.triggered.connect(self.requestCurrentProcessed.emit) self.act_load_single.triggered.connect(self._load_processed_files_single) self.act_load_group.triggered.connect(self._load_processed_files) + self.act_load_project.triggered.connect(self._load_project_file) self.act_load_behavior.triggered.connect(self._load_behavior_files) self.act_refresh_dio.triggered.connect(self.requestDioList.emit) self.btn_action_compute.clicked.connect(self._compute_psth) @@ -1569,6 +1583,8 @@ def _build_ui(self) -> None: self.btn_style.clicked.connect(self._open_style_dialog) self.btn_save_cfg.clicked.connect(self._save_config_file) self.btn_load_cfg.clicked.connect(self._load_config_file) + self.btn_save_project.clicked.connect(self._save_project_file) + self.btn_load_project.clicked.connect(self._load_project_file) self.cb_filter_events.stateChanged.connect(self._update_event_filter_enabled) self.cb_metrics.stateChanged.connect(self._update_metrics_enabled) self.cb_global_metrics.stateChanged.connect(self._update_global_metrics_enabled) @@ -2091,6 +2107,10 @@ def receive_current_processed(self, processed_list: List[ProcessedTrial]) -> Non self._compute_spatial_heatmap() self._update_data_availability() self._update_status_strip() + if self._pending_project_recompute_from_current: + self._pending_project_recompute_from_current = False + self._compute_psth() + self._compute_spatial_heatmap() def append_processed(self, processed_list: List[ProcessedTrial]) -> None: if not processed_list: @@ -2169,6 +2189,11 @@ def _refresh_recent_postprocessing_menus(self) -> None: key="postprocess_recent_behavior_paths", loader=self._load_recent_behavior_path, ) + self._refresh_recent_menu( + self.menu_recent_projects, + key="postprocess_recent_project_paths", + loader=self._load_recent_project_path, + ) def _refresh_recent_menu( self, @@ -2225,6 +2250,12 @@ def _load_recent_behavior_path(self, path: str) -> None: except Exception: pass + def _load_recent_project_path(self, path: str) -> None: + if not path or not os.path.isfile(path): + QtWidgets.QMessageBox.warning(self, "Load recent", "Selected recent project file is missing.") + return + self._load_project_from_path(path) + def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: if replace: self._behavior_sources.clear() @@ -2261,6 +2292,7 @@ def _load_behavior_paths(self, paths: List[str], replace: bool) -> None: "Behavior load warning", f"No behavior or trajectory numeric columns detected in {os.path.basename(p)} for the selected file type.", ) + info["source_path"] = str(p) self._behavior_sources[stem] = info except Exception as exc: QtWidgets.QMessageBox.warning( @@ -5153,6 +5185,695 @@ def _open_style_dialog(self) -> None: ) self._save_settings() + def _h5_text(self, value: object, default: str = "") -> str: + if value is None: + return default + if isinstance(value, bytes): + try: + return value.decode("utf-8", errors="ignore") + except Exception: + return default + return str(value) + + def _write_h5_json(self, group: h5py.Group, name: str, payload: Dict[str, object]) -> None: + text = json.dumps(payload or {}) + dtype = h5py.string_dtype(encoding="utf-8") + if name in group: + del group[name] + group.create_dataset(name, data=text, dtype=dtype) + + def _write_h5_json_any(self, group: h5py.Group, name: str, payload: object) -> None: + text = json.dumps(payload) + dtype = h5py.string_dtype(encoding="utf-8") + if name in group: + del group[name] + group.create_dataset(name, data=text, dtype=dtype) + + def _read_h5_json(self, group: Optional[h5py.Group], name: str) -> Dict[str, object]: + if group is None or name not in group: + return {} + try: + raw = group[name][()] + except Exception: + return {} + if isinstance(raw, np.ndarray): + try: + raw = raw.item() + except Exception: + raw = raw.tolist() + if isinstance(raw, bytes): + try: + raw = raw.decode("utf-8", errors="ignore") + except Exception: + raw = "" + text = str(raw or "") + if not text: + return {} + try: + data = json.loads(text) + except Exception: + return {} + return data if isinstance(data, dict) else {} + + def _read_h5_json_any(self, group: Optional[h5py.Group], name: str, default: object) -> object: + if group is None or name not in group: + return default + try: + raw = group[name][()] + except Exception: + return default + if isinstance(raw, np.ndarray): + try: + raw = raw.item() + except Exception: + raw = raw.tolist() + if isinstance(raw, bytes): + try: + raw = raw.decode("utf-8", errors="ignore") + except Exception: + raw = "" + text = str(raw or "") + if not text: + return default + try: + return json.loads(text) + except Exception: + return default + + def _write_h5_str_list(self, group: h5py.Group, name: str, values: List[str]) -> None: + dtype = h5py.string_dtype(encoding="utf-8") + arr = np.asarray([str(v) for v in (values or [])], dtype=dtype) + if name in group: + del group[name] + group.create_dataset(name, data=arr, dtype=dtype) + + def _read_h5_str_list(self, group: Optional[h5py.Group], name: str) -> List[str]: + if group is None or name not in group: + return [] + try: + raw = group[name][()] + except Exception: + return [] + if isinstance(raw, bytes): + return [raw.decode("utf-8", errors="ignore")] + if isinstance(raw, str): + return [raw] + if isinstance(raw, np.ndarray): + out: List[str] = [] + for item in raw.tolist(): + if isinstance(item, bytes): + out.append(item.decode("utf-8", errors="ignore")) + else: + out.append(str(item)) + return out + return [] + + def _write_h5_numeric(self, group: h5py.Group, name: str, values: np.ndarray) -> None: + arr = np.asarray(values, float) + if name in group: + del group[name] + kwargs: Dict[str, object] = {} + if arr.size > 0: + kwargs["compression"] = "gzip" + group.create_dataset(name, data=arr, **kwargs) + + def _read_h5_numeric(self, group: h5py.Group, name: str) -> Optional[np.ndarray]: + if name not in group: + return None + try: + return np.asarray(group[name][()], float) + except Exception: + return None + + def _save_signal_events_h5(self, parent: h5py.Group) -> None: + if not isinstance(self.last_signal_events, dict) or not self.last_signal_events: + return + group = parent.create_group("signal_events") + for key in ( + "peak_times_sec", + "peak_indices", + "peak_heights", + "peak_prominences", + "peak_widths_sec", + "peak_auc", + ): + self._write_h5_numeric(group, key, np.asarray(self.last_signal_events.get(key, np.array([], float)), float)) + self._write_h5_str_list(group, "file_ids", [str(v) for v in self.last_signal_events.get("file_ids", []) or []]) + self._write_h5_json(group, "derived_metrics_json", dict(self.last_signal_events.get("derived_metrics", {}) or {})) + self._write_h5_json(group, "params_json", dict(self.last_signal_events.get("params", {}) or {})) + + def _load_signal_events_h5(self, parent: Optional[h5py.Group]) -> Optional[Dict[str, object]]: + if parent is None: + return None + group = parent.get("signal_events") + if not isinstance(group, h5py.Group): + return None + + def _num(name: str) -> np.ndarray: + arr = self._read_h5_numeric(group, name) + if arr is None: + return np.array([], float) + return np.asarray(arr, float) + + out: Dict[str, object] = { + "peak_times_sec": _num("peak_times_sec"), + "peak_indices": _num("peak_indices"), + "peak_heights": _num("peak_heights"), + "peak_prominences": _num("peak_prominences"), + "peak_widths_sec": _num("peak_widths_sec"), + "peak_auc": _num("peak_auc"), + "file_ids": self._read_h5_str_list(group, "file_ids"), + "derived_metrics": self._read_h5_json(group, "derived_metrics_json"), + "params": self._read_h5_json(group, "params_json"), + } + return out + + def _save_behavior_analysis_h5(self, parent: h5py.Group) -> None: + if not isinstance(self.last_behavior_analysis, dict) or not self.last_behavior_analysis: + return + group = parent.create_group("behavior_analysis") + group.attrs["behavior_name"] = str(self.last_behavior_analysis.get("behavior_name", "") or "") + self._write_h5_json_any(group, "per_file_metrics_json", self.last_behavior_analysis.get("per_file_metrics", []) or []) + self._write_h5_json(group, "group_metrics_json", dict(self.last_behavior_analysis.get("group_metrics", {}) or {})) + self._write_h5_json(group, "params_json", dict(self.last_behavior_analysis.get("params", {}) or {})) + + events_group = group.create_group("per_file_events") + for idx, row in enumerate(self.last_behavior_analysis.get("per_file_events", []) or []): + if not isinstance(row, dict): + continue + entry = events_group.create_group(f"item_{idx:04d}") + entry.attrs["file_id"] = str(row.get("file_id", "") or "") + try: + entry.attrs["row_index"] = int(row.get("row_index", idx + 1)) + except Exception: + entry.attrs["row_index"] = int(idx + 1) + self._write_h5_numeric(entry, "start_sec", np.asarray(row.get("start_sec", np.array([], float)), float)) + self._write_h5_numeric(entry, "end_sec", np.asarray(row.get("end_sec", np.array([], float)), float)) + self._write_h5_numeric(entry, "duration_sec", np.asarray(row.get("duration_sec", np.array([], float)), float)) + + def _load_behavior_analysis_h5(self, parent: Optional[h5py.Group]) -> Optional[Dict[str, object]]: + if parent is None: + return None + group = parent.get("behavior_analysis") + if not isinstance(group, h5py.Group): + return None + + per_file_metrics_raw = self._read_h5_json_any(group, "per_file_metrics_json", []) + per_file_metrics = per_file_metrics_raw if isinstance(per_file_metrics_raw, list) else [] + + per_file_events: List[Dict[str, object]] = [] + events_group = group.get("per_file_events") + if isinstance(events_group, h5py.Group): + for key in sorted(events_group.keys()): + entry = events_group.get(key) + if not isinstance(entry, h5py.Group): + continue + try: + row_index = int(entry.attrs.get("row_index", 0)) + except Exception: + row_index = 0 + per_file_events.append( + { + "file_id": self._h5_text(entry.attrs.get("file_id", ""), ""), + "row_index": row_index, + "start_sec": np.asarray( + self._read_h5_numeric(entry, "start_sec") if "start_sec" in entry else np.array([], float), + float, + ), + "end_sec": np.asarray( + self._read_h5_numeric(entry, "end_sec") if "end_sec" in entry else np.array([], float), + float, + ), + "duration_sec": np.asarray( + self._read_h5_numeric(entry, "duration_sec") if "duration_sec" in entry else np.array([], float), + float, + ), + } + ) + + return { + "behavior_name": self._h5_text(group.attrs.get("behavior_name", ""), ""), + "per_file_metrics": per_file_metrics, + "per_file_events": per_file_events, + "group_metrics": self._read_h5_json(group, "group_metrics_json"), + "params": self._read_h5_json(group, "params_json"), + } + + def _clear_cached_analysis_outputs(self) -> None: + self.last_signal_events = None + self.last_behavior_analysis = None + self.tbl_signal_metrics.setRowCount(0) + self.tbl_behavior_metrics.setRowCount(0) + self.lbl_behavior_summary.setText("Group metrics: -") + for pw in (self.plot_peak_amp, self.plot_peak_ibi, self.plot_peak_rate): + pw.clear() + for pw in ( + self.plot_behavior_raster, + self.plot_behavior_rate, + self.plot_behavior_duration, + self.plot_behavior_starts, + ): + pw.clear() + self._refresh_signal_overlay() + + def _restore_cached_analysis_outputs(self, payload: Dict[str, object]) -> None: + self._clear_cached_analysis_outputs() + + signal_events = payload.get("signal_events") + if isinstance(signal_events, dict) and signal_events: + self.last_signal_events = signal_events + self._refresh_signal_overlay() + self._render_signal_event_plots() + self._update_signal_metrics_table() + + behavior_analysis = payload.get("behavior_analysis") + if isinstance(behavior_analysis, dict) and behavior_analysis: + self.last_behavior_analysis = behavior_analysis + self._render_behavior_analysis_outputs() + + def _save_project_h5(self, path: str) -> None: + with h5py.File(path, "w") as f: + f.attrs["project_type"] = "pyber_postprocessing_project" + f.attrs["project_version"] = 1 + f.attrs["created_utc"] = datetime.now(timezone.utc).isoformat() + + ui_group = f.create_group("ui") + self._write_h5_json(ui_group, "settings_json", self._collect_settings()) + ui_group.attrs["tab_sources_index"] = int(self.tab_sources.currentIndex()) + + meta_group = f.create_group("meta") + processed_paths = [str(getattr(proc, "path", "") or "").strip() for proc in self._processed] + processed_paths = [p for p in processed_paths if p] + behavior_paths: List[str] = [] + for info in self._behavior_sources.values(): + src = str((info or {}).get("source_path", "") or "").strip() + if src: + behavior_paths.append(src) + self._write_h5_json( + meta_group, + "recent_paths_json", + { + "processed_paths": processed_paths, + "behavior_paths": behavior_paths, + }, + ) + + processed_group = f.create_group("processed") + processed_group.attrs["count"] = int(len(self._processed)) + for idx, proc in enumerate(self._processed): + entry = processed_group.create_group(f"item_{idx:04d}") + entry.attrs["path"] = str(getattr(proc, "path", "") or "") + entry.attrs["channel_id"] = str(getattr(proc, "channel_id", "") or "") + entry.attrs["dio_name"] = str(getattr(proc, "dio_name", "") or "") + entry.attrs["output_label"] = str(getattr(proc, "output_label", "") or "") + entry.attrs["output_context"] = str(getattr(proc, "output_context", "") or "") + entry.attrs["fs_actual"] = float(getattr(proc, "fs_actual", np.nan)) + entry.attrs["fs_target"] = float(getattr(proc, "fs_target", np.nan)) + entry.attrs["fs_used"] = float(getattr(proc, "fs_used", np.nan)) + + self._write_h5_numeric(entry, "time", np.asarray(getattr(proc, "time", np.array([], float)), float)) + self._write_h5_numeric(entry, "raw_signal", np.asarray(getattr(proc, "raw_signal", np.array([], float)), float)) + self._write_h5_numeric(entry, "raw_reference", np.asarray(getattr(proc, "raw_reference", np.array([], float)), float)) + + for field in ( + "raw_thr_hi", + "raw_thr_lo", + "dio", + "sig_f", + "ref_f", + "baseline_sig", + "baseline_ref", + "output", + ): + value = getattr(proc, field, None) + if value is None: + continue + self._write_h5_numeric(entry, field, np.asarray(value, float)) + + artifact_regions = getattr(proc, "artifact_regions_sec", None) + if artifact_regions: + arr = np.asarray(artifact_regions, float).reshape(-1, 2) + self._write_h5_numeric(entry, "artifact_regions_sec", arr) + artifact_regions_auto = getattr(proc, "artifact_regions_auto_sec", None) + if artifact_regions_auto: + arr_auto = np.asarray(artifact_regions_auto, float).reshape(-1, 2) + self._write_h5_numeric(entry, "artifact_regions_auto_sec", arr_auto) + + behavior_group = f.create_group("behavior_sources") + behavior_group.attrs["count"] = int(len(self._behavior_sources)) + for idx, (stem, info) in enumerate(self._behavior_sources.items()): + source = info or {} + entry = behavior_group.create_group(f"item_{idx:04d}") + entry.attrs["stem"] = str(stem) + entry.attrs["kind"] = str(source.get("kind", _BEHAVIOR_PARSE_BINARY)) + entry.attrs["trajectory_time_col"] = str(source.get("trajectory_time_col", "") or "") + if source.get("sheet") is not None: + entry.attrs["sheet"] = str(source.get("sheet")) + if source.get("source_path") is not None: + entry.attrs["source_path"] = str(source.get("source_path")) + + self._write_h5_numeric(entry, "time", np.asarray(source.get("time", np.array([], float)), float)) + self._write_h5_numeric( + entry, + "trajectory_time", + np.asarray(source.get("trajectory_time", np.array([], float)), float), + ) + + behaviors_group = entry.create_group("behaviors") + behaviors = source.get("behaviors") or {} + for b_idx, (name, values) in enumerate(behaviors.items()): + data = np.asarray(values, float) + kwargs: Dict[str, object] = {} + if data.size > 0: + kwargs["compression"] = "gzip" + ds = behaviors_group.create_dataset(f"item_{b_idx:04d}", data=data, **kwargs) + ds.attrs["name"] = str(name) + + trajectory_group = entry.create_group("trajectory") + trajectory = source.get("trajectory") or {} + for t_idx, (name, values) in enumerate(trajectory.items()): + data = np.asarray(values, float) + kwargs: Dict[str, object] = {} + if data.size > 0: + kwargs["compression"] = "gzip" + ds = trajectory_group.create_dataset(f"item_{t_idx:04d}", data=data, **kwargs) + ds.attrs["name"] = str(name) + + analysis_group = f.create_group("analysis") + self._save_signal_events_h5(analysis_group) + self._save_behavior_analysis_h5(analysis_group) + + def _load_project_h5(self, path: str) -> Dict[str, object]: + payload: Dict[str, object] = { + "settings": {}, + "tab_sources_index": 0, + "processed": [], + "behavior_sources": {}, + "recent_paths": {}, + "signal_events": None, + "behavior_analysis": None, + } + with h5py.File(path, "r") as f: + project_type = self._h5_text(f.attrs.get("project_type", ""), "") + if project_type and project_type != "pyber_postprocessing_project": + raise ValueError("This H5 file is not a pyBer postprocessing project.") + if not project_type and "processed" not in f and "ui" not in f: + raise ValueError("This H5 file does not contain a pyBer postprocessing project.") + + ui_group = f.get("ui") + if isinstance(ui_group, h5py.Group): + payload["settings"] = self._read_h5_json(ui_group, "settings_json") + try: + payload["tab_sources_index"] = int(ui_group.attrs.get("tab_sources_index", 0)) + except Exception: + payload["tab_sources_index"] = 0 + + meta_group = f.get("meta") + if isinstance(meta_group, h5py.Group): + payload["recent_paths"] = self._read_h5_json(meta_group, "recent_paths_json") + + loaded_processed: List[ProcessedTrial] = [] + processed_group = f.get("processed") + if isinstance(processed_group, h5py.Group): + for key in sorted(processed_group.keys()): + entry = processed_group.get(key) + if not isinstance(entry, h5py.Group): + continue + time = self._read_h5_numeric(entry, "time") + if time is None or time.size == 0: + continue + t = np.asarray(time, float).reshape(-1) + n = int(t.size) + + def _aligned(values: Optional[np.ndarray], fill_nan: bool = True) -> np.ndarray: + if values is None: + return np.full(n, np.nan, dtype=float) if fill_nan else np.array([], float) + arr = np.asarray(values, float).reshape(-1) + if arr.size == n: + return arr + if arr.size == 0: + return np.full(n, np.nan, dtype=float) if fill_nan else np.array([], float) + out = np.full(n, np.nan, dtype=float) if fill_nan else np.array([], float) + if fill_nan: + m = min(n, arr.size) + out[:m] = arr[:m] + return out + return arr + + raw_signal = _aligned(self._read_h5_numeric(entry, "raw_signal"), fill_nan=True) + raw_reference = _aligned(self._read_h5_numeric(entry, "raw_reference"), fill_nan=True) + output_arr = _aligned(self._read_h5_numeric(entry, "output"), fill_nan=True) + + trial = ProcessedTrial( + path=self._h5_text(entry.attrs.get("path", ""), ""), + channel_id=self._h5_text(entry.attrs.get("channel_id", ""), "import"), + time=t, + raw_signal=raw_signal, + raw_reference=raw_reference, + raw_thr_hi=_aligned(self._read_h5_numeric(entry, "raw_thr_hi"), fill_nan=False) + if "raw_thr_hi" in entry + else None, + raw_thr_lo=_aligned(self._read_h5_numeric(entry, "raw_thr_lo"), fill_nan=False) + if "raw_thr_lo" in entry + else None, + dio=_aligned(self._read_h5_numeric(entry, "dio"), fill_nan=False) if "dio" in entry else None, + dio_name=self._h5_text(entry.attrs.get("dio_name", ""), ""), + sig_f=_aligned(self._read_h5_numeric(entry, "sig_f"), fill_nan=False) if "sig_f" in entry else None, + ref_f=_aligned(self._read_h5_numeric(entry, "ref_f"), fill_nan=False) if "ref_f" in entry else None, + baseline_sig=_aligned(self._read_h5_numeric(entry, "baseline_sig"), fill_nan=False) + if "baseline_sig" in entry + else None, + baseline_ref=_aligned(self._read_h5_numeric(entry, "baseline_ref"), fill_nan=False) + if "baseline_ref" in entry + else None, + output=output_arr, + output_label=self._h5_text(entry.attrs.get("output_label", "output"), "output"), + output_context=self._h5_text(entry.attrs.get("output_context", ""), ""), + artifact_regions_sec=None, + artifact_regions_auto_sec=None, + fs_actual=float(entry.attrs.get("fs_actual", np.nan)), + fs_target=float(entry.attrs.get("fs_target", np.nan)), + fs_used=float(entry.attrs.get("fs_used", np.nan)), + ) + + regions = self._read_h5_numeric(entry, "artifact_regions_sec") + if regions is not None and regions.size: + rr = np.asarray(regions, float).reshape(-1, 2) + trial.artifact_regions_sec = [(float(a), float(b)) for a, b in rr] + regions_auto = self._read_h5_numeric(entry, "artifact_regions_auto_sec") + if regions_auto is not None and regions_auto.size: + ra = np.asarray(regions_auto, float).reshape(-1, 2) + trial.artifact_regions_auto_sec = [(float(a), float(b)) for a, b in ra] + + loaded_processed.append(trial) + + loaded_behavior: Dict[str, Dict[str, Any]] = {} + behavior_group = f.get("behavior_sources") + if isinstance(behavior_group, h5py.Group): + for key in sorted(behavior_group.keys()): + entry = behavior_group.get(key) + if not isinstance(entry, h5py.Group): + continue + stem = self._h5_text(entry.attrs.get("stem", key), key) + info: Dict[str, Any] = { + "kind": self._h5_text(entry.attrs.get("kind", _BEHAVIOR_PARSE_BINARY), _BEHAVIOR_PARSE_BINARY), + "time": np.asarray( + self._read_h5_numeric(entry, "time") if "time" in entry else np.array([], float), + float, + ), + "behaviors": {}, + "trajectory": {}, + "trajectory_time": np.asarray( + self._read_h5_numeric(entry, "trajectory_time") + if "trajectory_time" in entry + else np.array([], float), + float, + ), + "trajectory_time_col": self._h5_text(entry.attrs.get("trajectory_time_col", ""), ""), + } + if "sheet" in entry.attrs: + info["sheet"] = self._h5_text(entry.attrs.get("sheet", ""), "") + if "source_path" in entry.attrs: + info["source_path"] = self._h5_text(entry.attrs.get("source_path", ""), "") + + behaviors_group = entry.get("behaviors") + if isinstance(behaviors_group, h5py.Group): + for b_key in sorted(behaviors_group.keys()): + ds = behaviors_group.get(b_key) + if ds is None: + continue + name = self._h5_text(ds.attrs.get("name", b_key), b_key) + info["behaviors"][name] = np.asarray(ds[()], float) + + trajectory_group = entry.get("trajectory") + if isinstance(trajectory_group, h5py.Group): + for t_key in sorted(trajectory_group.keys()): + ds = trajectory_group.get(t_key) + if ds is None: + continue + name = self._h5_text(ds.attrs.get("name", t_key), t_key) + info["trajectory"][name] = np.asarray(ds[()], float) + + loaded_behavior[stem] = info + + analysis_group = f.get("analysis") + if isinstance(analysis_group, h5py.Group): + payload["signal_events"] = self._load_signal_events_h5(analysis_group) + payload["behavior_analysis"] = self._load_behavior_analysis_h5(analysis_group) + + payload["processed"] = loaded_processed + payload["behavior_sources"] = loaded_behavior + return payload + + def _save_project_file(self) -> None: + start_dir = self._settings.value("postprocess_last_dir", os.getcwd(), type=str) + default_name = f"{self._default_export_prefix()}_project.h5" + path, _ = QtWidgets.QFileDialog.getSaveFileName( + self, + "Save postprocessing project", + os.path.join(start_dir, default_name), + "HDF5 project (*.h5)", + ) + if not path: + return + if not path.lower().endswith((".h5", ".hdf5")): + path = f"{path}.h5" + try: + self._save_project_h5(path) + self._push_recent_paths("postprocess_recent_project_paths", [path]) + self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) + self.statusUpdate.emit(f"Project saved: {os.path.basename(path)}", 5000) + except Exception as exc: + QtWidgets.QMessageBox.warning(self, "Save project", f"Could not save project:\n{exc}") + + def _load_project_file(self) -> None: + start_dir = self._settings.value("postprocess_last_dir", os.getcwd(), type=str) + path, _ = QtWidgets.QFileDialog.getOpenFileName( + self, + "Load postprocessing project", + start_dir, + "HDF5 project (*.h5 *.hdf5)", + ) + if not path: + return + self._load_project_from_path(path) + + def _import_project_source_paths(self, recent_paths: Dict[str, object]) -> bool: + proc_raw = recent_paths.get("processed_paths", []) if isinstance(recent_paths, dict) else [] + beh_raw = recent_paths.get("behavior_paths", []) if isinstance(recent_paths, dict) else [] + proc_paths = [str(p).strip() for p in (proc_raw if isinstance(proc_raw, list) else []) if str(p).strip()] + beh_paths = [str(p).strip() for p in (beh_raw if isinstance(beh_raw, list) else []) if str(p).strip()] + proc_existing = [p for p in proc_paths if os.path.isfile(p)] + beh_existing = [p for p in beh_paths if os.path.isfile(p)] + if not proc_existing and not beh_existing: + return False + + if proc_existing: + self._load_processed_paths(proc_existing, replace=True) + if beh_existing: + self._load_behavior_paths(beh_existing, replace=True) + self._refresh_behavior_list() + return bool(proc_existing or beh_existing) + + def _load_project_from_path(self, path: str) -> None: + try: + payload = self._load_project_h5(path) + except Exception as exc: + QtWidgets.QMessageBox.warning(self, "Load project", f"Could not load project:\n{exc}") + return + + settings_data = payload.get("settings", {}) + processed = payload.get("processed", []) + behavior_sources = payload.get("behavior_sources", {}) + tab_idx = payload.get("tab_sources_index", 0) + recent_paths = payload.get("recent_paths", {}) if isinstance(payload.get("recent_paths", {}), dict) else {} + + was_restoring = self._is_restoring_settings + self._is_restoring_settings = True + try: + self._clear_cached_analysis_outputs() + self._processed = list(processed) if isinstance(processed, list) else [] + self._behavior_sources = dict(behavior_sources) if isinstance(behavior_sources, dict) else {} + + self.lbl_group.setText(f"{len(self._processed)} file(s) loaded") + kinds = { + str((info or {}).get("kind", "")).strip() + for info in self._behavior_sources.values() + if isinstance(info, dict) + } + if len(kinds) == 1 and _BEHAVIOR_PARSE_TIMESTAMPS in kinds: + mode_label = "timestamps" + elif len(kinds) == 1 and _BEHAVIOR_PARSE_BINARY in kinds: + mode_label = "binary" + elif len(kinds) > 1: + mode_label = "mixed" + else: + mode_label = "timestamps" if self._current_behavior_parse_mode() == _BEHAVIOR_PARSE_TIMESTAMPS else "binary" + self.lbl_beh.setText(f"{len(self._behavior_sources)} file(s) loaded [{mode_label}]") + + self._update_file_lists() + self._refresh_behavior_list() + self._set_resample_from_processed() + if isinstance(settings_data, dict) and settings_data: + self._apply_settings(settings_data) + if isinstance(tab_idx, int) and 0 <= tab_idx < self.tab_sources.count(): + self.tab_sources.setCurrentIndex(tab_idx) + self._update_trace_preview() + self._update_data_availability() + finally: + self._is_restoring_settings = was_restoring + + proc_paths = recent_paths.get("processed_paths", []) if isinstance(recent_paths, dict) else [] + beh_paths = recent_paths.get("behavior_paths", []) if isinstance(recent_paths, dict) else [] + if isinstance(proc_paths, list) and proc_paths: + self._push_recent_paths("postprocess_recent_processed_paths", [str(p) for p in proc_paths if str(p).strip()]) + if isinstance(beh_paths, list) and beh_paths: + self._push_recent_paths("postprocess_recent_behavior_paths", [str(p) for p in beh_paths if str(p).strip()]) + + self._push_recent_paths("postprocess_recent_project_paths", [path]) + try: + self._settings.setValue("postprocess_last_dir", os.path.dirname(path)) + except Exception: + pass + + proc_raw = recent_paths.get("processed_paths", []) if isinstance(recent_paths, dict) else [] + beh_raw = recent_paths.get("behavior_paths", []) if isinstance(recent_paths, dict) else [] + proc_existing = [str(p).strip() for p in (proc_raw if isinstance(proc_raw, list) else []) if str(p).strip() and os.path.isfile(str(p).strip())] + beh_existing = [str(p).strip() for p in (beh_raw if isinstance(beh_raw, list) else []) if str(p).strip() and os.path.isfile(str(p).strip())] + has_referenced_sources = bool(proc_existing or beh_existing) + + imported_sources = False + if has_referenced_sources: + ask_sources = QtWidgets.QMessageBox.question( + self, + "Load project", + "Import linked source files from this project (last opened data)?", + QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No, + QtWidgets.QMessageBox.StandardButton.No, + ) + if ask_sources == QtWidgets.QMessageBox.StandardButton.Yes: + imported_sources = self._import_project_source_paths(recent_paths) + + if self._processed: + self._compute_psth() + self._compute_spatial_heatmap() + elif not imported_sources: + ask = QtWidgets.QMessageBox.question( + self, + "Load project", + "Project loaded without processed traces. Import current preprocessing selection now?", + QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No, + QtWidgets.QMessageBox.StandardButton.Yes, + ) + if ask == QtWidgets.QMessageBox.StandardButton.Yes: + self._pending_project_recompute_from_current = True + self.requestCurrentProcessed.emit() + + self._restore_cached_analysis_outputs(payload) + self._save_settings() + self._update_status_strip() + self.statusUpdate.emit(f"Project loaded: {os.path.basename(path)}", 5000) + def _save_config_file(self) -> None: start_dir = self._settings.value("postprocess_last_dir", os.getcwd(), type=str) path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save config", os.path.join(start_dir, "postprocess_config.json"), "JSON (*.json)") diff --git a/pyBer/gui_preprocessing.py b/pyBer/gui_preprocessing.py index 83d6126..2f32a9f 100644 --- a/pyBer/gui_preprocessing.py +++ b/pyBer/gui_preprocessing.py @@ -2593,6 +2593,14 @@ def show_raw(self, *args, **kwargs) -> None: - show_raw(time=..., signal_465=..., reference_405=...) - show_raw(time=..., raw_signal=..., raw_reference=...) """ + preserve_view = False + for key in ("preserve_view", "preserve_xrange", "keep_view"): + if key in kwargs: + try: + preserve_view = preserve_view or bool(kwargs.pop(key)) + except Exception: + kwargs.pop(key, None) + # Positional support: (time, sig, ref) t = s = r = None if len(args) >= 3: @@ -2622,7 +2630,8 @@ def show_raw(self, *args, **kwargs) -> None: self.curve_465.setData(t, s, connect="finite", skipFiniteCheck=True) r_scaled = self._scale_reference_to_signal(s, r) self.curve_405.setData(t, r_scaled, connect="finite", skipFiniteCheck=True) - self.set_full_xrange(t) + if not preserve_view: + self.set_full_xrange(t) self._clear_artifact_overlays() # Thresholds (either scalars or arrays): do not use "or" on arrays. @@ -2679,6 +2688,14 @@ def show_processing(self, *args, **kwargs) -> None: - show_processing(time, sig_f=..., ref_f=..., baseline_sig=..., baseline_ref=...) - show_processing(time=..., sig_f=..., ref_f=..., b_sig=..., b_ref=...) """ + preserve_view = False + for key in ("preserve_view", "preserve_xrange", "keep_view"): + if key in kwargs: + try: + preserve_view = preserve_view or bool(kwargs.pop(key)) + except Exception: + kwargs.pop(key, None) + if len(args) >= 1: t = args[0] else: @@ -2716,7 +2733,8 @@ def _set_curve(curve, y): dio = _first_not_none(kwargs, "dio", "digital", "dio_y") dio_name = _first_not_none(kwargs, "dio_name", "digital_name", "trigger_name", default="") or "" self._set_dio(t, dio, str(dio_name)) - self.set_full_xrange(t) + if not preserve_view: + self.set_full_xrange(t) def show_output(self, *args, **kwargs) -> None: """ @@ -2726,6 +2744,14 @@ def show_output(self, *args, **kwargs) -> None: - show_output(time, output, label="...", dio=..., dio_name=...) - show_output(time=..., y=..., label=...) """ + preserve_view = False + for key in ("preserve_view", "preserve_xrange", "keep_view"): + if key in kwargs: + try: + preserve_view = preserve_view or bool(kwargs.pop(key)) + except Exception: + kwargs.pop(key, None) + if len(args) >= 2: t, y = args[0], args[1] else: @@ -2743,7 +2769,8 @@ def show_output(self, *args, **kwargs) -> None: t, y = t[:n], y[:n] self.curve_out.setData(t, y, connect="finite", skipFiniteCheck=True) - self.set_full_xrange(t) + if not preserve_view: + self.set_full_xrange(t) label = _first_not_none(kwargs, "label", "output_label", default="Output") context = _first_not_none(kwargs, "output_context", "label_context", default="") @@ -2756,24 +2783,27 @@ def show_output(self, *args, **kwargs) -> None: # -------------------- Modern API (kept) -------------------- - def update_plots(self, processed: ProcessedTrial) -> None: + def update_plots(self, processed: ProcessedTrial, preserve_view: bool = False) -> None: t = np.asarray(processed.time, float) self.show_raw( t, processed.raw_signal, processed.raw_reference, dio=processed.dio, dio_name=processed.dio_name, - thr_hi=processed.raw_thr_hi, thr_lo=processed.raw_thr_lo + thr_hi=processed.raw_thr_hi, thr_lo=processed.raw_thr_lo, + preserve_view=preserve_view, ) self.show_processing( t, sig_f=processed.sig_f, ref_f=processed.ref_f, baseline_sig=processed.baseline_sig, baseline_ref=processed.baseline_ref, - dio=processed.dio, dio_name=processed.dio_name + dio=processed.dio, dio_name=processed.dio_name, + preserve_view=preserve_view, ) self.show_output( t, processed.output, label=processed.output_label, output_context=getattr(processed, "output_context", ""), - dio=processed.dio, dio_name=processed.dio_name + dio=processed.dio, dio_name=processed.dio_name, + preserve_view=preserve_view, ) self._update_artifact_overlays(t, processed.raw_signal, processed.artifact_regions_sec) diff --git a/pyBer/main.py b/pyBer/main.py index 0f49f7b..9d868f2 100644 --- a/pyBer/main.py +++ b/pyBer/main.py @@ -346,6 +346,8 @@ def __init__(self) -> None: self._pool = QtCore.QThreadPool.globalInstance() self._job_counter = 0 self._latest_job_id = 0 + self._preview_preserve_view_pending: bool = False + self._preview_preserve_view_by_job: Dict[int, bool] = {} # Debounce self._preview_timer = QtCore.QTimer(self) @@ -444,8 +446,8 @@ def _build_ui(self) -> None: self.btn_workflow_export, self.btn_plot_style, ): - b.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - b.setMinimumWidth(44) + b.setSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + b.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) for b in (self.btn_workflow_artifacts, self.btn_workflow_qc, self.btn_plot_style): b.setProperty("class", "blueSecondarySmall") @@ -485,8 +487,8 @@ def _build_ui(self) -> None: for btn in self._section_buttons.values(): btn.setCheckable(True) btn.setProperty("class", "blueSecondarySmall") - btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) - btn.setMinimumWidth(56) + btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + btn.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) workflow_row = QtWidgets.QHBoxLayout() workflow_row.setContentsMargins(0, 0, 0, 0) @@ -497,17 +499,22 @@ def _build_ui(self) -> None: workflow_row.addWidget(self.btn_workflow_qc) workflow_row.addWidget(self.btn_workflow_export) workflow_row.addWidget(self.btn_plot_style) - workflow_row.addSpacing(8) - workflow_row.addWidget(QtWidgets.QLabel("Parameters:")) - for btn in self._section_buttons.values(): - workflow_row.addWidget(btn) workflow_row.addStretch(1) + section_row = QtWidgets.QHBoxLayout() + section_row.setContentsMargins(0, 0, 0, 0) + section_row.setSpacing(6) + section_row.addWidget(QtWidgets.QLabel("Parameters:")) + for btn in self._section_buttons.values(): + section_row.addWidget(btn) + section_row.addStretch(1) + center_widget = QtWidgets.QWidget() center_v = QtWidgets.QVBoxLayout(center_widget) center_v.setContentsMargins(0, 0, 0, 0) center_v.setSpacing(6) center_v.addLayout(workflow_row) + center_v.addLayout(section_row) center_v.addWidget(self.plots, stretch=1) # Main splitter: data panel + visuals. Parameter popups are floating by default. @@ -709,6 +716,7 @@ def _build_config_actions_widget(self) -> QtWidgets.QWidget: ): btn.setSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Fixed) btn.setMinimumWidth(90) + btn.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) row.addWidget(btn) return panel @@ -732,6 +740,7 @@ def _toggle_section_popup(self, key: str, checked: bool) -> None: dock.show() dock.raise_() dock.activateWindow() + self._focus_first_editable(dock.widget()) self._last_opened_section = key else: dock.hide() @@ -1101,14 +1110,54 @@ def _is_text_entry_focused(self) -> bool: fw = QtWidgets.QApplication.focusWidget() if fw is None: return False + if isinstance(fw, QtWidgets.QAbstractButton): + return False if isinstance(fw, (QtWidgets.QLineEdit, QtWidgets.QPlainTextEdit, QtWidgets.QTextEdit)): return True if isinstance(fw, (QtWidgets.QSpinBox, QtWidgets.QDoubleSpinBox, QtWidgets.QAbstractSpinBox)): return True if isinstance(fw, QtWidgets.QComboBox) and fw.isEditable(): return True + parent = fw.parentWidget() + while parent is not None: + if isinstance(parent, (QtWidgets.QSpinBox, QtWidgets.QDoubleSpinBox, QtWidgets.QAbstractSpinBox)): + return True + if isinstance(parent, QtWidgets.QComboBox) and parent.isEditable(): + return True + parent = parent.parentWidget() return False + def _focus_first_editable(self, root: Optional[QtWidgets.QWidget]) -> None: + if root is None: + return + editable_types = ( + QtWidgets.QLineEdit, + QtWidgets.QPlainTextEdit, + QtWidgets.QTextEdit, + QtWidgets.QSpinBox, + QtWidgets.QDoubleSpinBox, + QtWidgets.QAbstractSpinBox, + QtWidgets.QComboBox, + ) + for w in root.findChildren(QtWidgets.QWidget): + if not isinstance(w, editable_types): + continue + if not w.isVisible() or not w.isEnabled(): + continue + if isinstance(w, QtWidgets.QComboBox) and not w.isEditable(): + continue + try: + w.setFocus(QtCore.Qt.FocusReason.TabFocusReason) + except Exception: + continue + if isinstance(w, QtWidgets.QAbstractSpinBox): + le = w.lineEdit() + if le is not None: + le.selectAll() + elif isinstance(w, QtWidgets.QLineEdit): + w.selectAll() + return + def _bind_shortcut( self, sequence: str, @@ -1122,7 +1171,7 @@ def _bind_shortcut( def _on_activated() -> None: if self.tabs.currentWidget() is not self.pre_tab: return - if require_non_text_focus and self._is_text_entry_focused(): + if self._is_text_entry_focused(): return callback() @@ -3070,7 +3119,7 @@ def _slice_trial(self, trial: LoadedTrial, start_s: float, end_s: float) -> Opti trigger_name=trial.trigger_name, ) - def _update_raw_plot(self) -> None: + def _update_raw_plot(self, preserve_view: bool = False) -> None: if not self._current_path or not self._current_channel: return doric = self._loaded_files.get(self._current_path) @@ -3101,6 +3150,7 @@ def _update_raw_plot(self) -> None: trig=trial.trigger, trig_label=self._current_trigger or "", manual_regions=manual, + preserve_view=preserve_view, ) self._update_plot_status(fs_actual=float(trial.sampling_rate), fs_target=float(params.target_fs_hz)) @@ -3119,7 +3169,7 @@ def _on_params_changed(self) -> None: try: params = self.param_panel.get_params() except Exception: - self._trigger_preview() + self._trigger_preview(preserve_view=True) return self._update_plot_status(fs_target=float(params.target_fs_hz)) sig = self._artifact_param_signature(params) @@ -3136,14 +3186,15 @@ def _on_params_changed(self) -> None: self.artifact_panel.set_auto_regions(auto, checked_regions=auto) # Update raw display for toggles like polarity inversion try: - self._update_raw_plot() + self._update_raw_plot(preserve_view=True) except Exception: pass - self._trigger_preview() + self._trigger_preview(preserve_view=True) - def _trigger_preview(self) -> None: + def _trigger_preview(self, preserve_view: bool = False) -> None: # persist params quickly self._save_settings() + self._preview_preserve_view_pending = bool(preserve_view) self._preview_timer.start() def _start_preview_processing(self) -> None: @@ -3166,6 +3217,9 @@ def _start_preview_processing(self) -> None: self._job_counter += 1 job_id = self._job_counter self._latest_job_id = job_id + preserve_view = bool(self._preview_preserve_view_pending) + self._preview_preserve_view_pending = False + self._preview_preserve_view_by_job[job_id] = preserve_view self._show_status_message( f"Processing preview... (fs={trial.sampling_rate:.2f} Hz -> target {params.target_fs_hz:.1f} Hz, " @@ -3186,6 +3240,7 @@ def _start_preview_processing(self) -> None: @QtCore.Slot(object, int, float) def _on_preview_finished(self, processed: ProcessedTrial, job_id: int, elapsed_s: float) -> None: + preserve_view = bool(self._preview_preserve_view_by_job.pop(job_id, False)) if job_id != self._latest_job_id: return # ignore stale jobs @@ -3207,9 +3262,10 @@ def _on_preview_finished(self, processed: ProcessedTrial, job_id: int, elapsed_s self.artifact_panel.set_regions(manual_regs) # Update plots (decimated signals) - self.plots.update_plots(processed) - # Auto-range on each update so file/time-window changes do not require manual reset. - self._auto_range_for_processed(processed) + self.plots.update_plots(processed, preserve_view=preserve_view) + if not preserve_view: + # Auto-range on each update so file/time-window changes do not require manual reset. + self._auto_range_for_processed(processed) log_msg = ( f"Preview updated: {processed.output_label} | fs={processed.fs_actual:.2f}->{processed.fs_used:.2f} Hz " @@ -3224,6 +3280,7 @@ def _on_preview_finished(self, processed: ProcessedTrial, job_id: int, elapsed_s @QtCore.Slot(str, int) def _on_preview_failed(self, err: str, job_id: int) -> None: + self._preview_preserve_view_by_job.pop(job_id, None) if job_id != self._latest_job_id: return self._show_status_message(f"Preview error: {err}") From 362265006618057d5ba863849874f1ae45ef3d2e Mon Sep 17 00:00:00 2001 From: andrianj Date: Fri, 27 Feb 2026 12:35:31 +0100 Subject: [PATCH 14/28] new GUI for postprocessing. Still needs work, but it's a start. Also added some more files to .gitignore. --- .gitignore | 3 + panel_layout.json | 57 ++++---- .../gui_postprocessing.cpython-311.pyc | Bin 473738 -> 480362 bytes .../gui_postprocessing.cpython-38.pyc | Bin 160817 -> 184360 bytes pyBer/gui_postprocessing.py | 126 ++++++++++++++++-- 5 files changed, 153 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 5d3af23..068b44e 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-38.pyc pyBer/__pycache__/gui_postprocessing.cpython-311.pyc pyBer/__pycache__/main.cpython-311.pyc +pyBer/__pycache__/gui_postprocessing.cpython-311.pyc +pyBer/__pycache__/gui_postprocessing.cpython-38.pyc +pyBer/__pycache__/gui_postprocessing.cpython-311.pyc diff --git a/panel_layout.json b/panel_layout.json index 7555115..bdf07e6 100644 --- a/panel_layout.json +++ b/panel_layout.json @@ -7,56 +7,67 @@ 375 ], "pre_main_dock_state": "", - "tab_groups": [], + "tab_groups": [ + { + "members": [ + "pre.artifact.dock", + "pre.artifacts.dock", + "pre.baseline.dock", + "pre.filtering.dock", + "pre.output.dock" + ], + "active": "pre.artifact.dock" + } + ], "sections": { "artifacts": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///86////gv///4L" + "geometry": "AdnQywADAAD///wt///86////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///86////gv///4L" }, "filtering": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///8fv///gv///4L" + "geometry": "AdnQywADAAD///wt///8fv///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///8fv///gv///4L" }, "baseline": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9Nf///gv///4L" + "geometry": "AdnQywADAAD///wt///9Nf///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9Nf///gv///4L" }, "output": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9P////gv///4L" + "geometry": "AdnQywADAAD///wt///9P////gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9P////gv///4L" }, "qc": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAACOQAAB38AAAMXAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAACOQAAB38AAAMX" + "geometry": "AdnQywADAAAAAAP9AAAB4AAABdsAAAKbAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAAB4AAABdsAAAKb" }, "export": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAADGgAAB38AAAOTAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAADGgAAB38AAAOT" + "geometry": "AdnQywADAAAAAAP9AAACngAABdsAAAMEAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAACngAABdsAAAME" }, "config": { - "visible": false, + "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAADlgAAB38AAAPaAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAADlgAAB38AAAPa" + "geometry": "AdnQywADAAAAAAAAAAADBwAABdsAAANLAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAADBwAABdsAAANL" } }, "artifact": { - "visible": false, + "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAWhAAAAAAAAB38AAAIUAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAWhAAAAAAAAB38AAAIU" + "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAAG7AAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAAAAAAABdsAAAG7" } }, "post": { @@ -66,37 +77,37 @@ "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALFAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAP9AAAAAAAABdsAAALF" + "geometry": "AdnQywADAAAAAAP9AAAAAAAABdsAAALFAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAP9AAAAAAAABdsAAALF" }, "psth": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" }, "signal": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" }, "behavior": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" }, "spatial": { "visible": true, "floating": false, "area": 2, - "geometry": "AdnQywADAAD///wt///9TP///gv///4LAAAAAAAAAAD//////////wAAAAIAAAAAB4D///wt///9TP///gv///4L" + "geometry": "AdnQywADAAD///wt///9lP///gv///4LAAAAAAAAAAD//////////wAAAAAAAAAAB4D///wt///9lP///gv///4L" }, "export": { "visible": true, "floating": false, "area": 8, - "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAIAAAAAB4AAAAAAAAAC6gAABdsAAANL" + "geometry": "AdnQywADAAAAAAAAAAAC6gAABdsAAANLAAAAAAAAAAD//////////wAAAAAAAAAAB4AAAAAAAAAC6gAABdsAAANL" } } } diff --git a/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc b/pyBer/__pycache__/gui_postprocessing.cpython-311.pyc index 55316d47a93af85a0563c2a9c1864fab6b0376ff..0dcca61a1ca92fb085ffcec671261c1e77b90e0a 100644 GIT binary patch delta 41544 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