﻿Binomial

-- Natural Number Simulation for Complex Systems --

　　複雑反応系研究室

    Copyright (c) 2022 Takashi Sato
    
    This software is released under the MIT License. http://opensource.org/licenses/mit-license.php*/


説明

  このプログラムは、複雑な反応システムを探索するための自然数シミュレーションを提供します。 
  この計算の数は、分子数、細胞数、生きている個体数などを意味します。
  このプログラムは、これらの自然数を計算するための時間発展アルゴリズムが含まれています。 
  このプログラムは、従来の通常の微分方程式（OED）の代わりに使用できます。 OEDは、膨大な数理系の現象に対処できます。 
  数シミュレーションは、二項確率によるランダムな自然数に基づいて、これらの反応系を解くこともできます。 
  このプログラムは、ノンストップ計算と入力ファイル書き込みによる簡単な使用を可能にします。 このスマートシミュレーターをお楽しみください。
  

カテゴリー

 複雑系, システムバイオロジー, A-life, シミュレーション
 
 
ファイル構成

 このプログラムは、6つのPythonファイルと、１つの入力ファイルが必要です。

    1. binomial_v012.py (メインプログラム)
        メインコードで、入力ファイルの読み込みと、計算の実行プロセスが含まれています。 
    2. element_v012.py
        計算要素を定義するコードが含まれています。 入力ファイルの*Elementで定義される要素名、初期の数などを元に
        要素オブイジェクトが作られます。
    3. reaction_v012.py
        反応式を計算するためのコードが含まれています。入力ファイルの*Reactionで反応式が定義されます。
    4. utility_v012.py
    　　結果グラフの出力や、csvファイルへの出力などのユーティリティ関係のコードが含まれます。
    5. polymer_v012.py
         入力ファイルに"polymer"を含ませ、重合計算を定義した時の呼ばれます。
    6. reactionManage_v012.py  
         このファイルは、反応計算をサポートするコードが含まれています。

 これらのコードは、2022年6月時点、Ubuntu 20.04.4 LTS　上の Spyder IDE 5.1.5で作りました。  
 
 
はじめに

     上記の6つのdot（.）-pyファイルと1つの入力ファイルでプログラムを実行できます。
   入力ファイルは、拡張子が.txtのプレーンテキストで記述されています。
   ファイルには、* Time、* Element、* Reaction、および*Plotの4つのセクションが必要です。
   
   メイン-プロジェクト-フォルダを1つ作成します。
   プログラム-ファイル-ホルダーの中に上記6つのdot（.）-pyファイルを格納します。 プログラム-ファイル-ホルダーはメインホルダーの中に置きます。
   メイン-プロジェクト-フォルダの中に別のホルダーを作成して、入力ファイルを格納します。(参照："Folder structure.pdf")
      
    Spyderで実行するには、binomial_v012.pyの中の入力ファイル名を変更する必要があります。
   binomial_v012.pyを実行すると、計算が開始され、プロットがプロットウィンドウに表示されます。
   以下のテストファイルの説明は、inp_immune_322.txtのものです。 以下に4つのセクションの説明を示します。
   * Time、* Element、* Reaction、および*Plotです。
   
    1.*Time
            開始時間、終了時間を書く必要があります、
          コンソールの印刷間隔時間、プロット出力間隔時間、csvファイル出力間隔時間、および単位。
          自然数しか書けません。
          ゼロ、0は行で使用可能です。 計算は1間隔ごとに実行されます。
          以下の例の**は、コメント行を意味します。

         Format:
           *Time
            start time, end time, console out interval, plot out interval, csv-file out interval, time unit
           *End 
         
         Example:
           *Time, 
           ** start, end, console out, plot out, time unit
                  0, 14400, 1440, 14400, 1440,  min
           *End 

    2.*Element
            シミュレートする要素アイテムを記述します。
          要素名、初期番号、プロットの色が必要です。
          
         Format:
           *Element
            element name, initial number, plot color
               --- --- --- 
               --- --- --- 
          *End

         Example:
           *Element
           ** 0:element name, 1:initial number, 2:plot color
           virus, 500, Black
           cell, 100000, Green, pneumocyte
           virusCell, 0,
           macrophage, 5000, 
           macrophageActive, 0,
           macrophageWithVirus, 0, 
           dendricCell, 2000, Blue,  
           dendricMHC, 0, Red,  
           naiveTh1, 10000, Green
           activeTh1, 0, 
           IFN, 0, Blue
           IL-12, 0
           *End
          
          
    3.*Reaction
           上記の要素の反応を定義します。
         以下のように多くの反応タイプが利用可能です。
         反応マルチ; rMは、多くの種類の要素に関係する反応を定義します。
 
              r1_0 : One kind of element decreases its number.
              r1_1 : One kind of element change to anothor kind of element. 
              r1_2 : One kind of element separate to two kind of element.
              r1_3 : One kind of element separate to three kind of element.
              r2_1 : Two kinds of element react, and change to one element.
              r2_2 : Two kinds of element react, and change to two kinds of element.
              r2_3 : Two kinds of element react, and change to three kinds of element.
              r3_1 : Three kinds of element react, and change to one kind of element.
              r3_2 : Three kinds of element react, and change to two kinds of element.
              r3_3 : Three kinds of element react, and change to three kinds of element.
              rM   : Some kinds of element react, and change to another some kinds element. 
              r0_1 : One kind of element increases its number. 
 
　　　　すべての反応定義には、反応要素と生成要素、および要素の反応次数に関する情報が必要です。
　　　　たとえば、1種類の要素Aが2種類の要素XとYになる場合。次の定義は、
　　　　1つのAが2つのXと3つのYになることを示しています。 
 
              r1_2, 001, 1, A, 0.5, 2, X, 3, Y 
 
　　　　最初の項は反応タイプです。2番目は識別用の名前です。
        3番目と4番目の項「1、A」は反応次数と要素名です。
        5番目の0.5は、反応確率パラメーターです。
        6番目と7番目の「1、X」は反応次数であり、生成された要素名です。
        8番目と9番目の「1、Y」は反応次数であり、もうひとつの生成された要素名です。 
        
　　　　反応順序は自然数でなければなりません。
        要素名は*Elementで定義されている必要があります。
       
       rMは、反応定義の前後にさまざまな種類の要素を許可します。
        3行のステートメントは、1つの反応を定義し、以下に例を示します。
 
            　　rM,   002,  1, A, 10, B, 10, C, 2, D, 100, E
                         1000
                       1, X, 1, Y, 10, Z, 3, W
                       
　　　　5種類の要素が反応し、4種類の要素を作成します。
        要素名の前の数字は、他の反応定義と同様に反応次数を示しています。 
        最初の行は、反応する要素を定義します。 3行目は、作成された要素を定義します。 
        行には多くの要素を記述できます。 2行目は、反応確率パラメーターです。
        
　　　　*Reactionの定義にr2_1、r2_2、r2_3、r3_1、r3_2、r3_3、rMが含まれている場合、
　　　　*Reactionの行には、グローバル正規化パラメーターが必要です。
        このパラメーターは、アルゴリズムを通じて反応確率を制御します。
 
　　　　反応確率パラメーターとグローバル正規化パラメーターは実数にすることができます。
　　　　以下の形式では、A、B、X、Yは*Element項目で定義された要素名です。
　　　　 piは、各反応の確率パラメーターを表します。

         Format:
          *Reaction, global normalization parameter
           r1_2, name, a, A, p1, x, X, y, Y
           r1_1, name, a, A, p2, x, X
           r1_0, name, a, A, p3
           r2_2, name, a, A, b, B, p4, x, X, y, Y
           r2_1, name, a, A, b, B, p5, x, X
           rM,   name, a, A, b, B, c, C, d, D, e, E, -------
                       p6
                       x, X, y, Y, z, Z, w, W, -------
           --- --- --- 
           --- --- --- 
          *End

         Example:
           *Reaction, 100000000
           r2_1, 001,  10, virus, 1, cell, 0.04, 1, virusCell
           r1_1, 002,   1, virusCell, 0.001, 100, virus
           r2_1, 003,   1, macrophage, 1, virus, 0.9, 1, macrophageWithVirus
           rM,   004,   1, macrophageWithVirus,  
                          0.9, 
                        1, macrophageWithVirus, 10, IFN, 10, IL-12
           r1_1, 005,   1, macrophageWithVirus, 0.1, 1, macrophage
           r2_1, 006,   1, virus, 1, dendricCell, 10, 1, dendricMHC
           rM,   007,   1, naiveTh1, 1, dendricMHC, 10, IFN, 10, IL-12
                        10000,
                        1, activeTh1, 1, dendricMHC
           r1_2, 013,   1, activeTh1, 1, 10, IFN, 1, activeTh1
           r2_1, 014,   1, macrophage, 2, IFN, 10, 1, macrophageActive 
           r2_1, 015,   1, macrophageActive, 10, virus, 1, 1, macrophageWithVirus
           r1_1, 018,   1, dendricMHC, 0.0002, 1, dendricCell
           r1_1, 019,   1, macrophageActive, 0.002, 1, macrophage
           r1_1, 020,   1, activeTh1, 0.001, 1, naiveTh1
           r1_0, 021,   1, IFN, 0.01
           *End 

4. *Plot
　　　　このセクションでは、プロット条件を定義します。 
　　　　同じ行に書かれた要素が1つの図に表示されます。 
　　　　プロットタイプは線形または対数です。

         Format:
          *Plot, plot-type
           A, X, Y
           B, W
           F
           --- --- --- 
           --- --- --- 
          *End           
    
        Example:
         *Plot
           virus, virusCell, macrophageWithVirus
           cell, virusCell
           macrophage, macrophageActive, macrophageWithVirus
           dendricMHC, dendricCell
           IFN, IL-12
           activeTh1, naiveTh1
         *End


プログラムの実行

     2つの実行プロセスが利用可能です。
   少なくともマスターホルダーには2つのホルダーが必要です。 1つのホルダーには6つのプログラムファイルが含まれています。
   もう一方のホルダーには、上記のような入力ファイルが含まれている必要があります。(参照："Folder structure.pdf")

　　　　1.Spyder
        
           実行方法の1つは、anaconda3でspyderを使用します。 Spyderからメインのプログラムファイルbinomial_v012.pyを開きます。
          次のように、適切な行に入力ファイル名を書き込む必要があります。
         
               fName ='inp_test_008.txt'
         
         Spyderの「ファイルの実行」コマンドで計算を実行します。 
          結果ファイル等は、入力ファイルのあるフォルダ中に新しいホルダーが作成され、その中に配置されます。
          
　　　　2.コマンドライン、端末
     
            ホルダーの準備は1.Spyderケースと同じです。
            ターミナルを開き、ディレクトリをプログラムファイルのあるディレクトリに変更します。
            次のように端末にコマンドラインを記述します。
           
                   $ python binomial_v012.py inp_test_008.txt
                  
               行を返すと、プログラムが開始されます。
               結果ファイルは、1.spyderのように新しく作成されたホルダーに配置されます。




 
 
 
