From 6b96d0cdaac4c60f8173d43d6a2c6de3ca91f4ac Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Wed, 26 Jun 2019 17:25:22 +0200 Subject: [PATCH] initial import --- .gitignore | 11 ++- README.md | 25 +++++- S3 Print Log Report.spec | 36 ++++++++ images/program_icon.ico | Bin 0 -> 28085 bytes images/program_icon.png | Bin 0 -> 27233 bytes images/program_icon.xcf | Bin 0 -> 83698 bytes images/water-drop-png-icon-8.png | Bin 0 -> 36950 bytes requirements.txt | 7 ++ run_gui.py | 6 ++ s3printlog/__init__.py | 1 + s3printlog/analysis.py | 123 +++++++++++++++++++++++++ s3printlog/gui.py | 141 +++++++++++++++++++++++++++++ s3printlog/logparser.py | 147 ++++++++++++++++++++++++++++++ s3printlog/main.py | 81 +++++++++++++++++ s3printlog/report.py | 149 +++++++++++++++++++++++++++++++ 15 files changed, 725 insertions(+), 2 deletions(-) create mode 100644 S3 Print Log Report.spec create mode 100644 images/program_icon.ico create mode 100644 images/program_icon.png create mode 100644 images/program_icon.xcf create mode 100644 images/water-drop-png-icon-8.png create mode 100644 requirements.txt create mode 100644 run_gui.py create mode 100644 s3printlog/__init__.py create mode 100644 s3printlog/analysis.py create mode 100644 s3printlog/gui.py create mode 100644 s3printlog/logparser.py create mode 100644 s3printlog/main.py create mode 100644 s3printlog/report.py diff --git a/.gitignore b/.gitignore index 7f7cccc..418abea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# example data +example 1/ +example 2/ + # ---> Python # Byte-compiled / optimized / DLL files __pycache__/ @@ -29,7 +33,7 @@ var/ # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest -*.spec +.spec # Installer logs pip-log.txt @@ -58,3 +62,8 @@ docs/_build/ # PyBuilder target/ +# Jupyter +.ipynb_checkpoints/ + +# Visual Studio Code +.vscode \ No newline at end of file diff --git a/README.md b/README.md index e194023..03291fa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,26 @@ # s3printlog -Generates a report as pdf from a Scienion S3 print log folder \ No newline at end of file +Generates a report as pdf from a Scienion S3 print log folder + +The following packages are required and can be installed via ``pip install -r requirements.txt`` + + black + pandas + matplotlib < 3.1 + seaborn + reportlab + openpyxl + pyinstaller + +To build the app use the following command: + +``pyinstaller --onefile -i images\program_icon.ico "S3 Print Log Report.spec"`` + +To have it working on the computer attached to the S3 printer, you need to use a 32 bit python version 3.7 + +Hint: If pyinstaller throws a "TypeError", you might need to replace a file due to a bug in pyinstaller. + - [stackoverflow question on this][1] + - [fixed file on github][2] + +[1]: https://stackoverflow.com/questions/54138898/an-error-for-generating-an-exe-file-using-pyinstaller-typeerror-expected-str +[2]: https://github.com/Loran425/pyinstaller/commit/14b6e65642e4b07a4358bab278019a48dedf7460 diff --git a/S3 Print Log Report.spec b/S3 Print Log Report.spec new file mode 100644 index 0000000..c2f821e --- /dev/null +++ b/S3 Print Log Report.spec @@ -0,0 +1,36 @@ +# -*- mode: python -*- + +block_cipher = None + + +a = Analysis( + ["run_gui.py"], + pathex=["C:\\Users\\Holgi\\Developer\\python-libraries\\s3-print-log"], + binaries=[], + datas=[("images\\program_icon.ico", ".")], + hiddenimports=[], + hookspath=[], + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name="S3 Print Log Report", + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + runtime_tmpdir=None, + console=False, + icon="images\\program_icon.ico", +) diff --git a/images/program_icon.ico b/images/program_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..39c752b107ea753e7eaf5186c58e6b6cb7e6828b GIT binary patch literal 28085 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 KHB!_qJpK>k8Nh@9 literal 0 HcmV?d00001 diff --git a/images/program_icon.png b/images/program_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a9fd48a00852c6e30255c4338619bda566bdf7 GIT binary patch literal 27233 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 literal 0 HcmV?d00001 diff --git a/images/program_icon.xcf b/images/program_icon.xcf new file mode 100644 index 0000000000000000000000000000000000000000..f91049cd309f596ee067717e89d61b8b8928a8fd GIT binary patch literal 83698 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�bBe=p|B^H6P)(sX|wzZ6n!(rvcuDs17z}SpvdIVyaS;qEZ zB9Y;nR+o!-h84Rd3IiIuWxp9N7<1Zqt`y_C(lX~l$V6DO5Bmvx`^>6Y4DpnM`}<*n z(dm|Bj_`!`NetFnasgS!q49E<8_yPjU9mgvXq6i6&lX^`W6R*rW3hcM2A{QW05C&9 zrrkpX){ZS>aReNMu>o%@H{d0)23TabjF*alZ|J{6!)50NJVL42g#3eX48MV?~OeP21Za z(qNHgPLe%rE|LIgtV$LP<85qdqdNM~K-tk|6-4nCmU)BhZu3DQL*TD*0XoBYsP=IX zwg_Rhf4B2pTu;9n%^Gy8@u2(|=na4X1U;;RT!CaDfB>KUY;#C~SMnBs7ryYh3b=qz zdM>i~Nl&1W{CH=7AQ+IWc&|*&^}q_meY_9u{6Rb$06Z%L+U=65`6}=OABngfsMbc{ z)1Jvhld@`=nj00!Edi#q6y`W!9I&q3l&QG^2-5;U3xKhA3BaZKW(h6^cCcr23;kf9 zL>Y5DcGl+!b2c!hu`q9e1d&TnE&$?y=L)$?KWa539RN=1S_wEt_67(S*xO&UMIld% zFM&K6!f3k_@(&QG!;cDqI_(7lxrEVqKOzPIi8>!pNQAT%c2ID)erqC92TDgkq_#f- zkr1Sy1-DuNnTozt$dtVW$ONe=bpxa(AXL;^AQa*stOm+pFT!$2Fo>0~1W;AR7Qh zzH9*$0p{*(OGV47`LTmSlf9kfmjU;8CZ-&~rvbw-B@&p@nV52*Gnn6J?e9c24Fk1< zf|eiK0$T79y`3#EBSzvmMG9iJWCLO#SZqjzU;(IEiw)a=8gsQ2pHOQ84%z^}6$>qb z3yX#JNz@rHQO6t%&<6PUdMNPO#g77Dr}SpTe*}n|Ya|F^&=bl50hGG{2n2LS zey9y_9f-6gSt63T3P~diphDph5JOxt`vdC%PkW0cJeli}0p?U0C#18EFjlLglrxgJt z%ziSWhxs8Ag!z~Ygn(#LDuaI@0B%#@1=>(TK_%)NnPQ|iW89E(6+UD&l5~OZDl@2v zxgALwC81IPh*_ipkSs%zD$G7W4O*}QP>&*A*ZEfE|#*6IRuk0kZgAYiDVe(Qt}zA@a*RTsmz$qDp;!mtRaf( z(IVg)6vAf}yp0FEwZlVmfp6`JZxZH)DH-YeB*;h|`80}3WnF^&jK%yneq84Ue zATbjVLg~yLA(7MEj0C_rO5x{Lg`cB=pK+GCRl(>;De&S-iKfG)5QkDEs1BA|DxOew zVu*2iFm~9kzq3VsWK8B2Qq(Der~^IiMwRSUg3l-w*Ll5?e=xUF3|fi=Vo-9mOwGwM zE8iR1^)Hz{EX>I`Kn|A)RlRjOhIL@H>EH>qTs60j;DVBxz| zH>hN*61UpQSU-R+`Gu|xO86>*&;=Q6vP#w{5iCVU2{MPOWSL6#B7ySRT}Bcz7pP>T zlG3svok3U|sgg&L*pUEoiW_nYlGRFFsRVaIYI%g>3g!<6q+Z1TuHzJ47^m9YiQqv0 zZ{-(z3r-~u{lblz9?5Do;j6DQW1LV~GfU*Ok1-@wkK_EHO)A=|lATHs8L32pzbjFo z4@7}9%Uq!(f+DG$m^Z3quaXZ&K|X+(uwID?ou!yyE>+S(b+VKe%*iVGKLg+84xyR zsbrIqIod)og6J_{C7&uasX|I1=1nTuh6Hj*g%U?@P{~#$mC(3UK-Enq8|5@`}7vf zz!JtZ!`}rK3tI5+mvHQhdc*Clftkr^A2ZM7b4&8p(l=sjvcKJVi}~RVxY!N7ht$k) zHBk-lT>+mBcq~GlX+j;cHdh543^4xTm#+e(a<&l$0S5x^3$US@{LZPwM8MSngMbGD zUIaeS8*XSf4P%qwy~7w;g9ig%0Eng56GH)42iy{HDBx+}oZfI5@fENw;D&%Z0`3oZ z1|S5RCiDWf1Y8$zFyQk6PXv4&*x)gE*R$cSfExmC4Y)Vp(SRcW;oKBq9B@v+-hht< zd?w&?0S^Q`2^`BLez(2{|9lDmJa=xmJtFU$1HRPYtv8moM8a@?!0iE#14KQmThznG zz~Bc0Y48|82s9m$&{Y8k$8iz=_G*Mj+X#YGo9LECRTkzC-OlJ9te05 zAdcD);nYV1ZVz}c;00jg+;Dx1vG^22Ehw?Up@64>O>@I#5q_Zw_NN;H?g+R);2D6V z)N~8Yh9r9Y>AHY}0iO?eBH-)5mbu}n5yR~YxFO)yfO`WT4LAa@dyS{p56@}Q-f(Zg z#{xbR@VS5o0-gjGV-`I5W&D#Y#j*zX1FjADc)-Dcy92%u@KC^00nZ1# z29WYt#pVWJ-UyolE(^FO;QD|A0XGNS9&lH{JpqRT?hiN|@OZ#i0-g?dHsDCWivh0$ z#GN9B--w@H4|pTs&4A$|kZ;L9$Un~y%a6`4%CF5qUC%h*t)y`*&c%3z>3&U2qnz$J`Ok=7N(``!Gyx=OB!wiQB)ufrB=sZ_B`qaMC1puqNoRno zE|6<*uE@DQ=W3m6cdq2F>jVO>@<6Wn83ANGkkLWL3Puiu8paVoMim)jWW(K$1pMND@lYOOj1ePZCkm zQj%0smIRh`2Ds<~xdi8eoXc}A*12@&LhiCoIN%}=Rc22R8%6%1(yDaxyxdQ{tFpTpJW*^8*n2P{1Ghv>BlDSz6AafX*(J;S3 z(!*@WIQL;Dgrbyr5g@Z9=1fSWm_ZrmQ_QZAaxvF3&b*k1Avt4KW}KrjV?!~_{0)%V z9CJIF=>a0|^Hxg(WmX6Q;jX{*pD0}U`BFD>7Ceu+t0j#I2@SWbizSUYNz*uQK)|Rr;lyxV-DiozDYf^v}D(-A=y{gJrSGN}~fRp8%EbgF(X|*0I+?IZ_5Y#>P z%;N%Pb*TZH;{`I~YyS7-$OZ%EhS$yE_pNqp-uNU#mr+g`bxTVzlX#AdbIU)UFxRrt zfVt_lk*NmETdy(ZQ2n(uQ7b@GQeNgi+8z(4xE}#U7>oATm)3LM);%gy=(=NU27MI~0)+ zX{dW6wzwyP3gsrHK1neO@q^M7A_j#jL<-7QO2tyDmK3=_eo9_oJq0lEoN^d=PH{|W zWuUgEohdC1Y^JmZ8dGQke<{0xxD?^QSW0rBDg`=Fm2#a@@06Mc0bx`3l-j4%KL`z* z8mQDkDHaOl(1cSR7YR+0Qc1^3N`|<#Ny|!VR?;&T=O#rfX&R56X;QV4u9cLHHCSa^ z>fFu@)f-f&1`di-5my2^o-xw|b0wfFr7%3Ea2Os_MhuTBDlUyN)vl&FhPs*t8O~CY z3}-1&F1>Q;m!T)+%p-aVtuw^bw9hcoosE$~84VXTr8FF*aGD3pG#z!ys$rhH>CBy* z&pfMoO{nVwjhkv0wo$`dlHQW|mgKi2z$FQWTAD<-B*RcjlMt7rn5%P!662B_mjt;a z$pl9#l(`5^uv`M>5;T{A0Qs7bs z!)Q$@43jAwE*){{iXky&#-%!jyqXFb)>4#Q8s*X~mxdXtYMN#!s%e~|sHS-?4K&o$ zG|{1uCeNPtjTpHRd#$`<#OPOzeU=`(IB$}zCVwXMX#)Qe{KFEr*Z=@aw1$9c5FnPh z)P@0gp*0XxL%~co7;MjmgK9t^9BB;+a6oHNAOfLXVX$T*?wGo*3GereWcVXp{z$1$ zFwq*4nCY!SY1FaA6mKm|qn@Twm(!^4>3zL7qZ4X<^+t`lrAGZzqmHUkkJYH_YSf1{ z>dYGTYK_~sc(_e;bP;RW;Wb!3af~a8tzIIw8uc-aTbsu1PMsd8abr}cTdLDT)#?ps|HIZ3H~qUT2B*=T-D{& z>3!;SM0Fdb=5#dsTyLx+LR`zTSrgqPxIXgjGD-w5)kJcm}svgZsqxK~p4i*hf zqZX%4bJ_GXYJ=kW>CqT9YLyx_PmS8C)>nhoxaVrrhQ)o+vomYltu^l88h3S#JH1Gk zWxM-`1qdEnJI4icZ+*@7j%xRSAzS+gw{UOmAVh<$J*3)2&V=S{AAt>9JIQG%CT%Z) z23xxc0bOf9f&W@NO0}mze63xj+E+&XETaw=!m-x11;@26u2EZ;U0&IhJ{tZc2`%{Z zB+31M`?~4-}vJ{anp^T`oxdgxk|ft`>)#42mEv_ZRs@Z zwZH9yY`sa5wEwEZ++W9k{qujCfBi@p5kmj`dwTuZzr^Syo_z*;A>Nqp>0k8cz5YcH zVUJ>uV}IN0Uwk_Deb|lI-PkL={zgv2MmmT$uE5q{Ct-9GZ+sv2Q@#Esnj|-!hh2ni z#xB8jU=Q~Co3FvX7o*#F^ABJ*U~~{~q1$-N0qiF1lh~)RTQEA0xBM*jM6bW~E{rbX zt#kly+{xJ62+Av2_^7w}bBP9cN-^W9MQQVw*5z!aKJ2 z`a5ZP*m*^-{~>K3_8r)FW7lFI#l9cA9{VBeN3b8mKGEy%(tfhn-_7yw=JC>^F!EVKV4*M+jix{6V z%V*5;8MA!GET1vUXUyV1v-r>K7cu;27XO+3GWM`@1J3L6A-yh_k!jgQVr2&j=S#>T zZy`Cnk&VlRmJHSE+@kvCdF zvS_ek7x@_iZyrHJy5STO2R_WhM*{M2L4SP#+w#rrZ+!n!Mbj+a%P#K?rthRU)~Bh@ z*SE17yOhCfVG!rJ2c2OL%8hwQcb&}ltsx^dZNh1WgwtU8mA%2rN9Tsh)_MFL$3nr4 z|9Qg^|Ug5I0(~Mmoom{4CX_ej-4c_Ji#9%fj>jq-V?oz+`K1y zGlSej*4>kSF?}AM_zP$aIiEp$0nR0B&Yt5idyWBKt7cy{zirR90oWj5K|DUp4~h@r zM7x!-Sfy0eiju85)`YC~*x{op*RqUV+BOT>KBRoujIjD+g~{sYo+t@dzdV(zvYsgc&pwv&!}D;rfk78iQ9GMVMQG8#T@U2?E>+v zVVv##jPY#7`0edNaf>+o<}|YkGh`LGMOC|I`T+O+YS)dMHj%+xjsLB}pH?uo<&13^ zqnK*f@bWf3?oc_HChF8fyqY?fp5hhdVai;b;X0}=+#8G2In&0-Erhr>n>nSMxHcP` zBRN){k=%UJ@#<9EdZ>+A=c;jYTOuaQ`sQekUuSdh+}pSv05>i(Z+n;=$jEofk5;k; zKg=*0t6P*k9cS{oYh9<(2V&s!oog%2KU&wxx{l`L)O5IVjt$HZ9mEM+PU5T&M;SiX zvT?S!+G7^}@*b+{`ix{yescne=JK7@TpYmk?zSN&1V*?*d zzukSh?o=0_yZqs!Yun^4CvXz$2&Al^BW0~GIG@WOAn&>GiPe11(vDAXgS3%fc%I8Q zNHjm!3UfO+)!RotBEjg(o@RNfe1!_y;gr!%|rfW4HO8+VH=n{w|A_>UmWG>c`x#(Wpo@fzzxZa+E<_l2?#HIO^D0B{Nr>@YeF!Vm8@L&n@rOgPU?^$spJlcU9}#@h+5ipHd}qBGacGHI>Mb+pW- zu*`)@i}T$`rv7)hH#lK&y6JjQuxd>Cn)WdiroCnK7)gzyMi68hq$?d1CAgYsU22dX ziXw_8Txm4vqO40Bu9}*wP?@VyS<#7T2vjDubS-9k%zDG5vY7e70Q!sPwU&^=II23j zh-2dD;wXds>PRELi6f08rq(pmv@;&`*y6zJ1O$#xLY<7j;L$oUV~mqiCuxiu{7U6B zbIc&FEsSO0iC$M=@kErtut z{Q4cT6G>uW{;=S?Fy}19PyTL_%lvtg^AN{KgkcRYiW>rQt~^7Z7pRqI({#Sn!R zUx*cVh!u|%R=gs1W0{I?#EN^wiigCClPYc!E1nXKv9yZ2#EQo%J`>-`Q@a1|x$CYr zzV5C@zOI$3uvW6dZk*ujiXX&oY|)K5eBEX8?y4|eYt>$jXX$teSGEvSup0_=!-WbZ zDy|YM3aR)@)L$yjt+-c=ltI5o)wVKK0)mPcj3X+x zsCdIzr1o@1dbQUxBJBFbQD3uz=HM%+jsRN;##HXc6qd&^o0V}xq`8x;&63Ai0b@5r zuCTen=nAV5s~Tlj>>vAqEt%?2_8N1mb~v%WP&ga&srDhYLy9@1q%7u9?WkgZqavh9 z(cE~s6>=}8joiRHL*g`?Ak=?6ItDkc#mU8{+|`vMT(s@IT^L*hiuAi2ReaRto-WVG zEnPk-4w>YP;)qFJ(7(&4%byQ(5Cf9I_;Y!&9$cR571U$Bdf}-pjia-clj@*4r!k>k zc~pczH~4{iA$Czwq!pv^uOfr1RSG)UkLRbqovo(b|FEYwlU5kzr&PS*6@ccQW=c z&KUF_DUy<)ik$qj%n%kI)n8Wtq(j!HWU^K#EC(#-t5wd`tsHLB(Yg-iN>h#%P8Hr% zo>X3xDe3Z_@|@%!WINIjQk{9(zvfT)k@VtKk1NiK5rk@#B71nTWelSVqX;7hFR=7B zSOcL=Q8OhoB?V+&-XeV%C-9v;is}M%qRx^9-gq8LQqj2<*32#;a(YC^uyJ z$m#8zo#NelxJ~C<_=6ca7bX4GKkw=ed{0Yq9Ls z_Kp6j&XGk6{X^gIQ}heT$4EuO@zeALua2zZ=wy>DmH6Q@hhM;jS@rO^T2Q><>T|q? d0)UeD?}xRTIrl|x_oMd*?#JHD*Q0yU{}0pUsmTBU literal 0 HcmV?d00001 diff --git a/images/water-drop-png-icon-8.png b/images/water-drop-png-icon-8.png new file mode 100644 index 0000000000000000000000000000000000000000..368462d2ed40e92fcdb528e49bc104db5a4c5a17 GIT binary patch literal 36950 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 literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0db063b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +black +pandas +matplotlib<3.1 +seaborn +reportlab +openpyxl +pyinstaller \ No newline at end of file diff --git a/run_gui.py b/run_gui.py new file mode 100644 index 0000000..2090a49 --- /dev/null +++ b/run_gui.py @@ -0,0 +1,6 @@ +# import s3printlog +# s3printlog.run("example 1") + +from s3printlog import gui + +gui.run() diff --git a/s3printlog/__init__.py b/s3printlog/__init__.py new file mode 100644 index 0000000..17289c7 --- /dev/null +++ b/s3printlog/__init__.py @@ -0,0 +1 @@ +from . import gui diff --git a/s3printlog/analysis.py b/s3printlog/analysis.py new file mode 100644 index 0000000..db45ae5 --- /dev/null +++ b/s3printlog/analysis.py @@ -0,0 +1,123 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import pandas as pd +import seaborn as sns +import pathlib + +from .logparser import CheckWhen, CheckResult + +# set plotting styles +sns.set_style("darkgrid") +sns.set_style( + "ticks", + { + "legend.frameon": True, + "xtick.direction": "in", + "ytick.direction": "in", + "axes.linewidth": 2, + }, +) +sns.set(rc={"figure.figsize": (12, 6)}) +sns.set_context("paper") + + +def generate_point_plot(df, figure_index, what, y_limit, y_label, colors, hue_order): + ax = sns.pointplot( + data=df, + x="well", + y=what, + hue="when", + hue_order=hue_order, + style="when", + markers=list("X."), + ax=figure_index, + style_order=hue_order[::-1], + palette=colors, + join=False, + ) + ax.set_ylim(y_limit) + ax.set_ylabel(y_label) + return ax + + +def adjust_common_figure_style(ax): + show_ticks = [] + selected_tick_labels = [] + source_columns = set() + for i, tick_label in enumerate(ax.get_xticklabels()): + well = tick_label.get_text() + column = well[0] + if column not in source_columns: + show_ticks.append(i) + selected_tick_labels.append(well) + source_columns.add(column) + + ax.set_xticks(show_ticks) + ax.set_xticklabels(selected_tick_labels) + ax.xaxis.grid(True) + ax.set_xlabel("") + + +def generate_figure(*args): + ax = generate_point_plot(*args) + adjust_common_figure_style(ax) + + +def generate_drop_check_chart(df): + df_sorted = df.sort_values(by="path", ascending=True) + colors = sns.palettes.color_palette() + hue_order = [CheckWhen.PRE_RUN.value, CheckWhen.POST_RUN.value] + palette = {CheckWhen.PRE_RUN.value: colors[1], CheckWhen.POST_RUN.value: colors[0]} + + plt.clf() + # figsize looks strange, but is fittet for pdf report + fig, axs = plt.subplots(nrows=3, sharex=True, figsize=(8.75, 8.75)) + + generate_figure( + df_sorted, axs[0], "distance", (0, 400), "Distance [pixels]", palette, hue_order + ) + generate_figure( + df_sorted, + axs[1], + "traverse", + (-100, 100), + "Traverse [pixels]", + palette, + hue_order, + ) + generate_figure( + df_sorted, axs[2], "volume", (0, 600), "Drop Volume [pl]", palette, hue_order + ) + axs[-1].set_xlabel("Print Solution Well") + + +def generate_environment_graph(df): + plt.clf() + fig, axs = plt.subplots(nrows=2, sharex=True, figsize=(8.5, 5.8)) + + ax = sns.lineplot(data=df["temperature"], ax=axs[0]) + ax.set_ylabel("Temperature [°C]") + ax.set_ylim((10, 40)) + ax.set_xlabel("") + + ax = sns.lineplot(data=df["humidity"], ax=axs[1]) + ax.set_ylabel("Humidity [%rH]") + ax.set_ylim((10, 90)) + ax.set_xlabel("Date and Time") + + +def find_missing_drops(df): + mask = df["result"] != "ok" + missing = df.loc[mask].copy() + pivot = missing.pivot(index="well", columns="when", values="well") + if "pre run" not in pivot.columns: + pivot["pre run"] = np.nan + if "post run" not in pivot.columns: + pivot["post run"] = np.nan + pivot = pivot.fillna("") + # remove labels for post run fails if there are pre run fails + pivot["nodups"] = pivot["post run"] + mask = pivot["pre run"] == pivot["post run"] + pivot["nodups"][mask] = "" + return pivot.drop(columns=["post run"]).rename(columns={"nodups": "post run"}) diff --git a/s3printlog/gui.py b/s3printlog/gui.py new file mode 100644 index 0000000..81ca932 --- /dev/null +++ b/s3printlog/gui.py @@ -0,0 +1,141 @@ +import sys +import tkinter as tk +import tkinter.ttk as ttk + +from pathlib import Path +from tkinter import filedialog + +from .logparser import get_log_files, DROP_CHECK_SUFFIX, ENVIRONMENT_SUFFIX +from .main import process_log_folder, open_with_default_app + + +if getattr(sys, "frozen", False): + # we are inside the standalone gui app + icon_path = Path(sys._MEIPASS) / "program_icon.ico" +elif __file__: + # this should be the normal cli thingy + icon_path = Path(__file__).parent.parent / "images" / "program_icon.ico" +else: + # there's something strange + icon_path = None + + +def validate_folder(folder): + dir_path = Path(folder) + drop_checks = get_log_files(dir_path, DROP_CHECK_SUFFIX) + env_log = get_log_files(dir_path, ENVIRONMENT_SUFFIX) + if drop_checks and env_log: + return folder + else: + return None + + +class StatusPanel(tk.Frame): + def __init__(self, parent): + tk.Frame.__init__(self, parent.master) + self._parent = parent + self.label = tk.Label(self, bd=1, relief=tk.SUNKEN, anchor=tk.S) + self.label.pack(fill=tk.X) + self.pack(fill=tk.X) + + def set_text(self, text): + self.label.config(text=text) + self.label.update_idletasks() + + def clear_text(self): + self.set_text("") + + +class FilePanel(tk.Frame): + def __init__(self, parent): + tk.Frame.__init__(self, parent.master) + self._parent = parent + self.btn_files = tk.Button( + self, text="Select Folder", command=self._parent.select_folder + ) + self.btn_files.pack(pady=5, padx=5) + self.label = tk.Label(self, anchor=tk.CENTER) + self.label.pack(fill=tk.X, pady=5, padx=5) + ttk.Separator(self, orient=tk.HORIZONTAL).pack(side=tk.BOTTOM, fill=tk.X) + self.pack(side=tk.TOP, fill=tk.X) + + def set_text(self, text): + self.label.config(text=text) + self.label.update_idletasks() + + def clear_text(self): + self.set_text("") + + +class ActionPanel(tk.Frame): + def __init__(self, parent): + tk.Frame.__init__(self, parent.master) + self._parent = parent + self.btn_quit = tk.Button(self, text="Quit", command=self._parent.quit) + self.btn_quit.pack(side=tk.LEFT, pady=35, padx=35) + self.btn_go = tk.Button(self, text="GO!", command=self._parent.generate_report) + self.btn_go.pack(side=tk.RIGHT, pady=35, padx=35) + self.pack(fill=tk.X) + + def disable(self): + self.btn_go.config(state="disabled") + + def enable(self): + self.btn_go.config(state="active") + + +class Application(tk.Frame): + def __init__(self, master): + master.minsize(height=150, width=400) + tk.Frame.__init__(self, master) + self._master = master + self.selected_folder = None + self.pack(fill=tk.BOTH) + self.file_panel = FilePanel(self) + self.action_panel = ActionPanel(self) + self.status_panel = StatusPanel(self) + self.reset() + + def reset(self): + self.status_panel.clear_text() + self.action_panel.disable() + + def select_folder(self): + self.reset() + opts = {"initialdir": "~/Desktop", "mustexist": True} + selection = tk.filedialog.askdirectory(**opts) + if selection: + self.selected_folder = validate_folder(selection) + self.set_active_state() + + def set_active_state(self, event=None): + if self.selected_folder is not None: + self.file_panel.set_text(self.selected_folder) + self.action_panel.enable() + else: + self.file_panel.set_text("This is not a S3 Print Log Folder") + self.action_panel.disable() + + def quit(self): + self._master.quit() + + def generate_report(self): + self.status_panel.set_text( + "Generating report, PDF should be opened in a couple of seconds" + ) + report_file = process_log_folder(self.selected_folder) + open_with_default_app(report_file) + self.status_panel.set_text("Report Generated.") + + +def run(): + root = tk.Tk() + root.title("S3 Print Log Report") + if icon_path is not None: + root.iconbitmap(str(icon_path)) + app = Application(master=root) + app.mainloop() + try: + root.destroy() + except tk.TclError: + pass diff --git a/s3printlog/logparser.py b/s3printlog/logparser.py new file mode 100644 index 0000000..470464c --- /dev/null +++ b/s3printlog/logparser.py @@ -0,0 +1,147 @@ +# basic imports +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import pandas as pd +import seaborn as sns +import pathlib + +from collections import namedtuple +from enum import Enum +from io import StringIO + +DROP_CHECK_SUFFIX = ".cor" +ENVIRONMENT_SUFFIX = "_Logfile.log" + + +class CheckWhen(Enum): + PRE_RUN = "pre run" + POST_RUN = "post run" + + +class CheckResult(Enum): + OK = "ok" + FAIL = "fail" + SKIPPED = "skipped" + + +class LogResult: + def __init__( + self, + path, + well, + result, + distance=np.nan, + traverse=np.nan, + volume=np.nan, + when=None, + ): + self.well = well + self.path = path + self.result = result + self.distance = distance + self.traverse = traverse + self.volume = volume + self.when = when + + def as_dict(self): + return { + "well": self.well, + "path": self.path, + "result": self.result.value, + "distance": self.distance, + "traverse": self.traverse, + "volume": self.volume, + "when": self.when.value, + } + + @classmethod + def from_file(cls, path, encoding="iso-8859-1"): + with open(path, "r", encoding=encoding) as file_handle: + lines = file_handle.readlines() + + # get x and y values, will be distance and traverse + xy_line = lines[1] + x_part, y_part = xy_line.split("\t") + x = parse_str_value(x_part, float) + y = parse_str_value(y_part, float) + + # get other data values + for line in lines: + if line.startswith("Well"): + well = parse_log_line(line, str) + if well.startswith("1"): + # the source plate number is encoded, we remove it, + # our printers have only one source plate + well = well[1:] + elif line.startswith("Drop Volume"): + volume = parse_log_line(line, float) + + # check for status + if path.stem.lower().endswith("ok"): + return cls( + path, well, CheckResult.OK, distance=x, traverse=y, volume=volume + ) + else: + return cls(path, well, CheckResult.FAIL) + + +# helper functions + + +def parse_str_value(str_data, cast_to, default_value=np.nan): + try: + return cast_to(str_data.strip()) + except Exception: + return default_value + + +def parse_log_line(line, cast_to, default_value=np.nan, separator="="): + _, str_data = line.rsplit(separator, 1) + return parse_str_value(str_data, cast_to, default_value) + + +def get_log_files(folder, suffix=".cor"): + visible = (p for p in folder.iterdir() if not p.name.startswith(".")) + return [p for p in visible if p.name.endswith(suffix)] + + +def parse_log_files(log_list): + pre_run = dict() + post_run = dict() + well_list = list() + # use the files sorted by date and time + for path in sorted(log_list): + log_result = LogResult.from_file(path) + if log_result.well not in pre_run: + log_result.when = CheckWhen.PRE_RUN + pre_run[log_result.well] = log_result + # we keep a separate list of wells in the order they appear + # there might be skipped wells after the pre run check + well_list.append(log_result.well) + else: + log_result.when = CheckWhen.POST_RUN + post_run[log_result.well] = log_result + + skipped_runs = {well for well in pre_run if well not in post_run} + for well in skipped_runs: + post_result = LogResult("", well, CheckResult.SKIPPED, when=CheckWhen.POST_RUN) + post_run[well] = post_result + + parsed_files = [] + for well in well_list: + parsed_files.append(pre_run[well]) + parsed_files.append(post_run[well]) + + return pd.DataFrame([pf.as_dict() for pf in parsed_files]) + + +def parse_environment_log(log_file_path): + with open(log_file_path, "r", encoding="iso-8859-1") as file_handle: + env_lines = [l for l in file_handle if "\tHumidity=\t" in l] + buff = StringIO("".join(env_lines)) + columns = ["datetime", "garbage 1", "humidity", "garbage 2", "temperature"] + df = pd.read_csv( + buff, sep="\t", header=None, names=columns, index_col=0, parse_dates=True + ) + return df.drop(columns=["garbage 1", "garbage 2"]) diff --git a/s3printlog/main.py b/s3printlog/main.py new file mode 100644 index 0000000..4d5dd59 --- /dev/null +++ b/s3printlog/main.py @@ -0,0 +1,81 @@ +import matplotlib.pyplot as plt +import os +import pathlib +import subprocess +import sys +import warnings + +from collections import namedtuple + +from .analysis import ( + generate_drop_check_chart, + generate_environment_graph, + find_missing_drops, +) +from .logparser import ( + get_log_files, + parse_log_files, + parse_environment_log, + DROP_CHECK_SUFFIX, + ENVIRONMENT_SUFFIX, +) +from .report import generate_report + + +class NoLogFileError(IOError): + pass + + +ProcessResult = namedtuple("ProcessResult", ["data_frame", "file_path"]) +DropProcessResult = namedtuple("DropProcessResult", ["drops", "missing"]) + + +def process_drop_checks(folder): + drop_log_paths = get_log_files(folder, suffix=DROP_CHECK_SUFFIX) + if len(drop_log_paths) == 0: + raise NoLogFileError("Drop Check Files Not Found") + drop_log_df = parse_log_files(drop_log_paths) + + generate_drop_check_chart(drop_log_df) + image_path = folder / "Drop Check.png" + plt.savefig(image_path) + + missing_drop_df = find_missing_drops(drop_log_df) + misssing_drop_list_path = folder / "Missed spots.xlsx" + missing_drop_df.to_excel(misssing_drop_list_path) + + return DropProcessResult( + ProcessResult(drop_log_df, image_path), + ProcessResult(missing_drop_df, image_path), + ) + + +def process_environment(folder): + env_log_paths = get_log_files(folder, suffix=ENVIRONMENT_SUFFIX) + if len(env_log_paths) != 1: + raise NoLogFileError("Log File Not Found") + env_log_df = parse_environment_log(env_log_paths[0]) + + generate_environment_graph(env_log_df) + image_path = folder / "Environment.png" + plt.savefig(image_path) + + return ProcessResult(env_log_df, image_path) + + +def process_log_folder(folder): + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + folder = pathlib.Path(folder) + drops, missing = process_drop_checks(folder) + environment = process_environment(folder) + return generate_report(folder, drops, missing, environment) + + +def open_with_default_app(some_path): + if sys.platform.startswith("linux"): + subprocess.call(["xdg-open", some_path]) + elif sys.platform.startswith("darwin"): + subprocess.call(["open", some_path]) + elif sys.platform.startswith("win"): + os.startfile(some_path) diff --git a/s3printlog/report.py b/s3printlog/report.py new file mode 100644 index 0000000..5d79f41 --- /dev/null +++ b/s3printlog/report.py @@ -0,0 +1,149 @@ +import io +import PIL + +from collections import namedtuple +from itertools import zip_longest +from reportlab.pdfgen.canvas import Canvas +from reportlab.lib.pagesizes import A4 +from reportlab.lib.styles import getSampleStyleSheet +from reportlab.lib.units import inch, cm +from reportlab.platypus import ( + Flowable, + Image, + KeepTogether, + PageBreak, + Paragraph, + Spacer, + SimpleDocTemplate, +) + + +ImageBuffer = namedtuple("ImageBuffer", ["buffer", "width", "height"]) +FailedDropImage = namedtuple("FailedDropImage", ["path", "well"]) + +styles = getSampleStyleSheet() +style_n = styles["Normal"] +style_h1 = styles["Heading1"] +style_h2 = styles["Heading2"] + + +class DropPictures(Flowable): + """A row of drop pictures flowable.""" + + def __init__(self, pictures, xoffset=0): + self.pictures = filter(None, pictures) + self.xoffset = xoffset + self.size = 3.75 * cm + self.offsets = [0 * cm, 6 * cm, 12 * cm] + + def wrap(self, *args): + return (self.xoffset, self.size + 1 * cm) + + def draw(self): + canvas = self.canv + for offset, picture in zip(self.offsets, self.pictures): + canvas.drawImage(picture.path, offset, 0, width=5 * cm, height=self.size) + canvas.drawString(offset + 0.5 * cm, 3.0 * cm, picture.well) + + +def trim_image(image_path): + original = PIL.Image.open(image_path) + background = PIL.Image.new(original.mode, original.size, original.getpixel((0, 0))) + diff = PIL.ImageChops.difference(original, background) + diff = PIL.ImageChops.add(diff, diff, 2.0, -100) + bbox = diff.getbbox() + cropped = original.crop(bbox) if bbox else original + buffer = io.BytesIO() + cropped.save(buffer, format="png") + return ImageBuffer(buffer, cropped.width, cropped.height) + + +def scaled_image_flowable(image_path, width=17 * cm): + image_buffer = trim_image(image_path) + height = (width / image_buffer.width) * image_buffer.height + return Image(image_buffer.buffer, width=width, height=height) + + +def get_failed_drop_images(drops, missing, when): + mask = drops.data_frame["when"] == when + partial_df = drops.data_frame[mask] + + mask = partial_df["result"] == "fail" + failed_df = partial_df[mask] + + missing_wells = missing.data_frame[when] + mask = failed_df["well"].isin(missing_wells) + + failed_images = [ + FailedDropImage(item.path.with_suffix(".jpg"), item.well) + for item in failed_df[mask].itertuples() + ] + return sorted(failed_images) + + +def graph_flowable(title, file_path): + section = [ + Paragraph(title, style_h2), + Spacer(width=17 * cm, height=0.5 * cm), + scaled_image_flowable(file_path), + ] + return KeepTogether(section) + + +def failed_drops_flowable(drops, missing, what): + failed_images = get_failed_drop_images(drops, missing, what) + + if len(failed_images) == 0: + # no images to display here, we return early + return [] + + what_title = what.capitalize() + section = [PageBreak(), Paragraph(f"Failed Drop Check: {what_title}", style_h2)] + + # group three images together + failed_iterator = iter(failed_images) + failed_groups = zip_longest(failed_iterator, failed_iterator, failed_iterator) + + for group in failed_groups: + section.append(DropPictures(group)) + + return section + + +def generate_report(folder, drops, missing, environment): + + story = [] + + start = environment.data_frame.index.min() + start_str = start.strftime("%Y-%m-%d %H:%m") + end = environment.data_frame.index.max() + end_str = end.strftime("%Y-%m-%d %H:%m") + headline = Paragraph(f"Print {start_str} - {end_str}", style_h1) + story.append(headline) + story.append(Spacer(width=17 * cm, height=0.5 * cm)) + + story.append(graph_flowable("Drop Check Graphs", drops.file_path)) + + story.extend(failed_drops_flowable(drops, missing, "pre run")) + story.extend(failed_drops_flowable(drops, missing, "post run")) + + if len(story) == 3: + # no failed drop checks where reported + story.append(Spacer(width=17 * cm, height=1 * cm)) + story.append(Paragraph("No failed drop checks found.", style_n)) + + story.append(PageBreak()) + story.append(graph_flowable("Environment Graphs", environment.file_path)) + + pdf_path = folder / "print_report.pdf" + doc = SimpleDocTemplate( + str(pdf_path), + pagesize=A4, + leftMargin=2 * cm, + rightMargin=2 * cm, + topMargin=2 * cm, + bottomMargin=2 * cm, + ) + doc.build(story) + + return pdf_path