# RFDR_2D.acq ########################################################### # $Revision: 1.1 $ $Date: 2000/04/11 21:38:52 $ # $Source: /usr2/users/applab/CFR/I+/ppg/C7.acq,v $ # InfinityPlus Compatible # # This section sets the initial cmx global parameters # # The file format is as follows # # si_name;long name;value;units;min;max;decimal pnts;user level;data type # # a - is a blank field. # tabs and spaces are allowed if you wish to seperate the fields a little # but a line can be only 80 characters. # # first line = ppfn and na # na;# acq's;1;-;1;100000000;0;5;long # # organize by frequency of use for convenience # # ch1;ppg ch1;1;-;1;4;0;5;long sf1;spect freq;150.75;MHz;1.0;800.5;7;5;float ch2;ppg ch2;2;-;1;4;0;5;long sf2;spect freq;599.458;MHz;1.0;800.5;7;5;float ch3;ppg ch3;3;-;1;4;0;5;long sf3;spect freq;60.5;MHz;1.0;800.5;7;5;float # dp;dummy pulses;4;-;0;1000;0;3;long pd;pulse delay;1.5;s;0.1;6500;3;3;float # al2;dim2 acq length;1;-;0;4096;0;3;long dw2;dim2 dwell;10;u;.2;10000;3;3;float AL2start;dim2 acq length;1;-;0;4096;0;3;long AL2max;dim2 acq length;256;-;0;4096;0;3;long t1_evol_max;init. t1 evol.;1;u;.1;60000;3;2;float pw90H;H 90(aH);2.5;u;.1;1000;2;2;float aH;H 90 ampl;0.9;-;0.0;1.0;4;2;float # CP parameters aHcp;H CP ampl;0.6;-;0.0;1.0;4;2;float aXcp;X CP ampl;0.7;-;0.0;1.0;4;2;float ct;contact time;1;m;.0001;100;3;2;float deltaHX;size of X tan ramp;0.08;-;0.0;0.4;4;3;float betaHX;shape of X tan ramp ;0.02;-;-2;2;4;3;float pw;H TPPM pulse;7.2;u;.1;1000;2;3;float aHdec;H dec. ampl;0.6;-;0.0;1.0;4;3;float p2;TPPM phase;15;-;0;360;1;3;float pw90X;X 90 (aX90);3;u;.1;1000;2;3;float init90;init 90? 0=no,1=yes;1;-;0;1;0;5;long aX90;X 90 ampl;0.85;-;0.0;1.0;4;3;float tau_rad;rad mix time;5;m;0.01;1000;3;3;float aHrad;dec. dur. RAD;0.10;-;0.0;0.30;4;3;float # dw;dwell;10;u;.2;1000;3;1;float al;acq length;1024;-;4;65536;0;1;long aqtm;acq time;12.801;m;.001;1000;3;3;float rd;receiver delay;10;u;3;100;3;1;float ad;acq delay;7.5;u;1;1000;3;1;float rg;receiver gain;20;-;1;1000;2;1;float txduty1;trans duty;0.01;-;0.0;0.2;3;2;float temp;Set Temp. (C);0;-;-1000;250;2;2;float;acc_array speed;spin rate;-1;kHz;-1000;200;3;2;float;acc_array time1d;1D time (min);1;-;0.000005;999999999;3;0;float time2d;total 2d time (hrs);1;-;0.000001;999999;3;2;float t1_evol;init. t1 evol.;1;u;.1;50000;8;3;float # RFDR parameters q;No. RFDR pi pulses;0;-;0;64;0;3;long tau_r;rotor period;100;u;20;5000;2;2;float #rfdrgap;gap div by 2;50;u;5;5000;2;2;float pw180X;X 180 (aXzq);16;u;.1;4000;2;2;float aXzq;X RFDRampl;0.0;-;0.0;1.0;4;3;float t_mix;total mix + 0.1u;5;m;0;1000;2;3;float # Decoupling aHzqhi;dec. dur. pi's;0.8;-;0.0;1.0;4;3;float aHzqmed;dec. betw. pi's;0.6;-;0.0;1.0;4;3;float aHzfil;dec. dur. z filter;0.25;-;0.0;1.0;4;3;float # during t1 and t2 (Y dec. during X evol/acq) pw90Y;Y 90 for dec;6.3;u;.1;1000;2;2;float aY90;Y dec amp (1 pi);0.9;-;0.0;1.0;4;2;float #pwtppm2;Y tppm pulse;20;u;.1;1000;2;2;float aYdec;Y tppm amp.;0.55;-;0.0;0.8;4;2;float pwYdec;Y pi @ aYdec;10;u;0;40;1;2;float gapYdec;Y dec gap;990;u;40;5000;1;2;float #p_tppm2;Y tppm phase;30;-;0;360;1;2;float # Receiver rb;receiver bandwidth;83;khz;1;2000;1;0;float sw;spectrum width;66;kHz;1;5001;3;1;float scH;H scalar;1.0;-;0.001;1.0;4;1;float scX;X scalar;1.0;-;0.001;1.0;4;1;float scY;Y scalar;1.0;-;0.001;1.0;4;1;float # ch4;ppg ch4;3;-;1;4;0;1;long # sf4;spect freq;301.500;MHz;1.0;800.5;7;1;float # # si_name;long name;value;units;min;max;decimal pnts;user level;data type name "RFDR_2D"; title "RFDR mixing with CP prep. and TPPM dec."; ! CMR modifications 6/18/01 ! 1. no TPPM during DQ mixing ! 2. decoupling during X 90s at aH90 level ! 3. variable angle TPPM during acquisition ! COMPILED WITH OPTIMIZATION ON ! $Header: /usr2/users/applab/CFR/I+/ppg/C7.s,v 1.1 2000/04/11 21:41:48 applab Exp $ ! InfinityPlus Compatible NMRchnls RF: ch1 ch2 ch3; NMRacq; ! ------------------------------------------ ! Define variables in .data section ! ------------------------------------------ .data .long extern init90 = 1; .time extern autofix t_mix "mixing time" = 2000.0us; .time extern ZF_delay "Z filter time" = 100us; .time extern ZF_delay1 = 100 us; .time extern autofix rfdrgap = 2.0us; .time extern tau_r = 100us; .time extern autofix tau_rad ; .time autofix CT = .1m; .ampl extern step = .01; .ampl aXCP = 1.0; .float extern steps = 10.0; .long cycles "no. of TPPM cycles during t1" = 8; .float cycles_tmp =8; .long cycles2 "no. of TPPM cycles during t2" = 8; .phase autofix extern p2 = 15.0; !Hdec phase excursion .phase autofix p0 = 90.0; !Hdec phase excursion .ampl autofix a_tmp = 0; .ampl autofix a_tmp2 = 0; .long extern q = 10; !number of rf cycles .long i = 1; .ampl extern aXzq = 0.1; !X amplitude for RFDR .ampl extern aX90 = 0.1; !X amplitude for 90 .ampl extern aHzqhi = 0.01; !H amplitude for DQ .ampl extern aHzqmed = 0.01; !H amplitude for DQ .ampl extern aHzfil = 0.01; !H amplitude for DQ .ampl extern aHrad = 0.01; !H amplitude for DQ .phase Hmix = 270; !Hmix&decouple phase list .phase list H90 = 0 ; .phase Xmix = 0 ; .phase list Xstore0[] = 270,270,270,270, 90, 90, 90, 90; .phase list Xrecall[] = 0,180, 90,270,180, 0,270, 90; .phase p180 = 180; .phase p90 = 90; .phase list pzq[] = 0,90,0,90,90,0,90,0,180,270,180,270,270,180,270,180; .long extern list abph[] = 0,2,1,3,0,2,1,3; ! add for 2D .phase list tppi[] = 90,180,270,0; ! for 2D ! .phase list tppi[] = 0,90,180,270; ! for 1D .phase p4; .time extern t1_evol = 1.0u; .time t1_evol_tmp=1.0u; .time t1_evol_out = 1.0u; .time extern t1_evol_max = 1.0u; .time extern t1_evol_x = 1.0u; .time cyclerem = 1.0u; .time PW2 = 12.0u; .float t1cycles = 8; ! .float ntaur1 = 1; ! .long ntaur = 1; .time taurem = 1.0u; ! Y decoupling .long cyclesy = 8; .phase autofix extern p_tppm2 = 30.0; .time autofix extern pwtppm2 = 20u; .ampl autofix a_tmp3=0; .ampl extern aY90 = 0.1; .time PW180Y = 20u; .time t1by2 = 1u; .time t1by2b = 1u; ! tan shape HX .long j,k; .float extern betaHX ; .float extern deltaHX ; .float alpha,alpha2,amp; .long list fixed alistHX[512]; .long extern stepstan "shape steps" = 512; .long extern AL2start = 1; .long extern AL2max = 512; ! Y chn. .time autofix extern pwYdec = 10u; .time autofix extern gapYdec = 990u; .phase list pYdec[] = 0,90,0,90,90,0,90,0,180,270,180,270,270,180,270,180; include "../includes/STANDARD_PARAMS"; include "../includes/2D.inc"; !------------------------------------------- ! update Spinsight with calculations. !------------------------------------------- .update "qby2 = q / 2"; .update "qrem = q - qby2*2"; .update "rb=1.30*sw"; .update "tau_r = 1.0/speed/1000.0"; .update "t_mix = tau_r*q + tau_rad + 0.1u"; .update "ZF_delay = tau_r - pw90X"; .update "aqtm=(dw*al)"; .update "extm = (pw90H+ct+(2.0*t_mix)+(2.0*ZF_delay)+ad+rd+aqtm+pd)"; .update "txduty1=(pw90H+(2.0*ct)+(0.1*t_mix)+ad+rd+aqtm)/extm"; .update "rfdrgap = (tau_r - pw180X) / 2.0"; .update "time1d = (na+dp)*extm/60.0"; .update "time2d = ((al2*na*extm)+(na*(al2/2.0)*tau))/3600.0"; .update "t1_evol= dw2- (2.0/3.1415)*pw90X"; !.update "t1_evol= ceil(t1_evol*50.0-0.5us)/50.0"; .update "t1_evol_max = t1_evol + dw2*AL2max"; !.update "rd = dw*(0.85)"; !.update "ad = (dw/2.0) - (2.0/3.14)*pw90X"; !------------------------------------------ ! Executed once at Start of Experiment !------------------------------------------ .program t1_evol_tmp=t1_evol*1000000.0; t1_evol_tmp= ceil(t1_evol_tmp*50.0-0.5)/50.0; t1_evol=t1_evol_tmp/1000000.0; t1_evol_max = t1_evol + dw2*AL2max; dpc = dp; CT = (ct/stepstan); p2 = p2 + p0; p_tppm2 = p_tppm2 + p0; a_tmp = aHdec; a_tmp2 = aH; a_tmp3 = aYdec; pd = pd - 10ms; cycles2 = ceil((ad+rd+aqtm+10us)/(2.0 * pw)); cyclesy = ceil((ad+rd+aqtm+10us)/(pwYdec+gapYdec)); cyclesy = cyclesy - 1; PW180Y = 2.0 * pw90Y; PW2=2.0 * pw; t1cycles=(t1_evol)/(PW2); cycles = ceil(t1cycles); cycles = cycles-1; cyclerem = t1_evol - cycles*PW2; if (cyclerem<1us) {cycles=0; cyclerem=t1_evol; } !ntaur1 = (t1_evol)/(tau_r); txduty1=(pw90H+(2.0*ct)+(0.1*t_mix)+ad+rd+aqtm)/extm; if (txduty1 > 0.2) {error(TXDUTY_ERR);} !Duty factor too large !if ((PW180Y) > (t1_evol)) {error(PW2SHORT);} if (deltaHX>aXcp) {error(ZEROCROSS);} i=0; k=stepstan/2+0.5; do(stepstan){ alpha=2*atan(deltaHX/betaHX); alpha2=abs(betaHX)*tan(float(i-k)/float(stepstan-1)*alpha); amp=aXcp+alpha2; @alistHX++=RX|TG|A(amp); i++; } ! ------------------------------------------- ! actual pulse prog. runtime loop ! ------------------------------------------- .start loop2D { abph = abph.start; p4 = @tppi++; if(al2 == 1){p4 = 0.0;} Xstore0=Xstore0.start; Xrecall=Xrecall.start; t1_evol_out = t1_evol + (dw2*(index2+AL2start-1)); t1by2 = t1_evol_out / 2.0; t1by2b = t1by2 - PW180Y / 2.0; if(t1by2b < 1.0u){t1by2b=t1by2;} cycles_tmp = ceil((t1cycles)+((t1_evol_out - t1_evol)/PW2)); ! cycles_tmp=ceil(t1_evol_out/PW2); cycles=ceil(cycles_tmp); cycles = cycles-1; cyclerem = t1_evol_out - cycles*PW2; if (cyclerem<1us) {cycles=cycles-1; cyclerem=cyclerem+PW2; } t1_evol_x = t1_evol_max + 10u - t1_evol_out ; if(t1_evol_x<1.0u){t1_evol_x=1u;} ! ntaur = ceil((ntaur1)+((t1_evol_out - t1_evol)/tau_r)); ! ntaur = ntaur-1; ! taurem = t1_evol_out - ntaur*tau_r; ! if (taurem<1us) {taurem=1.0us;} !if(taurem << ZF_delay) ! {ZF_delay1 = ZF_delay - taurem;} !else ZF_delay1 = ZF_delay + ZF_delay - taurem; loop1D { call mainseq; } } .end mainseq: aqph=@abph++; pzq=pzq.start; aXCP = aXcp; out time(10u); ! SetRcvr(30us,rg,rb); Async; ch++ ch1; out time(3u) ch1:SC(scX); ! SetRcvr(30us,rg,rb); out time(30u); out time(1u) ch1:AP(aX90,p90+Xmix); out tMX ch1:MX; if (init90 == 1) {out pw90X ch1:TG;} else {out pw90X;} out pw90H ch1:TG|AP(aXcp,Xmix); ss alistHX; for(i=0,i 1){ out time(t1_evol_out); } out tm1 ch1:AP(aX90,p4+@Xstore0++); out pw90X ch1:TG; out time(ZF_delay1) ch1:AP(aXzq,@pzq); out tMX ch1:MX; do(q) { out rfdrgap ch1:AP(aXzq,@pzq++); out pw180X ch1:TG; out rfdrgap ; } out tau_rad ; out tm1 ch1:AP(aX90,@Xrecall++); out time(ZF_delay); out tMX ch1:MX; out pw90X ch1:TG; out rd ch1:TB; out ad ch1:RE|TB; Acq dw ch1:RE|TB; out pd; Sync; ch--; ch++ ch2; out time(4u) ch2:SC(scH); out time(30u); out tMX ch2:MX; out pw90X ch2:AP(aH,H90); out pw90H ch2:TG; do(stepstan){ out CT ch2: TG | AP(aHcp,Hmix); } if(al2 > 1){ out time(cyclerem) ch2: TG|a_tmp|p0; ! if(cycles>0) { do(cycles) { out pw ch2: TG|p2; out pw ch2: TG|p0; } } ! } out tm1 ch2: TG|A(aHzqhi); out pw90X ch2: TG; out time(ZF_delay1) ch2: TG|A(aHzfil); out tMX; do(q){ out rfdrgap ch2: TG|A(aHzqmed); out pw180X ch2: TG|A(aHzqhi); !higher decoupling during DQ out rfdrgap ch2: TG|A(aHzqmed); } if(aHrad > 0.001){ out tau_rad ch2: TG|A(aHrad); } else {out tau_rad ; } out tm1 ch2: TG|A(aHzfil); out time(ZF_delay) ch2: TG; out tMX ch2: TG|A(aHzqhi); out pw90X ch2: TG; out pw ch2: TG|a_tmp|p2; out pw ch2: TG|p0; do(cycles2) { out pw ch2: TG|p2; out pw ch2: TG|p0; } out time(t1_evol_x) ch2: TG|a_tmp; waitS; ch--; ch++ ch3; out time(4u) ch3:SC(scY); out time(30u); out tMX ch3:MX; out pw90X ; out pw90H ; do(stepstan){ out CT ; } if(al2 > 1){ if(t1by2>t1by2b) { out time(t1by2b) ch3:AP(aY90,0.0); out time(PW180Y) ch3:TG|AP(aY90,0.0); out time(t1by2b) ch3:AP(aYdec,0.0); } else { out time(t1by2); out time(t1by2) ch3:AP(aYdec,0.0); } } out tm1; out pw90X ; out time(ZF_delay1); out tMX; do(q){ out time(tau_r); } out tau_rad; out tm1; out time(ZF_delay); out tMX; out pw90X; pYdec=pYdec.start; ! out gapYdec ch3:TB; ! turn off transmitter ! out pwYdec ch3:TB ; ! do(cyclesy) !{ ! out gapYdec ch3:TB; ! out pwYdec ch3:TB; !} out gapYdec ; out pwYdec ch3:TG|a_tmp3|P(@pYdec++); do(cyclesy) { out gapYdec ; out pwYdec ch3:TG|P(@pYdec++); } waitS; ch--; scan time(10m); return;