From 4ce0def3cd1247f86841bed68e2176c34c07b710 Mon Sep 17 00:00:00 2001
From: esarrey <eliott.sarrey@gmail.com>
Date: Fri, 9 Jun 2023 10:25:05 +0200
Subject: [PATCH] Fully working b_sweep

---
 .gitignore                                    |   5 ++-
 .vs/VSWorkspaceState.json                     |   2 +-
 ...015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx | Bin 3901 -> 0 bytes
 ...0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx | Bin 63612 -> 0 bytes
 ...2099b974-40cc-4214-ac4a-e988077b281f.vsidx | Bin 2602 -> 0 bytes
 ...d83fd0c8-b937-441d-9691-f2de6420a626.vsidx | Bin 5947 -> 0 bytes
 .vs/minimoke/v17/.wsuo                        | Bin 31744 -> 35840 bytes
 .vs/slnx.sqlite                               | Bin 90112 -> 90112 bytes
 client.py                                     |  12 ++++++
 cshargapp.c                                   |  20 ----------
 hall_probe.py                                 |  14 -------
 main.py                                       |  12 +-----
 server.py                                     |  15 ++++++++
 src/classes/controltab.py                     |  12 +++---
 src/classes/hall_sensor.py                    |  35 ++++++++++++------
 src/classes/stage.py                          |  26 +++++++++++--
 src/hallsensor/read/Program.cs                |  16 ++++++++
 src/hallsensor/read/read.csproj               |  16 ++++++++
 src/hallsensor/read/read.sln                  |  25 +++++++++++++
 src/hallsensor/zeroing/Program.cs             |  18 +++++++++
 src/hallsensor/zeroing/zeroing.csproj         |  16 ++++++++
 src/hallsensor/zeroing/zeroing.sln            |  25 +++++++++++++
 src/procedures/b_sweep.py                     |  11 ++++--
 src/procedures/x_sweep.py                     |   7 +++-
 src/procedures/y_sweep.py                     |   7 +++-
 25 files changed, 220 insertions(+), 74 deletions(-)
 delete mode 100644 .vs/minimoke/FileContentIndex/015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx
 delete mode 100644 .vs/minimoke/FileContentIndex/0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx
 delete mode 100644 .vs/minimoke/FileContentIndex/2099b974-40cc-4214-ac4a-e988077b281f.vsidx
 delete mode 100644 .vs/minimoke/FileContentIndex/d83fd0c8-b937-441d-9691-f2de6420a626.vsidx
 create mode 100644 client.py
 delete mode 100644 cshargapp.c
 delete mode 100644 hall_probe.py
 create mode 100644 server.py
 create mode 100644 src/hallsensor/read/Program.cs
 create mode 100644 src/hallsensor/read/read.csproj
 create mode 100644 src/hallsensor/read/read.sln
 create mode 100644 src/hallsensor/zeroing/Program.cs
 create mode 100644 src/hallsensor/zeroing/zeroing.csproj
 create mode 100644 src/hallsensor/zeroing/zeroing.sln

diff --git a/.gitignore b/.gitignore
index d28ae8a..45dc3c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,7 @@
 *__pycache__
 data/
 dlls/
-*.ini
\ No newline at end of file
+*.ini
+*.vs
+*bin/
+*obj/
\ No newline at end of file
diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
index bbb289e..53f9194 100644
--- a/.vs/VSWorkspaceState.json
+++ b/.vs/VSWorkspaceState.json
@@ -5,6 +5,6 @@
     "\\src\\classes",
     "\\src\\configs"
   ],
-  "SelectedNode": "\\src\\classes\\controltab.py",
+  "SelectedNode": "\\src",
   "PreviewInSolutionExplorer": false
 }
\ No newline at end of file
diff --git a/.vs/minimoke/FileContentIndex/015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx b/.vs/minimoke/FileContentIndex/015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx
deleted file mode 100644
index 714d6a9852513c5a4473628c94ba2ca2945b68ec..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3901
zcmaLYX`38X6$kJ^zy;J0jSAv|?K0KMRCj=c*e>LD*Qu_`+*-W%R%Y5vEXFWEBr}2O
zpyCF|=Du&Z;|ltk55r48hi^Rp)90aj=9$Oy<kqk5Ip^N$>YD0IlIdGkR#uK5;{(SH
z3s$aUZ@PXl0X>e%sF&uw!mMT{>ZMVyi29>w7)K|Ek?TdCqRlh?L9te6@u_}nlGxO7
zX5!k!-o}CA#t(X2H-p*@8b9ohhViN4us<Be!{PAcaCo{uICHu`8q{VIOp=(SHPh1A
z)L3h5V+u0m)Re*0wejBg#so4UH6a`K`eRxhQ#7V{e2ylg!GxlTH52P5RXGWFCXq`L
zmr$Bmn>b1?grqGf>QU6E=p@CS`16^BjHgLOlR#8cN@NqVDU}l{6DmE`5xD_5A~z#%
zDXbAUhKxc@p`r6cn<nj#(l|@Wr8%X!O)HnWYD&?R!nCBRGg)jhW3wvBswSKH+=QHL
zz8>f6gWOVH@V`1Qr+Jy@rO(Tdht)h}d1(2z*5hV<(5#o0HGOLeYrHkVCKoJ!QvN_`
z-=?v(wYA>bnYFF0jIAnLJL_WW$u?wXv2E+ZObd$n>ntb~d0Es|5hA(EsH9L%smw!J
zZIr$$eJHsU^2#LDn5yx)YU-*osj9kiQRRxtg{leFMqWq5+VB@q*4eDKhRbzLwaaT)
zx!%M@eHR-y=s8n3Q#vyI5FDkB_&m70bftIIn7=Al6+W*0xW`X|KeFfVJzwYh<nP;8
z&ilp(e)5HHoS*ry>O<5Ekq>Ki;J*xVfqY1-ki~c`Srzd87NO2U<HE&JXxpa98%K>R
z8$Uj8?0Iq<dAX5?%`>Mr&14pbnUDFgTnHE2sNY7u&C9k3ZSC4NYTLZlx5KiN(N;6x
z*`IG+-n+K5zq|d=_5-_@_qLL&mmc5U*}FF1;@RchtB>q#&G#>DUAnS8pYP1K9^Srk
zrJe8W&9Cmqk3R9=W3N8>pBG=d?!=oH8!Phm;SI!i!=fZ&t}o>Qk;j`0Z{&ek7Wp^w
zfNxT9EzI%u!<%>@Am%r#Z&lx>zMVxt^x=mC-l85?-=V%!J;5T566@c^1HM~*k9w<m
zoBCcB0nvZE`abpjECQnb0ri9G9W3GwIW9!shj_rA`e7CUk^hMLQT1ai0;0aEMl1p%
z-&a4benP#IMJ$W{H6Acl2kKBg$s!>7?o#ho?_m+kqVE(Bcv`)eMI0si&Pa73=AYyN
zN9w24PqPS!`e)S7vIvO$ed<}&un36ySe>wlWl>LfKvGi{0g<1onVPeRWzlzz2V7V2
zE@NKsKrD-VDcOS}U-5wWO@N<Mo$6TxL_J`_@&80$BV7wIKhFbhXntAbH?=-fKd*hu
zqVIy%x73U37u1$TK=j|QZnFr8{1??r>I3Qyi-72RP<@C+K;$1*FS7`U{Fl^6)GO+)
zy2m0Q`mbWb0Wp6R6ON-q{V^VJp9cbBKF5S(S>&(rfRC$RW)Vk;zOV3rUsaz_zovd&
z{RWGG=>MkrE%izDDfMaf+bjZN-81U5>T~Mz>I*CaqW?SUch&Ey-&cR2{*XmLtoxDr
zWA!KMPgw*+-_J1NI7-xi&IA5}2Vz;|f5`*>iU$H>{%iF&>Wk`c)!(s*WwGw}Jm4SH
zKe7mj{GTx4fSCVTeM$X``d1cllvwvSsU8&hzw?0q(E75-|5NKPtFNg4Qva>qe?6aY
z+_+%nIJ^ai8x9^MCtY&Z9i&gD30BBix3=r+&bn&1_Nc1-mdU1PU*EagUUJ<Aa&}Zs
z3MXFQK&EmZU9;p4ZE$Ex*g$gf36g{Rb=!AUX^{)bS+`cs<l=IJ-JMIH<ho|5;(;!H
zx#dg_hgxLX<+|(2g`|*R7nycBDacf+a&ei;b>%+`X_15Eq(we~tmxKCwQH8OlIxa9
zwJUVD-!1D_Nbb-lO;$J#T~emq#pOXspKN~uE4pPhrm}N)A!+GyXVKE#psbat6l5wZ
mWZLZ_SCc+D$bQ{g$zfwWm}5BMxP8IOn!bb2sW08UDEtrP(PZfW

diff --git a/.vs/minimoke/FileContentIndex/0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx b/.vs/minimoke/FileContentIndex/0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx
deleted file mode 100644
index 33bb2c830d296742c083522eb36d10aee13d396e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 63612
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
bWc<GS_djs||6e;>H@DtX|NpIDssH~k^F+7d

diff --git a/.vs/minimoke/FileContentIndex/2099b974-40cc-4214-ac4a-e988077b281f.vsidx b/.vs/minimoke/FileContentIndex/2099b974-40cc-4214-ac4a-e988077b281f.vsidx
deleted file mode 100644
index b9d9f206bef70b9e762ba6f30484a262a3981ed3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2602
zcmeH}U5eZ=49BNmw1q+s(6_vd16?Qku*))UN~|Q_ku4)DI}?^A$Ln2sfF7cUDD^P2
z&^vUD(ceY}OFs*&-i@C(o6Vn-DdYWFHgAglczfQwD^m5lYVcKn?F6P8OchMMGp#kZ
zt&z$cAL=IDq{-gZ7Mz7-6WB~v(ayQ4iW8b7&79kM*V?<bt#8}*zHT1w>s^zeS8xu-
z2s8i@&<p_~jt~`6f}BASbO4>Ys_t;xq3Is6-!(m&o}ee`IrjS98F5Y=krQ;!il#zS
zqq#+!v1jZRG2wtn4r7n8*o?`bG$@F&U?$WXET?orP56X(gaKvnICvUZ2H_FSh&o0b
z1ttp<(8O-yd0Mgu^+<ki{l4*pK9re!9DVdYW*^n-*6ZYTEwS(Iyl>`xWP+L?5M%-+
z_e>?a5(g!sVi%&77>JpYkXXt{Gty#dO##M$HlPL{Ln`@~giJ(@BSx>04>5Dh8r77W
z860=W-6M~}(J?0$!xC7OXXS%WrcF?Cj%ivFL2;*qNqiEPsuxp>1!*dQAP@xy!6-fo
zcLj-X$TsD!DwK0!>h~p?!ZNeuJZFVGhrDFnW;K=GBrWfXqL_7Ho$Lwr#CpOPG)?-l
z({-JLpL6#F^n`No@!<9NaDRk;vASeiU_a~2YU<U;HOab~b@i{Md#dCwAJ3)x=`2@!
oC2%EhC2%EhCGg)8c>Nzg{6pZh{(9MeyXenL+xP3Dzb~!fU!8uyNB{r;

diff --git a/.vs/minimoke/FileContentIndex/d83fd0c8-b937-441d-9691-f2de6420a626.vsidx b/.vs/minimoke/FileContentIndex/d83fd0c8-b937-441d-9691-f2de6420a626.vsidx
deleted file mode 100644
index d005c7508d8746d707340afab198f132a04b3131..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5947
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

diff --git a/.vs/minimoke/v17/.wsuo b/.vs/minimoke/v17/.wsuo
index ec85072c95ebb78e21297f627dc5bda11eed08a5..5d1c69e4bf2fb683d17e73b622966d935f56d427 100644
GIT binary patch
delta 4387
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

delta 2062
zcmd5-Uuaup6u;k1Zku%X_RrF}G)<HKN$aRhP1|INwcGBRH2s$*GwwmALK9QnSevO!
zr0c4=1OFg{k=_G3-!>cr#fNQq@j)<xu=%7z5PXroID8RBj5L$3o^!poMsTPF!9#w0
z=lst1o$ou}J?D#ZkykcYaf}Jq4>a+t9=dpU<MY3SSAKfuYu3(jT-gmP{0e&-DttoR
zg+v!(3k7cXcpzs|7Gxw&B1q~Ho8;Byo<5q9mk?wU*Mzzi(SX>k^AtRQ*ozQ#j^;O$
z4ygtkEIK-+F|>LSeTV@_nfD4_)PktFJNBd2f(RiVL5w0EMbM6Wphfs$ZN5|GV|tc9
z4o>{@EWI+uF|wpnkywzUY$-lvNF0fTr?CZEk$C{osCy_c^4f8<={l`6?!$px08Ti1
zcAR4y<#>Jm5?h;B!0fP#^f@RzT{U<d<!NI-8V~4BgF9SfM^K;8?MWP`5Yvbm#4I8P
zT@AM8$52Zm9!F3VIMVKcCytLnrok!Xkj%pi7Ps^=YOm;1wtzX>{~zbFZl4RPyJjSY
z32d40m^4yx*BzlVbFd=DEk^AU&k|4(6Jl+NYIGd(Qe0v@u5#9d5$DjLxFo6={?9fN
zw2h#;=W`2{o{@%d42_RqXn9s7$`B-Se<nW3`czj~(iT!*(oC(%l}R%!yH=S16<1u+
z`jcLUZGX<4fUs={%26{Dp=z5IsR^l^jVYyE>#K}yK(*&A{OoZ;(UW1LQ1KL)1@gV;
zReJ<J<$XdFmwW(c><PHV57c?kdT2M?wZ|<+3u*TphJ0H>6wq5&vxP8@27mwEg(~_v
z*zB4VUHUTPbWlEp33e+?hHCe$NIgqE`iDD<?w*)P?cQNH)}s4BPMYatoNvIl8ci*p
zUN{N&hCDE+999)8CU|D}X7jgieDT@AUoV{heqjCWYu2w;fxUDM<o-ce?^mJxdKrAY
zrCxW!?b9~66m>N%rA}mP78$(SH)S#28STsD`V@8uDt!r&I=sy|8x`q6$Uj&R=(SAW
z=i0ygcd@irDUI<+Ou+h=FohzY&8ZJ7_-W4-3abCsjw?@E#i;bJz;TRQ)UPpSikx}|
zl;Ly0-uze{88c<M9Bg$=Xmz{O617s}lGNsKqagEt`Ki>T(k<g;hM=o|ZT&gt@HaQl
z-kFxiFL#83@4o-u@jKJ-R?-FKqyqACL_ONN{X^SdnmYQSP%0min=zKSPme{f1YAry
zp_jM+?MfalKlLJP&U{xo_T*Lm#<)`NyNgddb-5=qG89Y)14G_GD3kX31H&nA+BY)d
u4f&r9WrF@pY9Y9v=dQq7Y_wFIYvq}yLUC@x%yW_7`OaL6xuh&9jlTh+Y!EmA

diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
index 3a9037579e96cb40ae4f99c9a04191c8055e9fe8..3c073a60d44e469bb26e35a19f9b85368deed5f3 100644
GIT binary patch
delta 1241
zcmZWpPiP!<6n?+X>@PcU_xE;_ZkFB6&Q4h+?IGL5Eo~EeXowL6V}cS7Ml(CvjLFDm
zciow;<Y2oe1rezZRVziI#7pr~S3HQd6)`PB4i*nqL6o*20jqfEA5v)F>}HyT%wZVb
z_r33Z-@M;U<5Hk;DR45y)c1QwnR>p!(;fNY0|UcP4!DcyAK8IsUj3PcWIP9W71!`0
zo@++6PjGLyEcGi-TP5>_qERlJwNazEU`8crpE6mi)U7$QHdb~lXUV;~zn^Je4zP$E
z22kC=(V<}IW@t4W53M%$MBWa$tIu}76w6+Ja66%L$U>0odUdJj$?1CV_k|V&0Pzec
z+%{`<vzDta5ug-4OlV$*!i)BTQJXia)m+i*7@CsKWK$dtDGGP1GqFBjCY|K4k12e?
zD3x^EEZY@NOYvd1KCT8@^W4+pnT@9l<MAV{TC#_RQM0aFWy{fZ>U_-aOvE_sA#6#v
z-!RSUR>+M!*K?wsue(i}-APJzdD`2eKXSD@${|kL$E>Yhdm|kBsA@ZgbIjIfjcrNd
z$RXWE=gnModNX58a7Yj`XB4-|h1+t)O4+GZN{%tR6-|bA*bDm6KbY8v*VD-%MHxuq
zRcqdUMCegA>LtUr&CPl=$f29oZP!{$^G-m#gM+u`=f_5#8XwCo&iO-PoHPhnG^{ci
z^UJ9Kxdz2OH4#m;UU8SqAx4^WhGY07_u@pXy@0M=Z8SG;IX)U?Z5O$^?Uy>mB&Z?}
z_#gg-_r!0wh;i|gIEq317~jQd@iI>0uec)K!f!+#-xTM?Y5W40aTEu!Pn5(xu_o5&
z$ZlRuRr@pS=4aBqR15j17^N)Ra&)z3Y33A5VF6Tp5%50V!T<3e{2Q<1A9xL?(R9_q
z-d%WtzQ73XmL-K{WC@r`nt`<Uq`9wEJ{l8QvM&SPqPDx@Yte<Th;^|n*6=-S;4@+X
zkKix(J;nG+$XF5Yh}ZFRJcIq1z_1t**TfZZg=TygcID$4Pd&_h%Mm#X+dYpQ|ABFa
zD}XE1^DPDrGa07bPcu&>2M^^A=JE&ghll7sm>=pSDTbE;FB9_uG3BX##r-Vv_zouh
yDu{WDGBl%&8`vA6Eir|0P4bpB{6MO=wblXGiSaLX0LT(kw6hKE>`85z6&?aah;tqQ

delta 1065
zcmZWnPe>F|7=NR)&mG%+-|Xt{uzzMp@n9X?)P*GRpqPiCP3h1fYiGxG(vAJs&S-eZ
zJQYNQHCPE9LhRPXHaY~AAxQ*6Nrx<mB7zVK=~9wVZ+Dz^#W{S;`+nc|d%xfNzNtmq
z)S_)Vzz8>jy^OFB$6`%;XWOC9)(#^rzGNbWNa!tNuYy$stFT^h-CG7@^<WDlJ#1xo
z79k`Vw(i4rr_YHT-yAE2M*fP!SUFaAii_Xk|M@}~H6c5e<=jL<NsOwpZ2ve~f&>vG
z32|6c^W$nhoSP^EK@&)%l4?e;0Ga|Ab#NRuaxqV{RW154I>2yvR7s^|P0eW8A{S@D
z#&|SjE8S<zMy2h)r%|D+l=FM3JlZVF$xKq0W!kyV>hyUqYNXhNtX)vmTqR`i$Gw+K
ze|2Wj(B2}yyU4xEdRbMy3nPJYk0mR$26>E{X;#w}eN2;wlwD2)z(_RF5jC6}-0|ok
z82KnNtR!~PIZe7mHlydWDP0+=ME#CE^6ZxNoBiANytNnws0T`MHaVh|3%uNRKBZ`y
zx|4U=F{-2E*76C9OQ<oYd7`i9NVG4U9<~4vrW|zsX(gGV!mM<_MpYxunCW-<N>A)&
zG4fE(VMSN0BI9|##~gsW%0$B>N!>zSjHx0#u34$t;-ZoWf(`fro8$weK_IV5H`w70
ziNQ4(gaLRD%j7aVArZJp7RW3-AOkQDz0d~DBt<sKIwjfp3ZaJ2P9qW%gU)J+DQ~e@
zJe5~BSV+ZY7?E~Ka1y~5{Dxof1HQvo_ylX9LL3H-V0?eU)xbkNTg@>NTaB1dF^I(w
zG|pvj_Z9mIi{K~i`a>QQH=H4V$vjzy>!cl~;3#y#J9t4(!z02%mRu$0;XY}CyU+qY
saFQOfMqbf7o;eM6QVJ1PLKTWj#|p_klS@p2UEGr9Hu$+Wd?`-<2SM5{Hvj+t

diff --git a/client.py b/client.py
new file mode 100644
index 0000000..54bf361
--- /dev/null
+++ b/client.py
@@ -0,0 +1,12 @@
+from msl.loadlib import Client64
+
+
+class Client(Client64):
+
+    def __init__(self):
+        # pass the server file we just created in module32=, the host am using is localhost, leave port as none for self assigning
+        super(Client, self).__init__(module32='server', host="127.0.0.1", port=None)
+
+    # define a function that calls the an existing server function and passes the args
+    def fsl_command(self, com, doc):
+        return self.request32('fsl_command', com, doc)
diff --git a/cshargapp.c b/cshargapp.c
deleted file mode 100644
index 251dfd9..0000000
--- a/cshargapp.c
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Threading;
-using MagnetPhysik;
-
-namespace SensorApp
-{
-    class Program
-    {
-        static void Main(string[] args)
-        {
-            HallProbe hally = new HallProbe();
-
-            for (int i = 0; i < 100; i++)
-            {
-                Console.WriteLine(hally.Tesla);
-                Thread.Sleep(500);
-            }
-        }
-    }
-}
diff --git a/hall_probe.py b/hall_probe.py
deleted file mode 100644
index 69b9812..0000000
--- a/hall_probe.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import subprocess
-import time
-
-# Call the 32-bit application
-process = subprocess.Popen(['path/to/SensorApp.exe'], stdout=subprocess.PIPE, text=True)
-
-# Read and print output
-for x in range(100):
-    output = process.stdout.readline().strip()  # strip() removes the newline
-    print("Field[T]: ", output)
-    time.sleep(0.5)
-
-# Make sure the process has finished
-process.communicate()
diff --git a/main.py b/main.py
index b0cc767..7620359 100644
--- a/main.py
+++ b/main.py
@@ -4,7 +4,6 @@ from pylablib.devices import Thorlabs
 
 from pymeasure.experiment import unique_filename
 from pymeasure.experiment import Results
-from pymeasure.display.widgets import TableWidget
 from pymeasure.display.Qt import QtWidgets
 import logging
 
@@ -27,20 +26,11 @@ class MainWindow(UIWindown):
             displays=['acq_time', 'freq'],
             x_axis='Iteration',
             y_axis='Voltage',
-            widget_list=tuple([TableWidget("Experiment Table",
-                                    B_Sweep.DATA_COLUMNS,
-                                    by_column=True,
-                                    ),
-                                ControlTab("Manual control")]),
+            widget_list=tuple([ControlTab("Manual control")]),
             directory_input=True
         )
         self.setWindowTitle('Mini MOKE')
         self.directory = 'data'
-        try:
-            for device in Thorlabs.list_kinesis_devices():
-                log.info("Thorlab device connected: ",device[1], "with serial number: ", device[0])
-        except:
-            pass
 
     def queue(self, procedure=None):
         direc = self.directory + '/' + datetime.now().strftime('%Y-%m')
diff --git a/server.py b/server.py
new file mode 100644
index 0000000..7a35913
--- /dev/null
+++ b/server.py
@@ -0,0 +1,15 @@
+#server.py
+from msl.loadlib import Server32
+
+
+class Server(Server32):
+    # the init takes mandatory host and port as arguments
+    def __init__(self, host, port, **kwargs):
+        # using windll since this application is being run in windows, other options such as cdll exists
+        # this assumes that the dll file is in the same directory as this file
+        super(Server, self).__init__('C:/Program Files (x86)/Magnet-Physik/USB Teslameter/MagnetPhysik.Usb.dll', 'net', host, port)
+    
+    # define a function that is to be called with the required arguments
+    def fsl_command(self, com, doc):
+        #the server32 exposes the loaded dll as lib, which you can then use to call the dll functions and pass the required arguments
+        return 0
\ No newline at end of file
diff --git a/src/classes/controltab.py b/src/classes/controltab.py
index f36e2fd..95857af 100644
--- a/src/classes/controltab.py
+++ b/src/classes/controltab.py
@@ -30,17 +30,17 @@ class ControlTab(TabWidget, QtWidgets.QWidget):
         layout.addWidget(self.go_button, 0, 3)
 
         self.x_label = QtWidgets.QLabel("X Position:")
-        self.x_value = QtWidgets.QLabel(self.stage.get_x_pos())
+        self.x_value = QtWidgets.QLabel(self.stage.get_x_pos_str())
         layout.addWidget(self.x_label, 1, 0)
         layout.addWidget(self.x_value, 1, 1)
 
         self.y_label = QtWidgets.QLabel("Y Position:")
-        self.y_value = QtWidgets.QLabel(self.stage.get_y_pos())
+        self.y_value = QtWidgets.QLabel(self.stage.get_y_pos_str())
         layout.addWidget(self.y_label, 2, 0)
         layout.addWidget(self.y_value, 2, 1)
 
         self.z_label = QtWidgets.QLabel("Focus Position:")
-        self.z_value = QtWidgets.QLabel(self.stage.get_z_pos())
+        self.z_value = QtWidgets.QLabel(self.stage.get_z_pos_str())
         layout.addWidget(self.z_label, 3, 0)
         layout.addWidget(self.z_value, 3, 1)
 
@@ -175,6 +175,6 @@ class ControlTab(TabWidget, QtWidgets.QWidget):
         self.update_positions()
 
     def update_positions(self):
-        self.x_value.setText(self.stage.get_x_pos())
-        self.y_value.setText(self.stage.get_y_pos())
-        self.z_value.setText(self.stage.get_z_pos())
\ No newline at end of file
+        self.x_value.setText(self.stage.get_x_pos_str())
+        self.y_value.setText(self.stage.get_y_pos_str())
+        self.z_value.setText(self.stage.get_z_pos_str())
\ No newline at end of file
diff --git a/src/classes/hall_sensor.py b/src/classes/hall_sensor.py
index dfacb35..e6e4b00 100644
--- a/src/classes/hall_sensor.py
+++ b/src/classes/hall_sensor.py
@@ -1,20 +1,31 @@
-import time
-import sys
-import clr
-import platform
-
-# Load the DLL
-sys.path.append(r"C:/Program Files (x86)/Magnet-Physik/USB Teslameter/")
-clr.AddReference("MagnetPhysik.Usb")
-
-from MagnetPhysik import HallProbe
+import subprocess
+from time import sleep
 
 class HallSensor():
     def __init__(self):
-        self.hall_probe = HallProbe()
+        pass
 
     def read_mT(self):
         """
         Returns the value measured by the sensor in mT
         """
-        return  self.hall_probe.Tesla / 1000.
\ No newline at end of file
+        process = subprocess.Popen(['src/hallsensor/read/bin/Release/net6.0/read.exe'], stdout=subprocess.PIPE, text=True)
+        line = ""
+        for i in range(100):
+            line = process.stdout.readline().strip()
+            if (line.startswith('Field')):
+                break
+        return float(line.split(':')[1]) * 1000.
+    
+    def zeroing(self):
+        """
+        Zeroing the probe, should be done at 0 magnetic field
+        """
+        process = subprocess.Popen(['src/hallsensor/zeroing/bin/Release/net6.0/zeroing.exe'], stdout=subprocess.PIPE, text=True)
+        line = ""
+        for i in range(100):
+            line = process.stdout.readline().strip()
+            if (line.startswith('Done')):
+                return True
+            sleep(0.02)
+        return False
\ No newline at end of file
diff --git a/src/classes/stage.py b/src/classes/stage.py
index 352329a..d14d796 100644
--- a/src/classes/stage.py
+++ b/src/classes/stage.py
@@ -144,20 +144,38 @@ class Stage():
     # GET THE POSITION
     #################################################################
 
-    def get_x_pos(self):
+    def get_x_pos_str(self) -> str:
         if self.open:
             return f"{(self.motor_x.get_position(scale=False) - self.offset_x) / 46694.:.{3}f}mm"
         else:
             return "?"
     
-    def get_y_pos(self):
+    def get_y_pos_str(self) -> str:
         if self.open:
             return f"{(self.motor_y.get_position(scale=False) - self.offset_y) / 46694.:.{3}f}mm"
         else:
             return "?"
     
-    def get_z_pos(self):
+    def get_z_pos_str(self) -> str:
         if self.open:
             return f"{(self.motor_z.get_position(scale=False) - self.offset_z) / 46694.:.{3}f}mm"
         else:
-            return "?"
\ No newline at end of file
+            return "?"
+        
+    def get_x_pos(self) -> float:
+        if self.open:
+            return (self.motor_x.get_position(scale=False) - self.offset_x) / 46694.
+        else:
+            return float('nan')
+    
+    def get_y_pos(self) -> float:
+        if self.open:
+            return (self.motor_y.get_position(scale=False) - self.offset_y) / 46694.
+        else:
+            return float('nan')
+    
+    def get_z_pos(self) -> float:
+        if self.open:
+            return (self.motor_z.get_position(scale=False) - self.offset_z) / 46694.
+        else:
+            return float('nan')
\ No newline at end of file
diff --git a/src/hallsensor/read/Program.cs b/src/hallsensor/read/Program.cs
new file mode 100644
index 0000000..5c71008
--- /dev/null
+++ b/src/hallsensor/read/Program.cs
@@ -0,0 +1,16 @@
+using MagnetPhysik;
+
+namespace SensorApp
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            HallProbe hally = new HallProbe();
+
+            hally.Range = 8;
+
+            Console.WriteLine("Field:" + (hally.Tesla).ToString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/hallsensor/read/read.csproj b/src/hallsensor/read/read.csproj
new file mode 100644
index 0000000..b462c61
--- /dev/null
+++ b/src/hallsensor/read/read.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="MagnetPhysik.Usb">
+      <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Magnet-Physik\USB Teslameter\MagnetPhysik.Usb.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
+</Project>
diff --git a/src/hallsensor/read/read.sln b/src/hallsensor/read/read.sln
new file mode 100644
index 0000000..c0481ea
--- /dev/null
+++ b/src/hallsensor/read/read.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.6.33723.286
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "read", "read.csproj", "{B43E7DBF-F27A-4A85-B7BE-AA15D3623492}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {12BD2CD8-C47E-4E85-9CD3-60A276BB70A7}
+	EndGlobalSection
+EndGlobal
diff --git a/src/hallsensor/zeroing/Program.cs b/src/hallsensor/zeroing/Program.cs
new file mode 100644
index 0000000..aacd505
--- /dev/null
+++ b/src/hallsensor/zeroing/Program.cs
@@ -0,0 +1,18 @@
+using MagnetPhysik;
+
+namespace SensorApp
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            HallProbe hally = new HallProbe();
+
+            hally.Zero = true;
+
+            while (hally.Zero) { }
+
+            Console.WriteLine("Done");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/hallsensor/zeroing/zeroing.csproj b/src/hallsensor/zeroing/zeroing.csproj
new file mode 100644
index 0000000..b462c61
--- /dev/null
+++ b/src/hallsensor/zeroing/zeroing.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="MagnetPhysik.Usb">
+      <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Magnet-Physik\USB Teslameter\MagnetPhysik.Usb.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
+</Project>
diff --git a/src/hallsensor/zeroing/zeroing.sln b/src/hallsensor/zeroing/zeroing.sln
new file mode 100644
index 0000000..165a6ad
--- /dev/null
+++ b/src/hallsensor/zeroing/zeroing.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.6.33723.286
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zeroing", "zeroing.csproj", "{85BC8862-612D-4A2B-B01C-82BD931B11E0}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{85BC8862-612D-4A2B-B01C-82BD931B11E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{85BC8862-612D-4A2B-B01C-82BD931B11E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{85BC8862-612D-4A2B-B01C-82BD931B11E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{85BC8862-612D-4A2B-B01C-82BD931B11E0}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {903BD3EF-37F9-4E2A-B36E-853EBF911C38}
+	EndGlobalSection
+EndGlobal
diff --git a/src/procedures/b_sweep.py b/src/procedures/b_sweep.py
index d2958d3..9dee8b9 100644
--- a/src/procedures/b_sweep.py
+++ b/src/procedures/b_sweep.py
@@ -7,6 +7,7 @@ from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter
 
 from ..classes.stage import Stage
 from ..classes.dac import DAC
+from ..classes.hall_sensor import HallSensor
 
 log = logging.getLogger(__name__)
 log.addHandler(logging.NullHandler())
@@ -15,8 +16,8 @@ class B_Sweep(Procedure):
     name = "B-Sweep"
     acq_time = FloatParameter('Aquisition time', units='s', default=1)
     freq = FloatParameter('Aquisition Frequency', units='Hz', default=50)
-    b_min = FloatParameter('From B (max 6A)', units='A', minimum=0., maximum=6., default=0)
-    b_max = FloatParameter('To B (max 6A)', units='A', minimum=0., maximum=6., default=5)
+    b_min = FloatParameter('From B (max 6A)', units='A', minimum=-6., maximum=6., default=0)
+    b_max = FloatParameter('To B (max 6A)', units='A', minimum=-6., maximum=6., default=5)
     b_step = FloatParameter('Step', units='A', default=0.1)
     x = FloatParameter('Position x', units='mm', default=0)
     y = FloatParameter('Position y', units='mm', default=0)
@@ -31,8 +32,9 @@ class B_Sweep(Procedure):
 
         voltage = DAC("ai0")
         field   = DAC("ao1")     
+        hall_sensor = HallSensor()
 
-        b_values = np.linspace(self.b_min, self.b_max, int((self.b_max-self.b_min)//self.b_step + 1), endpoint=True)
+        b_values = np.linspace(self.b_min, self.b_max, int(np.abs(self.b_max-self.b_min)//self.b_step + 2), endpoint=True)
    
         field.write(self.b_min)
 
@@ -61,7 +63,10 @@ class B_Sweep(Procedure):
 
             data = {
                 'Iteration': i,
+                'X Position': stage.get_x_pos(),
+                'Y Position': stage.get_y_pos(),
                 'Magnetic Field [A]': b_values[i],
+                'Magnetic Field [mT]': hall_sensor.read_mT(),
                 'Voltage': np.mean(average_voltage)
             }
 
diff --git a/src/procedures/x_sweep.py b/src/procedures/x_sweep.py
index ed8ba06..9194f1e 100644
--- a/src/procedures/x_sweep.py
+++ b/src/procedures/x_sweep.py
@@ -7,6 +7,7 @@ from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter
 
 from ..classes.stage import Stage
 from ..classes.dac import DAC
+from ..classes.hall_sensor import HallSensor
 
 log = logging.getLogger(__name__)
 log.addHandler(logging.NullHandler())
@@ -31,8 +32,9 @@ class X_Sweep(Procedure):
 
         voltage = DAC("ai0")
         field   = DAC("ao1")        
+        hall_sensor = HallSensor()
 
-        x_positions = np.linspace(self.x_min, self.x_max, int((self.x_max-self.x_min)//self.x_step+1), endpoint=True)
+        x_positions = np.linspace(self.x_min, self.x_max, int((self.x_max-self.x_min)//self.x_step+2), endpoint=True)
 
         field.write(self.field)
 
@@ -60,6 +62,9 @@ class X_Sweep(Procedure):
             data = {
                 'Iteration': i,
                 'X Position': x_positions[i],
+                'Y Position': stage.get_y_pos(),
+                'Magnetic Field [A]': field,
+                'Magnetic Field [mT]': hall_sensor.read_mT(),
                 'Voltage': np.mean(average_voltage)
             }
 
diff --git a/src/procedures/y_sweep.py b/src/procedures/y_sweep.py
index 2acdef5..531d2f2 100644
--- a/src/procedures/y_sweep.py
+++ b/src/procedures/y_sweep.py
@@ -7,6 +7,7 @@ from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter
 
 from ..classes.stage import Stage
 from ..classes.dac import DAC
+from ..classes.hall_sensor import HallSensor
 
 log = logging.getLogger(__name__)
 log.addHandler(logging.NullHandler())
@@ -31,8 +32,9 @@ class Y_Sweep(Procedure):
 
         voltage = DAC("ai0")
         field   = DAC("ao1")        
+        hall_sensor = HallSensor()
 
-        y_positions = np.linspace(self.y_min, self.y_max, int((self.y_max-self.y_min)//self.y_step+1), endpoint=True)
+        y_positions = np.linspace(self.y_min, self.y_max, int((self.y_max-self.y_min)//self.y_step+2), endpoint=True)
 
         field.write(self.field)
 
@@ -59,7 +61,10 @@ class Y_Sweep(Procedure):
                 sleep(1/self.freq)
             data = {
                 'Iteration': i,
+                'X Position': stage.get_x_pos(),
                 'Y Position': y_positions[i],
+                'Magnetic Field [A]': field,
+                'Magnetic Field [mT]': hall_sensor.read_mT(),
                 'Voltage': np.mean(average_voltage)
             }
 
-- 
GitLab