# Euler cradle scan commands for texture runs # AJS Dec 2010 proc EulerScan {mstart mstep mend oscno} { ephi speed 5 ephi accel 5 ephi decel 5 echi speed 2 set motdir 1 drive echi 0 ephi $mstart foreach chival {0 15 30 45 60 75 90} { drive echi $chival RadCollScanBi ephi $mstart $mstep $mend $oscno $motdir set motdir [expr {$motdir * -1}] } drive echi 0 ephi $mstart } publish EulerScan user # continous scan for EPHI- the euler cradle phi stage (innermost axis) # note make sure controller 2 has the PHISCAN code in it proc EphiCtsScan {start step range steptime} { # magic number: steps per rotation for phi set ephisteps -12500 set ephispeed [expr {($step*1.0)/$steptime}] set numsteps [expr {round($range/$step)}] # broadcast $omspeed $numsteps # run ephi to start angle -1 so that first pulse signals as ephi crosses 0 angle # at correct velocity ephi accel 1 ephi decel 1 ephi speed 3 drive ephi [expr {$start-1}] ephi speed $ephispeed ephi accel [expr {$ephispeed*1.2}] # now set ephi parameters to galil and clear the bit set scval [expr {($range+2.2)*$ephisteps}] set stval [expr {$ephisteps * $step}] broadcast $scval $stval som send CTLEN=$scval som send CTSTEP=$stval # som send OMN = [expr {$numsteps+1}] som send CB5 proc ::histogram_memory::pre_count {} { ephi send "XQ #EPHSCAN,2" } histmem mode unlimited histmem start block newfile HISTOPERIOD_XY for {set i 0} {$i<$numsteps} {incr i} {save $i} ephi speed 1 # this we needed when it didn't work properly # proc ::histogram_memory::pre_count {} {} # ephi send SHC # ephi send SPC=25000 # ephi send BCG # wait 3 # ephi send "XQ #THREAD0,0" # wait 3 # ephi reset } publish EphiCtsScan user proc EulerCtsScan {range step steptime} { set numsteps [expr {round($range/$step)}] SetHistoSync $numsteps foreach chi {0 15 30 45 60 75 90} { drive echi $chi EphiCtsScan [expr {-$range/2}] $step $range $steptime } # SetHistoNormal } publish EulerCtsScan user proc KillEphi {} { ephi send HX2 ephi send STC ephi reset }