package Optics @ISA = qw() sub ODToAlpha sub ODToAlpha { my($this,$OD,$thickness)= return $this->AbsToAlpha($OD, $thickness); sub ABSToAlpha my ($ABS, $thickness) = @_; return log(10.0) * $ABS / ($thickness * 1.0e-2); sub EpsToConductivity my ($E, $e2) = @_; return $omega * $e2; sub EpsToNK my ($e1, $e2) = @_; return (Re($nc), -Im($nc)); return ($n, $k); sub NKToEps my ($n, $k) = @_; return ($e1, $e2); sub AlphaToK my ($alpha, $wavelength) = @_; return $alpha / (4.0 * $pi / ($wavelength*1.0e-7)); sub KToAlpha my ($wavelength, $k) = @_; return $k * (4.0 * $pi / ($wavelength*1.0e-7)); sub eVToKiser my ($energy) = @_; return 0.0 if($energy == 0.0); return 1.0 / ($wl * 100.0); sub nmToeV my ($wl) = @_; return 0.0 if($wl == 0.0); return $c * $h / ($wl*1.0e-9 * $e); sub eVTonm my ($energy) = @_; return 0.0 if($energy == 0.0); return $c * $h / ($energy * $e) * 1.0e9; sub eVToHz my ($energy) = @_; return $energy * $e / $h; sub HzToeV my ($f) = @_; return $f * $h / $e; sub eVToOmega my ($energy) = @_; return $pi2 * $energy * $e / $h; sub OmegaToeV my ($f) = @_; return $f * $h / $e / $pi2; sub HzTonm my ($f) = @_; return eVTonm(HzToeV($f)); sub nmToHz my ($wl) = @_; return $c / ($wl*1.0e-9); sub CalEffectiveMassFromPlasmaEnergy my ($Ep, $Ne) = @_; return $meeff; sub CalPlasmaFrequency my ($Ne, $m) = @_; return sqrt( $Ne *$e*$e / $me / $m / $e0) / 2.0 / $pi; sub new my ($module) = @_; return $this; sub DESTROY my $this = shift; sub KKConversionFromEps2toEps1 my ($this, $pE, $pEps2, $fconst, $ExtraporateLow, $ExtraporateHigh, $Integrator) = @_; sub KKConversionGeneral my ($this, $pE, $pf, $fconst, $ExtraporateLow, $ExtraporateHigh, $Integrator) = @_; return -5; return -3; return -3; return (\@Q); sub KKConversionFromEps1toEps2 my ($this, $pE, $pEps2, $fconst, $ExtraporateLow, $ExtraporateHigh, $Integrator) = @_; sub KKReverseConversionGeneral my ($this, $pE, $pf, $fconst, $ExtraporateLow, $ExtraporateHigh, $Integrator) = @_; return -5; return -3; return -3; return (\@Q); sub TaucLorentz my ($this, $E, $e1inf, $e2inf, $A, $Eg, $En0, $C) = @_; return ($e1inf, $e2inf) if($A <= 0.0 or $C <= 0.0); return ($e1TL, $e2TL); sub CalNefromLorentzA my ($this, $A, $fa) = @_; return $A / ($fa * $e*$e / $me / $e0 / $K / $K); sub CalLorentzAfromNe my ($this, $Ne, $fa) = @_; return $fa * $Ne * $e*$e / $me / $e0 / $K / $K; sub Lorentz my ($this, $E, $e1inf, $e2inf, $fa, $Ne, $E0, $gamma) = @_; return ($e1, $e2); sub Drude my ($this, $E, $e1inf, $e2inf, $Ep, $tau) = @_; return ($e1, $e2); sub Caucy my ($this, $wl, $pA, $pn) = @_; return ($n*$n, 0.0); sub Sellmeier my ($this, $wl, $A, $pB, $pwl0) = @_; return ($e1, 0.0); sub Urbach my ($this, $E, $Em, $E0, $A) = @_; return (0.0, $e2); sub Urbach2 my ($this, $E, $pEm, $pE0, $pA) = @_; return (0.0, $e2);