「lctfDetermination(API)」の版間の差分
提供: Eospedia
(→API) |
(→最小二乗法) |
||
(同じ利用者による、間の8版が非表示) | |||
行1: | 行1: | ||
− | DataManip/ctfInfo/src/'''lctfDetermination'''は[[ctfDetermine]] | + | 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 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/lctfDeterminationはCTF推定のための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 |
ミニマックス法
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);