|
1 | 1 | PhysiCell: an Open Source Physics-Based Cell Simulator for 3-D |
2 | 2 | Multicellular Systems. |
3 | 3 |
|
4 | | -Version: 1.3.1 |
5 | | -Release date: 31 July 2018 |
| 4 | +Version: 1.3.2 |
| 5 | +Release date: 24 August 2018 |
6 | 6 |
|
7 | 7 | Overview: |
8 | 8 | PhysiCell is a flexible open source framework for building |
@@ -61,168 +61,33 @@ See changes.txt for the full change log. |
61 | 61 |
|
62 | 62 | Release summary: |
63 | 63 |
|
64 | | -This release introduces a new cycle model with an active cycling |
65 | | -state and a quiescent state. It also adds new functions to the |
66 | | -Mechanics class to make it easier to modify the cell-cell interaction |
67 | | -distance (while maintaining equilibrium cell-cell spacing), or |
68 | | -to modify the equilibrium cell-cell spacing. The release also |
69 | | -includes major reliability and performance improvements to |
70 | | -how gradients are calculated. |
71 | | - |
72 | | -As usual, the release also contains minor bugfixes and |
73 | | -improvements. |
| 64 | +This release fixes a small gradient bug that I swear I had fixed before. |
74 | 65 |
|
75 | 66 | NOTE: OSX users must now define PHYSICELL_CPP system variable. |
76 | 67 | See the documentation. |
77 | 68 |
|
78 | 69 | Major new features and changes: |
79 | 70 |
|
80 | | -+ Implemented a new cell cycle model (cycling_quiescent), |
81 | | - where quiescent cells can enter a cycling state. This |
82 | | - model uses identical parameters to the Ki67-basic cycle |
83 | | - model, but decouples the conceptual model from Ki67 |
84 | | - immunohistochemistry. |
85 | | - |
86 | | - Updated the documentation and coloring functions accordingly. |
87 | | - |
88 | | - Updated update_cell_and_death_parameters_O2_based() to |
89 | | - support the new cycling_quiescent cycle model. |
90 | | - |
91 | | -+ update_all_cells(t,dt,dt,dt) now checks to see if gradient |
92 | | - calculations are enabled, and if so, computes it once per dt_mechanics. |
93 | | - |
94 | | - This improves code performance by 2x to 3x in gradient-enabled codes, |
95 | | - because we no longer need to calculate gradients once per dt_diffusion |
96 | | - time step. (Gradients are only needed for cell velocity calculations, |
97 | | - and occasionally for phenotype decisions.) |
98 | | - |
99 | | - All sample projects have been updated to make use of this. |
100 | | - |
101 | | - Also, removed the explicit gradient calculations from the template |
102 | | - and sample projects. |
103 | | - |
104 | | -+ Added a new function to Mechanics class to simplify changes to cell |
105 | | - interaction distances: |
106 | | - |
107 | | - void set_relative_maximum_adhesion_distance( double new_value ); |
108 | | - |
109 | | - Here, new_value is a multiple of the cell's (mean equivalent) radius. |
110 | | - Our default is 1.25. This function preserves the cell's "repulsion" |
111 | | - strength and adjusts the strength of cell-cell adhesion to maintain |
112 | | - its prior equilibrium cell-cell spacing. |
113 | | - |
114 | | -+ Added a new function to Mechanics class to simplify changes to cell |
115 | | - equilibrium distances. |
116 | | - |
117 | | - void set_relative_equilibrium_distance( double new_value ); |
118 | | - |
119 | | - Here, new_value is a multiple of the cell's (mean equivalent) radius. |
120 | | - The default is around 1.9. This function preserves the cell's "repulsion" |
121 | | - and the maximum interaction distance, and it adjusts the strength of |
122 | | - cell-cell adhesion to match the new equilibrium cell-cell spacing. |
123 | | - |
124 | | - Note that this function performs a "sanity check" to ensure that you have |
125 | | - not given a value greater than 2.0. |
126 | | - |
127 | | -+ Added a new function to Mechanics class to simplify changes to cell |
128 | | - equilibrium distances. |
129 | | - |
130 | | - void Mechanics::set_absolute_equilibrium_distance( Phenotype& phenotype, |
131 | | - double new_value ) |
132 | | - |
133 | | - Here, new_value is the new equilibrium spacing (in units of microns). |
134 | | - The function internally requires the cell's mean equivalent radius, |
135 | | - and so you pass the cell's phenotype (by reference) as an additional |
136 | | - argument. |
137 | | - |
138 | | - Note that this function performs a "sanity check" to ensure that you have |
139 | | - not given a value greater than 2.0 * mean_cell_radius. |
140 | | - |
141 | | - Also note that PhysiCell internally uses a relative spacing, so the |
142 | | - absolute spacing will change from the value you set, over time. |
143 | | - |
144 | | -+ Updated User_Guide to reflect new cell cycle model, |
145 | | - including reference parameters chosen for consistency with |
146 | | - the other cycle models. |
| 71 | ++ none |
147 | 72 |
|
148 | 73 | Minor new features and changes: |
149 | 74 |
|
150 | | -+ Added the following constants to support the new cycle model |
151 | | - |
152 | | - static const int cycling = 17; |
153 | | - static const int quiescent = 18; |
154 | | - static const int cycling_quiescent_model = 7; |
155 | | - |
156 | | -+ Removed the (never-used) Mechanics.maximum_adhesion_distance. |
157 | | - |
158 | | -+ Removed the legacy template_projects folder. |
159 | | - |
160 | | - |
161 | | -Beta features (not fully supported): |
162 | | - |
163 | | -+ Added a function pointer to the Cell_Functions class for intended |
164 | | - contact-based cell-cell interaction, like delta-Notch signaling. |
| 75 | ++ none |
165 | 76 |
|
166 | | - void (*contact_function)(Cell* pMyself, Phenotype& my_phenotype, |
167 | | - Cell* pOther, Phenotype& other_phenotype, double dt ); |
168 | | - |
169 | | - It would be up to the user to define these functions and decide |
170 | | - if the functions modify pMyself, pOther, or both. For now, |
171 | | - the code will initialize the pointer to NULL and won't use it. |
| 77 | +Beta features (not fully supported): |
172 | 78 |
|
173 | | -+ Open to comments on handling cell-cell contact functions. Here's what |
174 | | - I have in mind: |
175 | | - |
176 | | - notation: cell i interacts with cell j with function f(i,j). |
177 | | - |
178 | | - Each cell agent can hold one contact-based interaction function f, |
179 | | - to be stored as a pointer in the cell's instance of the Cell_Functions |
180 | | - class. |
181 | | - |
182 | | - We use the containers (and their interaction testing structures) to |
183 | | - identify all interactions (i,j,f), and add it to a vector of interactions. |
184 | | - The interaction (i,j,f) is added to the list so long as (j,i,f) is not |
185 | | - already in the list, to avoid double-counting the interaction. |
186 | | - |
187 | | - The code will seek through the "container" interaction testing |
188 | | - data structure, probably at the cell mechanics time scale, and update / |
189 | | - recreate the vector of contact-based interactions (i,j,f). |
190 | | - |
191 | | - The code would likely go through the vector of interactions and |
192 | | - execute the codes once per dt_diffusion time step, since I would |
193 | | - imagine molecular biology (with faster time scales) is intended here. |
194 | | - |
195 | | - Since f(i,j) can potentially modify both cell i and cell j, it's probably |
196 | | - not thread-safe. So we'll probably need that in a non-parallel loop. |
197 | | - |
198 | | - We will probably add a new time scale for interactions, dt_interactions, |
199 | | - and update the interaction list on that time scale. |
200 | | - |
201 | | - For faster checking if (i,j,f) or (j,i,f) is already in the vector, |
202 | | - we'll probably want some sort of hash map in addition to the vector |
203 | | - of interactions. |
204 | | - |
205 | | - We'll probably implement this all in something like |
206 | | - PhysiCell_contact_interctions.*, and add a global enable/disable option. |
207 | | - I'd imagine we'd add code to the "update_all_cells" to keep this |
208 | | - as simple to the users as possible. |
209 | | - |
210 | | - We should probably update each cell's "neighbors" data structure at |
211 | | - when we're doing all this testing. |
212 | | - |
213 | | - In a longer-term update, we could leverage that for simpler interaction |
214 | | - testing during velocity updates. |
| 79 | ++ none |
215 | 80 |
|
216 | 81 | Bugfixes: |
217 | 82 |
|
218 | | -+ Added missing "omp_set_num_threads(PhysiCell_settings.omp_num_threads)" |
219 | | - in the main-heterogeneity.cpp file for the heterogeneity sample project. |
220 | | - |
221 | 83 | + In BioFVM, Microenvironment::compute_gradient_vector(int), removed "static" |
222 | 84 | from "static std::vector<int> indices(3,0)" to prevent rare segfaults. |
223 | 85 |
|
224 | | -+ Changed <xml> root above the comment lines in output files for |
225 | | - better Python parsing compatibility. Thanks, rheiland! |
| 86 | ++ In BioFVM, Microenvironment::compute_gradient_vector(int), replaced "static" |
| 87 | + for "bool gradient_constants_defined = false". Yep, I removed static from |
| 88 | + the wrong line in 1.3.1 |
| 89 | + |
| 90 | ++ Correct some errors in both the README.txt and changes.txt files. |
226 | 91 |
|
227 | 92 | Notices for intended changes that may affect backwards compatibility: |
228 | 93 |
|
|
0 commit comments