/****************************************************************/ /* MADD2D: Adds several processed 2D-datasets */ /****************************************************************/ /* Short Description : */ /* Adds several processed 2D-datasets */ /****************************************************************/ /* SYNTAX: xau madd2d expmask to_procno from_procno */ /* */ /* EXAMPLE: xau madd2d 3?01 100 1 */ /* Adds processed data from expname 3101 and 3201 */ /* (procno=1 [default]) and puts the data in the */ /* current dataset but in procno = 100 */ /* */ /* The experiments must have the same size and they must reside */ /* in the same expname */ /****************************************************************/ /* Nils Nyberg, CRC, 2005-08-11 */ /* */ /* */ /****************************************************************/ #define MAXEXP 32 int toprocno, fromprocno, targetexpno; int noofexp, nargs; int parmode[MAXEXP], si1[MAXEXP], si2[MAXEXP], sourceexpno[MAXEXP]; char explist[MAXEXP][PATH_MAX]; char path[PATH_MAX],mask[32],**list; FILE *fp1; GETCURDATA /* Get arguments */ nargs = sscanf(cmd,"%s %d %d",&mask,&toprocno,&fromprocno); switch (nargs) { default: case -1: case 0: sprintf(mask,"%d",expno); GETSTRING("Enter file-mask to experiments to add: ", mask); toprocno = 100; GETINT("Enter target procno: ", toprocno); fromprocno = 1; GETINT("Enter sources procno: ", fromprocno); break; case 1: toprocno = 100; fromprocno = 1; break; } (void)sprintf(text,"Mask = %s, to_procno = %d, from_procno = %d",mask, toprocno, fromprocno); Show_status(text); targetexpno = expno; /* 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 parmod and sizes */ for (i1 = 0; i1 < noofexp; i1++) { Show_status(list[i1]); if (nargs = sscanf(list[i1],"%d", &sourceexpno[i1]) < 1) {ABORT}; DATASET(name, sourceexpno[i1], fromprocno, disk, user); FETCHPARS("PARMODE",&parmode[i1]); FETCHPAR1S("SI",&si1[i1]); FETCHPARS("SI",&si2[i1]); } for (i1 = 1; i1 < noofexp; i1++) { if (si2[0]!=si2[i1] || si1[0]!=si1[i1] || parmode[i1] != 1) { (void)sprintf(text,"Expno %d does not have the same data size as expno %d", sourceexpno[i1], sourceexpno[0]); Proc_err(INFO_OPT,text); for (i2 = 0; i2 < noofexp; i2++) { (void)sprintf(explist[i2],"%d: si = %dx%d, parmode = %d\n", sourceexpno[i2], si2[i2], si1[i2], parmode[i2]); printf(explist[i2]); } ABORT; } } /* Make new proc */ DATASET(name, sourceexpno[0], fromprocno, disk, user); WRP(toprocno); DATASET(name, sourceexpno[0], toprocno, disk, user); STOREPAR("ALPHA", 0.5) STOREPAR("GAMMA", 0.5) /* Make the additions */ (void)sprintf(text,"\nThese experiments (procno = %d) were added:\n%d ",fromprocno, sourceexpno[0]); for (i1 = 1; i1 < noofexp; i1++) { DATASET2(name, sourceexpno[i1], fromprocno, disk, user); ADD2D; (void)sprintf(text,"%s %d",text,sourceexpno[i1]); } (void)sprintf(text,"%s\n",text); /* Add information to title-file */ if ((fp1 = fopen(PROCPATH("title"), "a+")) == NULL) { Proc_err(ERROR_OPT, "Error during open of\n%s", PROCPATH("title")); } if (fprintf(fp1, "%s", text) == EOF) { Proc_err(ERROR_OPT, "Error during write to\n%s", PROCPATH("title")); } if (fclose(fp1) == EOF) { Proc_err(ERROR_OPT, "Error during close of\n%s", PROCPATH("title")); } QUIT;