|
157 | 157 | "id": "9", |
158 | 158 | "metadata": {}, |
159 | 159 | "outputs": [], |
160 | | - "source": [ |
161 | | - "# s_params_list = [dict(np.load(PATH.sparameters_repo / f\"dc_{length}.npz\")) for length in sim_lengths]" |
162 | | - ] |
163 | | - }, |
164 | | - { |
165 | | - "cell_type": "code", |
166 | | - "execution_count": null, |
167 | | - "id": "10", |
168 | | - "metadata": {}, |
169 | | - "outputs": [], |
170 | 160 | "source": [ |
171 | 161 | "wavelengths = s_params_list[0][\"wavelengths\"]\n", |
172 | 162 | "drop = np.array([np.abs(s[\"o3@0,o1@0\"]) ** 2 for s in s_params_list])\n", |
|
200 | 190 | }, |
201 | 191 | { |
202 | 192 | "cell_type": "markdown", |
203 | | - "id": "11", |
| 193 | + "id": "10", |
204 | 194 | "metadata": { |
205 | 195 | "lines_to_next_cell": 2 |
206 | 196 | }, |
|
213 | 203 | { |
214 | 204 | "cell_type": "code", |
215 | 205 | "execution_count": null, |
216 | | - "id": "12", |
| 206 | + "id": "11", |
217 | 207 | "metadata": {}, |
218 | 208 | "outputs": [], |
219 | 209 | "source": [ |
|
246 | 236 | }, |
247 | 237 | { |
248 | 238 | "cell_type": "markdown", |
249 | | - "id": "13", |
| 239 | + "id": "12", |
250 | 240 | "metadata": {}, |
251 | 241 | "source": [ |
252 | 242 | "Finally, we simulate the couplers with the calculated lengths to guarantee the fitting error is within tolerance.\n", |
|
256 | 246 | { |
257 | 247 | "cell_type": "code", |
258 | 248 | "execution_count": null, |
259 | | - "id": "14", |
| 249 | + "id": "13", |
260 | 250 | "metadata": {}, |
261 | 251 | "outputs": [], |
262 | 252 | "source": [ |
263 | | - "sims = gt.write_sparameters_batch(\n", |
264 | | - " [\n", |
265 | | - " {\n", |
266 | | - " \"component\": coupler_sc(gap=gap, length=length),\n", |
267 | | - " \"filepath\": PATH.sparameters_repo / f\"dc_{length}.npz\",\n", |
268 | | - " }\n", |
269 | | - " for length in lengths\n", |
270 | | - " ],\n", |
271 | | - " layer_stack=layer_stack,\n", |
272 | | - " # overwrite=True,\n", |
273 | | - ")\n", |
| 253 | + "jobs = [\n", |
| 254 | + " dict(\n", |
| 255 | + " component=coupler_sc(gap=gap, length=length),\n", |
| 256 | + " filepath=PATH.sparameters_repo / f\"dc_{length}.npz\",\n", |
| 257 | + " layer_stack=layer_stack,\n", |
| 258 | + " )\n", |
| 259 | + " for length in sim_lengths\n", |
| 260 | + "]\n", |
| 261 | + "sims = gt.write_sparameters_batch(jobs)\n", |
274 | 262 | "s_params_list = [sim.result() for sim in sims]\n", |
275 | 263 | "fig, ax = plt.subplots(1, 3, figsize=(12, 3))\n", |
276 | 264 | "errors = []\n", |
|
300 | 288 | }, |
301 | 289 | { |
302 | 290 | "cell_type": "markdown", |
303 | | - "id": "15", |
| 291 | + "id": "14", |
304 | 292 | "metadata": { |
305 | 293 | "lines_to_next_cell": 2 |
306 | 294 | }, |
|
317 | 305 | { |
318 | 306 | "cell_type": "code", |
319 | 307 | "execution_count": null, |
320 | | - "id": "16", |
| 308 | + "id": "15", |
321 | 309 | "metadata": {}, |
322 | 310 | "outputs": [], |
323 | 311 | "source": [ |
|
362 | 350 | }, |
363 | 351 | { |
364 | 352 | "cell_type": "markdown", |
365 | | - "id": "17", |
| 353 | + "id": "16", |
366 | 354 | "metadata": { |
367 | 355 | "lines_to_next_cell": 2 |
368 | 356 | }, |
|
373 | 361 | { |
374 | 362 | "cell_type": "code", |
375 | 363 | "execution_count": null, |
376 | | - "id": "18", |
| 364 | + "id": "17", |
377 | 365 | "metadata": {}, |
378 | 366 | "outputs": [], |
379 | 367 | "source": [ |
|
388 | 376 | }, |
389 | 377 | { |
390 | 378 | "cell_type": "markdown", |
391 | | - "id": "19", |
| 379 | + "id": "18", |
392 | 380 | "metadata": {}, |
393 | 381 | "source": [ |
394 | 382 | "Finally, we want to build a complete simulation of the filter based on individual models for its components.\n", |
|
399 | 387 | { |
400 | 388 | "cell_type": "code", |
401 | 389 | "execution_count": null, |
402 | | - "id": "20", |
| 390 | + "id": "19", |
403 | 391 | "metadata": {}, |
404 | 392 | "outputs": [], |
405 | 393 | "source": [ |
|
409 | 397 | }, |
410 | 398 | { |
411 | 399 | "cell_type": "markdown", |
412 | | - "id": "21", |
| 400 | + "id": "20", |
413 | 401 | "metadata": {}, |
414 | 402 | "source": [ |
415 | 403 | "The model for the straight sections is based directly on the waveguide mode, including dispersion effects." |
|
418 | 406 | { |
419 | 407 | "cell_type": "code", |
420 | 408 | "execution_count": null, |
421 | | - "id": "22", |
| 409 | + "id": "21", |
422 | 410 | "metadata": {}, |
423 | 411 | "outputs": [], |
424 | 412 | "source": [ |
|
438 | 426 | { |
439 | 427 | "cell_type": "code", |
440 | 428 | "execution_count": null, |
441 | | - "id": "23", |
| 429 | + "id": "22", |
442 | 430 | "metadata": {}, |
443 | 431 | "outputs": [], |
444 | 432 | "source": [ |
|
467 | 455 | }, |
468 | 456 | { |
469 | 457 | "cell_type": "markdown", |
470 | | - "id": "24", |
| 458 | + "id": "23", |
471 | 459 | "metadata": { |
472 | 460 | "lines_to_next_cell": 2 |
473 | 461 | }, |
|
480 | 468 | { |
481 | 469 | "cell_type": "code", |
482 | 470 | "execution_count": null, |
483 | | - "id": "25", |
| 471 | + "id": "24", |
484 | 472 | "metadata": {}, |
485 | 473 | "outputs": [], |
486 | 474 | "source": [ |
|
513 | 501 | { |
514 | 502 | "cell_type": "code", |
515 | 503 | "execution_count": null, |
516 | | - "id": "26", |
| 504 | + "id": "25", |
517 | 505 | "metadata": {}, |
518 | 506 | "outputs": [], |
519 | 507 | "source": [ |
|
533 | 521 | { |
534 | 522 | "cell_type": "code", |
535 | 523 | "execution_count": null, |
536 | | - "id": "27", |
| 524 | + "id": "26", |
537 | 525 | "metadata": {}, |
538 | 526 | "outputs": [], |
539 | 527 | "source": [ |
|
596 | 584 | }, |
597 | 585 | { |
598 | 586 | "cell_type": "markdown", |
599 | | - "id": "28", |
| 587 | + "id": "27", |
600 | 588 | "metadata": { |
601 | 589 | "lines_to_next_cell": 2 |
602 | 590 | }, |
|
607 | 595 | { |
608 | 596 | "cell_type": "code", |
609 | 597 | "execution_count": null, |
610 | | - "id": "29", |
| 598 | + "id": "28", |
611 | 599 | "metadata": {}, |
612 | 600 | "outputs": [], |
613 | 601 | "source": [ |
|
704 | 692 | { |
705 | 693 | "cell_type": "code", |
706 | 694 | "execution_count": null, |
707 | | - "id": "30", |
| 695 | + "id": "29", |
708 | 696 | "metadata": {}, |
709 | 697 | "outputs": [], |
710 | 698 | "source": [ |
|
714 | 702 | { |
715 | 703 | "cell_type": "code", |
716 | 704 | "execution_count": null, |
717 | | - "id": "31", |
| 705 | + "id": "30", |
718 | 706 | "metadata": {}, |
719 | 707 | "outputs": [], |
720 | 708 | "source": [ |
|
724 | 712 | { |
725 | 713 | "cell_type": "code", |
726 | 714 | "execution_count": null, |
727 | | - "id": "32", |
| 715 | + "id": "31", |
728 | 716 | "metadata": {}, |
729 | 717 | "outputs": [], |
730 | 718 | "source": [ |
|
734 | 722 | { |
735 | 723 | "cell_type": "code", |
736 | 724 | "execution_count": null, |
737 | | - "id": "33", |
| 725 | + "id": "32", |
738 | 726 | "metadata": {}, |
739 | 727 | "outputs": [], |
740 | 728 | "source": [ |
|
743 | 731 | }, |
744 | 732 | { |
745 | 733 | "cell_type": "markdown", |
746 | | - "id": "34", |
| 734 | + "id": "33", |
747 | 735 | "metadata": {}, |
748 | 736 | "source": [ |
749 | 737 | "Finally, we can simulate the complete filter response around the central wavelength and get the desired FSR and box-like shape." |
|
752 | 740 | { |
753 | 741 | "cell_type": "code", |
754 | 742 | "execution_count": null, |
755 | | - "id": "35", |
| 743 | + "id": "34", |
756 | 744 | "metadata": {}, |
757 | 745 | "outputs": [], |
758 | 746 | "source": [ |
|
780 | 768 | "custom_cell_magics": "kql" |
781 | 769 | }, |
782 | 770 | "kernelspec": { |
783 | | - "display_name": "Python 3 (ipykernel)", |
| 771 | + "display_name": "gplugins (3.11.14)", |
784 | 772 | "language": "python", |
785 | 773 | "name": "python3" |
786 | 774 | }, |
|
794 | 782 | "name": "python", |
795 | 783 | "nbconvert_exporter": "python", |
796 | 784 | "pygments_lexer": "ipython3", |
797 | | - "version": "3.12.8" |
| 785 | + "version": "3.11.14" |
798 | 786 | } |
799 | 787 | }, |
800 | 788 | "nbformat": 4, |
|
0 commit comments