「lctfDetermination(API)」の版間の差分

提供: Eospedia
移動: 案内検索
(API)
(最小二乗法)
 
(同じ利用者による、間の8版が非表示)
行1: 行1:
DataManip/ctfInfo/src/'''lctfDetermination'''は[[ctfDetermine]]のためのAPI です。
+
DataManip/ctfInfo/src/'''lctfDetermination'''は[[CTF]]推定のための[[API]]で、[[ctfDetermine]]にて使用しています。
  
 
== 定数 ==
 
== 定数 ==
行26: 行26:
 
==== メイン ====
 
==== メイン ====
 
mode(0x000000F0でマスク)によった方法で[[CTF]]の推定を行います。<br>
 
mode(0x000000F0でマスク)によった方法で[[CTF]]の推定を行います。<br>
 +
基本的に関数を呼び出すときのmodeは0x0000000Fでマスクをして使用しています。<br>
 
現在の[[ctfDetermine]]ではこの[[API]]を使用せずに他の[[API]]を直接呼ぶようになっています。
 
現在の[[ctfDetermine]]ではこの[[API]]を使用せずに他の[[API]]を直接呼ぶようになっています。
 
  extern void lctfDetermine(ctfInfo* result, ctfInfo* var, mrcImage* mrc, lctfDetermineInfo* linfo, long mode);
 
  extern void lctfDetermine(ctfInfo* result, ctfInfo* var, mrcImage* mrc, lctfDetermineInfo* linfo, long mode);
行83: 行84:
 
==== フィッティング法 ====
 
==== フィッティング法 ====
 
  extern void lctfDeterminationbyFittingMethods(ctfInfo* res, ctfInfo* var, mrcImage* mrc, ctfInfo* ini, long mode);
 
  extern void lctfDeterminationbyFittingMethods(ctfInfo* res, ctfInfo* var, mrcImage* mrc, ctfInfo* ini, long mode);
 +
 +
角度分布
 
  extern void angularDistributionFunctionOfSignalAndNoise(float x, float p[], float* y, float dyda[], int na);
 
  extern void angularDistributionFunctionOfSignalAndNoise(float x, float p[], float* y, float dyda[], int na);
 +
入力: x, p<br>
 +
出力: y, dyda<br>
 +
<br>
 +
p, dydaの要素は例えば下記のようなctfinfoのメンバに対応している。
 +
<table border="1">
 +
<tr>
 +
<th>No.</th>
 +
<th>対応しているctfInfoメンバ</th>
 +
</tr>
 +
<tr>
 +
<td>1</td>
 +
<td>I0</td>
 +
</tr>
 +
<tr>
 +
<td>2</td>
 +
<td>defocus</td>
 +
</tr>
 +
<tr>
 +
<td>3</td>
 +
<td>Cs</td>
 +
</tr>
 +
<tr>
 +
<td>4</td>
 +
<td>ratioOfAmpToPhase</td>
 +
</tr>
 +
<tr>
 +
<td>5</td>
 +
<td>Ain</td>
 +
</tr>
 +
<tr>
 +
<td>6</td>
 +
<td>Cc</td>
 +
</tr>
 +
<tr>
 +
<td>7</td>
 +
<td>dE</td>
 +
</tr>
 +
<tr>
 +
<td>8</td>
 +
<td>BofVibration</td>
 +
</tr>
 +
<tr>
 +
<td>9</td>
 +
<td>WhiteNoise</td>
 +
</tr>
 +
<tr>
 +
<td>10</td>
 +
<td>WhiteNoise2</td>
 +
</tr>
 +
<tr>
 +
<td>11</td>
 +
<td>BofMTF</td>
 +
</tr>
 +
<tr>
 +
<td>12</td>
 +
<td>MolecEnv</td>
 +
</tr>
 +
<tr>
 +
<td>13</td>
 +
<td>kV</td>
 +
</tr>
 +
<tr>
 +
<td>14</td>
 +
<td>(定数)511*1e3</td>
 +
</tr>
 +
<tr>
 +
<td>15</td>
 +
<td>(関数)wavelengthOfElectron(ini->kV*1e3)</td>
 +
</tr>
 +
<tr>
 +
<td>16</td>
 +
<td>Magnification</td>
 +
</tr>
 +
</table>
 +
<br>
  
 
==== 差分法 ====
 
==== 差分法 ====
行97: 行175:
 
  extern void lctfDeterminationbyMinSquareMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres ,long mode);
 
  extern void lctfDeterminationbyMinSquareMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres ,long mode);
  
 +
条件に振幅コントラスト(0.05 ~ 1.00 (+0.01))を加える
 +
extern void lctfDeterminationbyMinSquareMethodsWithAcomp(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres ,long mode);
  
 +
==== envelopeの推定 ====
 +
推定したenvelopeをresへ出力
 
  extern void EnvelopeDetermine(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres, long mode);
 
  extern void EnvelopeDetermine(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres, long mode);
extern void lctfDeterminationbyMinSquareMethodsWithAcomp(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres ,long mode);
+
 
 +
==== 正接曲線を使用 ====
 
  extern double lctfDeterminationByTangent(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres, long mode);
 
  extern double lctfDeterminationByTangent(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres, long mode);
  

2014年10月1日 (水) 07:16時点における最新版

DataManip/ctfInfo/src/lctfDeterminationCTF推定のためのAPIで、ctfDetermineにて使用しています。

定数

構造体

typedef struct lctfDetermineInfo {
	ctfInfo initial;

	long    ThonRing; 	
	/* For Astigmatism */
	int     flagAstigmatism;
	int    section;

	int    degree;
	double step;
	double max;
	double min;
	float  firstRingDefocus;
	float  IntensityMin;
	float  IntensityMax;
	float* noise;
} lctfDetermineInfo;

API

CTFの推定

メイン

mode(0x000000F0でマスク)によった方法でCTFの推定を行います。
基本的に関数を呼び出すときのmodeは0x0000000Fでマスクをして使用しています。
現在のctfDetermineではこのAPIを使用せずに他のAPIを直接呼ぶようになっています。

extern void lctfDetermine(ctfInfo* result, ctfInfo* var, mrcImage* mrc, lctfDetermineInfo* linfo, long mode);
mode(& 0x000000F0) 使用関数
0 lctfDeterminationbyMinMaxMethods
16 lctfDeterminationbyFittingMethods
32 lctfDeterminationbyDifferentialMethods
64 lctfDeterminationbyCovarianceMethods
96 lctfDeterminationbyMixMethods
128 lctfDeterminationbyMinSquareMethods
160, 161, 163(0x0000000Fのマスクでも判定) lctfDeterminationbyMinSquareMethods

EnvelopeDetermine

167(0x0000000Fのマスクでも判定) lctfDeterminationbyMinSquareMethodsWithAcomp
176 lmrcFSInfoScatteringAngularDistributionAverageSection

lctfDeterminationbyMinSquareMethods
lctfDeterminationByTangent
lastigmatismDetection


ミニマックス法

extern void lctfDeterminationbyMinMaxMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini, long mode);

フィッティング法

extern void lctfDeterminationbyFittingMethods(ctfInfo* res, ctfInfo* var, mrcImage* mrc, ctfInfo* ini, long mode);

角度分布

extern void angularDistributionFunctionOfSignalAndNoise(float x, float p[], float* y, float dyda[], int na);

入力: x, p
出力: y, dyda

p, dydaの要素は例えば下記のようなctfinfoのメンバに対応している。

No. 対応しているctfInfoメンバ
1 I0
2 defocus
3 Cs
4 ratioOfAmpToPhase
5 Ain
6 Cc
7 dE
8 BofVibration
9 WhiteNoise
10 WhiteNoise2
11 BofMTF
12 MolecEnv
13 kV
14 (定数)511*1e3
15 (関数)wavelengthOfElectron(ini->kV*1e3)
16 Magnification


差分法

extern void lctfDeterminationbyDifferentialMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing, long mode);

共分散法

extern void lctfDeterminationbyCovarianceMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing, long mode);

差分法+共分散法

extern void lctfDeterminationbyMixMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini, long* ThonRing,long mode);

最小二乗法

extern void lctfDeterminationbyMinSquareMethods(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres ,long mode);

条件に振幅コントラスト(0.05 ~ 1.00 (+0.01))を加える

extern void lctfDeterminationbyMinSquareMethodsWithAcomp(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,long* ThonRing,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres ,long mode);

envelopeの推定

推定したenvelopeをresへ出力

extern void EnvelopeDetermine(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres, long mode);

正接曲線を使用

extern double lctfDeterminationByTangent(ctfInfo* res, mrcImage* mrc, ctfInfo* ini,lctfDetermineInfo* linfo,floatVector* defocus,floatVector* Eres, long mode);

ヘルプ

modeの説明を出力します。

extern void lctfDtermmineUsage(FILE* fpt);