Rotational Echo DOble Resonance, SIMPSON 4.1.1 fitting program
This SIMPSON fitting program extracts the value of the heteronuclear dipole coupling D from redorCN,1.fid.
spinsys {
  channels 13C 15N
  nuclei   13C 15N
  dipole   1 2 895 10 20 30
  shift    1 10p 100p 0.5 50 20 10
}
par {
  variable index   1
  np               32
  spin_rate        10000
  proton_frequency 400e6
  start_operator   I1x
  detect_operator  I1p
  method           direct
  crystal_file     rep320
  gamma_angles     18
  sw               spin_rate/2
  variable tsw     1e6/sw
  verbose          0
  variable rfF1    50000
  variable rfF2    50000
  variable t180F1  0.5e6/rfF1
  variable t180F2  0.5e6/rfF2
  variable tr1     0.5e6/spin_rate-0.5*t180F1-0.5*t180F2
  variable tr2     0.5e6/spin_rate-t180F2
}
proc pulseq {} {
  global par
  reset
  delay $par(tr2)
  pulse $par(t180F2) 0 x $par(rfF2) x
  delay $par(tr2)
  pulse $par(t180F2) 0 x $par(rfF2) y
  store 1
  reset
  acq
  delay $par(tr2)
  pulse $par(t180F2) 0 x $par(rfF2) x
  delay $par(tr1)
  pulse $par(t180F1) $par(rfF1) x 0 x
  delay $par(tr1)
  pulse $par(t180F2) 0 x $par(rfF2) x
  delay $par(tr2)
  pulse $par(t180F2) 0 x $par(rfF2) y
  store 2
  acq
  for {set i 2} {$i < $par(np)} {incr i} {
    reset
    prop 1
    prop 2
    prop 1
    store 2
    acq
  }
}
proc progress {} {
  global par
  if ![info exists par(progress)] { set par(progress) -1 }
  incr par(progress)
  set str {"*   " \
           " *  " \
           "  * " \
           "   *" \
           "  * " \
           " *  "}
  return [lindex $str [expr $par(progress)%6]]
}
lappend ::auto_path ./opt
package require opt
proc rms {{save 0}} {
  global par
# simulate REDOR curve
  set f [fsimpson [list \
    [list dipole_1_2_aniso $opt::dipole12]]]
# scale REDOR curve
  fautoscale $f $par(exp) -re
  set rms [frms $f $par(exp) -re]
  if {$save == 1} {
    puts [format " \[%s\] %10.3f" \
      FINAL $rms]
# write simulated REDOR curve to disc
    fsave $f $par(name),$par(index).fid
  } else {
    puts [format " \[%s\] %10.3f %10.3f\015" \
       [progress] $opt::dipole12 $rms]
  }
  flush stdout
  funload $f
  return $rms
}
proc main {} {
  global par mn
  set par(exp) [fload redorCN,1.fid]
  opt::function rms
  puts " Progress dipole12      rms"
     opt::newpar dipole12 600 20 1 1500
     opt::minimize 1.0e-6
     rms 1
}
 
  