药代动力学/药效学(PK / PD)和系统药理学模型是在发展评价药物的重要工具。使用MATLAB®和SimBiology®,研究人员可以构建和在图形环境或使用编程工具,无论是定性此类机型。他们可以使用临床前数据以数学描述动态体内根据模型模拟人类补充新的候选药物的行为,并预测和推断。然后,他们可以共享这些模型,以便能够同胞临床医生,生物学家和研究人员能更好地评估各种给药策略的有效性和安全性指标和探索什么,如果在不同的患者亚群的情况。
在某些情况下,直接共享SimBiology模型可能不实际。例如,您的同事可能无法访问或不熟悉MATLAB和SimBiology,或者您可能希望锁定模型及其特性,以便其他用户不能无意中更改它。
MATLAB编译器™能够让您部署SimBiology模型作为一个独立的MATLAB应用程序的一部分。你可以建立一个自定义的图形界面,其他研究人员可以用它来设置和运行模式模拟。然后,您可以编译应用程序,以使研究人员能够使用它无需安装MATLAB或SimBiology。
使用由Koch, Walz, Lahu和Schropp开发的肿瘤模型1作为一个示例,本文描述了一个用于开发和部署应用程序的工作流,该应用程序用于模拟使用SimBiology构建的机械PK/PD模型2。
样品模型和部署的应用程序都可以下载。
肿瘤模型概述
本文中的例子是基于Koch等人的肿瘤模型,该模型用于描述肿瘤随着时间的增长对单一药物治疗或同时给药两种药物的联合治疗的反应。
该SimBiology实施科赫等人。肿瘤模型是在图1所示3.。两种药物的血浆浓度是通过独立的一隔室PK模型与线性消除路线说明。肿瘤生长模型在肿瘤室中表示。衰变反应的速率取决于药物A和药物B的血浆浓度和相互作用参数。当药物的血浆浓度下降到零,肿瘤动力学是由肿瘤生长过程说明。肿瘤重量被定义为生长和腐烂肿瘤状态的总和,即,X1 + X2 + X3 + X4。
模型模拟使得可以分析对肿瘤抑制(图2)的各种组合给药策略的影响。
准备部署模型
为了共享使用MATLAB编译器的SimBiology模型中,我们首先创建一个导出模型4。
我们使用SimBiology模型加载到MATLABsbioloadproject
。
>> sbioloadproject('TumorGrowthModel.sbproj');%加载模型
我们使用出口
和保存
创建导出SimBiology模型,并将其保存为MAT文件,该文件将被加载到部署的应用程序。
>> exportedModel =出口(M1);%创建导出模型>>保存modelFile.mat exportedModel%保存导出模型
注意,导出的SimBiology模型具有一组有限的可访问属性。此外,一些模型特性,包括反应、规则和事件,不能在导出的版本中更改。
构建模型的接口
创建出口SimBiology模型后,我们建立了一个自定义的MATLAB接口。该界面将使得非建模和研究人员无法获得MATLAB调整模型参数,适用于给药方案,并运行模拟(图3)。
利用MATLAB的图形用户界面的设计环境(GUIDE)工具,我们通过从调色板拖动元件到布局区域(图4)布置的接口。
我们需要修改每个组件的单个属性。例如,我们需要更新标签
属性,以便可以通过编程方便地访问这些元素。使用命名约定,例如<名称> _ <类型>
,提高了代码的可读性(图5)。
编程功能访问导出SimBiology型号
在基于桌面MATLAB工作流程,应用程序编码访问非出口SimBiology模型。在准备部署时,我们需要更新使用出口SimBiology模型的代码。
第一个步骤是,以指示MATLAB编译该应用程序使用的导出SimBiology模型。为此,我们增加一个指令(通过% #函数
在指南生成的MATLAB文件中,TumorGrowthInhibition.m
,这是与导图文件,我们得救了。
功能varargout = TumorGrowthInhibition(varargin)% #函数SimBiology.export.Model
当与接口控制对象最终用户交互,诸如菜单或按钮,在应用程序中,特定的功能,或回调,被调用。下一步,我们将修改回调函数使用导出模型。
在示例应用程序中,我们将修改5个回调函数,为部署模型做准备:TumorGrowthInhibition_OpeningFcn,CellLine_POPUP_Callback
,InitialTumorWeight_EDIT_Callback,Dosage1_EDIT_Callback,
和SimTumorGrowth_PUSHBUTTON_Callback
。
TumorGrowthInhibition_OpeningFcn
在示例应用程序的打开功能。它加载模型和代码初始化剂量,模型参数和其他属性。最初的(未部署的)版本使用sbioloadproject
该模型加载到MATLAB和sbiodose
要么getdose
创建或编辑现有的剂量对象。
功能TumorGrowthInhibition_OpeningFcn(hObject,EVENTDATA,拉手,varargin)%%创建和初始化剂量 - 非部署的版本%负载项目 PROJ = sbioloadproject('TumorGrowthModel.sbproj');m1 = proj.m1;%获取量1D1 = getdose(M1,“药物A”);%获取量2D2 = getdose(M1,“药物B”);%
对于已部署的应用程序,我们从MAT文件加载导出的模型(而不是使用sbioloadproject
)。我们使用getdose
更新连接到出口模式现有的剂量对象,因为新的剂量对象不能被添加到导出的模型。
功能TumorGrowthInhibition_OpeningFcn(hObject,EVENTDATA,拉手,varargin)%%创建和初始化剂量 - 部署版本%负载模型 PROJ =负载('modelFile.mat');M1 = proj.exportedModel;%获取量1D1 = getdose(M1,“药物A”);%获取量2D2 = getdose(M1,“药物B”);%
CellLine_POPUP_Callback
当用户选择从弹出式菜单中的细胞系被调用。此功能是负责制定适当的根据用户的选择的细胞系参数。在该模型的非出口版本,这是通过一个调用选择适当的变体完成sbioselect
。
功能CellLine_POPUP_Callback (hObject eventdata处理)%%设定合适的细胞系名称不变 - 非展开版本 细胞株= sbioselect(型号,'类型',“变种”,'名称',cellLineName);%
SimBiology模型变量不能与出口的机型。因此,对于出口车型中,我们使用ValueInfo
和getIndex
获取和设置单独的模型参数,使一个模式的变体。
功能CellLine_POPUP_Callback (hObject eventdata处理)%%设置适当的细胞系参数——部署版本%获取当前L1和L0值 L1 = model.ValueInfo(getIndex(型号,'L1'));L0 = model.ValueInfo(getIndex(型号,'L0'));开关cellLineName案件“细胞株1”10。InitialValue = 0.141;L1。InitialValue = 0.282;案件《细胞株2》10。InitialValue = 0.142;L1。InitialValue = 0.284;案件“细胞系3”L0.InitialValue = 0.143;L1.InitialValue = 0.286;除此以外%结束%
InitialTumorWeight_EDIT_Callback
当用户指定一个初始肿瘤重量(被调用W0
)。就像CellLine_POPUP_Callback
,这个回调用途的非部署的版本sbioselect
设置在模型中的参数值。
功能InitialTumorWeight_EDIT_Callback(hObject,EVENTDATA,手柄)%%在模型W0的设置值 - 非展开版本 w0 = sbioselect(模型,'类型','参数','名称','W0');w0.Value = str2double(GET(hObject,'串'));%
与CellLine_POPUP_Callback
, 我们用ValueInfo
和getIndex
设置在导出SimBiology模型值部署的应用程序。
功能InitialTumorWeight_EDIT_Callback(hObject,EVENTDATA,手柄)%%在模型部署版本中设置w0的值 W0 = model.ValueInfo(getIndex(型号,'W0'));w0.InitialValue = str2double(GET(hObject,'串'));%
Dosage1_EDIT_Callback
当用户指定剂量时间单位时调用。此回调更新剂量
目的。最初,这是通过设置完成TimeUnits
和间隔
直接性。
功能Dosage1_EDIT_Callback (hObject eventdata处理)%%设定剂量对象的设置 - 非展开版本%直接设置TimeUnits和间隔 dose1。TimeUnits = TimeUnits;dose1。间隔= str2double (get (handles.EveryValue1_EDIT,'串'));%转换开始时间从白天到新TimeUnitsdose1.StartTime = sbiounitcalculator('天',dose1.TimeUnits,str2double(获得(handles.StartTime1_编辑,'串')));%
在部署的应用程序,TimeUnits
是的只读属性剂量
对象,所以不能直接设置。我们使用sbiounitcalculator
将剂量间隔转换为剂量的现有时间单位。
功能Dosage1_EDIT_Callback (hObject eventdata处理)%%设置剂量对象的设置-部署版本%不能设置时间单位;使用sbiounitcalculator转换时间间隔 dose1.Interval = sbiounitcalculator('天'、dose1.TimeUnits str2double (get(处理。EveryValue1_编辑,'串')));%转换开始时间从白天到新TimeUnitsdose1.StartTime = sbiounitcalculator('天',dose1.TimeUnits,str2double(获得(handles.StartTime1_编辑,'串')));%
SimTumorGrowth_PUSHBUTTON_Callback
当用户点击该被调用模拟肿瘤生长按钮。此回调运行具有相应的参数值和给药方案模拟计算随时间的肿瘤重量进展。在该模型的非部署的版本,它调用sbiosimulate
。
功能SimTumorGrowth_PUSHBUTTON_Callback(hObject,EVENTDATA,手柄)%%仿真模型及获得肿瘤图谱 - 非部署的版本 SD = sbiosimulate(型号,”[细胞株,phiVar],[dose1,dose2]);[currResults.Time,currResults.Tumor] = selectbyname(SD,' w ');%
对于导出的模型,我们替换sbiosimulate
与模拟
。
功能SimTumorGrowth_PUSHBUTTON_Callback(hObject,EVENTDATA,手柄)%%模拟模型&获取肿瘤配置文件——部署版本 SD =模拟(模型,initValues,[dose1,dose2]);[currResults.Time,currResults.Tumor] = selectbyname(SD,' w ');%
设置报表生成
使用MATLAB报表生成™我们生成一个文档捕获模型的PK / PD响应,模型参数和给药方案。我们的应用程序会生成一个名为“myreport.pdf” PDF文档。此回调使用新的文档对象模型(DOM)在MATLAB报表生成器4.0(R2014b),它可以让我们能够建立报告程序可用的API。
%---按下按钮在Export_PUSHBUTTON执行。功能Export_PUSHBUTTON_Callback(hObject,EVENTDATA,手柄)%hObject句柄Export_PUSHBUTTON(见GCBO)%EVENTDATA预留 - 在MATLAB%手柄结构的未来版本设有手柄和用户数据(参见GUIDATA)%%生成报告%%%%%%初始化被定义%%%%%%%进口DOM设置 进口mlreportgen.dom。*;%让它部署与MATLAB编译器使用makeDOMCompilable ();%创建文档RPT =文档('我的报告',“pdf”);%%%%%%创建主部%%%%%%%h =标题(2“联合治疗对肿瘤生长的模拟效应”);B =边界();b.BottomStyle ='单';b.BottomColor ='浅灰';b。BottomWidth =“1点”;h.Style = [h.Style {彩色(“深橙”), b});追加(rpt, h);p = add (rpt,段落)'*使用MATLAB报表生成器4.0(R2014b)自动生成。'));p.Style = {的FontFamily(“宋体”)、字形大小(“10 pt”)};%%%%创建设置部分%%%%%% % 资料表= {...“细胞系:”,cellLineName {1};'初始肿瘤重量(g):',initialTumorWeight};表=表(大小(表资料,1));追加(RPT,表);%%%%%创建结果区段%%%%%% % hFig =图;%瘤重轴hAxes = copyobj(handles.TumorWeight_AXES,hFig);集(hAxes,'单位',“归一化”);集(hAxes,'位置',[0.15 0.30 0.7 0.6];%的剂量轴hAxes = copyobj(handles.Dose_AXES,hFig);集(hAxes,'单位',“归一化”);集(hAxes,'位置',[0.15 0.15 0.7 0.15]);以英寸%设定尺寸集(hFig,'单位',“英寸”);Pos =得到(hFig,'位置');集(hFig,'位置', (Pos (1:2) 6 5));集(hFig,“PaperPosition”,[0 0 6 5]);%打印并追加到报告打印(hFig'-dmeta','plot1.emf');IMG =图像('plot1.emf');img.Width =“6英寸”;img.Height =“5英寸”;追加(RPT,段落(IMG));%% 查看报告关闭(RPT);rptview('我的报告',“pdf”);%
在MATLAB中测试应用程序
我们执行TumorGrowthInhibition
命令来启动MATLAB中的应用。应用程序启动时,我们指定的细胞系,最初的肿瘤重量和给药方案,然后点击模拟肿瘤生长按钮开始模拟。
该图显示模拟结果的四个不同的处理(图6)。
我们点击出口界面上按钮以生成示出的结果(图7)的PDF文件。
我们现在准备创建一个独立的应用程序,可以分发给没有安装MATLAB的研究人员。
部署应用程序
下面的MATLAB命令查找所有的文件和路径依赖和调用MATLAB编译命令编译TumorGrowthInhibition.m
应用程序部署:
%注,这是假定所有的附加应用文件在路径additionalFiles = [{'modelFile.mat','Summary.rpt'} ... exportedModel.DependentFiles]。为了实现这个示例的目的,我们以编程方式构造|mcc| %命令:mccCommand = ['MCC -m TumorGrowthInhibition.m'...的sprintf(“——% s”,additionalFiles {:})];%执行| MCC |命令。的eval(mccCommand)
一旦编译完成,则用于与MATLAB编译器运行时(MCR)分配产生的可执行文件(.exe)。该MCR是一组共享库,使用户没有安装MATLAB的计算机上执行编译MATLAB应用程序。
摘要:应用工作流
您可以使用本文中介绍的过程来部署自己的SimBiology模型作为一个独立的应用之一。通过加载在MATLAB模型,并创建与导出SimBiology模式启动出口
和保存
命令。接下来,建立一个简单的界面,向导和程序回调函数通过接口控制单元访问SimBiology模型。最后,在MATLAB测试您的应用程序后,用MATLAB编译器编译并重新测试没有安装MATLAB的计算机上生成的可执行文件。
1科赫,G.,沃尔兹A.,拉祜族,G.,和Schropp,J。(2009)建模肿瘤生长和组合疗法的抗癌效果。杂志药代动力学和药效学。36:179-197。
2在这个工作流程的第一步是建立和表征模型。这个步骤是由Koch等完成,而本文提供的方法的概述,它不进行详细描述。看到全面建设SimBiology模型详细了解此步骤。
3.基础的速率方程在图1中没有显示。请参阅科赫等人或下载SimBiology应用对模型和实现细节。
4SimBiology项目文件(* .sbproj)不与MATLAB编译器兼容。