/****************************************************************/ /* MXFB: Performs "xfb" on several datasets */ /****************************************************************/ /* Short Description : */ /* Performs "xfb" on several datasets */ /****************************************************************/ /* SYNTAX: xau mxfb expmask procno */ /* */ /* EXAMPLE: xau mxfb 3?01 1 */ /* Perform xfb-command on all datasets in the */ /* current experimentname matching the mask. */ /****************************************************************/ /* Nils Nyberg, CRC, 2005-08-15 */ /* */ /* */ /****************************************************************/ #define MAXEXP 32 int toprocno; int noofexp, nargs; int startexpno, startprocno, startparmode; int parmode[MAXEXP], sourceexpno[MAXEXP]; char explist[MAXEXP][PATH_MAX]; char path[PATH_MAX],mask[32],**list; GETCURDATA /* Get arguments */ nargs = sscanf(cmd,"%s %d",&mask,&toprocno); switch (nargs) { default: case -1: case 0: sprintf(mask,"%d",expno); GETSTRING("Enter file-mask for expnos to process: ", mask); toprocno = 1; GETINT("Enter target procno: ", toprocno); break; case 1: toprocno = 1; break; } (void)sprintf(text,"Mask = %s, to_procno = %d",mask, toprocno); Show_status(text); /* List experiment numbers that matches the file mask */ (void)sprintf(path,"%s/data/%s/nmr/%s/",disk,user,name,expno); noofexp=getdir(path,&list,mask); if (noofexp == 0 || noofexp > MAXEXP) { (void)sprintf(text,"%d experiments found... ", noofexp); Proc_err(DEF_ERR_OPT,text); ABORT } /* Check the parmods */ FETCHPAR("PARMODE",&startparmode); startexpno = expno; startprocno = procno; for (i1 = 0; i1 < noofexp; i1++) { Show_status(list[i1]); if (nargs = sscanf(list[i1],"%d", &sourceexpno[i1]) < 1) {ABORT}; DATASET(name, sourceexpno[i1], 1, disk, user); FETCHPAR("PARMODE",&parmode[i1]); } for (i1 = 0; i1 < noofexp; i1++) { if (parmode[i1] != startparmode) { (void)sprintf(text,"Expno %d does not have the same dimensions as %d", sourceexpno[i1], startexpno); Proc_err(INFO_OPT,text); for (i2 = 0; i2 < noofexp; i2++) { (void)sprintf(explist[i2],"%d: parmode = %d\n", sourceexpno[i2], parmode[i2]); printf(explist[i2]); } ABORT; } } /* Copy the current processing parameters */ DATASET(name, startexpno, startprocno, disk, user); WPAR("tmpmxfb","proc"); /* Run through the list of experiments and do the processing */ (void)sprintf(text,"XFB (as expno = %d) on:\n", startexpno); for (i1 = 0; i1 < noofexp; i1++) { DATASET(name, sourceexpno[i1], toprocno, disk, user); RPAR("tmpmxfb","proc"); XFB; (void)sprintf(text,"%s %d ",text,sourceexpno[i1]); Show_status(text); } /* Delete temp. processing parameters */ DELPAR("tmpmxfb"); /* Notify the expnos the xfb was performed on */ QUITMSG(text);