#author("2019-11-26T17:37:08+00:00","default:sysosa","sysosa") #author("2020-02-15T15:24:13+00:00","default:sysosa","sysosa") EnvironmentModulesを実際に使用するに当たって、PATH環境変数らの遷移を確認してみる ログイン直後のbash/tcsh(csh)のパスは下記となっている(CentOS7.6) #code(nonumber){{ bash /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/$USER/.local/bin:/home/$USER/bin tcsh(csh) /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin }} 仮に Relion-3.0-beta-2 の&color(magenta){modulefile}; が下記として #code(nonumber){{ #%Module1.0 prepend-path PATH /Appl/relion-3.0-beta-2/bin prepend-path PATH /usr/lib64/openmpi/bin prepend-path LD_LIBRARY_PATH /usr/lib64/openmpi/lib }} そして、eman2.22 の&color(magenta){modulefile}; が下記とした場合、 #code(nonumber){{ #%Module1.0 prepend-path PATH /Appl/eman2.22/bin }} 先に Relion をmoduleコマンドでloadして、それからEMAN2をloadすると mpirun はEMAN2由来に限定されてしまう。 #code(nonumber){{ [saber@c ~]$ module load relion/3.0-beta-2 [saber@c ~]$ module load eman2/2.22 [saber@c ~]$ which mpirun /Appl/eman2.22/bin/mpirun [saber@c ~]$ }} 全体のPATHから見ると下記になる。 #code(nonumber){{ [saber@c ~]$ echo $PATH /Appl/eman2.22/bin:/usr/lib64/openmpi/bin:/Appl/relion-3.0-beta-2/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin [saber@c ~]$ }} 「prepend-path」を使用しているから仕方ないのだが、逆にappend-pathで環境変数の末尾につけるとOS提供のpythonが使われる。 この辺は難しい。 単に、アプリ毎にmoduleをloadさせればいいのかな?って思っている。 なら再度relionをロードすれば..と思えるが、既にあるのでloadしてくれないです。 結局は eman2/2.22 をunload させればOKとなる。 ***modulefile サンプル [#ya00d424] relion-3.0-beta-2 #code(nonumber){{ #%Module1.0 set RELION /Appl/relion-3.0-beta-2 set mpi /usr/lib64/openmpi prepend-path PATH $RELION/bin:$mpi/bin prepend-path LD_LIBRARY_PATH $RELION/lib:$mpi/lib setenv RELION_QSUB_TEMPLATE $RELION/bin/qsub.sh setenv RELION_QUEUE_NAME s3 setenv RELION_QUEUE_USE false setenv RELION_CTFFIND_EXECUTABLE /Appl/ctf/ctffind4.exe setenv RELION_MOTIONCOR2_EXECUTABLE /Appl/local/bin/MotionCor2 setenv RELION_GCTF_EXECUTABLE /Appl/Gctf/bin/gctf setenv RELION_RESMAP_EXECUTABLE /Appl/local/bin/ResMap }} relion-2.1 #code(nonumber){{ #%Module1.0 set RELION /Appl/relion-2.1 set mpi /usr/lib64/openmpi prepend-path PATH $RELION/bin:$mpi/bin prepend-path LD_LIBRARY_PATH $RELION/lib:$mpi/lib setenv RELION_QSUB_TEMPLATE $RELION/bin/qsub.sh setenv RELION_QUEUE_NAME s3 setenv RELION_QUEUE_USE false setenv RELION_CTFFIND_EXECUTABLE /Appl/ctf/ctffind4.exe setenv RELION_MOTIONCOR2_EXECUTABLE /Appl/local/bin/MotionCor2 setenv RELION_GCTF_EXECUTABLE /Appl/Gctf/bin/gctf setenv RELION_RESMAP_EXECUTABLE /Appl/local/bin/ResMap }} eman2.12 #code(nonumber){{ #%Module1.0 set EMAN2DIR /Appl/eman2.12 setenv EMAN2DIR $EMAN2DIR prepend-path PATH $EMAN2DIR/bin:$EMAN2DIR/extlib/bin prepend-path PYTHONPATH $EMAN2DIR/lib:$EMAN2DIR/bin }} eman2.22 #code(nonumber){{ #%Module1.0 set EMAN2DIR /Appl/eman2.22 setenv EMAN2DIR $EMAN2DIR append-path PATH /Appl/eman2.22/bin }} eman2.3 #code(nonumber){{ #%Module1.0 set EMAN2DIR /Appl/eman2.3 setenv EMAN2DIR $EMAN2DIR append-path PATH $EMAN2DIR/bin }} このmodulefileをロードする前に relion 関係をunloadする必要がある。mpirunが被るため。 -phenix #code(nonumber){{ #%Module1.0 # set phenix /Appl/phenix-1.17.1-3660 # setenv PHENIX $phenix setenv PHENIX_VERSION 1.17.1-3660 prepend-path PATH $phenix/build/bin }} -coot PATHで定義するとpythonが使えなくなる #code(nonumber){{ #%Module1.0 # set-alias coot /Appl/coot-Linux-x86_64-rhel-6-pre-release-gtk2-python/bin/coot }} -pymol #code(nonumber){{ #%Module1.0 prepend-path PATH /Appl/pymol/bin }} ***使っているshellで分ける [#c855fe50] bashとcshで「RELION_QSUB_TEMPLATE」を分けるとかできそう #code(nonumber){{ #%Module1.0 if { $env(SHELL) == "/bin/bash" } { setenv RELION_QSUB_TEMPLATE $RELION/bin/qsub.sh } elseif { $env(SHELL) == "/bin/csh" } { setenv RELION_QSUB_TEMPLATE $RELION/bin/qsub.csh } elseif { $env(SHELL) == "/bin/tcsh" } { setenv RELION_QSUB_TEMPLATE $RELION/bin/qsub.csh } }} そうすると、qsub.sh/qsub.cshを用意する必要があるけど、特にqsub.csh内でmodule loadが使えるようになる