--[[ DOFLOG by rudi, abgewandelt von sinter zur Pruefung von aperture, ND, HYP Stand April 2012: Erkenntnisse bei der ND-Filter-Cam Ixus 60: Je Brennweite werden viele veränderliche Aperture-Werte gemessen. Dadurch schwankt der HYP. Das darf nicht sein. Teilweise jedoch gleiche Blendenzahl trotz verschiedenen get_av96. In get_av96 fließt der ND-Filter-Status ein. Eingeschwenkter ND-Filter erhöht den av96 bei jeder Brennweite um 196. Der ND-Filter-Status im Sinne von "strahlengangexponiert JA/NEIN" lässt sich nicht auslesen. In den Exif-Daten wird bei mir der FWert "3,51" zwei (!) Brennweiten (8.46 und 10.09mm) zugeordnet. Das kann sachlich nicht korrekt sein. Offenbar wird der Wert für den Exif-Eintrag gerundet, bzw. von der Cam wird einfach der nächstliegende gebräuchliche Wert eingetragen. Daher in Spalte J zusätzlich ein extern berechneter FWert interpoliert aus Maximum und Minimum des Ixus60-Objektivs. Dieser interpolierte Wert wird dann auch zur externen HYP-Berechnung verwendet. Etwas Unsicherheit besteht noch in der sachgerechten Anwendung des COC. Unsicher ist ebenfalls, ob eine lineare Interpolation der av96-Werte gegenüber den Blendenwerten sachgerecht präzise ist. save necessary values for DOF calculation in doflogix.csv @title doflog ]] function cellname(col) return col..loglines+1 end -- required_modules prop=require "propcase" -- Filename for logfile log_fn="A/doflogix.csv" bi=get_buildinfo() -- test rec mode if get_mode() then press("shoot_half") repeat sleep(10) until get_shooting() focus_ok=get_focus_ok() dofinfo=get_dofinfo() get_av_sechsundneunzig=get_av96() nd=get_nd_present() av_min=get_prop(prop.MIN_AV) -- minim. useable av depending on focal length release("shoot_half") if focus_ok==1 then loglines=0 c=dofinfo.coc -- x1000mm f=dofinfo.focal_length -- x1000mm N=dofinfo.aperture -- x1000 s=dofinfo.focus -- mm H=dofinfo.hyp_dist -- mm Dn=dofinfo.near -- mm Df=dofinfo.far -- mm DOF=dofinfo.dof -- mm cam=bi.platform -- count lines on doflog if os.stat(log_fn)~=nil then for line in io.lines(log_fn) do loglines=loglines+1 end else txt="DOF-Rechner-Brennweite;unerklärlicher DOF-Rechner-Blendenwert;Max.FWert min_av aus propcase;ND-Filter-beeinflusster Wert get_av96;nd_present;DOF-Rechner-Motivdistanz;" txt=txt.."DOF-HYP;IX-HYP;Aus av96 und Objektivdaten kalkulierter Fwert;Mittels linearer Interpolation CamKalkulierterFWert aus min_av;"..cam --[[Nahpunktdistanz;Fernpunktdistanz;Schärfentiefe;" txt=txt.."*get_av96;*get_av;*Fernpunktdistanz;*Schärfentiefe;" ]] -- create logfile logfile=io.open(log_fn,"w") -- write column header logfile:write(txt,"\r\n") --close log file logfile:close() loglines=1 end -- open logfile for append logfile=io.open(log_fn,"a") -- write col A..C for calculation HYP -- focal length (=f), aperture, coc -- HYP = f*f / (aperture*coc) + f txt=f..";"..N..";"..av_min..";"..get_av_sechsundneunzig..";"..nd..";" -- write col D for calculation NL, FL, DOF -- focus (=s) -- NL = s*(HYP-f) / (HYP+s-2*f) -- FL = s*(HYP-f) / (HYP-s) -- DOF = FL - NL txt=txt..s..";" -- write E..H for compare calculate camera value -- HYP, NL, FL, DOF kalk_FWert=((av_min*1000)-79333)*1000/75238 -- [*1000] --InterpolationsFormel aus Objektivaufdruck und -- av96-Koordinaten ohne ND-Filter: -- F2,8 / av96=290 sowie F4,9 / av96=448 -- nämlich kalk_Fwert == (av_min-(290-(((448-290)/(4.9-2.8))*2.8))) / ((448-290)/(4.9-2.8)) ix_hyp=((f*f)/(kalk_FWert*c))+(f/1000) -- in mm --ix_hyp=(((f*f)/(kalk_FWert*c))/1000)+(f/1000) -- in mm txt=txt..H..";"..ix_hyp..";" txt=txt.."=("..cellname('D').."-79,333)/75,238;"..kalk_FWert..";" --[[ "..Dn..";"..Df..";"..DOF..";" txt=txt..get_av_sechsundneunzig..";"..get__av..";"..Df..";"..DOF..";" -- write I as excel formula for HYP txt=txt.."=("..cellname('A').."/1000*"..cellname('A').."/1000)/("..cellname('B').."/1000*"..cellname('C').."/1000)+"..cellname('A').."/1000;" -- write J as excel formula for NL txt=txt.."="..cellname('D').."*("..cellname('I').."-"..cellname('A').."/1000)/("..cellname('I').."+"..cellname('D').."-2*"..cellname('A').."/1000);" -- write K as excel formula for FL txt=txt.."="..cellname('D').."*("..cellname('I').."-"..cellname('A').."/1000)/("..cellname('I').."-"..cellname('D')..");" -- write L as excel formula for DOF txt=txt.."="..cellname('K').."-"..cellname('J')..";" ]] -- write to file logfile:write(txt,"\r\n") --if logline%5 == 0 then logfile:write("\r\n") end -- Leerzeile einfügen nach je 5 Zeilen --close log file logfile:close() print("OK!",loglines,"entries") else print("Focus failed! Try again") end else print("Switch to rec mode!") end