Name | vtmmpy JSON |
Version |
1.0.10
JSON |
| download |
home_page | https://github.com/AI-Tony/vtmmpy/tree/main |
Summary | A vectorized implementation of the transfer matrix method |
upload_time | 2023-05-16 14:07:36 |
maintainer | |
docs_url | None |
author | Tony |
requires_python | >=3.6,<4.0 |
license | |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# **Vectorized Transfer Matrix Method Python**
The transfer matrix method (TMM) is an analytic approach for obtaining the reflection and transmission coefficients in stratified media. vtmmpy is a vectorised implementation of the TMM written in Python. It has a focus on speed and ease of use.
![](https://github.com/AI-Tony/vtmmpy/blob/main/images/MTM.png?raw=true)
### **Installation**
---
```
pip install vtmmpy
```
### **Usage**
---
Import the vtmmpy module.
```
import vtmmpy
```
Create an instance of the ```TMM``` class.
```
freq = np.linspace(170, 210, 30)
theta = np.array(0, 60, 60)
tmm = vtmmpy.TMM(freq,
theta,
f_scale=1e12,
l_scale=1e-9,
incident_medium="air",
transmitted_medium="air")
```
- freq: a numpy array representing the spectral range of interest.
- theta: a numpy array of one or more angles of incidence.
- f_scale (optional): input frequency scale, default is terahertz.
- l_scale (optional): input length scale, default is nanometers.
- incident_medium (optional): incident medium, default is air.
- transmitted_medium (optional): transmitted medium, default is air.
Add multilayer metamaterial designs with the ```addDesign()``` method.
```
materials = ["Ag", "SiO2", "Ag", "SiO2", "Ag", "SiO2"]
thicknesses = [15, 85, 15, 85, 15, 85]
tmm.addDesign(materials, thicknesses)
```
- materials: list of materials
- thicknesses: list of the corresponding material thicknesses
Internally, vtmmpy uses the [regidx](https://gitlab.com/benvial/refidx) Python package to download refractive index data from [refractiveindex.info](https://refractiveindex.info/) for your choosen materials and spectral range. At this point, you will be presented with a few options corresponding to the data source ("Page" dropdown on refractiveindex.info). Study these carefully and refer to [refractiveindex.info](https://refractiveindex.info/) for more detailed information about how the data were obtained. Your choice here could greatly impact the accuracy of your results.
Optionally call the ```summary()``` and/or ```designs()``` methods to view the data currently held by the instance.
```
tmm.summary()
tmm.designs()
```
Additionally, the ```tmm.opticalProperties()``` method can be used to obtain a dictionary of optical properties of the materials entered in the frequency range specified.
```
props = tmm.opticalProperties()
print(props.keys()) # output: dict_keys(['air', 'SiO2', 'Ag'])
print(props["Ag"]["n"]) # ouput is the refractive index of Ag
print(props["Ag"]["beta"]) # ouput is the propagation constant of Ag
```
Calculate the reflection/transmission coefficients by calling the appropriate method. You should specify wether you want the transverse magnetic/electric polarization by supplying the "TM" or "TE" flag, respectively.
```
RTM = tmm.reflection("TM")
RTE = tmm.reflection("TE")
TTM = tmm.transmission("TM")
TTE = tmm.transmission("TE")
```
Tips:
- The ```reflection()``` and ```transmission()``` methods return both complex parts. Use Python's built-in ```abs()``` function to obtain the magnitude.
- The intensity is the square of the magnitude (eg. ```abs(reflection("TM"))**2```).
- ```reflection()``` and ```transmission()``` return an ndarray with a minimum of 2 dimensions. The first dimension always corresponds to the number of designs. Therefore, when printing/plotting results, you must always index the first dimension (even if you only have 1 design).
### **Examples**
---
![](https://github.com/AI-Tony/vtmmpy/blob/main/images/2dplots.png?raw=true)
Raw data
{
"_id": null,
"home_page": "https://github.com/AI-Tony/vtmmpy/tree/main",
"name": "vtmmpy",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "Tony",
"author_email": "tk_87@hotmail.com",
"download_url": "https://files.pythonhosted.org/packages/bc/06/99e9f52c0e3599d8fd408b10cbfaac87dfdd43da976450044ceb247cb67e/vtmmpy-1.0.10.tar.gz",
"platform": null,
"description": "# **Vectorized Transfer Matrix Method Python** \nThe transfer matrix method (TMM) is an analytic approach for obtaining the reflection and transmission coefficients in stratified media. vtmmpy is a vectorised implementation of the TMM written in Python. It has a focus on speed and ease of use. \n\n![](https://github.com/AI-Tony/vtmmpy/blob/main/images/MTM.png?raw=true) \n\n### **Installation**\n\n---\n\n```\npip install vtmmpy \n```\n\n### **Usage**\n\n--- \n\nImport the vtmmpy module.\n\n```\nimport vtmmpy\n```\n\nCreate an instance of the ```TMM``` class. \n\n```\nfreq = np.linspace(170, 210, 30) \ntheta = np.array(0, 60, 60) \n\ntmm = vtmmpy.TMM(freq, \n theta, \n f_scale=1e12, \n l_scale=1e-9, \n incident_medium=\"air\", \n transmitted_medium=\"air\") \n```\n\n- freq: a numpy array representing the spectral range of interest. \n- theta: a numpy array of one or more angles of incidence. \n- f_scale (optional): input frequency scale, default is terahertz.\n- l_scale (optional): input length scale, default is nanometers.\n- incident_medium (optional): incident medium, default is air.\n- transmitted_medium (optional): transmitted medium, default is air. \n\nAdd multilayer metamaterial designs with the ```addDesign()``` method. \n\n```\nmaterials = [\"Ag\", \"SiO2\", \"Ag\", \"SiO2\", \"Ag\", \"SiO2\"] \nthicknesses = [15, 85, 15, 85, 15, 85] \n\ntmm.addDesign(materials, thicknesses)\n```\n\n- materials: list of materials \n- thicknesses: list of the corresponding material thicknesses \n\nInternally, vtmmpy uses the [regidx](https://gitlab.com/benvial/refidx) Python package to download refractive index data from [refractiveindex.info](https://refractiveindex.info/) for your choosen materials and spectral range. At this point, you will be presented with a few options corresponding to the data source (\"Page\" dropdown on refractiveindex.info). Study these carefully and refer to [refractiveindex.info](https://refractiveindex.info/) for more detailed information about how the data were obtained. Your choice here could greatly impact the accuracy of your results.\n\nOptionally call the ```summary()``` and/or ```designs()``` methods to view the data currently held by the instance.\n\n```\ntmm.summary() \ntmm.designs() \n```\n\nAdditionally, the ```tmm.opticalProperties()``` method can be used to obtain a dictionary of optical properties of the materials entered in the frequency range specified.\n\n```\nprops = tmm.opticalProperties()\n\nprint(props.keys()) # output: dict_keys(['air', 'SiO2', 'Ag'])\nprint(props[\"Ag\"][\"n\"]) # ouput is the refractive index of Ag\nprint(props[\"Ag\"][\"beta\"]) # ouput is the propagation constant of Ag\n```\n\nCalculate the reflection/transmission coefficients by calling the appropriate method. You should specify wether you want the transverse magnetic/electric polarization by supplying the \"TM\" or \"TE\" flag, respectively.\n\n```\nRTM = tmm.reflection(\"TM\") \nRTE = tmm.reflection(\"TE\") \nTTM = tmm.transmission(\"TM\") \nTTE = tmm.transmission(\"TE\") \n```\n\nTips: \n - The ```reflection()``` and ```transmission()``` methods return both complex parts. Use Python's built-in ```abs()``` function to obtain the magnitude.\n - The intensity is the square of the magnitude (eg. ```abs(reflection(\"TM\"))**2```). \n - ```reflection()``` and ```transmission()``` return an ndarray with a minimum of 2 dimensions. The first dimension always corresponds to the number of designs. Therefore, when printing/plotting results, you must always index the first dimension (even if you only have 1 design). \n\n### **Examples**\n\n--- \n\n\n\n![](https://github.com/AI-Tony/vtmmpy/blob/main/images/2dplots.png?raw=true)\n\n",
"bugtrack_url": null,
"license": "",
"summary": "A vectorized implementation of the transfer matrix method",
"version": "1.0.10",
"project_urls": {
"Homepage": "https://github.com/AI-Tony/vtmmpy/tree/main",
"Repository": "https://github.com/AI-Tony/vtmmpy/tree/main"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "028ff1dc83849ecf284963ed1cbb87696415ef1654bc771951e7c0c47f1183a4",
"md5": "b79eb9e5ff6b50047a0173e46e195e9b",
"sha256": "1edc48fdd77fdfbee69045f65592d09617f4aff499c7395a29baa7ec67c9104e"
},
"downloads": -1,
"filename": "vtmmpy-1.0.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b79eb9e5ff6b50047a0173e46e195e9b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6,<4.0",
"size": 17256,
"upload_time": "2023-05-16T14:07:26",
"upload_time_iso_8601": "2023-05-16T14:07:26.126846Z",
"url": "https://files.pythonhosted.org/packages/02/8f/f1dc83849ecf284963ed1cbb87696415ef1654bc771951e7c0c47f1183a4/vtmmpy-1.0.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bc0699e9f52c0e3599d8fd408b10cbfaac87dfdd43da976450044ceb247cb67e",
"md5": "ac8257fa4fa0366bcf4fd420272a631f",
"sha256": "fed853252208ae18aeaf714abb9984197a3bc557e98af672d7d1e472afe60622"
},
"downloads": -1,
"filename": "vtmmpy-1.0.10.tar.gz",
"has_sig": false,
"md5_digest": "ac8257fa4fa0366bcf4fd420272a631f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6,<4.0",
"size": 16647,
"upload_time": "2023-05-16T14:07:36",
"upload_time_iso_8601": "2023-05-16T14:07:36.067600Z",
"url": "https://files.pythonhosted.org/packages/bc/06/99e9f52c0e3599d8fd408b10cbfaac87dfdd43da976450044ceb247cb67e/vtmmpy-1.0.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-16 14:07:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AI-Tony",
"github_project": "vtmmpy",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "vtmmpy"
}