From ca26181ed48232bc1c030e3ed1199793cd685c53 Mon Sep 17 00:00:00 2001 From: gac-x07ma Date: Wed, 1 Sep 2021 10:22:59 +0200 Subject: [PATCH] Summer 2021 --- .gitignore | 0 config/administrator.properties | 0 config/config.properties | 63 +- config/config.properties~ | 0 config/devices.properties | 30 +- config/energy_scan.properties | 24 +- config/energy_scan.properties~ | 0 config/harmonic_scan_energies.properties | 18 + config/harmonic_scan_offsets.properties | 106 ++- config/jcae.properties | 4 +- config/mail.properties | 0 config/mail.properties.backup | 0 config/mail.properties.template | 0 config/plugins.properties | 0 config/plugins.properties~ | 0 config/power.properties | 0 config/scicat.properties | 11 + config/session_metadata.properties | 6 + config/sessions.properties | 2 + config/settings.properties | 4 +- config/setup.properties | 25 +- config/setup.properties~ | 0 config/standard.properties | 0 config/tasks.properties | 0 config/tmp.properties | 0 config/users | Bin config/variables.properties | 7 +- devices/Time.properties | 10 + devices/au_mesh.properties | 0 devices/dp1.properties | 0 devices/dummy.properties | 0 devices/exit_slit.properties | 0 devices/field_x.properties | 0 devices/field_x_ips.properties | 0 devices/field_z.properties | 0 devices/gold_mesh.properties | 0 devices/gold_mesh2.properties | 0 devices/m1.properties | 0 devices/m2.properties | 0 devices/needle.properties | 0 devices/p1.properties | 0 devices/ramp_rate_x.properties | 0 devices/ramp_rate_x_ips.properties | 0 devices/ramp_rate_z.properties | 0 devices/sample.properties | 0 devices/sample_hor.properties | 16 +- devices/sample_hor_mot.properties | 18 + devices/sample_rot.properties | 0 devices/sample_vert.properties | 0 devices/src1.properties | 0 devices/src2.properties | 0 devices/temperature.properties | 0 devices/test.properties | 0 plugins/EnergyScan.form | 0 plugins/EnergyScan.java | 2 +- plugins/HarmonicScan.form | 0 plugins/HarmonicScan.java | 0 plugins/HystScan.form | 0 plugins/HystScan.java | 0 plugins/importer.java | 0 script/._TEMP_wait_fill.py | Bin 0 -> 4096 bytes script/EnergyScan.py | 15 +- script/EnergyScan_v2.py | 134 ++++ script/HorizontalScan_infocus.py | 38 +- script/HorizontalScan_out_of_focus.py | 86 +- script/HystScan.py | 49 +- script/HystScanMult.py | 37 +- script/HystScanStep.py | 5 +- script/HystScan_ESR.py | 130 ++- script/I01_scan.py | 8 +- script/I02_scan.py | 2 +- script/RMU_RY_scan.py | 2 +- script/RMU_Rx_scan.py | 2 +- script/RMU_Rz_scan.py | 2 +- script/TEMP_wait_fill.py | 33 +- script/TimeScan_ESR.py | 133 +++- script/TimeScan_ESR_old.py | 198 +++++ script/VerticalScan.py | 85 +- script/debugging.py | 6 + script/harmonic_v2.py | 2 +- script/local.groovy | 3 + script/local.js | 4 + script/local.py | 124 ++- script/piamonteze@slslc:~ | 59 ++ script/piamonteze@x07ma-gw | 59 ++ script/refill_1kpot.py | 4 +- script/restore/local.py | 745 ++++++++++++++++++ script/test/TestHorizontlScan.py | 2 +- script/test/TestOTF.py | 50 ++ script/test/hor_scan_test.py | 3 + script/test/test_otf.py | 5 + script/unused/HorizontalScan.py | 2 +- script/unused/HorizontalScan_in_focus2.py | 2 +- script/unused/HorizontalScan_out_of_focus2.py | 2 +- 94 files changed, 2062 insertions(+), 315 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 config/administrator.properties mode change 100644 => 100755 config/config.properties mode change 100644 => 100755 config/config.properties~ mode change 100644 => 100755 config/devices.properties mode change 100644 => 100755 config/energy_scan.properties mode change 100644 => 100755 config/energy_scan.properties~ mode change 100644 => 100755 config/harmonic_scan_energies.properties mode change 100644 => 100755 config/harmonic_scan_offsets.properties mode change 100644 => 100755 config/jcae.properties mode change 100644 => 100755 config/mail.properties mode change 100644 => 100755 config/mail.properties.backup mode change 100644 => 100755 config/mail.properties.template mode change 100644 => 100755 config/plugins.properties mode change 100644 => 100755 config/plugins.properties~ mode change 100644 => 100755 config/power.properties create mode 100644 config/scicat.properties create mode 100644 config/session_metadata.properties create mode 100644 config/sessions.properties mode change 100644 => 100755 config/setup.properties mode change 100644 => 100755 config/setup.properties~ mode change 100644 => 100755 config/standard.properties mode change 100644 => 100755 config/tasks.properties mode change 100644 => 100755 config/tmp.properties mode change 100644 => 100755 config/users create mode 100755 devices/Time.properties mode change 100644 => 100755 devices/au_mesh.properties mode change 100644 => 100755 devices/dp1.properties mode change 100644 => 100755 devices/dummy.properties mode change 100644 => 100755 devices/exit_slit.properties mode change 100644 => 100755 devices/field_x.properties mode change 100644 => 100755 devices/field_x_ips.properties mode change 100644 => 100755 devices/field_z.properties mode change 100644 => 100755 devices/gold_mesh.properties mode change 100644 => 100755 devices/gold_mesh2.properties mode change 100644 => 100755 devices/m1.properties mode change 100644 => 100755 devices/m2.properties mode change 100644 => 100755 devices/needle.properties mode change 100644 => 100755 devices/p1.properties mode change 100644 => 100755 devices/ramp_rate_x.properties mode change 100644 => 100755 devices/ramp_rate_x_ips.properties mode change 100644 => 100755 devices/ramp_rate_z.properties mode change 100644 => 100755 devices/sample.properties create mode 100755 devices/sample_hor_mot.properties mode change 100644 => 100755 devices/sample_rot.properties mode change 100644 => 100755 devices/sample_vert.properties mode change 100644 => 100755 devices/src1.properties mode change 100644 => 100755 devices/src2.properties mode change 100644 => 100755 devices/temperature.properties mode change 100644 => 100755 devices/test.properties mode change 100644 => 100755 plugins/EnergyScan.form mode change 100644 => 100755 plugins/EnergyScan.java mode change 100644 => 100755 plugins/HarmonicScan.form mode change 100644 => 100755 plugins/HarmonicScan.java mode change 100644 => 100755 plugins/HystScan.form mode change 100644 => 100755 plugins/HystScan.java mode change 100644 => 100755 plugins/importer.java create mode 100644 script/._TEMP_wait_fill.py create mode 100644 script/EnergyScan_v2.py create mode 100644 script/TimeScan_ESR_old.py create mode 100644 script/debugging.py create mode 100644 script/local.groovy create mode 100644 script/local.js create mode 100644 script/piamonteze@slslc:~ create mode 100644 script/piamonteze@x07ma-gw create mode 100755 script/restore/local.py create mode 100644 script/test/TestOTF.py create mode 100644 script/test/hor_scan_test.py create mode 100644 script/test/test_otf.py diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/config/administrator.properties b/config/administrator.properties old mode 100644 new mode 100755 diff --git a/config/config.properties b/config/config.properties old mode 100644 new mode 100755 index 19682fa..20b25dc --- a/config/config.properties +++ b/config/config.properties @@ -1,41 +1,56 @@ -#Tue Aug 11 09:21:15 CEST 2020 -hostName=null -userManagement=false -imageSourcesFile={config}/imaging.properties -instanceName= +#Tue Aug 31 09:45:29 CEST 2021 autoSaveScanData=true simulation=false -dataServerPort=-1 -hideServerMessages=false +dataScanSaveOutput=false +userAuthenticator=ch.psi.pshell.security.LdapAuthenticator | ldap\\\://d.psi.ch | d.psi.ch | users.psi +dataScanSaveScript=false +notifiedTasks=null +parallelInitialization=false +dataTransferPath= +scanStreamingPort=-1 +saveConsoleSessionFiles=false +devicePoolFile={config}/devices.properties +hostName=null +disableEmbeddedAttributes=false serverPort=8080 versionTrackingEnabled=true dataPath={data}/{year}_{month}/{date} serverEnabled=false -commandExecutionEvents=false -logDaysToLive=50 -dataScanReleaseRecords=false depthDimension=0 -dataScanPreserveTypes=false logLevel=Fine -dataScanFlushRecords=true -logPath={logs}/{date}_{time} dataLayout=fda +disableDataFileLogs=false +sessionHandling=Files deviceUpdateStrategyFile={config}/update.properties terminalEnabled=true -notificationLevel=Error -userAuthenticator=ch.psi.pshell.security.LdapAuthenticator | ldap\\\://d.psi.ch | d.psi.ch | users.psi -logLevelConsole=Off +notificationLevel=Off terminalPort=3579 -tasksFile={config}/tasks.properties +dataTransferUser= +versionTrackingLogin={context}/svcusr-hlapp_robot +scriptType=py +noBytecodeFiles=false +versionTrackingRemote=git@git.psi.ch\:pshell_config/x07ma.git +imageSourcesFile={config}/imaging.properties +commandExecutionEvents=false +logDaysToLive=50 +logLevelConsole=Off +filePermissionsConfig=Public scanStreamerPort=-1 dataScanSaveSetpoints=false -parallelInitialization=false -scanStreamingPort=-1 -createSessionFiles=false -versionTrackingLogin={context}/svcusr-hlapp_robot -devicePoolFile={config}/devices.properties -scriptType=py versionTrackingManual=true -versionTrackingRemote=git@git.psi.ch\:pshell_config/x07ma.git +dataTransferMode=Off +userManagement=false +instanceName=X07MA +dataServerPort=-1 +hideServerMessages=false +dataScanReleaseRecords=false +dataScanPreserveTypes=false +dataScanFlushRecords=true +logPath={logs}/{date}_{time} +filePermissionsLogs=Default +filePermissionsScripts=Public +tasksFile={config}/tasks.properties +filePermissionsData=Default +createSessionFiles=false dataProvider=fda saveCommandStatistics=false diff --git a/config/config.properties~ b/config/config.properties~ old mode 100644 new mode 100755 diff --git a/config/devices.properties b/config/devices.properties old mode 100644 new mode 100755 index c90f9f5..0d1e6ea --- a/config/devices.properties +++ b/config/devices.properties @@ -1,7 +1,9 @@ -gold_mesh=ch.psi.pshell.epics.Motor|X07MA-OP-IO1:TR1||| -gold_mesh2=ch.psi.pshell.epics.Motor|X07MA-OP-IO2:TR1||| -current=ch.psi.pshell.epics.ChannelDouble|ARIDI-PCT:CURRENT|Read|| -energy_id=ch.psi.pshell.epics.ChannelDouble|X07MA-ID:ENERGY||| +TControl=ch.psi.pshell.epics.ChannelInteger|X07MA-ES1-TEMP:CONTROL|||false +Hall_probe=ch.psi.pshell.epics.ChannelDouble|X07MA-XTR-MAGFIELDX:UH|Read||false +gold_mesh=ch.psi.pshell.epics.Motor|X07MA-OP-IO1:TR1|||false +gold_mesh2=ch.psi.pshell.epics.Motor|X07MA-OP-IO2:TR1|||false +current=ch.psi.pshell.epics.ChannelDouble|ARIDI-PCT:CURRENT|Read||true +energy_id=ch.psi.pshell.epics.ChannelDouble|X07MA-ID:ENERGY|||true count=ch.psi.pshell.epics.ChannelInteger|COUNT|Read||true data=ch.psi.pshell.epics.ChannelDoubleArray|DATA 6|Read|| edata=ch.psi.pshell.epics.ChannelDoubleArray|EDATA 6|Read|| @@ -21,16 +23,17 @@ pol_done=ch.psi.pshell.epics.ChannelString|X07MA-ID:DONE|Read||true ramp_rate_x=ch.psi.pshell.epics.ControlledVariable|X07MA-PC-PS2:SET:DMD:RAMPRATE:TPM X07MA-PC-PS2:STS:RAMPRATE:TPM|||true ramp_rate_z=ch.psi.pshell.epics.ControlledVariable|X07MA-PC-PS1:SET:DMD:RAMPRATE:TPM X07MA-PC-PS1:STS:RAMPRATE:TPM|||true ramp_rate_x_ips=ch.psi.pshell.epics.ControlledVariable|X07MA-ES1-IPS:RAMP-MAX X07MA-ES1-IPS:RAMP-MAX|||true -sample_hor=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:TRZ1|||true +#sample_hor_mot=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:TRZ1|||true +sample_hor=ch.psi.pshell.epics.Positioner|X07MA-ES1-MAG:TRZS.VAL X07MA-ES1-MAG:TRZS.RBV|||true sample_vert=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:TRY1|||true sample_rot=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:ROY1|||true au_mesh=ch.psi.pshell.epics.Motor|X07MA-OP-IO1:TR1|||true needle=ch.psi.pshell.epics.ProcessVariable|X07MA-PC-TC:DMD:LOOP2:MANUAL||| temperature=ch.psi.pshell.epics.ControlledVariable|X07MA-PC-TC:DMD:LOOP1:SETPOINT X07MA-PC-TC:STS:T1|||true -temperature_readback=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-TC:STS:T1|Read|| +#temperature_readback=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-TC:STS:T1|Read|| valve_try_open=ch.psi.pshell.epics.ChannelInteger|X07MA-OP-VG13:WT_SET||| -energy=ch.psi.pshell.epics.ChannelDouble|X07MA-PHS-E:GO.A||| -energy_readback=ch.psi.pshell.epics.ChannelDouble|X07MA-PGM:CERBK|Read|| +energy=ch.psi.pshell.epics.ChannelDouble|X07MA-PHS-E:GO.A|||true +energy_readback=ch.psi.pshell.epics.ChannelDouble|X07MA-PGM:CERBK|Read||true energy_done=ch.psi.pshell.epics.ChannelInteger|X07MA-PHS:alldone|Read||true cff=ch.psi.pshell.epics.ChannelDouble|X07MA-PGM:cff.A||| exit_slit=ch.psi.pshell.epics.ProcessVariable|X07MA-OP-SL1SV1:TR_AP|||true @@ -41,9 +44,18 @@ signal_i0=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL1|Read||true signal_trans=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL2|Read||true signal_field_analog_x=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL4|Read|| signal_field_analog_z=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL3|Read|| -#signal_diode_electro=ch.psi.pshell.epics.ChannelDouble|X07MA-KEI10:READOUT|||false +#signal_diode_electro=ch.psi.pshell.epics.ChannelDouble|X07MA-KEI10:READOUT|Read||true +CADC1=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL0|Read||true +CADC2=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL1|Read||true +CADC3=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL2|Read||true +CADC4=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL3|Read||true +CADC5=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL4|Read||true adc6=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL5|Read||true adc7=ch.psi.pshell.epics.ChannelDouble|X07MA-ES1-AI:SIGNAL6|Read||true +FieldX=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-MAG:X:RBV|Read||true +FieldZ=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-MAG:Z:RBV|Read||true +Temperature=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-TC:STS:T1|Read||true +Ecrbk=ch.psi.pshell.epics.ChannelDouble|X07MA-PGM:CERBK|Read||true #k10=ch.psi.pshell.epics.ChannelDouble|X07MA-KEI10:SETVOLTAGE||| #k11=ch.psi.pshell.epics.ChannelDouble|X07MA-KEI11:SETVOLTAGE||| #k24=ch.psi.pshell.epics.ChannelDouble|X07MA-KEI2400:setVoltAO||| diff --git a/config/energy_scan.properties b/config/energy_scan.properties old mode 100644 new mode 100755 index 828990d..c8936f6 --- a/config/energy_scan.properties +++ b/config/energy_scan.properties @@ -1,16 +1,20 @@ -Al=1545.0;1610.0;3.0;5.0;-7.0;-1.5;0.0;0.0 -C=250.0;350.0;2.0;5.0;0.0;0.0;0.0;0.0 +Al=1545.0;1610.0;3.0;0.0;-7.0;-1.5;0.0;0.0 +C=250.0;350.0;2.0;0.0;0.0;0.0;0.0;0.0 Ce=870.0;910.0;2.0;0.0;0.0;0.0;0.0;0.0 -Co=760.0;820.0;3.0;10.0;0.0;2.0;0.0;0.0 -Cr=565.0;595.0;3.0;5.0;-0.5;1.0;5.6;0.6 +Co=760.0;820.0;3.0;0.0;0.0;2.0;0.0;0.0 +Cr=565.0;595.0;3.0;0.0;-0.5;1.0;5.6;0.6 Cu=925.0;965.0;2.0;0.0;0.0;0.0;0.0;0.0 -Er=1380.0;1470.0;3.0;10.0;-9.0;-4.0;3.0;3.0 -Fe=690.0;755.0;2.0;10.0;0.0;2.0;2.0;2.0 -Mn=630.0;685.0;2.0;5.0;0.0;0.0;0.0;0.0 +Er=1380.0;1470.0;3.0;0.0;-9.0;-4.0;3.0;3.0 +Eu=1110.0;1170.0;3.0;0.0;0.0;0.0;0.0;0.0 +Fe=690.0;755.0;2.0;0.0;0.0;2.0;2.0;2.0 +Ge=1207.0;1280.0;2.0;0.0;0.0;0.0;0.0;0.0 +La=825.0;865.0;3.0;5.0;0.0;0.0;0.0;0.0 +Mn=630.0;685.0;2.0;0.0;0.0;0.0;0.0;0.0 Ni=840.0;885.0;2.0;0.0;0.0;0.0;0.0;0.0 O=530.0;550.0;2.0;0.0;0.0;0.0;0.0;0.0 Ru=440.0;510.0;3.0;0.0;-1.0;0.0;0.0;0.0 Sm=1070.0;1125.0;3.0;0.0;0.0;0.0;0.0;0.0 -Ta=1700.0;1820.0;3.0;10.0;-11.0;-5.5;4.0;4.0 -Tb=1215.0;1300.0;3.0;10.0;-7.5;-3.5;0.0;0.0 -Ti=450.0;485.0;2.0;10.0;0.0;2.0;2.0;2.0 +Ta=1700.0;1820.0;3.0;0.0;-11.0;-5.5;4.0;4.0 +Tb=1215.0;1300.0;3.0;0.0;-7.5;-3.5;0.0;0.0 +Ti=450.0;485.0;2.0;0.0;0.0;2.0;2.0;2.0 +V=500.0;535.0;2.0;0.0;0.0;0.0;0.0;0.0 diff --git a/config/energy_scan.properties~ b/config/energy_scan.properties~ old mode 100644 new mode 100755 diff --git a/config/harmonic_scan_energies.properties b/config/harmonic_scan_energies.properties old mode 100644 new mode 100755 index fc237cb..b5f8a3f --- a/config/harmonic_scan_energies.properties +++ b/config/harmonic_scan_energies.properties @@ -1,7 +1,25 @@ +F=695.0 +Gd=1189.0 +Ba=790.0 +C=280.0 Ce=890.0 +Co=780.0 Cr=580.0 +Cu=940.0 Dy=1310.0 Er=1400.0 +Eu=1150.0 Fe=705.0 +Ge=1230.0 +Ho=1360.0 +La=840.0 +Mn=641.0 +N=410.0 +Ni=852.0 +O=543.0 Sm=1110.0 V=520.0 +W_M45=1850.0 +Tb=1250.0 +Ti=460.0 +Zn=1020.0 diff --git a/config/harmonic_scan_offsets.properties b/config/harmonic_scan_offsets.properties old mode 100644 new mode 100755 index dd28b29..9ac4cdd --- a/config/harmonic_scan_offsets.properties +++ b/config/harmonic_scan_offsets.properties @@ -1,25 +1,83 @@ -#Fri Jul 10 10:28:13 CEST 2020 -V-C-=1.0 06.07.20 08\:57 -V-LV=2.5 06.07.20 09\:09 -Er-C+=-4.5 04.07.20 17\:02 -Er-C-=-1.5 04.07.20 17\:06 -Er-LV=7.0 04.07.20 17\:12 -Dy-C+=-4.5 05.07.20 22\:04 -Dy-C-=-1.5 05.07.20 22\:05 -Dy-LV=6.0 05.07.20 12\:53 -Dy-LH=6.0 05.07.20 12\:51 -Cr-C+=0.0 06.07.20 16\:36 -Fe-LH=2.5 10.07.20 10\:28 -Ce-LV=4.5 09.07.20 19\:03 -Cr-C-=1.5 06.07.20 16\:42 -Sm-LH=4.5 09.07.20 17\:20 -Fe-C-=2.0 05.07.20 22\:58 -Fe-LV=3.5 10.07.20 10\:25 -V-LH=2.5 06.07.20 09\:07 -V-C+=0.0 06.07.20 08\:56 -Ce-LH=5.0 09.07.20 18\:39 +#Tue Aug 31 22:33:17 CEST 2021 +Ni-C+=1.0 31.08.21 22\:27 +W_M45-C-=1.0 26.04.21 15\:51 +Cu-C-=4.0 18.08.21 09\:09 +Cu-C+=3.0 18.08.21 09\:07 +Zn-LV=-8.0 19.04.21 10\:05 +V-C-=0.5 19.08.21 20\:31 +Ni-C-=2.0 31.08.21 22\:30 +Ho-C+=-5.0 08.03.21 00\:56 +Co-LV=3.5 20.08.21 11\:56 +Al-LV=-10.0 19.04.21 09\:56 +Er-LV=6.0 24.04.21 13\:44 +Gd-C-=-1.0 12.06.21 18\:19 +Gd-C+=-4.5 12.06.21 18\:22 +Ti-LV=2.0 16.08.21 14\:38 +Dy-C+=-4.5 05.03.21 15\:58 +Dy-C-=-1.0 27.01.21 02\:56 +Ho-C-=0.0 08.03.21 00\:57 +Eu-LH=5.0 06.11.20 15\:11 +O-LH=2.5 23.06.21 10\:43 +Cr-LH=2.3 23.09.20 13\:31 +W_M45-C+=-1.0 26.04.21 15\:49 +Cr-C+=0.0 11.06.21 13\:17 +O-C+=-0.5 19.04.21 09\:41 +Fe-LH=2.5 31.08.21 17\:44 +Eu-LV=6.5 22.10.20 15\:02 +Tb-C-=-1.5 21.06.21 09\:51 +W-C-=1.0 22.04.21 09\:51 +Tb-C+=-5.0 28.08.21 20\:19 +Ce-C-=3.5 20.08.21 14\:20 +Cr-C-=1.5 11.06.21 13\:18 +O-C-=1.5 19.04.21 09\:43 +Ce-C+=2.5 20.08.21 14\:23 +Ge-LV=6.0 09.09.20 14\:22 +Fe-LV=3.0 31.08.21 17\:45 +Zn-LH=4.5 01.06.21 21\:25 +V-C+=-1.0 19.08.21 09\:43 +Sm-C+=-5.0 20.08.21 14\:29 +Mn-C-=2.0 15.08.21 20\:37 +Mn-C+=-0.5 19.08.21 20\:32 +Ge-LH=6.0 09.09.20 14\:19 +Sm-C-=-1.5 08.09.20 21\:19 +Co-LH=3.5 20.08.21 11\:57 +Cu-LV=6.0 23.06.21 13\:14 +Zn-C-=10.0 19.04.21 10\:02 +V-LV=3.0 28.06.21 10\:08 +Ni-LV=3.0 31.08.21 22\:33 +Zn-C+=7.5 19.04.21 09\:59 +Er-C+=-4.0 18.10.20 10\:34 +Co-C-=2.5 20.08.21 12\:03 +Er-C-=3.0 17.10.20 10\:50 +Co-C+=1.0 20.08.21 11\:59 +Ho-LH=7.0 11.03.21 02\:17 +C-LV=2.5 06.05.21 03\:41 +N-LV=2.0 23.06.21 13\:11 +Ti-C+=-0.5 05.05.21 11\:55 +Ti-C-=0.5 05.05.21 12\:01 +Ni-LH=3.0 31.08.21 22\:32 +W-C+=-0.5 22.04.21 09\:53 +Dy-LV=6.0 30.01.21 18\:02 +Ho-LV=7.0 11.03.21 02\:19 +C-LH=2.0 06.05.21 03\:39 +Ge-C+=-5.0 09.09.20 14\:23 +Dy-LH=6.5 05.03.21 23\:04 +Ti-LH=2.0 16.08.21 14\:34 +Eu-C-=-0.5 21.04.21 17\:18 +Mn-LH=2.5 19.08.21 20\:35 +Eu-C+=-5.0 21.04.21 17\:20 +Ce-LV=4.0 20.08.21 14\:27 +Sm-LH=4.0 20.08.21 10\:55 +O-LV=2.5 23.06.21 10\:42 +Ge-C-=0.0 09.09.20 14\:24 +Fe-C-=1.5 31.08.21 20\:44 +Cu-LH=6.5 23.06.21 13\:15 +V-LH=3.0 28.06.21 10\:06 +Ce-LH=4.5 20.08.21 14\:25 +Mn-LV=2.5 15.08.21 20\:31 Er_C+=-4.3 30.06.20 21\:58 -Er-LH=6.5 04.07.20 17\:10 -Sm-C-=-2.0 09.07.20 17\:19 -Sm-LV=5.0 09.07.20 19\:11 -Fe-C+=1.0 04.07.20 10\:01 +Al-LH=10.0 19.04.21 09\:55 +Er-LH=6.0 24.04.21 13\:43 +Sm-LV=4.0 20.08.21 10\:57 +Fe-C+=-0.5 31.08.21 20\:45 +N-LH=2.0 23.06.21 13\:08 diff --git a/config/jcae.properties b/config/jcae.properties old mode 100644 new mode 100755 index d57404e..bdc6406 --- a/config/jcae.properties +++ b/config/jcae.properties @@ -1,4 +1,4 @@ -#Tue Aug 21 18:28:14 CEST 2018 +#Fri Aug 13 15:30:22 CEST 2021 ch.psi.jcae.ContextFactory.maxArrayBytes=10000000 ch.psi.jcae.ChannelFactory.timeout=2000 ch.psi.jcae.ChannelFactory.retries=1 @@ -13,6 +13,6 @@ ch.psi.jcae.impl.DefaultChannelService.retries=4 ch.psi.jcae.ContextFactory.addressList= ch.psi.jcae.ContextFactory.serverPort= ch.psi.jcae.ContextFactory.autoAddressList=true -ch.psi.jcae.ContextFactory.useShellVariables=false +ch.psi.jcae.ContextFactory.useShellVariables=true ch.psi.jcae.ContextFactory.addLocalBroadcastInterfaces=false ch.psi.jcae.ContextFactory.maxSendArrayBytes= diff --git a/config/mail.properties b/config/mail.properties old mode 100644 new mode 100755 diff --git a/config/mail.properties.backup b/config/mail.properties.backup old mode 100644 new mode 100755 diff --git a/config/mail.properties.template b/config/mail.properties.template old mode 100644 new mode 100755 diff --git a/config/plugins.properties b/config/plugins.properties old mode 100644 new mode 100755 diff --git a/config/plugins.properties~ b/config/plugins.properties~ old mode 100644 new mode 100755 diff --git a/config/power.properties b/config/power.properties old mode 100644 new mode 100755 diff --git a/config/scicat.properties b/config/scicat.properties new file mode 100644 index 0000000..e8077b1 --- /dev/null +++ b/config/scicat.properties @@ -0,0 +1,11 @@ +#Tue Aug 31 11:31:23 CEST 2021 +environment=prod +testParameters=-testenv -user slssim\:slssim +sourceFolder=/sls/X07MA/Data1/x07maop +prodParameters=\ -user slssim\:slssim +devParameters=-devenv -user slssim\:slssim +ownerGroup=P1000 +type=raw +parameters=-ingest -allowexistingsource -noninteractive -autoarchive +creationLocation=/PSI/SLS/XTREME +principalInvestigator= diff --git a/config/session_metadata.properties b/config/session_metadata.properties new file mode 100644 index 0000000..2aabfaf --- /dev/null +++ b/config/session_metadata.properties @@ -0,0 +1,6 @@ +#Tue Aug 31 11:08:32 CEST 2021 +Sample=String +keywords=List;[] +owner=String;Cinthia Piamonteze +ownerEmail=String;cinthia.piamonteze@psi.ch +contactEmail=String;cinthia.piamonteze@psi.ch diff --git a/config/sessions.properties b/config/sessions.properties new file mode 100644 index 0000000..07b0943 --- /dev/null +++ b/config/sessions.properties @@ -0,0 +1,2 @@ +#Tue Aug 31 11:40:30 CEST 2021 +SessionCounter=3 diff --git a/config/settings.properties b/config/settings.properties index e8f799d..07c6e39 100644 --- a/config/settings.properties +++ b/config/settings.properties @@ -1,2 +1,2 @@ -#Tue Aug 11 09:21:16 CEST 2020 -FdaBrowser=true +#Tue Aug 31 15:35:20 CEST 2021 +FdaBrowser=false diff --git a/config/setup.properties b/config/setup.properties old mode 100644 new mode 100755 index e73f458..0374aef --- a/config/setup.properties +++ b/config/setup.properties @@ -1,22 +1,25 @@ -#Fri Sep 20 16:53:43 CEST 2019 +#Tue Apr 06 11:52:39 CEST 2021 scriptPath={home}/script -sessionsPath={home}/sessions -configFileImageSources={config}/imaging.properties -pluginsPath={home}/plugins +sessionsPath={outp}/sessions configFileDevices={config}/devices.properties -libraryPath={script}; {script}/Lib -configFilePlugins={config}/plugins.properties -contextPath={home}/context extensionsPath={home}/extensions configFileUpdateStrategy={config}/update.properties configPath={home}/config +configFileSessions={config}/sessions.properties +userSessionsPath={sessions}/user dataPath=/sls/X07MA/data/x07maop/Data1 -devicesPath={home}/devices configFileVariables={config}/variables.properties -configFileSettings={config}/settings.properties -logPath={home}/log +logPath={outp}/log wwwPath={home}/www configFile={config}/config.properties +configFileTasks={config}/tasks.properties +configFileImageSources={config}/imaging.properties +pluginsPath={home}/plugins +consoleSessionsPath={sessions}/console +libraryPath={script}; {script}/Lib +configFilePlugins={config}/plugins.properties +contextPath={outp}/context +devicesPath={home}/devices +configFileSettings={config}/settings.properties imagesPath={outp}/images scriptType=py -configFileTasks={config}/tasks.properties diff --git a/config/setup.properties~ b/config/setup.properties~ old mode 100644 new mode 100755 diff --git a/config/standard.properties b/config/standard.properties old mode 100644 new mode 100755 diff --git a/config/tasks.properties b/config/tasks.properties old mode 100644 new mode 100755 diff --git a/config/tmp.properties b/config/tmp.properties old mode 100644 new mode 100755 diff --git a/config/users b/config/users old mode 100644 new mode 100755 diff --git a/config/variables.properties b/config/variables.properties index dc9ddcd..5ad7c21 100644 --- a/config/variables.properties +++ b/config/variables.properties @@ -1,2 +1,5 @@ -#Mon Aug 10 00:23:04 CEST 2020 -FileSequentialNumber=5831 +#Wed Sep 01 10:20:33 CEST 2021 +LastRunDate=210901 +SessionCounter=0 +FileSequentialNumber=13754 +DaySequentialNumber=14 diff --git a/devices/Time.properties b/devices/Time.properties new file mode 100755 index 0000000..4c7f536 --- /dev/null +++ b/devices/Time.properties @@ -0,0 +1,10 @@ +#Tue Mar 02 15:06:37 CET 2021 +minValue=NaN +unit=null +offset=0.0 +maxValue=NaN +rotation=false +precision=-1 +sign_bit=0 +scale=1.0 +resolution=NaN diff --git a/devices/au_mesh.properties b/devices/au_mesh.properties old mode 100644 new mode 100755 diff --git a/devices/dp1.properties b/devices/dp1.properties old mode 100644 new mode 100755 diff --git a/devices/dummy.properties b/devices/dummy.properties old mode 100644 new mode 100755 diff --git a/devices/exit_slit.properties b/devices/exit_slit.properties old mode 100644 new mode 100755 diff --git a/devices/field_x.properties b/devices/field_x.properties old mode 100644 new mode 100755 diff --git a/devices/field_x_ips.properties b/devices/field_x_ips.properties old mode 100644 new mode 100755 diff --git a/devices/field_z.properties b/devices/field_z.properties old mode 100644 new mode 100755 diff --git a/devices/gold_mesh.properties b/devices/gold_mesh.properties old mode 100644 new mode 100755 diff --git a/devices/gold_mesh2.properties b/devices/gold_mesh2.properties old mode 100644 new mode 100755 diff --git a/devices/m1.properties b/devices/m1.properties old mode 100644 new mode 100755 diff --git a/devices/m2.properties b/devices/m2.properties old mode 100644 new mode 100755 diff --git a/devices/needle.properties b/devices/needle.properties old mode 100644 new mode 100755 diff --git a/devices/p1.properties b/devices/p1.properties old mode 100644 new mode 100755 diff --git a/devices/ramp_rate_x.properties b/devices/ramp_rate_x.properties old mode 100644 new mode 100755 diff --git a/devices/ramp_rate_x_ips.properties b/devices/ramp_rate_x_ips.properties old mode 100644 new mode 100755 diff --git a/devices/ramp_rate_z.properties b/devices/ramp_rate_z.properties old mode 100644 new mode 100755 diff --git a/devices/sample.properties b/devices/sample.properties old mode 100644 new mode 100755 diff --git a/devices/sample_hor.properties b/devices/sample_hor.properties index 083e3f0..92d3cc7 100644 --- a/devices/sample_hor.properties +++ b/devices/sample_hor.properties @@ -1,18 +1,10 @@ -#Fri Sep 20 16:53:49 CEST 2019 +#Thu Jul 15 14:09:19 CEST 2021 offset=0.0 maxValue=170.0 -precision=6 rotation=false +precision=6 scale=1.0 -estbilizationDelay=0 -maxSpeed=NaN -resolution=6.23E-4 -homingType=None -startRetries=1 -minValue=98.0 +resolution=0.001 +minValue=93.0 unit=mm -defaultSpeed=0.5 -hasEnable=true sign_bit=0 -monitorByPosition=false -minSpeed=0.02 diff --git a/devices/sample_hor_mot.properties b/devices/sample_hor_mot.properties new file mode 100755 index 0000000..783141c --- /dev/null +++ b/devices/sample_hor_mot.properties @@ -0,0 +1,18 @@ +#Fri Sep 25 13:46:30 CEST 2020 +precision=6 +scale=1.0 +estbilizationDelay=0 +resolution=6.23E-4 +minValue=93.0 +defaultSpeed=0.5 +sign_bit=0 +monitorByPosition=false +minSpeed=0.02 +offset=0.0 +maxValue=170.0 +rotation=false +maxSpeed=NaN +homingType=None +startRetries=1 +unit=mm +hasEnable=true diff --git a/devices/sample_rot.properties b/devices/sample_rot.properties old mode 100644 new mode 100755 diff --git a/devices/sample_vert.properties b/devices/sample_vert.properties old mode 100644 new mode 100755 diff --git a/devices/src1.properties b/devices/src1.properties old mode 100644 new mode 100755 diff --git a/devices/src2.properties b/devices/src2.properties old mode 100644 new mode 100755 diff --git a/devices/temperature.properties b/devices/temperature.properties old mode 100644 new mode 100755 diff --git a/devices/test.properties b/devices/test.properties old mode 100644 new mode 100755 diff --git a/plugins/EnergyScan.form b/plugins/EnergyScan.form old mode 100644 new mode 100755 diff --git a/plugins/EnergyScan.java b/plugins/EnergyScan.java old mode 100644 new mode 100755 index 6d735b6..dfc76ca --- a/plugins/EnergyScan.java +++ b/plugins/EnergyScan.java @@ -234,7 +234,7 @@ public class EnergyScan extends Panel { args.put("FOLDER", folder); buttonAbort.setEnabled(true); - runAsync("EnergyScan", args).handle((ok, ex) -> { + runAsync("EnergyScan_v2", args).handle((ok, ex) -> { try{ buttonAbort.setEnabled(false); if (ex != null) { diff --git a/plugins/HarmonicScan.form b/plugins/HarmonicScan.form old mode 100644 new mode 100755 diff --git a/plugins/HarmonicScan.java b/plugins/HarmonicScan.java old mode 100644 new mode 100755 diff --git a/plugins/HystScan.form b/plugins/HystScan.form old mode 100644 new mode 100755 diff --git a/plugins/HystScan.java b/plugins/HystScan.java old mode 100644 new mode 100755 diff --git a/plugins/importer.java b/plugins/importer.java old mode 100644 new mode 100755 diff --git a/script/._TEMP_wait_fill.py b/script/._TEMP_wait_fill.py new file mode 100644 index 0000000000000000000000000000000000000000..605dba3d0563238d765fd66ebbd6e7ddbde56861 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vYFl&e z14IYI0-$mMG%bukK2%&PIX_n~v7jI)RWB#8xTLf=H6wP_rKnx z1foa5Xb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD;0ggyXA^|MKrSRBvsj@h zwK%`DC^=OjEx#yRAv3QeHLoNyKQA#Sr&1v&HLXM;DJL;68`u|y>Kf7%s{i3$kztVg G{~rLzVJu(( literal 0 HcmV?d00001 diff --git a/script/EnergyScan.py b/script/EnergyScan.py index de9127e..af66e19 100644 --- a/script/EnergyScan.py +++ b/script/EnergyScan.py @@ -93,11 +93,11 @@ def getNewestFile(): except: return None newest = getNewestFile() - -#print "newest = ",newest +print "former newest = ",newest #Pre-actions if NO_BEAM_CHECK == False: + print "Wait beam" wait_beam() @@ -108,6 +108,7 @@ if MODE is not None: if ALPHA is not None: pol_angle.write(ALPHA) time.sleep(0.5) # TIME SLEEP IS NECESSARY. OTHERWISE NEXT COMMAND WILL NOT WAIT FOR POLARIZATION SETTING. ADDED BY CP ON 07.02.2020 + pol_done.update() wait_device(pol_done, "DONE") # Oct. 2019 added wait to try avoid taper error print "Polarization setting done" @@ -166,7 +167,7 @@ time.sleep(DELAY) #if WAIT_STABLE_TEMPERATURE == True: # wait_temp() - +print "\nStart otf" # for debug try: while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error @@ -205,17 +206,18 @@ try: #newName = folder + time.strftime("%Y%m%d_%H%M%S_", start) + FILE + "_0000.txt"; newName = folder + time.strftime("%Y%m%d_%H%M_", start) + FILE + "_0000.txt"; name = getNewestFile() + print "new file: ", name # print "newest file:" # print name - #print "newest variable" - #print newest +# print "newest variable" +# print newName #if name == newest:#TODO: WHY WRITING AGAIN??? # commented on June 20th 2019 #print "Risk of overwriting. " + name + " same as " + newest #raise Exception("Data file not created.") - if not os.path.isfile(name): + if (name is None) or (not os.path.isfile(name)): raise Exception("Data file not found: " + name) convert_file(name, newName) @@ -225,6 +227,7 @@ try: #print("Success") #"PlotDomain", "Ecrbk" except: + print sys.exc_info() print("Aborting...") while caget('START') == 'START': caput('START', '0') diff --git a/script/EnergyScan_v2.py b/script/EnergyScan_v2.py new file mode 100644 index 0000000..452425e --- /dev/null +++ b/script/EnergyScan_v2.py @@ -0,0 +1,134 @@ +''' +#Parameters +E1 = 630 +E2 = 685 +TIME = 1 #min +DELAY = 0.0 #s +MODE = 'LINEAR' #'CIRC +' +OFFSET = None +FOLDER = '2021_03/20210330' +FILE = 'Test' +ALPHA=0 #None +''' + +set_exec_pars (reset=True) + +print "\nStart energy scan..." +#print E1,E2,TIME,DELAY,str(MODE) ,str(OFFSET) ,str(FOLDER) ,str(FILE) ,str(ALPHA) +if MODE == "LINEAR": + print E1,"eV ->",E2,"eV,",TIME,"min duration,",DELAY,"sec delay,",str(MODE),str(ALPHA),"deg" +else: + print E1,"eV ->",E2,"eV,",TIME,"min duration,",DELAY,"sec delay,",str(MODE) + +folder = os.path.expanduser("~/Data1/") + FOLDER + "/"; +set_exec_pars(name= FILE) + +#Pre-actions +if NO_BEAM_CHECK == False: + print "Wait beam" + wait_beam() + + +if MODE is not None: + print "Set polarization" + pol_mode.write(MODE) + if MODE == 'LINEAR': + if ALPHA is not None: + pol_angle.write(ALPHA) + time.sleep(0.5) # TIME SLEEP IS NECESSARY. OTHERWISE NEXT COMMAND WILL NOT WAIT FOR POLARIZATION SETTING. ADDED BY CP ON 07.02.2020 + wait_device(pol_done, "DONE") # Oct. 2019 added wait to try avoid taper error + print "Polarization setting done" + +print "Set Energy" +if OFFSET is not None: + pol_offset.write(OFFSET) #TODO: CAPUT + #time.sleep(0.5) + #wait_device(pol_done, "DONE") + +energy.write(float(E1)) # no need to add wait command. This commands sets and waits. +print "Energy setting done" +caput('X07MA-PGM:CERBK.N',10) # set energy readback averaging to 10 pts + +caput('E1', E1) +caput('E2', E2) +caput('TIME', TIME) +#caput('FOLDER', FOLDER) +caput('FOLDER', "OTF/" + FOLDER) +caput('FILE', FILE) +time.sleep(0.1) + +#open_valve() +#open_valve(0.0) #TODO: WHY WRITING AGAIN??? +time.sleep(DELAY) + +#if WAIT_STABLE_TEMPERATURE == True: +# wait_temp() + +scan_completed = False + +try: + while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error + caput('START', '1') + + write_logs() + + waiting = True + + class Time(Readable): + def __init__(self): + self.start = time.time() + def read(self): + return time.time()-self.start + + class NORMtey(Readable): + def read(self): + return float(CADC1.take())/float(CADC2.take()) + + class NORMdiode(Readable): + def read(self): + return float(CADC3.take())/float(CADC2.take()) + + pol = pol_angle if (pol_mode.readback.read() == "LINEAR") else pol_mode #Fixed, should be an attribute, not a column + sensors = [Ecrbk, CADC1, CADC2, CADC3,CADC4,CADC5,current,Time(),FieldX,FieldZ,pol, Temperature, NORMtey(), NORMdiode()] + + def monitoring_task(): + global scan_completed + time.sleep(1.0) + try: + plot_titles = ["TEY raw", "I0", "diode_raw", "TEY_norm", "diode_norm"] + for index, title in enumerate(plot_titles, start=0): get_plots()[index].title = title + except: + pass + wait_channel('START', 'STOP', type = 's') + scan_completed = True + get_exec_pars().currentScan.abort() + + ret = fork(monitoring_task) + current.alias="MCurr" + pol.alias="Pol" + + print "Scanning...", + + try: + mscan(Ecrbk, sensors, -1, None, range="auto", domain_axis="Ecrbk", enabled_plots = ["NORMtey", "NORMdiode", CADC1,CADC3, CADC2], ) + finally: + ret[0].cancel(True) + current.alias=None + pol.alias=None + + #time.sleep(2.0) + + print "Finished Energy scan." + if after_sample(): #Repeat if id error + break + +except: + if not scan_completed: + print sys.exc_info() + print("Aborting...") + while caget('START') == 'START': + caput('START', '0') + time.sleep(0.1) + #if get_exec_pars().source != CommandSource.plugin: + # show_message(str(ex)) + raise diff --git a/script/HorizontalScan_infocus.py b/script/HorizontalScan_infocus.py index f34949e..fd94ce6 100644 --- a/script/HorizontalScan_infocus.py +++ b/script/HorizontalScan_infocus.py @@ -1,23 +1,33 @@ ##################### ## INPUT PARAMETERS## +POS_START = 157 #Minn = 150.0 +POS_END = 163 #Max = 170.0 +POS_STEP = 0.05 -POS_START = 156.0 #Minn = 150.0 -POS_END = 162 #Max = 170.0 -POS_STEP = 0.25 +SETTLING_TIME = 0.1 #ENERGIES = [363.2, 356.0]# Nb #ENERGIES = [774. 0] # Co -#ENERGIES = [577.0, 573.0] # Cr +#ENERGIES = [573.0, 577.0] # Cr #ENERGIES = [708.3,704.0] # Fe -#ENERGIES = [928.4, 925.0 ] # Cu -#ENERGIES = [700.0] -#ENERGIES = [706.7,708.3,704.0] # Fe -#ENERGIES = [851.3,845]#[851.2,848.0] # Ni +#ENERGIES = [931.7]# 925.0 ] # Cu +#ENERGIES = [928.4] #Cu +#ENERGIES = [928.4, 707.5] #Cu Fe, special +#ENERGIES = [572.0] +#ENERGIES = [706]#,708.3,704.0] # Fe +#ENERGIES = [851.3 ,845]#[851.2,848.0] # Ni #ENERGIES = [280,292] #C #ENERGIES = [776.9,774] # Co -#ENERGIES = [642.0,630.0] # Mn -ENERGIES = [1067, 1076 ] # Sm +ENERGIES = [639.5,630.0] # Mn +#ENERGIES = [1067, 1076.4 ] # Sm +#ENERGIES = [870, 880.3 ] # Ce +#ENERGIES = [516.0, 503.0] # V +#ENERGIES = [510.0] # V +#ENERGIES = [1234.5, 1225 ] # Tb +#ENERGIES = [706.6, 704] # Fe metal +#ENERGIES = [706.6,706.6] +#ENERGIES = [1067, 1076.4 ] # Sm #ENERGIES = [870, 880.3 ] # Ce @@ -46,14 +56,14 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) + def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) - open_valve() - + open_valve() for p in plots: p.addSeries(LinePlotSeries(str(en))) -ret= lscan(sample_hor,sensors, POS_START, POS_END, POS_STEP, latency = 0.0, passes = len(ENERGIES), before_pass = before_pass, after_read=after_readout, plot_disabled=True, range="auto") +ret= lscan(sample_hor,sensors, POS_START, POS_END, POS_STEP, latency = SETTLING_TIME, passes = len(ENERGIES), before_pass = before_pass, after_read=after_readout, plot_disabled=True, range="auto") close_valve() diff --git a/script/HorizontalScan_out_of_focus.py b/script/HorizontalScan_out_of_focus.py index 5a4ce71..01fb07d 100644 --- a/script/HorizontalScan_out_of_focus.py +++ b/script/HorizontalScan_out_of_focus.py @@ -1,28 +1,47 @@ ##################### ## INPUT PARAMATERS## #open_valve() -POS_START = 106 #Min = 98.0 -POS_END = 110 #Max = 118.0 -POS_STEP = 0.5 +#X07MA-ES1-SHUTTER:TRZ1.VAL +#POS_START = 107 #Min = 98.0 -#POS_START = 106 -#POS_END = 116 +#POS_END = POS_START + 6 #Max = 118.0 +#caput("X07MA-ES1-SHUTTER:TRZ1.VAL", POS_START - 108.0 + 40.5) + +POS_START = 108.5 #Min = 98.0 +POS_END = 110.5 #Max = 118.0 +POS_STEP = 0.01 + +SETTLING_TIME = 0.0 + +#caput("X07MA-ES1-SHUTTER:TRZ1.VAL", POS_START - 108.0 + 40.5) + +#36: 106.25 +#37: 106.75 + + +#ENERGIES = [929.31] #""" -#POS_START =108 #Min = 98.0 -#POS_END = 115 +#POS_START =105 #Min = 98.0 +#POS_END = 111 #Max = 118.0 #POS_STEP = 0.1 #""" + +#ENERGIES = [458.4,454] #Ti +#ENERGIES = [285.3, 280.0]# C +#ENERGIES = [1030,1015] #Zn +#ENERGIES = [485.0,490.0] # Ru +#ENERGIES = [1030] #Zn #ENERGIES = [1344.5, 1338] # Ho edge, pre-edge #ENERGIES = [1289.5, 1280] # Dy edge, pre-edge -#ENERGIES = [459.5,455] #Ti #ENERGIES = [363.2, 356.0]# Nb -#ENERGIES = [260.0]# C -#ENERGIES = [285.2,280]# C +#ENERGIES = [280.0]# C +#ENERGIES = [300.0, 280]# C #ENERGIES = [395,390] #Mo #ENERGIES = [780.0,777.0] -#ENERGIES = [397.6, 395.0] # N +#ENERGIES = [397.8, 395.0] # N +#ENERGIES = [410] # N #ENERGIES = [385.0]# C #ENERGIES = [570.0,576.3] #Cr #ENERGIES = [1850, 1820]# Si @@ -30,19 +49,20 @@ POS_STEP = 0.5 #ENERGIES = [397.7,392] # Pc #ENERGIES = [399.1,392] # TCNQ #ENERGIES = [700] #Ti -#ENERGIES = [642.0,630.0] # Mn +#ENERGIES = [638.8,633.0] # Mn #ENERGIES = [463,457] -#ENERGIES = [637.8,638.9,640.1,636.0] # Mn -#ENERGIES = [700.0,708.5] # Fe -#ENERGIES = [928.4, 925] #Cu -#ENERGIES = [931.7, 925] #Cu -#ENERGIES = [929.3] #Cu +#ENERGIES = [638.8,636.6] # Mn +#ENERGIES = [707., 704.] # Fe +#ENERGIES = [708.3] +ENERGIES = [928.4] #CuO +#ENERGIES = [927, 929] #Cu +#ENERGIES = [929.5, 925] #Cu #ENERGIES = [927, 929] #Cu -#ENERGIES = [928.5, 931] #CuGly special #ENERGIES = [402, 397] # Ta -#ENERGIES = [777.3,774] # Co +#ENERGIES = [777., 774.0] # Co +#ENERGIES = [783.15,774] # Ba #ENERGIES = [778] # Co -#ENERGIES = [848.5, 845] # La +#ENERGIES = [848.5, 842] # La #ENERGIES = [465.0,450.0] # STO #ENERGIES = [1234.5, 1225 ] # Tb #ENERGIES = [976, 970] # Nd @@ -58,26 +78,34 @@ POS_STEP = 0.5 #ENERGIES = [1563.0,1555.0] # Al #ENERGIES = [1456.9, 1450 ] # Tm #ENERGIES = [931.7, 925.0] # Cu metal -#ENERGIES = [928.4 ] # Cu1 -ENERGIES = [708.3, 700.0] # Fe +#ENERGIES = [920.0 ] # Cu1 +#ENERGIES = [708.6, 704] # Fe +#ENERGIES = [706.6, 704] # Fe metal +#ENERGIES = [706.6] +#ENERGIES = [352, 340.0] # Ca +#ENERGIES = [1125.4, 1120] # Eu #ENERGIES = [696.7, 680.0] # F #ENERGIES = [692.0] # F #ENERGIES = [782.50, 775.0] # Ba #ENERGIES = [782.50] # Ba -#ENERGIES = [1289, 1280] # Dy edge +#ENERGIES = [1289.5, 1282.0] # Dy #ENERGIES = [660.0, 665.0] # In #ENERGIES = [1850, 1820]# Si #ENERGIES = [1125.6]# Eu -#ENERGIES = [850.9, 849 ] # Ni -#ENERGIES = [516, 503] # V +#ENERGIES = [850.9, 842] # Ni +#ENERGIES = [517.5, 510] # V #ENERGIES = [1455,1420] # Se #ENERGIES = [1181.0,1173.0] -#ENERGIES = [285.1, 280.0]# C +#ENERGIES = [285.3, 280.0]# C +#ENERGIES = [1067, 1076.4 ] # Sm +#ENERGIES = [870, 880.3 ] # Ce +#ENERGIES = [368, 367 ] # Ag #ENERGIES = [1650.0] ##################### +#set_har(1.0) -open_valve() sensors = [tey_norm,signal_tey, signal_i0, signal_trans, trans_norm, sample_vert, energy_readback] +#sensors = [signal_field_analog_z,signal_tey, signal_i0, signal_trans, trans_norm, sample_vert, energy_readback] #TODO: #Why must set range to "auto"? ''' @@ -98,7 +126,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) @@ -106,7 +134,7 @@ def before_pass(pass_num): for p in plots: p.addSeries(LinePlotSeries(str(en))) -ret= lscan(sample_hor,sensors, POS_START, POS_END, POS_STEP, latency = 0.0, passes = len(ENERGIES), before_pass = before_pass, after_read=after_readout, plot_disabled=True, range="auto") +ret= lscan(sample_hor,sensors, POS_START, POS_END, POS_STEP, latency = SETTLING_TIME, passes = len(ENERGIES), before_pass = before_pass, after_read=after_readout, plot_disabled=True, range="auto") #if name is None: # name=get_scan_filename() diff --git a/script/HystScan.py b/script/HystScan.py index b640760..d468ec3 100644 --- a/script/HystScan.py +++ b/script/HystScan.py @@ -12,6 +12,7 @@ OFFSET = -1.0 iPS = False # false for old power supply, True for new (Oxford Instr) supply +#ramp_lohi = "HIGH" # only needed for modulation of ramping speed around 0 T. if not needed then comment out. #close_shutter_at_zero = False # True to close shutter during B field scan when it is close to 0 T #signal_field_analog_x @@ -35,7 +36,7 @@ if MODE is not None: pol_mode.write(MODE) if OFFSET is not None: pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET) -caputq('X07MA-PC:CSCALER.INPB', '1') +#caputq('X07MA-PC:CSCALER.INPB', '1') # open shutter caput('X07MA-FE-PH1:CLOSE4BL',1) @@ -73,7 +74,7 @@ if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: caput("X07MA-PC-MAG:X:DMD",float(START_FIELD)) if field_done is None: - #ramp_rate.write(2.0) + ramp_rate.write(2.0) ramp_rate.waitInPosition(2.0,10000) time.sleep(1.0) caput("X07MA-ES1-IPS:ACTION", 1) @@ -84,8 +85,35 @@ if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: time.sleep(0.1) print "Done waiting" else: + # OLD AND PRONE TO HANG + #time.sleep(3.0) + #wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + # NEW, copied from hystscan_esr, april 2021 time.sleep(3.0) - wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) +# wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + ### this waiting procedure was introduced because sometimes the field does not move and the whole script gets stuck then. + difference = field.readback.read() - START_FIELD + difference0 = difference # difference0 is the field offset before entering the stabilization loop + last_difference = difference # last_difference is updated during the stabilization loop + while abs(difference) > FIELD_PRECISION: + time.sleep(5.0) + difference = field.readback.read() - START_FIELD + # resend a start ramp in case nothing is happening, ie when it is stuck in this waitfield + if abs(difference-difference0) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + # also resend a start ramp in case nothing is happening wrt to the last 5 seconds + elif abs(difference-last_difference) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + last_difference = difference + + + + + #wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) #open_valve(2.0) @@ -108,6 +136,7 @@ wait_device(pol_done, "DONE") if RAMP_RATE is not None: + print ("ramp rate:",RAMP_RATE) ramp_rate.write(RAMP_RATE) ramp_rate.waitInPosition(RAMP_RATE,10000) @@ -142,7 +171,19 @@ while(True): while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error #Detector field readback field_readback = field.readback.read() #fieldReadback.get() - + ''' + ############## this part is needed for field modulation at around 0 T (reduce ramp rate) (Jan) + if ramp_lohi is not None: + print("ramp_lohi is not NONE") + if abs(field_readback) < 0.25 and ramp_lohi == "HIGH": + ramp_rate.write(0.5) # for B fields less than abs() < 0.25 T the ramp rate is lowered to 0.2 T/min + ramp_lohi = "LOW" + if abs(field_readback) >= 0.25 and ramp_lohi == "LOW": + ramp_rate.write(RAMP_RATE) + ramp_lohi = "HIGH" + ############################################################################################### + ''' + detector1 = signal_tey.read() #TEY.get() detector2 = signal_i0.read() #I0.get() detector3 = signal_trans.read() #trans.get() diff --git a/script/HystScanMult.py b/script/HystScanMult.py index a02906e..7f5f3ed 100644 --- a/script/HystScanMult.py +++ b/script/HystScanMult.py @@ -7,7 +7,14 @@ ENERGY_CHANGE_SLEEP = 0.5 MODE = 'CIRC +' OFFSET = -1.0 ''' - +""" +FIELD = field_x +RANGES =[(B1, B2, rr1),(B2,-B2,rr2),(-B2,-B1,rr1)] +ENERGIES = [E1,E2] +ENERGY_CHANGE_SLEEP = 0.5 +MODE =None +OFFSET=None +""" FIELD_PRECISION = 0.01 if FIELD == field_z: FIELD = "Hz" @@ -23,7 +30,7 @@ if MODE is not None: pol_mode.write(MODE) if OFFSET is not None: pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET) -caputq('X07MA-PC:CSCALER.INPB', '1') +#caputq('X07MA-PC:CSCALER.INPB', '1') if len(ENERGIES) ==2: dif_series = plot([],"Dif", title="Dif")[0].getSeries(0) @@ -59,8 +66,32 @@ for (START_FIELD, END_FIELD, RAMP_RATE) in RANGES: time.sleep(0.1) print "Done waiting" else: + # OLD AND PRONE TO HANG + #time.sleep(3.0) + #wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + # NEW, copied from hystscan_esr, april 2021 time.sleep(3.0) - wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) +# wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + ### this waiting procedure was introduced because sometimes the field does not move and the whole script gets stuck then. + difference = field.readback.read() - START_FIELD + difference0 = difference # difference0 is the field offset before entering the stabilization loop + last_difference = difference # last_difference is updated during the stabilization loop + while abs(difference) > FIELD_PRECISION: + time.sleep(5.0) + difference = field.readback.read() - START_FIELD + # resend a start ramp in case nothing is happening, ie when it is stuck in this waitfield + if abs(difference-difference0) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + # also resend a start ramp in case nothing is happening wrt to the last 5 seconds + elif abs(difference-last_difference) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + last_difference = difference + + diff --git a/script/HystScanStep.py b/script/HystScanStep.py index 1f5e414..4abb7c7 100644 --- a/script/HystScanStep.py +++ b/script/HystScanStep.py @@ -21,7 +21,7 @@ if MODE is not None: if OFFSET is not None: pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET) -pol_done.waitValue("DONE", -1) +wait_device(pol_done,"DONE", -1) setpoints = [] for r in RANGES: @@ -54,7 +54,8 @@ for setpoint1 in setpoints: sleep(15.0) """ field_x.write(setpoint1) - field_x.readback.waitValueInRange(setpoint1,FIELD_PRECISION,300000) + #field_x.readback.waitValueInRange(setpoint1,FIELD_PRECISION,300000) + wait_device_in_range(field_x.readback, setpoint1, FIELD_PRECISION, 300.0) readback1 = field.getPosition() #print readback1 diff --git a/script/HystScan_ESR.py b/script/HystScan_ESR.py index 15e3ed4..929d058 100644 --- a/script/HystScan_ESR.py +++ b/script/HystScan_ESR.py @@ -35,7 +35,7 @@ if MODE is not None: pol_mode.write(MODE) if OFFSET is not None: pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET) -caputq('X07MA-PC:CSCALER.INPB', '1') +#caputq('X07MA-PC:CSCALER.INPB', '1') # open shutter caput('X07MA-FE-PH1:CLOSE4BL',1) @@ -54,12 +54,15 @@ if len(ENERGIES) ==2: else: dif_series = None -set_preference(Preference.ENABLED_PLOTS, ['field', 'tey_norm', 'trans_norm']) -set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'trans_norm':1}) +set_preference(Preference.ENABLED_PLOTS, ['field', 'tey_norm', 'ADC3','ADC4','ADC7','ADC6']) +set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'ADC3':1, 'ADC4':1, 'ADC7':1, 'ADC6':1}) +set_preference(Preference.DOMAIN_AXIS, 'Time') field_var = 'fieldAnalogZ' if (FIELD == "Hz") else 'fieldAnalogX' -scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ - field_var,'ESR_extrachannel', 'tey_norm','trans_norm'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) +scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'ADC3', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ + field_var,'ADC4','ADC7','ADC6', 'tey_norm','trans_norm','Time'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) +#scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ + # field_var,'ESR_extrachannel', 'tey_norm','trans_norm', 'fieldX' ,'fieldZ'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) scan.start() write_logs() @@ -67,7 +70,9 @@ write_logs() print "Waiting for start field" if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: + time.sleep(1.0) ramp_rate.write(2.0) + time.sleep(1.0) field.write(START_FIELD) if iPS == True: caput("X07MA-PC-MAG:X:DMD",float(START_FIELD)) @@ -85,7 +90,24 @@ if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: print "Done waiting" else: time.sleep(3.0) - wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) +# wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + ### this waiting procedure was introduced because sometimes the field does not move and the whole script gets stuck then. + difference = field.readback.read() - START_FIELD + difference0 = difference # difference0 is the field offset before entering the stabilization loop + last_difference = difference # last_difference is updated during the stabilization loop + while abs(difference) > FIELD_PRECISION: + time.sleep(5.0) + difference = field.readback.read() - START_FIELD + # resend a start ramp in case nothing is happening, ie when it is stuck in this waitfield + if abs(difference-difference0) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + # also resend a start ramp in case nothing is happening wrt to the last 5 seconds + elif abs(difference-last_difference) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + last_difference = difference #open_valve(2.0) @@ -102,6 +124,21 @@ wait_device(energy_done, 1 ) wait_device(pol_done, "DONE") +# new mid 2021: monitor the UW reflected power +act_stamp = time.strftime('%Y%m%d_%H%M%S') + '_' +savename = get_exec_pars().name +if len(savename)> 38: + savename = savename[:38] +caput("UW:MON_FILE",act_stamp + savename) + +mins_per_scan = abs((END_FIELD - START_FIELD)/RAMP_RATE) +caput("UW:MON_DURATION", mins_per_scan) + +# make an additional check if there is still a running monitoring. This can easily happen if a previous scan was aborted... +if caget("UW:MON_STATUS") == 1: + caput("UW:MON_STOP", 1) + +caput("UW:MON_START", 1) #if WAIT_STABLE_TEMPERATURE == True: # wait_temp() @@ -117,9 +154,12 @@ field.write(END_FIELD) #caputq('X07MA-PC-PS2:M:GO.A', END_FIELD) if iPS == True: caput("X07MA-PC-MAG:X:DMD",float(END_FIELD)) - - index = 0 + +# buffer these values to increase speed +pol_mode_buffer = float(pol_mode.getPositions().index(pol_mode.readback.read())) +pol_angle_buffer = pol_angle.read() #polAngle.get() + while(True): #Dimension 2START_FIELD = -0.2 #ArrayPositioner Energy @@ -128,8 +168,8 @@ while(True): #Energy.put(setpoint2, timeout=None) # TODO: Set appropriate timeout energy.write(setpoint2) sleep( ENERGY_CHANGE_SLEEP ) # Settling time - else: - sleep( 0.25 ) # TODO: Check +# else: +# sleep( 0.25 ) # TODO: Check #TODO: change to Controlled variable? readback2 = energy_readback.read() #EnergyReadback.get() @@ -139,33 +179,43 @@ while(True): energy.write(setpoint2) sleep( ENERGY_CHANGE_SLEEP ) # Settling time - while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error + #while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error #Detector field readback - field_readback = field.readback.read() #fieldReadback.get() + #field_readback = field.readback.read() #fieldReadback.get() + field_readback = field.readback.read() - detector1 = signal_tey.read() #TEY.get() - detector2 = signal_i0.read() #I0.get() - detector3 = signal_trans.read() #trans.get() - detector4 = float(pol_mode.getPositions().index(pol_mode.readback.read())) #polarization.get() - detector5 = pol_angle.read() #polAngle.get() - detector6 = temperature.readback.read() #temperature.get() - detector7 = current.read() - detector8 = signal_field_analog_z.read() if FIELD =="Hz" else signal_field_analog_x.read() # fieldAnalogX.get() - # ESR HACK - detector9 = signal_field_analog_z.read() # USE ADC4 here as additional detector - - _tey_norm = detector1/detector2 - _trans_norm = detector3/detector2 - - if dif_series is not None: - if setpoint2 == ENERGIES[0]: - first = _tey_norm - else: - dif = _tey_norm-first - dif_series.appendData(field_readback,dif) - if after_sample(): #To call check_id_error() - break - scan.append ([field_readback, setpoint2], [field_readback, readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9, _tey_norm, _trans_norm]) + detector1 = signal_tey.read() #TEY.get() + detector2 = signal_i0.read() #I0.get() + detector3 = signal_trans.read() #trans.get() + detector4 = pol_mode_buffer #float(pol_mode.getPositions().index(pol_mode.readback.read())) #polarization.get() + detector5 = pol_angle_buffer #pol_angle.read() #polAngle.get() + detector6 = temperature.readback.read() #temperature.get() + detector7 = current.read() + detector8 = signal_field_analog_z.read() if FIELD =="Hz" else signal_field_analog_x.read() # fieldAnalogX.get() + # ESR HACK + detector9 = signal_field_analog_z.read() # USE ADC4 here as additional detector + detector10 = adc7.read() # New in 2021: Also use ADC7 here as additional detector + detector11 = adc6.read() # Newer in 2021: Also use ADC6 here as additional detector + #if FIELD =="Hz": + # Hz_rb = field_z.readback.read() + #else: + # Hz_rb = 0.0 + #Hx_rb = field_x.readback.read() + + _tey_norm = detector1/detector2 + _trans_norm = detector3/detector2 + + if dif_series is not None: + if setpoint2 == ENERGIES[0]: + first = _tey_norm + else: + dif = _tey_norm-first + dif_series.appendData(field_readback,dif) + + + # if after_sample(): #To call check_id_error() + # break + scan.append ([field_readback, setpoint2], [field_readback, readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9, detector10, detector11, _tey_norm, _trans_norm,time.time()]) #if field_done.read() == 1: #If not ramping #ramp_done.get() == 1: #if abs(field_readback - END_FIELDafter) < 0.007: REMOVED by Jan @@ -184,6 +234,10 @@ scan.end() log_scan_filename() +# switch off monitor, if it is still running (it should!) +if caget("UW:MON_STATUS") == 1: + caput("UW:MON_STOP", 1) + if RAMP_RATE is not None: if FIELD == "Hz": print "Reset ramp rate-z" @@ -191,6 +245,8 @@ if RAMP_RATE is not None: ramp_rate.waitInPosition(0.35,10000) else: print "Reset ramp rate-x" - ramp_rate.write(2.0) - ramp_rate.waitInPosition(2.0,10000) + #ramp_rate.write(2.0) + #ramp_rate.waitInPosition(2.0,10000) + ramp_rate.write(0.35) + ramp_rate.waitInPosition(0.35,10000) diff --git a/script/I01_scan.py b/script/I01_scan.py index 3284354..2c66fc6 100644 --- a/script/I01_scan.py +++ b/script/I01_scan.py @@ -1,12 +1,12 @@ ##################### ## INPUT PARAMETERS## -POS_START = 150 -POS_END = 175 +POS_START = 150 #150 +POS_END = 175 #175 POS_STEP = 0.5 #ENERGIES = [704.0,708.7] # Fe -ENERGIES = [630] # +ENERGIES = [530] # ##################### @@ -36,7 +36,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/I02_scan.py b/script/I02_scan.py index 4ac93cb..4dd7f61 100644 --- a/script/I02_scan.py +++ b/script/I02_scan.py @@ -36,7 +36,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/RMU_RY_scan.py b/script/RMU_RY_scan.py index 1060a7e..b4d8fdf 100644 --- a/script/RMU_RY_scan.py +++ b/script/RMU_RY_scan.py @@ -66,7 +66,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/RMU_Rx_scan.py b/script/RMU_Rx_scan.py index 1060a7e..b4d8fdf 100644 --- a/script/RMU_Rx_scan.py +++ b/script/RMU_Rx_scan.py @@ -66,7 +66,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/RMU_Rz_scan.py b/script/RMU_Rz_scan.py index 81f8348..c477f7d 100644 --- a/script/RMU_Rz_scan.py +++ b/script/RMU_Rz_scan.py @@ -66,7 +66,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/TEMP_wait_fill.py b/script/TEMP_wait_fill.py index 8c599dd..8c81913 100644 --- a/script/TEMP_wait_fill.py +++ b/script/TEMP_wait_fill.py @@ -6,28 +6,31 @@ import os,time,subprocess # it returns True if T control script is running AND the control is switched ON # if the script is not running OR the control is switched OFF then this check will return False def check_Tcontrol_on(): - prog = os.popen("caget -noname -num -nostat X07MA-ES1-TEMP:CONTROL") - sp=prog.read() - if sp =='': - Tcontrol_on = False - else: - sp = float(sp) - if sp != 1: - Tcontrol_on = False - else: - Tcontrol_on = True - # print "Tctrl on =",Tcontrol_on + try: + #prog = os.popen("caget -noname -num -nostat X07MA-ES1-TEMP:CONTROL") + sp = float( TControl.read() ) + except: # if channel doesn't exist because orange window with script is not running + #Tcontrol_on = False + sp = 0 + finally: +# sp=prog.read() + if sp != 1: + Tcontrol_on = False + else: + Tcontrol_on = True + return Tcontrol_on #def check_Tcontrol_on(): # return (caget('X07MA-ES1-TEMP:CONTROL','i') == 1) - Tctrl = check_Tcontrol_on() +#print ("Tctrl value:", Tctrl) + if Tctrl == False : - print 'T auto control not running.' - sp = caget("X07MA-PC-TC:DMD:LOOP1:SETPOINT") + sp = temperature.read() # caget("X07MA-PC-TC:DMD:LOOP1:SETPOINT") + print 'T auto control not running. Setpoint = ' + str(sp) + ' K' # path contains the path of the refill log file path1=time.strftime("%Y_%m", time.localtime()) @@ -35,7 +38,7 @@ if Tctrl == False : path="/sls/X07MA/data/x07maop/Data1/"+path1+"/"+path2 +"/"+"refill.log" if (sp<2.0): - t = caget("X07MA-PC-TC:STS:T1",'d') + t = temperature.readback.read() # caget("X07MA-PC-TC:STS:T1",'d') print "t= ",t hl = caget("X07MA-PC-HE:LEVELB",'d') print "hl= ",hl diff --git a/script/TimeScan_ESR.py b/script/TimeScan_ESR.py index 8b6b6ea..3812243 100644 --- a/script/TimeScan_ESR.py +++ b/script/TimeScan_ESR.py @@ -3,6 +3,8 @@ FIELD = "Hx" START_FIELD = -0.1 ACQPOINTS = 100 +ACQTIME_SECS = 60 +ACQLIM = 'POINTS' ENERGIES = (707.90, 703.90) ENERGY_CHANGE_SLEEP = 2.0 MODE = 'CIRC +' @@ -10,6 +12,8 @@ OFFSET = -1.0 """ +entry_time = time.time() + iPS = False # false for old power supply, True for new (Oxford Instr) supply #close_shutter_at_zero = False # True to close shutter during B field scan when it is close to 0 T @@ -34,7 +38,7 @@ if MODE is not None: pol_mode.write(MODE) if OFFSET is not None: pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET) -caputq('X07MA-PC:CSCALER.INPB', '1') +#caputq('X07MA-PC:CSCALER.INPB', '1') # open shutter caput('X07MA-FE-PH1:CLOSE4BL',1) @@ -53,20 +57,28 @@ if len(ENERGIES) ==2: else: dif_series = None -set_preference(Preference.ENABLED_PLOTS, ['field', 'TEY', 'trans','ESR_extrachannel']) -#set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'trans_norm':1}) +set_preference(Preference.ENABLED_PLOTS, ['field', 'tey_norm', 'ADC3','ADC4','ADC7','ADC6']) +set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'ADC3':1, 'ADC4':1, 'ADC7':1, 'ADC6':1}) +set_preference(Preference.DOMAIN_AXIS, 'Time') field_var = 'fieldAnalogZ' if (FIELD == "Hz") else 'fieldAnalogX' -scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ - field_var,'ESR_extrachannel', 'tey_norm','trans_norm'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) +scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'ADC3', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ + field_var,'ADC4','ADC7','ADC6', 'tey_norm','trans_norm','Time'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) +#scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ + # field_var,'ESR_extrachannel', 'tey_norm','trans_norm', 'fieldX' ,'fieldZ'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) + scan.start() write_logs() print "Waiting for start field" -if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: +#if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: +# enforce field setting here, i.e. it must be set +if abs(caget('X07MA-PC-MAG:X:DMD') - START_FIELD) > 0.00001: + time.sleep(1.0) ramp_rate.write(2.0) + time.sleep(1.0) field.write(START_FIELD) if iPS == True: caput("X07MA-PC-MAG:X:DMD",float(START_FIELD)) @@ -84,7 +96,25 @@ if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: print "Done waiting" else: time.sleep(3.0) - wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) +# wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + + ### this waiting procedure was introduced because sometimes the field does not move and the whole script gets stuck then. + difference = field.readback.read() - START_FIELD + difference0 = difference # difference0 is the field offset before entering the stabilization loop + last_difference = difference # last_difference is updated during the stabilization loop + while abs(difference) > FIELD_PRECISION: + time.sleep(5.0) + difference = field.readback.read() - START_FIELD + # resend a start ramp in case nothing is happening, ie when it is stuck in this waitfield + if abs(difference-difference0) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + # also resend a start ramp in case nothing is happening wrt to the last 5 seconds + elif abs(difference-last_difference) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + last_difference = difference #open_valve(2.0) @@ -117,6 +147,12 @@ wait_device(pol_done, "DONE") #caput("X07MA-PC-MAG:X:DMD",float(END_FIELD)) +# buffer these values to increase speed +pol_mode_buffer = float(pol_mode.getPositions().index(pol_mode.readback.read())) +pol_angle_buffer = pol_angle.read() #polAngle.get() + + +start_time = time.time() index = 0 while(True): @@ -138,33 +174,43 @@ while(True): energy.write(setpoint2) sleep( ENERGY_CHANGE_SLEEP ) # Settling time - while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error + #while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error #Detector field readback - field_readback = field.readback.read() #fieldReadback.get() + #field_readback = field.readback.read() #fieldReadback.get() + field_readback = field.readback.read() - detector1 = signal_tey.read() #TEY.get() - detector2 = signal_i0.read() #I0.get() - detector3 = signal_trans.read() #trans.get() - detector4 = float(pol_mode.getPositions().index(pol_mode.readback.read())) #polarization.get() - detector5 = pol_angle.read() #polAngle.get() - detector6 = temperature.readback.read() #temperature.get() - detector7 = current.read() - detector8 = signal_field_analog_z.read() if FIELD =="Hz" else signal_field_analog_x.read() # fieldAnalogX.get() - # ESR HACK - detector9 = signal_field_analog_z.read() # USE ADC4 here as additional detector - - _tey_norm = detector1/detector2 - _trans_norm = detector3/detector2 - - if dif_series is not None: - if setpoint2 == ENERGIES[0]: - first = _tey_norm - else: - dif = _tey_norm-first - dif_series.appendData(field_readback,dif) - if after_sample(): #To call check_id_error() - break - scan.append ([field_readback, setpoint2], [field_readback, readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9, _tey_norm, _trans_norm]) + detector1 = signal_tey.read() #TEY.get() + detector2 = signal_i0.read() #I0.get() + detector3 = signal_trans.read() #trans.get() + detector4 = pol_mode_buffer #float(pol_mode.getPositions().index(pol_mode.readback.read())) #polarization.get() + detector5 = pol_angle_buffer #pol_angle.read() #polAngle.get() + detector6 = temperature.readback.read() #temperature.get() + detector7 = current.read() + detector8 = signal_field_analog_z.read() if FIELD =="Hz" else signal_field_analog_x.read() # fieldAnalogX.get() + # ESR HACK + detector9 = signal_field_analog_z.read() # USE ADC4 here as additional detector + detector10 = adc7.read() # New in 2021: Also use ADC7 here as additional detector + detector11 = adc6.read() # Newer in 2021: Also use ADC6 here as additional detector + #if FIELD =="Hz": + # Hz_rb = field_z.readback.read() + #else: + # Hz_rb = 0.0 + #Hx_rb = field_x.readback.read() + + _tey_norm = detector1/detector2 + _trans_norm = detector3/detector2 + + if dif_series is not None: + if setpoint2 == ENERGIES[0]: + first = _tey_norm + else: + dif = _tey_norm-first + dif_series.appendData(field_readback,dif) + + + # if after_sample(): #To call check_id_error() + # break + scan.append ([field_readback, setpoint2], [field_readback, readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9, detector10, detector11, _tey_norm, _trans_norm,time.time()]) #if field_done.read() == 1: #If not ramping #ramp_done.get() == 1: #if abs(field_readback - END_FIELDafter) < 0.007: REMOVED by Jan @@ -178,14 +224,31 @@ while(True): #print "Field has reached target, breaking execution." #break index = index+1 - - if index == ACQPOINTS: - break + + # break conditions, either based on acquisition time or acquisition data points + if ACQLIM == 'POINTS': + if index == ACQPOINTS: + break + else: + execution_time = time.time() - entry_time + if execution_time > ACQTIME_SECS: + break scan.end() log_scan_filename() + +end_time = time.time() +acq_time = end_time - start_time + +if ACQLIM == 'POINTS': + print('{} points in {} secs. --> sampling rate of {} Sa/s'.format(ACQPOINTS, acq_time, ACQPOINTS/acq_time)) +else: + print('{} points in {} secs. --> sampling rate of {} Sa/s'.format(index, acq_time, index/acq_time)) + + + #if RAMP_RATE is not None: # if FIELD == "Hz": # print "Reset ramp rate-z" diff --git a/script/TimeScan_ESR_old.py b/script/TimeScan_ESR_old.py new file mode 100644 index 0000000..8b6b6ea --- /dev/null +++ b/script/TimeScan_ESR_old.py @@ -0,0 +1,198 @@ +#Parameters +""" +FIELD = "Hx" +START_FIELD = -0.1 +ACQPOINTS = 100 +ENERGIES = (707.90, 703.90) +ENERGY_CHANGE_SLEEP = 2.0 +MODE = 'CIRC +' +OFFSET = -1.0 +""" + + +iPS = False # false for old power supply, True for new (Oxford Instr) supply + +#close_shutter_at_zero = False # True to close shutter during B field scan when it is close to 0 T +#signal_field_analog_x + + +if iPS == True: + caput('X07MA-ES1-IPS:RAMP-ENBL', 1) # enable non-overshoot mode + +FIELD_PRECISION = 0.01 +if FIELD == field_z: FIELD = "Hz" +field = field_z if FIELD == "Hz" else (field_x_ips if iPS else field_x ) +field_done = field_z_done if FIELD == "Hz" else (None if iPS else field_x_done) +ramp_rate = ramp_rate_z if FIELD == "Hz" else (ramp_rate_x_ips if iPS else ramp_rate_x) + +#Pre-actions +#cawait('ACOAU-ACCU:OP-MODE', 'Light Available', type = 's') + +if NO_BEAM_CHECK == False: + wait_beam() +if MODE is not None: + pol_mode.write(MODE) +if OFFSET is not None: + pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET) +caputq('X07MA-PC:CSCALER.INPB', '1') + +# open shutter +caput('X07MA-FE-PH1:CLOSE4BL',1) +cawait('X07MA-FE-PH1:MS2', 1) +print "OK" + +#if RAMP_RATE is not None: +# ramp_rate.write(RAMP_RATE) +# ramp_rate.waitInPosition(RAMP_RATE,10000) + + + +if len(ENERGIES) ==2: + # dif_series = plot([],"Dif", get_context()="Dif")[0].getSeries(0) + dif_series = plot([],"Dif")[0].getSeries(0) +else: + dif_series = None + +set_preference(Preference.ENABLED_PLOTS, ['field', 'TEY', 'trans','ESR_extrachannel']) +#set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'trans_norm':1}) + +field_var = 'fieldAnalogZ' if (FIELD == "Hz") else 'fieldAnalogX' +scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', \ + field_var,'ESR_extrachannel', 'tey_norm','trans_norm'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) +scan.start() + +write_logs() + +print "Waiting for start field" + +if abs(field.readback.read() - START_FIELD) > FIELD_PRECISION: + ramp_rate.write(2.0) + field.write(START_FIELD) + if iPS == True: + caput("X07MA-PC-MAG:X:DMD",float(START_FIELD)) + + if field_done is None: + #ramp_rate.write(2.0) + ramp_rate.waitInPosition(2.0,10000) + time.sleep(1.0) + caput("X07MA-ES1-IPS:ACTION", 1) + time.sleep(3.0) + wait_device_in_range(field, START_FIELD, FIELD_PRECISION) + print "Waiting field done..." + while caget("X07MA-ES1-IPS:OUTPUT_RBV", "i") != 0 : + time.sleep(0.1) + print "Done waiting" + else: + time.sleep(3.0) + wait_device(field_done, 1) #ramp_done.wait_for_value(1.0) + + +#open_valve(2.0) + + + +print "Set energy..." +setpoint2 = ENERGIES[0] +print setpoint2 +energy.write(setpoint2) +sleep( ENERGY_CHANGE_SLEEP ) # Settling time + +wait_device(energy_done, 1 ) + +wait_device(pol_done, "DONE") + + +#if WAIT_STABLE_TEMPERATURE == True: +# wait_temp() + + +#if RAMP_RATE is not None: +# ramp_rate.write(RAMP_RATE) +# ramp_rate.waitInPosition(RAMP_RATE,10000) + +#print "Set end field" +#field.write(END_FIELD) #caputq('X07MA-PC-PS2:M:GO.A', END_FIELD) + +#if iPS == True: + #caput("X07MA-PC-MAG:X:DMD",float(END_FIELD)) + + + +index = 0 +while(True): + #Dimension 2START_FIELD = -0.2 + #ArrayPositioner Energy + for setpoint2 in ENERGIES: + if len (ENERGIES)>1: + #Energy.put(setpoint2, timeout=None) # TODO: Set appropriate timeout + energy.write(setpoint2) + sleep( ENERGY_CHANGE_SLEEP ) # Settling time + else: + sleep( 0.25 ) # TODO: Check + + #TODO: change to Controlled variable? + readback2 = energy_readback.read() #EnergyReadback.get() + if abs(readback2 - setpoint2) > 0.1 : # TODO: Check accuracy +# raise Exception('Energy could not be set to the value ' + str(setpoint2)) + #print 'Energy could not be set to the value, try again. ' + str(setpoint2) + energy.write(setpoint2) + sleep( ENERGY_CHANGE_SLEEP ) # Settling time + + while True: # if ABORT_ON_ID_ERROR == False, waits reading with no ID error + #Detector field readback + field_readback = field.readback.read() #fieldReadback.get() + + detector1 = signal_tey.read() #TEY.get() + detector2 = signal_i0.read() #I0.get() + detector3 = signal_trans.read() #trans.get() + detector4 = float(pol_mode.getPositions().index(pol_mode.readback.read())) #polarization.get() + detector5 = pol_angle.read() #polAngle.get() + detector6 = temperature.readback.read() #temperature.get() + detector7 = current.read() + detector8 = signal_field_analog_z.read() if FIELD =="Hz" else signal_field_analog_x.read() # fieldAnalogX.get() + # ESR HACK + detector9 = signal_field_analog_z.read() # USE ADC4 here as additional detector + + _tey_norm = detector1/detector2 + _trans_norm = detector3/detector2 + + if dif_series is not None: + if setpoint2 == ENERGIES[0]: + first = _tey_norm + else: + dif = _tey_norm-first + dif_series.appendData(field_readback,dif) + if after_sample(): #To call check_id_error() + break + scan.append ([field_readback, setpoint2], [field_readback, readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9, _tey_norm, _trans_norm]) + + #if field_done.read() == 1: #If not ramping #ramp_done.get() == 1: + #if abs(field_readback - END_FIELDafter) < 0.007: REMOVED by Jan + #if abs(field_readback - END_FIELD) < 0.007: + # if iPS==True: + # print "Waiting field done..." + # while caget("X07MA-ES1-IPS:OUTPUT_RBV", "i") != 0 : + # time.sleep(0.1) + # print "Done waiting" + + #print "Field has reached target, breaking execution." + #break + index = index+1 + + if index == ACQPOINTS: + break + +scan.end() + +log_scan_filename() + +#if RAMP_RATE is not None: +# if FIELD == "Hz": +# print "Reset ramp rate-z" +# ramp_rate.write(0.35) +# ramp_rate.waitInPosition(0.35,10000) +# else: +# print "Reset ramp rate-x" +# ramp_rate.write(2.0) +# ramp_rate.waitInPosition(2.0,10000) + diff --git a/script/VerticalScan.py b/script/VerticalScan.py index 6a402fd..91e1f7c 100644 --- a/script/VerticalScan.py +++ b/script/VerticalScan.py @@ -1,82 +1,95 @@ ##################### ## INPUT PARAMETERS## -POS_START =4 -POS_END = 27 -POS_STEP = 0.5 - +#POS_START = 1 +#POS_END = 30 # 25.2 +POS_START = 17 +POS_END = 20.5 +POS_STEP = 0.05 #0.25 +#POS_START =4.5 +#POS_END = 7 #POS_STEP = 0.1 #""" #POS_START = 7 #POS_END = 15 #POS_STEP = 0.25 #""" - +#ENERGIES = [458.4] #Ti +#ENERGIES = [458.4,454] #Ti +#ENERGIES = [1030, 1015]# Zn #ENERGIES = [532, 523]# #ENERGIES = [363.2, 356]# Nb #ENERGIES = [782.50, 775.0] -#ENERGIES = [400.7, 396.0] # N +#ENERGIES = [395.0, 410] # N #ENERGIES = [401.1,403] #Mo285 -#ENERGIES = [577.0, 573.0] # Cr -#ENERGIES = [459.5,452] #Ti +#ENERGIES = [573.0] # Cr +#ENERGIES = [572.0] #ENERGIES = [692.0] # F -#ENERGIES = [696.5, 680.0] # F +#ENERGIES = [696.7, 680.0] # F #ENERGIES = [1110,1125.5] #STO -#ENERGIES = [397.7,392] # Pc -#ENERGIES = [708.3, 700.0] # Fe +#ENERGIES = [397.6,395] # N +#ENERGIES = [708.1, 704] # Fe +#ENERGIES = [783.15,771.0] # Ba +#ENERGIES = [700.0] #ENERGIES = [530] #O -ENERGIES = [700.0,708.0] #Fe -#ENERGIES = [931.7, 925] #Cu +#ENERGIES = [707., 704.] # Fe +#ENERGIES = [706.6, 704] # Fe metal +#ENERGIES = [708.3] +#ENERGIES = [931.7]#, 925] #Cu #ENERGIES = [928.4, 925] #CuO -#ENERGIES = [929.3] #Cu +#ENERGIES = [928.4] #Cu +#ENERGIES = [928.4, 707.5] #Cu, Fe special #ENERGIES = [927, 929] #Cu -#ENERGIES = [928.5, 931] #CuGly special #ENERGIES = [774.0] # Co -#ENERGIES = [776.9, 774.0] # Co +#ENERGIES = [777., 774.0] # Co #ENERGIES = [851.3,842.0] # Ni -#ENERGIES = [848.5, 846] # La +ENERGIES = [639.5,630.0] # Mn +#ENERGIES = [848.5, 842.0] # La #ENERGIES = [576.4, 560.0] #Cr -#ENERGIES = [570.0,576.3] #Cr +#ENERGIES = [573.0,576.3] #Cr #ENERGIES = [485.0,490.0] # Ru -#ENERGIES = [642.5,633.0] # Mn -#ENERGIES = [465.0,450.0] # STO -#ENERGIES = [1067, 1076 ] # Sm +#ENERGIES = [638.8,636.6] # Mn +#ENERGIES = [459.5,455] #Ti +#ENERGIES = [1067, 1076.4 ] # Sm #ENERGIES = [870, 880.3 ] # Ce #ENERGIES = [1170, 1181 ] # Gd -#ENERGIES = [285] #C +#ENERGIES = [280]# C +#ENERGIES = [300.0,280]# C #ENERGIES = [1370.0,1380.0] #Er?? -#ENERGIES = [1400.6,1390.0] #Er +#ENERGIES = [1400.6,1395.0] #Er #ENERGIES = [1390.0] #Er #ENERGIES = [1300, 1312 ] # Mg -#ENERGIES = [1457.8] # Dy -#ENERGIES = [1290.0, 1280.0] # Dy -#ENERGIES = [1344.2, 1346 ] # Ho +#ENERGIES = [1289.5, 1282.5] # Dy +#ENERGIES = [1344.2, 1338 ] # Ho #ENERGIES = [1456.9, 1450 ] # Tm #ENERGIES = [1566.0,1554.0] # Al #ENERGIES = [1850, 1820]# Si #ENERGIES = [931.7, 925] # Cu metal #ENERGIES = [402, 397] # Ta #ENERGIES = [395,390] #Mo -#ENERGIES = [928.6]# Cu1 +#ENERGIES = [928.6,925]# Cu1 #ENERGIES = [782.50, 775.0] # Ba #ENERGIES = [782.50] # Ba -#ENERGIES = [1233.7, 1225] # Tb +#ENERGIES = [1234.5, 1225] # Tb #ENERGIES = [976, 970] # Nd #ENERGIES = [1185] # Gd #ENERGIES = [405.5, 390] # Sc -#ENERGIES = [1289.5, 1280] # Dy edge, pre-edge +#ENERGIES = [1289.5, 1282] # Dy edge, pre-edge #ENERGIES = [1345, 1338] # Ho edge, pre-edge #ENERGIES = [1290] # Dy #ENERGIES = [1125.6]# Eu -#ENERGIES = [774,777.3] # Co -#ENERGIES = [516, 503] # V +#ENERGIES = [774,777.6] # Co +#ENERGIES = [517.5, 503] # V +#ENERGIES = [510] # V predge #ENERGIES = [1455,1420] # Se -#ENERGIES = [285.1, 280.0]# C +#ENERGIES = [285.3, 280.0]# C +#ENERGIES = [368, 367] # Ag -#ENERGIES = [ 1650.0 ] +#ENERGIES = [1076.0] ##################### -open_valve() + +#open_valve() # commented out Jan.21 for test #caput("X07MA-OP-VG13:WT_SET",1) #time.sleep(0.1) @@ -102,7 +115,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) @@ -114,6 +127,6 @@ ret70= lscan(sample_vert,sensors, POS_START, POS_END, POS_STEP, latency = 0.25, #if name is None: # name=get_scan_filename() -#print "Created data file: " + str(name) +# print "Created data file: " + str(name) close_valve() diff --git a/script/debugging.py b/script/debugging.py new file mode 100644 index 0000000..829ffc9 --- /dev/null +++ b/script/debugging.py @@ -0,0 +1,6 @@ +for ii in range(len(pos)): + + if (ii == 3) or (ii == 5): + continue; + + print(smps[ii]); \ No newline at end of file diff --git a/script/harmonic_v2.py b/script/harmonic_v2.py index 4c6543f..5406cd6 100644 --- a/script/harmonic_v2.py +++ b/script/harmonic_v2.py @@ -1,4 +1,4 @@ -ID_ENERGY = 770 +ID_ENERGY = 852 diff --git a/script/local.groovy b/script/local.groovy new file mode 100644 index 0000000..eef7106 --- /dev/null +++ b/script/local.groovy @@ -0,0 +1,3 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Deployment specific global definitions - executed after startup.groovy +/////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/script/local.js b/script/local.js new file mode 100644 index 0000000..e2eeaad --- /dev/null +++ b/script/local.js @@ -0,0 +1,4 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Deployment specific global definitions - executed after startup.js +/////////////////////////////////////////////////////////////////////////////////////////////////// + diff --git a/script/local.py b/script/local.py index 7cf99fe..0eb970d 100644 --- a/script/local.py +++ b/script/local.py @@ -97,6 +97,7 @@ class TransNorm(ReadonlyRegisterBase): add_device(TeyNorm("tey_norm"), True) add_device(TransNorm("trans_norm"), True) +set_device_alias(temperature.readback, "temperature_readback") ################################################################################################### @@ -139,6 +140,11 @@ def wait_device_in_range(dev, value, range, timeout=-1): dev.waitValueInRange(value, range, timeout) # print "Done waiting." +#TODO: +# - OTF outout folder should not be /sls/X07MA/data/x07maop/Data1/yyyy_mm/yyyymmdd/ but somewhere visible to e account. +# - One option is make /sls/X07MA/data/x07maop/Data1/OTF mode 755, and configure OTF to write /sls/X07MA/data/x07maop/Data1/OTF/yyyymmdd +# - Then e-account (and x07maop) read from there (get the newest file) and don't have to move the file there after processing. + def convert_file(input_file_name, output_file_name, pol = None): #print "Converting data file: " + input_file_name + " to " + output_file_name print "File converted to: ",output_file_name @@ -266,16 +272,40 @@ def set_hx(field, timeout = -1): field_done = None if iPS else field_x_done FIELD_PRECISION = 0.01 + # line below was field.readback.read(). Changed on Feb. 12 2019 because of error message that no readback was found if abs(field_x.readback.read() - field) > FIELD_PRECISION: # added in Feb. 2019 to avoid hanging when setting to current field + print 'Setting Hx to ',field,' Tesla...' + timeout = int(timeout *1000) if timeout>0 else timeout + fieldx.write(float(field)) - if iPS == True: - caput("X07MA-PC-MAG:X:DMD",float(field)) - - print 'Setting Hx to',field,'Tesla...' + #if iPS == True: + # caput("X07MA-PC-MAG:X:DMD",float(field)) + time.sleep(3.0) # wait 3s + + ### this waiting procedure was introduced because sometimes the field does not move and the whole script gets stuck then. + difference = field_x.readback.read() - field + print 'difference at beginning is ',difference,' Tesla...' + difference0 = difference # difference0 is the field offset before entering the stabilization loop + last_difference = difference # last_difference is updated during the stabilization loop + while abs(difference) > FIELD_PRECISION: + print 'difference inside while loop is ',difference,' Tesla...' + time.sleep(5.0) + difference = field_x.readback.read() - field + # resend a start ramp in case nothing is happening, ie when it is stuck in this waitfield + if abs(difference-difference0) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + # also resend a start ramp in case nothing is happening wrt to the last 5 seconds + elif abs(difference-last_difference) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + last_difference = difference + print 'difference after resetting is ',difference,' Tesla...' + print 'Finished while loop' if iPS == True: field_x_ips_output.waitValue(0,timeout) @@ -295,7 +325,11 @@ def set_hz(field, timeout = -1): field_z.write(float(field)) print 'Setting Hz to',field,'Tesla...' time.sleep(3.0) # wait 3s - field_z_done.waitValue(1,timeout) + try: + field_z_done.waitValue(1,timeout) + except: + print('Timeout exceeded for setting z field!') + print "Done setting magnetic field" def set_pol_cplus(offset = None, timeout = -1): @@ -308,7 +342,8 @@ def set_pol_cplus(offset = None, timeout = -1): pol_offset.write(float(offset)) time.sleep(0.5) pol_done.update() - pol_done.waitValue("DONE",timeout) + wait_device(pol_done, "DONE") + #pol_done.waitValue("DONE",timeout) # it hangs.Must use wait_device. CP June 21 print "Done setting x-ray polarization" def set_pol_cminus(offset = None, timeout = -1): @@ -321,7 +356,8 @@ def set_pol_cminus(offset = None, timeout = -1): pol_offset.write(float(offset)) time.sleep(0.5) pol_done.update() - pol_done.waitValue("DONE",timeout) + wait_device(pol_done, "DONE") + #pol_done.waitValue("DONE",timeout) # it hangs. Must use wait_device. CP June 21 print "Done setting x-ray polarization" def set_pol_lin(angle, offset = None, timeout = -1): @@ -335,7 +371,8 @@ def set_pol_lin(angle, offset = None, timeout = -1): pol_offset.write(float(offset)) time.sleep(0.5) pol_done.update() - pol_done.waitValue("DONE",timeout) + wait_device(pol_done, "DONE") + #pol_done.waitValue("DONE",timeout) # it hangs.Must use wait_device. CP June 21 print "Done setting x-ray polarization" def set_temp(value, in_position_band = None): @@ -348,31 +385,47 @@ def set_temp(value, in_position_band = None): #TODO: Replace when this flag works for all temperatures #cawait("X07MA-ES1-TEMP:STATUS", "Stable") #return - temperature.readback.waitValueInRange(float(value), in_position_band, -1) + #temperature.readback.waitValueInRange(float(value), in_position_band, -1) + wait_device_in_range(temperature.readback, float(value), in_position_band, -1) time.sleep(600.0) # wait 10min print "Done setting temperature" -def open_valve(delay = 0.75): +def open_valve(delay = 0.75, timeout=500.0): """ """ - print "Open valve" + print "Opening valve" + start = time.time() valve_try_open.write(1) #TODO: CAPUT time.sleep(float(delay)) while caget("X07MA-OP-VG13:POSITION", "i") != 5 : - time.sleep(0.1) -# print "Retry open valve" - valve_try_open.write(1) + if (timeout>0) and (time.time()-start > timeout): + raise Exception("Timeout opening the valve") + time.sleep(0.1) + #print "Retry open valve" + valve_try_open.write(1) + #print "Valve opened" -def close_valve(delay = 0.5): #TODO: Check default delay +def close_valve(delay = 0.5, timeout=10.0): #TODO: Check default delay """ """ - print "Close valve" + print "Closing valve" valve_try_open.write(0) time.sleep(float(delay)) while caget("X07MA-OP-VG13:POSITION", "i") != 2 : + if (timeout>0) and (time.time()>timeout): + raise Exception("Timeout opening the valve") time.sleep(0.1) - # print "Retry close valve" + #print "Retry close valve" valve_try_open.write(0) + #print "Valve closed" + +def close_shutter(delay = 0.5): #TODO: Check default delay + """ + """ + print "Close photon shutter" + time.sleep(float(delay)) + caput("X07MA-FE-PH1:CLOSE4BL",0) + def set_energy (value, delay=0.5): print "Set energy" @@ -507,7 +560,7 @@ def shutdown(): def has_beam(): """ """ - return beam_status.readback.read() !="Machine Down" + return beam_status.readback.read() !="Machine Down" def wait_beam(): """ @@ -551,7 +604,25 @@ def otf(start, end, time, delay=0.0, mode = None, offset = None, alpha = None, n name = get_exec_pars().name folder = get_context().setup.expandPath("{year}_{month}/{date}"); - run("EnergyScan", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) + if len(name)> 38: + name = name[:38] + print('WARNING: Sample name too long. Name has been truncated.') + + #run("EnergyScan", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) + run("EnergyScan_v2", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) + +def otf2(start, end, time, delay=0.0, mode = None, offset = None, alpha = None, name = None): + """ + """ + if name is None: + name = get_exec_pars().name + folder = get_context().setup.expandPath("{year}_{month}/{date}"); + + if len(name)> 38: + name = name[:38] + print('WARNING: Sample name too long. Name has been truncated.') + + run("EnergyScan_v2", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) def hyst_cont(field, init_field, final_field, ramp_speed, energies): """ @@ -563,10 +634,15 @@ def hyst_cont_ESR(field, init_field, final_field, ramp_speed, energies): """ run("HystScan_ESR",{"FIELD":field, "START_FIELD":init_field, "END_FIELD":final_field, "ENERGIES":energies, "RAMP_RATE":ramp_speed, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) -def acq_cont_ESR(field, init_field, datapoints, energies): +def acq_cont_ESR_N(field, init_field, datapoints, energies): """ """ - run("TimeScan_ESR",{"FIELD":field, "START_FIELD":init_field, "ACQPOINTS":datapoints, "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + run("TimeScan_ESR",{"FIELD":field, "START_FIELD":init_field, "ACQPOINTS":datapoints, "ACQLIM":"POINTS", "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + +def acq_cont_ESR_t(field, init_field, acqtime, energies): + """ + """ + run("TimeScan_ESR",{"FIELD":field, "START_FIELD":init_field, "ACQTIME_SECS":acqtime, "ACQLIM":"TIME", "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) def hyst_cont_mult(field, ranges, energies): """ @@ -600,7 +676,7 @@ def scan_e_mult(ranges, settling_time = 0, accumulation_time = None, name = None if name is not None: set_file(name = name) wait_beam() - acc = Accumulator([signal_tey, signal_i0, signal_trans, tey_norm, trans_norm], accumulation_time) + acc = Accumulator([energy_readback,signal_tey, signal_i0, signal_trans, tey_norm, trans_norm], accumulation_time) detectors = acc.getSensors() + [polmod, pol_angle, temperature.readback, current] set_preference(Preference.ENABLED_PLOTS, acc.getSensors()) rscan(energy, detectors, ranges, latency = settling_time, before_read=before_sample, after_read=after_sample) @@ -662,4 +738,8 @@ def write_logs(): log("Gain sample: " + str(caget(keithleys["k1"][2]))) log("Gain i0: " + str(caget(keithleys["k2"][2]))) log("Gain diode: " + str(caget(keithleys["k3"][2]))) + log("XBPM1:V: " + str(caget ("X07MA-FE-XBPM1:posV"))) + log("XBPM2:V: " + str(caget ("X07MA-FE-XBPM2:posV"))) + log("XBPM1:H: " + str(caget ("X07MA-FE-XBPM1:posH"))) + log("XBPM2:H: " + str(caget ("X07MA-FE-XBPM2:posH"))) diff --git a/script/piamonteze@slslc:~ b/script/piamonteze@slslc:~ new file mode 100644 index 0000000..9c6be90 --- /dev/null +++ b/script/piamonteze@slslc:~ @@ -0,0 +1,59 @@ +##################### +## INPUT PARAMETERS## +POS_START = 159.2 #Minn = 150.0 +POS_END = 162.5 #Max = 170.0 +POS_STEP = 0.01 + +#ENERGIES = [363.2, 356.0]# Nb +#ENERGIES = [774. 0] # Co +#ENERGIES = [573.0, 577.0] # Cr +#ENERGIES = [708.3,704.0] # Fe +#ENERGIES = [931.7]# 925.0 ] # Cu +#ENERGIES = [572.0] +ENERGIES = [706]#,708.3,704.0] # Fe +#ENERGIES = [851.3 ,845]#[851.2,848.0] # Ni +#ENERGIES = [280,292] #C +#ENERGIES = [776.9,774] # Co +#ENERGIES = [642.0,630.0] # Mn +#ENERGIES = [1067, 1076.4 ] # Sm +#ENERGIES = [870, 880.3 ] # Ce +#ENERGIES = [516.0, 503.0] # V +#ENERGIES = [510.0] # V + + + +##################### + +#open_valve() +sensors = [tey_norm,signal_tey, signal_i0, signal_trans, trans_norm, sample_vert, energy_readback] + +#TODO: #Why must set range to "auto"? +''' +def before_pass(pass_num, scan): + print "Setting energy = " , ENERGIES[pass_num-1] + set_energy(ENERGIES[pass_num-1]) +lscan(sample_vert,sensors, POS_START, POS_END, POS_STEP, latency =0.5, passes = len(ENERGIES), before_pass=before_pass, range="auto") +''' + +#Setting a different color for each pass: must manage plots manually +#del name +print tey_norm.name + +plots = plot([None]*len(sensors), name = [d.name for d in sensors]) +for p in plots: + p.clear() + p.legendVisible = True + +def after_readout(record, scan): + for i in range(len(plots)): + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) +def before_pass(pass_num): + en = ENERGIES[pass_num-1] + set_energy(en) + open_valve() + + for p in plots: p.addSeries(LinePlotSeries(str(en))) + +ret= lscan(sample_hor,sensors, POS_START, POS_END, POS_STEP, latency = 0.0, passes = len(ENERGIES), before_pass = before_pass, after_read=after_readout, plot_disabled=True, range="auto") + +close_valve() diff --git a/script/piamonteze@x07ma-gw b/script/piamonteze@x07ma-gw new file mode 100644 index 0000000..9c6be90 --- /dev/null +++ b/script/piamonteze@x07ma-gw @@ -0,0 +1,59 @@ +##################### +## INPUT PARAMETERS## +POS_START = 159.2 #Minn = 150.0 +POS_END = 162.5 #Max = 170.0 +POS_STEP = 0.01 + +#ENERGIES = [363.2, 356.0]# Nb +#ENERGIES = [774. 0] # Co +#ENERGIES = [573.0, 577.0] # Cr +#ENERGIES = [708.3,704.0] # Fe +#ENERGIES = [931.7]# 925.0 ] # Cu +#ENERGIES = [572.0] +ENERGIES = [706]#,708.3,704.0] # Fe +#ENERGIES = [851.3 ,845]#[851.2,848.0] # Ni +#ENERGIES = [280,292] #C +#ENERGIES = [776.9,774] # Co +#ENERGIES = [642.0,630.0] # Mn +#ENERGIES = [1067, 1076.4 ] # Sm +#ENERGIES = [870, 880.3 ] # Ce +#ENERGIES = [516.0, 503.0] # V +#ENERGIES = [510.0] # V + + + +##################### + +#open_valve() +sensors = [tey_norm,signal_tey, signal_i0, signal_trans, trans_norm, sample_vert, energy_readback] + +#TODO: #Why must set range to "auto"? +''' +def before_pass(pass_num, scan): + print "Setting energy = " , ENERGIES[pass_num-1] + set_energy(ENERGIES[pass_num-1]) +lscan(sample_vert,sensors, POS_START, POS_END, POS_STEP, latency =0.5, passes = len(ENERGIES), before_pass=before_pass, range="auto") +''' + +#Setting a different color for each pass: must manage plots manually +#del name +print tey_norm.name + +plots = plot([None]*len(sensors), name = [d.name for d in sensors]) +for p in plots: + p.clear() + p.legendVisible = True + +def after_readout(record, scan): + for i in range(len(plots)): + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) +def before_pass(pass_num): + en = ENERGIES[pass_num-1] + set_energy(en) + open_valve() + + for p in plots: p.addSeries(LinePlotSeries(str(en))) + +ret= lscan(sample_hor,sensors, POS_START, POS_END, POS_STEP, latency = 0.0, passes = len(ENERGIES), before_pass = before_pass, after_read=after_readout, plot_disabled=True, range="auto") + +close_valve() diff --git a/script/refill_1kpot.py b/script/refill_1kpot.py index 3a041bf..85ef35f 100644 --- a/script/refill_1kpot.py +++ b/script/refill_1kpot.py @@ -17,8 +17,8 @@ if (sp<2.0): t=temperature.readback.read() if t < 4: break - print "Wait 7 min ..." - time.sleep(420) + print "Wait 10 min ..." + time.sleep(600) print "Set needle valve to 0%" needle.write(0.0) print "Wait temperature stabilization" diff --git a/script/restore/local.py b/script/restore/local.py new file mode 100755 index 0000000..0eb970d --- /dev/null +++ b/script/restore/local.py @@ -0,0 +1,745 @@ +################################################################################################### +# Deployment specific global definitions - executed after startup.py +################################################################################################### + +import ch.psi.fda.ProcessorFDA as ProcessorFDA +import ch.psi.pshell.data.LayoutFDA as LayoutFDA +import ntpath +import traceback +import ch.psi.pshell.epics.ChannelSettlingCondition as ChannelSettlingCondition + +WAIT_STABLE_TEMPERATURE = True # True : before energy scan and hyst scan the routine wait_temp() is launched +NO_BEAM_CHECK = False # setting this to true disables the waiting for the beam before starting energy or hyst scan +ABORT_ON_ID_ERROR = False + +_SAMPLE_NAME = "DUMMY" + +#As the folder is shared to all daily datasets, then configuration must be set to {data}/{year}_{month}/{date} +#and the file prefix manually set as: +LayoutFDA.setFilePrefix("{date}_{hour}{min}_{name}") + + +energy.setBlockingWrite(True) + + +energy_id.setSettlingCondition(ChannelSettlingCondition("X07MA-ID:DONE", 'DONE')) +energy_id.settlingCondition.latency = 10 + + +#If True, then wait_beam will not check machine status +maintenance_mode = False + + +#Reading Energy Scan configuration file +def getPars(element): + f = open(get_context().setup.getConfigPath() + '/energy_scan.properties') + try: + for line in f: + tokens = line.split("=") + if tokens[0] == str(element): + tokens = tokens[1].split(";") + for i in range(len(tokens)): + tokens[i] = float(tokens[i].strip()) + + return tokens + finally: + f.close() + raise Exception ("Invalid element: " + str(element)) + +def is_id_error(): + return (id_error.read()==0) + +def check_id_error(): + if is_id_error(): + raise Exception ("ID error: check ID status") + + + +################################################################################################### +# Pseudo-devices +################################################################################################### +sim_energy = None +class SimulatedEnergy(Writable): + def write(self, value): + self.put(value) + + def put(self, value, timeout = None): + global sim_energy + sim_energy = value + + def close(self): + pass + + +class SimulatedEnergyReadback(Readable): + def read(self): + global sim_energy + return sim_energy; + + def get(self): + return self.read() + + def close(self): + pass + +sim_energy = SimulatedEnergy() +sim_energy_readback = SimulatedEnergyReadback() + + + +class TeyNorm(ReadonlyRegisterBase): + def read(self): + return signal_tey.take() / signal_i0.take(); + +class TransNorm(ReadonlyRegisterBase): + def read(self): + return signal_trans.take() / signal_i0.take(); + +add_device(TeyNorm("tey_norm"), True) +add_device(TransNorm("trans_norm"), True) +set_device_alias(temperature.readback, "temperature_readback") + + +################################################################################################### +# Utilities +################################################################################################### + +def run_fda(file_name, arguments={}): + """ + Run FDA loop + """ + ProcessorFDA().execute(file_name,arguments) + + +run ("Accumulator") + +def get_next_fid(folder, prefix): + try: + import glob + files = glob.glob(folder + prefix + '*_*.txt') + last = max(files) + index = int (last[last.rfind('_')+1 : last.rfind('.')]) + 1 + return index + except: + return 0 + +def wait_channel(name, value, timeout=None, type='s'): + print "Waiting " + str(name) + " = " + str(value),"... " + cawait(name, value, timeout = timeout, type=type) +# print "Done waiting." + +def wait_device(dev, value, timeout=-1): + timeout = int(timeout *1000) if timeout>0 else timeout + #print "Waiting " + dev.getName() + " = " + str(value),"... " + dev.waitValue(value,timeout) +# print "Done waiting." + +def wait_device_in_range(dev, value, range, timeout=-1): + timeout = int(timeout *1000) if timeout>0 else timeout + print "Waiting " + dev.getName() + " = " + str(value),"... " + dev.waitValueInRange(value, range, timeout) +# print "Done waiting." + +#TODO: +# - OTF outout folder should not be /sls/X07MA/data/x07maop/Data1/yyyy_mm/yyyymmdd/ but somewhere visible to e account. +# - One option is make /sls/X07MA/data/x07maop/Data1/OTF mode 755, and configure OTF to write /sls/X07MA/data/x07maop/Data1/OTF/yyyymmdd +# - Then e-account (and x07maop) read from there (get the newest file) and don't have to move the file there after processing. + +def convert_file(input_file_name, output_file_name, pol = None): + #print "Converting data file: " + input_file_name + " to " + output_file_name + print "File converted to: ",output_file_name + sep = "\t" + line_sep = "\n" + MODE = pol_mode.read() + if pol is None: + pol = pol_angle.read() if (MODE == "LINEAR") else pol_mode.readback.read() + with open(input_file_name) as inp: + lines = inp.readlines() + with open(output_file_name, "wb") as out: + #Original header: + #out.write("Ecrbk" + sep + "CADC1" + sep + "CADC2" + sep + "CADC3" + sep + "CADC4" + sep + "CADC5" + sep + "MCurr" + sep + "Time" + sep + "FieldX" + sep + "FieldZ" + sep + "Pol" + sep + "Temperature" + sep + "NORMtey" + sep + "NORMdiode" + line_sep) + #Compatible header: + (db, st) = ("java.lang.Double", "java.lang.String") + out.write("#Ecrbk" + sep + "CADC1" + sep + "CADC2" + sep + "CADC3" + sep + "CADC4" + sep + "CADC5" + sep + "MCurr" + sep + "Time" + sep + "FieldX" + sep + "FieldZ" + sep + "Pol" + sep + "Temperature" + sep + "NORMtey" + sep + "NORMdiode" + line_sep) + out.write("#"+ db + sep + db + sep + db + sep + db + sep + db + sep + db + sep + db + sep + db + sep + db + sep + db + sep + st + sep + db + sep + db + sep + db + line_sep) + s = sep + for line in lines[1:]: + line = line.strip() + if line=="": break + try: + (Ecrbk, CADC1, CADC2, CADC3, CADC4, CADC5, MCurr, cffrbk, IDErbk, NORM, time, MAGX, MAGZ, EXPT) = line.split(" ") + normtey=repr( float(CADC1)/float(CADC2)) + normdiode=repr(float(CADC3)/float(CADC2)) + out.write(Ecrbk + s + CADC1 + s + CADC2 + s + CADC3 + s + CADC4 + s + CADC5 + s + MCurr + s + time + s + MAGX + s + MAGZ + s + str(pol) + s + EXPT + s + normtey + s + normdiode + line_sep) + except: + traceback.print_exc() + os.rename(input_file_name, get_context().setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name))) + +def plot_file(file_name, title = None): + """ + """ + table = Table.load(file_name, "\t", '#') + plots = plot(table, title = title) + + +def elog(title, message, attachments = [], author = None, category = "Info", domain = "", logbook = "XTREME", encoding=1): + """ + Add entry to ELOG. + """ + if author is None: + author = "pshell" #get_context().user.name + typ = "pshell" + entry = "" + + cmd = 'G_CS_ELOG_add -l "' + logbook + '" ' + cmd = cmd + '-a "Author=' + author + '" ' + cmd = cmd + '-a "Type=' + typ + '" ' + cmd = cmd + '-a "Entry=' + entry + '" ' + cmd = cmd + '-a "Title=' + title + '" ' + cmd = cmd + '-a "Category=' + category + '" ' + cmd = cmd + '-a "Domain=' + domain + '" ' + for attachment in attachments: + cmd = cmd + '-f "' + attachment + '" ' + cmd = cmd + '-n ' + str(encoding) + cmd = cmd + ' "' + message + '"' + #print cmd + #os.system (cmd) + #print os.popen(cmd).read() + import subprocess + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) + (out, err) = proc.communicate() + if (err is not None) and err!="": + raise Exception(err) + print out + +def get_plot_snapshots(title = None, file_type = "png", temp_path = get_context().setup.getContextPath()): + """ + Returns list with file names of plots snapshots from a plotting context. + """ + sleep(0.1) #Give some time to plot to be finished - it is not sync with acquisition + ret = [] + for p in get_plots(title): + file_name = os.path.abspath(temp_path + "/" + p.getTitle() + "." + file_type) + p.saveSnapshot(file_name , file_type) + ret.append(file_name) + return ret + + +################################################################################################### +#Default scan callbacks +################################################################################################### + +def before_sample(position, scan): + pass + +def after_sample(record=None, scan=None): + if ABORT_ON_ID_ERROR: + check_id_error() + return True + if is_id_error(): + if (record is not None): + record.invalidate() + print "ID error, waiting..." + while is_id_error(): + time.sleep(1.0) + print "ID OK" + return False + return True + +################################################################################################### +#Definitions for importing text batch files +################################################################################################### +#TODO: Should set devices? K10, k11, k24 seem not to be defined.... +keithleys = { + #name:[Setpoint, range, Readback] #TODO +# "k1": [None , 'X07MA-PC-K428:1:setGain', 'X07MA-PC-K428:1:getGain'], +# "k2": [None , 'X07MA-PC-K428:2:setGain', 'X07MA-PC-K428:2:getGain'], +# "k3": [None , 'X07MA-PC-K428:3:setGain', 'X07MA-PC-K428:3:getGain'], + "k1": [None , 'X07MA-PC-K428:1:setGain', 'X07MA-PC-K428:1:getGain','X07MA-PC-K428:1:setGain10x','X07MA-PC-K428:1:getGain10x'], + "k2": [None , 'X07MA-PC-K428:2:setGain', 'X07MA-PC-K428:2:getGain','X07MA-PC-K428:2:setGain10x','X07MA-PC-K428:2:getGain10x'], + "k3": [None , 'X07MA-PC-K428:3:setGain', 'X07MA-PC-K428:3:getGain','X07MA-PC-K428:3:setGain10x','X07MA-PC-K428:3:getGain10x'], + "k10":['X07MA-KEI10:SETVOLTAGE' , 'X07MA-KEI10:RANGE', None, None, None], + "k11":['X07MA-KEI11:SETVOLTAGE' , 'X07MA-KEI11:RANGE', None, None, None], + "k24":['X07MA-KEI2400:setVoltAO', None, None, None, None] +} + +def set_hx(field, timeout = -1): + """ + """ + iPS = False # false for old (Cryogenics) power supply, True for new (Oxford Instr) supply + + fieldx = field_x_ips if iPS else field_x + field_done = None if iPS else field_x_done + + FIELD_PRECISION = 0.01 + + # line below was field.readback.read(). Changed on Feb. 12 2019 because of error message that no readback was found + if abs(field_x.readback.read() - field) > FIELD_PRECISION: # added in Feb. 2019 to avoid hanging when setting to current field + print 'Setting Hx to ',field,' Tesla...' + + timeout = int(timeout *1000) if timeout>0 else timeout + + fieldx.write(float(field)) + + #if iPS == True: + # caput("X07MA-PC-MAG:X:DMD",float(field)) + + time.sleep(3.0) # wait 3s + + ### this waiting procedure was introduced because sometimes the field does not move and the whole script gets stuck then. + difference = field_x.readback.read() - field + print 'difference at beginning is ',difference,' Tesla...' + difference0 = difference # difference0 is the field offset before entering the stabilization loop + last_difference = difference # last_difference is updated during the stabilization loop + while abs(difference) > FIELD_PRECISION: + print 'difference inside while loop is ',difference,' Tesla...' + time.sleep(5.0) + difference = field_x.readback.read() - field + # resend a start ramp in case nothing is happening, ie when it is stuck in this waitfield + if abs(difference-difference0) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + # also resend a start ramp in case nothing is happening wrt to the last 5 seconds + elif abs(difference-last_difference) < FIELD_PRECISION: + caput('X07MA-PC-MAG:STARTRAMP.PROC',1) + print('Field setting stuck: re-starting ramp') + last_difference = difference + print 'difference after resetting is ',difference,' Tesla...' + print 'Finished while loop' + + if iPS == True: + field_x_ips_output.waitValue(0,timeout) + while caget("X07MA-ES1-IPS:OUTPUT_RBV", "i") != 0 : + time.sleep(0.1) + else: + field_x_done.waitValue(1,timeout) + + print "Done setting magnetic field" + + + +def set_hz(field, timeout = -1): + """ + """ + timeout = int(timeout *1000) if timeout>0 else timeout + field_z.write(float(field)) + print 'Setting Hz to',field,'Tesla...' + time.sleep(3.0) # wait 3s + try: + field_z_done.waitValue(1,timeout) + except: + print('Timeout exceeded for setting z field!') + + print "Done setting magnetic field" + +def set_pol_cplus(offset = None, timeout = -1): + """ + """ + print "Set x-ray polarization to c+" + timeout = int(timeout *1000) if timeout>0 else timeout + pol_mode.write("CIRC +") + if offset is not None: + pol_offset.write(float(offset)) + time.sleep(0.5) + pol_done.update() + wait_device(pol_done, "DONE") + #pol_done.waitValue("DONE",timeout) # it hangs.Must use wait_device. CP June 21 + print "Done setting x-ray polarization" + +def set_pol_cminus(offset = None, timeout = -1): + """ + """ + print "Set x-ray polarizaton to c-" + timeout = int(timeout *1000) if timeout>0 else timeout + pol_mode.write("CIRC -") + if offset is not None: + pol_offset.write(float(offset)) + time.sleep(0.5) + pol_done.update() + wait_device(pol_done, "DONE") + #pol_done.waitValue("DONE",timeout) # it hangs. Must use wait_device. CP June 21 + print "Done setting x-ray polarization" + +def set_pol_lin(angle, offset = None, timeout = -1): + """ + """ + print "Set x-ray polarization to linear" + timeout = int(timeout *1000) if timeout>0 else timeout + pol_mode.write("LINEAR") + pol_angle.write(float(angle)) + if offset is not None: + pol_offset.write(float(offset)) + time.sleep(0.5) + pol_done.update() + wait_device(pol_done, "DONE") + #pol_done.waitValue("DONE",timeout) # it hangs.Must use wait_device. CP June 21 + print "Done setting x-ray polarization" + +def set_temp(value, in_position_band = None): + """ + """ + print "Set sample temperature" + temperature.write(float(value)) + if in_position_band is None: + in_position_band = temperature.getResolution() + #TODO: Replace when this flag works for all temperatures + #cawait("X07MA-ES1-TEMP:STATUS", "Stable") + #return + #temperature.readback.waitValueInRange(float(value), in_position_band, -1) + wait_device_in_range(temperature.readback, float(value), in_position_band, -1) + time.sleep(600.0) # wait 10min + print "Done setting temperature" + +def open_valve(delay = 0.75, timeout=500.0): + """ + """ + print "Opening valve" + start = time.time() + valve_try_open.write(1) #TODO: CAPUT + time.sleep(float(delay)) + while caget("X07MA-OP-VG13:POSITION", "i") != 5 : + if (timeout>0) and (time.time()-start > timeout): + raise Exception("Timeout opening the valve") + time.sleep(0.1) + #print "Retry open valve" + valve_try_open.write(1) + #print "Valve opened" + +def close_valve(delay = 0.5, timeout=10.0): #TODO: Check default delay + """ + """ + print "Closing valve" + valve_try_open.write(0) + time.sleep(float(delay)) + while caget("X07MA-OP-VG13:POSITION", "i") != 2 : + if (timeout>0) and (time.time()>timeout): + raise Exception("Timeout opening the valve") + time.sleep(0.1) + #print "Retry close valve" + valve_try_open.write(0) + #print "Valve closed" + +def close_shutter(delay = 0.5): #TODO: Check default delay + """ + """ + print "Close photon shutter" + time.sleep(float(delay)) + caput("X07MA-FE-PH1:CLOSE4BL",0) + + +def set_energy (value, delay=0.5): + print "Set energy" + timeout_ms = 90000 # 1.5 minutes + tolerance = 0.3 + energy.write(float(value)) + try: + energy_done.waitValue(1, timeout_ms) # timeout is now 90 sec, was -1 + except: + if abs(energy.read() - energy_readback.read()) > tolerance: + throw + time.sleep(float(delay)) + print "Done setting energy" + + +def old_set_energy (value, delay=0.5): + """ + """ + print "Set energy" + energy.write(float(value)) + energy_done.waitValue(1, -1) # timeout is now 60, was -1 + time.sleep(float(delay)) + print "Done setting energy" + +def set_cff (value): + """ + """ + cff.write(float(value)) + caput("X07MA-PGM:setE.PROC",1) + energy_done.waitValue(1, -1) + +def set_slit(value): + """ + """ + exit_slit.write(float(value)) + +#1 or 3 +def set_har(value): + """ + """ + print "Set harmonic" + harmonic.write(float(value)) + print "Done setting harmonic" + +#Not connected +def set_volt(keithley, value, delay=0.1): + """ + """ + #keithley.write(fl'10^'+str(8)oat(value)) + if not keithltey in keithleys.keys(): raise Exception("Invalid keithley: " + keithley) + caput(keithleys[keithley][0], float(value)) + time.sharmonicleep(float(delay)) + +#value is int from 1 to 10 +def set_range(keithley, value): + """ + """ + print "Set Keithley range" + if not keithley in keithleys.keys(): raise Exception("Invalid keithley: " + keithley) + v='10^'+str(value) + if value==11: + while True: + caput(keithleys[keithley][1], '10^10') + caput(keithleys[keithley][3], '10x') + time.sleep(1.0) + if (caget(keithleys[keithley][2],'s') == '10^10') and (caget(keithleys[keithley][4],'s') == '10x'): + break + else: + while True: + caput(keithleys[keithley][1], v) + caput(keithleys[keithley][3], '1x') + time.sleep(1.0) + if (caget(keithleys[keithley][2],'s') == v) and (caget(keithleys[keithley][4],'s') == '1x'): + break + print "Done setting Keithley range" + + +def set_fe(opening): + """ + """ + opening = int(opening*1000) + if opening==0: + aperture.write("closed") + elif opening==100: + aperture.write("0.1x0.1 mm") + elif opening==250: + aperture.write("0.25x0.25 mm") + elif opening==500: + aperture.write("0.5x0.5 mm") + elif opening==1000: + aperture.write("1x1 mm") + elif opening==1250: + aperture.write("1.25x1.25 mm") + elif opening==2000: + aperture.write("2x2 mm") + else: + raise Exception("Invalid aperture opening: " + str(opening)) + +def refill_1k(): + """ + """ + #print "in refill_1k" + run("refill_1kpot") + +def wait_temp(): + """ + """ + #print "blabla" +# if (temperature.read() < 2.0): +# t=ct=temperature.readback.read() + #hl=caget("X07MA-PC-HE:LEVELB", 'd') # TODO: not used +# if (t > 3.7): +# print "Refilling 1K pot..." +# refill_1k() + print "Check temperature" + run("TEMP_wait_fill.py") + print "Temperature OK" + +def rampdown(): + """ + """ + field_x.write(0.0) + field_z.write(0.0) + +def shutdown(): + """ + """ + set_fe(0) + rampdown() + + +def has_beam(): + """ + """ + return beam_status.readback.read() !="Machine Down" + +def wait_beam(): + """ + """ + print "Waiting for beam... ", + while not has_beam(): + if maintenance_mode: + print "Maintenence mode: disregarding beam state" + return + sleep(0.1) + print "Beam OK." + +def wait_inj (value, delay=0.5): + """ + """ + wait_channel('X07MA-OP2-EVR:TOPUP-STAT', 'TOPUP-ON') + wait_channel('X07MA-OP2-EVR:TOPUP-STAT', 'TOPUP-OFF') + time.sleep(float(delay)) + + +def set_file(file_name): + """ + """ + #set_exec_pars(name = file_name) #Increment index for each scan, and keep timestamp + set_exec_pars(name = file_name, reset=True) #Different timestamp for each scan, index set to 0 + +class pol_mod(Readable): + def read(self): + mode = pol_mode.read() + if mode == "LINEAR": return 0.0 + if mode == "CIRC +": return 1.0 + if mode == "CIRC -": return 2.0 + return -1.0 +polmod = pol_mod() + + +def otf(start, end, time, delay=0.0, mode = None, offset = None, alpha = None, name = None): + """ + """ + if name is None: + name = get_exec_pars().name + folder = get_context().setup.expandPath("{year}_{month}/{date}"); + + if len(name)> 38: + name = name[:38] + print('WARNING: Sample name too long. Name has been truncated.') + + #run("EnergyScan", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) + run("EnergyScan_v2", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) + +def otf2(start, end, time, delay=0.0, mode = None, offset = None, alpha = None, name = None): + """ + """ + if name is None: + name = get_exec_pars().name + folder = get_context().setup.expandPath("{year}_{month}/{date}"); + + if len(name)> 38: + name = name[:38] + print('WARNING: Sample name too long. Name has been truncated.') + + run("EnergyScan_v2", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None}) + +def hyst_cont(field, init_field, final_field, ramp_speed, energies): + """ + """ + run("HystScan",{"FIELD":field, "START_FIELD":init_field, "END_FIELD":final_field, "ENERGIES":energies, "RAMP_RATE":ramp_speed, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + +def hyst_cont_ESR(field, init_field, final_field, ramp_speed, energies): + """ + """ + run("HystScan_ESR",{"FIELD":field, "START_FIELD":init_field, "END_FIELD":final_field, "ENERGIES":energies, "RAMP_RATE":ramp_speed, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + +def acq_cont_ESR_N(field, init_field, datapoints, energies): + """ + """ + run("TimeScan_ESR",{"FIELD":field, "START_FIELD":init_field, "ACQPOINTS":datapoints, "ACQLIM":"POINTS", "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + +def acq_cont_ESR_t(field, init_field, acqtime, energies): + """ + """ + run("TimeScan_ESR",{"FIELD":field, "START_FIELD":init_field, "ACQTIME_SECS":acqtime, "ACQLIM":"TIME", "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + +def hyst_cont_mult(field, ranges, energies): + """ + """ + run("HystScanMult",{"FIELD":field, "RANGES":ranges, "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":0.5, "MODE":None, "OFFSET":None}) + +def hyst_step(forward, field, init_field, final_field, step, energies, energy_change_sleep = 0.5, field_change_sleep = 22.0, mode = None, offset=None): + """ + """ + run("HystScanStep",{"FIELD":field, "RANGES":[(init_field, final_field, step),], "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":energy_change_sleep, "FIELD_CHANGE_SLEEP":field_change_sleep, "MODE":mode, "OFFSET":offset}) + +def hyst_step_mult(forward, ranges, ramp_speed, energies, energy_change_sleep = 0.5, field_change_sleep = 22.0, mode = None, offset=None): + """ + """ + run("HystScanStep",{"FIELD":field, "RANGES":ranges, "ENERGIES":energies, "ENERGY_CHANGE_SLEEP":energy_change_sleep, "FIELD_CHANGE_SLEEP":field_change_sleep, "MODE":mode, "OFFSET":offset}) + +def scan_e(start, end, step, settling_time = 0, accumulation_time = None, name = None): + """ + """ + if name is not None: + set_file(name = name) + wait_beam() + acc = Accumulator([signal_tey, signal_i0, signal_trans, tey_norm, trans_norm], accumulation_time) + detectors = acc.getSensors() + [polmod, pol_angle, temperature.readback, current] + set_preference(Preference.ENABLED_PLOTS, acc.getSensors()) + lscan(energy, detectors, float(start), float(end), float(step), latency = settling_time, before_read=before_sample, after_read=after_sample) + +def scan_e_mult(ranges, settling_time = 0, accumulation_time = None, name = None): + """ + """ + if name is not None: + set_file(name = name) + wait_beam() + acc = Accumulator([energy_readback,signal_tey, signal_i0, signal_trans, tey_norm, trans_norm], accumulation_time) + detectors = acc.getSensors() + [polmod, pol_angle, temperature.readback, current] + set_preference(Preference.ENABLED_PLOTS, acc.getSensors()) + rscan(energy, detectors, ranges, latency = settling_time, before_read=before_sample, after_read=after_sample) + +#not connected +def scan_v(keithley,start, end, step): + """ + """ + setpoint = Channel (keithleys[keithley][0], 'd') + readback = Channel (keithleys[keithley][2], 'd') + lscan(setpoint, readback, float(start), float(end), float(step), latency = 0.1, before_read=before_sample, after_read=after_sample) + + +def set_hor(value): + """ + """ + print "Set sample horizontal positon" + sample_hor.move(float(value)) + print "Done setting horizontal position" + +def set_vert(value): + """ + """ + print "Set sample vertical position" + sample_vert.move(float(value)) + print "Done setting vertical position" + +def set_rot(value): + """ + """ + sample_rot.move(float(value)) + + +def set_au_mesh(value): + """ + """ + print "Set Au mesh positon" + au_mesh.move(value) + print "Done setting Au mesh" + +def get_scan_filename(): + return str(get_exec_pars().output) + str(get_exec_pars().scanPath) + ".txt" + +def log_scan_filename(name=None): + if name is None: + name=get_scan_filename() + msg = "Created data file: " + str(name) + print msg + log(msg) + +def write_logs(): + log("Exit slit: "+ str(exit_slit.read()), True) + log("Cff: " + str(cff.read())) + log("Harm: " + str(harmonic.read())) + log("FE: " + str(aperture.read() )) + log("Au mesh: " + str(au_mesh.read() )) + log("Sample temperature: " + str(temperature.readback.read() ) ) + log("Sample coord. HOR; VERT; ROT: " + str(sample_hor.read()) + "; " + str(sample_vert.read()) + "; " + str(sample_rot.read()) ) + log("Gain sample: " + str(caget(keithleys["k1"][2]))) + log("Gain i0: " + str(caget(keithleys["k2"][2]))) + log("Gain diode: " + str(caget(keithleys["k3"][2]))) + log("XBPM1:V: " + str(caget ("X07MA-FE-XBPM1:posV"))) + log("XBPM2:V: " + str(caget ("X07MA-FE-XBPM2:posV"))) + log("XBPM1:H: " + str(caget ("X07MA-FE-XBPM1:posH"))) + log("XBPM2:H: " + str(caget ("X07MA-FE-XBPM2:posH"))) + diff --git a/script/test/TestHorizontlScan.py b/script/test/TestHorizontlScan.py index 237c0c7..2b31309 100644 --- a/script/test/TestHorizontlScan.py +++ b/script/test/TestHorizontlScan.py @@ -37,7 +37,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] #set_energy(en) diff --git a/script/test/TestOTF.py b/script/test/TestOTF.py new file mode 100644 index 0000000..d19fdec --- /dev/null +++ b/script/test/TestOTF.py @@ -0,0 +1,50 @@ +FOLDER = '2021_03/20210302' +FILE = 'Fe_plus' + +PLOT_TITLES = ["TEY raw", "I0", "diode_raw", "TEY_norm", "diode_norm"] +folder = os.path.expanduser("~/Data1/") + FOLDER + "/"; +set_exec_pars(name= FILE) + + + +class Time(Readable): + def __init__(self): + self.start = time.time() + def read(self): + return time.time()-self.start + +class NORMtey(Readable): + def read(self): + return float(CADC1.take())/float(CADC2.take()) + +class NORMdiode(Readable): + def read(self): + return float(CADC3.take())/float(CADC2.take()) + +#CADC1 = tey raw +#CADC2 = I0 +#CADC3 = tfy raw + +current.alias="MCurr" +sensors = [Ecrbk, CADC1, CADC2, CADC3,CADC4,CADC5,current,Time(),FieldX,FieldZ,Temperature, NORMtey(), NORMdiode()] + + +def monitoring_task(): + time.sleep(1.0) + try: + for index, title in enumerate(PLOT_TITLES, start=0): get_plots()[index].title = title + except: + pass + time.sleep(2.0) + get_exec_pars().currentScan.abort() + +ret = fork(monitoring_task) +try: + mscan(Ecrbk, sensors, -1, None, range="auto", enabled_plots = ["NORMtey", "NORMdiode", CADC1,CADC3, CADC2]) + folder + time.strftime("%Y%m%d_%H%M_", start) + FILE + "_0000.txt"; + +finally: + ret[0].cancel(True) + current.alias=None + + diff --git a/script/test/hor_scan_test.py b/script/test/hor_scan_test.py new file mode 100644 index 0000000..96c3fd3 --- /dev/null +++ b/script/test/hor_scan_test.py @@ -0,0 +1,3 @@ +for i in range (1,20): + sample_hor.move(159.0 + 0.2*i) + time.sleep(1.0) \ No newline at end of file diff --git a/script/test/test_otf.py b/script/test/test_otf.py new file mode 100644 index 0000000..06d2a8b --- /dev/null +++ b/script/test/test_otf.py @@ -0,0 +1,5 @@ + +Estart=630 +Eend=685 +sample_name='eaccount_test' +otf2(start=Estart, end=Eend, time=3, mode = "LINEAR", alpha=0.0, offset = off_LH, name = sample_name) \ No newline at end of file diff --git a/script/unused/HorizontalScan.py b/script/unused/HorizontalScan.py index 42a2073..12b6df8 100644 --- a/script/unused/HorizontalScan.py +++ b/script/unused/HorizontalScan.py @@ -30,7 +30,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/unused/HorizontalScan_in_focus2.py b/script/unused/HorizontalScan_in_focus2.py index 42d2416..d7d505d 100644 --- a/script/unused/HorizontalScan_in_focus2.py +++ b/script/unused/HorizontalScan_in_focus2.py @@ -41,7 +41,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en) diff --git a/script/unused/HorizontalScan_out_of_focus2.py b/script/unused/HorizontalScan_out_of_focus2.py index 0f2b2fc..520b424 100644 --- a/script/unused/HorizontalScan_out_of_focus2.py +++ b/script/unused/HorizontalScan_out_of_focus2.py @@ -42,7 +42,7 @@ for p in plots: def after_readout(record, scan): for i in range(len(plots)): - plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.values[i]) + plots[i].getSeries(plots[i].numberOfSeries-1).appendData(record.positions[0], record.readables[i]) def before_pass(pass_num): en = ENERGIES[pass_num-1] set_energy(en)