install IRAF 
  Karasu List 
  Oma List 
  Ali List 
         
 toPageBottom  
 Back to TibetSiteSurvey Page  
 Back to ToshiSasaki's Page  

detailed Info on Arithmetic.exe / Microsoft Windows

[2019/07/04 by TS]
Access        since 2019/07/04

Arithmetic.exe on Microsoft Windows
GUI of Arithmetic.exe
    Q:\1ToshiPrivate\0Tos_Soft\0WindowsSoft\0MonitorImages\Arithmetic_OmaData_20121026_SunMask.jpg

(ref) Analysis Flow Chart on Site Survey Data
Q:\1ToshiPrivate\0Tos_Soft\0WindowsSoft\00_Help\FlowDiagram\Q:\1ToshiPrivate\0Tos_Soft\0WindowsSoft\00_Help\FlowDiagram.jpg
Mask image data and text data
   ( <== MaskRegions_CM1_Karasu_20070315_2.mask
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Karasu)
   ( <== MaskRegions_CM1_Karasu_20071026_TCalibBlock1.mask
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Karasu)
   ( <== MaskRegions_CM1_Karasu_20071027_TCalibBlock2.mask
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Karasu)
   ( <== MaskRegions_CM1_Karasu_20080721_TCalibBlock3.mask
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Karasu )
   ( <== MaskRegions_CM1_Karasu_200809_TCB3_Patch.mask
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Karasu)
   ( <== MaskRegions_CM2_Oma_20121019_2.reg.txt
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Oma)
   ( <== CM2_Oma_20081119090029F_StaySpot_For2008Nov.bmp(jpg)
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Oma)
   ( <== CM2_Oma_20081119090029F_StaySpot_For2009Aug3.bmp(jpg)
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Oma)
   ( <== CM2_Oma_20081119090029F_StaySpot_For2009Oct.bmp(jpg)
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Oma)
   MaskRegions_CM2_Ali_201201.reg ==> MaskRegions_CM2_Ali_201201.txt
   ( <== MaskRegions_CM2_Ali_201201.txt, CM2_Ali20111107000003_Mask2.bmp(jpg) )
 (2013-07-29) 上記適用で位置がずれているので変更 : for 2012121515094642.fits
   ( <== MaskRegions_CM2_Ali_20121215.txt
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Ali_Gar )
   ( <== MaskRegions_CM2_Ali_20130531_083418_6.txt
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Ali_Gar )
   ( <== MaskRegions_CM2_Ali_20130609_071214_2.txt
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Ali_Gar )
   ( <== MaskRegions_CM2_Ali_20130611_080114_5.txt
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Ali_Gar )
   ( <== MaskRegions_CM2_Ali_20130611_102514_2.txt
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Ali_Gar )
   ( <== MaskRegions_CM2_Ali_20130629_013624.txt <==???(Note#8: 2013-08-12)
       / Q:\00SiteSurveyData\00SiteSurveyData\04MaskFrame\Ali_Gar )

CM2_OmaMask_2008Nov.jpg

CM2_OmaMask_2009Aug3.jpg

CM2_OmaMask_2009Oct.jpg



CM2_Ali20111107000003_Mask2.jpg
Initial Data for Arithmetic.exe
    Q:\1ToshiPrivate\0Tos_Soft\0WindowsSoft\CloudMon_Arithmetic\Arithmetic.ini
   [ArithmeticControl]
   sVersion=20130929
   sEditorEXEPath=C:\Appli\1Editor\xyzzy\xyzzy.exe
   sHELPFilePath=C:\0Tos_Soft\0WindowsSoft\00_Help\HELP_Arithmetic.txt
   PostFilename=C:\\00SiteSurveyData\\00PostMessage\\PostForArithmetic.txt
   SourceDirectory=F:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\201111\20111109A\20111109AWM
   ReferenceFile=D:\\00SiteSurveyData\\02FlatField\\20070129Flat_CM1.fits
   TargetDirectory=D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2012\201212\20121213A
   bLoadFITSDirInitially=1
   sFITSFileHead=CM2_Ali
   sDirExtension1=A
   sDirExtension2=AWM
   sFrameStepToBeSelected=1
   bDisplayFramesContinuously=1
   DisplayTargetOnDS9=0
   DisplayFrameOnDS9=0
   DisplayFrames=1
   DisplayRange=1.500000
   GapMSec=150
   MaskSunPosition=1
   MaskMoonPosition=1
   MaskPixels=1
   MaskFile=C:\\00SiteSurveyData\\04MaskFrame\\MaskRegions_DS9.reg.txt
   Sum=0
   Mean=0
   Subtract=0
   SubtractUsingMaskArea=0
   SubtractUsingConstant=0
   Divide=0
   FlatField=0
   SaveFrameInFile=0
   AllowOverwrite=1
   SeqFile=C:\\00SiteSurveyData\\SeqFile\\SeqFile200703_MaskSol20080508113632.csv
   DS9Directory=C:\Appli\1Viewer\FitsViewer\ds9
   DS9_XPAPortNumber=7f000001:50398
   DisplayRefFileOnDS9=0
   UseMaskAreaFile=0
   UseMaskPixelFile=0
   MaskAreaFile=D:\00SiteSurveyData\04MaskFrame\Ali_Gar\MaskRegions_CM2_Ali_201201.txt
   MaskPixelFile=D:\00SiteSurveyData\04MaskFrame\Ali_Gar\CM2_Ali20111107000003_Mask2.bmp
   bCreateTargetDirAutomatically=1
   sSubtTargetDirname=D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2012\201212\20120112A\20121213AWS
   sDivTargetDirname=D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2012\201212\20120112A\20121213AWD
   sFFTargetDirname=D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2012\201212\20120112A\20121213AWF
   sMaskTargetDirname=D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2012\201212\20120112A\20121213AWMM
   sMaskSunTargetDirname=F:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\201111\20111109A\20111109AWMMs
   sMaskLunarDistance=60.0
   TargetFile=D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2012\201212\20120112A\20121213AW\CM2_Ali20120101000004CW.fits
   AdjustMinToZero=0
   bMaskDisplay=0
   NorthOffsetAngle=-5.26

   [SolPos]
   Mask=1
   Show=1
   ShowRadius=12
   ShowColor=255,0,0
   SolarMaskRx=12
   SolarMaskRy=12
   SolarRx=11
   SolarRy=11
   LunarRadius=5
   LunarMaskRx=5
   LunarMaskRy=5
   BGSolarRx=15
   BGSolarRy=15
   SolarX=NA
   SolarY=NA
   SolarIntAboveBG=NA
   SolarArea=NA
   SolarIntRawSum=NA
   SolarBGPortion=NA
   SolarBGMean=NA
   SolarBGTotal=NA
   SolarBGArea=NA
   LunarRx=5
   LunarRy=5
   BGLunarRx=10
   BGLunarRx=10
   LunarIntAboveBG=NA
   LunarArea=NA
   LunarIntRawSum=NA
   LunarBGPortion=NA
   LunarBGMean=NA
   LunarBGTotal=NA
   LunarBGArea=
   SolPosFilename=F:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\201111\SolarLunarIntensity_201111.csv
   SolPosDirectory=F:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\201111
   SaveInFile=0
   Year=2012
   Month=01
   Day=01
   Hour=01
   Min=33
   Sec=05
   Longitude=80:01:36.04
   Latitude=+32:19:31.72
   Elevation=5032
   PressureWS=556.43
   PressureCT2=546.71
   TemperatureWS=271.3
   TemperatureCT2=0
   TemperatureCMB=258.96
   TemperatureCMB2=257.32
   TemperatureCMH=263.66
   TemperatureCMH2=261.84
   RH_WS=11.32
   TimeZone=0
   DeltaT=64.954000
   DUT1=-0.23
   Notes=
   MaskRx=12
   MaskRy=12
   BGLunarRy=10
   DirectionNorth=180.00000
   XFOVCenter=172.809
   YFOVCenter=121.088
   Scale=1.633
	
Explanation on Arithmetic.exe
    Q:\1ToshiPrivate\0Tos_Soft\0WindowsSoft\00_Help\HELP_Arithmetic.txt
HELP of Arithmetic Procedure

晴天率判断 (2015-08-13)
・Clear Sky全快晴 1時間毎に雲を含む画像がない 	○
・Fine Sky 快晴  1時間毎に雲量 < 20%			◎(中心円は黒丸●)
・Fair Sky 晴天  1時間毎に雲量 < 50%			◎
・Cloudy Sky 曇天  1時間毎に雲量 > 50%		△
・Heavily Cloudy 濃曇天	1時間ベタ雲			▲
・Rainy 降雨  1時間毎に1フレームに雨滴がある場合	■

目的:CloudMon 像の初期解析を行う。
   1. 像のローカルGUIとds9 上への選択/連続表示
   2. 画像のピクセル積分値の計算
   3. 画像のピクセル平均値(BLANKピクセルは除く)の計算
   4. RefFile画像の画像引算(背景光差し引き)-->赤外背景光の除去
       	基準画像領域の使用
       	オフセット値の差し引き
          <== ●RefFile画像を温度データから推定できるようにすること

   5. RefFile画像の画像割算		<--#6 との違いは何?
   6. RefFile画像でのfalt-fielding 処理
   7. 画像のマスク画像によるマスクかけ処理と太陽像、月像のマスク処理
        太陽像マスク処理
        月像マスク処理	<-- masked when ZD(sun)>108deg and D(Sun-Moon) >90 deg
	最小値が負値の場合に加算して最小値を0(Zero) にする加算処理
   8. 太陽像位置、月像位置の表示
	(RA,Dec)によるマーク表示時のマークサイズ(通常 12)、画像中心位置、回転角度オフセット、画像スケールを選択
	==> サブウィンドーで設定する。
		<== ●月のサイズを変更可能(通常 5)
		<== ●太陽、月の座標は IRAF Header から取得
				Karasu		Oma				Ali
	画像中心位置(Xc, Yc)pix	(162.25,116.21) (159.25, 127.0)(M2中心に)	(170.08, 120.85)
	回転角度オフセット(度)	12.38		-8.0(-7.012から調整)		-4.06
	画像スケール(pix/deg)	1.596		1.596(Karasuと同じに)		1.644
			    (測定日)		(2012-11-05)	(2012-11-20)
			    (2013-03-20:2011-01-02 の全日快晴データ使用:20130320_ImageCenter.xlsx)
		導出方法:MeasureArea で太陽南中位置を季節の異なる日でpix位置測定
		画像中心位置(Xc, Yc)pix:画像スケールを用いて太陽南中位置から導出。
			DS9で表示して Zoom 表示でM2中心位置と比較 -> M2中心位置の方が太陽像追随が良い。
		回転角度オフセット(度) :太陽南中位置の並びから南中線を求めて、角度オフセットを導出
		画像スケール(pix/deg)  :太陽南中位置間のスケールで導出
   9. 太陽像、月像の強度計算、ファイル出力
        使用値:太陽/月位置(xc,yc)、半径(SolRx/SolRy)、背景光外周半径(BGRx, BGRy)
	太陽/月位置(xc,yc)は天体歴計算から求められた位置をフレーム変換して求めたピクセル座標。
	   int xc = atoi(m_sSolPosSolarX)/*-1*/; //IRAF/MaskData/ArithI/O base=1, 四捨五入 in Arith
	   int yc = atoi(m_sSolPosSolarY)/*-1*/;
	   int SolRx = atoi(m_sSolPosSolarRx);
	   int SolRy = atoi(m_sSolPosSolarRy);
	   int BGRx = atoi(m_sSolPosBGRx);
	   int BGRy = atoi(m_sSolPosBGRy);
	導出値:太陽/月光強度重心(Xgrav,Ygrav)、
	   m_sSolPosXgrav.Format("%f", xg/*+1*/ );//IRAF/MaskData/ArithI/O base=1, 四捨五入 in Arith
	   m_sSolPosYgrav.Format("%f", yg/*+1*/ );//IRAF/MaskData/ArithI/O base=1, 四捨五入 in Arith
	強度基準Itheshold以上の太陽/月光強度のある背景光を覗いた太陽/月光強度積分、
	   m_sSolPosSolarIntAboveBG.Format("%ld", SolIntAboveBG );
	強度基準Itheshold以上の太陽/月光強度のある太陽面積
	   m_sSolPosSolarArea.Format("%ld", SolArea );
	半径(SolRx/SolRy)内 の太陽/月光強度積分
	   m_sSolPosSolarIntRawSum.Format("%ld", SolIntSum );
	太陽/月位置(xc,yc)を中心として半径(SolRx/SolRy)内の背景光の強度:BGPortion = (long)(BGMean*SolArea);
	   m_sSolPosBGPortion.Format("%ld", BGPortion );
	太陽/月位置(xc,yc)を中心として半径(SolRx/SolRy)の外から背景光外周半径(BGRx, BGRy)までの強度の平均
	   m_sSolPosBGMean.Format("%f", BGMean );
	背景光外周半径(BGRx, BGRy)内の強度積分
	   m_sSolPosBGTotal.Format("%ld", BGIntSum ); // including Solar intensity
	背景光外周半径(BGRx, BGRy)内の面積
	   m_sSolPosBGArea.Format("%ld", BGArea );

	太陽/月位置(xc,yc)を中心として半径(SolRx/SolRy)内 の太陽/月光強度を背景光を引いてを積算する。
	背景光は、太陽/月位置(xc,yc)を中心として半径(SolRx/SolRy)の外から背景光外周半径(BGRx, BGRy)までの強度の平均。
	太陽/月光最大強度 max(背景光強度を含めている)を求める。
	半径(SolRx/SolRy)内 の背景光を引いた太陽/月光強度から太陽/月光強度重心を求める
	強度基準Ithesholdとして、背景光ナシの最大太陽/月光強度の1/3以上の太陽/月光強度を用いる。
	そのばあい、最大太陽/月光強度が求められていない場合は強度基準Ithesholdとして背景光強度平均を用いる。
	----------

-----
太陽像位置、月像位置の表示のみの処理
	Direcotryを選択肢、Select w/Step でソースFITSを選択
	■ Display Frames continuously を選択
	■ Show Solar/Lunar Position を選択
	■ Display Frames   □ on DS9 (DS9表示なしだと早い) (<== [5] Exec Atithmetic にある)
	[5] Exec Atithmetic 押下
	==> Arithmetic GUI (左側)に FITS ファイルイメージとSolar/Lunar 位置マークが表示される。

	・Mask □display を選択して、中央左画面に Mask 画像が表示される。(ただし上側4/5の範囲のみ)。
	・Exec Arithmetic の □Display Frames を選択して、中央右画面に処理後の画像が表示される。
	・Display on DS9, on DS9 を選択すると画像がDS9上に表示される(XPAアドレスを正しく設定が必要)が、
		処理が遅くなる。

   Mask w/Sun & Moon と Mask のみの処理のGUIボタン操作
	M : ■ Mask pixels and Solar/Lunar -> Mask のみ ([MaskFile] & [MaskPixel])
		□ Mask Sun position
		□ Mask Moon position
		□ Adjust Min to Zero(0) when ...
	      ■□ Show Solar/Lunar Position -> Off のこと。∵位置計算がNGで左GUI上の表示がずれる。
	Ms: ■ Mask pixels and Solar/Lunar -> Mask とSolar/Lunarのマスク両方
		■ Mask Sun position
		■ Mask Moon position
		□ Adjust Min to Zero(0) when ...
	      ■ Show Solar/Lunar Position

  太陽、月強度の計算、表示、ファイル保存
   	□ Save processed frma in file	
	■ Mask pixels and Solar/Lunar -> Mask のみ ([MaskFile] & [MaskPixel])
		□ Mask Sun position
		□ Mask Moon position
		□ Adjust Min to Zero(0) when ...
	      ■Show Solar/Lunar Position
	ファイル保存はサブウィンド Setup Solar Position で
	     ■ Save in File D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\SolarIntensity_201111.txt
		(出力ファイルのサンプルはこの文章の最後に添付)
	太陽、月強度の表示はサブウィンド Setup Solar Position に表示。

Mask画像の作成については、(text マスクデータとbmp マスクデータ画像の2種類のファイルがある)
		\00SiteSurveyData\04MaskFrame\0HowToMakeMaskPixelFile.txt
	を参照。花子フォトレタッチで作成、変更可能。
	Oma 2009Oct 用Mask画像ファイル: CM2_Oma20081119090029F_StaySpot_For2009Oct.bmp
	この画像を花子フォトレタッチで読み込んで、修正後、bmpファイル保存をすれば良い。

   ●text マスクデータの作成
	DS9 を実行。
		DS9 File=> XPA => Information で XPA_METHOD: c0a80bfa:50964 を Edit/Copy する。
		Arithmetic DS9 XPA Port に入力
			   レ display on DS9 => Display Frame 押下 => DS9 に fits 画像が表示される。
		DS9 階調表示は、マウス右ボタン押下移動で行う。
		DS9 => region Circle/Polygon で作図, □ で変形可能
			=> save -> edit -> load で確認すること
	Save 下データファイルに MaskOutside, MaskInside を加える(下記)。
	=> Arithmetic でこのピクセル画text マスクデータをマスクデータとして使用。

	--- MaskRegions_CM2_Oma_20121019_2.reg.txt --- (in D:\00SiteSurveyData\04MaskFrame)
   # Region file format: DS9 version 4.1
   # Filename: Z:/00SiteSurveyData/000_A40M_Images_Analysed/02_Oma/2008/200811/20081124A/20081124AW/CM2_Oma20081124041224CW.fits
   #global color=green dashlist=8 3 width=1 font="helvetica 10 normal"
	      select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1
   physical
   circle(159.39465,126.95652,116.37631) MaskOutside
   circle(159.39465,126.15385,26.0) MaskInside
   polygon(157.86058,128.49059,161,128.02676,163.67559,5.4849498,157.86058,5.5562289) MaskInside
   polygon(51.870344,192.20658,151.36789,133.37793,144.41137,132.30769,50.230769,186.35452) MaskInside
   polygon(175.44816,137.65886,266.41806,193.84615,270.16388,187.95987,176.55633,132.34563) MaskInside
   #polygon(178.65886,250.03344,236.45151,220.06689,222.53846,192.2408,163.67559,216.32107) MaskInside
   #polygon(158.32441,73.979933,161.53512,79.331104,178.12375,5.4849498,163.73992,5.5492872) MaskInside

   ●bmp マスクデータ画像の作成
			see 0HowToMakeMaskPixelFile.txt (D:\00SiteSurveyData\04MaskFrame\)
	MakeAnimation プログラムで fits -> gif ファイルに変換
		レ FITS -> GIF
		FITS 画像をマウスで1枚クリック => Run 押下
			=> Target Directory D:\00SiteSurveyData\04MaskFrame\test にgif化された FITS 画像が出力
				(gif ファイルは 90度回転している)
	IfranView で、画像 => 画像の情報で、画像解像度 X: 320 Y:240 pixel を確認
	花子フォトレタッチでマスクイメージを作成
		新規画像作成 320x24 
			=> 背景画像に 上記作成の gif を IfranView でマウス操作で全画像をコピー
			=> 花子フォトレタッチでペーストで挿入(リターンキー押下で確定)
		=> レイヤーサブメニューで 新規レイヤーを設定 
			=> その新規レイヤー上でマスク画像を作成する。(x8 表示)
				ツール/を選択枝、●、■、線でサイズを選択して描画。
		=> 背景画像を青ボタンをクリックして非表示にし、レイヤーサブメニューで全レイヤー結合 
			(--> データのないところが白で埋まる)
		=> 画像サブメニューで => 画像の色数 => モノクロ 
			---> ”指定されたスタイルの新しい画像として開きます”-> 別画像として作成される。
		=> 画像を保存する: ファイル => 名前をつけて保存 => bmp を選択し、bmp保存設定で、256色とする。
			(∵<==Arithmetic では1バイト/ピクセルで読み込む)
	IfranView で表示し、画像情報を確認
		画像 => 画像情報:
			もとの大きさ 320 x 240  Pixels (4:3)
			現在の色数	256   (8 BitsPerPixel)
			メモリ上のサイズ 76.04  KB (77,864 Bytes)
		もし、画像データが0,256値でない場合には、IfranView で読み込み、
			画像 => 減色 => 白黒2色(1ビット) => 増色 => 256色(8ビット) の後で、BMPで保存する。
	=> Arithmetic でこのピクセル画像をマスクデータとして使用。


実行にあたっては、以下の2つが可能
	A. 個別ディレクトリーに基づく処理
	[B. SeqFile に従っての連続処理] <== 複数SubDir 処理との切り分けが難しいので、ナシとする。(2012-10-20)


処理の流れ
L996: OnBnClickedArithmetic()
	-> first read refernce file: ReadFITS( m_ReferenceFile, ...) w/DataFormat="I2", "I4", "R4"
	   load Mask data
	     LoadMaskAreaData(m_MaskAreaFile)	// in pDoc->Mask_AreaType[], pDoc->Mask_Pos[], pDoc->nMaskAreas[]
	     LoadMaskPixelData(m_sMaskPixelFile);	// MaskPixel data is stored in pDoc->MaskPixelData[]

	   get Area data to be averaged
	     pDoc->measureAreas( pDoc->DataFormat, pDoc->nAxis1,... )
	-> treat image froma loop : for( iselect=0; iselect< nLoop; iselect+=iStep )
		割込制御(中断など) TreatWndMessage(); // treat window message in order to interrupt this loop
	-> 個別 Image 処理	m_CurrentFrame = getSourceFileName( currentFileIndex );
	        SeqFile による自動処理
		   SeqFileからのパラメータ解読 retrieveSeqParameters()
		
		出力 Directory がない場合には作成
		   if( CheckDirectory( m_TargetDirectory ) == FALSE )
				CreateDirectory( m_TargetDirectory );
		入力ファイル設定 => m_CurrentFrame (fullpath) に保存
			getCurrentIndex( m_CurrentFrame, // return fullpath
					  /*CString */ m_SourceDir,
					  ///*CListBox */m_SourceList,
					  /*CString * */sourceFileList,
					  /*int */ NsourceFileList,
					  /*int **/&index );

		-> FITS Header読み込み
			Headerデータ pDoc->nHdu = pDoc->ReadFITS( m_CurrentFrame, pDoc->Hdu, 
				BITPIX, NAXIS1, NAXIS2, DATE-OBS, UT, SITELAT, SITELONG, LONGPOLE, 
		-> 太陽位置マスク処理		if( m_bMaskSun == TRUE || m_bShowSolarPos == TRUE/* 
			setSolarVariables();
			SendData(m_pSetupSolar, "Get Solar Position" );
				==> in SetupSolar.cpp: Run_SPA( &spa );

			// get pixel coord of solar position
			nSolarMaskAreas = // 1: Sun above Horizon, 0:under ground
				GetSolarPixels( SolarMask_AreaType, SolarMask_Pos, SolarMaskFlag, "circle", 
					(float)atof(m_sSolPosMaskRx), (float)atof(m_sSolPosMaskRy) );
		-> FITS データr読み込み	// Read data from cuurent FITS file to be stored in short/long/float array
		-> Draw current frame 	DrawCurrentFrame( /*CDC **/dc, /*CRect */rect );
		-> 個別オペレーション
			1) if( m_Sum == TRUE || m_Mean == TRUE )
				pDoc->getAddData( m_CurrentFrame, ... )
					==> sumArray[j][i] += Array[j][i];
					     sumArray[j][i] /= countArray[j][i];
						or sumArray[j][i] = BLANK;
				pDoc->saveTargetData( m_TargetFile, ... )
			2) if( m_Subtract == TRUE )/* operation ="Subtract";*/
				if( m_UseMaskArea == TRUE ) pDoc->measureAreas( pDoc->DataFormat, ... )
				pDoc->getSubtractData( m_CurrentFrame, ... );
					==> subtArray[j][i] = Array[j][i] - refArray[j][i];
				pDoc->saveTargetData( m_TargetFile, ... )
			3) if( m_Divide == TRUE )/* operation ="Divide";*/
				pDoc->getDivideData( m_CurrentFrame, ... )
					==> divArray[j][i] = Array[j][i] / refArray[j][i];
						or divArray[j][i] = BLANK; 

				pDoc->saveTargetData( m_TargetFile, ... )
			4) if( m_FlatField == TRUE )/* operation ="FlatField";*/
				pDoc->getFlatFieldData( m_CurrentFrame, ... )
					==> flatArray[j][i] = (short)(Array[j][i] * lrefMean / refArray[j][i]);
							or divArray[j][i] = BLANK; 
					pDoc->saveTargetData( m_TargetFile, ... )
			5) if( b_MaskPixels == TRUE )/* operation ="Mask";*/
				if( pDoc->nMaskAreas > 0 || m_bUseMaskPixelFile == TRUE )
					pDoc->doMaskData( m_CurrentFrame, ..., lArray[][], lmaskArray[][],... )
						==>
						if( m_bUseMaskPixelFile == TRUE )
 							if( MaskPixelData[j][i] == 1 )
							lmaskArray[j][i] = (long)LBLANK;
						    else
							lmaskArray[j][i] = lArray[j][i];
						// nMaskAreas > 0
						for( int n=0 ; ngetSolarIntensity( nSolarMaskAreas, 
	                                                           <== これは I4 でしかしていない。要修正

				if( m_bMaskSun == TRUE && nSolarMaskAreas > 0 )
					pDoc->doMaskData( m_CurrentFrame, ..., lArray[][], lmaskArray[][],... )
				if( m_bAdjustMinToZero == TRUE )
					pDoc->AdjustMinToZero(... )
						==> imaskArray[j][i] -= (int)min;

				pDoc->saveTargetData( m_TargetFile, ... )
					"Sum"		-> TargetFile = sumTargetFile(=TargetFile)
					"Mean"		-> TargetFile = sumTargetFile(=TargetFile)
					"Subtract"	-> TargetFile = subtTargetFile
					   subtTargetFile.Format("%s\\%sS.fits", m_TargetDirectory, filenameBody );
					"Divide"	-> TargetFile = divTargetFile
					   divTargetFile.Format("%s\\%sD.fits", m_TargetDirectory, filenameBody );
					"FlatField"	-> TargetFile = flatTargetFile
					   flatTargetFile.Format("%s\\%sF.fits", m_TargetDirectory, filenameBody );
					"Mask"		-> TargetFile = maskTargetFile
					   maskTargetFile.Format("%s\\%sM.fits", m_TargetDirectory, filenameBody );
					==> WriteFITS( TargetFile, ... )

				<== m_TargetFile は入力ファイル(full path)
						L2140: OnBnClickedTargetDir()
							getDirectoryFromList(&m_TargetFile);
				GUI 変数
					Source Directory -> m_SourceDir
					Target Directory -> m_TargetDirectory
					Target File -> m_TargetFile

		L2016:	[ここまででループ処理終了]

	Mask データの読み込み
	L808: OnBnClickedLoadMask()
		pDoc->LoadMaskAreaData(m_MaskAreaFile); --> Text データを読み込んでデコード
		pDoc->LoadMaskPixelData(m_sMaskPixelFile);
			==> L3602: ReadBMPFile( sMaskPixelFile, /*BYTE*/ MaskPixelData/*[240][320]*/ ) == FALSE )
		   MaskPixelFile=D:\00SiteSurveyData\04MaskFrame\CM2_Oma20081119090029F_5_StayFlagTowerSpotOnly.bmp
		作成方法は、"0HowToMakeMaskPixelFile.txt" 参照



個別演算の説明(2010-01-29)
・measureAreas() -> getMeasureCircle()
		  getMeasureBox()
		  getMeasureEllipse() (<== 内実は未インストール)
	の中で、加算するが、BLANK 値の場合には、continue で加算をスキップしている。

・Adjust Min to Zero(0) when Min<0 は、統計計算で Min, Max を求め、Min が負値の場合には、全てのpixelで
	I(pix) = I(pix) - Min
	演算を行っている。Sky background 差し引きなどの時に引きすぎを補正するため。
	ただし、その補正演算の場合にも、BLANK 値の場合には補正演算は行っておらず、
	BLANK値のママにしている。
	コメントを追記する。
	(eg. correct for over subtraction of every pixel, except of BLANK pixels )
・Mask region file は、DS9作成 Region データに、MaskOutside/MaskInside を各項の最後に加えている。
	加えたデータファイルは、DS9では読み込めない。
	# Arithmetic Mask data with MaskOutside/MaskInside
	DS9とArithmetci の原点1pixelずれには対応していないが、
	領域を広い目にとっているので概略的には問題ないだろう。四捨五入演算もはいっている。
・太陽/月光強度重心(Xgrav,Ygrav)等の導出
	SetupSolar.cpp
		BOOL getSolarLunarIntensity( int nSolarMaskAreas, int nLunarMaskAreas, 
						BOOL m_bSaveResultantFileInFile,
						CString m_sCurrentFrameFull, CString m_MaskAreaFile, 
						int nAxis1, int nAxis2, long lmaskArray[240][320],
						long min, long max,
						CString current_LocalDate, CString current_LocalTime );
	=> if( nSolarMaskAreas > 0 )	// Sun in the sky (daytime)
				// nSolarMaskAreas = // 1: Sun above Horizon, 0:under ground
		calculateSolarIntensity( nAxis1, nAxis2, lmaskArray );	// data longt[]
	   if( nLunarMaskAreas > 0 )	// Moon in the sky
				// nLunarMaskAreas = // 1: Moon above Horizon, 0:under ground
		calculateLunarIntensity( nAxis1, nAxis2, lmaskArray );	// data shortt[]
	   saveSolarLunarIntensityInFile( SaveResultantFileInFile, CurrentFrame, sMin, sMax,
				  m_maskedTargetFile, current_LocalDate, current_LocalTime );

----------
遠隔操作commands (2010-01-29, 2007-06-01) PostMessage command
	start arithmetic (operation)
	stop arithmetic (operation)
	continue arithmetic (operation)

	select all (frames)
	select frame N
	set start index N
	set end index N
	clear select

	 set dir source|target DirName
    		C:\0WORK\TibetSiteSurvey\0FLIRA40M_IRCamera\A40M_Images
	set targetfile FileName
	set referenceFile FileName
		C:\0WORK\TibetSiteSurvey\0FLIRA40M_IRCamera\A40M_Images\0FlatField\20070427.FlatMean.fits
	set maskFile FileName
		C:\0WORK\TibetSiteSurvey\0FLIRA40M_IRCamera\A40M_Images\0MaskFrame\MaskRegions_DS9.reg.txt
	load mask
	set maskAreaFile
	set maskPixelFile filename
	set use mask area file on|off
	set use mask pixel file on|off

	display mask on|off 
	set display source|target on DS9 on|off

	clear arithmetic 
	set sum on|off
	set mean on|off
	set subtract operation on|off
	set subtract with mask area on|off
	set subtract with constant on|off
	 set subtract constant value fff
	set divide on|off
	set flatfield on|off
	set mask operation on|off
	 set mask at sun on|off
	 set mask at moon on|off

	set display frame on|off -> m_DisplayFrames
	set display result frame  -> OnBnClickedDisplayTarget

	#show parameter all|keyword  // show all/particular parameter
	show parameter all  // show all parameters
	set display range fff <-- f_DisplayRange;
	set operation wait nnn <--  i_GapMSec;

  ------------
				    
   2,J:\00SiteSurveyData\000_A40M_Images_Analysed\02_Oma\2008\200811\20081119A\20081119F,1,CM2_Oma20081119083729F.fits,
   J:\00SiteSurveyData\000_A40M_Images_Analysed\02_Oma\2008\200811\20081119A\20081119FMs,
   FF,0,FFFile,-,MeasureArea,0,AreaFilename,-,MeasureResultFilename,-,
   SkySubtract,0,SkyFilename,-,MaskPixels,1,UseMaskArea,1,MaskAreaFilename,
   C:\00SiteSurveyData\04MaskFrame\MaskRegions_CM2_Oma_final2.reg.txt,
   UseMaskPixelFile,1,MaskPixelFilename,C:\00SiteSurveyData\04MaskFrame\CM2_Oma20081119090029F_5_StayFlagTowerOnly2.bmp,
   MaskAtSolar,1,MaskSolarSpot,0,Histogram,0,HistogramFilename,-,WholeDay,0,
   HistHourMode,0,MakeAnimation,0,AnimationFilename,-
   
  ==> Decode すると
-------------------------------
#00: 2,
#01: J:\00SiteSurveyData\000_A40M_Images_Analysed\02_Oma\2008\200811\20081119A\20081119F,
#02: 1,
#03: CM2_Oma20081119083729F.fits,
#04: J:\00SiteSurveyData\000_A40M_Images_Analysed\02_Oma\2008\200811\20081119A\20081119FMs,
#05: FF,
#06: 0,
#07: FFFile,
#08: -,
#09: MeasureArea,
#10: 0,
#11: AreaFilename,
#12: -,
#13: MeasureResultFilename,
#14: -,
#15: SkySubtract,
#16: 0,
#17: SkyFilename,
#18: -,
#19: MaskPixels,
#20: 1,
#21: UseMaskArea,
#22: 1,
#23: MaskAreaFilename,
#24: C:\00SiteSurveyData\04MaskFrame\MaskRegions_CM2_Oma_final2.reg.txt,
#25: UseMaskPixelFile,
#26: 1,
#27: MaskPixelFilename,
#28: C:\00SiteSurveyData\04MaskFrame\CM2_Oma20081119090029F_5_StayFlagTowerOnly2.bmp,
#29: MaskAtSolar,
#30: 1,
#31: MaskSolarSpot,
#32: 0,
#33: Histogram,
#34: 0,
#35: HistogramFilename,
#36: -,
#37: WholeDay,
#38: 0,
#39: HistHourMode,
#40: 0,
#41: MakeAnimation,
#42: 0,
#43: AnimationFilename,
#44: -
-------------------------------
(太陽像、月像強度計算出力のサンプル)
D:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\SolarIntensity_201111.txt

   SolarAzimuth,138.489667,SolarZenith,59.807944,SunRise,01:01:30,SunSet,11:45:12,
   XSolarPix,99.866,YSolarPix,189.680,XSolarGrav,100.086995,YSolarGrav,188.869722,SolRx,11,SolRy,11,
   BGSolarRx,15,BGSolarRy,15,SolIntAboveBG,14147626,
   SolArea,18,SolIntSum,72082457,SolarBGPortion,57934831,SolarBGMean,153673.292169,SolarBGTotal,123101990,
   SolarBGArea,709,SolarMaskRx(pix),,SolarMaskRy(pix),,,
   LunarAzimuth,5.13028 ,LunarZenith,141.29758,MooRise,09:35:45,MooSet,21:46:13,XLunarPix,NA,YLunarPix,NA,
   XLunarGrav,NA,YLunarGrav,NA,LunarRx,5,LunarRy,5,BGLunarRx,10,BGLunarRy,10,LunarIntAboveBG,NA,LunarArea,NA,
   LunarIntSum,NA,LunarBGPortion,NA,LunarBGMean,NA,LunarBGTotal,NA,LunarBGArea,NA,LunarMaskRx(pix),5,LunarMaskRy(pix),5,,
   UTDate,2011/11/07,UTTime,03:57:04,JulianDay,2455872.664630,TimeZone,0,
   ObsLongitude(deg),80:01:36.04,ObsLatitude(deg),+32:19:31.72,ObsElevation(m),5032,ObsPressure(hPa),500,ObsTemperature(C),0,
   DeltaT,64.954000,DUT1,-0.23,,XFOVCente,170.08,YFOVCente,120.85,FrameScale(pix/deg),1.644,DirectionNorth(deg),180.00000,
   OffsetAngle(deg),-4.06,FrameMin,106272,FrameMax(w/Sun Image),864825,
   Z:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\201111\20111107A\20111107AWM\CM2_Ali20111107035703CWM.fits,
   2013/05/02,15:17:58

   SolarAzimuth,251.978721,SolarZenith,90.901683,SunRise,00:59:47,SunSet,11:46:47,
   XSolarPix,NA,YSolarPix,NA,XSolarGrav,NA,YSolarGrav,NA,SolRx,11,SolRy,11,BGSolarRx,15,BGSolarRy,15,SolIntAboveBG,NA,
   SolArea,NA,SolIntSum,NA,SolarBGPortion,NA,SolarBGMean,NA,SolarBGTotal,NA,SolarBGArea,NA,SolarMaskRx(pix),,SolarMaskRy(pix),,,
   LunarAzimuth,121.49887,LunarZenith,52.29805,MooRise,08:36:53,MooSet,19:58:36,XLunarPix,93.774,YLunarPix,160.469,
   XLunarGrav,92.178457,YLunarGrav,158.220362,LunarRx,5,LunarRy,5,BGLunarRx,10,BGLunarRy,10,LunarIntAboveBG,91704,LunarArea,39,
   LunarIntSum,11989414,LunarBGPortion,11897710,LunarBGMean,156548.824742,LunarBGTotal,27174650,LunarBGArea,173,
   LunarMaskRx(pix),5,LunarMaskRy(pix),5,,
   UTDate,2011/11/05,UTTime,11:47:07,JulianDay,2455870.991053,TimeZone,0,
   ObsLongitude(deg),80:01:36.04,ObsLatitude(deg),+32:19:31.72,ObsElevation(m),5032,ObsPressure(hPa),500,ObsTemperature(C),0,
   DeltaT,64.954000,DUT1,-0.23,,XFOVCente,170.08,YFOVCente,120.85,FrameScale(pix/deg),1.644,DirectionNorth(deg),180.00000,
   OffsetAngle(deg),-4.06,FrameMin,112156,FrameMax(w/Sun Image),172640,
   Z:\00SiteSurveyData\000_A40M_Images_Analysed\03_Ali\2011\201111\20111105A\20111105AWM\CM2_Ali20111105114706CWM.fits,
   2013/05/02,15:08:25




  install IRAF 
  Karasu List 
  Oma List 
  Ali List 
  toPageTop  
     
 Back to TibetSiteSurvey Page  
 toToshi  
 Back to SasakiFamily's Page  




Toshi Sasaki's HOME Page on sasakihome.info
Last Modified: (JST)
toshi.sasaki@nao.ac.jp