From 9f58dbbc6d618f08805570cbd30004f5805b3061 Mon Sep 17 00:00:00 2001 From: Amandine Tournay <amandine.tournay@pasteur.fr> Date: Tue, 9 Mar 2021 19:09:47 +0100 Subject: [PATCH] Added project --- .gitignore | 6 + SpotDetectorBlock.jar | Bin 0 -> 8596 bytes bin/META-INF/MANIFEST.MF | 2 + bin/SpotDetectorBlock.jar | Bin 0 -> 8596 bytes bin/export.jardesc | 16 ++ .../WaveletSpotDetectorBlock$1.class | Bin 0 -> 1589 bytes ...potDetectorBlock$detectionMethodEnum.class | Bin 0 -> 1476 bytes .../WaveletSpotDetectorBlock.class | Bin 0 -> 7761 bytes export.jardesc | 16 ++ .../WaveletSpotDetectorBlock$1.class | Bin 0 -> 1593 bytes ...potDetectorBlock$detectionMethodEnum.class | Bin 0 -> 1476 bytes .../WaveletSpotDetectorBlock.class | Bin 0 -> 7769 bytes .../WaveletSpotDetectorBlock.java | 272 ++++++++++++++++++ 13 files changed, 312 insertions(+) create mode 100644 .gitignore create mode 100644 SpotDetectorBlock.jar create mode 100644 bin/META-INF/MANIFEST.MF create mode 100644 bin/SpotDetectorBlock.jar create mode 100644 bin/export.jardesc create mode 100644 bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$1.class create mode 100644 bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$detectionMethodEnum.class create mode 100644 bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.class create mode 100644 export.jardesc create mode 100644 src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$1.class create mode 100644 src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$detectionMethodEnum.class create mode 100644 src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.class create mode 100644 src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d47f98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea/ +target/ +.settings/ +*.iml +.project +.classpath \ No newline at end of file diff --git a/SpotDetectorBlock.jar b/SpotDetectorBlock.jar new file mode 100644 index 0000000000000000000000000000000000000000..539289c9d1d969b9060a79531a676bad1798603b GIT binary patch literal 8596 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 literal 0 HcmV?d00001 diff --git a/bin/META-INF/MANIFEST.MF b/bin/META-INF/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/bin/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/bin/SpotDetectorBlock.jar b/bin/SpotDetectorBlock.jar new file mode 100644 index 0000000000000000000000000000000000000000..539289c9d1d969b9060a79531a676bad1798603b GIT binary patch literal 8596 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 literal 0 HcmV?d00001 diff --git a/bin/export.jardesc b/bin/export.jardesc new file mode 100644 index 0000000..d048986 --- /dev/null +++ b/bin/export.jardesc @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="WINDOWS-1252" standalone="no"?> +<jardesc> + <jar path="Spot Detector Block/SpotDetectorBlock.jar"/> + <options buildIfNeeded="true" compress="true" descriptionLocation="/Spot Detector Block/export.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="true" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> + <storedRefactorings deprecationInfo="true" structuralOnly="false"/> + <selectedProjects/> + <manifest generateManifest="true" manifestLocation="/Icy-Kernel/META-INF/MANIFEST.MF" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true"> + <sealing sealJar="false"> + <packagesToSeal/> + <packagesToUnSeal/> + </sealing> + </manifest> + <selectedElements exportClassFiles="true" exportJavaFiles="true" exportOutputFolder="false"> + <javaElement handleIdentifier="=Spot Detector Block/src"/> + </selectedElements> +</jardesc> diff --git a/bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$1.class b/bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$1.class new file mode 100644 index 0000000000000000000000000000000000000000..78f5baa5a3e3033f8603fd5038459ef0c1aaa04d GIT binary patch literal 1589 zcmbtUTTc^F5dKbESSSlr1XSt;wMtvi<>Cb_7lDFS%O#=^@x{~jSQnOEvKNerFD4j% zhVjW~6M;k%<BKo;CZo=2mjV$bhNgQib7s!WH}lQ;{`1op0DYKM5MUTtHN2v3I@&Xy z(_Zj3VF=e*wcLVmMc%dSoMGjcwT1G*937<ngE4s!>roJ5h%E6nt{L1cYBRYdvQtpa z(6lRk;F%`R8G@nOeXcvPZgQMGlIIjd>l!y=kJ1Yd=knYTqqfaoW_8D9Xvvm5d#-M1 z6)_o959+4w4l^vokLdhB2Z?!x(706)wP0vep`b>tj;W|cIE)~UtEfXWLohB?8?(A8 zroEM%upgFl)0DLc$vn4px%Y)3nJ|XYqeUF+A^btxGZjP`I`^htR(q$Y+D_TEN?vPm z2Imx<Wf<CP_1{!c(T?+k+H*vyUSpPJ2yQZTJgGqA1@D>V+1eVnoid#$8NOmFjElIW zAjS~e3FKe;DlVggp{6L@d2V<_z2<nLT(><$O({rFiFTRldkZ6uP8D6a!l35Lq59WQ z^%iAPG!@<GVQ6q9{bsq%SEx1Y!vSSXR}_U!fckJ<!L`Ex`T7#j4I=kG6uWoz<CcPf zeOM}nDGX93baN*Y1R)bf8-^tzN2oF4nZ<NsK8#U}D;Q%qen11MNMnLX#0v!(#h<B6 zEHW^iz6?WEDJcwBDz%mG%OO-Fiq_A$Jik1}SAF(}=ZFt^F{#V9<ILZlp{p`n;?{(j zH!Mdti&MgVZWUCVlI^BuOjFq726r6c5DN(deN_lVBC<z;NR#YPdK3fn)j_4xdRh(8 zK1g$8vU3v+$*xUAlG|wdP*QB6v6>WtS7@bC8j&ha;3UmVdiJk*OM3E}ba3!J20x?i zaWwQa`4J5taXQ+&g$rL1-$Jr1xhf^}zqzrEp(&C@y0&n8VV$vP&AVUUr0*c4?^Xf; zyryv-y?BEZt;exZilx2m&yOWQRh`5gil&!f-bIFB-6LCi{(qo~^^@{_+6Iut6wM)` P_B3W_6($o2ihjQVGyJXi literal 0 HcmV?d00001 diff --git a/bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$detectionMethodEnum.class b/bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$detectionMethodEnum.class new file mode 100644 index 0000000000000000000000000000000000000000..4cb76999790403d420aae245c0c06b27112b62bf GIT binary patch literal 1476 zcmcIkTT|0e5dID+O<TgnDtAy&)V3f69ertK%2hiQP*Uo2d~i<7p#($1Bq<L6O5p)U zN5*G=l;fT>LLTHvo0;UCJ-grTw|jQ;^Vio)0MGDLMF+#%BeU5sEH}HyYuQiySeU|d zk8E#Oc%tsvPR+FIAG7aT3Y`=yfnrH2rdno(ZEXl|-`-udnujVP3_S<@m}gCHHL~)I zp=)Wo`091}gZ^f#%%GS4d)OR9d}VQaJ&4e?y1BD4Raq?Utm+Kq_iYIn%hyfAGQ0%_ zC6%r)M3(Jc5kqGJ480oqaEl?D4@?G9rR%Ebo?}>zTrpjVlkIH{oruPuN?|~Qim2QT zX^0_Cu1ba_Hk*ev;gosJ6b#9dUFT+nJBF0~!vqxc5(RJHa4G6BH=BYsl~lSN$tN&@ z`zj_G`a(&axSlxF@BmYE8{BdDN!>m=VaSA2->Mx@YvqceYWz8(axkbq^{qXIMi>@U zEZv5il%-2)c!)H^^Ki^%le=y%MD&Wpb<(oGsreGR-E`_=&5+kKe$&9rN*vWjHyRfA znhx2DkbCJX--ZMih@e)qEaCVW30K7&!^?jfLh9PTOn+gH`c|PIj8YhuJq^%G?F{sd z$Yv%@gw_PQ$W9}vLb7~jzkyYg-O4$7&XDwlI}u;#@BB_G<rGQ18aYM3eulv>gy_I9 zeS7?96X?byMsSy2sgW;DUl3!SY$PW&Gd*^W(Q9y&3=n`cf3IRpk|m<!bl#%)f)bJN zfl~}t*Okm=H7^-$D5Dp+H}jb^Eh;T<?21C1I_gp2BSSVaRwBtV7kK;w>}H&TjPG+A SGyeJnvl2;ohAid_L%#u_H;$D6 literal 0 HcmV?d00001 diff --git a/bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.class b/bin/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.class new file mode 100644 index 0000000000000000000000000000000000000000..1842a96c51e8a96641fade50dfb5b30a3ada2fde GIT binary patch literal 7761 zcmb_h34B}iegFPs#qUXec48+^q8vno5Fa^|IEkThP9Frfj$>lSnGJ(I+b^+*EV(+8 zxGh_^!ARLbVQm?V!DzdhLAw>&$Z1nT#%S2Owc98yV+Y;ZQbxzN(ss106z}{0zb9ET z4(Y`w=>PuL?>_(j!W*AG3t)@%8Sn{qjK{M_Vu^I*usswxZXa{vP9{B`%#1i0XE>8g z4aJkgM<a*ajb3iFdmF84!+>9~JT^QLalu6Fp>!r?4`*(O^k}#S$_1C^ao8i-!^vza zqJgF(aXWD&qTvV@#1iA#Ot16Ktdkga`t6jUu50$aV|L2B#RK`XErR(jwXtMkpOYC) zjtDM$>$@F^>=^F_dSgctb|#y01Sc+jV|(Gq&m^ohv#8WW>?9ehhLdAt-Z`|VuPvEK z$3~n~EOF$({?689GVa(3!P)}mya-D~;hiI>g(YGn2rbF#!^zaJ)70*%QLoL{Cwbzk zWNM$CK6+7k^XQ&b%AQd2&ZeE-VLR>=2&}vIC#A3|tuFT1DSM2Tq||(otDT9AbHqsz zZAEg%LTE7~P9hmgJ0p2R5Y!CC5_W1rnd!`8bwTWV(&S-(HX|tC9!tbBI|XI+4gCUt zTXMt+q717nEXN81mkKWbiHy(0Wr8X#%5WZK5Mf-d0Ie0QukX6iK4!b7-kVW+ZRt|} zlJ+b;lE2l`&>w)H-hu(sK;s;4Q=)TaJto!@yJ9z-NrqiM1K5a71|ouM@*MoatkuG1 zG*J(&2Rip&-FHK8&;C9^Z$b0FFgz_mG+?U|;WjE_E)mWMReO;uyDKaN5H#>M!J0hp zZ{;s0XjIGFT;~hZ`@+LB?iZ%51aT#HC^Bd%i{~I?(8askLM5t9v<jB-Ryuq*l^hG_ zH5{h%Dd0-G?H1<4G;x)nntnIzgqzyKo>!*TfvYVnK$U^FU(5jW-e{sru*AhmJOx`1 zkI|=t=tQ@of4^Y+9P}47S0bfsCKit{Ms&r}87D!{bGf|6LN#hk^a>2^{Nc?e4i+X& zCJq%QTTBcTCR<HhTbOK9T>i3!g;-?ZhKni6^L-Px!0H>_7}mifyg3@g^%z#1G1kwe zna+lO6NgJKHAPK~maJ^y%8ex}Te%W1S=km<1Sc%iVzG&F#y$oi2J3>itL>D9B}%P~ zEQ~g8R4O@e%)(N2;Dlh28>7P7YxB;pfV|5>NS%3)2BNYr^I6zVD?`+_@v9b=p@tN6 z#S%_;c5KK=_1Qyl=B}EqB!end7E^O?(VrQOr3JeRO8%MLlO9r*$|h7yyT!t9;Z}ip z#L4vA@hlN9s&6QYZ~KRCB-Jej-Y2M?GsqeEZ6>oheKT)$9VdpJamBic-xXZaH|m7l z@LKSvv1~dM9&+elnILY%?aB<^PmFUIctd{>Cvm5R-^T}B!h2)ya@us<?=<lt!Ql%b zU?|Agu|znTh);w!hlfY)M8b)04EHc2r=2h}V7RX1gf4c%ZSH1Wcsv!O6EYTONVezK zUZL~{g3Woxl_t_fwN%7)+hi(ou>DY<cdsp(VotgXt5h(&MTMeU4Ezy|V<z@_={Jab zaleH>#sf6nA-87m6vX^Cs6_A)3m?Uw&<m-%w&eJPAVk&8sUrs8lbE#dApVpU63^5A zn%ZeeOY+Lrs?xQ93K2a2Fg{`6<E%b3X{Fm1{tSOk*~ggdZ5EWuUp=GI2Rps>mI^$A zPZ@ZW<~#!?ziZ*s%JlpR=S0RpPEe_6PbFg!O<fSDa9XkW8M=qZn766fIb-2-c#L`9 z9vR^U77z8B`TUuNL52Ns3+I#!jZr(@O+<>ZRR;c&PE@S9<3DYcyk>I{PvG;)PR|Pt z)&HCx>3UqLlo_Lg_$z$Dz+VeiXuVD_dXGgiqbbK8iS+5=AS1hlzro*9v9ZLl<WZ+P zd0Z*B$cYbR6A2YXG{n2`B@2Itzo)>w8ns=Q|8!5m-ul5gNx6Vo4Gs<#>%G{1I+baE znWfCNC0bGP|B8~@SCzRI;c839<8FK;l?MK?D5kv0wF(5QfU6+>lZAiAzc2*Q7G^~a zFMuhRc^>~};A?_S#hRbnXA2nmlC&)g|BkN{F5|~BC*`$El$YL|DF|n)uZX*1$vlj2 zT6h89BDwTLMQ-Pu5%)h>l@)nJ0N=*T2L6+Jn~4^^+9E9c7yg^zoD^NL)<qjjMtWG9 zW>}y)_E?LF@31N9NTnFd7y%X6DyES+RUnb8H2DeQyZF9=@8!L|6o!TWRWaFMKul!f z2?IZ%nH7<uE8*5`EY4oX#A||Zo1Li3c<?jDIGOZGz>XkZ#qH|nbqhbn8_Ji*$DIUK zxS`m5^D1;1(;cQ;c6-Pe4qj!H6cIMRW+v%w&dy|Br5?nK;<sd;3LU1G5Yn_EF)T5a z4V9;yvE(rorX^@eg^IA%)Kjb5hIl1DgOgNRQl&7e_}k6SN3AWeq*@D!iOgLK%R);Q zNiDH)%?shn+)$NIf5i=hB4vpsOI337r<vJU@X0a-V)+FuyWfzN%&Ie*=+4IDJxMCb zNfk1$imt`oI8}E6pQhD$(NJY8!IqNHHn+RXN^vYOs@(L~?HsW)v10@ygOuY;Q+zy@ z8P!pHsV2)U*m*RW$k$J_XNGcJ8WpDn!Zx_>CcGMjSQoAZ2P-(hEN>(rmn5P%;H0y0 zdfviWD=tvK;*nk3h50T-hhCnXVV02hsCJaHE{S=Z7Z9oJN?}kS;UaUMOJfSI*ZX=# zr*b9jOx1=n%J$6Km5K+QQWH{PDLL7Rk=Tfx;jP7`73IWuzN&0@!IcWE^kL+}YS+?l zQBNMbeo8Q<QdAJu%nhL^2x>%?y%~G>=stVgtBS1=XE<)BoK9unRNRc_@;#9EIHfuC zx*(McrA;~vY3I{YJ|n!v1*RBbkGJ~G&`WxF!ZqdU{Hsl&W6%}9LilzC=N*Er#SzX^ zV!`6_WXy)FYA(ejd1o{ErsH$5sf|yIhp!}BJ^{De(J+F&e7hTVu8OIaW2IN6Dyw#t zlT7JKccU^l+EXXX<y2eTPNyB#jx*llzR;<z9hb7}DdYe1VDUwg&mR1RYT>z7!7ra) zXKSt3**NQw{jna|jOvk{q#oIz>5-k79@%i|kxi8z**kIc6E>fC_`4F2PjXK<Ha1S- zlEyO#57exdDXck#I?fsfYSul94O7^13eB8fIZzWVo5J=}*yWzx<DPAE_d49Yy_|Ip z)Vzax`%a;!(R_>-%k=F7>O}8=Ur+k{dNNN>`rVy!J^3YfV(7`Bo}9vU3efcm(Def~ zzp`Lt3PTzaXO1@`D9(;}Gs5C5=FJF<v!m|p6vkWzk}d=9bZ2RImUU;x-Pwf8&bwW9 zZhC|=^x@a|JH(b2l%yYPDA~)g8f&o$b=Zk|bg^X_#5&kmj|4X0-F%cfi3mQ(6Cc4A zJcO+{jcquOW;}x{@O5@Kub>6f*e;dWA?n4Yfw13843?`Q{5pPvGr@1>wO3wEn^{0| z_BVbSbvfL84kx?TJ%!3MxNV^3cc$=rkFU$&4*&h$$_LfT8Qe86g}e9hN^=hPP`w|6 zS+;W$^ZYxxwkwA}JcoO8xUbpI%O8%;<6;|OpGSxHMJzddEQg1p#w6B;jL+bc!oJ~D zv^-Rv!<70mL*{u@gyx0J96ozU9XTtwXZovW@Gz18MU<*}VxTcpK7}Vw<Ei!jP<d$H z%341W>@DEW;fqm&D?K^<!#O;C_HLY3*F(k>o>2%C0l`V!9SV8`JR1#2v?7nf3R$5* z4$mD5S*P)@WjTD~9A1o8OrkPsJ&KoV{wIf5LKRP8B`0U_>Ojp8r|^I3#*cEC=H4W2 zynuWlI{$2QRatZ8B$kEd*H$(~75Ivrl--T;Nz~q4DYccgRS!(R5Hbiu$`2{3G|$89 za}tP}p6t%!p!YQ+MKaM`VB%CXpa59W3Pp<+CizgP=DQf@hs=<rrJBcZo)9M}52*<m zWL3*X7C%OA17*!YS5Vd@LLti&6vYq<)CNNpy*CF%t!hHQK`=Kd+@VJxQX!49L6mXR z)WwJ0G`$W6rM-N=>*PC47lT(f4g4UDd4Rjuq7~Qi#PvL3qaO}uM{pQ1+=`>P17r9Q zlDLoa2XTU}=6i4!x8rfVpO$k6o5MTtB;P1Lj}OotZpU-D2QRXz|1R!lo%vA~mJiAz zw&N@CkTkO9i{KM-1<h_dyX9VdO8RkH()gU*gvaH*{JsrO%ALG>FTNxnX7~1SJS|_u zSL7KyE6=lCdI8VL%S<ib=lUD?n$N&DeN}kDw-n#<Eys(#&3MUoCBE%z;dcjK_I2Ys z+7(|X=X5vE6)Sx0a*3>>OK$P4kg#0Jz|e{^SuK|_tnc-i-dDf8CTqCn$93{OxturV zQ7TJht<<5M+*e9Hzf3$L_elf!D<^fwWF5Z@O5h<`&o7g5xQ!awhybN=t3+fIDkzi1 zvYERUC1OgGY~fd$@YZtIBIk~5B{q}1*J*44N+2xTq?vc0=Us)@BImp13WbCGH_KXl z839URi(DyhLy)ovN>pQOp$%*$?Jk|$3v})%(7A)ST$*+i;O^wwF51utYAHSgC#&^v z*Xy*hX<858`h}|oTL?807DMdnX{N#QSv!o5y{IT%H1M$d&%HOz_-b9?gn?%X+n`~I zAu9rxO!G-|!Nt##sHcI2zG<f2iy;rp=EkFql&`taWsl<~#c^P6a!!H()}nImT?*i7 zR<ufNwUp^@*+YwDa>q-w!ZMCS>*(5bIcZg6vl<u5UVgUaq*E>J^0s<7mhG6t0=0PE ziY88P_Q?wKf$3KY%VQ<W>fl};BWhw&NwJxK2>^Rvla1;E{D7s#4{;e@W2E>IRr6y+ zIku9Uy~4lGa2${_zHR%pcQw*OR9bZt9lxYY_K}wjsMWUULwo*9Srp~ve;u2|3NS-T zcY*DFbVDDvs}*$<9&a~!RJy6VO38(OWD5V>AXOUsV)s%3d$sJ>*nQGNU_QA<4sfjD QsV6w9|27hB@9w4l55WzC>;M1& literal 0 HcmV?d00001 diff --git a/export.jardesc b/export.jardesc new file mode 100644 index 0000000..d048986 --- /dev/null +++ b/export.jardesc @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="WINDOWS-1252" standalone="no"?> +<jardesc> + <jar path="Spot Detector Block/SpotDetectorBlock.jar"/> + <options buildIfNeeded="true" compress="true" descriptionLocation="/Spot Detector Block/export.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="true" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> + <storedRefactorings deprecationInfo="true" structuralOnly="false"/> + <selectedProjects/> + <manifest generateManifest="true" manifestLocation="/Icy-Kernel/META-INF/MANIFEST.MF" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true"> + <sealing sealJar="false"> + <packagesToSeal/> + <packagesToUnSeal/> + </sealing> + </manifest> + <selectedElements exportClassFiles="true" exportJavaFiles="true" exportOutputFolder="false"> + <javaElement handleIdentifier="=Spot Detector Block/src"/> + </selectedElements> +</jardesc> diff --git a/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$1.class b/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$1.class new file mode 100644 index 0000000000000000000000000000000000000000..21a2c8cbbc3885ff46fd45e056396a28fa6c1b92 GIT binary patch literal 1593 zcmbtVTTc@~6#k|yEG#QjP*my#wMtvi6}($6LJL}LfrvuH7pLu57nWVJ7mSH7CK`W+ z@yTZsg+vqMi!c5rqn>HE1>%Jmn(ofbnRDix@0{<<e*5w9Gk_t?DhM%*t(tztuw4BS zFX~VDnlOduuG(H%c%tOlPSLbW%lblXV~#em!N!E#hz}}=FhrO58rMy3RrHzS64@ze zX6W3M-tjGq7fr#?>^(Nz_&IW%-<9VyL-!gt<M*-)cjrpn6yuJ=pXLqMW7wasdiFiT z)Ei<lXdX5!!y9E-NbJ)29~~s;86p|GELy?Pp+P~5obA=n3ROiIT^ic3k0G3psvUX5 z64U-lQ8;&Nx#`T?gk+vOhFk~2h)fv6`0gT(4-)>c<68=14E<YEFRNWIs$MU<-pFe! zj^LPrqYNWkt^S)T8hUY@Q2VZ^)@#DHO~EaOz6T9xyzD=+eMev8j$5M>B_mKwt2l{M z3gQg$dLaMO*Kitr3@sJm&2!Ty>g`J;YjxW~)U<*mm1vWxfj1Qi^lKQv83wIb3pF@~ zs<$YUqH8#ZL56l$(r=bKe1%%W*%?sI@<c^A1n4|2D!8x{pg>;&x<usOhGO%qE4ZfM z>NYG5!!(8|6NXjK1VPBD=)tHY<QO$ZBDa`L&Z`(lM!^I_*B=^4Ll%=nB3>@bD1J|6 za*=@<^yC<ts!3ru)2OYyUv{7xQFPCo$4kovz8bJ!og+S!#FQcLjw64&hR(`xiCdFa z$+TU=suYCx*e+{0B->5PS(b1zCU;%o5(^0fJxvHjqq0YVXs7H@x)ek7v_YfYJv1Ak zb(qGERR0IGrv^SCn%Y3;yQ<=TdaG3fM&mPd(^?vmIu76<jZAtEj(Uye>QUM7@LLRj zLeKqJ<YDSP+TY`FY-k-Pz96xVR84YLO6Y(2)dofiB#REL<NCr2#$qjRetwny!;t>F z2?X$*-Y@7re~C2BGk8^vrMKoUh$Tdoox%-@W{9BPM2;fAMYi+__>Lxag_Lj8GK4$| SG)9Qt)0m-|N+uE%{eA&|46X|R literal 0 HcmV?d00001 diff --git a/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$detectionMethodEnum.class b/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock$detectionMethodEnum.class new file mode 100644 index 0000000000000000000000000000000000000000..a63c2634e8a0dc8254b23802036e937f1fb6455c GIT binary patch literal 1476 zcmcIkTT|0e5dID+O<TgnDtAy&)V3f6X7r_%;jSH8P*Uo2d~i<7p#($1Bq<L6O5p)U zN5*G=l;fT>LLTHvo0;UCJ-grTw|jQ;^Vioa01H@9(ZTTc*laco%gyfdTJ{q^5vK6m zW82#ko~V1aQ#0-Q$Lzb7LMO#qpjeTLsg{{xTP5Kg*n8_%^GHR6q34jF@T|$LMpm9N zbgk?ZUcD}V(BEvA8T8_R51V6%uPyIv1`)c}w{}ZYmF42@y3SC3-<E)}eBCrG!&_uf zQt1jqWYyjiF?1%t(5s;jcNn7iz+@m*ys3)rIfm8971EVB+1}OAiD(R}6b3Y?h|1lN zh8W`Hs%ThZt9eutPMOzC!H_K4b#7L;V@TOQOh7>|QSc57m!h6<vngm(Nu}G7d;$}A zsA7_#FO<}&>xm-`k1$2I!5xR6*6rg{hD<p1?b;!=R<01L#-Af92ZQQU-`;0vgkeF& z(rvg&S-O;l$4E0g564_Jx$EXaM6XHQBrW@!nlGW-O{Xq440%1{w++m!#8GW@qhWEc z>5#1mxtG53ZAfsD2x<k(5{{pda8=APy!@vjq^|wT^e@d(-zxNjQI>{fPXn}4I|F?q zvYAN}p*4XnveQVakSw3sZ(!AAw{n4=b0mG?Uc?vrJHL}kIYUyfM$XW$pJVU~Av!Qj z-yT2O1iCSa5!|O&YUE4P7sQw+8_7w{Opje)^adOy0|X$=->VptWQpiFowq2yphP5m z;0%M+O(k<x%}YilW%LpcW<HaqMWyA9T~mltM?DFAWXMLwN+en45>J1C-Hua`@qJEX R#$TUdRw4<{kj4Dc&~KW0j+6iZ literal 0 HcmV?d00001 diff --git a/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.class b/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.class new file mode 100644 index 0000000000000000000000000000000000000000..18acbd22587e5a190180a28bf30d220a46457cba GIT binary patch literal 7769 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 W<Qh4^v4*D}=cxW|AlmL-i+={Hb%k00 literal 0 HcmV?d00001 diff --git a/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java b/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java new file mode 100644 index 0000000..cf32d9a --- /dev/null +++ b/src/plugins/fab/waveletspotdetectorblock/WaveletSpotDetectorBlock.java @@ -0,0 +1,272 @@ +package plugins.fab.waveletspotdetectorblock; + +import icy.plugin.abstract_.Plugin; +import icy.roi.ROI; +import icy.roi.ROI2D; +import icy.sequence.Sequence; +import icy.system.thread.ThreadUtil; + +import java.awt.geom.Point2D; +import java.util.ArrayList; + +import javax.xml.bind.JAXBContext; + +import plugins.adufour.blocks.lang.Block; +import plugins.adufour.blocks.util.VarList; +import plugins.adufour.vars.lang.VarBoolean; +import plugins.adufour.vars.lang.VarEnum; +import plugins.adufour.vars.lang.VarGenericArray; +import plugins.adufour.vars.lang.VarInteger; +import plugins.adufour.vars.lang.VarROIArray; +import plugins.adufour.vars.lang.VarSequence; +import plugins.adufour.vars.util.VarException; +import plugins.fab.spotDetector.DetectionSpot; +import plugins.fab.spotDetector.detector.DetectionToROI; +import plugins.fab.spotDetector.detector.UDWTScale; +import plugins.fab.spotDetector.detector.UDWTWaveletCore; + +public class WaveletSpotDetectorBlock extends Plugin implements Block { + + enum detectionMethodEnum + { + BRIGHT_SPOT, + DARK_SPOT + } + + VarSequence inputSequenceVar = new VarSequence("input Sequence", null); + VarEnum<detectionMethodEnum> detectionMethod = new VarEnum<detectionMethodEnum>( "Spot to detect" , detectionMethodEnum.BRIGHT_SPOT ); + VarBoolean computeWATConsideringROIBoolean = new VarBoolean( "Compute WAT considering ROI", false ); + VarSequence inputSequenceROIVar = new VarSequence("ROIs from sequence for WAT", null); + VarBoolean force2DWaveletVar = new VarBoolean( "Force 2D Wavelets", false ); + VarROIArray inputROIForMask = new VarROIArray("ROIs for detection mask", null); + + VarBoolean[] useScaleBoolean = { + new VarBoolean( "Scale 1" , false ), + new VarBoolean( "Scale 2" , true ), + new VarBoolean( "Scale 3" , false ), + new VarBoolean( "Scale 4" , false ), + new VarBoolean( "Scale 5" , false ) + }; + + VarInteger[] scaleParameter = { + new VarInteger( "Th. scale 1:" , 100 ), + new VarInteger( "Th. scale 2:" , 100 ), + new VarInteger( "Th. scale 3:" , 100 ), + new VarInteger( "Th. scale 4:" , 100 ), + new VarInteger( "Th. scale 5:" , 100 ) + }; + + VarSequence outSequence = new VarSequence("output Sequence", null); + VarSequence denoisedSequence = new VarSequence("denoised Sequence", null); + VarSequence binarySpotSequence = new VarSequence("binary Spot Sequence", null); + VarROIArray detectionAsROIOut = new VarROIArray("detection as ROIs", null); + + @Override + public void run() { + + // test if input sequence has only 1 channel. + + Sequence inputSequence = inputSequenceVar.getValue(); + + if ( inputSequence == null ) + { + throw new VarException("The input sequence must be set"); + } + + if ( inputSequence.getSizeC() != 1 ) + { + throw new VarException("The input sequence must contain only 1 channel. Please use 'Extract Channel' prior to the WaveletBlock"); + } + +// inputChannelVar + + // init detection. + + UDWTWaveletCore waveletCore = new UDWTWaveletCore(); + + boolean detectNegative ; + + if ( detectionMethod.getValue() == detectionMethodEnum.BRIGHT_SPOT ) + { + detectNegative = false; + }else + { + detectNegative = true; + } + + boolean computeWATwithROI = computeWATConsideringROIBoolean.getValue(); + + // copy ROI from input sequence to the computation sequence + + Sequence inputComputationSequence = inputSequence.getCopy(); + + if ( inputSequenceROIVar.getValue() !=null ) + { + for ( ROI2D roi : inputSequenceROIVar.getValue().getROI2Ds() ) + { + ROI2D roiCopy = (ROI2D) roi.getCopy(); + + if( roiCopy != null ) + { + inputComputationSequence.addROI( roiCopy ); + } + } + } + + //Icy.addSequence( inputComputationSequence ); + + // create UDWTScale Parameter list. + + final ArrayList<UDWTScale> UDWTScaleArrayList = new ArrayList<UDWTScale>(); + +// System.out.println("Block debug."); + + ThreadUtil.invokeNow( new Runnable() { + + @Override + public void run() { + + for ( int i = 0 ; i< 5 ; i++ ) + { + //System.out.println( "Scale enabled #" +i +" : " + useScaleBoolean[i].getValue() ); + UDWTScale scale = new UDWTScale( i+1 , useScaleBoolean[i].getValue() , scaleParameter[i].getValue() ); + UDWTScaleArrayList.add( scale ); + } + } + + }); + + + // Perform detection. + + ArrayList<DetectionSpot> detectionResult; + detectionResult = waveletCore.computeDetection( + true, + UDWTScaleArrayList , + inputComputationSequence , + detectNegative , + computeWATwithROI , force2DWaveletVar.getValue() ); + +// System.out.println( "ROI Mask : " + inputROIForMask.getValue() ); + + // Filter spot with ROIs. + + if ( inputROIForMask.getValue().length != 0 ) + { + ArrayList<DetectionSpot> detectionResultCopy = new ArrayList<DetectionSpot>( detectionResult ); + + detectionList: + for ( DetectionSpot spot : detectionResultCopy ) + { +// Point2D spotCoordinates = new Point2D.Double( spot.getMassCenter().x , spot.getMassCenter().y ); +// spot.getMassCenter() + + ROI detectionAsROI = null; + + try + { + ArrayList<DetectionSpot> detectionList = new ArrayList<DetectionSpot>( ); + detectionList.add( spot ); + detectionAsROI = DetectionToROI.convertDetectionToROI( detectionList ).get( 0 ); + } catch ( NullPointerException e ) + { + System.err.println("Error in spot to ROI conversion"); + } + + if ( detectionAsROI == null ) + { + System.err.println("Can't convert spot to ROI. spot=" + spot ); + continue; + } + +// System.out.println( "spot as ROI to test: " + detectionAsROI.getBounds5D() ); + + for ( ROI roi : inputROIForMask.getValue() ) + { +// System.out.println( "roi contenant: " + roi.getBounds5D() ); + + if ( roi.contains( detectionAsROI ) ) + { +// System.out.println("contains"); + continue detectionList; + } + } +// System.out.println("don't contains"); + + detectionResult.remove( spot ); + + } + } + + + // set outputs. + + // binary output: propagate ROIs. + { + Sequence binarySequence = waveletCore.getBinarySequence(); + + if ( inputSequenceROIVar.getValue() !=null ) + { + for ( ROI2D roi : inputSequenceROIVar.getValue().getROI2Ds() ) + { + //System.out.println("roi:"+roi); + String name = roi.getName(); + + ROI2D roiCopy = (ROI2D) roi.getCopy(); + roi.setName( name ); // because of the bug when coppying roi. + roiCopy.setName( name ); // else the name has " copy" in the end of it. + + binarySequence.addROI( roiCopy ); + } + } + + binarySpotSequence.setValue( binarySequence ); + } + + // output detection as ROI + { + ArrayList<ROI> roiList = DetectionToROI.convertDetectionToROI( detectionResult ); + ROI roi[] = new ROI[ roiList.size() ]; + int i = 0; + for ( ROI roiCandidate : roiList ) + { + roi[i] = roiCandidate; + i++; + } + detectionAsROIOut.setValue( roi ); + } + + + } + + @Override + public void declareInput(VarList inputMap) { + + inputMap.add( inputSequenceVar ); + inputMap.add( detectionMethod ); + inputMap.add( "input Sequence ROIs" , inputSequenceROIVar ); + inputMap.add( computeWATConsideringROIBoolean ); + inputMap.add( inputROIForMask ); + + for (int i = 0 ; i<5 ; i++) + { + inputMap.add( useScaleBoolean[i] ); + } + for (int i = 0 ; i<5 ; i++) + { + inputMap.add( scaleParameter[i] ); + } + inputMap.add( force2DWaveletVar ); + } + + @Override + public void declareOutput(VarList outputMap) { + +// outputMap.add( outSequence ); +// outputMap.add( denoisedSequence ); + outputMap.add( binarySpotSequence ); + outputMap.add( detectionAsROIOut ); + + } + +} -- GitLab