brainmass


Namebrainmass JSON
Version 0.0.2 PyPI version JSON
download
home_pagehttps://github.com/chaobrain/brainmass
SummaryNone
upload_time2025-09-04 13:49:24
maintainerNone
docs_urlNone
authorBranMass Developers
requires_python>=3.10
licenseApache-2.0 license
keywords neural mass model brain modeling rate model mean field model neuroscience computational neuroscience brain simulation
VCS
bugtrack_url
requirements numpy jax brainunit brainscale brainstate
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # BrainMass

**Whole-brain modeling with differentiable neural mass models**

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
[![Documentation](https://img.shields.io/badge/docs-brainmass.readthedocs.io-blue.svg)](https://brainmass.readthedocs.io/)

BrainMass is a Python library for whole-brain computational modeling using differentiable neural mass models. Built on JAX for high-performance computing, it provides tools for simulating brain dynamics, analyzing neural networks, and modeling hemodynamic responses.

## Features

- **Neural Mass Models**: Wilson-Cowan model for excitatory-inhibitory population dynamics
- **Hemodynamic Modeling**: BOLD signal simulation using the Balloon-Windkessel model
- **Network Coupling**: Diffusive and additive coupling mechanisms for brain connectivity
- **Noise Modeling**: Ornstein-Uhlenbeck processes for realistic neural noise
- **JAX-Powered**: GPU acceleration and automatic differentiation
- **Real Brain Data**: Example datasets from HCP and other neuroimaging studies

## Installation

### From PyPI (recommended)
```bash
pip install brainmass
```

### From Source
```bash
git clone https://github.com/chaobrain/brainmass.git
cd brainmass
pip install -e .
```

### GPU Support
For CUDA 12 support:
```bash
pip install brainmass[cuda12]
```

For TPU support:
```bash
pip install brainmass[tpu]
```

For whole brain modeling ecosystem:
```bash
pip install BrainX 

# GPU support
pip install BrainX[cuda12]

# TPU support
pip install BrainX[tpu]
```




## Quick Start

### Single Node Simulation

```python
import brainstate
import brainmass
import numpy as np
import matplotlib.pyplot as plt

# Set simulation parameters
brainstate.environ.set(dt=0.1)

# Create a Wilson-Cowan model with noise
node = brainmass.WilsonCowanModel(
    1,
    noise_E=brainmass.OUProcess(1, sigma=0.01),
    noise_I=brainmass.OUProcess(1, sigma=0.01),
)

# Initialize model states
brainstate.nn.init_all_states(node)

# Define simulation function
def step_run(i):
    with brainstate.environ.context(i=i, t=i * brainstate.environ.get_dt()):
        return node.update()

# Run simulation
indices = np.arange(10000)
activity = brainstate.transform.for_loop(step_run, indices)

# Plot results
plt.plot(indices * brainstate.environ.get_dt(), activity)
plt.xlabel("Time [ms]")
plt.ylabel("Neural Activity")
plt.show()
```

### Brain Network Simulation

```python
import brainstate
import brainmass
from datasets import Dataset
import numpy as np

# Load brain connectivity data
hcp = Dataset('hcp')

class BrainNetwork(brainstate.nn.Module):
    def __init__(self, signal_speed=2., k=1.):
        super().__init__()
        
        # Get connectivity and distance matrices
        conn_weight = hcp.Cmat
        np.fill_diagonal(conn_weight, 0)
        delay_time = hcp.Dmat / signal_speed
        np.fill_diagonal(delay_time, 0)
        indices_ = np.tile(np.arange(conn_weight.shape[1]), conn_weight.shape[0])
        
        # Create network nodes
        self.node = brainmass.WilsonCowanModel(
            80,  # 80 brain regions
            noise_E=brainmass.OUProcess(80, sigma=0.01),
            noise_I=brainmass.OUProcess(80, sigma=0.01),
        )
        
        # Define coupling between regions
        self.coupling = brainmass.DiffusiveCoupling(
            self.node.prefetch_delay('rE', (delay_time.flatten(), indices_), 
                                   init=brainstate.init.Uniform(0, 0.05)),
            self.node.prefetch('rE'),
            conn_weight,
            k=k
        )
    
    def update(self):
        current = self.coupling()
        rE = self.node(current)
        return rE
    
    def step_run(self, i):
        with brainstate.environ.context(i=i, t=i * brainstate.environ.get_dt()):
            return self.update()

# Create and run network simulation
net = BrainNetwork()
brainstate.nn.init_all_states(net)
indices = np.arange(0, 6000 // brainstate.environ.get_dt())
brain_activity = brainstate.transform.for_loop(net.step_run, indices)
```


## Examples and Tutorials

The `examples/` directory contains Jupyter notebooks demonstrating:

- **Single Node Dynamics**: Basic Wilson-Cowan model simulation
- **Bifurcation Analysis**: Parameter space exploration
- **Brain Network Modeling**: Whole-brain connectivity simulations
- **Parameter Optimization**: Using Nevergrad for parameter tuning
- **BOLD Signal Analysis**: Hemodynamic response modeling


## Dependencies

Core dependencies:
- `jax`: High-performance computing and automatic differentiation
- `numpy`: Numerical computations
- `brainstate`: State management and neural dynamics
- `brainunit`: Unit system for neuroscience
- `brainscale`: Scaling utilities

Optional dependencies:
- `matplotlib`: Plotting and visualization
- `braintools`: Additional analysis tools
- `nevergrad`: Parameter optimization

## Documentation

Full documentation is available at [brainmass.readthedocs.io](https://brainmass.readthedocs.io/).

## Contributing

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## Citation

If you use BrainMass in your research, please cite:

```bibtex
@software{brainmass,
  title={BrainMass: Whole-brain modeling with differentiable neural mass models},
  author={BrainMass Developers},
  url={https://github.com/chaobrain/brainmass},
  version={0.0.1},
  year={2024}
}
```

## License

BrainMass is licensed under the Apache License 2.0. See [LICENSE](LICENSE) for details.

## Support

- **Issues**: [GitHub Issues](https://github.com/chaobrain/brainmass/issues)
- **Documentation**: [ReadTheDocs](https://brainmass.readthedocs.io/)
- **Contact**: chao.brain@qq.com

---

**Keywords**: neural mass model, brain modeling, computational neuroscience, JAX, differentiable programming

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/chaobrain/brainmass",
    "name": "brainmass",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "neural mass model, brain modeling, rate model, mean field model, neuroscience, computational neuroscience, brain simulation",
    "author": "BranMass Developers",
    "author_email": "brainmass Developers <chao.brain@qq.com>",
    "download_url": null,
    "platform": null,
    "description": "# BrainMass\r\n\r\n**Whole-brain modeling with differentiable neural mass models**\r\n\r\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\r\n[![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)\r\n[![Documentation](https://img.shields.io/badge/docs-brainmass.readthedocs.io-blue.svg)](https://brainmass.readthedocs.io/)\r\n\r\nBrainMass is a Python library for whole-brain computational modeling using differentiable neural mass models. Built on JAX for high-performance computing, it provides tools for simulating brain dynamics, analyzing neural networks, and modeling hemodynamic responses.\r\n\r\n## Features\r\n\r\n- **Neural Mass Models**: Wilson-Cowan model for excitatory-inhibitory population dynamics\r\n- **Hemodynamic Modeling**: BOLD signal simulation using the Balloon-Windkessel model\r\n- **Network Coupling**: Diffusive and additive coupling mechanisms for brain connectivity\r\n- **Noise Modeling**: Ornstein-Uhlenbeck processes for realistic neural noise\r\n- **JAX-Powered**: GPU acceleration and automatic differentiation\r\n- **Real Brain Data**: Example datasets from HCP and other neuroimaging studies\r\n\r\n## Installation\r\n\r\n### From PyPI (recommended)\r\n```bash\r\npip install brainmass\r\n```\r\n\r\n### From Source\r\n```bash\r\ngit clone https://github.com/chaobrain/brainmass.git\r\ncd brainmass\r\npip install -e .\r\n```\r\n\r\n### GPU Support\r\nFor CUDA 12 support:\r\n```bash\r\npip install brainmass[cuda12]\r\n```\r\n\r\nFor TPU support:\r\n```bash\r\npip install brainmass[tpu]\r\n```\r\n\r\nFor whole brain modeling ecosystem:\r\n```bash\r\npip install BrainX \r\n\r\n# GPU support\r\npip install BrainX[cuda12]\r\n\r\n# TPU support\r\npip install BrainX[tpu]\r\n```\r\n\r\n\r\n\r\n\r\n## Quick Start\r\n\r\n### Single Node Simulation\r\n\r\n```python\r\nimport brainstate\r\nimport brainmass\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\n\r\n# Set simulation parameters\r\nbrainstate.environ.set(dt=0.1)\r\n\r\n# Create a Wilson-Cowan model with noise\r\nnode = brainmass.WilsonCowanModel(\r\n    1,\r\n    noise_E=brainmass.OUProcess(1, sigma=0.01),\r\n    noise_I=brainmass.OUProcess(1, sigma=0.01),\r\n)\r\n\r\n# Initialize model states\r\nbrainstate.nn.init_all_states(node)\r\n\r\n# Define simulation function\r\ndef step_run(i):\r\n    with brainstate.environ.context(i=i, t=i * brainstate.environ.get_dt()):\r\n        return node.update()\r\n\r\n# Run simulation\r\nindices = np.arange(10000)\r\nactivity = brainstate.transform.for_loop(step_run, indices)\r\n\r\n# Plot results\r\nplt.plot(indices * brainstate.environ.get_dt(), activity)\r\nplt.xlabel(\"Time [ms]\")\r\nplt.ylabel(\"Neural Activity\")\r\nplt.show()\r\n```\r\n\r\n### Brain Network Simulation\r\n\r\n```python\r\nimport brainstate\r\nimport brainmass\r\nfrom datasets import Dataset\r\nimport numpy as np\r\n\r\n# Load brain connectivity data\r\nhcp = Dataset('hcp')\r\n\r\nclass BrainNetwork(brainstate.nn.Module):\r\n    def __init__(self, signal_speed=2., k=1.):\r\n        super().__init__()\r\n        \r\n        # Get connectivity and distance matrices\r\n        conn_weight = hcp.Cmat\r\n        np.fill_diagonal(conn_weight, 0)\r\n        delay_time = hcp.Dmat / signal_speed\r\n        np.fill_diagonal(delay_time, 0)\r\n        indices_ = np.tile(np.arange(conn_weight.shape[1]), conn_weight.shape[0])\r\n        \r\n        # Create network nodes\r\n        self.node = brainmass.WilsonCowanModel(\r\n            80,  # 80 brain regions\r\n            noise_E=brainmass.OUProcess(80, sigma=0.01),\r\n            noise_I=brainmass.OUProcess(80, sigma=0.01),\r\n        )\r\n        \r\n        # Define coupling between regions\r\n        self.coupling = brainmass.DiffusiveCoupling(\r\n            self.node.prefetch_delay('rE', (delay_time.flatten(), indices_), \r\n                                   init=brainstate.init.Uniform(0, 0.05)),\r\n            self.node.prefetch('rE'),\r\n            conn_weight,\r\n            k=k\r\n        )\r\n    \r\n    def update(self):\r\n        current = self.coupling()\r\n        rE = self.node(current)\r\n        return rE\r\n    \r\n    def step_run(self, i):\r\n        with brainstate.environ.context(i=i, t=i * brainstate.environ.get_dt()):\r\n            return self.update()\r\n\r\n# Create and run network simulation\r\nnet = BrainNetwork()\r\nbrainstate.nn.init_all_states(net)\r\nindices = np.arange(0, 6000 // brainstate.environ.get_dt())\r\nbrain_activity = brainstate.transform.for_loop(net.step_run, indices)\r\n```\r\n\r\n\r\n## Examples and Tutorials\r\n\r\nThe `examples/` directory contains Jupyter notebooks demonstrating:\r\n\r\n- **Single Node Dynamics**: Basic Wilson-Cowan model simulation\r\n- **Bifurcation Analysis**: Parameter space exploration\r\n- **Brain Network Modeling**: Whole-brain connectivity simulations\r\n- **Parameter Optimization**: Using Nevergrad for parameter tuning\r\n- **BOLD Signal Analysis**: Hemodynamic response modeling\r\n\r\n\r\n## Dependencies\r\n\r\nCore dependencies:\r\n- `jax`: High-performance computing and automatic differentiation\r\n- `numpy`: Numerical computations\r\n- `brainstate`: State management and neural dynamics\r\n- `brainunit`: Unit system for neuroscience\r\n- `brainscale`: Scaling utilities\r\n\r\nOptional dependencies:\r\n- `matplotlib`: Plotting and visualization\r\n- `braintools`: Additional analysis tools\r\n- `nevergrad`: Parameter optimization\r\n\r\n## Documentation\r\n\r\nFull documentation is available at [brainmass.readthedocs.io](https://brainmass.readthedocs.io/).\r\n\r\n## Contributing\r\n\r\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\r\n\r\n## Citation\r\n\r\nIf you use BrainMass in your research, please cite:\r\n\r\n```bibtex\r\n@software{brainmass,\r\n  title={BrainMass: Whole-brain modeling with differentiable neural mass models},\r\n  author={BrainMass Developers},\r\n  url={https://github.com/chaobrain/brainmass},\r\n  version={0.0.1},\r\n  year={2024}\r\n}\r\n```\r\n\r\n## License\r\n\r\nBrainMass is licensed under the Apache License 2.0. See [LICENSE](LICENSE) for details.\r\n\r\n## Support\r\n\r\n- **Issues**: [GitHub Issues](https://github.com/chaobrain/brainmass/issues)\r\n- **Documentation**: [ReadTheDocs](https://brainmass.readthedocs.io/)\r\n- **Contact**: chao.brain@qq.com\r\n\r\n---\r\n\r\n**Keywords**: neural mass model, brain modeling, computational neuroscience, JAX, differentiable programming\r\n",
    "bugtrack_url": null,
    "license": "Apache-2.0 license",
    "summary": null,
    "version": "0.0.2",
    "project_urls": {
        "Homepage": "https://github.com/chaobrain/brainmass",
        "homepage": "http://github.com/chaobrain/brainmass",
        "repository": "http://github.com/chaobrain/brainmass"
    },
    "split_keywords": [
        "neural mass model",
        " brain modeling",
        " rate model",
        " mean field model",
        " neuroscience",
        " computational neuroscience",
        " brain simulation"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "80ab2fc0b7cf99732a0bfe179690d5f3ee95d4b35780052eba814fa032558618",
                "md5": "7df1e33e8b8ebbdbc5f4735f0aafa6eb",
                "sha256": "24655bcf623af1f0893ea53679f82ddec3f76f389d1490f420a08bdc36025fbc"
            },
            "downloads": -1,
            "filename": "brainmass-0.0.2-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7df1e33e8b8ebbdbc5f4735f0aafa6eb",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.10",
            "size": 19224,
            "upload_time": "2025-09-04T13:49:24",
            "upload_time_iso_8601": "2025-09-04T13:49:24.898626Z",
            "url": "https://files.pythonhosted.org/packages/80/ab/2fc0b7cf99732a0bfe179690d5f3ee95d4b35780052eba814fa032558618/brainmass-0.0.2-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-04 13:49:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "chaobrain",
    "github_project": "brainmass",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": []
        },
        {
            "name": "jax",
            "specs": []
        },
        {
            "name": "brainunit",
            "specs": []
        },
        {
            "name": "brainscale",
            "specs": []
        },
        {
            "name": "brainstate",
            "specs": [
                [
                    ">=",
                    "0.1.8"
                ]
            ]
        }
    ],
    "lcname": "brainmass"
}
        
Elapsed time: 1.23818s