AU program for splitting echo train acquired with qcpmgall.av pulse program:
/****************************************************************************** qcpmgsplit (xwinnmr3.5) AU program for splitting echo train acquired with the pulse program qcpmgall.av into a series of 1D files containing each an echo *******************************************************************************/ int size, sizeout, si2, tdout, td2, ireal, irealecho, sizeofint, parmod, zeroth; int pivot, startExpno; char binfile[255], boutfile[255], pulprog[255]; int *in1, *in2; int order_a_BIT, first, echopoints, echos, l22, dead; float del3, del6, pul3, pul4, dwell; double swh; char s1[255]; GETCURDATA; startExpno = expno; /* ---------------------------------------------*/ /* make sure program works on proper data set */ FETCHPARS("PARMODE",&parmod); if (parmod != 0) STOPMSG(" Program only works on 1D data"); FETCHPARS("PULPROG",pulprog); if (strcmp(pulprog,"qcpmgall.av")!=0) { Proc_err(0,"Wrong AU program for %s pulse program",pulprog); return(AUERR); } /* ---------------------------------------------*/ /* make sure that pivot point can be entered */ (void) sprintf(s1,"%s %s","au_qcpmg AU program","- Note \n\ - If you don't know the pivot point yet,\n\ press Cancel and check with\n\ 'calibrate'\n\ - otherwise press OK and continue"); FETCHPARS("FL1",&pivot); if (pivot>80) { AUERR=Proc_err(ERROPT_AK_CAN|ERROPT_BEEP_DEF,"%s",s1); if (AUERR == ERR_CANCEL) ABORT } /* ---------------------------------------------*/ /* get relevant acquisition parameters */ FETCHPARS("TD",&td2); FETCHPARS("SI",&si2); FETCHPARS("SW_h",&swh); FETCHPARS("D 6",&del6); FETCHPARS("D 3",&del3); FETCHPARS("P 3",&pul3); FETCHPARS("P 4",&pul4); FETCHPARS("L 22",&l22); FETCHPARS("DW",&dwell); FETCHPARS("BYTORDA",&order_a_BIT); /* ---------------------------------------------*/ /* check for starting point */ if (pivot>80) pivot=(int)((10/dwell)); if (strlen(cmd) == 0) { GETINT("Enter pivot point : ",pivot); } else { if (1 != sscanf(cmd, "%d", &pivot)){ STOPMSG("illegal input"); } } /* ---------------------------------------------*/ /* calculate required loop parameters */ zeroth=(int)((pul3+del3*2000000.0+pul4)/dwell+0.5)+pivot; zeroth=(zeroth/2)*2; first=(int)((del6*1000000.0+del3*2000000.0+pul4)/dwell+0.5)+zeroth; first=(first/2)*2; echopoints=(int)(del6*2000000.0/dwell+0.5); echopoints=(echopoints/2)*2; dead=(int)((del3*2000000.0+pul4)/dwell+0.5)+2; dead=(dead/2)*2; echos=l22; tdout=echopoints*echos+echopoints/2; sizeout=tdout*sizeof(int); /* ---------------------------------------------*/ /* open file and allocate array */ (void)sprintf(binfile,"%s/data/%s/nmr/%s/%d/fid",disk,user,name,expno); sizeofint=sizeof(int); size=td2*sizeofint; in1=calloc(td2,sizeof(int)); in2=calloc(td2,sizeof(int)); if ( (ireal=open(binfile, O_RDWR)) == -1) { Perror(DEF_ERR_OPT,binfile); ABORT; } if ( read(ireal,in1,size) == -1 ) { Perror(DEF_ERR_OPT,binfile); ABORT; } /* ---------------------------------------------*/ /* create final output array */ i2 = startExpno + 1; TIMES(echos); WRA(i2) i2++; END; i1 = zeroth + first; i3 = startExpno + 1; TIMES(echos); (void)sprintf(boutfile,"%s/data/%s/nmr/%s/%d/fid",disk,user,name,i3); if ( (irealecho=open(boutfile, O_RDWR)) == -1) { Perror(DEF_ERR_OPT,boutfile); ABORT; } i2=0; TIMES2(td2); in2[i2]=0; i2++; END; i2=0; TIMES2(echopoints); in2[i2]=in1[i1]; i2++; i1++; END; if ( lseek(irealecho, 0, SEEK_SET) == -1 ) { Perror(DEF_ERR_OPT,boutfile); ABORT; } if ( write(irealecho,in2,sizeout) == -1 ) { Perror(DEF_ERR_OPT,boutfile); ABORT; } /* ---------------------------------------------*/ /* correct relevant acquisition parameters */ STOREPARS("TD",tdout); STOREPAR("TDeff",echopoints); STOREPAR("SI",tdout*2); (void)close(irealecho); i1+=dead-2; i3++; END; (void)close(ireal); free(in2); free(in1); (void)sprintf(text,"QCPMG split transformation done"); Show_status(text); QUIT