光散射矩阵库

scatteringmatrix的Python项目详细描述


光散射矩阵库

这实现了一个简单的一维散射矩阵算法,用于计算光学薄膜和滤光片的反射、透射和吸收。它是传输矩阵算法的一种替代方法,并且以不太容易出现高吸收膜的问题而闻名。

开始

这些说明将为您提供项目的副本并在本地计算机上运行。

先决条件

这个库大量使用numpy和scipy库。你应该有:

  • python版本>;3.x
  • numpy版本>;x.y
  • scipy版本>;x.y

(正在测试版本兼容性)

安装

最好的安装方式是通过pip。这是python3库,因此建议安装

pip install scatteringmatrix

pip3 install scatteringmatrix

示例

现在examples目录中只有一个示例文件。它与下面的代码完全相同。

"""This file implements finding the transmission and reflection for variouswavelengths for a single index lyaer on a glass substrate."""importscatteringmatrixassmimportnumpyasnp'''Declare Structure'''#Defining index functions. Any function that returns a complex value given#a specific wavelength (in meters) can be used. Here, we declare functions that#always return the same index, regardless of wavelengthindex_air=sm.single_index_function(1.0)index_glass=sm.single_index_function(1.5)index_Si3N4=sm.single_index_function(2.0)#A 1D optical structure is a list of layers. We declare two of the layers herefilm=sm.SingleLayer(index_Si3N4,60.0*sm.Units.NANOMETERS)substrate=sm.SingleLayer(index_glass,1.1*sm.Units.MILLIMETERS)#Here we declare the actual list and append the layers.structure=sm.LayerList()structure.append(sm.SingleLayer(index_air,sm.Units.MICROMETERS))structure.append(film)structure.append(substrate)structure.append(sm.SingleLayer(index_air,sm.Units.MICROMETERS))'''Calculate transmission and reflection at 0 degrees'''wavelengths=np.linspace(300.0,1200.0,91)*sm.Units.NANOMETERS#Data is returned in an array of arrays.results=sm.scattering_matrix_calculation(structure,wavelengths)print("Selected Wavelength Data")print("----------------------------")print("Incident Angle:",results[4])print("Mode:",results[5])print("Wavelengths (nm):",'{0:.1f}'.format(results[3][30]/sm.Units.NANOMETERS),",",'{0:.1f}'.format(results[3][60]/sm.Units.NANOMETERS))print("Transmission @ 600 nm, 900 nm:",'{0:.6f}'.format(results[0][30]),",",'{0:.6f}'.format(results[0][60]))print("Reflection @ 600 nm, 900 nm:",'{0:.6f}'.format(results[1][30]),",",'{0:.6f}'.format(results[1][60]))print("Absorption @ 600 nm, 900 nm:",'{0:.6f}'.format(results[2][30]),",",'{0:.6f}'.format(results[2][60]))

运行此文件将导致输出:

Selected Wavelength Data
----------------------------
Incident Angle: 0.0
Mode: TE
Wavelengths (nm): 600.0 , 900.0
Transmission @ 600 nm, 900 nm: 0.662785 , 0.964672
Reflection @ 600 nm, 900 nm: 0.337215 , 0.035328
Absorption @ 600 nm, 900 nm: 0.000000 , 0.000000

运行单元测试

进入安装库以运行基本单元测试的目录。这可以通过命令行使用

python3 -m unittest

其结果应该类似于:

Ran 80 tests in 0.026s

OK

展开

这仅仅是一个python模块,因此不需要特殊的部署步骤。

贡献

如果你想加入这个项目,请联系主要作者andrew.flood@mail.utoronto.ca

版本

到目前为止,我们只有开发版和alpha版,所以暂时仍保持在0.1.0。

作者

  • andrew flood-initial work和current project lead

许可证

此项目在麻省理工学院许可下获得许可-有关详细信息,请参见license.txt文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java这种src与构建树时间戳的比较如何更快?   java如何在两个命令处理程序之间通信   java下拉框值更改   Java如何从另一个类中提取字段的值   无字段名的java Jackson序列化   java游戏循环和方法调用   java Spring Security permitAll()匹配器被忽略   java如何在一个方法中将数组中的int作为单独的int传递?   使用ArrayList在Java中实现同步队列   java JButton的操作侦听器在JTable中不工作   java中C++ OOP指针的技巧   java My regex搜索只打印出最后一个匹配项   java如何在Hadoop中序列化非常大的可写对象   spring Paypal JavaSDK支付执行问题   带有SPNEGO SSO的java Tomcat 6仍会提示输入登录名和密码   java HttpResponse主体正在更改   java如何在RxJava中实现链锁   为什么我需要java。lang.ClassNotFoundException:com。mysql。希杰。jdbc。mysqlconnectorjava8时的驱动程序。0.16.jar在类路径中?   java输入错误。即使在接受新输入后仍使用旧输入