DOI: 10.6078/d12t52
title: Emergent programmable behavior and chaos in dynamically driven active filaments

description: How the behavior of cells emerges from their constituent subcellular
 biochemical and physical parts is an outstanding challenge at the
 intersection of biology and physics. A remarkable example of single-cell
 behavior occurs in the ciliate Lacrymaria olor, which hunts for its prey
 via rapid movements and protrusions of a slender neck, many times the size
 of the original cell body. The dynamics of this cell neck is powered by a
 coat of cilia across its length and tip. How a cell can program this
 active filamentous structure to produce desirable behaviors like search
 and homing to a target remains unknown. Here, we present an active
 filament model that allows us to uncover how a “program” (time sequence of
 active forcing) leads to “behavior” (filament shape dynamics). Our model
 captures two key features of this system—time-varying activity patterns
 (extension and compression cycles) and active stresses that are uniquely
 aligned with the filament geometry—a “follower force” constraint. We show
 that active filaments under deterministic, time-varying follower forces
 display rich behaviors including periodic and aperiodic dynamics over long
 times. We further show that aperiodicity occurs due to a transition to
 chaos in regions of a biologically accessible parameter space. We also
 identify a simple nonlinear iterated map of filament shape that
 approximately predicts long-term behavior suggesting simple, artificial
 “programs” for filament functions such as homing and searching space.
 Last, we directly measure the statistical properties of biological
 programs in L. olor, enabling comparisons between model predictions and
 experiments.
description: Computational simulations of active filaments. All data was
 generated using the PyFilaments
 repo. All code written in Python and Cython. Data processing
 using Python.
description: # Data for the paper Krishnamurthy and Prakash (2023), *Emergent
 Programmable Behavior and Chaos in Dynamically Driven Active Filaments*
 *** Brief Description --- This dataset contains simulation data for the
 paper titled "Emergent Programmable Behavior and Chaos in Dynamically
 Driven Active Filaments"
 [Link](https://doi.org/10.1101/2022.06.05.494577). Published paper
 [Link](https://doi.org/10.1073/pnas.2304981120) All the data was generated
 using the
 [PyFilaments](https://github.com/deepakkrishnamurthy/PyFilaments.git)
 library developed as part of the above work. Dataset Version and Release
 History --- * First Published Version: * Number: v0.1 * Date: April 3,
 2023 * Persistent identifier: DOI: https://doi.org/10.6078/D12T52
 Associated Publication --- * Article Title: \*Emergent Programmable
 Behavior and Chaos in Dynamically Driven Active Filaments * Article
 Authors: Deepak Krishnamurthy (1, \*) and Manu Prakash (2, \*) *
 Publication Date: July 5, 2023 * Journal: PNAS * Volume: 120 * Issue: 28
 (1) Department of Bioengineering, U C Berkeley (2) Department of
 Bioengineering, Stanford University \*Corresponding authors: Corresponding
 Author Contact Information --- * Name: Deepak Krishnamurthy *
 Affiliations: University of California, Berkeley * ORCID ID:
 0000-0002-4504-1530 * Email: deepak90@berkeley.edu * Alternate Email:
 dkrishnamurthy@schmidtsciencefellows.org Alternative Contact: * Name: Manu
 Prakash * Affiliations: Stanford University * ORCID ID:
 0000-0002-8046-8388 * Email: manup@stanford.edu *** # Description of the
 data and file structure Summary Metrics --- * Uncompressed file count: 4 *
 Total file size: 11.66 Gb, compressed * File formats: `.zip`, `.hdf5`,
 `.csv`, `.json` Table of Contents --- * README.md *
 Pyfilaments\_data\_sample.zip * TipActivity\_PeriodicForcing.zip *
 DistributedActivity\_PeriodicForcing.zip * StochasticForcing.zip
 Downloading and accessing the data --- Data should be downloaded and
 extracted locally. Scripts for data analysis and visualization are shared
 in the accompanying
 [PyFilaments](https://github.com/deepakkrishnamurthy/PyFilaments.git)
 repo, and the examples therein. We provide both a GUI-based data
 visualizer as well as low-level scripts for different filament analysis in
 the same repo. Download any/all of these files and extract the simulation
 data from the .zip files. To first get a feel for the data, we recommend
 downloading the *Pyfilaments\_data\_sample.zip* file first and extracting
 it locally. Data General Description --- The full dataset is split into
 *four* parts, which appear as the following top level directories: *
 **TipActivity\_PeriodicForcing.zip**: Simulation data for filaments with
 activity at the tip and driven by periodic activity profiles *
 **DistributedActivity\_PeriodicForcing.zip**: Simulation data for
 filaments with activity distributed along the filament and driven by
 periodic activity profiles * **StochasticForcing.zip**: Simulation data
 for filaments with activity distributed along the filament and driven by
 normal or log-normal activity profiles *
 **Pyfilaments\_data\_sample.zip**: A small data sample which can be used
 for data exploration. Simulation datasets corresponding to a given set of
 parameters is contained in a folder that contains a *metadata.csv* file,
 an *activity\_metadata.json* file along with one or more *.hdf5* files
 containing the computed simulation data. Each *.hdf5* file within a
 simulation folder corresponds to a simulation run from a distinct initial
 condition. This *.hdf5* file contains all the simulation data including
 the positions of all colloids corresponding to the filament centerline for
 each time-step, as well as the actual activity profile used, etc. The
 *metadata.csv* contains the simulations parameters and other metadata
 corresponding to a set of simulations. The *activity\_metadata.json*
 contains metadata about the activity profile used in the particular set of
 simulations. For a subset of the data we also include sample analysis data
 files wherein we have included the results from PCA, Search dynamics
 analysis etc. These are stored in a folder titled `/Analysis/` which
 appears inside the main simulation folders that are labelled `SimData_*`.
 These analysis files can be generated from raw simulation data using the
 Python scripts included in the
 [PyFilaments](https://github.com/deepakkrishnamurthy/PyFilaments.git)
 repo. File/Folder Structure Details === Herein we describe the folder
 structure for each of the *four* datasets contained in the top-layer
 directories, for the first of these we give details about the sub-folders
 and file structure which are consistent for all the other datasets. For
 all datasets a given set of simulation runs corresponding to a set of
 parameters are grouped within a folder whose name also gives information
 about the parameters. For eg.
 `/SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.134_activityTime_750_simType_lacry/` This is a folder containing multiple simulation runs from distinct initial conditions as well as analysis data. The folder name additionally contains the simulation parameters in the format `parameterName_parameterValue`. * Np: Number colloids in the active filament * Shape: Initial shape of the filament * kappa\_hat: Bending rigidity * k: Spring constant * b0: Equilibrium bond length * F: Body force amplitude * S: Stresslet amplitude * D: Potential Dipole term amplitude * activityTime: Duration of one activity phase (compression + extension) * simType: Activity distribution type ## Folder structure 1\. Tip Activity Periodic Forcing ```console ├── TipActivity_PeriodicForcing (# Dataset corresponding to activity confined to the filament tip) │   ├── ActivityStrengthSweep (# Dataset with varying activity strengths) │   │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.5_activityTime_750_simType_point │   │   │   ├── Analysis # (Folder containing analysis data derived from raw simulations) │   │   │   │   ├── SearchCoverage # (Analysis data corresponding to search dynamics of the filament tip) │   │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv #(time series of unique locations visited by fiament tip) │   │   │   │   │   ├── sim_data_00__unique_positions.csv #(list of all unique positions visited by filament tip) │   │   │   │   │   ├── sim_data_01__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_01__unique_positions.csv │   │   │   │   │   ├── sim_data_02__unique_counts_timeseries.csv │   │   │   │   │   └── sim_data_02__unique_positions.csv │   │   │   │   ├── sim_data_00__ModeAmplitudes.csv #(Time series of PCA mode amplitudes, only included for datasets for which PCA shape analysis has been performed. For other datasets PCA can be run using the code in the Pyfilamnents repo.) │   │   │   │   ├── sim_data_00__analysis.csv │   │   │   │   ├── sim_data_00__analysis.hdf5 │   │   │   │   ├── sim_data_00__eigenvectors.hdf5 # (Eigenvectors corresponding to PCA, only included for datasets for which PCA shape analysis has been performed. For other datasets PCA can be run using the code in the Pyfilamnents repo.) │   │   │   │   ├── sim_data_01__analysis.csv │   │   │   │   ├── sim_data_01__analysis.hdf5 │   │   │   │   ├── sim_data_01__eigenvectors.hdf5 │   │   │   │   ├── sim_data_02__analysis.csv │   │   │   │   ├── sim_data_02__analysis.hdf5 │   │   │   │   └── sim_data_02__eigenvectors.hdf5 │   │   │   ├── activity_metadata.json # (Activity profile metadata) │   │   │   ├── metadata.csv # (Simulation metadata) │   │   │   ├── sim_data_00_.hdf5 # (Raw simulation data containing time series of positions of N colloids making up the active filament) │   │   │   ├── sim_data_01_.hdf5 │   │   │   └── sim_data_02_.hdf5 . . . │   ├── ActivityTimeSweep (# Dataset for varying activity time durations) │   │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_1.5_activityTime_300_simType_point │   │   │   ├── Analysis │   │   │   │   ├── SearchCoverage │   │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_00__unique_positions.csv │   │   │   │   │   ├── sim_data_01__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_01__unique_positions.csv │   │   │   │   │   ├── sim_data_02__unique_counts_timeseries.csv │   │   │   │   │   └── sim_data_02__unique_positions.csv │   │   │   │   ├── sim_data_00__analysis.csv │   │   │   │   ├── sim_data_00__analysis.hdf5 │   │   │   │   ├── sim_data_01__analysis.csv │   │   │   │   ├── sim_data_01__analysis.hdf5 │   │   │   │   ├── sim_data_02__analysis.csv │   │   │   │   └── sim_data_02__analysis.hdf5 │   │   │   ├── activity_metadata.json │   │   │   ├── metadata.csv │   │   │   ├── sim_data_00_.hdf5 │   │   │   ├── sim_data_01_.hdf5 │   │   │   └── sim_data_02_.hdf5 ``` 2\. Distributed Activity Periodic Forcing ```console . ├── DistributedActivity_PeriodicForcing │   ├── Lacrymaria_distribution # (Contains data for "Lacrymaria-like" activity distribution (see paper for details)) │   │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.134_activityTime_750_simType_lacry # (Main sub-folder containig raw simulation data and analysis for a given set of parameters.) │   │   │   ├── Analysis │   │   │   │   ├── SearchCoverage │   │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_00__unique_positions.csv │   │   │   │   │   ├── sim_data_01__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_01__unique_positions.csv │   │   │   │   │   ├── sim_data_02__unique_counts_timeseries.csv │   │   │   │   │   └── sim_data_02__unique_positions.csv │   │   │   │   ├── sim_data_00__analysis.csv │   │   │   │   ├── sim_data_00__analysis.hdf5 │   │   │   │   ├── sim_data_01__analysis.csv │   │   │   │   ├── sim_data_01__analysis.hdf5 │   │   │   │   ├── sim_data_02__analysis.csv │   │   │   │   └── sim_data_02__analysis.hdf5 │   │   │   ├── activity_metadata.json │   │   │   ├── metadata.csv │   │   │   ├── sim_data_00_.hdf5 │   │   │   ├── sim_data_01_.hdf5 │   │   │   └── sim_data_02_.hdf5 . . . └── Uniform_distribution # Contains data for uniform activity distribution (see paper for details) │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.05_activityTime_750_simType_dist │   │   ├── Analysis │   │   │   ├── SearchCoverage │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv │   │   │   │   └── sim_data_00__unique_positions.csv │   │   │   ├── sim_data_00__analysis.csv │   │   │   └── sim_data_00__analysis.hdf5 │   │   ├── activity_metadata.json │   │   ├── metadata.csv │   │   └── sim_data_00_.hdf5 │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.138_activityTime_750_simType_dist │   │   ├── Analysis │   │   │   ├── SearchCoverage │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv │   │   │   │   ├── sim_data_00__unique_positions.csv │   │   │   │   ├── sim_data_01__unique_counts_timeseries.csv │   │   │   │   ├── sim_data_01__unique_positions.csv │   │   │   │   ├── sim_data_02__unique_counts_timeseries.csv │   │   │   │   └── sim_data_02__unique_positions.csv │   │   │   ├── sim_data_00__analysis.csv │   │   │   ├── sim_data_00__analysis.hdf5 │   │   │   ├── sim_data_01__analysis.csv │   │   │   ├── sim_data_01__analysis.hdf5 │   │   │   ├── sim_data_02__analysis.csv │   │   │   └── sim_data_02__analysis.hdf5 │   │   ├── activity_metadata.json │   │   ├── metadata.csv │   │   ├── sim_data_00_.hdf5 │   │   ├── sim_data_01_.hdf5 │   │   └── sim_data_02_.hdf5 ``` 3\. Stochastic Forcing ```console ├── StochasticForcing # Dataset for the activity profiles that are stochastic in nature │   ├── Lognormal_distribution # Lognormally distributed activity durations │   │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.05_activityTime_150_simType_lacry │   │   │   ├── Analysis │   │   │   │   ├── SearchCoverage │   │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_00__unique_positions.csv │   │   │   │   │   ├── sim_data_01__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_01__unique_positions.csv │   │   │   │   │   ├── sim_data_02__unique_counts_timeseries.csv │   │   │   │   │   └── sim_data_02__unique_positions.csv │   │   │   │   ├── sim_data_00__analysis.csv │   │   │   │   ├── sim_data_00__analysis.hdf5 │   │   │   │   ├── sim_data_01__analysis.csv │   │   │   │   ├── sim_data_01__analysis.hdf5 │   │   │   │   ├── sim_data_02__analysis.csv │   │   │   │   └── sim_data_02__analysis.hdf5 │   │   │   ├── activity_metadata.json │   │   │   ├── metadata.csv │   │   │   ├── sim_data_00_.hdf5 │   │   │   ├── sim_data_01_.hdf5 │   │   │   └── sim_data_02_.hdf5 . . . │   └── NormalDistribution # Normally distributed activity durations │   ├── noise_01 # Each such folder contains data corresponding to a distinct amplitude of noise which is proportional to the standard deviation of the Gaussian distribution from which activity durations are drawn. │   │   ├── SimData_Np_32_Shape_line_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_0.5_activityTime_750_simType_point │   │   │   ├── Analysis │   │   │   │   ├── SearchCoverage │   │   │   │   │   ├── sim_data_00__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_00__unique_positions.csv │   │   │   │   │   ├── sim_data_01__unique_counts_timeseries.csv │   │   │   │   │   ├── sim_data_01__unique_positions.csv │   │   │   │   │   ├── sim_data_02__unique_counts_timeseries.csv │   │   │   │   │   └── sim_data_02__unique_positions.csv │   │   │   │   ├── sim_data_00__analysis.csv │   │   │   │   ├── sim_data_00__analysis.hdf5 │   │   │   │   ├── sim_data_01__analysis.csv │   │   │   │   ├── sim_data_01__analysis.hdf5 │   │   │   │   ├── sim_data_02__analysis.csv │   │   │   │   └── sim_data_02__analysis.hdf5 │   │   │   ├── activity_metadata.json │   │   │   ├── metadata.csv │   │   │   ├── sim_data_00_.hdf5 │   │   │   ├── sim_data_01_.hdf5 │   │   │   └── sim_data_02_.hdf5 ``` 4\. Pyfilaments data sample ```console ├── Pyfilaments_data_sample │   ├── SimResults_Np_32_Shape_line at angle_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_1.333_activityTime_750_simType_point │   │   ├── SimResults_00_.hdf5 │   │   └── metadata.csv │   └── SimResults_Np_32_Shape_line at angle_kappa_hat_6_k_25_b0_2.1_F_0_S_0_D_2.744_activityTime_750_simType_point │   ├── SimResults_00_.hdf5 │   └── metadata.csv ``` All the code for analysis, plotting and data-visualization are provided in the accompanying Github repo [PyFilaments](https://github.com/deepakkrishnamurthy/PyFilaments.git). ## Code/Software All the code for analysis, plotting and data-visualization are provided in the accompanying Github repo [PyFilaments](https://github.com/deepakkrishnamurthy/PyFilaments.git).