pulsesequence() { // Define Variables and Objects and Get Parameter Values CP hx = getcp("HX",0.0,0.0,0,1); strncpy(hx.fr,"dec",3); strncpy(hx.to,"obs",3); putCmd("frHX='dec'\n"); putCmd("toHX='obs'\n"); DSEQ dec = getdseq("H"); strncpy(dec.t.ch,"dec",3); putCmd("chHtppm='dec'\n"); strncpy(dec.s.ch,"dec",3); putCmd("chHspinal='dec'\n"); DSEQ xdec = getdseq("X"); strncpy(xdec.t.ch,"obs",3); // These four statements assure strncpy(xdec.s.ch,"obs",3); // that the X decoupling will putCmd("chXtppm='obs'\n"); // be on X for either TPPM or putCmd("chXspinal='obs'\n"); // SPINAL. // Set Constant-time Period for d2. if (d2_index == 0) d2_init = getval("d2"); double d2_ = (ni - 1)/sw1 + d2_init; putCmd("d2acqret = %f\n",roundoff(d2_,12.5e-9)); putCmd("d2dwret = %f\n",roundoff(1.0/sw1,12.5e-9)); //-------------------------------------- // Copy Current Parameters to Processed //------------------------------------- putCmd("groupcopy('current','processed','acquisition')"); // Dutycycle Protection DUTY d = init_dutycycle(); d.dutyon = 3.0*getval("pwH90") + getval("pwHtilt") + getval("tHX"); d.dutyoff = d1 + 4.0e-6 + getval("tHmix"); d.c1 = d.c1 + (!strcmp(dec.seq,"tppm")); d.c1 = d.c1 + ((!strcmp(dec.seq,"tppm")) && (dec.t.a > 0.0)); d.t1 = getval("rd") + getval("ad") + at; d.c2 = d.c2 + (!strcmp(dec.seq,"spinal")); d.c2 = d.c2 + ((!strcmp(dec.seq,"spinal")) && (dec.s.a > 0.0)); d.t2 = getval("rd") + getval("ad") + at; d.c3 = d.c3 + (!strcmp(xdec.seq,"tppm")); d.c3 = d.c3 + ((!strcmp(xdec.seq,"tppm")) && (xdec.t.a > 0.0)); d.t3 = d2_; d.c4 = d.c4 + (!strcmp(xdec.seq,"spinal")); d.c4 = d.c4 + ((!strcmp(xdec.seq,"spinal")) && (xdec.s.a > 0.0)); d.t4 = d2_; d = update_dutycycle(d); abort_dutycycle(d,10.0); // Set Phase Tables settable(phH90,16,table1); settable(phHmix1,16,table2); settable(phHmix2,4,table3); settable(phHtilt,4,table4); settable(phXhx,4,table5); settable(phHhx,4,table6); settable(phRec,4,table7); if (phase1 == 2) tsadd(phH90,1,4); setreceiver(phRec); // Begin Sequence txphase(phXhx); decphase(phH90); obspwrf(getval("aXhx")); decpwrf(getval("aH90")); obsunblank(); decunblank(); _unblank34(); delay(d1); sp1on(); delay(2.0e-6); sp1off(); delay(2.0e-6); // H Preparation and tilt decrgpulse(getval("pwH90"),phH90,0.0,0.0); decunblank(); // Delay for 1H Wideline T2 _dseqon(xdec); delay(d2); _dseqoff(xdec); // Mix period for Spin Diffison decrgpulse(getval("pwH90"),phHmix1,0.0,0.0); delay(getval("tHmix")); decrgpulse(getval("pwH90"),phHmix2,0.0,0.0); // Tilt Pulse and Ramped H to X Cross Polarization with LG Offset decrgpulse(getval("pwHtilt"),phHtilt,0.0,0.0); decphase(phHhx); _cp_(hx,phHhx,phXhx); // Begin Acquisition obsblank(); _blank34(); _dseqon(dec); delay(getval("rd")); startacq(getval("ad")); acquire(np, 1/sw); endacq(); _dseqoff(dec); obsunblank(); decunblank(); _unblank34(); }
int x86_udis86_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len) { const char *pc = anal->bits==64? "rip": anal->bits==32? "eip": "ip"; const char *sp = anal->bits==64? "rsp": anal->bits==32? "esp": "sp"; const char *bp = anal->bits==64? "rbp": anal->bits==32? "ebp": "bp"; int oplen, regsz = 4; char str[64], src[32], dst[32]; struct ud u; switch (anal->bits) { case 64: regsz = 8; break; case 16: regsz = 2; break; default: case 32: regsz = 4; break; } UDis86Esil *handler; UDis86OPInfo info = {0, anal->bits, (1LL << anal->bits) - 1, regsz, 0, pc, sp, bp}; memset (op, '\0', sizeof (RAnalOp)); r_strbuf_init (&op->esil); op->addr = addr; op->jump = op->fail = -1; op->ptr = op->val = -1; ud_init (&u); ud_set_pc (&u, addr); ud_set_mode (&u, anal->bits); ud_set_syntax (&u, NULL); ud_set_input_buffer (&u, data, len); ud_disassemble (&u); oplen = op->size = ud_insn_len (&u); if (anal->decode && (handler = udis86_esil_get_handler (u.mnemonic))) { info.oplen = oplen; if (handler->argc > 0) { info.n = getval (u.operand); getarg (dst, &u, info.bitmask, 0); if (handler->argc > 1) { getarg (src, &u, info.bitmask, 1); if (handler->argc > 2) getarg (str, &u, info.bitmask, 2); } } handler->callback (&info, op, dst, src, str); } switch (u.mnemonic) { case UD_Iinvalid: oplen = op->size = -1; return -1; break; case UD_Itest: case UD_Icmp: op->type = R_ANAL_OP_TYPE_CMP; break; case UD_Isalc: // ?? // al = cf break; case UD_Ixor: op->type = R_ANAL_OP_TYPE_XOR; break; case UD_Ior: op->type = R_ANAL_OP_TYPE_OR; break; case UD_Iand: op->type = R_ANAL_OP_TYPE_AND; break; case UD_Isar: op->type = R_ANAL_OP_TYPE_SAR; break; // XXX: sal ?!? case UD_Ishl: op->type = R_ANAL_OP_TYPE_SHL; break; case UD_Ishr: op->type = R_ANAL_OP_TYPE_SHR; break; case UD_Irol: op->type = R_ANAL_OP_TYPE_ROL; break; case UD_Iror: op->type = R_ANAL_OP_TYPE_ROR; break; case UD_Iint3: op->type = R_ANAL_OP_TYPE_TRAP; break; case UD_Iint: op->type = R_ANAL_OP_TYPE_SWI; op->val = u.operand[0].lval.uword; break; case UD_Ilea: case UD_Imov: op->type = R_ANAL_OP_TYPE_MOV; switch (u.operand[1].type) { case UD_OP_MEM: op->type = R_ANAL_OP_TYPE_MOV; if (u.operand[1].base == UD_R_RIP) { int delta = u.operand[1].lval.uword; op->ptr = addr + oplen + delta; } break; default: op->type = R_ANAL_OP_TYPE_MOV; op->ptr = getval (&u.operand[1]); // XX break; } op->stackop = R_ANAL_STACK_INC; op->stackptr = regsz; break; case UD_Ipush: case UD_Ipusha: case UD_Ipushad: case UD_Ipushfq: case UD_Ipushfd: case UD_Ipushfw: switch (u.operand[0].type) { case UD_OP_CONST: case UD_OP_JIMM: case UD_OP_IMM: op->type = R_ANAL_OP_TYPE_PUSH; op->ptr = getval (&u.operand[0]); break; case UD_OP_REG: case UD_OP_PTR: case UD_OP_MEM: default: op->type = R_ANAL_OP_TYPE_UPUSH; op->ptr = 0; break; } op->stackop = R_ANAL_STACK_INC; op->stackptr = regsz; break; case UD_Ipop: case UD_Ipopa: case UD_Ipopad: case UD_Ipopfw: case UD_Ipopfd: case UD_Ipopfq: op->type = R_ANAL_OP_TYPE_POP; op->stackop = R_ANAL_STACK_INC; op->stackptr = -regsz; break; case UD_Ileave: op->type = R_ANAL_OP_TYPE_MOV; op->stackop = R_ANAL_STACK_INC; op->stackptr = -regsz; break; case UD_Iadd: case UD_Isub: op->type = (u.mnemonic==UD_Iadd)? R_ANAL_OP_TYPE_ADD: R_ANAL_OP_TYPE_SUB; op->ptr = 0; op->stackptr = 0; if (u.operand[0].type == UD_OP_REG) { if (u.operand[0].base == UD_R_RSP) { int o = (int)getval (&u.operand[1]); op->stackop = R_ANAL_STACK_INC; if (u.mnemonic ==UD_Iadd) { op->stackptr = -o; } else { op->stackptr = o; } } if (u.operand[1].type != UD_OP_REG) op->val = getval (&u.operand[1]); } op->stackptr = 4; break; case UD_Iadc: case UD_Iinc: op->type = R_ANAL_OP_TYPE_ADD; break; case UD_Isbb: case UD_Idec: op->type = R_ANAL_OP_TYPE_SUB; break; case UD_Ijmp: switch (u.operand[0].type) { case UD_OP_MEM: case UD_OP_REG: op->type = R_ANAL_OP_TYPE_UJMP; break; default: op->type = R_ANAL_OP_TYPE_JMP; #if 0 { ut16 a = (op->lval.ptr.seg & 0xFFFF); ut16 b = (op->lval.ptr.off); switch (op->size) { case 32: sprintf (src, "%04x:%04x", a, b & 0xFFFF); break; case 48: sprintf (src, "%04x:%04x", a, b); break; default: eprintf ("F**K YOU\n"); } } #endif if (u.operand[0].type==UD_OP_PTR) { op->jump = getval (&u.operand[0]); } else { if (anal->bits==16) { // honor segment op->jump = (addr&0xf0000) + oplen + \ (((addr&0xffff)+getval (&u.operand[0])&0xffff)); } else { op->jump = addr + oplen + (int)getval (&u.operand[0]); } } } break; case UD_Ije: case UD_Ijne: case UD_Ijb: case UD_Ijbe: case UD_Ija: case UD_Ijae: case UD_Ijs: case UD_Ijns: case UD_Ijo: case UD_Ijno: case UD_Ijp: case UD_Ijnp: case UD_Ijl: case UD_Ijge: case UD_Ijle: case UD_Ijg: case UD_Ijcxz: case UD_Iloop: op->type = R_ANAL_OP_TYPE_CJMP; op->jump = addr + oplen + (int)getval (&u.operand[0]); op->fail = addr+oplen; break; case UD_Icall: op->type = R_ANAL_OP_TYPE_CALL; switch (u.operand[0].type) { case UD_OP_REG: op->jump = 0; // EAX, EBX, ... use anal->reg break; case UD_OP_IMM: case UD_OP_MEM: case UD_OP_PTR: default: op->jump = addr + oplen + (int)getval (&u.operand[0]); } op->fail = addr + oplen; break; case UD_Ihlt: //op->type = R_ANAL_OP_TYPE_HALT; break; case UD_Iret: case UD_Iretf: case UD_Isysret: op->type = R_ANAL_OP_TYPE_RET; op->stackop = R_ANAL_STACK_INC; op->stackptr = -regsz; break; case UD_Isyscall: op->type = R_ANAL_OP_TYPE_SWI; break; case UD_Inop: op->type = R_ANAL_OP_TYPE_NOP; break; default: break; } return oplen; }
void pulsesequence() { // Define Variables and Objects and Get Parameter Values CP hx = getcp("HX",0.0,0.0,0,1); strncpy(hx.fr,"dec",3); strncpy(hx.to,"obs",3); putCmd("frHX='dec'\n"); putCmd("toHX='obs'\n"); MPSEQ spc5 = getspc5("spc5X",0,0.0,0.0,0,1); MPSEQ spc5ref = getspc5("spc5X",spc5.iSuper,spc5.phAccum,spc5.phInt,1,1); strncpy(spc5.ch,"obs",3); putCmd("chXspc5='obs'\n"); DSEQ dec = getdseq("H"); strncpy(dec.t.ch,"dec",3); putCmd("chHtppm='dec'\n"); strncpy(dec.s.ch,"dec",3); putCmd("chHspinal='dec'\n"); // Set Constant-time Period for d2. if (d2_index == 0) d2_init = getval("d2"); double d2_ = (ni - 1)/sw1 + d2_init; putCmd("d2acqret = %f\n",roundoff(d2_,12.5e-9)); putCmd("d2dwret = %f\n",roundoff(1.0/sw1,12.5e-9)); //-------------------------------------- // Copy Current Parameters to Processed //------------------------------------- putCmd("groupcopy('current','processed','acquisition')"); // Dutycycle Protection DUTY d = init_dutycycle(); d.dutyon = getval("pwH90") + getval("tHX") + getval("pwX90") + spc5.t + spc5ref.t; d.dutyoff = d1 + 4.0e-6 + 2.0*getval("tZF"); d.c1 = d.c1 + (!strcmp(dec.seq,"tppm")); d.c1 = d.c1 + ((!strcmp(dec.seq,"tppm")) && (dec.t.a > 0.0)); d.t1 = d2_ + getval("rd") + getval("ad") + at; d.c2 = d.c2 + (!strcmp(dec.seq,"spinal")); d.c2 = d.c2 + ((!strcmp(dec.seq,"spinal")) && (dec.s.a > 0.0)); d.t2 = d2_ + getval("rd") + getval("ad") + at; d = update_dutycycle(d); abort_dutycycle(d,10.0); // Create Phasetables settable(phH90,4,table1); settable(phHhx,4,table2); settable(phXhx,4,table3); settable(phXmix1,4,table4); settable(phXmix2,4,table5); settable(phRec,4,table6); setreceiver(phRec); if (phase1 == 2) tsadd(phXhx,1,4); // Begin Sequence txphase(phXhx); decphase(phH90); obspwrf(getval("aXhx")); decpwrf(getval("aH90")); obsunblank(); decunblank(); _unblank34(); delay(d1); sp1on(); delay(2.0e-6); sp1off(); delay(2.0e-6); // H to X Cross Polarization decrgpulse(getval("pwH90"),phH90,0.0,0.0); decphase(phHhx); _cp_(hx,phHhx,phXhx); // F2 Indirect Period for X obspwrf(getval("aX90")); _dseqon(dec); delay(d2); _dseqoff(dec); // Mixing with SPC5 Recoupling rgpulse(getval("pwX90"),phXmix1,0.0,0.0); obspwrf(getval("aXspc5")); xmtrphase(v1); txphase(phXmix1); delay(getval("tZF")); decpwrf(getval("aHmix")); decon(); _mpseq(spc5, phXmix1); xmtrphase(v2); txphase(phXmix2); _mpseq(spc5ref, phXmix2); decoff(); obspwrf(getval("aX90")); xmtrphase(zero); txphase(phXmix2); delay(getval("tZF")); rgpulse(getval("pwX90"),phXmix2,0.0,0.0); // Begin Acquisition _dseqon(dec); obsblank(); _blank34(); delay(getval("rd")); startacq(getval("ad")); acquire(np, 1/sw); endacq(); _dseqoff(dec); obsunblank(); decunblank(); _unblank34(); }
pulsesequence() { int prgcycle = (int)(getval("prgcycle")+0.5); double cmult = getval("cmult"); assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } assign(zero,v4); settable(t1,8,ph1); settable(t2,8,ph2); settable(t3,8,ph3); getelem(t1,v17,v1); getelem(t2,v17,v2); getelem(t3,v17,oph); if (getflag("prgflg") && (satmode[0] == 'y')) assign(v1,v4); add(oph,v18,oph); add(oph,v19,oph); /* mod2(id2,v10); dbl(v10,v10); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v10); add(v1,v10,v1); add(v4,v10,v4); add(oph,v10,oph); status(A); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v4); if (getflag("prgflg")) shaped_purge(v1,v4,v18,v19); } else { satpulse(satdly,v4,rof1,rof1); if (getflag("prgflg")) purge(v1,v4,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw, v1, rof1, rof1); delay(d2); rgpulse(cmult*pw, v2, rof1, rof2); status(C); }
pulsesequence() { char autocal[MAXSTR], shname1[MAXSTR], shname2[MAXSTR], ipap_flg[MAXSTR], ab_flg[MAXSTR], f1180[MAXSTR], SE[MAXSTR], /*Use Sensitivity Enhancement */ c13refoc[MAXSTR], refpat[MAXSTR], /* pulse shape pattern refocus. pulse*/ hetsofast_flg[MAXSTR], grad3_flg[MAXSTR]; /*gradient flag */ int t1_counter, phase; double d2_init=0.0, pwS,pwS1,pwS2, tpwrsf = getval("tpwrsf"), adjust = getval("adjust"), gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gzlvl3 = getval("gzlvl3"), gstab = getval("gstab"), gt1 = getval("gt1"), gt2 = getval("gt2"), gt3 = getval("gt3"), shlvl1 = getval("shlvl1"), shlvl2 = getval("shlvl2"), shdmf2 = getval("shdmf2"), shbw = getval("shbw"), shpw1 = getval("shpw1"), shpw2 = getval("shpw2"), shpw3 = 0.0, shofs = getval("shofs"), flipangle = getval("flipangle"), pwNlvl = getval("pwNlvl"), pwN = getval("pwN"), dpwr2 = getval("dpwr2"), d2 = getval("d2"), tau1, taunh = 1.0/(2.0*getval("JNH")); void compo_pulse(); void compo1_pulse(); void makeshape_pc9(); void makeshape_refoc(); void makeshape_ndec(); getstr("autocal",autocal); getstr("f1180",f1180); getstr("c13refoc",c13refoc); getstr("hetsofast_flg",hetsofast_flg); getstr("refpat", refpat); /* pulse pattern refocussing pulse */ getstr("ipap_flg",ipap_flg); getstr("grad3_flg",grad3_flg); getstr("ab_flg",ab_flg); getstr("SE",SE); getstr("shname1",shname1); getstr("shname2",shname2); pwS = c_shapedpw("sech",200.0,0.0,zero, 0.0, 0.0); pwS1 = hn_simshapedpw(refpat,shbw,shofs-4.8,"isnob3",50.0,0.0, zero, zero, 0.0, 0.0); pwS2 = h_shapedpw(refpat,shbw,3.5,zero, 0.0, 0.0); if (hetsofast_flg[0] == 'a') shpw3 = h_shapedpw("isnob5",4.0,-3.0,two, 2.0e-6, 2.0e-6); if (hetsofast_flg[0] == 'b') shpw3 = h_shapedpw("gaus180",0.015,0.0,two, 2.0e-6, 2.0e-6); phase = (int) (getval("phase") + 0.5); settable(t1,2,phi1); settable(t2,2,phi2); if (autocal[0] == 'y') { (void) makeshape_pc9(flipangle, shbw, shofs); /*create pc9 pulse*/ sh90 = getRsh("hn_pc9"); shpw1 = sh90.pw; shlvl1 = sh90.pwr; sprintf(shname1,"hn_pc9"); (void) makeshape_refoc(refpat, shbw, shofs); /* create refocussing pulse */ shref = getDsh("hn_refoc"); shpw2 = shref.pw; shlvl2 = shref.pwr; shdmf2 = shref.dmf; sprintf(shname2,"hn_refoc"); if (dmm2[2] == 'p') /* waveform capability present on channel 3 */ { (void) makeshape_ndec(); /* create n15 wurst decoupling */ shdec = getDsh("hncompdec"); dpwr2 = shdec.pwr; dmf2 = shdec.dmf; dres2 = shdec.dres; sprintf(dseq2,"hncompdec"); } } if (tpwrsf <4095.0) shlvl2 = shlvl2+6.0; 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-pwN*4.0/3.0; 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); decoffset(dof); dec2power(pwNlvl); dec2offset(dof2); obsoffset(tof); obspower(tpwr); /**********************************************/ if (hetsofast_flg[0] != 'n') { if (hetsofast_flg[0] == 'a') h_shapedpulse("isnob5",4.0,-3.0,two, 2.0e-6, 2.0e-6); if (hetsofast_flg[0] == 'b') h_shapedpulse("gaus180",0.015,0.0,two, 2.0e-6, 2.0e-6); zgradpulse(gzlvl2, gt2); delay(gstab); delay(d1-gt2-shpw3); lk_hold(); } else { zgradpulse(gzlvl2, gt2); delay(gstab); delay(d1-gt2); lk_hold(); } obspower(shlvl1); shaped_pulse(shname1,shpw1,zero,2.0e-4,2.0e-6); if (SE[0] == 'y') { if (ipap_flg[0] == 'y') { if ((tau1+pwN*2.0) < pwS2) delay((pwS2*0.5-tau1*0.5-pwN)*0.5); if (grad3_flg[0]== 'y') delay(taunh*0.5-shpw1*0.533-pwS1*0.5+(gt3*2.0+2.0*gstab+pwN*3.0)); else delay(taunh*0.5-shpw1*0.533-pwS1*0.5+pwN); hn_simshapedpulse(refpat,shbw,shofs-4.8,"bip720_50_20",40.0,0.0, zero, zero, 0.0, 0.0); obspower(shlvl2); obspwrf(4095.0); compo1_pulse(shname2,shpw2,pwN,shdmf2,t1,tau1,c13refoc,pwS,taunh,pwS1,pwS2,gt1,gt3,gzlvl3,grad3_flg,gstab); obspower(shlvl2); obspwrf(4095.0); zgradpulse(gzlvl1, gt1); delay(gstab); h_sim3shapedpulse(refpat,shbw,shofs-4.8,0.0,2.0*pwN, one, zero, zero, 0.0, 0.0); zgradpulse(gzlvl1, gt1); delay(gstab); delay(taunh*0.5-gt1-gstab-POWER_DELAY-pwS1*0.5); if ((tau1+pwN*2.0) < pwS2) delay((pwS2*0.5-tau1*0.5-pwN)*0.5); if (ab_flg[0] == 'a') dec2rgpulse(pwN,one,0.0,0.0); else dec2rgpulse(pwN,three,0.0,0.0); if (grad3_flg[0]== 'y') { delay(gt3+gstab); dec2rgpulse(pwN*2.0,zero,0.0,0.0); zgradpulse(gzlvl3,gt3); delay(gstab); } } else { zgradpulse(gzlvl1, gt1); delay(gstab); if ((tau1+pwN*2.0) < pwS2) delay(taunh-gt1-gstab-shpw1*0.533-adjust-(pwS2*0.5-tau1*0.5-pwN)*0.5); else delay(taunh-gt1-gstab-shpw1*0.533-adjust); obspower(shlvl2); obspwrf(tpwrsf); compo_pulse(shname2,shpw2,pwN,shdmf2,t1,tau1,c13refoc,pwS); obspower(shlvl1); obspwrf(4095.0); zgradpulse(gzlvl1, gt1); delay(gstab); if ((tau1+pwN*2.0) < pwS2) delay(taunh-gt1-gstab-POWER_DELAY-(pwS2*0.5-tau1*0.5-pwN)*0.5); else delay(taunh-gt1-gstab-POWER_DELAY); } } else { if ((ni == 0) || (ni == 1)) { zgradpulse(gzlvl1, gt1); delay(gstab); delay(taunh-gt1-gstab-WFG_START_DELAY+pwN*4.0-shpw1*0.533-adjust); obspwrf(tpwrsf); obspower(shlvl2); xmtrphase(zero); xmtron(); obsunblank(); obsprgon(shname2,1/shdmf2,9.0); delay(shpw2); obsprgoff(); obsblank(); xmtroff(); obspower(shlvl2); obspwrf(4095.0); dec2rgpulse(pwN,t1,0.0,0.0); dec2rgpulse(pwN*2.0,zero,0.0,0.0); dec2rgpulse(pwN,zero,0.0,0.0); } else { zgradpulse(gzlvl1, gt1); delay(gstab); delay(taunh-gt1-gstab-shpw1*0.533-adjust); obspower(shlvl2); obspwrf(tpwrsf); compo_pulse(shname2,shpw2,pwN,shdmf2,t1,tau1,c13refoc,pwS); obspower(shlvl1); obspwrf(4095.0); } if (ipap_flg[0] == 'y') { if (ab_flg[0] == 'b') { zgradpulse(gzlvl1, gt1); delay(gstab); delay(taunh-gt1-gstab-pwN-POWER_DELAY); dec2rgpulse(pwN,one,0.0,0.0); } else { zgradpulse(gzlvl1, gt1); delay(gstab); delay(taunh*0.5-gt1-pwN-gstab); dec2rgpulse(pwN*2.0,zero,0.0,0.0); delay(taunh*0.5-pwN-POWER_DELAY); } } else { zgradpulse(gzlvl1, gt1); delay(gstab); delay(taunh-gt1-gstab-POWER_DELAY); } } dec2power(dpwr2); lk_sample(); setreceiver(t2); status(C); }
pulsesequence() { /* DECLARE AND LOAD VARIABLES */ char f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ f2180[MAXSTR], /* Flag to start t2 @ halfdwell */ mag_flg[MAXSTR], /* magic-angle coherence transfer gradients */ TROSY[MAXSTR]; /* To check for TROSY flag */ int icosel, /* used to get n and p type */ t1_counter, /* used for states tppi in t1 */ t2_counter, /* used for states tppi in t2 */ ni2 = getval("ni2"); double p_d, rfd, ncyc, COmix = getval("COmix"), p_trim, rftrim, tau1, /* t1 delay */ tau2, /* t2 delay */ timeTN = getval("timeTN"), /* constant time for 15N evolution */ kappa = 5.4e-3, lambda = 2.4e-3, pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ rf0, /* maximum fine power when using pwC pulses */ /* the following pulse lengths for SLP pulses are automatically calculated */ /* by the macro "proteincal". SLP pulse shapes, "offC3" etc are called */ /* directly from your shapelib. */ pwC3 = getval("pwC3"), /*180 degree pulse at Ca(56ppm) null at CO(174ppm) */ pwC3a = getval("pwC3a"), /* pwC3a=pwC3, but not set to zero when pwC3=0 */ phshift3, /* phase shift induced on CO by pwC3 ("offC3") pulse */ pwZ, /* the largest of pwC3 and 2.0*pwN */ pwZ1, /* the largest of pwC3a and 2.0*pwN for 1D experiments */ pwC6 = getval("pwC6"), /* 90 degree selective sinc pulse on CO(174ppm) */ pwC8 = getval("pwC8"), /* 180 degree selective sinc pulse on CO(174ppm) */ rf3, /* fine power for the pwC3 ("offC3") pulse */ rf6, /* fine power for the pwC6 ("offC6") pulse */ rf8, /* fine power for the pwC8 ("offC8") pulse */ compH = getval("compH"), /* adjustment for C13 amplifier compression */ compC = getval("compC"), /* adjustment for C13 amplifier compression */ pwHs = getval("pwHs"), /* H1 90 degree pulse length at tpwrs */ tpwrsf = getval("tpwrsf"), /* fine power adjustment for flipback */ tpwrs, /* power for the pwHs ("H2Osinc") pulse */ pwHd, /* H1 90 degree pulse length at tpwrd */ tpwrd, /* rf for WALTZ decoupling */ waltzB1 = getval("waltzB1"), /* waltz16 field strength (in Hz) */ pwNlvl = getval("pwNlvl"), /* power for N15 pulses */ pwN = getval("pwN"), /* N15 90 degree pulse length at pwNlvl */ sw1 = getval("sw1"), sw2 = getval("sw2"), gt1 = getval("gt1"), /* coherence pathway gradients */ gzcal = getval("gzcal"), /* g/cm to DAC conversion factor */ gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gt0 = getval("gt0"), /* other gradients */ gt3 = getval("gt3"), gt4 = getval("gt4"), gt5 = getval("gt5"), gstab = getval("gstab"), gzlvl0 = getval("gzlvl0"), gzlvl3 = getval("gzlvl3"), gzlvl4 = getval("gzlvl4"), gzlvl5 = getval("gzlvl5"), gzlvl6 = getval("gzlvl6"); getstr("f1180",f1180); getstr("f2180",f2180); getstr("mag_flg",mag_flg); getstr("TROSY",TROSY); /* LOAD PHASE TABLE */ settable(t3,2,phi3); settable(t4,1,phx); settable(t5,4,phi5); settable(t8,1,phx); settable(t9,8,phi9); settable(t10,1,phx); settable(t11,1,phy); settable(t12,4,rec); /* INITIALIZE VARIABLES */ if( dpwrf < 4095 ) { printf("reset dpwrf=4095 and recalibrate C13 90 degree pulse"); psg_abort(1); } /* maximum fine power for pwC pulses */ rf0 = 4095.0; /* 180 degree pulse on Ca, null at CO 118ppm away */ rf3 = (compC*4095.0*pwC*2.0)/pwC3a; rf3 = (int) (rf3 + 0.5); /* the pwC3 pulse at the middle of t1 */ if ((ni2 > 0.0) && (ni == 1.0)) ni = 0.0; if (pwC3a > 2.0*pwN) pwZ = pwC3a; else pwZ = 2.0*pwN; if ((pwC3==0.0) && (pwC3a>2.0*pwN)) pwZ1=pwC3a-2.0*pwN; else pwZ1=0.0; if ( ni > 1 ) pwC3 = pwC3a; if ( pwC3 > 0 ) phshift3 = 48.0; else phshift3 = 0.0; /* 90 degree one-lobe sinc pulse on CO, null at Ca 118ppm away */ rf6 = (compC*4095.0*pwC*1.69)/pwC6; /* needs 1.69 times more */ rf6 = (int) (rf6 + 0.5); /* power than a square pulse */ /* 180 degree one-lobe sinc pulse on CO, null at Ca 118ppm away */ rf8 = (compC*4095.0*pwC*2.0*1.65)/pwC8; /* needs 1.65 times more */ rf8 = (int) (rf8 + 0.5); /* power than a square pulse */ /* selective H20 one-lobe sinc pulse */ tpwrs = tpwr - 20.0*log10(pwHs/(compH*pw*1.69)); /* needs 1.69 times more */ tpwrs = (int) (tpwrs); /* power than a square pulse */ /* power level and pulse time for WALTZ 1H decoupling */ pwHd = 1/(4.0 * waltzB1) ; tpwrd = tpwr - 20.0*log10(pwHd/(compH*pw)); tpwrd = (int) (tpwrd + 0.5); /* dipsi-3 decoupling on COCO */ p_trim = 1/(4*5000*(sfrq/600.0)); /* 5 kHz trim pulse at 600MHz as per Bax */ p_d = (5.0)/(9.0*4.0*2800.0*(sfrq/600.0)); /* 2.8 kHz DIPSI-3 at 600MHz as per Bax*/ rftrim = (compC*4095.0*pwC)/p_trim; rftrim = (int)(rftrim+0.5); rfd = (compC*4095.0*pwC*5.0)/(p_d*9.0); rfd = (int) (rfd + 0.5); ncyc = ((COmix - 0.002)/51.8/4/p_d); ncyc = (int) (ncyc + 0.5); initval(ncyc,v9); /* CHECK VALIDITY OF PARAMETER RANGES */ if ( 0.5*ni2*1/(sw2) > timeTN - WFG3_START_DELAY) { printf(" ni2 is too big. Make ni2 equal to %d or less.\n", ((int)((timeTN - WFG3_START_DELAY)*2.0*sw2))); psg_abort(1);} if ( dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' ) { printf("incorrect dec1 decoupler flags! Should be 'nnn' "); psg_abort(1);} if ( dm2[A] == 'y' || dm2[B] == 'y' ) { printf("incorrect dec2 decoupler flags! Should be 'nny' "); psg_abort(1);} if ( dpwr2 > 50 ) { printf("dpwr2 too large! recheck value "); psg_abort(1);} if ( pw > 50.0e-6 ) { printf(" pw too long ! recheck value "); psg_abort(1);} if ( (pwN > 100.0e-6) && (ni>1 || ni2>1)) { printf(" pwN too long! recheck value "); psg_abort(1);} if ( TROSY[A] == 'y') { printf(" TROSY option is not implemented"); psg_abort(1);} /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ if (phase1 == 2) tsadd(t3,1,4); if (phase2 == 2) {tsadd(t10,2,4); icosel = +1;} else icosel = -1; /* Set up f1180 */ tau1 = d2; if((f1180[A] == 'y') && (ni > 1.0)) { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; } /* Set up f2180 */ tau2 = d3; if((f2180[A] == 'y') && (ni2 > 1.0)) { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.0; } 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(t3,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(t8,2,4); tsadd(t12,2,4); } /* BEGIN PULSE SEQUENCE */ status(A); delay(d1); rcvroff(); obspower(tpwr); decpower(pwClvl); dec2power(pwNlvl); decpwrf(rf0); obsoffset(tof); txphase(zero); delay(1.0e-5); dec2rgpulse(pwN, zero, 0.0, 0.0); /*destroy N15 and C13 magnetization*/ decrgpulse(pwC, zero, 0.0, 0.0); zgradpulse(gzlvl0, 0.5e-3); delay(1.0e-4); dec2rgpulse(pwN, one, 0.0, 0.0); decrgpulse(pwC, zero, 0.0, 0.0); zgradpulse(0.7*gzlvl0, 0.5e-3); delay(5.0e-4); rgpulse(pw,zero,0.0,0.0); /* 1H pulse excitation */ dec2phase(zero); zgradpulse(gzlvl0, gt0); delay(lambda - gt0); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); txphase(one); zgradpulse(gzlvl0, gt0); delay(lambda - gt0); rgpulse(pw, one, 0.0, 0.0); txphase(zero); if (tpwrsf<4095.0) {obspower(tpwrs+6.0); obspwrf(tpwrsf);} else obspower(tpwrs); shaped_pulse("H2Osinc", pwHs, zero, 5.0e-4, 0.0); obspower(tpwrd); obspwrf(4095.0); zgradpulse(gzlvl3, gt3); delay(2.0e-4); dec2rgpulse(pwN, zero, 0.0, 0.0); txphase(one); delay(kappa - pwHd - 2.0e-6 - PRG_START_DELAY); rgpulse(pwHd,one,0.0,0.0); txphase(zero); delay(2.0e-6); obsprgon("waltz16", pwHd, 90.0); /* PRG_START_DELAY */ xmtron(); decphase(zero); dec2phase(zero); decpwrf(rf8); delay(timeTN - kappa - WFG3_START_DELAY); /* WFG3_START_DELAY */ sim3shaped_pulse("", "offC8", "", 0.0, pwC8, 2.0*pwN, zero, zero, zero, 0.0, 0.0); decphase(t3); decpwrf(rf6); delay(timeTN); dec2rgpulse(pwN, zero, 0.0, 0.0); xmtroff(); obsprgoff(); rgpulse(pwHd,three,2.0e-6,0.0); zgradpulse(gzlvl3, gt3); delay(2.0e-4); /***************************************************************/ /* The sequence is different from here with respect to ghn_co **/ /***************************************************************/ rgpulse(pwHd,one,2.0e-6,0.0); /* H1 decoupler is turned on */ txphase(zero); delay(2.0e-6); obsprgon("waltz16", pwHd, 90.0); xmtron(); decshaped_pulse("offC6", pwC6, t3, 0.0, 0.0); decphase(zero); /* Refocus CO, evolve CO, spinlock CO and defocus CO */ delay(timeTN - tau1/2 - 0.6*pwC6 - WFG3_START_DELAY); decpwrf(rf8); sim3shaped_pulse("", "offC8","",0.0,pwC8, 2.0*pwN, zero,zero,zero,0.0,0.0); decpwrf(rf3); delay(timeTN - WFG3_STOP_DELAY - WFG_START_DELAY - pwC3a/2); decshaped_pulse("offC3",pwC3a,zero,0.0,0.0); if (tau1 > 0) delay(tau1/2 - WFG_STOP_DELAY - pwC3a/2 - 2.0e-6); else delay(tau1/2); /*******DO SPINLOCK ********/ decpwrf(rftrim); decrgpulse(0.002,zero,2.0e-6,0.0); decpwrf(rfd); starthardloop(v9); decrgpulse(6.4*p_d,zero,0.0,0.0); decrgpulse(8.2*p_d,two,0.0,0.0); decrgpulse(5.8*p_d,zero,0.0,0.0); decrgpulse(5.7*p_d,two,0.0,0.0); decrgpulse(0.6*p_d,zero,0.0,0.0); decrgpulse(4.9*p_d,two,0.0,0.0); decrgpulse(7.5*p_d,zero,0.0,0.0); decrgpulse(5.3*p_d,two,0.0,0.0); decrgpulse(7.4*p_d,zero,0.0,0.0); decrgpulse(6.4*p_d,two,0.0,0.0); decrgpulse(8.2*p_d,zero,0.0,0.0); decrgpulse(5.8*p_d,two,0.0,0.0); decrgpulse(5.7*p_d,zero,0.0,0.0); decrgpulse(0.6*p_d,two,0.0,0.0); decrgpulse(4.9*p_d,zero,0.0,0.0); decrgpulse(7.5*p_d,two,0.0,0.0); decrgpulse(5.3*p_d,zero,0.0,0.0); decrgpulse(7.4*p_d,two,0.0,0.0); decrgpulse(6.4*p_d,two,0.0,0.0); decrgpulse(8.2*p_d,zero,0.0,0.0); decrgpulse(5.8*p_d,two,0.0,0.0); decrgpulse(5.7*p_d,zero,0.0,0.0); decrgpulse(0.6*p_d,two,0.0,0.0); decrgpulse(4.9*p_d,zero,0.0,0.0); decrgpulse(7.5*p_d,two,0.0,0.0); decrgpulse(5.3*p_d,zero,0.0,0.0); decrgpulse(7.4*p_d,two,0.0,0.0); decrgpulse(6.4*p_d,zero,0.0,0.0); decrgpulse(8.2*p_d,two,0.0,0.0); decrgpulse(5.8*p_d,zero,0.0,0.0); decrgpulse(5.7*p_d,two,0.0,0.0); decrgpulse(0.6*p_d,zero,0.0,0.0); decrgpulse(4.9*p_d,two,0.0,0.0); decrgpulse(7.5*p_d,zero,0.0,0.0); decrgpulse(5.3*p_d,two,0.0,0.0); decrgpulse(7.4*p_d,zero,0.0,0.0); endhardloop(); decpwrf(4095.0); /* End of spinlock */ delay(timeTN - WFG3_START_DELAY); decpwrf(rf8); sim3shaped_pulse("","offC8","",0.0,pwC8,2*pwN,zero,zero,zero,0.0,0.0); decpwrf(rf6); delay(timeTN - WFG3_STOP_DELAY); /***************************************************************/ /* The sequence is same as ghn_co from this point ********/ /***************************************************************/ decshaped_pulse("offC6", pwC6, t5, 0.0, 0.0); /* xxxxxxxxxxxxxxxxxx OPTIONS FOR N15 EVOLUTION xxxxxxxxxxxxxxxxxxxxx */ dec2phase(t8); zgradpulse(gzlvl4, gt4); txphase(one); dcplrphase(zero); delay(2.0e-4); dec2rgpulse(pwN, t8, 0.0, 0.0); decphase(zero); dec2phase(t9); decpwrf(rf8); delay(timeTN - WFG3_START_DELAY - tau2); /* WFG3_START_DELAY */ sim3shaped_pulse("", "offC8", "", 0.0, pwC8, 2.0*pwN, zero, zero, t9, 0.0, 0.0); dec2phase(t10); decpwrf(rf3); if (tau2 > kappa) { delay(timeTN - pwC3a - WFG_START_DELAY); /* WFG_START_DELAY */ decshaped_pulse("offC3", pwC3a, zero, 0.0, 0.0); delay(tau2 - kappa - PRG_STOP_DELAY - pwHd - 2.0e-6); xmtroff(); obsprgoff(); /* PRG_STOP_DELAY */ rgpulse(pwHd,three,2.0e-6,0.0); txphase(t4); delay(kappa - gt1 - 2.0*GRADIENT_DELAY - 1.0e-4); if (mag_flg[A]=='y') magradpulse(gzcal*gzlvl1, gt1); else zgradpulse(gzlvl1, gt1); /* 2.0*GRADIENT_DELAY */ obspower(tpwr); /* POWER_DELAY */ delay(1.0e-4 - POWER_DELAY); } else if (tau2 > (kappa - pwC3a - WFG_START_DELAY)) { delay(timeTN + tau2 - kappa - PRG_STOP_DELAY - pwHd - 2.0e-6); xmtroff(); obsprgoff(); /* PRG_STOP_DELAY */ rgpulse(pwHd,three,2.0e-6,0.0); txphase(t4); /* WFG_START_DELAY */ decshaped_pulse("offC3", pwC3a, zero, 0.0, 0.0); delay(kappa -pwC3a -WFG_START_DELAY -gt1 -2.0*GRADIENT_DELAY -1.0e-4); if (mag_flg[A]=='y') magradpulse(gzcal*gzlvl1, gt1); else zgradpulse(gzlvl1, gt1); /* 2.0*GRADIENT_DELAY */ obspower(tpwr); /* POWER_DELAY */ delay(1.0e-4 - POWER_DELAY); } else if (tau2 > gt1 + 2.0*GRADIENT_DELAY + 1.0e-4) { delay(timeTN + tau2 - kappa - PRG_STOP_DELAY - pwHd - 2.0e-6); xmtroff(); obsprgoff(); /* PRG_STOP_DELAY */ rgpulse(pwHd,three,2.0e-6,0.0); txphase(t4); delay(kappa - tau2 - pwC3a - WFG_START_DELAY); /* WFG_START_DELAY */ decshaped_pulse("offC3", pwC3a, zero, 0.0, 0.0); delay(tau2 - gt1 - 2.0*GRADIENT_DELAY - 1.0e-4); if (mag_flg[A]=='y') magradpulse(gzcal*gzlvl1, gt1); else zgradpulse(gzlvl1, gt1); /* 2.0*GRADIENT_DELAY */ obspower(tpwr); /* POWER_DELAY */ delay(1.0e-4 - POWER_DELAY); } else { delay(timeTN + tau2 - kappa - PRG_STOP_DELAY - pwHd - 2.0e-6); xmtroff(); obsprgoff(); /* PRG_STOP_DELAY */ rgpulse(pwHd,three,2.0e-6,0.0); txphase(t4); delay(kappa-tau2-pwC3a-WFG_START_DELAY-gt1-2.0*GRADIENT_DELAY-1.0e-4); if (mag_flg[A]=='y') magradpulse(gzcal*gzlvl1, gt1); else zgradpulse(gzlvl1, gt1); /* 2.0*GRADIENT_DELAY */ obspower(tpwr); /* POWER_DELAY */ delay(1.0e-4 - POWER_DELAY); /* WFG_START_DELAY */ decshaped_pulse("offC3", pwC3a, zero, 0.0, 0.0); delay(tau2); } /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */ sim3pulse(pw, 0.0, pwN, t4, zero, t10, 0.0, 0.0); txphase(zero); dec2phase(zero); zgradpulse(gzlvl5, gt5); delay(lambda - 1.3*pwN - gt5); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl5, gt5); txphase(one); dec2phase(t11); delay(lambda - 1.3*pwN - gt5); sim3pulse(pw, 0.0, pwN, one, zero, t11, 0.0, 0.0); txphase(zero); dec2phase(zero); zgradpulse(gzlvl6, gt5); delay(lambda - 1.3*pwN - gt5); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); dec2phase(t10); zgradpulse(gzlvl6, gt5); delay(lambda - 0.65*pwN - gt5); rgpulse(pw, zero, 0.0, 0.0); delay((gt1/10.0) + 1.0e-4 +gstab - 0.5*pw + 2.0*GRADIENT_DELAY + POWER_DELAY); rgpulse(2.0*pw, zero, 0.0,0.0); dec2power(dpwr2); /* POWER_DELAY */ if (mag_flg[A] == 'y') magradpulse(icosel*gzcal*gzlvl2, gt1/10.0); else zgradpulse(icosel*gzlvl2, gt1/10.0); /* 2.0*GRADIENT_DELAY */ delay(gstab); rcvron(); statusdelay(C,1.0e-4); setreceiver(t12); }
pulsesequence() { /* DECLARE VARIABLES */ char f1180[MAXSTR],C13refoc[MAXSTR], C13filter[MAXSTR]; int t1_counter; double tau1, /* t1/2 */ JNH = getval("JNH"), tauNH = 1/(4*JNH), /* delay for 1H-15N INEPT 1/4JNH */ tauNH1 = getval("tauNH1"), /* 1/2JNH */ tauNH2 = getval("tauNH2"), /* 1/2JNH */ tauCH1 = getval("tauCH1"), /* 1/2JCH */ tauCH2 = getval("tauCH2"), /* 1/2JCH tauCH2=2tauNH1-2tauCH1 */ fact = getval("fact"), /* scale factor for spin-echo */ pwN = getval("pwN"), pwNlvl = getval("pwNlvl"), pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ compC = getval("compC"), rf0, /* maximum fine power when using pwC pulses */ rfst, /* fine power for the stCall pulse */ mix = getval("mix"), /* mixing time for H2O - NH */ dofCHn = getval("dofCHn"), gt1 = getval("gt1"), gt2 = getval("gt2"), gt3 = getval("gt3"), gt4 = getval("gt4"), gt5 = getval("gt5"), gstab=getval("gstab"), gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gzlvl3 = getval("gzlvl3"), gzlvl4 = getval("gzlvl4"), gzlvl5 = getval("gzlvl5"), gzlvld1 = getval("gzlvld1"), /* remove radiation damping in spin-echo filter */ gzlvld2 = getval("gzlvld2"); /* remove radiation damping in mixing time */ /* LOAD VARIABLES */ getstr("f1180",f1180); getstr("C13refoc",C13refoc); getstr("C13filter",C13filter); /* maximum fine power for pwC pulses (and initialize rfst) */ rf0 = 4095.0; rfst=0.0; /* 180 degree adiabatic C13 pulse from 0 to 200 ppm */ if (C13refoc[A]=='y') {rfst = (compC*4095.0*pwC*4000.0*sqrt((30.0*sfrq/600.0+7.0)/0.35)); rfst = (int) (rfst + 0.5); if ( 1.0/(4000.0*sqrt((30.0*sfrq/600.0+7.0)/0.35)) < pwC ) { text_error( " Not enough C13 RF. pwC must be %f usec or less.\n", (1.0e6/(4000.0*sqrt((30.0*sfrq/600.0+7.0)/0.35))) ); psg_abort(1); }} initval(3.0,v2); initval(1.0,v3); /* check validity of parameter range */ if((dm[A] == 'y' || dm[B] == 'y' )) { printf("incorrect Dec1 decoupler flags! "); psg_abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'n')) { printf("incorrect Dec2 decoupler flags! dm2 Should be 'nny' "); psg_abort(1); } if( dpwr > 50 ) { printf("don't fry the probe, dpwr too large! "); psg_abort(1); } if( dpwr2 > 50 ) { printf("don't fry the probe, dpwr2 too large! "); psg_abort(1); } if((gt1 > 5.0e-3) || (gt2 > 5.0e-3) || (gt3 > 5.0e-3)) { printf("gti must be less than 5 ms \n"); psg_abort(1); } if((gt4 > 5.0e-3) || (gt5 > 5.0e-3)) { printf("gti must be less than 5 ms \n"); psg_abort(1); } if(gzlvld1>200 || gzlvld2>200 ) { printf("gzlvldi should not be larger than 200 DAC \n"); psg_abort(1); } /* LOAD VARIABLES */ settable(t1, 4, phi1); settable(t2, 2, phi2); settable(t3, 4, phi3); settable(t4, 8, phi4); settable(t5, 2, phi5); settable(t6, 4, phi6); settable(t14,8, rec); /* Phase incrementation for hypercomplex data */ if ( phase1 == 2 ) /* Hypercomplex in t1 */ { tsadd(t2,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(t2,2,4); tsadd(t14,2,4); } /* set up so that get (-90,180) phase corrects in F1 if f1180 flag is y */ tau1=d2; if( (f1180[A] == 'y') && (ni >1.0) ) tau1 += (1.0/(2.0*sw1)); tau1 = tau1/2.0 -pw -2*pwN/PI; if (tau1 < 0.0) tau1=0.0; /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); /* Set power for pulses */ dec2power(pwNlvl); /* Set decoupler2 power to pwNlvl */ decpower(pwClvl); decpwrf(rf0); obsoffset(tof); decoffset(dofCHn); delay(d1); status(B); rcvroff(); txphase(t1); delay(9.0e-5); /* spin-echo filter and 15N/13C double filters */ rgpulse(pw,t1,0.0,0.0); if(C13filter[A]=='y') { decphase(t5); zgradpulse(gzlvl5,gt5); delay(tauCH1-gt5); decrgpulse(pwC,t5,0.0,0.0); txphase(t3); dec2phase(t5); delay(tauNH1-tauCH1-pwN*0.5); sim3pulse(2.0*pw,2*pwC,pwN,t3,zero,t5,0.0,0.0); decphase(t6); delay(tauCH2+tauCH1-tauNH1-pwN*0.5); decrgpulse(pwC,t6,0.0,0.0); delay(tauNH1+tauNH2-tauCH1-tauCH2-gt5-gstab); zgradpulse(gzlvl5,gt5); delay(gstab); } else { if (gzlvld1>0.0) { txphase(t3); dec2phase(t5); delay(2.0e-6); zgradpulse(gzlvld1,0.5*fact*tauNH1-pwN*0.25-11.0e-6); delay(2.0e-5); zgradpulse(-gzlvld1,0.5*fact*tauNH1-pwN*0.25-11.0e-6); delay(2.0e-6); sim3pulse(2.0*pw,0.0e-6,pwN,t3,zero,t5,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvld1,0.5*fact*tauNH2-pwN*0.25-11.0e-6); delay(2.0e-5); zgradpulse(-gzlvld1,0.5*fact*tauNH2-pwN*0.25-11.0e-6); delay(2.0e-6); } else { txphase(t3); dec2phase(t5); delay(fact*tauNH1-pwN*0.5); sim3pulse(2.0*pw,0.0e-6,pwN,t3,zero,t5,0.0,0.0); delay(2.0e-6); delay(0.5*fact*tauNH2-pwN*0.25-3.0e-6); delay(2.0e-6); delay(0.5*fact*tauNH2-pwN*0.25-3.0e-6); delay(2.0e-6); } } txphase(zero); dec2phase(t6); sim3pulse(pw,0.0e-6,pwN,zero,zero,t6,0.0,0.0); decoffset(dof); decpwrf(rfst); /* mixing time */ zgradpulse(gzlvl4,gt4); delay(gstab); if(mix - 4.0e-6 - 4.0*GRADIENT_DELAY - gt4> 0.0) { if (gzlvld2>0.0) { zgradpulse(gzlvld2,mix-gt4-gstab); } else delay(mix-gt4-gstab); } /* H1-N15 INEPT */ rgpulse(pw, zero, 0.0, 0.0); zgradpulse(gzlvl1,gt1); dec2phase(zero); decphase(zero); delay(tauNH-gt1); /* delay=1/4J(XH) */ sim3pulse(2*pw,0.0,2*pwN,zero,zero,zero,rof1,rof1); zgradpulse(gzlvl1,gt1); txphase(one); dec2phase(t2); delay(tauNH-gt1 ); /* delay=1/4J(XH) */ rgpulse(pw, one, rof1, rof1); zgradpulse(gzlvl2,gt2); delay(gstab); dec2rgpulse(pwN, t2, 0.0, 0.0); txphase(zero); dec2phase(t4); /* t1 evolution period */ if ( (C13refoc[A]=='y') && (tau1 > 0.5e-3 + WFG2_START_DELAY) ) {delay(tau1 - 0.5e-3 - WFG2_START_DELAY); /* WFG2_START_DELAY */ simshaped_pulse("", "stC200", 2.0*pw, 1.0e-3, zero, zero, 0.0, 0.0); delay(tau1 - 0.5e-3);} else {delay(tau1); rgpulse(2.0*pw, zero, 0.0, 0.0); delay(tau1);} dec2rgpulse(pwN, t4, 0.0, 0.0); txphase(t1); zgradpulse(gzlvl2,gt2); delay(gstab); rgpulse(pw, t1, rof1, rof1); dec2phase(zero); zgradpulse(gzlvl3,gt3); txphase(v2); delay(gstab); delay(tauNH-gt3-gstab-pw*2.385-6.0*rof1 -d3*2.5); rgpulse(pw*0.231,v2,rof1,rof1); delay(d3); rgpulse(pw*0.692,v2,rof1,rof1); delay(d3); rgpulse(pw*1.462,v2,rof1,rof1); delay(d3/2-pwN); dec2rgpulse(2*pwN, zero, rof1, rof1); delay(d3/2-pwN); rgpulse(pw*1.462,v3,rof1,rof1); delay(d3); rgpulse(pw*0.692,v3,rof1,rof1); delay(d3); rgpulse(pw*0.231,v3,rof1,rof1); delay(tauNH-gt3-gstab-pw*2.385-6.0*rof1 -d3*2.5); dec2power(dpwr2); zgradpulse(gzlvl3,gt3); delay(gstab); /* acquire data */ status(C); setreceiver(t14); }
pulsesequence() { // Define Variables and Objects and Get Parameter Values double aXecho = getval("aXecho"); double t1Xechoinit = getval("t1Xecho"); double pwXecho = getval("pwXecho"); double t2Xechoinit = getval("t2Xecho"); double t1Xecho = t1Xechoinit - pwXecho/2.0; if (t1Xecho < 0.0) t1Xecho = 0.0; double t2Xecho = t2Xechoinit - pwXecho/2.0 - getval("rd"); if (t2Xecho < 0.0) t2Xecho = 0.0; CP hx = getcp("HX",0.0,0.0,0,1); strncpy(hx.fr,"dec",3); strncpy(hx.to,"obs",3); putCmd("frHX='dec'\n"); putCmd("toHX='obs'\n"); DSEQ dec = getdseq("H"); strncpy(dec.t.ch,"dec",3); putCmd("chHtppm='dec'\n"); strncpy(dec.s.ch,"dec",3); putCmd("chHspinal='dec'\n"); //-------------------------------------- // Copy Current Parameters to Processed //------------------------------------- putCmd("groupcopy('current','processed','acquisition')"); // Dutycycle Protection DUTY d = init_dutycycle(); d.dutyon = getval("pwH90") + getval("tHX") + pwXecho; d.dutyoff = d1 + 4.0e-6; d.c1 = d.c1 + (!strcmp(dec.seq,"tppm")); d.c1 = d.c1 + ((!strcmp(dec.seq,"tppm")) && (dec.t.a > 0.0)); d.t1 = getval("rd") + getval("ad") + at; d.c2 = d.c2 + (!strcmp(dec.seq,"spinal")); d.c2 = d.c2 + ((!strcmp(dec.seq,"spinal")) && (dec.s.a > 0.0)); d.t2 = getval("rd") + getval("ad") + at; d = update_dutycycle(d); abort_dutycycle(d,10.0); // Set Phase Tables settable(phH90,4,table1); settable(phXhx,4,table2); settable(phHhx,4,table3); settable(phXecho,16,table4); settable(phRec,8,table5); setreceiver(phRec); // Begin Sequence txphase(phXhx); decphase(phH90); obspwrf(getval("aXhx")); decpwrf(getval("aH90")); obsunblank(); decunblank(); _unblank34(); delay(d1); // sp1on(); delay(2.0e-6); sp1off(); delay(2.0e-6); // H to X Cross Polarization decrgpulse(getval("pwH90"),phH90,0.0,0.0); decphase(phHhx); sp1on(); _cp_(hx,phHhx,phXhx); sp1off(); // Begin Decoupling _dseqon(dec); // X Hahn Echo txphase(phXecho); obspwrf(aXecho); delay(t1Xecho); rgpulse(pwXecho,phXecho,0.0,0.0); delay(t2Xecho); // Begin Acquisition obsblank(); _blank34(); delay(getval("rd")); startacq(getval("ad")); acquire(np, 1/sw); endacq(); _dseqoff(dec); obsunblank(); decunblank(); _unblank34(); }
pulsesequence() { /* DECLARE VARIABLES */ char autocal[MAXSTR], /* auto-calibration flag */ fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ f2180[MAXSTR], /* Flag to start t2 @ halfdwell */ f3180[MAXSTR], /* Flag to start t3 @ halfdwell */ fc180[MAXSTR], /* Flag for checking sequence */ spca180[MAXSTR], /* string for the waveform Ca 180 */ spco180[MAXSTR], /* string for the waveform Co 180 */ spcareb[MAXSTR], /* string for the waveform reburp 180 */ ddseq[MAXSTR], /* 2H decoupling seqfile */ fCT[MAXSTR], /* Flag for constant time Ca evolution */ shp_sl[MAXSTR], /* string for seduce shape */ sel_flg[MAXSTR]; int phase, phase2, phase3, ni2, ni3, icosel, t1_counter, /* used for states tppi in t1 */ t2_counter, /* used for states tppi in t2 */ t3_counter; /* used for states tppi in t3 */ double tau1, /* t1 delay */ tau2, /* t2 delay */ tau3, /* t2 delay */ taua, /* ~ 1/4JNH = 2.25 ms */ taub, /* ~ 1/4JNH = 2.25 ms */ tauc, /* ~ 1/4JCaC' = 4 ms */ taud, /* ~ 1/4JCaC' = 4.5 ms if bigTCo can be set to be less than 4.5ms and then taud can be smaller*/ zeta, /* time for C'-N to refocuss set to 0.5*24.0 ms */ bigTCa, /* Ca T period */ bigTCo, /* Co T period */ bigTN, /* nitrogen T period */ pwc90, /* PW90 for co nucleus @ d_c90 */ pwc180on, /* PW180 at @ d_c180 */ pwcareb, /* PW90 for co nucleus @ d_creb */ pwc180off, /* PW180 at d_c180 + pad */ tsatpwr, /* low level 1H trans.power for presat */ d_c90, /* power level for 13C pulses(pwc90 = sqrt(15)/4delta) delta is the separation between Ca and Co */ d_c180, /* power level for 180 13C pulses (pwc180on=sqrt(3)/2delta */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ sw3, /* sweep width in f3 */ pw_sl, /* pw90 for H selective pulse on water ~ 2ms */ phase_sl, /* phase for pw_sl */ tpwrsl, /* power level for square pw_sl */ d_creb, pwDlvl, /* power for D flank pulse */ pwD, /* pw90 at pwDlvl */ sphase, /* small angle phase shift */ sphase1, sphase2, /* used only for constant t2 period */ compC, /* C-13 RF calibration parameters */ pwC, pwClvl, pwN, /* PW90 for 15N pulse */ pwNlvl, /* high dec2 pwr for 15N hard pulses */ gstab, /* delay to compensate for gradient gt5 */ gt1, gt2, gt3, gt4, gt5, gt6, gt7, gt8, gt9, gt10, gt11, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8, gzlvl9, gzlvl10, gzlvl11; /* LOAD VARIABLES */ getstr("autocal",autocal); getstr("fsat",fsat); getstr("fc180",fc180); getstr("f1180",f1180); getstr("f2180",f2180); getstr("f3180",f3180); getstr("fscuba",fscuba); getstr("ddseq",ddseq); getstr("fCT",fCT); getstr("shp_sl",shp_sl); getstr("sel_flg",sel_flg); taua = getval("taua"); taub = getval("taub"); tauc = getval("tauc"); taud = getval("taud"); zeta = getval("zeta"); bigTCa = getval("bigTCa"); bigTCo = getval("bigTCo"); bigTN = getval("bigTN"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); dpwr = getval("dpwr"); pwN = getval("pwN"); pwNlvl = getval("pwNlvl"); pwD = getval("pwD"); pwDlvl = getval("pwDlvl"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); phase3 = (int) ( getval("phase3") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); sw3 = getval("sw3"); ni2 = getval("ni2"); ni3 = getval("ni3"); pw_sl = getval("pw_sl"); phase_sl = getval("phase_sl"); sphase = getval("sphase"); sphase1 = getval("sphase1"); sphase2 = getval("sphase2"); tpwrsl = getval("tpwrsl"); gstab = getval("gstab"); gt1 = getval("gt1"); if (getval("gt2") > 0) gt2=getval("gt2"); else gt2=gt1*0.1; gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt8 = getval("gt8"); gt9 = getval("gt9"); gt10 = getval("gt10"); gt11 = getval("gt11"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl8 = getval("gzlvl8"); gzlvl9 = getval("gzlvl9"); gzlvl10 = getval("gzlvl10"); gzlvl11 = getval("gzlvl11"); if(autocal[0]=='n') { getstr("spca180",spca180); getstr("spco180",spco180); getstr("spcareb",spcareb); pwc180off = getval("pwc180off"); pwc90 = getval("pwc90"); pwc180on = getval("pwc180on"); pwcareb = getval("pwcareb"); d_c90 = getval("d_c90"); d_c180 = getval("d_c180"); d_creb = getval("d_creb"); } else { strcpy(spca180,"Phard_-118p"); strcpy(spco180,"Phard_118p"); strcpy(spcareb,"PrebCa_on"); if (FIRST_FID) { compC = getval("compC"); pwC = getval("pwC"); pwClvl = getval("pwClvl"); ca180reb = pbox(spcareb, CA180reb, CA180ps, dfrq, compC*pwC, pwClvl); c180 = pbox("Phard180", C180, CO180ps, dfrq, compC*pwC, pwClvl); co180 = pbox(spco180, CO180, CO180ps, dfrq, compC*pwC, pwClvl); ca180 = pbox(spca180, CA180, CO180ps, dfrq, compC*pwC, pwClvl); c90 = pbox("Phard90", C90, CO180ps, dfrq, compC*pwC, pwClvl); } pwc180off = co180.pw; pwc90 = c90.pw; pwc180on = c180.pw; pwcareb = ca180reb.pw; d_c90 = c90.pwr; d_c180 = c180.pwr; d_creb = ca180reb.pwr; } /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,1,phi2); settable(t3,4,phi3); settable(t4,1,phi4); settable(t5,1,phi5); settable(t7,4,phi7); settable(t8,4,phi8); settable(t6,4,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if( bigTN - (ni3-1)*0.5/sw3 + pwc180on < 0.2e-6 ) { text_error(" ni3 is too big\n"); text_error(" please make ni3 equal or smaller than %d \n", (int) (((bigTN +pwc180on)*sw3/0.5)+1.0) ); psg_abort(1); } if (fCT[A]=='y') { if(bigTCa - 0.5*(ni2-1)/sw2 - WFG_STOP_DELAY - POWER_DELAY - gt11 - 50.2e-6 < 0.2e-6) { text_error(" ni2 is too big\n"); text_error(" please make ni2 equal or smaller than %d \n", (int) (((bigTCa -WFG_STOP_DELAY -POWER_DELAY -gt11 -50.2e-6)*sw2/0.5)+1.0) ); psg_abort(1); } } else { if ((ni2-1)/sw2>12.0e-3) { text_error(" ni2 is too big\n"); text_error(" please make ni2 equal or smaller than %d \n", (int) ((6.0e-3*sw2) +1.0) ); psg_abort(1); } } if (bigTCo - 0.5*(ni-1)/sw1 - 4.0e-6 - POWER_DELAY < 0.2e-6) { text_error(" ni is too big\n"); text_error(" please make ni equal or smaller than %d \n", (int) (((bigTCo -4.0e-6 -POWER_DELAY)*sw1/0.5)+1.0) ); psg_abort(1); } if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' || dm[D] == 'y' )) { text_error("incorrect dec1 decoupler flags! "); psg_abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y' || dm2[D] == 'y')) { text_error("incorrect dec2 decoupler flags! Should be 'nnnn' "); psg_abort(1); } if( tsatpwr > 6 ) { text_error("TSATPWR too large !!! "); psg_abort(1); } if( dpwr > 46 ) { text_error("don't fry the probe, DPWR too large! "); psg_abort(1); } if( dpwr2 > 46 ) { text_error("don't fry the probe, DPWR2 too large! "); psg_abort(1); } if( dpwr3 > 50 ) { text_error("don't fry the probe, dpwr3 too large! "); psg_abort(1); } if( d_c90 > 62 ) { text_error("don't fry the probe, DHPWR too large! "); psg_abort(1); } if( pw > 200.0e-6 ) { text_error("dont fry the probe, pw too high ! "); psg_abort(1); } if( pwN > 200.0e-6 ) { text_error("dont fry the probe, pwN too high ! "); psg_abort(1); } if( pwc90 > 200.0e-6 ) { text_error("dont fry the probe, pwc90 too high ! "); psg_abort(1); } if( pwc180off > 200.0e-6 ) { text_error("dont fry the probe, pwc180 too high ! "); psg_abort(1); } if( gt3 > 2.5e-3 ) { text_error("gt3 is too long\n"); psg_abort(1); } if( gt1 > 10.0e-3 || gt2 > 10.0e-3 || gt4 > 10.0e-3 || gt5 > 10.0e-3 || gt6 > 10.0e-3 || gt7 > 10.0e-3 || gt8 > 10.0e-3 || gt9 > 10.0e-3 || gt10 > 10.0e-3 || gt11 > 200.0e-6) { text_error("gt values are too long. Must be < 10.0e-3 or gt11=200us\n"); psg_abort(1); } if (fCT[A] == 'n' && fc180[A] =='y' && ni2 > 1.0) { text_error("must set fc180='n' to allow Calfa evolution (ni2>1)\n"); psg_abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t1,1,4); if (phase2 == 2) tsadd(t5,1,4); if (phase3 == 2) { tsadd(t4, 2, 4); icosel = 1; } else icosel = -1; /* Set up f1180 tau1 = t1 */ tau1 = d2; if((f1180[A] == 'y') && (ni>1)){ tau1 += (1.0/(2.0*sw1)); if(tau1 < 0.2e-6) tau1 = 0.4e-6; } tau1 = tau1/2.0; /* Set up f2180 tau2 = t2 */ tau2 = d3; if ((f2180[A] == 'y') && (ni2>1)) { if (fCT[A]=='y') { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.4e-6; } else { if (pwc180off > 2.0*pwN) { tau2 += ( 1.0 / (2.0*sw2) - 4.0*pwc90/PI - 4.0e-6 - 2.0*POWER_DELAY - WFG3_START_DELAY - pwc180off - WFG3_STOP_DELAY); } else { tau2 += ( 1.0 / (2.0*sw2) - 4.0*pwc90/PI - 4.0e-6 - 2.0*POWER_DELAY - WFG3_START_DELAY - 2.0*pwN - WFG3_STOP_DELAY); } if(tau2 < 0.2e-6) tau2 = 0.4e-6; } } tau2 = tau2/2.0; /* Set up f3180 tau3 = t3 */ tau3 = d4; if((f3180[A] == 'y') && (ni3>1)){ tau3 += ( 1.0 / (2.0*sw3) ); if(tau3 < 0.2e-6) tau3 = 0.4e-6; } tau3 = tau3/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(t6,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t5,2,4); tsadd(t6,2,4); } if( ix == 1) d4_init = d4 ; t3_counter = (int) ( (d4-d4_init)*sw3 + 0.5 ); if(t3_counter % 2) { tsadd(t2,2,4); tsadd(t6,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); obsoffset(tof); decoffset(dof); /* set Dec1 carrier at Co */ obspower(tsatpwr); /* Set transmitter power for 1H presaturation */ decpower(d_c180); /* Set Dec1 power for hard 13C pulses */ dec2power(pwNlvl); /* Set Dec2 power for 15N hard pulses */ /* Presaturation Period */ if (fsat[0] == 'y') { delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presaturation */ obspower(tpwr); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); if(fscuba[0] == 'y') { delay(2.2e-2); rgpulse(pw,zero,2.0e-6,0.0); rgpulse(2*pw,one,2.0e-6,0.0); rgpulse(pw,zero,2.0e-6,0.0); delay(2.2e-2); } } else { delay(d1); } obspower(tpwr); /* Set transmitter power for hard 1H pulses */ txphase(zero); dec2phase(zero); delay(1.0e-5); /* Begin Pulses */ status(B); rcvroff(); lk_hold(); delay(20.0e-6); initval(1.0,v2); obsstepsize(phase_sl); xmtrphase(v2); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shp_sl,pw_sl,one,4.0e-6,0.0); xmtrphase(zero); obspower(tpwr); txphase(zero); delay(4.0e-6); /* shaped pulse */ rgpulse(pw,zero,0.0,0.0); /* 90 deg 1H pulse */ delay(0.2e-6); zgradpulse(gzlvl5,gt5); delay(2.0e-6); delay(taua - gt5 - 2.2e-6); /* taua <= 1/4JNH */ sim3pulse(2*pw,0.0e-6,2*pwN,zero,zero,zero,0.0,0.0); txphase(three); dec2phase(zero); decphase(zero); delay(0.2e-6); zgradpulse(gzlvl5,gt5); delay(200.0e-6); delay(taua - gt5 - 200.2e-6 - 2.0e-6); if (sel_flg[A] == 'n') { rgpulse(pw,three,2.0e-6,0.0); delay(0.2e-6); zgradpulse(gzlvl3,gt3); delay(200.0e-6); dec2rgpulse(pwN,zero,0.0,0.0); delay( zeta + pwc180on ); dec2rgpulse(2*pwN,zero,0.0,0.0); decrgpulse(pwc180on,zero,0.0,0.0); delay(zeta - 2.0e-6); dec2rgpulse(pwN,one,2.0e-6,0.0); } else { rgpulse(pw,one,2.0e-6,0.0); initval(1.0,v6); dec2stepsize(45.0); dcplr2phase(v6); delay(0.2e-6); zgradpulse(gzlvl3,gt3); delay(200.0e-6); dec2rgpulse(pwN,zero,0.0,0.0); dcplr2phase(zero); delay(1.34e-3 - SAPS_DELAY - 2.0*pw); rgpulse(pw,one,0.0,0.0); rgpulse(2.0*pw,zero,0.0,0.0); rgpulse(pw,one,0.0,0.0); delay( zeta - 1.34e-3 - 2.0*pw + pwc180on ); dec2rgpulse(2*pwN,zero,0.0,0.0); decrgpulse(pwc180on,zero,0.0,0.0); delay(zeta - 2.0e-6); dec2rgpulse(pwN,one,2.0e-6,0.0); } dec2phase(zero); decphase(t1); decpower(d_c90); delay(0.2e-6); zgradpulse(gzlvl8,gt8); delay(200.0e-6); /* Transfer Coy to CoxCaz and CT period for t1 */ decrgpulse(pwc90,t1,2.0e-6,0.0); delay(tau1); dec2rgpulse(pwN,one,0.0,0.0); dec2rgpulse(2*pwN,zero,0.0,0.0); dec2rgpulse(pwN,one,0.0,0.0); decpower(d_c180); delay(taud -4.0*pwN -POWER_DELAY -0.5*(WFG_START_DELAY +pwc180off +WFG_STOP_DELAY)); decshaped_pulse(spca180,pwc180off,zero,0.0,0.0); decphase(t8); initval(1.0,v4); decstepsize(sphase); dcplrphase(v4); delay(bigTCo -taud -0.5*(WFG_START_DELAY +pwc180off +WFG_STOP_DELAY) ); decrgpulse(pwc180on,t8,0.0,0.0); decphase(one); dcplrphase(zero); decpower(d_c90); delay(bigTCo - tau1 - POWER_DELAY - 4.0e-6); decrgpulse(pwc90,one,4.0e-6,0.0); decoffset(dof-(174-56)*dfrq); /* change Dec1 carrier to Ca (56 ppm) */ delay(0.2e-6); zgradpulse(gzlvl9,gt9); delay(150.0e-6); /* t2 period */ /* Turn on D decoupling using the third decoupler */ dec3phase(one); dec3power(pwDlvl); dec3rgpulse(pwD,one,4.0e-6,0.0); dec3phase(zero); dec3power(dpwr3); dec3unblank(); setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3); /* Turn on D decoupling */ decrgpulse(pwc90,t5,2.0e-6,0.0); if (fCT[A]=='y') /* Constant t2 */ { decpower(d_c180); delay(tau2); dec2rgpulse(pwN,one,0.0,0.0); dec2rgpulse(2*pwN,zero,0.0,0.0); dec2rgpulse(pwN,one,0.0,0.0); decshaped_pulse(spco180,pwc180off,zero,0.0,0.0); decpower(d_creb); decphase(t7); initval(1.0,v3); decstepsize(sphase2); dcplrphase(v3); delay(bigTCa - 4.0*pwN - WFG_START_DELAY - pwc180off - WFG_STOP_DELAY - POWER_DELAY - WFG_START_DELAY - gt11 - 50.2e-6); delay(0.2e-6); zgradpulse(gzlvl11,gt11); delay(50.0e-6); decshaped_pulse(spcareb,pwcareb,zero,0.0,0.0); dcplrphase(zero); decpower(d_c90); decphase(t7); delay(0.2e-6); zgradpulse(gzlvl11,gt11); delay(50.0e-6); delay(bigTCa - tau2 - WFG_STOP_DELAY - POWER_DELAY - gt11 - 50.2e-6); decrgpulse(pwc90,t7,0.0,0.0); } else /* non_constant t2 */ { if (fc180[A]=='n') { decphase(zero); dec2phase(zero); decpower(d_c180); delay(tau2); sim3shaped_pulse("",spco180,"",0.0,pwc180off,2.0*pwN,zero,zero,zero,0.0,0.0); decpower(d_c90); decphase(t7); delay(tau2); } else /* for checking sequence */ { decpower(d_c180); decrgpulse(pwc180on,zero,4.0e-6,0.0); decpower(d_c90); } decrgpulse(pwc90,t7,4.0e-6,0.0); } /* Turn off D decoupling */ setstatus(DEC3ch, FALSE, 'c', FALSE, dmf3); dec3blank(); dec3phase(three); dec3power(pwDlvl); dec3rgpulse(pwD,three,4.0e-6,0.0); /* Turn off D decoupling */ decoffset(dof); /* set carrier back to Co */ delay(0.2e-6); zgradpulse(gzlvl10,gt10); delay(150.0e-6); /* refocusing CoyCaz to Cox */ decrgpulse(pwc90,zero,2.0e-6,0.0); decpower(d_c180); delay(tauc - POWER_DELAY - WFG_START_DELAY - pwc180off - WFG_STOP_DELAY); decshaped_pulse(spca180,pwc180off,zero,0.0,0.0); initval(1.0,v5); decstepsize(sphase1); dcplrphase(v5); decrgpulse(pwc180on,zero,0.0e-6,0.0); dcplrphase(zero); delay(tauc - WFG_START_DELAY - pwc180off - WFG_STOP_DELAY - POWER_DELAY - 4.0e-6); decshaped_pulse(spca180,pwc180off,zero,0.0,0.0); /* BS */ decpower(d_c90); decrgpulse(pwc90,one,4.0e-6,0.0); decpower(d_c180); delay(0.2e-6); zgradpulse(gzlvl4,gt4); delay(200.0e-6); /* t3 period */ dec2rgpulse(pwN,t2,2.0e-6,0.0); dec2phase(t3); delay(bigTN - tau3 + pwc180on); dec2rgpulse(2*pwN,t3,0.0,0.0); decrgpulse(pwc180on,zero,0.0,0.0); txphase(zero); dec2phase(t4); delay(0.2e-6); zgradpulse(gzlvl1,gt1); delay(500.0e-6); delay(bigTN - gt1 - 500.2e-6 - 2.0*GRADIENT_DELAY - 4.0e-6 - WFG_START_DELAY - pwc180off - WFG_STOP_DELAY); decshaped_pulse(spca180,pwc180off,zero,4.0e-6,0.0); delay(tau3); sim3pulse(pw,0.0e-6,pwN,zero,zero,t4,0.0,0.0); delay(0.2e-6); zgradpulse(gzlvl6,gt6); delay(2.0e-6); dec2phase(zero); delay(taub - gt6 - 2.2e-6); sim3pulse(2*pw,0.0e-6,2*pwN,zero,zero,zero,0.0,0.0); delay(0.2e-6); zgradpulse(gzlvl6,gt6); delay(200.0e-6); txphase(one); dec2phase(one); delay(taub - gt6 - 200.2e-6); sim3pulse(pw,0.0e-6,pwN,one,zero,one,0.0,0.0); delay(0.2e-6); zgradpulse(gzlvl7,gt7); delay(2.0e-6); txphase(zero); dec2phase(zero); delay(taub - gt7 - 2.2e-6); sim3pulse(2*pw,0.0e-6,2*pwN,zero,zero,zero,0.0,0.0); delay(0.2e-6); zgradpulse(gzlvl7,gt7); delay(200.0e-6); delay(taub - gt7 - 200.2e-6); sim3pulse(pw,0.0e-6,pwN,zero,zero,zero,0.0,0.0); delay(gt2 +gstab -0.5*(pwN -pw) -2.0*pw/PI); rgpulse(2*pw,zero,0.0,0.0); delay(2.0e-6); zgradpulse(icosel*gzlvl2,gt2); decpower(dpwr); dec2power(dpwr2); delay(gstab -2.0e-6 -2.0*GRADIENT_DELAY -2.0*POWER_DELAY); lk_sample(); /* BEGIN ACQUISITION */ status(C); setreceiver(t6); }
pulsesequence () { double gstab = getval("gstab"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gzlvlhs = getval("gzlvlhs"), wselpw = getval("wselpw"), wselpwr = getval("wselpwr"), mixN = getval("mixN"), prgtime = getval("prgtime"), prgpwr = getval("prgpwr"), phincr1 = getval("phincr1"); char wselshape[MAXSTR], sspul[MAXSTR],flipshape[MAXSTR], ESmode[MAXSTR], flipback[MAXSTR],prg_flg[MAXSTR],alt_grd[MAXSTR]; rof1 = getval("rof1"); if(rof1 > 2.0e-6) rof1 = 2.0e-6; getstr("wselshape", wselshape); getstr("flipshape", flipshape); getstr("prg_flg", prg_flg); getstr("alt_grd",alt_grd); if (phincr1 < 0.0) phincr1=360+phincr1; initval(phincr1,v8); settable(t1,16,phi1); settable(t3,16,phi3); settable(t5,16,phi5); settable(t6,16,rec); settable(t9,16,phi9); sub(ct,ssctr,v12); getelem(t1,v12,v1); getelem(t3,v12,v3); getelem(t5,v12,v5); getelem(t9,v12,v9); getelem(t6,v12,oph); add(v1,one,v10); if (alt_grd[0] == 'y') mod2(ct,v6); /* alternate gradient sign on every 2nd transient */ status(A); if (getflag("lkgate_flg")) lk_sample(); /* turn lock sampling on */ decpower(dpwr); obspower(tpwr); if (getflag("sspul")) steadystate(); delay(d1); if (getflag("lkgate_flg")) lk_hold(); /* turn lock sampling off */ status(B); if (getflag("ESmode")) { rgpulse(pw,zero,rof1,rof1); ifzero(v6); zgradpulse(gzlvl1,gt1); elsenz(v6); zgradpulse(-1.0*gzlvl1,gt1); endif(v6); obspower(wselpwr); delay(gstab); shaped_pulse(wselshape,wselpw,v9,10.0e-6,rof1); ifzero(v6); zgradpulse(gzlvl1,gt1); elsenz(v6); zgradpulse(-1.0*gzlvl1,gt1); endif(v6); obspower(tpwr); delay(gstab); /* do mixing */ rgpulse(pw,zero,rof1,rof1); ifzero(v6); rgradient('z',gzlvlhs); /* make it compatible with cold probes */ elsenz(v6); rgradient('z',-1.0*gzlvlhs); endif(v6); delay(mixN); rgradient('z',0.0); delay(gstab); if (getflag("flipback")) FlipBack(v1,v8); rgpulse(pw,v1,rof1,rof1); ExcitationSculpting(v5,v3,v6); if (prg_flg[A] == 'y') /* optional purge pulse */ { obspower(prgpwr); add(v1,one,v1); rgpulse(prgtime,v1,rof1,rof2); } else delay(rof2); } else rgpulse(pw,v1,rof1,rof2); status(C); }
void upsdrv_initups(void) { #ifndef TESTING const struct { const char *name; int (*command)(const char *cmd, char *buf, size_t buflen); } subdriver[] = { { "cypress", &cypress_command }, { "phoenix", &phoenix_command }, { "ippon", &ippon_command }, { "krauler", &krauler_command }, { NULL } }; int ret, langid; char tbuf[255]; /* Some devices choke on size > 255 */ char *regex_array[6]; char *subdrv = getval("subdriver"); regex_array[0] = getval("vendorid"); regex_array[1] = getval("productid"); regex_array[2] = getval("vendor"); regex_array[3] = getval("product"); regex_array[4] = getval("serial"); regex_array[5] = getval("bus"); /* check for language ID workaround (#1) */ if (getval("langid_fix")) { /* skip "0x" prefix and set back to hexadecimal */ if (sscanf(getval("langid_fix") + 2, "%x", &langid_fix) != 1) { upslogx(LOG_NOTICE, "Error enabling language ID workaround"); } else { upsdebugx(2, "language ID workaround enabled (using '0x%x')", langid_fix); } } /* pick up the subdriver name if set explicitly */ if (subdrv) { int i; if (!regex_array[0] || !regex_array[1]) { fatalx(EXIT_FAILURE, "When specifying a subdriver, 'vendorid' and 'productid' are mandatory."); } for (i = 0; subdriver[i].name; i++) { if (strcasecmp(subdrv, subdriver[i].name)) { continue; } subdriver_command = subdriver[i].command; break; } if (!subdriver_command) { fatalx(EXIT_FAILURE, "Subdriver \"%s\" not found!", subdrv); } } ret = USBNewRegexMatcher(®ex_matcher, regex_array, REG_ICASE | REG_EXTENDED); switch (ret) { case -1: fatal_with_errno(EXIT_FAILURE, "USBNewRegexMatcher"); case 0: break; /* all is well */ default: fatalx(EXIT_FAILURE, "invalid regular expression: %s", regex_array[ret]); } /* link the matchers */ regex_matcher->next = &device_matcher; ret = usb->open(&udev, &usbdevice, regex_matcher, NULL); if (ret < 0) { fatalx(EXIT_FAILURE, "No supported devices found. Please check your device availability with 'lsusb'\n" "and make sure you have an up-to-date version of NUT. If this does not help,\n" "try running the driver with at least 'subdriver', 'vendorid' and 'productid'\n" "options specified. Please refer to the man page for details about these options\n" "(man 8 blazer_usb).\n"); } if (!subdriver_command) { fatalx(EXIT_FAILURE, "No subdriver selected"); } /* create a new matcher for later reopening */ ret = USBNewExactMatcher(&reopen_matcher, &usbdevice); if (ret) { fatal_with_errno(EXIT_FAILURE, "USBNewExactMatcher"); } /* link the matchers */ reopen_matcher->next = regex_matcher; dstate_setinfo("ups.vendorid", "%04x", usbdevice.VendorID); dstate_setinfo("ups.productid", "%04x", usbdevice.ProductID); /* check for language ID workaround (#2) */ if (langid_fix != -1) { /* Future improvement: * Asking for the zero'th index is special - it returns a string * descriptor that contains all the language IDs supported by the * device. Typically there aren't many - often only one. The * language IDs are 16 bit numbers, and they start at the third byte * in the descriptor. See USB 2.0 specification, section 9.6.7, for * more information on this. * This should allow automatic application of the workaround */ ret = usb_get_string(udev, 0, 0, tbuf, sizeof(tbuf)); if (ret >= 4) { langid = tbuf[2] | (tbuf[3] << 8); upsdebugx(1, "First supported language ID: 0x%x (please report to the NUT maintainer!)", langid); } } #endif blazer_initups(); }
pulsesequence() { char shname1[MAXSTR], f1180[MAXSTR], f2180[MAXSTR], SE_flg[MAXSTR], dec_flg[MAXSTR], CT_flg[MAXSTR]; int icosel=1, t1_counter, t2_counter, ni2 = getval("ni2"), phase; double d2_init=0.0, d3_init=0.0, pwS1,pwS2,pwS3,pwS4,pwS5,pwS6, lambda = getval("lambda"), CTdelay = getval("CTdelay"), gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gzlvl3 = getval("gzlvl3"), gzlvl4 = getval("gzlvl4"), gzlvl5 = getval("gzlvl5"), gzlvl6 = getval("gzlvl6"), gt1 = getval("gt1"), gt2 = getval("gt2"), gt3 = getval("gt3"), gt4 = getval("gt4"), gt5 = getval("gt5"), gt6 = getval("gt6"), gstab = getval("gstab"), tpwrsf = getval("tpwrsf"), shlvl1, shpw1, pwClvl = getval("pwClvl"), pwC = getval("pwC"), pwNlvl = getval("pwNlvl"), pwN = getval("pwN"), dpwr2 = getval("dpwr2"), d2 = getval("d2"), shbw = getval("shbw"), shofs = getval("shofs")-4.77, timeTN = getval("timeTN"), tauC = getval("tauC"), tau1 = getval("tau1"), tau2 = getval("tau2"), taunh = getval("taunh"); getstr("shname1", shname1); getstr("SE_flg",SE_flg); getstr("dec_flg",dec_flg); getstr("CT_flg",CT_flg); getstr("f1180",f1180); getstr("f2180",f2180); phase = (int) (getval("phase") + 0.5); settable(t1,2,phi1); settable(t3,4,phi3); settable(t10,1,phi10); settable(t12,4,phi12); settable(t13,4,phi13); /* INITIALIZE VARIABLES */ shpw1 = pw*8.0; shlvl1 = tpwr; pwS1 = c13pulsepw("co", "ca", "sinc", 90.0); pwS2 = c13pulsepw("co", "ca", "sinc", 180.0); pwS3 = c13pulsepw("ca", "co", "square", 180.0); pwS4 = h_shapedpw("eburp2",shbw,shofs,zero, 0.0, 0.0); pwS6 = h_shapedpw("reburp",shbw,shofs,zero, 0.0, 0.0); pwS5 = h_shapedpw("pc9f",shbw,shofs,zero, 2.0e-6, 0.0); if (SE_flg[0] == 'y') { if ( ni2*1/(sw2)/2.0 > (timeTN-pwS2*0.5-pwS4)) { printf(" ni2 is too big. Make ni2 equal to %d or less.\n", ((int)((timeTN-pwS2*0.5-pwS4)*2.0*sw2))); psg_abort(1);} } else { if ( ni2*1/(sw2)/2.0 > (timeTN-pwS2*0.5)) { printf(" ni2 is too big. Make ni2 equal to %d or less.\n", ((int)((timeTN-pwS2*0.5)*2.0*sw2))); psg_abort(1);} } if (CT_flg[0] == 'y') { if ( ni*1/(sw1) > (CTdelay)) { printf(" ni is too big. Make ni equal to %d or less.\n", ((int)(CTdelay*sw1))); psg_abort(1);} } if (phase == 1) ; if (phase == 2) tsadd(t1,1,4); if (SE_flg[0] =='y') { if (phase2 == 2) {tsadd(t10,2,4); icosel = +1;} else icosel = -1; } else { if (phase2 == 2) tsadd(t3,1,4); } tau1 = d2; if((f1180[A] == 'y') ) { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; } tau1 = tau1; tau2 = d3; if((f2180[A] == 'y') ) { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.0; } tau2 = tau2; 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); tsadd(t13,2,4); } if( ix == 1) d3_init = d3; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t3,2,4); tsadd(t12,2,4); tsadd(t13,2,4); } status(A); rcvroff(); decpower(pwClvl); decoffset(dof); dec2power(pwNlvl); dec2offset(dof2); obspwrf(tpwrsf); decpwrf(4095.0); obsoffset(tof); set_c13offset("co"); zgradpulse(gzlvl2, gt2); delay(1.0e-4); delay(d1-gt2); lk_hold(); h_shapedpulse("pc9f",shbw,shofs,zero, 2.0e-6, 0.0); delay(lambda-pwS5*0.5-pwS6*0.4); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, one, zero, zero, 0.0, 0.0); delay(lambda-pwS5*0.5-pwS6*0.4); h_shapedpulse("pc9f_",shbw,shofs,one, 0.0, 0.0); obspower(shlvl1); /**************************************************************************/ dec2rgpulse(pwN,zero,0.0,0.0); zgradpulse(gzlvl6,gt6); delay(timeTN-pwS2*0.5-gt6); sim3_c13pulse("", "co", "ca", "sinc", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 2.0e-6, 2.0e-6); delay(timeTN-pwS2*0.5-taunh*0.5-shpw1); shaped_pulse(shname1,shpw1,two,0.0,0.0); zgradpulse(gzlvl6, gt6); delay(taunh*0.5-gt6); dec2rgpulse(pwN,zero,0.0,0.0); shaped_pulse(shname1,shpw1,zero,0.0,0.0); /**************************************************************************/ /*** CO -> CA transfer *********************************/ /**************************************************************************/ c13pulse("co", "ca", "sinc", 90.0, zero, 2.0e-6, 0.0); zgradpulse(-gzlvl4, gt4); decphase(zero); delay(tauC - gt4 - 0.5*10.933*pwC); decrgpulse(pwC*158.0/90.0, zero, 0.0, 0.0); decrgpulse(pwC*171.2/90.0, two, 0.0, 0.0); decrgpulse(pwC*342.8/90.0, zero, 0.0, 0.0); /* Shaka 6 composite */ decrgpulse(pwC*145.5/90.0, two, 0.0, 0.0); decrgpulse(pwC*81.2/90.0, zero, 0.0, 0.0); decrgpulse(pwC*85.3/90.0, two, 0.0, 0.0); zgradpulse(-gzlvl4, gt4); decphase(one); delay(tauC - gt4 - 0.5*10.933*pwC - WFG_START_DELAY - 2.0e-6); c13pulse("co", "ca", "sinc", 90.0, one, 2.0e-6, 0.0); /**************************************************************************/ /* xxxxxxxxxxxxxxxxxxxx 13Ca EVOLUTION xxxxxxxxxxxxxxxxxx */ /**************************************************************************/ set_c13offset("ca"); if (CT_flg[0] == 'y') { c13pulse("ca", "co", "square", 90.0, t1, 2.0e-6, 0.0); delay(tau1*0.5); sim3_c13pulse("", "co", "ca", "sinc", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); delay(CTdelay*0.5); c13pulse("cab", "co", "square", 180.0, zero, 0.0, 0.0); delay((CTdelay-tau1)*0.5); c13pulse("co", "ca", "sinc", 180.0, zero, 0.0, 0.0); c13pulse("ca", "co", "square", 90.0, zero, 0.0, 0.0); } else { if (dec_flg[0] == 'y') { c13pulse("ca", "co", "square", 90.0, t1, 2.0e-6, 2.0e-6); delay(tau1*0.5); c_shapedpulse2("isnob5",30.0,-31.0,"isnob5",30.0,120.0 , zero, 0.0, 0.0); dec2rgpulse(pwN*2.0,zero,0.0,0.0); delay(tau1*0.5); c13pulse("ca", "co", "square", 180.0, zero, 2.0e-6, 2.0e-6); dec2rgpulse(pwN*2.0,two,0.0,0.0); c_shapedpulse2("isnob5",30.0,-31.0,"isnob5",30.0,120.0 , two, 0.0, 0.0); c13pulse("ca", "co", "square", 90.0, zero, 2.0e-6, 2.0e-6); } else { c13pulse("ca", "co", "square", 90.0, t1, 2.0e-6, 2.0e-6); delay(tau1*0.5); sim3_c13pulse("", "co", "ca", "sinc", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 2.0e-6, 2.0e-6); delay(tau1*0.5); c13pulse("ca", "co", "square", 180.0, zero, 2.0e-6, 2.0e-6); c13pulse("co", "ca", "sinc", 180.0, zero, 2.0e-6, 2.0e-6); if (pwN*2.0 > pwS2) delay(pwN*2.0 - pwS2); c13pulse("ca", "co", "square", 90.0, zero, 2.0e-6, 2.0e-6); } } set_c13offset("co"); zgradpulse(gzlvl3, gt3); delay(1.0e-4); /**************************************************************************/ /*** CO -> CA transfer *********************************/ /**************************************************************************/ c13pulse("co", "ca", "sinc", 90.0, one, 2.0e-6, 0.0); zgradpulse(gzlvl4, gt4*0.7); delay(tauC - gt4*0.7 - 0.5*10.933*pwC); decrgpulse(pwC*158.0/90.0, zero, 0.0, 0.0); decrgpulse(pwC*171.2/90.0, two, 0.0, 0.0); decrgpulse(pwC*342.8/90.0, zero, 0.0, 0.0); /* Shaka 6 composite */ decrgpulse(pwC*145.5/90.0, two, 0.0, 0.0); decrgpulse(pwC*81.2/90.0, zero, 0.0, 0.0); decrgpulse(pwC*85.3/90.0, two, 0.0, 0.0); zgradpulse(gzlvl4, gt4*0.7); delay(tauC - gt4*0.7 - 0.5*10.933*pwC - WFG_START_DELAY - 2.0e-6); /* WFG_START_DELAY */ c13pulse("co", "ca", "sinc", 90.0, zero, 2.0e-6, 0.0); /**************************************************************************/ obspower(shlvl1); shaped_pulse(shname1,shpw1,zero,0.0,0.0); dec2rgpulse(pwN,t3,0.0,0.0); if (SE_flg[0] == 'y') { delay(tau2*0.5); c13pulse("ca", "co", "square", 180.0, zero, 0.0, 0.0); delay(taunh*0.5-pwS3); shaped_pulse(shname1,shpw1,two,0.0,0.0); delay(timeTN-pwS2*0.5-shpw1-taunh*0.5-gt1-1.0e-4); zgradpulse(-gzlvl1, gt1); delay(1.0e-4); sim3_c13pulse("", "co", "ca", "sinc", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 2.0e-6, 2.0e-6); delay(timeTN-pwS2*0.5-tau2*0.5-pwS4); h_shapedpulse("eburp2",shbw,shofs,zero, 2.0e-6, 0.0); dec2rgpulse(pwN, t10, 0.0, 0.0); } else { delay(tau2*0.5); c13pulse("ca", "co", "square", 180.0, zero, 0.0, 0.0); delay(taunh*0.5-pwS3); shaped_pulse(shname1,shpw1,two,0.0,0.0); delay(timeTN-pwS2*0.5-taunh*0.5-shpw1); sim3_c13pulse("", "co", "ca", "sinc", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 2.0e-6, 2.0e-6); delay(timeTN-pwS2*0.5-tau2*0.5); dec2rgpulse(pwN, zero, 0.0, 0.0); } /**************************************************************************/ if (SE_flg[0] == 'y') { zgradpulse(gzlvl5, gt5); delay(lambda-pwS6*0.4 - gt5); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl5, gt5); delay(lambda-pwS6*0.4 - gt5); dec2rgpulse(pwN, one, 0.0, 0.0); h_shapedpulse("eburp2_",shbw,shofs,one, 0.0, 0.0); txphase(zero); dec2phase(zero); delay(lambda-pwS4*0.5-pwS6*0.4); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, zero, zero, zero, 0.0, 0.0); dec2phase(t10); delay(lambda-pwS4*0.5-pwS6*0.4); h_shapedpulse("eburp2",shbw,shofs,zero, 0.0, 0.0); delay((gt1/10.0) + 1.0e-4 +gstab + 2.0*GRADIENT_DELAY + POWER_DELAY); h_shapedpulse("reburp",shbw,shofs,zero, 0.0, rof2); zgradpulse(icosel*gzlvl2, gt1/10.0); /* 2.0*GRADIENT_DELAY */ delay(gstab); } else { h_shapedpulse("eburp2",shbw,shofs,zero, 2.0e-6, 0.0); zgradpulse(gzlvl5, gt5); delay(lambda-pwS6*0.4 - gt5); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl5, gt5); delay(lambda-pwS6*0.4 - gt5-POWER_DELAY-1.0e-4); } dec2power(dpwr2); /* POWER_DELAY */ lk_sample(); if (SE_flg[0] == 'y') setreceiver(t13); else setreceiver(t12); rcvron(); statusdelay(C,1.0e-4 ); }
void pulsesequence() { double mixN = getval("mixN"), gzlvlC = getval("gzlvlC"), gtC = getval("gtC"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw3 = getval("zqfpw3"), zqfpwr3 = getval("zqfpwr3"), gzlvlzq3 = getval("gzlvlzq3"), mixNcorr, sweeppw = getval("sweeppw"), sweeppwr = getval("sweeppwr"); char sweepshp[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat3[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtC = syncGradTime("gtC","gzlvlC",1.0); gzlvlC = syncGradLvl("gtC","gzlvlC",1.0); gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("sweepshp",sweepshp); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat3",zqfpat3); mixNcorr=0.0; if (getflag("Gzqfilt")) mixNcorr=getval("zqfpw3"); hlv(ct,v1); hlv(v1,v1); hlv(v1,v1); hlv(v1,v1); mod4(v1,v1); mod4(ct,v2); add(v1,v2,v2); hlv(ct,v3); hlv(v3,v3); mod4(v3,v3); add(v1,v3,v3); dbl(v3,v4); dbl(v2,oph); add(oph,v4,oph); add(oph,v1,oph); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); satpulse(satdly,zero,rof1,rof1); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); if (selfrq != tof) obsoffset(selfrq); rgpulse(pw, v1, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); zgradpulse(gzlvlA,gtA); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v2,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlA,gtA); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); zgradpulse(gzlvlB,gtB); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v3,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlB,gtB); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw,v1,rof1,rof1); obspower(sweeppwr); delay(0.31*mixN); zgradpulse(gzlvlC,gtC); delay(gstab); shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(-gzlvlC,gtC); delay(0.49*mixN); zgradpulse(-gzlvlC,2*gtC); delay(gstab); if (getflag("Gzqfilt")) { obspower(zqfpwr3); rgradient('z',gzlvlzq3); delay(100.0e-6); shaped_pulse(zqfpat3,zqfpw3,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); } else shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(gzlvlC,2*gtC); delay(0.2*mixN); obspower(tpwr); rgpulse(pw,v1,rof1,rof2); status(C); }
pulsesequence() { /* DECLARE VARIABLES */ char autocal[MAXSTR], /* auto-calibration flag */ fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ mess_flg[MAXSTR], /* water purging */ ar180a[MAXSTR], /* waveform shape for aromatic 180 pulse with C transmitter at dof */ ar180b[MAXSTR], /* waveform shape for aromatic 180 pulse with C transmitter at dofar */ cb180b[MAXSTR]; /* waveform shape for aliphatic 180 pulse with C transmitter at dofar */ int phase, ni, t1_counter; /* used for states tppi in t1 */ double tau1, /* t1 delay */ taua, /* ~ 1/4JCbHb = 1.7 ms */ taub, /* ~ 1/4JCgCd = 2.7 ms */ tauc, /* ~ 1/4JCgCd = 2.1 ms */ tauc2, /* ~ 1/4JCgCd = 2.1 ms */ taud, /* ~ 1/4JCdHd = 1.5 ms */ taue, /* = 1/4JCbHb = 1.8 ms */ tauf, /* ~ 1/2JCdHd = 3.1 ms */ TCb, /* carbon constant time period for recording the Cb chemical shifts */ dly_pg1, /* delay for water purging */ pwar180a, /* 180 aro pulse at d_ar180a and dof */ pwcb180b, /* 180 cb pulse at d_cb180b and dofar */ pwC, /* 90 c pulse at pwClvl */ pwsel90, /* 90 c pulse at d_sel90 */ pwar180b, /* 180 c pulse at d_ar180b */ d_ar180a, d_cb180b, d_sel90, d_ar180b, dofar, tsatpwr, /* low level 1H trans.power for presat */ tpwrmess, /* power level for water purging */ tpwrml, /* power level for 1H decoupling */ pwmlev, /* 90 pulse at tpwrml */ pwClvl, /* power level for high power 13C pulses on dec1 */ sw1, /* sweep width in f1 */ at, gp11, /* gap between 90-90 for selective 180 of Cb */ fab, /* chemical shift difference of Ca-Cb (Hz) */ compC, /* C-13 RF calibration parameters */ compH, gstab, gt0, gt1, gt2, gt3, gt4, gt5, gt5a, gt6, gt7, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl5a, gzlvl6, gzlvl7; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("autocal",autocal); getstr("fsat",fsat); getstr("f1180",f1180); getstr("fscuba",fscuba); getstr("mess_flg",mess_flg); taua = getval("taua"); taub = getval("taub"); tauc = getval("tauc"); tauc2 = getval("tauc2"); taud = getval("taud"); taue = getval("taue"); tauf = getval("tauf"); TCb = getval("TCb"); pwC = getval("pwC"); dofar = getval("dofar"); dly_pg1 = getval("dly_pg1"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); tpwrmess = getval("tpwrmess"); tpwrml = getval("tpwrml"); pwClvl = getval("pwClvl"); dpwr = getval("dpwr"); phase = (int) ( getval("phase") + 0.5); sw1 = getval("sw1"); ni = getval("ni"); at = getval("at"); fab = getval("fab"); gstab = getval("gstab"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt5a = getval("gt5a"); gt6 = getval("gt6"); gt7 = getval("gt7"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl5a = getval("gzlvl5a"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); if(autocal[0]=='n') { getstr("ar180a",ar180a); getstr("ar180b",ar180b); getstr("cb180b",cb180b); pwar180a = getval("pwar180a"); pwar180b = getval("pwar180b"); pwcb180b = getval("pwcb180b"); pwsel90 = getval("pwsel90"); d_ar180a = getval("d_ar180a"); d_cb180b = getval("d_cb180b"); d_ar180b = getval("d_ar180b"); d_sel90 = getval("d_sel90"); pwmlev = getval("pwmlev"); } else { strcpy(ar180a,"Pg3_off_cb180a"); strcpy(ar180b,"Pg3_off_cb180b"); strcpy(cb180b,"Pg3_on"); if (FIRST_FID) { compC = getval("compC"); compH = getval("compH"); sel90 = pbox("cal", SEL90, "", dfrq, compC*pwC, pwClvl); ar_180a = pbox(ar180a, AR180a, CB180ps, dfrq, compC*pwC, pwClvl); ar_180b = pbox(ar180b, AR180b, CB180ps, dfrq, compC*pwC, pwClvl); cb_180b = pbox(cb180b, CB180b, CB180ps, dfrq, compC*pwC, pwClvl); w16 = pbox_dec("cal", "WALTZ16", tpwrml, sfrq, compH*pw, tpwr); } pwsel90 = sel90.pw; d_sel90 = sel90.pwr; pwar180a = ar_180a.pw; d_ar180a = ar_180a.pwr; pwar180b = ar_180b.pw; d_ar180b = ar_180b.pwr; pwcb180b = cb_180b.pw; d_cb180b = cb_180b.pwr; pwmlev = 1.0/w16.dmf; } /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,1,phi2); settable(t3,4,phi3); settable(t4,8,phi4); settable(t6,8,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if( 0.5*ni*1/(sw1) > TCb - 2*POWER_DELAY - WFG_START_DELAY - pwar180a - WFG_STOP_DELAY) { printf(" ni is too big\n"); psg_abort(1); } if((dm[A] == 'y' || dm[B] == 'y' )) { printf("incorrect dec1 decoupler flags! "); psg_abort(1); } if(dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y') { printf("incorrect dec2 decoupler flags! "); psg_abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); psg_abort(1); } if( tpwrml > 53 ) { printf("tpwrml too large !!! "); psg_abort(1); } if( tpwrmess > 56 ) { printf("tpwrmess too large !!! "); psg_abort(1); } if( dpwr > 50 ) { printf("don't fry the probe, DPWR too large! "); psg_abort(1); } if( dpwr2 > 50 ) { printf("don't fry the probe, DPWR2 too large! "); psg_abort(1); } if( pwClvl > 63 ) { printf("don't fry the probe, DHPWR too large! "); psg_abort(1); } if( pw > 20.0e-6 ) { printf("dont fry the probe, pw too high ! "); psg_abort(1); } if( pwcb180b > 500.0e-6 ) { printf("dont fry the probe, pwcb180b too high ! "); psg_abort(1); } if( pwar180a > 500.0e-6 ) { printf("dont fry the probe, pwar180a too high ! "); psg_abort(1); } if (pwar180b > 500.0e-6) { printf("dont fry the probe, pwsel90 too long !"); psg_abort(1); } if (pwsel90 > 100.0e-6) { printf("dont fry the probe, pwsel90 too long !"); psg_abort(1); } if(d_ar180a > 60) { printf("dont fry the probe, d_ar180a too high !"); psg_abort(1); } if(d_cb180b > 60) { printf("dont fry the probe, d_cb180b too high !"); psg_abort(1); } if (d_ar180b > 60) { printf("dont fry the probe, d_sel90 too high ! "); psg_abort(1); } if (d_sel90 > 50) { printf("dont fry the probe, d_sel90 too high ! "); psg_abort(1); } if( gt0 > 15e-3 || gt1 > 15e-3 || gt2 > 15e-3 || gt3 > 15e-3 || gt4 > 15e-3 || gt5 > 15e-3 || gt6 > 15e-3 || gt7 > 15e-3 || gt5a > 15e-3) { printf("gradients on for too long. Must be < 15e-3 \n"); psg_abort(1); } if( fabs(gzlvl0) > 30000 || fabs(gzlvl1) > 30000 || fabs(gzlvl2) > 30000 ||fabs(gzlvl3) > 30000 || fabs(gzlvl4) > 30000 || fabs(gzlvl5) > 30000 ||fabs(gzlvl6) > 30000 || fabs(gzlvl7) > 30000) { printf("too strong gradient"); psg_abort(1); } if( 2*TCb - taue > 0.1 ) { printf("dont fry the probe, too long TCb"); psg_abort(1); } if( at > 0.1 && (dm[C]=='y' || dm2[C]=='y')) { printf("dont fry the probe, too long at with decoupling"); psg_abort(1); } if( pwC > 30.0e-6) { printf("dont fry the probe, too long pwC"); psg_abort(1); } if( dly_pg1 > 10.0e-3) { printf("dont fry the probe, too long dly_pg1"); psg_abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t2,1,4); /* 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(t6,2,4); } /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) ); } tau1 = tau1/2.0; /* 90-90 pulse for selective 180 of Cb but not Ca */ gp11 = 1/(2*fab) - 4/PI*pwsel90; if (gp11 < 0.0) { printf("gap of 90-90 negative, check fab and pwsel90"); psg_abort(1); } /* BEGIN ACTUAL PULSE SEQUENCE */ /* Receiver off time */ status(A); decoffset(dof); obspower(tsatpwr); /* Set transmitter power for 1H presaturation */ decpower(pwClvl); /* Set Dec1 power for hard 13C pulses */ dec2power(dpwr2); /* Set Dec2 power for 15N decoupling */ /* Presaturation Period */ if(mess_flg[A] == 'y') { obspower(tpwrmess); rgpulse(dly_pg1,zero,20.0e-6,20.0e-6); rgpulse(dly_pg1/1.62,one,20.0e-6,20.0e-6); obspower(tsatpwr); } if (fsat[0] == 'y') { delay(2.0e-5); rgpulse(d1,zero,20.0e-6,20.0e-6); obspower(tpwr); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); if(fscuba[0] == 'y') { delay(2.2e-2); rgpulse(pw,zero,2.0e-6,0.0); rgpulse(2*pw,one,2.0e-6,0.0); rgpulse(pw,zero,2.0e-6,0.0); delay(2.2e-2); } } else { delay(d1); } obspower(tpwr); /* Set transmitter power for hard 1H pulses */ txphase(zero); dec2phase(zero); decphase(zero); delay(1.0e-5); /* Begin Pulses */ rcvroff(); delay(10.0e-6); /* first ensure that magnetization does infact start on H and not C */ decrgpulse(pwC,zero,2.0e-6,2.0e-6); delay(2.0e-6); zgradpulse(gzlvl0,gt0); delay(gstab); /* this is the real start */ rgpulse(pw,zero,0.0,0.0); /* 90 deg 1H pulse */ delay(2.0e-6); zgradpulse(gzlvl1,gt1); delay(2.0e-6); delay(taua - gt1 - 4.0e-6); /* taua <= 1/4JCH */ simpulse(2*pw,2*pwC,zero,zero,0.0,0.0); txphase(t1); delay(2.0e-6); zgradpulse(gzlvl1,gt1); delay(2.0e-6); delay(taua - gt1 - 4.0e-6); rgpulse(pw,t1,0.0,0.0); txphase(zero); delay(2.0e-6); zgradpulse(gzlvl2,gt2); delay(gstab); decphase(t2); decpower(d_sel90); decrgpulse(pwsel90,t2,2.0e-6,0.0); decphase(zero); decpower(d_ar180a); decshaped_pulse(ar180a,pwar180a,zero,2.0e-6,0.0); /* bs effect */ delay(taue - POWER_DELAY - WFG_START_DELAY - 2.0e-6 - pwar180a - WFG_STOP_DELAY - POWER_DELAY - PRG_START_DELAY); /* H decoupling on */ obspower(tpwrml); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* TURN ME OFF DONT FORGET */ /* Hldecoupling on */ delay(TCb + tau1 - taue - POWER_DELAY - 2.0e-6); decphase(t3); decpower(d_sel90); decrgpulse(pwsel90,t3,2.0e-6,0.0); delay(gp11); decrgpulse(pwsel90,t3,0.0,0.0); decphase(zero); decpower(d_ar180a); decshaped_pulse(ar180a,pwar180a,zero,2.0e-6,0.0); delay(TCb - tau1 - POWER_DELAY - WFG_START_DELAY - 2.0e-6 - pwar180a - WFG_STOP_DELAY - POWER_DELAY - 2.0e-6); decphase(zero); decpower(d_sel90); decrgpulse(pwsel90,zero,2.0e-6,0.0); /* H decoupling off */ xmtroff(); obsprgoff(); obspower(tpwr); /* H decoupling off */ decoffset(dofar); delay(2.0e-6); zgradpulse(gzlvl3,gt3); delay(gstab); decphase(t4); decpower(d_sel90); decrgpulse(pwsel90,t4,2.0e-6,0.0); decphase(zero); decpower(d_cb180b); decshaped_pulse(cb180b,pwcb180b,zero,2.0e-6,0.0); /* B.S. */ delay(2.0e-6); zgradpulse(gzlvl4,gt4); delay(2.0e-6); delay(taub - POWER_DELAY - WFG_START_DELAY - 2.0e-6 - pwcb180b - WFG_STOP_DELAY - gt4 - 4.0e-6 - POWER_DELAY - 2.0e-6); decpower(d_ar180b); decshaped_pulse(ar180b,pwar180b,zero,2.0e-6,0.0); decpower(d_cb180b); decshaped_pulse(cb180b,pwcb180b,zero,2.0e-6,0.0); delay(2.0e-6); zgradpulse(gzlvl4,gt4); delay(2.0e-6); delay(taub - POWER_DELAY - WFG_START_DELAY - 2.0e-6 - pwcb180b - WFG_STOP_DELAY - gt4 - 4.0e-6 - POWER_DELAY - 2.0e-6); decpower(d_sel90); decrgpulse(pwsel90,zero,2.0e-6,0.0); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(100.0e-6); delay(tauc - POWER_DELAY - gt5 - 102.0e-6 - 2.0e-6); decphase(zero); decpower(pwClvl); decrgpulse(2*pwC,zero,2.0e-6,0.0); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(100.0e-6); txphase(zero); delay(tauc - POWER_DELAY - gt5 - 102.0e-6 - 2.0e-6); decphase(zero); decpower(d_sel90); decrgpulse(pwsel90,zero,2.0e-6,0.0); delay(2.0e-6); zgradpulse(gzlvl5a,gt5a); delay(100.0e-6); delay(tauc2 - POWER_DELAY - gt5a - 102.0e-6 - 2.0e-6); decphase(zero); decpower(pwClvl); decrgpulse(2*pwC,zero,2.0e-6,0.0); delay(2.0e-6); zgradpulse(gzlvl5a,gt5a); delay(100.0e-6); txphase(zero); delay(tauf - gt5a - 102.0e-6); rgpulse(2*pw,zero,0.0,0.0); delay(tauc2 - tauf - 2*pw - POWER_DELAY - 2.0e-6); decphase(zero); decpower(d_sel90); decrgpulse(pwsel90,zero,2.0e-6,0.0); txphase(zero); delay(2.0e-6); zgradpulse(gzlvl6,gt6); delay(gstab); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl7,gt7); delay(2.0e-6); delay(taud - gt7 - 4.0e-6 - POWER_DELAY - 2.0e-6); decphase(zero); decpower(pwClvl); simpulse(2*pw,2*pwC,zero,zero,2.0e-6,0.0); delay(2.0e-6); zgradpulse(gzlvl7,gt7); delay(2.0e-6); delay(taud - gt7 - 4.0e-6 - 2*POWER_DELAY); decpower(dpwr); /* Set power for decoupling */ dec2power(dpwr2); /* Set power for decoupling */ rgpulse(pw,zero,0.0,rof2); /* BEGIN ACQUISITION */ status(C); setreceiver(t6); }
pulsesequence() { double gzlvlE = getval("gzlvlE"), gtE = getval("gtE"), EDratio = getval("EDratio"), gstab = getval("gstab"), hsglvl = getval("hsglvl"), hsgt = getval("hsgt"), satdly = getval("satdly"), pwxlvl = getval("pwxlvl"), pwx = getval("pwx"), jFH = getval("jFH"), dly1, dly2; char sspul[MAXSTR], satmode[MAXSTR]; int icosel; getstr("satmode",satmode); getstr("sspul",sspul); if (jFH == 0.0) jFH=7.0; dly1 = 1.0 / (2.0*jFH); dly2 = 1.0 / (3.0*jFH); icosel = -1; settable(t1,4,ph1); settable(t2,4,ph2); settable(t3,8,ph3); settable(t4,32,ph4); settable(t5,16,ph5); getelem(t1,ct,v1); getelem(t2,ct,v2); getelem(t3,ct,v3); getelem(t4,ct,v4); getelem(t5,ct,oph); initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v10); { add(v1,v10,v1); add(oph,v10,oph); } decpower(pwxlvl); decpwrf(4095.0); status(A); if (sspul[0] == 'y') { zgradpulse(hsglvl,hsgt); rgpulse(pw,zero,rof1,rof1); decrgpulse(pwx,zero,rof1,rof1); zgradpulse(hsglvl,hsgt); } if (satmode[0] == 'y') { if (d1 - satdly > 0) delay(d1 - satdly); else delay(0.02); obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(satdly,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); delay(1.0e-5); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); decrgpulse(pwx, v1, rof1, rof1); if (d2/2.0==0.0) delay(d2); else delay(d2/2.0-2*rof1-pw); rgpulse(2.0*pw,v3,rof1,rof1); if (d2/2.0==0.0) delay(d2); else delay(d2/2.0-2*rof1-pw); delay(dly1 - gtE-gstab); zgradpulse(gzlvlE*EDratio,gtE); delay(gstab); decrgpulse(pwx,v2,rof1,rof1); rgpulse(pw, v4, rof1, rof1); zgradpulse(icosel*gzlvlE,gtE); decpower(dpwr); delay(dly2 - gtE); status(C); }
void upsdrv_initups(void) { struct termios tio; int baud = B1200; char *str; if ((str = getval("baudrate")) != NULL) { int temp = atoi(str); switch (temp) { case 300: baud = B300; break; case 600: baud = B600; break; case 1200: baud = B1200; break; case 2400: baud = B2400; break; case 4800: baud = B4800; break; case 9600: baud = B9600; break; case 19200: baud = B19200; break; case 38400: baud = B38400; break; default: fatalx(EXIT_FAILURE, "Unrecognized baudrate: %s", str); } upsdebugx(1, "baud_rate = %d", temp); } upsfd = ser_open(device_path); ser_set_speed(upsfd, device_path, baud); if (tcgetattr(upsfd, &tio) != 0) fatal_with_errno(EXIT_FAILURE, "tcgetattr(%s)", device_path); tio.c_lflag = ICANON; tio.c_iflag |= IGNCR; /* Ignore CR */ tio.c_cc[VMIN] = 0; tio.c_cc[VTIME] = 0; tcsetattr(upsfd, TCSANOW, &tio); if ((str = getval("input_timeout")) != NULL) { int temp = atoi(str); if (temp <= 0) fatalx(EXIT_FAILURE, "Bad input_timeout parameter: %s", str); input_timeout_sec = temp; } upsdebugx(1, "input_timeout = %d Sec", input_timeout_sec); if ((str = getval("output_pace")) != NULL) { int temp = atoi(str); if (temp <= 0) fatalx(EXIT_FAILURE, "Bad output_pace parameter: %s", str); output_pace_usec = temp; } upsdebugx(1, "output_pace = %d uSec", output_pace_usec); if ((str = getval("full_update_timer")) != NULL) { int temp = atoi(str); if (temp <= 0) fatalx(EXIT_FAILURE, "Bad full_update_timer parameter: %s", str); full_update_timer = temp; } upsdebugx(1, "full_update_timer = %d Sec", full_update_timer); use_crlf = testvar("use_crlf"); upsdebugx(1, "use_crlf = %d", use_crlf); use_pre_lf = testvar("use_pre_lf"); upsdebugx(1, "use_pre_lf = %d", use_pre_lf); }
pulsesequence() { double gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gt1 = getval("gt1"), gt2 = getval("gt2"), satdly = getval("satdly"), mix = getval("mix"), pwNlvl = getval("pwNlvl"), pwN = getval("pwN"), pwClvl = getval("pwClvl"), pwC = getval("pwC"), scubad = getval("scubad"); int iphase = (int) (getval("phase") + 0.5); char sspul[MAXSTR],mfsat[MAXSTR],scuba[MAXSTR], C13refoc[MAXSTR],N15refoc[MAXSTR],CNrefoc[MAXSTR]; getstr("C13refoc",C13refoc); getstr("N15refoc",N15refoc); getstr("CNrefoc",CNrefoc); getstr("mfsat",mfsat); getstr("sspul", sspul); getstr("scuba",scuba); loadtable("tnnoesy"); sub(ct,ssctr,v12); getelem(t1,v12,v1); getelem(t2,v12,v2); getelem(t3,v12,v5); getelem(t4,v12,v8); getelem(t5,v12,v9); getelem(t6,v12,oph); assign(zero,v3); assign(one,v4); if (iphase == 2) {incr(v1); incr(v2); incr(v3); incr(v4);} /* HYPERCOMPLEX MODE USES REDFIELD TRICK TO MOVE AXIAL PEAKS TO EDGE */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v6); if ((iphase==1)||(iphase==2)) {add(v1,v6,v1); add(v2,v6,v2); add(oph,v6,oph); add(v3,v6,v3); add(v4,v6,v4);} /* CHECK CONDITIONS */ if ((dm[A]=='y') || (dm[B] == 'y') || (dm[C] == 'y')) { abort_message("Set dm to be nnnn or nnny"); } if ((dm2[A]=='y') || (dm2[B] == 'y') || (dm2[C] == 'y')) { abort_message("Set dm2 to be nnnn or nnny"); } /* BEGIN THE ACTUAL PULSE SEQUENCE */ decpower(pwClvl); dec2power(pwNlvl); if (CNrefoc[A] == 'y') { decpower(pwClvl-3.0); pwC=1.4*pwC; dec2power(pwNlvl-3.0); pwN=1.4*pwN; } if (sspul[A] == 'y') { zgradpulse(gzlvl1,gt1); delay(1.0e-4); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvl1,gt1); delay(1.0e-4); } status(A); if (satmode[A] == 'y') { if (d1 > satdly) delay(d1 - satdly); if (mfsat[A] == 'y') {obsunblank(); mfpresat_on(); delay(satdly); mfpresat_off(); obsblank();} else { obspower(satpwr); rgpulse(satdly,v1,rof1,rof1); } obspower(tpwr); if (scuba[0] == 'y') { rgpulse(pw,v3,2.0e-6,0.0); rgpulse(2.0*pw,v4,2.0e-6,0.0); rgpulse(pw,v3,2.0e-6,0.0); delay(scubad/2.0); rgpulse(pw,v3,2.0e-6,0.0); rgpulse(2.0*pw,v4,2.0e-6,0.0); rgpulse(pw,v3,2.0e-6,0.0); delay(scubad/2.0); } } else delay(d1); obsstepsize(45.0); initval(7.0,v7); xmtrphase(v7); status(B); rgpulse(pw,v2,rof1,0.0); xmtrphase(zero); if (d2>0.0) { if ((C13refoc[A] == 'n') && (N15refoc[A] == 'n') && (CNrefoc[A] == 'n')) { delay(d2-4.0*pw/PI-SAPS_DELAY-rof1); } else if ((C13refoc[A] == 'n') && (N15refoc[A] == 'n') && (CNrefoc[A] == 'y')) { if (pwN > 2.0*pwC) { if (d2/2.0 > (pwN +0.64*pw+rof1)) { delay(d2/2.0-pwN-0.64*pw-SAPS_DELAY); dec2rgpulse(pwN-2.0*pwC,zero,0.0,0.0); sim3pulse(0.0,pwC,pwC, zero,zero,zero, 0.0, 0.0); sim3pulse(0.0,2.0*pwC,2.0*pwC, zero,one,zero, 0.0, 0.0); sim3pulse(0.0,pwC,pwC, zero,zero,zero, 0.0, 0.0); dec2rgpulse(pwN-2.0*pwC,zero,0.0,0.0); delay(d2/2.0-pwN-0.64*pw-rof1); } else delay(d2-4.0*pw/PI-SAPS_DELAY-rof1); } else { if (d2/2.0 > (pwN +pwC+ 0.64*pw+rof1)) { delay(d2/2.0-pwN-pwC-0.64*pw-SAPS_DELAY); decrgpulse(pwC,zero,0.0,0.0); sim3pulse(0.0,2.0*pwC,2.0*pwN, zero,one,zero, 0.0, 0.0); decrgpulse(pwC,zero,0.0,0.0); delay(d2/2.0-pwN-pwC-0.64*pw-rof1); } else delay(d2-4.0*pw/PI-SAPS_DELAY-rof1); } } else if ((C13refoc[A] == 'n') && (N15refoc[A] == 'y') && (CNrefoc[A] == 'n')) { if (d2/2.0 > (pwN + 0.64*pw+rof1)) { delay(d2/2.0-pwN-0.64*pw-SAPS_DELAY); dec2rgpulse(2.0*pwN, zero, 0.0, 0.0); delay(d2/2.0-pwN-0.64*pw-rof1); } else delay(d2-1.28*pw-SAPS_DELAY-rof1); } else if ((C13refoc[A] == 'y') && (N15refoc[A] == 'n') && (CNrefoc[A] == 'n')) { if (d2/2.0 > (2.0*pwC + 0.64*pw +rof1)) { delay(d2/2.0-2.0*pwC-0.64*pw-SAPS_DELAY); decrgpulse(pwC,zero,0.0,0.0); decrgpulse(2.0*pwC, one, 0.0, 0.0); decrgpulse(pwC,zero,0.0,0.0); delay(d2/2.0-2.0*pwC-0.64*pw-rof1); } else delay(d2-1.28*pw-SAPS_DELAY -rof1); } else { abort_message("C13refoc, N15refoc, and CNrefoc must be nnn, nny, nyn, or ynn"); } } rgpulse(pw,v5,rof1,1.0e-6); status(C); decpower(dpwr); dec2power(dpwr2); if (satmode[C] == 'y') { if (mfsat[C] == 'y') {obsunblank(); mfpresat_on(); delay(mix*0.7); mfpresat_off(); obsblank(); zgradpulse(gzlvl2,gt2); obsunblank(); mfpresat_on(); delay(mix*0.3-gt2); mfpresat_off(); obsblank();} else { obspower(satpwr); rgpulse(mix*0.7,v8,rof1,rof1); zgradpulse(gzlvl2,gt2); rgpulse(mix*0.3-gt2,v8,rof1,rof1); } obspower(tpwr); } else { delay(mix*0.7); zgradpulse(gzlvl2,gt2); delay(mix*0.3-gt2); } status(D); rgpulse(pw,v9,rof1,rof2); /* Phase cycle: .satdly(t1)..pw(t2)..d2..pw(t3)..mix(t4)..pw(t5)..at(t6) (for phase=1; for phase=2 incr t1 + t2; for TPPI add two to t1,t2,t6) t1 = 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 t2 = 2 0 2 0 2 0 2 0 3 1 3 1 3 1 3 1 2 0 2 0 2 0 2 0 3 1 3 1 3 1 3 1 t3 = 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 t4 = 3 3 1 1 0 0 2 2 0 0 2 2 1 1 3 3 3 3 1 1 0 0 2 2 0 0 2 2 1 1 3 3 t5 = 0 0 2 2 1 1 3 3 1 1 3 3 2 2 0 0 0 0 2 2 1 1 3 3 1 1 3 3 2 2 0 0 t6 = 0 2 2 0 1 3 3 1 1 3 3 1 2 0 0 2 2 0 0 2 3 1 1 3 3 1 1 3 0 2 2 0 */ }
int main ( int argc, char * argv[] ) /* main: handle options, open files */ { double tg, pr, l, crr, fa, tl, hl, t; char * scale; char * desc; double a10, a11, a20, a21; coOrd q0, q1, q2, q3, q1c, q2c; char *buffer = malloc( BUFSIZE ); FILE *fIn, *fOut; q0.x = q0.y = 0.0; if( argc != 3 ) { fprintf( stderr, "Usage: %1 nmraturnoutdata paramfile\n\n" "The data file is read line by line and turnout defimitions\n" "are created in the param file.\n\n", argv[ 0 ] ); exit( 1 ); } fIn = fopen( argv[ 1 ], "r" ); if( !fIn ) { fprintf( stderr, "Could not open the definition %s\n", argv[ 1 ] ); exit( 1 ); } fOut = fopen( argv[ 2 ], "w" ); if( !fOut ) { fprintf( stderr, "Could not create the structures in %s\n", argv[ 2 ] ); exit( 1 ); } if( fgets( buffer, BUFSIZE, fIn )) { printf( "Creating %s\n", buffer + strlen("CONTENTS " ) ); fputs( buffer, fOut ); } while(fgets(buffer, BUFSIZE, fIn )) { if( buffer[ 0 ] == '#' ) { fputs( buffer, fOut ); continue; } scale = strtok( buffer, DELIMITER ); desc = strtok( NULL, DELIMITER ); tg = atof(strtok( NULL, DELIMITER )); q1.x = getval(strtok( NULL, DELIMITER )); q1.y = getval(strtok( NULL, DELIMITER )); pr = getval(strtok( NULL, DELIMITER )); l = getval(strtok( NULL, DELIMITER )); crr = getval(strtok( NULL, DELIMITER )); fa = getval(strtok( NULL, DELIMITER )); tl = getval(strtok( NULL, DELIMITER )); hl = getval(strtok( NULL, DELIMITER )); t = floor(fa); fa = t + (fa-t)/60*100; q2.x = l-tl; q2.y = tg-tl*TAN(fa); q3.x = l+hl; q3.y = tg+hl*SIN(fa); computeCurve( q0, q1, -pr, &q1c, &a10, &a11 ); computeCurve( q1, q2, -crr, &q2c, &a20, &a21 ); fprintf( fOut, "#NMRA-Std TO %0.3f %0.3f %0.3f %0.3f %0.3f %0.3f %0.3f %0.3f\n", q1.x, q1.y, pr, l, crr, fa, tl, hl ); fprintf( fOut, "TURNOUT %s \"NMRA %s\t#%s Right\t%sR\"\n", scale, scale, desc, desc); fprintf( fOut, "\tP \"Normal\" 1\n"); fprintf( fOut, "\tP \"Reverse\" 2 3 4\n"); fprintf( fOut, "\tE 0.000000 0.000000 270.000000\n"); fprintf( fOut, "\tE %0.6f 0.000000 90.000000\n", l+hl); fprintf( fOut, "\tE %0.6f %0.6f %0.6f\n", q3.x, -q3.y, 90.0+fa); fprintf( fOut, "\tS 0 0 0.000000 0.000000 %0.6f 0.000000\n", l+hl); fprintf( fOut, "\tC 0 0 %0.6f %0.6f %0.6f %0.6f %0.6f\n", pr, q1c.x, -q1c.y, normalizeAngle(180-a10-a11), a11 ); fprintf( fOut, "\tC 0 0 %0.6f %0.6f %0.6f %0.6f %0.6f\n", crr, q2c.x, -q2c.y, normalizeAngle(180-a20-a21), a21 ); fprintf( fOut, "\tS 0 0 %0.6f %0.6f %0.6f %0.6f\n", q2.x, -q2.y, q3.x, -q3.y ); fprintf( fOut, "\tEND\n"); fprintf( fOut, "TURNOUT %s \"NMRA %s\t#%s Left\t%sL\"\n", scale, scale, desc, desc); fprintf( fOut, "\tP \"Normal\" 1\n"); fprintf( fOut, "\tP \"Reverse\" 2 3 4\n"); fprintf( fOut, "\tE 0.000000 0.000000 270.000000\n"); fprintf( fOut, "\tE %0.6f 0.000000 90.000000\n", l+hl); fprintf( fOut, "\tE %0.6f %0.6f %0.6f\n", q3.x, q3.y, 90.0-fa); fprintf( fOut, "\tS 0 0 0.000000 0.000000 %0.6f 0.000000\n", l+hl); fprintf( fOut, "\tC 0 0 %0.6f %0.6f %0.6f %0.6f %0.6f\n", -pr, q1c.x, q1c.y, a10, a11 ); fprintf( fOut, "\tC 0 0 %0.6f %0.6f %0.6f %0.6f %0.6f\n", -crr, q2c.x, q2c.y, a20, a21 ); fprintf( fOut, "\tS 0 0 %0.6f %0.6f %0.6f %0.6f\n", q2.x, q2.y, q3.x, q3.y ); fprintf( fOut, "\tEND\n"); } exit(0); }
pulsesequence() { double mixN = getval("mixN"), gzlvlC = getval("gzlvlC"), gtC = getval("gtC"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw3 = getval("zqfpw3"), zqfpwr3 = getval("zqfpwr3"), gzlvlzq3 = getval("gzlvlzq3"), mixNcorr, sweeppw = getval("sweeppw"), sweeppwr = getval("sweeppwr"); char sweepshp[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat3[MAXSTR]; int prgcycle=(int)(getval("prgcycle")+0.5); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtC = syncGradTime("gtC","gzlvlC",1.0); gzlvlC = syncGradLvl("gtC","gzlvlC",1.0); gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("sweepshp",sweepshp); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat3",zqfpat3); mixNcorr=0.0; if (getflag("Gzqfilt")) mixNcorr=getval("zqfpw3"); assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } assign(zero,v16); if (getflag("STEP")) { mod2(v17,v16); hlv(v17,v17); } hlv(v17,v1); hlv(v1,v1); hlv(v1,v1); hlv(v1,v1); mod4(v1,v1); mod4(v17,v2); add(v1,v2,v2); hlv(v17,v3); hlv(v3,v3); mod4(v3,v3); add(v1,v3,v3); dbl(v3,v4); dbl(v2,oph); add(oph,v4,oph); add(oph,v1,oph); if (!getflag("NOE")) assign(v1,oph); /* if prgflg='n' the next two steps are non-events */ add(oph,v18,oph); add(oph,v19,oph); /* if STEP='n', the next two steps are non-events */ add(oph,v16,oph); add(oph,v16,oph); add(v1,v16,v16); /*v16 is the phase of first echo pulse in steptrain */ /* example: v1=0,0,2,2 v16=0,1,2,3 oph=0,2,2,0 - if STEP='y'*/ /* v1=0,2 v16=0 oph=0,2 - if STEP='n' */ if (getflag("prgflg") && (satmode[0] == 'y')) assign(v1,v6); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v6); if (getflag("prgflg")) shaped_purge(v1,v6,v18,v19); } else { satpulse(satdly,v6,rof1,rof1); if (getflag("prgflg")) purge(v1,v6,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw,v1,rof1,rof2); if (getflag("STEP")) steptrain(v1,v16); if (getflag("NOE")) { if (selfrq != tof) obsoffset(selfrq); zgradpulse(gzlvlA,gtA); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v2,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlA,gtA); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); zgradpulse(gzlvlB,gtB); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v3,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlB,gtB); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw,v1,rof1,rof1); obspower(sweeppwr); delay(0.31*mixN); zgradpulse(gzlvlC,gtC); delay(gstab); shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(-gzlvlC,gtC); delay(0.49*mixN); zgradpulse(-gzlvlC,2*gtC); delay(gstab); if (getflag("Gzqfilt")) { obspower(zqfpwr3); rgradient('z',gzlvlzq3); delay(100.0e-6); shaped_pulse(zqfpat3,zqfpw3,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); } else shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(gzlvlC,2*gtC); delay(0.2*mixN); obspower(tpwr); rgpulse(pw,v1,rof1,rof2); } status(C); }
pulsesequence() { int i, relay; double tau; /* GET NEW PARAMETERS */ relay = (int) (getval("relay") + 0.5); tau = getval("tau"); /* CHECK CONDITIONS */ if (p1 == 0.0) p1 = pw; /* CALCULATE PHASES */ sub(ct, ssctr, v11); /* v11 = ct-ss */ initval(256.0, v12); add(v11, v12, v11); /* v11 = ct-ss+256 */ hlv(v11, v1); /* v1 = cyclops = 00112233 */ for (i = 0; i < relay + 1; i++) hlv(v1, v1); /* cyclops = 2**(relay+2) 0's, 1's, 2's, 3's */ mod4(v11, v2); /* v2 = 0123 0123... */ dbl(v2, oph); /* oph = 0202 0202 */ add(v2, v1, v2); /* v2 = 0123 0123 + cyclops */ add(oph, v1, oph); /* oph = 0202 0202 + cyclops */ hlv(v11, v3); /* v3 = 0011 2233 4455 ... */ /* PULSE SEQUENCE */ status(A); if (rof1 == 0.0) { rof1 = 1.0e-6; /* phase switching time */ rcvroff(); } hsdelay(d1); /* preparation period */ status(B); rgpulse(pw, v1, rof1, rof1); delay(d2); /* evolution period */ status(A); if (relay == 0) delay(tau); /* for delayed cosy */ rgpulse(p1, v2, rof1, rof1); /* start of mixing period */ if (relay == 0) delay(tau); /* for delayed cosy */ for (i = 0; i < relay; i++) /* relay coherence */ { hlv(v3, v3); /* v3=2**(relay+1) 0's, 1's, 2's, 3's */ dbl(v3, v4); /* v4=2**(relay+1) 0's, 2's, 0's, 2's */ add(v2, v4, v5); /* v5=v4+v2 (including cyclops) */ delay(tau/2); rgpulse(2.0*pw, v2, rof1, rof1); delay(tau/2); rgpulse(pw, v5, rof1, rof1); } status(C); delay(rof2); rcvron(); }
pulsesequence() { double slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), trim = getval("trim"), mixT = getval("mixT"), gzlvlz = getval("gzlvlz"), gtz = getval("gtz"), zfphinc = getval("zfphinc"); char slpatT[MAXSTR]; int phase1 = (int)(getval("phase")+0.5); /* LOAD AND INITIALIZE VARIABLES */ getstr("slpatT",slpatT); if (strcmp(slpatT,"mlev17c") && strcmp(slpatT,"dipsi2") && strcmp(slpatT,"dipsi3") && strcmp(slpatT,"mlev17") && strcmp(slpatT,"mlev16")) abort_message("SpinLock pattern %s not supported!.\n", slpatT); /* mod2(id2,v14); dbl(v14,v14); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); sub(ct,ssctr,v12); settable(t1,4,ph1); getelem(t1,v12,v6); settable(t2,4,ph2); getelem(t2,v12,v1); settable(t3,8,ph3); settable(t4,4,ph4); getelem(t4,v12,v13); settable(t5,4,ph5); getelem(t5,v12,v2); settable(t7,8,ph7); getelem(t7,v12,v7); settable(t8,4,ph8); getelem(t8,v12,v8); assign(v1,oph); if (getflag("zfilt")) getelem(t3,v12,oph); sub(v2, one, v3); add(two, v2, v4); add(two, v3, v5); if (phase1 == 2) {incr(v1); incr(v6);} add(v1, v14, v1); add(v6, v14, v6); add(oph,v14,oph); /* The following is for flipback pulse */ zfphinc=zfphinc+180; if (zfphinc < 0) zfphinc=zfphinc+360; initval(zfphinc,v10); /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); satpulse(satdly,v6,rof1,rof1); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw, v1, rof1, rof1); obspower(slpwrT); txphase(v13); if (d2 > 0.0) delay(d2 - rof1 - POWER_DELAY - (2*pw/PI)); else delay(d2); if (mixT > 0.0) { rgpulse(trim,v13,0.0,0.0); if (dps_flag) rgpulse(mixT,v3,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v2,v3,v4,v5, v9); } if ((getflag("zfilt")) && (getflag("PFGflg"))) { obspower(tpwr); rgpulse(pw,v7,1.0e-6,rof1); zgradpulse(gzlvlz,gtz); delay(gtz/3); if (getflag("flipback")) FBpulse(v8,v10); rgpulse(pw,v8,rof1,rof2); } else delay(rof2); status(C); }
void pulsesequence() { /* DECLARE VARIABLES */ char satflg[MAXSTR]; int t1_counter; double tau1, tau2, tau3, pw = getval("pw"), tpwr= getval("tpwr"), mix = getval("mix"), sw1 = getval("sw1"), jch = getval("jch"), pwC = getval("pwC"), pwClvl = getval("pwClvl"), pwNlvl = getval("pwNlvl"), tauCH, sw_hm1 = getval("sw_hm1"), sw_cm1 = getval("sw_cm1"), sw_cm2 = getval("sw_cm2"), pwHs = getval("pwHs"), swTilt, angle_hm1 = getval("angle_hm1"), angle_cm1 = getval("angle_cm1"), angle_cm2 = getval("angle_cm2"), cos_hm1, cos_cm1, cos_cm2, satdly= getval("satdly"), gstab = getval("gstab"), gt0 = getval("gt0"), gzlvl0 = getval("gzlvl0"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), gt3 = getval("gt3"), gzlvl3 = getval("gzlvl3"), gt4 = getval("gt4"), gzlvl4 = getval("gzlvl4"), gt5 = getval("gt5"), gzlvl5 = getval("gzlvl5"), gt6 = getval("gt6"), gzlvl6 = getval("gzlvl6"), gt7 = getval("gt7"), gzlvl7 = getval("gzlvl7"), gt8 = getval("gt8"), gzlvl8 = getval("gzlvl8"), gt9 = getval("gt9"), gzlvl9 = getval("gzlvl9"), gt10 = getval("gt10"), gzlvl10 = getval("gzlvl10"); cos_cm2=0.0; getstr("satflg", satflg); /* LOAD PHASE TABLE */ tauCH = 1.0/4.0/jch; settable(t1,1,phi1); settable(t2,2,phi2); settable(t3,4,phi3); settable(t4,8,phi4); settable(t5,8,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if (dpwr > 49) {printf("DPWR too large!" ); psg_abort(1); } if (dpwr2 > 49) {printf("DPWR2 too large!"); psg_abort(1); } /* Phases and delays related to PR-NMR */ /* sw1 is used as symbolic index */ if ( sw1 < 1000 ) { printf ("Please set sw1 to some value larger than 1000.\n"); psg_abort(1); } if (angle_hm1 < 0 || angle_cm1 < 0 || angle_hm1 > 90 || angle_cm1 > 90 ) { printf("angles must be set between 0 and 90 degree.\n"); psg_abort(1); } cos_hm1 = cos (PI*angle_hm1/180); cos_cm1 = cos (PI*angle_cm1/180); if ( (cos_hm1*cos_hm1 + cos_cm1*cos_cm1) > 1.0) { printf ("Impossible angle combinations.\n"); psg_abort(1); } else { cos_cm2 = sqrt(1 - (cos_hm1*cos_hm1 + cos_cm1*cos_cm1) ); angle_cm2 = acos(cos_cm2)*180/PI; } if (ix == 1) d2_init = d2; t1_counter = (int)((d2-d2_init)*sw1 + 0.5); swTilt = sw_hm1*cos_hm1 + sw_cm1*cos_cm1 + sw_cm2*cos_cm2; /* Note the reconstruction software assumes the indirectly determined dimension, here cm2 */ /* always have the phase change first */ if (phase1 == 1) {; } /* CC */ else if (phase1 == 2) { tsadd (t1, 1, 4); } /* SC */ else if (phase1 == 3) { tsadd (t2, 1, 4); } /* CS */ else if (phase1 == 4) { tsadd (t1, 1, 4); tsadd(t2, 1, 4); } /* SS */ if (phase2 ==1) {;} else { tsadd (t3, 1, 4); } if (t1_counter %2) { tsadd(t3, 2, 4); tsadd(t5, 2, 4); } tau1 = 1.0*t1_counter*cos_hm1/swTilt; tau2 = 1.0*t1_counter*cos_cm1/swTilt; tau3 = 1.0*t1_counter*cos_cm2/swTilt; tau1 = tau1/2.0; tau2 = tau2/2.0; tau3 = tau3/2.0; if (ix ==1 ) { printf ("Current Spectral Width:\t\t%5.2f\n", swTilt); printf ("Angle_hm1: %5.2f \n", angle_hm1); printf ("Angle_cm1: %5.2f \n", angle_cm1); printf ("Angle_cm2: %5.2f \n", angle_cm2); printf ("\n\n\n\n\n"); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); delay(d1); rcvroff(); obsoffset(satfrq); obspower(tpwr); obspwrf(4095.0); txphase(zero); decoffset(dof); decpower(pwClvl); decpwrf(4095.0); decphase(zero); dec2offset(dof2); dec2power(pwNlvl); dec2pwrf(4095.0); dec2phase(zero); /* Crush water and steady state carbon magnetization */ if (satflg[A] == 'y') { obspower(satpwr); rgpulse(satdly, zero, 20.0e-6, 2.0e-6); obspower(tpwr); } decrgpulse(pwC, zero, 2.0e-6, 2.0e-6); /*destroy C13 magnetization*/ zgradpulse(gzlvl0, gt0); delay(gstab); if (satflg[A] == 'y') { shiftedpulse("sinc", pwHs, 90.0, 0.0, zero, 2.0e-6, 2.0e-6); } decrgpulse(pwC, one, 2.0e-6, 2.0e-6); zgradpulse(0.7*gzlvl0, gt0); txphase(t1); delay(gstab); obsoffset(tof); obspower(tpwr); status(B); rgpulse(pw, t1, 2.0e-6, 2.0e-6); /* 1H pulse excitation */ if (tau1 > pwC) { delay(tau1 - pwC); decrgpulse(2.0*pwC, zero, 0.0, 0.0); delay(tau1 - pwC); } else { delay(2.0*tau1); } /* point a */ zgradpulse(gzlvl1, gt1); /* 2.0*GRADIENT_DELAY */ txphase(zero); decphase(zero); delay(tauCH - gt1 - 4.0e-6); simpulse(2.0*pw, 2.0*pwC, zero, zero, 2.0e-6, 2.0e-6); delay(tauCH -gt1 -gstab -4.0e-6); zgradpulse(gzlvl1, gt1); /* 2.0*GRADIENT_DELAY */ txphase(one); delay(gstab); /* point b */ rgpulse(pw, one, 2.0e-6, 2.0e-6); /* ======================HzCz=================== */ zgradpulse(gzlvl2, gt2); txphase(zero); decphase(t2); delay(gstab); /* ======================HzCz=================== */ decrgpulse(pwC, t2, 2.0e-6, 0.0); if ((tau2 - 2.0*pwC/PI -pw) > 0 ) { delay(tau2 - 2.0*pwC/PI - pw); rgpulse (2.0*pw, zero, 0.0, 0.0); decphase(zero); delay(tau2 - 2.0*pwC/PI - pw); } else { delay(2.0*tau2); decphase(one); delay(2.0e-6); simpulse(2.0*pw, 2.0*pwC, zero, one, 0.0, 0.0); decphase(zero); delay(2.0e-6); } decrgpulse(pwC, zero, 0.0, 2.0e-6); /* ======================HzCz=================== */ zgradpulse(gzlvl3, gt3); txphase(zero); delay(gstab); /* ======================HzCz=================== */ rgpulse(pw, zero, 2.0e-6, 2.0e-6); zgradpulse(gzlvl4, gt4); delay(tauCH - gt4 - 4.0e-6); simpulse(2.0*pw, 2.0*pwC, zero, zero, 2.0e-6, 2.0e-6); delay(tauCH - gt4 - gstab -4.0e-6); zgradpulse(gzlvl4, gt4); txphase(one); delay(gstab); rgpulse(pw, one, 2.0e-6, 2.0e-6); /* H only, beginning of NOE transfer period */ obsoffset(satfrq); decphase(zero); delay(mix - gt5 - gt6 - pwC -1.0e-3 -2.0*pwHs ); txphase(zero); shiftedpulse("sinc", pwHs, 90.0, 0.0, zero, 2.0e-6, 2.0e-6); zgradpulse(gzlvl5, gt5); delay(gstab); txphase(one); decrgpulse(pwC,zero,2.0e-6, 2.0e-6); shiftedpulse("sinc", pwHs, 90.0, 0.0, one, 2.0e-6, 2.0e-6); zgradpulse(gzlvl6, gt6); txphase(zero); delay(gstab); /* End of NOE transfer period */ /* Second HSQC step begins here */ rgpulse(pw,zero,2.0e-6,2.0e-6); zgradpulse(gzlvl7, gt7); delay(tauCH - gt7 - 4.0e-6 ); simpulse(2.0*pw, 2.0*pwC, zero, zero, 2.0e-6, 2.0e-6); delay(tauCH - gt7 - gstab -4.0e-6 ); zgradpulse(gzlvl7, gt7); txphase(one); delay(gstab); rgpulse(pw, one, 2.0e-6, 2.0e-6); /* ------------HzCz----------------- */ zgradpulse(gzlvl8, gt8); txphase(zero); decphase(t3); delay(gstab); /* ------------HzCz----------------- */ decrgpulse(pwC, t3, 2.0e-6,0.0); if ( tau3 -2.0*pwC/PI - pw > 0.0 ) { delay(tau3 - 2.0*pwC/PI - pw); rgpulse(2.0*pw, zero, 0.0, 0.0); decphase(zero); delay(tau3 - 2.0*pwC/PI - pw); } else { delay(2.0*tau3); decphase(one); delay(2.0e-6); simpulse(2*pw, 2*pwC, zero, one, 0.0, 0.0); decphase(zero); delay(2.0e-6); } decrgpulse(pwC, zero, 0.0, 2.0e-6); /* ---- HzCz ------------*/ zgradpulse(gzlvl9, gt9); txphase(t4); delay(gstab); /* ---- HzCz ------------*/ rgpulse(pw, t4, 2.0e-6, 2.0e-6); zgradpulse(gzlvl10, gt10); delay(tauCH - gt10 - 4.0e-6 ); simpulse(2.0*pw, 2.0*pwC, t4, zero, 2.0e-6, 2.0e-6); delay(tauCH - gt10 - gstab -4.0e-6 ); zgradpulse(gzlvl10, gt10); delay(gstab); rgpulse(pw, t4, 2.0e-6, rof2); /* flip-back pulse */ setreceiver(t5); decpower(dpwr); status(D); }
pulsesequence() { double del = getval("del"), gstab = getval("gstab"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), satpwr = getval("satpwr"), satdly = getval("satdly"), prgtime = getval("prgtime"), prgpwr = getval("prgpwr"), gzlvlhs = getval("gzlvlhs"), hsgt = getval("hsgt"), d3 = getval("d3"), Dtau,Ddelta,dosytimecubed, dosyfrq; char delflag[MAXSTR],satmode[MAXSTR],prg_flg[MAXSTR],alt_grd[MAXSTR], sspul[MAXSTR],lkgate_flg[MAXSTR]; getstr("delflag",delflag); getstr("satmode",satmode); getstr("prg_flg",prg_flg); getstr("alt_grd",alt_grd); getstr("lkgate_flg",lkgate_flg); getstr("sspul",sspul); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gt1 = syncGradTime("gt1","gzlvl1",0.5); gzlvl1 = syncGradLvl("gt1","gzlvl1",0.5); gt2 = syncGradTime("gt2","gzlvl2",1.0); gzlvl2 = syncGradLvl("gt2","gzlvl2",1.0); /* In pulse sequence, minimum del=4.0*pw+3*rof1+gt1+2.0*gstab */ if (del < (4*pw+3.0*rof1+gt1+2.0*gstab)) { abort_message("Dbppste error: 'del' is less than %g, too short!", (4.0*pw+3*rof1+gt1+2.0*gstab)); } Ddelta=gt1; Dtau=2.0*pw+rof1+gstab+gt1/2.0; dosyfrq = sfrq; dosytimecubed=Ddelta*Ddelta*(del-(Ddelta/3.0)-(Dtau/2.0)); putCmd("makedosyparams(%e,%e)\n",dosytimecubed,dosyfrq); /* phase cycling calculation */ mod2(ct,v1); dbl(v1,v1); hlv(ct,v2); mod2(v2,v3); dbl(v3,v3); hlv(v2,v2); mod2(v2,v4); add(v1,v4,v1); /* v1 */ hlv(v2,v2); add(v2,v3,v4); /* v4 */ hlv(v2,v2); mod2(v2,v3); dbl(v3,v5); hlv(v2,v2); mod2(v2,v3); dbl(v3,v3); /* v3 */ hlv(v2,v2); mod2(v2,v6); add(v5,v6,v5); /* v5 */ hlv(v2,v2); mod2(v2,v2); dbl(v2,v2); /* v2 */ assign(v1,oph); dbl(v2,v6); sub(oph,v6,oph); add(v3,oph,oph); sub(oph,v4,oph); dbl(v5,v6); add(v6,oph,oph); mod4(oph,oph); /*receiver phase*/ add(v1,v3,v7); add(v4,v7,v7); add(two,v7,v8); mod2(ct,v10); /* gradients change sign at odd transients */ if (ni > 1.0) { abort_message("Dbppste is a 2D, not a 3D dosy sequence: please set ni to 0 or 1"); } /* equilibrium period */ status(A); if (sspul[0]=='y') { zgradpulse(gzlvlhs,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvlhs,hsgt); } if (satmode[0] == 'y') { if (d1 - satdly > 0) delay(d1 - satdly); obspower(satpwr); txphase(zero); rgpulse(satdly,zero,rof1,rof1); obspower(tpwr); } else delay(d1); status(B); /* first part of bppdel sequence */ if (delflag[0]=='y') { if (gt1>0 && gzlvl1>0) { rgpulse(pw, v1, rof1, 0.0); /* first 90, v1 */ if (lkgate_flg[0] == 'y') lk_hold(); /* turn lock sampling off */ if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(gzlvl1,gt1/2.0); elsenz(v10); zgradpulse(-1.0*gzlvl1,gt1/2.0); endif(v10); } else zgradpulse(gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw*2.0, v2, rof1, 0.0); /* first 180, v2 */ if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(-1.0*gzlvl1,gt1/2.0); elsenz(v10); zgradpulse(gzlvl1,gt1/2.0); endif(v10); } else zgradpulse(-1.0*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw, v3, rof1, 0.0); /* second 90, v3 */ if (satmode[1] == 'y') { obspower(satpwr); rgpulse(del-4.0*pw-3.0*rof1-gt1-2.0*gstab,zero,rof1,rof1); obspower(tpwr); } else { delay(del-4.0*pw-3.0*rof1-gt1-2.0*gstab);/*diffusion delay */ } rgpulse(pw, v4, rof1, 0.0); /* third 90, v4 */ if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(gzlvl1,gt1/2.0); elsenz(v10); zgradpulse(-1.0*gzlvl1,gt1/2.0); endif(v10); } else zgradpulse(gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw*2.0, v5, rof1, rof1); /* second 180, v5 */ if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(-1.0*gzlvl1,gt1/2.0); elsenz(v10); zgradpulse(gzlvl1,gt1/2.0); endif(v10); } else zgradpulse(-1.0*gzlvl1,gt1/2.0); delay(gstab); if (prg_flg[0] == 'y') { add(one,v7,v9); obspower(prgpwr); rgpulse(prgtime, v9, rof1, rof1); obspower(tpwr); } } zgradpulse(gzlvl2,gt2); delay(gstab); rgpulse(pw*0.231,v7,rof1,rof1); delay(d3); rgpulse(pw*0.692,v7,rof1,rof1); delay(d3); rgpulse(pw*1.462,v7,rof1,rof1); delay(d3); rgpulse(pw*1.462,v8,rof1,rof1); delay(d3); rgpulse(pw*0.692,v8,rof1,rof1); delay(d3); rgpulse(pw*0.231,v8,rof1,rof1); zgradpulse(gzlvl2,gt2); delay(gstab); if (lkgate_flg[0] == 'y') lk_sample(); /* turn lock on */ } else rgpulse(pw,oph,rof1,rof2); /* --- observe period --- */ status(C); }
pulsesequence() { double tunesw; double freq; double attn,fstart,fend; int chan; double offset_sec; int np2; tunesw = getval("tunesw"); if (tunesw < 0.0) tunesw = 1.0e7; np2 = np / 2; status(A); if (find("tchan") == -1) { chan = 1; } else { chan = (int) getval("tchan"); if ((chan < 1) || (chan > 5)) abort_message("tchan (%d) must be between 1 and 5\n", chan); } switch (chan) { case 1: freq = sfrq; break; case 2: freq = dfrq; break; case 3: freq = dfrq2; break; case 4: freq = dfrq3; break; case 5: freq = dfrq4; break; default: freq = sfrq; break; } if (find("tupwr") == -1) { /* Optional parameter "tupwr" sets tune pwr */ attn = 10.0; } else { attn = getval("tupwr"); } if (attn > 10.0) attn = 10.0; fstart = freq - (tunesw/2) * 1e-6; fend = freq + (tunesw/2) * 1.0e-6; hsdelay(d1); set4Tune(chan,getval("gain")); assign(zero,oph); genPower(attn,chan); delay(0.0001); offset_sec = (0.5 / sw); SweepNOffsetAcquire(fstart, fend, np2, chan, offset_sec); }
pulsesequence() { /* DECLARE AND LOAD VARIABLES; parameters used in the last half of the */ /* sequence are declared and initialized as 0.0 in bionmr.h, and */ /* reinitialized below */ char f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ f2180[MAXSTR], /* Flag to start t2 @ halfdwell */ stCshape[MAXSTR], TROSY[MAXSTR]; /* do TROSY on N15 and H1 */ int t1_counter, /* used for states tppi in t1 */ t2_counter, /* used for states tppi in t2 */ ni = getval("ni"), ni2 = getval("ni2"); double d2_init=0.0, /* used for states tppi in t1 */ d3_init=0.0, /* used for states tppi in t2 */ tau1, /* t1 delay */ tauCH = getval("tauCH"), /* 1/4J delay for CH */ timeTN = getval("timeTN"), /* constant time for 15N evolution */ timeNCA = getval("timeNCA"), timeC = getval("timeC"), /* other delays */ tauCC = getval("tauCC"), zeta = getval("zeta"), pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ compC = getval("compC"), rf0, rfst, widthHd, pwS1, /* length of square 90 on Cab */ pwS2, /* length of square 180 on Ca */ phi7cal = getval("phi7cal"), /* phase in degrees of the last C13 90 pulse */ phshift = getval("phshift"), /* phase shift induced on CO by 180 on CA in middle of t1 */ pwNlvl = getval("pwNlvl"), /* power for N15 pulses */ pwN = getval("pwN"), /* N15 90 degree pulse length at pwNlvl */ sw1 = getval("sw1"), sw2 = getval("sw2"), waltzB1 = getval("waltzB1"), gt0 = getval("gt0"), /* other gradients */ gt3 = getval("gt3"), gt4 = getval("gt4"), gzlvl0 = getval("gzlvl0"), gzlvl3 = getval("gzlvl3"), gzlvl4 = getval("gzlvl4"); getstr("f1180",f1180); getstr("f2180",f2180); getstr("TROSY",TROSY); widthHd=2.069*(waltzB1/sfrq); /* produces same field as std. sequence */ /* LOAD PHASE TABLE */ settable(t1,2,phi1); settable(t2,4,phi2); settable(t4,1,phx); if (TROSY[A]=='y') {settable(t8,1,phy); settable(t9,1,phx); settable(t10,1,phy); settable(t11,1,phx); settable(t12,4,recT);} else {settable(t8,1,phx); settable(t9,16,phi9); settable(t10,1,phx); settable(t11,1,phy); settable(t12,8,rec);} /* INITIALIZE VARIABLES */ kappa = 5.4e-3; lambda = 2.4e-3; /* maximum fine power for pwC pulses (and initialize rfst) */ rf0 = 4095.0; rfst=0.0; if( pwC > 20.0*600.0/sfrq ) { printf("increase pwClvl so that pwC < 20*600/sfrq"); psg_abort(1); } /* 30 ppm sech/tanh inversion for Ca-Carbons */ rfst = (compC*4095.0*pwC*4000.0*sqrt((4.5*sfrq/600.0+3.85)/0.41)); rfst = (int) (rfst + 0.5); strcpy(stCshape, "stC30"); /* get calculated pulse lengths of shaped C13 pulses */ pwS1 = c13pulsepw("co", "ca", "sinc", 90.0); pwS2 = c13pulsepw("ca", "co", "square", 180.0); /* CHECK VALIDITY OF PARAMETER RANGES */ if ( gt4 > zeta - 0.6*pwC) { printf(" gt4 is too big. Make gt4 equal to %f or less.\n", (zeta - 0.6*pwC)); psg_abort(1);} if ( 0.5*ni*1/(sw1) > 2.0*timeC + tauCC - OFFSET_DELAY - SAPS_DELAY) { printf(" ni is too big. Make ni equal to %d or less.\n", ((int)((2.0*timeC - OFFSET_DELAY)*2.0*sw1))); psg_abort(1);} if ( dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' ) { printf("incorrect dec1 decoupler flags! Should be 'nnn' "); psg_abort(1);} if ( dm2[A] == 'y' || dm2[B] == 'y' ) { printf("incorrect dec2 decoupler flags! Should be 'nny' "); psg_abort(1);} if ( dm3[A] == 'y' || dm3[C] == 'y' ) { printf("incorrect dec3 decoupler flags! Should be 'nyn' or 'nnn' "); psg_abort(1);} if ( dpwr2 > 46 ) { printf("dpwr2 too large! recheck value "); psg_abort(1);} if ( pw > 20.0e-6 ) { printf(" pw too long ! recheck value "); psg_abort(1);} if ( pwN > 100.0e-6 ) { printf(" pwN too long! recheck value "); psg_abort(1);} if ( TROSY[A]=='y' && dm2[C] == 'y' ) { text_error("Choose either TROSY='n' or dm2='n' ! "); psg_abort(1);} /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ if (phase1 == 2) tsadd(t2,1,4); if (TROSY[A]=='y') { if (phase2 == 2) icosel = +1; else {tsadd(t4,2,4); tsadd(t10,2,4); icosel = -1;} } else { if (phase2 == 2) {tsadd(t10,2,4); icosel = +1;} else icosel = -1; } /* C13 TIME INCREMENTATION and set up f1180 */ /* Set up f1180 */ 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/2.0; /* Set up f2180 */ tau2 = d3; if((f2180[A] == 'y') && (ni2 > 1.0)) { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.0; } 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(t2,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(t8,2,4); tsadd(t12,2,4); } /* BEGIN PULSE SEQUENCE */ status(A); delay(d1); if (dm3[B]=='y') lk_hold(); rcvroff(); set_c13offset("ca"); obsoffset(tof); obspower(tpwr); obspwrf(4095.0); decpower(pwClvl); decpwrf(4095.0); dec2power(pwNlvl); txphase(three); delay(1.0e-5); dec2rgpulse(pwN, zero, 0.0, 0.0); /*destroy N15 and C13 magnetization*/ decrgpulse(pwC, zero, 0.0, 0.0); zgradpulse(gzlvl0, 0.5e-3); delay(1.0e-4); dec2rgpulse(pwN, one, 0.0, 0.0); decrgpulse(pwC, zero, 0.0, 0.0); zgradpulse(0.7*gzlvl0, 0.5e-3); delay(5.0e-4); if(dm3[B] == 'y') /*optional 2H decoupling on */ {dec3unblank(); dec3rgpulse(1/dmf3, one, 0.0, 0.0); dec3unblank(); setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3);} rgpulse(pw, zero, 0.0, 0.0); /* 1H pulse excitation */ txphase(zero); decphase(zero); zgradpulse(gzlvl0, gt0); /* 2.0*GRADIENT_DELAY */ decpwrf(rfst); delay(tauCH - gt0 - WFG2_START_DELAY - 0.5e-3 + 70.0e-6); simshaped_pulse("",stCshape, 2.0*pw, 1.0e-3, zero, zero, 0.0, 0.0); delay(tauCH - gt0 - 0.5e-3 + 70.0e-6 - 150.0e-6); decpwrf(rf0); zgradpulse(gzlvl0, gt0); /* 2.0*GRADIENT_DELAY */ delay(150.0e-6); rgpulse(pw, one, 0.0, 0.0); zgradpulse(gzlvl3, gt3); delay(2.0e-4); decrgpulse(pwC, t1, 0.0, 0.0); set_c13offset("co"); delay(zeta - 0.6*pwC - OFFSET_DELAY - POWER_DELAY - PWRF_DELAY - PRG_START_DELAY); h1decon("DIPSI2", widthHd, 0.0); /*POWER_DELAY+PWRF_DELAY+PRG_START_DELAY */ delay(2.0*timeC - zeta); c13pulse("co", "ca", "sinc", 90.0, t2, 0.0, 0.0); /* pwS1 */ delay(timeNCA - tau1); c13pulse("ca", "co", "sinc", 180.0, zero, 2.0e-6, 2.0e-6); sim3_c13pulse("", "co", "ca", "square", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); /* pwS2 */ delay(timeNCA + tau1 + (60.0e-6)); initval(phshift, v3); decstepsize(1.0); dcplrphase(v3); c13pulse("co", "ca", "sinc", 90.0, one, 0.0, 0.0); /* pwS1 */ delay(2.0*timeC + tauCC - OFFSET_DELAY - SAPS_DELAY - tau1); c13pulse("ca", "co", "sinc", 180.0, zero, 0.0, 0.0); delay(tauCC); sim3_c13pulse("", "co", "ca", "square", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 0.0, 60.0e-6); delay(tau1); set_c13offset("ca"); initval(phi7cal, v7); decstepsize(1.0); dcplrphase(v7); /* SAPS_DELAY */ dec2phase(t8); nh_evol_se_train("ca", "co"); /* common part of sequence in bionmr.h */ if (dm3[B] == 'y') lk_sample(); }
pulsesequence() { /* DECLARE AND LOAD VARIABLES */ char f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ C13refoc[MAXSTR], /* C13 sech/tanh pulse in middle of t1*/ Cshape[MAXSTR], /* CACO inversion 180 pulse */ water_sat[MAXSTR]; /* saturate/non-saturate water flag */ int icosel; /* used to get n and p type */ double tau1, /* t1 delay */ tpwrs, tpwrsf_d = getval("tpwrsf_d"), /* fine power adustment for first soft pulse(down)*/ tpwrsf_u = getval("tpwrsf_u"), /* fine power adustment for second soft pulse(up) */ pwHs = getval("pwHs"), /* H1 90 degree pulse length at tpwrs */ compH =getval("compH"), lambda = 1.0/(4.0*getval("JNH")), /* 1/4J H1 evolution delay */ tNH = 1.0/(4.0*getval("JNH")), /* 1/4J N15 evolution delay */ tau_cp= getval("tau_cp"), /* 1/4 of overall relaxation increment */ ncyc=getval("ncyc"), /* number of pulsed cycles in relaxT */ pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ C180pw=getval("C180pw"), C180pwr=getval("C180pwr"), /* 13C decoupling pulse parameters */ compN = getval("compN"), /* adjustment for N15 amplifier compression */ compC = getval("compC"), /* adjustment for C13 amplifier compression */ pwNlvl = getval("pwNlvl"), /* power for N15 pulses */ pwN = getval("pwN"), /* N15 90 degree pulse length at pwNlvl */ sw1 = getval("sw1"), gt1 = getval("gt1"), gt2 = getval("gt2"), /* coherence pathway gradients */ gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gt0 = getval("gt0"), /* other gradients */ gt3 = getval("gt3"), gt4 = getval("gt4"), gt5 = getval("gt5"), gt6 = getval("gt6"), gt7 = getval("gt7"), gstab = getval("gstab"), gzlvl0 = getval("gzlvl0"), gzlvl3 = getval("gzlvl3"), gzlvl4 = getval("gzlvl4"), gzlvl5 = getval("gzlvl5"), gzlvl6 = getval("gzlvl6"), gzlvl7 = getval("gzlvl7"); getstr("f1180",f1180); getstr("C13refoc",C13refoc); getstr("Cshape",Cshape); getstr("water_sat",water_sat); tpwrs = tpwr - 20.0*log10(pwHs/(compH*pw*1.69)); /*needs 1.69 times more*/ tpwrs = (int) (tpwrs); /*power than a square pulse */ if (tpwrsf_d<4095.0) tpwrs=tpwrs+6.0; /* add 6dB to let tpwrsf_d control fine power ~2048*/ /* LOAD PHASE TABLE */ settable(t1,4,phi1); settable(t2,4,phi2); settable(t3,4,phi3); settable(t10,1,phi10); settable(t31,4,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' )) { text_error("incorrect dec1 decoupler flags! Should be 'nnn' "); psg_abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y')) { text_error("incorrect dec2 decoupler flags! Should be 'nny' "); psg_abort(1); } if( dpwr2 > 50 ) { text_error("don't fry the probe, DPWR2 too large! "); psg_abort(1); } if( pw > 50.0e-6 ) { text_error("dont fry the probe, pw too high ! "); psg_abort(1); } if( pwN > 100.0e-6 ) { text_error("dont fry the probe, pwN too high ! "); psg_abort(1); } /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ icosel = -1; if (phase1 == 1) {tsadd(t10,2,4); icosel = +1;} /* Set up f1180 */ 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/2.0; /* Calculate modifications to phases for States-TPPI acquisition */ if(d2_index % 2) { tsadd(t1,2,4); tsadd(t31,2,4); } /* BEGIN PULSE SEQUENCE */ status(A); obspower(tpwr); decpower(pwClvl); dec2power(pwNlvl); txphase(zero); decphase(zero); dec2phase(zero); delay(d1); status(B); dec2rgpulse(pwN, zero, 0.0, 0.0); /*destroy N15 magnetization*/ zgradpulse(gzlvl0, 0.5e-3); delay(1.0e-4); rgpulse(pw,zero,rof1,rof1); /* 1H pulse excitation */ delay(gstab); zgradpulse(gzlvl0, gt0); delay(lambda - gt0 -gstab); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); txphase(one); delay(lambda - gt0 -gstab); zgradpulse(gzlvl0, gt0); delay(gstab); rgpulse(pw, one, rof1, rof1); /* on NzHz now */ if(water_sat[A]=='n') /* water to -Z */ { obspower(tpwrs); obspwrf(tpwrsf_d); shaped_pulse("H2osinc",pwHs,two,rof1,rof1); obspower(tpwr); obspwrf(4095.0); } /* purge */ zgradpulse(gzlvl3, gt3); delay(gstab); /* HzNz-> Nz */ dec2rgpulse( pwN, zero, 0.0, 0.0); delay(gstab); zgradpulse(gzlvl6, gt0); delay(lambda - gt0 -gstab); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); dec2phase(t3); delay(lambda - gt0 -gstab); zgradpulse(gzlvl6, gt0); delay(gstab); dec2rgpulse( pwN, t3, 0.0, 0.0); /* purge */ zgradpulse(gzlvl7, gt7); dec2phase(t3); delay(gstab); /* T1 relaxation delay */ if(ncyc > 0) { initval(ncyc,v4); loop(v4,v5); initval(2.0,v8); loop(v8,v9); if(water_sat[A]=='n') /* water to +Z */ { delay(tau_cp-pw -rof1 -pwHs - 2.0*rof1-2.0*POWER_DELAY-WFG_START_DELAY -WFG_STOP_DELAY ); obspower(tpwrs); obspwrf(tpwrsf_d); shaped_pulse("H2osinc",pwHs,two,rof1,rof1); obspower(tpwr); obspwrf(4095.0); rgpulse(2.0*pw, zero, rof1, rof1); obspower(tpwrs); obspwrf(tpwrsf_u); shaped_pulse("H2osinc",pwHs,two,rof1,rof1); obspower(tpwr); delay(tau_cp-pw -rof1 -pwHs - 2.0*rof1-2.0*POWER_DELAY-WFG_START_DELAY -WFG_STOP_DELAY ); } else /* just don't bother about water */ { delay(tau_cp-pw -rof1); rgpulse(2.0*pw, zero, rof1, rof1); delay(tau_cp-pw -rof1); } endloop(v9); /* repeat two times */ endloop(v5); } /* 15N evolution, t1 */ txphase(zero); dec2phase(t1); dec2rgpulse( pwN, t1, 0.0, 0.0); delay(tau1); rgpulse(2.0*pw, zero, 0.0, 0.0); if(C13refoc[A]=='y') { decpower(C180pwr); decshaped_pulse(Cshape, C180pw, zero, 0.0, 0.0); decpower(pwClvl); } delay(tau1); /* coding */ delay(lambda -gt1 -gstab -2.0*POWER_DELAY - C180pw); if(C13refoc[A]!='y') delay(2.0*POWER_DELAY + C180pw); zgradpulse(-icosel*gzlvl1, gt1); delay(gstab); dec2rgpulse(2.0*pwN, zero, 0.0, 0.0); rgpulse(2.0*pw, zero, 0.0, 0.0); zgradpulse(icosel*gzlvl1, gt1); delay(gstab); /* 2.0*GRADIENT_DELAY */ delay(lambda -gt1 -gstab); dec2phase(t10); /* reverse INEPT */ sim3pulse(pw, 0.0, pwN, zero, zero, t10, 0.0, 0.0); txphase(zero); dec2phase(zero); delay(gstab); zgradpulse(gzlvl4, gt5); delay(lambda -gt5 -gstab); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); txphase(one); dec2phase(one); delay(lambda - gt5 -gstab); zgradpulse(gzlvl4, gt5); delay(gstab); sim3pulse(pw, 0.0, pwN, one, zero, one, 0.0, 0.0); txphase(zero); dec2phase(zero); delay(gstab); zgradpulse( gzlvl5, gt5); delay(lambda - gt5 -gstab); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); delay(lambda - gt5 -gstab); zgradpulse(gzlvl5, gt5); delay(gstab); rgpulse(pw, zero, 0.0, 0.0); delay(gt2 +gstab - 0.65*pw + 2.0*GRADIENT_DELAY + 2.0*POWER_DELAY); rgpulse(2.0*pw, zero, rof1, rof1); dec2power(dpwr2); decpower(dpwr); /* POWER_DELAY */ zgradpulse( gzlvl2, gt2); /* 2.0*GRADIENT_DELAY */ delay(gstab -10.0e-6); statusdelay(C,10.0e-6); setreceiver(t31); }
pulsesequence() { // Define Variables and Objects and Get Parameter Values SHAPE p1 = getpulse("90H",0.0,0.0,1,0); strncpy(p1.pars.ch,"dec",3); putCmd("chH90='dec'\n"); p1.pars.array = disarry("xx", p1.pars.array); p1 = update_shape(p1,0.0,0.0,1); MPSEQ ph = getpmlgxmx("pmlgH",0,0.0,0.0,1,0); strncpy(ph.ch,"dec",3); putCmd("chHpmlg='dec'\n"); double pwHpmlg = getval("pwHpmlg"); ph.nelem = (int) (d2/(2.0*pwHpmlg) + 0.1); ph.array = disarry("xx", ph.array); ph = update_mpseq(ph,0,p1.pars.phAccum,p1.pars.phInt,1); SHAPE p2 = getpulse("90H",0.0,0.0,2,0); strncpy(p2.pars.ch,"dec",3); putCmd("chH90='dec'\n"); p2.pars.array = disarry("xx", p2.pars.array); p2 = update_shape(p2,ph.phAccum,ph.phInt,2); double pwX180 = getval("pwX180"); double d22 = ph.t/2.0 - pwX180/2.0; if (d22 < 0.0) d22 = 0.0; // CP hx and DSEQ dec Return to the Reference Phase CP hx = getcp("HX",0.0,0.0,0,1); strncpy(hx.fr,"dec",3); strncpy(hx.to,"obs",3); putCmd("frHX='dec'\n"); putCmd("toHX='obs'\n"); DSEQ dec = getdseq("H"); strncpy(dec.t.ch,"dec",3); putCmd("chHtppm='dec'\n"); strncpy(dec.s.ch,"dec",3); putCmd("chHspinal='dec'\n"); // Set Constant-time Period for d2. if (d2_index == 0) d2_init = getval("d2"); double d2_ = (ni - 1)/sw1 + d2_init; putCmd("d2acqret = %f\n",roundoff(d2_,12.5e-9)); putCmd("d2dwret = %f\n",roundoff(1.0/sw1,12.5e-9)); //-------------------------------------- // Copy Current Parameters to Processed //------------------------------------- putCmd("groupcopy('current','processed','acquisition')"); // Dutycycle Protection DUTY d = init_dutycycle(); d.dutyon = p1.pars.t + d2_ + p2.pars.t + getval("pwH90") + getval("pwHtilt") + getval("tHX"); d.dutyoff = d1 + 4.0e-6 + getval("tHmix"); d.c1 = d.c1 + (!strcmp(dec.seq,"tppm")); d.c1 = d.c1 + ((!strcmp(dec.seq,"tppm")) && (dec.t.a > 0.0)); d.t1 = getval("rd") + getval("ad") + at; d.c2 = d.c2 + (!strcmp(dec.seq,"spinal")); d.c2 = d.c2 + ((!strcmp(dec.seq,"spinal")) && (dec.s.a > 0.0)); d.t2 = getval("rd") + getval("ad") + at; d = update_dutycycle(d); abort_dutycycle(d,10.0); // Set Phase Tables settable(ph1H90,4,table1); settable(phHpmlg,4,table2); settable(ph2H90,4,table3); settable(ph3H90,4,table4); settable(phHtilt,4,table5); settable(phXhx,4,table6); settable(phHhx,4,table7); settable(phRec,4,table8); //Add STATES TPPI ("States with "FAD") tsadd(phRec,2*d2_index,4); if (phase1 == 2) { tsadd(ph2H90,2*d2_index+3,4); } else { tsadd(ph2H90,2*d2_index,4); } setreceiver(phRec); // Begin Sequence txphase(phXhx); decphase(ph1H90); obspwrf(getval("aX180")); decpwrf(getval("aH90")); obsunblank();decunblank(); _unblank34(); delay(d1); sp1on(); delay(2.0e-6); sp1off(); delay(2.0e-6); // Offset H Preparation with a Tilt Pulse _shape(p1,ph1H90); // Offset SAMn Spinlock on H During F1 with Optional pwX180 _mpseqon(ph,phHpmlg); delay(d22); rgpulse(pwX180,zero,0.0,0.0); obspwrf(getval("aX90")); txphase(phXhx); delay(d22); _mpseqoff(ph); // Offset 90-degree Pulse to Zed and Spin-Diffusion Mix _shape(p2,ph2H90); decpwrf(getval("aH90")); delay(getval("tHmix")); // H90, 35-degree Tilt and H-to-X Cross Polarization with LG Offset decrgpulse(getval("pwH90"),ph3H90,0.0,0.0); decunblank(); decrgpulse(getval("pwHtilt"),phHtilt,0.0,0.0); decphase(phHhx); _cp_(hx,phHhx,phXhx); // Begin Acquisition obsblank(); _blank34(); _dseqon(dec); delay(getval("rd")); startacq(getval("ad")); acquire(np, 1/sw); endacq(); _dseqoff(dec); obsunblank(); decunblank(); _unblank34(); }
void pulsesequence() { // Set the Maximum Dynamic Table and v-var Numbers settablenumber(10); setvvarnumber(30); // Define Variables and Objects and Get Parameter Values double aXprep1 = getval("aXprep1"); // Define Tilted Pulses using "prep1X". double pw1Xprep1 = getval("pw1Xprep1"); double pw2Xprep1 = getval("pw2Xprep1"); double phXprep1 = getval("phXprep1"); WMPA wpmlg = getwpmlg("wpmlgX"); strncpy(wpmlg.ch,"obs",3); putCmd("chXwpmlg='obs'\n"); //-------------------------------------- // Copy Current Parameters to Processed //------------------------------------- putCmd("groupcopy('current','processed','acquisition')"); // Dutycycle Protection DUTY d = init_dutycycle(); d.dutyon = getval("pw1Xprep1") + getval("pw2Xprep1") + 2.0*wpmlg.q*wpmlg.cycles*wpmlg.pw; d.dutyoff = d1 + 4.0e-6 + 5.0e-6 + wpmlg.r1 + wpmlg.r2 + at - 2.0*wpmlg.q*wpmlg.cycles*wpmlg.pw; d = update_dutycycle(d); abort_dutycycle(d,10.0); // Set Phase Tables settable(ph1Xprep1,4,table1); settable(ph2Xprep1,4,table2); settable(phXwpmlg,4,table3); settable(phRec,4,table4); setreceiver(phRec); // Set the Small-Angle Step double obsstep = 360.0/(PSD*8192); obsstepsize(obsstep); int phfXprep1 = initphase(phXprep1, obsstep); int phXzero = initphase(0.0, obsstep); // Begin Sequence xmtrphase(phfXprep1); txphase(ph1Xprep1); obspwrf(aXprep1); obsunblank(); decunblank(); _unblank34(); delay(d1); sp1on(); delay(2.0e-6); sp1off(); delay(2.0e-6); // Tilted Preparation Pulse for FSLG or PMLG "prep1X" startacq(5.0e-6); rcvroff(); delay(wpmlg.r1); rgpulse(pw1Xprep1, ph1Xprep1, 0.0, 0.0); rgpulse(pw2Xprep1, ph2Xprep1, 0.0, 0.0); xmtrphase(phXzero); delay(wpmlg.r2); // Apply WPMLG Cycles decblank(); _blank34(); _wpmlg(wpmlg, phXwpmlg); endacq(); obsunblank(); decunblank(); _unblank34(); }
pulsesequence() { /* DECLARE VARIABLES */ char autocal[MAXSTR], /* auto-calibration flag */ fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ f2180[MAXSTR], /* Flag to start t2 @ halfdwell */ c180_flg[MAXSTR], codecseq[MAXSTR], mess_flg[MAXSTR], ch_shp1[MAXSTR], /* shape for the 1st purge CHIRP */ ch_shp2[MAXSTR], /* shape for the 2nd purge CHIRP */ chshpi[MAXSTR]; /* shape for the INEPT CHIRPs */ int phase, phase2, t1_counter, /* used for states tppi in t1 */ t2_counter; /* used for states tppi in t2 */ double tau1, /* t1 delay */ tau2, /* t2 delay */ ni2, mix, /* mixing time in seconds */ pwC, /* PW90 for c nucleus @ pwClvl */ pwcodec, /* PW for C' nucleus @ dpwrco seduce dec */ tsatpwr, /* low level 1H trans.power for presat */ pwClvl, /* power level for 13C pulses on dec1 */ dpwrco, /* power level for C' seduce decoupling */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ tofps, /* tof for presat */ dressed, /* decoupler resolution for seduce decoupling */ tpwrmess, /* power level for Messerlie purge */ dly_pg1, /* duration of first part of purge */ dly_wt, taua1, /* Delay for the first purge CHIRP */ taua2, /* Delay for the second purge CHIRP */ pwchirp1, /* duration of the 1st purge CHIRP */ pwchirp2, /* duration of the 2nd purge CHIRP */ d_me1, /* time difference between start of the sweep and the excitation of the methyl region automatically calculated by the program necessary parameter diff (see below) */ d_me2, /* time difference between start of the sweep and the excitation of the methyl region automatically calculated by the program necessary parameter diff (see below) */ dchrp1, /* power for the 1st purge CHIRP pulse, only lower limit is important (see above!) */ dchrp2, /* power for the 2nd purge CHIRP pulse, only lower limit is important (see above!) */ dmfchp1, /* dmf (1/90) for the 1st purge CHIRP pulse dmfchp1 = 1/time_step of chirp-pulse [time_step = pwchirp1/no. of points in the .DEC-shape] */ dmfchp2, /* dmf (1/90) for the 1st purge CHIRP pulse dmfchp2 = 1/time_step of chirp-pulse [time_step = pwchirp2/no. of points in the .DEC-shape] */ dres_chp, /* dres for the chirp pulse (must be set to 90, otherwise timing errors! ) */ diff1, /* shift differences between methyl region and start of sweep */ diff2, /* shift differences between methyl region and start of sweep */ rate1, /* sweep rate of the 1st purge CHIRP pulse frequency sweep/pwchirp1 */ rate2, /* sweep rate of the 2nd purge CHIRP pulse frequency sweep/pwchirp2 */ dchrpi, dmfchpi, pwchirpi, /* INEPT CHIRP duration */ ratei, diffi, tauf, d_mei, compC, /* C-13 RF calibration parameters */ pwrcor = 0.0, gt0, gt1, gt2, gt3, gt4, gt5, gt8, gt9, gt10, gt11, gstab, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl8, gzlvl9, gzlvl10, gzlvl11; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("autocal",autocal); getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("fscuba",fscuba); getstr("c180_flg",c180_flg); getstr("mess_flg",mess_flg); tofps = getval("tofps"); mix = getval("mix"); pwC = getval("pwC"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); pwClvl = getval("pwClvl"); dpwr = getval("dpwr"); dpwr2 = getval("dpwr2"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); ni2 = getval("ni2"); tpwrmess = getval("tpwrmess"); dly_pg1 = getval("dly_pg1"); dly_wt = getval("dly_wt"); taua1 = getval("taua1"); taua2 = getval("taua2"); rate1 = getval("rate1"); rate2 = getval("rate2"); diff1 = getval("diff1"); diff2 = getval("diff2"); diffi = getval("diffi"); ratei = getval("ratei"); tauf = getval("tauf"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt8 = getval("gt8"); gt9 = getval("gt9"); gt10 = getval("gt10"); gt11 = getval("gt11"); gstab = getval("gstab"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl8 = getval("gzlvl8"); gzlvl9 = getval("gzlvl9"); gzlvl10 = getval("gzlvl10"); gzlvl11 = getval("gzlvl11"); if(autocal[0]=='n') { getstr("codecseq",codecseq); dressed = getval("dressed"); pwcodec = getval("pwcodec"); dpwrco = getval("dpwrco"); getstr("ch_shp1",ch_shp1); getstr("ch_shp2",ch_shp2); pwchirp1 = getval("pwchirp1"); pwchirp2 = getval("pwchirp2"); dchrp1 = getval("dchrp1"); dchrp2 = getval("dchrp2"); dmfchp1 = getval("dmfchp1"); dmfchp2 = getval("dmfchp2"); dres_chp = getval("dres_chp"); getstr("chshpi",chshpi); dchrpi = getval("dchrpi"); dmfchpi = getval("dmfchpi"); pwchirpi = getval("pwchirpi"); } else { strcpy(codecseq,"Psed_108p"); strcpy(ch_shp1,"Pwurst180_1"); strcpy(ch_shp2,"Pwurst180_2"); strcpy(chshpi,"Pwurst180i"); if (FIRST_FID) { compC = getval("compC"); codec = pbox(codecseq, CODEC, CODECps, dfrq, compC*pwC, pwClvl); chirp1 = pbox(ch_shp1, CHIRP1, CHIRPps, dfrq, compC*pwC, pwClvl); chirp2 = pbox(ch_shp2, CHIRP2, CHIRPps, dfrq, compC*pwC, pwClvl); chirpi = pbox(chshpi, CHIRPi, CHIRPps, dfrq, compC*pwC, pwClvl); } dpwrco = codec.pwr; pwcodec = 1.0/codec.dmf; dressed = codec.dres; dchrp1 = chirp1.pwr; dmfchp1 = chirp1.dmf; pwchirp1 = chirp1.pw; dres_chp = chirp1.dres; dchrp2 = chirp1.pwr; dmfchp2 = chirp2.dmf; pwchirp2 = chirp2.pw; dchrpi = chirpi.pwr; dmfchpi = chirpi.dmf; pwchirpi = chirpi.pw; pwrcor = pwClvl - dchrp1 - 6.0; /* use more power for adiabatic pulses, if available */ if(pwrcor > 3.0) pwrcor = 3.0; else if (pwrcor < 0.0) pwrcor = 0.0; dchrp1 = dchrp1 + pwrcor; dchrp2 = dchrp2 + pwrcor; pwrcor = pwClvl - dchrpi - 4.0; if(pwrcor > 2.0) pwrcor = 2.0; else if (pwrcor < 0.0) pwrcor = 0.0; dchrpi = dchrpi + pwrcor; } /* LOAD PHASE TABLE */ settable(t1,8,phi1); settable(t2,16,phi2); settable(t4,16,rec); settable(t5,4,phi5); settable(t6,2,phi6); settable(t7,4,phi7); /* CHECK VALIDITY OF PARAMETER RANGES */ if((dm[A] == 'y' || dm[B] == 'y' )) { printf("incorrect dec1 decoupler flags! "); psg_abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y')) { printf("incorrect dec2 decoupler flags! Should be 'nnn' "); psg_abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); psg_abort(1); } if( dpwr > 50 ) { printf("don't fry the probe, DPWR too large! "); psg_abort(1); } if( dpwrco > 50 ) { printf("don't fry the probe, dpwrco too large! "); psg_abort(1); } if( dpwr2 > 46 ) { printf("don't fry the probe, DPWR2 too large! "); psg_abort(1); } if( pw > 200.0e-6 ) { printf("dont fry the probe, pw too high ! "); psg_abort(1); } if( pwC > 200.0e-6 ) { printf("dont fry the probe, pwC too high ! "); psg_abort(1); } if( pwcodec < 300.0e-6 ) { printf("dont fry the probe, pwcodec too high ! "); psg_abort(1); } if ( tpwrmess > 56 ) { printf("dont fry the probe, tpwrmess too high ! "); psg_abort(1); } if ( dly_pg1 > 0.010) { printf("dont fry the probe, dly_pg1 too long ! "); psg_abort(1); } if( gt0 > 15e-3 || gt1 > 15e-3 || gt2 > 15e-3 || gt3 > 15e-3 || gt4 > 15e-3 || gt5 > 15e-3 || gt8 > 15e-3 || gt9 > 15e-3 || gt10 > 15e-3 || gt11 > 15e-3 ) { printf("gti values < 15e-3\n"); psg_abort(1); } if( gzlvl3*gzlvl4 > 0.0 ) { printf("gt3 and gt4 must be of opposite sign \n"); printf("for optimal water suppression\n"); psg_abort(1); } if( dchrp1 > 60 ) { printf("don't fry the probe, dchrp1 too large! "); psg_abort(1); } if( dchrp2 > 60 ) { printf("don't fry the probe, dchrp2 too large! "); psg_abort(1); } if( pwchirp1 > 10.e-03 ) { printf("don't fry the probe, pwchirp1 too large! "); psg_abort(1); } if( pwchirp2 > 10.e-03 ) { printf("don't fry the probe, pwchirp2 too large! "); psg_abort(1); } d_me1 = diff1/rate1 ; d_me2 = diff2/rate2 ; if( d_me1 > 10.e-03 ) { printf("don't fry the probe, d_me1 too large \n"); printf(" (must be less than 10 msec)! "); psg_abort(1); } if( d_me2 > 10.e-03 ) { printf("don't fry the probe, d_me2 too large \n"); printf(" (must be less than 10 msec)! "); psg_abort(1); } if( d_me1 > pwchirp1 ) { printf("impossible; d_me1 > pwchirp1 ! "); psg_abort(1); } if( d_me2 > pwchirp2 ) { printf("impossible; d_me2 > pwchirp2 ! "); psg_abort(1); } if( dchrpi > 60 ) { printf("dont fry the probe, dchrpi too large\n"); psg_abort(1); } if(pwchirpi > 10.0e-3) { printf("don't fry the probe, pwchirpi too large! "); psg_abort(1); } d_mei = diffi/ratei; /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t1,1,4); if (phase2 == 2) tsadd(t2,1,4); /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) - 4.0/PI*pw - 2.0e-6 ); } else tau1 = tau1 - 4.0/PI*pw - 2.0e-6; if(tau1 < 0.2e-6) tau1 = 2.0e-7; /* Set up f2180 tau2 = t2 */ tau2 = d3; if(f2180[A] == 'y') { tau2 += ( 1.0 / (2.0*sw2) - (4.0/PI)*pwC - 2.0*pw - PRG_START_DELAY - PRG_STOP_DELAY - 2.0*POWER_DELAY - 4.0e-6); } else tau2 = tau2 - ((4.0/PI)*pwC + 2.0*pw + PRG_START_DELAY + PRG_STOP_DELAY + 2.0*POWER_DELAY + 4.0e-6); if(tau2 < 0.2e-6) tau2 = 4.0e-7; 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(t4,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(t4,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); delay(5.0e-6); obspower(tsatpwr); /* Set transmitter power for 1H presaturation */ decpower(pwClvl); /* Set Dec1 power for hard 13C pulses */ delay(5.0e-6); /* Presaturation Period */ if (mess_flg[A] == 'y') { obsoffset(tofps); obspower(tpwrmess); txphase(zero); rgpulse(dly_pg1,zero,2.0e-6,2.0e-6); txphase(one); rgpulse(dly_pg1/1.62,one,2.0e-6,2.0e-6); obspower(tsatpwr); } if (fsat[0] == 'y') { obsoffset(tofps); delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presat */ obspower(tpwr); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); if(fscuba[0] == 'y') { delay(2.2e-2); rgpulse(pw,zero,2.0e-6,0.0); rgpulse(2*pw,one,2.0e-6,0.0); rgpulse(pw,zero,2.0e-6,0.0); delay(2.2e-2); } } else { delay(d1); } obspower(tpwr); /* Set transmitter power for hard 1H pulses */ obsoffset(tof); decphase(zero); /* Begin Pulses */ status(B); rcvroff(); delay(10.0e-6); rgpulse(pw,t6,4.0e-6,0.0); /* 90 deg 1H pulse */ txphase(zero); decphase(zero); delay(2.0e-6); zgradpulse(gzlvl8,gt8); delay(gstab); delay(taua1 - gt8 - gstab -2.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_me1); /* 1st purge CHIRP inversion on */ decpower(dchrp1); /* Set power for 1st purge CHIRP inversion */ delay(4.0e-6); decprgon(ch_shp1,1.0/dmfchp1,dres_chp); decon(); delay(d_me1); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirp1 - d_me1 - 2*pw); decoff(); decprgoff(); /* chirp inversion off */ delay(2.0e-6); zgradpulse(gzlvl8,gt8); delay(gstab); delay(taua1 + 2*pw - (pwchirp1 - d_me1) - PRG_STOP_DELAY - gt8 - gstab -2.0e-6); rgpulse(pw,zero,0.0,0.0); txphase(t7); delay(2.0e-6); zgradpulse(gzlvl9,gt9); delay(2.0*gstab); rgpulse(pw,t7,0.0,0.0); /* PHASE t7 = 2(x),2(-x)*/ delay(2.0e-6); zgradpulse(gzlvl11,gt11); delay(gstab); decphase(zero); txphase(zero); delay(taua2 - gt11 - gstab -2.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_me2); /* Second chirp inversion on */ decpower(dchrp2); /* Set power for chirp inversion */ delay(4.0e-6); decprgon(ch_shp2,1.0/dmfchp2,dres_chp); decon(); delay(d_me2); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirp2 - d_me2 - 2*pw); decoff(); decprgoff(); /* Second purge CHIRP off */ delay(2.0e-6); zgradpulse(gzlvl11,gt11); delay(gstab); txphase(zero); delay(taua2 + 2*pw - (pwchirp2 - d_me2) - PRG_STOP_DELAY - gt11 - gstab -2.0e-6 ); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl10,gt10); delay(2.0*gstab); rgpulse(pw,t1,4.0e-6,0.0); delay(tau1); rgpulse(pw,zero,2.0e-6,0.0); delay(mix - 10.0e-3); delay(2.0e-6); zgradpulse(gzlvl0,gt0); decpower(pwClvl); /* Set power for hard pulses */ delay(4.0e-6); decrgpulse(pwC,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl1,gt1); delay(2.0e-6); decphase(zero); delay(10.0e-3 - gt1 - gt0 - 8.0e-6); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl2,gt2); delay(gstab); decphase(zero); delay(tauf - gt2 - gstab -2.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_mei); /* INEPT CHIRP inversion on */ decpower(dchrpi); /* Set power for chirp inversion */ delay(4.0e-6); decprgon(chshpi,1.0/dmfchpi,dres_chp); decon(); delay(d_mei); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirpi - d_mei - 2*pw); decoff(); decprgoff(); /* chirp inversion off */ delay(2.0e-6); zgradpulse(gzlvl2,gt2); delay(gstab); txphase(one); delay(tauf + 2*pw - (pwchirpi - d_mei) - PRG_STOP_DELAY - gt2 - gstab -2.0e-6 ); rgpulse(pw,one,0.0,0.0); txphase(zero); decphase(t2); decpower(pwClvl); /* Set power for C13 hard pulse */ delay(2.0e-6); zgradpulse(gzlvl3,gt3); delay(200.0e-6); decrgpulse(pwC,t2,0.0,0.0); decphase(zero); if( c180_flg[A] == 'n' ) { delay(2.0e-6); /* CO decoupling on */ decpower(dpwrco); decprgon(codecseq,pwcodec,dressed); decon(); /* CO decoupling on */ delay(tau2); rgpulse(2*pw,zero,0.0,0.0); delay(tau2); /* CO decoupling off */ decoff(); decprgoff(); decpower(pwClvl); /* CO decoupling off */ delay(2.0e-6); } else simpulse(2*pw,2*pwC,zero,zero,2.0e-6,2.0e-6); decrgpulse(pwC,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl4,gt4); delay(200.0e-6); rgpulse(pw,t5,2.0e-6,0.0); txphase(zero); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(gstab); decphase(zero); delay(tauf - gt5 - gstab -2.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_mei); /* 2nd INEPT CHIRP inversion on */ decpower(dchrpi); /* Set power for chirp inversion */ delay(4.0e-6); decprgon(chshpi,1.0/dmfchpi,dres_chp); decon(); delay(d_mei); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirpi - d_mei - 2*pw); decoff(); decprgoff(); /* chirp inversion off */ delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(gstab); decpower(dpwr); /* Set power for decoupling */ txphase(t5); delay(tauf + 2*pw - (pwchirpi - d_mei) - PRG_STOP_DELAY - gt5 - gstab -2.0e-6 - 2*POWER_DELAY); rgpulse(pw,t5,0.0,rof2); /* BEGIN ACQUISITION */ status(C); setreceiver(t4); }
pulsesequence() { char shname1[MAXSTR], f1180[MAXSTR], f2180[MAXSTR], n15_flg[MAXSTR]; int icosel, t1_counter, t2_counter, ni2 = getval("ni2"), phase; double d2_init=0.0, d3_init=0.0, pwS1,pwS2,pwS3,pwS4,pwS5,pwS6, kappa, lambda = getval("lambda"), gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gzlvl4 = getval("gzlvl4"), gzlvl5 = getval("gzlvl5"), gzlvl6 = getval("gzlvl6"), gt1 = getval("gt1"), gt2 = getval("gt2"), gt4 = getval("gt4"), gt5 = getval("gt5"), gt6 = getval("gt6"), gstab = getval("gstab"), scale = getval("scale"), sw1 = getval("sw1"), tpwrsf = getval("tpwrsf"), shlvl1, shpw1 = getval("shpw1"), pwC = getval("pwC"), pwClvl = getval("pwClvl"), pwNlvl = getval("pwNlvl"), pwN = getval("pwN"), dpwr2 = getval("dpwr2"), d2 = getval("d2"), t2a,t2b,halfT2, t1a,t1b,halfT1, shbw = getval("shbw"), shofs = getval("shofs")-4.77, timeCN = getval("timeCN"), timeTN = getval("timeTN"), timeTN1 = getval("timeTN1"), tauC = getval("tauC"), tau1 = getval("tau1"), tau2 = getval("tau2"), taunh = getval("taunh"); getstr("shname1", shname1); getstr("f1180",f1180); getstr("f2180",f2180); getstr("n15_flg",n15_flg); phase = (int) (getval("phase") + 0.5); settable(t1,2,phi1); settable(t2,8,phi2); settable(t3,1,phi3); settable(t4,4,phi4); settable(t5,1,phi5); settable(t14,8,phi14); settable(t24,8,phi24); /* INITIALIZE VARIABLES */ kappa = 5.4e-3; //shpw1 = pw*8.0; shlvl1 = tpwr; f1180[0] ='n'; f2180[0] ='n'; pwS1 = c13pulsepw("co", "ca", "sinc", 90.0); pwS2 = c13pulsepw("co", "ca", "sinc", 180.0); pwS3 = c13pulsepw("ca", "co", "square", 180.0); pwS4 = h_shapedpw("eburp2",shbw,shofs,zero, 0.0, 0.0); pwS6 = h_shapedpw("reburp",shbw,shofs,zero, 0.0, 0.0); pwS5 = h_shapedpw("pc9f",shbw,shofs,zero, 2.0e-6, 0.0); if (phase == 1) ; if (phase == 2) {tsadd(t1,1,4);} if ( phase2 == 2 ) { tsadd ( t3,2,4 ); tsadd ( t5,2,4 ); icosel = +1; } else icosel = -1; /* Set up f1180 */ 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; /* Set up f2180 */ tau2 = d3; if((f2180[A] == 'y') && (ni2 > 1.0)) { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.0; } tau2 = tau2; /************************************************************/ if( ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 ); if(t1_counter % 2) { tsadd(t1,2,4);tsadd(t14,2,4); tsadd(t24,2,4); } if( ix == 1) d3_init = d3; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t4,2,4); tsadd(t14,2,4); tsadd(t24,2,4); } /************************************************************/ /* Set up CONSTANT/SEMI-CONSTANT time evolution in N15 */ /************************************************************/ if (ni2 > 1) { halfT2 = 0.5*(ni2-1)/sw2; t2b = (double) t2_counter*((halfT2 - timeTN)/((double)(ni2-1))); if( ix==1 && halfT2 - timeTN > 0 ) printf("SCT mode on, max ni2=%g\n",timeTN*sw2*2+1); if(t2b < 0.0) t2b = 0.0; t2a = timeTN - tau2*0.5 + t2b; if(t2a < 0.2e-6) t2a = 0.0; } else { t2b = 0.0; t2a = timeTN - tau2*0.5; } /************************************************************/ if (ni > 1) { halfT1 = 0.5*(ni-1)/sw1; t1b = (double) t1_counter*((halfT1 - tauC)/((double)(ni-1))); if(t1b < 0.0) t1b = 0.0; t1a = tauC - tau1*0.5 + t1b; if(t1a < 0.2e-6) t1a = 0.0; } else { t1b = 0.0; t1a = tauC - tau1*0.5; } /************************************************************/ status(A); rcvroff(); decpower(pwClvl); decoffset(dof); dec2power(pwNlvl); dec2offset(dof2); obspwrf(tpwrsf); decpwrf(4095.0); obsoffset(tof); set_c13offset("co"); dec2rgpulse(pwN,zero,0.0,0.0); zgradpulse(gzlvl4, gt4); delay(1.0e-4); lk_sample(); delay(d1-gt2); lk_hold(); h_shapedpulse("pc9f",shbw,shofs,zero, 2.0e-6, 0.0); delay(lambda-pwS5*0.5-pwS6*0.5); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, one, zero, zero, 0.0, 0.0); delay(lambda-pwS5*0.5-pwS6*0.5); if(n15_flg[0]=='y') h_shapedpulse("pc9f_",shbw,shofs,three, 0.0, 0.0); else h_shapedpulse("pc9f_",shbw,shofs,one, 0.0, 0.0); shaped_pulse(shname1,shpw1,zero,0.0,0.0); zgradpulse(gzlvl4, gt4*4.0); delay(1.0e-4); /**************************************************************************/ /*** N -> CO transfer *********************************/ /**************************************************************************/ dec2rgpulse(pwN,t2,0.0,0.0); delay(taunh); shaped_pulse(shname1,shpw1,two,0.0,0.0); delay(timeTN1-taunh-shpw1); sim3_c13pulse("", "co", "ca", "sinc", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 2.0e-6, 2.0e-6); delay (timeTN1); dec2rgpulse(pwN,zero,0.0,0.0); /**************************************************************************/ /*** CO -> CA transfer *********************************/ /**************************************************************************/ c13pulse("co", "ca", "sinc", 90.0, t1, 2.0e-6, 0.0); delay(tau1*0.5); dec2rgpulse (2.0*pwN, zero, 0.0, 0.0); delay(tauC-pwN*2.0); c13pulse("ca", "co", "square", 180.0, zero, 0.0, 0.0); delay (t1b); c13pulse("co", "ca", "sinc", 180.0, zero, 0.0, 0.0); delay (t1a); c13pulse("ca", "co", "square", 180.0, zero, 0.0, 0.0); c13pulse("co", "ca", "sinc", 90.0, one, 0.0, 0.0); /**************************************************************************/ /*** CA -> N transfer *********************************/ /**************************************************************************/ set_c13offset("ca"); c13pulse("ca", "co", "square", 90.0, zero, 2.0e-6, 0.0); delay(tauC); c13pulse("co", "ca", "sinc", 180.0, zero, 0.0, 0.0); delay(timeCN-tauC); sim3_c13pulse("", "cab", "co", "square", "", 0.0, 180.0, 2.0*pwN, zero, zero, zero, 2.0e-6, 2.0e-6); delay(timeCN); c13pulse("co", "ca", "sinc", 180.0, zero, 0.0, 0.0); c13pulse("ca", "co", "square", 90.0, one, 2.0e-6, 0.0); /**************************************************************************/ /*** N -> CA back transfer *********************************/ /**************************************************************************/ dec2rgpulse(pwN,t4,0.0,0.0); delay(tau2*0.5); c13pulse("co", "ca", "sinc", 180.0, zero, 0.0, 0.0); //delay(timeTN-pwS3-pwS2-gt1-1.0e-4); delay(timeTN-pwS3-pwS2-gt1-1.0e-4-2.0*GRADIENT_DELAY-4*POWER_DELAY-4*PWRF_DELAY-(4/PI)*pwN); zgradpulse(-gzlvl1, gt1); delay(1.0e-4); c13pulse("ca", "co", "square", 180.0, zero, 0.0, 0.0); delay (t2b); dec2rgpulse (2.0*pwN, zero, 0.0, 0.0); delay (t2a); /**************************************************************************/ delay(gt1/10.0+1.0e-4); h_shapedpulse("eburp2_",shbw,shofs,t3, 2.0e-6, 0.0); zgradpulse(gzlvl5, gt5); delay(lambda-pwS6*0.5-pwS4*scale- gt5); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl5, gt5); delay(lambda-pwS6*0.5-pwS4*scale- gt5); h_shapedpulse("eburp2",shbw,shofs,zero, 0.0, 0.0); delay(gt1/10.0+1.0e-4); dec2rgpulse(pwN,one,0.0,0.0); zgradpulse(gzlvl6, gt6); txphase(zero); delay(lambda-pwS6*0.5-gt6); h_sim3shapedpulse("reburp",shbw,shofs,0.0,2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl6, gt6); delay(lambda-pwS6*0.5-gt6); dec2rgpulse(pwN,t5,0.0,0.0); /**************************************************************************/ zgradpulse(-icosel*gzlvl2, gt1/10.0); dec2power(dpwr2); /* POWER_DELAY */ lk_sample(); if (n15_flg[0] =='y') { setreceiver(t14); } else { setreceiver(t24); } rcvron(); statusdelay(C,1.0e-4 ); }