@@ -1540,17 +1540,27 @@ int mcx_loadjson(cJSON *root, Config *cfg){
15401540 cJSON * med = meds -> child ;
15411541 if (med ){
15421542 cfg -> medianum = cJSON_GetArraySize (meds );
1543+ if (cfg -> prop )
1544+ free (cfg -> prop );
15431545 cfg -> prop = (Medium * )malloc (sizeof (Medium )* cfg -> medianum );
15441546 for (i = 0 ;i < cfg -> medianum ;i ++ ){
1545- cJSON * val = FIND_JSON_OBJ ("mua" ,(MCX_ERROR (-1 ,"You must specify absorption coeff, default in 1/mm" ),"" ),med );
1546- if (val ) cfg -> prop [i ].mua = val -> valuedouble ;
1547- val = FIND_JSON_OBJ ("mus" ,(MCX_ERROR (-1 ,"You must specify scattering coeff, default in 1/mm" ),"" ),med );
1548- if (val ) cfg -> prop [i ].mus = val -> valuedouble ;
1549- val = FIND_JSON_OBJ ("g" ,(MCX_ERROR (-1 ,"You must specify anisotropy [0-1]" ),"" ),med );
1550- if (val ) cfg -> prop [i ].g = val -> valuedouble ;
1551- val = FIND_JSON_OBJ ("n" ,(MCX_ERROR (-1 ,"You must specify refractive index" ),"" ),med );
1552- if (val ) cfg -> prop [i ].n = val -> valuedouble ;
1553-
1547+ if (cJSON_IsObject (med )){
1548+ cJSON * val = FIND_JSON_OBJ ("mua" ,(MCX_ERROR (-1 ,"You must specify absorption coeff, default in 1/mm" ),"" ),med );
1549+ if (val ) cfg -> prop [i ].mua = val -> valuedouble ;
1550+ val = FIND_JSON_OBJ ("mus" ,(MCX_ERROR (-1 ,"You must specify scattering coeff, default in 1/mm" ),"" ),med );
1551+ if (val ) cfg -> prop [i ].mus = val -> valuedouble ;
1552+ val = FIND_JSON_OBJ ("g" ,(MCX_ERROR (-1 ,"You must specify anisotropy [0-1]" ),"" ),med );
1553+ if (val ) cfg -> prop [i ].g = val -> valuedouble ;
1554+ val = FIND_JSON_OBJ ("n" ,(MCX_ERROR (-1 ,"You must specify refractive index" ),"" ),med );
1555+ if (val ) cfg -> prop [i ].n = val -> valuedouble ;
1556+ }else if (cJSON_IsArray (med )){
1557+ cfg -> prop [i ].mua = med -> child -> valuedouble ;
1558+ cfg -> prop [i ].mus = med -> child -> next -> valuedouble ;
1559+ cfg -> prop [i ].g = med -> child -> next -> next -> valuedouble ;
1560+ cfg -> prop [i ].n = med -> child -> next -> next -> next -> valuedouble ;
1561+ }else {
1562+ MCX_ERROR (-1 ,"Session.Media must be either an array of objects or array of 4-elem numerical arrays" );
1563+ }
15541564 med = med -> next ;
15551565 if (med == NULL ) break ;
15561566 }
@@ -1568,7 +1578,7 @@ int mcx_loadjson(cJSON *root, Config *cfg){
15681578 cfg -> dim .y = val -> child -> next -> valueint ;
15691579 cfg -> dim .z = val -> child -> next -> next -> valueint ;
15701580 }else {
1571- if (!Shapes )
1581+ if (!Shapes && cfg -> extrajson == NULL )
15721582 MCX_ERROR (-1 ,"You must specify the dimension of the volume" );
15731583 }
15741584 val = FIND_JSON_OBJ ("Step" ,"Domain.Step" ,Domain );
0 commit comments