Automated EM Data Acquisition with SerialEM
本家様 http://bio3d.colorado.edu/SerialEM/
どうやらこのseralEMがMIT licenseで公開されているみたい.
入手はMercurialで可能で、
[foo@c pc]$ hg clone http://bio3d.colorado.edu/SerialEM/OpenSerialEM
[foo@c pc]$ cd OpenSerialEM
[foo@c OpenSerialEM]$
[foo@c OpenSerialEM]$ ls
AlignFocusWindow.cpp EMimageBuffer.h MacroControlDlg.h PluginManager.h* TSController.cpp
AlignFocusWindow.h EMimageExtra.cpp MacroEditer.cpp ProcessImage.cpp TSController.h
AmtCamera.tlb* EMimageExtra.h MacroEditer.h ProcessImage.h TSExtraFile.cpp*
AutoTuning.cpp EMmontageController.cpp MacroProcessor.cpp PropertyTests.h TSExtraFile.h*
AutoTuning.h EMmontageController.h MacroProcessor.h ReadFileDlg.cpp* TSPolicyDlg.cpp*
AutocenSetupDlg.cpp* EMscope.cpp MacroToolbar.cpp* ReadFileDlg.h* TSPolicyDlg.h*
AutocenSetupDlg.h* EMscope.h MacroToolbar.h* ReadMe.txt TSRangeDlg.cpp*
:
:
SerialEM.sln SerialEM.vcxproj
:
:
[foo@c OpenSerialEM]$
「ReadMe.txt」にwindows2000,xpに対応のためVS2010でVS2008のv90で構築しているとある.
[foo@c OpenSerialEM]$ head -n2 SerialEM.sln
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
[foo@c OpenSerialEM]$
と確かにVS2010のプロジェクト.
こちらで調べた限りどうもMicrosoftのMFCライブラリを使っているようで、無償で使えるVSExpress系では
MFCライブラリが備わっていないので無理。Professional版などの有償版ならMFCは含まれる
だが、2014年末にリリースされたVisualStudioCommunity2013からMFCも条件がありながらも無償で
使えるようになった。ここではこの無償版のVisualStudioCommunity2013でこのOpenSerialEMをコンパイルしてみる
VisualStudioCommunity2013のインストールらはwindows/IDE#p00c5496参照で。
このVisualStudioCommunity2013のインストール後に、「Visual Studio 2013 のマルチバイト MFC ライブラリ」もインストールします。
VS2013を起動させ、入手したOpenSerialEMにある「SerialEM.sln」を読み込む
「FILE」->「Open」->「Project/Solution...」
下図のようなセキュリティメッセージが表示されるが、「OK」ボタンを押下して進めます
「SerialEM.sln」の読み込みが完了すると、オリジナルがvs2010なのにvs2013で開いているので
下記のようなメッセージが表示される。「OK」ボタンを押下して進めます
読み込みが完了して、「Solution Explorer」には下図のように各種ファイルが読み込まれます
だが、この時点で変更された、新規に追加されたファイルは下記のみです
[foo@c OpenSerialEM]$ find . -cmin -5 |less
.
./SerialEM.vcxproj
./SerialEM.opensdf
./SerialEM.sdf
[foo@c OpenSerialEM]$
*こちらでは、sambaでmacOS/Linux/Windowsとデータ共有しています。なので目的に応じて最適なプラットホームで処理することが可能で、上記はLinuxでfindの結果を示しているだけです。
OpenSerialEMに付随している「ReadMe.txt」に
It can be compiled in VS 2013 by reading in the current solution file,
allowing it to upgrade the project, and changing preprocessor definition
_WIN32_WINNT=0x0500 to 0x0501 and adding NO_WARN_MBCS_MFC_DEPRECATION. The
64-bit version will compile without problems; the 32-bit Release version will
not link with the FFTW included in the package and that should be excluded as
described above.
とある。
コンパイル前にこの処置を施します。施す先は「SerialEM.vcxproj」なのですが、
vs2013からこれらの変更を施してみます。
まず、「Solution Explorer」の「SerialEM」フォルダを選択して、メニューから「Properties」を押下します
表示された「SerialEM Property Pages」画面にて、左ツリーから
「Configuration Properties」->「C/C++」->「Preprocessor」を選択します。
「Preprocessor」での設定項目とその定義値のリストが表示されます
ここで「Preprocessor Definitions」項目の値を変更します。
「Preprocessor Definitions」項目の値欄を選択すると「下向き」のアイコンが表示されます。ここをクリックして「Edit...」を選びます
するとさらに画面「Preprocessor Definitions」が現れる
ここに先ほどの「ReadMe.txt」に書かれた内容を反映させます。
「_WIN32_WINNT=0x0500」を「_WIN32_WINNT=0x0501」に変更して、「NO_WARN_MBCS_MFC_DEPRECATION」を加えます
*ちなみに「0x501」はWindows XP、「0x600」は Vista、「0x601」はwindows7
「OK」ボタンを押下後、「SerialEM Property Pages」画面に戻り、「OK」ボタンを押して完了です。
留意 ただし、これは現在選ばれている「Configuration」でのみ有効で、他の「Configuration」、例えば今現在「Debug」において修正したが、これは「Release」には反映されないです。
*方法があるのかも知れませんが、、
「Solution Explorer」の「SerialEM」フォルダを選択して、右クリックから「Build」を選びます。
「Output」にコンパイルの進捗が表示され、コンパイルが正常に終われば、「1 successded」と表示される
32bit/debug版は上記の通りで作成できるが、リリース版は作れない。コンパイルするには、「Debug」と同じように「Preprocessor Definitions」項目を修正して、 OpenSerialEM/Utilities/XCorr.cpp の修正も必要です。ReadMe.txtより
vs2013の「Solution Explorer」では「SerialEM/CSource Files」に位置します
[foo@c OpenSerialEM]$ diff -u /tmp/XCorr.cpp Utilities/XCorr.cpp
--- /tmp/XCorr.cpp 2017-08-13 01:51:35.103369409 +0900
+++ Utilities/XCorr.cpp 2017-08-13 01:51:49.802421492 +0900
@@ -28,14 +28,14 @@
#define FLOAT SLICE_MODE_FLOAT
#define DTOR 0.01745329252
-
+/*
#ifndef _WIN64
#define USE_FFTW
#endif
#ifdef USE_FFTW
#include "rfftw.h"
#endif
-
+*/
/*static void FFTtodfft(float *array, int nx, int ny, int idir);
static void FFTtodfft(float *array, int nx, int ny, int idir)
{
[foo@c OpenSerialEM]$
次に、「FFT.cpp」をコンパイル対象に変更します。
「Solution Explorer」で「SerialEM/CSource Files」に「FFT.cpp」があります。しかしファイルにはマークが付いていてBuild対象から外されております。これを無効にして、コンパイル対象にします。
「FFT.cpp」を選択して、「Solution Explorer」のメニューから「Properties」リンクを押下します
表示された「FFT.cpp Property Pages」画面にて、General欄の「Excluded From Build」項目の「Yes」を「No」へ変更します。
「OK」ボタンを押下して、ファイルのマークが消えたら完了です。
そうして、コンパイルを実施します
「FFT.cpp」をコンパイル対象から外します。「XCorr.cpp」を元に戻します。
vs2013の上部メニュー欄を「Release」「x64」に変更して
「Solution Explorer」の「SerialEM」フォルダを選択して、メニューから「Properties」を押下して
「SerialEM Property Pages」を開く
そこから再び「Preprocessor」から「Preprocessor Definitions」で「_WIN32_WINNT=0x0501」への修正と「NO_WARN_MBCS_MFC_DEPRECATION」の追加を行います
そうしてコンパイルを実行します。
「Solution Explorer」の「SerialEM」フォルダを選択して右クリックメニューから「Build」を選択
「Output」に進捗が掲示され、コンパイルが正常に終われば、「1 successded」と表示される
「Solution Explorer」の「SerialEM」フォルダを選択して、メニューから「Properties」を押下する。
すると「SerialEM Property Pages」が開く。
左ツリーの「Configuration Properties」から「General」を選択して、右側の
「Platform Toolset」を確認する。
ここの値を「Visual Studio 2013 - Windows XP (v120_xp)」としてコンパイルします。
これで出来たバイナリをwindowsXPマシンに運び、実行数には別途「Visual Studio 2013 の Visual C++ 再頒布可能パッケージ」が必要になるかもしれない。それは https://www.microsoft.com/ja-jp/download/details.aspx?id=40784 にて入手可能です。