AU program for splitting echo train acquired with qcpmg.fau pulse program:
/******************************************************************* qcpmg-split (topspin2.1) AU program for splitting echo train acquired with the pulse program qcpmg.fau into a series of 1D files containing each an echo ********************************************************************/ int size, sizeout, si2, tdout, td2, sizeofint, parmod, zeroth; int pivot, ireal, irealecho, 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,"qcpmg.fau")!=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 */ FETCHPAR("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=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=td2; /* changed */ sizeout=tdout*sizeof(int); /* ---------------------------------------------*/ /* open file and allocate array */ (void)sprintf(binfile,"%s/data/%s/nmr/%s/%d/fid",disk,user,name,expno); /* ------With TopSpin 3.5, replace by-----------*/ /* (void)sprintf(binfile,"%s/%s/%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) /* no spectrum saved, FID only */ i2++; END; i1 = first; i3 = startExpno + 1; TIMES(echos); (void)sprintf(boutfile,"%s/data/%s/nmr/%s/%d/fid",disk,user,name,i3); /* ------With TopSpin 3.5, replace by-----------*/ /* (void)sprintf(boutfile,"%s/%s/%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; /* clear data */ i2++; END; i2=0; TIMES2(echopoints); in2[i2]=in1[i1]; /* copy an FID or an echo*/ 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; } (void)close(irealecho); i1+=dead-2; /* disregard dead */ i3++; /* next file */ END; /* ---------------------------------------------*/ /* correct relevant acquisition parameters */ STOREPAR("TD",tdout); STOREPAR("TDeff",echopoints); STOREPAR("SI",tdout*2); (void)close(ireal); free(in2); free(in1); (void)sprintf(text,"QCPMG split transformation done"); Show_status(text); QUIT