back to relaxation

Varian Sequence for CPMG:

/*  N15 T2 Relaxation Experiment Using CPMG and heating compensation*/
/*  Erik R.P. Zuiderweg, University of Michigan, 06/20/01, all rights reserved*/
/*  Coding style: Erik R.P. Zuiderweg + Ananya Majumdar, Sloan-Kettering*/

/*
 All parameters are declared in the file erpz_include.h
    Relevant here are:
 hpwr0: 1H high power (57 -60 dB)
 hpwr1: 1H solvent selective power (20 dB)
 npwr0: 15N high power (57 -60 dB)
 npwr10: 15N CPMG power (50 -55 dB)
 cpdpwr2: 15N decoupling power (40 dB)

 p90h: 1H high power 90 deg pulse
 pul20: 1H  high power purge pulse (1 ms)
 pul21: 1H  high power purge pulse (1 ms)
 pul22: 1H  high power purge pulse (1 ms)
 pul8: 1H solvent selective 90 pulse (1 ms)

 p90n: 15N high power 90 deg pulse
 pul10: 15N CPMG 90 deg pulse

 grpwr1-5: gradient power (1000 -10000)
 grpul1-5: square gradient pulse length (1ms)
 phcor12: phase correction for watergate

 del18: recycle delay
 del16: tcp /2
 del10: gradient recovery time (100 us)
 del3: 1/4JNH or shorter
 del4: 1/4JNH
 tau1: t1/2

 loop10: counter for cpmg period (duration = del16*4*loop10)
 loop11: counter for heating comp period (duration = del16*4*loop11)

 loop10+loop11 should be constant over the series (done by the operator)
 this code computes that the relaxation delay stays constant.

 recorded with states-tppi - no sensitivity enhancement or trosy
 water suppression by soft-hard-soft watergate
 solvent kept saturated in sequence
 to avoid variation over the relaxation series
*/
 
 

#include <standard.h>

static double d2_init = 0.0;

static int phi1[2] = {0,2},
         phi4[4] = {0,0,2,2},
  phi5[8] ={0,0,0,0,2,2,2,2},
  phi3[1] = {1},
  psirec[4] ={0,2,2,0};

pulsesequence()
{
 

/* DECLARE AND LOAD VARIABLES */
 

#include "erpz_include.h"
 

/* Load Phase Table */

  settable(t1,2,phi1);
  settable(t4,4,phi4);
  settable(t5,8,phi5);
  settable(t3,1,phi3);
  settable(t31,4,psirec);

    initval(loop10,v8);
    initval(loop11,v9);
    del19=del18-del16*4.*loop11;

  if(ix == 1) {
    printf("The T2 time (loop 10) is %f ms\n",del16*4000.0*loop10);
    printf("The compensation time (loop 11) is %f ms\n",del16*4000.0*loop11);
    printf("set the recycle delay with Del18,it will calculate del19\n" );
  }

  /* create phase correction */

  if(phcor12 < 360) phcor12 = phcor12+360;
  initval(phcor12,v12);
 

/* CHECK VALIDITY OF PARAMETER RANGE */

    if(cpdpwr2 > 50 )
     {
        printf("cpdpwr too high");
        abort(1);
     }
 

         if(npwr10 > 55 )
     {
        printf("npwr10 > 55, are you sure??? ");
     }

        if(del19 < 0 )
     {
        printf("del19 negative!!");
        abort(1);
     }
 

     if(dm[B]=='y')
     {
        printf("decoupler1 illegally on");
 abort(1);
     }

         if(dm3[B]=='y')
     {
        printf("decoupler3 illegally on");
 abort(1);
     }
 
 
 

/* Phase incrementation for hypercomplex data */
   if ( phase1 == 2 )     /* Hypercomplex in t1 */
        tsadd(t3, 1, 4);
 

/* calculate modification to phases based on current t1 values
   to achieve States-TPPI acquisition */
 

   if(ix == 1)
      d2_init = d2;
      t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5);

      if(t1_counter %2) {
        tsadd(t3,2,4);
        tsadd(t31,2,4);
      }

         tau1 = d2/2.;
 
 

/* BEGIN ACTUAL PULSE SEQUENCE */

/* Receiver off time */

status(A);
   rcvroff();

   obspower(hpwr0); xmtrphase(zero) ;
   dec2power(npwr10);
   delay(5e-6);
 

     if(loop11 > 0.0)
   {
     starthardloop(v9);

     delay(del16-2.0e-6-pul10);
     dec2rgpulse(pul10*2,t5,2.0e-6,2.0e-6);
     delay(del16-4.0e-6-pul10-p90h);
     delay(p90h*2);
     delay(del16-4.0e-6-pul10-p90h);
     dec2rgpulse(pul10*2,t5,2.0e-6,2.0e-6);
     delay(del16-2.0e-6-pul10);

     endhardloop();
     }
      dec2power(npwr0);
      delay(del19);

   delay(10.e-6);
   dec2rgpulse(p90n,zero,2.0e-6,0.);
   delay(10.e-6);
   zgradpulse(grpwr1,grdel1);
   delay(del10);

   rgpulse(p90h,t4,2.0e-6,0.);
   delay(del3);
   rgpulse(p90h*2.0,one,2.0e-6,0.);
   dec2rgpulse(p90n*2.0,zero,2.0e-6,0.);
   delay(del3-p90n*2.0);
   rgpulse(pul20,zero,2.0e-6,0.);
   rgpulse(p90h,one,2.0e-6,0.);

   delay(10.e-6);
   zgradpulse(grpwr2,grdel2);
   delay(del10);

   dec2rgpulse(p90n,t1,2.0e-6,0.);
   delay(del4);
   rgpulse(p90h*2.0,one,2.0e-6,0.);
   dec2rgpulse(p90n*2.0,zero,2.0e-6,0.);
   dec2power(npwr10);
   delay(del4+p90h*2.0);

   if(loop10 > 0.0)
   {
     starthardloop(v8);

     delay(del16-2.0e-6-pul10);
     dec2rgpulse(pul10*2,t5,2.0e-6,2.0e-6);
     delay(del16-4.0e-6-pul10-p90h);
     rgpulse(p90h*2,t5,2.0e-6,2.0e-6);
     delay(del16-4.0e-6-pul10-p90h);
     dec2rgpulse(pul10*2,t5,2.0e-6,2.0e-6);
     delay(del16-2.0e-6-pul10);

     endhardloop();
     }

   dec2power(npwr0);
   delay(5.e-6);
   dec2rgpulse(p90n,one,2.0e-6,0.);
   rgpulse(pul21,zero,2.0e-6,0.);
   rgpulse(pul22,one,2.0e-6,0.);
   delay(10.e-6);
   zgradpulse(grpwr3,grdel3);
   delay(del10);

   dec2rgpulse(p90n,t3,2.0e-6,0.);
   delay(del4+d2_init);
   dec2rgpulse(p90n*2.0,zero,2.0e-6,0.);
   delay(tau1);
   rgpulse(p90h*2.0,zero,2.0e-6,0.);
   delay(del4 + tau1-p90h*2.0);
   dec2rgpulse(p90n,zero,2.0e-6,0.);

   delay(10.e-6);
   zgradpulse(grpwr4,grdel4);
   delay(del10);

   rgpulse(p90h,two,2.0e-6,0.);
   delay(del3-grdel5-1.5e-5-del10-pul8);
   zgradpulse(grpwr5,grdel5);  delay(1e-5);
   delay(del10);
obspower(hpwr1); obsstepsize(1.0); xmtrphase(v12) ; txphase(two);
   delay(5.e-6);
   rgpulse(pul8,two,2.0e-6,0.);
obspower(hpwr0); xmtrphase(zero) ;
   delay(5.e-6);
   delay(p90n*2.0);
   rgpulse(p90h*2.0,zero,2.0e-6,0.);
   dec2rgpulse(p90n*2.0,zero,2.0e-6,0.);
obspower(hpwr1); obsstepsize(1.0); xmtrphase(v12) ; txphase(two);
   delay(5.e-6);
   rgpulse(pul8,two,2.0e-6,0.);
   /*  shaped GRD */
   zgradpulse(grpwr5,grdel5);  delay(1e-5);
   delay(del10+rof2);

dec2power(cpdpwr2);
  delay(del3-grdel5-1.5e-5-del10-pul8);
   status(B);
   setreceiver(t31);
}