SSブログ

照度分布計算その9 - パラメータ設定 [回折による照度分布計算]

回折計算の実装。何度か出てきたパラメータを設定するクラスSParameters。

このクラスのインスタンスはアプリケーションにひとつの、いわゆるシングルトン。インターフェイスは

@interface SParameters : NSObject {
    NSMutableDictionary	*parameters;
    NSDictionary	*defaults;
}

+ (id)currentParameters;
- (void)setValue:(id)value for:(NSString *)parameter;
- (id)querryFor:(NSString *)parameter;
- (NSDictionary *)defaultParameters;
- (NSDictionary *)currentAllSettings;
@end
-setValue:for:で値を設定して-querryFor:で読み出す。設定されていない場合はハードコードしたデフォルト値を返す。クラスメソッドcurrentParametersでシングルトンをアクセスする。NSApplicationとかNSUserDefaultsとかといっしょ。あまりまじめに書いてもしょうがないので最低限にする。
static SParameters  *parameterHolder = nil;
@implementation SParameters
- (id)init
{
    if (parameterHolder != nil)
        return parameterHolder;
    self = [super init];
    parameters = [[NSMutableDictionary alloc] initWithCapacity:30];
    [self setDefaults];
    return self;
}
+ (id)currentParameters
{
    if (parameterHolder == nil)
        parameterHolder = [[self alloc] init];
    return parameterHolder;
}
こんなの。外から設定してもらうためのparametersインスタンスを作って自分の-setDefaultsメソッドを呼ぶ。-setDefaultsメソッドはdefaultsインスタンス変数にハードコードしたパラメータ値を設定しておくだけのもの。-retain、-release、-autoreleaseとついでに-retainCountは動かないように上書きしてしておく。-setValue:for:と-querryFor:は
- (void)setValue:(id)value for:(NSString *)parameter
{
    [parameters setObject:value forKey:parameter];
}

- (id)querryFor:(NSString *)parameter
{
    id  value = [parameters objectForKey:parameter];
    if (value == nil)
        value = [defaults objectForKey:parameter];
    return value;
}
とまあ、せいぜいこんなもん。普通だったらちょっと工夫してNDMutableDictionaryのカテゴリとして実装してしまう程度のもの。

パラメータは全部で

extern NSString	*kHelpString;	// replay to help from Mathematica
//	key strings and their units
extern NSString	*kLambda;	//	um
extern NSString	*kFwhmv;	//	mm
extern NSString	*kFwhmh;	//	mm
extern NSString	*kMagnificationOfRelay;	//	O / I
extern NSString	*kRelayShiftv;	//	mm
extern NSString	*kRelayShifth;	//	mm
extern NSString	*kApertureDiameter;	//	mm
extern NSString	*kApertureShiftv;	//	mm
extern NSString	*kApertureShifth;	//	mm
extern NSString	*kFocalLengthOfConversion;	//	mm
extern NSString	*kPinholeDiameter;	//	um
extern NSString	*kPinholeShiftv;	//	um
extern NSString	*kPinholeShifth;	//	um
extern NSString	*kPinholeDefocus;	//	lambda
extern NSString	*kDistance;	//	mm
extern NSString	*kSubstrateAngle;	//	degree
extern NSString	*kSubstrateDiameter;	//	mm
extern NSString	*kReflactanceOfLloyd;	//	reflectance
extern NSString	*kSubstrateDecenter;	//	mm
extern NSString	*kPupilAreaSize;	//	mm
extern NSString	*kFftSize;	//	integer
extern NSString	*kOutputMeshStep;	//	mm

//	output flags			1 or 0
extern NSString	*kOutputLaserPlane;
extern NSString	*kOutputAperturePlane;	
extern NSString	*kOutputPrePinholePlane;
extern NSString	*kOutputPinholePlane;
extern NSString	*kOutputPostPinholePlane;
extern NSString	*kOutputIntensityPlane;
extern NSString	*kOutputDirectIllumination;
extern NSString	*kOutputMirroredIllumination;
こんだけ。後ろのコメントには決めうちしてる単位を書いてある。
また、kOutput*は出力を制御するためのパラメータで、NSNumberの0以外が設定されていると、それに対応した複素配列がMathematicaに渡る。


nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

Generic cialis

沒有醫生的處方
what is cialis http://cialisyoues.com/ Cialis reviews
by Generic cialis (2018-04-14 17:55) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。