From 1100e361e81aa49ffed06829816eec32df6369a7 Mon Sep 17 00:00:00 2001 From: Qianqian Fang Date: Fri, 29 Dec 2023 14:11:28 -0500 Subject: [PATCH] [bug] fix mcx2json bug when exporting 4D vol, fix #200 --- example/muamus/run_muamus.bat | 1 + example/muamus/run_muamus.sh | 2 ++ example/muamus/test_muamus_float.json | 45 +++++++++++++++++++++++++++ src/mcx_utils.c | 9 ++++-- utils/mcx2json.m | 3 ++ 5 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 example/muamus/run_muamus.bat create mode 100755 example/muamus/run_muamus.sh create mode 100644 example/muamus/test_muamus_float.json diff --git a/example/muamus/run_muamus.bat b/example/muamus/run_muamus.bat new file mode 100644 index 00000000..653e7984 --- /dev/null +++ b/example/muamus/run_muamus.bat @@ -0,0 +1 @@ +..\..\bin\mcx.exe -f test_muamus_float.json -D P %* diff --git a/example/muamus/run_muamus.sh b/example/muamus/run_muamus.sh new file mode 100755 index 00000000..02990266 --- /dev/null +++ b/example/muamus/run_muamus.sh @@ -0,0 +1,2 @@ +#!/bin/sh +../../bin/mcx -f test_muamus_float.json -D P $@ diff --git a/example/muamus/test_muamus_float.json b/example/muamus/test_muamus_float.json new file mode 100644 index 00000000..78f301ce --- /dev/null +++ b/example/muamus/test_muamus_float.json @@ -0,0 +1,45 @@ +{ + "Session":{ + "ID":"test_muamus_float", + "DoAutoThread":1, + "Photons":1000000 + }, + "Forward":{ + "T0":0, + "T1":5e-09, + "Dt":5e-09 + }, + "Optode":{ + "Source":{ + "Pos":[30,30,1], + "Dir":[0,0,1] + } + }, + "Domain":{ + "OriginType":0, + "Media":[ + { + "mua":0, + "mus":0, + "g":1, + "n":1 + }, + { + "mua":0.005, + "mus":1, + "g":0, + "n":1.37 + } + ], + "MediaFormat":"muamus_float", + "Dim":[60,40,20], + "VolumeFile":"" + }, + "Shapes":{ + "_ArrayType_":"single", + "_ArraySize_":[60,40,20,2], + "_ArrayZipType_":"zlib", + "_ArrayZipSize_":[1,96000], + "_ArrayZipData_":"eAHtxV1rlnUcAOD13nCWS7OYONmKFmzlFhmrPf97OZrSignTiphglEaRyTxYtWBzOiw1aTWJXC6YGcYIO7CHiRgF2Vg0q1Fu1sGQCmEtxKRw1SD8Hj+uo+vwga/qCgq66w+TJEmSJEmSJEkG8aG7bs31HtlFkiRJkiRJkiQZxnxRc6609W2SJEmSJEmSJMkwLry0PffJ9e+RJEmSJEmSJEmGcezcQC4Nf0CSJEmSJEmSJBnGnoljuVPPfEySJEmSJEmSJBnG3MgPudbiPEmSJEmSJEmSZBj/zp/PzXz+GUmSJEmSJEmSZBgfb7k6dWweIUmSJEmSJEmSDOM93xSnwpLvSJIkSZIkSZIkw3hjw7K0f3SSJEmSJEmSJEkyjH8cr0oV7WdJkiRJkiRJkiTDOFrzQBounyZJkiRJkiRJkgzjoaHVqXH8T5IkSZIkSZIkyTBuK3ssTXT+S5IkSZIkSZIkGcbW/qfT0ZuveJAkSZIkSZIkSTKKtcVtqWPzNSRJkiRJkiRJkmFctLszrTxZSJIkSZIkSZIkGcZXunemwpIbSJIkSZIkSZIkw/hsbm8ab7uJJEmSJEmSJEkyjOv+6Uv7RxeTJEmSJEmSJEmGsSHfnzaULiFJkiRJkiRJkgxjddtgqmhfRpIkSZIkSZIkGcbSqo/ShbHbSJIkSZIkSZIkw1g0fSQNl99JkiRJkiRJkiQZxrlD+dTVUUWSJEmSJEmSJBnG3zecSI3j1SRJkiRJkiRJkmE8s+TLNL9iBUmSJEmSJEmSZBhHznydJjrvJ0mSJEmSJEmSDOOn+75PA6cTSZIkSZIkSZJkGA+umUwbKxtIkiRJkiRJkiTD2DtvKlXuWEWSJEmSJEmSJBnGztHf0l8/NZEkSZIkSZIkSYbxhZ6ZdGL5GpIkSZIkSZIkyTA+WX8x7XhtLUmSJEmSJEmSZBhXz82mpqknSJIkSZIkSZIkw3jfsf9T8b3rSZIkSZIkSZIkw9h3/Mrs5z1PkSRJkiRJkiRJhnH3LddmB3/ZSJIkSZIkSZIkGcbu9sLsudrnSZIkSZIkSZIkw/jyj0VZde+LJEmSJEmSJEmSYdxSsyCbPbeVJEmSJEmSJEkyjJt6F2Zf5F4iSZIkSZIkSZIM4/rzi7PX971KkiRJkiRJkiQZxrWPlGTNM10kSZIkSZIkSZJhbBpamr0xuJ0kSZIkSZIkSTKMK68ryy6M9ZAkSZIkSZIkSYaxdtPtWcvsTpIkSZIkSZIkyTAuP1mRDZfvIkmSJEmSJEmSDOMdZZVZSfMekiRJkiRJkiTJMC7ddnfW1bGXJEmSJEmSJEkyjIumarJfP3yTJEmSJEmSJEkyjPPqVmSN42+RJEmSJEmSJEmG8ar+2mxoro8kSZIkSZIkSTKM/12qy+ZXvEOSJEmSJEmSJBnGi+vqs60t75IkSZIkSZIkSYZx+mhDNtHZT5IkSZIkSZIkGcazC1ZltUMHSJIkSZIkSZIkwzi55eFs4PT7JEmSJEmSJEmSYfz21KNZQcEgSZIkSZIkSZJkGC8DdffaiA==" + } +} diff --git a/src/mcx_utils.c b/src/mcx_utils.c index b10778a9..19fc9214 100644 --- a/src/mcx_utils.c +++ b/src/mcx_utils.c @@ -2163,7 +2163,7 @@ int mcx_loadjson(cJSON* root, Config* cfg) { val = FIND_JSON_OBJ("MediaFormat", "Domain.MediaFormat", Domain); - if (val) { + if (!flagset['K'] && val) { cfg->mediabyte = mcx_keylookup((char*)FIND_JSON_KEY("MediaFormat", "Domain.MediaFormat", Domain, "byte", valuestring), mediaformat); if (cfg->mediabyte == -1) { @@ -2171,6 +2171,7 @@ int mcx_loadjson(cJSON* root, Config* cfg) { } cfg->mediabyte = mediaformatid[cfg->mediabyte]; + flagset['K'] = 1; } if (!flagset['u']) { @@ -2859,9 +2860,11 @@ int mcx_loadjson(cJSON* root, Config* cfg) { if (FIND_JSON_OBJ("_ArrayZipData_", "Volume._ArrayZipData_", Shapes)) { int ndim; + uint dims[4] = {1, 1, 1, 1}; char* type = NULL, *buf = NULL; - if (mcx_jdatadecode((void**)&buf, &ndim, &(cfg->dim.x), 3, &type, Shapes, cfg) == 0) { + if (mcx_jdatadecode((void**)&buf, &ndim, dims, 4, &type, Shapes, cfg) == 0) { + memcpy(&(cfg->dim.x), dims, sizeof(uint) * 3); mcx_loadvolume(buf, cfg, 1); } @@ -4120,7 +4123,7 @@ int mcx_jdatadecode(void** vol, int* ndim, uint* dims, int maxdim, char** type, vdata = cJSON_GetObjectItem(obj, "_ArrayZipData_"); } - if (vtype) { + if (!flagset['K'] && vtype) { *type = vtype->valuestring; if (strstr(*type, "int8")) { diff --git a/utils/mcx2json.m b/utils/mcx2json.m index b11a9e06..b563df09 100644 --- a/utils/mcx2json.m +++ b/utils/mcx2json.m @@ -125,6 +125,9 @@ function mcx2json(cfg,filestub) else Domain.VolumeFile=''; Shapes=cfg.vol; + if(ndims(Shapes)==4 && size(Shapes,1)>1) + Shapes=permute(Shapes, [2 3 4 1]); + end end end