Related follow-on question..
Is there a nice way to get the data into a type format rather than a
dict ?
Here's the form I'm using now..
function DNP(myfile::String)
dnp = { "File" => myfile }
fh = open(myfile, "r")
dnp["Label"] = bytestring(readbytes(fh, 4))
dnp["Version"] = read(fh, Uint32)
dnp["Revision"] = read(fh, Uint32)
dnp["Date"] = bytestring(readbytes(fh, 28))
dnp["FileFormat"] = read(fh, Uint32)
dnp["FileType"] = bytestring(readbytes(fh,4))
dnp["OriginalFileName"] = bytestring(readbytes(fh,68))
dnp["ReferenceFileName"] = bytestring(readbytes(fh,68))
dnp["RelatedFileNameA"] = bytestring(readbytes(fh,68))
dnp["RelatedFileNameB"] = bytestring(readbytes(fh,68))
dnp["RelatedFileNameC"] = bytestring(readbytes(fh,68))
dnp["Annotate"] = bytestring(readbytes(fh,84))
dnp["InstrumentModel"] = bytestring(readbytes(fh,36))
dnp["InstrumentSerialNumber"] = bytestring(readbytes(fh,36))
dnp["SoftwareVersionNumber"] = bytestring(readbytes(fh,36))
dnp["CrystalMaterial"] = bytestring(readbytes(fh,36))
dnp["LaserWavelengthMicrons"] = read(fh, Float64)
dnp["LaserNullDoubling"] = read(fh, Uint32)
dnp["Padding"] = read(fh, Uint32)
dnp["DispersionConstantXc"] = read(fh, Float64)
dnp["DispersionConstantXm"] = read(fh, Float64)
dnp["DispersionConstantXb"] = read(fh, Float64)
dnp["NumChan"] = read(fh, Uint32)
dnp["InterferogramSize"] = read(fh, Uint32)
dnp["ScanDirection"] = read(fh, Uint32)
dnp["ACQUIREMODE"] = read(fh, Uint32)
dnp["EMISSIWITY"] = read(fh, Uint32)
dnp["APODIZATION"] = read(fh, Uint32)
dnp["ZEROFILL"] = read(fh, Uint32)
dnp["RUNTIMEMATH"] = read(fh, Uint32)
dnp["FFTSize"] = read(fh, Uint32)
dnp["NumberOfCoAdds"] = read(fh, Uint32)
dnp["SingleSided"] = read(fh, Uint32)
dnp["ChanDisplay"] = read(fh, Uint32)
dnp["AmbTemperature"] = read(fh, Float64)
dnp["InstTemperature"] = read(fh, Float64)
dnp["WBBTemperature"] = read(fh, Float64)
dnp["CBBTemperature"] = read(fh, Float64)
dnp["TEMPERATURE_DWR"] = read(fh, Float64)
dnp["EMISSIVITY_DWR"] = read(fh, Float64)
dnp["LaserTemperature"] = read(fh, Float64)
dnp["SpareI"] = read(fh, Uint32,10)
dnp["SpareF"] = read(fh, Float64,10)
dnp["SpareNA"] = bytestring(readbytes(fh,68))
dnp["SpareNB"] = bytestring(readbytes(fh,68))
dnp["SpareNC"] = bytestring(readbytes(fh,68))
dnp["SpareND"] = bytestring(readbytes(fh,68))
dnp["SpareNE"] = bytestring(readbytes(fh,68))
dnp["End"] = bytestring(readbytes(fh,4))
dnp["Interferograms"] = read(fh, Int16, dnp["InterferogramSize"],
dnp["NumberOfCoAdds"])
fft_size = dnp["FFTSize"] * dnp["ZEROFILL"] * 512
dnp["Spectrum"] = read(fh, Float32, fft_size)
close(fh)
wavelength_range = 10000.0 / dnp["LaserWavelengthMicrons"]
spectral_range = wavelength_range / 2
spectral_binsize = spectral_range / fft_size
x_fft = [0:fft_size-1] * spectral_binsize
m = dnp["DispersionConstantXm"]
b = dnp["DispersionConstantXb"]
c = dnp["DispersionConstantXc"]
x_corrected = x_fft + c + exp10(m * x_fft + b)
dnp["WL_cm"] = x_corrected
dnp["WL_microns"] = 10000.0 ./ x_corrected
return dnp
end
Which works fine, but it leaves me with the data in a form that's ugly (to
me) in calculations: dnp["InterferogramSize"] * dnp["NumberOfCoAdds"]
Instead of: dnp.InterferogramSize * dnp.NumberOfCoAdds
I can create an appropriate type like:
type DNP
Label
Version
Revision
Date
#### etc etc
end
..but I can't figure out a good way to get the data there. Well, other
than keeping my current function, defining the type, and then having
another function to copy the data into the type... ugggggly.
I read all the docs I could find on types but never saw anything that
hinted at a solution.. maybe a function/type hybrid??
I tried creating the type within the function but didn't get anywhere.
Ideas?