From b4d40d823cba145efdbb80495c5fb3a3dfdcb55f Mon Sep 17 00:00:00 2001 From: Jordan Ocokoljic Date: Tue, 6 Feb 2024 23:10:03 +1100 Subject: [PATCH] Fix issues with JOS3, migrate most functions to use `math.Matrix` instead of plain arrays (#125) --- docs/index.html | 368 +- package-lock.json | 165 +- package.json | 5 +- src/jos3_functions/bfb_rate.js | 4 +- src/jos3_functions/conductance.js | 130 +- src/jos3_functions/local_bsa.js | 6 +- src/jos3_functions/matrix.js | 310 +- .../thermoregulation/ava_blood_flow.js | 23 +- .../thermoregulation/basal_met.js | 1 + .../thermoregulation/clo_area_factor.js | 4 +- .../thermoregulation/conv_coef.js | 74 +- .../thermoregulation/cr_ms_fat_blood_flow.js | 45 +- src/jos3_functions/thermoregulation/dry_r.js | 18 +- .../thermoregulation/error_signals.js | 33 +- .../thermoregulation/evaporation.js | 78 +- .../thermoregulation/fixed_hc.js | 13 +- .../thermoregulation/fixed_hr.js | 12 +- .../thermoregulation/local_mbase.js | 28 +- .../thermoregulation/local_q_work.js | 10 +- .../thermoregulation/nonshivering.js | 11 +- .../thermoregulation/operative_temp.js | 17 +- .../thermoregulation/rad_coef.js | 15 +- .../thermoregulation/resp_heat_loss.js | 11 +- .../thermoregulation/shivering.js | 56 +- .../thermoregulation/skin_blood_flow.js | 56 +- src/jos3_functions/thermoregulation/sum_bf.js | 20 +- src/jos3_functions/thermoregulation/sum_m.js | 42 +- src/jos3_functions/thermoregulation/wet_r.js | 23 +- src/models/JOS3.js | 991 ++-- src/models/index.js | 2 + src/supa.js | 2 +- tests/index.test.js | 4 + tests/jos3_functions/conductance.test.js | 2 +- tests/jos3_functions/local_bsa.test.js | 2 +- .../thermoregulation/ava_blood_flow.test.js | 20 +- .../thermoregulation/clo_area_factor.test.js | 14 +- .../thermoregulation/conv_coef.test.js | 2 +- .../cr_ms_fat_blood_flow.test.js | 74 +- .../thermoregulation/dry_r.test.js | 34 +- .../thermoregulation/error_signals.test.js | 9 +- .../thermoregulation/evaporation.test.js | 104 +- .../thermoregulation/fixed_hc.test.js | 12 +- .../thermoregulation/fixed_hr.test.js | 2 +- .../thermoregulation/local_mbase.test.js | 2 +- .../thermoregulation/local_q_work.test.js | 2 +- .../thermoregulation/nonshivering.test.js | 229 +- .../thermoregulation/operative_temp.test.js | 22 +- .../thermoregulation/rad_coef.test.js | 2 +- .../thermoregulation/resp_heat_loss.test.js | 2 +- .../thermoregulation/shivering.test.js | 1508 +++++- .../thermoregulation/skin_blood_flow.test.js | 31 +- .../thermoregulation/sum_bf.test.js | 2 +- .../thermoregulation/sum_m.test.js | 72 +- .../thermoregulation/wet_r.test.js | 25 +- tests/models/1_run_dict.json | 578 +++ tests/models/1_run_getters.json | 198 + tests/models/1_run_setters.json | 153 + tests/models/20_runs_dict.json | 4425 +++++++++++++++++ tests/models/JOS3.test.js | 213 +- 59 files changed, 9004 insertions(+), 1312 deletions(-) create mode 100644 tests/models/1_run_dict.json create mode 100644 tests/models/1_run_getters.json create mode 100644 tests/models/1_run_setters.json create mode 100644 tests/models/20_runs_dict.json diff --git a/docs/index.html b/docs/index.html index c271aba..8e57df0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -309,6 +309,12 @@

jsthermalcomfort

Physiological Equivalent Temperature (PET) +
  • + JOS3 +
  • + @@ -737,7 +743,7 @@

    - + src/models/index.js @@ -788,7 +794,7 @@

    - + src/models/heat_index.js @@ -940,7 +946,7 @@

    - + src/models/phs.js @@ -1091,7 +1097,7 @@

    - + src/models/phs.js @@ -1273,7 +1279,7 @@

    - + src/models/phs.js @@ -1443,7 +1449,7 @@

    - + src/models/humidex.js @@ -1563,7 +1569,7 @@

    - + src/models/humidex.js @@ -1678,7 +1684,7 @@

    - + src/models/net.js @@ -1839,7 +1845,7 @@

    - + src/models/wbgt.js @@ -2021,7 +2027,7 @@

    - + src/models/discomfort_index.js @@ -2106,7 +2112,7 @@

    - + src/models/discomfort_index.js @@ -2227,7 +2233,7 @@

    - + src/models/discomfort_index.js @@ -2312,7 +2318,7 @@

    - + src/models/discomfort_index.js @@ -2427,7 +2433,7 @@

    - + src/models/two_nodes.js @@ -2621,7 +2627,7 @@

    - + src/models/two_nodes.js @@ -2719,7 +2725,7 @@

    - + src/models/two_nodes.js @@ -2972,7 +2978,7 @@

    - + src/models/two_nodes.js @@ -3161,7 +3167,7 @@

    - + src/models/two_nodes.js @@ -3414,7 +3420,7 @@

    - + src/models/set_tmp.js @@ -3601,7 +3607,7 @@

    - + src/models/set_tmp.js @@ -3722,7 +3728,7 @@

    - + src/models/set_tmp.js @@ -3938,7 +3944,7 @@

    - + src/models/wc.js @@ -4075,7 +4081,7 @@

    - + src/models/adaptive_en.js @@ -4208,7 +4214,7 @@

    - + src/models/adaptive_en.js @@ -4399,7 +4405,7 @@

    - + src/models/adaptive_en.js @@ -4532,7 +4538,7 @@

    - + src/models/adaptive_en.js @@ -4714,7 +4720,7 @@

    - + src/models/at.js @@ -4876,7 +4882,7 @@

    - + src/models/pmv_ppd.js @@ -5056,7 +5062,7 @@

    - + src/models/pmv_ppd.js @@ -5158,7 +5164,7 @@

    - + src/models/pmv_ppd.js @@ -5291,7 +5297,7 @@

    - + src/models/pmv_ppd.js @@ -5470,7 +5476,7 @@

    - + src/models/pmv_ppd.js @@ -5603,7 +5609,7 @@

    - + src/models/adaptive_ashrae.js @@ -5743,7 +5749,7 @@

    - + src/models/adaptive_ashrae.js @@ -5923,7 +5929,7 @@

    - + src/models/adaptive_ashrae.js @@ -6063,7 +6069,7 @@

    - + src/models/adaptive_ashrae.js @@ -6243,7 +6249,7 @@

    - + src/models/solar_gain.js @@ -6413,7 +6419,7 @@

    - + src/models/solar_gain.js @@ -6528,7 +6534,7 @@

    - + src/models/cooling_effect.js @@ -6712,7 +6718,7 @@

    - + src/models/athb.js @@ -6877,7 +6883,7 @@

    - + src/models/athb.js @@ -7043,7 +7049,7 @@

    - + src/models/pmv.js @@ -7219,7 +7225,7 @@

    - + src/models/pmv.js @@ -7371,7 +7377,7 @@

    - + src/models/pmv.js @@ -7590,7 +7596,7 @@

    - + src/models/a_pmv.js @@ -7753,7 +7759,7 @@

    - + src/models/a_pmv.js @@ -7888,7 +7894,7 @@

    - + src/models/a_pmv.js @@ -8091,7 +8097,7 @@

    - + src/models/ankle_draft.js @@ -8246,7 +8252,7 @@

    - + src/models/ankle_draft.js @@ -8359,7 +8365,7 @@

    - + src/models/e_pmv.js @@ -8523,7 +8529,7 @@

    - + src/models/e_pmv.js @@ -8660,7 +8666,7 @@

    - + src/models/e_pmv.js @@ -8866,7 +8872,7 @@

    - + src/models/vertical_tmp_grad_ppd.js @@ -9008,7 +9014,7 @@

    - + src/models/vertical_tmp_grad_ppd.js @@ -9121,7 +9127,7 @@

    - + src/models/use_fans_heatwave.js @@ -9307,7 +9313,7 @@

    - + src/models/use_fans_heatwave.js @@ -9400,7 +9406,7 @@

    - + src/models/use_fans_heatwave.js @@ -9636,7 +9642,7 @@

    - + src/models/clo_tout.js @@ -9746,7 +9752,7 @@

    - + src/models/clo_tout.js @@ -9856,7 +9862,7 @@

    - + src/models/utci.js @@ -10027,7 +10033,7 @@

    - + src/models/utci.js @@ -10200,7 +10206,7 @@

    - + src/models/pet_steady.js @@ -10399,6 +10405,192 @@

    + + + +

    +

    + +
    +
    +
    + + JOS3 + +
    +
    +
    +
    + + + + + +

    JOS-3 model simulates human thermal physiology including skin +temperature, core temperature, sweating rate, etc. for the whole body and +17 local body parts.

    +

    This model was developed at Shin-ichi Tanabe Laboratory, Waseda University +and was derived from 65 Multi-Node model (https://doi.org/10.1016/S0378-7788(02)00014-2) +and JOS-2 model (https://doi.org/10.1016/j.buildenv.2013.04.013).

    +

    To use this model, create an instance of the JOS3 class with optional body parameters +such as body height, weight, age, sex, etc.

    +

    Environmental conditions such as air temperature, mean radiant temperature, air velocity, etc. +can be set using the setter methods. (ex. X.tdb, X.tr X.v) +If you want to set the different conditions in each body part, set them +as a 17 lengths of list, dictionary, or numpy array format.

    +

    List or numpy array format input must be 17 lengths and means the order of "head", "neck", "chest", +"back", "pelvis", "left_shoulder", "left_arm", "left_hand", "right_shoulder", "right_arm", +"right_hand", "left_thigh", "left_leg", "left_foot", "right_thigh", "right_leg" and "right_foot".

    +

    The model output includes local and mean skin temperature, local core temperature, +local and mean skin wettedness, and heat loss from the skin etc. +The model output can be accessed using "dict_results()" method and be converted to a csv file +using "to_csv" method. +Each output parameter also can be accessed using getter methods. +(ex. X.t_skin, X.t_skin_mean, X.t_core)

    +

    If you use this package, please cite us as follows and mention the version of pythermalcomfort used: +Y. Takahashi, A. Nomoto, S. Yoda, R. Hisayama, M. Ogata, Y. Ozeki, S. Tanabe, +Thermoregulation Model JOS-3 with New Open Source Code, Energy & Buildings (2020), +doi: https://doi.org/10.1016/j.enbuild.2020.110575

    +

    Note: To maintain consistency in variable names for jsthermalcomfort and pythermalcomfort, +some variable names differ from those used in the original paper.

    + + + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + height (number? + = JOS3Defaults.height) + body height, in [m]. + +
    + +
    + +
    +
    + weight (number? + = JOS3Defaults.weight) + body weight, in [kg]. + +
    + +
    + +
    +
    + fat (number? + = JOS3Defaults.body_fat) + fat percentage, in [%]. + +
    + +
    + +
    +
    + age (number? + = JOS3Defaults.age) + age, in [years]. + +
    + +
    + +
    +
    + sex (("male" | "female")? + = JOS3Defaults.sex) + sex. + +
    + +
    + +
    +
    + ci (number? + = JOS3Defaults.cardiac_index) + Cardiac index, in [L/min/m2]. + +
    + +
    + +
    +
    + bmr_equation (("harris-benedict" | "harris-benedict_origin" | "japanese" | "ganpule")? + = JOS3Defaults.bmr_equation) + The equation used +to calculate basal metabolic rate (BMR). + +
    + +
    + +
    +
    + bsa_equation (("dubois" | "fujimoto" | "kruazumi" | "takahira")? + = JOS3Defaults.bsa_equation) + The equation used to calculate body +surface area (bsa). + +
    + +
    + +
    +
    + ex_output (([] | "all")? + = []) + This is used when you want to display results other than the default output +parameters (ex.skin temperature); by default, JOS outputs only the most necessary parameters in order to reduce +the computational load. + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    @@ -10434,7 +10626,7 @@

    - + src/psychrometrics/index.js @@ -10485,7 +10677,7 @@

    - + src/psychrometrics/p_sat.js @@ -10568,7 +10760,7 @@

    - + src/psychrometrics/p_sat_torr.js @@ -10660,7 +10852,7 @@

    - + src/psychrometrics/p_sat_torr.js @@ -10752,7 +10944,7 @@

    - + src/psychrometrics/t_o.js @@ -10872,7 +11064,7 @@

    - + src/psychrometrics/t_o.js @@ -10992,7 +11184,7 @@

    - + src/psychrometrics/enthalpy.js @@ -11084,7 +11276,7 @@

    - + src/psychrometrics/t_wb.js @@ -11176,7 +11368,7 @@

    - + src/psychrometrics/t_mrt.js @@ -11324,7 +11516,7 @@

    - + src/psychrometrics/t_mrt.js @@ -11464,7 +11656,7 @@

    - + src/psychrometrics/psy_ta_rh.js @@ -11551,7 +11743,7 @@

    - + src/psychrometrics/psy_ta_rh.js @@ -11700,7 +11892,7 @@

    - + src/utilities/index.js @@ -11751,7 +11943,7 @@

    - + src/utilities/utilities.js @@ -11853,7 +12045,7 @@

    - + src/utilities/utilities.js @@ -11957,7 +12149,7 @@

    - + src/utilities/utilities.js @@ -12061,7 +12253,7 @@

    - + src/utilities/utilities.js @@ -12177,7 +12369,7 @@

    - + src/utilities/utilities.js @@ -12293,7 +12485,7 @@

    - + src/utilities/utilities.js @@ -12395,7 +12587,7 @@

    - + src/utilities/utilities.js @@ -12497,7 +12689,7 @@

    - + src/utilities/utilities.js @@ -12616,7 +12808,7 @@

    - + src/utilities/utilities.js @@ -12731,7 +12923,7 @@

    - + src/utilities/index.js @@ -12782,7 +12974,7 @@

    - + src/utilities/utilities.js @@ -13078,7 +13270,7 @@

    - + src/utilities/utilities.js @@ -13178,7 +13370,7 @@

    - + src/utilities/utilities.js diff --git a/package-lock.json b/package-lock.json index 8fb6db4..11a4096 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,18 @@ { "name": "jsthermalcomfort", - "version": "0.1.4", + "version": "0.1.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "jsthermalcomfort", - "version": "0.1.4", + "version": "0.1.5", "license": "MIT", "dependencies": { "mathjs": "^11.11.2" }, "devDependencies": { + "@jest/globals": "^29.7.0", "documentation": "^14.0.2", "github-slugger": "^2.0.0", "highlight.js": "^11.8.0", @@ -764,37 +765,37 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", - "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.4", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^29.6.4", - "jest-snapshot": "^29.6.4" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", - "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3" @@ -804,32 +805,32 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", - "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", - "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -935,9 +936,9 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", - "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -948,9 +949,9 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2238,16 +2239,16 @@ } }, "node_modules/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.4", + "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3" + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3179,15 +3180,15 @@ } }, "node_modules/jest-diff": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", - "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3248,9 +3249,9 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", - "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -3260,8 +3261,8 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -3286,24 +3287,24 @@ } }, "node_modules/jest-matcher-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", - "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.4", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -3312,7 +3313,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -3321,14 +3322,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", - "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.3" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3459,9 +3460,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", - "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -3469,20 +3470,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.4", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.4", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -3523,9 +3524,9 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", - "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -3588,13 +3589,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", - "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -5263,9 +5264,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", diff --git a/package.json b/package.json index fe7dd10..faf2f52 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jsthermalcomfort", - "version": "0.1.5", + "version": "0.2.0", "description": "A JavaScript package to calculate thermophysiological, thermal comfort, thermal stress indices", "type": "module", "files": [ @@ -51,7 +51,8 @@ "jsdoc": "^4.0.2", "lodash": "^4.17.21", "prettier": "3.0.2", - "typescript": "^5.1.6" + "typescript": "^5.1.6", + "@jest/globals": "^29.7.0" }, "dependencies": { "mathjs": "^11.11.2" diff --git a/src/jos3_functions/bfb_rate.js b/src/jos3_functions/bfb_rate.js index a7c6d8a..e7b0522 100644 --- a/src/jos3_functions/bfb_rate.js +++ b/src/jos3_functions/bfb_rate.js @@ -1,6 +1,7 @@ import JOS3Defaults from "./JOS3Defaults.js"; import { bsa_rate } from "./bsa_rate.js"; import { validate_body_parameters } from "./validate_body_parameters.js"; +import * as math from "mathjs"; /** * Calculate the ratio of basal blood flow (BFB) of the standard body (290 L/h). @@ -38,6 +39,7 @@ export function bfb_rate( const bfb_all = ci * bsa_rate(height, weight, bsa_equation) * - JOS3Defaults.local_bsa.reduce((t, c) => t + c, 0); + math.sum(JOS3Defaults.local_bsa); + return bfb_all / JOS3Defaults.blood_flow_rate; } diff --git a/src/jos3_functions/conductance.js b/src/jos3_functions/conductance.js index bd91b34..5278417 100644 --- a/src/jos3_functions/conductance.js +++ b/src/jos3_functions/conductance.js @@ -3,10 +3,7 @@ import { validate_body_parameters } from "./validate_body_parameters.js"; import { weight_rate } from "./weight_rate.js"; import { bsa_rate } from "./bsa_rate.js"; import { NUM_NODES, BODY_NAMES, IDICT } from "./matrix.js"; - -function maprange(array, from, to, op) { - return array.map((x, i) => (i >= from && i < to ? op(x) : x)); -} +import * as math from "mathjs"; /** * Calculate thermal conductance between layers. @@ -16,7 +13,7 @@ function maprange(array, from, to, op) { * @param {string} bsa_equation - The equation name (str) of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", or "kurazumi". Default is "dubois". * @param {number} fat - Body fat rate in [%]. Default is 15. - * @returns {number[][]} conductance - Thermal conductance between layers in [W/K]. The shape is (NUM_NODES, NUM_NODES). + * @returns {math.Matrix} conductance - Thermal conductance between layers in [W/K]. The shape is (NUM_NODES, NUM_NODES). */ export function conductance( height = JOS3Defaults.height, @@ -28,44 +25,44 @@ export function conductance( let cdt_cr_sk; if (fat < 12.5) { - cdt_cr_sk = [ + cdt_cr_sk = math.matrix([ 1.341, 0.93, 1.879, 1.729, 2.37, 1.557, 1.018, 2.21, 1.557, 1.018, 2.21, 2.565, 1.378, 3.404, 2.565, 1.378, 3.404, - ]; + ]); } else if (fat < 17.5) { - cdt_cr_sk = [ + cdt_cr_sk = math.matrix([ 1.311, 0.909, 1.785, 1.643, 2.251, 1.501, 0.982, 2.183, 1.501, 0.982, 2.183, 2.468, 1.326, 3.37, 2.468, 1.326, 3.37, - ]; + ]); } else if (fat < 22.5) { - cdt_cr_sk = [ + cdt_cr_sk = math.matrix([ 1.282, 0.889, 1.698, 1.563, 2.142, 1.448, 0.947, 2.156, 1.448, 0.947, 2.156, 2.375, 1.276, 3.337, 2.375, 1.276, 3.337, - ]; + ]); } else if (fat < 27.5) { - cdt_cr_sk = [ + cdt_cr_sk = math.matrix([ 1.255, 0.87, 1.618, 1.488, 2.04, 1.396, 0.913, 2.13, 1.396, 0.913, 2.13, 2.285, 1.227, 3.304, 2.285, 1.227, 3.304, - ]; + ]); } else { // fat >= 27.5 - cdt_cr_sk = [ + cdt_cr_sk = math.matrix([ 1.227, 0.852, 1.542, 1.419, 1.945, 1.346, 0.88, 1.945, 1.346, 0.88, 1.945, 2.198, 1.181, 3.271, 2.198, 1.181, 3.271, - ]; + ]); } - let cdt_cr_ms = Array(17).fill(0); // core to muscle [W/K] - let cdt_ms_fat = Array(17).fill(0); // muscle to fat [W/K] - let cdt_fat_sk = Array(17).fill(0); // fat to skin [W/K] + let cdt_cr_ms = math.zeros(17); // core to muscle [W/K] + let cdt_ms_fat = math.zeros(17); // muscle to fat [W/K] + let cdt_fat_sk = math.zeros(17); // fat to skin [W/K] // head and pelvis consists of 65MN's conductances - cdt_cr_ms[0] = 1.601; // head - cdt_ms_fat[0] = 13.222; - cdt_fat_sk[0] = 16.008; - cdt_cr_ms[4] = 3.0813; // pelvis - cdt_ms_fat[4] = 10.3738; - cdt_fat_sk[4] = 41.4954; + cdt_cr_ms.set([0], 1.601); // head + cdt_ms_fat.set([0], 13.222); + cdt_fat_sk.set([0], 16.008); + cdt_cr_ms.set([4], 3.0813); // pelvis + cdt_ms_fat.set([4], 10.3738); + cdt_fat_sk.set([4], 41.4954); // vessel to core // The shape is a cylinder. @@ -73,53 +70,62 @@ export function conductance( // stolwijk's core radius. // The heat transfer coefficient of the core is assumed as the Michel's // counter-flow model 0.66816 [W/(m・K)]. - let cdt_ves_cr = [ + let cdt_ves_cr = math.matrix([ 0, 0, 0, 0, 0, 0.586, 0.383, 1.534, 0.586, 0.383, 1.534, 0.81, 0.435, 1.816, 0.81, 0.435, 1.816, - ]; + ]); // superficial vein to skin - let cdt_sfv_sk = [ + let cdt_sfv_sk = math.matrix([ 0, 0, 0, 0, 0, 57.735, 37.768, 16.634, 57.735, 37.768, 16.634, 102.012, 54.784, 24.277, 102.012, 54.784, 24.277, - ]; + ]); // art to vein (counter-flow) [W/K] // The data has been derived Mitchell's model. // The values = 15.869 [W/(m・K)] * the segment length [m] - let cdt_art_vein = [ + let cdt_art_vein = math.matrix([ 0, 0, 0, 0, 0, 0.537, 0.351, 0.762, 0.537, 0.351, 0.762, 0.826, 0.444, 0.992, 0.826, 0.444, 0.992, - ]; + ]); // Changes values by body size based on the standard body. const wr = weight_rate(weight); const bsar = bsa_rate(height, weight, bsa_equation); - const adjustSphere = (x) => (x * wr) / bsar; - const adjustCylinder = (x) => (x * Math.pow(bsar, 2)) / wr; + const adjustSphere = (matrix, range) => { + let index = math.index(math.range(0, 2)); + let subset = math.subset(matrix, index); + subset = math.dotDivide(math.dotMultiply(subset, wr), bsar); + return math.subset(matrix, index, subset); + }; + + const adjustCylinder = (matrix) => { + let index = math.index(math.range(2, matrix.size()[0])); + let subset = math.subset(matrix, index); + subset = math.dotDivide(math.dotMultiply(subset, bsar ** 2), wr); + return math.subset(matrix, index, subset); + }; // head, neck (Sphere shape) - cdt_cr_sk = maprange(cdt_cr_sk, 0, 2, adjustSphere); - cdt_cr_ms = maprange(cdt_cr_ms, 0, 2, adjustSphere); - cdt_ms_fat = maprange(cdt_ms_fat, 0, 2, adjustSphere); - cdt_fat_sk = maprange(cdt_fat_sk, 0, 2, adjustSphere); - cdt_ves_cr = maprange(cdt_ves_cr, 0, 2, adjustSphere); - cdt_sfv_sk = maprange(cdt_sfv_sk, 0, 2, adjustSphere); - cdt_art_vein = maprange(cdt_art_vein, 0, 2, adjustSphere); + cdt_cr_sk = adjustSphere(cdt_cr_sk); + cdt_cr_ms = adjustSphere(cdt_cr_ms); + cdt_ms_fat = adjustSphere(cdt_ms_fat); + cdt_fat_sk = adjustSphere(cdt_fat_sk); + cdt_ves_cr = adjustSphere(cdt_ves_cr); + cdt_sfv_sk = adjustSphere(cdt_sfv_sk); + cdt_art_vein = adjustSphere(cdt_art_vein); // Others (Cylinder shape) - cdt_cr_sk = maprange(cdt_cr_sk, 2, cdt_cr_sk.length, adjustCylinder); - cdt_cr_ms = maprange(cdt_cr_ms, 2, cdt_cr_ms.length, adjustCylinder); - cdt_ms_fat = maprange(cdt_ms_fat, 2, cdt_ms_fat.length, adjustCylinder); - cdt_fat_sk = maprange(cdt_fat_sk, 2, cdt_fat_sk.length, adjustCylinder); - cdt_ves_cr = maprange(cdt_ves_cr, 2, cdt_ves_cr.length, adjustCylinder); - cdt_sfv_sk = maprange(cdt_sfv_sk, 2, cdt_sfv_sk.length, adjustCylinder); - cdt_art_vein = maprange(cdt_art_vein, 2, cdt_art_vein.length, adjustCylinder); - - const cdt_whole = Array(NUM_NODES) - .fill() - .map(() => Array(NUM_NODES).fill(0)); + cdt_cr_sk = adjustCylinder(cdt_cr_sk); + cdt_cr_ms = adjustCylinder(cdt_cr_ms); + cdt_ms_fat = adjustCylinder(cdt_ms_fat); + cdt_fat_sk = adjustCylinder(cdt_fat_sk); + cdt_ves_cr = adjustCylinder(cdt_ves_cr); + cdt_sfv_sk = adjustCylinder(cdt_sfv_sk); + cdt_art_vein = adjustCylinder(cdt_art_vein); + + const cdt_whole = math.zeros(NUM_NODES, NUM_NODES); for (let i = 0; i < BODY_NAMES.length; i++) { const bn = BODY_NAMES[i]; @@ -128,26 +134,32 @@ export function conductance( const index_of = IDICT[bn]; // Common - cdt_whole[index_of["artery"]][index_of["vein"]] = cdt_art_vein[i]; // art to vein - cdt_whole[index_of["artery"]][index_of["core"]] = cdt_ves_cr[i]; // art to cr - cdt_whole[index_of["vein"]][index_of["core"]] = cdt_ves_cr[i]; // vein to cr + cdt_whole.set( + [index_of["artery"], index_of["vein"]], + cdt_art_vein.get([i]), + ); // art to vein + cdt_whole.set([index_of["artery"], index_of["core"]], cdt_ves_cr.get([i])); // art to cr + cdt_whole.set([index_of["vein"], index_of["core"]], cdt_ves_cr.get([i])); // vein to cr // Only limbs if (i >= 5) { - cdt_whole[index_of["sfvein"]][index_of["skin"]] = cdt_sfv_sk[i]; // sfv to sk + cdt_whole.set( + [index_of["sfvein"], index_of["skin"]], + cdt_sfv_sk.get([i]), + ); // sfv to sk } // If the segment has a muscle or fat layer if (index_of["muscle"] !== null) { // or not indexof["fat"] is None - cdt_whole[index_of["core"]][index_of["muscle"]] = cdt_cr_ms[i]; // cr to ms - cdt_whole[index_of["muscle"]][index_of["fat"]] = cdt_ms_fat[i]; // ms to fat - cdt_whole[index_of["fat"]][index_of["skin"]] = cdt_fat_sk[i]; // fat to sk + cdt_whole.set([index_of["core"], index_of["muscle"]], cdt_cr_ms.get([i])); // cr to ms + cdt_whole.set([index_of["muscle"], index_of["fat"]], cdt_ms_fat.get([i])); // ms to fat + cdt_whole.set([index_of["fat"], index_of["skin"]], cdt_fat_sk.get([i])); // fat to sk } else { - cdt_whole[index_of["core"]][index_of["skin"]] = cdt_cr_sk[i]; // cr to sk + cdt_whole.set([index_of["core"], index_of["skin"]], cdt_cr_sk.get([i])); // cr to sk } } // Creates a symmetrical matrix - return cdt_whole.map((row, i) => row.map((val, j) => val + cdt_whole[j][i])); + return math.add(cdt_whole, math.transpose(cdt_whole)); } diff --git a/src/jos3_functions/local_bsa.js b/src/jos3_functions/local_bsa.js index 02ad1c0..56f1f6a 100644 --- a/src/jos3_functions/local_bsa.js +++ b/src/jos3_functions/local_bsa.js @@ -1,6 +1,7 @@ import JOS3Defaults from "./JOS3Defaults.js"; import { validate_body_parameters } from "./validate_body_parameters.js"; import { bsa_rate } from "./bsa_rate.js"; +import * as math from "mathjs"; /** * Calculate local body surface area (bsa) [m2]. @@ -15,7 +16,8 @@ import { bsa_rate } from "./bsa_rate.js"; * @param {string} [bsa_equation=JOS3Defaults.bsa_equation] - The equation name * of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", * or "kurazumi". - * @returns {number[]} local_bsa of length 17 - Local body surface area (bsa) [m2] + * + * @returns {math.Matrix} local_bsa of length 17 - Local body surface area (bsa) [m2] */ export function local_bsa( height = JOS3Defaults.height, @@ -25,5 +27,5 @@ export function local_bsa( validate_body_parameters(height, weight); const bsa = bsa_rate(height, weight, bsa_equation); - return JOS3Defaults.local_bsa.map((local_bsa) => local_bsa * bsa); + return math.matrix(math.dotMultiply(JOS3Defaults.local_bsa, bsa)); } diff --git a/src/jos3_functions/matrix.js b/src/jos3_functions/matrix.js index 4edcf9f..5f659ff 100644 --- a/src/jos3_functions/matrix.js +++ b/src/jos3_functions/matrix.js @@ -1,4 +1,4 @@ -import { $array, $map, $reduce, $sum } from "../supa.js"; +import * as math from "mathjs"; export const BODY_NAMES = [ "head", @@ -86,17 +86,24 @@ export const [IDICT, NUM_NODES] = (() => { return [index_dict, order_count]; })(); +/** + * @typedef VesselBloodFlowResult + * @type {object} + * @property {math.MathCollection} bf_art - Artery blood flow rate [l/h]. + * @property {math.MathCollection} bf_vein - Vein blood flow rate [l/h]. + */ + /** * Get artery and vein blood flow rate [l/h]. * - * @param {number[]} bf_core - Core blood flow rate [l/h]. - * @param {number[]} bf_muscle - Muscle blood flow rate [l/h]. - * @param {number[]} bf_fat - Fat blood flow rate [l/h]. - * @param {number[]} bf_skin - Skin blood flow rate [l/h]. + * @param {math.MathCollection} bf_core - Core blood flow rate [l/h]. + * @param {math.MathCollection} bf_muscle - Muscle blood flow rate [l/h]. + * @param {math.MathCollection} bf_fat - Fat blood flow rate [l/h]. + * @param {math.MathCollection} bf_skin - Skin blood flow rate [l/h]. * @param {number} bf_ava_hand - AVA blood flow rate at hand [l/h]. * @param {number} bf_ava_foot - AVA blood flow rate at foot [l/h]. * - * @returns {[number[], number[]]} bf_artery, bf_vein - Artery and vein blood flow rate [l/h]. + * @returns {VesselBloodFlowResult} bf_artery, bf_vein - Artery and vein blood flow rate [l/h]. */ export function vessel_blood_flow( bf_core, @@ -106,92 +113,127 @@ export function vessel_blood_flow( bf_ava_hand, bf_ava_foot, ) { - let xbf = $map( - [bf_core, bf_muscle, bf_fat, bf_skin], - ([bf_core, bf_muscle, bf_fat, bf_skin]) => - bf_core + bf_muscle + bf_fat + bf_skin, - ); + let xbf = math.add(bf_core, bf_muscle, bf_fat, bf_skin); - let bf_art = $array(17, 0); - let bf_vein = $array(17, 0); + let bf_art = math.zeros(17); + let bf_vein = math.zeros(17); // head - bf_art[0] = xbf[0]; - bf_vein[0] = xbf[0]; + bf_art.set([0], xbf.get([0])); + bf_vein.set([0], xbf.get([0])); // neck (+head) - bf_art[1] = xbf[1] + xbf[0]; - bf_vein[1] = xbf[1] + xbf[0]; + bf_art.set([1], xbf.get([1]) + xbf.get([0])); + bf_vein.set([1], xbf.get([1]) + xbf.get([0])); // chest - bf_art[2] = xbf[2]; - bf_vein[2] = xbf[2]; + bf_art.set([2], xbf.get([2])); + bf_vein.set([2], xbf.get([2])); // back - bf_art[3] = xbf[3]; - bf_vein[3] = xbf[3]; + bf_art.set([3], xbf.get([3])); + bf_vein.set([3], xbf.get([3])); // pelvis (+Thighs, Legs, Feet, AVA_Feet) - bf_art[4] = xbf[4] + $sum(xbf.slice(11, 17)) + 2 * bf_ava_foot; - bf_vein[4] = xbf[4] + $sum(xbf.slice(11, 17)) + 2 * bf_ava_foot; + bf_art.set( + [4], + xbf.get([4]) + + math.sum(xbf.subset(math.index(math.range(11, 17)))) + + 2 * bf_ava_foot, + ); + bf_vein.set( + [4], + xbf.get([4]) + + math.sum(xbf.subset(math.index(math.range(11, 17)))) + + 2 * bf_ava_foot, + ); // L.Shoulder (+Arm, Hand, (arteryのみAVA_Hand)) - bf_art[5] = $sum(xbf.slice(5, 8)) + bf_ava_hand; - bf_vein[5] = $sum(xbf.slice(5, 8)); + bf_art.set( + [5], + math.sum(xbf.subset(math.index(math.range(5, 8)))) + bf_ava_hand, + ); + bf_vein.set([5], math.sum(xbf.subset(math.index(math.range(5, 8))))); // L.Arm (+Hand) - bf_art[6] = $sum(xbf.slice(6, 8)) + bf_ava_hand; - bf_vein[6] = $sum(xbf.slice(6, 8)); + bf_art.set( + [6], + math.sum(xbf.subset(math.index(math.range(6, 8)))) + bf_ava_hand, + ); + bf_vein.set([6], math.sum(xbf.subset(math.index(math.range(6, 8))))); + + // L.Hand + bf_art.set([7], xbf.get([7]) + bf_ava_hand); + bf_vein.set([7], xbf.get([7])); // R.Shoulder (+Arm, Hand, (arteryのみAVA_Hand)) - bf_art[8] = $sum(xbf.slice(8, 11)) + bf_ava_hand; - bf_vein[8] = $sum(xbf.slice(8, 11)); + bf_art.set( + [8], + math.sum(xbf.subset(math.index(math.range(8, 11)))) + bf_ava_hand, + ); + bf_vein.set([8], math.sum(xbf.subset(math.index(math.range(8, 11))))); // R.Arm (+Hand) - bf_art[9] = $sum(xbf.slice(9, 11)) + bf_ava_hand; - bf_vein[9] = $sum(xbf.slice(9, 11)); + bf_art.set( + [9], + math.sum(xbf.subset(math.index(math.range(9, 11)))) + bf_ava_hand, + ); + bf_vein.set([9], math.sum(xbf.subset(math.index(math.range(9, 11))))); // R.Hand - bf_art[10] = xbf[10] + bf_ava_hand; - bf_vein[10] = xbf[10]; + bf_art.set([10], xbf.get([10]) + bf_ava_hand); + bf_vein.set([10], xbf.get([10])); // L.Thigh (+Leg, Foot, (arteryのみAVA_Foot)) - bf_art[11] = $sum(xbf.slice(11, 14)) + bf_ava_foot; - bf_vein[11] = $sum(xbf.slice(11, 14)); + bf_art.set( + [11], + math.sum(xbf.subset(math.index(math.range(11, 14)))) + bf_ava_foot, + ); + bf_vein.set([11], math.sum(xbf.subset(math.index(math.range(11, 14))))); // L.Leg (+Foot) - bf_art[12] = $sum(xbf.slice(12, 14)) + bf_ava_foot; - bf_vein[12] = $sum(xbf.slice(12, 14)); + bf_art.set( + [12], + math.sum(xbf.subset(math.index(math.range(12, 14)))) + bf_ava_foot, + ); + bf_vein.set([12], math.sum(xbf.subset(math.index(math.range(12, 14))))); // L.Foot - bf_art[13] = xbf[13] + bf_ava_foot; - bf_vein[13] = xbf[13]; + bf_art.set([13], xbf.get([13]) + bf_ava_foot); + bf_vein.set([13], xbf.get([13])); // R.Thigh (+Leg, Foot, (arteryのみAVA_Foot)) - bf_art[14] = $sum(xbf.slice(14, 17)) + bf_ava_foot; - bf_vein[14] = $sum(xbf.slice(14, 17)); + bf_art.set( + [14], + math.sum(xbf.subset(math.index(math.range(14, 17)))) + bf_ava_foot, + ); + bf_vein.set([14], math.sum(xbf.subset(math.index(math.range(14, 17))))); // R.Leg (+Foot) - bf_art[15] = $sum(xbf.slice(15, 17)) + bf_ava_foot; - bf_vein[15] = $sum(xbf.slice(15, 17)); + bf_art.set( + [15], + math.sum(xbf.subset(math.index(math.range(15, 17)))) + bf_ava_foot, + ); + bf_vein.set([15], math.sum(xbf.subset(math.index(math.range(15, 17))))); // R.Foot - bf_art[16] = xbf[16] + bf_ava_foot; - bf_vein[16] = xbf[16]; + bf_art.set([16], xbf.get([16]) + bf_ava_foot); + bf_vein.set([16], xbf.get([16])); - return [bf_art, bf_vein]; + return { bf_art, bf_vein }; } /** + * Create matrix to calculate heat exchange by blood flow in each segment. * - * @param bf_core - * @param bf_muscle - * @param bf_fat - * @param bf_skin - * @param bf_ava_hand - * @param bf_ava_foot + * @param {math.MathCollection} bf_core + * @param {math.MathCollection} bf_muscle + * @param {math.MathCollection} bf_fat + * @param {math.MathCollection} bf_skin + * @param {number} bf_ava_hand + * @param {number} bf_ava_foot * - * @returns {number[][]} + * @returns {math.Matrix} The heat exchange by blood flow in each segment. */ export function local_arr( bf_core, @@ -201,9 +243,7 @@ export function local_arr( bf_ava_hand, bf_ava_foot, ) { - let bf_local = Array(NUM_NODES) - .fill() - .map(() => Array(NUM_NODES).fill(0)); + let bf_local = math.zeros(NUM_NODES, NUM_NODES); for (let i = 0; i < BODY_NAMES.length; i++) { // Dictionary of indicies in each body segment @@ -211,34 +251,66 @@ export function local_arr( let bn = BODY_NAMES[i]; let index_of = IDICT[bn]; - // common - bf_local[index_of["core"]][index_of["artery"]] = 1.067 * bf_core[i]; // art to cr - bf_local[index_of["skin"]][index_of["artery"]] = 1.067 * bf_core[i]; // art to sk - bf_local[index_of["vein"]][index_of["core"]] = 1.067 * bf_core[i]; // vein to cr - bf_local[index_of["vein"]][index_of["skin"]] = 1.067 * bf_core[i]; // vein to sk + // Common + bf_local.set( + [index_of["core"], index_of["artery"]], + 1.067 * bf_core.get([i]), + ); // art to cr + + bf_local.set( + [index_of["skin"], index_of["artery"]], + 1.067 * bf_skin.get([i]), + ); // art to sk + + bf_local.set( + [index_of["vein"], index_of["core"]], + 1.067 * bf_core.get([i]), + ); // vein to cr + + bf_local.set( + [index_of["vein"], index_of["skin"]], + 1.067 * bf_skin.get([i]), + ); // vein to sk // If the segment has a muscle or fat layer if (index_of["muscle"] !== null) { - bf_local[index_of["muscle"]][index_of["artery"]] = 1.067 * bf_muscle[i]; // art to ms - bf_local[index_of["vein"]][index_of["muscle"]] = 1.067 * bf_muscle[i]; // vein to ms + bf_local.set( + [index_of["muscle"], index_of["artery"]], + 1.067 * bf_muscle.get([i]), + ); // art to ms + + bf_local.set( + [index_of["vein"], index_of["muscle"]], + 1.067 * bf_muscle.get([i]), + ); // vein to ms } if (index_of["fat"] !== null) { - bf_local[index_of["fat"]][index_of["artery"]] = 1.067 * bf_fat[i]; // art to ft - bf_local[index_of["vein"]][index_of["fat"]] = 1.067 * bf_fat[i]; // vein to ft + bf_local.set( + [index_of["fat"], index_of["artery"]], + 1.067 * bf_fat.get([i]), + ); // art to ft + + bf_local.set( + [index_of["vein"], index_of["fat"]], + 1.067 * bf_fat.get([i]), + ); // vein to ft + } + + // Only hand + if (i === 7 || i === 10) { + bf_local.set( + [index_of["sfvein"], index_of["artery"]], + 1.067 * bf_ava_hand, + ); // art to sfv } - switch (i) { - // Only hand - case 7: - case 10: - bf_local[index_of["sfvein"]][index_of["artery"]] = 1.067 * bf_ava_hand; // art to sfv - break; - - // Only foot - case 13: - case 16: - bf_local[index_of["sfvein"]][index_of["artery"]] = 1.067 * bf_ava_foot; // art to sfv + // Only foot + if (i === 13 || i === 16) { + bf_local.set( + [index_of["sfvein"], index_of["artery"]], + 1.067 * bf_ava_foot, + ); // art to sfv } } @@ -247,17 +319,19 @@ export function local_arr( /** * Create matrix to calculate heat exchange by blood flow between segments. [W/K] - * @param bf_art - * @param bf_vein - * @param bf_ava_hand - * @param bf_ava_foot + * + * @param {math.MathCollection} bf_art + * @param {math.MathCollection} bf_vein + * @param {number} bf_ava_hand + * @param {number} bf_ava_foot + * + * @return {math.Matrix} */ export function whole_body(bf_art, bf_vein, bf_ava_hand, bf_ava_foot) { - let arr83 = Array(NUM_NODES) - .fill(undefined) - .map(() => Array(NUM_NODES).fill(0)); + let arr83 = math.zeros(NUM_NODES, NUM_NODES); - const flow = (up, down, bloodflow) => (arr83[down][up] = bloodflow * 1.067); // Coefficient = 1.067 [Wh/L.K] Change units [L/h] to [W/K] + const flow = (up, down, bloodflow) => + arr83.set([down, up], bloodflow * 1.067); // Coefficient = 1.067 [Wh/L.K] Change units [L/h] to [W/K] const CB = IDICT["CB"]; const head = IDICT["head"]["artery"]; @@ -278,56 +352,56 @@ export function whole_body(bf_art, bf_vein, bf_ava_hand, bf_ava_foot) { const right_leg = IDICT["right_leg"]["artery"]; const right_foot = IDICT["right_foot"]["artery"]; - flow(CB, neck, bf_art[1]); // CB to neck.art - flow(neck, head, bf_art[0]); // neck.art to head.art - flow(head + 1, neck + 1, bf_vein[0]); // head.vein to neck.vein - flow(neck + 1, CB, bf_vein[1]); // neck.vein to CB + flow(CB, neck, bf_art.get([1])); // CB to neck.art + flow(neck, head, bf_art.get([0])); // neck.art to head.art + flow(head + 1, neck + 1, bf_vein.get([0])); // head.vein to neck.vein + flow(neck + 1, CB, bf_vein.get([1])); // neck.vein to CB - flow(CB, chest, bf_art[2]); // CB to chest.art - flow(chest + 1, CB, bf_vein[2]); // chest.vein to CB + flow(CB, chest, bf_art.get([2])); // CB to chest.art + flow(chest + 1, CB, bf_vein.get([2])); // chest.vein to CB - flow(CB, back, bf_art[3]); // CB to back.art - flow(back + 1, CB, bf_vein[3]); // back.vein to CB + flow(CB, back, bf_art.get([3])); // CB to back.art + flow(back + 1, CB, bf_vein.get([3])); // back.vein to CB - flow(CB, pelvis, bf_art[4]); // CB to pelvis.art - flow(pelvis + 1, CB, bf_vein[4]); // pelvis.vein to CB + flow(CB, pelvis, bf_art.get([4])); // CB to pelvis.art + flow(pelvis + 1, CB, bf_vein.get([4])); // pelvis.vein to CB - flow(CB, left_shoulder, bf_art[5]); // CB to left_shoulder.art - flow(left_shoulder, left_arm, bf_art[6]); // left_shoulder.art to left_arm.art - flow(left_arm, left_hand, bf_art[7]); // left_arm.art to left_hand.art - flow(left_hand + 1, left_arm + 1, bf_vein[7]); // left_hand.vein to left_arm.vein - flow(left_arm + 1, left_shoulder + 1, bf_vein[6]); // left_arm.vein to left_shoulder.vein - flow(left_shoulder + 1, CB, bf_vein[5]); // left_shoulder.vein to CB + flow(CB, left_shoulder, bf_art.get([5])); // CB to left_shoulder.art + flow(left_shoulder, left_arm, bf_art.get([6])); // left_shoulder.art to left_arm.art + flow(left_arm, left_hand, bf_art.get([7])); // left_arm.art to left_hand.art + flow(left_hand + 1, left_arm + 1, bf_vein.get([7])); // left_hand.vein to left_arm.vein + flow(left_arm + 1, left_shoulder + 1, bf_vein.get([6])); // left_arm.vein to left_shoulder.vein + flow(left_shoulder + 1, CB, bf_vein.get([5])); // left_shoulder.vein to CB flow(left_hand + 2, left_arm + 2, bf_ava_hand); // left_hand.sfvein to left_arm.sfvein flow(left_arm + 2, left_shoulder + 2, bf_ava_hand); // left_arm.sfvein to left_shoulder.sfvein flow(left_shoulder + 2, CB, bf_ava_hand); // left_shoulder.sfvein to CB - flow(CB, right_shoulder, bf_art[8]); // CB to right_shoulder.art - flow(right_shoulder, right_arm, bf_art[9]); // right_shoulder.art to right_arm.art - flow(right_arm, right_hand, bf_art[10]); // right_arm.art to right_hand.art - flow(right_hand + 1, right_arm + 1, bf_vein[10]); // right_hand.vein to right_arm.vein - flow(right_arm + 1, right_shoulder + 1, bf_vein[9]); // right_arm.vein to right_shoulder.vein - flow(right_shoulder + 1, CB, bf_vein[8]); // right_shoulder.vein to CB + flow(CB, right_shoulder, bf_art.get([8])); // CB to right_shoulder.art + flow(right_shoulder, right_arm, bf_art.get([9])); // right_shoulder.art to right_arm.art + flow(right_arm, right_hand, bf_art.get([10])); // right_arm.art to right_hand.art + flow(right_hand + 1, right_arm + 1, bf_vein.get([10])); // right_hand.vein to right_arm.vein + flow(right_arm + 1, right_shoulder + 1, bf_vein.get([9])); // right_arm.vein to right_shoulder.vein + flow(right_shoulder + 1, CB, bf_vein.get([8])); // right_shoulder.vein to CB flow(right_hand + 2, right_arm + 2, bf_ava_hand); // right_hand.sfvein to right_arm.sfvein flow(right_arm + 2, right_shoulder + 2, bf_ava_hand); // right_arm.sfvein to right_shoulder.sfvein flow(right_shoulder + 2, CB, bf_ava_hand); // right_shoulder.sfvein to CB - flow(pelvis, left_thigh, bf_art[11]); // pelvis to left_thigh.art - flow(left_thigh, left_leg, bf_art[12]); // left_thigh.art to left_leg.art - flow(left_leg, left_foot, bf_art[13]); // left_leg.art to left_foot.art - flow(left_foot + 1, left_leg + 1, bf_vein[13]); // left_foot.vein to left_leg.vein - flow(left_leg + 1, left_thigh + 1, bf_vein[12]); // left_leg.vein to left_thigh.vein - flow(left_thigh + 1, pelvis + 1, bf_vein[11]); // left_thigh.vein to pelvis + flow(pelvis, left_thigh, bf_art.get([11])); // pelvis to left_thigh.art + flow(left_thigh, left_leg, bf_art.get([12])); // left_thigh.art to left_leg.art + flow(left_leg, left_foot, bf_art.get([13])); // left_leg.art to left_foot.art + flow(left_foot + 1, left_leg + 1, bf_vein.get([13])); // left_foot.vein to left_leg.vein + flow(left_leg + 1, left_thigh + 1, bf_vein.get([12])); // left_leg.vein to left_thigh.vein + flow(left_thigh + 1, pelvis + 1, bf_vein.get([11])); // left_thigh.vein to pelvis flow(left_foot + 2, left_leg + 2, bf_ava_foot); // left_foot.sfvein to left_leg.sfvein flow(left_leg + 2, left_thigh + 2, bf_ava_foot); // left_leg.sfvein to left_thigh.sfvein flow(left_thigh + 2, pelvis + 1, bf_ava_foot); // left_thigh.vein to pelvis - flow(pelvis, right_thigh, bf_art[14]); // pelvis to right_thigh.art - flow(right_thigh, right_leg, bf_art[15]); // right_thigh.art to right_leg.art - flow(right_leg, right_foot, bf_art[16]); // right_leg.art to right_foot.art - flow(right_foot + 1, right_leg + 1, bf_vein[16]); // right_foot.vein to right_leg.vein - flow(right_leg + 1, right_thigh + 1, bf_vein[15]); // right_leg.vein to right_thigh.vein - flow(right_thigh + 1, pelvis + 1, bf_vein[14]); // right_thigh.vein to pelvis + flow(pelvis, right_thigh, bf_art.get([14])); // pelvis to right_thigh.art + flow(right_thigh, right_leg, bf_art.get([15])); // right_thigh.art to right_leg.art + flow(right_leg, right_foot, bf_art.get([16])); // right_leg.art to right_foot.art + flow(right_foot + 1, right_leg + 1, bf_vein.get([16])); // right_foot.vein to right_leg.vein + flow(right_leg + 1, right_thigh + 1, bf_vein.get([15])); // right_leg.vein to right_thigh.vein + flow(right_thigh + 1, pelvis + 1, bf_vein.get([14])); // right_thigh.vein to pelvis flow(right_foot + 2, right_leg + 2, bf_ava_foot); // right_foot.sfvein to right_leg.sfvein flow(right_leg + 2, right_thigh + 2, bf_ava_foot); // right_leg.sfvein to right_thigh.sfvein flow(right_thigh + 2, pelvis + 1, bf_ava_foot); // right_thigh.vein to pelvis diff --git a/src/jos3_functions/thermoregulation/ava_blood_flow.js b/src/jos3_functions/thermoregulation/ava_blood_flow.js index 4b4d705..386e2f2 100644 --- a/src/jos3_functions/thermoregulation/ava_blood_flow.js +++ b/src/jos3_functions/thermoregulation/ava_blood_flow.js @@ -1,20 +1,28 @@ import { $average } from "../../supa.js"; import JOS3Defaults from "../JOS3Defaults.js"; import { bfb_rate } from "../bfb_rate.js"; +import * as math from "mathjs"; + +/** + * @typedef AvaBloodFlowResult + * @type {object} + * @property {number} bf_ava_hand - AVA blood flow rate at hand [L/h]. + * @property {number} bf_ava_foot - AVA blood flow rate at foot [L/h]. + */ /** * Calculate areteriovenous anastmoses (AVA) blood flow rate [L/h] based on * Takemori's model, 1995. * - * @param {number[]} err_cr - Difference between set-point and body temperatures [°C]. - * @param {number[]} err_sk - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_cr - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_sk - Difference between set-point and body temperatures [°C]. * @param {number} [height=1.72] - Body height [m] * @param {number} [weight=74.43] - Body weight [kg] * @param {string} [bsa_equation="dubois"] - The equation name of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", or "kurazumi" * @param {number} [age=20] - age [years] * @param {number} [ci=2.59] - Cardiac index [L/min/m2] - * @returns {[number, number]} bf_ava_hand, bf_ava_foot : AVA blood flow rate at hand and foot [L/h] * + * @returns {AvaBloodFlowResult} AVA blood flow rate at hand and foot [L/h] */ export function ava_blood_flow( err_cr, @@ -27,10 +35,15 @@ export function ava_blood_flow( ) { // Cal. mean error body core temp. let cap_bcr = [10.2975, 9.3935, 4.488]; - let err_bcr = $average(err_cr.slice(2, 5), cap_bcr); + let err_bcr = + math.sum( + math.dotMultiply(err_cr.subset(math.index(math.range(2, 5))), cap_bcr), + ) / math.sum(cap_bcr); // Cal. mean error skin temp. - let err_msk = $average(err_sk, JOS3Defaults.local_bsa); + let err_msk = + math.sum(math.dotMultiply(err_sk, JOS3Defaults.local_bsa)) / + math.sum(JOS3Defaults.local_bsa); // Openness of AVA [-] let sig_ava_hand = diff --git a/src/jos3_functions/thermoregulation/basal_met.js b/src/jos3_functions/thermoregulation/basal_met.js index 30be7d0..b41474b 100644 --- a/src/jos3_functions/thermoregulation/basal_met.js +++ b/src/jos3_functions/thermoregulation/basal_met.js @@ -8,6 +8,7 @@ import JOS3Defaults from "../JOS3Defaults.js"; * @param {number} [age=20] - Age [years]. * @param {string} [sex="male"] - Choose male or female. * @param {string} [bmr_equation="harris-benedict"] - Choose harris-benedict or ganpule. + * * @returns {number} Basal metabolic rate [W]. */ export function basal_met( diff --git a/src/jos3_functions/thermoregulation/clo_area_factor.js b/src/jos3_functions/thermoregulation/clo_area_factor.js index 96f61db..07c0518 100644 --- a/src/jos3_functions/thermoregulation/clo_area_factor.js +++ b/src/jos3_functions/thermoregulation/clo_area_factor.js @@ -1,9 +1,9 @@ /** * Calculate clothing area factor * - * @param {number[]} clo - Clothing insulation. + * @param {math.Matrix} clo - Clothing insulation. * - * @returns {number[]} clothing area factor. + * @returns {math.Matrix} clothing area factor. */ export function clo_area_factor(clo) { return clo.map((clo) => (clo < 0.5 ? clo * 0.2 + 1 : clo * 0.1 + 1.05)); diff --git a/src/jos3_functions/thermoregulation/conv_coef.js b/src/jos3_functions/thermoregulation/conv_coef.js index 990a5e4..d462e6f 100644 --- a/src/jos3_functions/thermoregulation/conv_coef.js +++ b/src/jos3_functions/thermoregulation/conv_coef.js @@ -1,26 +1,37 @@ import JOS3Defaults from "../JOS3Defaults.js"; -import { $map, $array } from "../../supa.js"; +import * as math from "mathjs"; /** * Calculate convective heat transfer coefficient (hc) [W/(m2*K)] * * @param {string} [posture=JOS3Defaults.posture] - Select posture from standing, sitting, lying, sedentary or supine. The default is "standing". - * @param {number[]} [v=JOS3Defaults.air_speed] - Air velocity [m/s]. If Iterable is input, its length should be 17. The default is 0.1. - * @param {number[]} [tdb=JOS3Defaults.dry_bulb_air_temperature] - Air temperature [°C]. If Iterable is input, its length should be 17. The default is 28.8. - * @param {number[]} [t_skin=JOS3Defaults.skin_temperature] - Skin temperature [°C]. If Iterable is input, its length should be 17. The default is 34.0. + * @param {math.Matrix} [v=JOS3Defaults.air_speed] - Air velocity [m/s]. If Iterable is input, its length should be 17. The default is 0.1. + * @param {math.Matrix} [tdb=JOS3Defaults.dry_bulb_air_temperature] - Air temperature [°C]. If Iterable is input, its length should be 17. The default is 28.8. + * @param {math.Matrix} [t_skin=JOS3Defaults.skin_temperature] - Skin temperature [°C]. If Iterable is input, its length should be 17. The default is 34.0. * - * @returns {number[]} Convective heat transfer coefficient (hc) [W/(m2*K)]. + * @returns {math.Matrix} Convective heat transfer coefficient (hc) [W/(m2*K)]. * * @see {@link https://doi.org/10.3130/aija.62.45_5 | Ichihara et al., 1997} * @see {@link https://doi.org/10.20718/jjpa.13.1_17 | Kurazumi et al., 2008} */ export function conv_coef( posture = JOS3Defaults.posture, - v = $array(17, JOS3Defaults.air_speed), - tdb = $array(17, JOS3Defaults.dry_bulb_air_temperature), - t_skin = $array(17, JOS3Defaults.skin_temperature), + v = math.multiply(math.ones(17), JOS3Defaults.air_speed), + tdb = math.multiply(math.ones(17), JOS3Defaults.dry_bulb_air_temperature), + t_skin = math.multiply(math.ones(17), JOS3Defaults.skin_temperature), ) { - // Natural convection + // Convert v to math.matrix + v = math.isMatrix(v) ? v : math.matrix(v); + + /** + * Natural convection + * + * @param {string} posture + * @param {math.Matrix} tdb + * @param {math.Matrix} t_skin + * + * @return {math.Matrix} + */ const natural_convection = (posture, tdb, t_skin) => { posture = posture.toLowerCase(); @@ -45,66 +56,71 @@ export function conv_coef( case "standing": // Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hc_natural = [ + hc_natural = math.matrix([ 4.48, 4.48, 2.97, 2.91, 2.85, 3.61, 3.55, 3.67, 3.61, 3.55, 3.67, 2.8, 2.04, 2.04, 2.8, 2.04, 2.04, - ]; + ]); break; case "sitting": case "sedentary": // Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hc_natural = [ + hc_natural = math.matrix([ 4.75, 4.75, 3.12, 2.48, 1.84, 3.76, 3.62, 2.06, 3.76, 3.62, 2.06, 2.98, 2.98, 2.62, 2.98, 2.98, 2.62, - ]; + ]); break; case "lying": case "supine": // Kurazumi et al., 2008, https://doi.org/10.20718/jjpa.13.1_17 // The values are applied under cold environment. - let hc_a = [ + let hc_a = math.matrix([ 1.105, 1.105, 1.211, 1.211, 1.211, 0.913, 2.081, 2.178, 0.913, 2.081, 2.178, 0.945, 0.385, 0.2, 0.945, 0.385, 0.2, - ]; + ]); - let hc_b = [ + let hc_b = math.matrix([ 0.345, 0.345, 0.046, 0.046, 0.046, 0.373, 0.85, 0.297, 0.373, 0.85, 0.297, 0.447, 0.58, 0.966, 0.447, 0.58, 0.966, - ]; + ]); - hc_natural = $map( - [hc_a, tdb, t_skin, hc_b], - ([hc_a, tdb, t_skin, hc_b]) => hc_a * Math.abs(tdb - t_skin) ** hc_b, + hc_natural = math.dotMultiply( + hc_a, + math.dotPow(math.abs(math.subtract(tdb, t_skin)), hc_b), ); - break; } return hc_natural; }; - // Forced convection + /** + * Forced convection + * + * @param v {math.Matrix} + * + * @return {math.Matrix} + */ const forced_convection = (v) => { // Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - let hc_a = [ + let hc_a = math.matrix([ 15.0, 15.0, 11.0, 17.0, 13.0, 17.0, 17.0, 20.0, 17.0, 17.0, 20.0, 14.0, 15.8, 15.1, 14.0, 15.8, 15.1, - ]; + ]); - let hc_b = [ + let hc_b = math.matrix([ 0.62, 0.62, 0.67, 0.49, 0.6, 0.59, 0.61, 0.6, 0.59, 0.61, 0.6, 0.61, 0.74, 0.62, 0.61, 0.74, 0.62, - ]; + ]); - return $map([hc_a, v, hc_b], ([hc_a, v, hc_b]) => hc_a * v ** hc_b); + return math.dotMultiply(hc_a, math.dotPow(v, hc_b)); }; let hc_natural = natural_convection(posture, tdb, t_skin); let hc_forced = forced_convection(v); - return $map([v, hc_natural, hc_forced], ([v, hc_natural, hc_forced]) => - v < 0.2 ? hc_natural : hc_forced, + return v.map((z, idx) => + z < 0.2 ? hc_natural.get(idx) : hc_forced.get(idx), ); } diff --git a/src/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.js b/src/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.js index c71d867..3712590 100644 --- a/src/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.js +++ b/src/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.js @@ -1,19 +1,28 @@ import JOS3Defaults from "../JOS3Defaults.js"; import { bfb_rate } from "../bfb_rate.js"; import { BODY_NAMES, IDICT } from "../matrix.js"; +import * as math from "mathjs"; + +/** + * @typedef CrMsFatBloodFlowResult + * @type {object} + * @property {math.MathCollection} bf_core - Core blood flow rate [L/h]. + * @property {math.MathCollection} bf_muscle - Muscle blood flow rate [L/h]. + * @property {math.MathCollection} bf_fat - Fat blood flow rate [L/h]. + */ /** * Calculate core, muscle and fat blood flow rate [L/h]. * - * @param {number[]} q_work - Heat production by work [W]. - * @param {number[]} q_shiv - Heat production by shivering [W]. + * @param {math.MathCollection} q_work - Heat production by work [W]. + * @param {math.MathCollection} q_shiv - Heat production by shivering [W]. * @param {number} [height=1.72] - Body height [m]. * @param {number} [weight=74.43] - Body weight [kg]. * @param {string} [bsa_equation="dubois"] - The equation name of bsa calculation. Choose from "dubois","takahira", "fujimoto", or "kurazumi". * @param {number} [age=20] - Age [years]. * @param {number} [ci=2.59] - Cardiac index [L/min/㎡]. * - * @returns {[number[], number[], number[]]} - Core, muscle and fat blood flow rate [L/h]. + * @returns {CrMsFatBloodFlowResult} - Core, muscle and fat blood flow rate [L/h]. */ export function cr_ms_fat_blood_flow( q_work, @@ -26,37 +35,43 @@ export function cr_ms_fat_blood_flow( ) { // Basal blood flow rate [L/h] // core, CBFB - let bfb_core = [ + let bfb_core = math.matrix([ 35.251, 15.24, 89.214, 87.663, 18.686, 1.808, 0.94, 0.217, 1.808, 0.94, 0.217, 1.406, 0.164, 0.08, 1.406, 0.164, 0.08, - ]; + ]); // muscle, MSBFB - let bfb_muscle = [ + let bfb_muscle = math.matrix([ 0.682, 0.0, 0.0, 0.0, 12.614, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - ]; + ]); // fat, FTBFB - let bfb_fat = [ + let bfb_fat = math.matrix([ 0.265, 0.0, 0.0, 0.0, 2.219, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - ]; + ]); let bfbrate = bfb_rate(height, weight, bsa_equation, age, ci); - let bf_core = bfb_core.map((bfb_core) => bfb_core * bfbrate); - let bf_muscle = bfb_muscle.map((bfb_muscle) => bfb_muscle * bfbrate); - let bf_fat = bfb_fat.map((bfb_fat) => bfb_fat * bfbrate); + let bf_core = math.dotMultiply(bfb_core, bfbrate); + let bf_muscle = math.dotMultiply(bfb_muscle, bfbrate); + let bf_fat = math.dotMultiply(bfb_fat, bfbrate); for (let i = 0; i < BODY_NAMES.length; i++) { let bn = BODY_NAMES[i]; if (IDICT[bn]["muscle"] !== null) { - bf_muscle[i] += (q_work[i] + q_shiv[i]) / 1.163; + bf_muscle.set( + [i], + bf_muscle.get([i]) + (q_work.get([i]) + q_shiv.get([i])) / 1.163, + ); } else { - bf_core[i] += (q_work[i] + q_shiv[i]) / 1.163; + bf_core.set( + [i], + bf_core.get([i]) + (q_work.get([i]) + q_shiv.get([i])) / 1.163, + ); } } - return [bf_core, bf_muscle, bf_fat]; + return { bf_core, bf_muscle, bf_fat }; } diff --git a/src/jos3_functions/thermoregulation/dry_r.js b/src/jos3_functions/thermoregulation/dry_r.js index 40ab962..eb5423b 100644 --- a/src/jos3_functions/thermoregulation/dry_r.js +++ b/src/jos3_functions/thermoregulation/dry_r.js @@ -1,22 +1,22 @@ -import { $map } from "../../supa.js"; import { clo_area_factor } from "./clo_area_factor.js"; +import * as math from "mathjs"; /** * Calculate total sensible thermal resistance (between the skin and ambient air). * - * @param {number[]} hc - Convective heat transfer coefficient (hc) [W/(m2*K)]. - * @param {number[]} hr - Radiative heat transfer coefficient (hr) [W/(m2*K)]. - * @param {number[]} clo - Clothing insulation [clo]. + * @param {math.Matrix} hc - Convective heat transfer coefficient (hc) [W/(m2*K)]. + * @param {math.Matrix} hr - Radiative heat transfer coefficient (hr) [W/(m2*K)]. + * @param {math.Matrix} clo - Clothing insulation [clo]. * - * @returns {number[]} Total sensible thermal resistance between skin and ambient. + * @returns {math.Matrix} Total sensible thermal resistance between skin and ambient. */ export function dry_r(hc, hr, clo) { - if (hc.some((x) => x < 0) || hr.some((x) => x < 0)) { + if (hc.toArray().some((x) => x < 0) || hr.toArray().some((x) => x < 0)) { throw new Error("Input parameters hc and hr must be non-negative."); } let fcl = clo_area_factor(clo); - let r_a = $map([hc, hr], ([hc, hr]) => 1 / (hc + hr)); - let r_cl = clo.map((clo) => 0.155 * clo); - return $map([r_a, fcl, r_cl], ([r_a, fcl, r_cl]) => r_a / fcl + r_cl); + let r_a = math.dotDivide(1, math.add(hc, hr)); + let r_cl = math.dotMultiply(0.155, clo); + return math.add(math.dotDivide(r_a, fcl), r_cl); } diff --git a/src/jos3_functions/thermoregulation/error_signals.js b/src/jos3_functions/thermoregulation/error_signals.js index 46c9462..0cee4e9 100644 --- a/src/jos3_functions/thermoregulation/error_signals.js +++ b/src/jos3_functions/thermoregulation/error_signals.js @@ -1,24 +1,33 @@ -import { $array, $map, $max, $min, $sum } from "../../supa.js"; +import * as math from "mathjs"; + +/** + * @typedef ErrorSignalsResult + * @type {object} + * @property {number} wrms - Warm signal [°C]. + * @property {number} clds - Cold signal [°C]. + */ /** * Calculate WRMS and CLDS signals of thermoregulation. * - * @param {number[]} [err_sk=0] - Difference between set-point and skin temperatures [°C]. - * If array, its length should be 17. + * @param {math.MathCollection} [err_sk=0] - Difference between set-point and skin temperatures [°C]. + * If the provided value is an array, its length should be 17. * - * @returns {Object} Contains two arrays: `wrms` - Warm signal [°C]; `clds` - Cold signal [°C]. + * @returns {ErrorSignalsResult} an object containing the results of the calculation. */ -export function error_signals(err_sk = $array(17, 0)) { - let receptor = [ +export function error_signals(err_sk = math.zeros(17)) { + let receptor = math.matrix([ 0.0549, 0.0146, 0.1492, 0.1321, 0.2122, 0.0227, 0.0117, 0.0923, 0.0227, 0.0117, 0.0923, 0.0501, 0.0251, 0.0167, 0.0501, 0.0251, 0.0167, - ]; + ]); - let wrm = $max(err_sk, 0); - wrm = $map([wrm, receptor], ([wrm, receptor]) => wrm * receptor); + let wrm = err_sk.map((n) => math.max(n, 0)); + wrm = math.dotMultiply(wrm, receptor); + let wrms = math.sum(wrm); - let cld = $min(err_sk, 0); - cld = $map([cld, receptor], ([cld, receptor]) => -cld * receptor); + let cld = err_sk.map((n) => math.min(n, 0)); + cld = math.dotMultiply(cld, math.dotMultiply(receptor, -1)); + let clds = math.sum(cld); - return { wrms: $sum(wrm), clds: $sum(cld) }; + return { wrms, clds }; } diff --git a/src/jos3_functions/thermoregulation/evaporation.js b/src/jos3_functions/thermoregulation/evaporation.js index 57290e9..2b1f26e 100644 --- a/src/jos3_functions/thermoregulation/evaporation.js +++ b/src/jos3_functions/thermoregulation/evaporation.js @@ -1,28 +1,40 @@ import JOS3Defaults from "../JOS3Defaults.js"; import { error_signals } from "./error_signals.js"; import { bsa_rate } from "../bsa_rate.js"; -import { $map, $max, $min, $array } from "../../supa.js"; +import * as math from "mathjs"; +/** + * Calculates the Antoine equation for a given temperature value. + * + * @param {number} x - The temperature value in Kelvin. + * @returns {number} - The vapor pressure calculated using the Antoine equation. + */ export const antoine = (x) => Math.E ** (16.6536 - 4030.183 / (x + 235)); +/** + * @typedef EvaporationResult + * @type {object} + * @property {math.MathCollection} wet - Local skin wettedness [-]. + * @property {math.MathCollection} e_sk - Evaporative heat loss at the skin by sweating and diffuse [W]. + * @property {math.MathCollection} e_max - Maximum evaporative heat loss at the skin [W]. + * @property {math.MathCollection} e_sweat - Evaporative heat loss at the skin by only sweating [W]. + */ + /** * Calculate evaporative heat loss. * - * @param {Array} err_cr, err_sk - Difference between set-point and body temperatures [°C]. - * @param {Array} t_skin - Skin temperatures [°C]. - * @param {Array} tdb - Air temperatures at local body segments [°C]. - * @param {Array} rh - Relative humidity at local body segments [%]. - * @param {Array} ret - Total evaporative thermal resistances [m2.K/W]. + * @param {math.MathCollection} err_cr - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_sk - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} t_skin - Skin temperatures [°C]. + * @param {math.MathCollection} tdb - Air temperatures at local body segments [°C]. + * @param {math.MathCollection} rh - Relative humidity at local body segments [%]. + * @param {math.MathCollection} ret - Total evaporative thermal resistances [m2.K/W]. * @param {number} [height=1.72] - Body height [m]. * @param {number} [weight=74.43] - Body weight [kg]. * @param {string} [bsa_equation="dubois"] - The equation name (str) of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", or "kurazumi". * @param {number} [age=20] - age [years]. * - * @returns {Object} An object containing: - * - wet (Array): Local skin wettedness [-]. - * - e_sk (Array): Evaporative heat loss at the skin by sweating and diffuse [W]. - * - e_max (Array): Maximum evaporative heat loss at the skin [W]. - * - e_sweat (TYPE): Evaporative heat loss at the skin by only sweating [W]. + * @returns {EvaporationResult} an object containing the results of the calculation. */ export function evaporation( err_cr, @@ -38,14 +50,16 @@ export function evaporation( ) { let { wrms, clds } = error_signals(err_sk); let bsar = bsa_rate(height, weight, bsa_equation); - let bsa = JOS3Defaults.local_bsa.map((local_bsa) => local_bsa * bsar); - let p_a = $map([tdb, rh], ([tdb, rh]) => (antoine(tdb) * rh) / 100); + let bsa = math.dotMultiply(JOS3Defaults.local_bsa, bsar); + + let p_a = math.dotDivide(math.dotMultiply(tdb.map(antoine), rh), 100); let p_sk_s = t_skin.map(antoine); - let e_max = $map( - [p_sk_s, p_a, ret, bsa], - ([p_sk_s, p_a, ret, bsa]) => ((p_sk_s - p_a) / ret) * bsa, + let e_max = math.dotMultiply( + math.dotDivide(math.subtract(p_sk_s, p_a), ret), + bsa, ); + e_max = e_max.map((e_max) => (e_max === 0 ? 0.001 : e_max)); let skin_sweat = [ @@ -53,32 +67,34 @@ export function evaporation( 0.0155, 0.073, 0.036, 0.0175, 0.073, 0.036, 0.0175, ]; - let sig_sweat = 371.2 * err_cr[0] + 33.64 * (wrms - clds); + let sig_sweat = 371.2 * err_cr.get([0]) + 33.64 * (wrms - clds); sig_sweat = sig_sweat > 0 ? sig_sweat : 0; sig_sweat *= bsar; let sd_sweat = age < 60 - ? $array(17, 1) - : [ + ? math.ones(17) + : math.matrix([ 0.69, 0.69, 0.59, 0.52, 0.4, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, - ]; + ]); - let e_sweat = $map( - [skin_sweat, sd_sweat, err_sk], - ([skin_sweat, sd_sweat, err_sk]) => - skin_sweat * sig_sweat * sd_sweat * 2 ** (err_sk / 10), + let e_sweat = math.multiply( + skin_sweat, + sig_sweat, + sd_sweat, + math.dotPow(2, math.divide(err_sk, 10)), ); - let wet = $map( - [e_sweat, e_max], - ([e_sweat, e_max]) => 0.06 + 0.94 * (e_sweat / e_max), - ); - wet = $min(wet, 1); + let wet = math.add(0.06, math.multiply(0.94, math.dotDivide(e_sweat, e_max))); + wet = wet.map((n) => (n > 1 ? 1 : n)); - let e_sk = $map([wet, e_max], ([wet, e_max]) => wet * e_max); - e_sweat = $map([wet, e_max], ([wet, e_max]) => ((wet - 0.06) / 0.94) * e_max); + let e_sk = math.dotMultiply(wet, e_max); + + e_sweat = math.dotMultiply( + math.divide(math.subtract(wet, 0.06), 0.94), + e_max, + ); return { wet, e_sk, e_max, e_sweat }; } diff --git a/src/jos3_functions/thermoregulation/fixed_hc.js b/src/jos3_functions/thermoregulation/fixed_hc.js index 8eafc53..1fde3f4 100644 --- a/src/jos3_functions/thermoregulation/fixed_hc.js +++ b/src/jos3_functions/thermoregulation/fixed_hc.js @@ -1,13 +1,18 @@ -import { $average, $reduce } from "../../supa.js"; import JOS3Defaults from "../JOS3Defaults.js"; +import * as math from "mathjs"; /** * Fixes hc values to fit two-node-model's values. */ export function fixed_hc(hc, v) { - let mean_hc = $average(hc, JOS3Defaults.local_bsa); - let mean_va = $average(v, JOS3Defaults.local_bsa); + const local_bsa_sum = math.sum(JOS3Defaults.local_bsa); + + let mean_hc = + math.sum(math.dotMultiply(hc, JOS3Defaults.local_bsa)) / local_bsa_sum; + + let mean_va = + math.sum(math.dotMultiply(v, JOS3Defaults.local_bsa)) / local_bsa_sum; let mean_hc_whole = Math.max(3, 8.600001 * mean_va ** 0.53); - return hc.map((x) => (x * mean_hc_whole) / mean_hc); + return math.dotDivide(math.dotMultiply(hc, mean_hc_whole), mean_hc); } diff --git a/src/jos3_functions/thermoregulation/fixed_hr.js b/src/jos3_functions/thermoregulation/fixed_hr.js index 991b983..f73ca97 100644 --- a/src/jos3_functions/thermoregulation/fixed_hr.js +++ b/src/jos3_functions/thermoregulation/fixed_hr.js @@ -1,10 +1,16 @@ -import { $average } from "../../supa.js"; import JOS3Defaults from "../JOS3Defaults.js"; +import * as math from "mathjs"; /** * Fixes hr values to fit two-node-model's values. + * + * @param {math.MathCollection} hr + * @return {math.Matrix} */ export function fixed_hr(hr) { - let mean_hr = $average(hr, JOS3Defaults.local_bsa); - return hr.map((hr) => (hr * 4.7) / mean_hr); + let mean_hr = + math.sum(math.dotMultiply(hr, JOS3Defaults.local_bsa)) / + math.sum(JOS3Defaults.local_bsa); + + return math.dotDivide(math.dotMultiply(hr, 4.7), mean_hr); } diff --git a/src/jos3_functions/thermoregulation/local_mbase.js b/src/jos3_functions/thermoregulation/local_mbase.js index d51a015..2047e8a 100644 --- a/src/jos3_functions/thermoregulation/local_mbase.js +++ b/src/jos3_functions/thermoregulation/local_mbase.js @@ -1,5 +1,6 @@ import JOS3Defaults from "../JOS3Defaults.js"; import { basal_met } from "./basal_met.js"; +import * as math from "mathjs"; /** * Calculate local basal metabolic rate [W]. @@ -9,7 +10,8 @@ import { basal_met } from "./basal_met.js"; * @param {number} [age=20] - Age [years]. * @param {string} [sex='male'] - Sex (male or female). * @param {string} [bmr_equation='harris-benedict'] - BMR equation to use (harris-benedict or ganpule). - * @returns {number[][]} mbase - Local basal metabolic rate (Mbase) [W]. + * + * @returns {[math.MathCollection, math.MathCollection, math.MathCollection, math.MathCollection]} mbase - Local basal metabolic rate (Mbase) [W]. */ export function local_mbase( height = JOS3Defaults.height, @@ -20,32 +22,32 @@ export function local_mbase( ) { let mbase_all = basal_met(height, weight, age, sex, bmr_equation); - let mbf_cr = [ + let mbf_cr = math.matrix([ 0.19551, 0.00324, 0.28689, 0.25677, 0.09509, 0.01435, 0.00409, 0.00106, 0.01435, 0.00409, 0.00106, 0.01557, 0.00422, 0.0025, 0.01557, 0.00422, 0.0025, - ]; + ]); - let mbf_ms = [ + let mbf_ms = math.matrix([ 0.00252, 0.0, 0.0, 0.0, 0.04804, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - ]; + ]); - let mbf_fat = [ + let mbf_fat = math.matrix([ 0.00127, 0.0, 0.0, 0.0, 0.0095, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - ]; + ]); - let mbf_sk = [ + let mbf_sk = math.matrix([ 0.00152, 0.00033, 0.00211, 0.00187, 0.003, 0.00059, 0.00031, 0.00059, 0.00059, 0.00031, 0.00059, 0.00144, 0.00027, 0.00118, 0.00144, 0.00027, 0.00118, - ]; + ]); - let mbase_cr = mbf_cr.map((mbf_cr) => mbf_cr * mbase_all); - let mbase_ms = mbf_ms.map((mbf_ms) => mbf_ms * mbase_all); - let mbase_fat = mbf_fat.map((mbf_fat) => mbf_fat * mbase_all); - let mbase_sk = mbf_sk.map((mbf_sk) => mbf_sk * mbase_all); + let mbase_cr = math.dotMultiply(mbf_cr, mbase_all); + let mbase_ms = math.dotMultiply(mbf_ms, mbase_all); + let mbase_fat = math.dotMultiply(mbf_fat, mbase_all); + let mbase_sk = math.dotMultiply(mbf_sk, mbase_all); return [mbase_cr, mbase_ms, mbase_fat, mbase_sk]; } diff --git a/src/jos3_functions/thermoregulation/local_q_work.js b/src/jos3_functions/thermoregulation/local_q_work.js index 1b8c575..abc5786 100644 --- a/src/jos3_functions/thermoregulation/local_q_work.js +++ b/src/jos3_functions/thermoregulation/local_q_work.js @@ -1,3 +1,5 @@ +import * as math from "mathjs"; + /** * Calculate local thermogenesis by work [W]. * @@ -5,7 +7,7 @@ * @param {number} par - Physical activity ratio [-] * @throws {Error} If par is less than 1 * - * @return {Array} q_work - Local thermogenesis by work [W] + * @return {math.MathCollection} q_work - Local thermogenesis by work [W] */ export function local_q_work(bmr, par) { if (par < 1) { @@ -14,10 +16,10 @@ export function local_q_work(bmr, par) { let q_work_all = (par - 1) * bmr; - let workf = [ + let workf = math.matrix([ 0, 0, 0.091, 0.08, 0.129, 0.0262, 0.0139, 0.005, 0.0262, 0.0139, 0.005, 0.201, 0.099, 0.005, 0.201, 0.099, 0.005, - ]; + ]); - return workf.map((workf) => workf * q_work_all); + return math.dotMultiply(workf, q_work_all); } diff --git a/src/jos3_functions/thermoregulation/nonshivering.js b/src/jos3_functions/thermoregulation/nonshivering.js index 71852fd..b4665e8 100644 --- a/src/jos3_functions/thermoregulation/nonshivering.js +++ b/src/jos3_functions/thermoregulation/nonshivering.js @@ -1,11 +1,12 @@ import JOS3Defaults from "../JOS3Defaults.js"; import { error_signals } from "./error_signals.js"; import { bsa_rate } from "../bsa_rate.js"; +import * as math from "mathjs"; /** * Calculate local metabolic rate by non-shivering [W] * - * @param {number[]} err_sk - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_sk - Difference between set-point and body temperatures [°C]. * @param {number} [height=1.72] - Body height [m]. * @param {number} [weight=74.43] - Body weight [kg]. * @param {string} [bsa_equation="dubois"] - The equation name (str) of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", or "kurazumi". @@ -13,7 +14,7 @@ import { bsa_rate } from "../bsa_rate.js"; * @param {boolean} [cold_acclimation=false] - Whether the subject acclimates cold environment or not. * @param {boolean} [batpositive=true] - Whether BAT activity is positive or not. * - * @returns {number[]} q_nst - Local metabolic rate by non-shivering [W]. + * @returns {math.MathCollection} q_nst - Local metabolic rate by non-shivering [W]. */ export function nonshivering( err_sk, @@ -66,11 +67,11 @@ export function nonshivering( let sig_nst = 2.8 * clds; // [W] sig_nst = Math.min(sig_nst, thres); - let nstf = [ + let nstf = math.matrix([ 0.0, 0.19, 0.0, 0.19, 0.19, 0.215, 0.0, 0.0, 0.215, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - ]; + ]); let bsar = bsa_rate(height, weight, bsa_equation); - return nstf.map((nst) => sig_nst * bsar * nst); + return math.dotMultiply(math.dotMultiply(bsar, nstf), sig_nst); } diff --git a/src/jos3_functions/thermoregulation/operative_temp.js b/src/jos3_functions/thermoregulation/operative_temp.js index ef007d6..84f3766 100644 --- a/src/jos3_functions/thermoregulation/operative_temp.js +++ b/src/jos3_functions/thermoregulation/operative_temp.js @@ -1,18 +1,19 @@ import { $map } from "../../supa.js"; +import * as math from "mathjs"; /** * Calculate operative temperature [°C] * - * @param {number[]} tdb - Air temperature [°C] - * @param {number[]} tr - Mean radiant temperature [°C] - * @param {number[]} hc - Convective heat transfer coefficient [W/(m2*K)] - * @param {number[]} hr - Radiative heat transfer coefficient [W/(m2*K)] + * @param {math.MathCollection} tdb - Air temperature [°C] + * @param {math.MathCollection} tr - Mean radiant temperature [°C] + * @param {math.MathCollection} hc - Convective heat transfer coefficient [W/(m2*K)] + * @param {math.MathCollection} hr - Radiative heat transfer coefficient [W/(m2*K)] - * @returns {number[]} Operative temperature [°C] + * @returns {math.MathCollection} Operative temperature [°C] */ export function operative_temp(tdb, tr, hc, hr) { - return $map( - [tdb, tr, hc, hr], - ([tdb, tr, hc, hr]) => (hc * tdb + hr * tr) / (hc + hr), + return math.dotDivide( + math.add(math.dotMultiply(hc, tdb), math.dotMultiply(hr, tr)), + math.add(hc, hr), ); } diff --git a/src/jos3_functions/thermoregulation/rad_coef.js b/src/jos3_functions/thermoregulation/rad_coef.js index f4ea1fe..5551e1c 100644 --- a/src/jos3_functions/thermoregulation/rad_coef.js +++ b/src/jos3_functions/thermoregulation/rad_coef.js @@ -1,11 +1,12 @@ import JOS3Defaults from "../JOS3Defaults.js"; +import * as math from "mathjs"; /** * Calculate radiative heat transfer coefficient (hr) [W/(m2*K)] * * @param {string} posture - Select posture from standing, sitting, lying, sedentary or supine. Default is "standing". * - * @returns {Array} hr - Radiative heat transfer coefficient (hr) [W/(m2*K)]. + * @returns {math.Matrix} hr - Radiative heat transfer coefficient (hr) [W/(m2*K)]. */ export function rad_coef(posture = JOS3Defaults.posture) { const valid_postures = [ @@ -24,23 +25,23 @@ export function rad_coef(posture = JOS3Defaults.posture) { switch (posture) { case "standing": // Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - return [ + return math.matrix([ 4.89, 4.89, 4.32, 4.09, 4.32, 4.55, 4.43, 4.21, 4.55, 4.43, 4.21, 4.77, 5.34, 6.14, 4.77, 5.34, 6.14, - ]; + ]); case "sitting": case "sedentary": // Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - return [ + return math.matrix([ 4.96, 4.96, 3.99, 4.64, 4.21, 4.96, 4.21, 4.74, 4.96, 4.21, 4.74, 4.1, 4.74, 6.36, 4.1, 4.74, 6.36, - ]; + ]); case "lying": case "supine": // Kurazumi et al., 2008, https://doi.org/10.20718/jjpa.13.1_17 - return [ + return math.matrix([ 5.475, 5.475, 3.463, 3.463, 3.463, 4.249, 4.835, 4.119, 4.249, 4.835, 4.119, 4.44, 5.547, 6.085, 4.44, 5.547, 6.085, - ]; + ]); } } diff --git a/src/jos3_functions/thermoregulation/resp_heat_loss.js b/src/jos3_functions/thermoregulation/resp_heat_loss.js index e232d7e..10b8650 100644 --- a/src/jos3_functions/thermoregulation/resp_heat_loss.js +++ b/src/jos3_functions/thermoregulation/resp_heat_loss.js @@ -1,3 +1,10 @@ +/** + * @typedef RespHeatLossResult + * @type {object} + * @property {number} res_sh - Sensible heat loss by respiration [W]. + * @property {number} res_lh - Latent heat loss by respiration [W]. + */ + /** * Calculate heat loss by respiration [W]. * @@ -5,10 +12,10 @@ * @param {number} p_a - Water vapor pressure in the ambient air [kPa]. * @param {number} q_thermogenesis_total - Total thermogenesis [W]. - * @return {number[]} res_sh, res_lh - Sensible and latent heat loss by respiration [W]. + * @return {RespHeatLossResult} res_sh, res_lh - Sensible and latent heat loss by respiration [W]. */ export function resp_heat_loss(tdb, p_a, q_thermogenesis_total) { let res_sh = 0.0014 * q_thermogenesis_total * (34 - tdb); // sensible heat loss let res_lh = 0.0173 * q_thermogenesis_total * (5.87 - p_a); // latent heat loss - return [res_sh, res_lh]; + return { res_sh, res_lh }; } diff --git a/src/jos3_functions/thermoregulation/shivering.js b/src/jos3_functions/thermoregulation/shivering.js index 9826313..ef72f70 100644 --- a/src/jos3_functions/thermoregulation/shivering.js +++ b/src/jos3_functions/thermoregulation/shivering.js @@ -1,27 +1,35 @@ -import { $array, $average, $map } from "../../supa.js"; import JOS3Defaults from "../JOS3Defaults.js"; import { error_signals } from "./error_signals.js"; import { bsa_rate } from "../bsa_rate.js"; +import * as math from "mathjs"; export let PRE_SHIV = 0; +/** + * Sets the value of PRE_SHIV. + * + * @param {number} value - the value to set PRE_SHIV to + */ export function set_pre_shiv(value) { PRE_SHIV = value; } /** * Calculate local thermogenesis by shivering [W]. - * @param {number[]} err_cr, err_sk - Difference between set-point and body temperatures [°C]. - * @param {number[]} t_core, t_skin - Core and skin temperatures [°C]. + * + * @param {math.MathCollection} err_cr - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_sk - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} t_core - Core and skin temperatures [°C]. + * @param {math.MathCollection} t_skin - Core and skin temperatures [°C]. * @param {number} [height=1.72] - Body height [m]. * @param {number} [weight=74.43] - Body weight [kg]. * @param {string} [bsa_equation="dubois"] - The equation name (str) of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", or "kurazumi". * @param {number} [age=20] - age [years]. * @param {string} [sex="male"] - Choose male or female. * @param {number} [dtime=60] - Interval of analysis time. - * @param {Object} options - Additional options. + * @param {object} options - Additional options. * - * @returns {number[]} q_shiv - Local thermogenesis by shivering [W]. + * @returns {math.MathCollection} q_shiv - Local thermogenesis by shivering [W]. */ export function shivering( err_cr, @@ -40,20 +48,22 @@ export function shivering( let { clds } = error_signals(err_sk); // Distribution coefficient of thermogenesis by shivering - let shivf = [ + let shivf = math.matrix([ 0.0339, 0.0436, 0.27394, 0.24102, 0.38754, 0.00243, 0.00137, 0.0002, 0.00243, 0.00137, 0.0002, 0.0039, 0.00175, 0.00035, 0.0039, 0.00175, 0.00035, - ]; + ]); // Integrated error signal of shivering - let sig_shiv = 24.36 * clds * -err_cr[0]; + let sig_shiv = 24.36 * clds * -err_cr.get([0]); sig_shiv = Math.max(sig_shiv, 0); - if (options.shivering_threshold) { + if (options["shivering_threshold"]) { // Asaka, 2016 // Threshold of starting shivering - let tskm = $average(t_skin, JOS3Defaults.local_bsa); + let tskm = + math.sum(math.dotMultiply(t_skin, JOS3Defaults.local_bsa)) / + math.sum(JOS3Defaults.local_bsa); let thres; @@ -64,12 +74,12 @@ export function shivering( } // Second threshold of starting shivering - if (thres < t_core[0]) { + if (thres < t_core.get([0])) { sig_shiv = 0; } } - if (options["limit_dshiv/dt"] !== null) { + if (options["limit_dshiv/dt"]) { let dshiv = sig_shiv - PRE_SHIV; let limit_dshiv = options["limit_dshiv/dt"] === true @@ -88,27 +98,29 @@ export function shivering( // Signal sd_shiv by aging let sd_shiv; if (age < 30) { - sd_shiv = $array(17, 1); + sd_shiv = math.ones(17); } else if (age < 40) { - sd_shiv = $array(17, 0.97514); + sd_shiv = math.multiply(math.ones(17), 0.97514); } else if (age < 50) { - sd_shiv = $array(17, 0.95028); + sd_shiv = math.multiply(math.ones(17), 0.95028); } else if (age < 60) { - sd_shiv = $array(17, 0.92818); + sd_shiv = math.multiply(math.ones(17), 0.92818); } else if (age < 70) { - sd_shiv = $array(17, 0.90055); + sd_shiv = math.multiply(math.ones(17), 0.90055); } else if (age < 80) { - sd_shiv = $array(17, 0.86188); + sd_shiv = math.multiply(math.ones(17), 0.86188); } else { - sd_shiv = $array(17, 0.82597); + sd_shiv = math.multiply(math.ones(17), 0.82597); } // Ratio of body surface area to the standard body [-] let bsar = bsa_rate(height, weight, bsa_equation); // Local thermogenesis by shivering [W] - return $map( - [shivf, sd_shiv], - ([shivf, sd_shiv]) => shivf * bsar * sd_shiv * sig_shiv, + let q_shiv = math.dotMultiply( + math.dotMultiply(math.dotMultiply(shivf, bsar), sd_shiv), + sig_shiv, ); + let x = q_shiv + 1; + return q_shiv; } diff --git a/src/jos3_functions/thermoregulation/skin_blood_flow.js b/src/jos3_functions/thermoregulation/skin_blood_flow.js index 99bcb47..40ae0cd 100644 --- a/src/jos3_functions/thermoregulation/skin_blood_flow.js +++ b/src/jos3_functions/thermoregulation/skin_blood_flow.js @@ -1,17 +1,19 @@ -import { $array, $map } from "../../supa.js"; import JOS3Defaults from "../JOS3Defaults.js"; import { error_signals } from "./error_signals.js"; import { bfb_rate } from "../bfb_rate.js"; +import * as math from "mathjs"; /** * Calculate skin blood flow rate (bf_skin) [L/h]. - * @param {number[]} err_cr, err_sk - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_cr - Difference between set-point and body temperatures [°C]. + * @param {math.MathCollection} err_sk - Difference between set-point and body temperatures [°C]. * @param {number} [height=1.72] - Body height [m]. * @param {number} [weight=74.43] - Body weight [kg]. * @param {string} [bsa_equation="dubois"] - The equation name of bsa calculation. Choose a name from "dubois", "takahira", "fujimoto", or "kurazumi". * @param {number} [age=20] - age [years]. * @param {number} [ci=2.59] - Cardiac index [L/min/㎡]. - * @returns {number[]} bf_skin - Skin blood flow rate [L/h]. + * + * @returns {math.MathCollection} bf_skin - Skin blood flow rate [L/h]. */ export function skin_blood_flow( err_cr, @@ -24,45 +26,53 @@ export function skin_blood_flow( ) { let { wrms, clds } = error_signals(err_sk); - let bfb_sk = [ + let bfb_sk = math.matrix([ 1.754, 0.325, 1.967, 1.475, 2.272, 0.91, 0.508, 1.114, 0.91, 0.508, 1.114, 1.456, 0.651, 0.934, 1.456, 0.651, 0.934, - ]; + ]); - let skin_dilat = [ + let skin_dilat = math.matrix([ 0.0692, 0.0992, 0.058, 0.0679, 0.0707, 0.04, 0.0373, 0.0632, 0.04, 0.0373, 0.0632, 0.0736, 0.0411, 0.0623, 0.0736, 0.0411, 0.0623, - ]; + ]); - let skin_stric = [ + let skin_stric = math.matrix([ 0.0213, 0.0213, 0.0638, 0.0638, 0.0638, 0.0213, 0.0213, 0.1489, 0.0213, 0.0213, 0.1489, 0.0213, 0.0213, 0.1489, 0.0213, 0.0213, 0.1489, - ]; + ]); - let sig_dilat = 100.5 * err_cr[0] + 6.4 * (wrms - clds); + let sig_dilat = 100.5 * err_cr.get([0]) + 6.4 * (wrms - clds); sig_dilat = sig_dilat > 0 ? sig_dilat : 0; - let sig_stric = -10.8 * err_cr[0] + -10.8 * (wrms - clds); + let sig_stric = -10.8 * err_cr.get([0]) + -10.8 * (wrms - clds); sig_stric = sig_stric > 0 ? sig_stric : 0; - let sd_stric = $array(17, 1); + let sd_stric = math.ones(17); let sd_dilat = age < 60 - ? $array(17, 1) - : [ + ? math.ones(17) + : math.matrix([ 0.91, 0.91, 0.47, 0.47, 0.31, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, - ]; + ]); - let bf_skin = $map( - [skin_dilat, sd_dilat, skin_stric, sd_stric, bfb_sk, err_sk], - ([skin_dilat, sd_dilat, skin_stric, sd_stric, bfb_sk, err_sk]) => - ((1 + skin_dilat * sd_dilat * sig_dilat) / - (1 + skin_stric * sd_stric * sig_stric)) * - bfb_sk * - 2 ** (err_sk / 6), + let bf_skin = math.dotMultiply( + math.dotMultiply( + math.dotDivide( + math.add( + 1, + math.multiply(math.dotMultiply(skin_dilat, sd_dilat), sig_dilat), + ), + math.add( + 1, + math.multiply(math.dotMultiply(skin_stric, sd_stric), sig_stric), + ), + ), + bfb_sk, + ), + math.dotPow(2, math.divide(err_sk, 6)), ); let bfb = bfb_rate(height, weight, bsa_equation, age, ci); - return bf_skin.map((bf_skin) => bf_skin * bfb); + return math.dotMultiply(bf_skin, bfb); } diff --git a/src/jos3_functions/thermoregulation/sum_bf.js b/src/jos3_functions/thermoregulation/sum_bf.js index dc16641..237e51f 100644 --- a/src/jos3_functions/thermoregulation/sum_bf.js +++ b/src/jos3_functions/thermoregulation/sum_bf.js @@ -1,14 +1,16 @@ +import * as math from "mathjs"; + /** * Sum the total blood flow in various body parts. * - * @param {number[]} bf_core - Blood flow rate in the core region [L/h]. - * @param {number[]} bf_muscle - Blood flow rate in the muscle region [L/h]. - * @param {number[]} bf_fat - Blood flow rate in the fat region [L/h]. - * @param {number[]} bf_skin - Blood flow rate in the skin region [L/h]. + * @param {math.MathCollection} bf_core - Blood flow rate in the core region [L/h]. + * @param {math.MathCollection} bf_muscle - Blood flow rate in the muscle region [L/h]. + * @param {math.MathCollection} bf_fat - Blood flow rate in the fat region [L/h]. + * @param {math.MathCollection} bf_skin - Blood flow rate in the skin region [L/h]. * @param {number} bf_ava_hand - AVA blood flow rate in one hand [L/h]. * @param {number} bf_ava_foot - AVA blood flow rate in one foot [L/h]. * - * @returns {float} co - Cardiac output (the sum of the whole blood flow rate) [L/h]. + * @returns {number} co - Cardiac output (the sum of the whole blood flow rate) [L/h]. */ export function sum_bf( bf_core, @@ -19,10 +21,10 @@ export function sum_bf( bf_ava_foot, ) { let co = 0; - co += bf_core.reduce((t, c) => t + c, 0); - co += bf_muscle.reduce((t, c) => t + c, 0); - co += bf_fat.reduce((t, c) => t + c, 0); - co += bf_skin.reduce((t, c) => t + c, 0); + co += math.sum(bf_core); + co += math.sum(bf_muscle); + co += math.sum(bf_fat); + co += math.sum(bf_skin); co += 2 * bf_ava_hand; co += 2 * bf_ava_foot; return co; diff --git a/src/jos3_functions/thermoregulation/sum_m.js b/src/jos3_functions/thermoregulation/sum_m.js index b73efaa..9f68179 100644 --- a/src/jos3_functions/thermoregulation/sum_m.js +++ b/src/jos3_functions/thermoregulation/sum_m.js @@ -1,15 +1,24 @@ import { BODY_NAMES, IDICT } from "../matrix.js"; -import { $map } from "../../supa.js"; +import * as math from "mathjs"; + +/** + * @typedef SumMResult + * @type {object} + * @property {math.MathCollection} q_thermogenesis_core - Total thermogenesis in core layer [W]. + * @property {math.MathCollection} q_thermogenesis_muscle - Total thermogenesis in muscle layer [W]. + * @property {math.MathCollection} q_thermogenesis_fat - Total thermogenesis in fat layer [W]. + * @property {math.MathCollection} q_thermogenesis_skin - Total thermogenesis in skin layer [W]. + */ /** * Calculate total thermogenesis in each layer [W]. * - * @param {number[][]} mbase - Local basal metabolic rate (Mbase) [W]. - * @param {number[]} q_work - Local thermogenesis by work [W]. - * @param {number[]} q_shiv - Local thermogenesis by shivering [W]. - * @param {number[]} q_nst - Local thermogenesis by non-shivering [W]. - - * @return {number[][]} q_thermogenesis_core, q_thermogenesis_muscle, q_thermogenesis_fat, q_thermogenesis_skin - Total thermogenesis in core, muscle, fat, skin layers [W]. + * @param {[math.MathCollection, math.MathCollection, math.MathCollection, math.MathCollection]} mbase - Local basal metabolic rate (Mbase) [W]. + * @param {math.MathCollection} q_work - Local thermogenesis by work [W]. + * @param {math.MathCollection} q_shiv - Local thermogenesis by shivering [W]. + * @param {math.MathCollection} q_nst - Local thermogenesis by non-shivering [W]. + * + * @return {SumMResult} Total thermogenesis in core, muscle, fat, skin layers [W]. */ export function sum_m(mbase, q_work, q_shiv, q_nst) { let [ @@ -23,21 +32,24 @@ export function sum_m(mbase, q_work, q_shiv, q_nst) { let bn = BODY_NAMES[i]; if (IDICT[bn]["muscle"] !== null) { - q_thermogenesis_muscle[i] += q_work[i] + q_shiv[i]; + q_thermogenesis_muscle.set( + [i], + q_thermogenesis_muscle.get([i]) + q_work.get([i]) + q_shiv.get([i]), + ); } else { - q_thermogenesis_core[i] += q_work[i] + q_shiv[i]; + q_thermogenesis_core.set( + [i], + q_thermogenesis_core.get([i]) + q_work.get([i]) + q_shiv.get([i]), + ); } } - q_thermogenesis_core = $map( - [q_thermogenesis_core, q_nst], - ([q_thermogenesis_core, q_nst]) => q_thermogenesis_core + q_nst, - ); + q_thermogenesis_core = math.add(q_thermogenesis_core, q_nst); - return [ + return { q_thermogenesis_core, q_thermogenesis_muscle, q_thermogenesis_fat, q_thermogenesis_skin, - ]; + }; } diff --git a/src/jos3_functions/thermoregulation/wet_r.js b/src/jos3_functions/thermoregulation/wet_r.js index 2fa61a4..65a3deb 100644 --- a/src/jos3_functions/thermoregulation/wet_r.js +++ b/src/jos3_functions/thermoregulation/wet_r.js @@ -1,16 +1,16 @@ import JOS3Defaults from "../JOS3Defaults.js"; import { clo_area_factor } from "./clo_area_factor.js"; -import { $map } from "../../supa.js"; +import * as math from "mathjs"; /** * Calculate total evaporative thermal resistance (between the skin and ambient air). * - * @param {number[]} hc - Convective heat transfer coefficient (hc) [W/(m2*K)]. - * @param {number[]} clo - Clothing insulation [clo]. - * @param {number[]} [i_clo=0.45] - Clothing vapor permeation efficiency [-]. + * @param {math.Matrix} hc - Convective heat transfer coefficient (hc) [W/(m2*K)]. + * @param {math.Matrix} clo - Clothing insulation [clo]. + * @param {number | math.Matrix} [i_clo=0.45] - Clothing vapor permeation efficiency [-]. * @param {number} [lewis_rate=16.5] - Lewis rate [K/kPa]. * - * @returns {number[]} r_et - Total evaporative thermal resistance. + * @returns {math.Matrix} r_et - Total evaporative thermal resistance. */ export function wet_r( hc, @@ -18,16 +18,13 @@ export function wet_r( i_clo = JOS3Defaults.clothing_vapor_permeation_efficiency, lewis_rate = JOS3Defaults.lewis_rate, ) { - if (hc.some((hc) => hc < 0)) { + if (hc.toArray().some((hc) => hc < 0)) { throw new Error("Input parameter hc must be non-negative."); } let fcl = clo_area_factor(clo); - let r_cl = clo.map((clo) => 0.155 * clo); - let r_ea = hc.map((hc) => 1 / (lewis_rate * hc)); - let r_ecl = $map( - [r_cl, i_clo], - ([r_cl, i_clo]) => r_cl / (lewis_rate * i_clo), - ); - return $map([r_ea, fcl, r_ecl], ([r_ea, fcl, r_ecl]) => r_ea / fcl + r_ecl); + let r_cl = math.dotMultiply(0.155, clo); + let r_ea = math.dotDivide(1, math.dotMultiply(lewis_rate, hc)); + let r_ecl = math.dotDivide(r_cl, math.multiply(i_clo, lewis_rate)); + return math.add(math.dotDivide(r_ea, fcl), r_ecl); } diff --git a/src/models/JOS3.js b/src/models/JOS3.js index 11ab9c0..9f4cbc3 100644 --- a/src/models/JOS3.js +++ b/src/models/JOS3.js @@ -1,4 +1,10 @@ import JOS3Defaults from "../jos3_functions/JOS3Defaults.js"; +import { bsa_rate } from "../jos3_functions/bsa_rate.js"; +import { local_bsa } from "../jos3_functions/local_bsa.js"; +import { bfb_rate } from "../jos3_functions/bfb_rate.js"; +import { conductance } from "../jos3_functions/conductance.js"; +import { capacity } from "../jos3_functions/capacity.js"; +import * as math from "mathjs"; import { BODY_NAMES, INDEX, @@ -8,16 +14,12 @@ import { VINDEX, whole_body, } from "../jos3_functions/matrix.js"; -import { bsa_rate } from "../jos3_functions/bsa_rate.js"; -import { local_bsa } from "../jos3_functions/local_bsa.js"; -import { bfb_rate } from "../jos3_functions/bfb_rate.js"; -import { conductance } from "../jos3_functions/conductance.js"; -import { capacity } from "../jos3_functions/capacity.js"; -import { pmv } from "./pmv.js"; import { set_pre_shiv, shivering, } from "../jos3_functions/thermoregulation/shivering.js"; +import { basal_met } from "../jos3_functions/thermoregulation/basal_met.js"; +import { pmv } from "./pmv.js"; import { fixed_hc } from "../jos3_functions/thermoregulation/fixed_hc.js"; import { conv_coef } from "../jos3_functions/thermoregulation/conv_coef.js"; import { fixed_hr } from "../jos3_functions/thermoregulation/fixed_hr.js"; @@ -25,7 +27,6 @@ import { rad_coef } from "../jos3_functions/thermoregulation/rad_coef.js"; import { operative_temp } from "../jos3_functions/thermoregulation/operative_temp.js"; import { dry_r } from "../jos3_functions/thermoregulation/dry_r.js"; import { wet_r } from "../jos3_functions/thermoregulation/wet_r.js"; -import { $array, $average, $index, $map, $reduce, $sum } from "../supa.js"; import { antoine, evaporation, @@ -34,66 +35,105 @@ import { skin_blood_flow } from "../jos3_functions/thermoregulation/skin_blood_f import { ava_blood_flow } from "../jos3_functions/thermoregulation/ava_blood_flow.js"; import { nonshivering } from "../jos3_functions/thermoregulation/nonshivering.js"; import { local_mbase } from "../jos3_functions/thermoregulation/local_mbase.js"; -import { local_q_work } from "../jos3_functions/thermoregulation/local_q_work.js"; import { sum_m } from "../jos3_functions/thermoregulation/sum_m.js"; +import { local_q_work } from "../jos3_functions/thermoregulation/local_q_work.js"; import { cr_ms_fat_blood_flow } from "../jos3_functions/thermoregulation/cr_ms_fat_blood_flow.js"; import { resp_heat_loss } from "../jos3_functions/thermoregulation/resp_heat_loss.js"; import { sum_bf } from "../jos3_functions/thermoregulation/sum_bf.js"; -import { - add, - clone, - diag, - divide, - dotDivide, - dotMultiply, - identity, - index, - inv, - map, - matrix, - mean, - multiply, - reshape, - subset, - subtract, - sum, - zeros, -} from "mathjs"; -import { basal_met } from "../jos3_functions/thermoregulation/basal_met.js"; - +import Object from "lodash/object.js"; + +/** + * Create an array of shape (17,) with the given input. + * + * @param inp {number | number[] | object} + * @returns {math.Matrix} + */ function _to17array(inp) { if (typeof inp === "number") { - return Array(17).fill(inp); - } else if (inp instanceof Array) { - if (inp.length === 17) { - return [...inp]; - } else { - throw new Error("The input list is not of length 17"); - } - } else if (typeof inp === "object" && inp !== null) { - return BODY_NAMES.map((key) => inp[key]); - } else { - throw new Error( - "Unsupported input type. Supported types: number, Array, object", - ); + return math.multiply(math.ones(17), inp); } -} -function wmean(values, weights) { - if (values.length !== weights.length) { - throw new Error("Values and weights arrays must have the same length."); - } + if (math.isCollection(inp)) { + const size = math.size(inp).toArray(); + + if (!math.equal(size, [17])) { + throw new Error("Input list is not of length 17"); + } - // Calculate the sum of all products of values and their corresponding weights - const sumProduct = sum(multiply(values, weights)); + return math.matrix(inp); + } - // Calculate the sum of all weights - const sumWeights = sum(weights); + if (typeof inp === "object") { + return math.matrix(BODY_NAMES.map((name) => inp[name])); + } - return divide(sumProduct, sumWeights); + throw new Error("Unsupported input type. Supported types: number"); } +/** + * JOS-3 model simulates human thermal physiology including skin + * temperature, core temperature, sweating rate, etc. for the whole body and + * 17 local body parts. + * + * This model was developed at Shin-ichi Tanabe Laboratory, Waseda University + * and was derived from 65 Multi-Node model (https://doi.org/10.1016/S0378-7788(02)00014-2) + * and JOS-2 model (https://doi.org/10.1016/j.buildenv.2013.04.013). + * + * To use this model, create an instance of the JOS3 class with optional body parameters + * such as body height, weight, age, sex, etc. + * + * Environmental conditions such as air temperature, mean radiant temperature, air velocity, etc. + * can be set using the setter methods. (ex. X.tdb, X.tr X.v) + * If you want to set the different conditions in each body part, set them + * as a 17 lengths of list, dictionary, or numpy array format. + * + * List or numpy array format input must be 17 lengths and means the order of "head", "neck", "chest", + * "back", "pelvis", "left_shoulder", "left_arm", "left_hand", "right_shoulder", "right_arm", + * "right_hand", "left_thigh", "left_leg", "left_foot", "right_thigh", "right_leg" and "right_foot". + * + * The model output includes local and mean skin temperature, local core temperature, + * local and mean skin wettedness, and heat loss from the skin etc. + * The model output can be accessed using "dict_results()" method and be converted to a csv file + * using "to_csv" method. + * Each output parameter also can be accessed using getter methods. + * (ex. X.t_skin, X.t_skin_mean, X.t_core) + * + * If you use this package, please cite us as follows and mention the version of pythermalcomfort used: + * Y. Takahashi, A. Nomoto, S. Yoda, R. Hisayama, M. Ogata, Y. Ozeki, S. Tanabe, + * Thermoregulation Model JOS-3 with New Open Source Code, Energy & Buildings (2020), + * doi: https://doi.org/10.1016/j.enbuild.2020.110575 + * + * Note: To maintain consistency in variable names for jsthermalcomfort and pythermalcomfort, + * some variable names differ from those used in the original paper. + * + * @public + * @memberof models + * @docname JOS3 + */ export class JOS3 { + /** + * Initialize a new instance of JOS3 class, which is designed to model + * and simulate various physiological parameters related to human + * thermoregulation. + * + * This class uses mathematical models to calculate and predict + * body temperature, basal metabolic rate, body surface area, and + * other related parameters. + * + * @param {number} [height] - body height, in [m]. + * @param {number} [weight] - body weight, in [kg]. + * @param {number} [fat] - fat percentage, in [%]. + * @param {number} [age] - age, in [years]. + * @param {"male" | "female"} [sex] - sex. + * @param {number} [ci] - Cardiac index, in [L/min/m2]. + * @param {"harris-benedict" | "harris-benedict_origin" | "japanese" | "ganpule"} [bmr_equation] - The equation used + * to calculate basal metabolic rate (BMR). + * @param {"dubois" | "fujimoto" | "kruazumi" | "takahira"} [bsa_equation] - The equation used to calculate body + * surface area (bsa). + * @param {[] | "all"} [ex_output] - This is used when you want to display results other than the default output + * parameters (ex.skin temperature); by default, JOS outputs only the most necessary parameters in order to reduce + * the computational load. + */ constructor( height = JOS3Defaults.height, weight = JOS3Defaults.weight, @@ -103,14 +143,14 @@ export class JOS3 { ci = JOS3Defaults.cardiac_index, bmr_equation = JOS3Defaults.bmr_equation, bsa_equation = JOS3Defaults.bsa_equation, - ex_output = null, + ex_output = [], ) { // Initialize basic attributes this._height = height; this._weight = weight; this._fat = fat; - this._sex = sex; this._age = age; + this._sex = sex; this._ci = ci; this._bmr_equation = bmr_equation; this._bsa_equation = bsa_equation; @@ -132,27 +172,37 @@ export class JOS3 { this._cap = capacity(height, weight, bsa_equation, age, ci); // Set initial core and skin temperature set points [°C] - this.setpt_cr = Array(17).fill(JOS3Defaults.core_temperature); - this.setpt_sk = Array(17).fill(JOS3Defaults.skin_temperature); + this.setpt_cr = math.multiply(math.ones(17), JOS3Defaults.core_temperature); + this.setpt_sk = math.multiply(math.ones(17), JOS3Defaults.skin_temperature); // Initialize body temperature [°C] - this._bodytemp = Array(NUM_NODES).fill(JOS3Defaults.other_body_temperature); + this._bodytemp = math.multiply( + math.ones(NUM_NODES), + JOS3Defaults.other_body_temperature, + ); // Initialize environmental conditions and other factors // (Default values of input conditions) - this._ta = Array(17).fill(JOS3Defaults.dry_bulb_air_temperature); - this._tr = Array(17).fill(JOS3Defaults.mean_radiant_temperature); - this._rh = Array(17).fill(JOS3Defaults.relative_humidity); - this._va = Array(17).fill(JOS3Defaults.air_speed); - this._clo = Array(17).fill(JOS3Defaults.clothing_insulation); - this._iclo = Array(17).fill( + this._ta = math.multiply( + math.ones(17), + JOS3Defaults.dry_bulb_air_temperature, + ); + this._tr = math.multiply( + math.ones(17), + JOS3Defaults.mean_radiant_temperature, + ); + this._rh = math.multiply(math.ones(17), JOS3Defaults.relative_humidity); + this._va = math.multiply(math.ones(17), JOS3Defaults.air_speed); + this._clo = math.multiply(math.ones(17), JOS3Defaults.clothing_insulation); + this._iclo = math.multiply( + math.ones(17), JOS3Defaults.clothing_vapor_permeation_efficiency, ); this._par = JOS3Defaults.physical_activity_ratio; this._posture = JOS3Defaults.posture; this._hc = null; // Convective heat transfer coefficient this._hr = null; // Radiative heat transfer coefficient - this.ex_q = Array(NUM_NODES).fill(0); // External heat gain + this.ex_q = math.zeros(NUM_NODES); // External heat gain this._t = 0; // Elapsed time this._cycle = 0; // Cycle time this.model_name = "JOS3"; // Model name @@ -177,8 +227,45 @@ export class JOS3 { this._cycle = 0; // Cycle time // Reset set-point temperature and save the last model parameters - let dictout = this._reset_setpt(JOS3Defaults.physical_activity_ratio); - this._history.append(dictout); + const dictout = this._reset_setpt(JOS3Defaults.physical_activity_ratio); + this._history.push(dictout); + } + + /** + * Calculate operative temperature [°C] when PMV=0. + * + * @private + * + * @param va {number} - Air velocity [m/s]. + * @param rh {number} - Relative humidity [%]. + * @param met {number} - Metabolic rate [met]. + * @param clo {number} - Clothing insulation [clo]. + * + * @returns {number} + */ + _calculate_operative_temp_when_pmv_is_zero( + va = JOS3Defaults.air_speed, + rh = JOS3Defaults.relative_humidity, + met = JOS3Defaults.metabolic_rate, + clo = JOS3Defaults.clothing_insulation, + ) { + let to = 28; // initial operative temperature + + // Iterate until the PMV (Predicted Mean Vote) value is less than 0.001 + let vpmv; + for (let i = 0; i < 100; i++) { + vpmv = pmv(to, to, va, rh, met, clo); + + // Break the loop if the absolute value of PMV is less than 0.001 + if (math.abs(vpmv) < 0.001) { + break; + } + + // Update the temperature based on the PMV value + to = to - vpmv / 3; + } + + return to; } /** @@ -188,23 +275,31 @@ export class JOS3 { * This function is used during initialization to calculate the set-point temperatures as a reference for thermoregulation. * Be careful, input parameters (tdb, tr, rh, v, clo, par) and body temperatures are also reset. * - * @returns {Object} Parameters of JOS-3 model. + * @private + * + * @param par {number} - Physical activity ratio. */ _reset_setpt(par = JOS3Defaults.physical_activity_ratio) { // Set operative temperature under PMV=0 environment // 1 met = 58.15 W/m2 - let w_per_m2_to_met = 1 / 58.15; // unit converter W/m2 to met - let met = this.bmr * par * w_per_m2_to_met; // [met] - this.to = this._calculate_operative_temp_when_pmv_is_zero(met); + const w_per_m2_to_met = 1 / 58.15; // unit converter W/m2 to met + const met = this.bmr * par * w_per_m2_to_met; // [met] + + this.to = this._calculate_operative_temp_when_pmv_is_zero( + undefined, + undefined, + met, + undefined, + ); this.rh = JOS3Defaults.relative_humidity; this.v = JOS3Defaults.air_speed; this.clo = JOS3Defaults.clothing_insulation; - this.par = par; // Physical activity ratio + this.par = par; - // Steady-calculation + // Steady-calculatio this.options["ava_zero"] = true; - let dict_out = {}; + let dict_out; for (let i = 0; i < 10; i++) { dict_out = this._run(60000, true); } @@ -217,65 +312,28 @@ export class JOS3 { return dict_out; } - /** - * Calculate operative temperature [°C] when PMV=0. - * - * @param {number} [va=JOS3Defaults.air_speed] - Air velocity [m/s]. - * @param {number} [rh=JOS3Defaults.relative_humidity] - Relative humidity [%]. - * @param {number} [met=JOS3Defaults.metabolic_rate] - Metabolic rate [met]. - * @param {number} [clo=JOS3Defaults.clothing_insulation] - Clothing insulation [clo]. - * - * @returns {number} Operative temperature [°C]. - */ - _calculate_operative_temp_when_pmv_is_zero( - va = JOS3Defaults.air_speed, - rh = JOS3Defaults.relative_humidity, - met = JOS3Defaults.metabolic_rate, - clo = JOS3Defaults.clothing_insulation, - ) { - let to = 28; // initial operative temperature - - // Iterate until the PMV (Predicted Mean Vote) value is less than 0.001 - for (let i = 0; i < 100; i++) { - let vpmv = pmv(to, to, va, undefined, rh, met, clo); - - // Break the loop if the absolute value of PMV is less than 0.001 - if (Math.abs(vpmv) < 0.001) { - break; - } - - // Update the temperature based on the PMV value - to = to - vpmv / 3; - } - - return to; - } - /** * Run JOS-3 model. * - * @param {number} times - Number of loops of a simulation. - * @param {number} [dtime=60] - Time delta in seconds. - * @param {boolean} [output=true] - If you don't want to record parameters, set to false. - * @returns {void} + * @property {number} times - Number of loops of a simulation. + * @property {number} [dtime=60] - Time delta in seconds. + * @property {boolean} [output=true] - If you don't want to record parameters, set False. */ simulate(times, dtime = 60, output = true) { // Loop through the simulation for the given number of times for (let i = 0; i < times; i++) { // Increment the elapsed time by the time delta - // Assuming you have a method or logic to increment `_t` with dtime - this._t += dtime; // This line might need further adjustment depending on how `_t` is used in your code + this._t += dtime; // Increment the cycle counter - this._cycle++; + this._cycle += 1; // Execute the simulation step - // Assuming `_run` is a method on this class - const dictData = this._run(dtime, output); + const dict_data = this._run(dtime, undefined, output); - // If output is true, append the results to the history + // If output is True, append the results to the history if (output) { - this._history.push(dictData); + this._history.push(dict_data); } } } @@ -302,13 +360,20 @@ export class JOS3 { * the function also returns a detailed dictionary of all the thermoregulation parameters * and other variables used in the simulation. * - * @param {number} [dtime=60] - Time delta [sec]. Default is 60. - * @param {boolean} [passive=false] - If you run a passive model, set to True. Default is False. - * @param {boolean} [output=true] - If you don't need parameters, set to False. Default is True. + * @private + * + * @param {number} dtime - Time delta [sec]. + * @param {boolean} passive - If you run a passive model. + * @param {boolean} output - If you don't need parameters. * - * @returns {Object} - Output parameters. + * @returns {object} */ _run(dtime = 60, passive = false, output = true) { + // Compute convective and radiative heat transfer coefficient [W/(m2*K)] + // based on posture, air velocity, air temperature, and skin temperature. + // Manual setting is possible by setting self._hc and self._hr. + // Compute heat and evaporative heat resistance [m2.K/W], [m2.kPa/W] + // Get core and skin temperatures let tcr = this.t_core; let tsk = this.t_skin; @@ -318,12 +383,14 @@ export class JOS3 { conv_coef(this._posture, this._va, this._ta, tsk), this._va, ); + let hr = fixed_hr(rad_coef(this._posture)); // Manually set convective and radiative heat transfer coefficients if necessary if (this._hc !== null) { hc = this._hc; } + if (this._hr !== null) { hr = this._hr; } @@ -331,15 +398,19 @@ export class JOS3 { // Compute operative temp. [°C], clothing heat and evaporative resistance [m2.K/W], [m2.kPa/W] // Operative temp. [°C] let to = operative_temp(this._ta, this._tr, hc, hr); + // Clothing heat resistance [m2.K/W] let r_t = dry_r(hc, hr, this._clo); + // Clothing evaporative resistance [m2.kPa/W] let r_et = wet_r(hc, this._clo, this._iclo); + // ------------------------------------------------------------------ // Thermoregulation // 1) Sweating // 2) Vasoconstriction, Vasodilation // 3) Shivering and non-shivering thermogenesis + // ------------------------------------------------------------------ // Compute the difference between the set-point temperature and body temperatures // and other thermoregulation parameters. @@ -347,21 +418,16 @@ export class JOS3 { // set to the current body temperature. // set-point temperature for thermoregulation - - let setpt_sk, setpt_cr; - if (passive) { - setpt_cr = tcr; - setpt_sk = tsk; - } else { - setpt_cr = this.setpt_cr; - setpt_sk = this.setpt_sk; - } + let setpt_cr = passive ? tcr.clone() : this.setpt_cr.clone(); + let setpt_sk = passive ? tsk.clone() : this.setpt_sk.clone(); // Error signal = Difference between set-point and body temperatures - let err_cr = subtract(tcr, setpt_cr); - let err_sk = subtract(tsk, setpt_sk); + let err_cr = math.subtract(tcr, setpt_cr); + let err_sk = math.subtract(tsk, setpt_sk); // SWEATING THERMOREGULATION + // Skin wettedness [-], e_skin, e_max, e_sweat [W] + // Calculate skin wettedness, sweating heat loss, maximum sweating rate, and total sweat rate let { wet, e_sk, e_max, e_sweat } = evaporation( err_cr, err_sk, @@ -376,6 +442,7 @@ export class JOS3 { ); // VASOCONSTRICTION, VASODILATION + // Calculate skin blood flow and basal skin blood flow [L/h] let bf_skin = skin_blood_flow( err_cr, err_sk, @@ -386,7 +453,8 @@ export class JOS3 { this._ci, ); - let bloodFlows = ava_blood_flow( + // Calculate hands and feet's AVA blood flow [L/h] + let { bf_ava_hand, bf_ava_foot } = ava_blood_flow( err_cr, err_sk, this._height, @@ -395,15 +463,14 @@ export class JOS3 { this._age, this._ci, ); - let bf_ava_hand = bloodFlows[0]; - let bf_ava_foot = bloodFlows[1]; - if (this.options.ava_zero && passive) { + if (this.options["ava_zero"] && passive) { bf_ava_hand = 0; bf_ava_foot = 0; } // SHIVERING AND NON-SHIVERING + // Calculate shivering thermogenesis [W] let q_shiv = shivering( err_cr, err_sk, @@ -419,22 +486,21 @@ export class JOS3 { ); // Calculate non-shivering thermogenesis (NST) [W] - let q_nst; - if (this.options.nonshivering_thermogenesis) { - q_nst = nonshivering( - err_sk, - this._height, - this._weight, - this._bsa_equation, - this._age, - this.options.cold_acclimated, - this.options.bat_positive, - ); - } else { - q_nst = new Array(17).fill(0); - } + let q_nst = this.options["nonshivering_thermogenesis"] + ? nonshivering( + err_sk, + this._height, + this._weight, + this._bsa_equation, + this._age, + this.options["cold_acclimated"], + this.options["bat_positive"], + ) + : math.zeros(17); + // ------------------------------------------------------------------ // Thermogenesis + // ------------------------------------------------------------------ // Calculate local basal metabolic rate (BMR) [W] let q_bmr_local = local_mbase( @@ -446,31 +512,36 @@ export class JOS3 { ); // Calculate overall basal metabolic rate (BMR) [W] - let q_bmr_total = q_bmr_local - .map((m) => m.reduce((a, b) => a + b, 0)) - .reduce((a, b) => a + b, 0); + let q_bmr_total = math.sum(q_bmr_local.map((q) => math.sum(q))); // Calculate thermogenesis by work [W] let q_work = local_q_work(q_bmr_total, this._par); // Calculate the sum of thermogenesis in core, muscle, fat, skin [W] - let [ + let { q_thermogenesis_core, q_thermogenesis_muscle, q_thermogenesis_fat, q_thermogenesis_skin, - ] = sum_m(q_bmr_local, q_work, q_shiv, q_nst); + } = sum_m( + q_bmr_local.map((c) => c.clone()), + q_work, + q_shiv, + q_nst, + ); let q_thermogenesis_total = - q_thermogenesis_core.reduce((a, b) => a + b, 0) + - q_thermogenesis_muscle.reduce((a, b) => a + b, 0) + - q_thermogenesis_fat.reduce((a, b) => a + b, 0) + - q_thermogenesis_skin.reduce((a, b) => a + b, 0); + math.sum(q_thermogenesis_core) + + math.sum(q_thermogenesis_muscle) + + math.sum(q_thermogenesis_fat) + + math.sum(q_thermogenesis_skin); + // ------------------------------------------------------------------ // Others + // ------------------------------------------------------------------ // Calculate blood flow in core, muscle, fat [L/h] - let [bf_core, bf_muscle, bf_fat] = cr_ms_fat_blood_flow( + let { bf_core, bf_muscle, bf_fat } = cr_ms_fat_blood_flow( q_work, q_shiv, this._height, @@ -481,15 +552,21 @@ export class JOS3 { ); // Calculate heat loss by respiratory - let p_a = (antoine(this._ta) * this._rh) / 100; - let [res_sh, res_lh] = resp_heat_loss( - this._ta[0], - p_a[0], + let p_a = math.dotDivide( + math.dotMultiply(this._ta.map(antoine), this._rh), + 100, + ); + let { res_sh, res_lh } = resp_heat_loss( + this._ta.get([0]), + p_a.get([0]), q_thermogenesis_total, ); // Calculate sensible heat loss [W] - let shl_sk = ((tsk - to) / r_t) * this._bsa; + let shl_sk = math.dotMultiply( + math.dotDivide(math.subtract(tsk, to), r_t), + this._bsa, + ); // Calculate cardiac output [L/h] let co = sum_bf( @@ -502,24 +579,29 @@ export class JOS3 { ); // Calculate weight loss rate by evaporation [g/sec] - let wlesk = (e_sweat + 0.06 * e_max) / 2418; + let wlesk = math.dotDivide( + math.add(e_sweat, math.dotMultiply(0.06, e_max)), + 2418, + ); let wleres = res_lh / 2418; + // ------------------------------------------------------------------ // Matrix // This code section is focused on constructing and calculating // various matrices required for modeling the thermoregulation // of the human body. // Since JOS-3 has 85 thermal nodes, the determinant of 85*85 is to be solved. + // ------------------------------------------------------------------ // Matrix A = Matrix for heat exchange due to blood flow and conduction occurring between tissues + // (85, 85,) ndarray // Calculates the blood flow in arteries and veins for core, muscle, fat, skin, // and arteriovenous anastomoses (AVA) in hands and feet, // and combines them into two arrays: // 1) bf_local for the local blood flow and 2) bf_whole for the whole-body blood flow. // These arrays are then combined to form arr_bf. - - let [bf_art, bf_vein] = vessel_blood_flow( + let { bf_art, bf_vein } = vessel_blood_flow( bf_core, bf_muscle, bf_fat, @@ -527,6 +609,7 @@ export class JOS3 { bf_ava_hand, bf_ava_foot, ); + let bf_local = local_arr( bf_core, bf_muscle, @@ -535,135 +618,152 @@ export class JOS3 { bf_ava_hand, bf_ava_foot, ); - let bf_whole = whole_body(bf_art, bf_vein, bf_ava_hand, bf_ava_foot); - // Initialize arr_bf with zeros using mathjs matrix - let arr_bf = zeros(NUM_NODES, NUM_NODES); + let bf_whole = whole_body(bf_art, bf_vein, bf_ava_hand, bf_ava_foot); - // Add bf_local and bf_whole to arr_bf - arr_bf = add(arr_bf, bf_local); - arr_bf = add(arr_bf, bf_whole); + let arr_bf = math.zeros(NUM_NODES, NUM_NODES); + arr_bf = math.add(arr_bf, bf_local); + arr_bf = math.add(arr_bf, bf_whole); // Adjusts the units of arr_bf from [W/K] to [/sec] and then to [-] - // by dividing by the heat capacity this._cap and multiplying by the time step dtime. - let reshaped_cap = reshape(this._cap, [NUM_NODES, 1]); - arr_bf = dotDivide(arr_bf, reshaped_cap); // Change unit [W/K] to [/sec] - arr_bf = multiply(arr_bf, dtime); // Change unit [/sec] to [-] + // by dividing by the heat capacity self._cap and multiplying by the time step dtime. + arr_bf = math.dotDivide(arr_bf, math.reshape(this._cap, [NUM_NODES, 1])); // Change unit [W/K] to [/sec] + arr_bf = math.dotMultiply(arr_bf, dtime); // Change unit [/sec] to [-] // Performs similar unit conversions for the convective heat transfer coefficient array arr_cdt - // (also divided by this._cap and multiplied by dtime). - let arr_cdt = clone(this._cdt); - arr_cdt = dotDivide(arr_cdt, reshaped_cap); // Change unit [W/K] to [/sec] - arr_cdt = multiply(arr_cdt, dtime); // Change unit [/sec] to [-] + // (also divided by self._cap and multiplied by dtime). + let arr_cdt = this._cdt.clone(); + arr_cdt = math.dotDivide(arr_cdt, math.reshape(this._cap, [NUM_NODES, 1])); // Change unit [W/K] to [/sec] + arr_cdt = math.dotMultiply(arr_cdt, dtime); // Change unit [/sec] to [-] // Matrix B = Matrix for heat transfer between skin and environment - let arr_b = zeros(NUM_NODES); - - // Updating arr_b based on INDEX["skin"] - INDEX["skin"].forEach((idx, i) => { - arr_b[idx] += (1 / r_t) * this._bsa[i]; - }); - - // Using mathjs library for array operations - arr_b = dotDivide(arr_b, this._cap); - arr_b = multiply(arr_b, dtime); + let arr_b = math.zeros(NUM_NODES); + arr_b = math.subset( + arr_b, + math.index(INDEX["skin"]), + math.add( + math.subset(arr_b, math.index(INDEX["skin"])), + math.dotMultiply(math.dotDivide(1, r_t), this._bsa), + ), + ); + arr_b = math.dotDivide(arr_b, this._cap); // Change unit [W/K] to [/sec] + arr_b = math.dotMultiply(arr_b, dtime); // Change unit [/sec] to [-] - // Calculates the off-diagonal and diagonal elements of the matrix A - let arr_a_tria = subtract(multiply(-1, arr_cdt), arr_bf); + // Calculates the off-diagonal and diagonal elements of the matrix A, + // which represents the heat transfer coefficients between different parts of the body, + // and combines them to form the full matrix A (arrA). + // Then, the inverse of matrix A is computed (arrA_inv). + let arr_a_tria = math.dotMultiply(math.add(arr_cdt, arr_bf), -1); - let arr_a_dia = add(arr_cdt, arr_bf); - arr_a_dia = add(sum(arr_a_dia, 1), arr_b); // Assuming 'axis=1' means summing along rows - arr_a_dia = diag(arr_a_dia); - arr_a_dia = add(arr_a_dia, identity(NUM_NODES)); + let arr_a_dia = math.add(arr_cdt, arr_bf); + arr_a_dia = math.add(math.sum(arr_a_dia, 1), arr_b); + arr_a_dia = math.diag(arr_a_dia); + arr_a_dia = math.add(arr_a_dia, math.identity(NUM_NODES)); - let arr_a = add(arr_a_tria, arr_a_dia); - let arr_a_inv = inv(arr_a); + let arr_a = math.add(arr_a_tria, arr_a_dia); + let arr_a_inv = math.inv(arr_a); // Matrix Q = Matrix for heat generation rate from thermogenesis, respiratory, sweating, // and extra heat gain processes in different body parts. - let arr_q = zeros(NUM_NODES); + // Matrix Q [W] / [J/K] * [sec] = [-] // Thermogensis - arr_q = add( + let arr_q = math.zeros(NUM_NODES); + arr_q = math.subset( arr_q, - subset(zeros(NUM_NODES), index(INDEX["core"]), q_thermogenesis_core), + math.index(INDEX["core"]), + math.add( + math.subset(arr_q, math.index(INDEX["core"])), + q_thermogenesis_core, + ), ); - arr_q = add( + arr_q = math.subset( arr_q, - subset( - zeros(NUM_NODES), - index(INDEX["muscle"]), - subset(q_thermogenesis_muscle, index(VINDEX["muscle"])), + math.index(INDEX["muscle"]), + math.add( + math.subset(arr_q, math.index(INDEX["muscle"])), + math.subset(q_thermogenesis_muscle, math.index(VINDEX["muscle"])), ), ); - arr_q = add( + + arr_q = math.subset( arr_q, - subset( - zeros(NUM_NODES), - index(INDEX["fat"]), - subset(q_thermogenesis_fat, index(VINDEX["fat"])), + math.index(INDEX["fat"]), + math.add( + math.subset(arr_q, math.index(INDEX["fat"])), + math.subset(q_thermogenesis_fat, math.index(VINDEX["fat"])), ), ); - arr_q = add( + + arr_q = math.subset( arr_q, - subset(zeros(NUM_NODES), index(INDEX["skin"]), q_thermogenesis_skin), + math.index(INDEX["skin"]), + math.add( + math.subset(arr_q, math.index(INDEX["skin"])), + q_thermogenesis_skin, + ), ); // Respiratory [W] - arr_q[INDEX["core"][2]] -= res_sh + res_lh; // chest core + arr_q.set( + [INDEX["core"][2]], + arr_q.get([INDEX["core"][2]]) - (res_sh + res_lh), + ); // chest core // Sweating [W] - arr_q = subtract( + arr_q = math.subset( arr_q, - subset(zeros(NUM_NODES), index(INDEX["skin"]), e_sk), + math.index(INDEX["skin"]), + math.subtract(math.subset(arr_q, math.index(INDEX["skin"])), e_sk), ); // Extra heat gain [W] - arr_q = add(arr_q, this.ex_q); + arr_q = math.add(arr_q, this.ex_q.clone()); - // Adjust units - arr_q = dotDivide(arr_q, this._cap); // Change unit [W]/[J/K] to [K/sec] - arr_q = multiply(arr_q, dtime); // Change unit [K/sec] to [K] + arr_q = math.dotDivide(arr_q, this._cap); // Change unit [W]/[J/K] to [K/sec] + arr_q = math.dotMultiply(arr_q, dtime); // Change unit [K/sec] to [K] - // Boundary matrix [°C] - let arr_to = zeros(NUM_NODES); - arr_to = add(arr_to, subset(zeros(NUM_NODES), index(INDEX["skin"]), to)); + // Boundary batrix [°C] + let arr_to = math.zeros(NUM_NODES); + arr_to = math.subset( + arr_to, + math.index(INDEX["skin"]), + math.add(math.subset(arr_to, math.index(INDEX["skin"])), to), + ); // Combines the current body temperature, the boundary matrix, and the heat generation matrix // to calculate the new body temperature distribution (arr). - let arr = add(add(this._bodytemp, dotMultiply(arr_b, arr_to)), arr_q); - - console.log(arr_b); - console.log(arr_to); - console.log(arr_q); - console.log(arr_a_inv); - console.log(arr); + let arr = math.add( + math.add(this._bodytemp, math.dotMultiply(arr_b, arr_to)), + arr_q, + ); // ------------------------------------------------------------------ // New body temp. [°C] // ------------------------------------------------------------------ - this._bodytemp = dotMultiply(arr_a_inv, arr); + this._bodytemp = math.multiply(arr_a_inv, arr); // ------------------------------------------------------------------ // Output parameters // ------------------------------------------------------------------ let dict_out = {}; if (output) { - // Default output dict_out["cycle_time"] = this._cycle; dict_out["simulation_time"] = this._t; dict_out["dt"] = dtime; dict_out["t_skin_mean"] = this.t_skin_mean; - dict_out["t_skin"] = this.t_skin; - dict_out["t_core"] = this.t_core; - dict_out["w_mean"] = $average(wet, JOS3Defaults.local_bsa); - dict_out["w"] = wet; - dict_out["weight_loss_by_evap_and_res"] = $sum(wlesk) + wleres; + dict_out["t_skin"] = this.t_skin.toArray(); + dict_out["t_core"] = this.t_core.toArray(); + dict_out["w_mean"] = + math.sum(math.dotMultiply(wet, JOS3Defaults.local_bsa)) / + math.sum(JOS3Defaults.local_bsa); + dict_out["w"] = wet.toArray(); + dict_out["weight_loss_by_evap_and_res"] = math.sum(wlesk) + wleres; dict_out["cardiac_output"] = co; dict_out["q_thermogenesis_total"] = q_thermogenesis_total; dict_out["q_res"] = res_sh + res_lh; - dict_out["q_skin2env"] = shl_sk + e_sk; + dict_out["q_skin2env"] = math.add(shl_sk, e_sk).toArray(); } let detail_out = {}; @@ -671,68 +771,85 @@ export class JOS3 { detail_out["name"] = this.model_name; detail_out["height"] = this._height; detail_out["weight"] = this._weight; - detail_out["bsa"] = this._bsa; + detail_out["bsa"] = this._bsa.toArray(); detail_out["fat"] = this._fat; detail_out["sex"] = this._sex; detail_out["age"] = this._age; - detail_out["t_core_set"] = setpt_cr; - detail_out["t_skin_set"] = setpt_sk; + detail_out["t_core_set"] = setpt_cr.toArray(); + detail_out["t_skin_set"] = setpt_sk.toArray(); detail_out["t_cb"] = this.t_cb; - detail_out["t_artery"] = this.t_artery; - detail_out["t_vein"] = this.t_vein; - detail_out["t_superficial_vein"] = this.t_superficial_vein; - detail_out["t_muscle"] = this.t_muscle; - detail_out["t_fat"] = this.t_fat; - detail_out["to"] = to; - detail_out["r_t"] = r_t; - detail_out["r_et"] = r_et; - detail_out["tdb"] = this._ta.slice(); - detail_out["tr"] = this._tr.slice(); - detail_out["rh"] = this._rh.slice(); - detail_out["v"] = this._va.slice(); + detail_out["t_artery"] = this.t_artery.toArray(); + detail_out["t_vein"] = this.t_vein.toArray(); + detail_out["t_superficial_vein"] = this.t_superficial_vein.toArray(); + detail_out["t_muscle"] = this.t_muscle.toArray(); + detail_out["t_fat"] = this.t_fat.toArray(); + detail_out["to"] = to.toArray(); + detail_out["r_t"] = r_t.toArray(); + detail_out["r_et"] = r_et.toArray(); + detail_out["tdb"] = this._ta.clone().toArray(); + detail_out["tr"] = this._tr.clone().toArray(); + detail_out["rh"] = this._rh.clone().toArray(); + detail_out["v"] = this._va.clone().toArray(); detail_out["par"] = this._par; - detail_out["clo"] = this._clo.slice(); - detail_out["e_skin"] = e_sk; - detail_out["e_max"] = e_max; - detail_out["e_sweat"] = e_sweat; - detail_out["bf_core"] = bf_core; - detail_out["bf_muscle"] = bf_muscle[VINDEX["muscle"]]; - detail_out["bf_fat"] = bf_fat[VINDEX["fat"]]; - detail_out["bf_skin"] = bf_skin; + detail_out["clo"] = this._clo.clone().toArray(); + detail_out["e_skin"] = e_sk.toArray(); + detail_out["e_max"] = e_max.toArray(); + detail_out["e_sweat"] = e_sweat.toArray(); + detail_out["bf_core"] = bf_core.toArray(); + detail_out["bf_muscle"] = math + .subset(bf_muscle, math.index(VINDEX["muscle"])) + .toArray(); + detail_out["bf_fat"] = math + .subset(bf_fat, math.index(VINDEX["fat"])) + .toArray(); + detail_out["bf_skin"] = bf_skin.toArray(); detail_out["bf_ava_hand"] = bf_ava_hand; detail_out["bf_ava_foot"] = bf_ava_foot; - detail_out["q_bmr_core"] = q_bmr_local[0]; - detail_out["q_bmr_muscle"] = q_bmr_local[1][VINDEX["muscle"]]; - detail_out["q_bmr_fat"] = q_bmr_local[2][VINDEX["fat"]]; - detail_out["q_bmr_skin"] = q_bmr_local[3]; - detail_out["q_work"] = q_work; - detail_out["q_shiv"] = q_shiv; - detail_out["q_nst"] = q_nst; - detail_out["q_thermogenesis_core"] = q_thermogenesis_core; - detail_out["q_thermogenesis_muscle"] = - q_thermogenesis_muscle[VINDEX["muscle"]]; - detail_out["q_thermogenesis_fat"] = q_thermogenesis_fat[VINDEX["fat"]]; - detail_out["q_thermogenesis_skin"] = q_thermogenesis_skin; - dict_out["q_skin2env_sensible"] = shl_sk; - dict_out["q_skin2env_latent"] = e_sk; + detail_out["q_bmr_core"] = q_bmr_local[0].toArray(); + detail_out["q_bmr_muscle"] = math + .subset(q_bmr_local[1], math.index(VINDEX["muscle"])) + .toArray(); + detail_out["q_bmr_fat"] = math + .subset(q_bmr_local[2], math.index(VINDEX["fat"])) + .toArray(); + detail_out["q_bmr_skin"] = q_bmr_local[3].toArray(); + detail_out["q_work"] = q_work.toArray(); + detail_out["q_shiv"] = q_shiv.toArray(); + detail_out["q_nst"] = q_nst.toArray(); + detail_out["q_thermogenesis_core"] = q_thermogenesis_core.toArray(); + detail_out["q_thermogenesis_muscle"] = math + .subset(q_thermogenesis_muscle, math.index(VINDEX["muscle"])) + .toArray(); + detail_out["q_thermogenesis_fat"] = math + .subset(q_thermogenesis_fat, math.index(VINDEX["fat"])) + .toArray(); + detail_out["q_thermogenesis_skin"] = q_thermogenesis_skin.toArray(); + dict_out["q_skin2env_sensible"] = shl_sk.toArray(); + dict_out["q_skin2env_latent"] = e_sk.toArray(); dict_out["q_res_sensible"] = res_sh; dict_out["q_res_latent"] = res_lh; } if (this._ex_output === "all") { - dict_out = Object.assign({}, dict_out, detail_out); + dict_out = { ...dict_out, ...detail_out }; } else if (Array.isArray(this._ex_output)) { - let out_keys = Object.keys(detail_out); - this._ex_output.forEach((key) => { + const out_keys = Object.keys(detail_out); + + for (const key in this._ex_output) { if (out_keys.includes(key)) { dict_out[key] = detail_out[key]; } - }); + } } return dict_out; } + /** + * Get results as a dictionary with the model values. + * + * @returns {object} + */ dict_results() { if (!this._history || this._history.length === 0) { console.log("The model has no data."); @@ -740,103 +857,112 @@ export class JOS3 { } const checkWordContain = (word, ...args) => { - for (let arg of args) { - if (word.includes(arg)) { - return true; - } - } - return false; + return args.some((arg) => word.includes(arg)); }; - let key2keys = {}; // Map for column keys - - for (let key in this._history[0]) { - let value = this._history[0][key]; - let keys = []; - try { - let length = value.length; + let key2keys = {}; // Column keys + for (let [key, value] of Object.entries(this._history[0])) { + let keys; + if (value.length !== undefined) { if (typeof value === "string") { - keys = [key]; + keys = [key]; // string is iter. Convert to list without suffix } else if (checkWordContain(key, "sve", "sfv", "superficialvein")) { keys = VINDEX["sfvein"].map((i) => `${key}_${BODY_NAMES[i]}`); } else if (checkWordContain(key, "ms", "muscle")) { keys = VINDEX["muscle"].map((i) => `${key}_${BODY_NAMES[i]}`); } else if (checkWordContain(key, "fat")) { keys = VINDEX["fat"].map((i) => `${key}_${BODY_NAMES[i]}`); - } else if (length === 17) { + } else if (value.length === 17) { keys = BODY_NAMES.map((bn) => `${key}_${bn}`); } else { keys = Array.from( - { length: length }, + { length: value.length }, (_, i) => `${key}_${BODY_NAMES[i]}`, ); } - } catch (error) { - if (error instanceof TypeError) { - keys = [key]; - } + } else { + keys = [key]; } + key2keys[key] = keys; } - let data = []; - for (let dictout of this._history) { + let data = this._history.map((dictout) => { let row = {}; - for (let key in dictout) { + for (let [key, value] of Object.entries(dictout)) { let keys = key2keys[key]; - let values = keys.length === 1 ? [dictout[key]] : dictout[key]; - row = { - ...row, - ...Object.fromEntries(keys.map((k, index) => [k, values[index]])), - }; + let values = keys.length === 1 ? [value] : value; + keys.forEach((k, i) => { + row[k] = values[i]; + }); } - data.push(row); - } + return row; + }); - let out_dict = Object.fromEntries(Object.keys(data[0]).map((k) => [k, []])); - for (let row of data) { - for (let k in data[0]) { - out_dict[k].push(row[k]); - } - } + let outDict = {}; + Object.keys(data[0]).forEach((key) => { + outDict[key] = data.map((row) => row[key]); + }); - return out_dict; + return outDict; } /** * Set extra heat gain by tissue name. * - * @param {string} tissue - Tissue name. Can be "core", "skin", "artery"..., - * If you want to set value to head muscle and other segment's core, - * use "all_muscle". - * @param {(number|number[])} value - Heat gain [W] - * @returns {number[]} Extra heat gain of model. + * @private + * + * @param {string} tissue - Tissue name. "core", "skin", or "artery".... If you set value to head muscle and other segment's core, set "all_muscle". + * @param {number | math.MathCollection} value - Heat gain [W] + * + * @return {math.MathCollection} Extra heat gain of model. */ _set_ex_q(tissue, value) { - this.ex_q[INDEX[tissue]] = value; - return self.ex_q; + this.ex_q = math.subset(this.ex_q, math.index(INDEX[tissue]), value); + return this.ex_q; } + /** + * Dry-bulb air temperature. + * + * @return {math.Matrix} + */ get tdb() { return this._ta; } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set tdb(inp) { this._ta = _to17array(inp); } + /** + * Mean radiant temperature [°C]. + * + * @return {math.Matrix} + */ get tr() { return this._tr; } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set tr(inp) { this._tr = _to17array(inp); } + /** + * Operative temperature [°C]. + * + * @return {math.Matrix} + */ get to() { const hc = fixed_hc( conv_coef(this._posture, this._va, this._ta, this.t_skin), - self._va, + this._va, ); const hr = fixed_hr(rad_coef(this._posture)); @@ -844,31 +970,58 @@ export class JOS3 { return operative_temp(this._ta, this._tr, hc, hr); } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set to(inp) { this._ta = _to17array(inp); this._tr = _to17array(inp); } + /** + * Relative humidity [%]. + * + * @return {math.Matrix} + */ get rh() { return this._rh; } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set rh(inp) { this._rh = _to17array(inp); } + /** + * Air velocity [m/s]. + * + * @return {math.Matrix} + */ get v() { return this._va; } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set v(inp) { this._va = _to17array(inp); } + /** + * Current JOS3 posture. + * + * @return {string} + */ get posture() { return this._posture; } + /** + * @param inp {number | string} + */ set posture(inp) { if (inp === 0) { this._posture = "standing"; @@ -876,15 +1029,12 @@ export class JOS3 { this._posture = "sitting"; } else if (inp === 2) { this._posture = "lying"; - } else if (typeof inp === "string") { - const lowerInput = inp.toLowerCase(); - if (lowerInput === "standing") { - this._posture = "standing"; - } else if (["sitting", "sedentary"].includes(lowerInput)) { - this._posture = "sitting"; - } else if (["lying", "supine"].includes(lowerInput)) { - this._posture = "lying"; - } + } else if (inp.toLowerCase() === "standing") { + this._posture = "standing"; + } else if (["sitting", "sedentary"].includes(inp.toLowerCase())) { + this._posture = "sitting"; + } else if (["lying", "supine"].includes(inp.toLowerCase())) { + this._posture = "lying"; } else { this._posture = "standing"; console.log('posture must be 0="standing", 1="sitting" or 2="lying".'); @@ -892,38 +1042,72 @@ export class JOS3 { } } + /** + * Clothing insulation [clo]. + * + * @return {math.Matrix} + */ get clo() { return this._clo; } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set clo(inp) { this._clo = _to17array(inp); } + /** + * Physical activity ratio [-].This equals the ratio of metabolic rate to basal metabolic rate. par of sitting quietly is 1.2. + * + * @return {number} + */ get par() { return this._par; } + /** + * @param inp {number} + */ set par(inp) { this._par = inp; } + /** + * All segment temperatures of JOS-3. + * + * @return {math.Matrix} + */ get body_temp() { return this._bodytemp; } + /** + * @param inp {math.Matrix} + */ set body_temp(inp) { - this._bodytemp = inp.slice(); + this._bodytemp = inp.clone(); } + /** + * Body surface areas by local body segments [m2]. + * + * @return {math.Matrix} + */ get bsa() { - return this._bsa.slice(); + return this._bsa.clone(); } + /** + * Dry heat resistances between the skin and ambience areas by local body segments [(m2*K)/W]. + * + * @return {math.Matrix} + */ get r_t() { const hc = fixed_hc( conv_coef(this._posture, this._va, this._ta, this.t_skin), - self._va, + this._va, ); const hr = fixed_hr(rad_coef(this._posture)); @@ -931,23 +1115,33 @@ export class JOS3 { return dry_r(hc, hr, this._clo); } + /** + * w (Evaporative) heat resistances between the skin and ambience areas by local body segments [(m2*kPa)/W]. + * + * @return {math.Matrix} + */ get r_et() { const hc = fixed_hc( conv_coef(this._posture, this._va, this._ta, this.t_skin), - self._va, + this._va, ); - const hr = fixed_hr(rad_coef(this._posture)); - return wet_r(hc, this._clo, this._iclo); } + /** + * Skin wettedness on local body segments [-]. + * + * @return {math.Matrix} + */ get w() { - const err_cr = subtract(this.t_core, this.setpt_cr); - const err_sk = subtract(this.t_skin, this.setpt_sk); + const err_cr = math.subtract(this.t_core, this.setpt_cr); + const err_sk = math.subtract(this.t_skin, this.setpt_sk); + const { wet } = evaporation( err_cr, err_sk, + this.t_skin, this._ta, this._rh, this.r_et, @@ -958,66 +1152,138 @@ export class JOS3 { return wet; } + /** + * Mean skin wettedness of the whole body [-]. + * + * @return {number} + */ get w_mean() { - return $average(this.w, JOS3Defaults.local_bsa); + const wet = this.w; + const bsa_sum = math.sum(JOS3Defaults.local_bsa); + return math.sum(math.dotMultiply(wet, JOS3Defaults.local_bsa)) / bsa_sum; } + /** + * Mean skin temperature of the whole body [°C]. + * + * @return {number} + */ get t_skin_mean() { - return divide( - sum( - multiply( - subset(this._bodytemp, index(INDEX["skin"])), + return ( + math.sum( + math.dotMultiply( + math.subset(this._bodytemp, math.index(INDEX["skin"])), JOS3Defaults.local_bsa, ), - ), - sum(JOS3Defaults.local_bsa), + ) / math.sum(JOS3Defaults.local_bsa) ); } + /** + * Skin temperatures by the local body segments [°C]. + * + * @returns {math.Matrix} + */ get t_skin() { - return $index(this._bodytemp, INDEX["skin"]); + return math.subset(this._bodytemp, math.index(INDEX["skin"])); } + /** + * @param inp {number | number[] | object | math.Matrix} + */ set t_skin(inp) { - this._bodytemp[INDEX["skin"]] = _to17array(inp); + this._bodytemp = math.subset( + this._bodytemp, + math.index(INDEX["skin"]), + _to17array(inp), + ); } + /** + * Skin temperatures by the local body segments [°C]. + * + * @returns {math.Matrix} + */ get t_core() { - return $index(this._bodytemp, INDEX["core"]); + return math.subset(this._bodytemp, math.index(INDEX["core"])); } + /** + * Temperature at central blood pool [°C]. + * + * @return {number} + */ get t_cb() { - return this._bodytemp[0]; + return this._bodytemp.get([0]); } + /** + * Arterial temperatures by the local body segments [°C]. + * + * @return {math.Matrix} + */ get t_artery() { - return $index(this._bodytemp, INDEX["artery"]); + return math.subset(this._bodytemp, math.index(INDEX["artery"])); } + /** + * Vein temperatures by the local body segments [°C]. + * + * @return {math.Matrix} + */ get t_vein() { - return $index(this._bodytemp, INDEX["vein"]); + return math.subset(this._bodytemp, math.index(INDEX["vein"])); } + /** + * Superficial vein temperatures by the local body segments [°C]. + * + * @return {math.Matrix} + */ get t_superficial_vein() { - return $index(this._bodytemp, INDEX["sfvein"]); + return math.subset(this._bodytemp, math.index(INDEX["sfvein"])); } + /** + * Muscle temperatures of head and pelvis [°C]. + * + * @return {math.Matrix} + */ get t_muscle() { - return $index(this._bodytemp, INDEX["muscle"]); + return math.subset(this._bodytemp, math.index(INDEX["muscle"])); } + /** + * Fat temperatures of head and pelvis [°C]. + * + * @return {math.Matrix} + */ get t_fat() { - return $index(this._bodytemp, INDEX["fat"]); + return math.subset(this._bodytemp, math.index(INDEX["fat"])); } + /** + * JOS3 body names + * + * @return {string[]} + */ get body_names() { return BODY_NAMES; } + /** + * Results of the model. + * + * @return {object} + */ get results() { return this.dict_results(); } + /** + * Basal metabolic rate. + * @returns {number} + */ get bmr() { const tcr = basal_met( this._height, @@ -1026,6 +1292,7 @@ export class JOS3 { this._sex, this._bmr_equation, ); - return tcr / $sum(this.bsa); + + return tcr / math.sum(this._bsa); } } diff --git a/src/models/index.js b/src/models/index.js index 2f5f127..c922ce1 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -26,6 +26,7 @@ import { use_fans_heatwaves } from "./use_fans_heatwave.js"; import { clo_tout, clo_tout_array } from "./clo_tout.js"; import { utci, utci_array } from "./utci.js"; import { pet_steady } from "./pet_steady.js"; +import { JOS3 } from "./JOS3.js"; /** * @public @@ -70,4 +71,5 @@ export default { vertical_tmp_grad_ppd, wbgt, wc, + JOS3, }; diff --git a/src/supa.js b/src/supa.js index 7fb4bf5..031c3f0 100644 --- a/src/supa.js +++ b/src/supa.js @@ -64,7 +64,7 @@ export function $average(array, weights) { export function $lerp(length, min, max) { return Array(length) .fill(min) - .map((x, i) => x + i * ((max - min) / length)); + .map((x, i) => x + i * ((max - min) / (length - 1))); } export function $sum(array) { diff --git a/tests/index.test.js b/tests/index.test.js index 5fdabd2..d5ad1ac 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -158,6 +158,10 @@ describe("NPM Package", () => { expect(jsthermalcomfort.models).toHaveProperty("use_fans_heatwaves"); }); + it("should have models.JOS3", () => { + expect(jsthermalcomfort.models).toHaveProperty("JOS3"); + }); + it("should have utilities.body_surface_area", () => { expect(jsthermalcomfort.utilities).toHaveProperty("body_surface_area"); }); diff --git a/tests/jos3_functions/conductance.test.js b/tests/jos3_functions/conductance.test.js index e536e25..edd70cd 100644 --- a/tests/jos3_functions/conductance.test.js +++ b/tests/jos3_functions/conductance.test.js @@ -2307,7 +2307,7 @@ describe("conductance", () => { ])( "returns the correct value when height is $height, weight is $weight, bsa_equation is $bsa_equation, and fat is $fat", ({ height, weight, bsa_equation, fat, expected }) => { - const result = conductance(height, weight, bsa_equation, fat); + const result = conductance(height, weight, bsa_equation, fat).toArray(); expect(result).toHaveLength(expected.length); diff --git a/tests/jos3_functions/local_bsa.test.js b/tests/jos3_functions/local_bsa.test.js index 8914977..44df806 100644 --- a/tests/jos3_functions/local_bsa.test.js +++ b/tests/jos3_functions/local_bsa.test.js @@ -70,7 +70,7 @@ describe("local_bsa", () => { ])( "should return $expected when height is $height, weight is $weight, and bsa_equation is $bsa_equation", ({ height, weight, bsa_equation, expected }) => { - const result = local_bsa(height, weight, bsa_equation); + const result = local_bsa(height, weight, bsa_equation).toArray(); expect(result).toHaveLength(expected.length); diff --git a/tests/jos3_functions/thermoregulation/ava_blood_flow.test.js b/tests/jos3_functions/thermoregulation/ava_blood_flow.test.js index eef1caf..88325dc 100644 --- a/tests/jos3_functions/thermoregulation/ava_blood_flow.test.js +++ b/tests/jos3_functions/thermoregulation/ava_blood_flow.test.js @@ -1,34 +1,36 @@ import { ava_blood_flow } from "../../../src/jos3_functions/thermoregulation/ava_blood_flow"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("ava_blood_flow", () => { it.each([ { - age: 21, + age: 20, expected: { - bf_ava_hand: 1.7556902856019296, - bf_ava_foot: 2.2177140449708586, + bf_ava_hand: 1.7125826049243418, + bf_ava_foot: 2.163262237799169, }, }, { age: 61, expected: { - bf_ava_hand: 1.3167677142014473, - bf_ava_foot: 1.6632855337281442, + bf_ava_hand: 1.2844369536932565, + bf_ava_foot: 1.6224466783493767, }, }, ])("return the appropriate value when age is $age", ({ age, expected }) => { const result = ava_blood_flow( - $lerp(17, 1, 3), - $lerp(17, 3, 6), - 1.78, + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 3, 6)), + 1.72, 74.43, "dubois", age, 2.59, ); - expect(result).toStrictEqual(expected); + expect(result.bf_ava_hand).toBeCloseTo(expected.bf_ava_hand, 14); + expect(result.bf_ava_foot).toBeCloseTo(expected.bf_ava_foot, 14); }); }); diff --git a/tests/jos3_functions/thermoregulation/clo_area_factor.test.js b/tests/jos3_functions/thermoregulation/clo_area_factor.test.js index c5cf441..30ebc23 100644 --- a/tests/jos3_functions/thermoregulation/clo_area_factor.test.js +++ b/tests/jos3_functions/thermoregulation/clo_area_factor.test.js @@ -1,19 +1,17 @@ import { clo_area_factor } from "../../../src/jos3_functions/thermoregulation/clo_area_factor"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("clo_area_factor", () => { it("should return the correct value", () => { const expected = [ - 1, 1.011764705882353, 1.0235294117647058, 1.035294117647059, - 1.0470588235294118, 1.0588235294117647, 1.0705882352941176, - 1.0823529411764705, 1.0941176470588236, 1.1029411764705883, - 1.1088235294117648, 1.1147058823529412, 1.1205882352941177, - 1.1264705882352941, 1.1323529411764706, 1.138235294117647, - 1.1441176470588235, + 1.0, 1.0125, 1.025, 1.0375, 1.05, 1.0625, 1.075, 1.0875, 1.1, 1.10625, + 1.1125, 1.1187500000000001, 1.125, 1.13125, 1.1375, 1.14375, + 1.1500000000000001, ]; - const result = clo_area_factor($lerp(17, 0, 1)); - expect(result).toStrictEqual(expected); + const result = clo_area_factor(math.matrix($lerp(17, 0, 1))); + expect(result.toArray()).toStrictEqual(expected); }); }); diff --git a/tests/jos3_functions/thermoregulation/conv_coef.test.js b/tests/jos3_functions/thermoregulation/conv_coef.test.js index 10d047e..ad52827 100644 --- a/tests/jos3_functions/thermoregulation/conv_coef.test.js +++ b/tests/jos3_functions/thermoregulation/conv_coef.test.js @@ -85,7 +85,7 @@ describe("conv_coef", () => { "returns correct values when posture is $posture, v is $v, tdb is $tdb, t_skin is $t_skin", ({ posture, v, tdb, t_skin, expected }) => { const result = conv_coef(posture, v, tdb, t_skin); - expect(result).toStrictEqual(expected); + expect(result.toArray()).toStrictEqual(expected); }, ); }); diff --git a/tests/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.test.js b/tests/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.test.js index a2170a7..aabcb36 100644 --- a/tests/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.test.js +++ b/tests/jos3_functions/thermoregulation/cr_ms_fat_blood_flow.test.js @@ -1,38 +1,58 @@ import { cr_ms_fat_blood_flow } from "../../../src/jos3_functions/thermoregulation/cr_ms_fat_blood_flow"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("cr_ms_fat_blood_flow", () => { - it("should return the correct values", () => { - let expected = [ - [ - 35.30423941882339, 47.12786946186046, 122.12401640361986, - 121.48109829455413, 18.714221377553372, 37.31728061133258, - 37.35839403394131, 37.544726449365264, 40.04855368806111, - 40.08966711066985, 40.2759995260938, 42.37721962608814, - 42.04376819826313, 42.870065692369344, 45.10849270281669, - 44.77504127499168, 45.601338769097886, + const result = cr_ms_fat_blood_flow( + math.matrix($lerp(17, 12, 18)), + math.matrix($lerp(17, 24, 36)), + 1.72, + 74.43, + "dubois", + 20, + 2.59, + ); + + let expected = [ + { + property: "bf_core", + expected: [ + 35.30423941882337, 47.1847709842923, 122.23781944848352, + 121.65180286184963, 18.714221377553365, 37.601788223491795, + 37.69980316853238, 37.943037106388175, 40.50376586751587, + 40.60178081255645, 40.84501475041225, 43.003136372838426, + 42.726586467445266, 43.60978548398332, 45.90511401686251, + 45.62856411146934, 46.511763128007395, ], - [ - 31.637458224302655, 0, 0, 0, 47.229176503190565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + }, + { + property: "bf_muscle", + expected: [ + 31.637458224302655, 0.0, 0.0, 0.0, 47.45678259291794, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ], - [ - 0.26540022824850923, 0, 0, 0, 2.2223513452205355, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + }, + { + property: "bf_fat", + expected: [ + 0.2654002282485091, 0.0, 0.0, 0.0, 2.2223513452205346, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ], - ]; + }, + ]; + + it.each(expected)( + "should return the correct value for $property", + ({ property, expected }) => { + let actual = result[property]; + let actualLength = actual.size()[0]; - const result = cr_ms_fat_blood_flow( - $lerp(17, 12, 18), - $lerp(17, 24, 36), - 1.72, - 74.43, - "dubois", - 20, - 2.59, - ); + expect(actualLength).toBe(expected.length); - expect(result).toStrictEqual(expected); - }); + for (let i = 0; i < actualLength; i++) { + expect(actual.get([i])).toBeCloseTo(expected[i], 13); + } + }, + ); }); diff --git a/tests/jos3_functions/thermoregulation/dry_r.test.js b/tests/jos3_functions/thermoregulation/dry_r.test.js index 0a2804f..511ae8a 100644 --- a/tests/jos3_functions/thermoregulation/dry_r.test.js +++ b/tests/jos3_functions/thermoregulation/dry_r.test.js @@ -1,29 +1,35 @@ import { dry_r } from "../../../src/jos3_functions/thermoregulation/dry_r"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("dry_r", () => { it("should throw an error if hc or hr are negative", () => { - expect(() => dry_r([-1], [], [])).toThrow( - "Input parameters hc and hr must be non-negative.", - ); + expect(() => + dry_r(math.matrix([-1]), math.matrix([]), math.matrix([])), + ).toThrow("Input parameters hc and hr must be non-negative."); - expect(() => dry_r([], [-1], [])).toThrow( - "Input parameters hc and hr must be non-negative.", - ); + expect(() => + dry_r(math.matrix([]), math.matrix([-1]), math.matrix([])), + ).toThrow("Input parameters hc and hr must be non-negative."); }); it("should return the correct value", () => { const expected = [ - 0.5, 0.4512841097271222, 0.413692327505715, 0.3843193443385259, - 0.3611896893588896, 0.34291333817477604, 0.3284838285446805, - 0.3171545252041911, 0.30835987963122685, 0.30224929971988795, - 0.29835978121982176, 0.2958153949625314, 0.2944191265905248, - 0.2940106188811064, 0.2944580256344962, 0.2956519454227345, - 0.29750084095334794, + 0.5, 0.44864497599451303, 0.40961890243902443, 0.3795553806133625, + 0.35621031746031745, 0.3380302601809955, 0.32390573089700997, + 0.31302322796934867, 0.30477272727272725, 0.29988274759056166, + 0.29662531210986265, 0.29474244707438985, 0.2940277777777778, + 0.2943142429623783, 0.29546515984015986, 0.29736761998099315, + 0.29992753623188406, ]; - const result = dry_r($lerp(17, 1, 3), $lerp(17, 1, 3), $lerp(17, 0, 1)); - expect(result).toStrictEqual(expected); + const result = dry_r( + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 0, 1)), + ); + + expect(result.toArray()).toStrictEqual(expected); }); }); diff --git a/tests/jos3_functions/thermoregulation/error_signals.test.js b/tests/jos3_functions/thermoregulation/error_signals.test.js index 6d51998..d2d7fe6 100644 --- a/tests/jos3_functions/thermoregulation/error_signals.test.js +++ b/tests/jos3_functions/thermoregulation/error_signals.test.js @@ -1,18 +1,19 @@ import { error_signals } from "../../../src/jos3_functions/thermoregulation/error_signals"; import { describe, it, expect } from "@jest/globals"; -import { $array, $lerp } from "../../../src/supa"; +import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("error_signals", () => { it("should use appropriate defaults", () => { const withDefaults = error_signals(); - const withoutDefaults = error_signals($array(17, 0)); + const withoutDefaults = error_signals(math.zeros(17)); expect(withDefaults).toStrictEqual(withoutDefaults); }); it("should return the correct values", () => { - const expected = { wrms: 0.5861764705882355, clds: 2.0505294117647055 }; - const result = error_signals($lerp(17, -5, 5)); + const expected = { wrms: 0.71275, clds: 1.9560625 }; + const result = error_signals(math.matrix($lerp(17, -5, 5))); expect(result).toStrictEqual(expected); }); diff --git a/tests/jos3_functions/thermoregulation/evaporation.test.js b/tests/jos3_functions/thermoregulation/evaporation.test.js index 405be28..90505bd 100644 --- a/tests/jos3_functions/thermoregulation/evaporation.test.js +++ b/tests/jos3_functions/thermoregulation/evaporation.test.js @@ -1,66 +1,73 @@ -import { evaporation } from "../../../src/jos3_functions/thermoregulation/evaporation"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import { evaporation } from "../../../src/jos3_functions/thermoregulation/evaporation.js"; +import * as math from "mathjs"; describe("evaporation", () => { it.each([ { age: 20, expected: { - wet: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + wet: [ + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, + ], e_sk: [ - 0.004420996652136314, 0.0011646364611922826, 0.007023044521841013, - 0.006457100621978046, 0.008858431024693742, 0.0038460633174753314, - 0.00252286197266619, 0.0020015067890885013, 0.0038416527864739195, - 0.0025204162156181598, 0.001999912215712484, 0.008358342628176788, - 0.0044786588949412105, 0.0022392191316776616, 0.008357096152882038, - 0.004478669832318175, 0.002239555218630907, + 0.004420996652136314, 0.00116458299811076, 0.007022461588771268, + 0.0064563796892369504, 0.008857260040612642, 0.003845505830562024, + 0.0025224829099062224, 0.0020012097707047096, 0.003841116172654547, + 0.0025201026973817723, 0.001999706633456237, 0.008357714424343484, + 0.004478471977310349, 0.002239212930092807, 0.008357442984739507, + 0.004479076716683872, 0.002239880073760617, ], e_max: [ - 0.004420996652136314, 0.0011646364611922826, 0.007023044521841013, - 0.006457100621978046, 0.008858431024693742, 0.0038460633174753314, - 0.00252286197266619, 0.0020015067890885013, 0.0038416527864739195, - 0.0025204162156181598, 0.001999912215712484, 0.008358342628176788, - 0.0044786588949412105, 0.0022392191316776616, 0.008357096152882038, - 0.004478669832318175, 0.002239555218630907, + 0.004420996652136314, 0.00116458299811076, 0.007022461588771268, + 0.0064563796892369504, 0.008857260040612642, 0.003845505830562024, + 0.0025224829099062224, 0.0020012097707047096, 0.003841116172654547, + 0.0025201026973817723, 0.001999706633456237, 0.008357714424343484, + 0.004478471977310349, 0.002239212930092807, 0.008357442984739507, + 0.004479076716683872, 0.002239880073760617, ], e_sweat: [ - 0.004420996652136314, 0.0011646364611922826, 0.007023044521841013, - 0.006457100621978046, 0.008858431024693742, 0.0038460633174753314, - 0.00252286197266619, 0.0020015067890885013, 0.0038416527864739195, - 0.0025204162156181598, 0.001999912215712484, 0.008358342628176788, - 0.0044786588949412105, 0.0022392191316776616, 0.008357096152882038, - 0.004478669832318175, 0.002239555218630907, + 0.004420996652136314, 0.00116458299811076, 0.007022461588771268, + 0.0064563796892369504, 0.008857260040612642, 0.003845505830562024, + 0.0025224829099062224, 0.0020012097707047096, 0.003841116172654547, + 0.0025201026973817723, 0.001999706633456237, 0.008357714424343484, + 0.004478471977310349, 0.002239212930092807, 0.008357442984739507, + 0.004479076716683872, 0.002239880073760617, ], }, }, { age: 61, expected: { - wet: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + wet: [ + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, + ], e_sk: [ - 0.004420996652136314, 0.0011646364611922826, 0.007023044521841013, - 0.006457100621978046, 0.008858431024693742, 0.0038460633174753314, - 0.00252286197266619, 0.0020015067890885013, 0.0038416527864739195, - 0.0025204162156181598, 0.001999912215712484, 0.008358342628176788, - 0.0044786588949412105, 0.0022392191316776616, 0.008357096152882038, - 0.004478669832318175, 0.002239555218630907, + 0.004420996652136314, 0.00116458299811076, 0.007022461588771268, + 0.0064563796892369504, 0.008857260040612642, 0.003845505830562024, + 0.0025224829099062224, 0.0020012097707047096, 0.003841116172654547, + 0.0025201026973817723, 0.001999706633456237, 0.008357714424343484, + 0.004478471977310349, 0.002239212930092807, 0.008357442984739507, + 0.004479076716683872, 0.002239880073760617, ], e_max: [ - 0.004420996652136314, 0.0011646364611922826, 0.007023044521841013, - 0.006457100621978046, 0.008858431024693742, 0.0038460633174753314, - 0.00252286197266619, 0.0020015067890885013, 0.0038416527864739195, - 0.0025204162156181598, 0.001999912215712484, 0.008358342628176788, - 0.0044786588949412105, 0.0022392191316776616, 0.008357096152882038, - 0.004478669832318175, 0.002239555218630907, + 0.004420996652136314, 0.00116458299811076, 0.007022461588771268, + 0.0064563796892369504, 0.008857260040612642, 0.003845505830562024, + 0.0025224829099062224, 0.0020012097707047096, 0.003841116172654547, + 0.0025201026973817723, 0.001999706633456237, 0.008357714424343484, + 0.004478471977310349, 0.002239212930092807, 0.008357442984739507, + 0.004479076716683872, 0.002239880073760617, ], e_sweat: [ - 0.004420996652136314, 0.0011646364611922826, 0.007023044521841013, - 0.006457100621978046, 0.008858431024693742, 0.0038460633174753314, - 0.00252286197266619, 0.0020015067890885013, 0.0038416527864739195, - 0.0025204162156181598, 0.001999912215712484, 0.008358342628176788, - 0.0044786588949412105, 0.0022392191316776616, 0.008357096152882038, - 0.004478669832318175, 0.002239555218630907, + 0.004420996652136314, 0.00116458299811076, 0.007022461588771268, + 0.0064563796892369504, 0.008857260040612642, 0.003845505830562024, + 0.0025224829099062224, 0.0020012097707047096, 0.003841116172654547, + 0.0025201026973817723, 0.001999706633456237, 0.008357714424343484, + 0.004478471977310349, 0.002239212930092807, 0.008357442984739507, + 0.004479076716683872, 0.002239880073760617, ], }, }, @@ -68,19 +75,24 @@ describe("evaporation", () => { "should return the correct value when age is $age", ({ age, expected }) => { const result = evaporation( - $lerp(17, 1, 3), - $lerp(17, 3, 6), - $lerp(17, 6, 9), - $lerp(17, 12, 15), - $lerp(17, 15, 18), - $lerp(17, 18, 21), + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 3, 6)), + math.matrix($lerp(17, 6, 9)), + math.matrix($lerp(17, 12, 15)), + math.matrix($lerp(17, 15, 18)), + math.matrix($lerp(17, 18, 21)), 1.72, 74.43, "dubois", age, ); - expect(result).toStrictEqual(expected); + expect({ + wet: result.wet.toArray(), + e_sk: result.e_sk.toArray(), + e_max: result.e_max.toArray(), + e_sweat: result.e_sweat.toArray(), + }).toStrictEqual(expected); }, ); }); diff --git a/tests/jos3_functions/thermoregulation/fixed_hc.test.js b/tests/jos3_functions/thermoregulation/fixed_hc.test.js index 7eff9b6..ef458c7 100644 --- a/tests/jos3_functions/thermoregulation/fixed_hc.test.js +++ b/tests/jos3_functions/thermoregulation/fixed_hc.test.js @@ -2,19 +2,19 @@ import JOS3Defaults from "../../../src/jos3_functions/JOS3Defaults"; import { conv_coef } from "../../../src/jos3_functions/thermoregulation/conv_coef"; import { fixed_hc } from "../../../src/jos3_functions/thermoregulation/fixed_hc"; import { describe, it, expect } from "@jest/globals"; -import { $array } from "../../../src/supa"; +import * as math from "mathjs"; describe("fixed_hc", () => { it("should return the correct value given appropriate details", () => { const result = fixed_hc( conv_coef( JOS3Defaults.posture, - $array(17, JOS3Defaults.air_speed), - $array(17, JOS3Defaults.dry_bulb_air_temperature), - $array(17, JOS3Defaults.other_body_temperature), + math.dotMultiply(math.ones(17), JOS3Defaults.air_speed), + math.dotMultiply(math.ones(17), JOS3Defaults.dry_bulb_air_temperature), + math.dotMultiply(math.ones(17), JOS3Defaults.other_body_temperature), ), - $array(17, JOS3Defaults.air_speed), - ); + math.dotMultiply(math.ones(17), JOS3Defaults.air_speed), + ).toArray(); const expected = [ 4.479928052547337, 4.479928052547337, 2.969952302693212, diff --git a/tests/jos3_functions/thermoregulation/fixed_hr.test.js b/tests/jos3_functions/thermoregulation/fixed_hr.test.js index f1eceb3..6f3b00c 100644 --- a/tests/jos3_functions/thermoregulation/fixed_hr.test.js +++ b/tests/jos3_functions/thermoregulation/fixed_hr.test.js @@ -14,6 +14,6 @@ describe("fixed_hr", () => { ]; const result = fixed_hr(rad_coef(JOS3Defaults.posture)); - expect(result).toStrictEqual(expected); + expect(result.toArray()).toStrictEqual(expected); }); }); diff --git a/tests/jos3_functions/thermoregulation/local_mbase.test.js b/tests/jos3_functions/thermoregulation/local_mbase.test.js index 46bf95f..0a53a87 100644 --- a/tests/jos3_functions/thermoregulation/local_mbase.test.js +++ b/tests/jos3_functions/thermoregulation/local_mbase.test.js @@ -246,7 +246,7 @@ describe("local_mbase", () => { "returns correct value when sex is $sex and bmr_equation is $bmr_equation", ({ sex, bmr_equation, expected }) => { const result = local_mbase(1.72, 74.43, 20, sex, bmr_equation); - expect(result).toStrictEqual(expected); + expect(result.map((r) => r.toArray())).toStrictEqual(expected); }, ); }); diff --git a/tests/jos3_functions/thermoregulation/local_q_work.test.js b/tests/jos3_functions/thermoregulation/local_q_work.test.js index 20df62c..18b97d9 100644 --- a/tests/jos3_functions/thermoregulation/local_q_work.test.js +++ b/tests/jos3_functions/thermoregulation/local_q_work.test.js @@ -9,6 +9,6 @@ describe("local_q_work", () => { ]; const result = local_q_work(5, 6); - expect(result).toStrictEqual(expected); + expect(result.toArray()).toStrictEqual(expected); }); }); diff --git a/tests/jos3_functions/thermoregulation/nonshivering.test.js b/tests/jos3_functions/thermoregulation/nonshivering.test.js index 537eea0..2f9935d 100644 --- a/tests/jos3_functions/thermoregulation/nonshivering.test.js +++ b/tests/jos3_functions/thermoregulation/nonshivering.test.js @@ -1,59 +1,228 @@ import { nonshivering } from "../../../src/jos3_functions/thermoregulation/nonshivering"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("nonshivering", () => { it.each([ { - age: 30, + age: 21, + cold_acclimation: true, + batpositive: true, expected: [ - 0, 1.908924555286287, 0, 1.908924555286287, 1.908924555286287, - 2.160098838876588, 0, 0, 2.160098838876588, 0, 0, 0, 0, 0, 0, 0, 0, + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, ], }, { - age: 40, + age: 21, + cold_acclimation: false, + batpositive: true, expected: [ - 0, 1.898387115061335, 0, 1.898387115061335, 1.898387115061335, - 2.148174893358879, 0, 0, 2.148174893358879, 0, 0, 0, 0, 0, 0, 0, 0, + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, ], }, { - age: 50, + age: 21, + cold_acclimation: true, + batpositive: false, expected: [ - 0, 1.898387115061335, 0, 1.898387115061335, 1.898387115061335, - 2.148174893358879, 0, 0, 2.148174893358879, 0, 0, 0, 0, 0, 0, 0, 0, + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, ], }, { - age: 60, + age: 21, + cold_acclimation: false, + batpositive: false, expected: [ - 0, 1.898387115061335, 0, 1.898387115061335, 1.898387115061335, - 2.148174893358879, 0, 0, 2.148174893358879, 0, 0, 0, 0, 0, 0, 0, 0, + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, ], }, { - age: 70, + age: 31, + cold_acclimation: true, + batpositive: true, expected: [ - 0, 1.898387115061335, 0, 1.898387115061335, 1.898387115061335, - 2.148174893358879, 0, 0, 2.148174893358879, 0, 0, 0, 0, 0, 0, 0, 0, + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, ], }, - ])("returns correct result when age is $age", ({ age, expected }) => { - const result = nonshivering( - $lerp(17, -5, -1), - 1.72, - 74.43, - "dubois", - age, - false, - true, - ); + { + age: 31, + cold_acclimation: false, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 31, + cold_acclimation: true, + batpositive: false, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 31, + cold_acclimation: false, + batpositive: false, + expected: [ + 0.0, 1.7119191341440272, 0.0, 1.7119191341440272, 1.7119191341440272, + 1.937171651794557, 0.0, 0.0, 1.937171651794557, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 41, + cold_acclimation: true, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 41, + cold_acclimation: false, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 41, + cold_acclimation: true, + batpositive: false, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 41, + cold_acclimation: false, + batpositive: false, + expected: [ + 0.0, 1.6293963413904133, 0.0, 1.6293963413904133, 1.6293963413904133, + 1.8437905968365205, 0.0, 0.0, 1.8437905968365205, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + ], + }, + { + age: 51, + cold_acclimation: true, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 51, + cold_acclimation: false, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 51, + cold_acclimation: true, + batpositive: false, + expected: [ + 0.0, 1.7242978894934908, 0.0, 1.7242978894934908, 1.7242978894934908, + 1.9511791907426344, 0.0, 0.0, 1.9511791907426344, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + ], + }, + { + age: 51, + cold_acclimation: false, + batpositive: false, + expected: [ + 0.0, 1.5763060571132577, 0.0, 1.5763060571132577, 1.5763060571132577, + 1.7837147488386864, 0.0, 0.0, 1.7837147488386864, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + ], + }, + { + age: 61, + cold_acclimation: true, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 61, + cold_acclimation: false, + batpositive: true, + expected: [ + 0.0, 1.861862716480607, 0.0, 1.861862716480607, 1.861862716480607, + 2.106844652859634, 0.0, 0.0, 2.106844652859634, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, + ], + }, + { + age: 61, + cold_acclimation: true, + batpositive: false, + expected: [ + 0.0, 1.5302944774063898, 0.0, 1.5302944774063898, 1.5302944774063898, + 1.7316490139072307, 0.0, 0.0, 1.7316490139072307, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + ], + }, + { + age: 61, + cold_acclimation: false, + batpositive: false, + expected: [ + 0.0, 1.5302944774063898, 0.0, 1.5302944774063898, 1.5302944774063898, + 1.7316490139072307, 0.0, 0.0, 1.7316490139072307, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + ], + }, + ])( + "returns correct result when age is $age, cold_acclimation is $cold_acclimation, and batpositive is $batpositive", + ({ age, cold_acclimation, batpositive, expected }) => { + const result = nonshivering( + math.matrix($lerp(17, -5, -1)), + 1.72, + 74.43, + "dubois", + age, + cold_acclimation, + batpositive, + ).toArray(); - expect(result).toHaveLength(expected.length); + expect(result).toHaveLength(expected.length); - for (let i = 0; i < expected.length; i++) { - expect(result[i]).toBeCloseTo(expected[i]); - } - }); + for (let i = 0; i < expected.length; i++) { + expect(result[i]).toBeCloseTo(expected[i], 14); + } + }, + ); }); diff --git a/tests/jos3_functions/thermoregulation/operative_temp.test.js b/tests/jos3_functions/thermoregulation/operative_temp.test.js index 01d4ada..656d6a1 100644 --- a/tests/jos3_functions/thermoregulation/operative_temp.test.js +++ b/tests/jos3_functions/thermoregulation/operative_temp.test.js @@ -1,25 +1,25 @@ import { operative_temp } from "../../../src/jos3_functions/thermoregulation/operative_temp"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("operative_temp", () => { it("should return the correct value", () => { const result = operative_temp( - $lerp(17, 28, 32), - $lerp(17, 20, 28), - $lerp(17, 1, 3), - $lerp(17, 0, 1), + math.matrix($lerp(17, 28, 32)), + math.matrix($lerp(17, 20, 28)), + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 0, 1)), ); const expected = [ - 28, 27.847058823529412, 27.815856777493604, 27.86425339366516, - 27.967545638945232, 28.110294117647058, 28.28235294117647, - 28.476780185758514, 28.688665710186516, 28.914438502673796, - 29.151439299123908, 29.397647058823534, 29.65149833518313, - 29.91176470588235, 30.177467597208373, 30.447817836812142, - 30.722171945701362, + 28.0, 27.842105263157894, 27.818181818181817, 27.88, 28.0, + 28.161290322580644, 28.352941176470587, 28.56756756756757, 28.8, + 29.046511627906977, 29.304347826086957, 29.571428571428573, + 29.846153846153847, 30.12727272727273, 30.413793103448278, + 30.704918032786885, 31.0, ]; - expect(result).toStrictEqual(expected); + expect(result.toArray()).toStrictEqual(expected); }); }); diff --git a/tests/jos3_functions/thermoregulation/rad_coef.test.js b/tests/jos3_functions/thermoregulation/rad_coef.test.js index 4eb2411..e4a030e 100644 --- a/tests/jos3_functions/thermoregulation/rad_coef.test.js +++ b/tests/jos3_functions/thermoregulation/rad_coef.test.js @@ -55,7 +55,7 @@ describe("rad_coef", () => { "returns correct value when posture is $posture", ({ posture, expected }) => { const result = rad_coef(posture); - expect(result).toStrictEqual(expected); + expect(result.toArray()).toStrictEqual(expected); }, ); }); diff --git a/tests/jos3_functions/thermoregulation/resp_heat_loss.test.js b/tests/jos3_functions/thermoregulation/resp_heat_loss.test.js index 793e12d..f9fa93a 100644 --- a/tests/jos3_functions/thermoregulation/resp_heat_loss.test.js +++ b/tests/jos3_functions/thermoregulation/resp_heat_loss.test.js @@ -3,7 +3,7 @@ import { describe, it, expect } from "@jest/globals"; describe("resp_heat_loss", () => { it("should return the correct values", () => { - const expected = [0.1456, -29.803748000000002]; + const expected = { res_sh: 0.1456, res_lh: -29.803748000000002 }; const result = resp_heat_loss(32, 39, 52); expect(result).toStrictEqual(expected); }); diff --git a/tests/jos3_functions/thermoregulation/shivering.test.js b/tests/jos3_functions/thermoregulation/shivering.test.js index 02c70d1..86e0d09 100644 --- a/tests/jos3_functions/thermoregulation/shivering.test.js +++ b/tests/jos3_functions/thermoregulation/shivering.test.js @@ -3,8 +3,9 @@ import { PRE_SHIV, set_pre_shiv, } from "../../../src/jos3_functions/thermoregulation/shivering"; -import { describe, it, expect } from "@jest/globals"; +import { describe, it, expect, beforeEach } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("shivering", () => { beforeEach(() => { @@ -13,87 +14,1490 @@ describe("shivering", () => { it.each([ { - age: 20, - bsa_equation: "dubois", + age: 21, sex: "male", - expectedShiv: 436.81635529411756, - options: {}, + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, expected: [ - 1.4815766291857488e1, 1.9055085850294589e1, 1.1972362884930503e2, - 1.0533616494582573e2, 1.6937174244089826e2, 1.0620151058765104, - 5.9874925722255923e-1, 8.7408650689424716e-2, 1.0620151058765104, - 5.9874925722255923e-1, 8.7408650689424716e-2, 1.7044686884437816, - 7.6482569353246621e-1, 1.5296513870649325e-1, 1.7044686884437816, - 7.6482569353246621e-1, 1.5296513870649325e-1, + 0.015669935303199344, 0.020153663103819806, 0.12662601996927517, + 0.11140907984593233, 0.17913648163427354, 0.0011232431500523424, + 0.0006332687718402095, 9.244799588908168e-5, 0.0011232431500523424, + 0.0006332687718402095, 9.244799588908168e-5, 0.0018027359198370925, + 0.0008089199640294646, 0.00016178399280589292, 0.0018027359198370925, + 0.0008089199640294646, 0.00016178399280589292, ], + preShiv: 0.462, }, { - age: 20, - bsa_equation: "takahira", + age: 31, sex: "male", - expectedShiv: 436.81635529411756, - options: {}, + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, expected: [ - 1.4977126122758907e1, 1.9262616488268094e1, 1.2102754955954499e2, - 1.0648339050464165e2, 1.7121638518035363e2, 1.0735816070296207, - 6.0527028873686439e-1, 8.8360626092972919e-2, 1.0735816070296207, - 6.0527028873686439e-1, 8.8360626092972919e-2, 1.7230322088129719, - 7.7315547831351306e-1, 1.5463109566270258e-1, 1.7230322088129719, - 7.7315547831351306e-1, 1.5463109566270258e-1, + 0.015280380711561809, 0.019652643039058844, 0.123478097112839, + 0.10863945012096246, 0.1746831487008455, 0.001095319325342041, + 0.0006175257101722618, 9.01497387112791e-5, 0.001095319325342041, + 0.0006175257101722618, 9.01497387112791e-5, 0.0017579199048699424, + 0.0007888102137236921, 0.00015776204274473842, 0.0017579199048699424, + 0.0007888102137236921, 0.00015776204274473842, ], + preShiv: 0.462, }, { - age: 20, - bsa_equation: "fujimoto", + age: 41, sex: "male", - expectedShiv: 436.81635529411756, - options: {}, + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, expected: [ - 1.4486144633705385e1, 1.8631147670488343e1, 1.1706001359755909e2, - 1.02992642466539e2, 1.6560355431699659e2, 1.0383873586992356, - 5.8542826395800518e-1, 8.5463980139854789e-2, 1.0383873586992356, - 5.8542826395800518e-1, 8.5463980139854789e-2, 1.6665476127271681, - 7.4780982622372927e-1, 1.4956196524474585e-1, 1.6665476127271681, - 7.4780982622372927e-1, 1.4956196524474585e-1, + 0.014890826119924271, 0.019151622974297886, 0.1203301742564028, + 0.10586982039599258, 0.17022981576741747, 0.00106739550063174, + 0.0006017826485043143, 8.785148153347654e-5, 0.00106739550063174, + 0.0006017826485043143, 8.785148153347654e-5, 0.0017131038899027922, + 0.0007687004634179197, 0.00015374009268358393, 0.0017131038899027922, + 0.0007687004634179197, 0.00015374009268358393, ], + preShiv: 0.462, }, { - age: 20, - bsa_equation: "kurazumi", + age: 51, sex: "male", - expectedShiv: 436.81635529411756, - options: {}, + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, expected: [ - 1.4676153602852603e1, 1.8875524987739631e1, 1.1859544300783017e2, - 1.0434355579231666e2, 1.6777570994836279e2, 1.0520074706469564, - 5.9310709250466265e-1, 8.6584977007979971e-2, 1.0520074706469564, - 5.9310709250466265e-1, 8.6584977007979971e-2, 1.6884070516556091, - 7.5761854881982471e-1, 1.5152370976396493e-1, 1.6884070516556091, - 7.5761854881982471e-1, 1.5152370976396493e-1, + 0.014544520549723567, 0.018706227019703467, 0.11753173921508184, + 0.10340767973139747, 0.16627089952330001, 0.0010425718270155831, + 0.0005877874086466456, 8.580838082432783e-5, 0.0010425718270155831, + 0.0005877874086466456, 8.580838082432783e-5, 0.0016732634260743925, + 0.0007508233322128684, 0.0001501646664425737, 0.0016732634260743925, + 0.0007508233322128684, 0.0001501646664425737, ], + preShiv: 0.462, + }, + { + age: 61, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014111560237296168, 0.018149381308144925, 0.11403306228333074, + 0.10032944685525436, 0.16132135853574503, 0.0010115366187796369, + 0.0005702901924807006, 8.32540426979125e-5, 0.0010115366187796369, + 0.0005702901924807006, 8.32540426979125e-5, 0.0016234538326092935, + 0.0007284728736067343, 0.00014569457472134688, 0.0016234538326092935, + 0.0007284728736067343, 0.00014569457472134688, + ], + preShiv: 0.462, + }, + { + age: 71, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [ + 0.013505603839121449, 0.017370039155920215, 0.10913643409111888, + 0.09602125773761215, 0.15439415079094768, 0.0009681008061671127, + 0.0005458016890736397, 7.967907869688171e-5, 0.0009681008061671127, + 0.0005458016890736397, 7.967907869688171e-5, 0.0015537420345891932, + 0.000697191938597715, 0.000139438387719543, 0.0015537420345891932, + 0.000697191938597715, 0.000139438387719543, + ], + preShiv: 0.462, + }, + { + age: 81, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [ + 0.012942896462383561, 0.016646321113862043, 0.1045892937140222, + 0.09202055768034471, 0.14796135973546093, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, + ], + preShiv: 0.462, + }, + { + age: 91, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [ + 0.012942896462383561, 0.016646321113862043, 0.1045892937140222, + 0.09202055768034471, 0.14796135973546093, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, + ], + preShiv: 0.462, + }, + { + age: 21, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 31, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 41, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 51, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 61, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 71, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 81, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 91, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": true, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 21, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 14.4505044992533, 18.585309621458524, 116.77201187390706, + 102.73925057256729, 165.1961213463311, 1.035832623397803, + 0.5839879399403252, 0.08525371385990149, 1.035832623397803, + 0.5839879399403252, 0.08525371385990149, 1.6624474202680788, + 0.745969996274138, 0.1491939992548276, 1.6624474202680788, + 0.745969996274138, 0.1491939992548276, + ], + preShiv: 426.047265, + }, + { + age: 31, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 14.091264957401865, 18.123278824269065, 113.86905965872175, + 100.18515280333327, 161.08934576966132, 1.0100818243801337, + 0.5694699997534086, 0.08313430653334433, 1.0100818243801337, + 0.5694699997534086, 0.08313430653334433, 1.6211189774002144, + 0.7274251821667629, 0.1454850364333526, 1.6211189774002144, + 0.7274251821667629, 0.1454850364333526, + ], + preShiv: 426.047265, + }, + { + age: 41, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 13.732025415550426, 17.66124802707961, 110.9661074435364, + 97.63105503409923, 156.98257019299152, 0.9843310253624643, + 0.5549520595664923, 0.0810148992067872, 0.9843310253624643, + 0.5549520595664923, 0.0810148992067872, 1.57979053453235, + 0.7088803680593878, 0.14177607361187758, 1.57979053453235, + 0.7088803680593878, 0.14177607361187758, + ], + preShiv: 426.047265, + }, + { + age: 51, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 13.41266926611693, 17.250512684445372, 108.38544598112307, + 95.3605175964455, 153.3317359112376, 0.9614391243853728, + 0.542045926093811, 0.07913079213048337, 0.9614391243853728, + 0.542045926093811, 0.07913079213048337, 1.5430504465444255, + 0.6923944311417294, 0.1384788862283459, 1.5430504465444255, + 0.6923944311417294, 0.1384788862283459, + ], + preShiv: 426.047265, + }, + { + age: 61, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 13.013401826802559, 16.737000579604473, 105.159035293047, + 92.52183210312546, 148.76736707843847, 0.9328190690008915, + 0.5259103393132598, 0.07677523201653429, 0.9328190690008915, + 0.5259103393132598, 0.07677523201653429, 1.4971170243224183, + 0.6717832801446749, 0.13435665602893498, 1.4971170243224183, + 0.6717832801446749, 0.13435665602893498, + ], + preShiv: 426.047265, + }, + { + age: 71, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 12.454600817816434, 16.018306656542673, 100.64346159388302, + 88.54890528348429, 142.37923306597585, 0.8927634214540985, + 0.5033275256757674, 0.07347847090157189, 0.8927634214540985, + 0.5033275256757674, 0.07347847090157189, 1.4328301825806518, + 0.6429366203887541, 0.1285873240777508, 1.4328301825806518, + 0.6429366203887541, 0.1285873240777508, + ], + preShiv: 426.047265, + }, + { + age: 81, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 11.935683201248247, 15.350908188036097, 96.45017864749101, + 84.85953879542339, 136.4470403484291, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, + ], + preShiv: 426.047265, + }, + { + age: 91, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [ + 11.935683201248247, 15.350908188036097, 96.45017864749101, + 84.85953879542339, 136.4470403484291, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, + ], + preShiv: 426.047265, + }, + { + age: 21, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 31, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 41, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 51, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 61, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 71, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 81, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 91, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": false, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 21, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.6280452263064251, 2.093887075721538, 13.15595012667794, + 11.574969334642319, 18.61158250745699, 0.11670058701842517, + 0.06579415811326851, 0.009604986585878616, 0.11670058701842517, + 0.06579415811326851, 0.009604986585878616, 0.18729723842463297, + 0.08404363262643788, 0.016808726525287577, 0.18729723842463297, + 0.08404363262643788, 0.016808726525287577, + ], + preShiv: 48, + }, + { + age: 31, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5875720219804474, 2.0418330430191007, 12.828893206528726, + 11.287215596983112, 18.148898566321613, 0.11379941042514713, + 0.06415851534257265, 0.009366206619353673, 0.11379941042514713, + 0.06415851534257265, 0.009366206619353673, 0.1826410290773966, + 0.08195430791934463, 0.016390861583868925, 0.1826410290773966, + 0.08195430791934463, 0.016390861583868925, + ], + preShiv: 48, + }, + { + age: 41, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5470988176544695, 1.9897790103166633, 12.501836286379511, + 10.999461859323903, 17.686214625186228, 0.11089823383186907, + 0.0625228725718768, 0.009127426652828731, 0.11089823383186907, + 0.0625228725718768, 0.009127426652828731, 0.17798481973016023, + 0.07986498321225138, 0.015972996642450277, 0.17798481973016023, + 0.07986498321225138, 0.015972996642450277, + ], + preShiv: 48, + }, + { + age: 51, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5111190181530978, 1.9435041059432172, 12.21108978857993, + 10.743655037028308, 17.27489865177143, 0.10831915085876187, + 0.06106882167757356, 0.008915156449280813, 0.10831915085876187, + 0.06106882167757356, 0.008915156449280813, 0.17384555076097585, + 0.07800761893120711, 0.015601523786241422, 0.17384555076097585, + 0.07800761893120711, 0.015601523786241422, + ], + preShiv: 48, + }, + { + age: 61, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.466136128550251, 1.8856500060410313, 11.847590886579816, + 10.42383863431214, 16.76066062709039, 0.10509471363944278, + 0.05925092908890396, 0.008649770669912987, 0.10509471363944278, + 0.05925092908890396, 0.008649770669912987, 0.1686705280633032, + 0.07568549336173863, 0.015137098672347726, 0.1686705280633032, + 0.07568549336173863, 0.015137098672347726, + ], + preShiv: 48, + }, + { + age: 71, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.4031796196489816, 1.8046793928228793, 11.338850295181182, + 9.976234570141521, 16.04095073152703, 0.10058190193944028, + 0.05670666899466386, 0.008278345838637062, 0.10058190193944028, + 0.05670666899466386, 0.008278345838637062, 0.16142774385342265, + 0.07243552608807428, 0.014487105217614855, 0.16142774385342265, + 0.07243552608807428, 0.014487105217614855, + ], + preShiv: 48, + }, + { + age: 81, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.3447165155723177, 1.7294879079337186, 10.866420126132176, + 9.560577421334516, 15.372608803684251, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, + ], + preShiv: 48, + }, + { + age: 91, + sex: "male", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.3447165155723177, 1.7294879079337186, 10.866420126132176, + 9.560577421334516, 15.372608803684251, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, + ], + preShiv: 48, + }, + { + age: 21, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 31, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 41, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 51, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 61, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 71, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 81, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 91, + sex: "female", + options: { + shivering_threshold: true, + "limit_dshiv/dt": 0.8, + }, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + preShiv: 0, + }, + { + age: 21, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.015669935303199344, 0.020153663103819806, 0.12662601996927517, + 0.11140907984593233, 0.17913648163427354, 0.0011232431500523424, + 0.0006332687718402095, 9.244799588908168e-5, 0.0011232431500523424, + 0.0006332687718402095, 9.244799588908168e-5, 0.0018027359198370925, + 0.0008089199640294646, 0.00016178399280589292, 0.0018027359198370925, + 0.0008089199640294646, 0.00016178399280589292, + ], + preShiv: 0.462, + }, + { + age: 31, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.015280380711561809, 0.019652643039058844, 0.123478097112839, + 0.10863945012096246, 0.1746831487008455, 0.001095319325342041, + 0.0006175257101722618, 9.01497387112791e-5, 0.001095319325342041, + 0.0006175257101722618, 9.01497387112791e-5, 0.0017579199048699424, + 0.0007888102137236921, 0.00015776204274473842, 0.0017579199048699424, + 0.0007888102137236921, 0.00015776204274473842, + ], + preShiv: 0.462, + }, + { + age: 41, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014890826119924271, 0.019151622974297886, 0.1203301742564028, + 0.10586982039599258, 0.17022981576741747, 0.00106739550063174, + 0.0006017826485043143, 8.785148153347654e-5, 0.00106739550063174, + 0.0006017826485043143, 8.785148153347654e-5, 0.0017131038899027922, + 0.0007687004634179197, 0.00015374009268358393, 0.0017131038899027922, + 0.0007687004634179197, 0.00015374009268358393, + ], + preShiv: 0.462, + }, + { + age: 51, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014544520549723567, 0.018706227019703467, 0.11753173921508184, + 0.10340767973139747, 0.16627089952330001, 0.0010425718270155831, + 0.0005877874086466456, 8.580838082432783e-5, 0.0010425718270155831, + 0.0005877874086466456, 8.580838082432783e-5, 0.0016732634260743925, + 0.0007508233322128684, 0.0001501646664425737, 0.0016732634260743925, + 0.0007508233322128684, 0.0001501646664425737, + ], + preShiv: 0.462, + }, + { + age: 61, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014111560237296168, 0.018149381308144925, 0.11403306228333074, + 0.10032944685525436, 0.16132135853574503, 0.0010115366187796369, + 0.0005702901924807006, 8.32540426979125e-5, 0.0010115366187796369, + 0.0005702901924807006, 8.32540426979125e-5, 0.0016234538326092935, + 0.0007284728736067343, 0.00014569457472134688, 0.0016234538326092935, + 0.0007284728736067343, 0.00014569457472134688, + ], + preShiv: 0.462, + }, + { + age: 71, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.013505603839121449, 0.017370039155920215, 0.10913643409111888, + 0.09602125773761215, 0.15439415079094768, 0.0009681008061671127, + 0.0005458016890736397, 7.967907869688171e-5, 0.0009681008061671127, + 0.0005458016890736397, 7.967907869688171e-5, 0.0015537420345891932, + 0.000697191938597715, 0.000139438387719543, 0.0015537420345891932, + 0.000697191938597715, 0.000139438387719543, + ], + preShiv: 0.462, + }, + { + age: 81, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.012942896462383561, 0.016646321113862043, 0.1045892937140222, + 0.09202055768034471, 0.14796135973546093, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, + ], + preShiv: 0.462, + }, + { + age: 91, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.012942896462383561, 0.016646321113862043, 0.1045892937140222, + 0.09202055768034471, 0.14796135973546093, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, + ], + preShiv: 0.462, + }, + { + age: 21, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.015669935303199344, 0.020153663103819806, 0.12662601996927517, + 0.11140907984593233, 0.17913648163427354, 0.0011232431500523424, + 0.0006332687718402095, 9.244799588908168e-5, 0.0011232431500523424, + 0.0006332687718402095, 9.244799588908168e-5, 0.0018027359198370925, + 0.0008089199640294646, 0.00016178399280589292, 0.0018027359198370925, + 0.0008089199640294646, 0.00016178399280589292, + ], + preShiv: 0.462, + }, + { + age: 31, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.015280380711561809, 0.019652643039058844, 0.123478097112839, + 0.10863945012096246, 0.1746831487008455, 0.001095319325342041, + 0.0006175257101722618, 9.01497387112791e-5, 0.001095319325342041, + 0.0006175257101722618, 9.01497387112791e-5, 0.0017579199048699424, + 0.0007888102137236921, 0.00015776204274473842, 0.0017579199048699424, + 0.0007888102137236921, 0.00015776204274473842, + ], + preShiv: 0.462, + }, + { + age: 41, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014890826119924271, 0.019151622974297886, 0.1203301742564028, + 0.10586982039599258, 0.17022981576741747, 0.00106739550063174, + 0.0006017826485043143, 8.785148153347654e-5, 0.00106739550063174, + 0.0006017826485043143, 8.785148153347654e-5, 0.0017131038899027922, + 0.0007687004634179197, 0.00015374009268358393, 0.0017131038899027922, + 0.0007687004634179197, 0.00015374009268358393, + ], + preShiv: 0.462, + }, + { + age: 51, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014544520549723567, 0.018706227019703467, 0.11753173921508184, + 0.10340767973139747, 0.16627089952330001, 0.0010425718270155831, + 0.0005877874086466456, 8.580838082432783e-5, 0.0010425718270155831, + 0.0005877874086466456, 8.580838082432783e-5, 0.0016732634260743925, + 0.0007508233322128684, 0.0001501646664425737, 0.0016732634260743925, + 0.0007508233322128684, 0.0001501646664425737, + ], + preShiv: 0.462, + }, + { + age: 61, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.014111560237296168, 0.018149381308144925, 0.11403306228333074, + 0.10032944685525436, 0.16132135853574503, 0.0010115366187796369, + 0.0005702901924807006, 8.32540426979125e-5, 0.0010115366187796369, + 0.0005702901924807006, 8.32540426979125e-5, 0.0016234538326092935, + 0.0007284728736067343, 0.00014569457472134688, 0.0016234538326092935, + 0.0007284728736067343, 0.00014569457472134688, + ], + preShiv: 0.462, + }, + { + age: 71, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.013505603839121449, 0.017370039155920215, 0.10913643409111888, + 0.09602125773761215, 0.15439415079094768, 0.0009681008061671127, + 0.0005458016890736397, 7.967907869688171e-5, 0.0009681008061671127, + 0.0005458016890736397, 7.967907869688171e-5, 0.0015537420345891932, + 0.000697191938597715, 0.000139438387719543, 0.0015537420345891932, + 0.000697191938597715, 0.000139438387719543, + ], + preShiv: 0.462, + }, + { + age: 81, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.012942896462383561, 0.016646321113862043, 0.1045892937140222, + 0.09202055768034471, 0.14796135973546093, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, + ], + preShiv: 0.462, + }, + { + age: 91, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": true, + }, + expected: [ + 0.012942896462383561, 0.016646321113862043, 0.1045892937140222, + 0.09202055768034471, 0.14796135973546093, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0009277651446487331, + 0.0005230610074768578, 7.63592711645048e-5, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, 0.0014890057877078432, + 0.0006681436226894168, 0.00013362872453788339, + ], + preShiv: 0.462, + }, + { + age: 21, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 14.4505044992533, 18.585309621458524, 116.77201187390706, + 102.73925057256729, 165.1961213463311, 1.035832623397803, + 0.5839879399403252, 0.08525371385990149, 1.035832623397803, + 0.5839879399403252, 0.08525371385990149, 1.6624474202680788, + 0.745969996274138, 0.1491939992548276, 1.6624474202680788, + 0.745969996274138, 0.1491939992548276, + ], + preShiv: 426.047265, + }, + { + age: 31, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 14.091264957401865, 18.123278824269065, 113.86905965872175, + 100.18515280333327, 161.08934576966132, 1.0100818243801337, + 0.5694699997534086, 0.08313430653334433, 1.0100818243801337, + 0.5694699997534086, 0.08313430653334433, 1.6211189774002144, + 0.7274251821667629, 0.1454850364333526, 1.6211189774002144, + 0.7274251821667629, 0.1454850364333526, + ], + preShiv: 426.047265, + }, + { + age: 41, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 13.732025415550426, 17.66124802707961, 110.9661074435364, + 97.63105503409923, 156.98257019299152, 0.9843310253624643, + 0.5549520595664923, 0.0810148992067872, 0.9843310253624643, + 0.5549520595664923, 0.0810148992067872, 1.57979053453235, + 0.7088803680593878, 0.14177607361187758, 1.57979053453235, + 0.7088803680593878, 0.14177607361187758, + ], + preShiv: 426.047265, + }, + { + age: 51, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 13.41266926611693, 17.250512684445372, 108.38544598112307, + 95.3605175964455, 153.3317359112376, 0.9614391243853728, + 0.542045926093811, 0.07913079213048337, 0.9614391243853728, + 0.542045926093811, 0.07913079213048337, 1.5430504465444255, + 0.6923944311417294, 0.1384788862283459, 1.5430504465444255, + 0.6923944311417294, 0.1384788862283459, + ], + preShiv: 426.047265, + }, + { + age: 61, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 13.013401826802559, 16.737000579604473, 105.159035293047, + 92.52183210312546, 148.76736707843847, 0.9328190690008915, + 0.5259103393132598, 0.07677523201653429, 0.9328190690008915, + 0.5259103393132598, 0.07677523201653429, 1.4971170243224183, + 0.6717832801446749, 0.13435665602893498, 1.4971170243224183, + 0.6717832801446749, 0.13435665602893498, + ], + preShiv: 426.047265, + }, + { + age: 71, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 12.454600817816434, 16.018306656542673, 100.64346159388302, + 88.54890528348429, 142.37923306597585, 0.8927634214540985, + 0.5033275256757674, 0.07347847090157189, 0.8927634214540985, + 0.5033275256757674, 0.07347847090157189, 1.4328301825806518, + 0.6429366203887541, 0.1285873240777508, 1.4328301825806518, + 0.6429366203887541, 0.1285873240777508, + ], + preShiv: 426.047265, + }, + { + age: 81, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 11.935683201248247, 15.350908188036097, 96.45017864749101, + 84.85953879542339, 136.4470403484291, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, + ], + preShiv: 426.047265, + }, + { + age: 91, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 11.935683201248247, 15.350908188036097, 96.45017864749101, + 84.85953879542339, 136.4470403484291, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, + ], + preShiv: 426.047265, + }, + { + age: 21, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 14.4505044992533, 18.585309621458524, 116.77201187390706, + 102.73925057256729, 165.1961213463311, 1.035832623397803, + 0.5839879399403252, 0.08525371385990149, 1.035832623397803, + 0.5839879399403252, 0.08525371385990149, 1.6624474202680788, + 0.745969996274138, 0.1491939992548276, 1.6624474202680788, + 0.745969996274138, 0.1491939992548276, + ], + preShiv: 426.047265, + }, + { + age: 31, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 14.091264957401865, 18.123278824269065, 113.86905965872175, + 100.18515280333327, 161.08934576966132, 1.0100818243801337, + 0.5694699997534086, 0.08313430653334433, 1.0100818243801337, + 0.5694699997534086, 0.08313430653334433, 1.6211189774002144, + 0.7274251821667629, 0.1454850364333526, 1.6211189774002144, + 0.7274251821667629, 0.1454850364333526, + ], + preShiv: 426.047265, + }, + { + age: 41, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 13.732025415550426, 17.66124802707961, 110.9661074435364, + 97.63105503409923, 156.98257019299152, 0.9843310253624643, + 0.5549520595664923, 0.0810148992067872, 0.9843310253624643, + 0.5549520595664923, 0.0810148992067872, 1.57979053453235, + 0.7088803680593878, 0.14177607361187758, 1.57979053453235, + 0.7088803680593878, 0.14177607361187758, + ], + preShiv: 426.047265, + }, + { + age: 51, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 13.41266926611693, 17.250512684445372, 108.38544598112307, + 95.3605175964455, 153.3317359112376, 0.9614391243853728, + 0.542045926093811, 0.07913079213048337, 0.9614391243853728, + 0.542045926093811, 0.07913079213048337, 1.5430504465444255, + 0.6923944311417294, 0.1384788862283459, 1.5430504465444255, + 0.6923944311417294, 0.1384788862283459, + ], + preShiv: 426.047265, + }, + { + age: 61, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 13.013401826802559, 16.737000579604473, 105.159035293047, + 92.52183210312546, 148.76736707843847, 0.9328190690008915, + 0.5259103393132598, 0.07677523201653429, 0.9328190690008915, + 0.5259103393132598, 0.07677523201653429, 1.4971170243224183, + 0.6717832801446749, 0.13435665602893498, 1.4971170243224183, + 0.6717832801446749, 0.13435665602893498, + ], + preShiv: 426.047265, + }, + { + age: 71, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 12.454600817816434, 16.018306656542673, 100.64346159388302, + 88.54890528348429, 142.37923306597585, 0.8927634214540985, + 0.5033275256757674, 0.07347847090157189, 0.8927634214540985, + 0.5033275256757674, 0.07347847090157189, 1.4328301825806518, + 0.6429366203887541, 0.1285873240777508, 1.4328301825806518, + 0.6429366203887541, 0.1285873240777508, + ], + preShiv: 426.047265, + }, + { + age: 81, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 11.935683201248247, 15.350908188036097, 96.45017864749101, + 84.85953879542339, 136.4470403484291, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, + ], + preShiv: 426.047265, + }, + { + age: 91, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": false, + }, + expected: [ + 11.935683201248247, 15.350908188036097, 96.45017864749101, + 84.85953879542339, 136.4470403484291, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 0.8555666719478834, + 0.4823565187525104, 0.07041701003686283, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, 1.373131695718825, + 0.6161488378225497, 0.12322976756450994, + ], + preShiv: 426.047265, + }, + { + age: 21, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.6280452263064251, 2.093887075721538, 13.15595012667794, + 11.574969334642319, 18.61158250745699, 0.11670058701842517, + 0.06579415811326851, 0.009604986585878616, 0.11670058701842517, + 0.06579415811326851, 0.009604986585878616, 0.18729723842463297, + 0.08404363262643788, 0.016808726525287577, 0.18729723842463297, + 0.08404363262643788, 0.016808726525287577, + ], + preShiv: 48, + }, + { + age: 31, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5875720219804474, 2.0418330430191007, 12.828893206528726, + 11.287215596983112, 18.148898566321613, 0.11379941042514713, + 0.06415851534257265, 0.009366206619353673, 0.11379941042514713, + 0.06415851534257265, 0.009366206619353673, 0.1826410290773966, + 0.08195430791934463, 0.016390861583868925, 0.1826410290773966, + 0.08195430791934463, 0.016390861583868925, + ], + preShiv: 48, + }, + { + age: 41, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5470988176544695, 1.9897790103166633, 12.501836286379511, + 10.999461859323903, 17.686214625186228, 0.11089823383186907, + 0.0625228725718768, 0.009127426652828731, 0.11089823383186907, + 0.0625228725718768, 0.009127426652828731, 0.17798481973016023, + 0.07986498321225138, 0.015972996642450277, 0.17798481973016023, + 0.07986498321225138, 0.015972996642450277, + ], + preShiv: 48, + }, + { + age: 51, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5111190181530978, 1.9435041059432172, 12.21108978857993, + 10.743655037028308, 17.27489865177143, 0.10831915085876187, + 0.06106882167757356, 0.008915156449280813, 0.10831915085876187, + 0.06106882167757356, 0.008915156449280813, 0.17384555076097585, + 0.07800761893120711, 0.015601523786241422, 0.17384555076097585, + 0.07800761893120711, 0.015601523786241422, + ], + preShiv: 48, + }, + { + age: 61, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.466136128550251, 1.8856500060410313, 11.847590886579816, + 10.42383863431214, 16.76066062709039, 0.10509471363944278, + 0.05925092908890396, 0.008649770669912987, 0.10509471363944278, + 0.05925092908890396, 0.008649770669912987, 0.1686705280633032, + 0.07568549336173863, 0.015137098672347726, 0.1686705280633032, + 0.07568549336173863, 0.015137098672347726, + ], + preShiv: 48, + }, + { + age: 71, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.4031796196489816, 1.8046793928228793, 11.338850295181182, + 9.976234570141521, 16.04095073152703, 0.10058190193944028, + 0.05670666899466386, 0.008278345838637062, 0.10058190193944028, + 0.05670666899466386, 0.008278345838637062, 0.16142774385342265, + 0.07243552608807428, 0.014487105217614855, 0.16142774385342265, + 0.07243552608807428, 0.014487105217614855, + ], + preShiv: 48, + }, + { + age: 81, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.3447165155723177, 1.7294879079337186, 10.866420126132176, + 9.560577421334516, 15.372608803684251, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, + ], + preShiv: 48, + }, + { + age: 91, + sex: "male", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.3447165155723177, 1.7294879079337186, 10.866420126132176, + 9.560577421334516, 15.372608803684251, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, + ], + preShiv: 48, + }, + { + age: 21, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.6280452263064251, 2.093887075721538, 13.15595012667794, + 11.574969334642319, 18.61158250745699, 0.11670058701842517, + 0.06579415811326851, 0.009604986585878616, 0.11670058701842517, + 0.06579415811326851, 0.009604986585878616, 0.18729723842463297, + 0.08404363262643788, 0.016808726525287577, 0.18729723842463297, + 0.08404363262643788, 0.016808726525287577, + ], + preShiv: 48, + }, + { + age: 31, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5875720219804474, 2.0418330430191007, 12.828893206528726, + 11.287215596983112, 18.148898566321613, 0.11379941042514713, + 0.06415851534257265, 0.009366206619353673, 0.11379941042514713, + 0.06415851534257265, 0.009366206619353673, 0.1826410290773966, + 0.08195430791934463, 0.016390861583868925, 0.1826410290773966, + 0.08195430791934463, 0.016390861583868925, + ], + preShiv: 48, + }, + { + age: 41, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5470988176544695, 1.9897790103166633, 12.501836286379511, + 10.999461859323903, 17.686214625186228, 0.11089823383186907, + 0.0625228725718768, 0.009127426652828731, 0.11089823383186907, + 0.0625228725718768, 0.009127426652828731, 0.17798481973016023, + 0.07986498321225138, 0.015972996642450277, 0.17798481973016023, + 0.07986498321225138, 0.015972996642450277, + ], + preShiv: 48, + }, + { + age: 51, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.5111190181530978, 1.9435041059432172, 12.21108978857993, + 10.743655037028308, 17.27489865177143, 0.10831915085876187, + 0.06106882167757356, 0.008915156449280813, 0.10831915085876187, + 0.06106882167757356, 0.008915156449280813, 0.17384555076097585, + 0.07800761893120711, 0.015601523786241422, 0.17384555076097585, + 0.07800761893120711, 0.015601523786241422, + ], + preShiv: 48, + }, + { + age: 61, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.466136128550251, 1.8856500060410313, 11.847590886579816, + 10.42383863431214, 16.76066062709039, 0.10509471363944278, + 0.05925092908890396, 0.008649770669912987, 0.10509471363944278, + 0.05925092908890396, 0.008649770669912987, 0.1686705280633032, + 0.07568549336173863, 0.015137098672347726, 0.1686705280633032, + 0.07568549336173863, 0.015137098672347726, + ], + preShiv: 48, + }, + { + age: 71, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.4031796196489816, 1.8046793928228793, 11.338850295181182, + 9.976234570141521, 16.04095073152703, 0.10058190193944028, + 0.05670666899466386, 0.008278345838637062, 0.10058190193944028, + 0.05670666899466386, 0.008278345838637062, 0.16142774385342265, + 0.07243552608807428, 0.014487105217614855, 0.16142774385342265, + 0.07243552608807428, 0.014487105217614855, + ], + preShiv: 48, + }, + { + age: 81, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.3447165155723177, 1.7294879079337186, 10.866420126132176, + 9.560577421334516, 15.372608803684251, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, + ], + preShiv: 48, + }, + { + age: 91, + sex: "female", + options: { + shivering_threshold: false, + "limit_dshiv/dt": 0.8, + }, + expected: [ + 1.3447165155723177, 1.7294879079337186, 10.866420126132176, + 9.560577421334516, 15.372608803684251, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.09639118385960863, + 0.05434400077681639, 0.00793343077033816, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, 0.1547019000215941, + 0.06941751924045889, 0.01388350384809178, + ], + preShiv: 48, }, ])( "works correctly with given age $age and options $options", - ({ age, bsa_equation, sex, expectedShiv, expected }) => { + ({ age, sex, expected, options }) => { const result = shivering( - $lerp(17, -5, -1), - $lerp(17, -5, -1), - $lerp(17, 36, 38), - $lerp(17, 30, 34), + math.matrix($lerp(17, -5, -1)), + math.matrix($lerp(17, -5, -1)), + math.matrix($lerp(17, 36, 38)), + math.matrix($lerp(17, 30, 34)), 1.72, 74.43, - bsa_equation, + "dubois", age, sex, - {}, - ); - - expect(PRE_SHIV).toBeCloseTo(expectedShiv); + 60, + options, + ).toArray(); expect(result).toHaveLength(expected.length); for (let i = 0; i < expected.length; i++) { - expect(result[i]).toBeCloseTo(expected[i]); + expect(result[i]).toBeCloseTo(expected[i], 13); } }, ); diff --git a/tests/jos3_functions/thermoregulation/skin_blood_flow.test.js b/tests/jos3_functions/thermoregulation/skin_blood_flow.test.js index 009a393..4b50e6b 100644 --- a/tests/jos3_functions/thermoregulation/skin_blood_flow.test.js +++ b/tests/jos3_functions/thermoregulation/skin_blood_flow.test.js @@ -1,43 +1,44 @@ import { skin_blood_flow } from "../../../src/jos3_functions/thermoregulation/skin_blood_flow"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("skin_blood_flow", () => { it.each([ { age: 20, expected: [ - 24.230143557263187, 6.364876726542825, 24.192163391361344, - 21.295863167120274, 34.715034049850765, 8.648423125492805, - 4.6496361900695735, 16.36839851361775, 9.193870867997145, - 4.942884280101641, 17.400737691305178, 26.606110387435855, - 7.299829837048958, 15.312946245821113, 28.284132222985352, - 7.760223095739952, 16.278719062400032, + 24.303102589863705, 6.392795481701565, 24.325504462771203, + 21.441665582494252, 34.997709875245285, 8.728079349976067, + 4.698289478291021, 16.564292938097946, 9.31408609467257, + 5.013734516359185, 17.676426202890116, 27.06338811055306, + 7.433159005841143, 15.615057345156426, 28.880434831967982, + 7.9322242797878575, 16.663458551901805, ], }, { age: 61, expected: [ - 16.704761670069523, 4.375739470682227, 9.681242792743468, - 8.389589154257639, 9.87802173962727, 3.6158760418662994, - 1.9622137619488487, 6.493245483565689, 3.8439258719443257, - 2.085968699841641, 6.902768241546565, 7.521390867956149, - 2.3066177191198762, 4.4525938163632865, 7.995757768128562, - 2.4520938839025463, 4.733414633081335, + 16.754556209819384, 4.394834452093219, 9.7311887869613, + 8.444365458928788, 9.952975918891873, 3.647580618615998, + 1.981844511386393, 6.568779123396375, 3.8924806428508925, + 2.1149063459600397, 7.009809585698761, 7.646557467698562, + 2.347006194539438, 4.537738518368928, 8.159950399878202, + 2.5045851308318032, 4.842404100658873, ], }, ])( "should return the correct value when age is $age", ({ age, expected }) => { const result = skin_blood_flow( - $lerp(17, 1, 3), - $lerp(17, 3, 6), + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 3, 6)), 1.72, 74.43, "dubois", age, 2.59, - ); + ).toArray(); expect(result).toHaveLength(expected.length); diff --git a/tests/jos3_functions/thermoregulation/sum_bf.test.js b/tests/jos3_functions/thermoregulation/sum_bf.test.js index 6b0b633..9cbb628 100644 --- a/tests/jos3_functions/thermoregulation/sum_bf.test.js +++ b/tests/jos3_functions/thermoregulation/sum_bf.test.js @@ -13,7 +13,7 @@ describe("sum_bf", () => { 18, ); - const expected = 477.0; + const expected = 482.5; expect(result).toBe(expected); }); diff --git a/tests/jos3_functions/thermoregulation/sum_m.test.js b/tests/jos3_functions/thermoregulation/sum_m.test.js index 915a42d..b578afc 100644 --- a/tests/jos3_functions/thermoregulation/sum_m.test.js +++ b/tests/jos3_functions/thermoregulation/sum_m.test.js @@ -1,56 +1,52 @@ import { sum_m } from "../../../src/jos3_functions/thermoregulation/sum_m"; import { describe, it, expect } from "@jest/globals"; import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("sum_m", () => { it("returns correct result", () => { const result = sum_m( [ - $lerp(17, 9, 12), - $lerp(17, 12, 15), - $lerp(17, 15, 18), - $lerp(17, 18, 21), + math.matrix($lerp(17, 9, 12)), + math.matrix($lerp(17, 12, 15)), + math.matrix($lerp(17, 15, 18)), + math.matrix($lerp(17, 18, 21)), ], - $lerp(17, 1, 3), - $lerp(17, 3, 6), - $lerp(17, 6, 9), + math.matrix($lerp(17, 1, 3)), + math.matrix($lerp(17, 3, 6)), + math.matrix($lerp(17, 6, 9)), ); - const expected = [ - [ - 15, 19.64705882352941, 20.294117647058822, 20.941176470588236, - 16.41176470588235, 22.235294117647058, 22.88235294117647, - 23.52941176470588, 24.176470588235297, 24.823529411764703, - 25.47058823529412, 26.11764705882353, 26.764705882352942, - 27.411764705882355, 28.05882352941176, 28.70588235294118, - 29.35294117647059, + const expected = { + q_thermogenesis_core: [ + 15.0, 19.6875, 20.375, 21.0625, 16.5, 22.4375, 23.125, 23.8125, 24.5, + 25.1875, 25.875, 26.5625, 27.25, 27.9375, 28.625, 29.3125, 30.0, ], - [ - 16, 12.176470588235293, 12.352941176470589, 12.529411764705882, - 17.88235294117647, 12.882352941176471, 13.058823529411764, - 13.235294117647058, 13.411764705882353, 13.588235294117647, - 13.764705882352942, 13.941176470588236, 14.117647058823529, - 14.294117647058824, 14.470588235294118, 14.647058823529413, - 14.823529411764707, + q_thermogenesis_muscle: [ + 16.0, 12.1875, 12.375, 12.5625, 18.0, 12.9375, 13.125, 13.3125, 13.5, + 13.6875, 13.875, 14.0625, 14.25, 14.4375, 14.625, 14.8125, 15.0, ], - [ - 15, 15.176470588235293, 15.352941176470589, 15.529411764705882, - 15.705882352941176, 15.882352941176471, 16.058823529411764, - 16.235294117647058, 16.41176470588235, 16.58823529411765, - 16.764705882352942, 16.941176470588236, 17.11764705882353, - 17.294117647058822, 17.470588235294116, 17.647058823529413, - 17.823529411764707, + q_thermogenesis_fat: [ + 15.0, 15.1875, 15.375, 15.5625, 15.75, 15.9375, 16.125, 16.3125, 16.5, + 16.6875, 16.875, 17.0625, 17.25, 17.4375, 17.625, 17.8125, 18.0, ], - [ - 18, 18.176470588235293, 18.352941176470587, 18.529411764705884, - 18.705882352941178, 18.88235294117647, 19.058823529411764, - 19.235294117647058, 19.41176470588235, 19.58823529411765, - 19.764705882352942, 19.941176470588236, 20.11764705882353, - 20.294117647058822, 20.470588235294116, 20.647058823529413, - 20.823529411764707, + q_thermogenesis_skin: [ + 18.0, 18.1875, 18.375, 18.5625, 18.75, 18.9375, 19.125, 19.3125, 19.5, + 19.6875, 19.875, 20.0625, 20.25, 20.4375, 20.625, 20.8125, 21.0, ], - ]; + }; - expect(result).toStrictEqual(expected); + expect(result.q_thermogenesis_core.toArray()).toStrictEqual( + expected.q_thermogenesis_core, + ); + expect(result.q_thermogenesis_muscle.toArray()).toStrictEqual( + expected.q_thermogenesis_muscle, + ); + expect(result.q_thermogenesis_fat.toArray()).toStrictEqual( + expected.q_thermogenesis_fat, + ); + expect(result.q_thermogenesis_skin.toArray()).toStrictEqual( + expected.q_thermogenesis_skin, + ); }); }); diff --git a/tests/jos3_functions/thermoregulation/wet_r.test.js b/tests/jos3_functions/thermoregulation/wet_r.test.js index 7b516c9..188ffce 100644 --- a/tests/jos3_functions/thermoregulation/wet_r.test.js +++ b/tests/jos3_functions/thermoregulation/wet_r.test.js @@ -1,31 +1,32 @@ import { wet_r } from "../../../src/jos3_functions/thermoregulation/wet_r"; import { describe, it, expect } from "@jest/globals"; -import { $array, $lerp } from "../../../src/supa"; +import { $lerp } from "../../../src/supa"; +import * as math from "mathjs"; describe("wet_r", () => { it("throws an error if hc is negative", () => { - expect(() => wet_r([-1], [])).toThrow( + expect(() => wet_r(math.matrix([-1]), math.matrix([]))).toThrow( "Input parameter hc must be non-negative.", ); }); it("should return the correct value", () => { const expected = [ - 0.0021645021645021645, 0.003349471689074972, 0.004535720923832167, - 0.005723199160890929, 0.006911858199076293, 0.008101652195580091, - 0.009292537527831646, 0.01048447266477957, 0.011677418046854316, - 0.012876188354129531, 0.01408040692912621, 0.015285091429744541, - 0.01649022961406062, 0.01769580964370202, 0.01890182006783671, - 0.020108249807904748, 0.021315088143053263, + 0.0021645021645021645, 0.003423575313939129, 0.004684089504371918, + 0.005945984200305834, 0.007209202036788244, 0.008473688620747445, + 0.009739392346802675, 0.011006264226345363, 0.012274257728803185, + 0.013553503235181343, 0.014833280927405077, 0.016113575919067133, + 0.01739437384598675, 0.01867566084416913, 0.019957423528852103, + 0.021239648974578626, 0.02252232469623774, ]; const result = wet_r( - $lerp(17, 28, 32), - $lerp(17, 0, 1), - $array(17, 0.45), + math.matrix($lerp(17, 28, 32)), + math.matrix($lerp(17, 0, 1)), + math.dotMultiply(math.ones(17), 0.45), 16.5, ); - expect(result).toStrictEqual(expected); + expect(result.toArray()).toStrictEqual(expected); }); }); diff --git a/tests/models/1_run_dict.json b/tests/models/1_run_dict.json new file mode 100644 index 0000000..55c57fd --- /dev/null +++ b/tests/models/1_run_dict.json @@ -0,0 +1,578 @@ +{ + "cycle_time": [0], + "simulation_time": [0], + "dt": [60000], + "t_skin_mean": [34.46418466255792], + "t_skin_head": [34.98583652881713], + "t_skin_neck": [35.10668504573099], + "t_skin_chest": [34.61642143810777], + "t_skin_back": [34.52453966623942], + "t_skin_pelvis": [35.844809578238284], + "t_skin_left_shoulder": [34.25228779730484], + "t_skin_left_arm": [33.857087457104285], + "t_skin_left_hand": [34.308156507844046], + "t_skin_right_shoulder": [34.2522877973049], + "t_skin_right_arm": [33.8570874571043], + "t_skin_right_hand": [34.308156507844096], + "t_skin_left_thigh": [34.15023407024665], + "t_skin_left_leg": [33.95264011542674], + "t_skin_left_foot": [34.11693174783236], + "t_skin_right_thigh": [34.15023407024672], + "t_skin_right_leg": [33.95264011542693], + "t_skin_right_foot": [34.11693174783242], + "t_core_head": [37.27948664648618], + "t_core_neck": [36.81782751853464], + "t_core_chest": [37.046763146185384], + "t_core_back": [37.10669294345571], + "t_core_pelvis": [37.25856827899341], + "t_core_left_shoulder": [36.25197837683718], + "t_core_left_arm": [35.71685683735247], + "t_core_left_hand": [34.90385741306187], + "t_core_right_shoulder": [36.25197837683733], + "t_core_right_arm": [35.7168568373525], + "t_core_right_hand": [34.903857413061935], + "t_core_left_thigh": [36.67563450105145], + "t_core_left_leg": [36.32476524669076], + "t_core_left_foot": [34.602386529646225], + "t_core_right_thigh": [36.675634501051476], + "t_core_right_leg": [36.32476524669116], + "t_core_right_foot": [34.602386529646274], + "w_mean": [0.05999999999999999], + "w_head": [0.06], + "w_neck": [0.06], + "w_chest": [0.06], + "w_back": [0.06], + "w_pelvis": [0.06], + "w_left_shoulder": [0.06], + "w_left_arm": [0.06], + "w_left_hand": [0.06], + "w_right_shoulder": [0.06], + "w_right_arm": [0.06], + "w_right_hand": [0.06], + "w_left_thigh": [0.06], + "w_left_leg": [0.06], + "w_left_foot": [0.06], + "w_right_thigh": [0.06], + "w_right_leg": [0.06], + "w_right_foot": [0.06], + "weight_loss_by_evap_and_res": [0.011094527785290931], + "cardiac_output": [309.3525279636547], + "q_thermogenesis_total": [109.95300054410399], + "q_res": [8.222503033578032], + "q_skin2env_head": [8.220790562331835], + "q_skin2env_neck": [2.205000373975029], + "q_skin2env_chest": [9.319394672853791], + "q_skin2env_back": [8.14893481599888], + "q_skin2env_pelvis": [13.708771815913414], + "q_skin2env_left_shoulder": [5.495164499822654], + "q_skin2env_left_arm": [3.3060484333347873], + "q_skin2env_left_hand": [2.820093545556136], + "q_skin2env_right_shoulder": [5.495164499822711], + "q_skin2env_right_arm": [3.306048433334798], + "q_skin2env_right_hand": [2.820093545556159], + "q_skin2env_left_thigh": [10.530261655946674], + "q_skin2env_left_leg": [5.065172487729327], + "q_skin2env_left_foot": [2.847055691927899], + "q_skin2env_right_thigh": [10.530261655946806], + "q_skin2env_right_leg": [5.065172487729508], + "q_skin2env_right_foot": [2.8470556919279275], + "q_skin2env_sensible_head": [6.440954076143588], + "q_skin2env_sensible_neck": [1.7309250675709411], + "q_skin2env_sensible_chest": [7.500790175803339], + "q_skin2env_sensible_back": [6.522605091849611], + "q_skin2env_sensible_pelvis": [11.263997393500407], + "q_skin2env_sensible_left_shoulder": [4.3203724762556], + "q_skin2env_sensible_left_arm": [2.573914713376867], + "q_skin2env_sensible_left_hand": [2.1950032987361725], + "q_skin2env_sensible_right_shoulder": [4.320372476255651], + "q_skin2env_sensible_right_arm": [2.573914713376878], + "q_skin2env_sensible_right_hand": [2.195003298736192], + "q_skin2env_sensible_left_thigh": [8.564210966911979], + "q_skin2env_sensible_left_leg": [4.310849252685041], + "q_skin2env_sensible_left_foot": [2.464376300823253], + "q_skin2env_sensible_right_thigh": [8.564210966912105], + "q_skin2env_sensible_right_leg": [4.310849252685212], + "q_skin2env_sensible_right_foot": [2.4643763008232793], + "q_skin2env_latent_head": [1.7798364861882476], + "q_skin2env_latent_neck": [0.4740753064040876], + "q_skin2env_latent_chest": [1.8186044970504518], + "q_skin2env_latent_back": [1.626329724149269], + "q_skin2env_latent_pelvis": [2.444774422413006], + "q_skin2env_latent_left_shoulder": [1.174792023567054], + "q_skin2env_latent_left_arm": [0.7321337199579199], + "q_skin2env_latent_left_hand": [0.6250902468199633], + "q_skin2env_latent_right_shoulder": [1.1747920235670604], + "q_skin2env_latent_right_arm": [0.7321337199579199], + "q_skin2env_latent_right_hand": [0.6250902468199668], + "q_skin2env_latent_left_thigh": [1.966050689034695], + "q_skin2env_latent_left_leg": [0.7543232350442859], + "q_skin2env_latent_left_foot": [0.3826793911046459], + "q_skin2env_latent_right_thigh": [1.9660506890347005], + "q_skin2env_latent_right_leg": [0.7543232350442964], + "q_skin2env_latent_right_foot": [0.38267939110464805], + "q_res_sensible": [0.8096938960067809], + "q_res_latent": [7.412809137571252], + "name": ["JOS3"], + "height": [1.72], + "weight": [74.43], + "bsa_head": [0.11005713796319246], + "bsa_neck": [0.02901506364484165], + "bsa_chest": [0.1750909013050789], + "bsa_back": [0.1610836292006726], + "bsa_pelvis": [0.22111479536241394], + "bsa_left_shoulder": [0.09604986585878615], + "bsa_left_arm": [0.06303272446982841], + "bsa_left_hand": [0.05002597180145112], + "bsa_right_shoulder": [0.09604986585878615], + "bsa_right_arm": [0.06303272446982841], + "bsa_right_hand": [0.05002597180145112], + "bsa_left_thigh": [0.20910856213006568], + "bsa_left_leg": [0.1120581768352505], + "bsa_left_foot": [0.05602908841762525], + "bsa_right_thigh": [0.20910856213006568], + "bsa_right_leg": [0.1120581768352505], + "bsa_right_foot": [0.05602908841762525], + "fat": [15], + "sex": ["male"], + "age": [20], + "t_core_set_head": [37.2794857325035], + "t_core_set_neck": [36.817826612366005], + "t_core_set_chest": [37.04676221735688], + "t_core_set_back": [37.106692016074064], + "t_core_set_pelvis": [37.25856731982281], + "t_core_set_left_shoulder": [36.25197752183496], + "t_core_set_left_arm": [35.71685601489091], + "t_core_set_left_hand": [34.90385675284975], + "t_core_set_right_shoulder": [36.2519775218351], + "t_core_set_right_arm": [35.71685601489095], + "t_core_set_right_hand": [34.903856752849805], + "t_core_set_left_thigh": [36.675633557689096], + "t_core_set_left_leg": [36.32476429640966], + "t_core_set_left_foot": [34.602385885429825], + "t_core_set_right_thigh": [36.67563355768914], + "t_core_set_right_leg": [36.32476429641006], + "t_core_set_right_foot": [34.602385885429875], + "t_skin_set_head": [34.98583588425839], + "t_skin_set_neck": [35.10668437701332], + "t_skin_set_chest": [34.61642082230399], + "t_skin_set_back": [34.52453906447294], + "t_skin_set_pelvis": [35.8448087799485], + "t_skin_set_left_shoulder": [34.25228721571578], + "t_skin_set_left_arm": [33.85708690208492], + "t_skin_set_left_hand": [34.308155926164105], + "t_skin_set_right_shoulder": [34.252287215715846], + "t_skin_set_right_arm": [33.857086902084944], + "t_skin_set_right_hand": [34.308155926164154], + "t_skin_set_left_thigh": [34.150233478181754], + "t_skin_set_left_leg": [33.95263950759043], + "t_skin_set_left_foot": [34.116931163851426], + "t_skin_set_right_thigh": [34.15023347818183], + "t_skin_set_right_leg": [33.95263950759064], + "t_skin_set_right_foot": [34.11693116385148], + "t_cb": [36.895787875645865], + "t_artery_head": [36.895787875492054], + "t_artery_neck": [36.895787875621906], + "t_artery_chest": [36.89578787557957], + "t_artery_back": [36.89578787558303], + "t_artery_pelvis": [36.89578787541572], + "t_artery_left_shoulder": [36.76002456078816], + "t_artery_left_arm": [36.52923955995219], + "t_artery_left_hand": [35.54000358081729], + "t_artery_right_shoulder": [36.76002456078817], + "t_artery_right_arm": [36.52923955995221], + "t_artery_right_hand": [35.54000358081734], + "t_artery_left_thigh": [36.826782304371214], + "t_artery_left_leg": [36.67336731935297], + "t_artery_left_foot": [35.2246369283959], + "t_artery_right_thigh": [36.826782304371235], + "t_artery_right_leg": [36.673367319353034], + "t_artery_right_foot": [35.22463692839595], + "t_vein_head": [37.1286294916478], + "t_vein_neck": [37.027843684904795], + "t_vein_chest": [36.99530423285108], + "t_vein_back": [37.06467699338318], + "t_vein_pelvis": [36.63899228469504], + "t_vein_left_shoulder": [35.6010834945116], + "t_vein_left_arm": [35.21468563979818], + "t_vein_left_hand": [34.845270389463906], + "t_vein_right_shoulder": [35.601083494511684], + "t_vein_right_arm": [35.214685639798226], + "t_vein_right_hand": [34.845270389463955], + "t_vein_left_thigh": [36.04313378500564], + "t_vein_left_leg": [35.6160489275908], + "t_vein_left_foot": [34.635772634243736], + "t_vein_right_thigh": [36.04313378500574], + "t_vein_right_leg": [35.61604892759106], + "t_vein_right_foot": [34.63577263424378], + "t_superficial_vein_head": [34.25228779728972], + "t_superficial_vein_neck": [33.85708745709104], + "t_superficial_vein_chest": [34.30815650782096], + "t_superficial_vein_back": [34.252287797289775], + "t_superficial_vein_pelvis": [33.85708745709107], + "t_superficial_vein_left_shoulder": [34.308156507821], + "t_superficial_vein_left_arm": [34.150234070220854], + "t_superficial_vein_left_hand": [33.95264011539343], + "t_superficial_vein_right_shoulder": [34.116931747802035], + "t_superficial_vein_right_arm": [34.15023407022093], + "t_superficial_vein_right_hand": [33.95264011539362], + "t_superficial_vein_left_thigh": [34.11693174780209], + "t_muscle_head": [35.56525956589897], + "t_muscle_pelvis": [36.895467897913086], + "t_fat_head": [35.26754117907478], + "t_fat_pelvis": [36.10705391945993], + "to_head": [28.740000000000006], + "to_neck": [28.740000000000006], + "to_chest": [28.740000000000002], + "to_back": [28.740000000000006], + "to_pelvis": [28.740000000000006], + "to_left_shoulder": [28.740000000000006], + "to_left_arm": [28.740000000000006], + "to_left_hand": [28.740000000000006], + "to_right_shoulder": [28.740000000000006], + "to_right_arm": [28.740000000000006], + "to_right_hand": [28.740000000000006], + "to_left_thigh": [28.740000000000006], + "to_left_leg": [28.740000000000002], + "to_left_foot": [28.740000000000006], + "to_right_thigh": [28.740000000000006], + "to_right_leg": [28.740000000000002], + "to_right_foot": [28.740000000000006], + "r_t_head": [0.10672313658551216], + "r_t_neck": [0.10672313658551216], + "r_t_chest": [0.13717325696488264], + "r_t_back": [0.14285619513017847], + "r_t_pelvis": [0.1394689899674413], + "r_t_left_shoulder": [0.12254833363429628], + "r_t_left_arm": [0.1253125937355253], + "r_t_left_hand": [0.12690295796309356], + "r_t_right_shoulder": [0.12254833363429628], + "r_t_right_arm": [0.1253125937355253], + "r_t_right_hand": [0.12690295796309356], + "r_t_left_thigh": [0.13209928477724722], + "r_t_left_leg": [0.13549972302004282], + "r_t_left_foot": [0.12224778800797387], + "r_t_right_thigh": [0.13209928477724722], + "r_t_right_leg": [0.13549972302004282], + "r_t_right_foot": [0.12224778800797387], + "r_et_head": [0.013528355789463922], + "r_et_neck": [0.013528355789463922], + "r_et_chest": [0.020406408732928746], + "r_et_back": [0.020827159428453052], + "r_et_pelvis": [0.021265625942736274], + "r_et_left_shoulder": [0.01678865206005495], + "r_et_left_arm": [0.017072403925858702], + "r_et_left_hand": [0.016514178184413728], + "r_et_right_shoulder": [0.01678865206005495], + "r_et_right_arm": [0.017072403925858702], + "r_et_right_hand": [0.016514178184413728], + "r_et_left_thigh": [0.021645369263142287], + "r_et_left_leg": [0.029709330361175675], + "r_et_left_foot": [0.029709330361175675], + "r_et_right_thigh": [0.021645369263142287], + "r_et_right_leg": [0.029709330361175675], + "r_et_right_foot": [0.029709330361175675], + "tdb_head": [28.740000000000006], + "tdb_neck": [28.740000000000006], + "tdb_chest": [28.740000000000006], + "tdb_back": [28.740000000000006], + "tdb_pelvis": [28.740000000000006], + "tdb_left_shoulder": [28.740000000000006], + "tdb_left_arm": [28.740000000000006], + "tdb_left_hand": [28.740000000000006], + "tdb_right_shoulder": [28.740000000000006], + "tdb_right_arm": [28.740000000000006], + "tdb_right_hand": [28.740000000000006], + "tdb_left_thigh": [28.740000000000006], + "tdb_left_leg": [28.740000000000006], + "tdb_left_foot": [28.740000000000006], + "tdb_right_thigh": [28.740000000000006], + "tdb_right_leg": [28.740000000000006], + "tdb_right_foot": [28.740000000000006], + "tr_head": [28.740000000000006], + "tr_neck": [28.740000000000006], + "tr_chest": [28.740000000000006], + "tr_back": [28.740000000000006], + "tr_pelvis": [28.740000000000006], + "tr_left_shoulder": [28.740000000000006], + "tr_left_arm": [28.740000000000006], + "tr_left_hand": [28.740000000000006], + "tr_right_shoulder": [28.740000000000006], + "tr_right_arm": [28.740000000000006], + "tr_right_hand": [28.740000000000006], + "tr_left_thigh": [28.740000000000006], + "tr_left_leg": [28.740000000000006], + "tr_left_foot": [28.740000000000006], + "tr_right_thigh": [28.740000000000006], + "tr_right_leg": [28.740000000000006], + "tr_right_foot": [28.740000000000006], + "rh_head": [50], + "rh_neck": [50], + "rh_chest": [50], + "rh_back": [50], + "rh_pelvis": [50], + "rh_left_shoulder": [50], + "rh_left_arm": [50], + "rh_left_hand": [50], + "rh_right_shoulder": [50], + "rh_right_arm": [50], + "rh_right_hand": [50], + "rh_left_thigh": [50], + "rh_left_leg": [50], + "rh_left_foot": [50], + "rh_right_thigh": [50], + "rh_right_leg": [50], + "rh_right_foot": [50], + "v_head": [0.1], + "v_neck": [0.1], + "v_chest": [0.1], + "v_back": [0.1], + "v_pelvis": [0.1], + "v_left_shoulder": [0.1], + "v_left_arm": [0.1], + "v_left_hand": [0.1], + "v_right_shoulder": [0.1], + "v_right_arm": [0.1], + "v_right_hand": [0.1], + "v_left_thigh": [0.1], + "v_left_leg": [0.1], + "v_left_foot": [0.1], + "v_right_thigh": [0.1], + "v_right_leg": [0.1], + "v_right_foot": [0.1], + "par": [1.25], + "clo_head": [0], + "clo_neck": [0], + "clo_chest": [0], + "clo_back": [0], + "clo_pelvis": [0], + "clo_left_shoulder": [0], + "clo_left_arm": [0], + "clo_left_hand": [0], + "clo_right_shoulder": [0], + "clo_right_arm": [0], + "clo_right_hand": [0], + "clo_left_thigh": [0], + "clo_left_leg": [0], + "clo_left_foot": [0], + "clo_right_thigh": [0], + "clo_right_leg": [0], + "clo_right_foot": [0], + "e_skin_head": [1.7798364861882476], + "e_skin_neck": [0.4740753064040876], + "e_skin_chest": [1.8186044970504518], + "e_skin_back": [1.626329724149269], + "e_skin_pelvis": [2.444774422413006], + "e_skin_left_shoulder": [1.174792023567054], + "e_skin_left_arm": [0.7321337199579199], + "e_skin_left_hand": [0.6250902468199633], + "e_skin_right_shoulder": [1.1747920235670604], + "e_skin_right_arm": [0.7321337199579199], + "e_skin_right_hand": [0.6250902468199668], + "e_skin_left_thigh": [1.966050689034695], + "e_skin_left_leg": [0.7543232350442859], + "e_skin_left_foot": [0.3826793911046459], + "e_skin_right_thigh": [1.9660506890347005], + "e_skin_right_leg": [0.7543232350442964], + "e_skin_right_foot": [0.38267939110464805], + "e_max_head": [29.663941436470793], + "e_max_neck": [7.901255106734794], + "e_max_chest": [30.310074950840864], + "e_max_back": [27.105495402487815], + "e_max_pelvis": [40.7462403735501], + "e_max_left_shoulder": [19.5798670594509], + "e_max_left_arm": [12.20222866596533], + "e_max_left_hand": [10.418170780332721], + "e_max_right_shoulder": [19.579867059451008], + "e_max_right_arm": [12.20222866596533], + "e_max_right_hand": [10.418170780332781], + "e_max_left_thigh": [32.76751148391158], + "e_max_left_leg": [12.572053917404766], + "e_max_left_foot": [6.377989851744098], + "e_max_right_thigh": [32.767511483911676], + "e_max_right_leg": [12.572053917404942], + "e_max_right_foot": [6.377989851744134], + "e_sweat_head": [0], + "e_sweat_neck": [0], + "e_sweat_chest": [0], + "e_sweat_back": [0], + "e_sweat_pelvis": [0], + "e_sweat_left_shoulder": [0], + "e_sweat_left_arm": [0], + "e_sweat_left_hand": [0], + "e_sweat_right_shoulder": [0], + "e_sweat_right_arm": [0], + "e_sweat_right_hand": [0], + "e_sweat_left_thigh": [0], + "e_sweat_left_leg": [0], + "e_sweat_left_foot": [0], + "e_sweat_right_thigh": [0], + "e_sweat_right_leg": [0], + "e_sweat_right_foot": [0], + "bf_core_head": [35.30423941882337], + "bf_core_neck": [15.263016900027468], + "bf_core_chest": [91.06934530172512], + "bf_core_back": [89.30801751498808], + "bf_core_pelvis": [18.714221377553365], + "bf_core_left_shoulder": [2.3061138276396864], + "bf_core_left_arm": [1.204237489450689], + "bf_core_left_hand": [0.3118665153305683], + "bf_core_right_shoulder": [2.3061138276396864], + "bf_core_right_arm": [1.204237489450689], + "bf_core_right_hand": [0.3118665153305683], + "bf_core_left_thigh": [5.208582481626051], + "bf_core_left_leg": [2.036115557281899], + "bf_core_left_foot": [0.1746596048775655], + "bf_core_right_thigh": [5.208582481626051], + "bf_core_right_leg": [2.036115557281899], + "bf_core_right_foot": [0.1746596048775655], + "bf_muscle_head": [0.683030021379182], + "bf_muscle_pelvis": [15.072151421017685], + "bf_fat_head": [0.2654002282485091], + "bf_fat_pelvis": [2.2223513452205346], + "bf_skin_head": [1.756649057916547], + "bf_skin_neck": [0.3254908459651527], + "bf_skin_chest": [1.9699707508106319], + "bf_skin_back": [1.4772276855341546], + "bf_skin_pelvis": [2.2754313908702364], + "bf_skin_left_shoulder": [0.9113743687024276], + "bf_skin_left_arm": [0.5087672300009156], + "bf_skin_left_hand": [1.1156824689390157], + "bf_skin_right_shoulder": [0.9113743687024276], + "bf_skin_right_arm": [0.5087672300009156], + "bf_skin_right_hand": [1.1156824689390157], + "bf_skin_left_thigh": [1.458198989923884], + "bf_skin_left_leg": [0.6519832022255828], + "bf_skin_left_foot": [0.935410615789085], + "bf_skin_right_thigh": [1.458198989923884], + "bf_skin_right_leg": [0.6519832022255828], + "bf_skin_right_foot": [0.935410615789085], + "bf_ava_hand": [0], + "bf_ava_foot": [0], + "q_bmr_core_head": [17.1968410354608], + "q_bmr_core_neck": [0.28498677793919996], + "q_bmr_core_chest": [25.234523679931197], + "q_bmr_core_back": [22.5852021516816], + "q_bmr_core_pelvis": [8.364010096987199], + "q_bmr_core_left_shoulder": [1.262209957848], + "q_bmr_core_left_arm": [0.3597518277072], + "q_bmr_core_left_hand": [0.0932364150048], + "q_bmr_core_right_shoulder": [1.262209957848], + "q_bmr_core_right_arm": [0.3597518277072], + "q_bmr_core_right_hand": [0.0932364150048], + "q_bmr_core_left_thigh": [1.3695197939855999], + "q_bmr_core_left_leg": [0.37118648237759994], + "q_bmr_core_left_foot": [0.2198972052], + "q_bmr_core_right_thigh": [1.3695197939855999], + "q_bmr_core_right_leg": [0.37118648237759994], + "q_bmr_core_right_foot": [0.2198972052], + "q_bmr_muscle_head": [0.2216563828416], + "q_bmr_muscle_pelvis": [4.2255446951232], + "q_bmr_fat_head": [0.1117077802416], + "q_bmr_fat_pelvis": [0.8356093797599999], + "q_bmr_skin_head": [0.1336975007616], + "q_bmr_skin_neck": [0.029026431086399997], + "q_bmr_skin_chest": [0.18559324118879997], + "q_bmr_skin_back": [0.1644831094896], + "q_bmr_skin_pelvis": [0.26387664624], + "q_bmr_skin_left_shoulder": [0.0518957404272], + "q_bmr_skin_left_arm": [0.027267253444799997], + "q_bmr_skin_left_hand": [0.0518957404272], + "q_bmr_skin_right_shoulder": [0.0518957404272], + "q_bmr_skin_right_arm": [0.027267253444799997], + "q_bmr_skin_right_hand": [0.0518957404272], + "q_bmr_skin_left_thigh": [0.1266607901952], + "q_bmr_skin_left_leg": [0.023748898161599998], + "q_bmr_skin_left_foot": [0.1037914808544], + "q_bmr_skin_right_thigh": [0.1266607901952], + "q_bmr_skin_right_leg": [0.023748898161599998], + "q_bmr_skin_right_foot": [0.1037914808544], + "q_work_head": [0], + "q_work_neck": [0], + "q_work_chest": [2.0010645673200003], + "q_work_back": [1.7591776416000002], + "q_work_pelvis": [2.8366739470800004], + "q_work_left_shoulder": [0.576130677624], + "q_work_left_arm": [0.305657115228], + "q_work_left_hand": [0.10994860260000001], + "q_work_right_shoulder": [0.576130677624], + "q_work_right_arm": [0.305657115228], + "q_work_right_hand": [0.10994860260000001], + "q_work_left_thigh": [4.419933824520001], + "q_work_left_leg": [2.1769823314800005], + "q_work_left_foot": [0.10994860260000001], + "q_work_right_thigh": [4.419933824520001], + "q_work_right_leg": [2.1769823314800005], + "q_work_right_foot": [0.10994860260000001], + "q_shiv_head": [0], + "q_shiv_neck": [0], + "q_shiv_chest": [0], + "q_shiv_back": [0], + "q_shiv_pelvis": [0], + "q_shiv_left_shoulder": [0], + "q_shiv_left_arm": [0], + "q_shiv_left_hand": [0], + "q_shiv_right_shoulder": [0], + "q_shiv_right_arm": [0], + "q_shiv_right_hand": [0], + "q_shiv_left_thigh": [0], + "q_shiv_left_leg": [0], + "q_shiv_left_foot": [0], + "q_shiv_right_thigh": [0], + "q_shiv_right_leg": [0], + "q_shiv_right_foot": [0], + "q_nst_head": [0], + "q_nst_neck": [0], + "q_nst_chest": [0], + "q_nst_back": [0], + "q_nst_pelvis": [0], + "q_nst_left_shoulder": [0], + "q_nst_left_arm": [0], + "q_nst_left_hand": [0], + "q_nst_right_shoulder": [0], + "q_nst_right_arm": [0], + "q_nst_right_hand": [0], + "q_nst_left_thigh": [0], + "q_nst_left_leg": [0], + "q_nst_left_foot": [0], + "q_nst_right_thigh": [0], + "q_nst_right_leg": [0], + "q_nst_right_foot": [0], + "q_thermogenesis_core_head": [17.1968410354608], + "q_thermogenesis_core_neck": [0.28498677793919996], + "q_thermogenesis_core_chest": [27.235588247251197], + "q_thermogenesis_core_back": [24.3443797932816], + "q_thermogenesis_core_pelvis": [8.364010096987199], + "q_thermogenesis_core_left_shoulder": [1.838340635472], + "q_thermogenesis_core_left_arm": [0.6654089429351999], + "q_thermogenesis_core_left_hand": [0.2031850176048], + "q_thermogenesis_core_right_shoulder": [1.838340635472], + "q_thermogenesis_core_right_arm": [0.6654089429351999], + "q_thermogenesis_core_right_hand": [0.2031850176048], + "q_thermogenesis_core_left_thigh": [5.7894536185056005], + "q_thermogenesis_core_left_leg": [2.5481688138576004], + "q_thermogenesis_core_left_foot": [0.3298458078], + "q_thermogenesis_core_right_thigh": [5.7894536185056005], + "q_thermogenesis_core_right_leg": [2.5481688138576004], + "q_thermogenesis_core_right_foot": [0.3298458078], + "q_thermogenesis_muscle_head": [0.2216563828416], + "q_thermogenesis_muscle_pelvis": [7.0622186422032005], + "q_thermogenesis_fat_head": [0.1117077802416], + "q_thermogenesis_fat_pelvis": [0.8356093797599999], + "q_thermogenesis_skin_head": [0.1336975007616], + "q_thermogenesis_skin_neck": [0.029026431086399997], + "q_thermogenesis_skin_chest": [0.18559324118879997], + "q_thermogenesis_skin_back": [0.1644831094896], + "q_thermogenesis_skin_pelvis": [0.26387664624], + "q_thermogenesis_skin_left_shoulder": [0.0518957404272], + "q_thermogenesis_skin_left_arm": [0.027267253444799997], + "q_thermogenesis_skin_left_hand": [0.0518957404272], + "q_thermogenesis_skin_right_shoulder": [0.0518957404272], + "q_thermogenesis_skin_right_arm": [0.027267253444799997], + "q_thermogenesis_skin_right_hand": [0.0518957404272], + "q_thermogenesis_skin_left_thigh": [0.1266607901952], + "q_thermogenesis_skin_left_leg": [0.023748898161599998], + "q_thermogenesis_skin_left_foot": [0.1037914808544], + "q_thermogenesis_skin_right_thigh": [0.1266607901952], + "q_thermogenesis_skin_right_leg": [0.023748898161599998], + "q_thermogenesis_skin_right_foot": [0.1037914808544] +} diff --git a/tests/models/1_run_getters.json b/tests/models/1_run_getters.json new file mode 100644 index 0000000..7a277c0 --- /dev/null +++ b/tests/models/1_run_getters.json @@ -0,0 +1,198 @@ +[ + { + "property": "tdb", + "expected": [ + 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, + 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74 + ] + }, + { + "property": "tr", + "expected": [ + 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, + 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74 + ] + }, + { + "property": "to", + "expected": [ + 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, + 28.74, 28.74, 28.74, 28.74, 28.74, 28.74, 28.74 + ] + }, + { + "property": "rh", + "expected": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + ] + }, + { + "property": "v", + "expected": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1 + ] + }, + { + "property": "posture", + "expected": "standing" + }, + { + "property": "clo", + "expected": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + { + "property": "par", + "expected": 1.25 + }, + { + "property": "body_temp", + "expected": [ + 36.895787875645865, 36.895787875492054, 37.1286294916478, + 37.27948664648618, 35.56525956589897, 35.26754117907478, + 34.98583652881713, 36.895787875621906, 37.027843684904795, + 36.81782751853464, 35.10668504573099, 36.89578787557957, + 36.99530423285108, 37.046763146185384, 34.61642143810777, + 36.89578787558303, 37.06467699338318, 37.10669294345571, + 34.52453966623942, 36.89578787541572, 36.63899228469504, + 37.25856827899341, 36.895467897913086, 36.10705391945993, + 35.844809578238284, 36.76002456078816, 35.6010834945116, + 34.25228779728972, 36.25197837683718, 34.25228779730484, + 36.52923955995219, 35.21468563979818, 33.85708745709104, + 35.71685683735247, 33.857087457104285, 35.54000358081729, + 34.845270389463906, 34.30815650782096, 34.90385741306187, + 34.308156507844046, 36.76002456078817, 35.601083494511684, + 34.252287797289775, 36.25197837683733, 34.2522877973049, + 36.52923955995221, 35.214685639798226, 33.85708745709107, + 35.7168568373525, 33.8570874571043, 35.54000358081734, 34.845270389463955, + 34.308156507821, 34.903857413061935, 34.308156507844096, + 36.826782304371214, 36.04313378500564, 34.150234070220854, + 36.67563450105145, 34.15023407024665, 36.67336731935297, 35.6160489275908, + 33.95264011539343, 36.32476524669076, 33.95264011542674, 35.2246369283959, + 34.635772634243736, 34.116931747802035, 34.602386529646225, + 34.11693174783236, 36.826782304371235, 36.04313378500574, + 34.15023407022093, 36.675634501051476, 34.15023407024672, + 36.673367319353034, 35.61604892759106, 33.95264011539362, + 36.32476524669116, 33.95264011542693, 35.22463692839595, + 34.63577263424378, 34.11693174780209, 34.602386529646274, + 34.11693174783242 + ] + }, + { + "property": "bsa", + "expected": [ + 0.11005713796319246, 0.02901506364484165, 0.1750909013050789, + 0.1610836292006726, 0.22111479536241394, 0.09604986585878615, + 0.06303272446982841, 0.05002597180145112, 0.09604986585878615, + 0.06303272446982841, 0.05002597180145112, 0.20910856213006568, + 0.1120581768352505, 0.05602908841762525, 0.20910856213006568, + 0.1120581768352505, 0.05602908841762525 + ] + }, + { + "property": "r_t", + "expected": [ + 0.10672313658551216, 0.10672313658551216, 0.13717325696488264, + 0.14285619513017847, 0.1394689899674413, 0.12254833363429628, + 0.1253125937355253, 0.12690295796309356, 0.12254833363429628, + 0.1253125937355253, 0.12690295796309356, 0.13209928477724722, + 0.13549972302004282, 0.12224778800797387, 0.13209928477724722, + 0.13549972302004282, 0.12224778800797387 + ] + }, + { + "property": "r_et", + "expected": [ + 0.013528355789463922, 0.013528355789463922, 0.020406408732928746, + 0.020827159428453052, 0.021265625942736274, 0.01678865206005495, + 0.017072403925858702, 0.016514178184413728, 0.01678865206005495, + 0.017072403925858702, 0.016514178184413728, 0.021645369263142287, + 0.029709330361175675, 0.029709330361175675, 0.021645369263142287, + 0.029709330361175675, 0.029709330361175675 + ] + }, + { + "property": "w", + "expected": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06 + ] + }, + { + "property": "w_mean", + "expected": 0.05999999999999999 + }, + { + "property": "t_skin_mean", + "expected": 34.46418466255792 + }, + { + "property": "t_skin", + "expected": [ + 34.98583652881713, 35.10668504573099, 34.61642143810777, + 34.52453966623942, 35.844809578238284, 34.25228779730484, + 33.857087457104285, 34.308156507844046, 34.2522877973049, + 33.8570874571043, 34.308156507844096, 34.15023407024665, + 33.95264011542674, 34.11693174783236, 34.15023407024672, + 33.95264011542693, 34.11693174783242 + ] + }, + { + "property": "t_core", + "expected": [ + 37.27948664648618, 36.81782751853464, 37.046763146185384, + 37.10669294345571, 37.25856827899341, 36.25197837683718, + 35.71685683735247, 34.90385741306187, 36.25197837683733, 35.7168568373525, + 34.903857413061935, 36.67563450105145, 36.32476524669076, + 34.602386529646225, 36.675634501051476, 36.32476524669116, + 34.602386529646274 + ] + }, + { + "property": "t_cb", + "expected": 36.895787875645865 + }, + { + "property": "t_artery", + "expected": [ + 36.895787875492054, 36.895787875621906, 36.89578787557957, + 36.89578787558303, 36.89578787541572, 36.76002456078816, + 36.52923955995219, 35.54000358081729, 36.76002456078817, + 36.52923955995221, 35.54000358081734, 36.826782304371214, + 36.67336731935297, 35.2246369283959, 36.826782304371235, + 36.673367319353034, 35.22463692839595 + ] + }, + { + "property": "t_vein", + "expected": [ + 37.1286294916478, 37.027843684904795, 36.99530423285108, + 37.06467699338318, 36.63899228469504, 35.6010834945116, 35.21468563979818, + 34.845270389463906, 35.601083494511684, 35.214685639798226, + 34.845270389463955, 36.04313378500564, 35.6160489275908, + 34.635772634243736, 36.04313378500574, 35.61604892759106, + 34.63577263424378 + ] + }, + { + "property": "t_superficial_vein", + "expected": [ + 34.25228779728972, 33.85708745709104, 34.30815650782096, + 34.252287797289775, 33.85708745709107, 34.308156507821, + 34.150234070220854, 33.95264011539343, 34.116931747802035, + 34.15023407022093, 33.95264011539362, 34.11693174780209 + ] + }, + { + "property": "t_muscle", + "expected": [35.56525956589897, 36.895467897913086] + }, + { + "property": "t_fat", + "expected": [35.26754117907478, 36.10705391945993] + }, + { + "property": "bmr", + "expected": 47.062749886388204 + } +] diff --git a/tests/models/1_run_setters.json b/tests/models/1_run_setters.json new file mode 100644 index 0000000..b06a52e --- /dev/null +++ b/tests/models/1_run_setters.json @@ -0,0 +1,153 @@ +[ + { + "property": "tdb", + "operations": [ + { + "next": 30, + "expected": [ + 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + 30.0, 30.0, 30.0, 30.0, 30.0, 30.0 + ] + } + ] + }, + { + "property": "tr", + "operations": [ + { + "next": 30, + "expected": [ + 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + 30.0, 30.0, 30.0, 30.0, 30.0, 30.0 + ] + } + ] + }, + { + "property": "to", + "operations": [ + { + "next": 30, + "expected": [ + 30.0, 30.0, 30.0, 30.0, 29.999999999999996, 30.0, 30.0, 30.0, 30.0, + 30.0, 30.0, 30.000000000000004, 29.999999999999996, + 30.000000000000004, 30.000000000000004, 29.999999999999996, + 30.000000000000004 + ] + } + ] + }, + { + "property": "rh", + "operations": [ + { + "next": 55, + "expected": [ + 55.0, 55.0, 55.0, 55.0, 55.0, 55.0, 55.0, 55.0, 55.0, 55.0, 55.0, + 55.0, 55.0, 55.0, 55.0, 55.0, 55.0 + ] + } + ] + }, + { + "property": "v", + "operations": [ + { + "next": 0.2, + "expected": [ + 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, + 0.2, 0.2, 0.2 + ] + } + ] + }, + { + "property": "posture", + "operations": [ + { + "next": 0, + "expected": "standing" + }, + { + "next": 1, + "expected": "sitting" + }, + { + "next": 2, + "expected": "lying" + }, + { + "next": "standing", + "expected": "standing" + }, + { + "next": "sitting", + "expected": "sitting" + }, + { + "next": "sedentary", + "expected": "sitting" + }, + { + "next": "lying", + "expected": "lying" + }, + { + "next": "supine", + "expected": "lying" + }, + { + "next": "invalid", + "expected": "standing" + } + ] + }, + { + "property": "clo", + "operations": [ + { + "next": 1, + "expected": [ + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0 + ] + } + ] + }, + { + "property": "par", + "operations": [ + { + "next": 2, + "expected": 2 + } + ] + }, + { + "property": "body_temp", + "operations": [ + { + "next": [ + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0 + ], + "expected": [ + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, + 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0, 39.0 + ] + } + ] + } +] diff --git a/tests/models/20_runs_dict.json b/tests/models/20_runs_dict.json new file mode 100644 index 0000000..cb3d6ee --- /dev/null +++ b/tests/models/20_runs_dict.json @@ -0,0 +1,4425 @@ +{ + "cycle_time": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 + ], + "simulation_time": [ + 0, 60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 780, 840, 900, + 960, 1020, 1080, 1140, 1200 + ], + "dt": [ + 60000, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60 + ], + "t_skin_mean": [ + 34.46418466255792, 34.50200377457901, 34.53481770883918, 34.562377719519596, + 34.585832531023435, 34.60597175567888, 34.623333155933516, + 34.63831533109444, 34.651236059295535, 34.66236075522505, + 34.671916852693265, 34.6801018333704, 34.68708812697866, 34.69302667136831, + 34.69804972930735, 34.70227323662271, 34.70579881601525, 34.70871552767136, + 34.71110140057751, 34.71302477597447, 34.71454548781212 + ], + "t_skin_head": [ + 34.98583652881713, 34.98307373366633, 34.979256550758706, + 34.975133233037795, 34.97092325599912, 34.96669450363934, 34.96248199257596, + 34.958313935248604, 34.954214967111405, 34.95020543875238, + 34.94630097120286, 34.942512984175856, 34.93884874369229, + 34.935312069694454, 34.93190410004343, 34.92862396058083, 34.92546931319322, + 34.92243678889787, 34.91952232269456, 34.91672140828449, 34.91402928915587 + ], + "t_skin_neck": [ + 35.10668504573099, 35.10242707056415, 35.096005220310246, 35.08873775530712, + 35.08137742340358, 35.07432934404725, 35.06778768308863, 35.061819869965284, + 35.056422080210005, 35.05155380745369, 35.047158790175786, + 35.043177715727566, 35.039553305181556, 35.03623362576537, + 35.03317335460706, 35.03033389751247, 35.02768291740276, 35.025193602360424, + 35.0228438615317, 35.0206155497635, 35.01849376939635 + ], + "t_skin_chest": [ + 34.61642143810777, 34.61405566109266, 34.61054752010949, 34.606524854020066, + 34.60227499163232, 34.59794310237793, 34.593611362388216, 34.58933043000073, + 34.58513312644687, 34.581041087695056, 34.577068392512736, + 34.573223780823064, 34.56951207831748, 34.565935202262864, + 34.56249290420963, 34.55918333218689, 34.55600346277417, 34.55294943602201, + 34.55001681601364, 34.54720079354826, 34.54449634328268 + ], + "t_skin_back": [ + 34.52453966623942, 34.52251641756024, 34.519458159138644, + 34.515882366030304, 34.51203716416295, 34.50805696178314, + 34.504024226865404, 34.49999405621548, 34.496005052901, 34.492084786917125, + 34.48825291898337, 34.48452323845514, 34.480905000663334, + 34.477403946845705, 34.47402309104474, 34.470763338969505, + 34.46762397994921, 34.46460308008442, 34.461697796943, 34.45890463119348, + 34.45621962718924 + ], + "t_skin_pelvis": [ + 35.844809578238284, 35.843570103081106, 35.84179643363774, 35.8398404421914, + 35.83781140783365, 35.83573637435437, 35.83362234583551, 35.831473512048525, + 35.82929451813039, 35.8270904467694, 35.82486639235036, 35.82262721212673, + 35.82037738382994, 35.81812097060357, 35.81586163651096, 35.813602679820185, + 35.81134706953962, 35.80909747967805, 35.80685631959569, 35.80462576034991, + 35.80240775746779 + ], + "t_skin_left_shoulder": [ + 34.25228779730484, 34.226111292795764, 34.22498090167761, 34.23792402233953, + 34.25731205093426, 34.27866830647247, 34.29955799095006, 34.31879068640317, + 34.335897248366486, 34.35080347662954, 34.36363480919206, + 34.374604201555485, 34.38395006711768, 34.391904524167344, + 34.398678743401874, 34.40445769064332, 34.40939975960694, 34.41363873511101, + 34.41728668146612, 34.420437020037234, 34.42316743830425 + ], + "t_skin_left_arm": [ + 33.857087457104285, 34.0144756159171, 34.151066758912854, + 34.261201825735576, 34.34850756154734, 34.417587031750976, + 34.47253921424892, 34.516638394112384, 34.55238280288272, + 34.581644562331824, 34.605822579094074, 34.62596835008299, + 34.642880733350495, 34.65717453818673, 34.66932927890058, + 34.679723687539415, 34.68866026914556, 34.69638296995631, + 34.703090084450345, 34.708943847726616, 34.71407769118991 + ], + "t_skin_left_hand": [ + 34.308156507844046, 34.60391083423109, 34.81032172136142, 34.95495090914459, + 35.061983050754904, 35.144689161245005, 35.21045899738069, + 35.26369030185093, 35.307216717408615, 35.34300881513249, + 35.372525237427865, 35.39689537135576, 35.41701970516441, + 35.433629262552095, 35.44732380278901, 35.45859836740903, + 35.467862939333756, 35.47545767940314, 35.481665089959996, + 35.48671990163716, 35.49081719409654 + ], + "t_skin_right_shoulder": [ + 34.2522877973049, 34.22611129279582, 34.22498090167767, 34.23792402233958, + 34.25731205093435, 34.27866830647255, 34.29955799095013, 34.31879068640322, + 34.33589724836653, 34.35080347662957, 34.36363480919207, 34.37460420155553, + 34.38395006711772, 34.39190452416738, 34.3986787434019, 34.40445769064335, + 34.40939975960697, 34.41363873511105, 34.41728668146616, 34.420437020037255, + 34.42316743830425 + ], + "t_skin_right_arm": [ + 33.8570874571043, 34.01447561591712, 34.15106675891288, 34.261201825735604, + 34.34850756154737, 34.41758703175101, 34.472539214248954, 34.51663839411242, + 34.55238280288276, 34.58164456233187, 34.60582257909411, 34.62596835008303, + 34.64288073335053, 34.65717453818676, 34.669329278900605, + 34.679723687539436, 34.68866026914557, 34.69638296995632, 34.70309008445035, + 34.708943847726616, 34.714077691189935 + ], + "t_skin_right_hand": [ + 34.308156507844096, 34.60391083423112, 34.810321721361454, + 34.95495090914463, 35.06198305075493, 35.144689161245054, 35.21045899738075, + 35.26369030185098, 35.30721671740866, 35.34300881513253, 35.3725252374279, + 35.39689537135579, 35.41701970516442, 35.43362926255209, 35.447323802789, + 35.458598367409046, 35.46786293933376, 35.475457679403156, + 35.481665089959996, 35.486719901637166, 35.490817194096536 + ], + "t_skin_left_thigh": [ + 34.15023407024665, 34.14256094297054, 34.13757326156289, 34.13522387218274, + 34.13503886322679, 34.136509038847144, 34.139165915636035, + 34.14261222834433, 34.14652775005218, 34.15066349005746, 34.15483168237562, + 34.158895094444084, 34.16275711065991, 34.166353104557295, + 34.16964320794743, 34.172606382240524, 34.17523563532372, 34.17753421339303, + 34.179512605218136, 34.18118621324744, 34.182573565551166 + ], + "t_skin_left_leg": [ + 33.95264011542674, 33.988793361654956, 34.03149480229148, 34.07493413605592, + 34.11673109648718, 34.15580414938111, 34.191709013210094, + 34.224331445712764, 34.253731884363965, 34.28006316898701, + 34.303525050634946, 34.32433808346747, 34.3427282266701, 34.35891753351799, + 34.373118622375685, 34.385531502915825, 34.396341925981254, + 34.40572073554236, 34.413823881143934, 34.420792859799356, 34.42675542775109 + ], + "t_skin_left_foot": [ + 34.11693174783236, 34.32064385755995, 34.48391197086448, 34.61145645643359, + 34.71493798539507, 34.80159139346036, 34.875641957385405, + 34.939667678520095, 34.99536745262345, 35.04396026542914, 35.08638840249414, + 35.12342133648313, 35.15571019701592, 35.183817652151795, + 35.208235696484195, 35.229397249717394, 35.24768447731809, + 35.26343525875611, 35.276948510905775, 35.288488728379704, 35.29828993562878 + ], + "t_skin_right_thigh": [ + 34.15023407024672, 34.142560942970604, 34.137573261562956, + 34.13522387218282, 34.135038863226846, 34.13650903884718, + 34.139165915636084, 34.14261222834437, 34.14652775005219, 34.15066349005749, + 34.15483168237563, 34.15889509444407, 34.16275711065988, 34.16635310455728, + 34.16964320794738, 34.17260638224049, 34.17523563532371, 34.17753421339303, + 34.17951260521814, 34.181186213247464, 34.182573565551195 + ], + "t_skin_right_leg": [ + 33.95264011542693, 33.98879336165513, 34.03149480229166, 34.07493413605609, + 34.11673109648733, 34.15580414938126, 34.191709013210215, 34.22433144571287, + 34.253731884364065, 34.28006316898713, 34.30352505063506, 34.32433808346755, + 34.34272822667021, 34.35891753351811, 34.373118622375785, 34.38553150291592, + 34.39634192598134, 34.40572073554245, 34.41382388114404, 34.42079285979944, + 34.42675542775119 + ], + "t_skin_right_foot": [ + 34.11693174783242, 34.32064385755998, 34.48391197086451, 34.61145645643361, + 34.71493798539508, 34.801591393460384, 34.875641957385426, + 34.93966767852012, 34.99536745262346, 35.04396026542914, 35.08638840249416, + 35.12342133648315, 35.15571019701596, 35.18381765215184, 35.2082356964842, + 35.2293972497174, 35.24768447731811, 35.263435258756125, 35.276948510905804, + 35.28848872837974, 35.29828993562883 + ], + "t_core_head": [ + 37.27948664648618, 37.27175634448584, 37.2612849237557, 37.25080015921994, + 37.241237256983936, 37.23278827341199, 37.22538434583353, + 37.218881952014215, 37.213130999490616, 37.20799765467356, + 37.20336994233451, 37.199157057688936, 37.195286412901645, + 37.19170037688638, 37.188353300601335, 37.18520900089117, 37.18223871211453, + 37.17941945492557, 37.176732754665366, 37.17416364295725, 37.171699884078876 + ], + "t_core_neck": [ + 36.81782751853464, 36.807108097692115, 36.7945692732138, 36.783042484124934, + 36.77313063284587, 36.764751434108014, 36.757656156950034, + 36.75157927180215, 36.746296540197235, 36.741631598303506, + 36.737450525395275, 36.7336566988725, 36.73017277584211, 36.72694070843151, + 36.723916688563264, 36.721067389914104, 36.71836720779894, 36.7157962439072, + 36.71333883777416, 36.710982495978904, 36.708717109454966 + ], + "t_core_chest": [ + 37.046763146185384, 37.042431237471774, 37.03633157773878, + 37.02969690507674, 37.02303152572924, 37.01654497347656, 37.01032430665653, + 37.004402088008675, 36.99878493299856, 36.99346660894207, 36.98843448129407, + 36.98367295448963, 36.979165209768944, 36.974894251474446, + 36.97084349745997, 36.966997112177744, 36.9633401826951, 36.95985879732207, + 36.95654006355739, 36.953372088541734, 36.95034393696186 + ], + "t_core_back": [ + 37.10669294345571, 37.102067944580085, 37.09561553369468, + 37.088652953115044, 37.081710095999995, 37.075001238202084, + 37.0686110479043, 37.0625660512073, 37.05686617359801, 37.05149872223646, + 37.0464452392689, 37.0416854099776, 37.03719786824737, 37.032961732436206, + 37.028957135980605, 37.02516549315961, 37.02156960767231, 37.01815368750941, + 37.0149033046256, 37.011805323281536, 37.008847812053304 + ], + "t_core_pelvis": [ + 37.25856827899341, 37.25667326288046, 37.25365189212044, 37.250081242022716, + 37.246255436438126, 37.24231892805986, 37.23834748880571, 37.23438275851757, + 37.23044991433103, 37.2265651368969, 37.22273932743044, 37.21898056839966, + 37.2152938489851, 37.21168247386069, 37.20814850901312, 37.204693090660854, + 37.201316647067486, 37.1980190622694, 37.19479979957939, 37.19165799636606, + 37.18859253780237 + ], + "t_core_left_shoulder": [ + 36.25197837683718, 36.25163254171589, 36.25111777457895, 36.25076040956617, + 36.250702158791825, 36.250975588751515, 36.25156361582233, + 36.252422835581285, 36.25350325693641, 36.25475607491828, 36.25613741544938, + 36.25761123671397, 36.25914526117936, 36.26071277847757, 36.26229201183523, + 36.263865429929446, 36.265419087308885, 36.26694203010375, + 36.26842577897906, 36.269863888731614, 36.27125157813384 + ], + "t_core_left_arm": [ + 35.71685683735247, 35.72105811154186, 35.72742148577002, 35.73536288644532, + 35.74447186657737, 35.754412402145384, 35.764916450390835, + 35.775774945686585, 35.78682645354081, 35.797946711374244, + 35.809040140888996, 35.8200333268525, 35.830870006827006, 35.84150734339261, + 35.85191307456846, 35.86206332495888, 35.87194090433612, 35.881533969806185, + 35.89083496303773, 35.89983975873338, 35.90854697768445 + ], + "t_core_left_hand": [ + 34.90385741306187, 35.018230333042155, 35.144302581581144, 35.2624677860725, + 35.36706241916058, 35.45710646578592, 35.533468639091204, + 35.597674702790606, 35.65138285762139, 35.69616285352497, 35.73341490355945, + 35.76435151155888, 35.79000592812759, 35.81125073695176, 35.8288189345306, + 35.84332427040054, 35.85527959325274, 35.86511285730616, 35.87318083939555, + 35.87978077442229, 35.8851601645937 + ], + "t_core_right_shoulder": [ + 36.25197837683733, 36.251632541716035, 36.251117774579065, + 36.25076040956626, 36.25070215879194, 36.25097558875165, 36.25156361582245, + 36.25242283558141, 36.25350325693652, 36.254756074918376, 36.25613741544948, + 36.25761123671407, 36.25914526117944, 36.260712778477654, 36.26229201183532, + 36.26386542992954, 36.26541908730898, 36.266942030103834, 36.26842577897913, + 36.2698638887317, 36.27125157813394 + ], + "t_core_right_arm": [ + 35.7168568373525, 35.72105811154188, 35.727421485770044, 35.73536288644534, + 35.744471866577385, 35.7544124021454, 35.76491645039085, 35.7757749456866, + 35.786826453540826, 35.797946711374266, 35.80904014088902, + 35.820033326852524, 35.83087000682702, 35.841507343392635, + 35.85191307456847, 35.8620633249589, 35.87194090433616, 35.88153396980623, + 35.89083496303777, 35.8998397587334, 35.90854697768447 + ], + "t_core_right_hand": [ + 34.903857413061935, 35.01823033304221, 35.14430258158119, + 35.262467786072534, 35.36706241916062, 35.45710646578595, 35.53346863909124, + 35.59767470279063, 35.65138285762142, 35.69616285352498, 35.733414903559456, + 35.7643515115589, 35.79000592812761, 35.81125073695179, 35.82881893453062, + 35.84332427040055, 35.85527959325275, 35.86511285730618, 35.873180839395566, + 35.8797807744223, 35.88516016459371 + ], + "t_core_left_thigh": [ + 36.67563450105145, 36.67533581586265, 36.674722556551124, 36.67390769812826, + 36.6729840923143, 36.672009612729894, 36.671017849679096, 36.67002792098633, + 36.66905046246341, 36.66809099164531, 36.667151833577016, 36.66623329350054, + 36.66533438088994, 36.66445331154262, 36.66358784705013, 36.662735530861625, + 36.6618938520391, 36.66106035711996, 36.66023272424825, 36.65940880975532, + 36.65858667467481 + ], + "t_core_left_leg": [ + 36.32476524669076, 36.325369951592926, 36.32630462967718, 36.32751997696127, + 36.32901369881283, 36.33077859598824, 36.33279587890345, 36.33503911868902, + 36.33747861206853, 36.34008424486269, 36.34282708533854, 36.345680190423835, + 36.34861893353043, 36.351621107017415, 36.35466688075343, 36.35773868781585, + 36.36082107287872, 36.36390052394865, 36.36696529975448, 36.37000526018857, + 36.3730117041927 + ], + "t_core_left_foot": [ + 34.602386529646225, 34.69298355165398, 34.79993544914067, 34.90534697040026, + 35.00345384384229, 35.09246720221632, 35.1721800890047, 35.24303775028065, + 35.30573557925375, 35.361038972915814, 35.40970265528736, 35.45243603505032, + 35.48989010666365, 35.522654542554776, 35.55125946159779, 35.5761792517235, + 35.597837161527394, 35.61661003823827, 35.632832915376305, + 35.64680331537295, 35.65878521358069 + ], + "t_core_right_thigh": [ + 36.675634501051476, 36.67533581586269, 36.67472255655116, 36.67390769812828, + 36.67298409231433, 36.67200961272993, 36.67101784967914, 36.67002792098636, + 36.66905046246342, 36.668090991645315, 36.66715183357702, 36.66623329350055, + 36.66533438088994, 36.66445331154264, 36.66358784705014, 36.66273553086164, + 36.661893852039114, 36.66106035711997, 36.66023272424826, 36.65940880975531, + 36.65858667467482 + ], + "t_core_right_leg": [ + 36.32476524669116, 36.325369951593316, 36.32630462967758, 36.32751997696165, + 36.3290136988132, 36.33077859598861, 36.3327958789038, 36.335039118689366, + 36.33747861206887, 36.34008424486303, 36.34282708533887, 36.345680190424154, + 36.348618933530744, 36.35162110701772, 36.35466688075372, 36.35773868781615, + 36.360821072879006, 36.363900523948935, 36.366965299754774, + 36.37000526018886, 36.373011704192976 + ], + "t_core_right_foot": [ + 34.602386529646274, 34.69298355165403, 34.79993544914071, 34.9053469704003, + 35.00345384384233, 35.09246720221635, 35.17218008900471, 35.24303775028067, + 35.305735579253785, 35.36103897291583, 35.40970265528737, 35.45243603505032, + 35.48989010666365, 35.522654542554776, 35.55125946159779, 35.57617925172351, + 35.5978371615274, 35.61661003823828, 35.63283291537631, 35.64680331537296, + 35.65878521358072 + ], + "w_mean": [ + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999, + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999, + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999, + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999, + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999, + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999, + 0.05999999999999999, 0.05999999999999999, 0.05999999999999999 + ], + "w_head": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_neck": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_chest": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_back": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_pelvis": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_left_shoulder": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_left_arm": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_left_hand": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_right_shoulder": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_right_arm": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_right_hand": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_left_thigh": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_left_leg": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_left_foot": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_right_thigh": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_right_leg": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "w_right_foot": [ + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06 + ], + "weight_loss_by_evap_and_res": [ + 0.011094527785290931, 0.01109452821902185, 0.011120535859019233, + 0.011142987693708193, 0.011161729448910553, 0.011177581245644783, + 0.011191165556116855, 0.011202800284673462, 0.011212775425482858, + 0.011221325373982231, 0.011228651930594295, 0.011234966018210696, + 0.011240363774282992, 0.011244967801278977, 0.011248884200927588, + 0.011252204861341873, 0.011255009392500251, 0.011257366786407898, + 0.011259336847720448, 0.011260971428133836, 0.011262315491868867 + ], + "cardiac_output": [ + 309.3525279636547, 315.62216020019883, 315.7857657266782, 315.9119498730613, + 316.00773390789794, 316.0829160092727, 316.14388002324677, + 316.1936062904978, 316.2342830909755, 316.26747126017375, + 316.29443490488677, 316.31668478030457, 316.33447857813115, + 316.3484692088327, 316.3592138371609, 316.36719029531395, + 316.37280934152676, 316.37642441308293, 316.37833969405386, + 316.3788169354215, 316.37808128631207 + ], + "q_thermogenesis_total": [ + 109.95300054410399, 109.95300054410399, 109.96213267891385, + 109.96991570269928, 109.97638618896552, 109.98271339601774, + 109.99144414262015, 110.00016043542992, 110.00881038775522, + 110.01738643221279, 110.02609760738045, 110.03652393902394, + 110.0469682910367, 110.05738908691784, 110.06775558104208, + 110.0780450511368, 110.08824072638544, 110.09833027246097, + 110.10830468716333, 110.11815749413795, 110.12788415110131 + ], + "q_res": [ + 8.222503033578032, 8.222503033578032, 8.223185952696253, 8.223767982621489, + 8.22425185839286, 8.224725019460985, 8.225377921974498, 8.226029743604789, + 8.226676604162328, 8.227317937743216, 8.227969376666099, 8.22874907838541, + 8.229530127703608, 8.230309415447651, 8.231084642398825, 8.2318541093406, + 8.23261656211812, 8.23337107834599, 8.234116984821869, 8.234853797231144, + 8.235581175892865 + ], + "q_skin2env_head": [ + 8.220790562331835, 8.22079132477593, 8.217523261111765, 8.213008071181271, + 8.20813088571187, 8.203151324290335, 8.198149684902365, 8.193167384230359, + 8.188237787426136, 8.183390025890336, 8.178648160748555, 8.174030657709086, + 8.169551012542087, 8.165217808085021, 8.161035551646966, 8.157005578928883, + 8.153126846710974, 8.149396581154456, 8.14581079004889, 8.142364658832479, + 8.139052851810533 + ], + "q_skin2env_neck": [ + 2.205000373975029, 2.20500058267215, 2.2036717475926357, 2.20166767318258, + 2.1993998024224473, 2.1971030552807216, 2.1949038422370246, + 2.192862732381425, 2.191000744536024, 2.1893166657627043, + 2.1877978411637167, 2.1864267039090395, 2.185184738629064, + 2.184054067290387, 2.183018482006527, 2.182063838737115, 2.181178093879857, + 2.180351156796038, 2.1795746611932403, 2.1788417140754426, 2.178146653713938 + ], + "q_skin2env_chest": [ + 9.319394672853791, 9.319395555645503, 9.316004093265505, 9.31097507143896, + 9.305208577228417, 9.299116529590274, 9.292907039137658, 9.286697904142699, + 9.280561735976407, 9.274545573154578, 9.268680418403985, 9.262986440545932, + 9.257476155202154, 9.252156467437688, 9.247030113876546, 9.242096727542, + 9.237353643843434, 9.23279651996938, 9.228419814971902, 9.224217163229852, + 9.220181664926468 + ], + "q_skin2env_back": [ + 8.14893481599888, 8.148935579409416, 8.146368867797182, 8.142489186101766, + 8.13795304449215, 8.133075235845634, 8.128026278570818, 8.122910792269867, + 8.117798668742642, 8.112738872761406, 8.107766370645509, 8.10290609397529, + 8.098175525516272, 8.093586396242296, 8.089145979548974, 8.08485808972961, + 8.080723867194667, 8.076742402630599, 8.07291123577038, 8.069226754602033, + 8.065684514553078 + ], + "q_skin2env_pelvis": [ + 13.708771815913414, 13.708773242731446, 13.70655788225972, + 13.703387761949354, 13.699891808341697, 13.696265343578398, + 13.692556706107275, 13.688778416621624, 13.684937965516074, + 13.681043656703807, 13.677104575718266, 13.673129828586834, + 13.669128097130717, 13.665107384514501, 13.661074952615724, + 13.657037349779328, 13.65300047034093, 13.648969619955885, + 13.64494957685839, 13.640944646131251, 13.636958706814797 + ], + "q_skin2env_left_shoulder": [ + 5.495164499822654, 5.495165015534848, 5.471955234149901, 5.470953032775179, + 5.482428743471015, 5.4996202322164764, 5.518559118290161, 5.537086436067794, + 5.554146066774679, 5.569321337038341, 5.5825458733292646, 5.593930485572742, + 5.603663739775348, 5.611956895072239, 5.6190157119190705, 5.625027429800159, + 5.630156083727149, 5.63454216377818, 5.638304346362693, 5.641542049572489, + 5.6443381587545245 + ], + "q_skin2env_left_arm": [ + 3.3060484333347873, 3.306048748692667, 3.3955146243999526, + 3.4732222459967765, 3.5359221146837694, 3.585652833277372, + 3.6250189328364124, 3.656345335802833, 3.6814918548563336, + 3.7018788770845124, 3.7185715644592143, 3.7323662705330283, + 3.7438618380952007, 3.753513389847283, 3.761671297319982, 3.768608898874969, + 3.774542131214268, 3.7796435024999786, 3.7840521497855524, + 3.787881188384461, 3.7912231753185845 + ], + "q_skin2env_left_hand": [ + 2.820093545556136, 2.820093806654058, 2.9529642159726115, 3.04583409123909, + 3.1109748022723265, 3.1592182278919854, 3.1965182662248166, + 3.226193413234764, 3.250219853033968, 3.26987165816453, 3.2860353719939317, + 3.2993676335877646, 3.3103771729727476, 3.3194698448883617, + 3.326975292968454, 3.333164088040812, 3.338259642713321, 3.342447040615784, + 3.34587988496956, 3.3486857704999005, 3.3509707345886355 + ], + "q_skin2env_right_shoulder": [ + 5.495164499822711, 5.495165015534905, 5.471955234149956, 5.470953032775229, + 5.48242874347106, 5.4996202322165555, 5.518559118290229, 5.537086436067852, + 5.5541460667747184, 5.5693213370383745, 5.582545873329292, 5.59393048557276, + 5.603663739775389, 5.61195689507228, 5.619015711919104, 5.6250274298001814, + 5.6301560837271785, 5.6345421637782085, 5.638304346362727, + 5.641542049572523, 5.644338158754541 + ], + "q_skin2env_right_arm": [ + 3.306048433334798, 3.3060487486926746, 3.3955146243999677, + 3.473222245996791, 3.535922114683788, 3.5856528332773867, 3.62501893283643, + 3.6563453358028553, 3.681491854856355, 3.701878877084539, + 3.7185715644592383, 3.73236627053305, 3.743861838095221, 3.7535133898473036, + 3.7616712973200004, 3.7686088988749837, 3.774542131214279, + 3.7796435024999857, 3.7840521497855555, 3.7878811883844645, + 3.7912231753185845 + ], + "q_skin2env_right_hand": [ + 2.820093545556159, 2.8200938066540813, 2.9529642159726257, + 3.0458340912391044, 3.1109748022723402, 3.1592182278919965, + 3.1965182662248397, 3.22619341323479, 3.250219853033991, 3.269871658164549, + 3.286035371993946, 3.299367633587782, 3.3103771729727622, + 3.3194698448883675, 3.3269752929684513, 3.3331640880408093, + 3.3382596427133264, 3.342447040615787, 3.345879884969569, + 3.3486857704999005, 3.3509707345886386 + ], + "q_skin2env_left_thigh": [ + 10.530261655946674, 10.530262695593253, 10.516789180666766, + 10.508031398124093, 10.503906218244895, 10.503581371866318, + 10.50616277491433, 10.510827889017712, 10.516879232834679, + 10.52375457589539, 10.531016743497094, 10.538336040176263, + 10.54547148346064, 10.552253398750176, 10.558568275931242, + 10.564346077376845, 10.569549830899373, 10.574167232871684, + 10.57820396226805, 10.581678420555656, 10.5846176420442 + ], + "q_skin2env_left_leg": [ + 5.065172487729327, 5.065173031076538, 5.097492669064163, 5.1356715923469896, + 5.174516320945107, 5.211898173080034, 5.246848987127254, 5.278970241929406, + 5.308158609047703, 5.334467129171917, 5.358031663908009, 5.379030208800211, + 5.397659525187922, 5.41412134490076, 5.42861401833875, 5.441327546771962, + 5.45244072386988, 5.462119643022338, 5.470517103906262, 5.477772612497146, + 5.484012767530137 + ], + "q_skin2env_left_foot": [ + 2.847055691927899, 2.8470559792713006, 2.9473248069676536, + 3.0277358349169385, 3.0905832356623484, 3.141593458257128, + 3.1843221356199742, 3.2208463086374417, 3.2524333066004534, + 3.2799183123497966, 3.303900660813989, 3.3248437716988346, + 3.3431262228063248, 3.359068509760689, 3.3729477099928418, + 3.3850062014394724, 3.3954573417432687, 3.404489540520753, + 3.412269425483795, 3.4189444497193238, 3.424645117265848 + ], + "q_skin2env_right_thigh": [ + 10.530261655946806, 10.53026269559337, 10.51678918066688, + 10.508031398124206, 10.50390621824503, 10.503581371866419, + 10.506162774914397, 10.5108278890178, 10.516879232834746, + 10.523754575895412, 10.53101674349714, 10.538336040176276, + 10.545471483460615, 10.552253398750127, 10.55856827593122, + 10.564346077376756, 10.569549830899305, 10.57416723287166, + 10.57820396226805, 10.581678420555667, 10.584617642044238 + ], + "q_skin2env_right_leg": [ + 5.065172487729508, 5.06517303107671, 5.097492669064311, 5.1356715923471485, + 5.17451632094526, 5.2118981730801694, 5.246848987127388, 5.278970241929517, + 5.3081586090478, 5.334467129172007, 5.358031663908109, 5.3790302088003115, + 5.397659525187996, 5.4141213449008605, 5.428614018338861, 5.441327546772053, + 5.452440723869966, 5.462119643022415, 5.470517103906347, 5.477772612497241, + 5.484012767530215 + ], + "q_skin2env_right_foot": [ + 2.8470556919279275, 2.847055979271329, 2.947324806967666, 3.027735834916951, + 3.0905832356623586, 3.1415934582571343, 3.1843221356199862, + 3.2208463086374515, 3.252433306600463, 3.279918312349803, 3.303900660813989, + 3.324843771698845, 3.3431262228063314, 3.3590685097607054, + 3.3729477099928635, 3.3850062014394777, 3.3954573417432714, + 3.404489540520763, 3.4122694254838044, 3.4189444497193393, 3.424645117265864 + ], + "q_skin2env_sensible_head": [ + 6.440954076143588, 6.440954740838164, 6.438105636728184, 6.434169206078411, + 6.4299170770481435, 6.425575581486904, 6.421214724068705, 6.41687061532053, + 6.412572349030843, 6.408345330258572, 6.404210545338499, 6.400184103298671, + 6.3962777806007844, 6.392499070254252, 6.38885191153531, 6.38533747785151, + 6.381954867735989, 6.378701670033303, 6.375574410514627, 6.372568897190256, + 6.3696804829858475 + ], + "q_skin2env_sensible_neck": [ + 1.7309250675709411, 1.7309252493767455, 1.7297676239131692, + 1.7280217007722645, 1.726045878412196, 1.7240448081151538, + 1.7221286306334889, 1.720350134281808, 1.7187276512557799, + 1.717260141788745, 1.7159365933213362, 1.7147417099050632, + 1.7136593660742352, 1.712673989275613, 1.7117714604273915, + 1.7109394574965393, 1.710167487791074, 1.7094467597552847, + 1.708769983971737, 1.708131154549405, 1.7075253383239508 + ], + "q_skin2env_sensible_chest": [ + 7.500790175803339, 7.500790961828553, 7.497771233063424, 7.493293366311271, + 7.488158748625351, 7.482734132688127, 7.47720481589062, 7.471675689617757, + 7.466211415263294, 7.460853886554296, 7.455630720107108, 7.450559886363903, + 7.445652541150944, 7.440914844084778, 7.436349242406168, 7.4319554189887045, + 7.427731009936848, 7.423672156091541, 7.419773930530108, 7.416030671152788, + 7.412436239392044 + ], + "q_skin2env_sensible_back": [ + 6.522605091849611, 6.522605770397213, 6.520324369582073, 6.516875899145523, + 6.512843860278485, 6.508508038011635, 6.504019990127478, 6.499472706927326, + 6.494928315177311, 6.490430343421837, 6.486009879391289, 6.481689092373095, + 6.477483531146302, 6.4734036319561845, 6.469455868581578, 6.46564363963535, + 6.461967966388592, 6.458428047493984, 6.455021702300287, 6.451745725701236, + 6.44859617187557 + ], + "q_skin2env_sensible_pelvis": [ + 11.263997393500407, 11.263998659112799, 11.26203358934496, + 11.259221605432966, 11.256120567356412, 11.252903726703138, + 11.249613958825362, 11.246262368027669, 11.242855596793524, + 11.239401009545011, 11.235906664400158, 11.232380638020707, + 11.228830631119232, 11.22526374271227, 11.221686414526856, + 11.218104455586305, 11.214523094980413, 11.21094703978907, + 11.207380529398433, 11.203827383619563, 11.200291044457074 + ], + "q_skin2env_sensible_left_shoulder": [ + 4.3203724762556, 4.320372932088406, 4.299856539313525, 4.298970571205705, + 4.3091150176171995, 4.3243107978499, 4.341049217858222, 4.357421952863277, + 4.372495987438779, 4.385903619620747, 4.397586693414301, 4.407643523522634, + 4.416241018354378, 4.423566039486546, 4.429800514570308, 4.435109953136125, + 4.439639326085433, 4.4435127778651795, 4.44683516517531, 4.449694320805402, + 4.452163465739416 + ], + "q_skin2env_sensible_left_arm": [ + 2.573914713376867, 2.5739149925537754, 2.6530818516341914, + 2.721787730467418, 2.777186099574311, 2.8211012259475883, 2.855848469477294, + 2.883489632070408, 2.9056716919162513, 2.9236512692451866, + 2.938370048626217, 2.9505316855644663, 2.96066508711752, 2.9691720820080616, + 2.9763619217121975, 2.982475803801615, 2.9877042319765317, 2.99219936745566, + 2.9960839161498996, 2.9994576209571138, 3.0024020867662213 + ], + "q_skin2env_sensible_left_hand": [ + 2.1950032987361725, 2.1950035280381903, 2.3115918080079774, + 2.392960322854554, 2.4499740897977333, 2.49216685649119, 2.5247701434247283, + 2.550697040801437, 2.571681167405933, 2.588839563650253, 2.602949041476374, + 2.6145846072120245, 2.6241914725857147, 2.6321246159244778, + 2.6386722115270387, 2.6440706884004057, 2.648515195138531, + 2.6521673496769105, 2.6551612456321254, 2.6576082472659843, + 2.6596008869213725 + ], + "q_skin2env_sensible_right_shoulder": [ + 4.320372476255651, 4.320372932088457, 4.29985653931357, 4.298970571205749, + 4.309115017617239, 4.324310797849972, 4.341049217858283, 4.357421952863327, + 4.3724959874388185, 4.38590361962078, 4.397586693414328, 4.407643523522645, + 4.416241018354412, 4.4235660394865794, 4.429800514570336, + 4.4351099531361475, 4.439639326085455, 4.443512777865202, 4.446835165175343, + 4.44969432080543, 4.4521634657394324 + ], + "q_skin2env_sensible_right_arm": [ + 2.573914713376878, 2.573914992553783, 2.653081851634202, 2.7217877304674327, + 2.777186099574325, 2.821101225947603, 2.8558484694773116, + 2.8834896320704257, 2.9056716919162686, 2.9236512692452084, + 2.938370048626239, 2.950531685564484, 2.960665087117538, 2.96917208200808, + 2.9763619217122117, 2.9824758038016297, 2.9877042319765423, + 2.992199367455667, 2.9960839161499027, 2.9994576209571173, + 3.0024020867662213 + ], + "q_skin2env_sensible_right_hand": [ + 2.195003298736192, 2.19500352803821, 2.3115918080079916, 2.3929603228545684, + 2.449974089797747, 2.492166856491201, 2.524770143424748, 2.550697040801459, + 2.5716811674059525, 2.5888395636502697, 2.6029490414763883, + 2.6145846072120387, 2.624191472585726, 2.6321246159244835, + 2.638672211527036, 2.644070688400403, 2.648515195138536, 2.6521673496769136, + 2.6551612456321307, 2.6576082472659843, 2.6596008869213756 + ], + "q_skin2env_sensible_left_thigh": [ + 8.564210966911979, 8.564211904130064, 8.552065611177355, 8.544170285405722, + 8.54045128392895, 8.540158421202058, 8.542485657951065, 8.546691401275252, + 8.552146794135993, 8.558344928483939, 8.56489166071876, 8.571489763833414, + 8.577922003465982, 8.58403544048554, 8.589727773449935, 8.5949358924063, + 8.599626494000505, 8.603788509961689, 8.607427078904943, 8.610558804186994, + 8.613208067346653 + ], + "q_skin2env_sensible_left_leg": [ + 4.310849252685041, 4.310849755365244, 4.340748464888145, 4.3760625266391076, + 4.411986825494397, 4.446552882743745, 4.478866270351436, 4.508559567802668, + 4.535538296826634, 4.559852439173058, 4.581628393269675, 4.601031353098625, + 4.618243716796812, 4.633452352453736, 4.6468408979737355, 4.658585188596628, + 4.668850632182782, 4.677790844550231, 4.685547113543838, 4.692248409328838, + 4.698011749837032 + ], + "q_skin2env_sensible_left_foot": [ + 2.464376300823253, 2.4643765684756986, 2.55774270616748, 2.6325723918835258, + 2.6910290836206854, 2.738457146166862, 2.7781724779638046, + 2.812111624521291, 2.8414561455871756, 2.8669846857671826, + 2.8892559354111738, 2.908701766552549, 2.925674846938251, + 2.9404736048640627, 2.953355924574417, 2.9645472989720973, + 2.9742461455236593, 2.9826276198132855, 2.989846580092388, + 2.9960400271219063, 3.0013291851160226 + ], + "q_skin2env_sensible_right_thigh": [ + 8.564210966912105, 8.564211904130175, 8.552065611177458, 8.544170285405823, + 8.540451283929075, 8.540158421202149, 8.542485657951122, 8.54669140127533, + 8.55214679413605, 8.55834492848396, 8.564891660718805, 8.571489763833426, + 8.577922003465957, 8.584035440485495, 8.589727773449914, 8.594935892406221, + 8.599626494000448, 8.603788509961666, 8.607427078904943, 8.610558804187004, + 8.613208067346685 + ], + "q_skin2env_sensible_right_leg": [ + 4.310849252685212, 4.310849755365402, 4.340748464888287, 4.376062526639254, + 4.411986825494537, 4.446552882743869, 4.47886627035156, 4.508559567802768, + 4.535538296826723, 4.55985243917314, 4.581628393269769, 4.601031353098719, + 4.618243716796882, 4.63345235245383, 4.646840897973836, 4.658585188596709, + 4.668850632182859, 4.6777908445503025, 4.685547113543914, + 4.6922484093289265, 4.698011749837102 + ], + "q_skin2env_sensible_right_foot": [ + 2.4643763008232793, 2.464376568475725, 2.557742706167492, 2.632572391883538, + 2.6910290836206956, 2.7384571461668683, 2.7781724779638144, + 2.8121116245213007, 2.8414561455871854, 2.866984685767189, + 2.8892559354111738, 2.9087017665525594, 2.9256748469382576, + 2.940473604864079, 2.9533559245744363, 2.9645472989721005, + 2.9742461455236624, 2.9826276198132957, 2.9898465800923946, + 2.9960400271219196, 3.0013291851160386 + ], + "q_skin2env_latent_head": [ + 1.7798364861882476, 1.7798365839377677, 1.7794176243835802, + 1.7788388651028608, 1.7782138086637276, 1.7775757428034311, + 1.7769349608336586, 1.776296768909828, 1.775665438395292, + 1.7750446956317647, 1.7744376154100554, 1.7738465544104145, + 1.7732732319413018, 1.7727187378307694, 1.7721836401116564, + 1.7716681010773734, 1.7711719789749838, 1.770694911121153, + 1.7702363795342624, 1.7697957616422233, 1.7693723688246845 + ], + "q_skin2env_latent_neck": [ + 0.4740753064040876, 0.4740753332954048, 0.4739041236794663, + 0.4736459724103154, 0.4733539240102513, 0.47305824716556777, + 0.47277521160353586, 0.4725125980996172, 0.47227309328024397, + 0.4720565239739596, 0.4718612478423804, 0.47168499400397607, + 0.4715253725548292, 0.47138007801477394, 0.47124702157913534, + 0.4711243812405757, 0.4710106060887829, 0.4709043970407532, + 0.4708046772215033, 0.47071055952603774, 0.47062131538998714 + ], + "q_skin2env_latent_chest": [ + 1.8186044970504518, 1.81860459381695, 1.8182328602020803, 1.81768170512769, + 1.8170498286030645, 1.8163823969021464, 1.8157022232470377, + 1.8150222145249415, 1.8143503207131135, 1.8136916866002812, + 1.8130496982968776, 1.812426554182028, 1.81182361405121, 1.811241623352909, + 1.810680871470378, 1.8101413085532956, 1.8096226339065868, + 1.8091243638778378, 1.8086458844417934, 1.8081864920770647, + 1.8077454255344236 + ], + "q_skin2env_latent_back": [ + 1.626329724149269, 1.6263298090122034, 1.6260444982151097, + 1.6256132869562434, 1.625109184213665, 1.624567197833999, + 1.6240062884433397, 1.6234380853425396, 1.6228703535653315, + 1.6223085293395698, 1.6217564912542202, 1.6212170016021952, + 1.6206919943699702, 1.6201827642861117, 1.619690110967396, + 1.6192144500942593, 1.618755900806076, 1.618314355136614, + 1.6178895334700942, 1.617481028900797, 1.6170883426775091 + ], + "q_skin2env_latent_pelvis": [ + 2.444774422413006, 2.444774583618648, 2.44452429291476, 2.4441661565163884, + 2.443771240985284, 2.443361616875259, 2.442942747281913, 2.442516048593955, + 2.4420823687225495, 2.4416426471587953, 2.4411979113181075, + 2.440749190566127, 2.4402974660114842, 2.439843641802231, + 2.4393885380888682, 2.438932894193023, 2.4384773753605162, + 2.438022580166815, 2.437569047459957, 2.4371172625116873, 2.4366676623577224 + ], + "q_skin2env_latent_left_shoulder": [ + 1.174792023567054, 1.1747920834464414, 1.1720986948363759, + 1.1719824615694738, 1.173313725853815, 1.1753094343665769, + 1.1775099004319391, 1.1796644832045173, 1.1816500793359004, + 1.1834177174175942, 1.184959179914964, 1.1862869620501082, + 1.1874227214209703, 1.1883908555856932, 1.1892151973487624, + 1.1899174766640337, 1.1905167576417166, 1.1910293859130006, + 1.1914691811873834, 1.1918477287670866, 1.192174693015109 + ], + "q_skin2env_latent_left_arm": [ + 0.7321337199579199, 0.7321337561388918, 0.7424327727657611, + 0.7514345155293584, 0.7587360151094585, 0.7645516073297838, + 0.7691704633591185, 0.7728557037324251, 0.7758201629400822, + 0.778227607839326, 0.780201515832997, 0.7818345849685618, + 0.7831967509776808, 0.7843413078392215, 0.7853093756077846, + 0.7861330950733542, 0.7868378992377365, 0.7874441350443189, + 0.7879682336356528, 0.7884235674273473, 0.7888210885523633 + ], + "q_skin2env_latent_left_hand": [ + 0.6250902468199633, 0.6250902786158677, 0.6413724079646341, + 0.6528737683845358, 0.6610007124745932, 0.6670513714007954, + 0.6717481228000881, 0.6754963724333269, 0.6785386856280348, + 0.6810320945142774, 0.6830863305175577, 0.68478302637574, + 0.6861857003870327, 0.6873452289638841, 0.6883030814414154, + 0.6890933996404064, 0.6897444475747901, 0.6902796909388736, + 0.6907186393374345, 0.6910775232339162, 0.6913698476672631 + ], + "q_skin2env_latent_right_shoulder": [ + 1.1747920235670604, 1.1747920834464478, 1.1720986948363858, + 1.1719824615694803, 1.1733137258538215, 1.1753094343665833, + 1.1775099004319458, 1.1796644832045242, 1.1816500793359004, + 1.1834177174175942, 1.184959179914964, 1.1862869620501149, + 1.187422721420977, 1.1883908555857001, 1.1892151973487688, + 1.1899174766640337, 1.190516757641723, 1.1910293859130072, + 1.1914691811873834, 1.191847728767093, 1.192174693015109 + ], + "q_skin2env_latent_right_arm": [ + 0.7321337199579199, 0.7321337561388918, 0.7424327727657655, + 0.7514345155293584, 0.758736015109463, 0.7645516073297838, + 0.7691704633591185, 0.7728557037324295, 0.7758201629400865, + 0.7782276078393304, 0.7802015158329992, 0.7818345849685661, + 0.7831967509776829, 0.7843413078392237, 0.7853093756077888, + 0.7861330950733542, 0.7868378992377365, 0.7874441350443189, + 0.7879682336356528, 0.7884235674273473, 0.7888210885523633 + ], + "q_skin2env_latent_right_hand": [ + 0.6250902468199668, 0.6250902786158713, 0.6413724079646341, + 0.6528737683845358, 0.6610007124745932, 0.6670513714007954, + 0.6717481228000917, 0.6754963724333307, 0.6785386856280383, + 0.6810320945142794, 0.6830863305175577, 0.6847830263757434, + 0.6861857003870365, 0.6873452289638841, 0.6883030814414154, + 0.6890933996404064, 0.6897444475747901, 0.6902796909388736, + 0.6907186393374383, 0.6910775232339162, 0.6913698476672631 + ], + "q_skin2env_latent_left_thigh": [ + 1.966050689034695, 1.9660507914631897, 1.964723569489411, + 1.9638611127183714, 1.9634549343159442, 1.9634229506642593, + 1.963677116963264, 1.9641364877424603, 1.964732438698686, + 1.9654096474114517, 1.9661250827783343, 1.966846276342849, + 1.9675494799946571, 1.9682179582646362, 1.9688405024813065, + 1.9694101849705448, 1.9699233368988684, 1.9703787229099954, + 1.9707768833631079, 1.9711196163686624, 1.9714095746975469 + ], + "q_skin2env_latent_left_leg": [ + 0.7543232350442859, 0.7543232757112943, 0.7567442041760181, + 0.7596090657078816, 0.7625294954507097, 0.765345290336288, + 0.7679827167758174, 0.7704106741267375, 0.7726203122210682, + 0.7746146899988589, 0.7764032706383341, 0.7779988557015862, + 0.7794158083911099, 0.7806689924470245, 0.7817731203650139, + 0.7827423581753347, 0.7835900916870979, 0.7843287984721062, + 0.7849699903624239, 0.7855242031683083, 0.7860010176931049 + ], + "q_skin2env_latent_left_foot": [ + 0.3826793911046459, 0.38267941079560197, 0.389582100800174, + 0.39516344303341266, 0.39955415204166317, 0.4031363120902662, + 0.40614965765616945, 0.4087346841161507, 0.41097716101327764, + 0.4129336265826139, 0.4146447254028153, 0.41614200514628547, + 0.4174513758680737, 0.41859490489662615, 0.4195917854184247, + 0.4204589024673751, 0.42121119621960923, 0.4218619207074674, + 0.42242284539140734, 0.4229044225974174, 0.4233159321498254 + ], + "q_skin2env_latent_right_thigh": [ + 1.9660506890347005, 1.9660507914631953, 1.9647235694894225, + 1.963861112718383, 1.9634549343159549, 1.96342295066427, 1.9636771169632747, + 1.964136487742471, 1.964732438698697, 1.9654096474114517, + 1.9661250827783343, 1.966846276342849, 1.9675494799946571, + 1.968217958264631, 1.9688405024813065, 1.969410184970534, + 1.9699233368988576, 1.9703787229099954, 1.9707768833631079, + 1.9711196163686624, 1.9714095746975524 + ], + "q_skin2env_latent_right_leg": [ + 0.7543232350442964, 0.7543232757113072, 0.7567442041760246, + 0.7596090657078944, 0.7625294954507226, 0.7653452903363008, + 0.7679827167758282, 0.7704106741267484, 0.772620312221077, + 0.7746146899988674, 0.7764032706383406, 0.7779988557015928, + 0.7794158083911144, 0.780668992447031, 0.7817731203650249, + 0.7827423581753434, 0.7835900916871067, 0.7843287984721129, + 0.7849699903624326, 0.7855242031683151, 0.7860010176931137 + ], + "q_skin2env_latent_right_foot": [ + 0.38267939110464805, 0.38267941079560414, 0.389582100800174, + 0.39516344303341266, 0.39955415204166317, 0.4031363120902662, + 0.4061496576561716, 0.4087346841161507, 0.41097716101327764, + 0.4129336265826139, 0.4146447254028153, 0.41614200514628547, + 0.4174513758680737, 0.41859490489662615, 0.419591785418427, + 0.42045890246737744, 0.42121119621960923, 0.4218619207074674, + 0.4224228453914097, 0.4229044225974198, 0.4233159321498254 + ], + "q_res_sensible": [ + 0.8096938960067809, 0.8096938960067809, 0.8097611450475207, + 0.8098184592346767, 0.8098661078955411, 0.8099127014482739, + 0.809976994666254, 0.810041181446505, 0.8101048796954287, + 0.8101680336868141, 0.8102321827807487, 0.8103089622869714, + 0.8103858744951935, 0.8104626132360621, 0.810538952098793, + 0.8106147237565705, 0.8106898047091016, 0.8107641041264018, + 0.8108375557162699, 0.810910111786831, 0.8109817388887092 + ], + "q_res_latent": [ + 7.412809137571252, 7.412809137571252, 7.413424807648732, 7.413949523386812, + 7.414385750497318, 7.414812318012711, 7.415400927308244, 7.415988562158283, + 7.416571724466899, 7.417149904056402, 7.41773719388535, 7.418440116098439, + 7.419144253208414, 7.419846802211589, 7.420545690300032, 7.4212393855840295, + 7.421926757409017, 7.422606974219587, 7.423279429105599, 7.423943685444314, + 7.424599437004155 + ], + "name": [ + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3", + "JOS3" + ], + "height": [ + 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, + 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72, 1.72 + ], + "weight": [ + 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, + 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43, 74.43 + ], + "bsa_head": [ + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246, + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246, + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246, + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246, + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246, + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246, + 0.11005713796319246, 0.11005713796319246, 0.11005713796319246 + ], + "bsa_neck": [ + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165, + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165, + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165, + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165, + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165, + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165, + 0.02901506364484165, 0.02901506364484165, 0.02901506364484165 + ], + "bsa_chest": [ + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789, + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789, + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789, + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789, + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789, + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789, + 0.1750909013050789, 0.1750909013050789, 0.1750909013050789 + ], + "bsa_back": [ + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726, + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726, + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726, + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726, + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726, + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726, + 0.1610836292006726, 0.1610836292006726, 0.1610836292006726 + ], + "bsa_pelvis": [ + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394, + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394, + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394, + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394, + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394, + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394, + 0.22111479536241394, 0.22111479536241394, 0.22111479536241394 + ], + "bsa_left_shoulder": [ + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615 + ], + "bsa_left_arm": [ + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841 + ], + "bsa_left_hand": [ + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112 + ], + "bsa_right_shoulder": [ + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615, + 0.09604986585878615, 0.09604986585878615, 0.09604986585878615 + ], + "bsa_right_arm": [ + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841, + 0.06303272446982841, 0.06303272446982841, 0.06303272446982841 + ], + "bsa_right_hand": [ + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112, + 0.05002597180145112, 0.05002597180145112, 0.05002597180145112 + ], + "bsa_left_thigh": [ + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568 + ], + "bsa_left_leg": [ + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505 + ], + "bsa_left_foot": [ + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525 + ], + "bsa_right_thigh": [ + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568, + 0.20910856213006568, 0.20910856213006568, 0.20910856213006568 + ], + "bsa_right_leg": [ + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505, + 0.1120581768352505, 0.1120581768352505, 0.1120581768352505 + ], + "bsa_right_foot": [ + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525, + 0.05602908841762525, 0.05602908841762525, 0.05602908841762525 + ], + "fat": [ + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15 + ], + "sex": [ + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male", + "male" + ], + "age": [ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20 + ], + "t_core_set_head": [ + 37.2794857325035, 37.27948664648618, 37.27948664648618, 37.27948664648618, + 37.27948664648618, 37.27948664648618, 37.27948664648618, 37.27948664648618, + 37.27948664648618, 37.27948664648618, 37.27948664648618, 37.27948664648618, + 37.27948664648618, 37.27948664648618, 37.27948664648618, 37.27948664648618, + 37.27948664648618, 37.27948664648618, 37.27948664648618, 37.27948664648618, + 37.27948664648618 + ], + "t_core_set_neck": [ + 36.817826612366005, 36.81782751853464, 36.81782751853464, 36.81782751853464, + 36.81782751853464, 36.81782751853464, 36.81782751853464, 36.81782751853464, + 36.81782751853464, 36.81782751853464, 36.81782751853464, 36.81782751853464, + 36.81782751853464, 36.81782751853464, 36.81782751853464, 36.81782751853464, + 36.81782751853464, 36.81782751853464, 36.81782751853464, 36.81782751853464, + 36.81782751853464 + ], + "t_core_set_chest": [ + 37.04676221735688, 37.046763146185384, 37.046763146185384, + 37.046763146185384, 37.046763146185384, 37.046763146185384, + 37.046763146185384, 37.046763146185384, 37.046763146185384, + 37.046763146185384, 37.046763146185384, 37.046763146185384, + 37.046763146185384, 37.046763146185384, 37.046763146185384, + 37.046763146185384, 37.046763146185384, 37.046763146185384, + 37.046763146185384, 37.046763146185384, 37.046763146185384 + ], + "t_core_set_back": [ + 37.106692016074064, 37.10669294345571, 37.10669294345571, 37.10669294345571, + 37.10669294345571, 37.10669294345571, 37.10669294345571, 37.10669294345571, + 37.10669294345571, 37.10669294345571, 37.10669294345571, 37.10669294345571, + 37.10669294345571, 37.10669294345571, 37.10669294345571, 37.10669294345571, + 37.10669294345571, 37.10669294345571, 37.10669294345571, 37.10669294345571, + 37.10669294345571 + ], + "t_core_set_pelvis": [ + 37.25856731982281, 37.25856827899341, 37.25856827899341, 37.25856827899341, + 37.25856827899341, 37.25856827899341, 37.25856827899341, 37.25856827899341, + 37.25856827899341, 37.25856827899341, 37.25856827899341, 37.25856827899341, + 37.25856827899341, 37.25856827899341, 37.25856827899341, 37.25856827899341, + 37.25856827899341, 37.25856827899341, 37.25856827899341, 37.25856827899341, + 37.25856827899341 + ], + "t_core_set_left_shoulder": [ + 36.25197752183496, 36.25197837683718, 36.25197837683718, 36.25197837683718, + 36.25197837683718, 36.25197837683718, 36.25197837683718, 36.25197837683718, + 36.25197837683718, 36.25197837683718, 36.25197837683718, 36.25197837683718, + 36.25197837683718, 36.25197837683718, 36.25197837683718, 36.25197837683718, + 36.25197837683718, 36.25197837683718, 36.25197837683718, 36.25197837683718, + 36.25197837683718 + ], + "t_core_set_left_arm": [ + 35.71685601489091, 35.71685683735247, 35.71685683735247, 35.71685683735247, + 35.71685683735247, 35.71685683735247, 35.71685683735247, 35.71685683735247, + 35.71685683735247, 35.71685683735247, 35.71685683735247, 35.71685683735247, + 35.71685683735247, 35.71685683735247, 35.71685683735247, 35.71685683735247, + 35.71685683735247, 35.71685683735247, 35.71685683735247, 35.71685683735247, + 35.71685683735247 + ], + "t_core_set_left_hand": [ + 34.90385675284975, 34.90385741306187, 34.90385741306187, 34.90385741306187, + 34.90385741306187, 34.90385741306187, 34.90385741306187, 34.90385741306187, + 34.90385741306187, 34.90385741306187, 34.90385741306187, 34.90385741306187, + 34.90385741306187, 34.90385741306187, 34.90385741306187, 34.90385741306187, + 34.90385741306187, 34.90385741306187, 34.90385741306187, 34.90385741306187, + 34.90385741306187 + ], + "t_core_set_right_shoulder": [ + 36.2519775218351, 36.25197837683733, 36.25197837683733, 36.25197837683733, + 36.25197837683733, 36.25197837683733, 36.25197837683733, 36.25197837683733, + 36.25197837683733, 36.25197837683733, 36.25197837683733, 36.25197837683733, + 36.25197837683733, 36.25197837683733, 36.25197837683733, 36.25197837683733, + 36.25197837683733, 36.25197837683733, 36.25197837683733, 36.25197837683733, + 36.25197837683733 + ], + "t_core_set_right_arm": [ + 35.71685601489095, 35.7168568373525, 35.7168568373525, 35.7168568373525, + 35.7168568373525, 35.7168568373525, 35.7168568373525, 35.7168568373525, + 35.7168568373525, 35.7168568373525, 35.7168568373525, 35.7168568373525, + 35.7168568373525, 35.7168568373525, 35.7168568373525, 35.7168568373525, + 35.7168568373525, 35.7168568373525, 35.7168568373525, 35.7168568373525, + 35.7168568373525 + ], + "t_core_set_right_hand": [ + 34.903856752849805, 34.903857413061935, 34.903857413061935, + 34.903857413061935, 34.903857413061935, 34.903857413061935, + 34.903857413061935, 34.903857413061935, 34.903857413061935, + 34.903857413061935, 34.903857413061935, 34.903857413061935, + 34.903857413061935, 34.903857413061935, 34.903857413061935, + 34.903857413061935, 34.903857413061935, 34.903857413061935, + 34.903857413061935, 34.903857413061935, 34.903857413061935 + ], + "t_core_set_left_thigh": [ + 36.675633557689096, 36.67563450105145, 36.67563450105145, 36.67563450105145, + 36.67563450105145, 36.67563450105145, 36.67563450105145, 36.67563450105145, + 36.67563450105145, 36.67563450105145, 36.67563450105145, 36.67563450105145, + 36.67563450105145, 36.67563450105145, 36.67563450105145, 36.67563450105145, + 36.67563450105145, 36.67563450105145, 36.67563450105145, 36.67563450105145, + 36.67563450105145 + ], + "t_core_set_left_leg": [ + 36.32476429640966, 36.32476524669076, 36.32476524669076, 36.32476524669076, + 36.32476524669076, 36.32476524669076, 36.32476524669076, 36.32476524669076, + 36.32476524669076, 36.32476524669076, 36.32476524669076, 36.32476524669076, + 36.32476524669076, 36.32476524669076, 36.32476524669076, 36.32476524669076, + 36.32476524669076, 36.32476524669076, 36.32476524669076, 36.32476524669076, + 36.32476524669076 + ], + "t_core_set_left_foot": [ + 34.602385885429825, 34.602386529646225, 34.602386529646225, + 34.602386529646225, 34.602386529646225, 34.602386529646225, + 34.602386529646225, 34.602386529646225, 34.602386529646225, + 34.602386529646225, 34.602386529646225, 34.602386529646225, + 34.602386529646225, 34.602386529646225, 34.602386529646225, + 34.602386529646225, 34.602386529646225, 34.602386529646225, + 34.602386529646225, 34.602386529646225, 34.602386529646225 + ], + "t_core_set_right_thigh": [ + 36.67563355768914, 36.675634501051476, 36.675634501051476, + 36.675634501051476, 36.675634501051476, 36.675634501051476, + 36.675634501051476, 36.675634501051476, 36.675634501051476, + 36.675634501051476, 36.675634501051476, 36.675634501051476, + 36.675634501051476, 36.675634501051476, 36.675634501051476, + 36.675634501051476, 36.675634501051476, 36.675634501051476, + 36.675634501051476, 36.675634501051476, 36.675634501051476 + ], + "t_core_set_right_leg": [ + 36.32476429641006, 36.32476524669116, 36.32476524669116, 36.32476524669116, + 36.32476524669116, 36.32476524669116, 36.32476524669116, 36.32476524669116, + 36.32476524669116, 36.32476524669116, 36.32476524669116, 36.32476524669116, + 36.32476524669116, 36.32476524669116, 36.32476524669116, 36.32476524669116, + 36.32476524669116, 36.32476524669116, 36.32476524669116, 36.32476524669116, + 36.32476524669116 + ], + "t_core_set_right_foot": [ + 34.602385885429875, 34.602386529646274, 34.602386529646274, + 34.602386529646274, 34.602386529646274, 34.602386529646274, + 34.602386529646274, 34.602386529646274, 34.602386529646274, + 34.602386529646274, 34.602386529646274, 34.602386529646274, + 34.602386529646274, 34.602386529646274, 34.602386529646274, + 34.602386529646274, 34.602386529646274, 34.602386529646274, + 34.602386529646274, 34.602386529646274, 34.602386529646274 + ], + "t_skin_set_head": [ + 34.98583588425839, 34.98583652881713, 34.98583652881713, 34.98583652881713, + 34.98583652881713, 34.98583652881713, 34.98583652881713, 34.98583652881713, + 34.98583652881713, 34.98583652881713, 34.98583652881713, 34.98583652881713, + 34.98583652881713, 34.98583652881713, 34.98583652881713, 34.98583652881713, + 34.98583652881713, 34.98583652881713, 34.98583652881713, 34.98583652881713, + 34.98583652881713 + ], + "t_skin_set_neck": [ + 35.10668437701332, 35.10668504573099, 35.10668504573099, 35.10668504573099, + 35.10668504573099, 35.10668504573099, 35.10668504573099, 35.10668504573099, + 35.10668504573099, 35.10668504573099, 35.10668504573099, 35.10668504573099, + 35.10668504573099, 35.10668504573099, 35.10668504573099, 35.10668504573099, + 35.10668504573099, 35.10668504573099, 35.10668504573099, 35.10668504573099, + 35.10668504573099 + ], + "t_skin_set_chest": [ + 34.61642082230399, 34.61642143810777, 34.61642143810777, 34.61642143810777, + 34.61642143810777, 34.61642143810777, 34.61642143810777, 34.61642143810777, + 34.61642143810777, 34.61642143810777, 34.61642143810777, 34.61642143810777, + 34.61642143810777, 34.61642143810777, 34.61642143810777, 34.61642143810777, + 34.61642143810777, 34.61642143810777, 34.61642143810777, 34.61642143810777, + 34.61642143810777 + ], + "t_skin_set_back": [ + 34.52453906447294, 34.52453966623942, 34.52453966623942, 34.52453966623942, + 34.52453966623942, 34.52453966623942, 34.52453966623942, 34.52453966623942, + 34.52453966623942, 34.52453966623942, 34.52453966623942, 34.52453966623942, + 34.52453966623942, 34.52453966623942, 34.52453966623942, 34.52453966623942, + 34.52453966623942, 34.52453966623942, 34.52453966623942, 34.52453966623942, + 34.52453966623942 + ], + "t_skin_set_pelvis": [ + 35.8448087799485, 35.844809578238284, 35.844809578238284, + 35.844809578238284, 35.844809578238284, 35.844809578238284, + 35.844809578238284, 35.844809578238284, 35.844809578238284, + 35.844809578238284, 35.844809578238284, 35.844809578238284, + 35.844809578238284, 35.844809578238284, 35.844809578238284, + 35.844809578238284, 35.844809578238284, 35.844809578238284, + 35.844809578238284, 35.844809578238284, 35.844809578238284 + ], + "t_skin_set_left_shoulder": [ + 34.25228721571578, 34.25228779730484, 34.25228779730484, 34.25228779730484, + 34.25228779730484, 34.25228779730484, 34.25228779730484, 34.25228779730484, + 34.25228779730484, 34.25228779730484, 34.25228779730484, 34.25228779730484, + 34.25228779730484, 34.25228779730484, 34.25228779730484, 34.25228779730484, + 34.25228779730484, 34.25228779730484, 34.25228779730484, 34.25228779730484, + 34.25228779730484 + ], + "t_skin_set_left_arm": [ + 33.85708690208492, 33.857087457104285, 33.857087457104285, + 33.857087457104285, 33.857087457104285, 33.857087457104285, + 33.857087457104285, 33.857087457104285, 33.857087457104285, + 33.857087457104285, 33.857087457104285, 33.857087457104285, + 33.857087457104285, 33.857087457104285, 33.857087457104285, + 33.857087457104285, 33.857087457104285, 33.857087457104285, + 33.857087457104285, 33.857087457104285, 33.857087457104285 + ], + "t_skin_set_left_hand": [ + 34.308155926164105, 34.308156507844046, 34.308156507844046, + 34.308156507844046, 34.308156507844046, 34.308156507844046, + 34.308156507844046, 34.308156507844046, 34.308156507844046, + 34.308156507844046, 34.308156507844046, 34.308156507844046, + 34.308156507844046, 34.308156507844046, 34.308156507844046, + 34.308156507844046, 34.308156507844046, 34.308156507844046, + 34.308156507844046, 34.308156507844046, 34.308156507844046 + ], + "t_skin_set_right_shoulder": [ + 34.252287215715846, 34.2522877973049, 34.2522877973049, 34.2522877973049, + 34.2522877973049, 34.2522877973049, 34.2522877973049, 34.2522877973049, + 34.2522877973049, 34.2522877973049, 34.2522877973049, 34.2522877973049, + 34.2522877973049, 34.2522877973049, 34.2522877973049, 34.2522877973049, + 34.2522877973049, 34.2522877973049, 34.2522877973049, 34.2522877973049, + 34.2522877973049 + ], + "t_skin_set_right_arm": [ + 33.857086902084944, 33.8570874571043, 33.8570874571043, 33.8570874571043, + 33.8570874571043, 33.8570874571043, 33.8570874571043, 33.8570874571043, + 33.8570874571043, 33.8570874571043, 33.8570874571043, 33.8570874571043, + 33.8570874571043, 33.8570874571043, 33.8570874571043, 33.8570874571043, + 33.8570874571043, 33.8570874571043, 33.8570874571043, 33.8570874571043, + 33.8570874571043 + ], + "t_skin_set_right_hand": [ + 34.308155926164154, 34.308156507844096, 34.308156507844096, + 34.308156507844096, 34.308156507844096, 34.308156507844096, + 34.308156507844096, 34.308156507844096, 34.308156507844096, + 34.308156507844096, 34.308156507844096, 34.308156507844096, + 34.308156507844096, 34.308156507844096, 34.308156507844096, + 34.308156507844096, 34.308156507844096, 34.308156507844096, + 34.308156507844096, 34.308156507844096, 34.308156507844096 + ], + "t_skin_set_left_thigh": [ + 34.150233478181754, 34.15023407024665, 34.15023407024665, 34.15023407024665, + 34.15023407024665, 34.15023407024665, 34.15023407024665, 34.15023407024665, + 34.15023407024665, 34.15023407024665, 34.15023407024665, 34.15023407024665, + 34.15023407024665, 34.15023407024665, 34.15023407024665, 34.15023407024665, + 34.15023407024665, 34.15023407024665, 34.15023407024665, 34.15023407024665, + 34.15023407024665 + ], + "t_skin_set_left_leg": [ + 33.95263950759043, 33.95264011542674, 33.95264011542674, 33.95264011542674, + 33.95264011542674, 33.95264011542674, 33.95264011542674, 33.95264011542674, + 33.95264011542674, 33.95264011542674, 33.95264011542674, 33.95264011542674, + 33.95264011542674, 33.95264011542674, 33.95264011542674, 33.95264011542674, + 33.95264011542674, 33.95264011542674, 33.95264011542674, 33.95264011542674, + 33.95264011542674 + ], + "t_skin_set_left_foot": [ + 34.116931163851426, 34.11693174783236, 34.11693174783236, 34.11693174783236, + 34.11693174783236, 34.11693174783236, 34.11693174783236, 34.11693174783236, + 34.11693174783236, 34.11693174783236, 34.11693174783236, 34.11693174783236, + 34.11693174783236, 34.11693174783236, 34.11693174783236, 34.11693174783236, + 34.11693174783236, 34.11693174783236, 34.11693174783236, 34.11693174783236, + 34.11693174783236 + ], + "t_skin_set_right_thigh": [ + 34.15023347818183, 34.15023407024672, 34.15023407024672, 34.15023407024672, + 34.15023407024672, 34.15023407024672, 34.15023407024672, 34.15023407024672, + 34.15023407024672, 34.15023407024672, 34.15023407024672, 34.15023407024672, + 34.15023407024672, 34.15023407024672, 34.15023407024672, 34.15023407024672, + 34.15023407024672, 34.15023407024672, 34.15023407024672, 34.15023407024672, + 34.15023407024672 + ], + "t_skin_set_right_leg": [ + 33.95263950759064, 33.95264011542693, 33.95264011542693, 33.95264011542693, + 33.95264011542693, 33.95264011542693, 33.95264011542693, 33.95264011542693, + 33.95264011542693, 33.95264011542693, 33.95264011542693, 33.95264011542693, + 33.95264011542693, 33.95264011542693, 33.95264011542693, 33.95264011542693, + 33.95264011542693, 33.95264011542693, 33.95264011542693, 33.95264011542693, + 33.95264011542693 + ], + "t_skin_set_right_foot": [ + 34.11693116385148, 34.11693174783242, 34.11693174783242, 34.11693174783242, + 34.11693174783242, 34.11693174783242, 34.11693174783242, 34.11693174783242, + 34.11693174783242, 34.11693174783242, 34.11693174783242, 34.11693174783242, + 34.11693174783242, 34.11693174783242, 34.11693174783242, 34.11693174783242, + 34.11693174783242, 34.11693174783242, 34.11693174783242, 34.11693174783242, + 34.11693174783242 + ], + "t_cb": [ + 36.895787875645865, 36.86155790230297, 36.84523167672987, + 36.835679307140005, 36.829004546714955, 36.82372393629762, + 36.81921709586416, 36.81519669966478, 36.811515451661016, 36.8080901646267, + 36.80486957941795, 36.80181995616739, 36.798917257273345, 36.79614352990779, + 36.793484869288044, 36.79093017626037, 36.7884703664554, 36.78609784668271, + 36.783806156023964, 36.781589712448216, 36.779443629426936 + ], + "t_artery_head": [ + 36.895787875492054, 36.86658752969729, 36.84827659136698, 36.83747199186714, + 36.830214337757674, 36.824654536630746, 36.81999839332233, + 36.815887467095536, 36.812144825631684, 36.80867408544074, + 36.80541761355074, 36.80233828253933, 36.799410197050605, 36.79661427302176, + 36.793935866379925, 36.79136337127421, 36.78888734255163, 36.78649992181777, + 36.78419444790056, 36.781965184047046, 36.77980712177159 + ], + "t_artery_neck": [ + 36.895787875621906, 36.86243405670239, 36.845671996320874, + 36.83593508853733, 36.829181949845285, 36.82386364908888, 36.81933603900003, + 36.81530266066975, 36.811612400036964, 36.80818033119103, 36.80495433323197, + 36.80190019574569, 36.79899362081739, 36.7962164932163, 36.7935548003953, + 36.790997368635644, 36.78853506009456, 36.78616024204999, 36.78386642359478, + 36.781647999438654, 36.77950006465943 + ], + "t_artery_chest": [ + 36.89578787557957, 36.863875888439644, 36.84649423099329, + 36.836411678217864, 36.82950614880475, 36.82411550206555, 36.81954881151819, + 36.81549142088882, 36.81178470080246, 36.80834035521786, 36.80510461687056, + 36.80204238934511, 36.7991288865276, 36.79634569286513, 36.793678598124146, + 36.79111629248269, 36.78864954087466, 36.78627063893051, 36.78397304153232, + 36.7817511014346, 36.77959988059756 + ], + "t_artery_back": [ + 36.89578787558303, 36.86376304547279, 36.84642549642823, 36.83637159458055, + 36.829479144819906, 36.82409469722193, 36.81953131947149, 36.81547594304977, + 36.81177059260313, 36.8083272629352, 36.80509232762398, 36.802030765396985, + 36.79911783138344, 36.7963351352104, 36.79366848313329, 36.79110657664544, + 36.78864018874354, 36.78626162098779, 36.783964332739444, 36.78174268021477, + 36.77959172810331 + ], + "t_artery_pelvis": [ + 36.89578787541572, 36.86819383509854, 36.84967890877878, 36.838388744855706, + 36.830819765217946, 36.82509594358853, 36.820353421887624, + 36.81619318285773, 36.812419183907465, 36.80892638657506, 36.80565311803329, + 36.8025602264799, 36.79962074797867, 36.796814982760424, 36.794127901980545, + 36.79154764381776, 36.78906458457536, 36.78667073659078, 36.78435934222294, + 36.78212459089285, 36.77996141639583 + ], + "t_artery_left_shoulder": [ + 36.76002456078816, 36.75674258259594, 36.74515966757305, 36.73799456926691, + 36.733401023760365, 36.73001036092241, 36.72720315408722, + 36.724705114304335, 36.72238879518635, 36.72019139687328, + 36.718080256120444, 36.716037919050976, 36.71405419185074, + 36.712122852028585, 36.71023989707071, 36.708402584606034, + 36.706608890036854, 36.704857195040496, 36.70314610739398, + 36.70147435714874, 36.69984073790625 + ], + "t_artery_left_arm": [ + 36.52923955995219, 36.596230152761564, 36.59805120504996, 36.59707147650357, + 36.59722874857851, 36.597903359007766, 36.598652986049274, + 36.59930006214566, 36.59978874895969, 36.600112197547894, 36.60028216575559, + 36.6003168532004, 36.60023510241636, 36.60005453454847, 36.599790871066716, + 36.599457792317665, 36.59906702400463, 36.598628516839895, + 36.598150655889995, 36.59764046946766, 36.59710382380873 + ], + "t_artery_left_hand": [ + 35.54000358081729, 35.938728521470324, 36.01310606139172, 36.06374377313519, + 36.106717069975446, 36.14317930011437, 36.17379554166225, 36.19932820192888, + 36.22053017673983, 36.238083124574125, 36.252579542230315, + 36.26452435733149, 36.27434300825433, 36.28239197024122, 36.28896898590338, + 36.29432228384938, 36.29865858132814, 36.30214990419824, 36.30493934124739, + 36.30714587202581, 36.30886840405315 + ], + "t_artery_right_shoulder": [ + 36.76002456078817, 36.75674258259596, 36.74515966757306, 36.73799456926691, + 36.73340102376037, 36.73001036092241, 36.727203154087235, 36.72470511430435, + 36.72238879518636, 36.7201913968733, 36.718080256120466, 36.71603791905099, + 36.71405419185076, 36.712122852028585, 36.71023989707073, 36.70840258460603, + 36.706608890036854, 36.704857195040496, 36.70314610739399, + 36.70147435714875, 36.699840737906264 + ], + "t_artery_right_arm": [ + 36.52923955995221, 36.596230152761585, 36.598051205050005, + 36.59707147650359, 36.59722874857852, 36.59790335900778, 36.59865298604929, + 36.59930006214566, 36.59978874895971, 36.60011219754793, 36.60028216575559, + 36.600316853200425, 36.60023510241639, 36.60005453454848, 36.59979087106674, + 36.59945779231768, 36.59906702400464, 36.5986285168399, 36.59815065589001, + 36.597640469467656, 36.59710382380873 + ], + "t_artery_right_hand": [ + 35.54000358081734, 35.93872852147036, 36.01310606139176, 36.06374377313523, + 36.10671706997547, 36.1431793001144, 36.17379554166227, 36.19932820192888, + 36.22053017673985, 36.23808312457416, 36.25257954223033, 36.2645243573315, + 36.274343008254334, 36.28239197024122, 36.288968985903395, 36.2943222838494, + 36.298658581328155, 36.302149904198245, 36.3049393412474, 36.30714587202581, + 36.30886840405315 + ], + "t_artery_left_thigh": [ + 36.826782304371214, 36.81409024954557, 36.79887553033855, + 36.787812605262836, 36.78027696515905, 36.774859620509126, + 36.77062207812628, 36.767055092441936, 36.763895094001455, + 36.761003098042224, 36.75830193998261, 36.7557461014986, 36.75330682207741, + 36.750964821699284, 36.748706546855814, 36.74652209866635, + 36.74440401155761, 36.7423464937313, 36.74034493455974, 36.73839557444699, + 36.73649527780995 + ], + "t_artery_left_leg": [ + 36.67336731935297, 36.6926685601725, 36.69012977409161, 36.68419015582196, + 36.67944422414172, 36.67624597313932, 36.67409745609257, 36.67254392194125, + 36.67130004047945, 36.67020676855139, 36.669179291269224, + 36.668173316863154, 36.66716611304962, 36.66614653907869, 36.66510981563189, + 36.664054718243, 36.6629820133357, 36.66189355341205, 36.66079173793135, + 36.65967918630586, 36.65855853875911 + ], + "t_artery_left_foot": [ + 35.2246369283959, 35.64235555740007, 35.74118486650374, 35.80025840297301, + 35.84990385237093, 35.89391546416043, 35.932998344090905, + 35.967529465891985, 35.99789229979216, 36.02448743364516, 36.04770850371775, + 36.06792556502064, 36.08547747262305, 36.10066987597898, 36.113776250251874, + 36.12504015297358, 36.13467791307811, 36.142881361843266, 36.14982043124841, + 36.155645550044234, 36.16048981725224 + ], + "t_artery_right_thigh": [ + 36.826782304371235, 36.814090249545586, 36.798875530338556, + 36.78781260526285, 36.78027696515907, 36.77485962050913, 36.77062207812627, + 36.76705509244194, 36.76389509400145, 36.76100309804223, 36.75830193998261, + 36.7557461014986, 36.75330682207741, 36.750964821699284, 36.7487065468558, + 36.74652209866635, 36.74440401155763, 36.74234649373131, 36.740344934559744, + 36.738395574447, 36.736495277809965 + ], + "t_artery_right_leg": [ + 36.673367319353034, 36.69266856017258, 36.69012977409167, 36.68419015582198, + 36.67944422414174, 36.676245973139366, 36.674097456092596, + 36.67254392194128, 36.67130004047949, 36.67020676855139, 36.669179291269245, + 36.668173316863175, 36.66716611304965, 36.6661465390787, 36.66510981563186, + 36.66405471824303, 36.66298201333574, 36.6618935534121, 36.6607917379314, + 36.65967918630592, 36.658558538759195 + ], + "t_artery_right_foot": [ + 35.22463692839595, 35.64235555740013, 35.7411848665038, 35.800258402973036, + 35.84990385237096, 35.89391546416045, 35.93299834409093, 35.967529465892014, + 35.997892299792206, 36.024487433645184, 36.047708503717764, + 36.06792556502065, 36.08547747262306, 36.10066987597899, 36.11377625025187, + 36.125040152973604, 36.134677913078136, 36.14288136184331, + 36.149820431248436, 36.15564555004427, 36.160489817252305 + ], + "t_vein_head": [ + 37.1286294916478, 37.1236479468245, 37.115301294910445, 37.10584588362663, + 37.09660508085999, 37.08813070263778, 37.080559789912655, + 37.073848794086565, 37.0678907903326, 37.06256816358001, 37.05777318644927, + 37.05341396363039, 37.04941594389025, 37.04571894824418, 37.0422748605559, + 37.03904533141314, 37.03599977274166, 37.03311370261536, 37.030367418374084, + 37.02774495032107, 37.0252332447027 + ], + "t_vein_neck": [ + 37.027843684904795, 37.02177460966455, 37.012533721566996, + 37.002572966137365, 36.993115412040055, 36.984600512757396, + 36.97708906171731, 36.97048849087293, 36.96466289848604, 36.95947826096939, + 36.95481818669988, 36.950587737451144, 36.94671018983865, + 36.943124686550306, 36.93978327538948, 36.936648188805705, + 36.93368959131075, 36.93088378715174, 36.92821182223806, 36.925658405231104, + 36.92321107974719 + ], + "t_vein_chest": [ + 36.99530423285108, 36.99189017335429, 36.98639366550579, 36.98005181732203, + 36.97351197201931, 36.96707064372636, 36.960856975942654, + 36.954923124689735, 36.94928520933118, 36.943941879791694, + 36.93888316559435, 36.93409503055216, 36.929561487433766, 36.92526604208846, + 36.921192396047914, 36.91732485541254, 36.91364855609202, 36.91014957467343, + 36.90681496787814, 36.90363276760809, 36.90059194886303 + ], + "t_vein_back": [ + 37.06467699338318, 37.06098704305985, 37.05512504284434, 37.048433068091015, + 37.04159349891781, 37.034909784219295, 37.02850871211681, 37.02243635682955, + 37.01670192677042, 37.01129737559393, 37.00620667494374, 37.00141076575919, + 36.996889034911796, 36.99262096612737, 36.98858684379857, 36.98476810563869, + 36.98114750143581, 36.97770913902169, 36.97443846390862, 36.97132220066647, + 36.96834827348451 + ], + "t_vein_pelvis": [ + 36.63899228469504, 36.57365449597692, 36.54454055243996, 36.53151703535003, + 36.5257820717857, 36.52340346261375, 36.52258634344323, 36.52248653701861, + 36.522693416060896, 36.52299996887878, 36.52329882372256, 36.52353443646912, + 36.52367757496598, 36.52371470517855, 36.52364148215639, 36.52345905960342, + 36.523171887277634, 36.522786339758596, 36.52230983604995, + 36.521750263478964, 36.52111559800563 + ], + "t_vein_left_shoulder": [ + 35.6010834945116, 35.62204046297637, 35.64809455581889, 35.674165899070374, + 35.698327227417714, 35.71995652118602, 35.73899314318069, + 35.755611388433046, 35.770070918895954, 35.78264689244403, + 35.79359926291259, 35.803161607367215, 35.81153703769062, 35.8188998512431, + 35.82539836643067, 35.83115816195486, 35.836285250897085, 35.84086898642022, + 35.844984628767556, 35.8486955670574, 35.85205521829108 + ], + "t_vein_left_arm": [ + 35.21468563979818, 35.28986788785431, 35.36135925967702, 35.42289814178879, + 35.47526231819588, 35.51974280147888, 35.5575545613236, 35.58976990259028, + 35.6173045860416, 35.640925718422714, 35.661270269339305, 35.67886592389298, + 35.69414998642997, 35.70748552623137, 35.7191745646525, 35.729468791242454, + 35.73857827556051, 35.7466785810491, 35.75391660440235, 35.76041539101114, + 35.76627812047956 + ], + "t_vein_left_hand": [ + 34.845270389463906, 35.04197175174221, 35.18682722782456, 35.30203758172493, + 35.39669261355514, 35.4750448940308, 35.540026139907006, 35.593947324347596, + 35.63869023779202, 35.67580393347535, 35.706570719920215, 35.73205561682079, + 35.75314464917604, 35.77057554753147, 35.78496274647889, 35.79681798638983, + 35.806567408347206, 35.81456579111698, 35.821108428026854, + 35.82644104064434, 35.83076805356914 + ], + "t_vein_right_shoulder": [ + 35.601083494511684, 35.62204046297646, 35.64809455581898, 35.67416589907044, + 35.69832722741778, 35.719956521186084, 35.73899314318078, 35.75561138843312, + 35.77007091889601, 35.78264689244407, 35.79359926291264, 35.80316160736726, + 35.811537037690655, 35.81889985124316, 35.825398366430726, 35.8311581619549, + 35.83628525089714, 35.840868986420276, 35.844984628767605, + 35.84869556705745, 35.85205521829111 + ], + "t_vein_right_arm": [ + 35.214685639798226, 35.28986788785435, 35.36135925967705, 35.42289814178883, + 35.47526231819592, 35.51974280147891, 35.55755456132364, 35.5897699025903, + 35.61730458604163, 35.640925718422736, 35.66127026933932, 35.67886592389301, + 35.694149986430006, 35.707485526231395, 35.71917456465252, + 35.72946879124247, 35.73857827556051, 35.74667858104912, 35.75391660440236, + 35.760415391011165, 35.7662781204796 + ], + "t_vein_right_hand": [ + 34.845270389463955, 35.04197175174225, 35.18682722782459, 35.30203758172497, + 35.39669261355518, 35.475044894030844, 35.54002613990705, + 35.593947324347624, 35.638690237792055, 35.67580393347538, + 35.706570719920215, 35.7320556168208, 35.75314464917606, 35.77057554753149, + 35.784962746478904, 35.79681798638984, 35.80656740834722, 35.81456579111699, + 35.82110842802686, 35.826441040644355, 35.83076805356914 + ], + "t_vein_left_thigh": [ + 36.04313378500564, 36.04524382314615, 36.04899308742757, 36.05409484199839, + 36.06009646411273, 36.06655750845533, 36.073128667828534, + 36.079562493255644, 36.08569807847811, 36.091439920207144, + 36.09673881793034, 36.101576959744186, 36.10595689079657, 36.10989393914721, + 36.11341100292689, 36.11653506294915, 36.119294884610305, + 36.121719526965094, 36.123837395320884, 36.125675658606674, + 36.12725991129003 + ], + "t_vein_left_leg": [ + 35.6160489275908, 35.63519642567867, 35.65996637331266, 35.68618920766172, + 35.71215375698262, 35.737028178355054, 35.76037892015928, 35.78199811785109, + 35.80181937156113, 35.819865069405886, 35.83621078543692, 35.85096144829074, + 35.86423572221301, 35.876156308125516, 35.886844018688166, + 35.89641434196064, 35.90497558520226, 35.912628008264974, 35.91946356917811, + 35.925566042408015, 35.93101135783412 + ], + "t_vein_left_foot": [ + 34.635772634243736, 34.78284436533203, 34.90743954517969, 35.01220479120085, + 35.10320937255031, 35.183278164875375, 35.25392221249952, 35.31621847752491, + 35.371075383396374, 35.41930332520154, 35.461633181345256, + 35.49872321467414, 35.531164205193576, 35.55948466084343, 35.58415622337109, + 35.60559900519517, 35.62418668144856, 35.64025124313853, 35.65408737258076, + 35.665956434212944, 35.67609009125785 + ], + "t_vein_right_thigh": [ + 36.04313378500574, 36.045243823146244, 36.04899308742767, 36.05409484199849, + 36.060096464112824, 36.0665575084554, 36.0731286678286, 36.07956249325571, + 36.08569807847819, 36.09143992020722, 36.0967388179304, 36.10157695974425, + 36.10595689079663, 36.10989393914726, 36.113411002926924, + 36.116535062949204, 36.11929488461035, 36.121719526965144, + 36.12383739532094, 36.125675658606724, 36.12725991129008 + ], + "t_vein_right_leg": [ + 35.61604892759106, 35.63519642567891, 35.65996637331289, 35.686189207661954, + 35.71215375698285, 35.73702817835528, 35.76037892015952, 35.78199811785131, + 35.80181937156134, 35.819865069406085, 35.83621078543712, + 35.850961448290924, 35.86423572221319, 35.8761563081257, 35.88684401868833, + 35.89641434196082, 35.90497558520243, 35.91262800826515, 35.91946356917828, + 35.92556604240819, 35.9310113578343 + ], + "t_vein_right_foot": [ + 34.63577263424378, 34.782844365332075, 34.907439545179734, + 35.012204791200894, 35.10320937255034, 35.1832781648754, 35.25392221249954, + 35.31621847752494, 35.3710753833964, 35.419303325201575, 35.46163318134527, + 35.498723214674165, 35.5311642051936, 35.559484660843445, + 35.584156223371096, 35.605599005195174, 35.62418668144857, + 35.64025124313855, 35.65408737258078, 35.66595643421299, 35.676090091257876 + ], + "t_superficial_vein_head": [ + 34.25228779728972, 34.22127547078267, 34.22364726005129, 34.23929338571361, + 34.260656069543415, 34.28346540511675, 34.305441214330344, 34.3255015787792, + 34.34325180492582, 34.3586684351296, 34.37191163095578, 34.38321839331524, + 34.39284411362618, 34.40103316532439, 34.40800578046795, 34.41395378491963, + 34.41904087909459, 34.42340502967501, 34.42716164675878, 34.4304068606933, + 34.43322057241959 + ], + "t_superficial_vein_neck": [ + 33.85708745709104, 34.04283160300862, 34.18341647015286, 34.29546672495999, + 34.38398381974492, 34.45394074971431, 34.50958346227333, 34.55424678631702, + 34.590455751560185, 34.62009699309498, 34.64457987133072, + 34.664965070367025, 34.682060084651624, 34.696487837678305, + 34.70873530900248, 34.71918794206742, 34.72815415632493, 34.73588302722753, + 34.7425772420285, 34.74840276116909, 34.75349615096973 + ], + "t_superficial_vein_chest": [ + 34.30815650782096, 34.72113653594348, 34.9220757131451, 35.059675900391554, + 35.1616478029563, 35.24060420220779, 35.3034732061976, 35.35439286691067, + 35.3960432193582, 35.4302962793245, 35.458542271323054, 35.48185997124009, + 35.50111066990293, 35.516994130397975, 35.53008473108921, 35.54085668935333, + 35.54970279999531, 35.55694898915983, 35.562865948552016, 35.56767859957707, + 35.57157387060514 + ], + "t_superficial_vein_back": [ + 34.252287797289775, 34.22127547078273, 34.223647260051344, + 34.23929338571365, 34.260656069543494, 34.28346540511683, 34.30544121433041, + 34.32550157877925, 34.34325180492587, 34.35866843512965, 34.37191163095581, + 34.383218393315275, 34.392844113626225, 34.40103316532442, + 34.408005780467974, 34.413953784919656, 34.4190408790946, 34.42340502967506, + 34.42716164675882, 34.43040686069332, 34.4332205724196 + ], + "t_superficial_vein_pelvis": [ + 33.85708745709107, 34.04283160300865, 34.183416470152885, 34.29546672496002, + 34.383983819744955, 34.45394074971434, 34.509583462273376, + 34.554246786317066, 34.59045575156023, 34.620096993095025, + 34.644579871330755, 34.66496507036707, 34.68206008465165, 34.69648783767833, + 34.708735309002506, 34.71918794206744, 34.72815415632495, + 34.735883027227544, 34.74257724202852, 34.7484027611691, 34.75349615096976 + ], + "t_superficial_vein_left_shoulder": [ + 34.308156507821, 34.721136535943536, 34.922075713145134, 35.059675900391596, + 35.16164780295634, 35.24060420220784, 35.303473206197644, 35.35439286691071, + 35.39604321935823, 35.43029627932453, 35.45854227132307, 35.48185997124013, + 35.50111066990294, 35.51699413039796, 35.53008473108919, 35.54085668935334, + 35.549702799995316, 35.556948989159835, 35.562865948552016, + 35.56767859957708, 35.571573870605135 + ], + "t_superficial_vein_left_arm": [ + 34.150234070220854, 34.14083425657115, 34.13636918205036, + 34.134611455175474, 34.13498496952286, 34.13696720106414, 34.14008696963942, + 34.143947883469735, 34.1482321999546, 34.152694170819665, 34.157149583455, + 34.16146481314715, 34.16554675835612, 34.16933412291464, 34.172790138903984, + 34.17589661664899, 34.17864915676612, 34.18105334758451, 34.183121781348376, + 34.184871740878336, 34.186323428860526 + ], + "t_superficial_vein_left_hand": [ + 33.95264011539343, 33.997097421950194, 34.04314135170966, 34.08891105394295, + 34.13249416020473, 34.17299403649519, 34.21006962684359, 34.24366833661984, + 34.27388982761607, 34.30091386540433, 34.32496009254837, 34.346264657986836, + 34.36506628054472, 34.38159772390639, 34.39608075239775, 34.40872326375827, + 34.41971785237507, 34.42924132075479, 34.43745481776624, 34.44450438344882, + 34.45052174699884 + ], + "t_superficial_vein_right_shoulder": [ + 34.116931747802035, 34.385213888515345, 34.550395332743385, + 34.67613731116129, 34.77772530990037, 34.86267021388312, 34.935196653711756, + 34.997858067149444, 35.05233188312434, 35.099820271681324, + 35.141251942485745, 35.17738487684029, 35.208860150015504, + 35.23623142219089, 35.25998257210432, 35.2805391961356, 35.298276859885554, + 35.31352750890016, 35.326584738570794, 35.33770828271677, 35.34712791549511 + ], + "t_superficial_vein_right_arm": [ + 34.15023407022093, 34.14083425657123, 34.13636918205043, 34.134611455175545, + 34.134984969522904, 34.136967201064174, 34.14008696963949, + 34.14394788346978, 34.14823219995463, 34.152694170819686, 34.15714958345501, + 34.16146481314714, 34.1655467583561, 34.16933412291463, 34.17279013890395, + 34.17589661664897, 34.178649156766106, 34.181053347584516, + 34.183121781348405, 34.184871740878364, 34.18632342886057 + ], + "t_superficial_vein_right_hand": [ + 33.95264011539362, 33.99709742195037, 34.043141351709835, 34.08891105394311, + 34.13249416020487, 34.17299403649533, 34.21006962684371, 34.24366833661994, + 34.27388982761616, 34.30091386540444, 34.32496009254847, 34.34626465798693, + 34.36506628054483, 34.381597723906495, 34.39608075239784, 34.40872326375836, + 34.419717852375165, 34.429241320754876, 34.43745481776632, + 34.44450438344891, 34.45052174699894 + ], + "t_superficial_vein_left_thigh": [ + 34.11693174780209, 34.38521388851537, 34.55039533274342, 34.676137311161305, + 34.77772530990038, 34.86267021388314, 34.93519665371178, 34.99785806714948, + 35.05233188312434, 35.09982027168135, 35.14125194248577, 35.17738487684029, + 35.20886015001553, 35.23623142219094, 35.25998257210434, 35.28053919613562, + 35.29827685988559, 35.31352750890016, 35.32658473857082, 35.3377082827168, + 35.34712791549515 + ], + "t_muscle_head": [ + 35.56525956589897, 35.563563709671506, 35.5605610437521, 35.55674348832768, + 35.55246675614227, 35.54796473936092, 35.54338777567992, 35.538828593764585, + 35.534344489512186, 35.52997037010918, 35.52572707995114, 35.52162784545089, + 35.517677739822794, 35.51387793022668, 35.51022694192774, 35.50672153126179, + 35.5033572941206, 35.50012909425773, 35.49703136684004, 35.494058334167114, + 35.49120415866552 + ], + "t_muscle_pelvis": [ + 36.895467897913086, 36.894503283315835, 36.89292328658204, + 36.89100124329825, 36.888878920008054, 36.886627973108894, + 36.88428812806556, 36.88188343863231, 36.87943025892771, 36.87694068319603, + 36.87442426586628, 36.87188932434512, 36.86934241695645, 36.86678913641115, + 36.86423431091839, 36.86168214523896, 36.859136323873734, + 36.856600089205564, 36.8540763024056, 36.851567492077315, 36.84907589392475 + ], + "t_fat_head": [ + 35.26754117907478, 35.265744455942176, 35.26267751959397, 35.25891447333145, + 35.254793233528574, 35.25050021099964, 35.246145597433156, + 35.241799392408296, 35.23750847492975, 35.233304770672234, + 35.22920982402628, 35.225238256553745, 35.221398563258205, + 35.217694933566065, 35.21412846150471, 35.21069802386681, + 35.207400934215464, 35.20423343217341, 35.20119104856143, + 35.198268876435996, 35.195461770831336 + ], + "t_fat_pelvis": [ + 36.10705391945993, 36.10631210370277, 36.10502264070635, 36.103394399360376, + 36.10155655460487, 36.09958221060657, 36.09751341572537, 36.09537582383111, + 36.09318635227807, 36.090957062789926, 36.08869715179519, 36.08641403903403, + 36.08411390130943, 36.081802008290424, 36.0794829317988, 36.077160684488895, + 36.07483881678366, 36.07252048776839, 36.07020851902766, 36.06790543682645, + 36.065613506033756 + ], + "to_head": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_neck": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_chest": [ + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002 + ], + "to_back": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_pelvis": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_left_shoulder": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_left_arm": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_left_hand": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_right_shoulder": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_right_arm": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_right_hand": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_left_thigh": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_left_leg": [ + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002 + ], + "to_left_foot": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_right_thigh": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "to_right_leg": [ + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002, + 28.740000000000002, 28.740000000000002, 28.740000000000002 + ], + "to_right_foot": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "r_t_head": [ + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216 + ], + "r_t_neck": [ + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216, + 0.10672313658551216, 0.10672313658551216, 0.10672313658551216 + ], + "r_t_chest": [ + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264, + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264, + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264, + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264, + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264, + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264, + 0.13717325696488264, 0.13717325696488264, 0.13717325696488264 + ], + "r_t_back": [ + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847, + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847, + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847, + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847, + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847, + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847, + 0.14285619513017847, 0.14285619513017847, 0.14285619513017847 + ], + "r_t_pelvis": [ + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413, + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413, + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413, + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413, + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413, + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413, + 0.1394689899674413, 0.1394689899674413, 0.1394689899674413 + ], + "r_t_left_shoulder": [ + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628 + ], + "r_t_left_arm": [ + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253 + ], + "r_t_left_hand": [ + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356 + ], + "r_t_right_shoulder": [ + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628, + 0.12254833363429628, 0.12254833363429628, 0.12254833363429628 + ], + "r_t_right_arm": [ + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253, + 0.1253125937355253, 0.1253125937355253, 0.1253125937355253 + ], + "r_t_right_hand": [ + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356, + 0.12690295796309356, 0.12690295796309356, 0.12690295796309356 + ], + "r_t_left_thigh": [ + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722 + ], + "r_t_left_leg": [ + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282 + ], + "r_t_left_foot": [ + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387 + ], + "r_t_right_thigh": [ + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722, + 0.13209928477724722, 0.13209928477724722, 0.13209928477724722 + ], + "r_t_right_leg": [ + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282, + 0.13549972302004282, 0.13549972302004282, 0.13549972302004282 + ], + "r_t_right_foot": [ + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387, + 0.12224778800797387, 0.12224778800797387, 0.12224778800797387 + ], + "r_et_head": [ + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922 + ], + "r_et_neck": [ + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922, + 0.013528355789463922, 0.013528355789463922, 0.013528355789463922 + ], + "r_et_chest": [ + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746, + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746, + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746, + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746, + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746, + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746, + 0.020406408732928746, 0.020406408732928746, 0.020406408732928746 + ], + "r_et_back": [ + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052, + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052, + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052, + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052, + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052, + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052, + 0.020827159428453052, 0.020827159428453052, 0.020827159428453052 + ], + "r_et_pelvis": [ + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274, + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274, + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274, + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274, + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274, + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274, + 0.021265625942736274, 0.021265625942736274, 0.021265625942736274 + ], + "r_et_left_shoulder": [ + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495 + ], + "r_et_left_arm": [ + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702 + ], + "r_et_left_hand": [ + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728 + ], + "r_et_right_shoulder": [ + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495, + 0.01678865206005495, 0.01678865206005495, 0.01678865206005495 + ], + "r_et_right_arm": [ + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702, + 0.017072403925858702, 0.017072403925858702, 0.017072403925858702 + ], + "r_et_right_hand": [ + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728, + 0.016514178184413728, 0.016514178184413728, 0.016514178184413728 + ], + "r_et_left_thigh": [ + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287 + ], + "r_et_left_leg": [ + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675 + ], + "r_et_left_foot": [ + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675 + ], + "r_et_right_thigh": [ + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287, + 0.021645369263142287, 0.021645369263142287, 0.021645369263142287 + ], + "r_et_right_leg": [ + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675 + ], + "r_et_right_foot": [ + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675, + 0.029709330361175675, 0.029709330361175675, 0.029709330361175675 + ], + "tdb_head": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_neck": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_chest": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_back": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_pelvis": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_left_shoulder": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_left_arm": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_left_hand": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_right_shoulder": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_right_arm": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_right_hand": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_left_thigh": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_left_leg": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_left_foot": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_right_thigh": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_right_leg": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tdb_right_foot": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_head": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_neck": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_chest": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_back": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_pelvis": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_left_shoulder": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_left_arm": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_left_hand": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_right_shoulder": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_right_arm": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_right_hand": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_left_thigh": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_left_leg": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_left_foot": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_right_thigh": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_right_leg": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "tr_right_foot": [ + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006, + 28.740000000000006, 28.740000000000006, 28.740000000000006 + ], + "rh_head": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_neck": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_chest": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_back": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_pelvis": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_left_shoulder": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_left_arm": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_left_hand": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_right_shoulder": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_right_arm": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_right_hand": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_left_thigh": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_left_leg": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_left_foot": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_right_thigh": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_right_leg": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "rh_right_foot": [ + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50 + ], + "v_head": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_neck": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_chest": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_back": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_pelvis": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_left_shoulder": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_left_arm": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_left_hand": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_right_shoulder": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_right_arm": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_right_hand": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_left_thigh": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_left_leg": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_left_foot": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_right_thigh": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_right_leg": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "v_right_foot": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + "par": [ + 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, + 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25 + ], + "clo_head": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "clo_neck": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "clo_chest": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "clo_back": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "clo_pelvis": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "clo_left_shoulder": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_left_arm": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_left_hand": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_right_shoulder": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_right_arm": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_right_hand": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_left_thigh": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_left_leg": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_left_foot": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_right_thigh": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_right_leg": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "clo_right_foot": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_skin_head": [ + 1.7798364861882476, 1.7798365839377677, 1.7794176243835802, + 1.7788388651028608, 1.7782138086637276, 1.7775757428034311, + 1.7769349608336586, 1.776296768909828, 1.775665438395292, + 1.7750446956317647, 1.7744376154100554, 1.7738465544104145, + 1.7732732319413018, 1.7727187378307694, 1.7721836401116564, + 1.7716681010773734, 1.7711719789749838, 1.770694911121153, + 1.7702363795342624, 1.7697957616422233, 1.7693723688246845 + ], + "e_skin_neck": [ + 0.4740753064040876, 0.4740753332954048, 0.4739041236794663, + 0.4736459724103154, 0.4733539240102513, 0.47305824716556777, + 0.47277521160353586, 0.4725125980996172, 0.47227309328024397, + 0.4720565239739596, 0.4718612478423804, 0.47168499400397607, + 0.4715253725548292, 0.47138007801477394, 0.47124702157913534, + 0.4711243812405757, 0.4710106060887829, 0.4709043970407532, + 0.4708046772215033, 0.47071055952603774, 0.47062131538998714 + ], + "e_skin_chest": [ + 1.8186044970504518, 1.81860459381695, 1.8182328602020803, 1.81768170512769, + 1.8170498286030645, 1.8163823969021464, 1.8157022232470377, + 1.8150222145249415, 1.8143503207131135, 1.8136916866002812, + 1.8130496982968776, 1.812426554182028, 1.81182361405121, 1.811241623352909, + 1.810680871470378, 1.8101413085532956, 1.8096226339065868, + 1.8091243638778378, 1.8086458844417934, 1.8081864920770647, + 1.8077454255344236 + ], + "e_skin_back": [ + 1.626329724149269, 1.6263298090122034, 1.6260444982151097, + 1.6256132869562434, 1.625109184213665, 1.624567197833999, + 1.6240062884433397, 1.6234380853425396, 1.6228703535653315, + 1.6223085293395698, 1.6217564912542202, 1.6212170016021952, + 1.6206919943699702, 1.6201827642861117, 1.619690110967396, + 1.6192144500942593, 1.618755900806076, 1.618314355136614, + 1.6178895334700942, 1.617481028900797, 1.6170883426775091 + ], + "e_skin_pelvis": [ + 2.444774422413006, 2.444774583618648, 2.44452429291476, 2.4441661565163884, + 2.443771240985284, 2.443361616875259, 2.442942747281913, 2.442516048593955, + 2.4420823687225495, 2.4416426471587953, 2.4411979113181075, + 2.440749190566127, 2.4402974660114842, 2.439843641802231, + 2.4393885380888682, 2.438932894193023, 2.4384773753605162, + 2.438022580166815, 2.437569047459957, 2.4371172625116873, 2.4366676623577224 + ], + "e_skin_left_shoulder": [ + 1.174792023567054, 1.1747920834464414, 1.1720986948363759, + 1.1719824615694738, 1.173313725853815, 1.1753094343665769, + 1.1775099004319391, 1.1796644832045173, 1.1816500793359004, + 1.1834177174175942, 1.184959179914964, 1.1862869620501082, + 1.1874227214209703, 1.1883908555856932, 1.1892151973487624, + 1.1899174766640337, 1.1905167576417166, 1.1910293859130006, + 1.1914691811873834, 1.1918477287670866, 1.192174693015109 + ], + "e_skin_left_arm": [ + 0.7321337199579199, 0.7321337561388918, 0.7424327727657611, + 0.7514345155293584, 0.7587360151094585, 0.7645516073297838, + 0.7691704633591185, 0.7728557037324251, 0.7758201629400822, + 0.778227607839326, 0.780201515832997, 0.7818345849685618, + 0.7831967509776808, 0.7843413078392215, 0.7853093756077846, + 0.7861330950733542, 0.7868378992377365, 0.7874441350443189, + 0.7879682336356528, 0.7884235674273473, 0.7888210885523633 + ], + "e_skin_left_hand": [ + 0.6250902468199633, 0.6250902786158677, 0.6413724079646341, + 0.6528737683845358, 0.6610007124745932, 0.6670513714007954, + 0.6717481228000881, 0.6754963724333269, 0.6785386856280348, + 0.6810320945142774, 0.6830863305175577, 0.68478302637574, + 0.6861857003870327, 0.6873452289638841, 0.6883030814414154, + 0.6890933996404064, 0.6897444475747901, 0.6902796909388736, + 0.6907186393374345, 0.6910775232339162, 0.6913698476672631 + ], + "e_skin_right_shoulder": [ + 1.1747920235670604, 1.1747920834464478, 1.1720986948363858, + 1.1719824615694803, 1.1733137258538215, 1.1753094343665833, + 1.1775099004319458, 1.1796644832045242, 1.1816500793359004, + 1.1834177174175942, 1.184959179914964, 1.1862869620501149, + 1.187422721420977, 1.1883908555857001, 1.1892151973487688, + 1.1899174766640337, 1.190516757641723, 1.1910293859130072, + 1.1914691811873834, 1.191847728767093, 1.192174693015109 + ], + "e_skin_right_arm": [ + 0.7321337199579199, 0.7321337561388918, 0.7424327727657655, + 0.7514345155293584, 0.758736015109463, 0.7645516073297838, + 0.7691704633591185, 0.7728557037324295, 0.7758201629400865, + 0.7782276078393304, 0.7802015158329992, 0.7818345849685661, + 0.7831967509776829, 0.7843413078392237, 0.7853093756077888, + 0.7861330950733542, 0.7868378992377365, 0.7874441350443189, + 0.7879682336356528, 0.7884235674273473, 0.7888210885523633 + ], + "e_skin_right_hand": [ + 0.6250902468199668, 0.6250902786158713, 0.6413724079646341, + 0.6528737683845358, 0.6610007124745932, 0.6670513714007954, + 0.6717481228000917, 0.6754963724333307, 0.6785386856280383, + 0.6810320945142794, 0.6830863305175577, 0.6847830263757434, + 0.6861857003870365, 0.6873452289638841, 0.6883030814414154, + 0.6890933996404064, 0.6897444475747901, 0.6902796909388736, + 0.6907186393374383, 0.6910775232339162, 0.6913698476672631 + ], + "e_skin_left_thigh": [ + 1.966050689034695, 1.9660507914631897, 1.964723569489411, + 1.9638611127183714, 1.9634549343159442, 1.9634229506642593, + 1.963677116963264, 1.9641364877424603, 1.964732438698686, + 1.9654096474114517, 1.9661250827783343, 1.966846276342849, + 1.9675494799946571, 1.9682179582646362, 1.9688405024813065, + 1.9694101849705448, 1.9699233368988684, 1.9703787229099954, + 1.9707768833631079, 1.9711196163686624, 1.9714095746975469 + ], + "e_skin_left_leg": [ + 0.7543232350442859, 0.7543232757112943, 0.7567442041760181, + 0.7596090657078816, 0.7625294954507097, 0.765345290336288, + 0.7679827167758174, 0.7704106741267375, 0.7726203122210682, + 0.7746146899988589, 0.7764032706383341, 0.7779988557015862, + 0.7794158083911099, 0.7806689924470245, 0.7817731203650139, + 0.7827423581753347, 0.7835900916870979, 0.7843287984721062, + 0.7849699903624239, 0.7855242031683083, 0.7860010176931049 + ], + "e_skin_left_foot": [ + 0.3826793911046459, 0.38267941079560197, 0.389582100800174, + 0.39516344303341266, 0.39955415204166317, 0.4031363120902662, + 0.40614965765616945, 0.4087346841161507, 0.41097716101327764, + 0.4129336265826139, 0.4146447254028153, 0.41614200514628547, + 0.4174513758680737, 0.41859490489662615, 0.4195917854184247, + 0.4204589024673751, 0.42121119621960923, 0.4218619207074674, + 0.42242284539140734, 0.4229044225974174, 0.4233159321498254 + ], + "e_skin_right_thigh": [ + 1.9660506890347005, 1.9660507914631953, 1.9647235694894225, + 1.963861112718383, 1.9634549343159549, 1.96342295066427, 1.9636771169632747, + 1.964136487742471, 1.964732438698697, 1.9654096474114517, + 1.9661250827783343, 1.966846276342849, 1.9675494799946571, + 1.968217958264631, 1.9688405024813065, 1.969410184970534, + 1.9699233368988576, 1.9703787229099954, 1.9707768833631079, + 1.9711196163686624, 1.9714095746975524 + ], + "e_skin_right_leg": [ + 0.7543232350442964, 0.7543232757113072, 0.7567442041760246, + 0.7596090657078944, 0.7625294954507226, 0.7653452903363008, + 0.7679827167758282, 0.7704106741267484, 0.772620312221077, + 0.7746146899988674, 0.7764032706383406, 0.7779988557015928, + 0.7794158083911144, 0.780668992447031, 0.7817731203650249, + 0.7827423581753434, 0.7835900916871067, 0.7843287984721129, + 0.7849699903624326, 0.7855242031683151, 0.7860010176931137 + ], + "e_skin_right_foot": [ + 0.38267939110464805, 0.38267941079560414, 0.389582100800174, + 0.39516344303341266, 0.39955415204166317, 0.4031363120902662, + 0.4061496576561716, 0.4087346841161507, 0.41097716101327764, + 0.4129336265826139, 0.4146447254028153, 0.41614200514628547, + 0.4174513758680737, 0.41859490489662615, 0.419591785418427, + 0.42045890246737744, 0.42121119621960923, 0.4218619207074674, + 0.4224228453914097, 0.4229044225974198, 0.4233159321498254 + ], + "e_max_head": [ + 29.663941436470793, 29.66394306562946, 29.656960406393004, + 29.647314418381015, 29.636896811062126, 29.626262380057188, + 29.61558268056098, 29.604946148497135, 29.594423973254866, + 29.584078260529413, 29.57396025683426, 29.564109240173575, + 29.554553865688366, 29.545312297179493, 29.53639400186094, + 29.52780168462289, 29.5195329829164, 29.511581852019216, 29.503939658904375, + 29.49659602737039, 29.48953948041141 + ], + "e_max_neck": [ + 7.901255106734794, 7.901255554923414, 7.898402061324439, 7.894099540171924, + 7.889232066837522, 7.88430411942613, 7.879586860058931, 7.875209968326954, + 7.8712182213374, 7.867608732899327, 7.8643541307063405, 7.8614165667329345, + 7.8587562092471535, 7.856334633579566, 7.854117026318923, 7.852073020676262, + 7.850176768146382, 7.848406617345887, 7.846744620358389, 7.845175992100629, + 7.8436885898331195 + ], + "e_max_chest": [ + 30.310074950840864, 30.310076563615834, 30.303881003368005, + 30.2946950854615, 30.284163810051076, 30.273039948369107, + 30.261703720783963, 30.250370242082358, 30.239172011885227, + 30.228194776671355, 30.217494971614627, 30.207109236367135, + 30.197060234186836, 30.18736038921515, 30.1780145245063, 30.169021809221594, + 30.160377231776447, 30.1520727312973, 30.14409807402989, 30.136441534617745, + 30.12909042557373 + ], + "e_max_back": [ + 27.105495402487815, 27.10549681687006, 27.100741636918496, + 27.09355478260406, 27.08515307022775, 27.076119963899984, + 27.066771474055663, 27.057301422375662, 27.047839226088858, + 27.03847548899283, 27.029274854237006, 27.020283360036586, + 27.011533239499506, 27.003046071435197, 26.994835182789934, + 26.98690750157099, 26.9792650134346, 26.971905918943566, 26.964825557834907, + 26.958017148346617, 26.951472377958485 + ], + "e_max_pelvis": [ + 40.7462403735501, 40.746243060310796, 40.74207154857933, 40.73610260860647, + 40.72952068308807, 40.722693614587655, 40.715712454698554, + 40.70860080989925, 40.70137281204249, 40.694044119313254, 40.68663185530179, + 40.67915317610212, 40.67162443352474, 40.66406069670386, 40.65647563481447, + 40.64888156988372, 40.64128958934194, 40.63370966944692, 40.62615079099929, + 40.61862104186145, 40.61112770596204 + ], + "e_max_left_shoulder": [ + 19.5798670594509, 19.57986805744069, 19.53497824727293, 19.533041026157896, + 19.555228764230254, 19.588490572776283, 19.625165007198987, + 19.66107472007529, 19.694167988931675, 19.72362862362657, 19.7493196652494, + 19.771449367501805, 19.790378690349506, 19.806514259761556, + 19.82025328914604, 19.831957944400564, 19.841945960695277, + 19.850489765216675, 19.85781968645639, 19.864128812784777, + 19.869578216918484 + ], + "e_max_left_arm": [ + 12.20222866596533, 12.20222926898153, 12.373879546096019, + 12.523908592155973, 12.645600251824309, 12.74252678882973, + 12.819507722651975, 12.880928395540419, 12.93033604900137, + 12.970460130655434, 13.003358597216618, 13.030576416142697, + 13.053279182961347, 13.072355130653692, 13.088489593463077, + 13.10221825122257, 13.113964987295608, 13.124068917405316, + 13.132803893927548, 13.140392790455788, 13.14701814253939 + ], + "e_max_left_hand": [ + 10.418170780332721, 10.418171310264462, 10.689540132743902, + 10.881229473075598, 11.016678541243222, 11.117522856679924, + 11.195802046668135, 11.258272873888783, 11.30897809380058, + 11.35053490857129, 11.38477217529263, 11.413050439595667, 11.43642833978388, + 11.455753816064735, 11.47171802402359, 11.484889994006773, + 11.49574079291317, 11.504661515647895, 11.511977322290575, + 11.517958720565272, 11.522830794454384 + ], + "e_max_right_shoulder": [ + 19.579867059451008, 19.579868057440798, 19.5349782472731, + 19.533041026158006, 19.55522876423036, 19.58849057277639, + 19.625165007199097, 19.661074720075405, 19.694167988931675, + 19.72362862362657, 19.7493196652494, 19.771449367501916, 19.790378690349616, + 19.80651425976167, 19.820253289146148, 19.831957944400564, + 19.841945960695384, 19.85048976521679, 19.85781968645639, + 19.864128812784884, 19.869578216918484 + ], + "e_max_right_arm": [ + 12.20222866596533, 12.20222926898153, 12.373879546096092, + 12.523908592155973, 12.645600251824384, 12.74252678882973, + 12.819507722651975, 12.880928395540492, 12.930336049001442, + 12.970460130655507, 13.003358597216655, 13.030576416142768, + 13.053279182961383, 13.07235513065373, 13.088489593463148, + 13.10221825122257, 13.113964987295608, 13.124068917405316, + 13.132803893927548, 13.140392790455788, 13.14701814253939 + ], + "e_max_right_hand": [ + 10.418170780332781, 10.418171310264523, 10.689540132743902, + 10.881229473075598, 11.016678541243222, 11.117522856679924, + 11.195802046668195, 11.258272873888846, 11.30897809380064, + 11.350534908571323, 11.38477217529263, 11.413050439595724, + 11.436428339783943, 11.455753816064735, 11.47171802402359, + 11.484889994006773, 11.49574079291317, 11.504661515647895, + 11.511977322290639, 11.517958720565272, 11.522830794454384 + ], + "e_max_left_thigh": [ + 32.76751148391158, 32.76751319105316, 32.74539282482352, 32.73101854530619, + 32.72424890526574, 32.723715844404325, 32.72795194938774, + 32.735608129041005, 32.7455406449781, 32.75682745685753, 32.76875137963891, + 32.78077127238082, 32.792491333244286, 32.80363263774394, 32.81400837468844, + 32.823503082842414, 32.832055614981144, 32.83964538183326, + 32.84628138938513, 32.851993606144376, 32.856826244959116 + ], + "e_max_left_leg": [ + 12.572053917404766, 12.57205459518824, 12.612403402933635, + 12.66015109513136, 12.708824924178495, 12.755754838938133, + 12.799711946263624, 12.840177902112291, 12.87700520368447, + 12.910244833314314, 12.940054510638904, 12.966647595026437, + 12.990263473185166, 13.011149874117075, 13.029552006083565, + 13.045705969588912, 13.059834861451632, 13.07214664120177, + 13.082833172707065, 13.09207005280514, 13.100016961551749 + ], + "e_max_left_foot": [ + 6.377989851744098, 6.3779901799267, 6.493035013336234, 6.5860573838902114, + 6.659235867361053, 6.71893853483777, 6.769160960936158, 6.812244735269179, + 6.849619350221294, 6.882227109710232, 6.910745423380255, 6.935700085771424, + 6.957522931134561, 6.976581748277103, 6.993196423640412, 7.007648374456252, + 7.020186603660154, 7.031032011791124, 7.040380756523456, 7.0484070432902906, + 7.055265535830423 + ], + "e_max_right_thigh": [ + 32.767511483911676, 32.767513191053254, 32.74539282482371, + 32.731018545306384, 32.72424890526592, 32.7237158444045, 32.727951949387915, + 32.73560812904118, 32.745540644978284, 32.75682745685753, 32.76875137963891, + 32.78077127238082, 32.792491333244286, 32.80363263774385, 32.81400837468844, + 32.82350308284224, 32.83205561498096, 32.83964538183326, 32.84628138938513, + 32.851993606144376, 32.85682624495921 + ], + "e_max_right_leg": [ + 12.572053917404942, 12.572054595188453, 12.612403402933744, + 12.660151095131575, 12.70882492417871, 12.755754838938348, + 12.799711946263804, 12.840177902112472, 12.877005203684616, + 12.910244833314458, 12.94005451063901, 12.966647595026547, + 12.990263473185239, 13.011149874117184, 13.02955200608375, + 13.045705969589058, 13.05983486145178, 13.072146641201883, + 13.082833172707211, 13.092070052805251, 13.100016961551896 + ], + "e_max_right_foot": [ + 6.377989851744134, 6.377990179926736, 6.493035013336234, 6.5860573838902114, + 6.659235867361053, 6.71893853483777, 6.769160960936194, 6.812244735269179, + 6.849619350221294, 6.882227109710232, 6.910745423380255, 6.935700085771424, + 6.957522931134561, 6.976581748277103, 6.99319642364045, 7.0076483744562905, + 7.020186603660154, 7.031032011791124, 7.040380756523494, 7.04840704329033, + 7.055265535830423 + ], + "e_sweat_head": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_neck": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_chest": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_back": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_pelvis": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_left_shoulder": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_left_arm": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_left_hand": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_right_shoulder": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_right_arm": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_right_hand": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_left_thigh": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_left_leg": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_left_foot": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_right_thigh": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_right_leg": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "e_sweat_right_foot": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "bf_core_head": [ + 35.30423941882337, 35.30423941882337, 35.30423941882337, 35.30423941882337, + 35.30423941882337, 35.30423941882337, 35.30423941882337, 35.30423941882337, + 35.30423941882337, 35.30423941882337, 35.30423941882337, 35.30423941882337, + 35.30423941882337, 35.30423941882337, 35.30423941882337, 35.30423941882337, + 35.30423941882337, 35.30423941882337, 35.30423941882337, 35.30423941882337, + 35.30423941882337 + ], + "bf_core_neck": [ + 15.263016900027468, 15.263016900027468, 15.263038473853008, + 15.263103590809875, 15.263192002109703, 15.263295024859758, + 15.263433271813401, 15.2635827397241, 15.263739220430494, + 15.263900349913426, 15.2640677156829, 15.26426436068708, 15.264466075238222, + 15.264671558544462, 15.264879800616253, 15.265090006258063, + 15.26530153957725, 15.265513884035936, 15.265726613890147, + 15.265939373785967, 15.266151864108334 + ], + "bf_core_chest": [ + 91.06934530172512, 91.06934530172512, 91.06948085066477, 91.06988998229697, + 91.07044547292713, 91.07109276770122, 91.07196137711591, 91.07290048811264, + 91.07388366069772, 91.07489604167374, 91.07594760540975, 91.07718313138325, + 91.07845050945984, 91.07974156672846, 91.08104995739696, 91.08237068522993, + 91.08369975489639, 91.08503392097467, 91.08637050850362, 91.08770728478484, + 91.08904236732862 + ], + "bf_core_back": [ + 89.30801751498808, 89.30801751498808, 89.30813677469982, 89.30849674004257, + 89.3089854760858, 89.30955498395777, 89.31031921058086, 89.31114546644868, + 89.31201048892243, 89.31290120974757, 89.31382640465029, 89.31491345462523, + 89.31602852896275, 89.31716443690931, 89.31831559526123, 89.31947760819216, + 89.32064696049927, 89.32182079677067, 89.32299676350145, 89.32417289630169, + 89.32534753890482 + ], + "bf_core_pelvis": [ + 18.714221377553365, 18.714221377553365, 18.714221377553365, + 18.714221377553365, 18.714221377553365, 18.714221377553365, + 18.714221377553365, 18.714221377553365, 18.714221377553365, + 18.714221377553365, 18.714221377553365, 18.714221377553365, + 18.714221377553365, 18.714221377553365, 18.714221377553365, + 18.714221377553365, 18.714221377553365, 18.714221377553365, + 18.714221377553365, 18.714221377553365, 18.714221377553365 + ], + "bf_core_left_shoulder": [ + 2.3061138276396864, 2.3061138276396864, 2.3061150300340914, + 2.3061186592589813, 2.306123586769499, 2.3061293286337796, + 2.306137033681884, 2.3061453641181915, 2.306154085405268, 2.306163065787, + 2.3061723937415834, 2.3061833535434215, 2.306194595891111, + 2.3062060482863904, 2.306217654438557, 2.3062293700282264, + 2.306241159614594, 2.3062529944089656, 2.3062648506829504, + 2.3062767086312723, 2.3062885515552027 + ], + "bf_core_left_arm": [ + 1.204237489450689, 1.204237489450689, 1.204238167343831, 1.2042402134500445, + 1.20424299151153, 1.2042462286942726, 1.2042505726925865, + 1.2042552692760191, 1.2042601862156466, 1.2042652492292159, + 1.204270508199495, 1.2042766871824244, 1.2042830254607517, + 1.2042894821609709, 1.2042960255471715, 1.2043026306327056, + 1.2043092774365423, 1.2043159497280194, 1.2043226341294018, + 1.204329319474752, 1.2043359963495603 + ], + "bf_core_left_hand": [ + 0.3118665153305683, 0.3118665153305683, 0.3118666142930708, + 0.3118669129947078, 0.31186731855112904, 0.3118677911325513, + 0.3118684252928891, 0.31186911092550695, 0.3118698287269125, + 0.31187056785298095, 0.31187133558586844, 0.31187223762717203, + 0.31187316292327816, 0.31187410550725175, 0.31187506074611315, + 0.31187602499217654, 0.3118769953285031, 0.31187796938565304, + 0.31187894521067233, 0.31187992117349717, 0.3118808958997466 + ], + "bf_core_right_shoulder": [ + 2.3061138276396864, 2.3061138276396864, 2.3061150300340914, + 2.3061186592589813, 2.306123586769499, 2.3061293286337796, + 2.306137033681884, 2.3061453641181915, 2.306154085405268, 2.306163065787, + 2.3061723937415834, 2.3061833535434215, 2.306194595891111, + 2.3062060482863904, 2.306217654438557, 2.3062293700282264, + 2.306241159614594, 2.3062529944089656, 2.3062648506829504, + 2.3062767086312723, 2.3062885515552027 + ], + "bf_core_right_arm": [ + 1.204237489450689, 1.204237489450689, 1.204238167343831, 1.2042402134500445, + 1.20424299151153, 1.2042462286942726, 1.2042505726925865, + 1.2042552692760191, 1.2042601862156466, 1.2042652492292159, + 1.204270508199495, 1.2042766871824244, 1.2042830254607517, + 1.2042894821609709, 1.2042960255471715, 1.2043026306327056, + 1.2043092774365423, 1.2043159497280194, 1.2043226341294018, + 1.204329319474752, 1.2043359963495603 + ], + "bf_core_right_hand": [ + 0.3118665153305683, 0.3118665153305683, 0.3118666142930708, + 0.3118669129947078, 0.31186731855112904, 0.3118677911325513, + 0.3118684252928891, 0.31186911092550695, 0.3118698287269125, + 0.31187056785298095, 0.31187133558586844, 0.31187223762717203, + 0.31187316292327816, 0.31187410550725175, 0.31187506074611315, + 0.31187602499217654, 0.3118769953285031, 0.31187796938565304, + 0.31187894521067233, 0.31187992117349717, 0.3118808958997466 + ], + "bf_core_left_thigh": [ + 5.208582481626051, 5.208582481626051, 5.20858441139485, 5.2085902360767715, + 5.208598144426985, 5.208607359764719, 5.208619725891307, 5.208633095727356, + 5.208647092854762, 5.208661505813097, 5.2086764766044045, 5.208694066409823, + 5.208712109683894, 5.208730490071378, 5.208749117229177, 5.2087679200274115, + 5.208786841585779, 5.208805835700202, 5.20882486428808, 5.208843895563165, + 5.208862902725027 + ], + "bf_core_left_leg": [ + 2.036115557281899, 2.036115557281899, 2.0361164232037954, 2.036119036843119, + 2.036122585461805, 2.03612672054925, 2.0361322694522057, 2.036138268737612, + 2.03614454949991, 2.0361510168530095, 2.036157734515775, 2.0361656273771813, + 2.03617372371811, 2.036181971327879, 2.0361903296679165, 2.036198766820971, + 2.036207257263828, 2.03621578026389, 2.0362243187328093, 2.036232858407527, + 2.036241387262209 + ], + "bf_core_left_foot": [ + 0.1746596048775655, 0.1746596048775655, 0.17465977806194483, + 0.17466030078980957, 0.1746610105135467, 0.1746618375310357, + 0.17466294731162685, 0.17466414716870815, 0.17466540332116776, + 0.17466669679178762, 0.17466804032434075, 0.17466961889662197, + 0.17467123816480778, 0.17467288768676154, 0.17467455935476903, + 0.1746762467853799, 0.17467794487395133, 0.17467964947396372, + 0.17468135716774752, 0.17468306510269105, 0.17468477087362747 + ], + "bf_core_right_thigh": [ + 5.208582481626051, 5.208582481626051, 5.20858441139485, 5.2085902360767715, + 5.208598144426985, 5.208607359764719, 5.208619725891307, 5.208633095727356, + 5.208647092854762, 5.208661505813097, 5.2086764766044045, 5.208694066409823, + 5.208712109683894, 5.208730490071378, 5.208749117229177, 5.2087679200274115, + 5.208786841585779, 5.208805835700202, 5.20882486428808, 5.208843895563165, + 5.208862902725027 + ], + "bf_core_right_leg": [ + 2.036115557281899, 2.036115557281899, 2.0361164232037954, 2.036119036843119, + 2.036122585461805, 2.03612672054925, 2.0361322694522057, 2.036138268737612, + 2.03614454949991, 2.0361510168530095, 2.036157734515775, 2.0361656273771813, + 2.03617372371811, 2.036181971327879, 2.0361903296679165, 2.036198766820971, + 2.036207257263828, 2.03621578026389, 2.0362243187328093, 2.036232858407527, + 2.036241387262209 + ], + "bf_core_right_foot": [ + 0.1746596048775655, 0.1746596048775655, 0.17465977806194483, + 0.17466030078980957, 0.1746610105135467, 0.1746618375310357, + 0.17466294731162685, 0.17466414716870815, 0.17466540332116776, + 0.17466669679178762, 0.17466804032434075, 0.17466961889662197, + 0.17467123816480778, 0.17467288768676154, 0.17467455935476903, + 0.1746762467853799, 0.17467794487395133, 0.17467964947396372, + 0.17468135716774752, 0.17468306510269105, 0.17468477087362747 + ], + "bf_muscle_head": [ + 0.683030021379182, 0.683030021379182, 0.6830467955233526, + 0.6830974254508243, 0.6831661672642225, 0.6832462698152975, + 0.6833537599925561, 0.6834699747212885, 0.6835916420595165, + 0.6837169239281261, 0.6838470546525576, 0.6839999506535127, + 0.6841567883435064, 0.6843165563270284, 0.6844784693140401, + 0.684641909021778, 0.6848063810291264, 0.684971483716041, + 0.6851368860568154, 0.6853023117556296, 0.6854675278549008 + ], + "bf_muscle_pelvis": [ + 15.072151421017685, 15.072151421017685, 15.072343180658741, + 15.072921974820758, 15.073707821498175, 15.074623542520108, + 15.075852355006681, 15.077180905330366, 15.078571789113756, + 15.080003993696677, 15.081491629712787, 15.083239515146715, + 15.085032461411615, 15.086858906377223, 15.08870987271901, + 15.090578292315962, 15.092458513015899, 15.094345943555336, + 15.096236799695266, 15.098127922861003, 15.100016649914442 + ], + "bf_fat_head": [ + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091, + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091, + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091, + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091, + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091, + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091, + 0.2654002282485091, 0.2654002282485091, 0.2654002282485091 + ], + "bf_fat_pelvis": [ + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346, + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346, + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346, + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346, + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346, + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346, + 2.2223513452205346, 2.2223513452205346, 2.2223513452205346 + ], + "bf_skin_head": [ + 1.756649057916547, 1.756649057916547, 1.7560884766277653, + 1.7553142505049706, 1.7544783156053123, 1.7536252226880171, + 1.7527687427990635, 1.7519159682804666, 1.751072601267167, + 1.750243609755199, 1.74943308660738, 1.7486441621474398, 1.7478791133891207, + 1.7471393758559564, 1.746425688382144, 1.7457382487741424, + 1.745076850031933, 1.7444409915685946, 1.7438299669455537, + 1.743242931586544, 1.742678954187744 + ], + "bf_skin_neck": [ + 0.3254908459651527, 0.3254908459651527, 0.3253307762015729, + 0.32508950891112376, 0.3248166878985209, 0.3245406140204268, + 0.32427647214654937, 0.32403150175895207, 0.3238081820976912, + 0.32360632566550823, 0.32342437904362287, 0.32326020771897424, + 0.32311157073212254, 0.32297630954695905, 0.3228524704575973, + 0.32273835053545025, 0.3226325010214779, 0.32253370890394034, + 0.32244096897906543, 0.3223534533845174, 0.3222704823330374 + ], + "bf_skin_chest": [ + 1.9699707508106319, 1.9699707508106319, 1.9694324209745193, + 1.968634418330581, 1.9677197737596719, 1.9667539325729615, + 1.9657699375118027, 1.964786468637665, 1.9638150184163767, + 1.9628630119942605, 1.9619353253767784, 1.9610351140217723, + 1.9601643196343541, 1.9593239956824593, 1.95851453709759, + 1.9577358497264536, 1.9569874784329948, 1.956268705398819, + 1.9555786261871986, 1.9549162088039322, 1.9542803395400061 + ], + "bf_skin_back": [ + 1.4772276855341546, 1.4772276855341546, 1.4768824462871348, + 1.4763607501717242, 1.4757510035739336, 1.4750955982182552, + 1.4744174889349813, 1.473730747582624, 1.4730447624632592, + 1.4723660989695984, 1.4716994346456918, 1.4710480946540483, + 1.4704144012934166, 1.4697999035387894, 1.469205552004666, + 1.468631833826742, 1.4680788786251437, 1.4675465426275718, + 1.4670344757977536, 1.4665421754809005, 1.466069029223929 + ], + "bf_skin_pelvis": [ + 2.2754313908702364, 2.2754313908702364, 2.275105595664208, + 2.2746394689858196, 2.2741255381621786, 2.2735925382371183, + 2.2730475841662274, 2.272492523377168, 2.2719284629999525, + 2.2713566286754037, 2.2707783596887854, 2.270194997097761, + 2.269607818452994, 2.269018000528369, 2.2684266102434325, + 2.2678346088573313, 2.267242860818371, 2.2666521434552114, + 2.266063156060279, 2.265476527937977, 2.2648928253936904 + ], + "bf_skin_left_shoulder": [ + 0.9113743687024276, 0.9113743687024276, 0.9086225096909929, + 0.9085038623301879, 0.9098633169594993, 0.9119035062981602, + 0.9141561061676833, 0.9163648766816233, 0.9184031637896996, + 0.920219931990145, 0.9218059481307745, 0.9231733853687969, + 0.9243440035435073, 0.9253425352009309, 0.9261932555812991, + 0.9269183674612684, 0.9275373941963277, 0.928067104500813, + 0.9285216955072296, 0.9289130823524183, 0.9292512137906339 + ], + "bf_skin_left_arm": [ + 0.5087672300009156, 0.5087672300009156, 0.518102343255207, + 0.5263426487884036, 0.5330822492481406, 0.5384860980236782, + 0.5428006109352269, 0.5462574466052822, 0.5490474763159983, + 0.5513193763349722, 0.5531862381171806, 0.5547335323944361, + 0.5560260843040641, 0.557113507314555, 0.5580342205116966, + 0.5588183462133003, 0.5594897834631324, 0.5600676958426477, + 0.5605675895720865, 0.5610021059789696, 0.5613816137846178 + ], + "bf_skin_left_hand": [ + 1.1156824689390157, 1.1156824689390157, 1.1544605481766261, + 1.1823201038434368, 1.202240520939564, 1.2171983148298455, + 1.2288838754840594, 1.238256533090041, 1.245894679584604, 1.252175274740439, + 1.2573635698552466, 1.261658335333216, 1.2652153477102062, + 1.2681602107959569, 1.2705959070276254, 1.2726076509746815, + 1.2742662881047202, 1.2756308467075128, 1.2767505492703939, + 1.277666445902134, 1.2784127631706501 + ], + "bf_skin_right_shoulder": [ + 0.9113743687024276, 0.9113743687024276, 0.9086225096909921, + 0.9085038623301871, 0.9098633169594977, 0.9119035062981632, + 0.9141561061676847, 0.9163648766816233, 0.9184031637896979, + 0.9202199319901425, 0.9218059481307715, 0.9231733853687917, + 0.9243440035435051, 0.9253425352009287, 0.926193255581296, + 0.9269183674612645, 0.9275373941963239, 0.9280671045008091, + 0.9285216955072272, 0.9289130823524153, 0.9292512137906292 + ], + "bf_skin_right_arm": [ + 0.5087672300009156, 0.5087672300009156, 0.5181023432552073, + 0.5263426487884044, 0.5330822492481415, 0.5384860980236791, + 0.5428006109352282, 0.5462574466052835, 0.5490474763159997, + 0.5513193763349741, 0.5531862381171824, 0.5547335323944375, + 0.5560260843040654, 0.5571135073145564, 0.5580342205116975, + 0.5588183462133012, 0.5594897834631328, 0.5600676958426477, + 0.5605675895720861, 0.5610021059789692, 0.5613816137846169 + ], + "bf_skin_right_hand": [ + 1.1156824689390157, 1.1156824689390157, 1.1544605481766241, + 1.1823201038434348, 1.202240520939562, 1.2171983148298424, + 1.2288838754840594, 1.2382565330900421, 1.245894679584604, + 1.252175274740438, 1.2573635698552446, 1.261658335333214, + 1.2652153477102028, 1.2681602107959515, 1.2705959070276174, + 1.272607650974673, 1.274266288104715, 1.2756308467075066, + 1.2767505492703888, 1.277666445902127, 1.278412763170644 + ], + "bf_skin_left_thigh": [ + 1.458198989923884, 1.458198989923884, 1.4569069648760917, + 1.4560677375416908, 1.4556725967586837, 1.455641484894926, + 1.4558887340024496, 1.4563356649851862, 1.4569155966656129, + 1.4575747651986461, 1.458271330814695, 1.4589736990528481, + 1.459658736760586, 1.4603101199108417, 1.4609168960065813, + 1.4614722780138938, 1.4619726538463493, 1.4624167855855057, + 1.462805170448899, 1.4631395368546176, 1.4634224516707655 + ], + "bf_skin_left_leg": [ + 0.6519832022255828, 0.6519832022255828, 0.6547119611325088, + 0.6579496764114731, 0.6612597695324007, 0.664460432504451, + 0.6674665173157187, 0.6702408465235076, 0.6727715430053425, + 0.6750604775696645, 0.6771170767110202, 0.678954839741925, + 0.6805892936777846, 0.6820367512694568, 0.6833135323184816, + 0.6844354788800697, 0.685417658062704, 0.6862741896951744, + 0.6870181587821403, 0.6876615858981467, 0.6882154368977622 + ], + "bf_skin_left_foot": [ + 0.935410615789085, 0.935410615789085, 0.9576854080005504, + 0.9759201914132539, 0.9904063651308104, 1.0023173857597614, + 1.0124015685342163, 1.0210994670180817, 1.0286800720149565, + 1.0353206517476081, 1.0411489355101728, 1.0462646442851526, + 1.0507503751649172, 1.0546771565926663, 1.0581073654670634, + 1.0610963764927184, 1.0636935893653756, 1.0659431487055455, + 1.0678845063033413, 1.0695528956650524, 1.0709797511852106 + ], + "bf_skin_right_thigh": [ + 1.458198989923884, 1.458198989923884, 1.4569069648760906, + 1.4560677375416895, 1.455672596758685, 1.4556414848949237, + 1.4558887340024436, 1.4563356649851826, 1.4569155966656069, + 1.4575747651986366, 1.458271330814688, 1.4589736990528372, + 1.4596587367605716, 1.4603101199108248, 1.460916896006567, + 1.4614722780138734, 1.4619726538463311, 1.4624167855854913, + 1.462805170448887, 1.463139536854607, 1.4634224516707572 + ], + "bf_skin_right_leg": [ + 0.6519832022255828, 0.6519832022255828, 0.6547119611325073, + 0.657949676411472, 0.6612597695323988, 0.6644604325044475, + 0.6674665173157155, 0.670240846523502, 0.6727715430053359, + 0.6750604775696573, 0.6771170767110141, 0.6789548397419188, + 0.6805892936777762, 0.6820367512694506, 0.6833135323184759, + 0.6844354788800625, 0.6854176580626963, 0.686274189695166, + 0.6870181587821325, 0.68766158589814, 0.6882154368977539 + ], + "bf_skin_right_foot": [ + 0.935410615789085, 0.935410615789085, 0.9576854080005472, + 0.9759201914132508, 0.9904063651308064, 1.0023173857597563, + 1.012401568534212, 1.0210994670180775, 1.028680072014952, + 1.0353206517476032, 1.0411489355101662, 1.0462646442851484, + 1.050750375164912, 1.0546771565926638, 1.0581073654670619, + 1.0610963764927122, 1.0636935893653696, 1.0659431487055413, + 1.0678845063033362, 1.0695528956650489, 1.070979751185208 + ], + "bf_ava_hand": [ + 0, 1.7125826049243418, 1.7125826049243418, 1.7125826049243418, + 1.7125826049243418, 1.7125826049243418, 1.7125826049243418, + 1.7125826049243418, 1.7125826049243418, 1.7125826049243418, + 1.7125826049243418, 1.7125826049243418, 1.7125826049243418, + 1.7125826049243418, 1.7125826049243418, 1.7125826049243418, + 1.7125826049243418, 1.7125826049243418, 1.7125826049243418, + 1.7125826049243418, 1.7125826049243418 + ], + "bf_ava_foot": [ + 0, 1.4222335133477066, 1.435681018450887, 1.4428125117789383, + 1.4458435788558384, 1.4464124788772206, 1.4453827349802726, + 1.4432358725576404, 1.4402661640064545, 1.4366711633213274, + 1.4325935767503724, 1.4281420790241641, 1.4234030087563738, + 1.418445243424585, 1.4133249280903197, 1.4080882041179463, + 1.4027731788004165, 1.3974114061929825, 1.3920290342754276, + 1.386647713517834, 1.381285328749073 + ], + "q_bmr_core_head": [ + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608 + ], + "q_bmr_core_neck": [ + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996, + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996, + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996, + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996, + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996, + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996, + 0.28498677793919996, 0.28498677793919996, 0.28498677793919996 + ], + "q_bmr_core_chest": [ + 25.234523679931197, 25.234523679931197, 25.234523679931197, + 25.234523679931197, 25.234523679931197, 25.234523679931197, + 25.234523679931197, 25.234523679931197, 25.234523679931197, + 25.234523679931197, 25.234523679931197, 25.234523679931197, + 25.234523679931197, 25.234523679931197, 25.234523679931197, + 25.234523679931197, 25.234523679931197, 25.234523679931197, + 25.234523679931197, 25.234523679931197, 25.234523679931197 + ], + "q_bmr_core_back": [ + 22.5852021516816, 22.5852021516816, 22.5852021516816, 22.5852021516816, + 22.5852021516816, 22.5852021516816, 22.5852021516816, 22.5852021516816, + 22.5852021516816, 22.5852021516816, 22.5852021516816, 22.5852021516816, + 22.5852021516816, 22.5852021516816, 22.5852021516816, 22.5852021516816, + 22.5852021516816, 22.5852021516816, 22.5852021516816, 22.5852021516816, + 22.5852021516816 + ], + "q_bmr_core_pelvis": [ + 8.364010096987199, 8.364010096987199, 8.364010096987199, 8.364010096987199, + 8.364010096987199, 8.364010096987199, 8.364010096987199, 8.364010096987199, + 8.364010096987199, 8.364010096987199, 8.364010096987199, 8.364010096987199, + 8.364010096987199, 8.364010096987199, 8.364010096987199, 8.364010096987199, + 8.364010096987199, 8.364010096987199, 8.364010096987199, 8.364010096987199, + 8.364010096987199 + ], + "q_bmr_core_left_shoulder": [ + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848 + ], + "q_bmr_core_left_arm": [ + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072 + ], + "q_bmr_core_left_hand": [ + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048 + ], + "q_bmr_core_right_shoulder": [ + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848, 1.262209957848, 1.262209957848, 1.262209957848, + 1.262209957848 + ], + "q_bmr_core_right_arm": [ + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072, 0.3597518277072, 0.3597518277072, 0.3597518277072, + 0.3597518277072 + ], + "q_bmr_core_right_hand": [ + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048, 0.0932364150048, 0.0932364150048, 0.0932364150048, + 0.0932364150048 + ], + "q_bmr_core_left_thigh": [ + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999 + ], + "q_bmr_core_left_leg": [ + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994 + ], + "q_bmr_core_left_foot": [ + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052 + ], + "q_bmr_core_right_thigh": [ + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999, + 1.3695197939855999, 1.3695197939855999, 1.3695197939855999 + ], + "q_bmr_core_right_leg": [ + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994, + 0.37118648237759994, 0.37118648237759994, 0.37118648237759994 + ], + "q_bmr_core_right_foot": [ + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, 0.2198972052, + 0.2198972052 + ], + "q_bmr_muscle_head": [ + 0.2216563828416, 0.2216563828416, 0.2216563828416, 0.2216563828416, + 0.2216563828416, 0.2216563828416, 0.2216563828416, 0.2216563828416, + 0.2216563828416, 0.2216563828416, 0.2216563828416, 0.2216563828416, + 0.2216563828416, 0.2216563828416, 0.2216563828416, 0.2216563828416, + 0.2216563828416, 0.2216563828416, 0.2216563828416, 0.2216563828416, + 0.2216563828416 + ], + "q_bmr_muscle_pelvis": [ + 4.2255446951232, 4.2255446951232, 4.2255446951232, 4.2255446951232, + 4.2255446951232, 4.2255446951232, 4.2255446951232, 4.2255446951232, + 4.2255446951232, 4.2255446951232, 4.2255446951232, 4.2255446951232, + 4.2255446951232, 4.2255446951232, 4.2255446951232, 4.2255446951232, + 4.2255446951232, 4.2255446951232, 4.2255446951232, 4.2255446951232, + 4.2255446951232 + ], + "q_bmr_fat_head": [ + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416 + ], + "q_bmr_fat_pelvis": [ + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999 + ], + "q_bmr_skin_head": [ + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616 + ], + "q_bmr_skin_neck": [ + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997 + ], + "q_bmr_skin_chest": [ + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997 + ], + "q_bmr_skin_back": [ + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896 + ], + "q_bmr_skin_pelvis": [ + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624 + ], + "q_bmr_skin_left_shoulder": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_bmr_skin_left_arm": [ + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997 + ], + "q_bmr_skin_left_hand": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_bmr_skin_right_shoulder": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_bmr_skin_right_arm": [ + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997 + ], + "q_bmr_skin_right_hand": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_bmr_skin_left_thigh": [ + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952 + ], + "q_bmr_skin_left_leg": [ + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998 + ], + "q_bmr_skin_left_foot": [ + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544 + ], + "q_bmr_skin_right_thigh": [ + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952 + ], + "q_bmr_skin_right_leg": [ + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998 + ], + "q_bmr_skin_right_foot": [ + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544 + ], + "q_work_head": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_work_neck": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_work_chest": [ + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003, + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003, + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003, + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003, + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003, + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003, + 2.0010645673200003, 2.0010645673200003, 2.0010645673200003 + ], + "q_work_back": [ + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002, + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002, + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002, + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002, + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002, + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002, + 1.7591776416000002, 1.7591776416000002, 1.7591776416000002 + ], + "q_work_pelvis": [ + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004, + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004, + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004, + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004, + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004, + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004, + 2.8366739470800004, 2.8366739470800004, 2.8366739470800004 + ], + "q_work_left_shoulder": [ + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624 + ], + "q_work_left_arm": [ + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228 + ], + "q_work_left_hand": [ + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001 + ], + "q_work_right_shoulder": [ + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624, 0.576130677624, 0.576130677624, 0.576130677624, + 0.576130677624 + ], + "q_work_right_arm": [ + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228, 0.305657115228, 0.305657115228, 0.305657115228, + 0.305657115228 + ], + "q_work_right_hand": [ + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001 + ], + "q_work_left_thigh": [ + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001 + ], + "q_work_left_leg": [ + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005 + ], + "q_work_left_foot": [ + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001 + ], + "q_work_right_thigh": [ + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001, 4.419933824520001, 4.419933824520001, 4.419933824520001, + 4.419933824520001 + ], + "q_work_right_leg": [ + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005, + 2.1769823314800005, 2.1769823314800005, 2.1769823314800005 + ], + "q_work_right_foot": [ + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001, + 0.10994860260000001, 0.10994860260000001, 0.10994860260000001 + ], + "q_shiv_head": [ + 0, 0, 0.000019508329670349356, 0.00007839093531995804, + 0.00015833766430211962, 0.00025149693120225087, 0.00037650800735410545, + 0.0005116657368697451, 0.0006531648512289731, 0.0007988676644220303, + 0.0009502096969358398, 0.001128027746046624, 0.0013104299795091696, + 0.001496240144345306, 0.0016845449482399734, 0.001874625328339118, + 0.0020659062728853295, 0.0022579206977670517, 0.00245028362008763, + 0.0026426737078085313, 0.0028348200312610337 + ], + "q_shiv_neck": [ + 0, 0, 0.000025090359104048142, 0.00010082137993953306, + 0.0002036437216393043, 0.00032345917995333745, 0.0004842403870394985, + 0.0006580715671835071, 0.0008400586287192692, 0.001027452217368747, + 0.001222098607268514, 0.0014507967471278115, 0.0016853907701061888, + 0.0019243678552641696, 0.002166553384757016, 0.002411022546182465, + 0.002657035796395291, 0.00290399240184789, 0.0031513972222955954, + 0.0033988369811342764, 0.003645963226046639 + ], + "q_shiv_chest": [ + 0, 0, 0.0001576434168110768, 0.0006334635050604515, 0.0012794991079328214, + 0.0020323029301930564, 0.0030424956794862434, 0.004134681768675457, + 0.005278111485122858, 0.006455510560229233, 0.007678479185209557, + 0.00911539589238974, 0.010589356595479113, 0.012090856198877674, + 0.013612514546338004, 0.015148521016083128, 0.016694229038177202, + 0.018245864187206674, 0.01980031548338659, 0.021354986298438617, + 0.02290768729686276 + ], + "q_shiv_back": [ + 0, 0, 0.00013869904475361658, 0.0005573387383721618, 0.0011257387566400256, + 0.0017880764117512245, 0.0026768719744096315, 0.0036378075486827727, + 0.0046438286856403275, 0.00567973700528017, 0.006755738677152689, + 0.008019977797998741, 0.009316809252545726, 0.010637870194398397, + 0.01197666735766367, 0.013328088396350864, 0.014688045129522778, + 0.01605321671315088, 0.017420866021047806, 0.018788708467728975, + 0.020154817815178003 + ], + "q_shiv_pelvis": [ + 0, 0, 0.00022301646255006458, 0.000896154072976299, 0.0018100937588095408, + 0.002875077307319183, 0.004304186229203835, 0.005849290255648998, + 0.007466888095730861, 0.009132542025667068, 0.010862662712404584, + 0.012895453472062201, 0.014980649978141108, 0.01710480547314395, + 0.019257479328640685, 0.021430451319897986, 0.02361714799392273, + 0.02581222971128741, 0.028011295402028322, 0.0302106716437793, + 0.03240726120692923 + ], + "q_shiv_left_shoulder": [ + 0, 0, 0.0000013983846931843346, 0.000005619173239749204, + 0.00001134986797209884, 0.000018027656130426834, 0.00002698862707582526, + 0.00003667692450128262, 0.000046819781371280375, 0.000057263965325826954, + 0.00006811237650602039, 0.00008085862604405005, 0.00009393347640729447, + 0.00010725261211678743, 0.00012075056708622819, 0.00013437579787209608, + 0.00014808708681744397, 0.00016185095267179752, 0.00017563979931601597, + 0.00018943059321459386, 0.00020320391374525996 + ], + "q_shiv_left_arm": [ + 0, 0, 7.883897241409622e-7, 0.0000031680112503935844, + 0.000006398896757932268, 0.000010163740287524594, 0.000015215810326699839, + 0.000020677936858747815, 0.000026396337645536668, 0.000032284622426495034, + 0.0000384008048614189, 0.00004558696200837389, 0.00005295837970287795, + 0.000060467522057612664, 0.00006807748020910807, 0.0000757591946850912, + 0.00008348942754728323, 0.00009124930253512864, 0.00009902326134277444, + 0.00010679831798518254, 0.00011456352338724532 + ], + "q_shiv_left_hand": [ + 0, 0, 1.1509339038554193e-7, 4.6248339421804155e-7, 9.341455121069004e-7, + 0.0000014837577062079699, 0.0000022212861790802684, + 0.0000030186769136858125, 0.000003853479948253529, 0.000004713083565911684, + 0.000005605956914075752, 0.0000066550309501275755, 0.000007731150321588023, + 0.000008827375482863162, 0.000009938318278701909, 0.000011059736450378279, + 0.000012188237598143538, 0.00001332106606352243, 0.000014455950560988969, + 0.00001559099532630402, 0.000016724601954342384 + ], + "q_shiv_right_shoulder": [ + 0, 0, 0.0000013983846931843346, 0.000005619173239749204, + 0.00001134986797209884, 0.000018027656130426834, 0.00002698862707582526, + 0.00003667692450128262, 0.000046819781371280375, 0.000057263965325826954, + 0.00006811237650602039, 0.00008085862604405005, 0.00009393347640729447, + 0.00010725261211678743, 0.00012075056708622819, 0.00013437579787209608, + 0.00014808708681744397, 0.00016185095267179752, 0.00017563979931601597, + 0.00018943059321459386, 0.00020320391374525996 + ], + "q_shiv_right_arm": [ + 0, 0, 7.883897241409622e-7, 0.0000031680112503935844, + 0.000006398896757932268, 0.000010163740287524594, 0.000015215810326699839, + 0.000020677936858747815, 0.000026396337645536668, 0.000032284622426495034, + 0.0000384008048614189, 0.00004558696200837389, 0.00005295837970287795, + 0.000060467522057612664, 0.00006807748020910807, 0.0000757591946850912, + 0.00008348942754728323, 0.00009124930253512864, 0.00009902326134277444, + 0.00010679831798518254, 0.00011456352338724532 + ], + "q_shiv_right_hand": [ + 0, 0, 1.1509339038554193e-7, 4.6248339421804155e-7, 9.341455121069004e-7, + 0.0000014837577062079699, 0.0000022212861790802684, + 0.0000030186769136858125, 0.000003853479948253529, 0.000004713083565911684, + 0.000005605956914075752, 0.0000066550309501275755, 0.000007731150321588023, + 0.000008827375482863162, 0.000009938318278701909, 0.000011059736450378279, + 0.000012188237598143538, 0.00001332106606352243, 0.000014455950560988969, + 0.00001559099532630402, 0.000016724601954342384 + ], + "q_shiv_left_thigh": [ + 0, 0, 0.0000022443211125180676, 0.00000901842618725181, + 0.000018215837486084555, 0.00002893327527105541, 0.00004331508049206523, + 0.00005886419981687333, 0.0000751428589909438, 0.00009190512953527782, + 0.00010931615982447715, 0.0001297731035274877, 0.00015075743127096643, + 0.00017213382191583166, 0.0001937972064346872, 0.0002156648607823764, + 0.00023767063316379897, 0.00025976078823868737, 0.00028189103593928485, + 0.00030402440886292834, 0.00032612973810967644 + ], + "q_shiv_left_leg": [ + 0, 0, 0.0000010070671658734918, 0.000004046729699407863, + 0.000008173773230935379, 0.000012982879929319736, 0.000019436254066952347, + 0.000026413422994750855, 0.00003371794954721837, 0.00004123948120172723, + 0.00004905212299816283, 0.000058231520813616286, 0.0000676475653138952, + 0.00007723953547505267, 0.0000869602849386417, 0.00009677269394080993, + 0.00010664707898375595, 0.00011655932805582126, 0.00012648956740865346, + 0.00013642120910516018, 0.00014634026710049584 + ], + "q_shiv_left_foot": [ + 0, 0, 2.014134331746984e-7, 8.093459398815726e-7, 0.0000016347546461870757, + 0.000002596575985863947, 0.00000388725081339047, 0.0000052826845989501716, + 0.000006743589909443675, 0.000008247896240345446, 0.000009810424599632566, + 0.000011646304162723257, 0.000013529513062779038, 0.000015447907095010534, + 0.00001739205698772834, 0.000019354538788161985, 0.00002132941579675119, + 0.000023311865611164253, 0.000025297913481730696, 0.000027284241821032035, + 0.00002926805342009917 + ], + "q_shiv_right_thigh": [ + 0, 0, 0.0000022443211125180676, 0.00000901842618725181, + 0.000018215837486084555, 0.00002893327527105541, 0.00004331508049206523, + 0.00005886419981687333, 0.0000751428589909438, 0.00009190512953527782, + 0.00010931615982447715, 0.0001297731035274877, 0.00015075743127096643, + 0.00017213382191583166, 0.0001937972064346872, 0.0002156648607823764, + 0.00023767063316379897, 0.00025976078823868737, 0.00028189103593928485, + 0.00030402440886292834, 0.00032612973810967644 + ], + "q_shiv_right_leg": [ + 0, 0, 0.0000010070671658734918, 0.000004046729699407863, + 0.000008173773230935379, 0.000012982879929319736, 0.000019436254066952347, + 0.000026413422994750855, 0.00003371794954721837, 0.00004123948120172723, + 0.00004905212299816283, 0.000058231520813616286, 0.0000676475653138952, + 0.00007723953547505267, 0.0000869602849386417, 0.00009677269394080993, + 0.00010664707898375595, 0.00011655932805582126, 0.00012648956740865346, + 0.00013642120910516018, 0.00014634026710049584 + ], + "q_shiv_right_foot": [ + 0, 0, 2.014134331746984e-7, 8.093459398815726e-7, 0.0000016347546461870757, + 0.000002596575985863947, 0.00000388725081339047, 0.0000052826845989501716, + 0.000006743589909443675, 0.000008247896240345446, 0.000009810424599632566, + 0.000011646304162723257, 0.000013529513062779038, 0.000015447907095010534, + 0.00001739205698772834, 0.000019354538788161985, 0.00002132941579675119, + 0.000023311865611164253, 0.000025297913481730696, 0.000027284241821032035, + 0.00002926805342009917 + ], + "q_nst_head": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "q_nst_neck": [ + 0, 0, 0.0016257668930056517, 0.002774520908596529, 0.0035558342871851675, + 0.004235872042713463, 0.00519406184794105, 0.006092636283926003, + 0.006943064342891223, 0.007755889353053209, 0.008562782954151379, + 0.009547165632165374, 0.010509279111704933, 0.011447816425907467, + 0.012362054653469344, 0.01325170670836952, 0.014116808915238217, + 0.01495763562747746, 0.01577463414833088, 0.016568374946460806, + 0.017339513472865605 + ], + "q_nst_chest": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_back": [ + 0, 0, 0.0016257668930056517, 0.002774520908596529, 0.0035558342871851675, + 0.004235872042713463, 0.00519406184794105, 0.006092636283926003, + 0.006943064342891223, 0.007755889353053209, 0.008562782954151379, + 0.009547165632165374, 0.010509279111704933, 0.011447816425907467, + 0.012362054653469344, 0.01325170670836952, 0.014116808915238217, + 0.01495763562747746, 0.01577463414833088, 0.016568374946460806, + 0.017339513472865605 + ], + "q_nst_pelvis": [ + 0, 0, 0.0016257668930056517, 0.002774520908596529, 0.0035558342871851675, + 0.004235872042713463, 0.00519406184794105, 0.006092636283926003, + 0.006943064342891223, 0.007755889353053209, 0.008562782954151379, + 0.009547165632165374, 0.010509279111704933, 0.011447816425907467, + 0.012362054653469344, 0.01325170670836952, 0.014116808915238217, + 0.01495763562747746, 0.01577463414833088, 0.016568374946460806, + 0.017339513472865605 + ], + "q_nst_left_shoulder": [ + 0, 0, 0.001839683589453764, 0.0031395894492013353, 0.0040237072197095314, + 0.004793223627281023, 0.005877491038459609, 0.006894298952863635, + 0.007856625440640069, 0.008776401110033895, 0.009689464921802875, + 0.01080337163639766, 0.011892078994824003, 0.012954108060895291, + 0.013988640792083732, 0.014995352327891825, 0.015974283772506405, + 0.016925745578461337, 0.01785024390469021, 0.018748424281521438, + 0.019621028403505818 + ], + "q_nst_left_arm": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_left_hand": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_right_shoulder": [ + 0, 0, 0.001839683589453764, 0.0031395894492013353, 0.0040237072197095314, + 0.004793223627281023, 0.005877491038459609, 0.006894298952863635, + 0.007856625440640069, 0.008776401110033895, 0.009689464921802875, + 0.01080337163639766, 0.011892078994824003, 0.012954108060895291, + 0.013988640792083732, 0.014995352327891825, 0.015974283772506405, + 0.016925745578461337, 0.01785024390469021, 0.018748424281521438, + 0.019621028403505818 + ], + "q_nst_right_arm": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_right_hand": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_left_thigh": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_left_leg": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_left_foot": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_right_thigh": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_right_leg": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_nst_right_foot": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ], + "q_thermogenesis_core_head": [ + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608, 17.1968410354608, 17.1968410354608, 17.1968410354608, + 17.1968410354608 + ], + "q_thermogenesis_core_neck": [ + 0.28498677793919996, 0.28498677793919996, 0.28663763519130964, + 0.28786212022773605, 0.2887462559480244, 0.2895461091618668, + 0.29066508017418047, 0.29173748579030945, 0.29276990091081045, + 0.29377011950962195, 0.29477165950061984, 0.2959847403184932, + 0.2971814478210111, 0.2983589622203716, 0.29951538597742633, + 0.30064950719375194, 0.3017606226508335, 0.30284840596852536, + 0.3039128093098264, 0.30495398986679506, 0.30597225463811223 + ], + "q_thermogenesis_core_chest": [ + 27.235588247251197, 27.235588247251197, 27.235745890668007, + 27.236221710756258, 27.23686774635913, 27.23762055018139, + 27.238630742930685, 27.239722929019873, 27.24086635873632, + 27.242043757811427, 27.243266726436406, 27.244703643143588, + 27.246177603846675, 27.247679103450075, 27.249200761797535, + 27.25073676826728, 27.252282476289373, 27.253834111438405, + 27.255388562734584, 27.256943233549634, 27.25849593454806 + ], + "q_thermogenesis_core_back": [ + 24.3443797932816, 24.3443797932816, 24.34614425921936, 24.347711652928567, + 24.349061366325422, 24.350403741736063, 24.35225072710395, + 24.35411023711421, 24.355966686310133, 24.357815419639934, + 24.359698314912904, 24.361946936711764, 24.36420588164585, + 24.366465479901905, 24.36871851529273, 24.37095958838632, + 24.373184647326358, 24.37539064562223, 24.37757529345098, + 24.379736876695787, 24.381874124569645 + ], + "q_thermogenesis_core_pelvis": [ + 8.364010096987199, 8.364010096987199, 8.365635863880204, 8.366784617895796, + 8.367565931274385, 8.368245969029912, 8.36920415883514, 8.370102733271125, + 8.37095316133009, 8.371765986340252, 8.37257287994135, 8.373557262619364, + 8.374519376098904, 8.375457913413106, 8.376372151640668, 8.37726180369557, + 8.378126905902437, 8.378967732614676, 8.37978473113553, 8.38057847193366, + 8.381349610460065 + ], + "q_thermogenesis_core_left_shoulder": [ + 1.838340635472, 1.838340635472, 1.840181717446147, 1.8414858440944408, + 1.8423756925596817, 1.8431518867554115, 1.8442451151375354, + 1.8452716113493648, 1.8462440806940115, 1.8471743005473598, + 1.848098212770309, 1.8492248657344417, 1.8503266479432314, + 1.851401996145012, 1.8524500268311699, 1.8534703635977638, + 1.8544630063313239, 1.855428232003133, 1.8563665191760061, + 1.857278490346736, 1.8581648677892513 + ], + "q_thermogenesis_core_left_arm": [ + 0.6654089429351999, 0.6654089429351999, 0.6654097313249241, + 0.6654121109464504, 0.6654153418319579, 0.6654191066754875, + 0.6654241587455267, 0.6654296208720587, 0.6654353392728456, + 0.6654412275576265, 0.6654473437400614, 0.6654545298972083, + 0.6654619013149028, 0.6654694104572576, 0.665477020415409, + 0.6654847021298851, 0.6654924323627472, 0.665500192237735, + 0.6655079661965427, 0.6655157412531851, 0.6655235064585872 + ], + "q_thermogenesis_core_left_hand": [ + 0.2031850176048, 0.2031850176048, 0.20318513269819038, 0.20318548008819423, + 0.20318595175031212, 0.2031865013625062, 0.2031872388909791, + 0.2031880362817137, 0.20318887108474826, 0.20318973068836593, + 0.20319062356171408, 0.20319167263575014, 0.2031927487551216, + 0.20319384498028287, 0.2031949559230787, 0.2031960773412504, + 0.20319720584239814, 0.20319833867086354, 0.203199473555361, + 0.20320060860012631, 0.20320174220675435 + ], + "q_thermogenesis_core_right_shoulder": [ + 1.838340635472, 1.838340635472, 1.840181717446147, 1.8414858440944408, + 1.8423756925596817, 1.8431518867554115, 1.8442451151375354, + 1.8452716113493648, 1.8462440806940115, 1.8471743005473598, + 1.848098212770309, 1.8492248657344417, 1.8503266479432314, + 1.851401996145012, 1.8524500268311699, 1.8534703635977638, + 1.8544630063313239, 1.855428232003133, 1.8563665191760061, + 1.857278490346736, 1.8581648677892513 + ], + "q_thermogenesis_core_right_arm": [ + 0.6654089429351999, 0.6654089429351999, 0.6654097313249241, + 0.6654121109464504, 0.6654153418319579, 0.6654191066754875, + 0.6654241587455267, 0.6654296208720587, 0.6654353392728456, + 0.6654412275576265, 0.6654473437400614, 0.6654545298972083, + 0.6654619013149028, 0.6654694104572576, 0.665477020415409, + 0.6654847021298851, 0.6654924323627472, 0.665500192237735, + 0.6655079661965427, 0.6655157412531851, 0.6655235064585872 + ], + "q_thermogenesis_core_right_hand": [ + 0.2031850176048, 0.2031850176048, 0.20318513269819038, 0.20318548008819423, + 0.20318595175031212, 0.2031865013625062, 0.2031872388909791, + 0.2031880362817137, 0.20318887108474826, 0.20318973068836593, + 0.20319062356171408, 0.20319167263575014, 0.2031927487551216, + 0.20319384498028287, 0.2031949559230787, 0.2031960773412504, + 0.20319720584239814, 0.20319833867086354, 0.203199473555361, + 0.20320060860012631, 0.20320174220675435 + ], + "q_thermogenesis_core_left_thigh": [ + 5.7894536185056005, 5.7894536185056005, 5.789455862826713, + 5.789462636931788, 5.789471834343088, 5.789482551780871, 5.7894969335860935, + 5.789512482705417, 5.789528761364592, 5.789545523635136, 5.789562934665426, + 5.789583391609128, 5.789604375936872, 5.789625752327517, 5.789647415712036, + 5.789669283366383, 5.789691289138764, 5.78971337929384, 5.78973550954154, + 5.789757642914465, 5.78977974824371 + ], + "q_thermogenesis_core_left_leg": [ + 2.5481688138576004, 2.5481688138576004, 2.548169820924766, + 2.5481728605872997, 2.5481769876308316, 2.5481817967375298, + 2.5481882501116675, 2.548195227280595, 2.5482025318071475, + 2.5482100533388023, 2.5482178659805985, 2.548227045378414, + 2.5482364614229143, 2.5482460533930755, 2.548255774142539, + 2.5482655865515413, 2.5482754609365843, 2.548285373185656, + 2.548295303425009, 2.5483052350667057, 2.548315154124701 + ], + "q_thermogenesis_core_left_foot": [ + 0.3298458078, 0.3298458078, 0.3298460092134332, 0.3298466171459399, + 0.3298474425546462, 0.3298484043759859, 0.3298496950508134, + 0.329851090484599, 0.32985255138990943, 0.3298540556962404, + 0.32985561822459963, 0.32985745410416273, 0.32985933731306283, + 0.329861255707095, 0.32986319985698775, 0.32986516233878815, + 0.32986713721579675, 0.32986911966561117, 0.32987110571348177, + 0.329873092041821, 0.32987507585342013 + ], + "q_thermogenesis_core_right_thigh": [ + 5.7894536185056005, 5.7894536185056005, 5.789455862826713, + 5.789462636931788, 5.789471834343088, 5.789482551780871, 5.7894969335860935, + 5.789512482705417, 5.789528761364592, 5.789545523635136, 5.789562934665426, + 5.789583391609128, 5.789604375936872, 5.789625752327517, 5.789647415712036, + 5.789669283366383, 5.789691289138764, 5.78971337929384, 5.78973550954154, + 5.789757642914465, 5.78977974824371 + ], + "q_thermogenesis_core_right_leg": [ + 2.5481688138576004, 2.5481688138576004, 2.548169820924766, + 2.5481728605872997, 2.5481769876308316, 2.5481817967375298, + 2.5481882501116675, 2.548195227280595, 2.5482025318071475, + 2.5482100533388023, 2.5482178659805985, 2.548227045378414, + 2.5482364614229143, 2.5482460533930755, 2.548255774142539, + 2.5482655865515413, 2.5482754609365843, 2.548285373185656, + 2.548295303425009, 2.5483052350667057, 2.548315154124701 + ], + "q_thermogenesis_core_right_foot": [ + 0.3298458078, 0.3298458078, 0.3298460092134332, 0.3298466171459399, + 0.3298474425546462, 0.3298484043759859, 0.3298496950508134, + 0.329851090484599, 0.32985255138990943, 0.3298540556962404, + 0.32985561822459963, 0.32985745410416273, 0.32985933731306283, + 0.329861255707095, 0.32986319985698775, 0.32986516233878815, + 0.32986713721579675, 0.32986911966561117, 0.32987110571348177, + 0.329873092041821, 0.32987507585342013 + ], + "q_thermogenesis_muscle_head": [ + 0.2216563828416, 0.2216563828416, 0.22167589117127035, 0.22173477377691997, + 0.22181472050590212, 0.22190787977280224, 0.2220328908489541, + 0.22216804857846975, 0.22230954769282896, 0.22245525050602202, + 0.22260659253853585, 0.22278441058764661, 0.22296681282110917, + 0.2231526229859453, 0.22334092778983997, 0.22353100816993912, + 0.22372228911448533, 0.22391430353936706, 0.22410666646168761, + 0.22429905654940852, 0.22449120287286103 + ], + "q_thermogenesis_muscle_pelvis": [ + 7.0622186422032005, 7.0622186422032005, 7.062441658665751, + 7.063114796276176, 7.06402873596201, 7.06509371951052, 7.066522828432404, + 7.068067932458849, 7.069685530298932, 7.071351184228868, 7.073081304915605, + 7.0751140956752625, 7.077199292181342, 7.0793234476763445, + 7.081476121531841, 7.083649093523098, 7.085835790197123, 7.088030871914488, + 7.090229937605229, 7.09242931384698, 7.0946259034101296 + ], + "q_thermogenesis_fat_head": [ + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416, 0.1117077802416, 0.1117077802416, 0.1117077802416, + 0.1117077802416 + ], + "q_thermogenesis_fat_pelvis": [ + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999, + 0.8356093797599999, 0.8356093797599999, 0.8356093797599999 + ], + "q_thermogenesis_skin_head": [ + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616, 0.1336975007616, 0.1336975007616, 0.1336975007616, + 0.1336975007616 + ], + "q_thermogenesis_skin_neck": [ + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997, + 0.029026431086399997, 0.029026431086399997, 0.029026431086399997 + ], + "q_thermogenesis_skin_chest": [ + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997, + 0.18559324118879997, 0.18559324118879997, 0.18559324118879997 + ], + "q_thermogenesis_skin_back": [ + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896, 0.1644831094896, 0.1644831094896, 0.1644831094896, + 0.1644831094896 + ], + "q_thermogenesis_skin_pelvis": [ + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, 0.26387664624, + 0.26387664624 + ], + "q_thermogenesis_skin_left_shoulder": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_thermogenesis_skin_left_arm": [ + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997 + ], + "q_thermogenesis_skin_left_hand": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_thermogenesis_skin_right_shoulder": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_thermogenesis_skin_right_arm": [ + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997, + 0.027267253444799997, 0.027267253444799997, 0.027267253444799997 + ], + "q_thermogenesis_skin_right_hand": [ + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272, 0.0518957404272, 0.0518957404272, 0.0518957404272, + 0.0518957404272 + ], + "q_thermogenesis_skin_left_thigh": [ + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952 + ], + "q_thermogenesis_skin_left_leg": [ + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998 + ], + "q_thermogenesis_skin_left_foot": [ + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544 + ], + "q_thermogenesis_skin_right_thigh": [ + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952, 0.1266607901952, 0.1266607901952, 0.1266607901952, + 0.1266607901952 + ], + "q_thermogenesis_skin_right_leg": [ + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998, + 0.023748898161599998, 0.023748898161599998, 0.023748898161599998 + ], + "q_thermogenesis_skin_right_foot": [ + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544, 0.1037914808544, 0.1037914808544, 0.1037914808544, + 0.1037914808544 + ] +} diff --git a/tests/models/JOS3.test.js b/tests/models/JOS3.test.js index 963d54d..ee10daa 100644 --- a/tests/models/JOS3.test.js +++ b/tests/models/JOS3.test.js @@ -1,91 +1,134 @@ import { JOS3 } from "../../src/models/JOS3.js"; import { describe, it, expect } from "@jest/globals"; +import single_iteration from "./1_run_dict.json"; +import twenty_iterations from "./20_runs_dict.json"; +import getters from "./1_run_getters.json"; +import setters from "./1_run_setters.json"; +import * as math from "mathjs"; +import { BODY_NAMES } from "../../src/jos3_functions/matrix.js"; describe("JOS3", () => { - it("should return the correct value given certain defaults", () => { - // TODO: Fix dot product calculation for _bodytemp - then uncomment this test (everything else works when this is stubbed) - // const model = new JOS3(); - // - // const expected = { - // cardiac_output: [309.3525279636547], - // cycle_time: [0], - // dt: [60000], - // q_res: [8.222503033578032], - // q_skin2env_back: [8.14893481599888], - // q_skin2env_chest: [9.319394672853791], - // q_skin2env_head: [8.220790562331835], - // q_skin2env_left_arm: [3.3060484333347873], - // q_skin2env_left_foot: [2.847055691927899], - // q_skin2env_left_hand: [2.820093545556136], - // q_skin2env_left_leg: [5.065172487729327], - // q_skin2env_left_shoulder: [5.495164499822654], - // q_skin2env_left_thigh: [10.530261655946674], - // q_skin2env_neck: [2.205000373975029], - // q_skin2env_pelvis: [13.708771815913414], - // q_skin2env_right_arm: [3.306048433334798], - // q_skin2env_right_foot: [2.8470556919279275], - // q_skin2env_right_hand: [2.820093545556159], - // q_skin2env_right_leg: [5.065172487729508], - // q_skin2env_right_shoulder: [5.495164499822711], - // q_skin2env_right_thigh: [10.530261655946806], - // q_thermogenesis_total: [109.95300054410399], - // simulation_time: [0], - // t_core_back: [37.10669294345571], - // t_core_chest: [37.046763146185384], - // t_core_head: [37.27948664648618], - // t_core_left_arm: [35.71685683735247], - // t_core_left_foot: [34.602386529646225], - // t_core_left_hand: [34.90385741306187], - // t_core_left_leg: [36.32476524669076], - // t_core_left_shoulder: [36.25197837683718], - // t_core_left_thigh: [36.67563450105145], - // t_core_neck: [36.81782751853464], - // t_core_pelvis: [37.25856827899341], - // t_core_right_arm: [35.7168568373525], - // t_core_right_foot: [34.602386529646274], - // t_core_right_hand: [34.903857413061935], - // t_core_right_leg: [36.32476524669116], - // t_core_right_shoulder: [36.25197837683733], - // t_core_right_thigh: [36.675634501051476], - // t_skin_back: [34.52453966623942], - // t_skin_chest: [34.61642143810777], - // t_skin_head: [34.98583652881713], - // t_skin_left_arm: [33.857087457104285], - // t_skin_left_foot: [34.11693174783236], - // t_skin_left_hand: [34.308156507844046], - // t_skin_left_leg: [33.95264011542674], - // t_skin_left_shoulder: [34.25228779730484], - // t_skin_left_thigh: [34.15023407024665], - // t_skin_mean: [34.46418466255792], - // t_skin_neck: [35.10668504573099], - // t_skin_pelvis: [35.844809578238284], - // t_skin_right_arm: [33.8570874571043], - // t_skin_right_foot: [34.11693174783242], - // t_skin_right_hand: [34.308156507844096], - // t_skin_right_leg: [33.95264011542693], - // t_skin_right_shoulder: [34.2522877973049], - // t_skin_right_thigh: [34.15023407024672], - // w_back: [0.06], - // w_chest: [0.06], - // w_head: [0.06], - // w_left_arm: [0.06], - // w_left_foot: [0.06], - // w_left_hand: [0.06], - // w_left_leg: [0.06], - // w_left_shoulder: [0.06], - // w_left_thigh: [0.06], - // w_mean: [0.05999999999999999], - // w_neck: [0.06], - // w_pelvis: [0.06], - // w_right_arm: [0.06], - // w_right_foot: [0.06], - // w_right_hand: [0.06], - // w_right_leg: [0.06], - // w_right_shoulder: [0.06], - // w_right_thigh: [0.06], - // weight_loss_by_evap_and_res: [0.011094527785290931], - // }; - // - // expect(model.dict_results()).toBe(expected); + describe("state after single iteration", () => { + describe("results should have correct values", () => { + const jos = new JOS3( + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + "all", + ); + + const results = jos.dict_results(); + for (const [key, value] of Object.entries(single_iteration)) { + it(key, () => { + const res = results[key]; + expect(res).not.toBeUndefined(); + + const ex = value[0]; + const ac = res[0]; + + switch (typeof ex) { + case "string": + expect(ac).toBe(ex); + break; + default: + expect(ac).toBeCloseTo(ex, 10); + } + }); + } + }); + + const checkProperty = (prop, expected) => { + if (math.isMatrix(prop)) { + prop = prop.toArray(); + } + + if (Array.isArray(expected)) { + for (let i = 0; i < expected.length; i++) { + expect(prop[i]).toBeCloseTo(expected[i], 10); + } + } else if (typeof expected === "string") { + expect(prop).toBe(expected); + } else if (typeof expected === "number") { + expect(prop).toBeCloseTo(expected, 10); + } else { + throw new Error(`whoops, not implemented for "${typeof expected}"`); + } + }; + + describe("getters return correct values", () => { + const jos = new JOS3(); + + it("body_names", () => { + expect(jos.body_names).toBe(BODY_NAMES); + }); + + it("results", () => { + expect(jos.results).toStrictEqual(jos.dict_results()); + }); + + it.each(getters)("$property", ({ property, expected }) => { + checkProperty(jos[property], expected); + }); + }); + + describe("setters operate appropriately", () => { + it.each(setters)("$property", ({ property, operations }) => { + for (const { next, expected } of operations) { + const jos = new JOS3(); + let set = next; + + if (Array.isArray(set)) { + set = math.matrix(set); + } + + jos[property] = set; + checkProperty(jos[property], expected); + } + }); + }); + }); + + describe("state after 20 iterations", () => { + describe("results should have correct values", () => { + const jos = new JOS3( + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + "all", + ); + + jos.simulate(20); + + const results = jos.dict_results(); + for (const [key, value] of Object.entries(twenty_iterations)) { + it(key, () => { + const res = results[key]; + expect(res).not.toBeUndefined(); + + for (let i = 0; i < value.length; i++) { + const ex = value[i]; + const ac = res[i]; + + switch (typeof ex) { + case "string": + expect(ac).toBe(ex); + break; + default: + expect(ac).toBeCloseTo(ex, 10); + } + } + }); + } + }); }); });