From e4cc80fc28ddfd05145d10157d3f77b7122b547a Mon Sep 17 00:00:00 2001 From: Hemant Sharma Date: Tue, 3 Sep 2024 12:25:00 -0500 Subject: [PATCH] Added SAXS capabilities to integrator. --- FF_HEDM/src/IntegratorZarr.c | 77 +++++++++++++++++++++++------------- utils/ffGenerateZip.py | 28 +++++++------ 2 files changed, 67 insertions(+), 38 deletions(-) diff --git a/FF_HEDM/src/IntegratorZarr.c b/FF_HEDM/src/IntegratorZarr.c index dfbe360c..6471d03b 100644 --- a/FF_HEDM/src/IntegratorZarr.c +++ b/FF_HEDM/src/IntegratorZarr.c @@ -351,9 +351,9 @@ int main(int argc, char **argv) char* arr; int32_t dsize; char *resultFolder; - int locImTransOpt, nFrames, nDarks, nFloods, bytesPerPx=2; + int locImTransOpt, locTemp=-1, locPres=-1, locI=-1, locI0=-1, nFrames, nDarks, nFloods, bytesPerPx=2; int darkLoc=-1,dataLoc=-1,floodLoc=-1; - double Temperature = 0, Pressure = 0; + double *Temperature, *Pressure, *I, *I0; while ((zip_stat_index(arch, count, 0, finfo)) == 0) { if (strstr(finfo->name,"analysis/process/analysis_parameters/ResultFolder/0")!=NULL){ arr = calloc(finfo->size + 1, sizeof(char)); @@ -399,28 +399,6 @@ int main(int argc, char **argv) free(arr); free(data); } - if (strstr(finfo->name,"analysis/process/analysis_parameters/Temperature/0")!=NULL){ - arr = calloc(finfo->size + 1, sizeof(char)); - fd = zip_fopen_index(arch, count, 0); - zip_fread(fd, arr, finfo->size); - dsize = sizeof(double); - data = (char*)malloc((size_t)dsize); - dsize = blosc1_decompress(arr,data,dsize); - Temperature = *(double *)&data[0]; - free(arr); - free(data); - } - if (strstr(finfo->name,"analysis/process/analysis_parameters/Pressure/0")!=NULL){ - arr = calloc(finfo->size + 1, sizeof(char)); - fd = zip_fopen_index(arch, count, 0); - zip_fread(fd, arr, finfo->size); - dsize = sizeof(double); - data = (char*)malloc((size_t)dsize); - dsize = blosc1_decompress(arr,data,dsize); - Pressure = *(double *)&data[0]; - free(arr); - free(data); - } if (strstr(finfo->name,"analysis/process/analysis_parameters/X/0")!=NULL){ arr = calloc(finfo->size + 1, sizeof(char)); fd = zip_fopen_index(arch, count, 0); @@ -797,6 +775,18 @@ int main(int argc, char **argv) if (strstr(finfo->name,"analysis/process/analysis_parameters/ImTransOpt/0")!=NULL){ locImTransOpt = count; } + if (strstr(finfo->name,"measurement/process/scan_parameters/Temperature/0")!=NULL){ + locTemp = count; + } + if (strstr(finfo->name,"measurement/process/scan_parameters/Pressure/0")!=NULL){ + locPres = count; + } + if (strstr(finfo->name,"measurement/process/scan_parameters/I/0")!=NULL){ + locI = count; + } + if (strstr(finfo->name,"measurement/process/scan_parameters/I0/0")!=NULL){ + locI0 = count; + } count++; } int rc = ReadBins(resultFolder); @@ -823,6 +813,34 @@ int main(int argc, char **argv) nFrames = nFrames - skipFrame; // This ensures we don't over-read. dataLoc += skipFrame; darkLoc += skipFrame; + Pressure = (double *) calloc(nFrames,sizeof(*Pressure)); + Temperature = (double *) calloc(nFrames,sizeof(*Temperature)); + I = (double *) calloc(nFrames,sizeof(*I)); + I0 = (double *) calloc(nFrames,sizeof(*I0)); + if (locPres >0){ + zip_stat_index(arch, locPres, 0, finfo); s = calloc(finfo->size + 1, sizeof(char)); fd = zip_fopen_index(arch, locPres, 0); zip_fread(fd, s, finfo->size); + dsize = (nFrames+skipFrame)*sizeof(double); data = (char*)malloc((size_t)dsize); dsize = blosc1_decompress(s,data,dsize); + for (iter=skipFrame;iter 0){ + zip_stat_index(arch, locTemp, 0, finfo); s = calloc(finfo->size + 1, sizeof(char)); fd = zip_fopen_index(arch, locTemp, 0); zip_fread(fd, s, finfo->size); + dsize = (nFrames+skipFrame)*sizeof(double); data = (char*)malloc((size_t)dsize); dsize = blosc1_decompress(s,data,dsize); + for (iter=skipFrame;iter 0){ + zip_stat_index(arch, locI, 0, finfo); s = calloc(finfo->size + 1, sizeof(char)); fd = zip_fopen_index(arch, locI, 0); zip_fread(fd, s, finfo->size); + dsize = (nFrames+skipFrame)*sizeof(double); data = (char*)malloc((size_t)dsize); dsize = blosc1_decompress(s,data,dsize); + for (iter=skipFrame;iter 0){ + zip_stat_index(arch, locI0, 0, finfo); s = calloc(finfo->size + 1, sizeof(char)); fd = zip_fopen_index(arch, locI0, 0); zip_fread(fd, s, finfo->size); + dsize = (nFrames+skipFrame)*sizeof(double); data = (char*)malloc((size_t)dsize); dsize = blosc1_decompress(s,data,dsize); + for (iter=skipFrame;iter0){ if ((i%chunkFiles) == 0){ memset(chunkArr,0,bigArrSize*sizeof(*chunkArr)); firstOme = omeArr[i]; + presThis = 0; tempThis = 0; iThis = 0; i0This = 0; } } printf("Processing frame number: %d of %d of file %s.\n",i+1,nFrames,DataFN); - + presThis += Pressure[i]; tempThis += Temperature[i]; iThis += I[i]; i0This = I0[i]; dsz = blosc1_decompress(&allData[sizeArr[i*2+1]],locData,dsz); memcpy(ImageInTU,locData,dsz); for (j=0;j