/* 
Pulse sequence of real-time pure shift HSQC using BIRD or BASHD (2nd generation)
Peter Kiraly

----------------------
Developed By NMR Group
School of Chemistry
University of Manchester
United Kingdom
Aug 2017
----------------------
*/

#include <standard.h>
static int	ph1[32] = {1,1,1,1,3,3,3,3,1,1,1,1,3,3,3,3,1,1,1,1,3,3,3,3,1,1,1,1,3,3,3,3},		//v1
		ph2[32] = {0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2},		//v2
		ph3[32] = {0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2},		//v3
		ph4[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},		//v4
		ph5[32] = {1,3,1,3,3,1,3,1,3,1,3,1,1,3,1,3,3,1,3,1,1,3,1,3,1,3,1,3,3,1,3,1};		//oph			  			  
static int	ph7[32] = {0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1},		//v7 - 1st 90 of bird and the hard 180
		ph8[32] = {1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2},		//v8 - simpulse 180 of bird
		ph9[32] = {2,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3};		//v9 - 2nd 90 of bird 
static int	nph1[32] = {1,1,3,3,1,1,3,3,1,1,3,3,1,1,3,3,1,1,3,3,1,1,3,3,1,1,3,3,1,1,3,3},		//v1
		nph2[32] = {0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2},		//v2
		nph3[32] = {0,0,0,0,2,2,2,2,0,0,0,0,2,2,2,2,0,0,0,0,2,2,2,2,0,0,0,0,2,2,2,2},		//v3
		nph4[32] = {0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2},		//v4
		nph5[32] = {1,3,3,1,3,1,1,3,3,1,1,3,1,3,3,1,1,3,3,1,3,1,1,3,3,1,1,3,1,3,3,1};		//oph 			  
static int	nph7[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},		//v7 - 1st 90 of bird and the hard 180
		nph8[32] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},		//v8 - simpulse 180 of bird
		nph9[32] = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};		//v9 - 2nd 90 of bird 
static int	 ph6m4[ 4] = {0,0,2,2},
		 ph6t5[ 5] = {0,5,2,5,0},
		 ph6t4[20] = {0,5,2,5,0,0,5,2,5,0,6,11,8,11,6,6,11,8,11,6},
		ph6m16[16] = {0,0,2,2, 0,2,2,0, 2,2,0,0, 2,0,0,2},
		 ph6t7[ 7] = {0,7,20,17,20,7,0},
		 ph6t9[ 9] = {0,1,12,11,18,11,12,1,0},
		   ph6[ 4] = {0,0,0,0};	

pulsesequence()
{
double  evolcorr=2.0*pw+4.0e-6,	
	j1xh = getval("j1xh"),
	tau = (double)(1.0e-6*(floor)(1.0e6/(4.0*j1xh))), 
	taug=2.0*tau,
	multh = getval("multh");

int	phase1 = (int)(getval("phase")+0.5),
	ZZgsign=1.0, 
	icosel;
double	rof3=getval("rof3"), 
	tpwr = getval("tpwr"),
	tpwrf = getval("tpwrf"),
	pw = getval("pw"),
	pw_HBIP = 2.0*pw, //getval("pw_HBIP"),
	pw_XBIP = getval("pw_XBIP"), 
	pwr_HBIP = tpwr, //getval("pwr_HBIP"),	
	pwr_XBIP = getval("pwr_XBIP"), 	
	tau_p = getval("tau_p"),
	tau_r=0.0,
	pp = 2.0*pw, //getval("pp"),
	pplvl = tpwr, //getval("pplvl"),
	pplvlf = tpwrf, //getval("pplvlf"),
	pw180_a = getval("pw180_a"),
	pwr180_a = getval("pwr180_a"),
	dmf = getval("dmf"),
	dres = getval("dres"),
	ACQ_gt1 = getval("ACQ_gt1"),  
	ACQ_gzlvl1 = getval("ACQ_gzlvl1"),
	ACQ_gzlvl2 = getval("ACQ_gzlvl2"),
	ACQ_gzlvl3 = getval("ACQ_gzlvl3"),
	ACQ_gzlvl4 = getval("ACQ_gzlvl4"),
	ACQ_gstab = getval("ACQ_gstab"),
	offRes_DEC = getval("offRes_DEC"), 	
	offRes_X180 = getval("offRes_X180"), 		
	calH = getval("calH"), 	
	calX = getval("calX"), 
	cal_pwlvl = getval("cal_pwlvl"), 
	cal_pwxlvl = getval("cal_pwxlvl"), 
	cal_pw = getval("cal_pw"), 
	cal_pwx = getval("cal_pwx"), 
	kp_npoints = getval("kp_npoints"),
	droppts1 = getval("droppts1"),	
	droppts2 = getval("droppts2"),	
	kp_cycles =(double) (floor)( getval("kp_cycles") );
	F_initval(kp_cycles,v10);
int	kpph = (int)(getval("kpph"));
char   	shp_HBIP[MAXSTR], shp_XBIP[MAXSTR], 
	lkgate_flg[MAXSTR], 
	homo[MAXSTR],
	kp_scyc[MAXSTR],	
	dseq[MAXSTR], dm[MAXSTR],
	shp_a[MAXSTR], 
	hsgradaxis[MAXSTR],	
	gradaxis[MAXSTR];	

	getstr("shp_HBIP",shp_HBIP);
	getstr("shp_XBIP",shp_XBIP);
	getstr("shp_a",shp_a);	
        getstr("lkgate_flg",lkgate_flg);
	getstr("homo",homo);
	getstr("kp_scyc",kp_scyc);
	getstr("dseq",dseq);
	getstr("dm",dm);
        getstr("hsgradaxis",hsgradaxis);		
        getstr("gradaxis",gradaxis);	
double 	gtE = getval("gtE"),	
	gzlvlE = getval("gzlvlE"),
	gtD = getval("gtD"),	
	gzlvlD = getval("gzlvlD"),
	gstab = getval("gstab"),
	hsglvl = getval("hsglvl"),
        hsgt = getval("hsgt"),
        hsgstab = getval("hsgstab");	
char   	BIRD[MAXSTR],    
	kp_hsqc[MAXSTR],
	BIRDmode[MAXSTR]; 

	getstr("BIRD",BIRD);
	getstr("kp_hsqc",kp_hsqc);
	getstr("BIRDmode",BIRDmode);
char    sspul[MAXSTR], nullflg[MAXSTR], PFGflg[MAXSTR];

  	getstr("sspul",sspul);
	getstr("nullflg",nullflg);
  	getstr("PFGflg",PFGflg);

if (BIRDmode[0]=='n')
{
	tau_r = (tau_p -4.0*ACQ_gt1-4.0*ACQ_gstab- -pp-4.0*rof1 -2.0*rof1-pw180_a ) /2.0;
}
if (BIRDmode[0]=='h')
{
	if (2.0*pwx>2.0*pw) 
	{
	tau_r = (tau_p -4.0*ACQ_gt1-4.0*ACQ_gstab- -pp-4.0*rof1 -2.0*rof1-6.0*pwx-2.0*pw -4.0*tau) /2.0;
	}
	else
	{
	tau_r = (tau_p -4.0*ACQ_gt1-4.0*ACQ_gstab- -pp-4.0*rof1 -2.0*rof1-4.0*pwx-4.0*pw  -4.0*tau) /2.0;
	}
}
if (BIRDmode[0]=='b')
{
	if (pw_XBIP>pw_HBIP) 
	{
	tau_r = (tau_p -4.0*ACQ_gt1-4.0*ACQ_gstab- -pp-4.0*rof1 -2.0*rof1-3.0*pw_XBIP-2.0*pw -4.0*tau) /2.0;
	}
	else
	{
	tau_r = (tau_p -4.0*ACQ_gt1-4.0*ACQ_gstab- -pp-4.0*rof1 -2.0*rof1-2.0*pw_XBIP-pw_HBIP-2.0*pw -4.0*tau) /2.0;
	}
}

	evolcorr=2.0*pw+4.0e-6;
	  
	if (multh > 0.5)
   	taug = 2.0*tau;
   	else
    	taug = gtE + gstab + 2*GRADIENT_DELAY;
   	ZZgsign=-1;
   	if (multh == 2) ZZgsign=1;
   	icosel = 1;


if (kpph>0)
{
	settable(t1,kpph,ph1);
	settable(t2,kpph,ph2);
	settable(t3,kpph,ph3);
	settable(t4,kpph,ph4);
	settable(t5,kpph,ph5);
	settable(t7,kpph,ph7);
	settable(t8,kpph,ph8);
	settable(t9,kpph,ph9);
}
if (kpph==0)
{
	settable(t1,32,ph1);
	settable(t2,32,ph2);
	settable(t3,32,ph3);
	settable(t4,32,ph4);
	settable(t5,32,ph5);
	settable(t7,32,ph7);
	settable(t8,32,ph8);
	settable(t9,32,ph9);
}
if (kpph<0)
{
	settable(t1,-kpph,nph1);
	settable(t2,-kpph,nph2);
	settable(t3,-kpph,nph3);
	settable(t4,-kpph,nph4);
	settable(t5,-kpph,nph5);
	settable(t7,-kpph,nph7);
	settable(t8,-kpph,nph8);
	settable(t9,-kpph,nph9);
}

	
	getelem(t7, ct, v7);
  	getelem(t8, ct, v8);
	getelem(t9, ct, v9);

  	getelem(t1, ct, v1);		
  	getelem(t2, ct, v2);
  	getelem(t3, ct, v3);
  	getelem(t4, ct, v4);
	getelem(t5, ct, oph);
  	

   	F_initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v5);
   	if ((phase1 == 2) || (phase1 == 5))
     	icosel = -1;

   	add(v2,v5,v2);	
   	add(oph,v5,oph);

if (kp_scyc[0]=='n')
{
	settable(t6,4,ph6);
}
if ((kp_scyc[0]=='m') && (kp_scyc[1]=='4'))
{
settable(t6,4,ph6m4);
}
if ((kp_scyc[0]=='m') && (kp_scyc[1]=='1') && (kp_scyc[2]=='6'))
{
settable(t6,16,ph6m16);
}
if ((kp_scyc[0]=='t') && (kp_scyc[1]=='5'))
{
settable(t6,5,ph6t5);
obsstepsize(30.0);
decstepsize(30.0);
}
if ((kp_scyc[0]=='t') && (kp_scyc[1]=='4'))
{
settable(t6,20,ph6t4);
obsstepsize(30.0);
decstepsize(30.0);
}
if ((kp_scyc[0]=='t') && (kp_scyc[1]=='7'))
{
settable(t6,7,ph6t7);
obsstepsize(15.0);
decstepsize(15.0);
}
if ((kp_scyc[0]=='t') && (kp_scyc[1]=='9'))
{
settable(t6,9,ph6t9);
obsstepsize(15.0);
decstepsize(15.0);
}
assign(zero,v16);
getelem(t6,v16,v16);

	if (kp_scyc[0]=='t')
	{
		if ((kp_scyc[1]=='4') || (kp_scyc[1]=='5') )
		{
		mult(three,v8,v18);
		add(v18,v16,v16);		
		}
		if ((kp_scyc[1]=='7') || (kp_scyc[1]=='9') )
		{
		mult(three,v8,v18);
		mult(two,v18,v18);
		add(v18,v16,v16);
		}
	}
sub(v10,one,v14);
status(A);
	if (sspul[A] == 'y')
	{
if (lkgate_flg[0] == 'y')  lk_hold(); 
  
      if (PFGflg[A] == 'y')
      {
	obspower(tpwr);
	obspwrf(tpwrf);
	
	delay(5.0e-5);
	if (hsgt>0.0)
	{
	  if (hsgradaxis[0]=='t')  
	  { 
	    rgradient('x',hsglvl);
	    rgradient('y',hsglvl); 
	    delay(hsgt); 
	    rgradient('x',0.0); 
	    rgradient('y',0.0); 
	  }   
	  else 
	  {
	    if ((hsgradaxis[0]=='x') || (hsgradaxis[0]=='y')) 
	    { 
	    rgradient(hsgradaxis[0],hsglvl); 
	    delay(hsgt); 
	    rgradient(hsgradaxis[0],0.0); 
	    } 
	    else zgradpulse(hsglvl,hsgt); 
	  }
	}
        rgpulse(pw,zero,rof1,rof1);
	if (hsgt>0.0)
	{
	  if (hsgradaxis[0]=='t')  
	  { 
	    rgradient('x',hsglvl);
	    rgradient('y',hsglvl); 
	    delay(hsgt); 
	    rgradient('x',0.0); 
	    rgradient('y',0.0); 
	  }   
	  else 
	  {
	    if ((hsgradaxis[0]=='x') || (hsgradaxis[0]=='y')) 
	    { 
	    rgradient(hsgradaxis[0],hsglvl); 
	    delay(hsgt); 
	    rgradient(hsgradaxis[0],0.0); 
	    } 
	    else zgradpulse(hsglvl,hsgt); 
	  }
	}

      }
       	else
       	{
        obspower(tpwr-12);
	delay(5.0e-5);
        rgpulse(500*pw,zero,rof1,rof1);
        rgpulse(500*pw,one,rof1,rof1);
	}
	}

	if (nullflg[0]=='y') obspower(tpwr);
	else obspower(cal_pwlvl);
	decpower(pwxlvl);
	txphase(zero);
        decphase(zero);
	obsoffset(tof);
	decoffset(dof);
	
if (lkgate_flg[0] == 'y')  lk_sample(); 
	delay(d1);
if (lkgate_flg[0] == 'y')  lk_hold(); 
	delay(5.0e-5);

status(B);  

if (kp_hsqc[0]=='y')
{
      if (getflag("nullflg"))
      {
        rgpulse(0.5*pw,zero,rof1,rof1);
	txphase(zero);
	delay(2.0*tau);
	simpulse(2.0*pw,2.0*pwx,zero,zero,rof1,rof1); 
	txphase(two);
        delay(2.0*tau);
        rgpulse(1.5*pw,two,rof1,rof1);
	txphase(zero);
	if (hsgt>0.0)
	{
	  if (hsgradaxis[0]=='t')  
	  { 
	    rgradient('x',hsglvl);
	    rgradient('y',hsglvl); 
	    delay(hsgt); 
	    rgradient('x',0.0); 
	    rgradient('y',0.0); 
	  }   
	  else 
	  {
	    if ((hsgradaxis[0]=='x') || (hsgradaxis[0]=='y')) 
	    { 
	    rgradient(hsgradaxis[0],hsglvl); 
	    delay(hsgt); 
	    rgradient(hsgradaxis[0],0.0); 
	    } 
	    else zgradpulse(hsglvl,hsgt); 
	  }
	}
	if (cal_pwlvl!=tpwr) obspower(cal_pwlvl);
	delay(hsgstab);
      }
	rgpulse(cal_pw*calH,zero,rof1,rof1); 	
	if (cal_pwlvl!=tpwr) obspower(tpwr);
	delay(tau);
	simpulse(2.0*pw,2.0*pwx,zero,zero,rof1,rof1); 
	txphase(v1);
	delay(tau);
     	rgpulse(pw,v1,rof1,rof1);
	if (hsgt>0.0)
	{
	  if (hsgradaxis[0]=='t')  
	  { 
	    rgradient('x',hsglvl);
	    rgradient('y',hsglvl); 
	    delay(2.0*hsgt); 
	    rgradient('x',0.0); 
	    rgradient('y',0.0); 
	  }   
	  else 
	  {
	    if ((hsgradaxis[0]=='x') || (hsgradaxis[0]=='y')) 
	    { 
	    rgradient(hsgradaxis[0],hsglvl); 
	    delay(2.0*hsgt); 
	    rgradient(hsgradaxis[0],0.0); 
	    } 
	    else zgradpulse(hsglvl,2.0*hsgt); 
	  }
	}
   	decphase(v2);
	if (cal_pwxlvl!=pwxlvl) decpower(cal_pwxlvl);
	delay(hsgstab);
	decrgpulse(cal_pwx*calX, v2, rof1, 2.0e-6); 
	txphase(zero);
	decphase(zero);
	if (cal_pwxlvl!=pwxlvl) decpower(pwxlvl);

	delay(d2/2.0);	
	rgpulse(2.0*pw,zero,2.0e-6,2.0e-6);
	delay(d2/2.0);	

     	zgradpulse(gzlvlE,gtE);
	delay(taug - gtE);
	simpulse(multh*pw,2.0*pwx,zero,zero,rof1,rof1);
	delay(taug + evolcorr); 

	decrgpulse(pwx,v4,2.0e-6,rof1);
	if (hsgt>0.0)
	{
	  if (hsgradaxis[0]=='t')  
	  { 
	    rgradient('x',ZZgsign*0.6*hsglvl);
	    rgradient('y',ZZgsign*0.6*hsglvl); 
	    delay(1.2*hsgt); 
	    rgradient('x',0.0); 
	    rgradient('y',0.0); 
	  }   
	  else 
	  {
	    if ((hsgradaxis[0]=='x') || (hsgradaxis[0]=='y')) 
	    { 
	    rgradient(hsgradaxis[0],ZZgsign*0.6*hsglvl); 
	    delay(1.2*hsgt); 
	    rgradient(hsgradaxis[0],0.0); 
	    } 
	    else zgradpulse(ZZgsign*0.6*hsglvl,1.2*hsgt); 
	  }
	}
	txphase(v3);
	delay(hsgstab);
     	rgpulse(pw,v3,rof1,rof1);
	delay(tau - (2.0*pw/PI) - 2.0*rof1);

	simpulse(2.0*pw,2.0*pwx,zero,zero,rof1,rof1); 

	zgradpulse(icosel*gzlvlD,gtD);
	decpower(dpwr);	

	if (offRes_DEC!=0.0) decoffset(dof+offRes_DEC);

	if (BIRD[0]=='y')
	{
	delay(tau - gtD - 50.0e-9 - droppts1/sw/2.0);
	}
	else
	{
	delay(tau - gtD - 50.0e-9);
	}

}
else
{
decpower(dpwr);
rgpulse(pw,oph,rof1,rof1);

	if (pwr180_a!=tpwr)  obspower(pwr180_a);
zgradpulse(gzlvlD,gtD);
delay(0.001);
delay(droppts1/sw/2.0);
	shaped_pulse(shp_a,pw180_a,zero,rof1,rof1);
	if (pwr180_a!=tpwr) obspower(tpwr);
zgradpulse(gzlvlD,gtD);
delay(0.001);
}	
if (BIRD[0]=='y')
{
setacqmode(WACQ|NZ);	
	if (kp_scyc[0]=='t')
	{
	dcplrphase(v16);
	}
	else
	{
	decphase(v16);
	}
	obsblank();	
	delay(rof2);
	startacq(alfa);
	acquire(droppts1,1.0/sw);
	if (dm[2]=='y')
	{
	decprgon(dseq, 1.0/dmf, dres);
	decon(); decunblank();
	}
	acquire(kp_npoints/2.0,1.0/sw);
	if (dm[2]=='y')
	{
	decoff();
	decprgoff();
	}
	acquire(droppts2,1.0/sw);
	recoff();					 	
loop(v10,v11);
	obspower(pplvl);	
	if (pplvlf!=tpwrf) obspwrf(pplvlf);
	obsunblank();
	if (( (offRes_X180!=0.0) || (offRes_DEC!=0.0)) && (offRes_X180!=offRes_DEC)) decoffset(dof+offRes_X180);
	getelem(t6,v11,v16);
	if (kp_scyc[0]=='t')
	{
	xmtrphase(v16);
	dcplrphase(v16);
	}
	else
	{
	add(v16,v7,v7);
	add(v16,v8,v8);
	add(v16,v9,v9);
	}
	mod4(v11,v12); 
	delay(rof1-50.0e-9);
if (ACQ_gt1>0.0)
{

	if (gradaxis[0]=='t')  
	{ 
		ifzero(v12);
		 rgradient('x',ACQ_gzlvl1);
		 rgradient('y',ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient('x',ACQ_gzlvl2);
		 rgradient('y',ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient('x',ACQ_gzlvl3);
		 rgradient('y',ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient('x',ACQ_gzlvl4);
		 rgradient('y',ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
	}   
	else 
	{    
    		if ((gradaxis[0]=='x') || (gradaxis[0]=='y')) 
		{ 
		ifzero(v12);
		 rgradient(gradaxis[0],ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		} 
		else 
		{
		ifzero(v12);
		 zgradpulse(ACQ_gzlvl1,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 zgradpulse(ACQ_gzlvl2,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 zgradpulse(ACQ_gzlvl3,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 zgradpulse(ACQ_gzlvl4,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		}
	}   
}
	rgpulse(pp,v7,rof1,rof1);
	delay(rof1-50.0e-9);
if (ACQ_gt1>0.0)
{

	if (gradaxis[0]=='t')  
	{ 
		ifzero(v12);
		 rgradient('x',ACQ_gzlvl1);
		 rgradient('y',ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient('x',ACQ_gzlvl2);
		 rgradient('y',ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient('x',ACQ_gzlvl3);
		 rgradient('y',ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient('x',ACQ_gzlvl4);
		 rgradient('y',ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
	}   
	else 
	{    
    		if ((gradaxis[0]=='x') || (gradaxis[0]=='y')) 
		{ 
		ifzero(v12);
		 rgradient(gradaxis[0],ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		} 
		else 
		{
		ifzero(v12);
		 zgradpulse(ACQ_gzlvl1,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 zgradpulse(ACQ_gzlvl2,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 zgradpulse(ACQ_gzlvl3,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 zgradpulse(ACQ_gzlvl4,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		}
	}   
}
delay((droppts1+droppts2)/sw/2.0);
	if (BIRDmode[0]== 'n')
	{
	obspower(pwr180_a);	
	if (tpwrf!=4095.0) obspwrf(4095.0);
	}
	else
	{
	obspower(tpwr);	
	if (tpwrf!=4095.0) obspwrf(tpwrf);
	}	
	delay(tau_r);
if (ACQ_gt1>0.0)
{
	if (gradaxis[0]=='t')  
	{ 
		ifzero(v12);
		 rgradient('x',ACQ_gzlvl3);
		 rgradient('y',ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient('x',ACQ_gzlvl4);
		 rgradient('y',ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient('x',ACQ_gzlvl1);
		 rgradient('y',ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient('x',ACQ_gzlvl2);
		 rgradient('y',ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
	}   
	else 
	{    
    		if ((gradaxis[0]=='x') || (gradaxis[0]=='y')) 
		{ 
		ifzero(v12);
		 rgradient(gradaxis[0],ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		} 
		else 
		{
		ifzero(v12);
		 zgradpulse(ACQ_gzlvl3,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 zgradpulse(ACQ_gzlvl4,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 zgradpulse(ACQ_gzlvl1,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 zgradpulse(ACQ_gzlvl2,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		}
	}   
}
if (BIRDmode[0]== 'h')
{
  	delay(2.0*pwx);
	rgpulse(pw,v7,rof1,rof1);
	decpower(pwxlvl);		
	delay(2.0*tau-2.0*rof1-50.0e-9);
	simpulse(2.0*pw,2.0*pwx,v8,v8,rof1,rof1);
	delay(2.0*tau-2.0*rof1);
	rgpulse(pw,v9,rof1,0.0);
	decrgpulse(2.0*pwx,v8,rof1,0.0);
}
if (BIRDmode[0]== 'b')
{
	delay(pw_XBIP);
	rgpulse(pw,v7,rof1,rof1);
	decpower(pwr_XBIP);
	if (pwr_HBIP!=tpwr)
	{
	obspower(pwr_HBIP);
	delay(2.0*tau-2.0*rof1-100.0e-9);
	}
	else
	{
	delay(2.0*tau-2.0*rof1-50.0e-9);
	}				
	simshaped_pulse(shp_HBIP,shp_XBIP,pw_HBIP,pw_XBIP,v8,v8,rof1,rof1);
	if (pwr_HBIP!=tpwr)
	{
	obspower(tpwr);
	delay(2.0*tau-2.0*rof1-50.0e-9);
	}
	else
	{
	delay(2.0*tau-2.0*rof1);
	}	
	rgpulse(pw,v9,rof1,0.0);
	decshaped_pulse(shp_XBIP,pw_XBIP,v8,rof1,0.0);
}
if (BIRDmode[0]== 'n')
{
	shaped_pulse(shp_a,pw180_a,v7,rof1,rof1);
}
if (ACQ_gt1>0.0)
{
	if (gradaxis[0]=='t')  
	{ 
		ifzero(v12);
		 rgradient('x',ACQ_gzlvl3);
		 rgradient('y',ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient('x',ACQ_gzlvl4);
		 rgradient('y',ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient('x',ACQ_gzlvl1);
		 rgradient('y',ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient('x',ACQ_gzlvl2);
		 rgradient('y',ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient('x',0.0); 
		 rgradient('y',0.0); 
		 delay(ACQ_gstab);
		endif(v13);
	}   
	else 
	{    
    		if ((gradaxis[0]=='x') || (gradaxis[0]=='y')) 
		{ 
		ifzero(v12);
		 rgradient(gradaxis[0],ACQ_gzlvl3); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl4); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl1); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 rgradient(gradaxis[0],ACQ_gzlvl2); 
		 delay(ACQ_gt1); 
		 rgradient(gradaxis[0],0.0); 
		 delay(ACQ_gstab);
		endif(v13);
		} 
		else 
		{
		ifzero(v12);
		 zgradpulse(ACQ_gzlvl3,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v12);
		ifrtEQ(v12,one,v13);
		 zgradpulse(ACQ_gzlvl4,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,two,v13);
		 zgradpulse(ACQ_gzlvl1,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		ifrtEQ(v12,three,v13);
		 zgradpulse(ACQ_gzlvl2,ACQ_gt1);
		 delay(ACQ_gstab);
		endif(v13);
		}
	}   
}
	if (( (offRes_X180!=0.0) || (offRes_DEC!=0.0)) && (offRes_X180!=offRes_DEC)) decoffset(dof+offRes_DEC);
	delay(tau_r -rof1-rof1-rof3-50.0e-9);
	decpower(dpwr);	
	obsblank();
ifrtEQ(v11,v14,v13);
	delay(rof1);
	rcvron(); 	
	delay(rof1);

acquire(droppts1,1.0/sw);
	if (dm[2]=='y')
	{
	decprgon(dseq, 1.0/dmf, dres);
	decon(); decunblank();
	}
	acquire(kp_npoints/2.0,1.0/sw);
	if (dm[2]=='y')
	{
	decoff();
	decprgoff();
	}
acquire(droppts2,1.0/sw);
recoff();					 	

elsenz(v13);
	delay(rof1);
	rcvron(); 	
	delay(rof1);
acquire(droppts2,1.0/sw);
	if (dm[2]=='y')
	{
	decprgon(dseq, 1.0/dmf, dres);
	decon(); decunblank();
	}
	acquire(kp_npoints,1.0/sw);		
	if (dm[2]=='y')
	{
	decoff();
	decprgoff();
	}
acquire(droppts2,1.0/sw);
recoff();					 	

endif(v13);

endloop(v11);

delay(0.0001);
	endacq();
	if (lkgate_flg[0] == 'y')  lk_sample(); 

}

else 
{
	if (homo[A]=='y')
	{   
	status(C);	
	}
	else  
	{  

	setacqmode(WACQ|NZ);	

	obsblank();	
	delay(rof2);
	startacq(alfa);
	status(C);
	acquire(np,1.0/sw);
	recoff();					 	
	endacq();

	if (lkgate_flg[0] == 'y')  lk_sample(); 
	}	  
}

}




