|
|
(20 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| [[Software#MTtbox|Return to Bangham Lab Software]]<br><br> | | [[Software#MTtbox|Return to Bangham Lab Software]]<br><br> |
| | =Why?= |
| | The aim is to model the growth of microtubules (and other dynamic organelles such as actin). Organelles grow through chemical reactions and growing organelles can collide with other organelles and membranes. <br><br> |
| | =How?= |
| | To address these two features we adopted a data structure that stores microtubules as a list of vertices each of which is associated with a geometrically specified volume. Cell volumes are represented by a three dimensional array (lattice) of voxels. Regions within this volume are designated by numerical labels, e.g. 0 for cytoplasm, -4 for plasma-membrane. The size of the entire volume determines the resolution of the chemical reaction/diffusion system. Resolution increases with the number of voxels. Increasing the number of voxels decreases the speed of computation and increases the demand for memory (>=16 Gbytes memory is highly desirable). Dynamic organelles, such as microtubules, are represented as geometrical objects: tubes with hemispheric ends. These can collide with other microtubules, organelles and membranes. The most CPU time consuming step is collision detection. |
| ==Current Status== | | ==Current Status== |
| MTtbox is currently under test and further development<br> | | MTtbox is currently under test and further development<br> |
| The main data structure is called: 'data'. It can be accessed from the Matlab command line by declaring data to be global.
| | [http://rico-coen.jic.ac.uk/LabGuide/index.php/Modelling_using_MTtbox Pre-release internal documentation] |
| global data
| |
| at any time. The following documentation will refer to fields in data. It also refers to the custom menu items by menu:name.
| |
| <br>
| |
| =First view of the MTtbox=
| |
| ===1 A===
| |
| {| border="0" cellpadding="5" cellspacing="3"
| |
| |- valign="top"
| |
| |width="300pt"|The toolbox is launched with the command
| |
| MTtbox
| |
| Which will cause the interface to appear at the top left of the monitor.<br>
| |
| The left panel (accessed through the handle: data.PanelH) provides control and the right panel (data.plotprops.AxesH) displays the output. They can be dragged anywhere and returned to the top-left using menu:View:Controls to top-left.<br><br>
| |
| | |
| |width="700pt"|[[Image:MTtboxUserInterface.png|700px|MTtbox GUI]]
| |
| |}
| |
| ===1 B===
| |
| {| border="0" cellpadding="5" cellspacing="3"
| |
| |- valign="top"
| |
| |width="500pt"|A default project is created by selecting: ''menu:File:New Project''<br><br>It forms a cell bounded by regions labelled: Outside, cell_wall, plasma_membrane, cytoplasm and vacuole. These are concentric volumes. Length is measured in microns (time in seconds). The axis labels indicate the thickness of each layer in terms of voxels in this particular model. This is extremely low resolution - it means that the microtubules will have to be unrealistically large. This is convenient for debugging and illustrating the system but not for simulations. The outer surface of each region is coloured, e.g. (Fig. on right) the vacuole is yellow and the cytoplasm is pale green.<br><br>
| |
| The cell can be rotated etc. using the panels at the top of the display panel. Fig. below: all the regions have been hidden (uncheck each item in menu:View) and the mesh associated with the cytoplasm outer surface is displayed (check ''menu:View:Organelle meshes'')<br>
| |
| [[Image:MTtboxCytoplasmMesh.png|300px|MTtbox GUI]]
| |
| |width="400pt"|[[Image:MTtboxDefaultProject.png|400px|MTtbox GUI]]
| |
| |}
| |
| ===1 C===
| |
| {| border="0" cellpadding="5" cellspacing="3"
| |
| |- valign="top"
| |
| |width="500pt"|A project is saved by selecting: ''menu:File:Save as''<br><br>Having first saved a project a default Interaction Function is created by selecting ''Edit''. A default project file contains lots of comments to provide help on how to develop the project.<br><br>At present the Interaction Functions is not copied to the new project on each Save as command - this has to be done manually.
| |
| |width="400pt"|(Comments are in green - this web version of the matlab file is created using webify_interaction_function('MT_Edinb_20120427.m')).<br><br>
| |
| The default file is largely a copy of''' MTtbox_BoilerPlate.txt''' which should be updated to reflect the latest ideas on how to build the function.
| |
| <br><br>
| |
| function data = MT_Tues_20120501( data, before )
| |
| if nargin < 1, return; end
| |
| <span style="color: Green">% </span>
| |
| <span style="color: Green">%</span>
| |
| <span style="color: Green">% extract factors from structure</span>
| |
| for i=1:size( data.factorprops.Concentration,2)
| |
| factname=lower(data.factorprops.Index2Name{i});
| |
| eval([[factname,'_p'],'=reshape(','data.factorprops.Concentration(:,i),[ data.cellprops.cellsize]);']);
| |
| eval([[factname,'_i'],'=','data.factorprops.Name2Index.(factname);']);
| |
| end
| |
| <span style="color: Green">% insert model in here</span>
| |
| <span style="color: Green">% data=setupDiffusion(data,'Factorname','s_micplm','DiffK',[0.2,0.2],...</span>
| |
| <span style="color: Green">% 'RegionLists',{{'cytoplasm','vacuole','cell_wall'},{'plasma_membrane','microtubules'}});</span>
| |
| <span style="color: Green">% data=setupDiffusion(data,'Factorname','id_micplm','DiffK',[0,0],...</span>
| |
| <span style="color: Green">% 'RegionLists',{{'cytoplasm','vacuole','cell_wall'},{'plasma_membrane','microtubules'}});</span>
| |
| <span style="color: Green">% data.factorprops.DiffusionConst(:,1)=0.1; % This should be superceed by the above</span>
| |
| <span style="color: Green">% data.factorprops.DiffusionConst(:,2)=0.05;% This should be superceed by the above</span>
| |
| if data.iterations<0
| |
| <span style="color: Green">% insert initialisation code here - use Initialise button to jump to here</span>
| |
| <span style="color: Green">% modify default cell specifications, etc. to modify how the cell volume is partitioned, e.g.</span>
| |
| <span style="color: Green">% data.organelleprops.plasma_membrane.size=0.95; % fraction of longest dimension</span>
| |
| <span style="color: Green">% data.organelleprops.cytoplasm.size=0.80;</span>
| |
| <span style="color: Green">% data.organelleprops.vacuole.size=0.4;</span>
| |
| <span style="color: Green">% data.organelleprops.microtubules.nuclspont=0.0012; % observed nucleations per square (cubic) micron per sec</span>
| |
| elseif data.iterations==0
| |
| <span style="color: Green">% insert startup code here - use Restart button to jump to here</span>
| |
| <span style="color: Green">%% setup MT size</span>
| |
| <span style="color: Green">%if data.cellprops.cellsize(1)>25</span>
| |
| <span style="color: Green">% data=mtSETprops(data,'microtubules','size',0.01,'microtubules','growthrate',0.025);</span>
| |
| <span style="color: Green">% data=mtSETprops(data,'microtubules','shrinkrate',0.005);</span>
| |
| <span style="color: Green">%end</span>
| |
| else
| |
| <span style="color: Green">%id_micplm_p(:)=0; % clear</span>
| |
| <span style="color: Green">%id_micplm_p(data.cellprops.Vol==data.organelleprops.cytoplasm.Label)=0.8; % set cytoplasm region to 1</span>
| |
| <span style="color: Green">%id_micplm_p(round(data.cellprops.cellsize(1)/3):end,:,:)=0; % then set right hand end back to zero</span>
| |
| <span style="color: Green">%s_micplm_p(id_micplm_p>0.1)=0.1;</span>
| |
| <span style="color: Green">%% limit spontaneous nucleation to a region specified by id_micplm_p</span>
| |
| <span style="color: Green">% data.organelleprops.microtubules.nuclspont=id_micplm_p;</span>
| |
| <span style="color: Green">%data.cellprops.colourType=0; % set to 1 if colour is to be specified by individual MT property</span>
| |
|
| |
| <span style="color: Green">%Work through all the microtubules updating properties depending on flags</span>
| |
| <span style="color: Green">%Average number of MT's present is observed to be about 80 i.e. 80/300 square microns (say 1 micron thick</span>
| |
| <span style="color: Green">%so ~0.25 per square (cubic) micron</span>
| |
| for i_MT=1:length(data.working.dyn.microtubules.Org)
| |
| MT=data.working.dyn.microtubules.Org(i_MT);
| |
| <span style="color: Green">% MTtbox monitors ...</span>
| |
| <span style="color: Green">% MT.Age</span>
| |
| <span style="color: Green">% MT.PauseDuration</span>
| |
| <span style="color: Green">% MT.TimeNucleated</span>
| |
| <span style="color: Green">% MT.Alive=true;</span>
| |
| <span style="color: Green">% MT.Growing=true;</span>
| |
| <span style="color: Green">% MT.Shrinking=true;</span>
| |
| <span style="color: Green">% MT.Catastrophe=false;</span>
| |
| <span style="color: Green">% MT.BoundPLM=false;</span>
| |
| <span style="color: Green">% MT.PLMBindVertNums=[];</span>
| |
| <span style="color: Green">% MT.BoundMic=false;</span>
| |
| <span style="color: Green">% MT.MTBindVertNums=[];</span>
| |
| <span style="color: Green">% MT.BoundVac=false;</span>
| |
| <span style="color: Green">% MT.VacBindVertNums=[]; </span>
| |
| <span style="color: Green">% MT.Hit=struct('Type','','ID',[]); </span>
| |
| <span style="color: Green">% MT.HitMe=struct('Type','','ID',[]); </span>
| |
| <span style="color: Green">% MT.Props.growthrate</span>
| |
| <span style="color: Green">% MT.Props.shrinkrate</span>
| |
| <span style="color: Green">% MT.Props.maxbend</span>
| |
| <span style="color: Green">% MT.Props.maxAge</span>
| |
| <span style="color: Green">% MT.Props.nuclspont</span>
| |
| <span style="color: Green">% MT.Props.nuclonMT</span>
| |
| <span style="color: Green">% Make changes here, i.e.</span>
| |
| <span style="color: Green">% diffs=diff(MT.Verts).^2; % calculate length of MT</span>
| |
| <span style="color: Green">% MTlength=sum(sqrt(sum(diffs')'))*data.cellprops.micronsPerVoxelEdge; % microns</span>
| |
| <span style="color: Green">% if MTlength>0.5</span>
| |
| <span style="color: Green">% MT.Props.nuclonMT=min(1,0.4*MTlength); % observed approx. 0.007 per micron per sec</span>
| |
| <span style="color: Green">% else</span>
| |
| <span style="color: Green">% MT.Props.nuclonMT=0;</span>
| |
| <span style="color: Green">% end</span>
| |
| <span style="color: Green">%ageMT=data.working.CellAge;% seconds</span>
| |
| <span style="color: Green">%maxAgeColour=20;</span>
| |
| <span style="color: Green">%MT.Props.FaceColor=[max(0,min(1,1-ageMT/maxAgeColour)), 0.5, max(0,min(1,ageMT/maxAgeColour))];</span>
| |
| <span style="color: Green">% if MT.BoundPLM %&& MT.Growing % it must have hit the plasma_membrane and not aligned</span>
| |
| <span style="color: Green">% MT.Props.shrinkrate=20; % force it to shrink to oblivion</span>
| |
| <span style="color: Green">% fprintf(1,'MT(%d) Collided with PLM fastshrink\n',i_MT);</span>
| |
| <span style="color: Green">% end</span>
| |
| <span style="color: Green">% if MT.BoundMic %&& MT.Growing % it must have hit the plasma_membrane and not aligned</span>
| |
| <span style="color: Green">% MT.Props.shrinkrate=20; % force it to shrink to oblivion</span>
| |
| <span style="color: Green">% fprintf(1,'MT(%d) Collided with MT fastshrink\n',i_MT);</span>
| |
| <span style="color: Green">% end</span>
| |
| <span style="color: Green">% Keep the following</span>
| |
| <span style="color: Green">% Clear flags from collision detector</span>
| |
| MT.BoundPLM=false;
| |
| MT.BoundMic=false;
| |
| MT.BoundVac=false;
| |
| data.working.dyn.microtubules.Org(i_MT)=MT;
| |
| end
| |
| end
| |
|
| |
| <span style="color: Green">% put factors back into structure</span>
| |
| for i=1:size( data.factorprops.Concentration,2)
| |
| factname=lower(data.factorprops.Index2Name{i});
| |
| eval(['data.factorprops.Concentration(:,i)=',[factname,'_p(:);']]);
| |
| end
| |
|
| |
| end
| |
|
| |
| <span style="color: Green">% This space intentionally left blank.</span>
| |
| <span style="color: Green">% Default factor parameters</span>
| |
| <span style="color: Green">% Default organelle parameters</span>
| |
|
| |
| <span style="color: Green">% cell_wall.size =0.000000</span>
| |
| <span style="color: Green">% cell_wall.offset =0.500000</span>
| |
| <span style="color: Green">% cell_wall.micronthick =0.100000</span>
| |
| <span style="color: Green">% cell_wall.minvox =1.000000</span>
| |
| <span style="color: Green">% cell_wall.FaceColor =[1.000000,0.000000,1.000000,]</span>
| |
| <span style="color: Green">% cell_wall.FaceAlpha =0.010000</span>
| |
| <span style="color: Green">% cell_wall.Label =-5.000000</span>
| |
| <span style="color: Green">% cell_wall.isLayer =1.000000</span>
| |
| <span style="color: Green">% cell_wall.Static =1.000000</span>
| |
| <span style="color: Green">% cell_wall.InUse =1.000000</span>
| |
|
| |
| <span style="color: Green">%plasma_membrane.size =0.000000</span>
| |
| <span style="color: Green">%plasma_membrane.offset =0.500000</span>
| |
| <span style="color: Green">%plasma_membrane.micronthick =0.010000</span>
| |
| <span style="color: Green">%plasma_membrane.minvox =3.000000</span>
| |
| <span style="color: Green">%plasma_membrane.FaceColor =[1.000000,1.000000,0.000000,]</span>
| |
| <span style="color: Green">%plasma_membrane.FaceAlpha =0.020000</span>
| |
| <span style="color: Green">%plasma_membrane.Label =-4.000000</span>
| |
| <span style="color: Green">%plasma_membrane.isLayer =1.000000</span>
| |
| <span style="color: Green">%plasma_membrane.Static =1.000000</span>
| |
| <span style="color: Green">%plasma_membrane.InUse =1.000000</span>
| |
|
| |
| <span style="color: Green">% cytoplasm.size =0.000000</span>
| |
| <span style="color: Green">% cytoplasm.offset =0.500000</span>
| |
| <span style="color: Green">% cytoplasm.micronthick =1.000000</span>
| |
| <span style="color: Green">% cytoplasm.minvox =5.000000</span>
| |
| <span style="color: Green">% cytoplasm.FaceColor =[0.000000,1.000000,0.000000,]</span>
| |
| <span style="color: Green">% cytoplasm.FaceAlpha =0.020000</span>
| |
| <span style="color: Green">% cytoplasm.Label =0.000000</span>
| |
| <span style="color: Green">% cytoplasm.isLayer =1.000000</span>
| |
| <span style="color: Green">% cytoplasm.Static =1.000000</span>
| |
| <span style="color: Green">% cytoplasm.InUse =1.000000</span>
| |
|
| |
| <span style="color: Green">% microtubules.size =0.025000</span>
| |
| <span style="color: Green">% microtubules.minvoxel =3.000000</span>
| |
| <span style="color: Green">% microtubules.growthrate =0.100000</span>
| |
| <span style="color: Green">% microtubules.shrinkrate =0.010000</span>
| |
| <span style="color: Green">% microtubules.maxbend =40.000000</span>
| |
| <span style="color: Green">% microtubules.MaxAngle =20.000000</span>
| |
| <span style="color: Green">% microtubules.maxAge =0.000000</span>
| |
| <span style="color: Green">% microtubules.nuclspont =0.050000</span>
| |
| <span style="color: Green">% microtubules.nuclonMT =0.090000</span>
| |
| <span style="color: Green">% microtubules.probCatastrophe=0.300000</span>
| |
| <span style="color: Green">% microtubules.FaceColor =[0.000000,0.000000,1.000000,]</span>
| |
| <span style="color: Green">% microtubules.FaceAlpha =0.400000</span>
| |
| <span style="color: Green">% microtubules.Label =-6.000000</span>
| |
| <span style="color: Green">% microtubules.isLayer =0.000000</span>
| |
| <span style="color: Green">% microtubules.Static =0.000000</span>
| |
| <span style="color: Green">% microtubules.InUse =1.000000</span>
| |
|
| |
| <span style="color: Green">% vacuole.size =0.200000</span>
| |
| <span style="color: Green">% vacuole.offset =0.500000</span>
| |
| <span style="color: Green">% vacuole.micronthick =1.000000</span>
| |
| <span style="color: Green">% vacuole.minvox =0.000000</span>
| |
| <span style="color: Green">% vacuole.FaceColor =[1.000000,1.000000,0.000000,]</span>
| |
| <span style="color: Green">% vacuole.FaceAlpha =0.300000</span>
| |
| <span style="color: Green">% vacuole.Label =-3.000000</span>
| |
| <span style="color: Green">% vacuole.isLayer =0.000000</span>
| |
| <span style="color: Green">% vacuole.Static =1.000000</span>
| |
| <span style="color: Green">% vacuole.InUse =1.000000</span>
| |
| <span style="color: Green">% Default cell parameters</span>
| |
| <span style="color: Green">% cellprops.shape ='Rect:1:1:1'</span>
| |
| <span style="color: Green">% cellprops.sheetmodel =0</span>
| |
| <span style="color: Green">% cellprops.maxLengthMicrons=10</span>
| |
| <span style="color: Green">% cellprops.secondsPerStep =1</span>
| |
| <span style="color: Green">% cellprops.micronsPerVoxelEdge=0.400000</span>
| |
| <span style="color: Green">% cellprops.cubicMicronsPerVoxel=0.064000</span>
| |
| <span style="color: Green">% cellprops.cellsize =[25,25,25,]</span>
| |
| <span style="color: Green">% cellprops.colourType =1</span>
| |
| <span style="color: Green">% cellprops.Vol =[-1,-1,-1,-1, ... ]</span>
| |
| <span style="color: Green">% cellprops.Smooth ='None'</span>
| |
| <span style="color: Green">% cellprops.dynamic ='microtubules'</span>
| |
| <span style="color: Green">% cellprops.bound_distance =5</span>
| |
| <span style="color: Green">% cellprops.collide_distance=10</span>
| |
| <span style="color: Green">% cellprops.% vacuole.Vol=struct</span>
| |
| <span style="color: Green">% vacuole.EdgeVol=struct</span>
| |
| <span style="color: Green">% cellprops.% cell_wall.Vol=struct</span>
| |
| <span style="color: Green">% cell_wall.EdgeVol=struct</span>
| |
| <span style="color: Green">% cellprops.% plasma_membrane.Vol=struct</span>
| |
| <span style="color: Green">% plasma_membrane.EdgeVol=struct</span>
| |
| <span style="color: Green">% cellprops.% cytoplasm.Vol=struct</span>
| |
| <span style="color: Green">% cytoplasm.EdgeVol=struct</span>
| |
| <span style="color: Green">% cytoplasm.Indexes=struct</span>
| |
| <span style="color: Green">% cellprops.% Diameter.microtubules=struct</span>
| |
| <span style="color: Green">% cellprops.% microtubules.Vol=struct</span>
| |
| <span style="color: Green">% microtubules.Offsets=struct</span>
| |
| |}
| |
| =Graphical User Interface=
| |
| ===2 A Changing organelles in the cell===
| |
| {| border="0" cellpadding="5" cellspacing="3"
| |
| |- valign="top"
| |
| |width="500pt"| ''menu:Organelles'' shows a list of organelles, check those that are required and then re-establish the working volumes (used for collision detection) by using ''menu:Prefs:Cell size and shape''<br>
| |
| |}
| |
| ===2 B Changing working volumes used for collision detection===
| |
| [[Current data structures|Current data structures]]<br><br>
| |
| {| border="0" cellpadding="5" cellspacing="3"
| |
| |- valign="top"
| |
| |width="500pt"| ''menu:Prefs:Cell size and shape'' establishes the shape of the cell and the arrangement of static organelles. The data structure it creates underpins the collision detection system.
| |
| data.cellprops.Vol
| |
| is a volume filled with labels (range 0 to -7) representing regions: not-cell, cell-wall, plasma-membrane, cytoplasm, vacuole, etc. It is re-formed whenever the cell is redefined with pushbutton ''Initialise''.<br><br>
| |
| data.working.Vol
| |
| is a copy of data.cellprops.Vol which also contains regions representing dynamic organelles (microtubules and actin). It is re-zeroed by ''Restart''. There are further volumes that supplement these two that are used for collision detection. Individual microtubule regions are recorded in
| |
| data.cellprops.microtubules.Vol
| |
| each microtubule region is represented by a unique ID.
| |
| Factors and their associated diffusion constants are represented by
| |
| data.factorprops.Concentration
| |
| data.factorprops.DiffusionConst
| |
| each column of which represents a factor - they must be reshaped to the same format as the volume data.
| |
| | |
| |}
| |