diff --git a/Kernel/Transmission.wl b/Kernel/Transmission.wl index c14cf2e..1ffc085 100644 --- a/Kernel/Transmission.wl +++ b/Kernel/Transmission.wl @@ -21,6 +21,8 @@ root = DirectoryName[$InputFileName]; TransmissionObject::thickerr = "Thickness `1` is not valid"; +(* :: Constructor :: *) + TransmissionObject[sam_TDTrace, ref_TDTrace, opts: OptionsPattern[]] := Module[{}, With[{ thickness = QuantityMagnitude[OptionValue["Thickness"], "Centimeters"], gain = OptionValue["Gain"] @@ -120,6 +122,8 @@ TransmissionObject[a_Association][prop_String] := If[!KeyExistsQ[a, prop], a[prop] ] +(* :: Calculated properties :: *) + TransmissionObject[a_Association]["Kramers-Kronig n"] := With[{ n0 = a["n0"], thickness = QuantityMagnitude[a["Thickness"], "Centimeters"], @@ -134,6 +138,8 @@ TransmissionObject[a_Association]["Kramers-Kronig n"] := With[{ TransmissionObject[a_Association]["Transmission"] := QuantityArray[Transpose[{Normal @ a["Frequencies"], (*SpB[*)Power[(a["Gain"] Normal @ a["T"])(*|*),(*|*)2](*]SpB*)}], {1/"Centimeters", 1}] +(* :: Transition methods :: *) + updateThicknessDependent[a_Association ] := With[{ }, @@ -143,10 +149,14 @@ updateThicknessDependent[a_Association ] := With[{ |>] ] + + TransmissionObject /: Append[TransmissionObject[a_Association], props_Association] := TransmissionObject[Join[a, props] // updateThicknessDependent ] TransmissionObject /: Append[TransmissionObject[a_Association], prop_Rule] := TransmissionObject[Append[a, prop] // updateThicknessDependent ] TransmissionObject /: Append[TransmissionObject[a_Association], props_List] := TransmissionObject[Append[a, props] // updateThicknessDependent ] +(* :: Normal properties :: *) + TransmissionObject[a_Association]["Frequencies"] := QuantityArray[Normal @ a["Frequencies"], 1/"Centimeters"] TransmissionObject[a_Association]["Domain"] := Quantity[#, 1/"Centimeters"] &/@ MinMax[Normal @ a["Frequencies"]] @@ -174,6 +184,8 @@ TransmissionObject[a_Association]["Phase Features"] := With[{ ] +(* :: Approximated properties :: *) + TransmissionObject[a_Association]["Approximated k"] := With[{ thickness = QuantityMagnitude[a["Thickness"], "Centimeters"], gain = a["Gain"] @@ -203,7 +215,7 @@ TransmissionObject[a_Association]["Approximated n"] := With[{ , {1/"Centimeters", 1}] ] - +(* :: FDCI Functions :: *) TransmissionObject[a_Association]["FrequencyDomainConfidenceInterval"] := TransmissionObject[a]["FDCI"] @@ -222,7 +234,7 @@ With[{phase = QuantityMagnitude[TransmissionObject[a]["Phase"], {1/"Centimeters" ] ] - +(* :: internal :: *) phaseState[phase_List] := With[{}, If[Fit[phase, {1, x}, x][[1]] > 10.0, @@ -232,12 +244,17 @@ phaseState[phase_List] := With[{}, ] ] +(* :: Properties list :: *) + TransmissionObject /: Keys[t_TransmissionObject] := t["Properties"] TransmissionObject[a_Association]["Properties"] := Join[Options[TransmissionObject][[All,1]], {"Properties", "n0", "Approximated n", "Approximated k", "Approximated \[Alpha]", "Kramers-Kronig n", "Frequencies", "Transmission", "Phase", "Phase Features", "\[Delta]t", "Gain", "PhaseShift", "Thickness", "Domain", "FrequencyDomainConfidenceInterval", "FDCI", "FDCI2", "FrequencyDomainConfidenceInterval2"}] Options[TransmissionObject] = {"Thickness"->Null, "Tags"-><||>, "Gain"->1.0, "PhaseShift"->0}; + +(* :: Options validator :: *) + TransmissionObject::invalidopts = "Invalid options provided" Options[validateOptions] = Options[TransmissionObject] @@ -254,6 +271,8 @@ validateOptions[OptionsPattern[] ] := With[{}, ] ] +(* :: Automatic phase unwrapping :: *) + TransmissionUnwrap[t: TransmissionObject[a_], "Basic" | Automatic, OptionsPattern[]] := With[{ offset = offsetPhase[a], th = OptionValue["PhaseThreshold"]//N, @@ -276,6 +295,8 @@ TransmissionUnwrap[t: TransmissionObject[a_], "Basic" | Automatic, OptionsPatter Options[TransmissionUnwrap] = {"PhaseThreshold"->5.6, "PhaseShift"->0}; +(* :: Semi-automatic phase unwrapping :: *) + TransmissionUnwrap[t: TransmissionObject[a_], "Held" | "Hold", OptionsPattern[]] := With[{ th = OptionValue["PhaseThreshold"]//N, phaseShift = OptionValue["PhaseShift"]