Example #1
0
pulsesequence()
{
   double pd, seqtime;
   double minte,ted1,ted2;
   double restol, resto_local;

   int  vph180     = v2;  /* Phase of 180 pulse */
   init_mri();              /****needed ****/

   restol=getval("restol");   //local frequency offset
   roff=getval("roff");       //receiver offset

   init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2);   /* hard pulse */
   calc_rf(&p1_rf,"tpwr1","tpwr1f");
   init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2);   /* hard pulse */
   calc_rf(&p2_rf,"tpwr2","tpwr2f");

   seqtime = at+(p1/2.0)+rof1+d2;

   pd = tr - seqtime;  /* predelay based on tr */
   if (pd <= 0.0) {
      abort_message("%s: Requested tr too short.  Min tr = %f ms",seqfil,seqtime*1e3);
    }
   minte = p1/2.0 + p2 + 2*rof2 + rof1;
   if(d2 > 0) {
     if(d2 < minte+4e-6) 
       abort_message("%s: TE too short. Min te = %f ms",seqfil,minte*1e3);
   }
   ted1 = d2/2 - p1/2 - p2/2 + rof2 + rof1;
   ted2 = d2/2 - p2/2 + rof2;
   resto_local=resto-restol; 

   status(A);
   xgate(ticks);
   delay(pd);

   /* --- observe period --- */
   obsoffset(resto_local);
   obspower(p1_rf.powerCoarse);
   obspwrf(p1_rf.powerFine);
   shapedpulse(p1pat,p1,oph,rof1,rof2);
   /* if d2=0 no 180 pulse applied */
   if (d2 > 0) {
     obspower(p2_rf.powerCoarse);
     obspwrf(p2_rf.powerFine);   
     settable(t2,2,ph180);        /* initialize phase tables and variables */
     getelem(t2,ct,v6);  /* 180 deg pulse phase alternates +/- 90 off the rcvr */
     add(oph,v6,vph180);      /* oph=zero */
     delay(ted1);
     shapedpulse(p2pat,p2,vph180,rof1,rof2);
     delay(ted2);
   }
   startacq(alfa);
   acquire(np,1.0/sw);
   endacq();
}
Example #2
0
pulsesequence()
{
   double pd, seqtime;

   initparms_sis();  /* initialize standard imaging parameters */

   seqtime = at+pw+rof1+rof2;
   pd = tr - seqtime;  /* predelay based on tr */
    if (pd <= 0.0) {
      abort_message("%s: Requested tr too short.  Min tr = %f ms",seqfil,seqtime*1e3);
    }

   status(A);
   delay(pd);
   xgate(ticks);

   /* --- observe period --- */
   obspower(tpwr);
   
   shapedpulse(pwpat,pw,oph,rof1,rof2);
   
   startacq(alfa);
   acquire(np,1.0/sw);
   endacq();
   
}
Example #3
0
pulsesequence()
{
  double sign,currentlimit,RMScurrentlimit,dutycycle;
  int calcpower;

  /* Initialize paramaters **********************************/
  init_mri();
  calcpower=(int)getval("calcpower");
  dutycycle=getval("dutycycle");
  currentlimit=getval("currentlimit");
  RMScurrentlimit=getval("RMScurrentlimit");

  if (gspoil>0.0) sign = 1.0;
  else sign = -1.0;

  init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2);
  if (calcpower) calc_rf(&p1_rf,"tpwr1","tpwr1f");

  if (tspoil>0.0) {
    gspoil = sqrt(dutycycle/100.0)*gmax*RMScurrentlimit/currentlimit;
    init_generic(&spoil_grad,"spoil",gspoil,tspoil);
    spoil_grad.rollOut=FALSE;
    calc_generic(&spoil_grad,WRITE,"gspoil","tspoil");
  }

  xgate(ticks);

  rotate();

  status(A);
  mod4(ct,oph);
  delay(d1);

  /* TTL scope trigger **********************************/       
  sp1on(); delay(4e-6); sp1off();

  if (calcpower) {
    obspower(p1_rf.powerCoarse);
    obspwrf(p1_rf.powerFine);
  } 
  else obspower(tpwr1);
  delay(4e-6);

  if (tspoil>0.0) {
    obl_shapedgradient(spoil_grad.name,spoil_grad.duration,0,0,spoil_grad.amp*sign,WAIT);
    delay(d2);
  }

  shapedpulse(p1pat,p1,ct,rof1,rof2);

  startacq(alfa);
  acquire(np,1.0/sw);
  endacq();
		
}
Example #4
0
pulsesequence()
{
   double pd, seqtime;
   double mintDELTA,ted1,ted2,gf;
   double restol, resto_local;

   init_mri();              /****needed ****/

   restol=getval("restol");   //local frequency offset
   roff=getval("roff");       //receiver offset

   init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2);   /* hard pulse */
   calc_rf(&p1_rf,"tpwr1","tpwr1f");
   init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2);   /* hard pulse */
   calc_rf(&p2_rf,"tpwr2","tpwr2f");

   gf=1.0;
   if(diff[0] == 'n') gf=0;
   int  vph180     = v2;  /* Phase of 180 pulse */

   mintDELTA = tdelta + trise + rof1 + p2 + rof2;
   if(tDELTA <= mintDELTA) {
       abort_message("%s: tDELTA too short. Min tDELTA = %f ms",seqfil,mintDELTA*1e3);
   }
   ted1 = tDELTA - tdelta + trise + p2 + rof1 + rof2;
   te = p1/2 + rof2 + tdelta + trise + ted1 + rof1 + p2/2;   /* first half-te */
   ted2 = te - p2/2 - rof2 - tdelta - trise;
   if((ted1 <= 0)||(ted2 <= 0) ) {
       abort_message("%s: tDELTA too short. Min tDELTA = %f ms",seqfil,mintDELTA*1e3);
   }
   te = te*2.0;
   putvalue("te",te);
   seqtime = at+(p1/2.0)+rof1+te;
   pd = tr - seqtime;  /* predelay based on tr */
   if (pd <= 0.0) {
      abort_message("%s: Requested tr too short.  Min tr = %f ms",seqfil,seqtime*1e3);
   }

   resto_local=resto-restol; 

   status(A);
   rotate();
   delay(pd);
   xgate(ticks);

   /* --- observe period --- */
   obsoffset(resto_local); 
   obspower(p1_rf.powerCoarse);
   obspwrf(p1_rf.powerFine);
   shapedpulse(p1pat,p1,oph,rof1,rof2);

   obl_gradient(0,0,gdiff*gf);   /* x,y,z gradients selected via orient */
   delay(tdelta);
   zero_all_gradients();
   delay(trise);
   delay(ted1);
     
   obspower(p2_rf.powerCoarse);
   obspwrf(p2_rf.powerFine);   
   settable(t2,2,ph180);        /* initialize phase tables and variables */
   getelem(t2,ct,v6);  /* 180 deg pulse phase alternates +/- 90 off the rcvr */
   add(oph,v6,vph180);      /* oph=zero */
   shapedpulse(p2pat,p2,vph180,rof1,rof2);

   obl_gradient(0,0,gdiff);   /* x,y,z gradients selected via orient */
   delay(tdelta);
   zero_all_gradients();
   delay(trise);
   delay(ted2);
   startacq(alfa);
   acquire(np,1.0/sw);
   endacq();
}
Example #5
0
pulsesequence()
{
   char   CT_flg[MAXSTR],	/* Constant time flag */
          shname1[MAXSTR],
	  shname2[MAXSTR],
	  shname3[MAXSTR],
	  f1180[MAXSTR],
          Cdecflg[MAXSTR],
          Cdecseq[MAXSTR],
          grad_flg[MAXSTR];     /*gradient flag */

   int    t1_counter,
          phase;


   double d2_init=0.0,
          adjust = getval("adjust"),
          gzlvl1 = getval("gzlvl1"),
          gzlvl2 = getval("gzlvl2"), 
          gt1 = getval("gt1"),
          gt2 = getval("gt2"),
          shlvl1 = getval("shlvl1"),
          shlvl2 = getval("shlvl2"),
          shlvl3 = getval("shlvl3"),
          shdmf2 = getval("shdmf2"),
          shpw1 = getval("shpw1"),
          shpw2 = getval("shpw2"),
          shpw3 = getval("shpw3"),
	  pwClvl = getval("pwClvl"),
          pwC = getval("pwC"),
          dpwr = getval("dpwr"),
          CT_delay = getval("CT_delay"),
          d2 = getval("d2"),
          tau1 = getval("tau1"),
          tauch = getval("tauch");


   getstr("shname1", shname1);
   getstr("shname2", shname2);
   getstr("shname3", shname3);
   getstr("CT_flg", CT_flg);
   getstr("grad_flg",grad_flg);
   getstr("f1180",f1180);
   getstr("Cdecflg",Cdecflg);
   getstr("Cdecseq",Cdecseq);


  phase = (int) (getval("phase") + 0.5);
   
   settable(t1,2,phi1);
   settable(t2,2,phi2);


  if (phase == 1) ;
  if (phase == 2) tsadd(t1,1,4);

    tau1 = d2;
    if((f1180[A] == 'y') && (ni > 1.0))
        { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; }
    tau1 = tau1;
  
    if (f1180[0] == 'y')  tau1 = tau1-pwC*4.0/3.0;

if(CT_flg[0] == 'y')
 {
     if ( (ni/sw1) > (CT_delay-pwC*8.0/3.0))
  { text_error( " ni is too big. Make ni equal to %d or less.\n",
      ((int)((CT_delay-pwC*8.0/3.0)*sw1)) );                psg_abort(1); }
 } 


   if( ix == 1) d2_init = d2;
   t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 );
   if(t1_counter % 2)
        { tsadd(t1,2,4); tsadd(t2,2,4); }


   status(A);

   decpower(pwClvl);
   decoffset(dof);
   obsoffset(tof);

   zgradpulse(gzlvl2, gt2);
   lk_sample();
   delay(1.0e-4);
   delay(d1-gt2);
   if (ix < (int)(2.0*ni)) lk_hold(); /*force lock sampling at end of experiment*/

   obspower(shlvl1);
   shaped_pulse(shname1,shpw1,zero,2.0e-4,2.0e-6);
   zgradpulse(gzlvl1, gt1);
   delay(1.0e-4);

  if (ni == 0)
  {
       delay(tauch-gt1-1.0e-4-WFG_START_DELAY+pwC*4.0-adjust);
       obspower(shlvl2);
     shaped_pulse(shname2,shpw2,zero,2.0e-6,2.0e-6);
       obspower(shlvl1);
     decrgpulse(pwC,t1,0.0,0.0);
     decrgpulse(pwC*2.0,zero,0.0,0.0);
     decrgpulse(pwC,zero,0.0,0.0);
  }

else
  {
  delay(tauch-gt1-1.0e-4-adjust);
  obspower(shlvl2);
  status(B);

  if(CT_flg[0] == 'y')
   {
    /*************************************************/
    /****           CT EVOLUTION            **********/
    /*************************************************/

     decrgpulse(pwC,t1,0.0,0.0);
     delay((CT_delay-tau1)*0.25-pwC*2.0/3.0);
     decpower(shlvl3);
     decshaped_pulse(shname3,shpw3,zero,0.0,0.0);
     delay((CT_delay+tau1)*0.25-shpw2*0.5);
     shapedpulse(shname2,shpw2,zero,0.0,0.0);
     delay((CT_delay+tau1)*0.25-shpw2*0.5);
     decshaped_pulse(shname3,shpw3,zero,0.0,0.0);
     decpower(pwClvl);
     delay((CT_delay-tau1)*0.25-pwC*2.0/3.0);
     decrgpulse(pwC,zero,0.0,0.0);
    }
   
   else
   {
    /*************************************************/
    /****     REAL-TIME EVOLUTION           **********/
    /*************************************************/
     if ((tau1) > shpw2)
    {
     decrgpulse(pwC,t1,0.0,0.0);
      if(Cdecflg[0] == 'y')
      {
      decpower(getval("Cdecpwr"));
      decprgon(Cdecseq, 1.0/getval("Cdecdmf"), getval("Cdecres"));
      decon();
      }
     delay((tau1-shpw2)*0.5);

    xmtrphase(zero);
    xmtron();
    obsunblank();
    obsprgon(shname2,1/shdmf2,9.0);
    delay(shpw2);
    obsprgoff();
    obsblank();
    xmtroff();

     delay((tau1-shpw2)*0.5);
      if(Cdecflg[0] == 'y')
      {
      decoff(); decprgoff();
      decpower(pwClvl);
      }
     decrgpulse(pwC,zero,0.0,0.0);
    }
   else
    {
    xmtrphase(zero);
    xmtron();
    obsunblank();
    obsprgon(shname2,1/shdmf2,9.0);
    delay((shpw2-tau1-pwC*2.0)*0.5);

    decrgpulse(pwC,t1,0.0,0.0);
      if(Cdecflg[0] == 'y')
      {
      decpower(getval("Cdecpwr"));
      decprgon(Cdecseq, 1.0/getval("Cdecdmf"), getval("Cdecres"));
      decon();
      delay(tau1);
      decoff(); decprgoff();
      decpower(pwClvl);
      }
    else
      delay(tau1);
    decrgpulse(pwC,zero,0.0,0.0);
    delay((shpw2-tau1-pwC*2.0)*0.5);
    obsprgoff();
    obsblank();
    xmtroff();
    }
  }

       obspower(shlvl1);
   status(A);


           zgradpulse(gzlvl1, gt1);
           delay(1.0e-4);
       delay(tauch-gt1-1.0e-4-POWER_DELAY);

   decpower(dpwr);

   status(C);
   setreceiver(t2);

}
}
Example #6
0
pulsesequence()
{
  /* Internal variable declarations *************************/ 
  double  freqEx[MAXNSLICE];
  double  pespoil_amp,spoilMoment,maxgradtime,pe2_offsetamp=0.0,nvblock;
  double  tetime,te_delay,tr_delay,perTime;
  int     table=0,shapeEx=0,sepSliceRephase=0,image,blocknvs;
  char    spoilflag[MAXSTR],perName[MAXSTR],slab[MAXSTR];

  /* Real-time variables used in this sequence **************/
  int  vpe_steps    = v1;      // Number of PE steps
  int  vpe_ctr      = v2;      // PE loop counter
  int  vpe_offset   = v3;      // PE/2 for non-table offset
  int  vpe_mult     = v4;      // PE multiplier, ranges from -PE/2 to PE/2
  int  vper_mult    = v5;      // PE rewinder multiplier; turn off rewinder when 0
  int  vpe2_steps   = v6;      // Number of PE2 steps
  int  vpe2_ctr     = v7;      // PE2 loop counter
  int  vpe2_mult    = v8;      // PE2 multiplier
  int  vpe2_offset  = v9;      // PE2/2 for non-table offset
  int  vpe2r_mult   = v10;     // PE2 rewinder multiplier
  int  vtrigblock   = v11;     // Number of PE steps per trigger block
  int  vpe          = v12;     // Current PE step out of total PE*PE2 steps

  /*  Initialize paramaters *********************************/
  init_mri();
  getstr("spoilflag",spoilflag);                                     
  getstr("slab",slab);
  image = getval("image");
  blocknvs = (int)getval("blocknvs");
  nvblock = getval("nvblock");
  if (!blocknvs) nvblock=1;    // If blocked PEs for trigger not selected nvblock=1

  trmin = 0.0;
  temin = 0.0;

  /*  Check for external PE table ***************************/
  if (strcmp(petable,"n") && strcmp(petable,"N") && strcmp(petable,"")) {
    loadtable(petable);
    table = 1;
  }

  if (ns > 1)  abort_message("No of slices must be set to one");   

  /* RF Calculations ****************************************/
  init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2);   /* hard pulse */
  init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2);   /* soft pulse */
  calc_rf(&p1_rf,"tpwr1","tpwr1f");
  calc_rf(&p2_rf,"tpwr2","tpwr2f");

  /* Gradient calculations **********************************/
  if (slab[0] == 'y') {
    init_slice(&ss_grad,"ss",thk);
    init_slice_refocus(&ssr_grad,"ssr");
    calc_slice(&ss_grad,&p2_rf,WRITE,"gss");
    calc_slice_refocus(&ssr_grad,&ss_grad,WRITE,"gssr");
  }
  if (FP_GT(tcrushro,0.0))
    init_readout_butterfly(&ro_grad,"ro",lro,np,sw,gcrushro,tcrushro);
  else
    init_readout(&ro_grad,"ro",lro,np,sw);
  init_readout_refocus(&ror_grad,"ror");
  calc_readout(&ro_grad,WRITE,"gro","sw","at");
  ro_grad.m0ref *= grof;
  calc_readout_refocus(&ror_grad,&ro_grad,NOWRITE,"gror");
  init_phase(&pe_grad,"pe",lpe,nv);
  init_phase(&pe2_grad,"pe2",lpe2,nv2);
  calc_phase(&pe_grad,NOWRITE,"gpe","tpe");
  if (!blocknvs) nvblock=1;
  calc_phase(&pe2_grad,NOWRITE,"gpe2","");

  if (spoilflag[0] == 'y') {                         // Calculate spoil grad if spoiling is turned on
    init_dephase(&spoil_grad,"spoil");               // Optimized spoiler
    spoilMoment = ro_grad.acqTime*ro_grad.roamp;     // Optimal spoiling is at*gro for 2pi per pixel
    spoilMoment -= ro_grad.m0def;                    // Subtract partial spoiling from back half of readout
    calc_dephase(&spoil_grad,WRITE,spoilMoment,"gspoil","tspoil");
  }

  /* Is TE long enough for separate slab refocus? ***********/
  maxgradtime = MAX(ror_grad.duration,MAX(pe_grad.duration,pe2_grad.duration));
  if (spoilflag[0] == 'y')
    maxgradtime = MAX(maxgradtime,spoil_grad.duration);
  tetime = maxgradtime + alfa + ro_grad.timeToEcho + 4e-6;
  if (slab[0] == 'y') {
    tetime += ss_grad.rfCenterBack + ssr_grad.duration;
    if ((te >= tetime) && (minte[0] != 'y')) {
      sepSliceRephase = 1;                                 // Set flag for separate slice rephase
    } else {
      pe2_grad.areaOffset = ss_grad.m0ref;                 // Add slab refocus on pe2 axis
      calc_phase(&pe2_grad,NOWRITE,"gpe2","");             // Recalculate pe2 to include slab refocus
    }
  }
 
  /* Equalize refocus and PE gradient durations *************/
  pespoil_amp = 0.0;
  perTime = 0.0;
  if ((perewind[0] == 'y') && (spoilflag[0] == 'y')) {   // All four must be single shape
    if (ror_grad.duration > spoil_grad.duration) {       // calc_sim first with ror
      calc_sim_gradient(&pe_grad,&pe2_grad,&ror_grad,tpemin,WRITE);
      calc_sim_gradient(&ror_grad,&spoil_grad,&null_grad,tpemin,NOWRITE);
    } else {                                             // calc_sim first with spoil
      calc_sim_gradient(&pe_grad,&pe2_grad,&spoil_grad,tpemin,WRITE);
      calc_sim_gradient(&ror_grad,&spoil_grad,&null_grad,tpemin,NOWRITE);
    }
    strcpy(perName,pe_grad.name);
    perTime = pe_grad.duration;
    putvalue("tspoil",perTime);
    putvalue("gspoil",spoil_grad.amp);
  } else {                      // post-acquire shape will be either pe or spoil, but not both
    calc_sim_gradient(&ror_grad,&pe_grad,&pe2_grad,tpemin,WRITE);
    if ((perewind[0] == 'y') && (spoilflag[0] == 'n')) {     // Rewinder, no spoiler
      strcpy(perName,pe_grad.name);
      perTime = pe_grad.duration;
      spoil_grad.amp = 0.0;
      putvalue("tpe",perTime);
    } else if ((perewind[0] == 'n') && (spoilflag[0] == 'y')) {  // Spoiler, no rewinder
      strcpy(perName,spoil_grad.name);
      perTime = spoil_grad.duration;
      pespoil_amp = spoil_grad.amp;      // Apply spoiler on PE & PE2 axis if no rewinder
    }
  }

  if (slab[0] == 'y') pe2_offsetamp = sepSliceRephase ? 0.0 : pe2_grad.offsetamp;  // pe2 slab refocus

  /* Create optional prepulse events ************************/
  if (sat[0] == 'y')  create_satbands();
  if (fsat[0] == 'y') create_fatsat();

  sgl_error_check(sglerror);                               // Check for any SGL errors
  
  /* Min TE ******************************************/
  tetime = pe_grad.duration + alfa + ro_grad.timeToEcho;
  if (slab[0] == 'y') {
    tetime += ss_grad.rfCenterBack;
    tetime += (sepSliceRephase) ? ssr_grad.duration : 0.0;   // Add slice refocusing if separate event
  }
  else if (ws[0] == 'y')
    tetime += p2/2.0 + rof2;	/* soft pulse */
  else
    tetime += p1/2.0 + rof2;	/* hard pulse */
  temin = tetime + 4e-6;                                   // Ensure that te_delay is at least 4us
  if (minte[0] == 'y') {
    te = temin;
    putvalue("te",te);
  }
  if (te < temin) {
    abort_message("TE too short.  Minimum TE= %.2fms\n",temin*1000+0.005);   
  }
  te_delay = te - tetime;

  /* Min TR ******************************************/   	
  trmin  = te_delay + pe_grad.duration + ro_grad.duration + perTime;
  if (slab[0] == 'y') {
    trmin += ss_grad.duration;
    trmin += (sepSliceRephase) ? ssr_grad.duration : 0.0;   // Add slice refocusing if separate event
  }
  else if (ws[0] == 'y')
    trmin += p2 +rof1 + rof2;	/* soft pulse */
  else
    trmin += p1 +rof1 + rof2;	/* hard pulse */
  trmin += 8e-6;

  /* Increase TR if any options are selected *********/
  if (sat[0] == 'y')  trmin += satTime;
  if (fsat[0] == 'y') trmin += fsatTime;
  if (ticks > 0) trmin += 4e-6;

  if (mintr[0] == 'y') {
    tr = trmin;
    putvalue("tr",tr);
  }
  if (FP_LT(tr,trmin)) {
    abort_message("TR too short.  Minimum TR = %.2fms\n",trmin*1000+0.005);
  }

  /* Calculate tr delay */
  tr_delay = granularity(tr-trmin,GRADIENT_RES);

  if(slab[0] == 'y') {
    /* Generate phase-ramped pulses: 90 */
    offsetlist(pss,ss_grad.ssamp,0,freqEx,ns,seqcon[1]);
    shapeEx = shapelist(p1pat,ss_grad.rfDuration,freqEx,ns,ss_grad.rfFraction,seqcon[1]);
  }

  /* Set pe_steps for profile or full image **********/   	
  pe_steps = prep_profile(profile[0],nv,&pe_grad,&null_grad);
  F_initval(pe_steps/2.0,vpe_offset);

  pe2_steps = prep_profile(profile[1],nv2,&pe2_grad,&null_grad);
  F_initval(pe2_steps/2.0,vpe2_offset);

  assign(zero,oph);

  /* Shift DDR for pro *******************************/   	
  roff = -poffset(pro,ro_grad.roamp);

  /* Adjust experiment time for VnmrJ *******************/
  g_setExpTime(tr*(nt*pe_steps*pe2_steps));

  /* PULSE SEQUENCE *************************************/
  status(A);
  rotate();
  triggerSelect(trigger);       // Select trigger input 1/2/3
  obsoffset(resto);
  delay(4e-6);

  /* trigger */
  if (ticks > 0) F_initval((double)nvblock,vtrigblock);

  /* Begin phase-encode loop ****************************/       
  peloop2(seqcon[3],pe2_steps,vpe2_steps,vpe2_ctr);

    peloop(seqcon[2],pe_steps,vpe_steps,vpe_ctr);

      delay(tr_delay);   // relaxation delay

      sub(vpe_ctr,vpe_offset,vpe_mult);
      sub(vpe2_ctr,vpe2_offset,vpe2_mult);

      mult(vpe2_ctr,vpe_steps,vpe);
      add(vpe_ctr,vpe,vpe);

      /* PE rewinder follows PE table; zero if turned off ***/       
      if (perewind[0] == 'y') {
        assign(vpe_mult,vper_mult);
        assign(vpe2_mult,vpe2r_mult);
      }
      else {
        assign(zero,vper_mult);
        assign(zero,vpe2r_mult);
      }

      if (ticks > 0) {
        modn(vpe,vtrigblock,vtest);
        ifzero(vtest);                // if the beginning of an trigger block
          xgate(ticks);
          grad_advance(gpropdelay);
          delay(4e-6);
        elsenz(vtest);
          delay(4e-6);
        endif(vtest);
      }

      sp1on(); delay(4e-6); sp1off(); // Scope trigger

      /* Prepulse options ***********************************/
      if (sat[0] == 'y')  satbands();
      if (fsat[0] == 'y') fatsat();

      if (slab[0] == 'y') {
        obspower(p2_rf.powerCoarse);
        obspwrf(p2_rf.powerFine);
        delay(4e-6);
	obl_shapedgradient(ss_grad.name,ss_grad.duration,0,0,ss_grad.amp,NOWAIT);
	delay(ss_grad.rfDelayFront);
	shapedpulselist(shapeEx,ss_grad.rfDuration,zero,rof1,rof2,seqcon[1],zero);
	delay(ss_grad.rfDelayBack);
        if (sepSliceRephase) {
          obl_shapedgradient(ssr_grad.name,ssr_grad.duration,0,0,-ssr_grad.amp,WAIT);
          delay(te_delay + tau);   /* tau is current B0 encoding delay */
        }
      } else {
        obspower(p1_rf.powerCoarse);
        obspwrf(p1_rf.powerFine);
        delay(4e-6);
        if (ws[0] == 'y')
          shapedpulse(p2pat,p2,zero,rof1,rof2);   /* soft CS pulse */
        else
          shapedpulse(p1pat,p1,zero,rof1,rof2);   /* hard pulse */
        delay(te_delay + tau);   /* tau is current B0 encoding delay */
      }        

      pe2_shapedgradient(pe_grad.name,pe_grad.duration,-ror_grad.amp*image,0,-pe2_offsetamp,
          -pe_grad.increment,-pe2_grad.increment,vpe_mult,vpe2_mult,WAIT);

      if ((slab[0] == 'y') && !sepSliceRephase) delay(te_delay + tau);   /* tau is current B0 encoding delay */

      /* Readout gradient and acquisition ********************/
      obl_shapedgradient(ro_grad.name,ro_grad.duration,ro_grad.amp*image,0,0,NOWAIT);
      delay(ro_grad.atDelayFront);
      startacq(alfa);
      acquire(np,1.0/sw);
      delay(ro_grad.atDelayBack);
      endacq();

      /* Rewind / spoiler gradient *********************************/
      if (perewind[0] == 'y' || (spoilflag[0] == 'y')) {
        pe2_shapedgradient(perName,perTime,spoil_grad.amp,pespoil_amp,pespoil_amp,
          pe_grad.increment,pe2_grad.increment,vper_mult,vpe2r_mult,WAIT);
      }  

    endpeloop(seqcon[2],vpe_ctr);

  endpeloop(seqcon[3],vpe2_ctr);

}
Example #7
0
pulsesequence()
{



/* DECLARE AND LOAD VARIABLES */


 
int         t1_counter, t2_counter;	/* used for states tppi in t1 & t2*/
char	    IPAP[MAXSTR];


double      tau1,			/*  t1 delay */
            tau2,			/*  t2 delay */
	    TC = getval("TC"), 		/* delay 1/(2JCACB) ~  7.0ms in Ref. */ 
            del = getval("del"),	/* delay del = 1/(2JC'C) ~ 9.0ms in Ref. */         
            pwClvl = getval("pwClvl"), 	/* coarse power for C13 pulse */
            pwC = getval("pwC"),        /* C13 90 degree pulse length at pwClvl */
            compC = getval("compC"),    /* adjustment for C13 amplifier compression */
	    rf0,            	  	/* maximum fine power when using pwC pulses */
	    ppm,
	    
/* 90 degree pulse at CO (174ppm)    */

        pwCO_90,			/* 90 degree pulse length on C13  */
        pwrCO_90,		       	/*fine power  */
        CO_bw,
        
/* 180 degree pulse at CO (174ppm)  */

        pwCO_180,		/* 180 degree pulse length at rf2 */
        pwrCO_180,		/* fine power  */

/* 90 degree pulse at CA (57.7ppm)  */

	pwCA,  			/* 90 degree pulse on CA */
	pwrCA,		        /* fine power */
        CA_bw,
        CA_ofs,			/* Offset  */

/* 180 degree pulse at CA (57.7ppm)  */

	pwCA2, 			/* 180 degree pulse on CA */
	pwrCA2,		        /* fine power */

/* 90 degree pulse at CAB (44.2ppm)  */

        pwCAB,                   /* 90 degree pulse on CAB */
        pwrCAB,                  /* fine power */
        CAB_bw,
        CAB_ofs,                 /* Offset  */

/* 180 degree pulse at CAB (44.2ppm)  */

        pwCAB2,                  /* 180 degree pulse on CA */
        pwrCAB2,                 /* fine power */


	sw1 = getval("sw1"),
        sw2 = getval("sw2"),

	gt1 = getval("gt1"),  		     
	gzlvl1 = getval("gzlvl1"),

	gt2 = getval("gt2"),				   
	gzlvl2 = getval("gzlvl2"),
        gt3 = getval("gt3"),
        gzlvl3 = getval("gzlvl3"),
        gstab = getval("gstab");
        getstr("IPAP",IPAP);  
        
/*   LOAD PHASE TABLE    */
	settable(t1,4,phi1);
        settable(t2,1,phi2);
	settable(t3,2,phi3);
	settable(t4,8,phi4);
        settable(t5,16,phi5);
	settable(t12,16,rec);
        getelem(t5,ct,v5); assign(two,v6);
        if (IPAP[0] == 'y') { add(v5,one,v5); assign(three,v6); }

	setautocal();           /* activate auto-calibration */

/*   INITIALIZE VARIABLES   */


/* PHASES AND INCREMENTED TIMES */

/*  Phase incrementation for hypercomplex 2D data, States-Haberkorn element */

    if (phase1 == 2)    tsadd(t1,1,4);  
    if (phase2 == 2) tsadd(t2,1,4); 

    tau1 = d2;
    tau1 = tau1/2.0;
    tau2 = d3;
    tau2 = tau2/2.0;

/* Calculate modifications to phases for States-TPPI acquisition          */

   if( ix == 1) d2_init = d2;
   t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 );
   if(t1_counter % 2) 
	{ tsadd(t1,2,4); tsadd(t12,2,4); }

   if( ix == 1) d3_init = d3;
   t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 );
   if(t2_counter % 2)
        { tsadd(t2,2,4); tsadd(t12,2,4); }

if (autocal[0] == 'y')
{
   if (FIRST_FID)
   {
    ppm = getval("sfrq");
    ofs_check(C13ofs);
    CO_bw=80*ppm; CA_bw=100*ppm; CAB_bw=100*ppm;
    CA_ofs=(57.7-C13ofs)*ppm;
    CAB_ofs=(44.2-C13ofs)*ppm;
    CO_90 = pbox_make("CO_90", "Q5", CO_bw, 0.0, pwC*compC, pwClvl);
    CO_180 = pbox_make("CO_180", "square180r", CO_bw, 0.0, pwC*compC, pwClvl);
    CA_90 = pbox_make("CA_90", "Q5", CA_bw, CA_ofs, pwC*compC, pwClvl);
    CA_180 = pbox_make("CA_180", "q3", CA_bw, CA_ofs, pwC*compC, pwClvl);
    CAB_90 = pbox_make("CAB_90", "Q5", CAB_bw, CAB_ofs, pwC*compC, pwClvl);
    CAB_180 = pbox_make("CAB_180", "q3", CAB_bw, CAB_ofs, pwC*compC, pwClvl);
    
    /* pbox_make creates shapes with coarse power at pwClvl and fine power is adjusted */
   }
}
    pwCO_90 = CO_90.pw; pwrCO_90 = CO_90.pwrf;
    pwCO_180 = CO_180.pw; pwrCO_180 = CO_180.pwrf;
    pwCA = CA_90.pw; pwrCA = CA_90.pwrf;
    pwCA2 = CA_180.pw; pwrCA2 = CA_180.pwrf;
    pwCAB = CAB_90.pw; pwrCAB = CAB_90.pwrf;
    pwCAB2 = CAB_180.pw; pwrCAB2 = CAB_180.pwrf;


	
/* BEGIN PULSE SEQUENCE */

status(A);
   	delay(d1);
   	obsoffset(tof);
   	rf0 = 4095.0;
        obspower(pwClvl);
        obspwrf(rf0);
        
status(B);
        obspwrf(pwrCA);
	shapedpulse("CA_90",pwCA,t1,0.0,0.0);
	delay(tau1);
	obspwrf(pwrCO_180);
	shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
	obspwrf(pwrCA2);
        delay(TC/2);
	shapedpulse("CA_180",pwCA2,zero,0.0,0.0);
	delay(TC/2 - tau1);
	obspwrf(pwrCO_180);
	shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
	obspwrf(pwrCA);
	shapedpulse("CA_90",pwCA,one,0.0,0.0);
        delay(TC/2+tau2-gstab-gt1);
	zgradpulse(gzlvl1,gt1);
	delay(gstab);
	obspwrf(pwrCO_180);
	shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
        obspwrf(pwrCA2);
        shapedpulse("CA_180",pwCA2,zero,0.0,0.0);
        delay(TC/2-tau2-gt1-gstab);
	zgradpulse(gzlvl1,gt1);
        delay(gstab);
        obspwrf(pwrCO_180);
        shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
        obspwrf(pwrCAB);
        shapedpulse("CAB_90",pwCAB,t2,0.0,0.0);
        zgradpulse(gzlvl2,gt2);
        delay(gstab);
        obspwrf(pwrCO_90);
        shapedpulse("CO_90",pwCO_90,t3,0.0,0.0);
        if (IPAP[0] == 'y')
         {
          delay(del/2);
          obspwrf(pwrCAB2);     
          shapedpulse("CAB_180",pwCAB2,zero,0.0,0.0);
          obspwrf(pwrCO_180);    
          shapedpulse("CO_180",pwCO_180,t4,0.0,0.0);
          delay(del/2);
          }
         else
          {
           delay(del/4);
           obspwrf(pwrCAB2);                                                       
           shapedpulse("CAB_180",pwCAB2,zero,0.0,0.0);
           delay(del/4);
           obspwrf(pwrCO_180);
           shapedpulse("CO_180",pwCO_180,t4,0.0,0.0);
           delay(del/4);
           obspwrf(pwrCAB2);
           shapedpulse("CAB_180",pwCAB2,zero,0.0,0.0);
           delay(del/4);
           }
           obspwrf(pwrCO_90);
           shapedpulse("CO_90",pwCO_90,v5,0.0,0.0);
           zgradpulse(gzlvl3,gt3);
           delay(gstab);
           shapedpulse("CO_90",pwCO_90,v6,0.0,rof2);  
           obspwrf(pwrCO_180);
           shapedpulse("CO_180",pwCO_180,zero,0.0,rof2);	
status(C);
	setreceiver(t12);
	
}
Example #8
0
pulsesequence()
{



/* DECLARE AND LOAD VARIABLES */


 
int         t1_counter;  		 /* used for states tppi in t1 */


double      tau1,			/*  t1 delay */
	    TC = getval("TC"), 		/* delay 1/(2JC'C) ~ 9.1 ms */          
            pwClvl = getval("pwClvl"), 	/* coarse power for C13 pulse */
            pwC = getval("pwC"),        /* C13 90 degree pulse length at pwClvl */
            compC = getval("compC"),    /* adjustment for C13 amplifier compression */
	    rf0,            	  	/* maximum fine power when using pwC pulses */
            ppm,
            
/* 90 degree pulse at CO (174ppm)    */

        pwCO_90,			/* 90 degree pulse length on C13  */
        pwrCO_90,		       	/*fine power  */
        CO_bw,
        
/* 180 degree pulse at CO (174ppm)  */

        pwCO_180,		/* 180 degree pulse length at rf2 */
        pwrCO_180,		/* fine power  */

/* 90 degree pulse at C-aliph (35ppm)  */

	pwCaliph1,  		/* 90 degree pulse on C-aliphatic */
	pwrCaliph1,		/* fine power */
        CA_bw,
        CA_ofs,			/* fine power */

/* 180 degree pulse at C-aliph (35ppm)  */

	pwCaliph2, 		/* 180 degree pulse on C-aliphatic */
	pwrCaliph2,		/* fine power */


	sw1 = getval("sw1"),

	gt1 = getval("gt1"),  		     
	gzlvl1 = getval("gzlvl1"),

	gt2 = getval("gt2"),				   
	gzlvl2 = getval("gzlvl2"),
        gstab = getval("gstab");
    
        
/*   LOAD PHASE TABLE    */
	settable(t1,1,phi1);
        settable(t2,2,phi2);
	settable(t3,4,phi3);
	settable(t12,4,rec);

	setautocal();           /* activate auto-calibration */
	
/*   INITIALIZE VARIABLES   */



    /* maximum fine power for pwC pulses */
	rf0 = 4095.0;


/* PHASES AND INCREMENTED TIMES */

/*  Phase incrementation for hypercomplex 2D data, States-Haberkorn element */

    if (phase1 == 2)    tsadd(t2,1,4);  
   
    tau1 = d2;
    tau1 = tau1/2.0;

/* Calculate modifications to phases for States-TPPI acquisition          */

   if( ix == 1) d2_init = d2;
   t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 );
   if(t1_counter % 2) 
	{ tsadd(t2,2,4); tsadd(t12,2,4); }
	
if (autocal[0] == 'y')
{
   if (FIRST_FID)
   {
    ppm = getval("sfrq");
    ofs_check(C13ofs);
    CO_bw=80*ppm; CA_bw=100*ppm;
    CA_ofs=(35-C13ofs)*ppm;
    CO_90 = pbox_make("CO_90", "Q5", CO_bw, 0.0, pwC*compC, pwClvl);
    CO_180 = pbox_make("CO_180", "square180r", CO_bw, 0.0, pwC*compC, pwClvl);
    CA_90 = pbox_make("CA_90", "Q5", CA_bw, CA_ofs, pwC*compC, pwClvl);
    CA_180 = pbox_make("CA_180", "square180r", CA_bw, CA_ofs, pwC*compC, pwClvl);
    
    /* pbox_make creates shapes with coarse power at pwClvl and fine power is adjusted */
   }
}
    pwCO_90 = CO_90.pw; pwrCO_90 = CO_90.pwrf;
    pwCO_180 = CO_180.pw; pwrCO_180 = CO_180.pwrf;
    pwCaliph1 = CA_90.pw; pwrCaliph1 = CA_90.pwrf;
    pwCaliph2 = CA_180.pw; pwrCaliph2 = CA_180.pwrf;

	
/* BEGIN PULSE SEQUENCE */

status(A);
   	delay(d1);
   	obsoffset(tof);
   	rf0 = 4095.0;
        obspower(pwClvl);
        obspwrf(rf0);
        
status(B);
        obspwrf(pwrCO_90);
	shapedpulse("CO_90",pwCO_90,zero,0.0,0.0);
	zgradpulse(gzlvl1,gt1);
	delay(TC/2.0-gt1);
	obspwrf(pwrCO_180);
	shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
	obspwrf(pwrCaliph2);
	shapedpulse("CA_180",pwCaliph2,zero,0.0,0.0);
	zgradpulse(gzlvl1,gt1);
	delay(TC/2.0-gt1);
	obspwrf(pwrCaliph1);
	shapedpulse("CA_90",pwCaliph1,t2,0.0,0.0);
	
	if (tau1 < pwCO_180)
	 {   
	  obspwrf(pwrCO_180);
	  delay(tau1);
	  shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
	  delay(tau1);
	 }
	    
	else
	 {
	  obspwrf(pwrCO_180);
	  delay(tau1-pwCO_180/2.0);
	  shapedpulse("CO_180",pwCO_180,zero,0.0,0.0);
	  delay(tau1-pwCO_180/2.0);
	 }
	obspwrf(pwrCaliph1);
	shapedpulse("CA_90",pwCaliph1,t3,0.0,0.0);
	obspwrf(pwrCO_90);
	shapedpulse("CO_90",pwCO_90,t1,0.0,0.0);
	zgradpulse(gzlvl2*0.8,gt2);
	delay(gstab);
	obspwrf(pwrCO_90);
	shapedpulse("CO_90",pwCO_90,t1,0.0,rof2);
        obspwrf(pwrCO_180);                        /* added for cold probe */
        shapedpulse("CO_180",pwCO_180,zero,0.0,rof2);
	
	
status(C);
	setreceiver(t12);
	
}
Example #9
0
pulsesequence()
{

/* DECLARE AND LOAD VARIABLES */
int         t1_counter, t2_counter;	/* used for states tppi in t1 & t2*/

char	    IPAP[MAXSTR], Hstart[MAXSTR],
            f1180[MAXSTR],H2dec[MAXSTR],
            shCACB_90[MAXSTR],shCACB_90r[MAXSTR],
	    shCACB_180[MAXSTR], shCB_180[MAXSTR], decCB[MAXSTR],
            shCACB_180off[MAXSTR],
            shCBIP[MAXSTR],
	    shCO_90[MAXSTR],            
	    shCO_180[MAXSTR],
            shCO_180off[MAXSTR];

double
	    tau1,			/*  t1 delay */
               x,
            TCH = getval("TCH"), 
	    TC = getval("TC"), 		/* delay 1/(2JCACB) ~  7.0ms in Ref. */ 
            del = getval("del"),	/* delay del = 1/(2JC'C) ~ 9.0ms in Ref. */         
            pwClvl = getval("pwClvl"), 	/* coarse power for C13 pulse */
            pwC = getval("pwC"),        /* C13 90 degree pulse length at pwClvl */
            compC = getval("compC"),    /* adjustment for C13 amplifier compression */
	    pwClvlF=getval("pwClvlF"),   /* maximum fine power when using pwC pulses */

	     pwHlvl = getval("pwHlvl"),
             pwH = getval("pwH"),
	    

        pwCBIP  =  getval("pwCBIP"),	
  /* 90 degree pulse at CO (174ppm)    */
      
        pwCO_90  =  getval("pwCO_90"),			/* 90 degree pulse length on C13  */
        pwCO_90phase_roll  =  getval("pwCO_90phase_roll") , /* fraction of CACB pulse to compensate for phase roll */
        pwrCO_90 =  getval("pwrCO_90"),		       	/*power  */
        pwrfCO_90 = getval("pwrfCO_90"),
        
/* 180 degree pulse at CO (174ppm)  */

        pwCO_180   =  getval("pwCO_180"),			/* 180 degree pulse length on C13  */
        pwrCO_180  =  getval("pwrCO_180"),		       	/*power  */
        pwrfCO_180 =  getval("pwrfCO_180"),

/* 90 degree pulse at CAB (57.7ppm)  */

        tofCACB    =  getval("tofCACB"), 
        pwCACB_90  =  getval("pwCACB_90"),
        pwCACB_90phase_roll  =  getval("pwCACB_90phase_roll") , /* fraction of CACB pulse to compensate for phase roll */

			/* 90 degree pulse length on C13  */
        pwrCACB_90 =  getval("pwrCACB_90"),		       	/*power  */
        pwrfCACB_90 = getval("pwrfCACB_90"),

/* 180 degree pulse at CA (57.7ppm)  */
        pwCACB_180   =  getval("pwCACB_180"),			/* 180 degree pulse length on C13  */
        pwrCACB_180  =  getval("pwrCACB_180"),		       	/*power  */
        pwrfCACB_180 =  getval("pwrfCACB_180"),

        pwCB_180   =  getval("pwCB_180"),			/* 180 degree pulse length on C13  */
        pwrCB_180  =  getval("pwrCB_180"),
 

	sw1 = getval("sw1"),
        sw2 = getval("sw2"),

	gt1 = getval("gt1"),  		     
	gzlvl1 = getval("gzlvl1"),

	gt2 = getval("gt2"),				   
	gzlvl2 = getval("gzlvl2"),
        gt3 = getval("gt3"),
        gzlvl3 = getval("gzlvl3"),
        gstab = getval("gstab");
        getstr("IPAP",IPAP); 
        getstr("H2dec",H2dec); 

         getstr("shCBIP",shCBIP);
         getstr("f1180",f1180);
	 getstr("shCACB_90",shCACB_90); getstr("shCACB_90r",shCACB_90r);
         getstr("shCACB_180",shCACB_180); getstr("shCACB_180off",shCACB_180off);
         getstr("shCB_180",shCB_180); getstr("decCB",decCB);
	 getstr("shCO_90",shCO_90);
         getstr("shCO_180",shCO_180);    getstr("shCO_180off",shCO_180off);

	getstr("Hstart",Hstart);

/*   LOAD PHASE TABLE    */
	settable(t1,4,phi1);
        settable(t2,4,phi2);
	settable(t3,4,phi3);
	settable(t4,4,phi4);
        settable(t5,4,phi5);
	settable(t12,4,rec);
        

         

	 

/*   INITIALIZE VARIABLES   */
if( (IPAP[A] != 'i') &&  (IPAP[A] != 'a')&&  (IPAP[A] != 't'))
  { text_error("IPAP flag either i or a, exiting "); psg_abort(1); }

if( (Hstart[A]=='y') && ((dmm[A]!='c' || dm[A]=='y')) ) 
{ 
 text_error("Incorrect combination of dm, dmm and Hstart.  "); 
                         psg_abort(1);};


x=0.0;
if(decCB[A]=='y'){x=1.0;}
if(ni/sw1 > TC-2.0*pwCB_180*x) { 

 text_error("too many increments in CAB t1 evolution %d\n",(int)( (TC-2.0*pwCB_180*x)*sw1 +0.5)); 
                         psg_abort(1);};


/* PHASES AND INCREMENTED TIMES */

/*  Phase incrementation for hypercomplex 2D data, States-Haberkorn element */

    if (phase1 == 2)    tsadd(t1,1,4);  
    
    tau1 = d2;
    if(f1180[A]=='y') {tau1+=0.5/sw1;}
    tau1 = tau1/2.0;

    
/* Calculate modifications to phases for States-TPPI acquisition          */
if(IPAP[A]=='a'){tsadd(t4,1,4);};




   if( ix == 1) d2_init = d2;
   t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 );
   if(t1_counter % 2) 
	{ tsadd(t1,2,4); tsadd(t12,2,4); }

/* BEGIN PULSE SEQUENCE */

status(A);
   	 delay(10.0e-6);
        obspower(pwClvl);
        obspwrf(4095.0);
        dec2power(dpwr2); dec2pwrf(4095.0);
   	obsoffset(tofCACB);
        delay(d1);


/* option to start from H magnetization */
if(Hstart[A]=='y') 
     {
	decpower(pwHlvl); decpwrf(4095.0);

	   decrgpulse(pwH, zero, 0.0, 0.0);
	   delay(TCH);
	   simpulse(2.0*pwC,2.0*pwH, zero,zero, 0.0, 0.0);
	   delay(TCH);
	   decrgpulse(pwH, one, 0.0, 0.0);

	   zgradpulse(gzlvl2,gt2);
	   delay(gstab);

 	   rgpulse(pwC, two, 0.0, 0.0);
 	    delay(TCH);
 	    simpulse(2.0*pwC,2.0*pwH, zero,zero, 0.0, 0.0);
 	    delay(TCH);
  	    rgpulse(pwC, one, 0.0, 0.0);

	    zgradpulse(gzlvl3,gt3);
	     delay(gstab*2.0);

	decpower(dpwr); decpwrf(4095.0);
}


if (H2dec[A] == 'y') lk_hold();
status(B);
 /* CACO experiment */     

/************optional deuterium decoupling**************************/
	if(H2dec[A] == 'y'){  dec3unblank();
                             if(1.0/dmf3>900.0e-6) {
						     dec3power(dpwr3+6.0);
						     dec3rgpulse(0.5/dmf3, one, 1.0e-6, 0.0e-6);
						     dec3power(dpwr3);
						     }
			   else dec3rgpulse(1.0/dmf3, one, 1.0e-6,0.0e-6);
  			   dec3phase(zero);       setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3);
	                    }	

/**************************************/

	/* begin CA   evolution and transfer to CO */


        obspwrf(pwrfCACB_90);  obspower(pwrCACB_90);
	shapedpulse(shCACB_90,pwCACB_90,t1,0.0,0.0);


        obspwrf(4095.0);  obspower(pwClvl);

 
        delay(10.0e-6);
        shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0);
        delay(10.0e-6);

        if(decCB[A]=='y') {
                delay( (TC/2.0-tau1 + 2.0*pwCACB_90phase_roll*pwCACB_90)*0.5 -pwCB_180*0.5);
         	obspower(pwrCB_180);
	 	shapedpulse(shCB_180,pwCB_180,zero,0.0,0.0);
                delay( (TC/2.0-tau1 + 2.0*pwCACB_90phase_roll*pwCACB_90)*0.5 -pwCB_180*0.5);
		}

        else	delay(TC/2.0-tau1 + 2.0*pwCACB_90phase_roll*pwCACB_90);
        
        obspower(pwClvl);
        shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0);
   
       if(decCB[A]=='y') {
			delay((TC/2.0+tau1)*0.5 -pwCB_180*0.5);
         		obspower(pwrCB_180);
	 		shapedpulse(shCB_180,pwCB_180,zero,0.0,0.0);
			delay((TC/2.0+tau1)*0.5 -pwCB_180*0.5);
           }
        else delay(TC/2.0+tau1);

        obspower(pwrCACB_90);
	shapedpulse(shCACB_90r,pwCACB_90,one,0.0,0.0);

/*************************************************************/
 	if(H2dec[A] == 'y')  {                     
	                    setstatus(DEC3ch, FALSE, 'w', FALSE, dmf3);
                             

                             if(1.0/dmf3>900.0e-6) {
						     dec3power(dpwr3+6.0);
						     dec3rgpulse(0.5/dmf3, three, 1.0e-6, 0.0e-6);
						     dec3power(dpwr3);
						     }

	                    else dec3rgpulse(1.0/dmf3, three, 1.0e-6, 0.0e-6);	    dec3blank();  
			   }
/*************************************************************/

    /* CAzCOz */

 
         delay(10e-6);
         obsoffset(tof);
         delay(10e-6);
	zgradpulse(gzlvl1,gt1);
	delay(gstab);
status(C);
     /* CAzCOz ->  CO or CACO */

        obspwrf(pwrfCO_90);  obspower(pwrCO_90);
	shapedpulse(shCO_90,pwCO_90,t4,0.0,0.0);

        /* ghost 180 on CA*/
     
  if(IPAP[A]=='i')   {

       obspwrf(pwClvlF);  obspower(pwClvl);
        delay(10.0e-6);
        shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0);
        delay(10.0e-6);

         
       delay(del/2.0 + pwCO_90phase_roll*pwCO_90);

 	obspwrf(pwrfCACB_180); obspower(pwrCACB_180);
 	delay(10.0e-6);
 	shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0);
  	obspwrf(pwClvlF);  obspower(pwClvl);
 	delay(10.0e-6);

       shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0);

	obspwrf(pwrfCACB_180); obspower(pwrCACB_180);
 	delay(10.0e-6);
 	shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0);
  
 	delay(10.0e-6);


       delay(del/2.0 );
  }


/***>>>>>>>>>>>**TEST*********/
  if(IPAP[A]=='t')   {
         obspwrf(pwrfCACB_180); obspower(pwrCACB_180);
        delay(10.0e-6);
        shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0);
        delay(10.0e-6);
        obspwrf(pwrfCO_180); obspower(pwrCO_180);
	delay(del/2.0);
   

     shapedpulse(shCO_180,pwCO_180,zero,0.0,0.0);

        
        obspwrf(pwrfCACB_180); obspower(pwrCACB_180);
        delay(10.0e-6);
         shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0);
        delay(10.0e-6);

        obspwrf(pwrfCO_90);  obspower(pwrCO_90);
        delay(del/2.0);
  }

/********<<<<<<<<<<<<<**TEST*********/

  if(IPAP[A]=='a')   {

       obspwrf(pwClvlF);  obspower(pwClvl);
          
        delay(10.0e-6);
        shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0);
        delay(10.0e-6);

         
        delay(del/4.0 + pwCO_90phase_roll*pwCO_90);

 	obspwrf(pwrfCACB_180); obspower(pwrCACB_180);
 	delay(10.0e-6);
 	shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0);
  	obspwrf(pwClvlF);  obspower(pwClvl);

 	delay(10.0e-6);
        delay(del/4.0 );

       shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0);

        delay(del/4.0);

	obspwrf(pwrfCACB_180); obspower(pwrCACB_180);
 	delay(10.0e-6);
 	shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0);
  
 	delay(10.0e-6);

       delay(del/4.0 );
  }

 if (H2dec[A]=='y') lk_sample();

status(D);
	setreceiver(t12);
	
}