SAS_CNSのインストール方法

SAS_CNS --固体用NMR用化学シフト帰属プログラムはこちら
SAS_CNSの実行についてはこちら

以下の例はx86-32bit、Redhat 8上のマシンで構築・動作を試されたものです。 インストールするPCの環境に従いアレンジしてください。

1. CNSの入手・ファイルの展開

CNSsolveのウェブサイトよりCNSプログラムを入手します。

(注)近年のLinuxでは、CNS v1.2のほうがインストールし易いようですが、
   当方ではv1.2による計算の挙動や結果を確認していません。
   もし、v1.2を利用するときは各自の責任でお願いします。

CNSプログラムをインストールしたいディレクトリに移動します。

(注)CNSをインストールする場所によっては管理者権限が必要となります。
   また、CNSをビルドするためのコマンドがない場合はPCの管理者と相談してください。

以下の例では、自分のアカウントのホームディレクトリにCNSプログラムのディレクトリを作成します。

$ mv cns_solve_1.1_basic_inputs.tar.gz $HOME/
$ mv cns_solve_1.1_data.tar.gz $HOME/
$ mv cns_solve_1.1_test.tar.gz $HOME/

これらの圧縮アーカイブを解凍・展開します。

$ cd $HOME/
$ gzip -d cns_solve_1.1_*
$ tar -xvf cns_solve_1.1_basic_inputs.tar
$ tar -xvf cns_solve_1.1_data.tar
$ tar -xvf cns_solve_1.1_test.tar

2. SAS_CNSの入手・ファイルの展開

SAS_CNSプログラムの圧縮アーカイブをダウンロードして、CNSのホームディレクトリに置きます。
SAS_CNSのダウンロード

$ mv sas_cns.tar.gz $HOME/cns_solve_1.1/

CNSのホームディレクトリに移り、圧縮アーカイブを解凍・展開します。

$ cd $HOME/cns_solve_1.1/
$ gzip -d sas_cns.tar.gz
$ tar -xvf sas_cns.tar

CNSの“source”ディレクトリのバックアップをとり、以下のコマンドを実行します。

$ cp -a ./source/ ./source.org/
$ cp -i ./sas_cns/sas_cns_source/* ./source/

3. SAS_CNSソースファイルの編集

“vi”かテキストエディタで以下のファイルを次のように編集します。

./source/cns.f の中で、

"command parsing"セクション(227行目より)の一番下に以下の行を追加する。

ELSE IF (WD(1:4).EQ.'SMIN' ) THEN
CALL SMINREAD
ELSE IF (WD(1:4).EQ.'WMIN' ) THEN
CALL WTMIN

./source/energy.f の中で、

1. サブルーチン“ENERGY”の中のエネルギー項呼び出しセクションで、
“bond angle database energy”項目(157行目より)の後方に以下の行を追加する。

C
IF (QENER(SSCSMIN)) THEN
CALL CSMIN(RENR(SSCSMIN), 'ENERGY ')
IF (TIMER.GT.1) CALL DSPCPU(' ENERGY: after CSMIN term')
END IF

2. スロットを定義するサブルーチン "ENEINI"の中で(241行目より)、
“if defined(CNS_SOLVE_COMPILE)”項目の最後尾(303行目の後ろ)に以下の行を追加する。

QENER(SSCSMIN)=.TRUE.
ANER(SSCSMIN)='SMIN'

./source/ener.incにおいて、以下の行を追加する。

1. 24行目あたり

INTEGER SSCSFIT, SSCSMIN

2. 60行目あたり

PARAMETER (SSCSFIT=38)
PARAMETER (SSCSMIN=39)

./instlib/machine/supported/linux/Makefile.headerの18行目、
CFLAGS = -O -ffast-math -DCNS_ARCH_TYPE_$(CNS_ARCH_TYPE) $(EXT_CCFLAGS)
の次に以下の行を追加する。

INCLUDES =
LIBS = -lm

./instlib/source/Makefile.protoにおいて、

1. 17行目“dependencies”セクションの記述を以下のように修正。

(修正前)
DEPENDS = $(OBJS) dmemory.o machine_c.o

(修正後)
SHTX = Dshiftx.o Nn.o Ssbond.o Residue.o Hetatm.o Vector.o Torison.o \
Cs.o Phipsi.o Cspline.o Hydrogens.o Rings.o Es.o Proline.o Hbond.o \
Optimize.o Display.o Dss.o
DEPENDS = $(OBJS) $(SHTX) dmemory.o machine_c.o

2. 45行目あたりの“rule for the executable itself”セクションの直前に、
“./sas_cns/rule_shiftx.txt”に書かれている記述文すべてを挿入します。

3. “rule for the executable itself”セクションの中の以下の行を修正します。

(修正前)
$(LD) -o cns_solve-$$cns_string.exe $(OBJS) dmemory.o machine_c.o \

(修正後)
$(LD) -o cns_solve-$$cns_string.exe $(OBJS) $(SHTX) dmemory.o machine_c.o \

4. CNSのコンパイル

CNSsolveの場所を定義するために、“./cns_solve_env”を編集します。

18行目、setenv CNS_SOLVE '_CNSsolve_location_' の部分を、インストールするCNSプログラムの場所に置き換えます。

setenv CNS_SOLVE '~/cns_solve_1.1/'

CNSをコンパイルします。

自分のPCにインストールされているFortranコンパイラを確認して、以下のコマンドを使い分けてください。

make install

または、

make g77install

(注)CNSのインストール詳細と利用方法については CNSsolveのウェブサイトを参照してください。

無事にコンパイルが終了したらシェルの環境変数を設定します。 自分が利用するシェルの設定ファイルに以下の行を追加します。

・Cシェルの場合

vi $HOME/.cshrc
source $HOME/cns_solve_1.1/cns_solve_env

・Bシェルの場合

$ vi $HOME/.bashrc
. $HOME/cns_solve_1.1/.cns_solve_env_sh (注:先頭の“.”(ドット)は必要です)

そして、上記のファイル(“.cns_solve_env_sh”)を編集します。

$ vi $HOME/cns_solve_1.1/.cns_solve_env_sh

18行目を、以下のように記入します。

CNS_SOLVE=$HOME/cns_solve_1.1/

保存したら、シェル窓を閉じてもう一度立ち上げます。

5. ShiftXの変更について

すべての数値パラメータは、倍精度数として処理されるように変更されます。

“main.c”はCNSのサブルーチンとなるように変更しました。 ファイル名は“Dshiftx.c”です。

1. 座標、原子名、そして原子番号は PDBファイルからではなくCNSから引き渡されます。
2. サブルーチン“ReadCSConfig”の初期化は最初のMDステップのみで実行されます。
3. Rz構造中の全てのパラメータは毎回の“Dshiftx.c”への訪問毎に初期化されます。
4. 予測された化学シフトに課される経験的な制限は除外しました。

“Dss.c”

1. 二次構造エレメントの帰属は 導関数計算ループ中にスタティックとなります。

“Hbond.c”

1. 水素結合は導関数計算ループ中にスタティックとなります。
2. HBパートナーはここで特定され、後の使用のためRz構造中に保存されます。

“Es.c”

1. あまりに近傍にコンタクトした2原子間に対するES効果の計算は避けました。

“Optimize.c”

1. ファクターテーブルにおいて、
パラメータchi, chi+1, chi-1, ss, ssp1, ssm1, ha1bond, ha2bond, hnbond, obondは、
三次スプライン補間によって平滑化しました。
2. ハイパーサーフェスの参照は新しいMDステップ毎に実行されます。
同じMDステップでの導関数計算ループの間、 その参照値は対象となる原子を含む残基、
さらに2つ前後の残基に対してのみ更新されます。
水素結合パートナーを含んだ残基に対しても更新がなされます。
同じMDステップにおいて導関数計算ループ直前に参照された値は、他の残基に使用されます。
3. サブルーチン“twoSplineLookup2”において, 補間したいポイント周辺で局所的に補間が実行されます。

“minerca1.h”
“minercb1.h”
“minerco1.h”
“miner15n1.h”

1. 平滑化されたパラメータに対するハイパーサーフェスがラップされます。