Name | biocomp JSON |
Version |
0.2.4
JSON |
| download |
home_page | https://www.biokomputer.pl |
Summary | BioComp 'Coded Life' to propozycja języka domenowo-specyficznego (DSL) do edukacji i wdrażania biocomputingu |
upload_time | 2024-10-18 19:17:27 |
maintainer | None |
docs_url | None |
author | Tom Sapletta |
requires_python | None |
license | None |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|

[BioComp "Coded Life"](https://dsl.biokomputery.pl/) to propozycja języka domenowo-specyficznego (DSL) do edukacji i wdrażania biocomputingu obejmuje elementy języka opisu eksperymentów, symulacji, designu i utrzymania systemów biokomputerowych.
Motto "Coded Life" Łączy w sobie koncepcję kodowania (nawiązując do aspektu programistycznego) z życiem (odnosząc się do biologicznej strony projektu).
### Składnia języka
**BioComp** jest zaimplementowany jako skrypt jezyka python z klasami dla modelu i funkcjami przetwarzania pliku **YAML**, generowania symulacji i grafu.
Plik `biocomp.py` modelu jest konwertowany do obiektow klas potrzebnyh do uruchamienia symulacji.
Plik **YAML** zawiera potrzebne informacje do wykonania symulacji:
1. Definicje Molekularne
2. Tworzenie Biologicznych Układów Logicznych
3. Symulacje Eksperymentów
4. Drukowanie i Inżynieria BioSystemów
5. Monitorowanie i Utrzymanie Systemów
### Zależności
1. **`pyparsing`**: Biblioteka do parsowania, potrzebna do przetwarzania DSL.
2. **`matplotlib`**: Biblioteka do tworzenia wizualizacji, użyta do generowania wykresów wyników symulacji.
3. **`numpy`**: Biblioteka do operacji na tablicach wielowymiarowych, używana do generowania danych do symulacji.
4. **`graphviz`**: The addition of the `graphviz` module is necessary for graph visualization.
### Instalacja
Aby zainstalować te wymagania w swoim środowisku Python, wykonaj następujące kroki:
#### Stwórz i aktywuj wirtualne środowisko:
```bash
python -m venv env
source env/bin/activate # Na Windows użyj: env\Scripts\activate
```
lub
If the user has Miniconda or Anaconda, I will provide instructions to create a new environment and install Graphviz within that environment:
```bash
conda create -n biokomputer python=3.12 graphviz
conda activate biokomputer
python main.py
```
#### Zainstaluj zależności z pliku `requirements.txt`:
```bash
pip install -r requirements.txt
pip install --upgrade pip
```
---
## Symulacje bramek logicznych
### Uruchomienie
Aby uruchomić tę konfigurację, wykonaj następujące kroki:
1. Zapisz kod Python w pliku o nazwie `biocomp.py`.
2. Zapisz zawartość pliku YAML w pliku o nazwie `biocomp.yaml`.
3. Uruchom skrypt Python z pliku `biocomp.py`, podając plik YAML jako argument:
```bash
python biocomp.py biocomp.yaml
```
**Wzór Przetwarzania Danych Wejściowych:**

```latex
\[ \text{output\_level} = \frac{\sin(t)}{2} + 0.5 \]
```
```python
def run_simulation(simulation):
time = np.linspace(0, float(simulation.conditions["time"]), 100) # Generowanie 100 punktów czasowych
output_levels = np.sin(time) / 2 + 0.5 # Przykładowa funkcja poziomu wyjściowego
```
### Symulacja bramki AND
```yaml
molecules:
- type: Protein
name: Input1Prot
- type: Protein
name: Input2Prot
- type: Protein
name: OutputProt
logic_gates:
- gate_type: AND
input1: Input1Prot
input2: Input2Prot
output: OutputProt
biological_system:
name: BioCompSystem1
simulation:
conditions:
time: 100
temperature: 37
outputs:
- Protein OutputProt
```
### Interpretacja Wykresu
Wykresy generowane z symulacji opartej na pliku DSL pokazują dynamiczne zmiany w warunkach eksperymentalnych w funkcji czasu.
1. **Oś X (czas)**: Przedstawia czas trwania symulacji w minutach. Parametr `simulation.conditions['time']` ustala zakres czasowy symulacji. Cały przedział czasowy jest podzielony na 100 równych odstępów, dzięki czemu otrzymujemy szczegółowy wykres zmienności w czasie.
2. **Oś Y (poziom wyjściowy)**: Przedstawia poziom wyjściowy białka lub innej zmiennej wyjściowej, określonej przez `simulation.outputs`. Funkcja `np.sin(time) / 2 + 0.5` daje synusoidalne zmiany poziomu wyjściowego o amplitudzie 0.5 i przesunięciu pionowym o 0.5, co oznacza, że wartości zmieniają się w zakresie od 0 do 1.
3. **Linia wykresu**: Jest to krzywa pokazująca zmiany poziomu wyjściowego w czasie. Nazwa białka lub zmiennej jest wyświetlana jako etykieta wykresu na podstawie zawartości `simulation.outputs[0]`.
### Przykładowe Wyniki Wykresu
W przypadku symulacji opartej na przykładzie z wcześniejszym pliku `1/biocomp.yaml`, uzyskany wykres może wyglądać tak:
- **Symulacja: BioCompSystem1**: Tytuł wykresu wskazuje, że symulacja jest wykonywana na systemie `BioCompSystem1`.
- **Etykieta: Protein OutputProt**: Etykieta na wykresie odnosi się do nazwy wyjściowego białka zdefiniowanego w symulacji.
Poniżej znajduje się przybliżona wizualizacja:
```
| ________
| / \
| / \________ x100 minutes
|_______/ \_______
0.0 100.0
```
**Przykładowy Wykres ze Wskazaniem**
- Wartości na osi Y zmieniają się synusoidalnie od poziomu 0 do 1.
- Wartości czasowe na osi X biegną od 0 do 100 minut.
### Rzeczywiste Zastosowanie i Dane
W praktycznych zastosowaniach, dane wejściowe będą bardziej złożone i precyzyjne, bazujące na faktycznych pomiarach lub modelach biomolekularnych.
Symulacje mogą prezentować poziomy ekspresji genów, aktywności enzymatycznej, stężeń cząsteczek sygnałowych i innych ważnych parametrów biologicznych w zależności od warunków eksperymentalnych.
## Przykłady
Przykładowa sinusoidalna funkcja pokazuje podstawowe podejście do wizualizacji tych danych, ale rzeczywiste dane mogą być o wiele bardziej skomplikowane, zależnie od specyfiki symulacji i modelu biokomputerowego.
Te przykłady obejmują różne konfiguracje dla różnych typów biologicznych układów logicznych. Przykłady obejmują różne typy bramek logicznych, takie jak "AND", "OR" i "NOT". Jeśli w twojej klasie `LogicGate` zostały zaimplementowane poprawne działanie dla tych bramek, to te przykłady powinny dawać odpowiednie wyniki na podstawie ustawionych warunków w plikach YAML.
Jeśli nie zaimplementowano jeszcze działania dla tych bramek w klasie `LogicGate`, to należy to zrobić.
Aby przetestować twoją aplikację z tą funkcjonalnością, należy zapisać każdy plik YAML jako osobny plik.
### BioCompSystem1
+ [biocomp.yaml](1/biocomp.yaml)

```py
digraph {
Input1Prot [label="Input1Prot (Protein)"]
Input2Prot [label="Input2Prot (Protein)"]
OutputProt [label="OutputProt (Protein)"]
"AND Gate"
Input1Prot -> "AND Gate"
Input2Prot -> "AND Gate"
"AND Gate" -> OutputProt
}
```
```bash
python biocomp.py 1/biocomp.yaml
```

```yaml
Running simulation for BioCompSystem1
Conditions: {'time': 100, 'temperature': 37}
Expected Outputs: ['Protein OutputProt']
```
### BioCompSystem2
+ [biocomp.yaml](2/biocomp.yaml)

```py
digraph {
Input1Prot [label="Input1Prot (Protein)"]
Input2Prot [label="Input2Prot (Protein)"]
OutputProt [label="OutputProt (Protein)"]
"OR Gate"
Input1Prot -> "OR Gate"
Input2Prot -> "OR Gate"
"OR Gate" -> OutputProt
}
```
```bash
python biocomp.py 2/biocomp.yaml
```
```yaml
Running simulation for BioCompSystem2
Conditions: {'time': 150, 'temperature': 25}
Expected Outputs: ['Protein OutputProt']
```

### BioCompSystem3
+ [biocomp.yaml](3/biocomp.yaml)

```py
digraph {
Input1Prot [label="Input1Prot (Protein)"]
Input2Prot [label="Input2Prot (Protein)"]
Input3Prot [label="Input3Prot (Protein)"]
OutputProt1 [label="OutputProt1 (Protein)"]
OutputProt2 [label="OutputProt2 (Protein)"]
"AND Gate"
Input1Prot -> "AND Gate"
Input2Prot -> "AND Gate"
"AND Gate" -> OutputProt1
"OR Gate"
OutputProt1 -> "OR Gate"
Input3Prot -> "OR Gate"
"OR Gate" -> OutputProt2
}
```
```sh
python biocomp.py 3/biocomp.yaml
```
```yaml
Running simulation for BioCompSystem3
Conditions: {'time': 200, 'temperature': 30}
Expected Outputs: ['Protein OutputProt1', 'Protein OutputProt2']
```

### BioCompSystem4
+ [biocomp.yaml](4/biocomp.yaml)

```py
digraph {
Input1Prot [label="Input1Prot (Protein)"]
OutputProt [label="OutputProt (Protein)"]
"NOT Gate"
Input1Prot -> "NOT Gate"
"NOT Gate" -> OutputProt
}
```
```sh
python biocomp.py 4/biocomp.yaml
```
```yaml
Running simulation for BioCompSystem4
Conditions: {'time': 120, 'temperature': 37}
Expected Outputs: ['Protein OutputProt']
```

---
## Symulacje Grzybow
Aby przeprowadzić symulację, np. wzrostu grzybów, warto uwzględnić czynniki takie jak dostępność substancji odżywczych, temperatura, wilgotność i czas.
Wzrost grzybów można modelować za pomocą różniczkowych równań wzrostu biologicznego, takich jak równanie Verhulsta (logistyczne równanie różniczkowe) lub modele podobne.
### Wzór Symulacji Wzrostu Grzybów
Równanie logistyczne może być używane do modelowania wzrostu populacji organizmu, w tym grzybów:

```latex
\[ \frac{dN}{dt} = rN \left(1 - \frac{N}{K}\right) \]
```
Gdzie:
- \( N \) jest liczbą organizmów (np. masa biomasy grzybów),
- \( r \) jest wskaźnikiem wzrostu,
- \( K \) jest nośnością środowiska.
#### Skrypt `fungi.py`
Skrypt Pythona, który przetwarza dane wejściowe z plików YAML i wykonuje symulację wzrostu grzybów.
Wzór logistyczny użyty w skrypcie pozwala modelować realistyczny wzrost populacji grzybów i może być dostosowany dzięki zmianie parametrów w plikach YAML.
Skrypt wspiera przetwarzanie wielu plików YAML oraz opcjonalnie przetwarzanie wszystkich plików YAML w podanym folderze.
Zawiera funkcje do generowania wykresów, tekstowych definicji grafów oraz graficznych reprezentacji grafów.
1. **Obsługa wielu plików YAML**: Pobieranie wielu plików jako argumentów lub obsługa folderu zawierającego pliki YAML.
2. **Parsowanie**: danych i tworzenie strukturę symulacji**,
3. **Symulacja**: wzrostu grzybów za pomocą równania logistycznego,
4. **Wizualizacja wyników**: Generowanie wykresów wzrostu biomasy.
5. **Generowanie tekstowej definicji grafu**: Zapisywanie parametrów symulacji i wyników do pliku tekstowego.
6. **Graficzna reprezentacja grafu**: Tworzenie grafów za pomocą Graphviz.
#### Wymagane biblioteki
Aby zapewnić pełną funkcjonalność, należy zainstalować następujące biblioteki:
- `yaml`
- `matplotlib`
- `graphviz`
Można je zainstalować za pomocą pip:
```bash
pip install pyyaml matplotlib graphviz
```
### FungiExperiment1
```bash
python fungi.py --folder ./11
```
```py
digraph G {
node [shape=record];
"Simulation" [label="{Name: FungiExperiment1|Initial Population: 10|Growth Rate: 0.2|Carrying Capacity: 1000|Conditions: time=30, temperature=25, humidity=80|Outputs: Biomass}"];
}
```


[fungi.yaml](11/fungi.yaml)
### FungiExperiment2
```bash
python fungi.py --folder ./11
```
```py
digraph G {
node [shape=record];
"Simulation" [label="{Name: FungiExperiment2|Initial Population: 5|Growth Rate: 0.1|Carrying Capacity: 500|Conditions: time=45, temperature=20, humidity=90|Outputs: Biomass}"];
}
```
[fungi.dot](12/fungi.dot)


[fungi.yaml](12/fungi.yaml)
---
## Symulacje Physarum
Aby zrealizować bardziej złożoną symulację wzrostu Physarum polycephalum (slime mold) jako hierarchicznej struktury komórkowej w kontekście modeli reakcyjno-dyfuzyjnych, należy przeanalizować kilka kluczowych procesów. Model reakcyjno-dyfuzyjny umożliwia symulację jak substancje (np. chemotaksyny) dyfundują oraz jak komórki reagują na te substancje, co prowadzi do wzrostu i formowania wzorca strukturalnego.
To jest dość zaawansowane zadanie, które można osiągnąć przy użyciu bibliotek takich jak NumPy do obliczeń oraz Matplotlib do wizualizacji. Do generowania grafów hierarchicznych użyjemy Graphviz.
Założenia:
1. **Hierarchiczna struktura**: Model Physarum jako siatki komórkowej.
2. **Model reakcyjno-dyfuzyjny**: Użyjemy prostego równania reakcyjno-dyfuzyjnego do modelowania rozprzestrzeniania się i reakcji chemotaksyn.
### Równanie Reakcyjno-Dyfuzyjne

```latex
\[ \frac{\partial u}{\partial t} = D \nabla^2 u + f(u, v) \]
```

```latex
\[ \frac{\partial v}{\partial t} = D \nabla^2 v + g(u, v) \]
```
gdzie:
- \( u \) i \( v \) są koncentracją substancji chemicznych,
- \( D \) jest współczynnikiem dyfuzji,
- \( f(u, v) \) oraz \( g(u, v) \) są funkcjami reakcji.
### Skrypt Python dla Modelu Hierarchicznej Struktury i Wykresu
Skrypt tworzy hierarchiczną strukturę Physarum jako maszynę reakcyjno-dyfuzyjną, przetwarza wiele plików YAML, a także generuje wizualizacje, tekstową definicję grafu i jego graficzną reprezentację. Wszystkie wygenerowane pliki są nazwane zgodnie z nazwami plików YAML, ale bez rozszerzenia `.yaml`.
#### Instalacja Wymaganych Bibliotek
Najpierw zainstaluj wymagane biblioteki:
```bash
pip install numpy matplotlib graphviz
```
### PhysarumExperiment1
+ [physarum.yaml](21/physarum.yaml)
```bash
python physarum.py --folder ./21
```
+ [physarum.dot](21/physarum.dot)
```py
digraph G {
node [shape=record];
"Simulation" [label="{
Name: PhysarumSimulation2 |
Grid Size: 101 |
Steps: 200 |
Diffusion Coefficient: 0.2 |
Reaction Rate: 0.02 |
k: 0.07 |
Initial U Value: 0.2 |
Initial V Value: 0.25 |
Initial Radius: 1 |
Conditions: time=2, temperature=2, humidity=50 |
Outputs: u, v
}"];
}
```



### PhysarumExperiment2
+ [physarum.yaml](22/physarum.yaml)
```bash
python physarum.py --folder ./22
```
+ [physarum.dot](22/physarum.dot)
```py
digraph G {
node [shape=record];
"Simulation" [label="{
Name: PhysarumSimulation2 |
Grid Size: 101 |
Steps: 200 |
Diffusion Coefficient: 0.2 |
Reaction Rate: 0.02 |
k: 0.07 |
Initial U Value: 0.2 |
Initial V Value: 0.25 |
Initial Radius: 1 |
Conditions: time=2, temperature=3, humidity=50 |
Outputs: u, v
}"];
}
```



### PhysarumExperiment3
+ [physarum.yaml](23/physarum.yaml)
```bash
python physarum.py --folder ./23
```
+ [physarum.dot](23/physarum.dot)
```py
digraph G {
node [shape=record];
"Simulation" [label="{
Name: PhysarumSimulation2 |
Grid Size: 101 |
Steps: 200 |
Diffusion Coefficient: 0.2 |
Reaction Rate: 0.02 |
k: 0.07 |
Initial U Value: 0.2 |
Initial V Value: 0.25 |
Initial Radius: 1 |
Conditions: time=3, temperature=3, humidity=50 |
Outputs: u, v
}"];
}
```



## Star History
[](https://star-history.com/#biokomputer/dsl&Date)
## [Contributions](http://contribution.softreck.dev)
[CONTRIBUTION](CONTRIBUTION.md) are always welcome:
+ did you found an [Issue or Mistake](https://github.com/biokomputer/dsl/issues/new)?
+ do you want to [improve](https://github.com/biokomputer/dsl/edit/main/README.md) the article?
+ are you interested do join another [git projects](https://github.com/biokomputer/)?
+ have something to contribute or discuss? [Open a pull request](https://github.com/biokomputer/dsl/pulls) or [create an issue](https://github.com/biokomputer/dsl/issues).
## Autor

## Tom Sapletta
Na co dzień DevOps, ewangelista hipermodularyzacji, ostatnio entuzjasta biocomputing.
Łączy doświadczenie w programowaniu i research-u poprzez wdrażanie nowatorskich rozwiązań.
Szerokie spektrum zainteresowań, umiejętności analityczne i doświadczenie w branży owocują eksperymentalnymi projektami opensource.
+ [Tom Sapletta, Linkedin](https://www.linkedin.com/in/tom-sapletta-com)
+ [Tom Sapletta, Github](https://github.com/tom-sapletta-com)
---
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
//import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.8.0/dist/mermaid.min.js';
mermaid.initialize({
startOnReady:true,
theme: 'forest',
flowchart:{
useMaxWidth:false,
htmlLabels:true
}
});
mermaid.init(undefined, '.language-mermaid');
</script>
Raw data
{
"_id": null,
"home_page": "https://www.biokomputer.pl",
"name": "biocomp",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Tom Sapletta",
"author_email": "info@softreck.dev",
"download_url": "https://files.pythonhosted.org/packages/2f/68/43120ee6a723d2d6659e441fa3c673287ce75c4ad884672c6745c72d75d2/biocomp-0.2.4.tar.gz",
"platform": null,
"description": "\n\n\n[BioComp \"Coded Life\"](https://dsl.biokomputery.pl/) to propozycja j\u0119zyka domenowo-specyficznego (DSL) do edukacji i wdra\u017cania biocomputingu obejmuje elementy j\u0119zyka opisu eksperyment\u00f3w, symulacji, designu i utrzymania system\u00f3w biokomputerowych. \nMotto \"Coded Life\" \u0141\u0105czy w sobie koncepcj\u0119 kodowania (nawi\u0105zuj\u0105c do aspektu programistycznego) z \u017cyciem (odnosz\u0105c si\u0119 do biologicznej strony projektu).\n\n\n### Sk\u0142adnia j\u0119zyka\n\n**BioComp** jest zaimplementowany jako skrypt jezyka python z klasami dla modelu i funkcjami przetwarzania pliku **YAML**, generowania symulacji i grafu. \nPlik `biocomp.py` modelu jest konwertowany do obiektow klas potrzebnyh do uruchamienia symulacji.\nPlik **YAML** zawiera potrzebne informacje do wykonania symulacji:\n1. Definicje Molekularne\n2. Tworzenie Biologicznych Uk\u0142ad\u00f3w Logicznych\n3. Symulacje Eksperyment\u00f3w\n4. Drukowanie i In\u017cynieria BioSystem\u00f3w\n5. Monitorowanie i Utrzymanie System\u00f3w\n\n\n\n### Zale\u017cno\u015bci\n\n1. **`pyparsing`**: Biblioteka do parsowania, potrzebna do przetwarzania DSL.\n2. **`matplotlib`**: Biblioteka do tworzenia wizualizacji, u\u017cyta do generowania wykres\u00f3w wynik\u00f3w symulacji.\n3. **`numpy`**: Biblioteka do operacji na tablicach wielowymiarowych, u\u017cywana do generowania danych do symulacji.\n4. **`graphviz`**: The addition of the `graphviz` module is necessary for graph visualization.\n\n\n### Instalacja\n\nAby zainstalowa\u0107 te wymagania w swoim \u015brodowisku Python, wykonaj nast\u0119puj\u0105ce kroki:\n\n#### Stw\u00f3rz i aktywuj wirtualne \u015brodowisko:\n\n```bash\npython -m venv env\nsource env/bin/activate # Na Windows u\u017cyj: env\\Scripts\\activate\n```\nlub\nIf the user has Miniconda or Anaconda, I will provide instructions to create a new environment and install Graphviz within that environment:\n```bash\nconda create -n biokomputer python=3.12 graphviz\nconda activate biokomputer\npython main.py\n```\n \n#### Zainstaluj zale\u017cno\u015bci z pliku `requirements.txt`:\n```bash\npip install -r requirements.txt\npip install --upgrade pip\n```\n\n\n---\n\n## Symulacje bramek logicznych \n\n\n\n### Uruchomienie\n\nAby uruchomi\u0107 t\u0119 konfiguracj\u0119, wykonaj nast\u0119puj\u0105ce kroki:\n\n1. Zapisz kod Python w pliku o nazwie `biocomp.py`.\n2. Zapisz zawarto\u015b\u0107 pliku YAML w pliku o nazwie `biocomp.yaml`.\n3. Uruchom skrypt Python z pliku `biocomp.py`, podaj\u0105c plik YAML jako argument:\n\n```bash\npython biocomp.py biocomp.yaml\n```\n\n\n**Wz\u00f3r Przetwarzania Danych Wej\u015bciowych:**\n\n\n\n```latex\n\\[ \\text{output\\_level} = \\frac{\\sin(t)}{2} + 0.5 \\]\n```\n\n```python\ndef run_simulation(simulation):\n time = np.linspace(0, float(simulation.conditions[\"time\"]), 100) # Generowanie 100 punkt\u00f3w czasowych\n output_levels = np.sin(time) / 2 + 0.5 # Przyk\u0142adowa funkcja poziomu wyj\u015bciowego \n```\n\n### Symulacja bramki AND\n\n```yaml\nmolecules:\n - type: Protein\n name: Input1Prot\n - type: Protein\n name: Input2Prot\n - type: Protein\n name: OutputProt\n\nlogic_gates:\n - gate_type: AND\n input1: Input1Prot\n input2: Input2Prot\n output: OutputProt\n\nbiological_system:\n name: BioCompSystem1\n\nsimulation:\n conditions:\n time: 100\n temperature: 37\n outputs:\n - Protein OutputProt\n```\n\n\n\n### Interpretacja Wykresu\n\nWykresy generowane z symulacji opartej na pliku DSL pokazuj\u0105 dynamiczne zmiany w warunkach eksperymentalnych w funkcji czasu. \n\n1. **O\u015b X (czas)**: Przedstawia czas trwania symulacji w minutach. Parametr `simulation.conditions['time']` ustala zakres czasowy symulacji. Ca\u0142y przedzia\u0142 czasowy jest podzielony na 100 r\u00f3wnych odst\u0119p\u00f3w, dzi\u0119ki czemu otrzymujemy szczeg\u00f3\u0142owy wykres zmienno\u015bci w czasie.\n\n2. **O\u015b Y (poziom wyj\u015bciowy)**: Przedstawia poziom wyj\u015bciowy bia\u0142ka lub innej zmiennej wyj\u015bciowej, okre\u015blonej przez `simulation.outputs`. Funkcja `np.sin(time) / 2 + 0.5` daje synusoidalne zmiany poziomu wyj\u015bciowego o amplitudzie 0.5 i przesuni\u0119ciu pionowym o 0.5, co oznacza, \u017ce warto\u015bci zmieniaj\u0105 si\u0119 w zakresie od 0 do 1.\n\n3. **Linia wykresu**: Jest to krzywa pokazuj\u0105ca zmiany poziomu wyj\u015bciowego w czasie. Nazwa bia\u0142ka lub zmiennej jest wy\u015bwietlana jako etykieta wykresu na podstawie zawarto\u015bci `simulation.outputs[0]`.\n\n\n### Przyk\u0142adowe Wyniki Wykresu\n\nW przypadku symulacji opartej na przyk\u0142adzie z wcze\u015bniejszym pliku `1/biocomp.yaml`, uzyskany wykres mo\u017ce wygl\u0105da\u0107 tak:\n\n- **Symulacja: BioCompSystem1**: Tytu\u0142 wykresu wskazuje, \u017ce symulacja jest wykonywana na systemie `BioCompSystem1`.\n- **Etykieta: Protein OutputProt**: Etykieta na wykresie odnosi si\u0119 do nazwy wyj\u015bciowego bia\u0142ka zdefiniowanego w symulacji.\n\nPoni\u017cej znajduje si\u0119 przybli\u017cona wizualizacja:\n\n```\n| ________\n| / \\\n| / \\________ x100 minutes\n|_______/ \\_______\n0.0 100.0\n```\n\n**Przyk\u0142adowy Wykres ze Wskazaniem**\n\n- Warto\u015bci na osi Y zmieniaj\u0105 si\u0119 synusoidalnie od poziomu 0 do 1.\n- Warto\u015bci czasowe na osi X biegn\u0105 od 0 do 100 minut.\n\n### Rzeczywiste Zastosowanie i Dane\n\nW praktycznych zastosowaniach, dane wej\u015bciowe b\u0119d\u0105 bardziej z\u0142o\u017cone i precyzyjne, bazuj\u0105ce na faktycznych pomiarach lub modelach biomolekularnych.\nSymulacje mog\u0105 prezentowa\u0107 poziomy ekspresji gen\u00f3w, aktywno\u015bci enzymatycznej, st\u0119\u017ce\u0144 cz\u0105steczek sygna\u0142owych i innych wa\u017cnych parametr\u00f3w biologicznych w zale\u017cno\u015bci od warunk\u00f3w eksperymentalnych.\n\n## Przyk\u0142ady\n\nPrzyk\u0142adowa sinusoidalna funkcja pokazuje podstawowe podej\u015bcie do wizualizacji tych danych, ale rzeczywiste dane mog\u0105 by\u0107 o wiele bardziej skomplikowane, zale\u017cnie od specyfiki symulacji i modelu biokomputerowego.\nTe przyk\u0142ady obejmuj\u0105 r\u00f3\u017cne konfiguracje dla r\u00f3\u017cnych typ\u00f3w biologicznych uk\u0142ad\u00f3w logicznych. Przyk\u0142ady obejmuj\u0105 r\u00f3\u017cne typy bramek logicznych, takie jak \"AND\", \"OR\" i \"NOT\". Je\u015bli w twojej klasie `LogicGate` zosta\u0142y zaimplementowane poprawne dzia\u0142anie dla tych bramek, to te przyk\u0142ady powinny dawa\u0107 odpowiednie wyniki na podstawie ustawionych warunk\u00f3w w plikach YAML.\nJe\u015bli nie zaimplementowano jeszcze dzia\u0142ania dla tych bramek w klasie `LogicGate`, to nale\u017cy to zrobi\u0107.\n\nAby przetestowa\u0107 twoj\u0105 aplikacj\u0119 z t\u0105 funkcjonalno\u015bci\u0105, nale\u017cy zapisa\u0107 ka\u017cdy plik YAML jako osobny plik.\n\n\n### BioCompSystem1\n+ [biocomp.yaml](1/biocomp.yaml)\n\n\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tInput2Prot [label=\"Input2Prot (Protein)\"]\n\tOutputProt [label=\"OutputProt (Protein)\"]\n\t\"AND Gate\"\n\tInput1Prot -> \"AND Gate\"\n\tInput2Prot -> \"AND Gate\"\n\t\"AND Gate\" -> OutputProt\n}\n```\n\n```bash\npython biocomp.py 1/biocomp.yaml\n```\n\n\n\n```yaml\nRunning simulation for BioCompSystem1\nConditions: {'time': 100, 'temperature': 37}\nExpected Outputs: ['Protein OutputProt']\n```\n\n\n### BioCompSystem2\n+ [biocomp.yaml](2/biocomp.yaml)\n\n\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tInput2Prot [label=\"Input2Prot (Protein)\"]\n\tOutputProt [label=\"OutputProt (Protein)\"]\n\t\"OR Gate\"\n\tInput1Prot -> \"OR Gate\"\n\tInput2Prot -> \"OR Gate\"\n\t\"OR Gate\" -> OutputProt\n}\n```\n\n```bash\npython biocomp.py 2/biocomp.yaml\n```\n\n```yaml\nRunning simulation for BioCompSystem2\nConditions: {'time': 150, 'temperature': 25}\nExpected Outputs: ['Protein OutputProt']\n```\n\n\n\n### BioCompSystem3\n+ [biocomp.yaml](3/biocomp.yaml)\n\n\n\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tInput2Prot [label=\"Input2Prot (Protein)\"]\n\tInput3Prot [label=\"Input3Prot (Protein)\"]\n\tOutputProt1 [label=\"OutputProt1 (Protein)\"]\n\tOutputProt2 [label=\"OutputProt2 (Protein)\"]\n\t\"AND Gate\"\n\tInput1Prot -> \"AND Gate\"\n\tInput2Prot -> \"AND Gate\"\n\t\"AND Gate\" -> OutputProt1\n\t\"OR Gate\"\n\tOutputProt1 -> \"OR Gate\"\n\tInput3Prot -> \"OR Gate\"\n\t\"OR Gate\" -> OutputProt2\n}\n```\n\n```sh\npython biocomp.py 3/biocomp.yaml\n```\n\n```yaml\nRunning simulation for BioCompSystem3\nConditions: {'time': 200, 'temperature': 30}\nExpected Outputs: ['Protein OutputProt1', 'Protein OutputProt2']\n```\n\n\n\n### BioCompSystem4\n+ [biocomp.yaml](4/biocomp.yaml)\n\n\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tOutputProt [label=\"OutputProt (Protein)\"]\n\t\"NOT Gate\"\n\tInput1Prot -> \"NOT Gate\"\n\t\"NOT Gate\" -> OutputProt\n}\n```\n\n```sh\npython biocomp.py 4/biocomp.yaml\n```\n\n```yaml\nRunning simulation for BioCompSystem4\nConditions: {'time': 120, 'temperature': 37}\nExpected Outputs: ['Protein OutputProt']\n```\n\n\n\n\n---\n\n## Symulacje Grzybow\n\nAby przeprowadzi\u0107 symulacj\u0119, np. wzrostu grzyb\u00f3w, warto uwzgl\u0119dni\u0107 czynniki takie jak dost\u0119pno\u015b\u0107 substancji od\u017cywczych, temperatura, wilgotno\u015b\u0107 i czas. \nWzrost grzyb\u00f3w mo\u017cna modelowa\u0107 za pomoc\u0105 r\u00f3\u017cniczkowych r\u00f3wna\u0144 wzrostu biologicznego, takich jak r\u00f3wnanie Verhulsta (logistyczne r\u00f3wnanie r\u00f3\u017cniczkowe) lub modele podobne.\n\n### Wz\u00f3r Symulacji Wzrostu Grzyb\u00f3w\n\nR\u00f3wnanie logistyczne mo\u017ce by\u0107 u\u017cywane do modelowania wzrostu populacji organizmu, w tym grzyb\u00f3w:\n\n\n\n```latex\n\\[ \\frac{dN}{dt} = rN \\left(1 - \\frac{N}{K}\\right) \\]\n```\n\nGdzie:\n- \\( N \\) jest liczb\u0105 organizm\u00f3w (np. masa biomasy grzyb\u00f3w),\n- \\( r \\) jest wska\u017anikiem wzrostu,\n- \\( K \\) jest no\u015bno\u015bci\u0105 \u015brodowiska.\n\n#### Skrypt `fungi.py`\n\nSkrypt Pythona, kt\u00f3ry przetwarza dane wej\u015bciowe z plik\u00f3w YAML i wykonuje symulacj\u0119 wzrostu grzyb\u00f3w.\nWz\u00f3r logistyczny u\u017cyty w skrypcie pozwala modelowa\u0107 realistyczny wzrost populacji grzyb\u00f3w i mo\u017ce by\u0107 dostosowany dzi\u0119ki zmianie parametr\u00f3w w plikach YAML.\nSkrypt wspiera przetwarzanie wielu plik\u00f3w YAML oraz opcjonalnie przetwarzanie wszystkich plik\u00f3w YAML w podanym folderze.\nZawiera funkcje do generowania wykres\u00f3w, tekstowych definicji graf\u00f3w oraz graficznych reprezentacji graf\u00f3w.\n\n1. **Obs\u0142uga wielu plik\u00f3w YAML**: Pobieranie wielu plik\u00f3w jako argument\u00f3w lub obs\u0142uga folderu zawieraj\u0105cego pliki YAML.\n2. **Parsowanie**: danych i tworzenie struktur\u0119 symulacji**,\n3. **Symulacja**: wzrostu grzyb\u00f3w za pomoc\u0105 r\u00f3wnania logistycznego,\n4. **Wizualizacja wynik\u00f3w**: Generowanie wykres\u00f3w wzrostu biomasy.\n5. **Generowanie tekstowej definicji grafu**: Zapisywanie parametr\u00f3w symulacji i wynik\u00f3w do pliku tekstowego.\n6. **Graficzna reprezentacja grafu**: Tworzenie graf\u00f3w za pomoc\u0105 Graphviz.\n\n\n\n#### Wymagane biblioteki\nAby zapewni\u0107 pe\u0142n\u0105 funkcjonalno\u015b\u0107, nale\u017cy zainstalowa\u0107 nast\u0119puj\u0105ce biblioteki:\n- `yaml`\n- `matplotlib`\n- `graphviz`\n\nMo\u017cna je zainstalowa\u0107 za pomoc\u0105 pip:\n```bash\npip install pyyaml matplotlib graphviz\n```\n\n\n### FungiExperiment1\n\n```bash\npython fungi.py --folder ./11\n```\n\n```py\ndigraph G {\n node [shape=record];\n \"Simulation\" [label=\"{Name: FungiExperiment1|Initial Population: 10|Growth Rate: 0.2|Carrying Capacity: 1000|Conditions: time=30, temperature=25, humidity=80|Outputs: Biomass}\"];\n}\n```\n\n\n[fungi.yaml](11/fungi.yaml)\n\n### FungiExperiment2\n\n```bash\npython fungi.py --folder ./11\n```\n\n```py\ndigraph G {\n node [shape=record];\n \"Simulation\" [label=\"{Name: FungiExperiment2|Initial Population: 5|Growth Rate: 0.1|Carrying Capacity: 500|Conditions: time=45, temperature=20, humidity=90|Outputs: Biomass}\"];\n}\n```\n[fungi.dot](12/fungi.dot)\n\n\n[fungi.yaml](12/fungi.yaml)\n\n\n---\n\n## Symulacje Physarum\n\nAby zrealizowa\u0107 bardziej z\u0142o\u017con\u0105 symulacj\u0119 wzrostu Physarum polycephalum (slime mold) jako hierarchicznej struktury kom\u00f3rkowej w kontek\u015bcie modeli reakcyjno-dyfuzyjnych, nale\u017cy przeanalizowa\u0107 kilka kluczowych proces\u00f3w. Model reakcyjno-dyfuzyjny umo\u017cliwia symulacj\u0119 jak substancje (np. chemotaksyny) dyfunduj\u0105 oraz jak kom\u00f3rki reaguj\u0105 na te substancje, co prowadzi do wzrostu i formowania wzorca strukturalnego.\n\nTo jest do\u015b\u0107 zaawansowane zadanie, kt\u00f3re mo\u017cna osi\u0105gn\u0105\u0107 przy u\u017cyciu bibliotek takich jak NumPy do oblicze\u0144 oraz Matplotlib do wizualizacji. Do generowania graf\u00f3w hierarchicznych u\u017cyjemy Graphviz.\n\nZa\u0142o\u017cenia:\n1. **Hierarchiczna struktura**: Model Physarum jako siatki kom\u00f3rkowej.\n2. **Model reakcyjno-dyfuzyjny**: U\u017cyjemy prostego r\u00f3wnania reakcyjno-dyfuzyjnego do modelowania rozprzestrzeniania si\u0119 i reakcji chemotaksyn.\n\n### R\u00f3wnanie Reakcyjno-Dyfuzyjne\n\n\n\n```latex\n\\[ \\frac{\\partial u}{\\partial t} = D \\nabla^2 u + f(u, v) \\]\n```\n\n\n\n```latex\n\\[ \\frac{\\partial v}{\\partial t} = D \\nabla^2 v + g(u, v) \\]\n```\ngdzie:\n- \\( u \\) i \\( v \\) s\u0105 koncentracj\u0105 substancji chemicznych,\n- \\( D \\) jest wsp\u00f3\u0142czynnikiem dyfuzji,\n- \\( f(u, v) \\) oraz \\( g(u, v) \\) s\u0105 funkcjami reakcji.\n\n### Skrypt Python dla Modelu Hierarchicznej Struktury i Wykresu\nSkrypt tworzy hierarchiczn\u0105 struktur\u0119 Physarum jako maszyn\u0119 reakcyjno-dyfuzyjn\u0105, przetwarza wiele plik\u00f3w YAML, a tak\u017ce generuje wizualizacje, tekstow\u0105 definicj\u0119 grafu i jego graficzn\u0105 reprezentacj\u0119. Wszystkie wygenerowane pliki s\u0105 nazwane zgodnie z nazwami plik\u00f3w YAML, ale bez rozszerzenia `.yaml`.\n\n#### Instalacja Wymaganych Bibliotek\n\nNajpierw zainstaluj wymagane biblioteki:\n```bash\npip install numpy matplotlib graphviz\n```\n\n### PhysarumExperiment1\n+ [physarum.yaml](21/physarum.yaml)\n\n```bash\npython physarum.py --folder ./21\n```\n+ [physarum.dot](21/physarum.dot)\n```py\ndigraph G {\n node [shape=record];\n \"Simulation\" [label=\"{\n Name: PhysarumSimulation2 |\n Grid Size: 101 |\n Steps: 200 |\n Diffusion Coefficient: 0.2 |\n Reaction Rate: 0.02 |\n k: 0.07 |\n Initial U Value: 0.2 |\n Initial V Value: 0.25 |\n Initial Radius: 1 |\n Conditions: time=2, temperature=2, humidity=50 |\n Outputs: u, v\n }\"];\n}\n```\n\n\n\n\n\n\n### PhysarumExperiment2\n\n+ [physarum.yaml](22/physarum.yaml)\n\n```bash\npython physarum.py --folder ./22\n```\n+ [physarum.dot](22/physarum.dot)\n```py\ndigraph G {\n node [shape=record];\n \"Simulation\" [label=\"{\n Name: PhysarumSimulation2 |\n Grid Size: 101 |\n Steps: 200 |\n Diffusion Coefficient: 0.2 |\n Reaction Rate: 0.02 |\n k: 0.07 |\n Initial U Value: 0.2 |\n Initial V Value: 0.25 |\n Initial Radius: 1 |\n Conditions: time=2, temperature=3, humidity=50 |\n Outputs: u, v\n }\"];\n}\n```\n\n\n\n\n\n\n\n\n\n### PhysarumExperiment3\n\n+ [physarum.yaml](23/physarum.yaml)\n\n```bash\npython physarum.py --folder ./23\n```\n+ [physarum.dot](23/physarum.dot)\n```py\ndigraph G {\n node [shape=record];\n \"Simulation\" [label=\"{\n Name: PhysarumSimulation2 |\n Grid Size: 101 |\n Steps: 200 |\n Diffusion Coefficient: 0.2 |\n Reaction Rate: 0.02 |\n k: 0.07 |\n Initial U Value: 0.2 |\n Initial V Value: 0.25 |\n Initial Radius: 1 |\n Conditions: time=3, temperature=3, humidity=50 |\n Outputs: u, v\n }\"];\n}\n```\n\n\n\n\n\n\n\n\n\n## Star History\n\n[](https://star-history.com/#biokomputer/dsl&Date)\n\n\n## [Contributions](http://contribution.softreck.dev)\n\n[CONTRIBUTION](CONTRIBUTION.md) are always welcome:\n+ did you found an [Issue or Mistake](https://github.com/biokomputer/dsl/issues/new)?\n+ do you want to [improve](https://github.com/biokomputer/dsl/edit/main/README.md) the article?\n+ are you interested do join another [git projects](https://github.com/biokomputer/)?\n+ have something to contribute or discuss? [Open a pull request](https://github.com/biokomputer/dsl/pulls) or [create an issue](https://github.com/biokomputer/dsl/issues).\n\n\n\n## Autor\n\n\n\n## Tom Sapletta\n\nNa co dzie\u0144 DevOps, ewangelista hipermodularyzacji, ostatnio entuzjasta biocomputing.\n\u0141\u0105czy do\u015bwiadczenie w programowaniu i research-u poprzez wdra\u017canie nowatorskich rozwi\u0105za\u0144. \nSzerokie spektrum zainteresowa\u0144, umiej\u0119tno\u015bci analityczne i do\u015bwiadczenie w bran\u017cy owocuj\u0105 eksperymentalnymi projektami opensource.\n\n+ [Tom Sapletta, Linkedin](https://www.linkedin.com/in/tom-sapletta-com)\n+ [Tom Sapletta, Github](https://github.com/tom-sapletta-com)\n\n\n---\n\n\n\n<script type=\"module\"> \n import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';\n //import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.8.0/dist/mermaid.min.js';\n mermaid.initialize({\n startOnReady:true,\n theme: 'forest',\n flowchart:{\n useMaxWidth:false,\n htmlLabels:true\n }\n });\n mermaid.init(undefined, '.language-mermaid');\n</script>\n\n",
"bugtrack_url": null,
"license": null,
"summary": "BioComp 'Coded Life' to propozycja j\u0119zyka domenowo-specyficznego (DSL) do edukacji i wdra\u017cania biocomputingu",
"version": "0.2.4",
"project_urls": {
"Homepage": "https://www.biokomputer.pl"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "759848429e2e3b3a27b1341e9e0326222fb738957fcff05ae302e0292e30c3d1",
"md5": "ae072c71fac8dbe6d93e889d60706add",
"sha256": "073353a878d9b2cf8f5055584bf8e44d3ce0f4cc027b45b71ca35911399326c8"
},
"downloads": -1,
"filename": "biocomp-0.2.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ae072c71fac8dbe6d93e889d60706add",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 18914,
"upload_time": "2024-10-18T19:17:25",
"upload_time_iso_8601": "2024-10-18T19:17:25.461815Z",
"url": "https://files.pythonhosted.org/packages/75/98/48429e2e3b3a27b1341e9e0326222fb738957fcff05ae302e0292e30c3d1/biocomp-0.2.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2f6843120ee6a723d2d6659e441fa3c673287ce75c4ad884672c6745c72d75d2",
"md5": "7aae88ce1a4bed9ae4dd9241678408c8",
"sha256": "1ce6cad7d0e9e90a2da9f7d515b1fc9a2e5da8297a15a3c2c2ee827c2b78219f"
},
"downloads": -1,
"filename": "biocomp-0.2.4.tar.gz",
"has_sig": false,
"md5_digest": "7aae88ce1a4bed9ae4dd9241678408c8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22110,
"upload_time": "2024-10-18T19:17:27",
"upload_time_iso_8601": "2024-10-18T19:17:27.793591Z",
"url": "https://files.pythonhosted.org/packages/2f/68/43120ee6a723d2d6659e441fa3c673287ce75c4ad884672c6745c72d75d2/biocomp-0.2.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-18 19:17:27",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "biocomp"
}