#!/usr/bin/perl # phase cycling using levitts method. . # Solid State Nuclear Magnetic Resonance 14 1999 43–58 # ec path 0-> 2 -> 0 -> -1 # ec delP 2 -2 -1 #ec figure delta Ps above $da= 2; $db= -2; $dc= -1; use POSIX; $na = 4; #number of ph steps needed at pulse a... etc $nb = 4; $nc = 4; $a=$b=$c=$d=$e=$rx=0; $m=$na*$nb*$nc; for($i = 0; $i < $m; $i = $i+1){ $aa[$i]= (4/$na)*$i%4; $bb[$i]= (4/$nb)*floor($i/$na)%4; $cc[$i]= (4/$nc)*floor($i/($na*$nb))%4; $path = $aa[$i]*$da + $bb[$i]*$db + $cc[$i]*$dc ; $ph_dig= -$path%4; $rx[$i]=$ph_dig; #NOTE INTERNAL PHASES TOO, like Y-pulse on last block #ph_dig and pha,phb.. phd all stay the same in calc above. just shift accordingly see levitt #$a=($a+0)%4; #$b=($b+0)%4; #$c=($c+1)%4; # printf"%3d\t %3d\t %3d\t %3d\t %3d\t %3d\n",$i, $a, $b, $c, $rx, $ph_dig; } ##PRINT OUT phase cycles printf"ph1 "; for($i = 0; $i < $m; $i = $i+1){ if(floor($i)%4 == 0){print " "}; if(floor($i)%32 == 0){print "\n"}; $a = floor($i)%($#aa+1) ; printf"%1d", $aa[$a]; } printf"\n"; printf"ph6 "; for($i = 0; $i < $m; $i = $i+1){ if(floor($i)%4 == 0){print " "}; if(floor($i)%32 == 0){print "\n"}; $b = floor($i)%($#bb+1) ; printf"%1d", $bb[$b]; } printf"\n"; printf"ph8 "; for($i = 0; $i < $m; $i = $i+1){ if(floor($i)%4 == 0){print " "}; if(floor($i)%32 == 0){print "\n"}; $c = floor($i)%($#cc+1) ; printf"%1d", $cc[$c]; } printf"\n"; printf"ph31 "; for($i = 0; $i < $m; $i = $i+1){ if(floor($i)%4 == 0){print " "}; if(floor($i)%32 == 0){print "\n"}; printf"%1d", $rx[$i]; } printf"\n";