{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Creating AnyScript Macros" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "AnyPyTools can create AnyScript macros automatically. Doing so simplifies the process of writing complex macros and makes it easier to do things like parameter studies, Monte Carlo simulation, etc. \n", "\n", "There is a class for every macro command:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from anypytools.macro_commands import (MacroCommand, Load, SetValue, SetValue_random, Dump, SaveDesign,\n", " LoadDesign, SaveValues, LoadValues, UpdateValues, OperationRun)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A quick example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following shows how the to generate a simple macro." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[load \"Knee.any\" -def SUBJECT=---\"\\\"S02\\\"\" -def TRIAL=---\"\\\"T04\\\"\",\n", " operation Main.MyStudy.InverseDynamics\n", " run,\n", " classoperation Main.MyStudy.Output.MaxMuscleActivity \"Dump\"]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "macrolist = [\n", " Load('Knee.any', defs={'SUBJECT':'\"S02\"', 'TRIAL':'\"T04\"'}),\n", " OperationRun('Main.MyStudy.InverseDynamics'),\n", " Dump('Main.MyStudy.Output.MaxMuscleActivity'),\n", "] \n", "macrolist " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each macro object will generate the macro commands with the correct syntax.\n", "The macro can be launched using the `start_macro()` method of the `AnyPyProcess` object.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5940522ac2ac4f4498362576316f72e6", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "for data in output:\n", " max_activity = data['Main.MyStudy.Output.MaxMuscleActivity']\n", " time = data['Main.MyStudy.Output.Abscissa.t']\n", " patella_ligament_length = data['Main.MyModel.PatellaLigament.DriverPos'][0]\n", " plt.plot(time, max_activity, label='{:.1f} cm'.format(100* patella_ligament_length) )\n", "\n", "plt.title('Effect of changing patella tendon length') \n", "plt.xlabel('Time steps')\n", "plt.ylabel('Max muscle activity')\n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=2);\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.0" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "00afe1ba02f541ce9a2b88eecc1f6369": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "0d24beb4bb6c448c8ad08daee160b953": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "11400b7db356447ea8aac81532c4d29b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "129faf74be434ae5a6a86e415ab146be": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_9bf5fdef05354997a6b1dd190ec64406", "style": "IPY_MODEL_4a01d95b762645e19efde9885e2e15a4", "value": " 7/7 [00:05<00:00, 1.51it/s]" } }, "17e49e989fbc434aab2750a95cdde67d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_ef217a21fbc14bc4ba20dfd22df8dc87", "style": "IPY_MODEL_f3595b4e49284744819a231e9c51e8c4", "value": "100%" } }, "1c66b897ee8d41febdcecef7385de4a4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_faea7a5f646b4b868292362cee8de848", "IPY_MODEL_617aad94c3694b65ba34ebd3526f985a", "IPY_MODEL_129faf74be434ae5a6a86e415ab146be" ], "layout": "IPY_MODEL_66200b9858c44bb8bb641b8a8fc76854" } }, "20391c25a3b445f7a557ab1e1fce540f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "3312a61e86cd4882885876566c4f4e47": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "491df559ec114a96a78d45693942d632": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "4a01d95b762645e19efde9885e2e15a4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "538d4d1164654bfeb4790eba111a80f6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "5940522ac2ac4f4498362576316f72e6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_17e49e989fbc434aab2750a95cdde67d", "IPY_MODEL_b3cc349ecb98417aa750825299954ce9", "IPY_MODEL_ba1149019846494790d1537fb0538583" ], "layout": "IPY_MODEL_6470d5e0229542c1b9072c84719713f7" } }, "5bb3362c9dde40a39f4dcc4cc9565f0c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "617aad94c3694b65ba34ebd3526f985a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_11400b7db356447ea8aac81532c4d29b", "max": 7, "style": "IPY_MODEL_5bb3362c9dde40a39f4dcc4cc9565f0c", "value": 7 } }, "6470d5e0229542c1b9072c84719713f7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "66200b9858c44bb8bb641b8a8fc76854": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "9bf5fdef05354997a6b1dd190ec64406": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "b315904563164fcd97d1dd927e497746": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_d1ad0fe2f4be4bdfa609cd21bdaa8c7e", "style": "IPY_MODEL_fdba769187dd404492050b07eb6a988d", "value": " 100/100 [01:11<00:00, 1.85it/s]" } }, "b3cc349ecb98417aa750825299954ce9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_bc5b863d4b474764b0249385d1a2d64c", "max": 1, "style": "IPY_MODEL_538d4d1164654bfeb4790eba111a80f6", "value": 1 } }, "b4ad4e0acecc44c0858c2f3f724fdef3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_f74c78d721ad46e481e56f51e901a8c1", "style": "IPY_MODEL_491df559ec114a96a78d45693942d632", "value": 100 } }, "ba1149019846494790d1537fb0538583": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_3312a61e86cd4882885876566c4f4e47", "style": "IPY_MODEL_20391c25a3b445f7a557ab1e1fce540f", "value": " 1/1 [00:00<00:00, 1.49it/s]" } }, "bc5b863d4b474764b0249385d1a2d64c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "bcde6938a81a413f8c73f6c4c4c10417": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_00afe1ba02f541ce9a2b88eecc1f6369", "style": "IPY_MODEL_c4cb956fafbf4a2fb6fb4e117178ef6f", "value": "100%" } }, "c3a80d0e39984ab5aeb333b04fdac280": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "c4cb956fafbf4a2fb6fb4e117178ef6f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "d1ad0fe2f4be4bdfa609cd21bdaa8c7e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ecadd240db804134983e5cb348f2bd9c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_bcde6938a81a413f8c73f6c4c4c10417", "IPY_MODEL_b4ad4e0acecc44c0858c2f3f724fdef3", "IPY_MODEL_b315904563164fcd97d1dd927e497746" ], "layout": "IPY_MODEL_c3a80d0e39984ab5aeb333b04fdac280" } }, "ef217a21fbc14bc4ba20dfd22df8dc87": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "f02ba3aea9ca4b219777b14c4c3a0d11": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "f3595b4e49284744819a231e9c51e8c4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "f74c78d721ad46e481e56f51e901a8c1": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "faea7a5f646b4b868292362cee8de848": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_0d24beb4bb6c448c8ad08daee160b953", "style": "IPY_MODEL_f02ba3aea9ca4b219777b14c4c3a0d11", "value": "100%" } }, "fdba769187dd404492050b07eb6a988d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }