【GROMACS】gmx make_ndxでインデックス(.ndx)ファイルを作る

#はじめに


GROMACSでは原子を指定するのにインデックスファイル（*.ndx）が必要になることがあります。
この記事ではインデックスファイルを作るためのユーティリティであるgmx make_ndxの使い方についてご紹介します。


#使い方

今回はこちらの系で実行します。
タンパク質とリガンドからなる系です。

![vmdscene (コピー).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788299/6abd522c-492e-c7c6-ceef-f843f0b78a02.jpeg)

GROMACSのバージョンは2021.2です。

コマンドはシンプルです。

```bash
gmx make_ndx -f npt.gro
```


するとこんな表示がでてきます。


```bash
                     :-) GROMACS - gmx make_ndx, 2021.2 (-:

                            GROMACS is written by:
     Andrey Alekseenko              Emile Apol              Rossen Apostolov     
         Paul Bauer           Herman J.C. Berendsen           Par Bjelkmar       
       Christian Blau           Viacheslav Bolnykh             Kevin Boyd        
     Aldert van Buuren           Rudi van Drunen             Anton Feenstra      
    Gilles Gouaillardet             Alan Gray               Gerrit Groenhof      
       Anca Hamuraru            Vincent Hindriksen          M. Eric Irrgang      
      Aleksei Iupinov           Christoph Junghans             Joe Jordan        
    Dimitrios Karkoulis            Peter Kasson                Jiri Kraus        
      Carsten Kutzner              Per Larsson              Justin A. Lemkul     
       Viveca Lindahl            Magnus Lundborg             Erik Marklund       
        Pascal Merz             Pieter Meulenhoff            Teemu Murtola       
        Szilard Pall               Sander Pronk              Roland Schulz       
       Michael Shirts            Alexey Shvetsov             Alfons Sijbers      
       Peter Tieleman              Jon Vincent              Teemu Virolainen     
     Christian Wennberg            Maarten Wolf              Artem Zhmurov       
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2019, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx make_ndx, version 2021.2
Executable:   /usr/local/gromacs/2021.2_GPU/bin/gmx
Data prefix:  /usr/local/gromacs/2021.2_GPU
Working dir:  /home/tacoma/work/make_ndx
Command line:
  gmx make_ndx -f npt.gro


Reading structure file
Going to read 0 old index file(s)
Analysing residue names:
There are:   162    Protein residues
There are:     1      Other residues
There are: 10126      Water residues
There are:     8        Ion residues
Analysing Protein...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...

  0 System              : 33005 atoms
  1 Protein             :  2601 atoms
  2 Protein-H           :  1291 atoms
  3 C-alpha             :   162 atoms
  4 Backbone            :   486 atoms
  5 MainChain           :   649 atoms
  6 MainChain+Cb        :   800 atoms
  7 MainChain+H         :   810 atoms
  8 SideChain           :  1791 atoms
  9 SideChain-H         :   642 atoms
 10 Prot-Masses         :  2601 atoms
 11 non-Protein         : 30404 atoms
 12 Other               :    18 atoms
 13 LIG                 :    18 atoms
 14 CL                  :     8 atoms
 15 Water               : 30378 atoms
 16 SOL                 : 30378 atoms
 17 non-Water           :  2627 atoms
 18 Ion                 :     8 atoms
 19 LIG                 :    18 atoms
 20 CL                  :     8 atoms
 21 Water_and_ions      : 30386 atoms

 nr : group      '!': not  'name' nr name   'splitch' nr    Enter: list groups
 'a': atom       '&': and  'del' nr         'splitres' nr   'l': list residues
 't': atom type  '|': or   'keep' nr        'splitat' nr    'h': help
 'r': residue              'res' nr         'chain' char
 "name": group             'case': case sensitive           'q': save and quit
 'ri': residue index

>
```

既に0-21までのgroupが認識されています。
代表的なものは、

* System : 系中の全原子
* Protein : タンパク質
* Ion : イオン
* Water : 水

それ以外にも

* LIG : リガンド（groファイル中で残基名がLIGとなっているのでこのように表示されている）

などあります。

この状態で"q"と入力すると、0-21までのgroupを含むindex.ndxファイルが出力されます。

グループを作るためのコマンドは下部分に書いていますが、わかりにくいので以下で例を示していきます。


##タンパク質とリガンドを含むグループを作成する

group 1 (Protein) と group 13 (LIG) を合わせたグループを作ります。

```bash
> 1 | 13

Copied index group 1 'Protein'
Copied index group 13 'LIG'
Merged two groups with OR: 2601 18 -> 2619

 22 Protein_LIG         :  2619 atoms
```

「|」 は「or」を意味しています。したがって、1と13を合わせたgroupができます。



group 22 ができたことがわかります。

別の方法としては、group 21 の Water_and_ions 以外の原子ということで、

```bash
> ! 21
```

とすることもできます。
「!」は「not」の意味です。


##特定の名前の原子のみを集めたgroupを作成する

原子名CBの原子のgroupを作るときは

```bash
> a CB

Found 151 atoms with name CB

 22 CB                  :   151 atoms

```

ワイルドカードも使えるようで例えばCから始まる原子（つまり炭素原子すべて。Cl原子があるときは除く必要がある）を選択することも可能です。

```bash
> a C*

Found 826 atoms with name C*

 23 C*                  :   826 atoms
```

##残基番号で選択する

1番目から10番目の残基を選択します。
残基のインデックスは1始まりです。念のため。

```bash
> r 1-10

Found 178 atoms with res.nr. in range 1-10

 24 r_1-10              :   178 atoms

```


##特定残基の炭素原子を選択

残基1-10番の炭素原子を選択しましょう。

```bash
> r 1-10 & a C*

Found 178 atoms with res.nr. in range 1-10
Found 826 atoms with name C*
Merged two groups with AND: 178 826 -> 56

 27 r_1-10_&_C*         :    56 atoms
```

「&」はandです。


##groupを残基ごとに分解する

↑で作ったgroupを残基ごとに分解します。

```bash
> splitres 27

Splitting group 27 'r_1-10_&_C*' into residues

> 


  0 System              : 33005 atoms
  1 Protein             :  2601 atoms
  2 Protein-H           :  1291 atoms
  3 C-alpha             :   162 atoms
  4 Backbone            :   486 atoms
  5 MainChain           :   649 atoms
  6 MainChain+Cb        :   800 atoms
  7 MainChain+H         :   810 atoms
  8 SideChain           :  1791 atoms
  9 SideChain-H         :   642 atoms
 10 Prot-Masses         :  2601 atoms
 11 non-Protein         : 30404 atoms
 12 Other               :    18 atoms
 13 LIG                 :    18 atoms
 14 CL                  :     8 atoms
 15 Water               : 30378 atoms
 16 SOL                 : 30378 atoms
 17 non-Water           :  2627 atoms
 18 Ion                 :     8 atoms
 19 LIG                 :    18 atoms
 20 CL                  :     8 atoms
 21 Water_and_ions      : 30386 atoms
 22 C_C*                :   826 atoms
 23 C*                  :   826 atoms
 24 r_1-10              :   178 atoms
 25 r_1                 :    19 atoms
 26 r_3                 :    19 atoms
 27 r_1-10_&_C*         :    56 atoms
 28 r_1-10_&_C*_MET_1   :     5 atoms
 29 r_1-10_&_C*_ASN_2   :     4 atoms
 30 r_1-10_&_C*_ILE_3   :     6 atoms
 31 r_1-10_&_C*_PHE_4   :     9 atoms
 32 r_1-10_&_C*_GLU_5   :     5 atoms
 33 r_1-10_&_C*_MET_6   :     5 atoms
 34 r_1-10_&_C*_LEU_7   :     6 atoms
 35 r_1-10_&_C*_ARG_8   :     6 atoms
 36 r_1-10_&_C*_ILE_9   :     6 atoms
 37 r_1-10_&_C*_ASP_10  :     4 atoms
```

##groupを１原子ごとに分解する

```bash
> splitat 27

Splitting group 27 'r_1-10_&_C*' into atoms
```

表示は長くなりますが抜粋すると

```bash
 42 r_1-10_&_C*_CA_5    :     1 atoms
 43 r_1-10_&_C*_CB_7    :     1 atoms
 44 r_1-10_&_C*_CG_10   :     1 atoms
 45 r_1-10_&_C*_CE_14   :     1 atoms
 46 r_1-10_&_C*_C_18    :     1 atoms
 47 r_1-10_&_C*_CA_22   :     1 atoms
 48 r_1-10_&_C*_CB_24   :     1 atoms
 49 r_1-10_&_C*_CG_27   :     1 atoms
 50 r_1-10_&_C*_C_32    :     1 atoms
 51 r_1-10_&_C*_CA_36   :     1 atoms
 52 r_1-10_&_C*_CB_38   :     1 atoms
 53 r_1-10_&_C*_CG2_40  :     1 atoms
 54 r_1-10_&_C*_CG1_44  :     1 atoms
 55 r_1-10_&_C*_CD_47   :     1 atoms
 56 r_1-10_&_C*_C_51    :     1 atoms
```

こんな感じです。

##groupの名前を変える

group 22 の名前を変えたければ、

```bash
> name 22 Protein_and_ligand
```

これでgroup 22 の名前が「Protein_and_ligand」に変わりました。
ここでエンターキーをただ押すことで現在のグループのリストを見ることができます。

```bash
> 


  0 System              : 33005 atoms
  1 Protein             :  2601 atoms
  2 Protein-H           :  1291 atoms
  3 C-alpha             :   162 atoms
  4 Backbone            :   486 atoms
  5 MainChain           :   649 atoms
  6 MainChain+Cb        :   800 atoms
  7 MainChain+H         :   810 atoms
  8 SideChain           :  1791 atoms
  9 SideChain-H         :   642 atoms
 10 Prot-Masses         :  2601 atoms
 11 non-Protein         : 30404 atoms
 12 Other               :    18 atoms
 13 LIG                 :    18 atoms
 14 CL                  :     8 atoms
 15 Water               : 30378 atoms
 16 SOL                 : 30378 atoms
 17 non-Water           :  2627 atoms
 18 Ion                 :     8 atoms
 19 LIG                 :    18 atoms
 20 CL                  :     8 atoms
 21 Water_and_ions      : 30386 atoms
 22 Protein_and_ligand  :  2619 atoms

 nr : group      '!': not  'name' nr name   'splitch' nr    Enter: list groups
 'a': atom       '&': and  'del' nr         'splitres' nr   'l': list residues
 't': atom type  '|': or   'keep' nr        'splitat' nr    'h': help
 'r': residue              'res' nr         'chain' char
 "name": group             'case': case sensitive           'q': save and quit
 'ri': residue index

```

##groupを削除する

group 27 を削除します。

```bash
> del 27

Removed group 27 'r_1-10_&_C*'
```

##これまで作成したgroupを保存してmake_ndxから抜ける

```bash
> q
```

出力ファイル名を指定していなければ、index.ndxが出力されています。


#おわりに

その他もいろいろあると思いますが、知らないので今回はこれで終わりにします。
例えばcaseって何なのでしょうね。


#参考

公式マニュアルにはあまり説明がありませんが一応。

https://manual.gromacs.org/current/onlinehelp/gmx-make_ndx.html