NIST Handbook 160 

Nanolithography Toolbox 

Krishna C. Balram, Daron A. Westly, Marcelo Davanco, Karen E. Grutter, 

Qing Li, Thomas Michels, Christopher H. Ray, Liya Yu, Richard J. Kasica, 

Christopher B. Wallin, Ian J. Gilbert, Brian A. Bryce, Gregory Simelgor, 

Juraj Topolancik, Nicolae Lobontiu, Yuxiang Liu, Pavel Neuzil, Vojtech Svatos, 

Kristen A. Dill, Neal A. Bertrand, Meredith G. Metzler, Gerald Lopez, 

David A. Czaplewski, Leonidas Ocola, Kartik A. Srinivasan, Samuel M. Stavis, 

Vladimir A. Aksyuk, J. Alexander Liddle, Slava Krylov, and B. Robert Ilic
 

This publication is available free of charge from: 

http://dx.doi.org/10.6028/NIST.HB.160 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NIST Handbook 160 

Nanolithography Toolbox
 

Krishna C. Balram, Daron A. Westly, Marcelo 

Davanco, Karen E. Grutter, Qing Li, Thomas 

Michels, Christopher H. Ray, Liya Yu, Richard J. 

Kasica, Christopher B. Wallin, Ian J. Gilbert, Kristen 

A. Dill, Neal A. Bertrand, Kartik A. Srinivasan, 

Samuel M. Stavis, Vladimir A. Aksyuk, J. Alexander 

Liddle, Slava Krylov, and B. Robert Ilic 

Center for Nanoscale Science and Technology 

Brian A. Bryce 

Harvey Mudd College, Claremont, CA 91711 USA 

Gregory Simelgor, 

Edico Genome, La Jolla, CA 92037 USA 

Juraj Topolancik 

Roche Sequencing Solutions, Pleasanton, CA 94588 

Nicolae Lobontiu 

University of Alaska, Mechanical Engineering, 

Anchorage, AK 99508 USA 

Pavel Neuzil 

Brno University of Technology (BUT), Central 

European Institute of Technology (CEITEC), 

Technicka 3058/10, CZ-616 00 Brno, Czech Republic 

Department of Microsystems, Northwestern 

Polytechnical University, Xi’an, P.R. China 

Vojtech Svatos 

Brno University of Technology (BUT), Central 

European Institute of Technology (CEITEC), 

Technicka 3058/10, CZ-616 00 Brno, Czech Republic 

Meredith G. Metzler and Gerald Lopez 

Quattrone Nanofabrication Facility, University of 

Pennsylvania, Philadelphia, PA 19104 USA 

David A. Czaplewski and Leonidas Ocola 

Center for Nanoscale Materials, Argonne National 

Laboratory, Lemont, IL 60439 USA 

Slava Krylov 

Tel Aviv University, School of Mechanical 

Engineering, Ramat Aviv 69978 Tel Aviv, Israel 

This publication is available free of charge from: 

http://dx.doi.org/10.6028/NIST.HB.160 

October 2016 

U.S. Department of Commerce 

Penny Pritzker, Secretary 

National Institute of Standards and Technology 

Willie May, Under Secretary of Commerce for Standards and Technology and Director 
Nanolithography Toolbox

Version 2016.10.01

Email: Nanolithography.Toolbox@nist.gov

Chapter Contents

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

Images from various CNST projects. 

National Institute of

Standards and Technology

Platform Independent Fractals 

Vertex control of shapes Grayscale Image to GDS 

Curved geometries Scripting 

Polar and Hexagonal Arrays CNST Nanophotonics Library 

Pillar - Hole Arrays Couplers 

Grating Couplers Photonic Crystals 

Spirals Waveguides, S-Bends, Y-Bends 

Gratings Custom Tapers 

Verniers Reticle Frame Generator 

Arbitrary Function Generator JEOL Job File Generator 

Label Maker - Text To GDS JEOL Write Time Estimation 

1 
Contents

Email: Nanolithography.Toolbox@nist.gov

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

1 Nanolithography Toolbox 1
 

Nanolithography Toolbox 8
 

1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
 

1.1.1 Terms Of Use . . . . . . . . . . . . . . . . . . . . . . . . . 10
 

1.1.2 Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
 

1.1.3 Acknowledgements . . . . . . . . . . . . . . . . . . . . . 10
 

1.1.4 Development Team . . . . . . . . . . . . . . . . . . . . . . 10
 

1.1.5 Future Developments . . . . . . . . . . . . . . . . . . . . 11
 

1.1.6 Java 8 Requirements . . . . . . . . . . . . . . . . . . . . 12
 

1.1.7 Distribution Package . . . . . . . . . . . . . . . . . . . . . 12
 

1.1.8 Modes of Operation . . . . . . . . . . . . . . . . . . . . . 12
 

1.1.8.1 CNST Scripting . . . . . . . . . . . . . . . . . . . . 12
 

1.1.8.2 Graphical User Interface . . . . . . . . . . . . . . 15
 

GDS Scripting 16
 

2.1 Setup, Execution and Examples . . . . . . . . . . . . . . . . . . . . 16
 

2.1.1 Quick Start Setup . . . . . . . . . . . . . . . . . . . . . . 16
 

2.1.2 Setup - CNSTdefaultValues.xml open and save directories 17
 

2.1.3 Graphical User Interface Execution . . . . . . . . . . . . 18
 

2.1.4 Running CNST Scripts From a Terminal Command Prompt 19
 

2.1.5 Running Multiple CNST Scripts - Batch File Mode . . . . 19
 

2.1.6 Running CNST Scripts Within Matlab . . . . . . . . . . . 20
 

2.1.7 Python Script Generation . . . . . . . . . . . . . . . . . . 21
 

2.1.8 NotePad++ Syntax Coloring . . . . . . . . . . . . . . . . 22
 

2.1.9 Scripting Examples . . . . . . . . . . . . . . . . . . . . . . 23
 

2.1.9.1 Basic Scripting Example . . . . . . . . . . . . . . 23
 

2.1.9.2 Scripting Example - Labeled Calibration Ruler . . 24
 

2.1.9.3 Labeled Electrodes . . . . . . . . . . . . . . . . . 25
 

2.1.9.4 MEMS Comb Drive Flexures . . . . . . . . . . . . 26
 

2.1.9.5 MEMS Radial Comb Drive Circular Hub . . . . . . 27
 

2.1.9.6 Scripting Example Files Description . . . . . . . . 28
 

2.2 Interface Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
 

2.2.1 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
 

2.2.2 Creating Structures (Cells) . . . . . . . . . . . . . . . . . 32
 

2.2.3 Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
 

2.2.4 Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
 

2.2.5 GDS Rendering Resolution . . . . . . . . . . . . . . . . . 32
 

2.2.6 Shape Resolution . . . . . . . . . . . . . . . . . . . . . . . 33
 

2 
Chapter

1 CONTENTS

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.2.7	 Font Outline Width . . . . . . . . . . . . . . . . . . . . . . 33
 

2.2.8	 Calls To Multiple CNST Script Files . . . . . . . . . . . . . 34
 

2.2.9	 Log File Time Date Stamp . . . . . . . . . . . . . . . . . . 34
 

2.3 Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
 

2.3.1 Circles and Ellipses . . . . . . . . . . . . . . . . . . . . . 35
 

2.3.1.1	 Primitive Ellipse . . . . . . . . . . . . . . . . . . . 35
 

2.3.1.2	 Vectorized Ellipse . . . . . . . . . . . . . . . . . . 35
 

2.3.2 Circle through three points . . . . . . . . . . . . . . . . . 36
 

2.3.3	 Circle With a Wave Boundary . . . . . . . . . . . . . . . . 37
 

2.3.4	 Cross . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
 

2.3.5	 L-Shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
 

2.3.6	 Pie Shaped Arc . . . . . . . . . . . . . . . . . . . . . . . . 40
 

2.3.7	 Pie Shaped Arc - Vector . . . . . . . . . . . . . . . . . . . 40
 

2.3.8	 Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
 

2.3.9	 Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
 

2.3.10	 Rounded Rectangle . . . . . . . . . . . . . . . . . . . . . 43
 

2.3.11	 Rectangular SU-Shape . . . . . . . . . . . . . . . . . . . 44
 

2.3.12	 Rectangle With a Linear Taper . . . . . . . . . . . . . . . 45
 

2.3.13	 Star . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
 

2.3.14	 Torus - Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
 

2.3.15	 Torus - Vector . . . . . . . . . . . . . . . . . . . . . . . . . 47
 

2.3.16	 Torus With a Wave boundary . . . . . . . . . . . . . . . . 48
 

2.4 Arrays and Instances . . . . . . . . . . . . . . . . . . . . . . . . . . 49
 

2.4.1 Rectangular Arrays . . . . . . . . . . . . . . . . . . . . . 49
 

2.4.2 Hexagonal Arrays . . . . . . . . . . . . . . . . . . . . . . 50
 

2.4.3 Polar Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . 51
 

2.4.4	 Instancing GDS Structures . . . . . . . . . . . . . . . . . 52
 

2.4.5	 Points To Instance . . . . . . . . . . . . . . . . . . . . . . 53
 

2.4.6	 Pillar-Hole Hexagonal and Square Arrays . . . . . . . . . 54
 

2.5 General Area Operations . . . . . . . . . . . . . . . . . . . . . . . 56
 

2.5.1	 Boolean Operations . . . . . . . . . . . . . . . . . . . . . 56
 

2.5.2	 General Area Copies, Shape Bias and A

ffine Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
 

2.6 Text Labels, PostScript and Logos . . . . . . . . . . . . . . . . . . 60
 

2.6.1	 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
 

2.6.2	 Text Outline . . . . . . . . . . . . . . . . . . . . . . . . . . 61
 

2.6.3	 Label Maker . . . . . . . . . . . . . . . . . . . . . . . . . . 62
 

2.6.4	 Label Maker - Outline Text . . . . . . . . . . . . . . . . . 64
 

2.6.5	 PostScript to GDS . . . . . . . . . . . . . . . . . . . . . . . 66
 

2.6.5.1	 PostScript Pixel Value . . . . . . . . . . . . . . . . 66
 

2.6.5.2	 PostScript Fracturing . . . . . . . . . . . . . . . . 66
 

2.6.5.3	 Defining Postscript Shapes . . . . . . . . . . . . . 66
 

2.6.6 CNST and NIST logos . . . . . . . . . . . . . . . . . . . . 68
 

2.7 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
 

2.7.1	 Arc (Torus-Circle) bounded square-hex arrays . . . . . . 69
 

2.7.2	 Bezier Curve . . . . . . . . . . . . . . . . . . . . . . . . . 70
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 3 of 488
 
Chapter

1 CONTENTS

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.3 Fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
 

2.7.4 Function Plot . . . . . . . . . . . . . . . . . . . . . . . . . 75
 

2.7.5 Grayscale . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
 

2.7.5.1 Polygons . . . . . . . . . . . . . . . . . . . . . . . 77
 

2.7.5.2 Ramp . . . . . . . . . . . . . . . . . . . . . . . . . 79
 

2.7.5.3 Spiral Staircase . . . . . . . . . . . . . . . . . . . 81
 

2.7.6 Interdigitated Electrodes . . . . . . . . . . . . . . . . . . 83
 

2.7.7 Junctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
 

2.7.7.1 T Junction . . . . . . . . . . . . . . . . . . . . . . 86
 

2.7.7.2 H Junction . . . . . . . . . . . . . . . . . . . . . . 87
 

2.7.7.3 Arrow Junction . . . . . . . . . . . . . . . . . . . . 88
 

2.7.8 Meander Channel . . . . . . . . . . . . . . . . . . . . . . 89
 

2.7.9 Points To Shape . . . . . . . . . . . . . . . . . . . . . . . . 92
 

2.7.10 Polygon Along a Path . . . . . . . . . . . . . . . . . . . . 93
 

2.7.11 Random Polygons . . . . . . . . . . . . . . . . . . . . . . 94
 

2.7.12 Random Ellipses and Vectorized Ellipses . . . . . . . . . 95
 

2.7.13 Resolution Test Pattern . . . . . . . . . . . . . . . . . . . 96
 

2.7.14 Spirals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
 

2.7.15 Spiral - Rectangular . . . . . . . . . . . . . . . . . . . . . 100
 

2.8 Alignment and Reticle Elements . . . . . . . . . . . . . . . . . . . 101
 

2.8.1 Alignment Marks - Predefined . . . . . . . . . . . . . . . 101
 

2.8.2 Alignment Marks - Custom . . . . . . . . . . . . . . . . . 105
 

2.8.3 Reticle Barcode and Label Frames . . . . . . . . . . . . . 107
 

2.8.4 Vernier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
 

2.8.5 Vernier With Labels . . . . . . . . . . . . . . . . . . . . . 109
 

2.8.6 Arrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
 

2.9 CNST Nanophotonics Library . . . . . . . . . . . . . . . . . . . . . 111
 

2.9.1 Waveguides . . . . . . . . . . . . . . . . . . . . . . . . . . 112
 

2.9.1.1 Waveguide . . . . . . . . . . . . . . . . . . . . . . 112
 

2.9.1.2 Waveguide Slot . . . . . . . . . . . . . . . . . . . 113
 

2.9.1.3 Waveguide Inverse . . . . . . . . . . . . . . . . . 114
 

2.9.1.4 Waveguide Inverse Slot . . . . . . . . . . . . . . . 115
 

2.9.1.5 Waveguide Expander . . . . . . . . . . . . . . . . 116
 

2.9.2 Tapers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
 

2.9.2.1 Linear Taper . . . . . . . . . . . . . . . . . . . . . 117
 

2.9.2.2 Linear Taper Slot . . . . . . . . . . . . . . . . . . 118
 

2.9.2.3 Linear Taper Inverse Slot . . . . . . . . . . . . . . 119
 

2.9.2.4 Exponential Taper . . . . . . . . . . . . . . . . . . 120
 

2.9.2.5 Exponential Taper Inverse . . . . . . . . . . . . . 121
 

2.9.2.6 Exponential Taper Inverse Slot . . . . . . . . . . . 122
 

2.9.2.7 Custom Taper . . . . . . . . . . . . . . . . . . . . 123
 

2.9.3 Couplers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
 

2.9.3.1 Directional Couplers . . . . . . . . . . . . . . . . 124
 

2.9.3.2 S-Bend Taper . . . . . . . . . . . . . . . . . . . . . 128
 

2.9.3.3 S-Bend Funnel . . . . . . . . . . . . . . . . . . . . 129
 

2.9.3.4 S-Bend . . . . . . . . . . . . . . . . . . . . . . . . 130
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 4 of 488
 
Chapter 1 CONTENTS

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.5 S-Bend Inverse . . . . . . . . . . . . . . . . . . . . 131
 

2.9.3.6 S-Bend Inverse Slot . . . . . . . . . . . . . . . . . 132
 

2.9.3.7 Y-Bend . . . . . . . . . . . . . . . . . . . . . . . . 133
 

2.9.3.8 Y-Bend Inverse . . . . . . . . . . . . . . . . . . . . 134
 

2.9.3.9 Y-Bend Inverse Slot . . . . . . . . . . . . . . . . . 135
 

2.9.3.10 Y-Bend - 90 degree . . . . . . . . . . . . . . . . . 136
 

2.9.3.11 Y-Bend Inverse - 90 degree . . . . . . . . . . . . . 137
 

2.9.3.12 Y-Bend Inverse Slot - 90 degree . . . . . . . . . . 138
 

2.9.3.13 90 Degree Bend . . . . . . . . . . . . . . . . . . . 139
 

2.9.3.14 90 Degree Bend Inverse . . . . . . . . . . . . . . 140
 

2.9.3.15 90 Degree Bend Inverse Slot . . . . . . . . . . . . 141
 

2.9.3.16 180 Degree Bend . . . . . . . . . . . . . . . . . . 142
 

2.9.3.17 180 Degree Bend Inverse . . . . . . . . . . . . . . 143
 

2.9.3.18 180 Degree Bend Inverse Slot . . . . . . . . . . . 144
 

2.9.4 Racetrack . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
 

2.9.5 Spiral Delay Line . . . . . . . . . . . . . . . . . . . . . . . 146
 

2.9.6 Inverse Spiral Delay Line . . . . . . . . . . . . . . . . . . 148
 

2.9.7 Gratings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
 

2.9.7.1 Grating . . . . . . . . . . . . . . . . . . . . . . . . 150
 

2.9.7.2 Apodized Grating . . . . . . . . . . . . . . . . . . 151
 

2.9.7.3 Grating Coupler . . . . . . . . . . . . . . . . . . . 152
 

2.9.7.4 Grating Couplers With Waveguides . . . . . . . . 153
 

2.9.8 Photonic Crystals and Hexagonal Arrays . . . . . . . . . 156
 

2.9.9 Disc-Ring Architectures . . . . . . . . . . . . . . . . . . . 157
 

2.9.9.1 Disc-Ring - Bezier Curves, Arcs and Endcaps . . 157
 

2.9.9.2 Disc-Ring Infinite . . . . . . . . . . . . . . . . . . . 159
 

2.9.9.3 Disc-Ring Infinite Inverse . . . . . . . . . . . . . . 161
 

2.9.9.4 Disc-Ring Infinite Inverse Positive Tone . . . . . . 163
 

2.9.9.5 Disc-Ring Symmetric Bezier . . . . . . . . . . . . 165
 

2.9.9.6 Disc-Ring Symmetric Arc . . . . . . . . . . . . . . 175
 

2.9.9.7 Disc-Ring Symmetric Inverse Bezier . . . . . . . 185
 

2.9.9.8 Disc-Ring Symmetric Inverse Arc . . . . . . . . . 195
 

2.9.9.9 Disc-Ring Symmetric Inverse Positive Tone Bezier205 

2.9.9.10 Disc-Ring Symmetric Inverse Positive Tone Arc . 215
 

2.9.9.11 Disc-Ring Pulley Bezier . . . . . . . . . . . . . . . 225
 

2.9.9.12 Disc-Ring Pulley Arc . . . . . . . . . . . . . . . . . 235
 

2.9.9.13 Disc-Ring Pulley Inverse Bezier . . . . . . . . . . 245
 

2.9.9.14 Disc-Ring Pulley Inverse Arc . . . . . . . . . . . . 255
 

2.9.9.15 Disc-Ring Pulley Inverse Positive Tone Bezier . . 265
 

2.9.9.16 Disc-Ring Pulley Inverse Positive Tone Arc . . . . 275
 

2.9.10 Waveguide Inverse Photonic Crystals (Ellipse) . . . . . . 285
 

2.9.11 Waveguide Photonic Crystals (Ellipse) . . . . . . . . . . . 286
 

2.9.12 Waveguide Inverse Photonic Crystals (Rectangle) . . . . 287
 

2.9.13 Waveguide Photonic Crystals (Rectangle) . . . . . . . . 288
 

2.9.14 Waveguide Photonic Crystals (Flush Rectangle) . . . . . 289
 

2.9.15 Various Waveguide-Disc-Tip Coupled Structures . . . . . 290
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 5 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Chapter 1 CONTENTS

2.10 MEMS - NEMS Library . . . . . . . . . . . . . . . . . . . . . . . . . . 298
 

2.10.1 Actuators . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
 

2.10.1.1 Bent Beams . . . . . . . . . . . . . . . . . . . . . 298
 

2.10.1.2 Bi-Morph Thermal Actuator . . . . . . . . . . . . 299
 

2.10.1.3 Combs and Drive Elements . . . . . . . . . . . . . 300
 

2.10.1.4 Folded Springs . . . . . . . . . . . . . . . . . . . . 302
 

2.10.2 Bolometers . . . . . . . . . . . . . . . . . . . . . . . . . . 311
 

2.10.3 Gears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
 

2.10.3.1 Hub With Straight and Circular Springs . . . . . 314
 

2.10.3.2 Radial Comb Drive . . . . . . . . . . . . . . . . . . 317
 

2.10.4 Anchored Flexures . . . . . . . . . . . . . . . . . . . . . . 319
 

2.10.5 Cantilevers . . . . . . . . . . . . . . . . . . . . . . . . . . 329
 

2.10.6 Doubly Clamped Beams . . . . . . . . . . . . . . . . . . . 340
 

2.10.7 Interacting Arrays . . . . . . . . . . . . . . . . . . . . . . 347
 

2.10.8 Stress, Strain Measurement Structures . . . . . . . . . . 357
 

2.10.8.1 Guckel Rings . . . . . . . . . . . . . . . . . . . . . 357
 

2.10.8.2 Diamond Ring . . . . . . . . . . . . . . . . . . . . 358
 

2.10.9 Suspended Fluid Cell . . . . . . . . . . . . . . . . . . . . . 359
 

Graphical User Interface 360
 

3.1 Basic Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
 

3.1.1 Pillar-Hole (Square/Hex) Array . . . . . . . . . . . . . . . 360
 

3.1.2 Torus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
 

3.1.3 Grating Coupler - Bulls Eye . . . . . . . . . . . . . . . . . 360
 

3.1.4 Spirals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
 

3.1.5 Gratings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
 

3.2 Lithography Machine Resources . . . . . . . . . . . . . . . . . . . 363
 

3.2.1 CNST Reticle Frame Generator . . . . . . . . . . . . . . . 363
 

3.2.2 Generic Reticle Frames . . . . . . . . . . . . . . . . . . . 363
 

3.2.3 Ebeam Lithography - Job and Schedule File Generator . 363
 

3.2.3.1 Default Values Initialization File . . . . . . . . . . 363
 

3.2.3.2 Main . . . . . . . . . . . . . . . . . . . . . . . . . . 363
 

3.2.3.3 Align . . . . . . . . . . . . . . . . . . . . . . . . . . 364
 

3.2.3.4 Pattern . . . . . . . . . . . . . . . . . . . . . . . . 364
 

3.2.3.5 Dose Matrix . . . . . . . . . . . . . . . . . . . . . . 365
 

3.2.4 EBL Alignment Offset . . . . . . . . . . . . . . . . . . . . 368
 

3.2.5 EBL Max Clock . . . . . . . . . . . . . . . . . . . . . . . . 368
 

3.2.6 EBL Write Time Estimation . . . . . . . . . . . . . . . . . 368
 

3.3 Advanced CAD Resources . . . . . . . . . . . . . . . . . . . . . . . 370
 

3.3.1 Label Maker . . . . . . . . . . . . . . . . . . . . . . . . . . 370
 

3.3.2 Text To GDS . . . . . . . . . . . . . . . . . . . . . . . . . . 370
 

3.3.3 Arbitrary Function Generator . . . . . . . . . . . . . . . . 370
 

3.3.4 Binary Zone Plate . . . . . . . . . . . . . . . . . . . . . . . 371
 

3.3.5 Photonic Crystals . . . . . . . . . . . . . . . . . . . . . . 372
 

3.3.6 Random Polygons . . . . . . . . . . . . . . . . . . . . . . 372
 

3.3.7 Random Rectangular Array . . . . . . . . . . . . . . . . . 373
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 6 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3.3.8 Cantilever Arrays . . . . . . . . . . . . . . . . . . . . . . . 373
 

3.3.9 Verniers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
 

3.3.10 Fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
 

3.3.11 Grayscale Image To GDS . . . . . . . . . . . . . . . . . . 374
 

Programming Reference 376
 

4.1 Programming Examples . . . . . . . . . . . . . . . . . . . . . . . . 376
 

4.1.1 Template . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
 

4.1.2 Script Method Access . . . . . . . . . . . . . . . . . . . . 377
 

4.1.3 Boolean Operations and Affine Transformations . . . . 379
 

4.1.4 Labeled Arrays . . . . . . . . . . . . . . . . . . . . . . . . 381
 

4.1.5 MEMS Perforated Flexures . . . . . . . . . . . . . . . . . 383
 

4.1.6 Custom Class Methods . . . . . . . . . . . . . . . . . . . 385
 

4.1.7 GDS Area Objects - Layers and Data-types . . . . . . . . 387
 

4.1.8 Centering GDS Area Objects . . . . . . . . . . . . . . . . 388
 

4.1.9 PostScript to GDS . . . . . . . . . . . . . . . . . . . . . . . 389
 

4.1.10 Curved Fluidic Channels . . . . . . . . . . . . . . . . . . . 391
 

4.2 Reference Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
 

4.2.1 Accessor and Mutator Methods . . . . . . . . . . . . . . 394
 

4.2.2 Miscellaneous GDS Area and Struct Methods . . . . . . 395
 

4.2.3 Shape Methods . . . . . . . . . . . . . . . . . . . . . . . . 396
 

4.2.4 Array Methods . . . . . . . . . . . . . . . . . . . . . . . . 398
 

4.2.5 Text, Labels, PostScript and Logo Methods . . . . . . . . 401
 

4.2.6 Miscellaneous Object Methods . . . . . . . . . . . . . . . 404
 

4.2.7 Alignment and Reticle Element Methods . . . . . . . . . 414
 

4.2.8 Nanophotonics Library Methods . . . . . . . . . . . . . . 417
 

4.2.9 MEMS NEMS Library Methods . . . . . . . . . . . . . . . . 453
 

Bibliography 479
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 7 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

1.1 Overview
 

P

latform independent CNST Nanolithography toolbox for scripted layout 

generation and complex processing was designed to address aggressively 

scaled nanoscale device architectures. Within the layout design phase, 

imprecise representation of curved objects [1–37] at nanoscale dimensions results in increased line-edge roughness. Scattering events from the consequent 

asperities along device peripheries leads to enhanced dissipative effects. To 

circumvent these dilemmas, along with standard commercial layout tools, we 

have developed a custom CAD scripting software package for directly streaming 

complex shapes to GDSII. 

At CNST, we have strong research efforts in nanoscale optics and photonics [38–69]. Consequently, we have developed a library of nanophotonics components (the CNST nanophotonics library contains microrings, S-bends based 

on Bezier curves, photonic crystals, variety of tapers, grating couplers [70– 

75] and other complex structures) with precise control of vertex location in 

the GDSII file. Accurate shape representation is of particular importance to 

high-resolution lithography, for example, using the either of the two NanoFab 

100keV tools with sub-nm grid snapping capability. The flexible scripting interface enables significant user customization to lay out structures outside 

of the standard available designs. Furthermore, the toolbox is platform independent and will run on any operating system (Linux, Windows and MacOS X) 

with Java standard edition (SE) 8. In addition to standard Java libraries, the 

toolbox utilizes the freely available JGDS library for encoding shapes to GDS 

objects [76]. 

The CNST nanolithography toolbox also contains primitives (ellipses, torus, 

rectangles, etc), pillar-hole arrays (rectangular, hexagonal), a variety of spirals, 

fractals, gratings, verniers, arbitrary function generator (shapes defined by 

a mathematical function), label makers, text to GDS, postScript to GDS, zone 

plates, grayscale objects [77–82], images to GDS, polar arrays (also, hexagonal and rectangular), and many more customized shapes. Additionally, we 

include a MEMS library of elements containing variety of actuators, flexures, 

clamped beams, and interacting array structures[83–103]. The package also 

contains CNST-developed reticle generators for various steppers (barcode, 

label, reticle marks), a CNST ebeam lithography write time estimator, and a 

ebeam lithography job and schedule file generator with a graphical display of 

pattern placement (Figure 1.1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 8 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

CNST

Nanolithography

Toolbox

Programming

Control

statements

Access to

scripting

methods

User

defined

custom

methods

Interface

to other

software

Machine

Resources

EBL

JDF-SDF

definition

EBL

write time

estimation

EBL

max clock

calculator

Reticle

frame

generator

GUI

Basic

shapes

Pillar-Hole

arrays

Function

generator

Spirals

Scripting

Nanophotonics

Library

MEMS-NEMS

Library

Vertex

control

Structural

hierarchy

Complex

curves

Figure 1.1: CNST Nanolithography Toolbox chart illustrating a myriad of available complex shapes, objects and functions. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 9 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

1.1.1 Terms Of Use

This software was developed at the National Institute of Standards and Technology (NIST) by employees of the Federal Government in the course of their official 

duties. Pursuant to title 17 Section 105 of the United States Code this software 

is not subject to copyright protection and is in the public domain. The NIST 

CNST nanolithography toolbox is an experimental system. NIST assumes no 

responsibility whatsoever for its use by other parties, and makes no guarantees, 

expressed or implied, about its quality, reliability, or any other characteristic. 

We would appreciate acknowledgment if the software is used. This software 

can be redistributed and/or modified freely provided that any derivative works 

bear some notice that they are derived from it, and any modified versions bear 

some notice that they have been modified. 

1.1.2 Disclaimer

This manual identifies certain commercial equipment, instruments, and materials to specify the experimental procedure. Such identification does not imply 

recommendation or endorsement by the National Institute of Standards and 

Technology, nor does it imply that the equipment, instruments, and materials 

identified are necessarily the best available for the purpose. 

1.1.3 Acknowledgements

If you developed layouts using the CNST nanolithography toolbox, please acknowledge its use by including the following reference:
 

The Nanolithography Toolbox, K. C. Balram, D. A. Westly, M. Davanco, K. Grutter,
 

Q. Li, T. Michels, C. H. Ray, L. Yu, R. Kasica, C. B. Wallin, I. Gilbert, B. A. Bryce, 

G. Simelgor, J. Topolancik, N. Lobontiu , Y. Liu, P. Neuzil, V. Svatos, K. A. Dill, N. 

A. Bertrand, M. Metzler, G. Lopez, D. A. Czaplewski, L. Ocola, K. Srinivasan, S. 

Stavis, V. Aksyuk, J. A. Liddle, S. Krylov and B. R. Ilic, J. Res. Natl. Inst. Stand. 

121, pp. 464-475 (2016). http://dx.doi.org/10.6028/jres.121.024 

1.1.4 Development Team

Many researchers at NIST, CNST and external collaborators have made substantial contributions to the nanolithography toolbox. The development team most 

notably consists of Krishna C. Balram (University of Maryland), Daron A. Westly, 

Marcelo Davanco, Karen Grutter, Qing Li (University of Maryland), Thomas 

Michels, Christopher H. Ray, Liya Yu, Richard Kasica, Christopher B. Wallin 

(University of Maryland), Ian Gilbert (University of Maryland), Brian A. Bryce 

(Harvey Mudd College), Gregory Simelgor (Edico Genome), Juraj Topolancik 

(Roche Sequencing Solutions), Nicolae Lobontiu (University of Alaska), Yuxiang 

Liu (Worcester Polytechnic Institute), Pavel Neuzil (Brno University of TechnolNIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 10 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

ogy, KIST-Europe), Vojta Svatos (Brno University of Technology),Kristen A. Dill, 

Neal A. Bertrand, Meredith Metzler (University of Pennsylvania), Gerald Lopez 

(University of Pennsylvania), David A. Czaplewski (Argonne National Laboratory), Leonidas Ocola (Argonne National Laboratory), Kartik Srinivasan, Samuel 

Stavis, Vladimir Aksyuk, J. Alexander Liddle, Slava Krylov (Tel-Aviv University) 

and B. Robert Ilic. 

1.1.5 Future Developments

The CNST nanolithography toolbox is broad in scope and continuously growing within the CNST community. The toolbox is distributed with the hope that 

it will be useful, but without any warranty, without even an implied warranty 

for any particular purpose. All efforts have been made to ensure that the 

CNST nanolithography toolbox is supported on Linux, Windows and MacOS 

X. Please direct comments, suggestions, encountered bugs to Nanolithography.Toolbox@nist.gov. The software will evolve over time, implementing 

features as the CNST identifies and prioritizes new applications. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 11 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

1.1.6 Java 8 Requirements

The graphical user interface (GUI) was constructed using JavaFX components. 

The code employs a variety of elements contained in latest java standard 

edition (SE) 8, hence earlier versions will not work correctly. To determine the 

SE version, at the (windows command or linux/mac terminal) prompt type: 

java –version

At the terminal prompt the following would appear: 

java version "1.8.0_40" 

Java(TM) SE Runtime Environment (build 1.8.0_40-b26) 

Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode) 

1.8.X_XX indicates Java version 8 is available. To run the CNST NanoLithography Toolbox, either double click on the CNSTnanoToolboxVXXXX.jar file 

(X’s represent version numbers) or run from a command prompt in a following 

manner: 

java –jar CNSTnanoToolboxVXXXX.jar

Upon execution of the java code, the CNST Nanolithography Toolbox will 

appear in a similar fashion as seen in figure 1.2. The menu appearance may 

vary slightly depending on the operating system the interface is running under. 

Figure 1.2 shows the toolbox as it appears under 64-bit Windows 7. 

1.1.7 Distribution Package

The package contains the following files and directories: 

CN ST nanoT oolboxV XXXX.jar The CNST Nanolithography Toolbox executable 

Java JAR file. X’s represent version numbers. 

CNST def aultV alues.xml Default parameter values for the CNST ebeam tool 

module, load and save file directories. 

Examples Directory containing syntax coloring XML language 

definition file, numerous scripting, GUI module 

and programming examples. 

1.1.8 Modes of Operation

1.1.8.1 CNST Scripting

The most powerful feature of the CNST nanolithography toolbox is scripting. 

Virtually any shape can be constructed using the CNST Scripting features. The 

scripting feature is listed as the first option within the resource menu. The 

scripting module reads in an ASCII file with a .cnst extension and converts 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 12 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

Figure 1.2: CNST nanolithography toolbox graphical user interface running under Windows 7. Various features are displayed within the left panel in a collapsible 

tree menu. Highlighting a node of a particular branch will display feature 

content in the main panel display. 

complex objects directly to GDS. We also provide an extensive library of objects 

including numerous nanophotonic elements. During the pattern design phase, 

space is broken up into grid points between which the CNST scripting objects 

are rendered. Figure 1.3 shows various points connecting a variety of generated nanophotonic elements (exponential taper, photonic crystal waveguide, 

y-splitters, waveguides, s-bends and rings). Syntax coloring for .cnst files is 

available using NotePad++. This feature improves readability-structure and 

errors become visually distinct. 

CNST scripting offers a myriad of options that are either not found or extremely difficult to implement within standard CAD packages that produce 

GDS files. The full command reference for CNST scripting is included in section 1.1.8.2. Figure 1.4 illustrates a variety of generated GDS shapes. CNST 

scripting is either carried out from the GUI or from the terminal command 

prompt (see section 2.1). Additionally, running batch execution of many .cnst

files is described in section 2.1.5. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 13 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

D 

E 

F 

G 

...

K 

A B C I J 

H 

Figure 1.3: Pattern layout design schematic highlighting various available nanophotonic 

elements. 

Figure 1.4: CNST Scripting example illustrating a variety of available shapes streamed 

directly to GDSII. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 14 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

1.1.8.2 Graphical User Interface

The main window of the graphical used interface is divided into three parts. 

The top title panel has the CNST logo and is static. The left panel contains a 

collapsible tree with options representing available toolbox features. The large 

right panel is the dynamic canvas displaying selected module options. 

Double clicking on a module feature or single clicking on the triangle directly 

to the left that node expands the menu options. Consequently, all module 

elements within that branch node are displayed. For instance, the Basic Shapes

branch has several objects including polygon-based pillar-hole arrays, arrays 

of tori, grating couplers, spirals and gratings. Highlighting any of the accessible 

feature nodes will display available options of the specified module. In case 

pillar-hole arrays, user defined parameters within a text field such as GDS file 

name, number of sides (shape vertices), GDS layer, rotation, radius, object 

array options (position, number of elements and pitch) along with buttons to 

generate a GDS file with the specified options, an about button, and an Exit 

button. Figure 1.5 shows a highlighted Pillar-Hole (Square/Hex) Array branch 

node within the left panel. The main panel shows various available module 

parameters within the toolbox GUI. 

Figure 1.5: Pillar-hole array module example showing various available options within 

the main panel of the toolbox GUI. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 15 of 488 
GDS Scripting

Email: Nanolithography.Toolbox@nist.gov

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1 Setup, Execution and Examples
 

Scripting execution takes place either from the graphical user interface or the 

terminal command prompt. 

2.1.1 Quick Start Setup

1. Change the <OpenDirectory> and <SaveToDirectory> parameters in the 

CNSTdefaultValues.xml setup file (see section 2.1.2). 

2. Setup syntax coloring within NotePad++ (see section 2.1.8). 

3. Create script files with extension .cnst. See scripting examples in section 2.1.9.6 and constructors in this chapter. 

4. Run scripts either within the graphical user interface (section 2.1.3) or via 

command prompt (section 2.1.4). 

16 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.2 Setup - CNSTdefaultValues.xml open and save directories

The CNST NanoLithography ToolBox requires that the CNSTdefaultValues.xml

setup file resides in the same directory as the Java executable .jar file. 

The first step in running and executing scripts requires the modification of the 

open and save directory variables within the CNSTdefaultValues.xml file. The 

toolbox will not function on some operating systems if these values are not 

properly changed. 

Open the CNSTdefaultValues.xml file within a text editor and change the 

<OpenDirectory> and <SaveToDirectory> parameters to a directory where 

.cnst script and GDS files are respectively read and saved. Figures 2.6 and 2.6 

illustrate modifications for Windows and Mac/Unix/Linux platforms. 

D:\DOCUMENTS\zTESTfiles\XMLsetupINFO.xml Monday, December 21, 2015 9:40 AM

<OpenDirectory>C:\Users\user\CNSTnanoToolBox\loadFiles\</OpenDirectory>

<SaveToDirectory>C:\Users\user\CNSTnanoToolBox\saveFiles\</SaveToDirectory>

<OpenDirectory>/Users/user/CNSTnanoToolBox/loadFiles/</OpenDirectory>

<SaveToDirectory>/Users/user/CNSTnanoToolBox/saveFiles/</SaveToDirectory>

(a) 

D:\DOCUMENTS\zTESTfiles\XMLsetupINFO.xml Monday, December 21, 2015 9:34 AM

<OpenDirectory>C:\Users\user\Documents\CNSTnanoToolBox\loadFiles\</OpenDirectory>

<SaveToDirectory>C:\Users\user\Documents\CNSTnanoToolBox\saveFiles\</SaveToDirectory>

<OpenDirectory>/Users/user/CNSTnanoToolBox/loadFiles/</OpenDirectory>

<SaveToDirectory>/Users/user/CNSTnanoToolBox/saveFiles/</SaveToDirectory>

(b) 

Figure 2.6: Modification to open and save directory variables within the CNSTdefaultValues.xml setup file for (a) Windows and (b) Mac/Unix/Linux platforms. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 17 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.3 Graphical User Interface Execution

Start the graphical user interface by either double clicking on the executable 

jar file or at the prompt type: 

java –jar CNSTnanoToolboxVXXXX.jar

When the interface appears, in the left panel click CNST Scripting (step 1) 

and then click the Load Script button (step 2). Within the file manager locate 

the .cnst script file (step 3), click Open (step 4) and the full path of the script 

file will appear in the Script File: label. Type in the desired GDS file name 

and click the Create GDS button. Under the STATUS: label, the full path of the 

saved GDS file will appear. 

(a)

(b)

(c)

(d)

Figure 2.7: GDS generation using the graphical scripting interface. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 18 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.4 Running CNST Scripts From a Terminal Command Prompt

At the terminal command prompt, the command below allows script execution 

without the graphical user interface. Additionally, using the getfonts option 

allows the extraction of all available system font names to be stored into 

atime/date stamped ASCII file. 

java –jar CNSTnanoToolboxVXXXX.jar [option]

[option]

cnstscripting inputFileName.cnst outputFileName.gds

Process a CNST scripting file inputFileName.cnst and cast the 

resulting structures into an outputFileName.gds file. 

getfonts

Obtain system fonts and store them into a time/date stamped file. 

Useful for correctly spelling font names within various available 

text constructors. 

2.1.5 Running Multiple CNST Scripts - Batch File Mode

Batch mode execution of many CNST script files is performed from a terminal 

command prompt. In Windows, to open the command prompt, click Start then 

type cmd within the ’search programs and files’. Within the Linux and Mac 

environments open a terminal command prompt. First create a text file where 

each line entry has the format defined within the previous section ( 2.1.4). In 

Windows, name the file with an extension BAT, i.e. CNSTbatchFile.BAT. For 

instance, the text file would have the following entries: 

java –jar CNSTnanoToolboxVXXXX.jar cnstscripting scriptFile01.cnst output01.gds 

java –jar CNSTnanoToolboxVXXXX.jar cnstscripting scriptFile02.cnst output02.gds 

java –jar CNSTnanoToolboxVXXXX.jar cnstscripting scriptFileN.cnst outputN.gds 

To execute the ASCII batch file, at the windows DOS prompt type the file name: 

C:\Users\robilic\CNSTscripting>CNSTbatchFile.BAT

In Linux or Mac type dot then backslash followed by the filename: 

robilic\CNSTscripting $>.\CNSTbatchFile.BAT

.

.

.

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 19 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.6 Running CNST Scripts Within Matlab

Matlab allows for execution of system commands and return outputs. Figure 2.1.6 shows how matlab generates a matlabScript.cnst file. Subsequently, 

using a system command, matlab runs java to create a GDS file. This was 

accomplished by using commands described in section 2.1.4. Lastly, another 

system command executes kLayout, an open source layout viewer and editor, in 

order to display the output GDS file. The generated file has two GDS structures. 

The first has a single ellipse, and the second has 100 ellipses, each cast into a 

different GDS layer, along a diagonal. The latter was generated using the for

loop control statement. 

The return status shows the command prompt output during code execution. 

In this case, the directory where the output GDS resides (see save directory 

information in section 2.1.2). 

1/6/16 5:16 PM D:\DOCUMENTS\z...\CNSTscriptingWithMatlab.m 1 of 1

fileID = fopen('matlabScript.cnst','w');

fprintf(fileID,'0.001 gdsReso\n');

fprintf(fileID,'0.001 shapeReso\n\n');

fprintf(fileID,'# Creating a simple ellipse with Matlab\n');

fprintf(fileID,'<matlabEllipse struct>\n');

fprintf(fileID,'11 layer\n');

fprintf(fileID,'0 0 2 4 44 0 ellipse\n\n');

% array of 100 ellipses along a diagonal with different GDS layers

fprintf(fileID,'# Creating array of 100 ellipses along the diagonal\n');

fprintf(fileID,'<matlabEllipseArray struct>\n');

for i=1:100 

fprintf(fileID,'%s%s\n', int2str(i),' layer');

fprintf(fileID,'%s%s%s%s\n', int2str(i), ' ', int2str(i),' 0.4 4 44 0 ellipse');

end

fclose(fileID);

% run the java code from matlab

[status,cmdout] = dos('java -jar CNSTnanoToolbox.jar cnstscripting matlabScript.cnst 

matlabGDSoutput.gds');

status, cmdout

% open GDS with klayout - use quotes around directory names with spaces

[status,cmdout] = dos('"C:\Program Files\KLayout (64bit)\klayout" D:

\DOCUMENTS\zTESTfiles\saveFiles\matlabGDSoutput.gds');

status, cmdout

Figure 2.8: GDS generation and viewing using a Matlab script. 

Example matlab files are located in \EXAMPLES\CNSTscripting\Matlab. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 20 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.7 Python Script Generation

Python programming can be used to create complex CNST scripting files. Programming in general allows for variable initialization, loops, Booleans, branching, control statements, conditionals and other methods to be used when 

algorithmically constructing script files. The program shown in figure 2.9creates a pythonScript.cnst script file that contains two GDS structures, one 

with a single ellipse, and another with an array of circles along a circular path 

in another GDS structure. The latter is accomplished within a for loop repetition 

statement. Subsequently the nanolithography toolbox is used to create an 

output GDS file seen as an inset in figure 2.9. Example python files are located 

in \EXAMPLES\CNSTscripting\Python. 

# -*- coding: utf-8 -*-

"""

Created on Wed Jan 20 21:21:47 2016

@author: rob

"""

import math

f = open('pythonScript.cnst', 'w')

f.write(str('0.001 gdsReso\n'))

f.write(str('0.001 shapeReso\n\n'))

f.write(str('# Creating a simple ellipse with Python'))

f.write(str('<pythonEllipse struct>\n'))

f.write(str('11 layer\n'))

f.write(str('0 0 2 4 44 0 ellipse\n\n'))

f.write(str('# 100 circles along a circular path\n'))

f.write(str('<pythonCirclesAlongPath struct>\n'))

radius = 10

num = 100

increment = 2*math.pi/num

for x in xrange(num):

f.write(str('%d layer\n' %(x+1)))

xCoord = radius * math.cos(x*increment)

yCoord = radius * math.sin(x*increment)

f.write(str('%.4f %.4f 0.2 0.2 44 0 ellipse\n'%(xCoord,yCoord)))

f.close

1

Figure 2.9: Python programming example used to generate an array of 100 circles, each 

within a distint GDS layer, along a circular path. Inset shows the rendered 

GDS output of circles along a circular path. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 21 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.8 NotePad++ Syntax Coloring

The package provides a language definition XML file for Notepad++. The constructor keywords listed within the XML file could be used to create a language 

definition file for any text editor. Syntax coloring within NotePad++ is accomplished by reading in the provided CNSTscripting.xml language definition file. 

Subsequently, all files with extension .cnst will have proper syntax coloring (Figure 2.10). This is useful when visualizing and debugging scripts. The following 

is a procedure for NotePad++ syntax coloring: 

1. Language -> Define your language.... -> click Import.... 

2. choose \EXAMPLES\CNSTscripting\NotePad++XML\CNSTscripting.xml language definition file and click open 

3. close NotePad++ and reopen a file with extension .cnst 

4. Some versions may require users to repeat this procedure 

new 1 Monday, April 13, 2015 4:22 PM

<postScript1 struct>

1 layer

40.801 202.615 m 62.605 218.252 82.602 238.932 98.328 262.112 c 109.402

278.424 120.648 299.865 126.66 316.112 c 131.602 329.459 132.156 329.065

119.484 321.201 c 88.063 301.713 81.117 296.862 71.086 287.424 c 57.43

274.576 48.113 259.424 41.59 239.428 c 37.141 225.803 31.551 197.69 33.297

197.725 c 33.684 197.733 37.059 199.932 40.801 202.615 c h

<postScript2 struct>

2 layer

300.0 600.0 moveto

300.0 655.2284749830793 277.61423749153965 700.0 250.0 700.0 curveto

222.38576250846035 700.0 200.0 655.2284749830793 200.0 600.0 curveto

200.0 544.7715250169207 222.38576250846035 500.0 250.0 500.0 curveto

277.61423749153965 500.0 300.0 544.7715250169207 300.0 600.0 curveto

closepath

<verniersTest struct>

# Verniers between Layer 1 and Layer 4

<0 0 1 4 0.01 11 Lyr1 Layer4 10 1 50 4 verniers>

# constructing polar array

<polarArrayV1rotated struct>

<myPattern 340.0 220.0 30.0 100.0 250.0 50.0 1R arrayPolar>

Figure 2.10: Notepad++ screenshot illustrating syntax coloring of .cnst script files 

defined by the CNSTscripting.xml language definition file. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 22 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.9 Scripting Examples

2.1.9.1 Basic Scripting Example

Figure 2.11 shows a simple script that creates two structures, one with a 

rectangle and the other with two ellipses. The procedure for creating script 

files is the following: 

1. gdsReso defines the output rendering resolution (in μm) of the GDS file. This 

parameter is included at the top of each file. 

2. shapeReso defines the rendering resolution (in μm) of vectorized shapes. 

This parameter can be placed anywhere in the file and can be changed for each 

vectorized shape. 

3. Create structures. 

4. Initialize layers and dataTypes, then place objects into structures. The 

following subsections introduce a variety of constructors for creating complex 

shapes. 

D:\DOCUMENTS\zTESTfiles\loadFiles\0000ANLpattern.cnst Tuesday, September 27, 2016 4:44 

0.001 gdsReso

0.001 shapeReso

# create a GDS structure/cell to store shapes

<simpleRectangles struct>

# set GDS layer

4 layer

# create a rectangle

-5 20 0 28 0 rectangle

# create another structure

<circlesAndEllipses struct>

# create an ellipse

0 0 40 100 88 22.0 ellipse

# create ellipse in GDS layer 40 with a datatype 44

40 layer

44 dataType

100 80 40 40 44 0 ellipse

Figure 2.11: Basic scripting example (scriptingExampleBasicScriptingExample.cnst). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 23 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.9.2 Scripting Example - Labeled Calibration Ruler

The example script creates a labeled calibration ruler. Tick marks are 250 nm 

wide and 5μm long. Markers labeled 5 and 10 markers are 7.5μm and 10μm long. 

This type structure is useful for calibrating (optical and electron) microscopes. 

C:\Users\rob\Downloads\zJava\loadFiles\0000000000scriptingExampleRuler.cnst Monday, January 18, 2016 6:33 PM

0.001 gdsReso

0.001 shapeReso

4 layer

# Example - Labelled Calibration Ruler

#### tick marks 5um long and 250nm wide

<tickMark struct>

-0.125 0 0.125 5 0 rectangle

#### tick mark extension 2.5um long and 250nm wide

<tickMarkExtension struct>

-0.125 0 0.125 2.5 0 rectangle

<calibrationRuler struct>

# 20um long

<tickMark 0 0 21 1 1 0 1 arrayRect>

# add tick mark extensions every 5um

<tickMarkExtension 5541501 arrayRect>

# add tick mark extensions every 10um

<tickMarkExtension 10 7.5 2 1 10 0 1 arrayRect>

# tick mark label (TAB delimited)

{0 5 10 15 20um 1 5 Arial 2 -0.5 -2 0051 rowCol labelMaker}

-1-

(a)

(b)

Figure 2.12: Labeled calibration ruler example. (a) Example script (scriptingExampleLabeledCalibrationRuler.cnst) illustrates the construction of (b) a 

labeled calibration ruler. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 24 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.9.3 Labeled Electrodes

The script initiates with a 250μm bond pad. The structure is then instantiated 

into a 5 × 1 rectangular array, Bezier curves and alignment crosses are then 

added. This structure (electrodeSegment) is then instantiated to construct the 

electrodeHalf, which is then used to form the electrodes structure. Bond 

pad labels are then added and electrodes structure is instantiated into top

using the instanceSym constructor, ensuring symmetric extents around the 

origin. 

D:\DOCUMENTS\zTESTfiles\loadFiles\zTEMP\ElectrodeExample.cnst Wednesday, December 23, 2015 9:31 AM

0.001 gdsReso

0.01 shapeReso

# 250um bondpad

<bondPad250um struct>

0 0 250 250 0 rectangle

# 1/8 electrode

<electrodeSegment struct>

<bondPad250um 0 0 5 1 500 1 1 arrayRect>

<625 250 625 900 2200 625 2200 2150 20 0 bezierCurve>

<1125 250 1125 900 2250 625 2250 2150 20 0 bezierCurve>

<1625 250 1625 900 2300 625 2300 2150 20 0 bezierCurve>

<2125 250 2125 900 2350 625 2350 2150 20 0 bezierCurve>

# JEOL alignment crosses

500 500 10 60 0 cross

750 750 10 60 0 cross

1000 1000 10 60 0 cross

1250 1250 10 60 0 cross

1500 1500 10 60 0 cross

#1/2 electrode

<electrodeHalf struct>

<electrodeSegment 0 0 N 1 0 instance>

<electrodeSegment 4750 0 Y 1 0 instance>

<electrodeSegment 0 0 Y 1 -90 instance>

<electrodeSegment 4750 0 N 1 90 instance>

# electrode set

<electrodes struct>

<electrodeHalf 0 0 N 1 0 instance>

<electrodeHalf 0 4750 X 1 0 instance>

# electrode labels top and bottom - Letters

{0 8 Serif 100 410 75 0 0 500 0 autoOutLett labelMaker}

{0 8 Serif 100 410 4575 0 0 500 0 autoOutLett labelMaker}

# electrode labels left and right - Numbers

{8 0 Serif 100 0 0 100 4275 0 500 autoOutLett labelMaker}

{8 0 Serif 100 0 0 4600 4275 0 500 autoOutLett labelMaker}

# top cell centered electrode cell using instanceSym

<top struct>

<electrodes 0 0 0 0 4750 4750 N 1 0 instanceSym>

-1-

Figure 2.13: Scripting example (scriptingExampleElectrode.cnst) illustrates the 

construction of electrodes with labels and 5 levels of alignment crosses. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 25 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.9.4 MEMS Comb Drive Flexures

The example script below first creates a microelectromechanical systems 

(MEMS) flexure with two anchored pads using the flexure2E constructor. Subsequently, two linear comb drive structures are connected to the flexure element. 

D:\DOCUMENTS\zTESTfiles\loadFiles\zTEMP\scriptingExampleMEMSv1.cnst Thursday, January 07, 2016 7:40 PM

0.001 gdsReso

0.001 shapeReso

4 layer

# Example - MEMS Flexure With Comb Drive Elements

<memsExample struct>

# Flexure

0 0 8.2 0.2 0.88 0.22 2.44 20 8 1.44 2.42 3.4 0.2 8.44 4.4 0.4 7 0 flexure2E

# Top Comb

-5.15 29.48 0.4 3.4 10.1 9.1 10 1.1 4.1 31 0.2 7 0 combDriveV1

# Bottom Comb

5.15 -29.48 0.4 3.4 10.1 9.1 10 1.1 4.1 31 0.2 7 180 combDriveV1

-1-

(a)

(b)

Figure 2.14: MEMS linear comb drive actuating flexure example. (a) Example script 

(scriptingExampleMEMSv1.cnst) illustrates the construction of (b) comb 

drive elements connected to a movable flexure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 26 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.9.5 MEMS Radial Comb Drive Circular Hub

The example script below first creates four radial comb structures connected 

to a circular hub. 

(b)

Figure 2.15: MEMS radial comb drive actuator example. (a) Example script 

(scriptingExampleMEMSv2.cnst) used to create (b) four radial comb drive 

elements connected to a circular hub. 

D:\DOCUMENTS\zTESTfiles\loadFiles\0000000000scriptingExampleMEMSv2.cnst Thursday, January 07, 2016 7:28 PM

0.001 gdsReso

0.001 shapeReso

4 layer

# Example - MEMS Flexure With Comb Drive Elements

<circularSpringExample struct>

# circular spring

0 0 1 4 3.4 40 128 18 0.2 7 0 circularSpring

# radial combs

10 0 4 40 1 30 1.1 2.2 10 32 40 20 1 7 0 combRadialV2

0 10 4 40 1 30 1.1 2.2 10 32 40 20 1 7 90 combRadialV2

-10 0 4 40 1 30 1.1 2.2 10 32 40 20 1 7 180 combRadialV2

0 -10 4 40 1 30 1.1 2.2 10 32 40 20 1 7 270 combRadialV2

-1-

(a)

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 27 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.1.9.6 Scripting Example Files Description

CNST scripting offers a variety of constructor objects that allow for any conceivable shape to be rendered into a GDS output. This chapter includes a number of 

CNST scripting examples designed to elaborate on the functionality of these objects. Overall, the example collection covers each CNST scripting constructor. 

To improve the readability of the script, we included brief constructor documentation comments in each of the presented examples. The example scripts 

(.cnst files) and the corresponding GDS output files are contained in a folder 

\loadFiles\CNSTscripting. The folder also contains an Excel spreadsheet 

CNSTscripting.xlsx with data used in several presented examples. A brief 

description of each example script file is given below. 

scriptingAlignmentFeatures.cnst contains examples of variety of multilevel preconfigured and custom user defined alignment mark strategies, verniers, 

and arrows. Details of these features are described in section 2.8. 

scriptingArraysAndInstancing.cnst creates a structure with the name myPattern constructed from various primitive elements, including text and spiral 

objects. The structure is then instantiated at a 10X reduced magnification. 

Furthermore, the structure is arranged into rectangular, polar and hexagonal 

arrays. 

scriptingBasicShapes.cnst is a simple script demonstrating the use of primitive shapes. First, we introduce line comments. Then, resolution features of 

the GDS rendered output and vectorized shapes is explained. Next, we present 

constructors for creating GDS structures (cells) and layers. Directly following, 

ellipses, vectorized ellipses, tori (arcs), rectangles, rounded rectangles, polygons, star shapes, and crosses are constructed within initialized GDS structures 

and layers. 

scriptingBezierCurve.cnst illustrates the use of the Bezier curve constructor. 

scriptingBooleansGenAreasBiasTransformations.cnst is an example demonstrating extraction of layer shapes from a GDS structure and casting the resulting shapes into a generalized area object. Using these objects boolean 

operations, general area copies, shape biasing and affine transformation of the 

areas is demonstrated. 

scriptingCNSTasmlContactLabelBarcodeGenerator.cnst demonstrates the 

use of various constructors used to generate contact lithography (label and 

logo) and CNST ASML PAS5500 i-line stepper reticles (reticle marks, label, 

barcode and logo). 

scriptingCircleTorusWave.cnst example demonstrates circular (section 2.3.3) 

and torus (section 2.3.16) structures with sinusoidally varying boundaries. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 28 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

scriptingCustomTaper.cnst example employs data from the CNSTscripting.xlsx file (CustomTaper sheet) to create a taper defined by the (x,y) point 

pairs. Data was simply copied and pasted into the cnst script file, then terminated by Tx Ty θ(Tx,Ty ) customTaper. 

scriptingDiscRingPulleysBezier.cnst(Bezier - angle defined coupling), scriptingDiscRingPulleysBezierLC.cnst (Bezier - coupling length defined) and 

scriptingDiscRingPulleysArc.cnst (Arcs - both angle and coupling length 

defined) show various examples of the disc pulley system described in sections 2.9.9.2 to 2.9.9.16. 

scriptingDiscRingSymmetricPulleyDOUBLE1.cnst, scriptingDiscRingSymmetricPulleyDOUBLE2.cnst ,scriptingDiscRingSymmetricPulleyDOUBLE3.cnst

and scriptingDiscRingSymmetricPulleyDOUBLE4.cnst show various examples of the ring-disc systems with two coupling regions described in sections 2.9.9.2 

to 2.9.9.16. 

scriptingExampleBasicScriptingExample.cnst is an example of a basic script 

shown in section 2.1.9.1. 

scriptingExampleElectrode.cnst is an example script of labeled electrodes 

with alignment crosses as shown in section 2.1.9.3. 

scriptingExampleLabeledCalibrationRuler.cnst example script creates the 

labeled calibration ruler in section 2.1.9.2. 

scriptingExampleMEMSv1.cnst script creates a MEMS flexure with two linear 

comb drive elements. Details of this scripts are included in section 2.1.9.4. 

scriptingExampleMEMSv2.cnst script creates four MEMS radial comb drives 

connected to a circular hub as described in section 2.1.9.5. 

scriptingFractals.cnst shows the use of various fractal constructors defined in section 2.7.3. 

scriptingFunctionPlot.cnst shows several functional plotting examples using constructors defined in section 2.7.4. 

scriptingGratingsAndGratingCoupler.cnst is an example using constructors from sections 2.9.7.1 and 2.9.7.3. 

scriptingGrayscale.cnst is an example using a variety of grayscale constructors from section 2.7.5. 

scriptingInstanceExamples.cnst are a collection of examples using the instance constructor section 2.4.4. 

scriptingLabelMaker.cnst was used to create the GDS rendered output in 

Figure 2.45. 

scriptingLabelOutline.cnst illustrates the use of constructors from section 2.6.4. Here, text outlines are used to generate chip labels. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 29 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

scriptingLogos.cnst example shows the use of the three logo constructors 

from section 2.6.6. 

scriptingMeanderChannels.cnst illustrates various meandering channels 

with end reservoirs using constructors from section 2.7.8. 

scriptingMEMSactuators.cnst shows various examples of MEMS actuators 

as described in section 2.10.1. 

scriptingMEMSarraysFLAT.cnst and scriptingMEMSarraysHIERARCHY.cnst

shows interacting MEMS arrays as described in section 2.10.7. 

scriptingMEMScantilevers.cnst shows various examples of cantilevers of 

varying length extending from a base as described in section 2.10.5. 

scriptingMEMSdoublyClampedBeams.cnst shows various examples of doubly 

clamped beams of varying length extending from a base as described in section 2.10.6. 

scriptingMEMSflexures.cnst shows various MEMS accelerometer type anchored flexures with a proof mass as described in section 2.10.4. 

scriptingMEMSstressStrainMeasurementStructures.cnst shows various MEMS 

stress-strain measurement devices including Guckel Rings (see section 2.10.8). 

scriptingMISCobjects.cnst shows a variety of miscellaneous objects (interdigitated electrodes) found in section 2.7. 

scriptingMultiFile1.cnst, scriptingMultiFile2.cnst, scriptingMultiFile4.cnst and scriptingMultiFile8.cnst are files used to generate scriptingMultiFile.gds. This is an example that calls multiple script files to generate a GDS output as seen in section 2.2.8. 

scriptingPhotonicCrystalsHexArrays.cnst example demonstrates the use 

of photonic crystals defined in section 2.9.8. 

scriptingPhotonicsCoupledWaveguideDiscTip.cnst example demonstrates 

the use of various coupled architectures of waveguides, discs and tips, as defined in section 2.9.15. 

scriptingPhotonicsCouplersBendsMisc.cnst example demonstrates the use 

of various waveguides, slot waveguides and couplers defined in sections 2.9.1.1 

to 2.9.3.15. 

scriptingPhotonicsGratingCouplersWithWaveguides.cnst example highlights 

grating couplers with integrated waveguides as defined in section 2.9.7.4. 

scriptingPillarHoleHexagonalSquareArrays.cnst example demonstrates 

the use of pillar-hole hexagonal and square arrays defined in section 2.4.6. 

scriptingPoints2Instance.cnst is a script demonstrating structure instantiation at user defined (x,y) point pairs. In this case a structure test is created 

and instantiated along a spiral path. Coordinates for the path were calcuNIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 30 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

lated using Excel and presented in the supplementary CNSTscripting.xlsx

file (SpiralArray sheet). 

scriptingPoints2Instance.cnst script renders two user defined shapes. Both 

shapes are defined within the supplementary CNSTscripting.xlsx file (CustomTaper and Gaussian sheets). 

scriptingPolyPath.cnst script creates two distinct paths along user defined 

(x,y) point pairs. Here, the two paths are defined within the supplementary 

CNSTscripting.xlsx file (CustomTaper and Gaussian sheets). 

scriptingPostScript.cnst demonstrates postScript file conversion to a GDS 

rendered shape. Postscript statements were extracted from the supplementary 

file scriptingPostScript.eps using Figure 2.47 guidelines. 

scriptingRaceTrack.cnst was used to create the GDS rendered output in 

Figure 2.131. 

scriptingSpiralDelayLines.cnst describes the usage of spiral delay line 

constructors (section 2.9.5). The example illustrates the ST (number of skipped 

turns) parameter from the spiralDelayLineArchV2 constructor. In the example, 

ST varies from 0 to 8 while all other parameters remain constant. 

scriptingSpiralDelayLinesInverse.cnst similar to the previous example, 

except the spirals form a slot waveguide of width W defined by the exposure sleeve We. Example describes the inverse spiral delay line constructors 

(Archimedes and Fermat as defined in section 2.9.6) and illustrates the ST

(number of skipped turns) parameter from the spiralDelayLineArchV2Inv constructor. In the example, ST varies from 0 to 4 while all other parameters remain 

constant. 

scriptingSpirals.cnst demonstrates production of Archimedes, Fermat and 

Logarithmic spirals as defined in section 2.7.14. 

scriptingText.cnst demonstrates the use of textgds constructor for creating 

text objects within GDS files. 

scriptingTextOutline.cnst example shows the use of the textOutline constructor. As shown in figure 2.44, the rendered fonts are defined by a shape 

outline of a user-specified width (fontOutline). This feature is useful when 

labeling devices defined by write-time-limited, electron beam lithography systems. 

scriptingVerniers.cnst illustrates the use of verniers between two lithographic levels. 

scriptingWaveGuidePhCs.cnst example demonstrates the use of various photoniccrystal based waveguides defined in sections 2.9.10 to 2.9.14. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 31 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.2 Interface Functions
 

2.2.1 Comments

Line comments begins with #. Comments begin with a new line. Comments 

cannot be appended within or at the end of a scripting command line. 

2.2.2 Creating Structures (Cells)

The method creates a GDS structure (cell). Subsequent elements will be placed 

into the defined cell. If the cell already exists, then elements will be added to the 

existing structure. Structure names may be up to 32 characters long. Allowed 

structure character names are A −Z, a − z, 0 − 9, underscore (_), question mark 

(?) and dollar sign ($). 

<structureN ame struct>

2.2.3 Layer

The method defines a GDS layer for subsequent shapes. Allowed GDS layer 

numbers range from 0 − 255. Any value outside this range will automatically be 

set to GDS layer 0. 

layerN umber layer

2.2.4 Data Type

The method defines a GDS data-type for each layer. Allowed GDS data-type 

numbers range from 0 − 255. Any value outside this range will automatically be 

set to GDS data-type 0. 

dataT ypeN umber dataType

2.2.5 GDS Rendering Resolution

The method sets the snapping grid of the final GDS output. Default global value 

is 0.001μm. Parameter gdsResolution is specified in units of micrometers. 

gdsResolution gdsReso

0.001 gdsReso defines a 0.001μm rendering resolution. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 32 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.2.6 Shape Resolution

The method sets the rendering resolution resolution for subsequent shapes 

(primarily vector defined shapes, S-Bends, Y-Bends, postscript file conversions, 

Text elements, etc). Default global value is 0.001μm. This value could be 

changed for each shape, providing flexibility on the number of points used to 

define a particular GDS shape. Parameter shapeResolution is specified in units 

of micrometers. 

shapeResolution shapeReso

0.001 shapeReso defines a 0.001μm rendering resolution. 

(a) (b) (c) 

Figure 2.16: shapeReso example illustrating rendering a text object at (a) 1μm (b) 

0.1μm and (c) 0.01μm. 

2.2.7 Font Outline Width

The method sets the font outline width (in micrometers). This is used for outline 

text and label objects (see sections 2.44 and 2.6.4). Default global value is 

0.1μm. This value could be changed for each outlined object 

f ontOutlineW idth fontOutline

0.400 fontOutline defines a 0.400μm font outline width. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 33 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.2.8 Calls To Multiple CNST Script Files

The fileName constructor allows script files to call other CNST script files. The 

called script contents (from file cnstScriptFileName) will be executed until 

the end of file is reached, then the execution process jumps back to the original 

script and continues to process shapes. Overall, this method allows users to 

break up the process flow over many script files. 

<cnstScriptFileName fileName>

Script files residing in folders within the root directory can be called in the 

following manner: 

Windows: 

<dirName\cnstScriptFileName fileName>

Mac/Unix/Linux: 

<dirName/cnstScriptFileName fileName>

NOTE: Directories and file names can not contain white characters such as 

spaces or tabs. This method assumes that cnstScriptFileName has the extension .cnst, i.e. cnstScriptFileName.cnst, hence .cnst must be omitted in the 

file label cnstScriptFileName. The root directory is defined by the <OpenDirectory> field within the CNSTdefaultValues.xml setup file. Also, backslash 

(Windows) and forward slash (MacOSX, Linux) characters are omitted prior to 

the first directory statement (dirName). 

2.2.9 Log File Time Date Stamp

At the end of each GDS export a log file, containing a variety of information, 

including error messages, is created. The log filename assumes the name of the 

CNST script, with .log extension. During subsequent executions of a distinct 

script file, the log file will be overwritten. The constructor logFileTimeDate

creates log files with filenames containing additional time and date information, 

hence each script execution will create a new log file. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 34 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3 Shapes
 

2.3.1 Circles and Ellipses

2.3.1.1 Primitive Ellipse

Elliptical shape is centered at (x,y), defined by two radii (rx and ry ), the number 

of sides (Nsides) and rotated about the center at an angle θ(x,y) expressed in 

degrees. In this scenario, the shape defining vertices are evenly distributed at 

angular increments of 2π/Nsides. 

x y rx ry Nsides θ(x,y) ellipse

2.3.1.2 Vectorized Ellipse

Elliptical shape is constructed from Bezier curves, centered at (x,y), defined by 

two radii (rx and ry ), and rotated about the center at an angle θ(x,y) expressed 

in degrees. Rendering resolution of the vectorized shape (number of shape 

vertices) is controlled using the shapeReso parameter (see section 2.2.6). 

Unlike the primitive ellipse example where shape vertices are evenly distributed, 

since the vectorized form is constructed using Bezier curves, vertices are not 

regularly spaced. More vertices are allocated to regions of higher curvature. 

x y rx ry θ(x,y) ellipseVector

ry

r (x,y) x

θ(x,y)

Figure 2.17: ellipse and ellipseVector constructor parameters. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 35 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(x2,y2) (x3,y3) 

2.3.2 Circle through three points

The resulting shape is defined by the the three points and the number of sides 

(Nsides). 

(x1,y1) 

Figure 2.18: circlethree parameters. 

x1 y1 x2 y2 x3 y3 Nsides circlethree

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 36 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.3 Circle With a Wave Boundary

Circular structure of radius r with a sinusoidal boundary centered at (x,y). A

represents the sine wave amplitude, n is an integer number of oscillations 

along the boundary extending from 0 to 2π, Ns is the number of sides used to 

construct the boundary, and θ(x,y) is the rotation about the center point. 

x y r n A Ns θ(x,y) circleWave

(x,y)

r

Figure 2.19: Circle with a sinusoidal boundary variation. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 37 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.4 Cross

Cross is defined by the center (x,y), width (W ), length (L) and rotation about 

the center at an angle θ(x,y) expressed in degrees. 

x y W L θ(x,y) cross

L

W

(x,y) 

Figure 2.20: cross constructor parameters. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 38 of 488 
2.3.5 L-Shape

L-shape is defined by the center (x,y), widths (W1 and W2), lengths (L1 and L2) 

and rotation about the center at an angle θ(x,y) expressed in degrees. 

x y W1 L1 W2 L2 θ(x,y) Lshape

L2

W1

W2

L1

(x,y) 

Figure 2.21: Lshape constructor parameters. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 39 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.6 Pie Shaped Arc

Arc shape is centered at (x,y), defined by an two radii (rx and ry ), sweep angles, 

the number of sides (Nsides) and rotated about the center point by θ(x,y). Sweep 

angles, start and end angles (θs and θe), and θ(x,y) are expressed in degrees. 

y

ry

(x,y) 

Figure 2.22: arc constructor used to create user defined pie-shaped arc sections. 

x y rx ry θs θe Nsides θ(x,y) arc

2.3.7 Pie Shaped Arc - Vector

The vectorized pie shaped arc is constructed using Bezier curves. Rendering 

resolution of the defined shape is controlled using the shapeReso parameter 

defined in section 2.2.6. 

x y rx ry θs θe θ(x,y) arcVector

θ(x,y)

x

θs

θe

rx

Waveguide 

Figure 2.23: Illustration shows an arc section at one end of a waveguide. Rounding 

waveguide corners alleviates stress crowding at sharp corners. This is 

particularly useful when patterning thick stressed layers (resist, thin films, 

etc). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 40 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.8 Polygon

Polygon is defined by the center (x,y), outer radius (r), number of sides (Nsides), 

and rotation about the center at an angle θ(x,y) expressed in degrees. A shape 

is characterized by an arbitrary number of vertices to form a closed figure. 

x y r Nsides θ(x,y) polygon

r

(x,y) 

θ

Figure 2.24: polygon constructor parameters. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 41 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.9 Rectangle

The shape consists of four 90◦ corners. Three constructors are used to define 

the rectangular object. 

xLL yLL xUR yUR θ(xLL,yLL) rectangle

xLL yLL L H θ(x rectangleLH LL,yLL)

xC yC L H θ(xC,yC) rectangleC

(xUR,yUR) 

θ(xLL,yLL) θ(xLL,yLL)

H

(xC,yC) 

θ(xC,yC)

H

(xLL,yLL) (xLL,yLL) L L

(a) (b) (c) 

Figure 2.25: Three rectangle constructors. (a) rectangle, (b) rectangleLH, and 

(c) rectangleC

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 42 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.10 Rounded Rectangle

Rounded rectangle constructor roundrect is defined using the lower left corner 

(xLL,yLL), length (L) and height values (H). The curved sections of the rounded 

rectangle are defined by the two radii (rx and ry ) and are rendered using the 

specified shapeReso resolution parameter (see section 2.2.6). Rotation of the 

rounded rectangle is about the lower left corner (xLL,yLL). Rounded rectangles 

defined using roundrectC are of length L, height H and are centered at (xC,yC). 

xLL yLL L H rx ry θ(xLL,yLL) roundrect

xC yC L H rx ry θ(xC,yC) roundrectC

H H

L

(a) (b)

Figure 2.26: Rounded rectangle constructors defined by (a) lower left corner 

(roundrect) and (b) center coordinates (roundrectC). 

rx

ry

(xLL,yLL) 

(xC,yC) 

rx

ry

L

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 43 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.11 Rectangular SU-Shape

The below constructor creates a rectangular S- and U-shape objects. Positive 

and negative values of the three lengths (Li) allow for a variety of S- and 

U-shapes. These structures are useful for routing metal runners to bond pads. 

x y L1 L2 L3 W θ(x,y) rectSUshape

W

L1

L2

L3

(x,y) (x,y) (a) (b)

(x,y)

(x,y)

(c) (d)

Figure 2.27: Rectangular SU-shapes constructed using various length values. (a) all 

lengths Li are positive,(b) L1,L3 positive, L2 negative, (c) L1,L2 positive, L3

negative and (d) L1,L2 negative, L3 positive values. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 44 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.12 Rectangle With a Linear Taper

Below constructor creates a parametrized rectangle of width w1 and length L1

connected to a taper. Tapered region varies linearly over the taper length L2

from a the rectangle width w1 to the end taper width w2. 

x y w1 L1 w2 L2 θ(x,y) rectTaper

(x,y) w1

L1

w2

L2

Figure 2.28: Rectangle with a taper at one end. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 45 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.13 Star

Star is defined by the center (x,y), the two radii (ri and ro), number of points 

(Npoints), and rotation about the center at an angle θ(x,y) expressed in degrees. 

x y ri ro Npoints θ(x,y) star

ri

r◦

(x,y) 

θ(x,y)

Figure 2.29: star constructor parameters. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 46 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.14 Torus - Arc

A shape defined by torus is centered at (x,y), defined by an inner and outer radii 

(ri and ro), sweep angle, and the number of sides (Nsides). Sweep angles, start 

and end angles (θs and θe) are expressed in degrees. The torusW constructor 

creates a similar shape defined by the midpoint radius r and width w. 

(x,y) 

ri

ro

θe

(x,y) 

r

w

θ θe s θs

(a) (b)

Figure 2.30: Example of arc sections defined by (a) torus and (b) torusW constructors. 

x y ri ro θs θe Nsides torus

x y r w θs θe Nsides torusW

2.3.15 Torus - Vector

The vectorized torus is centered at (x,y) and defined by an inner and outer 

radii (ri and ro). The shape is constructed by subtracting two vectorized circles 

(vectorized ellipses with rx = ry , see section 2.3.1.2). Rendering resolution of 

the defined shape is controlled using the shapeReso parameter defined in 

section 2.2.6. 

x y ri ro torusVector

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 47 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.3.16 Torus With a Wave boundary

Torus structure with a sinusoidal boundary of inner and outer radii ri and r◦. 

The structure is centered at (x,y) with inner and outer sinusoidal boundaries in 

phase or π

2 out of phase. A represents the sine wave amplitude, n the number 

of oscillations along the inner and outer boundaries extending from 0 to 2π, 

Ns is the number of sides used to construct each boundary, and θ(x,y) is the 

rotation about the center point. 

x y ri r◦ n A Ns θ(x,y) torusWaveIn

x y ri r◦ n A Ns θ(x,y) torusWaveOut

(x,y)

r◦

ri

(x,y)

r◦

ri

(a) (b)

Figure 2.31: Torus wave with inner and outer radii (a) in phase (torusWaveIn) and 

(b) π

2 out of phase (torusWaveOut). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 48 of 488 
2.4 Arrays and Instances
 

2.4.1 Rectangular Arrays

The method instantiates and arrays a GDS structure on a periodic rectangular 

grid. 2 constructors are available. Both define the starting point of the array 

(x,y) along with the number of columns (Ncolumns) and rows (Nrows). First (deThis publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

noted as the 1 parameter prior arrayRect constructor) has a defined pitch of 

Δx and Δy in the x and y directions respectively. The second (denoted as the 

2 parameter prior arrayRect constructor) is characterized by the number of 

elements distributed evenly between the start (x,y) and end (xe,ye) points of 

the array. 

Δy

(x,y) Δx

(a) 

(x,y)

(xe,ye)

(b) 

Figure 2.32: Two versions of the rectangular array constructor arrayRect (a) 1 (b) 2. 

<structureT oBeArrayed x y Ncolumns Nrows Δx Δy 1 arrayRect>

<structureT oBeArrayed x y Ncolumns Nrows xe ye 2 arrayRect>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 49 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.4.2 Hexagonal Arrays

This method arrays GDS structures on a periodic hexagonal grid. The resulting 

arrayed structure consists of two rectangular arrays. Hexagonal arrays are 

characterized by the starting coordinate (x,y), number of columns and rows 

(Ncolumns and Nrows) are specified, with previously defined structure instantiated 

on a hexagonal grid with spacing defined by Δs. 

(x,y) Δs

Figure 2.33: arrayHex constructor used to create hexagonal arrays. 

<structureT oBeArrayed x y Ncolumns Nrows Δs arrayHex>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 50 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.4.3 Polar Arrays

The array method instantiates GDS structures in polar coordinates. There are 

2 main versions of the array polar constructor, each with two variants. Versions 

1 and 1R: Start (θs) and end angles (θe), along with start (rs) and end (re) radii, 

are specified, with a previously defined structure instantiated at angular and 

radial increments defined respectively by Δθ and Δr. In figure 2.34a, GDS 

structure named structureT oBeArrayed is instantiated starting angularly at 

θs = 60 to θe = 120, in angular increments of 30 degrees, and radially starting 

at r = 2.0μm to r = 4.0μm with radial increments of 1.0μm. Version 1R rotates 

each instance to point towards r = 0. 

Versions 2 and 2R: Start (θs) and end angles (θe), along with start (rs) and 

end (re) radii, are specified, number of instances between the defined regions is 

defined by θ# and r# in the angular and radial directions respectively. Region 

of space defined by the start and end parameters is uniformly subdivided. 

In figure 2.34b, structure structureT oBeArrayed is instantiated θ# = 5 times 

starting angularly at θs = 60 to θe = 120, and radially r# = 5 times starting at 

r = 2.0μm to r = 4.0μm. Version 2R rotates each instance to point towards r = 0. 

θ = 90 θ = 90

θ = 120 θ = 60 θ = 120 θ = 60

0 1 2 3 4 5 0 1 2 3 4 5 

(a) (b) 

Figure 2.34: Four versions of the polar array constructor arrayPolar. (a) 1 and 1R, (b) 

2 and 2R. 

<structureT oBeArrayed θs θe Δθ rs re Δr 1 arrayPolar>

<structureT oBeArrayed θs θe Δθ rs re Δr 1R arrayPolar>

<structureT oBeArrayed θs θe θ# rs re r# 2 arrayPolar>

<structureT oBeArrayed θs θe θ# rs re r# 2R arrayPolar>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 51 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

(a) (b) (c) 

Figure 2.35: Polar Array example. (a) cell containing two objects, versions (b) 1 and 

(c) 1R of the arrayPolar constructor. 

2.4.4 Instancing GDS Structures

The method intantiates GDS structures at a point (x,y) within other structures. 

The resulting instances are characterized by mirror, scaling and rotation parameters. Mirroring parameter MIR assumes values of X and Y for symmetric 

reflections around respective axes. Any other MIR values represent unmirrored 

structures (i.e. using a single character other than X and Y, i.e. N). Magnification 

(MAG) and rotation (θ) are double values. 

<structureToBeInstanced x y MIR MAG θ instance>

Below constructor first symmetrically centers the structure around the origin 

by employing user-defined pattern boundary parameters then transforms the 

instantiated structure. The bounding box is defined by the lower left (xLL,yLL)

and upper right (xUR,yUR) coordinates of the structural boundary. This method 

could be useful when instantiating various structures for a multi-image stepper 

reticle design. Transformation parameters, translation (x,y), mirroring (MIR), 

magnification (MAG) and rotation (θ) are defined in an identical manner as for 

the instance constructor. 

<structureToBeInstanced x y xLL yLL xUR yUR MIR MAG θ instanceSym>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 52 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.4.5 Points To Instance

This method instantiates GDS structures along a list of user defined points. 

This methodology is accomplished within the following two step process: first, 

by defining the instanced structure in double brackets, then instantiating 

the structure at the specified coordinates, terminated by the constructor 

points2instance. 

y

x

(x1,y1) 

(x2,y2) 

(x3,y3) 

(x4,y4) 

(x5,y5) 

Figure 2.36: points2instance constructor used to instantiate structures (cells) at user 

defined (xi,yi) positions. 

«structureToBeInstanced»
 

x1 y1 x2 y2 ··· xn yn points2instance
 

Figure 2.37: Points to instance example. Structure instanced along a path defined by a 

set of (x,y) coordinate pairs. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 53 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.4.6 Pillar-Hole Hexagonal and Square Arrays

This method constructs hexagonal and square lattice (Nx × Ny ) arrays of 

periodic structures. Number of vertex points (Nsides) defines the polygon, 

i.e. Nsides = 8 defines an octogon. Vertices of the vectorized shapes are defined 

by the shapeReso parameter. Vectorized array constructors are defined by the 

suffix V. Narrow elliptical shapes are best defined in vectorized forms. In this 

case, the curved section comprises a dense distribution of vertices. Each rendered shape has a rotational degree of freedom controlled by the θ parameter. 

Array positions are defined either by the center of the lower-left shape or by 

the array centroid (defined by the constructor suffix C). 

Hexagonal and square pillar-hole arrays: 

<uniqueStructN ame x y rx ry Nsides px py Nx Ny θ sqrPillar>

<uniqueStructN ame x y rx ry Nsides px Nx Ny θ hexPillar>

<uniqueStructN ame x y rx ry Nsides px py Nx Ny θ sqrHole>

<uniqueStructN ame x y rx ry Nsides px Nx Ny θ hexHole>

<uniqueStructN ame x y rx ry Nsides px py Nx Ny θ sqrPillarC>

<uniqueStructN ame x y rx ry Nsides px Nx Ny θ hexPillarC>

<uniqueStructN ame x y rx ry Nsides px py Nx Ny θ sqrHoleC>

<uniqueStructN ame x y rx ry Nsides px Nx Ny θ hexHoleC>

Vectorized hexagonal and square pillar-hole arrays: 

<uniqueStructN ame x y rx ry px py Nx Ny θ sqrPillarV>

<uniqueStructN ame x y rx ry px Nx Ny θ hexPillarV>

<uniqueStructN ame x y rx ry px py Nx Ny θ sqrHoleV>

<uniqueStructN ame x y rx ry px Nx Ny θ hexHoleV>

<uniqueStructN ame x y rx ry px py Nx Ny θ sqrPillarVC>

<uniqueStructN ame x y rx ry px Nx Ny θ hexPillarVC>

<uniqueStructN ame x y rx ry px py Nx Ny θ sqrHoleVC>

<uniqueStructN ame x y rx ry px Nx Ny θ hexHoleVC>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 54 of 488 
(x,y

)

p

y

rx

p

x

rx

(x,y)

ry

p

x

ry

(a)(b)

(x,y)p

y

ry

ry

p

x

rx

p

x

(x,y)

rx

(c)(d)

Figure 2.38: Square and hexagonal arrays of holes defined by the lower-left corner 

((a) and (b)) and by the centroid ((c) and (d)). 

(a)(b)(c) (d) (e)

Figure 2.39: Various pillar-hole examples. (a) Nsides = 4, (b) Nsides = 4 and θ= 45 degrees, (c) ellipses with Nsides defined, (d) vectorized ellipses with denser 

number of vertices at curved sections where shapeReso defines the rendered resolution, (e) ellipse array with θ = 22 degrees. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 55 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.5 General Area Operations
 

2.5.1 Boolean Operations

Constructive area geometry allows for the creation of complex shapes by 

means of Boolean operators between generalized areas. The processing strategy is to create objects within a variety of GDS structures. A collection of objects 

residing in a particular GDS Layer (extractedGDSLayer) are then extracted 

from an existing structure. Using the genArea constructor, the objects are 

then stored into a generalized area defined by a distinct string (genAreaName). 

This operation is repeated until two or more distinct generalized areas are 

created. Boolean operation between two generalized areas is then carried out 

in order to create desired compound geometries. The results of the Boolean operation are cast into a user defined GDS layer within an initialized GDS structure. 

Figure 2.40 illustrates the AND, OR, SUBTRACT and XOR operations between 

two general areas (A and B). Additionally, as shown in the following section 

( 2.5.2)affine transformation could be implemented with genArea objects. 

A (AND) B A (OR) B A (SUBTRACT) B A (XOR) B 

A

B

A

B

A

B

A

B

A

B

(a) (b) (c) (d) (e)

Figure 2.40: Boolean operations between two generalized area objects. (a) two general 

area objects A and B, (b) A (AND) B, (c) A (OR) B, (d) A (SUBTRACT) B, 

(e) A (XOR) B. 

The following constructor extracts shapes residing in a GDS layer, from an 

existing GDS structure, and then stores the contents into a general area object. genAreaName is a string constructed form a continuous set of characters 

without spaces or tabs. 

<genAreaName structName extractedGDSLayer genArea>

Boolean operations between two general area objects: 

<genAreaName1 genAreaName2 resultGDSLayer OPERATION>

OPERATION constructor takes on the following values: AND, OR, SUBTRACT 

and XOR. Results from the operations are stored into a currently initialized GDS 

structure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 56 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

IMPORTANT NOTES: 1) genAreaName string identifier can not contain spaces 

or tabs. 2) When extracting large instantiated GDS arrays, the genArea constructor flattens the data (i.e. the GDS structure hierarchy is not preserved). 

Similar to Boolean operations, the procedure is computationally intensive when 

large instantiated arrays are used. Consequently, these operations could take a 

considerable amount of time. For large periodic arrays, built using the instance

constructor, the above process is considerably faster when operations are 

performed on a smaller instantiated GDS structure. This process circumvents 

a host of dillemas and preserves the hierarchy of the arrayed GDS structure. 

3) Processing large, clear-field arrayed patterns could lead, under certain operations, to shapes with a large number of vertices. Some commercial packages 

have an upper vertex limit per GDS shape. 

Boolean SUBTRACT example: 

D:\DOCUMENTS\zTESTfiles\loadFiles\0000booleanManual.cnst Tuesday, November 24, 2015 4:54 PM

0.001 gdsReso

0.001 shapeReso

<devices struct>

# create an ellipse in layer 11

11 layer

0 0 2 4 44 0 ellipse

# create a pentagon in layer 7

7 layer

1 0 1.5 1.5 5 0 ellipse

# extract shapes in layer 11 and store into variable genArea1

<genArea1 devices 11 genArea>

# extract shapes in layer 7 and store into variable genArea2

<genArea2 devices 7 genArea>

# create struct to store results

# genArea1 SUBTRACT genArea2 cast to GDS layer 44

<resultsSUBTRACT struct>

<genArea1 genArea2 44 subtract>

(b)

(a) (c)

Figure 2.41: Boolean SUBTRACT operation between an ellipse and a pentagon. (a) 

CNST script, (b) ellipse and a pentagon GDS shapes, (c) resulting GDS 

shape following a Boolean subtraction between an ellipse and a pentagon. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 57 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.5.2 General Area Copies, Shape Bias and Affine Transformations

This module copies general areas into a currently initialized GDS structure. The 

general areas are extracted using the genArea constructor. The objects then 

undergo affine transformations (translation, mirroring, scaling, rotation and 

shape bias). Resulting areas are then cast into a GDS layer and copied into a 

currently initialized GDS structure. The utility of this option is manifested in 

myriad forms, especially when casting multiple stepper images onto a single 

reticle from a multi-layer GDS structure design. Also, unlike instantiation, where 

layer properties are inherited from the parent structure, this module allows for 

users to define GDS layer numbers for each general area copy. 

Variable genAreaName defines the areas extracted via genArea, x and y are 

translation directions in micrometers, MIRROR parameter is used to horizontally 

(around y-axis) or vertically (around x-axis) flip (mirror) the areas, MAG defines 

the pattern scaling, pattern rotation is defined by θ, and resultGDSLayer

defines the GDS layer of the resulting general area shapes. MIRROR parameter 

assumes values of X and Y for symmetric reflections around respective axes. 

Any other MIRROR values represent unmirrored structures (i.e. using a single 

character other than X and Y, i.e. N). MAG is a positive double value indicating 

area magnification. MAG = 1 omits area scaling. Rotation defined by the 

parameter θ is expressed in degrees 

BIAS parameter defines the amount of shape perimeter expansion (positive 

bias) or contraction (negative bias) in micrometers (see Figure 2.42). 

The module supplies the following two constructors:
 

genAreaCopy - translates objects relative to the structural coordinates of the
 

general area objects.
 

genAreaCopyC - first centers the object around the origin, then performs affine
 

transformations, i.e. translation is with respect to to (0,0).
 

<genAreaName x y MIRROR MAG θ BIAS resultGDSLayer genAreaCopy>

<genAreaName x y MIRROR MAG θ BIAS resultGDSLayer genAreaCopyC>

These constructors copy a defined general area (flattened area) into an 

initialized GDS structure. Unlike struct instantiation, the process of copying 

areas does not retain hierarchy. Consequently the process results in larger 

files (see Important Notes comment in previous section 2.5.1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 58 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

BIAS (Positive) 

(a)

BIAS (Negative) 

(b)

Figure 2.42: Shape biasing (a) expanding and (b) contracting an area using a positive 

and negative bias. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 59 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.6 Text Labels, PostScript and Logos
 

2.6.1 Text

Text shape is characterized by a string of characters using vector based system 

fonts. Text shapes are directly placed within the active GDS structure. There 

are two constructors for text shapes, where placement is either at the lower left 

corner (textgds) or at center (textgdsC) of the text string. Interface function 

parameter shapeReso defines the rendering resolution of the text. Parameter 

someT ext represents all printable characters. If the fontName does not exist, 

"Serif" will be used and a comment will be placed within the error log file. If 

"Serif" does not exist, then first encountered font within the system font list will 

be used. (x,y) values are in micrometers. Font size is specified by conventional 

fontmetrics definitions, measured from the descender to the ascender line in 

micrometers. 

<{{someT ext}} {{fontName}} fontSize x y textgds>

<{{someT ext}} {{fontName}} fontSize x y textgdsC>

Figure 2.43: GDS rendered textgds example. 

The following are scripts used to generate the text in Figure 2.43: 

<{{SomeT ext!@#$}} {{Algerian}} 20 0 0 textgds>

<{{4!AaBbCc}} {{Serif }} 20 0 0 textgds>

<{{4!AaBbCc}} {{Arial}} 20 0 0 textgds>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 60 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.6.2 Text Outline

Text outline shapes are useful when lithographic write times (e.g. electron beam 

lithography) are of consideration. In a similar manner to Text shape in the 

previous section, the outline shape is characterized a string of text, font name 

and size, width of the outline and position (x,y). There are two constructors for 

text shapes, where placement is either at the lower left corner (textOutline) 

or at center (textOutlineC) of the text string. Interface function parameter 

shapeReso defines the rendering resolution of the text. If the fontName does 

not exist, "Serif" will be used and a comment will be placed within the error 

log file. If "Serif" does not exist, then first encountered font within the system 

font list will be used. (x,y) values are in micrometers. Font size is specified 

by conventional fontmetrics definitions, measured from the descender to the 

ascender line in micrometers. Outline width is specified using the fontOutline

parameter (see section 2.2.7). 

<{{someT ext}} {{fontName}} fontSize x y textOutline>

<{{someT ext}} {{fontName}} fontSize x y textOutlineC>

Figure 2.44: Text Outline GDS example. 

IMPORTANT NOTE: Within this object, errors dealing with exceeding maximum 

number of GDS vertices could be encountered. To circumvent this dilemma, 

when using larger letters, increase the shapeReso parameter. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 61 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.6.3 Label Maker

Label maker has 6 available constructors. 4 constructors automatically generate labels based on the number of rows and columns. Chip labels are either numbers (autoOuter and autoRowColumn)or a combination of numbers 

and letters (autoOuterLetters and autoRowColumnLetters). 2 remaining constructors generate custom, user-defined, labels (outer and rowColumn). Each 

constructor pair has an outer and row-column option. Label placement for the 

outer option is along the top and left side of the chip array. Top side placement 

starts at (x,y) and the left hand side placement initiates at (xr,yr). Label placement for the row-column option initiates with the top-left label at a position 

(x,y). In both cases number of rows (Nrow) and columns (Ncol), font name (fontName), font size (fontSize in μm), and the pitch along the two directions (Δx

and Δy ) are specified. Similarly, custom labels are defined by an additional set 

of label parameters (L1,L2 ...Ln). In all cases, if the font name is not contained 

within the system font list, label maker will default to a Serif font. 

4 auto labels: 

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoOut labelMaker}

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoRowCol labelMaker}

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoOutLett labelMaker}

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoRowColLett labelMaker}

2 custom labels where parameters are TAB SEPARATED: 

{L1 L2 ... Ln Nrow Ncol fontName fontSize x y xr yr Δx Δy out labelMaker}

{L1 L2 ... Ln Nrow Ncol fontName fontSize x y xr yr Δx Δy rowCol labelMaker}

IMPORTANT NOTES: 1) Labels L1 ...Ln are constructed from any printable 

ASCII character, including the space character. Therefore, space separation 

between constructor parameters is NOT allowed. All specified parameters 

within above constructors must be TAB separated. 2) Carriage returns cannot 

be used within the script line constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 62 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(x,y) 

(xr,yr) 

Δx

Δy

(a) (b) 

(c) (d) 

(x,y) 

(e) (f) 

Figure 2.45: Label Maker Constructor Examples: (a) autoOut, (b) autoRowCol, 

(c) autoOutLett, (d) autoRowColLett, (e) out, and (f) rowCol. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 63 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.6.4 Label Maker - Outline Text

This method is identical to the previously defined label maker section (2.6.3) 

with the exception that rendered shapes are outlined text objects. Outline width 

is specified using the fontOutline parameter (see section 2.2.7). 

4 auto labels: 

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoOut labelOutline}

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoRowCol labelOutline}

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoOutLett labelOutline}

{Nrow Ncol fontName fontSize x y xr yr Δx Δy autoRowColLett labelOutline}

2 custom labels where parameters are TAB SEPARATED: 

{L1 L2 ... Ln Nrow Ncol fontName fontSize x y xr yr Δx Δy out labelOutline}

{L1 L2 ... Ln Nrow Ncol fontName fontSize x y xr yr Δx Δy rowCol labelOutline}

IMPORTANT NOTES: 1) Labels L1 ...Ln are constructed from any printable 

ASCII character, including the space character. Therefore, space separation 

between constructor parameters is NOT allowed. All specified parameters 

within above constructors must be TAB separated. 2) Carriage returns cannot 

be used within the script line constructor. 3) Within this object, errors dealing 

with exceeding maximum number of GDS vertices could be encountered. To 

circumvent this dilemma, when using larger letters, increase the shapeReso

parameter. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 64 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(x,y) 

(x,y) 

Δx

Δy

(a) 

(b) 

Figure 2.46: Label Maker Outlined Text Constructor Examples: (a) autoRowColLett and 

(b) rowCol. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 65 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.6.5 PostScript to GDS

2.6.5.1 PostScript Pixel Value

PostScript shapes are defined by double values in conjunction with constructors 

(moveTo (m), lineTo (l), curveTo (c), etc). The pixel value defines scaling of these 

doubles. Default global value is 1.000. This implies that the postscript coordinate values are unscaled and in units of micrometers. Parameter pixelScaling

represents the scaling of the postscript coordinate values. For instance, 

10.000 psPixelValue

scales each postscript value by 10 times. Alternatively, 

0.100 psPixelValue

reduces the postscript image by 10. Once the value is set, subsequent postscript 

shapes are rendered to this value. This value could be changed for each 

postscript shape. 

pixelScaling psPixelValue

2.6.5.2 PostScript Fracturing

The following parameter defines the number of fractured postscript shapes. 

Default global value is 1, implying that the shape is unfractured. The psFracElements parameter allows direct control of number of vertices per GDS shape. 

This is important since aggressively scaled, large, continuous postscript shapes 

could exceed the maximum number of vertices per GDS shape. 

20 psFracElements

implies that the overall postscript shape area will be subdivided into 20 segments along the y-direction. This value could be changed for each postscript 

shape. 

numberOf FracturedElements psFracElements

2.6.5.3 Defining Postscript Shapes

Bitmap images could be vectorized using either Illustrator, Inkscape (open 

source package) or some other package capable of exporting EPS files. Figure 2.47 illustrates the relevant portion of the EPS file. This information is 

copied and pasted within the CNST script file. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 66 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

%%EndProlog

%%Page: 1 1

%%BeginPageSetup

%%PageBoundingBox: 0 -1 151 87

%%EndPageSetup

q 0 -1 151 88 rectclip q

0 86.913 151 -87 re W n

0 g

143.895 0.167 m 142.457 0.456 140.961 0.925 140.039 1.378 c

138.094 2.331 135.961 3.824 134.777 5.058 c 134.176 5.687 134.035

5.913 134.035 6.249 c 134.035 6.593 134.09 6.675 134.363 6.738 c

135.105 6.913 136.297 6.339 137.813 5.074 c 138.77 4.277 139.641

3.843 140.852 3.562 c 142.531 3.175

.

.

.

4.046 142.695 3.468 142.695 3.335 c 142.695 3.066 142.234 2.917

141.691 3.015 c 139.914 3.327 138.77 3.808 137.688 4.706 c 135.844

6.23 134.422 6.87 134.422 6.179 c 134.426 5.476 138.051 2.675

140.336 1.617 c 142.469 0.624 146.109 0.07 147.922 0.46 c h

f

Q Q

showpage

%%Trailer

PostScript Example - PSshapeRaven.eps

Figure 2.47: PostScript scriptingPostScript.eps example. The arrow denotes the relevant text to be copied and pasted into the CNST script file. 

Figure 2.48: GDS shape of the rendered postscript shape. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 67 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.6.6 CNST and NIST logos

Three constructors are available for placement of CNST and NIST logos. Individual (cnstEmblem, cnstLogo, nistLogo ) or combined (nistCnstLogo) are 

placed at coordinates that define the centroid of the GDS logo shape. Since 

logos are cast using postscript values, the shapeReso parameter defines the 

rendering resolution of the logo shapes. Scaling of the resulting logo is set 

using the scale parameter. 

x y scale cnstEmblem

x y scale cnstLogo

x y scale nistLogo

x y scale nistCnstLogo

(a) (b)

Figure 2.49: CNST logos created using the (a) cnstLogoEmblem and (b) cnstLogo constructors. 

Figure 2.50: NIST logo created using the nistLogo constructor. 

Figure 2.51: Combined NIST and CNST logos created using the nistCnstLogo

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 68 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7 Objects
 

2.7.1 Arc (Torus-Circle) bounded square-hex arrays

The following constructors create a square or hexagonal array of dots inside of 

an arc boundary defined by an inner and outer radii (ri and ro), start and end 

angles (θs and θe) and the number of vertices (N). For a torus defined by ri and 

ro, θs = 0 and θe = 360. A circular boundary is represented by a radius ro with 

ri = 0, θs = 0 and θe = 360. The circular dots of radius rs are either defined by 

a number of vertices ns (arcSquareFill and arcHexFill) or by the shapeReso

parameter for vectorized shapes (arcSquareFillV and arcHexFillV). Parameter 

θ(x,y) defines the shape rotation about the arc origin (x,y). 

<uniqueStructN ame x y ri ro θs θe N θ(x,y) rs ns Δx arcSquareFill>

<uniqueStructN ame x y ri ro θs θe N θ(x,y) rs Δx arcSquareFillV>

<uniqueStructN ame x y ri ro θs θe N θ(x,y) rs ns Δx arcHexFill>

<uniqueStructN ame x y ri ro θs θe N θ(x,y) rs Δx arcHexFillV>

(a) (b) (c) 

(d) (e) (f) 

Figure 2.52: Square array inside (a) an arc, (b) circular and (c) hexagonal (N = 8) 

boundary. Hexagonal array of dots inside (d) an arc, (e) circular and (f) 

hexagonal (N = 8) boundary. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 69 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.2 Bezier Curve

The toolbox employs Bezier curves to represent complex curved objects. The 

shapes are rendered to a resolution defined by the shapeReso parameter. In 

general, Bezier curve is a parametrized curve used as a path in computer vector 

graphics. Concatenation of multiple Bezier paths can be used to model smooth 

curves of arbitrary complexity. A Bezier curve is mathematically expressed as 

nn

B(t) = nCk(1 − t)

n−1tkPk (2.1) 

k=0

where n is the polynomial degree, k is the index, t is a variable ranging 0 ≤ t ≤ 1, 

and nCk is the binomial coefficient given by 

 n n! nCk = = (2.2) k k!(n − k)!

The nanolithography toolbox employs cubic Bezier curves for creating complex 

curved shapes. With with n = 3 equation 2.1 becomes 

B(t) = (1 − t)

3P0 + 3(1 − t)2tP1 + 3(1 − t)t2P2 + t3P3 (2.3) 

where the corresponding start and end points are P0 and P3, with respective 

control points P1 and P2. Equation 2.3 for the two coordinates is written as 

B(t)x = (1 − t)

3P0x + 3(1 − t)2tP1x + 3(1 − t)t2P2x + t3P3x (2.4) 

B(t)y = (1 − t)

3P0y + 3(1 − t)2tP1y + 3(1 − t)t2P2y + t3P3y (2.5) 

Figure 2.53 shows rendered curves at varying resolution. Rendered curves 

exhibit an increased vertex density at higher curvatures automatically. The 

points are uniformly spaced in t, but become closer together in (x,y) space as 

curvature increases. 

(P1x,P1y ) (P2x,P2y ) (P1x,P1y ) (P2x,P2y )

t = 0 t = 1

(P0x,P0y ) (P3x,P3y ) (P0x,P0y ) (P3x,P3y ) (a) (b)

Figure 2.53: Cubic Bezier curves rendered at a (a) lower and (b) higher resolution. Dots 

represent rendered curve vertices. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 70 of 488 
Bezier Curve is defined using a start (x1,y1) and end (x2,y2) points, two control 

points (cx1, cy1) and (cx2, cy2), curve width (W ) and θ(x1,y1) rotation about (x1,y1). 

shapeReso parameter defines the rendering resolution of the Bezier curve. 

<x1 y1 cx1 cy1 cx2 cy2 x2 y2 W θ(x1,y1) bezierCurve>

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(x1,y1) (cx1,cy1) 

(cx2,cy2) (x2,y2)

Figure 2.54: Bezier Curve example showing the start and end points along with the 

corresponding control points. 

Figure 2.55: Two example GDS shapes of the bezierCurve constructor. Highlighted 

periphery shows curved sections with densely packed vertices. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 71 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x1 y1 cx1 cy1 cx2 cy2 x2 y2 We Ws θ(x1,y1) bezierCurveInv>

Ws

We

(x1,y1) 

(x2,y2) 

(cx1,cy1) 

(cx2,cy2) 

Figure 2.56: Schematic illustration showing various parameters from the bezierCurveInv constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 72 of 488 
<x1 y1 cx1 cy1 cx2 cy2 x2 y2 We Ws g θ(x1,y1) bezierCurveInvSlot>

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ws

g

We

(x1,y1) 

(x2,y2) 

(cx1,cy1) 

(cx2,cy2) 

Figure 2.57: Schematic illustration of the bezierCurveInvSlot constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 73 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.3 Fractals

Several constructor methods are available for creating self-similar structures, 

including Sierpinski triangle and carpet, Vicsek saltire and cross, curved trees 

and various other tree-like structures. The last GDS structure iteration constructed by the recursive fractal generator is instantiated at (x,y). Iteration 

numbers are postfix appended to the shortStructN ame parameter. 

<shortStructN ame x y iterations Length sierpinskiTriangle>

<shortStructN ame x y iterations Length sierpinskiCarpet>

<shortStructN ame x y iterations Length vicsekSaltire>

<shortStructN ame x y iterations Length vicsekCross>

<shortStructN ame x y iterations Length W idth curvedTree>

Figure 2.58: Generated GDS fractal examples shapes. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 74 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.4 Function Plot

Functional plot method allows functional representation in (x,y) and (r,θ) coordinate systems. Generated curves are defined by a function, translation 

(x,y), lower (xL and θL) and upper limits (xU and θU ), number of segments (N), 

width (W ), cap and join parameters. Cap is represented by the following integer 

values BU T T = 0, ROUND = 1, or SQUARE = 2. Join is represented by the 

following integer values MIT ER = 0, ROUND = 1, BEV EL = 2. In order to 

avoid exceeding GDS shape point limits, each function is fractured horizontally 

and vertically about the centroid. 

<{{y(x)}} x y xL xU N W CAP JOIN θ(x,y) functionXY>

<{{r(t)}} x y θL θU N W CAP JOIN θ(x,y) functionRT>

(a) (b) 

Figure 2.59: Function plots (a) y(x) and (b) r(θ). 

Functional plots in figures 2.59(a) and 2.59b are respectively rotated by 180◦

and 22.5◦ about (10,−10). Both curves were constructed using N = 1000, a 

width of 0.22μm, CAP = ROUND and JOIN = MIT ER. Functional representation for the two curves is correspondingly given by 

 x − x

y(x) = 14 sin e 44 (2.6) 2

r(θ) = 11 sin(4θ) (2.7) 

The following scripts (see example file scriptingFunctionPlot.cnst) to generate functional plots in Figure 2.59: 

<{{14 ∗ Math.sin(x/2)∗ Math.exp(−x/44)}} 10 −10 0 88 1000 0.22 1 0 180 functionXY>

<{{11 ∗ Math.sin(4 ∗t)}} 10 −10 0 6.28 1000 0.22 1 0 22.5 functionRT>

As seen above, in polar coordinates (r,θ), θ parameter is represented as 

a variable t. Mathematical functions are represented in terms of the Java 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 75 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Math class methods. For instance sin(x) is represented as Math.sin(x). Several 

methods from the Java Math class are shown below. The entire Java Math 

class method summary documentation, including argument limits, is available 

online. 

Math.sin(x) sin(x) Math.sinh(x) sinh(x)

Math.cos(x) cos(x) Math.cosh(x) cosh(x)

Math.tan(x) tan(x) Math.tanh(x) tanh(x)

Math.exp(x) xe Math.expm(x) ex − 1

Math.log(x) ln(x) Math.log10(x) log10(x)

√ Math.sqrt(x) n x Math.pow(x,n) x

Math.PI π Math.random() random number in [0,1)

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 76 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.5 Grayscale

2.7.5.1 Polygons

This section offers a variety of means for constructing grayscale objects from 

segmented polygons. GDS layers are assigned to each of the sections with 

layer numbers ranging from n − 1 (outer) to 0 (inner). Figures 2.60a, b and 

c show evenly distributed grayscale structure are centered at (x,y), with n

number of segmentations, the outermost dimensions defined by dx, dy , rx and 

ry , and θ(x,y) rotation about the origin. Rectangular structures (figure 2.60a) 

are equivalent to 45 degree rotated n-gon structures where the number of sides 

Ns = 4 (figure 2.60c). 

x y dx dy n θ(x,y) grayER

x y rx ry n Ns θ(x,y) grayENgon

dx

dy

rx

ry

(b) (c)

Figure 2.60: Evenly distributed grayscale segments for (a) rectangles and n-gons with 

(b) large number of vertices (Ns) and (c) Ns = 4, rx = ry . 

(a)

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 77 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

User defined grayscale segments are shown in figures 2.61a, b and c. The 

respective constructors are defined by (dxi, dyi) (or (rxi

, ryi)) coordinate pairs. 

The outer most segment is defined by (dx1 , dy1 ) (or (rx1 , ry1 )). The constructors 

further assume that dx1 > dx2 > dx3 ··· > dxn and dy1 > dy2 > dy3 ··· > dyn . Similarly, 

for n-gon segments rx1 > rx2 > rx3 ··· > rxn and ry1 > ry2 > ry3 ··· > ryn . 

x y dx1 dy1 dx2 dy2 ··· dxn dyn θ(x,y) grayUDR

x y rx1 ry1 rx2 ry2 ··· rxn ryn Ns θ(x,y) grayUDNgon

dxn dx2 dx1 rxn rx2 r ... ... x1

r dyn yn

. . . . . .

dy2 ry2

dy1 ry1

(b) (c)

Figure 2.61: User defined distribution of grayscale segments for (a) rectangles and 

n-gons with (b) large number of vertices (Ns) and (c) Ns = 4, rxi = ryi. 

(a)

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 78 of 488 
2.7.5.2 Ramp

grayERamp constructor allows ramping with either UP = 1, where the dx is 

subdivided into n segments with GDS layer numbers range from 0 to n − 1. 

Alternatively, with UP = 0, the GDS layer numbers range from n − 1 to 0. grayERamp2 constructor forms a double ramp (up then down) with evenly divided 

segments where GDS layers range from 

⎧

⎨

⎪⎪L n ...L0 ...L n n is even 2 −1 L = ⎪⎪ 2 (2.8)

⎩L n−1 ...L0 ...L n−1 n is odd 2 2

x y dx dy n UP θ(x,y) grayERamp

x y dx dy n θ(x,y) grayERamp2

L ··· ··· 0 L1 L2 Ln−1 Ln−1 L1 L0

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(x,y)

dy

(x,y)

dy

dx dx

(a) (b)
 

L n−1 ··· ··· L n−1
 2 L1 L0 L1 2

dy

(x,y)

(c)

Figure 2.62: Evenly distributed grayscale ramp segments using grayERamp with UP 

values of (a) 1 and (b) 0. (c) Grayscale ramp up/down segments using the 

grayERamp2 constructor. 

dx

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 79 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Similarly, user defined ramp segments are defined using the below constructors. 

Number of constructed shapes is equal to 

n−1, where n is the number of defined 

segment positions. Grayscale segments undergo a translation by (x

t,yt

) and 

rotation θ

(x

t,yt

). Constructors assume 

x

1 < x2 < x3 ···

<d

x

n , n >

1 with GDS 

layers for grayUDRamp2 defined: ⎧L n2 −1 ...L0 ...L

n2

−1

n is even 

L=

⎪⎪⎪⎪⎪⎪⎪⎨

L

n−3

2

...L

0 ...L

n−1

2

L

0,L1

n is odd and n>3

n=3

⎪ (2.9) ⎪⎪⎪⎪⎪⎪⎩L0 n = 2

x

t

y

t

x

1

x

2 . . . 

x

n

d

y UP 

θ

(x

t,yt

) grayUDRamp

x

t

y

t

x

1

x

2 . . . 

x

n

d

y

θ

(x

t,yt

) grayUDRamp2

L

0 ···

L

n−3

L

n−2

L

n−2

L

n−3

···

L

0

d

y

d

y

x

1

x

n−1

x

n

x

1

x

2

x

n ··· ··· (a) (b) L n ··· ··· L n 2 −1 L0 2 −1 dy

x

1

x

2

x

n ··· (c)

Figure 2.63: User defined grayscale ramp segments using grayURRamp with UP values of (a) 1 and (b) 0. (c) Grayscale ramp up/down segments using the 

grayURRamp2 constructor with an even number of points n. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 80 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.5.3 Spiral Staircase

The spiral structure is constructed using overlapping arc segments cast to 

different GDS layers (Li). The resulting structure is defined by the center 

position (x,y), inner and outer radii (ri and r◦), number of arc segments (n), 

number of sides of each segment (Nsides) and the rotation angle (θ(x,y)). 

x y ri r◦ n Nsides θ(x,y) graySpiralStairOverlap

L9

L8

L7

L6

n1

n2

n3

n4

n5

n6

n7

n8

n9

n10

(x,y) 

ri

r◦

L5 (b)

L4

L3

L2

L1

L0

(a)

Figure 2.64: Grayscale spiral staircase with overlapping segments. (a) 3D projection 

and (b) 2D illustration showing various constructor parameters. (c) Scanning electron micrograph of a focused ion beam fabricated structure. Scale 

bar corresponds to 200 nm. (Courtesy of L. Ocola [82]) 

(c)

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 81 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following constructor creates a grayscale spiral staircase structure 

without overlapping arc segments. 

x y ri r◦ n Nsides θ(x,y) graySpiralStair
 

Here, each segment (ni) is represented by a distinct GDS layer.
 

L2
 

L4

L5

n1

L0

n2

L1

n3

n4

L3

n5

n6

n7

L6

n8

n9

L8

n10

L9

(x,y) 

ri

r◦

L7

(b)

Figure 2.65: Grayscale spiral staircase. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 82 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.6 Interdigitated Electrodes

x y w1 w2 l1 l2 l3 N p bH bW θ(x,y) intElec1

x y w1 w2 l1 l2 l3 N p bH bW θ(x,y) intElec2

w1

l3

bW l1

bH

p

l2

w2

(x,y) (a)

w1

l3

l1

bW l2

bH

w2 p

(b)

(x,y)

Figure 2.66: Interdigitated electrodes (a) intElec1 and (b) intElec2. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 83 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w1 w2 l1 l2 l3 N p bH bW θ(x,y) intElec3

x y w1 w2 l1 l2 l3 N p bH bW θ(x,y) intElec4

bW

bH

p

l2

w2

w1

l1

l3

(x,y) (a)

w1

l3

l1

bW l2

bH

w2 p

(x,y) (b)

Figure 2.67: Interdigitated electrodes (a) intElec3 and (b) intElec4. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 84 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w1 w2 l1 l2 l3 N p bH bW θ(x,y) intElec5

bW w1

bH l3

l2 l1

(x,y)

w2 p

Figure 2.68: Interdigitated electrodes intElec5. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 85 of 488 
r

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.7 Junctions

2.7.7.1 T Junction

x y w1 w2 L1 L2 r Nsides θ(x,y) tJunction

(x,y)

r

w1

L1 w2

L2

(a)

L1

(x,y)

w1

w2

L2

(a)
 

Figure 2.69: T junction (a) with and (b) without (r = 0) circular ports.
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 86 of 488 
(x,y)

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.7.2 H Junction

x y w1 w2 L1 L2 r Nsides θ(x,y) hJunction

(x,y)

r

w1

L1 w2

L2

(a)

L1

w1

w2

L2

(b)
 

Figure 2.70: H junction (a) with and (b) without (r = 0) circular ports.
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 87 of 488 
(x,y)

2.7.7.3 Arrow Junction

x y w1 w2 L1 L2 r Nsides θ θ(x,y) arrowJunction

(x,y)

r

L2

w1

L1

θ

w2

(a)

L2

w2

w1

L1

θ

(b)
 

Figure 2.71: Arrow junction (a) with and (b) without (r = 0) circular ports.
 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 88 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.8 Meander Channel

The method constructs a meandering channel with rectangular ports. These 

structures find potential use in fluidic and gas delivery system applications. 

Four available constructors represent various wavelike structures including 

sine, square, ramp and triangle. Rectangular ports, residing at each channel 

end, are defined by the length (L1 and L2) and height (H1 and H2) parameters. 

Connections to the reservoirs are made through segments a and b of width 

W . Wave structures initiate at x = a and are of length b. Number of wave 

periods is defined by N. The sine wave structure is constructed from a number 

of segments defined by the parameter Nsegments. 

<x y L1 H1 L2 H2 W A N Nsegments a b c θ(x,y) meanderSin>

<x y L1 H1 L2 H2 W A N a b c θ(x,y) meanderSqr>

<x y L1 H1 L2 H2 W A N a b c θ(x,y) meanderRamp>

<x y L1 H1 L2 H2 W A N a b c θ(x,y) meanderTri>

Figure 2.72 illustrates the four meander channel configurations with respective parameters. As shown in FigurerefmeanderPortsExample, rectangular  ̃

reservoirs at each channel end can be eliminated by setting respective length 

and height parameters equal to 0, i.e. L1 = H1 = 0 and/or L2 = H2 = 0. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 89 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

H1 W

(x,y) 

H2

L1 L2

...

N

a b c

A

(a)

N

W

(x,y) 

A

H ... 1 H2

a c b

L1 L2 (b)

H1 W

(x,y) 

H2

L1 L2

...

N

a b c

A

(c)

H1 W

(x,y) 

H2

L1 L2

...

N

a b c

A

(d)

Figure 2.72: Example shapes illustrating various parameters from the (a) meanderSin, 

(b) meanderSqr, (c) meanderRamp and (d) meanderTri constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 90 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

...

N

L1

H1 W

a b c

A

(x,y) 

(a)

...

N

L2

W H2

a b c

A

(x,y) 

(b)

...

N

W

a b c

A

(x,y) 

(c)

Figure 2.73: Meander channel example illustrating various rectangular reservoir configurations. Structures without (a) right reservoir using L2 = H2 = 0, (b) left 

reservoir using L1 = H1 = 0 and (c) reservoirs using L1 = H1 = L2 = H2 = 0. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 91 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.9 Points To Shape

The method creates a polygon from user defined (x,y) point pairs. Last point 

(xn,yn) connects the first (x1,y1) to close the shape. 

y

x

(x1,y1) 

(x2,y2) 

(x3,y3) 

(x4,y4) 

(x5,y5) 

Figure 2.74: Example of the points2shape constructor illustrating a closed shape constructed from points 5 points, (x1,y1)...(x5,y5). 

x1 y1 x2 y2 ··· xn yn points2shape

Figure 2.75: points2shape example illustrating a GDS rendered polygon. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 92 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.10 Polygon Along a Path

The method creates a polygon of a specified width (W ) along a path defined by 

(x,y) point pairs. Cap is represented by the following integer values BU T T = 0, 

ROUND = 1, or SQUARE = 2. Join is represented by the following integer 

values MIT ER = 0, ROUND = 1, BEV EL = 2. 

y

x

(x1,y1) 

(x2,y2) 

(x3,y3) 

(x4,y4) 

Figure 2.76: Example of the polypath constructor illustrating a rendered shape constructed from points 5 points, (x1,y1)...(x5,y5). 

x1 y1 x2 y2 ··· xn yn W Cap Join polypath

Figure 2.77: polypath example illustrating a GDS polygon along a Gaussian path. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 93 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.11 Random Polygons

The below constructor creates randomly placed polygons into a user defined 

area. Single polygon of radius r with Ns sides is created and cast into a GDS 

struct with the name uniqueStructName. The Ne number of shapes are then 

instantiated into an area of width W and height H. Separation parameter S

defines the minimum separation between the outer radial perimeter of the 

objects. If the randomly generated coordinate violates the minimum separation distance, the module will keep generating random coordinates until the 

maximum number of failures (defined by the parameter iteration parameters I) 

is reached. The lower left corner of the random array is positioned at (x,y). 

Random rotation is enabled if RR is set to 1, each shape will be randomly 

rotated within the current GDS structure. Any other numeric value or RR will 

leave the shape element unchanged. Enabling the RR option for for features 

with many sides is not particularly useful, however, with S = 3 and RR = 1

produces randomly oriented triangles (see Figure 2.78). 

<uniqueStructN ame x y W H r Ns S Ne I RR randomPolygons>

Figure 2.78: View of a generated GDS file using the Random Polygons module. The area 

was 40μm × 40μm, number of elements and iterations were set to 400, with 

an element radius and separation of 1μm and 2μm respectively. Generated 

shapes had (a) 44 sides and (b) 3 sides with random rotation enabled. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 94 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.12 Random Ellipses and Vectorized Ellipses

Similar to the random polygon example, the following constructors create 

random ellipses (randomEllipses) and vectorized ellipses (randomEllipsesV). 

shapeReso defines the rendering resolution of randomEllipsesV. 

<uniqueStructN ame x y W H rx ry Ns S Ne I RR randomEllipses>

<uniqueStructN ame x y W H rx ry S Ne I RR randomEllipsesV>

rx

ry

S

Figure 2.79: Random ellipse example showing separation (S) between adjacent circular 

boundaries defined by the radius ry . 

Figure 2.80: GDS rendered random ellipses with random rotation enabled (RR = 1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 95 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.13 Resolution Test Pattern

Radial pattern below is useful for characterizing the stigmation of a lithography tool. Using the resoPattern constructor, the structure is defined by the 

center origin (x,y), radius (r) and width (w). In this scenario, to ensure pattern 

symmetry, 360/w = i, where i = 2,4,...,n is an even positive integer. For even 

distribution of segments across the 2πr circumference, i can be any positive 

integer greater than zero. The second constructor (resoPatternPi) creates a 

similar figure where the end-segment is an integer of π width. 

x y r w θ(x,y) resoPattern

x y r n θ(x,y) resoPatternPi

w

(a)

nπ

(b)

Figure 2.81: Resolution patterns using (a) resoPattern and (b) resoPatternPi constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 96 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Resolution pattern formed using two rows of rectangles of width W , height H, 

pitch 2W and N elements in each row. A text label is placed directly above the 

array of lines indicating the value of W . The font resolution is defined using the 

global shapeReso parameter. The font height is equal to the value of H (text 

label in Figure 2.82 is not shown to scale). 

x y W H N θ(x,y) resoPatternRS

The following constructor creates arrays of rectangular shaped resolution 

patterns using a start and end width values (Ws and We), with a δ incremental 

variation. The space between the arrays is defined by the parameter S in 

micrometer units. 

x y Ws We δ H N S θ(x,y) resoPatternRSA

value of W

1.0

H

(x,y) 

W (a)

1.0 1.25 2.0

··· S

(x,y) (b)

Figure 2.82: Resolution pattern of rectangular lines using (a) resoPatternRS and (b) resoPatternRSA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 97 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following resolution patter is formed using L-shapes of width W , height H, 

pitch 2W and N number of shapes. The maximum number of generated shapes 

is defined when W = H. Text label definition is identical to one described for 

the resoPatternRS constructor (previous example). 

x y W H N θ(x,y) resoPatternLS

An arrayed version of the above constructor is defined by a start and end width 

values (Ws and We), with a δ incremental variation. The space between the 

arrays is defined by the parameter S in micrometer units. 

x y Ws We δ H N S θ(x,y) resoPatternLSA

value of W

1.0

H

W

(x,y) 

(a)

0.4 0.8 2.0

··· S

(b)

Figure 2.83: Resolution pattern of rectangular lines using (a) resoPatternLS and (b) resoPatternLSA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 98 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.14 Spirals

Spiral objects are characterized by uniform, converging and diverging spacing 

between subsequent turns. Constant spacing represents an Archimedes spiral 

where r = mθ, where m = (separation + width)/(2π) (Figure 2.84a). Separation

parameter defines the pitch between subsequent spiral turns. Fermats spiral, 

√ defined as r = a2θ, is shown in Figure 2.84b. The logarithmic spiral, defined as 

r = aebθ, is shown in Figure 2.84c. Center of each spiral is defined by the point 

(x,y). 

x y W idth Nturns Separation increment spiralArch

x y W idth Nturns a increment spiralFermat

x y W idth Nturns a b increment spiralLog

(a) (b) (c) 

Figure 2.84: GDS rendered spiral examples. (a) Archimedes (b) Fermat and (c) Logarithmic spiral. 

The following scripts were used to generate the spirals centered around the 

origin (x = 0,y = 0) in Figure 2.84: 

0 0 1.0 5 2.0 0.010 spiralArch

0 0 2.5 7 8 0.010 spiralFermat

0 0 4.4 4 8.0 0.1 0.010 spiralLog

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 99 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.7.15 Spiral - Rectangular

Below constructor creates a rectangular spiral of Nturns, of width w, start 

length Ls and pitch p between turns. 

x y w Ls p Nturns θ(x,y) spiralRect

(x,y)

Ls

w

p

Figure 2.85: Rectangular spiral. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 100 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.8 Alignment and Reticle Elements
 

2.8.1 Alignment Marks - Predefined

The following section includes a variety of predefined, multilevel alignment 

mark strategies for lithographic applications. Within these methods, alignment 

mark size and shape values are predefined. The central dark circular aperture 

within each of the structures defines the (x,y) position. The θ(x,y) defines the 

rotation (in degrees) about (x,y). 

The following are constructors for two- and three-level alignment marks 

shown in figures 2.86 and 2.87. La, Lb and Lc are integer values (0 − 255) representing GDS layer numbers. Pattern extents for alignFFFB1 and alignFFFB2

alignment patterns in figure 2.86) range from (−80μm,−80μm) to (80μm,80μm). 

For the three-level alignment mark system (align3Level), pattern extents range 

from (−1000μm,−1000μm) to (1000μm,1000μm). 

<x y La Lb θ(x,y) alignFFFB1>

<x y La Lb θ(x,y) alignFFFB2>

<x y La Lb Lc θ(x,y) align3Level>

The following defines a constructor for a two level alignment system with 

verniers and options for tone reversal of layers within a specified region (figure 2.88). As defined above, La and Lb are integer values defining the two 

rendered GDS layer numbers. Parameter vernReso defines the resolution between the two verniers in units of μm. Layers La and/or Lb are tone-reversed 

within an area defined by the inversion length (IL) and width (IW ) if their respective boolean flags INVa and INVb are activated. The boolean inversion 

parameters are activated using any integer value other than 0. Pattern extents 

range from (−900μm,−900μm) to (900μm,900μm). 

<x y La Lb vernReso INVa INVb IL IW θ(x,y) alignVern>

Two-level alignment strategies defined in figure 2.89 contains verniers and 

GDS layer number labels. As defined directly above, La and Lb are GDS layer 

numbers, and vernReso parameter defines the resolution between the two 

verniers. alignVernLb1 pattern extents in range from (−1000μm,−1000μm)

to (1000μm,1000μm), whereas alignVernLb2 pattern extents in range from 

(−230μm,−230μm) to (117μm,155μm). 

<x y La Lb vernReso θ(x,y) alignVernLb1>

<x y La Lb vernReso θ(x,y) alignVernLb2>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 101 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

(a)

(b)

Figure 2.86: Two level lithography alignment mark strategies constructed using 

(a) alignFFFB1 and (b) alignFFFB2. Two layers La, and Lb are shown separately as blue (left) and orange (right). These methods could be used for 

front-to-front or front-to-back alignment. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 102 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

(a) (b) (c)

Figure 2.87: Three-level, front-side, lithography alignment mark strategy constructed 

using align3Level with layers (a) La, (b) Lb and (c) Lc. 

W

L

Figure 2.88: Two-level alignment mark strategy with x and y verniers constructed using 

alignVern. Blue and orange layers are La and Lb respectively. Length (IL) 

and width (IW ) parameters define the region extent used for tone reversal 

of the specified alignment layers. This method is suitable for conventional 

overlay lithography applications. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 103 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Lb La

(a)

Lb La

(b)

Figure 2.89: Two-level alignment mark strategies with x and y verniers, and layer labels constructed using (a) alignVernLb1 and (b) alignVernLb2. Blue and 

orange layers are La and Lb respectively. These method is suitable for 

conventional overlay lithography applications. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 104 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.8.2 Alignment Marks - Custom

The following section includes 4 types of cross-based marks for multilevel lithographic alignment. Unlike section 2.8.1 with predefined marks, the following 

mark definitions are fully customizable by user defined parameters. Figure 2.90 

shows a small circle at the center of each shape denoting the translation point 

(x,y). Each shape undergoes a rotation by θ(x,y) about the center point (x,y). 

The dotted box of length IL and width IW denotes the boundary within which 

layer inversion takes place. Boolean tone reversal (inversion) is activated by 

the parameter INV . A value INV = 0 signifies that tone reversal within the 

specified boundary will not take place. Any other integer value for INV will 

invert the tone of the mark. Layers are set by the usual layer command (see 

section 2.2.4). 

Figure 2.90a shows a simple cross defined by a width (W ), a horizontal and 

vertical length segments (L1 and L2). 

<x y L1 W L2 INV IL IW θ(x,y) alignCustC1>

Figure 2.90b shows a cross of width (W ), length (L), paddle length (PL) and 

width (PW ). 

<x y L W PL PW INV IL IW θ(x,y) alignCustC2>

Figure 2.90c shows a cross of width (W ), length (L), paddle length (PL) and 

width (PW ) offset by a length (LX) from the edge. 

<x y L1 W PL PW LX INV IL IW θ(x,y) alignCustC3>

Figure 2.90d shows a cross defined by a width (W ), a horizontal and vertical 

length segments (L1 and L2), and a rectangle of length (BL) and width (BW ) at 

a distance (d) from the cross edge. 

<x y L1 W L2 d BL BW INV IL IW θ(x,y) alignCustC4>

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 105 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

IW

W

L2

L1

IW

W

PW

L PL

IL IL

(a) (b)

W

PW

L1 PL LX

BL

IW IW

W

L1

L2

d d

BW

IL IL

(c) (d)

Figure 2.90: Custom alignment crosses using (a) alignCustC1, (b) alignCustC2, 

(c) alignCustC3, (d) alignCustC4 constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 106 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.8.3 Reticle Barcode and Label Frames

The following methods create reticle marks, barcodes and labels for the CNST 

ASMLPAS5500 i-line stepper and reticle labels for contact lithography tools (5 

inch and 7 inch). Contact reticle frames contain a label (up to 22 characters) 

along with a NIST and CNST logos. In all cases MIRROR is parameter that 

defines if the final structure will be mirrored. Any integer other than 0 will 

mirror the resulting reticle frame. 

CNST ASML PAS5500 stepper frame with reticle marks, barcode, label and logo: 

<{{labelText}} {{barCode}} MIRROR cnstASML>

Contact Frames: 

<{{labelText}} MIRROR cnstContact5>

<{{labelText}} MIRROR cnstContact7>

Figure 2.91: CNST ASML PAS5500 reticle frame with MIRROR= 0. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 107 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.8.4 Vernier

Figure 2.92 shows a vernier structure with a central element of length (L), width 

(W ), and pitch (p). Dotted rectangle of length (IL) and width (IW ) represent a 

boundary within which layer tone reversal takes place. With inversion parameters set to 0, i.e. Ia = 0 and/or Ib = 0, boolean inversion of layers La and/or Lb

will not take place. Any other integer value will invert the pattern within the 

bounding box. Parameter vernReso defines the resolution of the verniers. 

<x y La Lb L W p vernReso s Ia Ib IL IW θ(x,y) alignCustVern>

L

W

p

IW s (x,y)

IL

Figure 2.92: Verniers between layers La (blue) and Lb (orange) created using the alignCustVern constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 108 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.8.5 Vernier With Labels

The method constructs verniers between two lithographic levels. Text resolution is set by shapeReso. Text font used is Serif. The verniers are centered at 

position (x,y). Vernier resolution is in micrometers. The two layer parameters, 

LyrA and LyrB are GDS layer numbers (integers from 0 to 255), Parameter 

Nticks represents the total number of vernier bars. Text labels are defined by 

the f ontSize and string parameters LblA and LblB. These strings cannot have 

white characters (spaces/tabs) and are generally short layer descriptions. The 

width, length and pitch parameters define the vernier bars. 

LblA

L

P itch W

LblB

Figure 2.93: Example of the veniers constructor illustrating parameters between two 

layers. 

<x y LyrA LyrB vernierReso Nticks LblA LblB f ontSize W L P itch verniers>

Figure 2.94: GDS rendered output of the verniers example between two lithographic 

levels. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 109 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.8.6 Arrows

This method constructs arrow structures that are useful in a variety of lithographic applications including labeling features and as an aid in finding features 

of interest, for instance, arrows pointing towards alignment marks or small, 

isolated devices. Each constructor is defined by parameters in the below table. 

An isolated arrow head is used to construct the arrow element. Constructor 

arrowArray defines a linear array of N arrow features. 

<x y Wa La W θ(x,y) arrowHead>

<x y Wa La W L θ(x,y) arrow>

<x y Wa La W L N θ(x,y) arrowArray>

(x,y) (x,y) 

(x,y) 

Wa W

2

Wa

2

La

.

.

W

. N

L

(a) (b) (c)

Figure 2.95: Example shapes illustrating various parameters from the (a) arrowHead, 

(b) arrow and (c) arrowArray constructors. 

Figure 2.96: Rendered GDS file example with arrowArray structures. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 110 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9 CNST Nanophotonics Library
 

This section contains a variety of shapes commonly encountered nanophotonic 

applications. Many of these shapes (tapers, S-bends, Y-bends, etc) could be 

used for micro- and nano-fluidics, MEMS/NEMS and other fields of applied 

sciences. Each element has several constructor definitions, allowing the user 

to create structures using either positive or negative tone resists. Additionally, 

constructors allow for addition of endcaps at the structural termination points. 

This in turn alleviates stresses at sharp field crowding corners, thereby preventing undesired formation of stress cracks. Figure 2.97 shows an example 

of 600 nm patterned ZEP layer on top of 700 nm stoichiometric silicon nitride 

deposited using low pressure chemical vapor deposition. In this case, cracks 

initiated at the sharp edges within the nitride layer during the reactive ion 

etch step (figure 2.97a, b). The dilemma was circumvented by corner rounding 

(figure 2.97c, d). 

a b

c d

Figure 2.97: Silicon nitride waveguides with square ((a) and (b)) and rounded corners 

((c) and (d)). Waveguides with square corners show cracks initiating at the 

waveguide edges. Waveguides with rounded corners alleviate stresses at 

sharp corners, thereby preventing cracks formation. Scale bar in (a) and 

(c) represents 250μm and in (b) and (d) represents 20μm. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 111 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.1 Waveguides

2.9.1.1 Waveguide

This method is useful when creating waveguides with a negative tone resist. 

Rectangular shape characterized by start point (x1,y1), end point (x2,y2), width 

(W ) and rotation about point (x1,y1). The waveguide is defined in the horizontal 

direction, condition i.e. x1 = x2 must be satisfied. For vertical waveguides, 

choose θ(x1,y1) = 90. Waveguide endcaps are defined by parameters EClef t and 

ECright. Endcap values of 0 and 1 correspond to slot waveguides without and 

with endcaps. 

<x1 y1 x2 y2 W θ(x1,y1) EClef t ECright waveguide>

(x1,y1) W (x2,y2) 

(a)

W

(b)

W

(c)

Figure 2.98: Waveguide example using the waveguide constructor. The method is beneficial when creating waveguides from a negative tone resist. Waveguides 

examples (a) without endcaps (Elef t = Eright = 0), (b) with left end cap 

(Elef t = 1,Eright = 0), (c) with right endcap (Elef t = 0,Eright = 1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 112 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.1.2 Waveguide Slot

This method is useful when creating slot waveguides with a negative tone resist. 

Positive-tone resist exposure creates a waveguide of width Wslot. The shape 

characterized by start point (x1,y1), end point (x2,y2), waveguide width (W ), 

slot width (Wslot) and rotation about point (x1,y1). The waveguide is defined in 

the horizontal direction, condition i.e. x1 = x2 must be satisfied. For vertical 

waveguides, choose θ(x1,y1) = 90. Waveguide endcaps are defined by parameters EClef t and ECright. Endcap values of 0 and 1 correspond to slot waveguides 

without and with endcaps. 

<x1 y1 x2 y2 W Wslot θ(x1,y1) EClef t ECright waveguideSlot>

W Wslot (x1,y1) (x2,y2) 

(a) 

(x1,y1) W Wslot (x2,y2) 

(b) 

Figure 2.99: Slot waveguide example using the waveguideSlot constructor. The 

method is beneficial when creating waveguides from a negative tone resist. 

Positive-tone resist exposure creates a waveguide of width Wslot. Slot 

waveguide examples (a) without endcaps (Elef t = Eright = 0), (b) with right 

end cap (Elef t = 0,Eright = 1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 113 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.1.3 Waveguide Inverse

This method is useful when creating waveguides with a positive tone resist. The 

shape characterized by start point (x1,y1), end point (x2,y2), waveguide width 

(W ), exposed sleeve width (We) and rotation about point (x1,y1). The waveguide 

is defined in the horizontal direction, condition i.e. y1 = y2 must be satisfied. For 

vertical waveguides, choose θ(x1,y1) = 90. Waveguide endcaps are defined by 

parameters EClef t and ECright. Endcap values of 0 and 1 correspond to slot 

waveguides without and with endcaps. 

<x1 y1 x2 y2 W We θ(x1,y1) EClef t ECright waveguideInv>

(x1,y1) W (x2,y2) 

We

(a) 

(x1,y1) W (x2,y2) 

We

(b) 

Figure 2.100: Waveguide example using the waveguideInv constructor. The method is 

beneficial when creating waveguides from a positive tone resist. Inverse 

waveguide examples (a) without endcaps (Elef t = Eright = 0), (b) with 

right end cap (Elef t = 0,Eright = 1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 114 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.1.4 Waveguide Inverse Slot

This method is useful when creating slot waveguides with a positive tone resist. 

The shape characterized by start point (x1,y1), end point (x2,y2), waveguide 

width (W ), slot width (Ws), exposed sleeve width (We) and rotation about point 

(x1,y1). The waveguide is defined either in the horizontal or vertical direction, 

condition i.e. x1 = x2 must be satisfied. 

<x1 y1 x2 y2 W Ws We θ(x1,y1) EClef t ECright waveguideInvSlot>

W

We

Ws (x1,y1) (x2,y2) 

(a) 

W (x2,y2)

We

Ws (x1,y1) 

(b) 

Figure 2.101: Inverse slot waveguide example using the waveguideInvSlot constructor. 

The method is beneficial when creating waveguides from a positive tone 

resist. Inverse slot waveguide examples (a) without endcaps (Elef t =

Eright = 0), (b) with right end cap (Elef t = 0,Eright = 1). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 115 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.1.5 Waveguide Expander

The waveguide expander is defined by width w, length L, length division ΔL, 

TE mode angle 

θ, beam waist w

0, wavelength 

λ, base height b

H and two dimensionless parameters a and b. Wavelength λ is represented in nanometers. 

All other parameters (L,ΔL,w,w

0,bH

)are in micrometers. The variable gap is 

defined by 

⎛ ⎛ ⎞⎞ 2

12λπ

1.5

−xw2

g(x) = ln exp (2.10) b ⎜⎜⎜⎜⎜⎜⎝ aw ⎜⎜⎜⎜⎜⎜⎝1 − erf ( x ) ⎟⎟⎟⎟⎟⎟⎠⎟⎟⎟⎟⎟⎟⎠ w

where 

w=

w

0 (2.11) sinθ

<x y w LΔL a b θ w

0 λ bH

θ

(x,y) wgExpander> bH

L

wg(

x)

(x,y)

Figure 2.102: Waveguide expander 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 116 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2 Tapers

2.9.2.1 Linear Taper

The linear waveguide taper method is beneficial with negative tone resists. 

Trapezoidal shape characterized by start point (x1,y1), end point (x2,y2), width 

at start (W1) and end (W2) points, and rotation about point (x1,y1). The linear 

taper shape is defined either in the horizontal or vertical direction, condition i.e. 

x1 = x2 or y1 = y2 must be satisfied. 

<x1 y1 x2 y2 W1 W2 θ(x1,y1) linearTaper>

(x1,y1) 

Figure 2.103: Linear waveguide taper generated using the linearTaper constructor. 

Structure is useful with negative tone resists. 

W1 W2 (x2,y2)

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 117 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2.2 Linear Taper Slot

The slot linear waveguide taper is beneficial with negative tone resists. With 

positive tone resists, this structure would result in a tapered waveguide structure. Trapezoidal shape characterized by start point (x1,y1), end point (x2,y2), 

width at start (W1) and end (W2) points, slot width at start (Ws1) and end (Ws2)

points, and rotation about point (x1,y1). The linear taper shape is defined either 

in the horizontal or vertical direction, condition i.e. x1 = x2 or y1 = y2 must be 

satisfied. 

<x1 y1 x2 y2 W1 W2 Ws1 Ws2 θ(x1,y1) linearTaperSlot>

(x1,y1) Ws1 W1 W2 Ws2 (x2,y2)

Figure 2.104: Linear taper slot waveguide structure created using the linearTaperSlot

constructor. Structure is useful with negative tone resists. Positive tone 

resists generate a tapered waveguide structure of start and end with of 

Ws1 and Ws3 respectively. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 118 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2.3 Linear Taper Inverse Slot

The inverse slot linear waveguide taper is beneficial with negative tone resists. 

With positive tone resists, this structure would result in a tapered slot waveguide 

structure. Trapezoidal shape characterized by start point (x1,y1), end point 

(x2,y2), width at start (W1) and end (W2) points, slot width at start (Ws1) and end 

(Ws2) points, gap (g), and rotation about point (x1,y1). The linear taper shape 

is defined either in the horizontal or vertical direction, condition i.e. x1 = x2 or 

y1 = y2 must be satisfied. 

<x1 y1 x2 y2 W1 W2 g Ws1 Ws2 θ(x1,y1) linearTaperInvSlot>

(x1,y1) Ws1 W1 W2 Ws2 (x2,y2)

g

Figure 2.105: Example of the linearTaper constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 119 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2.4 Exponential Taper

Tapered shape characterized by a width (W1) at start point (x1,y1) exponentially 

increasing to (W2) at a length L from (x1,y1), and rotation about point (x1,y1). 

The exponential curve is constructed from N segments. 

<x1 y1 L W1 W2 N θ(x1,y1) exponentialTaper>

(x1,y1) W1 W2 (x1 + L,y2) 

Figure 2.106: Example of the exponentialTaper constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 120 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2.5 Exponential Taper Inverse

Tapered shape characterized by a width (W1) at start point (x1,y1) exponentially 

increasing to (W2) at a length L from (x1,y1), exposed sleeve width (We) and 

rotation about point (x1,y1). The exponential curve is constructed from N

segments. 

<x1 y1 L W1 W2 N We θ(x1,y1) exponentialTaperInv>

(x1,y1) W1 W2

We

(x1 + L,y2) 

Figure 2.107: Tapered exponential shape created using the exponentialTaperInv constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 121 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2.6 Exponential Taper Inverse Slot

Tapered shape characterized by a width (W1) at start point (x1,y1) exponentially 

increasing to (W2) at a length L from (x1,y1), start and end slot widths (Ws1

and Ws2), exposed sleeve width (We) and rotation about point (x1,y1). The 

exponential curve is constructed from N segments. 

<x1 y1 L W1 W2 N We Ws1 Ws2 θ(x1,y1) exponentialTaperInvSlot>

(x1,y1) Ws1 W1 W2 Ws2

We

(x1 + L,y2) 

Figure 2.108: Tapered exponential slot waveguide shape created using the exponentialTaperInvSlot constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 122 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.2.7 Custom Taper

Custom tapered shape characterized by user-defined (x,y) coordinates. Points 

(x1, y1) to (xn, yn) are generated (top portion of the curve) and mirrored around 

y = 0, closing the tapered shape that’s translated to (Tx, Ty ) and rotated about 

the translation point θ(Tx,Ty ). 

x1 y1 x2 y2 ··· xn yn Tx Ty θ(Tx,Ty ) customTaper

Figure 2.109: Two example GDS shapes of the customTaperExamples constructor with 

highlighted user defined vertices. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 123 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3 Couplers

2.9.3.1 Directional Couplers

<x y L1 w1 we1 L2 L3 w2 we2 g r Nsides θ(x,y) directionalCoupler1>

L1

w1

we1

(x,y) 

g

w2

we2

L2

r

L3

Figure 2.110: Directional coupler example using the directionalCoupler1 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 124 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y L1 w1 we1 L2 L3 w2 we2 g r Nsides θ(x,y) directionalCoupler2>

L1

w1

we1

(x,y) 

g

w2

we2

L2

r

L3

Figure 2.111: Directional coupler example using the directionalCoupler2 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 125 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y w we g L1 L2 r Nsides θ(x,y) directionalCoupler3>

g (x,y)

w

we

L1

r

L2

Figure 2.112: Directional coupler example using the directionalCoupler3 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 126 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y w we g L1 LB HB θ(x,y) directionalCoupler4>

g (x,y)

w

we

L1 LB

HB

Figure 2.113: Directional coupler example using the directionalCoupler4 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 127 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.2 S-Bend Taper

S-Bend taper is characterized by the start coordinate (x,y), length (L), height 

(H), start (Wstart) and end (Wend) waveguide widths, and rotation about point 

(x,y). shapeReso parameter defines the rendering resolution of the S-bend 

(Bezier based) curve. 

<x y L H Wstart Wend θ(x,y) sBendTaper>

(x,y) Wstart

W (x + L,y + H) end

H

L

Figure 2.114: An example GDS shape of the sBendTaper constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 128 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.3 S-Bend Funnel

S-Bend funnel is characterized by the start coordinate (x,y), length (L), height 

(H), start (W ) and rotation about point (x,y). shapeReso parameter defines 

the rendering resolution of the S-bend (Bezier based) curve. 

<x y L H W θ(x,y) sBendFunnel>

W

L

H

(x,y)

(x + L,y + H) 

Figure 2.115: Schematic illustration showing various parameters from the sBendFunnel constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 129 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.4 S-Bend

S-Bends are Bezier curves characterized by two constructors. First consists 

of the start (x1,y1) and end (x2,y2) points. The second is characterized by the 

start point (x1,y1), length (L) and height (H) parameters. Both constructors are 

characterized by a waveguide width (W ) and the rotation about the start point 

(x1,y1). shapeReso parameter defines the rendering resolution of the S-bend 

(Bezier based) curve. Both L and H parameters are defined by positive and 

negative double precision values relative to the start coordinate point (x1,y1). 

For instance, a negative value of H would place the end point at y1 − H. 

<x1 y1 x2 y2 W θ(x1,y1) sBend>

<x1 y1 L H W θ(x1,y1) sBendLH>

W

L

H

(x1,y1) 

(x2,y2) 

Figure 2.116: An example S-Bend GDS shape illustrating various parameters from the 

two sBend constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 130 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.5 S-Bend Inverse

Similar to S-Bends (section 2.9.3.4), sBendInv constructor is used to create 

s-bend waveguides using a positive tone resist. Alternatively, using a negative tone resist, a slot-waveguide of width W + We and a slot of width W is 

constructed. The shape is characterized by the start point (x1,y1), length (L), 

height (H), waveguide width (W ), exposure sleeve width (We) and the rotation 

about the start point (x1,y1). shapeReso parameter defines the rendering resolution of the S-bend (Bezier based) curve. Both L and H parameters are defined 

by positive and negative double precision values relative to the start coordinate 

point (x1,y1). For instance, a negative value of H would place the end point y

value at y1 − H. 

<x1 y1 L H W We θ(x1,y1) sBendInv>

W

We

L

H

(x1,y1) 

(x1 + L,y1 + H) 

Figure 2.117: Schematic illustration showing various parameters from the sBendInv

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 131 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.6 S-Bend Inverse Slot

Similar to S-Bends (section 2.9.3.4), sBendInvSlot constructor is used to create 

s-bend slot waveguides using a positive tone resist. The shape is characterized by the start point (x1,y1), length (L), height (H), slot width (Ws), gap (g), 

exposure sleeve width (We) and the rotation about the start point (x1,y1) parameters. shapeReso parameter defines the rendering resolution of the S-bend 

(Bezier based) curve. Both L and H parameters are defined by positive and 

negative double precision values relative to the start coordinate point (x1,y1). 

For instance, a negative value of H would place the end point y value at y1 − H. 

<x1 y1 L H Ws g We θ(x1,y1) sBendInvSlot>

Ws

g

We

L

H

(x1,y1) 

(x1 + L,y1 + H) 

Figure 2.118: Schematic illustration showing various parameters from the sBendInvSlot constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 132 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

W

L2

L3

H2

H3

(x1,y1) 

(x2,y2) 

(x3,y3) 

2.9.3.7 Y-Bend

Y-Bends are constructed by merging two S-Bend curves. Similarly to the SBend curve defined in the section 2.9.3.4, Y-Bends are characterized by two 

constructors. First consists of the start (x1,y1) and two end (x2,y2) points 

((x2,y2) and (x3,y3)). The second is characterized by the start point (x1,y1), 

pair of length (L2 and L3) and pair of height (H2 and H3) parameters. Both 

constructors are characterized by a waveguide width (W ) and the rotation 

about the start point (x1,y1). shapeReso parameter defines the rendering 

resolution of the Y-bend (Bezier based) curve. The length and height parameters 

are defined by positive and negative double precision values relative to the 

start coordinate point (x1,y1). For instance, a negative value of H3 would place 

the end point y value at y1 − H3. Figure 2.119 shows a negative H3 value. 

<x1 y1 x2 y2 x3 y3 W θ(x1,y1) yBend>

<x1 y1 L2 H2 L3 H3 W θ(x1,y1) yBendLH>

Figure 2.119: An example Y-Bend GDS shape illustrating various parameters from the 

two yBend constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 133 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.8 Y-Bend Inverse

Similar to Y-Bends (section 2.9.3.7), yBendInv constructor is used to create 

a y-bend waveguide bifurcation using a positive tone resist. Alternatively, 

using a negative tone resist, a slot-waveguide of width W + We and a slot 

of width W is constructed. The shape characterized is characterized by the 

start coordinate point (x1,y1), a pair of lengths (L2 and L3), a pair of heights 

(H2 and H3), waveguide width (W ), exposure sleeve (We) and the rotation 

about the start point (x1,y1) parameters. shapeReso parameter defines the 

rendering resolution of the Y-bend (Bezier based) curve. Both length and 

height parameters are defined by positive and negative double precision values 

relative to the start coordinate point (x1,y1). For instance, a negative value of 

H3 would place the end point y value at y1 − H3, hence value of H3 value in 

Figure 2.120 is negative . 

<x1 y1 L2 H2 L3 H3 W We θ(x1,y1) yBendInv>

W

We

L2

L3

H2

H3

(x1,y1) 

(x2,y2) 

(x3,y3) 

Figure 2.120: Schematic illustration showing various parameters from the yBendInv

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 134 of 488 
2.9.3.9 Y-Bend Inverse Slot

Similar to Y-Bends (section 2.9.3.7), yBendInv constructor is used to create 

a y-bend slot waveguide bifurcation using a positive tone resist. The shape 

characterized is characterized by the start coordinate point (x1,y1), a pair 

of lengths (L2 and L3), a pair of heights (H2 and H3), slot width (Ws), gap 

(g), exposure sleeve width (We) and the rotation about the start point (x1,y1)

parameters. shapeReso parameter defines the rendering resolution of the 

Y-bend (Bezier based) curve. Both length and height parameters are defined by 

positive and negative double precision values relative to the start coordinate 

point (x1,y1). For instance, a negative value of H3 would place the end point y

value at y1 − H3, hence value of H3 value in Figure 2.121 is negative . 

<x1 y1 L2 H2 L3 H3 Ws g We θ(x1,y1) yBendInvSlot>

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ws

We

g

L2

L3

H2

H3

(x1,y1) 

(x2,y2) 

(x3,y3) 

Figure 2.121: Schematic illustration showing various parameters from the yBendInvSlot constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 135 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.10 Y-Bend - 90 degree

<x y r1 r2 w Nsides θ(x,y) yBend90>

r1

(x,y) 

r2

w

Figure 2.122: An example of a 90 degree Y-Bend. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 136 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.11 Y-Bend Inverse - 90 degree

<x y r1 r2 w we Nsides θ(x,y) yBendInv90>

r1

(x,y) 

r2

we w

Figure 2.123: An example of a 90 degree Y-Bend inverse shape. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 137 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.12 Y-Bend Inverse Slot - 90 degree

<x y r1 r2 ws g we Nsides θ(x,y) yBendInvSlot90>

r1

(x,y) 

r2

we g ws

Figure 2.124: An example of a 90 degree Y-Bend inverse slot shape. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 138 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.13 90 Degree Bend

90 Degree Bends are Bezier curves characterized by two constructors. First 

consists of the start (x1,y1) and end (x2,y2) points. The second is characterized 

by the start point (x1,y1), length (L) and height (H) parameters. Both constructors are characterized by a waveguide width (W ) and the rotation about the 

start point (x1,y1). shapeReso parameter defines the rendering resolution of 

the 90 Degree Bend (Bezier-based) curve. 

<x1 y1 x2 y2 W θ(x1,y1) 90degreeBend>

<x1 y1 L H W θ(x1,y1) 90degreeBendLH>

(x1 + L,y1 + H) 

H

(x1,y1)
 

L
 

W

Figure 2.125: An example 90 degree bend GDS shape illustrating various parameters 

from the two constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 139 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.14 90 Degree Bend Inverse

Similar to 90 Degree Bends (section 2.9.3.13), 90degreeBendInv constructor 

is used to create a 90 degree bend waveguide structure using a positive tone 

resist. Alternatively, using a negative tone resist, a slot-waveguide of width 

W + We and a slot of width W is constructed. The shape is characterized by 

the start coordinate point (x1,y1), length (L), height (H), waveguide width (W ), 

exposure sleeve (We) and the rotation about the start point (x1,y1) parameters. 

shapeReso parameter defines the rendering resolution of the 90 degree (Bezier 

based) curve. Both length and height parameters are defined by positive and 

negative double precision values relative to the start coordinate point (x1,y1). 

For instance, a negative value of H would place the end point y value at y1 − H, 

hence value of H in Figure 2.126 is positive . 

<x1 y1 L H W We θ(x1,y1) 90degreeBendInv>

W

We

(x1 + L,y1 + H) 

H

(x1,y1) 

L

Figure 2.126: Schematic illustration showing various parameters from the 90degreeBendInv constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 140 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.15 90 Degree Bend Inverse Slot

Similar to 90 Degree Bends (section 2.9.3.13), 90degreeBendInv constructor is 

used to create a 90 degree bend slot waveguide structure using a positive tone 

resist. The shape characterized is characterized by the start coordinate point 

(x1,y1), length (L), height (H), slot width (Ws), gap (g), exposure sleeve width 

(We) and the rotation about the start point (x1,y1) parameters. shapeReso parameter defines the rendering resolution of the 90 degree (Bezier-based) curve. 

Both length and height parameters are defined by positive and negative double 

precision values relative to the start coordinate point (x1,y1). For instance, a 

negative value of H would place the end point y value at y1 − H, hence value of 

H in Figure 2.127 is positive. 

<x1 y1 L H W g We θ(x1,y1) 90degreeBendInvSlot>

W

g

We

(x1 + L,y1 + H) 

H

(x1,y1) 

L

Figure 2.127: Schematic illustration showing various parameters from the 90degreeBendInvSlot constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 141 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.16 180 Degree Bend

The 180 degree, u-shaped, bend is characterized by a lengths L1 and L2 with 

a coupled half torus of diameter D. The number of vertices constructing the 

torus is represented by the N parameter. D is measured from the midpoints of 

the two length segments. 

<x y L1 L2 D W N θ(x,y) 180degreeBend>

L1

W

D

L2

(x,y)

Figure 2.128: 180 degree bend example. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 142 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.17 180 Degree Bend Inverse

Similar to the 180 degree bend in the previous section (2.9.3.16), the inverse 

device has an additional exposure sleeve parameter We. 

<x y L1 L2 D W We N θ(x,y) 180degreeBendInv>

D

L1

L2

We W

(x,y)

Figure 2.129: 180 degree bend inverse example. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 143 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.3.18 180 Degree Bend Inverse Slot

Similar to the 180 degree inverse bend in the previous section (2.9.3.17), the 

inverse slot device has an additional gap parameter g. 

<x y L1 L2 D W g We N θ(x,y) 180degreeBendInvSlot>

L1

We g W

D

L2

(x,y)

Figure 2.130: 180 degree bend inverse slot example. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 144 of 488 
W

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.4 Racetrack

Racetrack object is characterized by the center coordinate (x,y), length of the 

straight section (L), track width (W ), inner radius (rin), rotation about the center 

point (θ(x,y)), and the number of segments creating each of the curved sections 

(N). 

<x y L W rin θ(x,y) N raceTrack>

(x,y) 

rin

W

L

Figure 2.131: An example GDS shape illustrating various parameters from the raceTrack constructors. Dots along the structural periphery represent the 

number of points (N) used to construct the curved racetrack sections. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 145 of 488 
�

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.5 Spiral Delay Line

Interdigitated spiral delay line objects are characterized by either uniform 

(Archimedes) and converging (Fermat’s) spacing between subsequent turns. 

Constant spacing Archimedes spiral delay line illustrated in Figure 2.9.5a is 

represented by 

mθ (2.12) 

r(θ) =

− mθ (2.13) 

where m=

(

S+W

)

/

(

2π

), and the separation parameter 

S defines the pitch 

between subsequent spiral turns. Spiral is further defined by 

Δ

R defining the 

resolution of the spiral, the length of the coupling waveguide (L), the rotation 

about center (θ

(x,y)), and EC = 1 or 0 corresponding to the waveguide coupling 

segment without and with semi-circular endcaps. Fermat’s spiral spiral delay 

line illustrated in Figure 2.9.5b is represented by r(θ) = ⎧⎪⎪⎨⎪⎪⎩ √a2θ (2.14) √a − 2θ (2.15) x y W Nturns S ΔR L θ(x,y) EC spiralDelayLineArch x y W Nturns a ΔR L θ(x,y) EC spiralDelayLineFermat L W L W

(a) (b) 

Figure 2.132: Spiral delay lines for the (a) Archimedes spiral constructor spiralDelayLineArch and (b) Fermat spiral constructor spiralDelayLineFermat. 

Central dot represents the coordinate defined by (x,y). 

IMPORTANT NOTE: The above interdigitated spirals are created and fractured 

along the y−axis. On the one hand, this action eliminates any possibility of 

exceeding maximum number of allowed points per GDS shape. On the opposite 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 146 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

end of the spectrum, this action is computation intensive, consuming large 

amounts of RAM and takes a considerable amount of time for spirals of many 

turns defined by a large collection points. 

The following is an interdigitated Archimedes spiral delay line that alleviates some of the computational strains of the previous version. The delay 

line illustrated in Figure 2.133 is characterized by a center point (x,y), spiral 

width, the number of turns (Nturns), separation (S) between subsequent turns, 

points per turn (PT ), and the number of skipped turns before spiral rendering 

initiates (ST ). In this case, points per spiral turn are controlled, hence for spirals 

containing many turns, the resolution of the outermost ring will be coarser 

than the internal rings. This spiral is generated much faster than ones shown 

in Figure 2.132. 

x y W Nturns S PT ST L θ(x,y) EC spiralDelayLineArchV2

(x,y) ST

L

W

Figure 2.133: Archimedes interdigitated spiral delay line constructed by spiralDelayLineArchV2 constructor. Parameter ST is an integer (ST ≥ 0) defining 

the number of skipped turns before rendering of the spiral initiates. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 147 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.6 Inverse Spiral Delay Line

Inverse spiral delay line objects are characterized by either uniform (Archimedes) 

and converging (Fermat’s) spacing between subsequent turns. Section 2.9.5 

shows details for the construction of the two spirals. These spirals are defined 

by the center point (x,y), slot width W , exposure sleeve width We, number of 

turns (Nturns), separation (S) between turns, and the ΔR value defining resolution rendering of the spiral. 

x y W We Nturns S ΔR L θ(x,y) EC spiralDelayLineArchInv

x y W We Nturns a ΔR L θ(x,y) EC spiralDelayLineFermatInv

We

L

W

(a) 

Figure 2.134: Inverse spiral delay lines for the (a) Archimedes spiral constructor spiralDelayLineArchInv and (b) Fermat spiral constructor spiralDelayLineFermatInv. Central dot represents the coordinate defined by (x,y), W

and We are the corresponding slot and exposure sleeve widths. 

We

W

(b) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 148 of 488 

L
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following is another version of the inverted Archimedes spiral delay line. 

The delay line illustrated in Figure 2.135 is characterized by a center point (x,y), 

spiral width, exposure sleeve width, the number of turns (Nturns), separation 

(S) between subsequent turns, points per turn (PT ), and the number of skipped 

turns before spiral rendering initiates (ST ). In this case, points per spiral turn 

are controlled, hence for spirals containing many turns, the resolution of the 

outermost ring will be coarser than the internal rings. 

x y W We Nturns S PT ST L θ(x,y) EC spiralDelayLineArchV2Inv

(x,y)

L

We

W

ST

Figure 2.135: Archimedes interdigitated spiral delay line constructed by spiralDelayLineArchV2Inv constructor. Parameter ST is an integer (ST ≥ 0) defining 

the number of skipped turns before rendering of the spiral initiates. 

IMPORTANT NOTE: The above interdigitated spirals (Figures 2.134- 2.135) 

are created and fractured along the y−axis. As mentioned in the previous 

section, fracturing eliminates any possibility of exceeding maximum number of 

allowed points per GDS shape. Unfortunately, the fracturing is computationally 

intensive, consuming large amounts of RAM for spirals of many turns defined 

by a large collection points. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 149 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.7 Gratings

2.9.7.1 Grating

Grating structure is defined by the line width, length and pitch. A single line 

is cast into a GDS structure singleRectangleStructN ame and arrayed (instantiated) at the specified pitch within the existing GDS structure. Nlines parameter 

represents the number of instantiated lines. 

<singleRectangleStructName x y W

P itch

L P itch

W

Nlines grating>

L

(x,y) 

Figure 2.136: Example of the grating constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 150 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.7.2 Apodized Grating

The apodized grating structure is defined by the grating length (GL), the increment (ΔGL), grating line height (H), duty cycle cutoff (dCC), and grating 

parameters pi and di. The grating extends from (− G

2

L ) to (+ G

2

L ) with the lower 

edge centered around (x,y). 

<x y GL ΔGL H dCC p1 p2 p3 p4 d1 d2 d3 d4 d5 θ(x,y) apodizedGrating>

GL

H

(x,y) 

− GL GL + 2 2

Figure 2.137: Example of the apodizedGrating constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 151 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.7.3 Grating Coupler

Structure characterized by a center (x,y), distance (r) from center to the midpoint of the first arc section, width (W ) and pitch (p) of the arc section, start 

(θs) and end angles (θe), number of sides (Nsides) for each of the arc sections 

and number of elements (Nelements). 

<x y r W p θs θe Nsides Nelements gratingCoupler>

θe

(x,y) 

θs

r p

W

Figure 2.138: Example illustrating various parameters of the gratingCoupler constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 152 of 488 
 

 

�

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.7.4 Grating Couplers With Waveguides

The following constructors generate grating couplers with integrated waveguides within the x − y plane using 

qλ◦ = nef f x2 + y2 − xnc cosθc (2.16) 

where the focal point is located at the origin (x,y) with x along the waveguide 

axis, q is an integer for each grating line, θc is the grating angle span, nc and 

nef f are the respective cladding and effective refractive index values, and λ◦

is the wavelength. The following are the constructors for the waveguide (GDS 

Layer Lwg ) with an integrated grating coupler (GDS Layer Lg ) 

<x y w L H s λ◦ nef f nc θc R gp ratio Ng Ns Lwg Lg EC θ(x,y) gratingCWGinv>

<x y w L H λ◦ nef f nc θc R gp ratio Ng Ns Lwg Lg EC θ(x,y) gratingCWG>

As labeled in Figures 2.139 and 2.140, the structure is placed and rotated 

(θ(x,y)) relative to the origin (x,y). Waveguides are constructed using a bezier 

s-bend curve and defined by a width (w), length (L) and height (H). A negative 

value of H will extend the waveguide below the y-axis. Sleeve width for inverse 

waveguides (Figures 2.139a and 2.140a) is defined by s, R is the distance to the 

outermost grating, gp is the grating pitch and the duty cycle is defined by the 

ratio value. Consequently the grating line width is given by 

gw = gp ∗ratio (2.17) 

Ng defines the number of generated grating lines with the maximum number 

grating lines within R given by 

nef f R

Nmax = ceil (2.18) λ◦

The outer and inner radius of each ring is defined by 

qλ◦ rq(out) = (2.19) nef f − nc cosαi cosθ

rq(in) = rq(out) − (gp ∗ratio) = rq(out) − gw (2.20) 

where 

λ◦ θ = arccos nef f − (2.21) gp

and αi is the angular range from −θx to θc. Parameter (x,y,w,L,H, s,λ◦,R,gp) 

dimensions are expressed in micrometers. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 153 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

θc

2

L

H

w

s

(x,y) 

−θc

2

θc

gp

gw

R

(a)

θc

2

w

L

H

(x,y) θc

gp

gw

R

(b) −θc

2

Figure 2.139: Grating couplers (a) waveguide with sleeve and (b) waveguide with EC = 0. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 154 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

θc

2

L

H

w

s

(x,y) 

−θc

2

θc

gp

gw

R

(a)

θc

2

w

L

H

(x,y) θc

gp

gw

R

(b) −θc

2

Figure 2.140: Grating couplers with endcaps. (a) waveguide with sleeve and (b) waveguide with EC = 1. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 155 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.8 Photonic Crystals and Hexagonal Arrays

Photonic crystal and hexagonal array structures characterized by a center 

(x,y), circle radius (r), pitch (xp), number of elements Nx and Ny in the corresponding x and y directions, and spacing (δ) between the two arrays. Parameter 

uniqueStructName represents the name for the structure (cell) for the circular 

element. The circular element is then arrayed to construct the photonic crystal 

structure. 

Within constructors phC and hex, parameter Nsides defines the number 

of sides of the individual polygon/circular apertures. When using vectorized 

constructors (phCV and hexV), resulting structures are circles with number of 

sides determined by the shape rendering resolution parameter shapeReso. 

<uniqueStructN ame x y r xp Nx Ny Nsides δ phC>

<uniqueStructN ame x y r xp Nx Ny δ phCV>

<uniqueStructN ame x y r xp Nx Ny Nsides hex>

<uniqueStructN ame x y r xp Nx Ny hexV>

(x,y) xp δ r

(a)

r (b)

Figure 2.141: (a) Photonic crystal and (b) hexagonal array examples illustrating various 

constructor parameters. 

(x,y) xp

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 156 of 488 
 

 

 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9 Disc-Ring Architectures

2.9.9.1 Disc-Ring - Bezier Curves, Arcs and Endcaps

The following sections illustrate coupled waveguides to disc and ring structures. 

The coupling region is defined by an arc section that symmetrically interacts 

with the disc/ring structure. The waveguide region leading away from the 

coupling region is defined by either a Bezier or an arc segment. 

(x,y) 

θ

1 P1

C1 C2

L

P2

(a)

H

(x,y) 

θ

1

2

(b)

Figure 2.142: Schematic illustration highlighting the waveguide coupling region constructed using (a) Bezier and (b) arc segments. 

Figure 2.142a illustration has coupling region (labeled as 1) defined by an 

arc. The continuing segment ending at a distance L is defined by a Bezier curve 

consisting of start and end points (P1 and P2) and their corresponding control 

points C1 and C2. Control points are defined as, 

R C1x = P1x + ∗ cos(φ) (2.22a) 4

R C1y = P1x − ∗ sin(φ) (2.22b) 4

L C2x = P2x − (2.22c) 2

C2y = P2y (2.22d) 

√ where R = H2 + L2, and φ = 90 − θ. 

Figure 2.142b shows a coupling region defined by two arc segments. For 

this segment, the straight waveguide portion of length L is omitted. In both 

cases, the drawn structures are mirrored around the y−axis. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 157 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(a) (b) 

Figure 2.143: Illustrations showing semicircular encaps on the right hand side of (a) a 

waveguide and (b) an inverse and inverse positive waveguide. Endcaps 

are included on both left and right sides of the waveguide when parameter 

EC = 1. The red circle denotes the end point of the waveguide structure. 

Semicircular endcap radius of the equals half of the waveguide width. 

Figure 2.143 shows shows waveguide structures with semicircular endcaps. 

The structures are encountered in subsequent sections and are useful when 

stressed thin film underlayers are patterned using thick resists. The corner 

rounding at the waveguide termination end alleviates the stress field, thereby 

mitigating resist and thin film cracking during subsequent reactive ion etch 

processing steps. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 158 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.2 Disc-Ring Infinite

Shapes characterized by a straight waveguide (Rwg = ∞) above a disc and ring 

objects. Both objects are described by the center coordinate (x,y), number of 

segments (N), gap between the object and shape (g), waveguide length (L) and 

width (W ). Disc object is defined by a radius (rd) and the ring is characterized 

by an inner radius ri and ring width (Wr). Boolean parameter EC controls if 

semicircular endcaps are incorporated in the waveguide structure. EC is an 

integer value with zero representing false, hence waveguides without endcaps, 

i.e. EC = 0 and EC = 1 for waveguides without and with endcaps, respectively. 

<x y rd N g L W EC discInfinite>

<x y ri Wr N g L W EC ringInfinite>

L L

W W

(x,y) 

rd

(a) 

g

(x,y) 

ri

Wr

g

(b) 

Figure 2.144: Examples illustrating various parameters of the (a) discInfinite and 

(b) ringInfinite constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 159 of 488 
Infinite disc and ring structures with an additional coupling waveguide. 

<x y rd N g1 L1 W1 g2 L2 W2 EC discInfDS>

<x y ri Wr N g1 L1 W1 g2 L2 W2 EC ringInfDS>

L1 L1

W1 W1

(x,y) 

rd

g1

L2

g2

(x,y) 

ri

Wr

g1

L2

g2

W2 W2

(a) (b) 

Figure 2.145: Examples illustrating various parameters of the (a) discInfDS and 

(b) ringInfDS constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 160 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.3 Disc-Ring Infinite Inverse

The structure is similar to the disc-ring waveguide infinite structure defined in 

the previous section 2.9.9.2. Here, a slot waveguide of width W is formed by 

exposing a surrounding rectangular region of width We. The overall shapes are 

characterized by a straight waveguide (Rwg = ∞) above a disc and ring objects. 

Both objects are described by the center coordinate (x,y), number of segments 

(N), gap between the object and shape (g), waveguide length (L), waveguide 

width (W ) and exposure sleeve width (We). Disc object is defined by a radius 

(rd) and the ring is characterized by an inner radius (ri) and ring width (Wr). 

Boolean parameter EC controls if semicircular endcaps are incorporated in 

the waveguide structure (EC = 0 and EC = 1 for waveguides without and with 

endcaps, respectively). 

<x y rd N g L W We EC discInfiniteInv>

<x y ri Wr N g L W We EC ringInfiniteInv>

L L

(x,y) 

rd

W

We

(a) 

g

(x,y) 

ri

Wr

W

We

g

(b) 

Figure 2.146: Examples illustrating various parameters of the (a) discInfiniteInv and 

(b) ringInfiniteInv constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 161 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Infinite inverse disc and ring structures with an additional waveguide. 

<x y rd N g1 L1 W1 We1 g2 L2 W2 We2 EC discInfInvDS>

<x y ri Wr N g1 L1 W1 We1 g2 L2 W2 We2 EC ringInfInvDS>

L1 L1

W1

(x,y) 

rd

W1

(x,y) 

ri

Wr

We1 We1

g1 g1

g2 g2

We2 We2

W2 W2

L2 L2

(a) (b) 

Figure 2.147: Examples illustrating various parameters of the (a) discInfInvDS and 

(b) ringInfInvDS constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 162 of 488 
re Wr re ri

(x,y) 

W

(b) 

2.9.9.4 Disc-Ring Infinite Inverse Positive Tone

The structure is similar to the disc-ring waveguide structure defined in section 2.9.9.2. Here, a waveguide of width W and either a ring of width Wr or disc 

of radius rd − re are formed by positive tone resist exposure of the respective 

exposure sleeve regions We and re. The overall shapes are characterized by 

a straight waveguide (Rwg = ∞) above a disc and ring objects. Both objects 

are described by the center coordinate (x,y), number of segments (N), gap 

between the object and shape (g), waveguide length (L), waveguide width (W )

and exposure sleeve width (We). Disc object is defined by a radius (rd) and the 

ring is characterized by a radius (ri) and ring width (Wr). 

<x y rd re N g L W We EC discInfiniteInvPos>

<x y ri Wr re N g L W We EC ringInfiniteInvPos>

L L

We We

re

(x,y) 

rd

g

W

(a) 

g

Figure 2.148: Examples illustrating various parameters of the (a) discInfiniteInvPos

and (b) ringInfiniteInvPos constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 163 of 488 
re Wr re ri

(x,y) 

W1

W2

L2

(b) 

Infinite inverse positive disc and ring structures with an additional coupling 

waveguide. 

<x y rd re N g1 L1 W1 We1 g2 L2 W2 We2 EC discInfInvPosDS>

<x y ri Wr re N g1 L1 W1 We1 g2 L2 W2 We2 EC ringInfInvPosDS>

L1 L1

We1 We1

re

(x,y) 

rd

g1

W1

g2

W2

L2

(a) 

g1

g2

We2 We2

Figure 2.149: Examples illustrating various parameters of the (a) discInfInvPosDS and 

(b) ringInfInvPosDS constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 164 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.5 Disc-Ring Symmetric Bezier

Shapes characterized by a curved waveguide above a disc (RwaveGuide = −RDisc)

and ring (RwaveGuide = −RRing )objects. Both objects (disc/ring) are described by 

the center coordinate (x,y), number of segments (N), gap between the object 

and waveguide (g), waveguide opening angle (θ), number of sides (Nwg ), width 

(W ), length (L), height (H), disc radius, (rd), ring radius (ri) and width (Wr). 

EC = 0 and EC = 1 for waveguides without and with endcaps, respectively. 

<x y rd N g θ Nwg W L H EC discSymmetric>

<x y ri Wr N g θ Nwg W L H EC ringSymmetric>

(x,y) 

rd

g

W

H

L

θ

(a)

(x,y) 

ri

g

Wr

W

H

L

θ

(b)

Figure 2.150: Example shapes illustrating various parameters from the (a) discSymmetric and (b) ringSymmetric constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 165 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 L1 H g2 W2 L2 EC discSymDS>

(x,y) 

rd

W1

H

L1

θ

g2

W2

g1

L2

Figure 2.151: Example shape illustrating various parameters from the discSymDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 166 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 L1 H1 g2 θ2 W2 L2 H2 EC discSymPul>

(x,y) 

rd

g1

W1

H1

L1

θ1

g2

W2

H2

L2

θ2

Figure 2.152: Example shape illustrating various parameters from the discSymPul

constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 167 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 L1 H g2 W2 L2 EC ringSymDS>

(x,y) 

ri

Wr

W1

H

L1

θ

g2

W2

g1

L2

Figure 2.153: Example shape illustrating various parameters from the ringSymDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 168 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 L1 H g2 θ2 W2 L2 H2 EC ringSymPul>

(x,y) 

ri

g1

Wr

W1

H

L1

θ1

g2

W2

H2

L2

θ2

Figure 2.154: Example shape illustrating various parameters from the ringSymPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 169 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following disc-ring waveguide symmetric structures are defined by the 

coupling length parameter Lc. 

<x y rd N g Lc Nwg W L H EC discSymmetricLC>

<x y ri Wr N g Lc Nwg W L H EC ringSymmetricLC>

(x,y) 

rd

g

W

H

L

Lc

(a)

(x,y) 

ri

g

W

Wr

H

L

Lc

(b)

Figure 2.155: Example shapes illustrating various parameters from the (a) discSymmetricLC and (b) ringSymmetricLC constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 170 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 L1 H g2 W2 L2 EC discSymLCDS>

(x,y) 

rd

g1

W1

H

L1

Lc

g2

W2

L2

Figure 2.156: Example shape illustrating various parameters from the discSymLCDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 171 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric structure with an additional coupling pulley. 

<x y rd N g1 Lc1 Nwg W1 L1 H1 g2 Lc2 W2 L2 H2 EC discSymLCPul>

r (x,y) d

g1

W1

H1

L1

Lc1

g2

W2 H2

L2 Lc2

Figure 2.157: Example shape illustrating various parameters from the discSymLCPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 172 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 L1 H g2 W2 L2 EC ringSymLCDS>

(x,y) 

ri

g1

W1

Wr

H

L1

Lc

g2

W2

L2

Figure 2.158: Example shape illustrating various parameters from the ringSymLCDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 173 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 L1 H1 g2 Lc2 W2 L2 H2 EC ringSymLCPul>

(x,y) ri

g1

W1

Wr

H1

L1

Lc1

g2

W2 H2

L2 Lc2

Figure 2.159: Example shape illustrating various parameters from the ringSymLCPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 174 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.6 Disc-Ring Symmetric Arc

Symmetric structures similar to ones described in section 2.9.9.5 with coupling 

regions constructed using arcs. Both objects (disc/ring) are described by the 

center coordinate (x,y), number of segments (N), gap between the object and 

waveguide (g), waveguide opening angle (θ), number of sides (Nwg ), width (W ), 

and length of the connecting straight waveguide section (LS ), disc radius, (rd), 

ring radius (ri) and width (Wr). EC = 0 and EC = 1 for waveguides without and 

with endcaps, respectively. 

<x y rd N g θ Nwg W LS EC discSymmetricA>

<x y ri Wr N g θ Nwg W LS EC ringSymmetricA>

W LS

θ

(x,y) 

rd

g

(a)

(x,y) 

ri

g

Wr

W

θ

LS

(b)

Figure 2.160: Example shapes illustrating various parameters from the (a) discSymmetricA and (b) ringSymmetricA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 175 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric arc structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 LS g2 W2 L2 EC discSymADS>

(x,y) 

rd

g1

W1 LS

θ

g2

W2

L2

Figure 2.161: Example shape illustrating various parameters from the discSymADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 176 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric arc structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 LS1 g2 θ2 W2 LS2 EC discSymAPul>

(x,y) 

rd

g1

W1 LS1

θ1

g2

W2 LS2

θ2

Figure 2.162: Example shape illustrating various parameters from the discSymAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 177 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 LS g2 W2 L2 EC ringSymADS>

(x,y) 

ri

g1

Wr

W1 LS

θ

g2

W2

L2

Figure 2.163: Example shape illustrating various parameters from the ringSymADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 178 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric arc structure with an additional coupling pulley. 

<x y ri Wr N g θ1 Nwg W LS g2 θ2 W2 LS2 EC ringSymAPul>

(x,y) 

ri

g1

Wr

W1 LS1

θ1

g2

W2 LS2

θ2

Figure 2.164: Example shape illustrating various parameters from the ringSymAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 179 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following arc based, disc-ring waveguide symmetric structures are 

defined by the coupling length parameter Lc. 

<x y rd N g Lc Nwg W LS EC discSymmetricLCA>

<x y ri Wr N g Lc Nwg W LS EC ringSymmetricLCA>

(x,y) 

rd

g

Lc LS

W

(a)

(x,y) 

ri

g

Wr

Lc LS

W

(b)

Figure 2.165: Example shapes illustrating various parameters from the (a) discSymmetricLCA and (b) ringSymmetricLCA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 180 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric arc structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 LS g2 W2 L2 EC discSymLCADS>

(x,y) 

rd

g1

Lc LS

W1

g2

W2

L2

Figure 2.166: Example shape illustrating various parameters from the (a) discSymLCADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 181 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric arc structure with an additional coupling pulley. 

<x y rd N g1 Lc1 Nwg W1 LS1 g2 Lc2 W2 LS2 EC discSymLCAPul>

(x,y) rd

g1

Lc1 LS1

W1

g2

W2

LS2 Lc2

Figure 2.167: Example shape illustrating various parameters from the (a) discSymLCAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 182 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 LS g2 W2 L2 EC ringSymLCADS>

(x,y) 

ri

g1

Wr

Lc LS

W1

g2

W2

L2

Figure 2.168: Example shape illustrating various parameters from the ringSymLCADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 183 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric arc structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 LS1 g2 Lc2 W2 LS2 EC ringSymLCAPul>

(x,y) 

ri

g1

Wr

Lc1 LS1

W1

g2

W2

LS2 Lc2

Figure 2.169: Example shape illustrating various parameters from the ringSymLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 184 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.7 Disc-Ring Symmetric Inverse Bezier

The structure is similar to the disc-ring waveguide symmetric structure defined 

in the previous section (2.9.9.5). Here, a slot waveguide of width W is formed by 

exposing a surrounding rectangular region of width We. Using a negative tone 

resist, the resulting structure would produce a disc or ring shape at a distance 

g to a slotted waveguide. 

<x y rd N g θ Nwg W We L H EC discSymmetricInv>

<x y ri Wr N g θ Nwg W We L H EC ringSymmetricInv>

g

We

W

H

L

θ

(x,y) 

rd

(a)

L

(b)

Figure 2.170: Example shapes illustrating various parameters from the (a) discSymmetricInv and (b) ringSymmetricInv constructors. 

(x,y) 

ri

Wr

g

We

W

H

θ

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 185 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC discSymInvDS>

(x,y) 

rd

g1

We1

W1

H

L1

θ

g2

We2

W2

L2

Figure 2.171: Example shape illustrating various parameters from the (a) discSymInvDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 186 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 We1 L1 H1 g2 θ2 W2 We2 L2 H2 EC discSymInvPul>

r (x,y) d

g

We1

W1

H1

L1

θ1

g2

We2

W2

H2

L2

θ2

Figure 2.172: Example shape illustrating various parameters from the (a) discSymInvPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 187 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringSymInvDS>

(x,y) 

ri

Wr

g1

We1

W1

H

L1

θ

g2

We2

W2

L2

Figure 2.173: Example shape illustrating various parameters from the ringSymInvDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 188 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 We1 L1 H1 g2 θ2 W2 We2 L2 H2 EC ringSymInvPul>

(x,y) 

ri

Wr

g1

We1

W1

H1

L1

θ1

g2

We2

W2

H2

L2

θ2

Figure 2.174: Example shape illustrating various parameters from the ringSymInvPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 189 of 488 
The following disc-ring waveguide symmetric inverse structures are defined 

by the coupling length parameter L

c. 

<x y r

d N g Lc

Nwg W We L H EC discSymmetricInvLC>

<x y r

i

Wr N g L

c

Nwg W We L H EC ringSymmetricInvLC> gWe W H L Lc (x,y) rd (a) (x,y) riWr gWe W H L Lc (b)

Figure 2.175: Example shapes illustrating various parameters from the (a) discSymmetricInvLC and (b) ringSymmetricInvLC constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 190 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC discSymInvLCDS>

(x,y) 

rd

g1

We1

W1

H

L1

Lc

We2

g2

W2

L2

Figure 2.176: Example shape illustrating various parameters from the (a) discSymInvLCDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 191 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse structure with an additional coupling pulley. 

<x y rd N g1 Lc1 Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC discSymInvLCPul>

r (x,y) d

g1

We1

W1 H1

L1

Lc1

g2

We2

W2 H2

L2

Lc2

Figure 2.177: Example shape illustrating various parameters from the (a) discSymInvLCPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 192 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringSymInvLCDS>

(x,y) 

ri

Wr

g1

We1

W1

H

L1

Lc

g2

We2

W2

L2

Figure 2.178: Example shape illustrating various parameters from the ringSymInvLCDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 193 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC ringSymInvLCPul>

ri(x,y)

Wr

g1

We1

W1

H

L1

Lc

g2

We2

W2 H2

L2

Lc2

Figure 2.179: Example shape illustrating various parameters from the ringSymInvLCPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 194 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.8 Disc-Ring Symmetric Inverse Arc

Symmetric inverse structures constructed using arcs are similar to ones described in section 2.9.9.6. Here, a slot waveguide of width W is formed by 

exposing a surrounding rectangular region of width We. Using a negative tone 

resist, the resulting structure would produce a disc or ring shape at a distance 

g to a slotted waveguide. 

<x y rd N g θ Nwg W We LS EC discSymmetricInvA>

<x y ri Wr N g θ Nwg W We LS EC ringSymmetricInvA>

W

We

LS

θ

(x,y) 

rd

g

(a)

(x,y) 

ri

W

We

g

LS

θ

Wr

(b)

Figure 2.180: Example shapes illustrating various parameters from the (a) discSymmetricInvA and (b) ringSymmetricInvA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 195 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse arc structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 We1 LS g2 W2 We2 L2 EC discSymInvADS>

(x,y) 

rd

W1

We1

g1

LS

θ

g2

We2

W2

L2

Figure 2.181: Example shape illustrating various parameters from the discSymInvADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 196 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse arc structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 LS2 EC discSymInvAPul>

r (x,y) d

W1

We1

g1

θ1

g2

LS2

θ2

W2

We2

LS1

Figure 2.182: Example shape illustrating various parameters from the discSymInvAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 197 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 We LS g2 W2 We2 L2 EC ringSymInvADS>

(x,y) 

ri

W1

We

g1

LS

θ

Wr

g2

We2

W2

L2

Figure 2.183: Example shapes illustrating various parameters from the ringSymInvADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 198 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse arc structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 LS2 EC ringSymInvAPul>

(x,y) ri

W1

We1

θ1

Wr

g2

LS2

θ2

W2

We2

LS1

g1

Figure 2.184: Example shapes illustrating various parameters from the ringSymInvAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 199 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following arc based, disc-ring waveguide symmetric inverse structures 

are defined by the coupling length parameter Lc. 

<x y rd N g Lc Nwg W We LS EC discSymmetricInvLCA>

<x y ri Wr N g Lc Nwg W We LS EC ringSymmetricInvLCA>

W

We

Lc LS

(x,y) 

rd

g

(a)

(x,y) 

ri

W

We

Wr

Lc

g

LS

(b)

Figure 2.185: Example shapes illustrating various parameters from the (a) discSymmetricInvLCA and (b) ringSymmetricInvLCA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 200 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse arc structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC discSymInvLCADS>

W1

We1

Lc LS

(x,y) 

rd

g1

g2

We2

W2

L2

Figure 2.186: Example shape illustrating various parameters from the discSymInvLCADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 201 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse arc structure with an additional coupling pulley. 

<x y rd N g1 Lc Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC discSymInvLCAPul>

(x,y) rd

W1

We1

Lc1

g1

LS1

g2

LS2

Lc2

W2

We2

Figure 2.187: Example shape illustrating various parameters from the discSymInvLCAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 202 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC ringSymInvLCADS>

(x,y) 

ri

W1

We1

Wr

Lc

g1

LS

g2

We2

W2

L2

Figure 2.188: Example shape illustrating various parameters from the ringSymInvLCADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 203 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse arc structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC ringSymInvLCAPul>

(x,y) ri

W1

We1

Wr

Lc1

g1

LS1

g2

LS2

Lc2

W2

We2

Figure 2.189: Example shape illustrating various parameters from the ringSymInvLCAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 204 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.9 Disc-Ring Symmetric Inverse Positive Tone Bezier

The structure is similar to the disc-ring waveguide symmetric structure defined 

in section 2.9.9.5. Here, a slot waveguide is formed at a distance g away from a 

disc or a ring structure using a positive resist exposure of the exposure sleeve 

elements We and re. 

<x y rd re N g θ Nwg W We L H EC discSymmetricInvPos>

<x y ri Wr re N g θ Nwg W We L H EC ringSymmetricInvPos>

(x,y) 

rd re

g

We

W

H

L

θ

(a)

(x,y) 

ri re Wr re

g

We

W

H

L

θ

(b)

Figure 2.190: Example shapes illustrating various parameters from the (a) discSymmetricInvPos and (b) ringSymmetricInvPos constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 205 of 488 
(x,y) 

rd re

g1

W1

H

θ

L2

Disc symmetric inverse positive structure with an additional coupling waveguide. 

<x y rd re N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC discSymInvPosDS>

We1

L1

g2

W2

We2

Figure 2.191: Example shape illustrating various parameters from the discSymInvPosDS constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 206 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive structure with an additional coupling pulley. 

<x y rd re N g1 θ1 Nwg W1 We1 L1 H1 g2 θ2 W2 We2 L2 H2 EC discSymInvPosPul>

(x,y) rd re

g

We1

W1

H

L1

θ1

g2

W2

We2

L2

H2

θ2

Figure 2.192: Example shape illustrating various parameters from the discSymInvPosPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 207 of 488 
(x,y) 

ri re Wr re

g1

W1

H

θ

L2

Ring symmetric inverse positive structure with an additional coupling waveguide. 

<x y ri Wr re N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringSymInvPosDS>

We1

L1

g2

W2

We2

Figure 2.193: Example shape illustrating various parameters from the ringSymInvPosDS constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 208 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse positive structure with an additional coupling pulley. 

<x y ri Wr re N g1 θ1 Nwg W1 We1 L1 H1 g2 θ2 W2 We2 L2 H2 EC ringSymInvPosPul>

(x,y) ri re Wr re

g1

We1

W1

H

L1

θ1

g2

W2

We2

L2

H2

θ2

Figure 2.194: Example shape illustrating various parameters from the ringSymInvPosPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 209 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following disc-ring waveguide symmetric inverse positive tone structures are defined by the coupling length parameter Lc. 

<x y rd re N g Lc Nwg W We L H EC discSymmetricInvPosLC>

<x y ri Wr re N g Lc Nwg W We L H EC ringSymmetricInvPosLC>

(x,y) 

rd re

g

W

We

H

L Lc

(a)

(x,y) 

ri re Wr re

g

W

We

H

L Lc

(b)

Figure 2.195: Example shapes illustrating various parameters from the (a) discSymmetricInvPosLC and (b) ringSymmetricInvPosLC constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 210 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive structure with an additional coupling waveguide. 

<x y rd re N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC discSymInvPosLCDS>

(x,y) 

rd re

g

W1

We1

H

L1

Lc

g2

W2

L2

We2

Figure 2.196: Example shape illustrating various parameters from the discSymInvPosLCDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 211 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive structure with an additional coupling pulley. 

<x y rd re N g1 Lc1 Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC discSymInvPosLCPul>

(x,y) rd re

g

W1

We1

H1

L1

Lc1

g2

We2

W2

Lc2

L2

H2

Figure 2.197: Example shape illustrating various parameters from the discSymInvPosLCPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 212 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse positive structure with an additional coupling waveguide. 

<x y ri Wr re N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringSymInvPosLCDS>

(x,y) 

ri re Wr re

g1

W1

We1

H

L1

Lc

g2

W2

L2

We2

Figure 2.198: Example shape illustrating various parameters from the ringSymInvPosLCDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 213 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse positive structure with an additional coupling pulley. 

<x y ri Wr re N g1 Lc1 Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC ringSymInvPosLCPul>

(x,y) ri re Wr re

g1

W1

We1

H1

L1

Lc1

g2

W2

We2

Lc2

L2

H2

Figure 2.199: Example shape illustrating various parameters from the ringSymInvPosLCPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 214 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.10 Disc-Ring Symmetric Inverse Positive Tone Arc

Symmetric inverse positive tone structures constructed using arcs are similar 

to ones described in section 2.9.9.6. Here, a slot waveguide is formed at a 

distance g away from a disc or a ring structure using a positive resist exposure 

of the exposure sleeve elements We and re. 

<x y rd re N g θ Nwg W We LS EC discSymmetricInvPosA>

<x y ri Wr re N g θ Nwg W We LS EC ringSymmetricInvPosA>

θ

(x,y) 

rd re

g

W

We

LS

(a)

(x,y) 

ri re Wr re

g

θ

(b)

Figure 2.200: Example shapes illustrating various parameters from the (a) discSymmetricInvPosA and (b) ringSymmetricInvPosA constructors. 

W

We

LS

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 215 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive arc structure with an additional coupling waveguide. 

<x y rd re N g1 θ Nwg W1 We1 LS g2 W2 We2 L2 EC discSymInvPosADS>

θ

(x,y) 

rd re

g1

L2

W1

We1

LS

g2

W2

We2

Figure 2.201: Example shapes illustrating various parameters from the (a) discSymInvPosADS and (b) ringSymInvPosADS constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 216 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive arc structure with an additional coupling pulley. 

<x y rd re N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 LS2 EC discSymInvPosAPul>

(x,y) rd re

W1

We1

LS1

g1

θ1

θ2

LS2

W2

We2 g2

Figure 2.202: Example shape illustrating various parameters from the discSymInvPosAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 217 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse positive arc structure with an additional coupling waveguide. 

<x y ri Wr re N g θ Nwg W We LS g2 W2 We2 L2 EC ringSymInvPosADS>

LS

(x,y) 

ri re Wr re

g1

θ

g2

W2

L2

We2

W1
 

We1
 

Figure 2.203: Example shape illustrating various parameters from the ringSymInvPosADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 218 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring symmetric inverse positive arc structure with an additional coupling pulley. 

<x y ri Wr re N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 LS2 EC ringSymInvPosAPul>

W1

We1

LS1

(x,y) ri re Wr re

g1

θ1

θ2

LS2

W2

We2 g2

Figure 2.204: Example shape illustrating various parameters from the ringSymInvPosAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 219 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following arc based, disc-ring waveguide symmetric inverse positive 

tone structures are defined by the coupling length parameter Lc. 

<x y rd re N g Lc Nwg W We LS EC discSymmetricInvPosLCA>

<x y ri Wr re N g Lc Nwg W We LS EC ringSymmetricInvPosLCA>

(x,y) 

rd re

LS

g

Lc

W

We

(a)

LS

(x,y) 

ri re Wr re

g

Lc

(b)

Figure 2.205: Example shapes illustrating various parameters from the (a) discSymmetricInvPosLCA and (b) ringSymmetricInvPosLCA constructors. 

W
 

We
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 220 of 488 
(x,y) 

rd re

g1

Lc

L2

Disc symmetric inverse positive arc structure with an additional coupling waveguide. 

<x y rd re N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC discSymInvPosLCADS>

W1

We1

LS

g2

W2

We2

Figure 2.206: Example shape illustrating various parameters from the discSymInvPosLCADS constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 221 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive arc structure with an additional coupling pulley. 

<x y rd re N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC discSymInvPosLCAPul>

(x,y) rd re

We1

LS1

g1

W1

Lc1

Lc2

LS2

W2

We2 g2

Figure 2.207: Example shape illustrating various parameters from the discSymInvPosLCAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 222 of 488 
(x,y) 

ri re Wr re

g1

Lc

L2

Disc symmetric inverse positive arc structure with an additional coupling waveguide. 

<x y ri Wr re N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC ringSymInvPosLCADS>

W1

We1

LS

g2

W2

We2

Figure 2.208: Example shape illustrating various parameters from the ringSymInvPosLCADS constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 223 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc symmetric inverse positive arc structure with an additional coupling waveguide. 

<x y ri Wr re N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC ringSymInvPosLCAPul>

We1

LS1

(x,y) ri re Wr re

g1

W1

Lc1

Lc2

LS2

W2

We2 g2

Figure 2.209: Example shape illustrating various parameters from the ringSymInvPosLCAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 224 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.11 Disc-Ring Pulley Bezier

Shapes characterized by a curved waveguide around a disc (RwaveGuide >

−RDisc) and ring (RwaveGuide > −RRing )objects. Both objects (disc/ring) are described by the center coordinate (x,y), number of segments (N), gap between 

the object and waveguide (g), waveguide opening angle (θ), number of sides 

(Nwg ), width (W ), length (L) and height (H). Disc object is defined by a radius 

(rd) and the ring is characterized by an inner radius (ri) and ring width (Wr). 

EC = 0 and EC = 1 for waveguides without and with endcaps, respectively. 

<x y rd N g θ Nwg W L H EC discPulley>

<x y ri Wr N g θ Nwg W L H EC ringPulley>

(x,y) 

r θ d

H

L

g

W

(a)

(x,y) 

r θ i

H

L

g

Wr

W

(b)

Figure 2.210: Example shapes illustrating various parameters of the (a) discPulley and 

(b) ringPulley constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 225 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 L1 H g2 W2 L2 EC discPulDS>

g2

L2

Figure 2.211: Example shape illustrating various parameters of the discPulDS constructor. 

(x,y) 

r θ d

H

L1

g1

W1

W2

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 226 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 L1 H1 g2 θ2 W2 L2 H2 EC discPulPul>

(x,y) 

rd

θ1

H1

L1

g1

W1

g2

W2

H2 L2

θ2

Figure 2.212: Example shape illustrating various parameters of the discPulPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 227 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 L1 H g2 W2 L2 EC ringPulDS>

(x,y) 

r θ i

H

L1

g1

Wr

W1

g2

W2

L2

Figure 2.213: Example shape illustrating various parameters of the ringPulDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 228 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 L1 H1 g2 θ2 W2 L2 H2 EC ringPulPul>

(x,y) 

ri

θ1

H1

L1

g1

Wr

W1

g2

W2

θ2

H2 L2

Figure 2.214: Example shape illustrating various parameters of the ringPulPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 229 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following disc-ring waveguide pulley structures are defined by the 

coupling length parameter Lc. 

<x y rd N g Lc Nwg W L H EC discPulleyLC>

<x y ri Wr N g Lc Nwg W L H EC ringPulleyLC>

(x,y) 

rd

H

L

g

W

Lc

(a)

(x,y) 

ri

H

L

g

Wr

W

Lc

(b)

Figure 2.215: Example shapes illustrating various parameters of the (a) discPulleyLC

and (b) ringPulleyLC constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 230 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 L1 H g2 W2 L2 EC discPulLCDS>

g2

L2

Figure 2.216: Example shape illustrating various parameters of the discPulLCDS constructor. 

(x,y) 

rd

H

L1

g

W1

Lc

W2

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 231 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley structure with an additional coupling pulley. 

<x y rd N g1 Lc1 Nwg W1 L1 H1 g2 Lc2 W2 L2 H2 EC discPulLCPul>

(x,y) 

rd

H

L1

g

W1

Lc1

g2

H2

L2

W2

Lc2

Figure 2.217: Example shape illustrating various parameters of the discPulLCPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 232 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 L1 H g2 W2 L2 EC ringPulLCDS>

(x,y) 

ri

H

L

g

Wr

W1

Lc

g2

W2

L2

Figure 2.218: Example shape illustrating various parameters of the ringPulLCDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 233 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 L1 H g2 Lc2 W2 L2 H2 EC ringPulLCPul>

(x,y) 

ri

H

L1

g

Wr

W1

Lc1

g2

H2 L2

W2

Lc2

Figure 2.219: Example shape illustrating various parameters of the ringPulLCPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 234 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.12 Disc-Ring Pulley Arc

Symmetric structures constructed using arcs are similar to ones described in 

section 2.9.9.11. Both objects (disc/ring) are described by the center coordinate 

(x,y), number of segments (N), gap between the object and waveguide (g), 

waveguide opening angle (θ), number of sides (Nwg ), width (W ), and length 

of the connecting straight waveguide section (LS ). Disc object is defined by a 

radius (rd) and the ring is characterized by an inner radius (ri) and ring width 

(Wr). EC = 0 and EC = 1 for waveguides without and with endcaps, respectively. 

<x y rd N g θ Nwg W LS EC discPulleyA>

<x y ri Wr N g θ Nwg W LS EC ringPulleyA>

(x,y) 

r θ d

LS

g

W

(a)

(x,y) 

r θ i

g

Wr

W

LS

(b)

Figure 2.220: Example shapes illustrating various parameters of the (a) discPulleyA

and (b) ringPulleyA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 235 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley arc structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 LS g2 W2 L2 EC discPulADS>

LS

g2

L2

Figure 2.221: Example shape illustrating various parameters of the discPulADS constructor. 

(x,y) 

r θ d

g1

W1

W2

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 236 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley arc structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 LS1 g2 θ2 W2 LS2 EC discPulAPul>

(x,y) 

rd

θ1

LS1

g1

W1

LS2

g2

W2

θ2

Figure 2.222: Example shape illustrating various parameters of the discPulAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 237 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 LS g2 W2 L2 EC ringPulADS>

(x,y) 

r θ i

g1

Wr

W1

LS

g2

W2

L2

Figure 2.223: Example shape illustrating various parameters of the ringPulADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 238 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley arc structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 LS1 g2 θ2 W2 LS2 EC ringPulAPul>

(x,y) 

ri

θ1

g1

Wr

W1

LS1

LS2

g2

W2

θ2

Figure 2.224: Example shape illustrating various parameters of the ringPulAPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 239 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following arc based, disc-ring waveguide pulley structures are defined 

by the coupling length parameter Lc. 

<x y rd N g Lc Nwg W LS EC discPulleyLCA>

<x y ri Wr N g Lc Nwg W LS EC ringPulleyLCA>

(x,y) 

rd

g

W

LS

Lc

(a)

(x,y) 

ri

g

Wr

W

LS

Lc

(b)

Figure 2.225: Example shapes illustrating various parameters of the (a) discPulleyLCA

and (b) ringPulleyLCA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 240 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley arc structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 LS g2 W2 L2 EC discPulLCADS>

(x,y) 

rd

g1

W1

LS

Lc

g2

W2

L2

Figure 2.226: Example shape illustrating various parameters of the (a) discPulLCADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 241 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley arc structure with an additional coupling pulley. 

<x y rd N g1 Lc1 Nwg W1 LS1 g2 Lc1 W2 LS2 EC discPulLCAPul>

(x,y) 

rd

g1

W1

LS1

Lc1

LS2

g2

W2

Lc2

Figure 2.227: Example shape illustrating various parameters of the (a) discPulLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 242 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 LS g2 W2 L2 EC ringPulLCADS>

(x,y) 

ri

g1

Wr

W1

LS

Lc

g2

W2

L2

Figure 2.228: Example shape illustrating various parameters of the ringPulLCADS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 243 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley arc structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 LS1 g2 Lc1 W2 LS2 EC ringPulLCAPul>

(x,y) 

ri

g1

Wr

W1

LS1

Lc1

LS2

g2

W2

Lc2

Figure 2.229: Example shape illustrating various parameters of the ringPulLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 244 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.13 Disc-Ring Pulley Inverse Bezier

The structure is similar to the disc-ring waveguide symmetric structure defined 

in the previous section (2.9.9.11). Here, a slot waveguide of width W is formed 

by exposing a surrounding rectangular region of width We. Using a negative 

tone resist, the resulting structure would produce a disc or ring shape at a 

distance g to a slotted waveguide. 

<x y rd N g θ Nwg W We L H EC discPulleyInv>

<x y ri Wr N g θ Nwg W We L H EC ringPulleyInv>

(x,y) 

r θ d

H

L1

g

We

W

(a)

(x,y) 

r θ i

H

L1

Wr

g

We

W

(b)

Figure 2.230: Example shapes illustrating various parameters of the (a) discPulleyInv

and (b) ringPulleyInv constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 245 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse structure with an additional coupling waveguide. 

<x y rd N g2 θ Nwg W2 We2 L2 H g2 W2 We2 L2 EC discPulInvDS>

(x,y) 

r θ d

H

L1

g1

We1

W1

g2

We2

W2

L2

Figure 2.231: Example shape illustrating various parameters of the discPulInvDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 246 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse structure with an additional coupling pulley. 

<x y rd N g2 θ1 Nwg W2 We2 L2 H2 g2 θ2 W2 We2 L2 H2 EC discPulInvPul>

(x,y) 

rd

θ1

H1

L1

g1

We1

W1

g2

We2

W2

θ2

H2

L2

Figure 2.232: Example shape illustrating various parameters of the discPulInvPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 247 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringPulInvDS>

(x,y) 

r θ i

H

L1

Wr

g1

We1

W1

g2

We2

W2

L2

Figure 2.233: Example shape illustrating various parameters of the ringPulInvDS constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 248 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 We1 L1 H g2 θ2 W2 We2 L2 H2 EC ringPulInvPul>

(x,y) 

ri

θ1

H1

L1

Wr

g1

We1

W1

g2

We2

W2

θ2

H2

L2

Figure 2.234: Example shape illustrating various parameters of the ringPulInvPul constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 249 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following disc-ring waveguide pulley inverse structures are defined by 

the coupling length parameter Lc. 

<x y rd N g Lc Nwg W We L H EC discPulleyInvLC>

<x y ri Wr N g Lc Nwg W We L H EC ringPulleyInvLC>

(x,y) 

rd

H

L

g

We

W

Lc

(a)

(x,y) 

ri

H

L

Wr

g

We

W

Lc

(b)

Figure 2.235: Example shapes illustrating various parameters of the (a) discPulleyInvLC and (b) ringPulleyInvLC constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 250 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC discPulInvLCDS>

(x,y) 

rd

H

L1

g1

We1

W1

Lc

g2

We2

W2

L2

Figure 2.236: Example shape illustrating various parameters of the discPulInvLCDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 251 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse structure with an additional coupling pulley. 

<x y rd N g1 Lc2 Nwg W1 We1 L1 H2 g2 Lc2 W2 We2 L2 H2 EC discPulInvLCPul>

(x,y) 

rd

H

L1

g1

We1

W1

Lc1

g2

We2

H2

L2 W2

Lc2

Figure 2.237: Example shape illustrating various parameters of the discPulInvLCPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 252 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringPulInvLCDS>

(x,y) 

ri

H

L1

Wr

g

We

W

Lc

g2

We2

W2

L2

Figure 2.238: Example shape illustrating various parameters of the ringPulInvLCDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 253 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC ringPulInvLCPul>

(x,y) 

ri

H

L1

Wr

g

We

W

Lc1

g2

We2

H2

L2 W2

Lc2

Figure 2.239: Example shape illustrating various parameters of the ringPulInvLCPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 254 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.14 Disc-Ring Pulley Inverse Arc

Pulley inverse structures constructed using arcs are similar to ones described 

in section 2.9.9.12. Here, a slot waveguide of width W is formed by exposing 

a surrounding rectangular region of width We. Using a negative tone resist, 

the resulting structure would produce a disc or ring shape at a distance g to a 

slotted waveguide. 

<x y rd N g θ Nwg W We LS EC discPulleyInvA>

<x y ri Wr N g θ Nwg W We LS EC ringPulleyInvA>

(x,y) 

r θ d

g

We

W

LS

(a)

(x,y) 

r θ i

Wr

g

We

W

LS

(b)

Figure 2.240: Example shapes illustrating various parameters of the (a) discPulleyInvA

and (b) ringPulleyInvA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 255 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse arc structure with an additional coupling waveguide. 

<x y rd N g1 θ Nwg W1 We1 LS g2 W2 We2 L2 EC discPulInvADS>

(x,y) 

r θ d

g1

We1

W1

g2

We2

W2

LS

L2

Figure 2.241: Example shape illustrating various parameters of the discPulInvADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 256 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse arc structure with an additional coupling pulley. 

<x y rd N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 LS2 EC discPulInvAPul>

(x,y) 

rd

θ1

g1

We1

W1

LS1

g2

We2

W2

θ2

LS2

Figure 2.242: Example shape illustrating various parameters of the discPulInvAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 257 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 θ Nwg W1 We1 LS g2 W2 We2 L2 EC ringPulInvADS>

(x,y) 

r θ i

Wr

g1

We1

W1

LS

g2

We2

W2

L2

Figure 2.243: Example shape illustrating various parameters of the ringPulInvADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 258 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse arc structure with an additional coupling pulley. 

<x y ri Wr N g1 θ1 Nwg W1 We1 LS g2 θ2 W2 We2 L2 EC ringPulInvAPul>

(x,y) 

ri

θ1

Wr

g1

We1

W1

LS1

g2

We2

W2

θ2

LS2

Figure 2.244: Example shape illustrating various parameters of the ringPulInvAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 259 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following arc based, disc-ring waveguide pulley inverse structures are 

defined by the coupling length parameter Lc. 

<x y rd N g Lc Nwg W We LS EC discPulleyInvLCA>

<x y ri Wr N g Lc Nwg W We LS EC ringPulleyInvLCA>

(x,y) 

rd

g

We

W

Lc

LS

(a)

(x,y) 

ri

Wr

g

We

W

Lc

LS

(b)

Figure 2.245: Example shapes illustrating various parameters of the (a) discPulleyInvLCA and (b) ringPulleyInvLCA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 260 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse arc structure with an additional coupling waveguide. 

<x y rd N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC discPulInvLCADS>

(x,y) 

rd

g1

We1

W1

Lc

LS

g2

We2

W2

L2

Figure 2.246: Example shape illustrating various parameters of the discPulInvLCADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 261 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse arc structure with an additional coupling pulley. 

<x y rd N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC discPulInvLCAPul>

(x,y) 

rd

g1

We1

W1

Lc1

LS1

g2

We2

W2

Lc2

LS2

Figure 2.247: Example shape illustrating various parameters of the discPulInvLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 262 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse arc structure with an additional coupling waveguide. 

<x y ri Wr N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC ringPulInvLCADS>

(x,y) 

ri

Wr

g1

We1

W1

Lc

LS

g2

We2

W2

L2

Figure 2.248: Example shape illustrating various parameters of the ringPulInvLCADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 263 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse arc structure with an additional coupling pulley. 

<x y ri Wr N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC ringPulInvLCADPul>

(x,y) 

ri

Wr

g1

We1

W1

Lc1

LS1

g2

We2

W2

Lc2

LS2

Figure 2.249: Example shape illustrating various parameters of the ringPulInvLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 264 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.15 Disc-Ring Pulley Inverse Positive Tone Bezier

The structure is similar to the disc-ring waveguide symmetric structure defined 

in section 2.9.9.11. Here, a slot waveguide is formed at a distance g away from 

a disc or a ring structure using a positive resist exposure of the exposure sleeve 

elements We and re. 

<x y rd re N g1 θ Nwg W1 We1 L1 H EC discPulleyInvPos>

<x y ri Wr re N g1 θ Nwg W1 We1 L1 H EC ringPulleyInvPos>

(x,y) 

r θ d

H

L1

g

W1

We1

re

(a)

(x,y) 

r θ i

re Wr re

H

L1

g1

W1

We1

(b)

Figure 2.250: Example shapes illustrating various parameters of the (a) discPulleyInvPos and (b) ringPulleyInvPos constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 265 of 488 
Disc pulley inverse positive structure with an additional coupling waveguide. 

<x y rd re N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC discPulInvPDS>

(x,y) 

r θ d

H

L1

g1

W1

We1

re

g2

W2

We2

L2

Figure 2.251: Example shape illustrating various parameters of the discPulInvPDS

constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 266 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse positive structure with an additional coupling pulley. 

<x y rd re N g1 θ1 Nwg W1 We1 L1 H g2 θ2 W2 We2 L2 H2 EC discPulInvPPul>

(x,y) 

r θ1 d

H1

L1

g1

W1

We1

re

g2

W2

We2

θ2

H2

L2

Figure 2.252: Example shape illustrating various parameters of the discPulInvPPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 267 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse positive structure with an additional coupling waveguide. 

<x y ri Wr re N g1 θ Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringPulInvPDS>

(x,y) 

r θ i

re Wr re

H

L1

g1

W1

We1

g2

W2

We2

L2

Figure 2.253: Example shape illustrating various parameters of the ringPulInvPDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 268 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse positive structure with an additional coupling pulley. 

<x y ri Wr re N g1 θ1 Nwg W1 We1 L1 H1 g2 θ2 W2 We2 L2 H2 EC ringPulInvPPul>

(x,y) 

ri θ1

re Wr re

H1

L1

g1

W1

We1

g2

W2

We2

θ2

H2

L2

Figure 2.254: Example shape illustrating various parameters of the ringPulInvPPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 269 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following disc-ring waveguide pulley inverse positive tone structures 

are defined by the coupling length parameter Lc. 

<x y rd re N g Lc Nwg W We L H EC discPulleyInvPosLC>

<x y ri Wr re N g Lc Nwg W We L H EC ringPulleyInvPosLC>

(x,y) 

rd

H

L

g

We

W

re

Lc

(a)

(x,y) 

ri

re Wr re

H

L

g

We

W

Lc

(b)

Figure 2.255: Example shapes illustrating various parameters of the (a) discPulleyInvPosLC and (b) ringPulleyInvPosLC constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 270 of 488 
Disc pulley inverse positive structure with an additional coupling waveguide. 

<x y rd re N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC discPulInvPLCDS>

(x,y) 

rd

H

L1

g1

We1

W1

re

Lc

g2

W2

We2

L2

Figure 2.256: Example shape illustrating various parameters of the discPulInvPLCDS

constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 271 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse positive structure with an additional coupling pulley. 

<x y rd re N g1 Lc Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC discPulInvPLCPul>

(x,y) 

rd

H1

L1

g1

We1

W1

re

Lc1

g2

W2

We2

H2

L2

Lc2

Figure 2.257: Example shape illustrating various parameters of the discPulInvPLCPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 272 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse positive structure with an additional coupling waveguide. 

<x y ri Wr re N g1 Lc Nwg W1 We1 L1 H g2 W2 We2 L2 EC ringPulInvPLCDS>

(x,y) 

ri

re Wr re

H

L1

g1

We1

W1

Lc

g2

W2

We2

L2

Figure 2.258: Example shape illustrating various parameters of the ringPulInvPLCDS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 273 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse positive structure with an additional coupling pulley. 

<x y ri Wr re N g1 Lc1 Nwg W1 We1 L1 H1 g2 Lc2 W2 We2 L2 H2 EC ringPulInvPLCPul>

(x,y) ri

re Wr re

H1

L1

g1

We1

W1

Lc1

g2

W2

We2

H2

L2

Lc2

Figure 2.259: Example shape illustrating various parameters of the ringPulInvPLCPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 274 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.9.16 Disc-Ring Pulley Inverse Positive Tone Arc

Pulley inverse positive tone structures constructed using arcs are similar to 

ones described in section 2.9.9.12. Here, a slot waveguide is formed at a 

distance g away from a disc or a ring structure using a positive resist exposure 

of the exposure sleeve elements We and re. 

<x y rd re N g θ Nwg W We LS EC discPulleyInvPosA>

<x y ri Wr re N g θ Nwg W We LS EC ringPulleyInvPosA>

(x,y) 

r θ d

g

W

We

re

LS

(a)

(x,y) 

r θ i

re Wr re

g

W

We

LS

(b)

Figure 2.260: Example shapes illustrating various parameters of the (a) discPulleyInvPosA and (b) ringPulleyInvPosA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 275 of 488 
We2

Disc pulley inverse positive arc structure with an additional coupling waveguide. 

<x y rd re N g1 θ Nwg W1 We1 LS g2 W2 We2 L2 EC discPulInvPADS>

(x,y) 

r θ d

g1

W1

We1

re

g2

W2

L2

Figure 2.261: Example shape illustrating various parameters of the discPulInvPADS

constructor. 

LS

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 276 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse positive arc structure with an additional coupling pulley. 

<x y rd re N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 LS2 EC discPulInvPAPul>

(x,y) 

r θ1 d

g1

W1

We1

re

LS1

g2

W2

We2

θ2

LS2

Figure 2.262: Example shape illustrating various parameters of the discPulInvPAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 277 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse positive arc structure with an additional coupling waveguide. 

<x y ri Wr re N g1 θ Nwg W1 We1 LS g2 W2 We2 L2 EC ringPulInvPADS>

(x,y) 

r θ i

re Wr re

g1

W1

We1

LS

g2

W2

We2

L2

Figure 2.263: Example shape illustrating various parameters of the ringPulInvPADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 278 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse positive arc structure with an additional coupling pulley. 

<x y ri Wr re N g1 θ1 Nwg W1 We1 LS1 g2 θ2 W2 We2 L2 EC ringPulInvPAPul>

(x,y) 

ri θ1

re Wr re

g1

W1

We1

LS1

g2

W2

We2

θ2

LS2

Figure 2.264: Example shape illustrating various parameters of the ringPulInvPAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 279 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following disc-ring waveguide pulley inverse positive tone structures 

are defined by the coupling length parameter Lc. 

<x y rd re N g Lc Nwg W We LS EC discPulleyInvPosLCA>

<x y ri Wr re N g Lc Nwg W We LS EC ringPulleyInvPosLCA>

(x,y) 

rd

g

We

W

re

Lc

LS

(a)

(x,y) 

ri

re Wr re

g

We

W

Lc

LS

(b)

Figure 2.265: Example shapes illustrating various parameters of the (a) discPulleyInvPosLCA and (b) ringPulleyInvPosLCA constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 280 of 488 
We2

Disc pulley inverse positive arc structure with an additional coupling waveguide. 

<x y rd re N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC discPulInvPLCADS>

(x,y) 

rd

g1

We1

W1

re

Lc

LS

g2

W2

L2

Figure 2.266: Example shape illustrating various parameters of the discPulInvPLCADS

constructor. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 281 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Disc pulley inverse positive arc structure with an additional coupling pulley. 

<x y rd re N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 L2 EC discPulInvPLCAPul>

(x,y) 

rd

g1

We1

W1

re

Lc1

LS1

g2

W2

We2

Lc2

LS2

Figure 2.267: Example shape illustrating various parameters of the discPulInvPLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 282 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse positive arc structure with an additional coupling waveguide. 

<x y ri Wr re N g1 Lc Nwg W1 We1 LS g2 W2 We2 L2 EC ringPulInvPLCADS>

(x,y) 

ri

re Wr re

g1

We1

W1

Lc

LS

g2

W2

We2

L2

Figure 2.268: Example shape illustrating various parameters of the ringPulInvPLCADS

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 283 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Ring pulley inverse positive arc structure with an additional coupling pulley. 

<x y ri Wr re N g1 Lc1 Nwg W1 We1 LS1 g2 Lc2 W2 We2 LS2 EC ringPulInvPLCAPul>

(x,y) ri

re Wr re

g1

We1

W1

Lc

LS1

g2

W2

We2

Lc2

LS2

Figure 2.269: Example shape illustrating various parameters of the ringPulInvPLCAPul

constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 284 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.10 Waveguide Inverse Photonic Crystals (Ellipse)

Waveguide shapes characterized by elliptical perforations on either a periodic 

(a = constant) or varying grid (a1,a2,...an). Elliptical structures are defined by 

the two radii (rx and ry ), the number of shape sides (N) and the waveguide width 

(W ). The center waveguide position is (x,y). Indexed numbers (1 − 7 and 1 − 5) 

correspond to the ellipse directly below. 

rx1 ry1 N1 rx2 ry2 N2 ... rxn ryn Nn x y a W waveGuideInvPhC

rx1 ry1 a1 N1 rx2 ry2 a2 N2 ... rxn ryn an Nn x y W waveGuideInvPhCvary

1 2 3 4 5 6 7 

(x,y)rx4

ry4

a

W

(a) 

1 2 3 4 5 

(x,y) rx2

ry2

W

a1 a2 a3 a4 a5

(b) 

Figure 2.270: Example shapes illustrating various parameters from the (a) waveGuideInvPhC and (b) waveGuideInvPhCvary constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 285 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.11 Waveguide Photonic Crystals (Ellipse)

Waveguide shapes characterized by elliptical structures on either a periodic 

(a = constant) or varying grid (a1,a2,...an). Elliptical structures are defined by 

the two radii (rx and ry ), the number of shape sides (N) and the waveguide width 

(W ). The center waveguide position is (x,y). The box defining the waveguide 

extends beyond the elliptical structures by the overhang (So) and is of height 

(Sh). Indexed numbers (1 − 7 and 1 − 5) correspond to the ellipse directly below. 

rx1 ry1 N1 rx2 ry2 N2 ... rxn ryn Nn x y a W So Sh waveGuidePhC

rx1 ry1 a1 N1 rx2 ry2 a2 N2 ... rxn ryn an Nn x y W So Sh waveGuidePhCvary

1 2 3 4 5 6 7 

(x,y)rx4

ry4

a a

2 So

W

Sh

(a) 

Sh

So

1 

a1

2 

(x,y) 

a2

rx2

ry2

3 

a3

4 

a4

5 

a5

W

(b) 

Figure 2.271: Example shapes illustrating various parameters from the (a) waveGuidePhC and (b) waveGuidePhCvary constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 286 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.12 Waveguide Inverse Photonic Crystals (Rectangle)

Waveguide shapes characterized by rectangular perforations on either a periodic (a = constant) or varying grid (a1,a2,...an). Rectangular structures are 

defined by the Lx and Ly , and the waveguide width (W ). The center waveguide 

position is (x,y). Indexed numbers (1−7 and 1−5) correspond to the rectangles 

directly below. 

Lx1 Ly1 Lx2 Ly2 ... Lxn Lyn x y a W waveGuideInvRectPhC

Lx1 Ly1 a1 Lx2 Ly2 a2 ... Lxn Lyn an x y W waveGuideInvRectPhCvary

1 2 3 4 5 6 7 

(x,y)Lx4

Ly4

a

W

(a) 

1 2 3 4 5 

(x,y) Lx2

Ly2

W

a1 a2 a3 a4 a5

(b) 

Figure 2.272: Example shapes illustrating various parameters from the (a) waveGuideInvRectPhC and (b) waveGuideInvRectPhCvary constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 287 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.13 Waveguide Photonic Crystals (Rectangle)

Waveguide shapes characterized by rectangular structures on either a periodic 

(a = constant) or varying grid (a1,a2,...an). Rectangular structures are defined 

by the Lx and Ly , and the waveguide width (W ). The center waveguide position 

is (x,y). The box defining the waveguide extends beyond the rectangular structures by the overhang (So) and is of height (Sh). Indexed numbers (1 − 7 and 

1 − 5) correspond to the rectangles directly below. 

Lx1 Ly1 Lx2 Ly2 ... Lxn Lyn x y a W So Sh waveGuideRectPhC

Lx1 Ly1 a1 Lx2 Ly2 a2 ... Lxn Lyn an x y W So Sh waveGuideRectPhCvary

1 2 3 4 5 6 7 

(x,y)Lx4

Ly4

a a

2 So

W

Sh

(a) 

Sh

So

1 

a1

2 

(x,y) 

a2

Lx2

Ly2

3 

a3

4 

a4

5 

a5

W

(b) 

Figure 2.273: Example shapes illustrating various parameters from the (a) waveGuideRectPhC and (b) waveGuideRectPhCvary constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 288 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.14 Waveguide Photonic Crystals (Flush Rectangle)

Waveguide shapes characterized by rectangular structures on a varying grid 

(a1,a2,...an). Rectangular structures are defined by the Lx and Ly positioned 

flush at a distance d away from top of waveguide, and the waveguide width 

(W ). The center waveguide position is (x,y). The box defining the waveguide 

(Figure 2.9.14) extends beyond the rectangular structures by the overhang (So) 

and is of height (Sh). Indexed numbers (1 − 5) correspond to the rectangles 

directly below. 

Lx1 Ly1 a1 Lx2 Ly2 a2 ... Lxn Lyn an x y W d waveGuideInvRectFlushPhCvary

Lx1 Ly1 a1 Lx2 Ly2 a2 ... Lxn Lyn an x y W d So Sh waveGuideRectFlushPhCvary

1 2 3 4 5 

Sh

(x,y) Lx2

Ly2

d

W

a1 a2 a3 a4 a5

(a) 

So

1 

a1

2 

(x,y) 

a2

Lx2

Ly2

d

3 

a3

4 

a4

5 

a5

W

(b) 

Figure 2.274: Example shapes illustrating various parameters from the (a) waveGuideInvRectFlushPhCvary and (b) waveGuideRectFlushPhCvary constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 289 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.9.15 Various Waveguide-Disc-Tip Coupled Structures

<x y r Nsides dx dy w Lwg rwg s g re de c dc θ(x,y) wgdcdV1>

rwg

dc

Lwg

de

s

c

g

w

s

(x,y) r dx

dy

re

Figure 2.275: wgdcdV1 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 290 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y r Nsides dx dy H1 W1 tH tW tS tY w Lwg rwg s g c dc θ(x,y) wgdcdV2>

W1

H1

tW

tH

tS

rwg

dc

Lwg

s

c

g

w

s

(x,y) r dx

dy

tY

Figure 2.276: wgdcdV2 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 291 of 488
 
<x y

rNsidesd

x

d

y

d

g

H

1

W1 w Lwgrwg s g c d

c

Dθ

(x,y) wgdcdV3>

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

W1

H

1

rwg

d

c

Lwg

s

c

g

d

g

ws

r

d

x

d

y

D

(x,y) c

r

Figure 2.277: wgdcdV3 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 292 of 488
 
<x y r Nsides dx dy dg H1 tH w Lwg rwg s g c dc D θ(x,y) wgdcdV4>

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

rwg

dc

Lwg

s

c

g

dg

w

s

d r x

dy

H

tH

D

c

(x,y) r

Figure 2.278: wgdcdV4 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 293 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y r Nsides dx dy dg tH w Lwg rwg s g c dc1 dc2 θ(x,y) wgdcdV5>

rwg

dc1

dc2

Lwg

s

c

g

dg

w

s

(x,y) d r x

dy

tH

Figure 2.279: wgdcdV5 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 294 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y r Nsides dx dy dg H tH w Lwg rwg s g c dc1 dc2 θ(x,y) wgdcdV6>

rwg

dc1

dc2

Lwg

s

c

g

dg

w

s

(x,y) d r x

dy

H tH

Figure 2.280: wgdcdV6 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 295 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y r r2 Nsides dy dx w Lwg rwg s g c dc θ(x,y) wgdcdV7>

(x,y) r dx

dy

r2

s

rwg

g

s

w

Lwg

c

dc

Figure 2.281: wgdcdV7 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 296 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

<x y t b f s w1 w2 Ls Lt g c dc W H L1 L2 L3 θ(x,y) wgdcdV8>

w1

s f

c

c

dc

Ls

Lt

g w2

b f /2

f /4

(x,y) 

L1 L2 L3

W

H

t

Figure 2.282: wgdcdV8 constructor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 297 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10 MEMS - NEMS Library
 

2.10.1 Actuators

2.10.1.1 Bent Beams

Bent beams form a class of linear displacement actuators. In this case, motion 

occurs via thermal expansion of the beam. 

x y w l1 l2 l3 bH bW a La θ(x,y) bentBeam

a w

l3

bH l2
 

(x,y)
 l1 bW

Figure 2.283: Bent beam of width w suspended between two anchored electrodes. The 

anchor overlap and GDS layer parameters are defined by a and La. 

x y w l1 l2 l3 l4 h p N cW dH dW Ld bW a La θ(x,y) bentBeamArray

a

p

h

h

bH = 2h + p(N − 1)

l1

l2

l3

dW

dH

l4

cW

w

(x,y) bW

Figure 2.284: Array of N bent beam elements with a central rectangular structure. The 

dH and dW parameter defines an extra GDS layer (Ld) that could be used 

to perforate the central structure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 298 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.1.2 Bi-Morph Thermal Actuator

Differential thermal expansion of the bimorph actuator allows for in-plane 

motion. This occurs when a voltage is applied, wherein current induced Joule 

heating causes uneven thermal expansion within the two beams of differing 

widths. 

x y w1 w2 w3 w4 l1 l2 l3 p sH sW Ls bH bW a La θ(x,y) biMorph

a

bW

bH

l1

l2

l3

g

w1

w2

w3

w4

sW

sH

p

(x,y)

Figure 2.285: Bimorph thermal actuator. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 299 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.1.3 Combs and Drive Elements

Linear comb drive created using three GDS layers. Lower and upper base 

electrodes are created using the initialized and Lb GDS layers respectively. The 

anchor overlap and GDS layers are correspondingly a and La. 

x y w1 w2 l1 l2 N p bH Lb a La θ(x,y) combDriveV1

(x,y)

a

bH

w1

l2

l1

w2 p

Figure 2.286: Linear comb drive. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 300 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Number of electrode elements (N) is used to calculate the number of rectangular rotor elements (l1 × w1). The structure is composed from the initialized GDS 

layer (top and bottom electrodes), La (anchor) and Lb (rotor). 

x y w1 l1 l2 l3 g N p bH bW pb Lb a La θ(x,y) linearDriveL1

bW p

bH

a

g

l1

w1

l2 Lb GDS Layer 

l pb 3

(x,y)

Figure 2.287: Linear drive composed of anchored electrodes and a central rotor. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 301 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.1.4 Folded Springs

x y w l1 l2 p A N bH bW a La θ(x,y) foldedSpring1A

x y w l1 l2 p A N bH bW a La θ(x,y) foldedSpring1B

A

bH

l1 l2

(x,y) w

bW p

a

N

(a)

2A

p

bH w

(x,y)

bW l1 N l2

a

(b)

Figure 2.288: Folded springs with a single anchored pad. The spring meander initiates 

at the (a) midpoint and (b) bottom of pads. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 302 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N bH bW a La θ(x,y) foldedSpring2A

x y w l1 l2 p A N bH bW a La θ(x,y) foldedSpring2B

A

bH

l1 l2

(x,y) w

bW p

a

N

(a)

A

p

bH w

(x,y)

bW l1 N l2

a

(b)

Figure 2.289: Folded springs with two anchored pads. The spring meander initiates at 

the (a) midpoint and (b) bottom of pads. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 303 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N bH bW a La θ(x,y) foldedSpring2C

w

A

p

l1

bH

(x,y)

bW

N l2

a

Figure 2.290: Folded springs with two anchored pads V2C. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 304 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N bH bW a La θ(x,y) foldedSpring2D

bH
 

(x,y)
 

a

bW

l1

A

l2

w

p

N

Figure 2.291: Folded springs with two anchored pads V2D. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 305 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N Nsides bH bW a La θ(x,y) foldedSpring2E

x y w l1 l2 p A N Nsides bH bW a La θ(x,y) foldedSpring2F

bH

(x,y)

l1

A

l2

w

p

N

a

bW

bH

(x,y) bW

l1

A

w

p

a

l2 N

Figure 2.292: Folded springs with two anchored pads V2E and V2F. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 306 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N Nsides bH bW a La θ(x,y) foldedSpring2G

bH

(x,y)

a

l1

A

l2

w

p

N

bW

Figure 2.293: Folded springs with two anchored pads V2G. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 307 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N Nsides bH bW a La θ(x,y) foldedSpring2H

bH

(x,y)

a

l1

A

l2

w

p

N

bW

Figure 2.294: Folded springs with two anchored pads V2H. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 308 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N Nsides r a La θ(x,y) foldedSpring2I

a r

l1

A

l2

p

N

(x,y)

w

Figure 2.295: Folded springs with two anchored pads V2I. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 309 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w l1 l2 p A N Nsides r a La θ(x,y) foldedSpring2J

a r

l1

A

l2

w

p

N

(x,y)

Figure 2.296: Folded springs with two anchored pads V2J. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 310 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.2 Bolometers

Below L-Shaped bolometer is constructed from GDS layers La,Lb,Lc,Ld,Le, and 

Lf using the below specified parameters. Rounded rectangles (layers Ld and 

Le) are defined by a radius ri. The number of points defining the curved region 

of the rounded rectangle is defined by the shapeReso parameter. Meandering 

curved region defined by radius r is constructed using Nsides number of points. 

x y w1 w2 w3 g1 g2 g3 L1 L2 r ri Nsides a b c d e f La Lb Lc Ld Le Lf θ(x,y) bolometerL

f

(x,y)

w2

g1

g2

g2 g1

w1

w3

g3

a

b

c d

e

r r

L1

L2

2r

ri

Lb La

Lc

Ld

Le

Lf

Figure 2.297: L-shaped bolometer structure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 311 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w1 w2 w3 g1 g2 g3 L1 L2 r ri Nsides a b c d e f La Lb Lc Ld Le Lf θ(x,y) bolometerU

(x,y)

g1

g2

g2

w1 w2

w3

g3

g1

a

b

c d

e

f

r

L1

L2

2r

ri

Lb La

Lc

Ld

Le

Lf

Figure 2.298: U-shaped bolometer structure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 312 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.3 Gears

MEMS gear elements defined by the (x,y) position, radius r with N sides, gear 

width and height, w and h, respectively. Number of gear elements NG are evenly 

distributed along the disc circumference. 

x y r w h NG N θ(x,y) gear

x y r w h NG wt N θ(x,y) gearT

g

(x,y) r

w

h

(a)

(x,y) r

w

g

h

wt

(b)

Figure 2.299: MEMS gear elements created using (a) gear and (b) gearT constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 313 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.3.1 Hub With Straight and Circular Springs

x y w ri wr R Nsides Nbeams a La θ(x,y) straightSpring

(x,y)

R

wr

w

ri

a

Figure 2.300: Concentric hub with straight springs. 

x y w ri wr R Nsides Nbeams a La θ(x,y) circularSpring

(x,y)

R

wr

w

ri

a

Figure 2.301: Concentric hub with circular springs. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 314 of 488 
�

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

In figure 2.302, size of the surrounding electrodes depends on the number of 

electrodes (Ne) and the dimensionless parameter β, where 0 < β < 1. The gap 

between the electrodes is defined as βLes, where the electrode length segment 

is defined as Les = C/Ne. C = 2πr� is the circumference of the innermost 

electrode, where r = R + wr/2 + g. Therefore, β defines the electrode gap as 

the fraction of the electrode segment. Number of sides Ns parameter is used 

to construct all circular objects. 

x y w ri wr R Nsides Nbeams g We Ne β ea a La θ(x,y) straightSpringE

(x,y)

R

wr

w

ri

a

g

ea

We

f (β)

Figure 2.302: Concentric hub with straight springs and surrounding electrodes. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 315 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w ri wr R Nsides Nbeams g We Ne β ea a La θ(x,y) circularSpringE

(x,y)

R

wr

w

ri

a

g

ea

We

f (β)

Figure 2.303: Concentric hub with circular springs and surrounding electrodes. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 316 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.3.2 Radial Comb Drive

Below constructors create radial comb-drives defined by an opening angle 

(θ), overlap angle (θ◦), electrode widths (w1,w2), comb width (wc) and gap (g), 

number of combs (Ncombs), number of sides for each comb arc segment (Nsides), 

anchor overlap (a) and anchor GDS layer (La). 

x y w1 r1 w2 r2 wc g Ncombs Nsides θ θ◦ a La θ(x,y) combRadialV1

(x,y)

θ◦

r1

r2

a

w1

w2 wc

g

θ

Figure 2.304: Radial comb drive V1. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 317 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w1 r1 w2 r2 wc g Ncombs Nsides θ θ◦ a La θ(x,y) combRadialV2

(x,y) r2

θ◦

r1

a

w1

w2 wc

g

θ

Figure 2.305: Radial comb drive V2. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 318 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.4 Anchored Flexures

The following constructors create accelerometer type anchored flexures with a 

proof mass. In all of the cases, the rectangular base support anchor is defined 

by the anchor support width a and GDS layer La. Structural layer is defined by 

the active layer. 

Anchored Flexure V2A 

x y w l1 l2 wm lm bH bW a La θ(x,y) flexure2A

bH

wm

w

l1

a l2

bW

lm (x,y)

Figure 2.306: Anchored Flexure V2A with two hinges supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 319 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V2B 

x y w l1 l2 wm lm cH cW sH sW bH bW a La θ(x,y) flexure2B

sW

bH cH l2

wm

lm

l1 cW

a

bW (x,y)

sH

Figure 2.307: Anchored Flexure V2B with two hinges supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 320 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V2C 

x y w l1 l2 l3 wm lm A Np bH bW a La θ(x,y) flexure2C

l2

bH

l1 l3

A

bW

Np

a

lm w

(x,y)

wm

Figure 2.308: Anchored Flexure V2C with a meander supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 321 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

x y w1 w2 w3 w4 l1 l2 l3 l4 l5 l6 bW a La θ(x,y) flexure2D

bW

a l6

l1

l2

l3

l5 l4

w1

w2

w3

w4

(x,y)

Figure 2.309: Anchored Flexure V2D. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 322 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V2E 

x y w1 w2 w3 w4 w5 l1 l2 l3 l4 g b bH bW a La θ(x,y) flexure2E

bW

bH

b a

g

l1

l2

l3

l4

w1

w2

w4 w3

w5

(x,y)

Figure 2.310: Anchored Flexure V2E. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 323 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V4A 

x y w l1 l2 wm lm bH be a La θ(x,y) flexure4A

bH bH

a be

bH

l1

wm

lm

l2

a

bH

be

w

(x,y)

Figure 2.311: Anchored Flexure V4A with four hinges supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 324 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V4B 

x y w l1 l2 wm g bH bW a La θ(x,y) flexure4B

bH

g

bH

wm

w

l2

bW

l2

lm = 2l2 + 2bH + g

a

(x,y)

l1

Figure 2.312: Anchored Flexure V4B with four hinges supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 325 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V4C 

x y w l1 l2 l3 l4 wm g bH bW a La θ(x,y) flexure4C

bW

a

g

wm

(x,y)

lm = 2bH + g

l4

bH

l2 l1

w

l3

Figure 2.313: Anchored Flexure V4C with four hinges supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 326 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V4D 

x y w1 w2 l1 l2 wm lm g bH bW a La θ(x,y) flexure4D

wm

lm

w1

a l1

l2

w3

w2

bH

bW

g (x,y)

Figure 2.314: Anchored Flexure V4D with four hinges supporting a proof mass. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 327 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Anchored Flexure V4E 

x y w1 w2 w3 w4 l1 l2 l3 l4 l5 bH bW a La θ(x,y) flexure4E

bH

bW

a

l1

l2

l3

l4

l5

w1

w2

w3

w4

(x,y)

Figure 2.315: Anchored Flexure V4E. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 328 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.5 Cantilevers

The following cantilever beam structures have a linear, percentage or sinusoidal length variation with respect to the starting length (sL). The beams are 

periodically arranged on a base of height bH and of width that is a function of 

the number of elements (n), beam width (w), pitch (p) and base extent (be). 

x y w sL p n bH be ΔL θ(x,y) cantileverL

x y w sL p n bH be Percent θ(x,y) cantileverP

x y w sL p n bH be Amplitude θ(x,y) cantileverSine

p w

sL

ΔL

be be

(x,y) (a)

bH bH

p w

sL

be be

(x,y) (b)

bH

p w

sL

be be

A

(x,y) (c)

Figure 2.316: Cantilever arrays of varying length. (a) Linear (cantileverL) variation 

from sL with ΔL increments (b) Percentage (cantileverP) variation starting from sL and (c) sinusoidal (cantileverSine) variation over one period 

with amplitude A. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 329 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Similar to figure 2.316, the cantilever variation for the below constructors 

is bound between the starting length (sL) and the end length (eL). Here, the 

origin (x,y) is positioned at the lower left corner of the base, w, sL, eL and p are 

the cantilever width, start length, end lengths, and pitch, respectively. n is the 

number of cantilever beams, be and bH are the base extent and height. θ(x,y) is 

the rotation about the origin (x,y). 

x y w sL eL p n bH be θ(x,y) cantileverLSE

x y w sL eL p n bH be θ(x,y) cantileverNLSE

p w

sL

be be

sE

bH

p w

sL

be be

sE

bH

(x,y) (x,y) (a) (b)

Figure 2.317: Cantilever arrays of varying length. (a) Linear (cantileverLSE) and 

(b) nonlinear (cantileverNLSE) length variation from sL to eL. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 330 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following constructor creates cantilevers with custom parameters. Structural origin is defined by the lower left corner at (x,y). Cantilever length and 

widths are defined by the wi and li values. Space between the adjacent canth tilevers is defined by s1, s2,..., sn. The base rectangle extends beyond the n

cantilever’s right edge by the amount send. 

x y s1 w1 l1 s2 w2 l2 ... sn wn ln send bH θ(x,y) cantileverCustom

l1 l2 l3

ln

w1 w2 w3

wn

s1 s2 s3 sn send ...

bH

(x,y)

Figure 2.318: Cantilever array constructed with custom, user defined beam dimensions. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 331 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Below constructors create rectangular (with and without a triangular tip), trapezoidal and paddle cantilever structures. The rectangular base support anchor 

is defined by the anchor support width a and GDS layer La. Structural layer is 

defined by the active layer. 

x y w l bH be a La θ(x,y) cantileverSR

x y w l tH bH be a La θ(x,y) cantileverSTri

x y wa wb l bH be a La θ(x,y) cantileverSTrap

x y wa wb la lb bH be a La θ(x,y) cantileverSPaddle

tH

l l

a

be w

bH bH

a

be w

(x,y) (x,y) (a) (b)

wb

lb

l

la

a

be wa

bH bH

a

be wa

wb

(x,y) (x,y) (c) (d)

Figure 2.319: (a) Rectangular, (b) rectangular with a triangular tip, (c) trapezoidal and 

(d) paddle cantilever structures stemming from a rectangularly anchored 

base. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 332 of 488 
R

bH

(x,y) (a)

Curved and straight-circular beams where the curved segment is defined by 

the number of vertices Nsides and radius R. 

x y w R Nsides bH be a La θ(x,y) cantileverSCH

x y w R Nsides l bH be a La θ(x,y) cantileverSCF

a

be w

R

a

bH

be w

l

(x,y) (b)

Figure 2.320: (a) Curved and (b) straight-circular beams stemming from a rectangularly 

anchored base. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 333 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Below constructors create rectangular (with and without a triangular tip), trapezoidal and paddle cantilever structures. Constraints on parameter h are h < w/2

and h < wa/2. 

x y w l h bH be a La θ(x,y) cantileverHR

x y w l tH h bH be a La θ(x,y) cantileverHTri

x y wa wb l h bH be a La θ(x,y) cantileverHTrap

x y wa wb la lb h bH be a La θ(x,y) cantileverHPaddle

tH

l l

a

be w

bH bH

a

be w

h h

(x,y) (x,y) (a) (b)

wb wb

lb

l

la

a

be wa

bH bH

a

be wa

h h

(x,y) (x,y) (c) (d)

Figure 2.321: Hollow (a) rectangular, (b) rectangular with a triangular tip, (c) trapezoidal and (d) paddle cantilever structures stemming from a rectangularly anchored base. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 334 of 488 
R

bH

h

(x,y) (a)

The following two constructors create hollow curved and straight-circular 

beams. In both cases h < w/2

x y w R Nsides h bH be a La θ(x,y) cantileverHCH

x y w R Nsides l h bH be a La θ(x,y) cantileverHCF

a

be w

R

a

be w

h

l bH

(x,y) (b)

Figure 2.322: Hollow (a) curved and (b) straight-circular beams stemming from a rectangularly anchored base. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 335 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Below constructors create connected parallel beams. The gap (g) between the 

electrodes has the following constraint: 

lB

g ≤ 2 − 2w 2 parallel beams 

g ≤ lB − 2w 3 parallel beams 

x y w l1 l2 lB g bH be a La θ(x,y) cantileverPB2

x y w l1 l2 l3 lB g bH be a La θ(x,y) cantileverPB3

lB

l1 l2

a

be w

bH

g

(x,y) (a)

lB

l1 l3

g

l2

bH

(x,y)

a

be w g

(b)

Figure 2.323: (a) Two and (b) three parallel, interacting beams. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 336 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

U-Shaped spring designs with sharp rectangular, circularly filleted and circular links. Parameters a and La are anchor overlap and anchor GDS layer 

respectively. 

x y w l1 l2 lB bH be a La θ(x,y) cantileverUR
 

x y w l1 l2 lB r Nsides bH be a La θ(x,y) cantileverUCF
 

x y w l1 l2 D Nsides bH be a La θ(x,y) cantileverUC
 

lB lB
 

r
 

l2
 l1 l2

bH

(x,y) (x,y)

l2

a

bH

be w

l1

D

(x,y) (a) (b) (b)

Figure 2.324: U-shaped (a) rectangular, (b) circularly filleted corners and (c) circular 

cantilever structures. 

a

bH

be w

l1

a

be w

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 337 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

U-shaped structures with a central cantilever and a central paddle. Parameters a and La are anchor overlap and anchor GDS layer, respectively. Central 

cantilever length l2 can be either positive of negative, respectively yielding a 

cantilever of width w2 below or above the top link. 

x y w1 w2 l1 l2 l3 lB bH be a La θ(x,y) cantileverUCC

x y w1 w2 l1 l2a l2b l3 lB bH be a La θ(x,y) cantileverUCP

lB

a

be w1 be

l1

l2

l3

w2

(x,y) (a)

bH

a

bH

be w1 be

l1

l2a

l2b

l3

lB

w2

(x,y) (b)

Figure 2.325: U-shaped structure with a center (a) cantilever and (b) paddle. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 338 of 488 
Below constructors create curved cantilever structures. The rectangular base 

support anchor is defined by the anchor support width a and GDS layer La. 

Structural layer is defined by the active layer. Curved segments of the upper 

and lower paddle oscillators are defined by ellipses with radii (rx1 , ry1 ) and 

(rx2 , ry2 ), respectively. 

x y w l rx ry Nsides bH be a La θ(x,y) cantileverCE

x y w l rx1 ry1 rx2 ry2 Nsides wp lp bH be a La θ(x,y) cantileverCEPaddle

ry

l

ry

rx

a

bH

be

w

(x,y) (a)

rx2

ry2

wp 2rx2 + w wp

lp

l rx1

ry1

a

be 2rx1 + w be

w

(x,y) (b)

bH

Figure 2.326: (a) Curved cantilever and (b) curved cantilever with a paddle. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 339 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.6 Doubly Clamped Beams

Similar to the cantilever structures in figures 2.316a and 2.316b, these are 

doubly clamped beams with a linear and percentage variation with respect to 

the starting length (sL). 

x y w sL p n bH be ΔL θ(x,y) dcBeamL

x y w sL p n bH be Percent θ(x,y) dcBeamP

p w

sL

ΔL

be be

(x,y) (a)

bH

bH

bH

bH

p w

sL

be be

(x,y) (b)

Figure 2.327: Doubly clamped beam arrays of varying length. (a) Linear (dcBeamL) 

variation from sL with ΔL increments and (b) Percentage (dcBeamP) 

length variation starting from sL. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 340 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Similar to the cantilever arrays in figure 2.317, these are doubly clamped 

beams with length variation bound between the starting (sL) and the end length 

(eL) values. 

x y w sL eL p n bH be θ(x,y) dcBeamLSE

x y w sL eL p n bH be θ(x,y) dcBeamNLSE

p w

sL

be be

sE

(x,y) (a)

bH

bH

bH

bH

p w

sL

be be

sE

(x,y) (b)

Figure 2.328: Doubly clamped beam arrays of length varying between sL and sE. (a) Linear (dcBeamLSE) and (b) nonlinear (dcBeamNLSE) length variation from 

sL to eL. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 341 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

The following constructor creates doubly clamped beams with used defined 

parameters. The structure is similar to custom cantilevers in Figure 2.318. 

x y s1 w1 l1 s2 w2 l2 ... sn wn ln send bH θ(x,y) dcBeamCustom

l1 l2 l3

ln

w1 w2 w3

wn

s1 s2 s3 sn send ...

s2

2

s3

2

sn

2

bH

bH

(x,y)

Figure 2.329: Doubly clamped array of beams constructed with custom, user defined 

dimensions. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 342 of 488 
Below constructors create rectangular and torsional doubly clamped beam 

structures. The rectangular base support anchor is defined by the anchor 

support width a and GDS layer La. Structural layer is defined by the active 

layer. 

x y w l bH be a La θ(x,y) dcBeamR

x y w1 l1 w2 l2 bH be a La θ(x,y) dcBeamT

a be

l

a

be

w

bH bH

(x,y) (a)

Figure 2.330: (a) Rectangular and (b) torsional doubly clamped beams. 

bH

a be

w2

l2

a

be

w1

(x,y) (b)

bH

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 343 of 488 

l
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Doubly clamped torsional beam. 

x y w1 w2 w3 w4 l1 l2 l3 g bH bW a La θ(x,y) dcBeamT2

bH

(x,y) bW

a

l1

l2

g

l3

w1

w2

w3

w4

Figure 2.331: Doubly clamped torsional beam. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 344 of 488 
Doubly clamped array of N interacting beams with lengths ranging linearly 

from Ls to Le. 

x y w Ls Le N bH bW a La θ(x,y) dcBeamCB

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

a

bH

bW

Ls Le

w

(x,y)

Figure 2.332: Doubly clamped coupled beams. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 345 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Below constructor creates a curved doubly clamped beam structures. The 

rectangular base support anchor is defined by the anchor support width a and 

GDS layer La. Structural layer is defined by the active layer. Curved segments 

of the upper and lower beams are defined by ellipses with radii (rx1 , ry1 ) and 

(rx2 , ry2 ), respectively. 

x y w l rx1 ry1 rx2 ry2 Nsides bH be a La θ(x,y) dcBeamC

rx2

ry2

a be be 2rx2 + w

bH

l rx1

ry1

a

bH

be 2rx1 + w be

w

(x,y)

Figure 2.333: curved doubly clamped beams. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 346 of 488 
2.10.7 Interacting Arrays

The following objects each have two constructors. The bracketed constructor 

(<id parameters ... constructor>) creates hierarchical structures that are 

instantiated within the current structure. The id parameter is a string prefix 

all generated structures for the particular object. This parameter is a unique 

continuous string of characters (no spaces or tabs). To ensure compatibility 

with the GDSII standard, the allowed structure character names are A − Z, 

a − z, 0 − 9, underscore (_), question mark (?) and dollar sign ($). Furthermore, 

the id parameter should be limited to no more than 15 characters, otherwise 

under certain circumstances, it’s possible to overwriting existing structures. 

Two major benefits of this constructor are that processing is faster and smaller 

files are generated. Both are a consequence of GDS structural hierarchy. 

The second constructor is nearly identical with the exception of not having 

brackets, the string id parameter and the constructor suffix s. Furthermore, 

the constructor does not create any additional structures, hence resulting 

structures entirely are generated within the initialized structure. Consequently, 

the resulting files are bigger and take longer to generate. 

In both cases, structures are generated with the following 3 GDS layers: 

LyF - front side beam layer 

LyB - back side release layer 

LyM - front side circular metal dot layer 

<id x y N L1 W1 L2 W2 s H◦ L◦ He LB HB d Ns LyF LyB LyM θ(x,y) MARAs>

x y N L1 W1 L2 W2 s H◦ L◦ He LB HB d Ns LyF LyB LyM θ(x,y) MARA

s

W2

s

W1

L1

L2 H◦

L◦

(x,y) 

He

HB

LB

d

Figure 2.334: Two rectangular arrays of N interacting beams created using MARAs

and MARA constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 347 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Two trapezoidal array of N interacting beams with identical parameters, 

<id x y N L Wa Wb s H◦ L◦ He LB HB d Ns LyF LyB LyM θ(x,y) MATALWs>

x y N L Wa Wb s H◦ L◦ He LB HB d Ns LyF LyB LyM θ(x,y) MATALW

and with varying length (L) and widths (Wa and W b) between the two arrays. 

<id x y N L1 W1a W1b L2 W2a W2b s H◦ L◦ He LB HB d Ns LyF LyB LyM θ(x,y) MATAs>

x y N L1 W1a W1b L2 W2a W2b s H◦ L◦ He LB HB d Ns LyF LyB LyM θ(x,y) MATA

s s L H◦

L◦

(x,y) 

HB

LB

d

He Wa Wb

(a)
 

LB
 

(b)

s s

W2a W2b

He W1a W1b

L1

L2 H◦

L◦

(x,y) 

HB

d

Figure 2.335: Two interacting trapezoidal beam arrays with (a) identical (MATALWs, 

MATALW) and (b) varying (MATAs, MATA) length and width parameters. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 348 of 488 
Array of two interacting rectangular beams. 

<id x y N L1 W1 L2 W2 s e H◦ He Ls LB HB d Ns LyF LyB LyM θ(x,y) MAR2s>

x y N L1 W1 L2 W2 s e H◦ He Ls LB HB d Ns LyF LyB LyM θ(x,y) MAR2

···

N

L1

L2

W1

W2

s

He

He

H◦

d

e

Ls

LB

(x,y) 

HB

Figure 2.336: Array of two interacting rectangular beams created using the MAR2s

and MAR2, constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 349 of 488 
···

N

e

HB

LB

(x,y) 

Array of three interacting rectangular beams. 

<id x y N L1 W1 L2 W2 s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MAR3s>

x y N L1 W1 L2 W2 s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MAR3

L1

W1

s s s

He

He

d L2

W2

H◦

Figure 2.337: Array of three interacting rectangular beams created using the MAR3s

and MAR3 constructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 350 of 488 
Rectangular top array of elements interacting with single beams. The lower 

single beam elements are individually addressable via electrodes of width 

Hw = W1 + 2W2 + 4s and height He. 

<id x y N L1 W1 L2 W2 s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MARCs>

x y N L1 W1 L2 W2 s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MARC

N

Figure 2.338: Array of 2N rectangular beams interacting with N single beams created 

using the MARCs and MARCconstructors. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

···

L1

L2

W1

W2

s s s

He

He

H◦

d

e

HB

LB

(x,y) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 351 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Array of two interacting trapezoidal beams. 

<id x y N L1 W1a W1b L2 W2a W2b s e H◦ He Ls LB HB d Ns LyF LyB LyM θ(x,y) MAT2s>

x y N L1 W1a W1b L2 W2a W2b s e H◦ He Ls LB HB d Ns LyF LyB LyM θ(x,y) MAT2

HB

(x,y) 

···

N

L1

L2

W1a

W2a

s

He W2b Ls

He W1b

H◦

d

e

LB

Figure 2.339: Array of two interacting trapezoidal beams created using the MAT2s and 

MAT2 constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 352 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Array of three interacting trapezoidal beams. 

<id x y N L1 W1a W1b L2 W2a W2b s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MAT3s>

x y N L1 W1a W1b L2 W2a W2b s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MAT3

···

N

L1

L2

W1a

W2a

s s s

He

He

H◦

d

e

HB

LB

(x,y) 

W1b

W2b

Figure 2.340: Array of three interacting trapezoidal beams created using the MAT3s

and MAT3s constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 353 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Trapezoidal top array of elements interacting with single beams. The lower 

single beam elements are individually addressable via electrodes of width 

Hw = W1a + 2W2b + 4s and height He. 

<id x y N L1 W1a W1b L2 W2a W2b s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MATCs>

x y N L1 W1a W1b L2 W2a W2b s e H◦ He LB HB d Ns LyF LyB LyM θ(x,y) MATC

···

N

L1

L2

W1a

W2a

s s s

He

He W1b

W2b

H◦

d

e

HB

LB

(x,y) 

Figure 2.341: Array of 2N trapezoidal beams interacting with a N single beams created 

using the MATCs and MATC constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 354 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Two interacting rectangular arrays between elements of differing lengths. 

The electrode base varies linearly from the value of He to He +Δ. 

<id x y N L Δ W s H◦ L◦ He LB HB d Ns L1 L2 L3 θ(x,y) MARALINEARs>

x y N L Δ W s H◦ L◦ He LB HB d Ns L1 L2 L3 θ(x,y) MARALINEAR

W

L s s

L◦

Δ

H◦

He

HB

LB

d

(x,y) 

Figure 2.342: Two interacting rectangular arrays between elements of differing lengths. 

Beam lengths vary linearly across the electrode base. Structures are 

generated using the MARALINEARs and MARALINEAR constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 355 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Two rectangular arrays between elements of differing lengths. The electrode base has a slow non-linear variation from of He to He +Δ. The non-linear 

element was constructed using a Bezier curve. 

<id x y N L Δ W s H◦ L◦ He LB HB d Ns L1 L2 L3 θ(x,y) MARACURVEs>

x y N L Δ W s H◦ L◦ He LB HB d Ns L1 L2 L3 θ(x,y) MARACURVE

W

L s s

L◦

Δ

H◦

He

HB

LB

d

(x,y) 

Figure 2.343: Two interacting rectangular arrays between elements of differing lengths. 

Beam lengths vary non-linearly across the electrode base. Structures 

are generated using the MARACURVEs and MARACURVE constructors. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 356 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.8 Stress, Strain Measurement Structures

2.10.8.1 Guckel Rings

Guckel ring structures are used to estimate residual stress in structural layers. 

x y rW R Nsides bW b Lc Wc a La θ(x,y) GuckelRing

b

bW

R

Wc

Lc

b

rW

(x,y)

a

Figure 2.344: Schemaric of a Guckel ring structure used for measuring residual stress. 

Below is a Guckel ring array structure. The varying radii range from Rs to Re in 

increments of ΔR. 

x y rW Rs Re ΔR N bW b Lc Wc a La θ(x,y) GuckelRingArray

(x,y) ···

Figure 2.345: Schemaric of a Guckel ring array structure with varying radius. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 357 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.8.2 Diamond Ring

x y w1 w2 w3 l1 l2 l3 bH bW a La θ(x,y) diamondRing

l1

bH

a

l2

w1

l3

w3 (x,y)

w2

bW

Figure 2.346: Stress measurement diamond ring. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 358 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

2.10.9 Suspended Fluid Cell

Fluid cell (Lc) with a suspended region defined by radius r3 and a spiral delay 

line heater (Lb). Central red dot indicated coordinate (x,y). The fluid input 

funnel shape are defined by the shapeReso parameter. 

x y w1 w2 w2T w3 w4 L1 L2 r r1 r2 r3 Nsides a b c d e f g h i La Lb Lc Ld Le Lf θ(x,y) fluidCell

w2T

r1

r2

r3

w1

w2

w3

w4

h

a

b

r

d c

e

f

g

i

L1

L2

La

Lb

Lc

Ld

Le

Lf

Figure 2.347: Fluid cell (Lc) with an integrated spiral delay line heater (Lb) and release 

trenches (Le). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 359 of 488 
Graphical User Interface

Email: Nanolithography.Toolbox@nist.gov

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3.1 Basic Shapes
 

3.1.1 Pillar-Hole (Square/Hex) Array

Within in this module, polygons are created and arrayed. User defined parameters consist of number of sides, size and rotation of individual elements, the 

GDS layer number, and lower left position, number of elements, and pitch between the arrayed structures. This module creates cells for individual elements 

used to create pillars and holes. Pillars are created by performing a boolean operation between a box of dimensions (P itchx × P itchy ) and the specified shape. 

The shapes are then instantiated within 4 arrayed cells consisting of square 

and hexagonal arrays of both polarities. Figures 3.348(a − h) show several 

examples of the pillar hole array. 

3.1.2 Torus

This module creates arc shapes defined by the start (θs) and end (θe) sweep 

angles of the individual elements. Torus is created by sweeping an arc over 

2π radians, i.e. θe − θs = 360degrees. Default parameters for the torus module 

are θs = 0degrees and θe = 360degrees. Generated features are defined by the 

number of sides for the inner and outer arc segments, the GDS layer number, 

and rotation of individual shapes. Position, elements and pitch parameters 

define square and hexagonal array elements. Figures 3.348(i − j) show 4 

examples of various arcs. 

3.1.3 Grating Coupler - Bulls Eye

The module creates concentric arcs to form grating couplers or bulls-eye 

patterns. The arc section is defined by a sweep angle and arc width. The arrayed 

elements are located at the specified (x,y) position. First element is placed at a 

distance defined by the radius midpoint. Parameter Rings defines the number 

of arrayed elements instantiated at the specified pitch. Figures 3.348(k − l)

show several examples of grating coupler structures. 

360 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3.1.4 Spirals

Spirals are defined by their center position, GDS layer number, shape width, 

and number of turns. Shape resolution is specified by the Increment parameter. 

Choosing many turns with a small increment (high resolution) will increase the 

GDS file generation time. Spiral structures are generated and placed into a 

GDS structure named top. 

We offer three types of spirals, Archimedes, Fermat and Logarithmic (Figures 3.348(m − o)). Archimedes spiral has a uniform spacing between turns (s)

and is defined as 

r = mθ (3.23) 

where 

s + width

m = (3.24) 2π

Fermat spiral is defined as 

√ r = a2θ (3.25) 

and Logarithmic spiral is defined as 

bθ r = ae (3.26) 

3.1.5 Gratings

Gratings module generates user-defined lines arrayed at a predefined pitch. 

Each line of the table will create two cells, one for the line and the other for 

the grating array. Generated structure names will have a prefix RX where 

X represents the table row number. The load table button allows users to 

upload text files. Values from loaded text files will populate the table. Top cell 

will have an instance of each array separated by the T opCellSpacing value. 

Figures 3.348(p) shows an example of a grating structure. An example of a 

grating text file is located \loadFiles\gratingTable. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 361 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

(a) (b) (c) (d)

(e) (f ) (g) (h)

(i) (j) (k) (l)

(m) (n) (o) (p)

Figure 3.348: Various examples from the BasicShapes branch. Rectangular arrays of 

(a,e,g) holes and (b,f,h) pillars. Hexagonal array of (c) holes, (d) pillars, 

(i) torii and (j) arcs. (k) Grating coupler and (l) bulls-eye pattern. Spirals 

created using various parameters (m) Archimedes, (n) Fermat, (o) and 

Logarithmic. (p) Grating structure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 362 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3.2 Lithography Machine Resources
 

3.2.1 CNST Reticle Frame Generator

This module creates reticle frames for the CNST Nanofab ASML-PAS5500 i-line 

stepper and contact aligners. Default stepper option will print reticle marks, 

user defined label and barcode, NIST and CNST logos. ASML barcode and label 

are limited to 12 and 14 characters respectively. Two remaining options are 

for 5 inch and 7 inch contact masks. In both cases, label, along with NIST and 

CNST logos are printed near the periphery of the mask. Contact labels are 

limited to 22 characters. 

3.2.2 Generic Reticle Frames

Within this module, reticle marks, label and barcode are generated for several 

steppers. 

3.2.3 Ebeam Lithography - Job and Schedule File Generator

This module generates job and schedule files for the CNST JEOL 6300 electron 

beam lithography tool. The module offers a number of graphical features that 

help ensure proper pattern and alignment mark placement. Additionally, it 

features a wide variety of dose variation features including base dose matrices, 

single and multi-shot rank modulation, user defined dose table modulation, 

and several dose ramping functions. This node has 4 sections accessible 

using the tabs located at the top of the panel named Main, Align, P attern and 

DoseMatrix. 

3.2.3.1 Default Values Initialization File

Many features within the CNST JEOL 6300 JDF-SDF module are customizable 

using the provided CN ST def aultV alues.xml initialization file. For example, position size, auto-loader (ALD) position, paths, calibration parameters, alignment 

marks represent a few parameters that are stored within the initialization file. If 

this file is missing, hardcoded values will be displayed within the toolbox. Also, 

directly to the left of the About button within the Main tab, a string will indicate 

if values were loaded from the initialization file. 

3.2.3.2 Main

Within the Main panel material parameters, jdf and sdf file names, alignment schemes, paths and calibration parameters are preset. The P AT H and 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 363 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

CALP RM variables are editable. Most of these parameters are predefined 

within the CN ST def aultV alues.xml initialization file. Figure 3.349 shows parameters under the Main panel. 

Figure 3.349: Main panel showing various available options under Main tab. 

3.2.3.3 Align

The alignment panel allows users to define position and size of global (P and 

Q) and local (M1,M2,M3, and M4) alignment marks. The positions are in wafer 

coordinates in units of micrometers. Under mark definition, mark width and 

length values are specified in micrometers for the the global P (GLMP ), global 

Q (GLMQRS) and chip (CHMARK) alignment marks. The Align section is only 

used if global and local marks are selected under the Alignment field within the 

Main tab. The left-most alignment option activates the global marks, while the 

right-most option controls local (chip) alignment. The options are by default 

inactive as indicated by the OFF state. Figure 3.350 shows parameters under 

the Align JEOL 6300 panel. 

3.2.3.4 Pattern

This section defines pattern arrays within the job definition file. Pattern files 

specified, arrays are generated from those pattern files and stored into a vector 

array is accessed when job and schedule definition files are created. To add a 

pattern file to the database, type in a pattern file name then click the AddFile

button. A string label will appear and indicate that the entered .v30 file was 

added to the pattern file list. More files are added by repeating the previous 

process. Entered pattern names will appear in the pull down selection box. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 364 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

Figure 3.350: Alignment panel showing various alignment mark definitions under Align 

tab. 

Select a pattern, then type underneath the ARRAY section, type in the starting coordinates of the first element of the array, then number of elements and 

the pitch between elements, then type in the dose modulation for the pattern 

file. For a single element leave both Element values at 1. Click the Generate 

Array button. The value of the generated array will appear in a selection box 

directly to the left of the Generates Arrays field. Repeat the process, i.e. choose 

file name, then pattern position, number of array elements, pitch between elements, enter a dose modulation and click the GenerateArray button. Delete

button to the right of the selection box within Generates Arrays field allows 

users to delete previously generated arrays stored within the selection box. 

Also, generated arrays can be modified by choosing an array from the saved list. 

Following parameter modifications, clicking the U pdateArray button overwrites 

the previous entry. Figure 3.351 shows parameters under the P attern panel. 

To view the arrays as well as the job and schedule files at any point during 

the array creation, click the Show SDF JDF button. A new frame will pop-up with 

a text area containing the contents of the jdf and sdf files. Another frame will 

pop-up and will show graphically where patterns are placed (Figure 3.352). The 

feature is similar to the JEOL Array Check program. Following any alteration of 

the generated array elements, clicking the Show SDF JDF button will update 

the job and schedule file panel as well as the array check panel. 

3.2.3.5 Dose Matrix

Dose matrix module is a means to create complex dose and base dose matrices. The procedure initiates by choosing a pattern file name, the position, 

number of elements and pitch between the elements of the resulting dose 

array (Figure 3.353). There are various options under the DoseMethod tab. 

Standard DoseMatrix is the default method for executing a dose matrix on the 

chosen V30 file. Method BaseDose is used to determine a proper base dose for 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 365 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

Figure 3.351: Pattern panel showing user-defined pattern files, array definitions, and 

generated arrays. 

Figure 3.352: Display showing user generated pattern arrays and global mark positions 

(P and Q). 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 366 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

a proximity effect corrected pattern. Here base dose (RESIST parameter) is 

modified within the schedule file, the pitch in the two directions will represent 

the OFFSET parameter, with the RESIST value derived from the Start text 

field within this tabbed panel. There are 4 options within the Ramp selection 

menu. Linear and P ercent options use respective right-most text-field values 

of Linear and P ercentage to increment the dose array from the starting value 

represented by the Start text field. For instance, choosing Linear with a value 

of 10 within the Linear text field in conjunction with a Start value of 100 for 

an array of 4 elements, percentage modulation dose values will be 100, 110, 

120 and 130. Analogously, with an active P ercent ramp option and a value of 

10 within the P ercentage text field in conjunction with a Start value of 100 for 

an array of 8 elements,percentage modulation dose values will be 100, 110, 

121, 133.1, 146.41, 161.05, 177.16 and 194.87. LinearSE and N onlinearSE

are two ramp methods that utilize number of arrayed elements, the Start and 

End text field values to determine the percentage dose modulation. 

Figure 3.353: Dose matrix panel showing various user defined pattern, array and dose 

parameters. 

Dose represents the default value of the T ype selection. DoseT able option 

under T ype uses values from the DoseT able tabbed panel. Within the Dose 

Table tabbed panel, values for the shot rank and modulation are either manually 

entered or uploaded from a text file (Figure 3.354). The method assumes the 

standard dose modulation table format, as seen in the layout beamer proximity 

effect corrected output file with extension JDI. An example dose matrix JDI file 

is located in the \loadFiles\jeol6300DoseTable directory. When using the table 

method, ramp can either be the default Linear or P ercent option. Depending on 

which method is chosen, the respective Linear and P ercentage text fields are 

used to modify the individual modulation values from the table. The sdf and jdf 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 367 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

files could be shown or generated using the respective buttons at the bottom 

of the panel. 

Figure 3.354: Dose matrix panel showing various user defined pattern, array and dose 

parameters. 

3.2.4 EBL Alignment Offset

The JEOL alignment module calculates the offsets between the designed and 

observed wafer positions. Type in the designed mark positions of the P (or Q) 

marks. This value is specified in material (or wafer) coordinates with micrometer units. Check the substrate holder center position and type in those values 

for the wafer center. Once the marks are located in the scanning electron 

microscope (SEM) of either of the CNST ebeam tools, type in the stage coordinates of this observed mark position, then press Enter or click the Calculate

button. Within the OFFSET text field, calculated values will appear. These 

values should be used within the SETWFR routine to manually check global 

alignment. Furthermore, these values are placed within the schedule file (.sdf 

file) as: 

OFFSET (Xof f set,Yof f set)

3.2.5 EBL Max Clock

This module calculates the maximum writing frequency and the minimum shot 

time for the 4th and 5th lens electron beam lithography tools. Calculation is 

based on beam current, writing dose, shot pitch and tool type. 

3.2.6 EBL Write Time Estimation

This module calculates an estimated electron beam lithography write time. 

Calculation is based on beam current, die area (written die area in micrometers 

squared - a value easily obtained from various CAD and fracturing tools), writing 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 368 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

dose, fields per die and the number of die. Stage time is ’estimated’ at 1second per stage move. This is not quite correct (’estimate’) since stage motion 

depends upon distance traveled and the EBL tool. The estimated calculation 

does not take into account tool calibration time. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 369 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3.3 Advanced CAD Resources
 

Many of the modules in the advanced CAD resources are implemented within 

CNST scripting. Therefore, many modules refer to sections and figures within 

the scripting command reference chapter. Users should note that scripting 

offers more flexibility with many more features not implemented within its GUI 

counterpart. 

3.3.1 Label Maker

Label Maker module is used to generate chip labels into a GDS file that could 

then be instanced into a user defined pattern. There are 4 label type options. 

The automated Outer and Row−Column will generate number arrays, whereas 

the custom variants are more versatile allowing imported tab delimited data to 

be cast as labels. Two test label files are included in \loadFiles\labels example 

directory. The files were generated in Excel and exported as plain text tab 

delimited. 

Within the label maker module, first, number of elements, pitch between the 

elements, font specifications and label type are specified. Font resolution is 

the rendering resolution of the Bezier curves that construct font shapes. This 

parameter is defined as shapeReso within CNST scripting (see Section 2.2.6 

and Figure 2.16). The four label types are described within the label maker 

scripting command reference guide. This module does not implement automatic letter labeling. Scripting section 2.6.3 further illustrates automatically 

generated Outer and Row−Column (Figure 2.45a,b) and the respective custom, 

user-defined labels (Figure 2.45c,d). 

3.3.2 Text To GDS

Text to GDS module renders strings composed of vector fonts to GDS shapes. 

Font resolution parameter controls the rendered shape resolution. Example of 

font resolution and generated text are shown respectively in Figure 2.2.6 and 

2.43. 

3.3.3 Arbitrary Function Generator

Arbitrary Function Generator module will create a GDS file with a shape defined 

by a mathematical equation. User will input a lower and upper bound, an 

increment and line width for the function. Within this module, users define 

a function f (x) using the lower case variable x. Functional definitions follow 

the Java Math class. Scripting section 2.7.4 offers a more efficient function 

generator. This section also describes how functions are represented. 

Functions constructed with a large number of points could take a considerNIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 370 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

able amount of time to cast the resulting GDS file. Label indicator above the 

module buttons will display the path and file name once it’s finished writing 

data to file. Also, casting a curved function defined by a large width could result 

in a shape with looped interiors. 

3.3.4 Binary Zone Plate

In a binary zone plate, zones switch from opaque to transparent at radii, 

 2λ2

rn = nλf + (3.27) n

4

where n is an integer, λ is the wavelength and f is the focal distance measured 

from the center of the zone plate. Each shape is constructed with double the 

number of prescribed sides (interior and exterior) whereas the central element 

(circle) vertices are equal to the Sides module parameter. Figure 3.355 shows 

two examples of binary zone plates. Zones are either composed of a single user 

defined GDS layer, or cast into zone-respective GDS layers. This implies that 

zone at a radius rn is rendered to GDS layer number n where n = 0,1,2,...255. 

Due to 8-bit layer GDS standard restrictions, zone numbers above the upper 

bound (255) reset the counter back to GDS layer number 0. Consequently, zones 

at radii r256, r257, r258,... would respectively have GDS layer numbers 0,1,2,.... 

(a) (b) 

Figure 3.355: GDS output of a zone plate with 10 zones, 88 sides per zone, λ = 632.0nm, 

and f = 0.001m. (a) Single layer zone plate. (b) Enabling the different 

layers option casts each zone to a respective GDS layer number. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 371 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3.3.5 Photonic Crystals

Photonic crystals module creates two hexagonal arrays of circles. Circles are 

defined by a diameter (d), number of sides and GDS layer number parameters. 

Within the array circular elements are defined by the spacing proximity to the 

nearest neighbor (h). Hexagonal arrays are defined by the separation between 

the two arrays (s), and the array size Sx and Sy along the corresponding x and y

directions (Figure 3.356). Table of values are either manually populated or data 

is loaded from a text file. Example photonic crystal table file is included in the 

\loadFiles\photonicCrystalTable directory. Each table value is tab separated, 

each table row starts on a new line. Figure 3.356 shows various parameters 

from the photonic crystal module. 

Sx

Sy

d

s

h

(a) (b) 

Figure 3.356: Photonic crystal example of a rendered GDS structure labeled with module parameters. 

3.3.6 Random Polygons

Random Polygons module will randomly place polygons into a user defined 

area. Separation parameter defines the minimum separation between the outer 

radial perimeter of the objects. Polygons are defined by the outer radius and 

number of sides. The polygon placement area is defined by the W idth and 

Length parameters. If the randomly generated coordinate violates the minimum 

separation distance, the module will keep generating random coordinates 

until the maximum number of failures (defined by the parameter I teration) is 

reached. 

By clicking the RandomRotation checkbox, each shape will be randomly 

rotated within the top cell. Enabling the option for features with many sides is 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 372 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

not useful, however, with Sides = 3 and random rotation produces randomly 

oriented triangles within the array (see Figure 2.78 in section 2.7.11). 

This shape could be generated using the scripting constructor randomPolygons, as described in section 2.7.11. 

3.3.7 Random Rectangular Array

Random rectangular array module will randomly place squares or rectangles 

into a user-defined area specified by the number of elements and pitch (in x and 

y directions). The shape size (square or rectangular) as well as the probability 

that a lattice point is occupied are user-defined parameters. Furthermore, 

user can load x and y coordinate pairs and cast them to lattice sites. This 

module was suggested by a researcher and used for generating disordered 

metamaterial structures. 

This module allows users to load x and y coordinates where objects will 

be drawn. The ASCII file should be arranged with x and y pairs tab or space 

separated, with one pair per line. The first line of the data file is defined as 

a header and is consequently skipped. An example file is located under the 

\loadFiles\randomRectangularArray directory. To use the module, first choose 

the size of the square or rectangular object, then check the Load File check box, 

then click Load File , navigate to a directory with the text file, click on the file, 

then click OK. The chosen filename will be displayed in the label field directly 

below. Then click Create GDS to cast the shapes into a GDS file. NOTE: when 

loading from file, this module ignores the number of elements field, and will 

not display the total number of drawn shapes, skipped shapes, etc, within the 

results label field. 

3.3.8 Cantilever Arrays

Cantilever Arrays module will create a GDS file with a modulated (linearly, nonlinearly, percentage, sinusoidally, etc) cantilever array structures. Number of 

resulting structures is defined by the Elements parameter. Levers are characterized by a width, pitch and variable length values. Cantilevers are connected to 

a rectangular base of a user specified height. The width of the base rectangle 

is defined by the number of elements, pitch and the base extent. 

By choosing Linear or Percentage type variation, the generator will utilize the Length start value and will increment the length using the linear or 

percentage parameters respectively. Type Linear SE and non-linear SE use 

the Length start and Length end values and respectively vary the cantilever 

lengths linearly and non-linearly. Type Sinusoid will use the Length start

value as the initial length value and will vary the cantilever lengths sinusoidally 

over a 2π period with an amplitude defined by the sin Amplitude value. 

The MEMS-NEMS library offers identical elements (section 2.10.5) as well as 

many other shapes with enhanced functionality. Figure 2.316 illustrates canNIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 373 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

tilevers with linear, percentage, and sinusoidal length modulation. Figure 2.317 

shows examples of a linear and exponential length variation using start and 

end length values. 

3.3.9 Verniers

This module generates verniers between two specified alignment layers. User 

defined parameters consist of GDS layer numbers for layer A and B, vernier 

resolution, number of vernier tick lines, text labels for the two layers, vernier 

line width, length and pitch. Table of values are either manually populated 

or data is loaded from a text file. Example vernier table file is included in the 

\loadFiles\vernierTable directory. Each table value is tab separated, each table 

row starts on a new line. Vernier example is shown in the scripting command 

reference section 2.8.5 and figure 2.94. 

3.3.10 Fractals

This module contains Sierpinski triangle and carpet, curved tree, and the Vicsek 

saltire and cross fractals. Each fractal iteration is stored into a GDS structure 

with a prefix cell name concatenated with the iteration number. The extent 

of the final structure is defined by the module length and width parameters. 

Fractal examples are defined in the scripting command reference section 2.7.3 

(see also Figure 2.58). 

3.3.11 Grayscale Image To GDS

Grayscale Image to GDS module will convert a 8-bit gray scale BMP (PNG or 

JPG) and cast it to a GDS file where each level of gray (values 0 to 255) will 

be mapped to corresponding GDS layer numbers (GDS layers 0 to 255). This 

mapping is important for grayscale electron beam lithography. In this case, the 

generated file can be used in conjunction with a resist contrast curve to print 

three dimensional structures [104]. 

Resulting data is stored into a GDS structure named top. Within the module, 

data is read and converted line by line. Adjacent pixels of same value are 

merged together in order to minimize the resulting GDS file size. Also note that 

data within the top cell is not centered around the origin. The lower left hand 

corner of the image is mapped to the origin of the GDS file (point (0,0)). The 

image is mapped within the first quadrant (+x,+y) of the GDS file. 

If the BW option is checked, then all color values other than white (pixel 

value 255) will be cast to GDS layer 1. In this case, adjacent pixels are merged, 

however, if 2 pixels are of different value, they will be both cast to GDS layer 1, 

as 2 different GDS layer 1 pixels. To have pixels merged, use a graphic editing 

software package to cast image to black and white BMP, then change the mode 

to RGB 8-bit gray scale. Figure 3.357 shows an image and the resulting GDS 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 374 of 488 
files. 

(a) (b) (c) 

Figure 3.357: Grayscale to GDS. (a) 8-bit gray scale image (in this case black and white). 

The resulting GDS file (b) without and (c) with the BW option enabled. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 375 of 488 
Programming Reference

Email: Nanolithography.Toolbox@nist.gov

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.1 Programming Examples
 

The nanolithography toolbox distribution includes a NetBeans 8.0.2 project 

entitled CNSTprogrammingExamples. The src directory contains a package 

with source .java example files. These files could be used with any integrated 

development environment (IDE) in conjunction with Java 8. Furthermore the 

nanolithography toolbox jar file must be included within the project compiletime libraries. The following examples illustrate access to existing scripting 

methods through programming. Furthermore, the project directory includes 

the output GDS example files. 

The following is a procedure for setting up the included Netbeans example 

project: 

1. Start NetBeans -> File -> Open Project ... -> navigate to \EXAMPLES\Programming 

and open the CNSTprogrammingExamples project 

2. To fix the broken library link, right click on the project and choose Properties, 

click Libraries and remove the red-error highlighted compile-time library. Click 

the "Add JAR/Folder" button, then choose the CNST Nanolithography Toolbox 

JAR file and click OK. 

4.1.1 Template

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . � ;
 

5 import java . i o . F i l e ;
 

6
 

7 /� �
 

8 �
 

9 � @author rob
 

10 �/ 

11 p u b l i c class Example01Template { 

12 

13 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

14 L i b l i b = new L i b ( ) ;

15 

16 // I n s e r t Code Here 

17 

18 F i l e f = l i b . GDSOut ( " Example01Template . gds " ) ;

376 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

19 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

20 } 

21 

22 // I n s e r t cl as s methods here 

23 

24 } 

The above example is a template for java files accessing the CNST nanolithography toolbox. Lines 3 and 4 import all the objects needed to access 

scripting methods and create the GDS file. Line 5 import statement allows 

file input-output access. The example class contains a main method. Line 14 

initializes the GDS library. Line 18 sets the GDS output file. The print statement 

(line 19) is optional but helpful since it displays the full path of the saved GDS 

file. 

4.1.2 Script Method Access

The programming reference provides method headers for the available scripting 

methods within the toolbox. These methods either return a GDS Area object 

(GArea) and vector array of these objects (ArrayList<GArea>), or are void in 

which case the the areas are placed within a particular GDS structure. 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . � ;
 

5 import java . i o . F i l e ;
 

6
 

7 /� �
 

8 �
 

9 � @author rob
 

10 �/
 

11 p u b l i c class Example02ScriptingMethodAccess {
 

12 

13 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) {
 

14 L i b l i b = new L i b ( ) ;
 

15 //
 

16 // create a GDS s t r u c t S i n g l e E l l i p s e
 

17 Struct e l l i p s e = new Struct ( " e l l i p s e S i n g l e " ) ;
 

18 // add a GArea of an e l l i p s e from the nanolithography toolbox
 

s c r i p t i n g method 

19 e l l i p s e . add ( S c r i p t i n g . c r e a t e E l l i p s e ( 0 , 0 , 0 . 2 , 0 . 5 , 44 , 50 ,
 

20 4) ) ;
 

21 // create a GDS s t r u c t to store many i n s t a n t i a t e d e l l i p s e s
 

22 Struct manyEllipses = new Struct ( " I n s t a n t i a t e d E l l i p s e s " ) ;
 

23 // i n s t a n t i a t e e l l i p s e s along a c i r c u l a r path
 

24 double c i r c l e R a d i u s = 20 ; // u n i t s i n micrometers
 

25 i n t numberOfInstances = 100 ;
 

26 double increment = 2 � Math . P I / numberOfInstances ;
 

27 f o r ( i n t i = 0 ; i < numberOfInstances ; i ++) {
 

28 manyEllipses . add ( new Ref ( e l l i p s e , c i r c l e R a d i u s � Math . cos ( i
 

� increment ) , c i r c l e R a d i u s � Math . s i n ( i � increment ) ) ) ;

29 } 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 377 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

30 // adding s t r u c t u r e s to GDS l i b r a r y 

31 l i b . add ( new Ref ( e l l i p s e , 0 , 0) ) ;

32 l i b . add ( new Ref ( manyEllipses , 0 , 0) ) ;

33 // 

34 F i l e f = l i b . GDSOut ( " Example02Template . gds " ) ;

35 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

36 } 

37 } 

The above example creates a GDS structure object ellipse (line 17) with a 

structure name ellipseSingle. Line 19 adds a GDS area of an ellipse into the 

structure object. Here, the ellipse is created by one of the available nanolithography toolbox scripting methods using the following method header (Reference 

Methods section shows all the available methods) 

p u b l i c s t a t i c GArea c r e a t e E l l i p s e ( double x , double y , double radiusX , 

double radiusY , i n t numSides , double THETA , i n t gdsLayer ) 

Line 22 creates a GDS structure object manyEllipses. Using a for loop the 

ellipse object is instantiated along a circular path using the Ref constructor 

(line line 27). Figure 4.358 shows the output of the instantiated ellipse object. 

Lines 31 and 32 add the two structures to the GDS library. The following are 

Ref constructors 

Ref ( Struct structure , double x , double y )
 

Ref ( Struct structure , double x , double y , i n t mirror )
 

Ref ( Struct structure , double x , double y , i n t mirror , double angle )
 

Ref ( Struct structure , double x , double y , i n t mirror , double mag,
 

double angle ) 

To use mirroring within Ref the existing class must implement an interface 

Const, then set int mirror to MIRROR. Please consult the JGDS user manual 

for examples and more information on GDS structure instantiation [76]. 

Figure 4.358: Programming example illustrating instantiation of objects created using 

the nanolithography scripting methods. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 378 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.1.3 Boolean Operations and Affine Transformations

The following example illustrates affine transformations of GDS areas and 

boolean operation between GDS areas. The code first generates a GDS structure (line 18) to store boolean substraction between a circle and a circle wave 

object. Lines 19 and 20 show instantiation of GDS areas using the available 

nanolithography toolbox methods. Line 21 subtracts the circle wave from the 

circle object. Subsequently the result (circle) is stored in the booleanCCW GDS 

structure. Figure 4.359 shows the rendered GDS shapes. 

Figure 4.359: Rendered GDS output shape resulting from a subtraction between a circle 

and a circle wave object. The black dots represent shape vertices. 

Lines 25-30 create a GDS structure and two circular areas, then add the 

areas to the structure. A copy of circle1 into a temp area object occurs in line 

34. Directly following, in line 35 a boolean OR operation with circle2 occurs. 

Line 37 shows a GDS area translation using built in Java affine transformations. 

In a similar fashion, the areas could be scaled, rotated and sheared. Lines 

40 to 59 repeat the process for a boolean AND, XOR, and SUBTRACT operations. 

Figure 4.360 shows the output of the rendered structures. 

(a) (b) (c) (d) (e)

Figure 4.360: Rendered GDS output shape of the (a) original two circles and various 

boolean operations between the areas (b) OR, (c) AND, (d) XOR and (e) SUBTRACT. 

1 package cnstprogrammingexamples ;

2 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 379 of 488 
5

10

15

20

25

30

35

40

45

50

55

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . �;
 

import java . awt . geom . AffineTransform ;
 

6 import java . i o . F i l e ;
 

7
 8

/� �
 

9 �
 � @author rob 

11 �/ 

12 p u b l i c class Example03BooleanOperationsTransformations { 

13 

14 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

L i b l i b = new L i b ( ) ;

16 // 

17 // Subtraction of 2 GAreas − c i r c l e − circleWave 

18 Struct booleanCCW = new Struct ( " BooleanCircleCircleWave " ) ;

19 GArea c i r c l e = S c r i p t i n g . c r e a t e E l l i p s e ( 0 , 0 , 14 , 14 , 44 , 0 , 4) ;

GArea circWave = S c r i p t i n g . createCircleWave ( 0 , 0 , 10 , 10 , 0 . 5 , 

128 , 0 , 4) ;

21 c i r c l e . subtract ( circWave ) ;

22 booleanCCW . add ( c i r c l e ) ;

23 

24 // boolean examples between 2 c i r c l e s 

Struct booleanCircles = new Struct ( " BooleanCircles " ) ;

26 GArea c i r c l e 1 = S c r i p t i n g . c r e a t e E l l i p s e ( 0 , 0 , 1 , 1 , 44 , 0 , 4) ;

27 GArea c i r c l e 2 = S c r i p t i n g . c r e a t e E l l i p s e ( 1 , 1 , 1 , 1 , 44 , 0 , 4) ;

28 // add both c i r c l e s to the s t r u c t 

29 booleanCircles . add ( c i r c l e 1 ) ;

booleanCircles . add ( c i r c l e 2 ) ;

31 

32 // OR Example 

33 // create a temporary copy of c i r c l e 1 

34 GArea temp = new GArea ( c i r c l e 1 ) ;

temp . or ( c i r c l e 2 ) ;

36 // a f f i n e transform − t r a n s l a t i o n 4um i n x 

37 temp . transform ( AffineTransform . getTranslateInstance ( 4 , 0) ) ;

38 booleanCircles . add ( temp ) ;

39 

// AND Example 

41 temp = new GArea ( c i r c l e 1 ) ;
 

42 temp . and ( c i r c l e 2 ) ;
 

43 // a f f i n e transform − t r a n s l a t i o n 8um i n x
 

44 temp . transform ( AffineTransform . getTranslateInstance ( 8 , 0) ) ;
 

booleanCircles . add ( temp ) ;

46 

47 // XOR Example 

48 temp = new GArea ( c i r c l e 1 ) ;

49 temp . xor ( c i r c l e 2 ) ;

// a f f i n e transform − t r a n s l a t i o n 12um i n x 

51 temp . transform ( AffineTransform . getTranslateInstance (12 , 0) ) ;

52 booleanCircles . add ( temp ) ;

53 

54 // SUBTRACT Example 

temp = new GArea ( c i r c l e 1 ) ;

56 temp . subtract ( c i r c l e 2 ) ;

57 // a f f i n e transform − t r a n s l a t i o n 16um i n x 

58 temp . transform ( AffineTransform . getTranslateInstance (16 , 0) ) ;

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 380 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

59 bool e an C i rc les . add ( temp ) ;

60 

61 l i b . add ( new Ref ( booleanCCW , 0 , 0) ) ;

62 l i b . add ( new Ref ( boole anCircl es , 0 , 0) ) ;

63 // 

64 F i l e f = l i b . GDSOut ( " Example03BooleanOperationsTransformations . 

gds " ) ;

65 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

66 } 

67 } 

4.1.4 Labeled Arrays

Labeled arrays could be created in a variety of ways using the nanolithography 

toolbox scripting methods. For instance, general areas could be instantiated 

using any of the available array methods. The following example uses a for 

loop to iterate through various diameters and separations with 

p u b l i c s t a t i c void createSqrHoleC ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , double pitchY , i n t numElementsX , i n t 

numElementsY , double THETA , i n t gdsLayer ) 

to create an array of circular objects, centered at position (x,y). Within the 

loop, labels for each array are created using the centered text method 

p u b l i c s t a t i c GArea createTextGdsC ( S t r i n g t e x t S t r i n g , S t r i n g fontName , 

double fontSize , double x , double y , double THETA , i n t gdsLayer , 

double shapeReso ) 

The program starts by initializing a GDS structure top (line 16). This structure will be used to hold instantiated arrays of various circular apertures. Lines 

18-29 initialize a variety of variables used to create the arrayed structures. 

The nested for loop (lines 31-40) iterates through diameters and separations 

between circular array elements. In the inner loop, a pitch is calculated in line 

33. Directly following, a string defining the GDS structure name of individual 

arrays is established (line 34). Number of array elements, based on the array 

extent and pitch, are calculated (line 35). Then createSqrHoleC method is 

used to create and instantiate the hole array patterns within the GDS structure 

top (line 36). A string label is defined using the diameter and pitch values (line 

37) and a GDS area containing the text label is added to the GDS structure top

(line 38). Figure 4.361 shows the rendered GDS output. 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;

4 import JGDS2 . � ;

5 import java . i o . F i l e ;

6 

7 /� �

8 �

9 � @author rob 

10 �/ 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 381 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160

Figure 4.361: Programming example of labeled arrays. 

11 p u b l i c class Example04LabeledArrays { 

12 

13 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

14 L i b l i b = new L i b ( ) ;

15 // 

16 Struct top = new Struct ( " top " ) ;

17 // i n i t i a l i z e v a r i a b l e s 

18 double [ ] diameter = new double [ ] { 1 , 2 , 3 , 4 } ;

19 double [ ] separation = new double [ ] { 0.25 , 0 . 5 , 1 , 2 } ;

20 double arrayExtent = 750 ;

21 double a r r a y P i t c h = 2000 ;

22 S t r i n g s , l b l ;

23 double p i t c h ;

24 i n t numSides = 44 ;

25 i n t numElements ;

26 i n t gdsLayer = 4 ;

27 double l a b e l O f f s e t = 200 ;

28 double f o n t S i z e = 170 ;

29 double shapeReso = 0.1 ;

30 // f o r loop	 to create arrays and l a b e l s 

31 f o r ( i n t i = 0 ; i < diameter . length ; i ++) { 

32 f o r ( i n t j = 0 ; j < separation . length ; j ++) { 

33	 p i t c h = ( diameter [ i ] + separation [ j ] ) ;

34 s =	 " c i r c l e _ d " + ( i n t ) diameter [ i ] + "um_p" + ( i n t ) ( 

p i t c h � 1000) + "nm" ;

35	 numElements = ( i n t ) ( arrayExtent / p i t c h ) ;

36 S c r i p t i n g . createSqrHoleC ( s , top , i � arrayPitch , j �

arrayPitch , diameter [ i ] / 2 , diameter [ i ] / 2 , 

numSides , pitch , pitch , numElements , numElements , 

0 , gdsLayer ) ;

37 l b l = " d=" + ( i n t ) diameter [ i ] + "um; p=" + ( i n t ) ( 

p i t c h � 1000) + "nm" ;

38 top . add ( S c r i p t i n g . createTextGdsC ( l b l , " A r i a l " , fontSize 

, i � arrayPitch , j � a r r a y P i t c h − l a b e l O f f s e t −

arrayExtent / 2 , 0 , gdsLayer , shapeReso ) ) ;

39 } 

40 } 

41 l i b . add ( new	 Ref ( top , 0 , 0) ) ;

42 // 

43 F i l e f = l i b . GDSOut ( " Example04LabeledArrays . gds " ) ;

44 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

45 } 

46 } 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 382 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.1.5 MEMS Perforated Flexures

The following code creates a perforated MEMS flexure. The scripting element 

is called flexure2C and described in subsection 2.10.4. The code describes 

storing vector array elements into a GDS structure, then extracting various 

layers from a Struct and storing them into GArea objects. The stored flexure 

and circle array GDS areas are then used to construct a perforated structure 

via boolean subtraction. 

Lines 17 and 19 create two GDS structures. Line 21 stores the flexure2C

element into an ArrayList<GArea>. Using the createStruct method, the 

vector array al is stored into a GDS structure (line 24). Line 27 stores an array 

of circles with GDS layer 7 into a GDS structure. Figure 4.362a shows the GDS 

rendered output. 

Lines 30 and 32 extract GDS areas with particular GDS layer numbers and 

stores the shapes into the instantiated GArea objects. Line 34 performs a 

boolean subtraction between the flexure and the circle array. The resulting 

perforated area is stored into the top structure (line 37). Line 40 extracts the 

anchors and stores them into the top structure. Figure 4.362b shows the GDS 

rendered output. 

(a)

(b)

Figure 4.362: Perforated flexures example showing GDS structures (a) flexureWithCircles and (b) top. 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;

4 import JGDS2 . � ;

5 import java . i o . F i l e ;

6 import java . u t i l . A r r a y L i s t ;

7 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 383 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

8 /� �

9 �

10 � @author rob 

11 �/ 

12 p u b l i c class Example05MEMSperforatedFlexure { 

13 

14 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

15 L i b l i b = new L i b ( ) ;

16 // 

17 Struct top = new Struct ( " top " ) ;

18 // 

19 Struct f l e x u r e W i t h C i r c l e s = new Struct ( " f l e x u r e W i t h C i r c l e s " ) ;

20 // creating element flexure2C , s t r u c t u r a l l a y e r = 4 , anchor 

l a y e r = 1 

21 A r r a y L i s t <GArea> a l = S c r i p t i n g . createFlexure2C ( 0 , 0 , 0 . 5 , 5 , 

30 , 2 , 40 , 20 , 8 , 10 , 5 . 2 , 4 , 0 . 4 , 1 , 0 , 4) ;

22 

23 // store A r r a y L i s t <GArea> i n t o Struct 

24 S c r i p t i n g . createStruct ( f l e x u r e W i t h C i r c l e s , a l ) ;

25 

26 // creating an array of c i r c l e s ( c i r c l e l a y e r = 7) i n 

f l e x u r e W i t h C i r c l e s Struct 

27 S c r i p t i n g . createSqrHoleC ( " c i r c l e A r r a y " , f l e x u r e W i t h C i r c l e s , 0 , 

0 , 1 , 1 , 16 , 4 , 4 , 10 , 5 , 0 , 7) ;

28 

29 // e x t r a c t i n g a l l o b j e c t s with f l e x u r e l a y e r 4 

30 GArea f l e x u r e = new GArea ( f l e x u r e W i t h C i r c l e s . getArea ( 4 ) , 4) ;

31 // e x t r a c t i n g a l l o b j e c t s with c i r c l e l a y e r 7 

32 GArea c i r c l e = new GArea ( f l e x u r e W i t h C i r c l e s . getArea ( 7 ) , 7) ;

33 // boolean s u b t r a c t i o n to create perforated f l e x u r e 

34 f l e x u r e . subtract ( c i r c l e ) ;

35 

36 // store boolean s t r u c t u r e 

37 top . add ( f l e x u r e ) ;

38 

39 // e x t r a c t and store anchors 

40 top . add ( new GArea ( f l e x u r e W i t h C i r c l e s . getArea ( 1 ) , 1) ) ;

41 // 

42 l i b . add ( new Ref ( top , 0 , 0) ) ;

43 l i b . add ( new Ref ( f l e x u r e W i t h C i r c l e s , 0 , 0) ) ;

44 // 

45 F i l e f = l i b . GDSOut ( " Example05MEMSperforatedFlexure . gds " ) ;

46 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

47 } 

48 } 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 384 of 488 
4.1.6 Custom Class Methods

The following example creates three methods identical to ones that generate 

yBend, yBendInv and yBendInvSlot structures described in corresponding 

sections 2.9.3.10, 2.9.3.11 and 2.9.3.12. Figure 4.363 shows the three 90 

degree y-bend structures. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

(x,y) 

r1

r2

w (x,y) 

r1

r2

we w

(x,y) 

r1

r2

we g ws

(a) (b) (c)

Figure 4.363: Programming example of creating 90 degree (a) y-bend, (b) y-bend inverse and (c) y-bend inverse slot structures. 

The following code has four methods, main, createYBend90, createYBendInv90 and createYBendInvSlot90. Within the main method, line 14 initializes 

the GDS library and lines 16 to 20 initialize variables used to define the 90 

degree y-bend structures. Lines 22 to 24 create GDS structures to store shapes 

created by the respective methods. Here we use the following constructor 

Struct ( S t r i n g structName , GDS2Element shape ) 

Line 22 creates a 90 degree y-bend (figure 4.363a) by implementing the 

createYBend90 method defined by lines 37-41. The method simply creates 

upper arc using the Scripting.createTorusW method (line 38). The GDS area 

ga undergoes a Boolean OR with the lower arc. The arc shape is defined by the 

constructor torusW in section 2.3.15. 

Similarly, line 23 and 24 creates the remaining two 90 degree y-bend structures (figure 4.363b and 4.363c). The methods createYBendInv90 and createYBendInvSlot90 reuse the defined createYBend90 method to create the 

resulting shapes. For instance, createYBendInv90 first creates a 90 degree 

y-bend of width w + 2we (line 47) and then subtracts a similar structure of width 

w (line 48) to create a 90 degree y-bend inverse GDS area. Analogously, lines 

54-58 define a method that creates a 90 degree y-bend inverse slot structure. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 385 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . � ;
 

5 import java . i o . F i l e ;
 

6
 

7 /� �
 

8 �
 

9 � @author rob
 

10 �/ 

11 p u b l i c class Example06CustomClassMethods { 

12 

13 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

14 L i b l i b = new L i b ( ) ;

15 // define v a r i a b l e s 

16 double x = 0 , y = 0 ;

17 double r1 = 20 , r2 = 20 ;

18 double w = 1 . 4 , we = 1 , ws = 1 , g = 0.25 ;

19 i n t numSides = 44 , gdsLayer = 4 ;

20 double THETA = 0 ;

21 // 

22 Struct yBend90 = new Struct ( " yBend90Test " , createYBend90 ( x , y , 

r1 , r2 , w, numSides , THETA , gdsLayer ) ) ;

23 Struct yBendInv90 = new Struct ( " yBendInv90Test " , 

createYBendInv90 ( x , y , r1 , r2 , w, we , numSides , THETA , 

gdsLayer ) ) ;

24 Struct yBendInvSlot90 = new Struct ( " yBendInvSlot90Test " , 

createYBendInvSlot90 ( x , y , r1 , r2 , ws , g , we , numSides , 

THETA , gdsLayer ) ) ;

25 // 

26 l i b . add ( new Ref ( yBend90 , 0 , 0) ) ;

27 l i b . add ( new Ref ( yBendInv90 , 0 , 0) ) ;

28 l i b . add ( new Ref ( yBendInvSlot90 , 0 , 0) ) ;

29 // 

30 F i l e f = l i b . GDSOut ( " Example06CustomClassMethods . gds " ) ;

31 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

32 } 

33 

34 // 

35 // yBend90 

36 // 

37 p u b l i c s t a t i c GArea createYBend90 ( double x , double y , double r1 , 

double r2 , double w, i n t numSides , double THETA , i n t gdsLayer ) 

{ 

38 GArea ga = new GArea ( S c r i p t i n g . createTorusW ( 0 , r1 , r1 , w, 270 , 

360 , numSides , 0 , gdsLayer ) ) ;

39 ga . or ( S c r i p t i n g . createTorusW ( 0 , −r2 , r2 , w, 0 , 90 , numSides , 0 , 

gdsLayer ) ) ;

40 return S c r i p t i n g . transformGArea ( ga , THETA , x , y ) ;

41 } 

42 

43 // 

44 // yBendInv90 

45 // 

46 p u b l i c s t a t i c GArea createYBendInv90 ( double x , double y , double r1 , 

double r2 , double w, double we , i n t numSides , double THETA , 

i n t gdsLayer ) { 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 386 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

47 GArea ga = createYBend90 ( x , y , r1 , r2 , w + 2 � we , numSides , 

THETA , gdsLayer ) ;

48 retu rn ga . su b tr a ct ( createYBend90 ( x , y , r1 , r2 , w , numSides , 

THETA , gdsLayer ) ) ;

49 } 

50 

51 // 

52 // yBendInvSlot90 

53 // 

54 p u b l i c s t a t i c GArea createYBendInvSlot90 ( double x , double y , double 

r1 , double r2 , double ws , double g , double we , i n t numSides , 

double THETA , i n t gdsLayer ) { 

55 GArea ga = createYBend90 ( x , y , r1 , r2 , ws + 2 � we + 2 � g , 

numSides , THETA , gdsLayer ) ;

56 ga . su b tr a ct ( createYBend90 ( x , y , r1 , r2 , ws + 2 � g , numSides , 

THETA , gdsLayer ) ) ;

57 retu rn ga . or ( createYBend90 ( x , y , r1 , r2 , ws , numSides , THETA , 

gdsLayer ) ) ;

58 } 

59 

60 } 

4.1.7 GDS Area Objects - Layers and Data-types

GDS layer definitions are typically defined within the method constructor. Layer 

data-types are either defined globally for subsequent GDS objects or GDS area 

objects are assigned to a data-type. For instance, within the following 4 lines, a 

structure is created, layer data-type 44 is set for subsequent shapes, the GDS 

area ellipse acquires the data-type value, and is added to the Struct. 

1 Struct top = new Struct ( " top " ) ;
 

2 S c r i p t i n g . setDataType ( 4 4 ) ;
 

3 GArea e l l i p s e = S c r i p t i n g . c r e a t e E l l i p s e ( 0 , 0 , 0 . 4 , 0 . 8 , 44 , 0 , 4) ;
 

4 top . add ( s i n g l e E l l i p s e ) ;
 

The following is an equivalent strategy that casts the GDS area object onto 

a particular datatype. 

1 Struct top = new Struct ( " top " ) ;
 

2 GArea e l l i p s e = S c r i p t i n g . c r e a t e E l l i p s e ( 0 , 0 , 0 . 4 , 0 . 8 , 44 , 0 , 4) ;
 

3 s i n g l e E l l i p s e . setDataType ( 4 4 ) ;
 

4 top . add ( s i n g l e E l l i p s e ) ;
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 387 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.1.8 Centering GDS Area Objects

The following code will find a centroid of a GDS shape. This procedure is useful 

for centering features around a specified origin or to create symmetric pattern 

extents. Lines 18 and 19 define a GDS structure and area, respectively. The GDS 

area is then added to the structure (line 20). In line 22, a new structure is formed 

that will store the resulting centered GDS area. The GDS area is extracted and 

stored into a Java Area (line23). Using the built-in Java Rectangle2D class, 

the area boundary is extracted in line 24. The GDS structure containing the 

GDS area is then instantiated with offsets determined by the getCenterX() and 

getCenterY() methods from the Rectangle2D class. Instead of instantiating, 

the GDS area object could be added directly to a GDS structure using affine 

translational transforms with (-rec.getCenterX(), -rec.getCenterY()). 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . � ;
 

5 import java . awt . geom . Area ;
 

6 import java . awt . geom . Rectangle2D ;
 

7 import java . i o . F i l e ;
 

8 

9 /� �

10 �

11 � @author rob 

12 �/ 

13 p u b l i c class Example07AreaExtents { 

14 

15 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

16 L i b l i b = new L i b ( ) ;

17 // creating and s t o r i n g a y−bend 

18 Struct yBendTest = new Struct ( " yBendExample " ) ;

19 GArea yBend = S c r i p t i n g . createYbend ( 0 , 0 , 10 , 10 , 20 , −40, 1 , 

0 , 7 , 0.01) ;

20 yBendTest . add ( yBend ) ;

21 // e x t r a c t i n g pattern extents 

22 Struct yBendCentered = new Struct ( " yBendCenteredShape " ) ;

23 Area a = new Area ( yBend . getArea ( ) ) ;

24 Rectangle2D rec = a . getBounds2D ( ) ;

25 yBendCentered . add ( new Ref ( yBendTest , −rec . getCenterX ( ) , −rec . 

getCenterY ( ) ) ) ;

26 // 

27 l i b . add ( new Ref ( yBendTest , 0 , 0) ) ;

28 l i b . add ( new Ref ( yBendCentered , 0 , 0) ) ;

29 F i l e f = l i b . GDSOut ( " Example07AreaExtents . gds " ) ;

30 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

31 } 

32 } 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 388 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.1.9 PostScript to GDS

The below code creates a GDS area using a string containing postscript commands. Unlike scripting, where the the number of postscript commands is practically unlimited, with the programming interface it is limited. This limitation 

stems from the Java String length limit. As defined by the Java specifications, 

a String has a maximum character length of Integer.MAX_VALUE = (231 − 1). 

A host of memory dilemmas will be encountered prior reaching this limit, hence 

instead of holding all postscript commands in one String, the commands could 

be distributed over multiple Strings. 

Example 8 implements an interface (Example08PSinterface.java) that contains 

a string s with postscript paths (line 11). Variables are defined and a GDS 

structure is created (lines 16 to 21) in a similar manner to previous programming examples. Line 22 uses a method createPostScript in conjunction with 

a String psString to generate output GDS shapes. String variable psString

is defined in the Example08PSinterface.java interface file. The following two 

methods are available for creating GDS shapes from vectorized objects: 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e P o s t S c r i p t ( double x , double y ,
 

S t r i n g s , i n t fractureSegments , double THETA , double shapeReso ,
 

double pixelValue , i n t gdsLayer )
 

p u b l i c s t a t i c void c r e a t e P o s t S c r i p t ( Struct currentStruct , double x ,
 

double y , S t r i n g s , i n t fractureSegments , double THETA , double
 

shapeReso , double pixelValue , i n t gdsLayer )
 

In our example we used the void method (line 22), that directly stores generated 

shapes into a specified (currentStruct) GDS structure. The lower left corner 

of the structure is positioned at (x,y). The resulting structure is fractured into a 

number of equal segments defined by the integer value of fractureSegments. 

Parameters THETA, shapeReso, pixelValue and gdsLayer are rotation about 

(x,y), rendering resolution of the vectorized shape(section 2.2.6), pixel scaling 

value of the postscript coordinates (section 2.6.5.1) and GDS layer number, 

respectively. 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . � ;
 

5 import java . i o . F i l e ;
 

6
 

7 /� �
 

8 �
 

9 � @author rob
 

10 �/ 

11 p u b l i c class Example08PostScriptFracturing implements 

Example08PSinterface { 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 389 of 488 
12 

13 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 

14 L i b l i b = new L i b ( ) ;

15 // v a r i a b l e s 

16 i n t gdsLayer = 44 ;

17 double shapeReso = 0.001 ;

18 double p i x e l V a l u e = . 1 ;

19 i n t fractureSegments = 10 ;

20 // 

21 S t r uc t ps2gds = new S t r u c t ( " postScript2GDS " ) ;

22 S c r i p t i n g . c r e a t e P o s t S c r i p t ( ps2gds , 0 , 0 , psStr i n g , 

fractureSegments , 0 , shapeReso , p i x e l V al ue , gdsLayer ) ;

23 // 

24 l i b . add ( new Ref ( ps2gds , 0 , 0) ) ;

25 F i l e f = l i b . GDSOut ( " Example 08Post Scr ip tFracturing . gds " ) ;

26 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

27 } 

28 }

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 390 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.1.10 Curved Fluidic Channels

The following example creates two sets of labeled fluidic channels using predefined scripting methods. Straight segments were constructed using the 

waveguide method that defines a rectangular shape between points (x1,y1) and 

(x2,y2). The curved segments were created using either bezier curves or 90 

degree torus bends. 

Figure 4.364: Programming example of labeled fluidic channels. 

1 package cnstprogrammingexamples ;

2 

3 import CNST . S c r i p t i n g ;
 

4 import JGDS2 . � ;
 

5 import java . awt . geom . AffineTransform ;
 

6 import java . i o . F i l e ;
 

7
 

8 /� �
 

9 �
 

10 � @author rob
 

11 �/
 

12 p u b l i c class Example09CurvedFluidicChannels {
 

13 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) {
 

14 L i b l i b = new L i b ( ) ;
 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 391 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

15 // 

16 i n t layerChannel = 4 , layerChannel2 = 7 , numElectrodes = 8 ;

17 double shapeReso = 0 . 1 , f o n t S i z e = 250 ;

18 double c h i p S i z e = 10000, electrodeRadius = 250 , 

electrodeSpacing = 100 , channelWidth = 20 ;

19 GArea electrode = S c r i p t i n g . c r e a t e E l l i p s e ( 0 , 0 , electrodeRadius 

, electrodeRadius , 100 , 0 , layerChannel ) ;

20 Struct chip = new Struct ( " chip " ) ;

21 AffineTransform at = new AffineTransform ( new double [ ] { −1.0 , 

0 . 0 , 0 . 0 , 1.0 } ) ;

22 // side channels 1−8 

23 f o r ( i n t i = 0 ; i < numElectrodes ; i ++) { 

24 GArea channels = new GArea ( electrode ) ;

25 GArea l a b e l = S c r i p t i n g . createTextGdsC ( " " + ( i + 1) , " S e r i f 

" , fontSize , −electrodeRadius − f o n t S i z e / 2 , 0 , 0 , 

layerChannel , shapeReso ) ;

26 double x = 2 � electrodeRadius ;

27 double y = c h i p S i z e / 4 + i � (2 � electrodeRadius + 

electrodeSpacing ) ;

28 double x2 = x + 200 − i � channelWidth � 2 ;

29 double x3 = 200 , y3 = c h i p S i z e − 1500 − ( numElectrodes −

− 1) � 40 − y ;

30 channels . or ( S c r i p t i n g . createWaveGuide ( 0 , 0 , x2 , 0 , 

channelWidth , 0 , 0 , 0 , layerChannel ) ) ;

31 channels . or ( S c r i p t i n g . create90degreeBendLH ( x2 , 0 , x3 , 200 , 

channelWidth , 0 , layerChannel , shapeReso ) ) ;

32 channels . or ( S c r i p t i n g . createWaveGuide ( x2 + x3 , 200 , x2 + x3 

, y3 , channelWidth , 0 , 0 , 0 , layerChannel ) ) ;

33 double radiusChannel = 1000 ;

34 double x4 = x2 + x3 + radiusChannel ;

35 channels . or ( S c r i p t i n g . createTorusW ( x4 , y3 , radiusChannel , 

channelWidth , 90 , 180 , 100 , 0 , layerChannel ) ) ;

36 double y4 = y3 + radiusChannel ;

37 double x5 = c h i p S i z e / 2 − 2000 − ( numElectrodes − i − 1) �

40 ;

38 channels . or ( S c r i p t i n g . createWaveGuide ( x4 , y4 , x5 , y4 , 

channelWidth , 0 , 0 , 0 , layerChannel ) ) ;

39 radiusChannel = 500 ;

40 double y5 = y4 − radiusChannel ;

41 channels . or ( S c r i p t i n g . createTorusW ( x5 , y5 , radiusChannel , 

channelWidth , 0 , 90 , 100 , 0 , layerChannel ) ) ;

42 double x6 = x5 + radiusChannel ;

43 double y6 = −y + 2500 − ( numElectrodes − i − 1) � 100 ;

44 channels . or ( S c r i p t i n g . createWaveGuide ( x6 , y5 , x6 , y6 , 

channelWidth , 0 , 0 , 0 , layerChannel ) ) ;

45 radiusChannel = 500 ;

46 double x7 = x6 + radiusChannel ;

47 channels . or ( S c r i p t i n g . createTorusW ( x7 , y6 , radiusChannel , 

channelWidth , 180 , 270 , 100 , 0 , layerChannel ) ) ;

48 double y7 = y6 − radiusChannel ;

49 double x8 = c h i p S i z e / 2 − x ;

50 channels . or ( S c r i p t i n g . createWaveGuide ( x7 , y7 , x8 , y7 , 

channelWidth , 0 , 0 , 0 , layerChannel ) ) ;

51 channels . transform ( AffineTransform . getTranslateInstance ( −

c h i p S i z e / 2 + x , −c h i p S i z e / 2 + y ) ) ;

52 GArea channelsMirror = new GArea ( channels ) ;

53 channelsMirror . transform ( at ) ; // mirror around y−a x i s 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 392 of 488 

i 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

54 chip . add ( channels ) ;

55 chip . add ( channelsMirror ) ;

56 chip . add ( l a b e l . transform ( AffineTransform . 

getTranslateInstance ( − c h i p S i z e / 2 + x , −c h i p S i z e / 2 + 

y ) ) ) ;

57 GArea temp = new GArea ( l a b e l ) ;

58 chip . add ( temp . transform ( AffineTransform . 

getTranslateInstance ( c h i p S i z e − x / 2 , 0) ) ) ;

59 } 

60 // bottom channels 

61 electrodeSpacing = 200 ;

62 channelWidth = 50 ;

63 double o f f s e t X = 400 ;

64 f o r ( i n t i = 0 ; i < numElectrodes / 2 ; i ++) { 

65 GArea channels = new GArea ( electrode ) ;

66 double x = ( i + 1) � (2 � electrodeRadius + 

electrodeSpacing ) + o f f s e t X ;

67 double y = 2.5 � electrodeRadius ;

68 double x2 = x − i � channelWidth � 20 ;

69 double y2 = 0.55 � c h i p S i z e − y − i � channelWidth � 4 ;

70 channels . or ( S c r i p t i n g . createBezierCurve ( 0 , electrodeRadius 

/ 2 , 0 , c h i p S i z e / 4 , x2 , c h i p S i z e / 8 , x2 , y2 , 

channelWidth , shapeReso , 0 , layerChannel2 ) ) ;

71 double radiusChannel = 400 ;

72 double x3 = x2 + radiusChannel ;

73 channels . or ( S c r i p t i n g . createTorusW ( x3 , y2 , radiusChannel , 

channelWidth , 90 , 180 , 100 , 0 , layerChannel2 ) ) ;

74 double y3 = y2 + radiusChannel ;

75 double x4 = c h i p S i z e / 2 − x ;

76 channels . or ( S c r i p t i n g . createWaveGuide ( x3 , y3 , x4 , y3 , 

channelWidth , 0 , 0 , 0 , layerChannel ) ) ;

77 channels . transform ( AffineTransform . getTranslateInstance ( −

c h i p S i z e / 2 + x , −c h i p S i z e / 2 + y ) ) ;

78 channels . setLayer ( layerChannel2 ) ;

79 GArea channelsMirror = new GArea ( channels ) ;

80 channelsMirror . transform ( at ) ; // mirror around y−a x i s 

81 chip . add ( channels ) ;

82 chip . add ( channelsMirror ) ;

83 } 

84 // Labels f o r the bottom electrodes 

85 double x = −c h i p S i z e / 2 + (2 � electrodeRadius + 

electrodeSpacing ) + o f f s e t X − f o n t S i z e / 4 ;

86 double y = −c h i p S i z e / 2 + f o n t S i z e / 2 ;

87 double p i t c h = (2 � electrodeRadius + electrodeSpacing ) ;

88 S c r i p t i n g . createLabelMakerAutoOutLett ( 0 , 4 , " S e r i f " , fontSize , 

x , y , 0 , 0 , pitch , 1 , chip , 

89 layerChannel2 , shapeReso ) ; // l a b e l A B C D 

90 x = Math . abs ( x ) −f o n t S i z e /2 ;

91 S c r i p t i n g . createLabelMakerAutoOutLett ( 0 , 4 , " S e r i f " , fontSize , 

x , y , 0 , 0 , −pitch , 1 , chip , layerChannel2 , shapeReso ) ; // 

l a b e l D C B A 

92 // 

93 l i b . add ( new Ref ( chip , 0 , 0) ) ;

94 F i l e f = l i b . GDSOut ( " f l u i d i c s . gds " ) ;

95 System . out . p r i n t l n ( " Saved to " + f . getAbsolutePath ( ) ) ;

96 } 

97 } 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 393 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2 Reference Methods
 

The following subsection contain method headers that create complex GDS 

objects. These shapes are fully described in the GDS scripting chapter. Excluding access, mutator and miscellaneous methods, the shape methods names 

have the create followed by the script constructor name with the first letter 

capitalized. For instance, the ellipse scripting constructor (also shown in the 

previous comment line) would have a method entitled createEllipse

// e l l i p s e
 

p u b l i c s t a t i c GArea c r e a t e E l l i p s e ( double x , double y , double radiusX ,
 

double radiusY , i n t numSides , double THETA , i n t gdsLayer ) 

Directly following the method name are a set of parameters. All methods have a parameter list with the exception of accessor methods that have 

empty parameter lists. Methods return types are either void, GArea or ArrayList<GArea>. Since Struct objects add GArea objects but not array lists 

of these objects, each vector array return types also have a void method. 

The void method stores the ArrayList<GArea> into the passed Struct currentStruct. Section 4.2.2 contains methods for dealing with GArea or ArrayList<GArea> objects. These are useful for controlling GDS area objects in 

custom user defined methods. 

4.2.1 Accessor and Mutator Methods

p u b l i c s t a t i c double getFontOutline ( ) 

p u b l i c s t a t i c i n t getFracElements ( ) 

p u b l i c s t a t i c double getGDSreso ( ) 

p u b l i c s t a t i c i n t getLayer ( ) 

p u b l i c s t a t i c i n t getDataType ( ) 

p u b l i c s t a t i c double g e t P i x e l V a l u e ( ) 

p u b l i c s t a t i c double getShapeReso ( ) 

p u b l i c s t a t i c void setFontOutline ( double fontOutlineWidth ) 

p u b l i c s t a t i c void setFracElements ( i n t fracElements ) 

p u b l i c s t a t i c void setGDSreso ( double gdsReso ) 

p u b l i c s t a t i c void setLayer ( i n t l a y e r ) 

p u b l i c s t a t i c void setDataType ( i n t l a y e r ) 

p u b l i c s t a t i c void s e t P i x e l V a l u e ( double p i x e l V a l u e ) 

p u b l i c s t a t i c void setShapeReso ( double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 394 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.2 Miscellaneous GDS Area and Struct Methods

These methods are used for affine transformations of single and vector array 

GDS area objects. Furthermore, the void methods place constructed vector 

arrays of GArea objects into a GDS structure. 

// createStruct − place ga i n t o c u r r e n t S t r u c t
 

p u b l i c s t a t i c void createStruct ( Struct currentStruct , A r r a y L i s t <GArea>
 

ga ) 

// createStruct − mirror ga then place ga i n t o c u r r e n t S t r u c t 

p u b l i c s t a t i c void createStruct ( Struct currentStruct , A r r a y L i s t <GArea>

ga , boolean MIRROR ) 

// createStructRotate − r o t a t i o n only − then place ga i n t o 

c u r r e n t S t r u c t 

p u b l i c s t a t i c void createStructRotate ( Struct currentStruct , A r r a y L i s t <

GArea> ga , double THETA , double x , double y ) 

// createStructTranslateRotate − t r a n s l a t e then rotate ga then place ga 

i n t o c u r r e n t S t r u c t 

p u b l i c s t a t i c void createStructTranslateRotate ( Struct currentStruct , 

A r r a y L i s t <GArea> ga , double THETA , double x , double y ) 

// rotateGArea − rotate GArea v about a p o i n t ( x , y )
 

p u b l i c s t a t i c GArea rotateGArea ( GArea v , double THETA , double x , double
 

y ) 

// transformGArea − t r a n s l a t e v to ( x , y ) then rotate about ( x , y ) 

p u b l i c s t a t i c GArea transformGArea ( GArea v , double THETA , double x , 

double y ) 

// rotateArrayListGArea − rotate A r r a y L i s t ga about ( x , y )
 

p u b l i c s t a t i c A r r a y L i s t <GArea> rotateArrayListGArea ( A r r a y L i s t <GArea> ga
 

, double THETA , double x , double y ) { 

// transormArrayListGArea − A r r a y L i s t ga t r a n s l a t e to ( x , y ) then rotate 

about ( x , y ) 

p u b l i c s t a t i c A r r a y L i s t <GArea> transformArrayListGArea ( A r r a y L i s t <GArea>

ga , double THETA , double x , double y ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 395 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.3 Shape Methods

// e l l i p s e 

p u b l i c s t a t i c GArea c r e a t e E l l i p s e ( double x , double y , double radiusX , 

double radiusY , i n t numSides , double THETA , i n t gdsLayer ) 

// e l l i p s e V e c t o r 

p u b l i c s t a t i c GArea c r e a t e E l l i p s e V e c t o r ( double x , double y , double 

radiusX , double radiusY , double THETA , i n t gdsLayer , double 

shapeReso ) 

// c i r c l e t h r e e 

p u b l i c s t a t i c GArea createCircleThree ( double x1 , double y1 , double x2 , 

double y2 , double x3 , double y3 , i n t numSides , double THETA , i n t 

gdsLayer ) 

// circleWave 

p u b l i c s t a t i c GArea createCircleWave ( double x , double y , double r , i n t 

n , double A , i n t numSides , double THETA , i n t gdsLayer ) 

// cross 

p u b l i c s t a t i c GArea createCross ( double x , double y , double W, double L , 

double THETA , i n t gdsLayer ) 

// Lshape 

p u b l i c s t a t i c GArea createLshape ( double x , double y , double W1, double 

L1 , double W2, double L2 , double THETA , i n t gdsLayer ) 

// arc 

p u b l i c s t a t i c GArea createArc ( double x , double y , double rX , double rY , 

double angleStart , double angleEnd , i n t numSides , double THETA , 

i n t gdsLayer ) 

// arcVector 

p u b l i c s t a t i c GArea createArcVector ( double x , double y , double rX , 

double rY , double angleStart , double angleEnd , double THETA , i n t 

gdsLayer , double shapeReso ) 

// polygon 

p u b l i c s t a t i c GArea createPolygon ( double x , double y , double r , i n t 

numSides , double THETA , i n t gdsLayer , double shapeReso ) 

// rectangle 

p u b l i c s t a t i c GArea createRectangle ( double xLL , double yLL , double xUR , 

double yUR , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 396 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// rectangleLH 

p u b l i c s t a t i c GArea createRectangleLH ( double xLL , double yLL , double L , 

double H, double THETA , i n t gdsLayer ) 

// rectangleC 

p u b l i c s t a t i c GArea createRectangleC ( double xC , double yC , double L , 

double H, double THETA , i n t gdsLayer ) 

// roundrect 

p u b l i c s t a t i c GArea createRoundRect ( double xLL , double yLL , double L , 

double H, double rX , double rY , double THETA , i n t gdsLayer , double 

shapeReso ) 

// rectSUshape 

p u b l i c s t a t i c GArea createRectSUshape ( double x , double y , double L1 , 

double L2 , double L3 , double W, double THETA , i n t gdsLayer ) 

// rectTaper 

p u b l i c s t a t i c GArea createRectTaper ( double x , double y , double w1 , 

double L1 , double w2 , double L2 , double THETA , i n t gdsLayer ) 

// s t a r 

p u b l i c s t a t i c GArea createStar ( double x , double y , double r I n , double 

rOut , i n t numPoints , double THETA , i n t gdsLayer , double shapeReso ) 

// torus 

p u b l i c s t a t i c GArea createTorus ( double x , double y , double r I n , double 

rOut , double angleStart , double angleEnd , i n t numPoints , double 

THETA , i n t gdsLayer ) 

// torusW 

p u b l i c s t a t i c GArea createTorusW ( double x , double y , double r , double 

width , double angleStart , double angleEnd , i n t numPoints , double 

THETA , i n t gdsLayer ) 

// torusVector 

p u b l i c s t a t i c GArea createTorusVector ( double x , double y , double r I n , 

double rOut , i n t gdsLayer , double shapeReso ) 

// torusWaveIn 

p u b l i c s t a t i c GArea createTorusWaveIn ( double x , double y , double r I n , 

double rOut , i n t n , double A , i n t numSides , double THETA , i n t 

gdsLayer ) 

// torusWaveOut 

p u b l i c s t a t i c GArea createTorusWaveOut ( double x , double y , double r I n , 

double rOut , i n t n , double A , i n t numSides , double THETA , i n t 

gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 397 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.4 Array Methods

// arrayRectV1 

p u b l i c s t a t i c void createArrayRectV1 ( Struct structToBeArrayed , Struct 

currentStruct , double x , double y , i n t numColumns , i n t numRows , 

double dx , double dy ) 

// arrayRectV2 

p u b l i c s t a t i c void createArrayRectV2 ( Struct structToBeArrayed , Struct 

currentStruct , double x , double y , i n t numColumns , i n t numRows , 

double xE , double yE ) 

// arrayHex 

p u b l i c s t a t i c void createArrayHex ( Struct structToBeArrayed , Struct 

currentStruct , double x , double y , i n t numColumns , i n t numRows , 

double ds ) 

// arrayPolarV1 

p u b l i c s t a t i c void createArrayPolarV1 ( Struct structToBeArrayed , Struct 

currentStruct , double angleStart , double angleEnd , double 

deltaAngle , double radiusStart , double radiusEnd , double 

deltaRadius ) 

// arrayPolarV1R 

p u b l i c s t a t i c void createArrayPolarV1R ( Struct structToBeArrayed , Struct 

currentStruct , double angleStart , double angleEnd , double
 

deltaAngle , double radiusStart , double radiusEnd , double
 

deltaRadius )
 

// arrayPolarV2 

p u b l i c s t a t i c void createArrayPolarV2 ( Struct structToBeArrayed , Struct 

currentStruct , double angleStart , double angleEnd , double 

numberOfAngles , double radiusStart , double radiusEnd , double 

numberOfRadii ) 

// arrayPolarV2R 

p u b l i c s t a t i c void createArrayPolarV2R ( Struct structToBeArrayed , Struct 

currentStruct , double angleStart , double angleEnd , double 

numberOfAngles , double radiusStart , double radiusEnd , double 

numberOfRadii ) 

Instantiation using instance, instanceSym and points2instance can be accomplished using the JGDS reference (Ref) constructor. Refer to the JGDS

manual for information on Ref. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 398 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// s q r P i l l a r 

p u b l i c s t a t i c void c r e a t e S q r P i l l a r ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , double pitchY , i n t numElementsX , i n t 

numElementsY , double THETA , i n t gdsLayer ) 

// h e x P i l l a r 

p u b l i c s t a t i c void c r e a t e H e x P i l l a r ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer ) 

// sqrHole 

p u b l i c s t a t i c void createSqrHole ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , double pitchY , i n t numElementsX , i n t 

numElementsY , double THETA , i n t gdsLayer ) 

// hexHole 

p u b l i c s t a t i c void createHexHole ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer ) 

// s q r P i l l a r C 

p u b l i c s t a t i c void c r e a t e S q r P i l l a r C ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , double pitchY , i n t numElementsX , i n t 

numElementsY , double THETA , i n t gdsLayer ) 

// h e x P i l l a r C 

p u b l i c s t a t i c void c r e a t e H e x P i l l a r C ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer ) 

// sqrHoleC 

p u b l i c s t a t i c void createSqrHoleC ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , double pitchY , i n t numElementsX , i n t 

numElementsY , double THETA , i n t gdsLayer ) 

// hexHoleC 

p u b l i c s t a t i c void createHexHoleC ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , i n t 

numSides , double pitchX , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 399 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// s q r P i l l a r V 

p u b l i c s t a t i c void c r e a t e S q r P i l l a r V ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , double pitchY , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer , double shapeReso ) 

// h e x P i l l a r V 

p u b l i c s t a t i c void c r e a t e H e x P i l l a r V ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , i n t numElementsX , i n t numElementsY , double THETA , i n t 

gdsLayer , double shapeReso ) 

// sqrHoleV 

p u b l i c s t a t i c void createSqrHoleV ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , double pitchY , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer , double shapeReso ) 

// hexHoleV 

p u b l i c s t a t i c void createHexHoleV ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , i n t numElementsX , i n t numElementsY , double THETA , i n t 

gdsLayer , double shapeReso ) 

// s q r P i l l a r V C 

p u b l i c s t a t i c void c r e a t e S q r P i l l a r V C ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , double pitchY , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer , double shapeReso ) 

// h e x P i l l a r V C 

p u b l i c s t a t i c void createHexPillarVC ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , i n t numElementsX , i n t numElementsY , double THETA , i n t 

gdsLayer , double shapeReso ) 

// sqrHoleVC 

p u b l i c s t a t i c void createSqrHoleVC ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , double pitchY , i n t numElementsX , i n t numElementsY , double 

THETA , i n t gdsLayer , double shapeReso ) 

// hexHoleVC 

p u b l i c s t a t i c void createHexHoleVC ( S t r i n g uniqueStructName , Struct 

currentStruct , double x , double y , double rX , double rY , double 

pitchX , i n t numElementsX , i n t numElementsY , double THETA , i n t 

gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 400 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.5 Text, Labels, PostScript and Logo Methods

// textgds 

p u b l i c s t a t i c GArea createTextGds ( S t r i n g t e x t S t r i n g , S t r i n g fontName , 

double fontSize , double x , double y , double THETA , i n t gdsLayer , 

double shapeReso ) 

// textgdsC 

p u b l i c s t a t i c GArea createTextGdsC ( S t r i n g t e x t S t r i n g , S t r i n g fontName , 

double fontSize , double x , double y , double THETA , i n t gdsLayer , 

double shapeReso ) 

// t e x t O u t l i n e 

p u b l i c s t a t i c A r r a y L i s t <GArea> createTextOutline ( S t r i n g t e x t S t r i n g , 

S t r i n g fontName , double fontSize , double x , double y , double THETA , 

double fontOutlineWidth , i n t gdsLayer , double shapeReso ) 

// t e x t O u t l i n e 

p u b l i c s t a t i c void createTextOutline ( Struct currentStruct , S t r i n g 

t e x t S t r i n g , S t r i n g fontName , double fontSize , double x , double y , 

double fontOutlineWidth , i n t gdsLayer , double shapeReso , double 

THETA ) 

// textOutlineC 

p u b l i c s t a t i c A r r a y L i s t <GArea> createTextOutlineC ( S t r i n g t e x t S t r i n g , 

S t r i n g fontName , double fontSize , double x , double y , double THETA , 

double fontOutlineWidth , i n t gdsLayer , double shapeReso ) 

// textOutlineC 

p u b l i c s t a t i c void createTextOutlineC ( Struct currentStruct , S t r i n g 

t e x t S t r i n g , S t r i n g fontName , double fontSize , double x , double y , 

double fontOutlineWidth , i n t gdsLayer , double shapeReso , double 

THETA ) 

// labelMaker autoOut 

p u b l i c s t a t i c void createLabelMakerAutoOut ( i n t rows , i n t columns , 

S t r i n g fontName , double fontSize , double x , double y , double xRow , 

double yRow , double pitchX , double pitchY , Struct currentStruct , 

i n t gdsLayer , double shapeReso ) 

// labelMaker autoRowCol 

p u b l i c s t a t i c void createLabelMakerAutoRowCol ( i n t rows , i n t columns , 

S t r i n g fontName , double fontSize , double x , double y , double pitchX 

, double pitchY , Struct currentStruct , i n t gdsLayer , double 

shapeReso ) 

// labelMaker autoOutLett 

p u b l i c s t a t i c void createLabelMakerAutoOutLett ( i n t rows , i n t columns , 

S t r i n g fontName , double fontSize , double x , double y , double xRow , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 401 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double yRow , double pitchX , double pitchY , Struct currentStruct , 

i n t gdsLayer , double shapeReso ) 

// labelMaker autoRowColLett 

p u b l i c s t a t i c void createLabelMakerAutoRowColLett ( i n t rows , i n t columns 

, S t r i n g fontName , double fontSize , double x , double y , double 

pitchX , double pitchY , Struct currentStruct , i n t gdsLayer , double 

shapeReso ) 

// labelMaker CUSTOM OUTER 

p u b l i c s t a t i c void createLabelMakerCustomOuter ( S t r i n g [ ] stringArray , 

i n t rows , i n t columns , S t r i n g fontName , double fontSize , double x , 

double y , double xRow , double yRow , double pitchX , double pitchY , 

Struct str , i n t gdsLayer , double shapeReso ) 

// labelMaker CUSTOM ROW COLUMN l a b e l 

p u b l i c s t a t i c void createLabelMakerCustomRowColumn ( S t r i n g [ ] stringArray 

, i n t rows , i n t columns , S t r i n g fontName , double fontSize , double x 

, double y , double pitchX , double pitchY , Struct str , i n t gdsLayer , 

double shapeReso ) 

// l a b e l O u t l i n e autoOut 

p u b l i c s t a t i c void createLabelOutlineAutoOut ( i n t rows , i n t columns , 

S t r i n g fontName , double fontSize , double x , double y , double xRow , 

double yRow , double pitchX , double pitchY , Struct currentStruct , 

double fontOutlineWidth , i n t gdsLayer , double shapeReso ) 

// l a b e l O u t l i n e autoRowCol 

p u b l i c s t a t i c void createLabelOutlineAutoRowCol ( i n t rows , i n t columns , 

S t r i n g fontName , double fontSize , double x , double y , double pitchX 

, double pitchY , Struct currentStruct , double fontOutlineWidth , i n t 

gdsLayer , double shapeReso ) 

// l a b e l O u t l i n e autoOutLett 

p u b l i c s t a t i c void createLabelOutlineAutoOutLett ( i n t rows , i n t columns , 

S t r i n g fontName , double fontSize , double x , double y , double xRow , 

double yRow , double pitchX , double pitchY , Struct currentStruct , 

double fontOutlineWidth , i n t gdsLayer , double shapeReso ) 

// l a b e l O u t l i n e autoRowColLett 

p u b l i c s t a t i c void createLabelOutlineAutoRowColLett ( i n t rows , i n t 

columns , S t r i n g fontName , double fontSize , double x , double y , 

double pitchX , double pitchY , Struct currentStruct , double 

fontOutlineWidth , i n t gdsLayer , double shapeReso ) 

// l a b e l O u t l i n e CUSTOM OUTER 

p u b l i c s t a t i c void createLabelOutlineCustomOuter ( S t r i n g [ ] stringArray , 

i n t rows , i n t columns , S t r i n g fontName , double fontSize , double x , 

double y , double xRow , double yRow , double pitchX , double pitchY , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 402 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Struct str , double fontOutlineWidth , i n t gdsLayer , double shapeReso 

) 

// l a b e l O u t l i n e CUSTOM ROW COLUMN l a b e l 

p u b l i c s t a t i c void createLabelOutlineCustomRowColumn ( S t r i n g [ ] 

stringArray , i n t rows , i n t columns , S t r i n g fontName , double 

fontSize , double x , double y , double pitchX , double pitchY , Struct 

str , double fontOutlineWidth , i n t gdsLayer , double shapeReso ) 

// p o s t S c r i p t 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e P o s t S c r i p t ( double x , double y , 

S t r i n g s , i n t fractureSegments , double THETA , double shapeReso , 

double pixelValue , i n t gdsLayer ) 

// p o s t S c r i p t 

p u b l i c s t a t i c void c r e a t e P o s t S c r i p t ( Struct currentStruct , double x , 

double y , S t r i n g s , i n t fractureSegments , double THETA , double 

shapeReso , double pixelValue , i n t gdsLayer ) 

// cnstEmblem 

p u b l i c s t a t i c GArea createCnstEmblemLogo ( double x , double y , double 

scale , double THETA , double shapeReso , i n t gdsLayer ) throws 

FileNotFoundException 

// cnstLogo 

p u b l i c s t a t i c GArea createCnstLogo ( double x , double y , double scale , 

double THETA , double shapeReso , i n t gdsLayer ) throws 

FileNotFoundException 

// nistLogo 

p u b l i c s t a t i c GArea createNistLogo ( double x , double y , double scale , 

double THETA , double shapeReso , i n t gdsLayer ) throws 

FileNotFoundException 

// nistCnstLogo 

p u b l i c s t a t i c GArea getNistCnstLogo ( double x , double y , double scale , 

double THETA , double shapeReso , i n t gdsLayer ) throws 

FileNotFoundException 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 403 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.6 Miscellaneous Object Methods

// a r c S q u a r e F i l l 

p u b l i c s t a t i c void c r e a t e A r c S q u a r e F i l l ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double r I n , double rOut , 

double angleStart , double angleEnd , i n t numSides , double THETA , 

double rSmallObject , i n t numSidesSmallObject , double pitchX , i n t 

gdsLayer ) 

// a r c S q u a r e F i l l V 

p u b l i c s t a t i c void cre ateArcSqua reFillV ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double r I n , double rOut , 

double angleStart , double angleEnd , i n t numSides , double THETA , 

double rSmallObject , double pitchX , double shapeReso , i n t gdsLayer ) 

// a r c H e x F i l l 

p u b l i c s t a t i c void c r e a t e A r c H e x F i l l ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double r I n , double rOut , 

double angleStart , double angleEnd , i n t numSides , double THETA , 

double rSmallObject , i n t numSidesSmallObject , double pitchX , i n t 

gdsLayer ) 

// a r c S q u a r e F i l l V 

p u b l i c s t a t i c void c r e a t e A r c H e x F i l l V ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double r I n , double rOut , 

double angleStart , double angleEnd , i n t numSides , double THETA , 

double rSmallObject , double pitchX , double shapeReso , i n t gdsLayer ) 

// bezierCurve 

p u b l i c s t a t i c GArea createBezierCurve ( double x1 , double y1 , double cx1 , 

double cy1 , double cx2 , double cy2 , double x2 , double y2 , double 

width , double shapeReso , double THETA , i n t gdsLayer ) 

// bezierCurveInv 

p u b l i c s t a t i c GArea createBezierCurveInv ( double x1 , double y1 , double 

cx1 , double cy1 , double cx2 , double cy2 , double x2 , double y2 , 

double sleeveWidth , double slotWidth , double shapeReso , double 

THETA , i n t gdsLayer ) 

// b e z i e r C u r v e I n v S l o t 

p u b l i c s t a t i c GArea c r e a t e B e z i e r C u r v e I n v S l o t ( double x1 , double y1 , 

double cx1 , double cy1 , double cx2 , double cy2 , double x2 , double 

y2 , double sleeveWidth , double slotWidth , double gap , double 

shapeReso , double THETA , i n t gdsLayer ) 

// s i e r p i n s k i T r i a n g l e 

p u b l i c s t a t i c void c r e a t e S i e r p i n s k i T r i a n g l e ( Struct currentStruct , 

S t r i n g shortStructName , double x , double y , i n t i t e r a t i o n s , double 

length , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 404 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// s i e r p i n s k i C a r p e t 

p u b l i c s t a t i c void c r e a t e S i e r p i n s k i C a r p e t ( Struct currentStruct , S t r i n g 

shortStructName , double x , double y , i n t i t e r a t i o n s , double length , 

i n t gdsLayer ) 

// v i c s e k S a l t i r e 

p u b l i c s t a t i c void c r e a t e V i c s e k S a l t i r e ( Struct currentStruct , S t r i n g 

shortStructName , double x , double y , i n t i t e r a t i o n s , double length , 

i n t gdsLayer ) 

// vicsekCross 

p u b l i c s t a t i c void createVicsekCross ( Struct currentStruct , S t r i n g 

shortStructName , double x , double y , i n t i t e r a t i o n s , double length , 

i n t gdsLayer ) 

// curvedTree 

p u b l i c s t a t i c void createCurvedTree ( Struct currentStruct , S t r i n g 

shortStructName , double x , double y , double length , double width , 

i n t i t e r a t i o n s , i n t gdsLayer ) 

// anotherTree f r a c t a l − undocumented F r a c t a l 

p u b l i c s t a t i c void createAnotherTree ( Struct currentStruct , S t r i n g 

shortStructName , double x , double y , i n t i t e r a t i o n s , i n t gdsLayer ) 

// complex tree f r a c t a l − undocumented F r a c t a l − vary parameters 

p u b l i c s t a t i c void createTree ( Struct currentStruct , S t r i n g 

shortStructName , double x , double y , double d , double ang , double 

r a t i o , i n t depth , i n t gdsLayer ) 

// functionXY 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFunctionXY ( S t r i n g function , double 

xLowerLimit , double xUpperLimit , i n t N, double W, i n t CAP , i n t 

JOIN , i n t gdsLayer ) throws S c r i p t E x c e p t i o n 

// functionXY 

p u b l i c s t a t i c void createFunctionXY ( Struct currentStruct , S t r i n g 

function , double x , double y , double xLowerLimit , double 

xUpperLimit , i n t N, double W, i n t CAP , i n t JOIN , double THETA ) 

throws S c r i p t E x c e p t i o n 

// functionRTheta 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFunctionRTheta ( S t r i n g function , 

double x , double y , double thetaLowerLimit , double thetaUpperLimit , 

i n t N, double W, i n t CAP , i n t JOIN , i n t gdsLayer ) throws 

S c r i p t E x c e p t i o n 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 405 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// functionRTheta 

p u b l i c s t a t i c void createFunctionRTheta ( Struct currentStruct , S t r i n g 

function , double x , double y , double thetaLowerLimit , double 

thetaUpperLimit , i n t N, double W, i n t CAP , i n t JOIN , double THETA ) 

throws S c r i p t E x c e p t i o n 

// grayERamp 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayERamp ( double x , double y , 

double dX , double dY , i n t numberOfSegments , double THETA ) 

// grayERamp 

p u b l i c s t a t i c void createGrayERamp ( Struct currentStruct , double x , 

double y , double dX , double dY , i n t numberOfSegments , double THETA ) 

// grayENgon 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayENgon ( double x , double y , 

double radX , double radY , i n t numberOfSegments , i n t numSides , 

double THETA ) 

// grayENgon 

p u b l i c s t a t i c void createGrayENgon ( Struct currentStruct , double x , 

double y , double radX , double radY , i n t numberOfSegments , i n t 

numSides , double THETA ) 

// grayUDR − a l contains dx and dy coordinate p a i r s 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayUDR ( double x , double y , 

A r r a y L i s t <Double> al , double THETA ) 

// grayUDR − a l contains dx and dy coordinate p a i r s 

p u b l i c s t a t i c void createGrayUDR ( Struct currentStruct , double x , double 

y , A r r a y L i s t <Double> al , double THETA ) 

// grayUDNgon − a l contains dx and dy coordinate p a i r s 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayUDNgon ( double x , double y , 

A r r a y L i s t <Double> al , i n t numSides , double THETA ) 

// grayUDNgon − a l contains dx and dy coordinate p a i r s 

p u b l i c s t a t i c void createGrayUDNgon ( Struct currentStruct , double x , 

double y , A r r a y L i s t <Double> al , i n t numSides , double THETA ) 

// grayERamp − UP = true or f a l s e 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayERamp ( double x , double y , 

double dX , double dY , i n t numberOfSegments , boolean UP , double 

THETA ) 

// grayERamp − UP = true or f a l s e 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 406 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

p u b l i c s t a t i c void createGrayERamp ( Struct currentStruct , double x , 

double y , double dX , double dY , i n t numberOfSegments , boolean UP , 

double THETA ) 

// grayERamp2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayERamp2 ( double x , double y , 

double dX , double dY , i n t numberOfSegments , double THETA ) 

// grayERamp2 

p u b l i c s t a t i c void createGrayERamp2 ( Struct currentStruct , double x , 

double y , double dX , double dY , i n t numberOfSegments , double THETA ) 

// grayUDRamp − a l contains x1 , x2 , . . . . xn 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayUDRamp ( double x , double y , 

A r r a y L i s t <Double> al , double dY , boolean UP , double THETA ) 

// grayUDRamp − a l contains x1 , x2 , . . . . xn 

p u b l i c s t a t i c void createGrayUDRamp ( Struct currentStruct , double x , 

double y , A r r a y L i s t <Double> al , double dY , boolean UP , double THETA ) 

// grayUDRamp2 − a l contains x1 , x2 , . . . . xn 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGrayUDRamp2 ( double x , double y , 

A r r a y L i s t <Double> al , double dY , double THETA ) 

// grayUDRamp2 − a l contains x1 , x2 , . . . . xn 

p u b l i c s t a t i c void createGrayUDRamp2 ( Struct currentStruct , double x , 

double y , A r r a y L i s t <Double> al , double dY , double THETA ) 

// g r a y S p i r a l S t a i r O v e r l a p − create grayscale OVERLAPPING ARCs 

p u b l i c s t a t i c void c r e a t e G r a y S p i r a l S t a i r O v e r l a p ( Struct currentStruct , 

double x , double y , double r I n , double rOut , i n t numSegments , i n t 

numSides , double THETA ) 

// g r a y S p i r a l S t a i r − create grayscale NON−Overlapping ARCs 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e S p i r a l S t a i r ( double x , double y , 

double r I n , double rOut , i n t numSegments , i n t numSides , double 

THETA ) 

// g r a y S p i r a l S t a i r − create grayscale NON−Overlapping ARCs 

p u b l i c s t a t i c void c r e a t e G r a y S p i r a l S t a i r ( Struct currentStruct , double x 

, double y , double r I n , double rOut , i n t numSegments , i n t numSides , 

double THETA ) 

// i n t E l e c 1 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e I n t E l e c 1 ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , 

double overlap , i n t numElectrodes , double pitch , double baseHeight , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 407 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 1 

p u b l i c s t a t i c void c r e a t e I n t E l e c 1 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , double overlap , i n t numElectrodes , double pitch , double 

baseHeight , double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 2 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e I n t E l e c 2 ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , 

double overlap , i n t numElectrodes , double pitch , double baseHeight , 

double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 2 

p u b l i c s t a t i c void c r e a t e I n t E l e c 2 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , double overlap , i n t numElectrodes , double pitch , double 

baseHeight , double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 3 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e I n t E l e c 3 ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , 

double overlap , i n t numElectrodes , double pitch , double baseHeight , 

double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 3 

p u b l i c s t a t i c void c r e a t e I n t E l e c 3 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , double overlap , i n t numElectrodes , double pitch , double 

baseHeight , double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 4 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e I n t E l e c 4 ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , 

double overlap , i n t numElectrodes , double pitch , double baseHeight , 

double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 4 

p u b l i c s t a t i c void c r e a t e I n t E l e c 4 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , double overlap , i n t numElectrodes , double pitch , double 

baseHeight , double baseWidth , double THETA , i n t gdsLayer ) 

// i n t E l e c 5 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e I n t E l e c 5 ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , 

double overlap , i n t numElectrodes , double pitch , double baseHeight , 

double baseWidth , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 408 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// i n t E l e c 5 

p u b l i c s t a t i c void c r e a t e I n t E l e c 5 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , double overlap , i n t numElectrodes , double pitch , double 

baseHeight , double baseWidth , double THETA , i n t gdsLayer ) 

// tJunction 

p u b l i c s t a t i c A r r a y L i s t <GArea> createTjunction ( double x , double y , 

double w1 , double w2 , double L1 , double L2 , double rad , i n t 

numSides , double THETA , i n t gdsLayer ) 

// tJunction 

p u b l i c s t a t i c void createTjunction ( Struct currentStruct , double x , 

double y , double w1 , double w2 , double L1 , double L2 , double rad , 

i n t numSides , double THETA , i n t gdsLayer ) 

// hJunction 

p u b l i c s t a t i c A r r a y L i s t <GArea> createHjunction ( double x , double y , 

double w1 , double w2 , double L1 , double L2 , double rad , i n t 

numSides , double THETA , i n t gdsLayer ) 

// hJunction 

p u b l i c s t a t i c void createHjunction ( Struct currentStruct , double x , 

double y , double w1 , double w2 , double L1 , double L2 , double rad , 

i n t numSides , double THETA , i n t gdsLayer ) 

// arrowJunction 

p u b l i c s t a t i c A r r a y L i s t <GArea> createArrowJunction ( double x , double y , 

double w1 , double w2 , double L1 , double L2 , double rad , i n t 

numSides , double junctionAngle , double THETA , i n t gdsLayer ) 

// arrowJunction 

p u b l i c s t a t i c void createArrowJunction ( Struct currentStruct , double x , 

double y , double w1 , double w2 , double L1 , double L2 , double rad , 

i n t numSides , double junctionAngle , double THETA , i n t gdsLayer ) 

// meanderSin 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMeanderSin ( double x , double y , 

double L1 , double H1 , double L2 , double H2 , double width , double 

amplitude , i n t numPeriods , i n t numCurveSegments , double a , double b 

, double c , double THETA , i n t gdsLayer ) 

// meanderSin 

p u b l i c s t a t i c void createMeanderSin ( Struct currentStruct , double x , 

double y , double L1 , double H1 , double L2 , double H2 , double width , 

double amplitude , i n t numPeriods , i n t numCurveSegments , double a , 

double b , double c , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 409 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// meanderSqr 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMeanderSqr ( double x , double y , 

double L1 , double H1 , double L2 , double H2 , double width , double 

amplitude , i n t numPeriods , double a , double b , double c , double 

THETA , i n t gdsLayer ) 

// meanderSqr 

p u b l i c s t a t i c void createMeanderSqr ( Struct currentStruct , double x , 

double y , double L1 , double H1 , double L2 , double H2 , double width , 

double amplitude , i n t numPeriods , double a , double b , double c , 

double THETA , i n t gdsLayer ) 

// meanderRamp 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMeanderRamp ( double x , double y , 

double L1 , double H1 , double L2 , double H2 , double width , double 

amplitude , i n t numPeriods , double a , double b , double c , double 

THETA , i n t gdsLayer ) 

// meanderRamp 

p u b l i c s t a t i c void createMeanderRamp ( Struct currentStruct , double x , 

double y , double L1 , double H1 , double L2 , double H2 , double width , 

double amplitude , i n t numPeriods , double a , double b , double c , 

double THETA , i n t gdsLayer ) 

// meanderTri 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMeanderTri ( double x , double y , 

double L1 , double H1 , double L2 , double H2 , double width , double 

amplitude , i n t numPeriods , double a , double b , double c , double 

THETA , i n t gdsLayer ) 

// meanderTri 

p u b l i c s t a t i c void createMeanderTri ( Struct currentStruct , double x , 

double y , double L1 , double H1 , double L2 , double H2 , double width , 

double amplitude , i n t numPeriods , double a , double b , double c , 

double THETA , i n t gdsLayer ) 

// points2shape 

p u b l i c s t a t i c GArea createPoints2Shape ( double x , double y , A r r a y L i s t <

Double> al , double THETA , i n t gdsLayer ) 

// polypath 

p u b l i c s t a t i c GArea createPolyPath ( double x , double y , A r r a y L i s t <Double 

> al , double width , i n t CAP , i n t JOIN , double THETA , i n t gdsLayer ) 

// randomPolygons 

p u b l i c s t a t i c void createRandomPolygons ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double width , double height , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 410 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double radius , i n t numSides , double separation , i n t numElements , 

i n t i t e r a t i o n s , boolean RANDOMROTATION, i n t gdsLayer ) 

// randomEllipses 

p u b l i c s t a t i c void createRandomEllipses ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double width , double height , 

double radiusX , double radiusY , i n t numSides , double separation , 

i n t numElements , i n t i t e r a t i o n s , boolean RANDOMROTATION, i n t 

gdsLayer ) 

// randomEllipsesV 

p u b l i c s t a t i c void createRandomEllipsesV ( Struct currentStruct , S t r i n g 

uniqueStructName , double x , double y , double width , double height , 

double radiusX , double radiusY , double separation , i n t numElements , 

i n t i t e r a t i o n s , boolean RANDOMROTATION, i n t gdsLayer , double 

shapeReso ) 

// resoPattern 

p u b l i c s t a t i c A r r a y L i s t <GArea> createResoPattern ( double x , double y , 

double rad , double width , double THETA , i n t gdsLayer ) 

// resoPattern 

p u b l i c s t a t i c void createResoPattern ( Struct currentStruct , double x , 

double y , double rad , double width , double THETA , i n t gdsLayer ) 

// r e s o P a t t e r n P i 

p u b l i c s t a t i c A r r a y L i s t <GArea> createResoPatternPi ( double x , double y , 

double rad , double width , i n t n , double THETA , i n t gdsLayer ) 

// r e s o P a t t e r n P i 

p u b l i c s t a t i c void createResoPatternPi ( Struct currentStruct , double x , 

double y , double rad , double width , i n t n , double THETA , i n t 

gdsLayer ) 

// resoPatternRS 

p u b l i c s t a t i c GArea createResoPatternRS ( double x , double y , double W, 

double H, i n t numberOfLines , double THETA , i n t gdsLayer , double 

shapeReso ) 

// resoPatternRS 

p u b l i c s t a t i c void createResoPatternRS ( Struct currentStruct , double x , 

double y , double W, double H, i n t numberOfLines , double THETA , i n t 

gdsLayer , double shapeReso ) 

// resoPatternRSA 

p u b l i c s t a t i c A r r a y L i s t <GArea> createResoPatternRSA ( double x , double y , 

double startW , double endW , double delta , double H, i n t 

numberOfLines , double space , double THETA , i n t gdsLayer , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 411 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

shapeReso ) 

// resoPatternRSA 

p u b l i c s t a t i c void createResoPatternRSA ( Struct currentStruct , double x , 

double y , double startW , double endW , double delta , double H, i n t 

numberOfLines , double space , double THETA , i n t gdsLayer , double 

shapeReso ) 

// resoPatternLS 

p u b l i c s t a t i c GArea createResoPatternLS ( double x , double y , double W, 

double H, i n t numberOfLines , double THETA , i n t gdsLayer , double 

shapeReso ) 

// resoPatternLS 

p u b l i c s t a t i c void createResoPatternLS ( Struct currentStruct , double x , 

double y , double W, double H, i n t numberOfLines , double THETA , i n t 

gdsLayer , double shapeReso ) 

// resoPatternLSA 

p u b l i c s t a t i c A r r a y L i s t <GArea> createResoPatternLSA ( double x , double y , 

double startW , double endW , double delta , double H, i n t 

numberOfLines , double space , double THETA , i n t gdsLayer , double 

shapeReso ) 

// resoPatternLSA 

p u b l i c s t a t i c void createResoPatternLSA ( Struct currentStruct , double x , 

double y , double startW , double endW , double delta , double H, i n t 

numberOfLines , double space , double THETA , i n t gdsLayer , double 

shapeReso ) 

// s p i r a l A r c h 

p u b l i c s t a t i c A r r a y L i s t <GArea> cr eat eS pir alA rch ( double x , double y , 

double width , i n t turns , double separation , double inc , double 

THETA , i n t gdsLayer ) 

// s p i r a l A r c h 

p u b l i c s t a t i c void cre ate Spi ral Ar ch ( Struct currentStruct , double x , 

double y , double width , i n t turns , double separation , double inc , 

double THETA , i n t gdsLayer ) 

// spiralFermat 

p u b l i c s t a t i c A r r a y L i s t <GArea> createSpiralFermat ( double x , double y , 

double width , i n t turns , double a , double inc , double THETA , i n t 

gdsLayer ) 

// spiralFermat 

p u b l i c s t a t i c void createSpiralFermat ( Struct currentStruct , double x , 

double y , double width , i n t turns , double a , double inc , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 412 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

THETA , i n t gdsLayer ) 

// s p i r a l L o g 

p u b l i c s t a t i c A r r a y L i s t <GArea> createSpiralLog ( double x , double y , 

double width , i n t turns , double a , double b , double inc , double 

THETA , i n t gdsLayer ) 

// s p i r a l L o g 

p u b l i c s t a t i c void createSpiralLog ( Struct currentStruct , double x , 

double y , double width , i n t turns , double a , double b , double inc , 

double THETA , i n t gdsLayer ) 

// s p i r a l R e c t 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e S p i r a l R e c t ( double x , double y , 

double width , double len , double pitch , i n t numTurns , double THETA , 

i n t gdsLayer ) 

// s p i r a l R e c t 

p u b l i c s t a t i c void c r e a t e S p i r a l R e c t ( Struct currentStruct , double x , 

double y , double width , double len , double pitch , i n t numTurns , 

double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 413 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.7 Alignment and Reticle Element Methods

// alignFFFB1 

p u b l i c s t a t i c A r r a y L i s t <GArea> createAlignFFFB1 ( double x , double y , i n t 

layerCross , i n t layerSquare , double THETA ) 

// alignFFFB1 

p u b l i c s t a t i c void createAlignFFFB1 ( Struct currentStruct , double x , 

double y , i n t layerCross , i n t layerSquare , double THETA ) 

// alignFFFB2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createAlignFFFB2 ( double x , double y , i n t 

layerCross , i n t layerSquare , double THETA ) 

// alignFFFB2 

p u b l i c s t a t i c void createAlignFFFB2 ( Struct currentStruct , double x , 

double y , i n t layerCross , i n t layerSquare , double THETA ) 

// a l i g n 3 L e v e l 

p u b l i c s t a t i c A r r a y L i s t <GArea> createAlign3Level ( double x , double y , 

i n t layerA , i n t layerB , i n t layerC , double THETA ) 

// a l i g n 3 L e v e l 

p u b l i c s t a t i c void createAlign3Level ( Struct currentStruct , double x , 

double y , i n t layerA , i n t layerB , i n t layerC , double THETA ) 

// alignVern 

p u b l i c s t a t i c A r r a y L i s t <GArea> createAlignVern ( double x , double y , i n t 

layer1 , i n t layer2 , double vernReso , boolean L1INV , boolean L2INV , 

double invL , double invW , double THETA ) 

// alignVern 

p u b l i c s t a t i c void createAlignVern ( Struct currentStruct , double x , 

double y , i n t layer1 , i n t layer2 , double vernReso , boolean L1INV , 

boolean L2INV , double invL , double invW , double THETA ) 

// alignVernLb1 

p u b l i c s t a t i c A r r a y L i s t <GArea> createAlignVernLb1 ( double x , double y , 

i n t layer1 , i n t layer2 , double vernReso , double THETA ) 

// alignVernLb1 

p u b l i c s t a t i c void createAlignVernLb1 ( Struct currentStruct , double x , 

double y , i n t layer1 , i n t layer2 , double vernReso , double THETA ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 414 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// alignVernLb2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createAlignVernLb2 ( double x , double y , 

i n t layer1 , i n t layer2 , double vernReso , double THETA ) 

// alignVernLb2 

p u b l i c s t a t i c void createAlignVernLb2 ( Struct currentStruct , double x , 

double y , i n t layer1 , i n t layer2 , double vernReso , double THETA ) 

// alignCustC1 

p u b l i c s t a t i c GArea createCustomCrossC1 ( double x , double y , double L1 , 

double W1, double L2 , boolean INVERSE , double IL , double IW , i n t 

TYPE , double THETA , i n t gdsLayer ) 

// alignCustC2 

p u b l i c s t a t i c GArea createCustomCrossC2 ( double x , double y , double L1 , 

double W1, double PL , double PW, boolean INVERSE , double IL , double 

IW , i n t TYPE , double THETA , i n t gdsLayer ) 

// alignCustC3 

p u b l i c s t a t i c GArea createCustomCrossC3 ( double x , double y , double L1 , 

double W1, double PL , double PW, double LX , boolean INVERSE , double 

IL , double IW , i n t TYPE , double THETA , i n t gdsLayer ) 

// alignCustC4 

p u b l i c s t a t i c GArea createCustomCrossC4 ( double x , double y , double L1 , 

double W1, double L2 , double d , double BL , double BW, boolean 

INVERSE , double IL , double IW , i n t TYPE , double THETA , i n t gdsLayer 

) 

// cnstASML 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCnstASML ( S t r i n g label , S t r i n g 

barcode , i n t gdsLayer ) throws FileNotFoundException 

// cnstASML 

p u b l i c s t a t i c void createCnstASML ( Struct currentStruct , S t r i n g label , 

S t r i n g barcode , boolean MIRROR , i n t gdsLayer ) throws 

FileNotFoundException 

// cnstContact5 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCnstContact5 ( S t r i n g label , i n t 

gdsLayer ) throws FileNotFoundException 

// cnstContact5 

p u b l i c s t a t i c void createCnstContact5 ( Struct currentStruct , S t r i n g 

label , boolean MIRROR , i n t gdsLayer ) throws FileNotFoundException 

// cnstContact7 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 415 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCnstContact7 ( S t r i n g label , i n t 

gdsLayer ) throws FileNotFoundException 

// cnstContact7 

p u b l i c s t a t i c void createCnstContact7 ( Struct currentStruct , S t r i n g 

label , boolean MIRROR , i n t gdsLayer ) throws FileNotFoundException 

// alignCustVern 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCustomVerniers ( double x , double y , 

i n t layer1 , i n t layer2 , double L , double W, double pitch , double 

vernReso , double spacing , boolean INVERSE1 , boolean INVERSE2 , 

double IL , double IW , double THETA , double shapeReso ) 

// alignCustVern 

p u b l i c s t a t i c void createCustomVerniers ( Struct currentStruct , double x , 

double y , i n t layer1 , i n t layer2 , double L , double W, double pitch 

, double vernReso , double spacing , boolean INVERSE1 , boolean 

INVERSE2 , double IL , double IW , double THETA , i n t gdsLayer , double 

shapeReso ) 

// v e r n i e r s − custom v e r n i e r s with t e x t l a b e l s 

p u b l i c s t a t i c A r r a y L i s t <GArea> createVerniers ( double x , double y , i n t 

layer1 , i n t layer2 , double vernierReso , i n t t i c k s , S t r i n g label1 , 

S t r i n g label2 , double fontSize , double fontReso , double lineWidth , 

double lineLength , double pitch , double THETA ) 

// v e r n i e r s − custom v e r n i e r s with t e x t l a b e l s 

p u b l i c s t a t i c void createVerniers ( Struct currentStruct , double x , 

double y , i n t layer1 , i n t layer2 , double vernierReso , i n t t i c k s , 

S t r i n g label1 , S t r i n g label2 , double fontSize , double fontReso , 

double lineWidth , double lineLength , double pitch , double THETA ) 

// arrowHead 

p u b l i c s t a t i c GArea createArrowHead ( double x , double y , double arrowW , 

double arrowL , double width , double THETA , i n t gdsLayer ) 

// arrow 

p u b l i c s t a t i c GArea createArrow ( double x , double y , double arrowW , 

double arrowL , double width , double length , double THETA , i n t 

gdsLayer ) 

// arrowArray 

p u b l i c s t a t i c GArea createArrowLinearArray ( double x , double y , double 

arrowW , double arrowL , double width , double length , i n t 

numberOfArrows , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 416 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.8 Nanophotonics Library Methods

// waveguide 

p u b l i c s t a t i c GArea createWaveGuide ( double x1 , double y1 , double x2 , 

double y2 , double w, double THETA , i n t ENDCAPLEFT , i n t ENDCAPRIGHT , 

i n t gdsLayer ) 

// waveguideSlot 

p u b l i c s t a t i c GArea createWaveGuideSlot ( double x1 , double y1 , double x2 

, double y2 , double w, double slotWidth , double THETA , i n t 

ENDCAPLEFT , i n t ENDCAPRIGHT , i n t gdsLayer ) 

// waveguideInv 

p u b l i c s t a t i c GArea createWaveGuideInv ( double x1 , double y1 , double x2 , 

double y2 , double w, double invWidth , double THETA , i n t ENDCAPLEFT 

, i n t ENDCAPRIGHT , i n t gdsLayer ) 

// waveguideInvSlot 

p u b l i c s t a t i c GArea createWaveGuideInvSlot ( double x1 , double y1 , double 

x2 , double y2 , double w, double slotWidth , double invWidth , double 

THETA , i n t ENDCAPLEFT , i n t ENDCAPRIGHT , i n t gdsLayer ) 

// wgExpander 

p u b l i c s t a t i c GArea createWaveGuideExpander ( double x , double y , double 

width , double length , double deltaLength , double a , double b , 

double angle , double w0 , double lambda , double baseHeight , double 

THETA , i n t gdsLayer ) 

// linearTaper 

p u b l i c s t a t i c GArea createLinearTaper ( double x1 , double y1 , double x2 , 

double y2 , double w1 , double w2 , double THETA , i n t gdsLayer ) 

// l i n e a r T a p e r S l o t 

p u b l i c s t a t i c A r r a y L i s t <GArea> createLinearTaperSlot ( double x1 , double 

y1 , double x2 , double y2 , double w1 , double w2 , double slotWidth1 , 

double slotWidth2 , double THETA , i n t gdsLayer ) 

// l i n e a r T a p e r S l o t 

p u b l i c s t a t i c void createLinearTaperSlot ( Struct currentStruct , double 

x1 , double y1 , double x2 , double y2 , double w1 , double w2 , double 

slotWidth1 , double slotWidth2 , double THETA , i n t gdsLayer ) 

// l i n e a r T a p e r I n v S l o t 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e L i n e a r T a p e r I n v S l o t ( double x1 , 

double y1 , double x2 , double y2 , double w1 , double w2 , double gap , 

double slotWidth1 , double slotWidth2 , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 417 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// l i n e a r T a p e r I n v S l o t 

p u b l i c s t a t i c void c r e a t e L i n e a r T a p e r I n v S l o t ( Struct currentStruct , 

double x1 , double y1 , double x2 , double y2 , double w1 , double w2 , 

double gap , double slotWidth1 , double slotWidth2 , double THETA , i n t 

gdsLayer ) 

// exponentialTaper 

p u b l i c s t a t i c GArea createExponentialTaper ( double x1 , double y1 , double 

L , double W1, double W2, i n t numPoints , double THETA , i n t gdsLayer , 

double shapeReso ) 

// exponentialTaperInv 

p u b l i c s t a t i c A r r a y L i s t <GArea> createExpTaperInv ( double x1 , double y1 , 

double length , double wStart , double wEnd , i n t nPoints , double 

widthAround , double THETA , i n t gdsLayer , double shapeReso ) 

// exponentialTaperInv 

p u b l i c s t a t i c void createExpTaperInv ( Struct currentStruct , double x1 , 

double y1 , double length , double wStart , double wEnd , i n t nPoints , 

double widthAround , double THETA , i n t gdsLayer , double shapeReso ) 

// e x p o n e n t i a l T a p e r I n v S l o t 

p u b l i c s t a t i c A r r a y L i s t <GArea> createExpTaperInvSlot ( double x1 , double 

y1 , double length , double wStart , double wEnd , i n t nPoints , double 

inverseWidth , double slotW1 , double slotW2 , double THETA , i n t 

gdsLayer , double shapeReso ) 

// e x p o n e n t i a l T a p e r I n v S l o t 

p u b l i c s t a t i c void createExpTaperInvSlot ( Struct currentStruct , double 

x1 , double y1 , double length , double wStart , double wEnd , i n t 

nPoints , double inverseWidth , double slotW1 , double slotW2 , double 

THETA , i n t gdsLayer , double shapeReso ) 

// customTaper 

p u b l i c s t a t i c GArea createCustomTaper ( A r r a y L i s t <Double> al , double Tx , 

double Ty , double THETA , i n t gdsLayer ) 

// d i r e c t i o n a l C o u p l e r 1 

p u b l i c s t a t i c GArea c r e a t e D i r e c t i o n a l C o u p l e r 1 ( double x , double y , 

double L1 , double w1 , double we1 , double L2 , double L3 , double w2 , 

double we2 , double g , double r , i n t numSides , double THETA , i n t 

gdsLayer ) 

// d i r e c t i o n a l C o u p l e r 2 

p u b l i c s t a t i c GArea c r e a t e D i r e c t i o n a l C o u p l e r 2 ( double x , double y , 

double L1 , double w1 , double we1 , double L2 , double L3 , double w2 , 

double we2 , double g , double r , i n t numSides , double THETA , i n t 

gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 418 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// d i r e c t i o n a l C o u p l e r 3 

p u b l i c s t a t i c GArea c r e a t e D i r e c t i o n a l C o u p l e r 3 ( double x , double y , 

double w, double wE , double g , double L1 , double L2 , double r , i n t 

numSides , double THETA , i n t gdsLayer ) 

// d i r e c t i o n a l C o u p l e r 4 

p u b l i c s t a t i c GArea c r e a t e D i r e c t i o n a l C o u p l e r 4 ( double x , double y , 

double w, double wE , double g , double L1 , double LB , double HB , 

double THETA , i n t gdsLayer ) 

// sBendTaper 

p u b l i c s t a t i c GArea createSbendTaper ( double x , double y , double L , 

double H, double wStart , double wEnd , double THETA , i n t gdsLayer , 

double shapeReso ) 

// sBendFunnel 

p u b l i c s t a t i c GArea createSbendFunnel ( double x , double y , double L , 

double H, double W, double THETA , i n t gdsLayer , double shapeReso ) 

// sBend 

p u b l i c s t a t i c GArea createSbend ( double x1 , double y1 , double x2 , double 

y2 , double width , double THETA , i n t gdsLayer , double shapeReso ) 

// sBendLH 

p u b l i c s t a t i c GArea createSbendLH ( double x1 , double y1 , double length , 

double height , double width , double THETA , i n t gdsLayer , double 

shapeReso ) 

// sBendInv 

p u b l i c s t a t i c GArea createSbendInv ( double x1 , double y1 , double length , 

double height , double width , double sleeve , double THETA , i n t 

gdsLayer , double shapeReso ) 

// sBendInvSlot 

p u b l i c s t a t i c GArea createSbendInvSlot ( double x , double y , double 

length , double height , double slotWidth , double gap , double sleeve , 

double THETA , i n t gdsLayer , double shapeReso ) 

// yBend 

p u b l i c s t a t i c GArea createYbend ( double x1 , double y1 , double x2 , double 

y2 , double x3 , double y3 , double width , double THETA , i n t gdsLayer 

, double shapeReso ) 

// yBendLH 

p u b l i c s t a t i c GArea createYbendLH ( double x1 , double y1 , double length2 , 

double height2 , double length3 , double height3 , double width , 

double THETA , i n t gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 419 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// yBendInv 

p u b l i c s t a t i c GArea createYbendInv ( double x1 , double y1 , double length2 

, double height2 , double length3 , double height3 , double width , 

double sleeve , double THETA , i n t gdsLayer , double shapeReso ) 

// yBendInvSlot 

p u b l i c s t a t i c GArea createYbendInvSlot ( double x1 , double y1 , double 

length2 , double height2 , double length3 , double height3 , double 

slotWidth , double gap , double sleeve , double THETA , i n t gdsLayer , 

double shapeReso ) 

// yBend90 

p u b l i c s t a t i c GArea createYBend90 ( double x , double y , double r1 , double 

r2 , double w, i n t numSides , double THETA , i n t gdsLayer ) 

// yBendInv90 

p u b l i c s t a t i c GArea createYBendInv90 ( double x , double y , double r1 , 

double r2 , double w, double we , i n t numSides , double THETA , i n t 

gdsLayer ) 

// yBendInvSlot90 

p u b l i c s t a t i c GArea createYBendInvSlot90 ( double x , double y , double r1 , 

double r2 , double ws , double g , double we , i n t numSides , double 

THETA , i n t gdsLayer ) 

// 90degreeBend 

p u b l i c s t a t i c GArea create90degreeBend ( double x1 , double y1 , double x2 , 

double y2 , double width , double THETA , i n t gdsLayer , double 

shapeReso ) 

// 90degreeBendLH 

p u b l i c s t a t i c GArea create90degreeBendLH ( double x1 , double y1 , double 

length , double height , double width , double THETA , i n t gdsLayer , 

double shapeReso ) 

// 90degreeBendInv 

p u b l i c s t a t i c GArea create90degreeInv ( double x1 , double y1 , double 

length , double height , double width , double sleeve , double THETA , 

i n t gdsLayer , double shapeReso ) 

// 90degreeBendInvSlot 

p u b l i c s t a t i c GArea create90degreeInvSlot ( double x1 , double y1 , double 

length , double height , double slotWidth , double gap , double sleeve , 

double THETA , i n t gdsLayer , double shapeReso ) 

// 180degreeBend 

p u b l i c s t a t i c GArea create180bend ( double x , double y , double L1 , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 420 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

L2 , double D , double W, i n t numSides , double THETA , i n t gdsLayer ) 

// 180degreeBendInv 

p u b l i c s t a t i c GArea create180bendInv ( double x , double y , double L1 , 

double L2 , double D , double W, double We, i n t numSides , double 

THETA , i n t gdsLayer ) 

// 180degreeBendInvSlot 

p u b l i c s t a t i c GArea create180bendInvSlot ( double x , double y , double L1 , 

double L2 , double D , double W, double gap , double We, i n t numSides 

, double THETA , i n t gdsLayer ) 

// raceTrack 

p u b l i c s t a t i c GArea createRaceTrack ( double x , double y , double length , 

double width , double radiusInner , double THETA , i n t numSides , i n t 

gdsLayer ) 

// s p i r a l D e l a y L i n e A r c h 

p u b l i c s t a t i c A r r a y L i s t <GArea> createSpiralDelayLineArch ( double x , 

double y , double width , i n t turns , double separation , double deltaR 

, double length , double THETA , i n t ENDCAP , i n t gdsLayer ) 

// s p i r a l D e l a y L i n e A r c h 

p u b l i c s t a t i c void createSpiralDelayLineArch ( Struct currentStruct , 

double x , double y , double width , i n t turns , double separation , 

double deltaR , double length , double THETA , i n t ENDCAP , i n t 

gdsLayer ) 

// spiralDelayLineFermat 

p u b l i c s t a t i c A r r a y L i s t <GArea> createSpiralDelayLineFermat ( double x , 

double y , double width , i n t turns , double a , double deltaR , double 

length , double THETA , i n t ENDCAP , i n t gdsLayer ) 

// spiralDelayLineFermat 

p u b l i c s t a t i c void createSpiralDelayLineFermat ( Struct currentStruct , 

double x , double y , double width , i n t turns , double a , double 

deltaR , double length , double THETA , i n t ENDCAP , i n t gdsLayer ) 

// spiralDelayLineArchV2 

p u b l i c s t a t i c void createSpiralDelayLineArchV2 ( Struct currentStruct , 

double x , double y , double width , i n t turns , double pitch , i n t 

stepsPerTurn , i n t skippedTurns , double length , double THETA , i n t 

ENDCAP , i n t gdsLayer ) 

// s p i r a l D e l a y L i n e A r c h I n v 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e S p i r a l D e l a y L i n e A r c h I n v ( double x , 

double y , double width , double sleeveWidth , i n t turns , double 

separation , double deltaR , double length , double THETA , i n t ENDCAP , 

i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 421 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// s p i r a l D e l a y L i n e A r c h I n v 

p u b l i c s t a t i c void c r e a t e S p i r a l D e l a y L i n e A r c h I n v ( Struct currentStruct , 

double x , double y , double width , double sleeveWidth , i n t turns , 

double separation , double deltaR , double length , double THETA , i n t 

ENDCAP , i n t gdsLayer ) 

// s p i r a l D e l a y L i n e F e r m a t I n v 

p u b l i c s t a t i c A r r a y L i s t <GArea> createSpiralDelayLineFermatInv ( double x , 

double y , double width , double sleeveWidth , i n t turns , double a , 

double deltaR , double length , double THETA , i n t ENDCAP , i n t 

gdsLayer ) 

// s p i r a l D e l a y L i n e F e r m a t I n v 

p u b l i c s t a t i c void createSpiralDelayLineFermatInv ( Struct currentStruct , 

double x , double y , double width , double sleeveWidth , i n t turns , 

double a , double deltaR , double length , double THETA , i n t ENDCAP , 

i n t gdsLayer ) 

// spi ralDe layLi neArc hV2In v 

p u b l i c s t a t i c void createSpiralDelayLineArchV2Inv ( Struct currentStruct , 

double x , double y , double width , double sleeveWidth , i n t turns , 

double pitch , i n t stepsPerTurn , i n t skippedTurns , double length , 

double THETA , i n t ENDCAP , i n t gdsLayer ) 

// grating 

p u b l i c s t a t i c void createGrating ( Struct currentStruct , S t r i n g name , 

double x , double y , double width , double length , double pitch , i n t 

numberOfLines , i n t gdsLayer ) 

// gratingCoupler 

p u b l i c s t a t i c void createGratingCoupler ( Struct currentStruct , double x , 

double y , double r , double W, double pitch , double angleStart , 

double angleEnd , i n t numSides , i n t numElements , i n t gdsLayer ) 

// apodizedGrating 

p u b l i c s t a t i c GArea createApodizedGrating ( Struct currentStruct , double 

x , double y , double gratingLength , double increment , double height 

, double dutyCycleCutoff , double p1 , double p2 , double p3 , double 

p4 , double d1 , double d2 , double d3 , double d4 , double d5 , double 

THETA , i n t gdsLayer ) 

// gratingCWG 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGratingCWG ( double x , double y , 

double wgWidth , double Length , double Height , double sleeve , double 

lambda0 , double nEff , double nCladding , double thetaC , double R1 , 

double gratingPeriod , double r a t i o , i n t numberOfElements , i n t 

numSides , i n t layerWaveGuide , i n t layerGrating , boolean ENDCAPS , 

double THETA , i n t gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 422 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// gratingCWG 

p u b l i c s t a t i c void createGratingCWG ( Struct currentStruct , double x , 

double y , double wgWidth , double Length , double Height , double 

sleeve , double lambda0 , double nEff , double nCladding , double 

thetaC , double R1 , double gratingPeriod , double r a t i o , i n t 

numberOfElements , i n t numSides , i n t layerWaveGuide , i n t 

layerGrating , boolean ENDCAPS , double THETA , i n t gdsLayer , double 

shapeReso ) 

// gratingCWGinv 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGratingCWGinv ( double x , double y , 

double wgWidth , double Length , double Height , double sleeve , double 

lambda0 , double nEff , double nCladding , double thetaC , double R1 , 

double gratingPeriod , double r a t i o , i n t numberOfElements , i n t 

numSides , i n t layerWaveGuide , i n t layerGrating , boolean ENDCAPS , 

double THETA , i n t gdsLayer , double shapeReso ) 

// gratingCWGinv 

p u b l i c s t a t i c void createGratingCWGinv ( Struct currentStruct , double x , 

double y , double wgWidth , double Length , double Height , double 

sleeve , double lambda0 , double nEff , double nCladding , double 

thetaC , double R1 , double gratingPeriod , double r a t i o , i n t 

numberOfElements , i n t numSides , i n t layerWaveGuide , i n t 

layerGrating , boolean ENDCAPS , double THETA , i n t gdsLayer , double 

shapeReso ) 

// phC 

p u b l i c s t a t i c void createPhC ( Struct currentStuct , S t r i n g 

uniqueStructName , double x , double y , double radius , double pitchX , 

i n t elementsX , i n t elementsY , i n t numberOfSides , double 

arrayPitchDelta , i n t gdsLayer ) 

// phCV 

p u b l i c s t a t i c void createPhCV ( Struct currentStuct , S t r i n g 

uniqueStructName , double x , double y , double radius , double pitchX , 

i n t elementsX , i n t elementsY , i n t numberOfSides , double 

arrayPitchDelta , i n t gdsLayer , double shapeReso ) 

// hex 

p u b l i c s t a t i c void createHex ( Struct currentStuct , S t r i n g 

uniqueStructName , double x , double y , double radius , double pitchX , 

i n t elementsX , i n t elementsY , i n t numberOfSides , i n t gdsLayer ) 

// hexV 

p u b l i c s t a t i c void createHexV ( Struct currentStuct , S t r i n g 

uniqueStructName , double x , double y , double radius , double pitchX , 

i n t elementsX , i n t elementsY , i n t numberOfSides , i n t gdsLayer , 

double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 423 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// d i s c I n f i n i t e 

p u b l i c s t a t i c void c r e a t e D i s c I n f i n i t e ( Struct currentStuct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideLength , double waveguideWidth , boolean ENDCAP , i n t 

gdsLayer ) 

// r i n g I n f i n i t e 

p u b l i c s t a t i c void c r e a t e R i n g I n f i n i t e ( Struct currentStuct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideLength , double 

waveguideWidth , boolean ENDCAP , i n t gdsLayer ) 

// d i s c I n f D S 

p u b l i c s t a t i c void createDiscInfDS ( Struct currentStuct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideLength , double waveguideWidth , double gap2 , double 

length2 , double width2 , boolean ENDCAP , i n t gdsLayer ) 

// r i n g I n f D S 

p u b l i c s t a t i c void createRingInfDS ( Struct currentStuct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideLength , double 

waveguideWidth , double gap2 , double length2 , double width2 , boolean 

ENDCAP , i n t gdsLayer ) 

// d i s c I n f i n i t e I n v 

p u b l i c s t a t i c void c r e a t e D i s c I n f i n i t e I n v ( Struct currentStuct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideLength , double waveguideWidth , double sleeveWidth , 

boolean ENDCAP , i n t gdsLayer ) 

// r i n g I n f i n i t e I n v 

p u b l i c s t a t i c void c r e a t e R i n g I n f i n i t e I n v ( Struct currentStuct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideLength , double 

waveguideWidth , double sleeveWidth , boolean ENDCAP , i n t gdsLayer ) 

// d i s c I n f I n v D S 

p u b l i c s t a t i c void c r e a t e D i s c I n f I n v D S ( Struct currentStuct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideLength , double waveguideWidth , double sleeveWidth , 

double gap2 , double length2 , double width2 , double sleeve2 , boolean 

ENDCAP , i n t gdsLayer ) 

// r i n g I n f I n v D S 

p u b l i c s t a t i c void c r e a t e R i n g I n f I n v D S ( Struct currentStuct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideLength , double 

waveguideWidth , double sleeveWidth , double gap2 , double length2 , 

double width2 , double sleeve2 , boolean ENDCAP , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 424 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// d i s c I n f i n i t e I n v P o s 

p u b l i c s t a t i c void c r e a t e D i s c I n f i n i t e I n v P o s ( Struct currentStuct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideLength , double 

waveguideWidth , double sleeveWidth , boolean ENDCAP , i n t gdsLayer ) 

// r i n g I n f i n i t e I n v P o s 

p u b l i c s t a t i c void c r e a t e R i n g I n f i n i t e I n v P o s ( Struct currentStuct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideLength , double waveguideWidth , double sleeveWidth , boolean 

ENDCAP , i n t gdsLayer ) 

// d i s c I n f I n v P o s D S 

p u b l i c s t a t i c void createDiscInfInvPosDS ( Struct currentStuct , double x , 

double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideLength , double 

waveguideWidth , double sleeveWidth , double gap2 , double length2 , 

double width2 , double sleeve2 , boolean ENDCAP , i n t gdsLayer ) 

// r i n g I n f I n v P o s D S 

p u b l i c s t a t i c void createRingInfInvPosDS ( Struct currentStuct , double x , 

double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideLength , double waveguideWidth , double sleeveWidth , double 

gap2 , double length2 , double width2 , double sleeve2 , boolean ENDCAP 

, i n t gdsLayer ) 

// discSymmetric 

p u b l i c s t a t i c void createDiscSymmetric ( Struct currentStuct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymmetric 

p u b l i c s t a t i c void createRingSymmetric ( Struct currentStuct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discSymDS 

p u b l i c s t a t i c void createDiscSymDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double width2 , double length2 , boolean ENDCAP , i n t 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 425 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

gdsLayer , double shapeReso ) 

// ringSymDS 

p u b l i c s t a t i c void createRingSymDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double width2 

, double length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymPul 

p u b l i c s t a t i c void createDiscSymPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double angle2 , double width2 , double length2 , double 

height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymPul 

p u b l i c s t a t i c void createRingSymPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double angle2 

, double width2 , double length2 , double height2 , boolean ENDCAP , 

i n t gdsLayer , double shapeReso ) 

// discSymmetricLC 

p u b l i c s t a t i c void createDiscSymmetricLC ( Struct currentStruct , double x 

, double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double waveguideHeight , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// ringSymmetricLC 

p u b l i c s t a t i c void createRingSymmetricLC ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discSymLCDS 

p u b l i c s t a t i c void createDiscSymLCDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double waveguideHeight , double gap2 , double 

width2 , double length2 , boolean ENDCAP , i n t gdsLayer , double 

shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 426 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// ringSymLCDS 

p u b l i c s t a t i c void createRingSymLCDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double width2 

, double length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymLCPul 

p u b l i c s t a t i c void createDiscSymLCPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double waveguideHeight , double gap2 , 

double Lc2 , double width2 , double length2 , double height2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymLCPul 

p u b l i c s t a t i c void createRingSymLCPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double Lc2 , 

double width2 , double length2 , double height2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discSymmetricA 

p u b l i c s t a t i c void createDiscSymmetricA ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , boolean ENDCAP , i n t 

gdsLayer ) 

// ringSymmetricA 

p u b l i c s t a t i c void createRingSymmetricA ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discSymADS 

p u b l i c s t a t i c void createDiscSymADS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double gap2 , double width2 , 

double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringSymADS 

p u b l i c s t a t i c void createRingSymADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 427 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

waveguideLength , double gap2 , double width2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// discSymAPul 

p u b l i c s t a t i c void createDiscSymAPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double gap2 , double angle2 , 

double width2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringSymAPul 

p u b l i c s t a t i c void createRingSymAPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double angle2 , double width2 , double 

length2 , boolean ENDCAP , i n t gdsLayer ) 

// discSymmetricLCA 

p u b l i c s t a t i c void createDiscSymmetricLCA ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// ringSymmetricLCA 

p u b l i c s t a t i c void createRingSymmetricLCA ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discSymLCADS 

p u b l i c s t a t i c void createDiscSymLCADS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double gap2 , double width2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// ringSymLCADS 

p u b l i c s t a t i c void createRingSymLCADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double width2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// discSymLCAPul 

p u b l i c s t a t i c void createDiscSymLCAPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 428 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double waveguideLength , double gap2 , double Lc2 , double width2 , 

double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringSymLCAPul 

p u b l i c s t a t i c void createRingSymLCAPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double Lc2 , double width2 , double 

length2 , boolean ENDCAP , i n t gdsLayer ) 

// discSymmetricInv 

p u b l i c s t a t i c void createDiscSymmetricInv ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymmetricInv 

p u b l i c s t a t i c void createRingSymmetricInv ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvDS 

p u b l i c s t a t i c void createDiscSymInvDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double width2 , double sleeve2 , double 

length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymInvDS 

p u b l i c s t a t i c void createRingSymInvDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvPul 

p u b l i c s t a t i c void createDiscSymInvPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double angle2 , double width2 , double 

sleeve2 , double length2 , double height2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 429 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// ringSymInvPul 

p u b l i c s t a t i c void createRingSymInvPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 

, double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymmetricInvLC 

p u b l i c s t a t i c void createDiscSymmetricInvLC ( Struct currentStruct , 

double x , double y , double radius , i n t numberOfSidesDiscRing , 

double gap , double Lc , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymmetricInvLC 

p u b l i c s t a t i c void createRingSymmetricInvLC ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvLCDS 

p u b l i c s t a t i c void createDiscSymInvLCDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double width2 , double sleeve2 , double length2 , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymInvLCDS 

p u b l i c s t a t i c void createRingSymInvLCDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvLCPul 

p u b l i c s t a t i c void createDiscSymInvLCPul ( Struct currentStruct , double x 

, double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double waveguideHeight 

, double gap2 , double Lc2 , double width2 , double sleeve2 , double 

length2 , double height2 , boolean ENDCAP , i n t gdsLayer , double 

shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 430 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// ringSymInvLCPul 

p u b l i c s t a t i c void createRingSymInvLCPul ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double Lc2 , double width2 , double sleeve2 , double length2 , 

double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymmetricInvA 

p u b l i c s t a t i c void createDiscSymmetricInvA ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , boolean 

ENDCAP , i n t gdsLayer ) 

// ringSymmetricInvA 

p u b l i c s t a t i c void createRingSymmetricInvA ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discSymInvADS 

p u b l i c s t a t i c void createDiscSymInvADS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean ENDCAP 

, i n t gdsLayer ) 

// ringSymInvADS 

p u b l i c s t a t i c void createRingSymInvADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// discSymInvAPul 

p u b l i c s t a t i c void createDiscSymInvAPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// ringSymInvAPul 

p u b l i c s t a t i c void createRingSymInvAPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 431 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double angle2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// discSymmetricInvLCA 

p u b l i c s t a t i c void createDiscSymmetricInvLCA ( Struct currentStruct , 

double x , double y , double radius , i n t numberOfSidesDiscRing , 

double gap , double Lc , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , boolean 

ENDCAP , i n t gdsLayer ) 

// ringSymmetricInvLCA 

p u b l i c s t a t i c void createRingSymmetricInvLCA ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discSymInvLCADS 

p u b l i c s t a t i c void createDiscSymInvLCADS ( Struct currentStruct , double x 

, double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double gap2 , double 

width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// ringSymInvLCADS 

p u b l i c s t a t i c void createRingSymInvLCADS ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// discSymInvLCAPul 

p u b l i c s t a t i c void createDiscSymInvLCAPul ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double gap2 , double 

Lc2 , double width2 , double sleeve2 , double length2 , boolean ENDCAP , 

i n t gdsLayer ) 

// ringSymInvLCAPul 

p u b l i c s t a t i c void createRingSymInvLCAPul ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double Lc2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 432 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// discSymmetricInvPos 

p u b l i c s t a t i c void createDiscSymmetricInvPos ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymmetricInvPos 

p u b l i c s t a t i c void createRingSymmetricInvPos ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvPosDS 

p u b l i c s t a t i c void createDiscSymInvPosDS ( Struct currentStruct , double x 

, double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymInvPosDS 

p u b l i c s t a t i c void createRingSymInvPosDS ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double width2 , double sleeve2 , double 

length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvPosPul 

p u b l i c s t a t i c void createDiscSymInvPosPul ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 

, double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymInvPosPul 

p u b l i c s t a t i c void createRingSymInvPosPul ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 433 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

waveguideHeight , double gap2 , double angle2 , double width2 , double 

sleeve2 , double length2 , double height2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discSymmetricInvPosLC 

p u b l i c s t a t i c void createDiscSymmetricInversePosLC ( Struct currentStruct 

, double x , double y , double radius , double ringDiscSleeveWidth , 

i n t numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymmetricInvPosLC 

p u b l i c s t a t i c void createRingSymmetricInversePosLC ( Struct currentStruct 

, double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvPosLCDS 

p u b l i c s t a t i c void createDiscSymInvPosLCDS ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymInvPosLCDS 

p u b l i c s t a t i c void createRingSymInvPosLCDS ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// discSymInvPosLCPul 

p u b l i c s t a t i c void createDiscSymInvPosLCPul ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double Lc2 , double width2 , double sleeve2 , double length2 , 

double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringSymInvPosLCPul 

p u b l i c s t a t i c void createRingSymInvPosLCPul ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 434 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double Lc2 , double width2 , double sleeve2 , double 

length2 , double height2 , boolean ENDCAP , i n t gdsLayer , double 

shapeReso ) 

// discSymmetricInvPosA 

p u b l i c s t a t i c void createDiscSymmetricInvPosA ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// ringSymmetricInvPosA 

p u b l i c s t a t i c void createRingSymmetricInvPosA ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , boolean 

ENDCAP , i n t gdsLayer ) 

// discSymInvPosADS 

p u b l i c s t a t i c void createDiscSymInvPosADS ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringSymInvPosADS 

p u b l i c s t a t i c void createRingSymInvPosADS ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean ENDCAP 

, i n t gdsLayer ) 

// discSymInvPosAPul 

p u b l i c s t a t i c void createDiscSymInvPosAPul ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double angle2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// ringSymInvPosAPul 

p u b l i c s t a t i c void createRingSymInvPosAPul ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 435 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// discSymmetricInvPosLCA 

p u b l i c s t a t i c void createDiscSymmetricInvPosLCA ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// ringSymmetricInvPosLCA 

p u b l i c s t a t i c void createRingSymmetricInvPosLCA ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discSymInvPosLCADS 

p u b l i c s t a t i c void createDiscSymInvPosLCADS ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringSymInvPosLCADS 

p u b l i c s t a t i c void createRingSymInvPosLCADS ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// discSymInvPosLCAPul 

p u b l i c s t a t i c void createDiscSymInvPosLCAPul ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double Lc2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// ringSymInvPosLCAPul 

p u b l i c s t a t i c void createRingSymInvPosLCAPul ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double Lc2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 436 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// d i s c P u l l e y 

p u b l i c s t a t i c void c r e a t e D i s c P u l l e y ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// r i n g P u l l e y 

p u b l i c s t a t i c void c re a t e Ri n g Pu l l ey ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discPulDS 

p u b l i c s t a t i c void createDiscPulDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double width2 , double length2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// ringPulDS 

p u b l i c s t a t i c void createRingPulDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double width2 

, double length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l P u l 

p u b l i c s t a t i c void c r e a t e D i s c P u l P u l ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double angle2 , double width2 , double length2 , double 

heigth2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// r i n g P u l P u l 

p u b l i c s t a t i c void createRingPulPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double angle2 

, double width2 , double length2 , double heigth2 , boolean ENDCAP , 

i n t gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 437 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// discPulleyLC 

p u b l i c s t a t i c void createDiscPulleyLC ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double waveguideHeight , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// r i n g P u l l e y L C 

p u b l i c s t a t i c void createRingPulleyLC ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discPulLCDS 

p u b l i c s t a t i c void createDiscPulLCDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double waveguideHeight , double gap2 , double 

width2 , double length2 , boolean ENDCAP , i n t gdsLayer , double 

shapeReso ) 

// ringPulLCDS 

p u b l i c s t a t i c void createRingPulLCDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double width2 

, double length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discPulLCPul 

p u b l i c s t a t i c void createDiscPulLCPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double waveguideHeight , double gap2 , 

double Lc2 , double width2 , double length2 , double heigth2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringPulLCPul 

p u b l i c s t a t i c void createRingPulLCPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double waveguideHeight , double gap2 , double Lc2 , 

double width2 , double length2 , double heigth2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// d i s c P u l l e y A 

p u b l i c s t a t i c void createDiscPulleyA ( Struct currentStruct , double x , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 438 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , boolean ENDCAP , i n t 

gdsLayer ) 

// r i n g P u l l e y A 

p u b l i c s t a t i c void createRingPulleyA ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discPulADS 

p u b l i c s t a t i c void createDiscPulADS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double gap2 , double width2 , 

double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringPulADS 

p u b l i c s t a t i c void createRingPulADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double width2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// discPulAPul 

p u b l i c s t a t i c void createDiscPulAPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double waveguideLength , double gap2 , double angle2 , 

double width2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// r in g P u l A P u l 

p u b l i c s t a t i c void createRingPulAPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double angle2 , double width2 , double 

length2 , boolean ENDCAP , i n t gdsLayer ) 

// discPulleyLCA 

p u b l i c s t a t i c void createDiscPulleyLCA ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// ringPulleyLCA 

p u b l i c s t a t i c void createRingPulleyLCA ( Struct currentStruct , double x , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 439 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double y , double radius , double ringWidth , i n t
 

numberOfSidesDiscRing , double gap , double Lc , i n t
 

numberOfSidesCouplingRegion , double waveguideWidth , double
 

waveguideLength , boolean ENDCAP , i n t gdsLayer )
 

// discPulLCADS 

p u b l i c s t a t i c void createDiscPulLCADS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double gap2 , double width2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// ringPulLCADS 

p u b l i c s t a t i c void createRingPulLCADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double width2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// discPulLCAPul 

p u b l i c s t a t i c void createDiscPulLCAPul ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double waveguideLength , double gap2 , double Lc2 , double width2 , 

double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringPulLCAPul 

p u b l i c s t a t i c void createRingPulLCAPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

waveguideLength , double gap2 , double Lc2 , double width2 , double 

length2 , boolean ENDCAP , i n t gdsLayer ) 

// d i s c P u l l e y I n v 

p u b l i c s t a t i c void c r e a t e D i s c P u l l e y I n v e r s e ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// r i n g P u l l e y I n v 

p u b l i c s t a t i c void c r e a t e R i n g P u l l e y I n v e r s e ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 440 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// discPulInvDS 

p u b l i c s t a t i c void createDiscPulInvDS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double width2 , double sleeve2 , double 

length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringPulInvDS 

p u b l i c s t a t i c void createRingPulInvDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l I n v P u l 

p u b l i c s t a t i c void c r e a t e D i s c P u l I n v P u l ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double angle2 , double width2 , double 

sleeve2 , double length2 , double height2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// r i n g P u l I n v P u l 

p u b l i c s t a t i c void c r e a t e R i n g P u l I n v P u l ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 

, double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l l e y I n v L C 

p u b l i c s t a t i c void c r e a t e D i s c P u l l e y I n v L C ( Struct currentStruct , double x 

, double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l l e y I n v L C 

p u b l i c s t a t i c void c r e a t e D i s c P u l l e y I n v e r s e L C ( Struct currentStruct , 

double x , double y , double radius , i n t numberOfSidesDiscRing , 

double gap , double Lc , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discPulInvLCDS 

p u b l i c s t a t i c void createDiscPulInvLCDS ( Struct currentStruct , double x , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 441 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double width2 , double sleeve2 , double length2 , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringPulInvLCDS 

p u b l i c s t a t i c void createRingPulInvLCDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l I n v L C P u l 

p u b l i c s t a t i c void createDiscPulInvLCPul ( Struct currentStruct , double x 

, double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double waveguideHeight 

, double gap2 , double Lc2 , double width2 , double sleeve2 , double 

length2 , double height2 , boolean ENDCAP , i n t gdsLayer , double 

shapeReso ) 

// r i n g P u l I n v L C P u l 

p u b l i c s t a t i c void createRingPulInvLCPul ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double Lc2 , double width2 , double sleeve2 , double length2 , 

double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l l e y I n v A 

p u b l i c s t a t i c void c r e a t e D i s c P u l l e y I n v A ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , boolean 

ENDCAP , i n t gdsLayer ) 

// r i n g P u l l e y I n v A 

p u b l i c s t a t i c void c r e a t e R i n g P u l l e y I n v A ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discPulInvADS 

p u b l i c s t a t i c void createDiscPulInvADS ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 442 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean ENDCAP 

, i n t gdsLayer ) 

// ringPulInvADS 

p u b l i c s t a t i c void createRingPulInvADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// d i s c P u l I n v A P u l 

p u b l i c s t a t i c void c r e a t e D i s c P u l I n v A P u l ( Struct currentStruct , double x , 

double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// r i n g P u l I n v A P u l 

p u b l i c s t a t i c void createRingPulInvAPul ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double angle2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// d is c Pu ll e yI nv L CA 

p u b l i c s t a t i c void createDiscPulleyInvLCA ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , boolean ENDCAP , i n t 

gdsLayer ) 

// r i n g P u l l e y I n v L C A 

p u b l i c s t a t i c void createRingPulleyInvLCA ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discPulInvLCADS 

p u b l i c s t a t i c void createDiscPulInvLCADS ( Struct currentStruct , double x 

, double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double gap2 , double 

width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 443 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// ringPulInvLCADS 

p u b l i c s t a t i c void createRingPulInvLCADS ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// discPulInvLCAPul 

p u b l i c s t a t i c void createDiscPulInvLCAPul ( Struct currentStruct , double 

x , double y , double radius , i n t numberOfSidesDiscRing , double gap , 

double Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , 

double sleeveWidth , double waveguideLength , double gap2 , double 

Lc2 , double width2 , double sleeve2 , double length2 , boolean ENDCAP , 

i n t gdsLayer ) 

// ringPulInvLCAPul 

p u b l i c s t a t i c void createRingPulInvLCAPul ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double Lc2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// d i s c P u l l e y I n v P o s 

p u b l i c s t a t i c void c r e a t e D i s c P u l l e y I n v P o s ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// r i n g P u l l e y I n v P o s 

p u b l i c s t a t i c void c re a te R in g P ul l ey I n vP o s ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discPulInvPDS 

p u b l i c s t a t i c void createDiscPulInvPDS ( Struct currentStruct , double x , 

double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 444 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// ringPulInvPDS 

p u b l i c s t a t i c void createRingPulInvPDS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double width2 , double sleeve2 , double 

length2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// d i s c P u l I n v P P u l 

p u b l i c s t a t i c void c r e a t e D i s c P u l I n v P P u l ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double angle2 , double width2 , double 

sleeve2 , double length2 , double height2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// r i n g P u l I n v P P u l 

p u b l i c s t a t i c void c r e a t e R i n g P u l I n v P P u l ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

waveguideHeight , double gap2 , double angle2 , double width2 , double 

sleeve2 , double length2 , double height2 , boolean ENDCAP , i n t 

gdsLayer , double shapeReso ) 

// discPulleyInvPosLC 

p u b l i c s t a t i c void createDiscPulleyInvPosLC ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// r i n g P u l l e y I n v P o s L C 

p u b l i c s t a t i c void createRingPulleyInvPosLC ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// discPulInvPLCDS 

p u b l i c s t a t i c void createDiscPulInvPLCDS ( Struct currentStruct , double x 

, double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 445 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// ringPulInvPLCDS 

p u b l i c s t a t i c void createRingPulInvPLCDS ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean 

ENDCAP , i n t gdsLayer , double shapeReso ) 

// di sc Pu lIn vP LCP ul 

p u b l i c s t a t i c void createDiscPulInvPLCPul ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , double 

gap2 , double Lc2 , double width2 , double sleeve2 , double length2 , 

double height2 , boolean ENDCAP , i n t gdsLayer , double shapeReso ) 

// r i n g P u l I n v P L C P u l 

p u b l i c s t a t i c void createRingPulInvPLCPul ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double waveguideHeight , 

double gap2 , double Lc2 , double width2 , double sleeve2 , double 

length2 , double height2 , boolean ENDCAP , i n t gdsLayer , double 

shapeReso ) 

// d i s c P u l l e y I n v P o s A 

p u b l i c s t a t i c void createDiscPulleyInvPosA ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// r i n g P u l l e y I n v P o s A 

p u b l i c s t a t i c void createRingPulleyInvPosA ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , boolean 

ENDCAP , i n t gdsLayer ) 

// discPulInvPADS 

p u b l i c s t a t i c void createDiscPulInvPADS ( Struct currentStruct , double x , 

double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 446 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// ringPulInvPADS 

p u b l i c s t a t i c void createRingPulInvPADS ( Struct currentStruct , double x , 

double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double width2 , double sleeve2 , double length2 , boolean ENDCAP 

, i n t gdsLayer ) 

// d i s c P u l I n v P A P u l 

p u b l i c s t a t i c void createDiscPulInvPAPul ( Struct currentStruct , double x 

, double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double waveguideAngle , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double angle2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// r i n g P u l I n v P A P u l 

p u b l i c s t a t i c void createRingPulInvPAPul ( Struct currentStruct , double x 

, double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

waveguideAngle , i n t numberOfSidesCouplingRegion , double 

waveguideWidth , double sleeveWidth , double waveguideLength , double 

gap2 , double angle2 , double width2 , double sleeve2 , double length2 , 

boolean ENDCAP , i n t gdsLayer ) 

// discPulleyInvPosLCA 

p u b l i c s t a t i c void createDiscPulleyInvPosLCA ( Struct currentStruct , 

double x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// ringPulleyInvPosLCA 

p u b l i c s t a t i c void createRingPulleyInvPosLCA ( Struct currentStruct , 

double x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , boolean ENDCAP , i n t gdsLayer ) 

// discPulInvPLCADS 

p u b l i c s t a t i c void createDiscPulInvPLCADS ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 447 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// ringPulInvPLCADS 

p u b l i c s t a t i c void createRingPulInvPLCADS ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double width2 , 

double sleeve2 , double length2 , boolean ENDCAP , i n t gdsLayer ) 

// discPulInvPLCAPul 

p u b l i c s t a t i c void createDiscPulInvPLCAPul ( Struct currentStruct , double 

x , double y , double radius , double ringDiscSleeveWidth , i n t 

numberOfSidesDiscRing , double gap , double Lc1 , i n t 

numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double Lc2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// ringPulInvPLCAPul 

p u b l i c s t a t i c void createRingPulInvPLCAPul ( Struct currentStruct , double 

x , double y , double radius , double ringWidth , double 

ringDiscSleeveWidth , i n t numberOfSidesDiscRing , double gap , double 

Lc1 , i n t numberOfSidesCouplingRegion , double waveguideWidth , double 

sleeveWidth , double waveguideLength , double gap2 , double Lc2 , 

double width2 , double sleeve2 , double length2 , boolean ENDCAP , i n t 

gdsLayer ) 

// waveGuideInvPhC − a l i s a Double vector array containing rx1 ry1 N1 

. . . . rxn ryn Nn values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideInvPhC ( A r r a y L i s t <Double>

al , double x , double y , double a , double W, i n t gdsLayer ) 

// waveGuideInvPhC − a l i s a Double vector array containing rx1 ry1 N1 

. . . . rxn ryn Nn values 

p u b l i c s t a t i c void createWaveGuideInvPhC ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double a , double W, i n t 

gdsLayer ) 

// waveGuideInvPhCvary − a l i s a Double vector array containing rx1 ry1 

a1 N1 . . . . rxn ryn an Nn values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideInvPhCvary ( A r r a y L i s t <

Double> al , double x , double y , double W, i n t gdsLayer ) 

// waveGuideInvPhCvary − a l i s a Double vector array containing rx1 ry1 

a1 N1 . . . . rxn ryn an Nn values 

p u b l i c s t a t i c void createWaveGuideInvPhCvary ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double W, i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 448 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// waveGuidePhC − a l i s a Double vector array containing rx1 ry1 N1 

. . . . rxn ryn Nn values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuidePhC ( A r r a y L i s t <Double> al , 

double x , double y , double a , double W, double So , double Sh , i n t 

gdsLayer ) 

// waveGuidePhC − a l i s a Double vector array containing rx1 ry1 N1 

. . . . rxn ryn Nn values 

p u b l i c s t a t i c void createWaveGuidePhC ( Struct currentStruct , A r r a y L i s t <

Double> al , double x , double y , double a , double W, double So , 

double Sh , i n t gdsLayer ) 

// waveGuidePhCvary − a l i s a Double vector array containing rx1 ry1 a1 

N1 . . . . rxn ryn an Nn values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuidePhCvary ( A r r a y L i s t <Double>

al , double x , double y , double W, double So , double Sh , i n t 

gdsLayer ) 

// waveGuidePhCvary − a l i s a Double vector array containing rx1 ry1 a1 

N1 . . . . rxn ryn an Nn values 

p u b l i c s t a t i c void createWaveGuidePhCvary ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double W, double So , 

double Sh , i n t gdsLayer ) 

// waveGuideInvRectPhC − a l i s a Double vector array containing Lx1 Ly1 

. . . . Lxn Lyn values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideInvRectPhC ( A r r a y L i s t <

Double> al , double x , double y , double a , double W, i n t gdsLayer ) 

// waveGuideInvRectPhC − a l i s a Double vector array containing Lx1 Ly1 

. . . . Lxn Lyn values 

p u b l i c s t a t i c void createWaveGuideInvRectPhC ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double a , double W, i n t 

gdsLayer ) 

// waveGuideInvRectPhCvary − a l i s a Double vector array containing Lx1 

Ly1 a1 . . . . Lxn Lyn an values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideInvRectPhCvary ( A r r a y L i s t <

Double> al , double x , double y , double W, i n t gdsLayer ) 

// waveGuideInvRectPhCvary − a l i s a Double vector array containing Lx1 

Ly1 a1 . . . . Lxn Lyn an values 

p u b l i c s t a t i c void createWaveGuideInvRectPhCvary ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double W, i n t gdsLayer ) 

// waveGuideRectPhC − a l i s a Double vector array containing Lx1 Ly1 

. . . . Lxn Lyn values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideRectPhC ( A r r a y L i s t <Double>

al , double x , double y , double a , double W, double So , double Sh , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 449 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

i n t gdsLayer ) 

// waveGuideRectPhC − a l i s a Double vector array containing Lx1 Ly1 

. . . . Lxn Lyn values 

p u b l i c s t a t i c void createWaveGuideRectPhC ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double a , double W, 

double So , double Sh , i n t gdsLayer ) 

// waveGuideRectPhCvary − a l i s a Double vector array containing Lx1 

Ly1 a1 . . . Lxn Lyn an values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideRectPhCvary ( A r r a y L i s t <

Double> al , double x , double y , double W, double So , double Sh , i n t 

gdsLayer ) 

// waveGuideRectPhCvary − a l i s a Double vector array containing Lx1 

Ly1 a1 . . . Lxn Lyn an values 

p u b l i c s t a t i c void createWaveGuideRectPhCvary ( Struct currentStruct , 

A r r a y L i s t <Double> al , double x , double y , double W, double So , 

double Sh , i n t gdsLayer ) 

// waveGuideInvRectFlushPhCvary − a l i s a Double vector array 

containing Lx1 Ly1 a1 . . . Lxn Lyn an values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideInvRectFlushPhCvary ( 

A r r a y L i s t <Double> al , double x , double y , double W, double d , i n t 

gdsLayer ) 

// waveGuideInvRectFlushPhCvary − a l i s a Double vector array 

containing Lx1 Ly1 a1 . . . Lxn Lyn an values 

p u b l i c s t a t i c void createWaveGuideInvRectFlushPhCvary ( Struct 

currentStruct , A r r a y L i s t <Double> al , double x , double y , double W, 

double d , i n t gdsLayer ) 

// waveGuideRectFlushPhCvary − a l i s a Double vector array containing 

Lx1 Ly1 a1 . . . Lxn Lyn an values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWaveGuideRectFlushPhCvary ( 

A r r a y L i s t <Double> al , double x , double y , double W, double d , 

double So , double Sh , i n t gdsLayer ) 

// waveGuideRectFlushPhCvary − a l i s a Double vector array containing 

Lx1 Ly1 a1 . . . Lxn Lyn an values 

p u b l i c s t a t i c void createWaveGuideRectFlushPhCvary ( Struct currentStruct 

, A r r a y L i s t <Double> al , double x , double y , double W, double d , 

double So , double Sh , i n t gdsLayer ) 

// wgdcdV1 

p u b l i c s t a t i c GArea createWgdcd1 ( double x , double y , double rad , i n t 

numSides , double dx , double dy , double wgWidth , double wgLength , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 450 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double wgRad , double sleeve , double gap , double ry , double d E l l i p s e , 

double cutWidth , double c u t P o s i t i o n , double THETA , i n t gdsLayer ) 

// wgdcdV2 

p u b l i c s t a t i c GArea createWgdcd2 ( double x , double y , double rad , i n t 

numSides , double dx , double dy , double H2 , double W2, double tipH , 

double tipW , double tipS , double tipY , double wgWidth , double 

wgLength , double wgRad , double sleeve , double gap , double cutWidth , 

double c u t P o s i t i o n , double THETA , i n t gdsLayer ) 

// wgdcdV3 

p u b l i c s t a t i c GArea createWgdcd3 ( double x , double y , double rad , i n t 

numSides , double dx , double dy , double dBoxBelowGap , double H2 , 

double W2, double wgWidth , double wgLength , double wgRad , double 

sleeve , double gap , double cutWidth , double c u t P o s i t i o n , double 

distance , double THETA , i n t gdsLayer ) 

// wgdcdV4 

p u b l i c s t a t i c GArea createWgdcd4 ( double x , double y , double rad , i n t 

numSides , double dx , double dy , double dBoxBelowGap , double H2 , 

double t r i H , double wgWidth , double wgLength , double wgRad , double 

sleeve , double gap , double cutWidth , double c u t P o s i t i o n , double 

distance , double THETA , i n t gdsLayer ) 

// wgdcdV5 

p u b l i c s t a t i c GArea createWgdcd5 ( double x , double y , double rad , i n t 

numSides , double dx , double dy , double dBoxBelowGap , double t r i H , 

double wgWidth , double wgLength , double wgRad , double sleeve , 

double gap , double cutWidth , double cutPositionUpper , double 

cutPositionLower , double THETA , i n t gdsLayer ) 

// wgdcdV6 

p u b l i c s t a t i c GArea createWgdcd6 ( double x , double y , double rad , i n t 

numSides , double dx , double dy , double dBoxBelowGap , double triCutH 

, double t r i H , double wgWidth , double wgLength , double wgRad , 

double sleeve , double gap , double cutWidth , double cutPositionUpper 

, double cutPositionLower , double THETA , i n t gdsLayer ) 

// wgdcdV7 

p u b l i c s t a t i c GArea createWgdcd7 ( double x , double y , double rad , double 

rad2 , i n t numSides , double dx , double dy , double wgWidth , double 

wgLength , double wgRad , double sleeve , double gap , double cutWidth , 

double c u t P o s i t i o n , double THETA , i n t gdsLayer ) 

// wgdcdV8 

p u b l i c s t a t i c A r r a y L i s t <GArea> createWgdcd8 ( double x , double y , double 

bottomTaperWidth , double frameWidth , double bottomInteriorWidth , 

double sleeve , double wgWidthTop , double wgWidthBottom , double 

wgStraightLengthTop , double wgTaperedLength , double gap , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 451 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

cutWidth , double dCut , double largeBoxW , double largeBoxH , i n t L1 , 

i n t L2 , i n t L3 , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 452 of 488
 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

4.2.9 MEMS NEMS Library Methods

// bentBeam 

p u b l i c s t a t i c A r r a y L i s t <GArea> createBentBeam ( double x , double y , 

double width , double length1 , double length2 , double length3 , 

double baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// bentBeam 

p u b l i c s t a t i c void createBentBeam ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

length3 , double baseHeight , double baseWidth , double anchorDistance 

, i n t anchorLayer , double THETA , i n t gdsLayer ) 

// bentBeamArray 

p u b l i c s t a t i c A r r a y L i s t <GArea> createBentBeamArray ( double x , double y , 

double width , double length1 , double length2 , double length3 , 

double length4 , double hOffset , double pitch , i n t numElements , 

double centralBeamWidth , double dimpleHeight , double dimpleWidth , 

i n t dimpleLayer , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// bentBeamArray 

p u b l i c s t a t i c void createBentBeamArray ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

length3 , double length4 , double hOffset , double pitch , i n t 

numElements , double centralBeamWidth , double dimpleHeight , double 

dimpleWidth , i n t dimpleLayer , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// biMorph 

p u b l i c s t a t i c A r r a y L i s t <GArea> createBiMorph ( double x , double y , double 

width1 , double width2 , double width3 , double width4 , double 

length1 , double length2 , double length3 , double pitch , double 

dimpleHeight , double dimpleWidth , i n t dimpleLayer , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// biMorph 

p u b l i c s t a t i c void createBiMorph ( Struct currentStruct , double x , double 

y , double width1 , double width2 , double width3 , double width4 , 

double length1 , double length2 , double length3 , double pitch , 

double dimpleHeight , double dimpleWidth , i n t dimpleLayer , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// combDriveV1 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCombDriveV1 ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , i n t 

numElectrodes , double pitch , double baseHeight , i n t baseLayer , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 453 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// combDriveV1 

p u b l i c s t a t i c void createCombDriveV1 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , i n t numElectrodes , double pitch , double baseHeight , i n t 

baseLayer , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// l i n e a r D r i v e V 1 

p u b l i c s t a t i c A r r a y L i s t <GArea> createLinearDriveV1 ( double x , double y , 

double width1 , double length1 , double length2 , double length3 , 

double gap , i n t numElectrodes , double pitch , double baseHeight , 

double baseWidth , double r o t o r P i t c h , i n t rotorLayer , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// l i n e a r D r i v e V 1 

p u b l i c s t a t i c void createLinearDriveV1 ( Struct currentStruct , double x , 

double y , double width1 , double length1 , double length2 , double 

length3 , double gap , i n t numElectrodes , double pitch , double 

baseHeight , double baseWidth , double r o t o r P i t c h , i n t rotorLayer , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// foldedSpring1A 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring1A ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// foldedSpring1A 

p u b l i c s t a t i c void createFoldedSpring1A ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2A 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2A ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// foldedSpring2A 

p u b l i c s t a t i c void createFoldedSpring2A ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 454 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// foldedSpring1B 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring1B ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// foldedSpring1B 

p u b l i c s t a t i c void createFoldedSpring1B ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2B 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2B ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// foldedSpring2B 

p u b l i c s t a t i c void createFoldedSpring2B ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2C 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2C ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// foldedSpring2C 

p u b l i c s t a t i c void createFoldedSpring2C ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2D 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2D ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 455 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// foldedSpring2D 

p u b l i c s t a t i c void createFoldedSpring2D ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2E 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2E ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , i n t numSides , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2E 

p u b l i c s t a t i c void createFoldedSpring2E ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , i n t numSides , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// foldedSpring2F 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2F ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , i n t numSides , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2F 

p u b l i c s t a t i c void createFoldedSpring2F ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , i n t numSides , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// foldedSpring2G 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2G ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , i n t numSides , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2G 

p u b l i c s t a t i c void createFoldedSpring2G ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , i n t numSides , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 456 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// foldedSpring2H 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2H ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , i n t numSides , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// foldedSpring2H 

p u b l i c s t a t i c void createFoldedSpring2H ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , i n t numSides , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// f o l d e d S p r i n g 2 I 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2I ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , i n t numSides , double diameter , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// f o l d e d S p r i n g 2 I 

p u b l i c s t a t i c void createFoldedSpring2I ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , i n t numSides , double 

diameter , double anchorDistance , i n t anchorLayer , double THETA , i n t 

gdsLayer ) 

// foldedSpring2J 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFoldedSpring2J ( double x , double y , 

double width , double length1 , double length2 , double pitch , double 

amplitude , i n t numberOfPeriods , i n t numSides , double diameter , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// foldedSpring2J 

p u b l i c s t a t i c void createFoldedSpring2J ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

pitch , double amplitude , i n t numberOfPeriods , i n t numSides , double 

diameter , double anchorDistance , i n t anchorLayer , double THETA , i n t 

gdsLayer ) 

// bolometerL 

p u b l i c s t a t i c A r r a y L i s t <GArea> createBolometerL ( double x , double y , 

double w1 , double w2 , double w3 , double g1 , double g2 , double g3 , 

double L1 , double L2 , double r , double r i , i n t numSides , double a , 

double b , double c , double d , double e , double f , i n t La , i n t Lb , 

i n t Lc , i n t Ld , i n t Le , i n t Lf , double THETA , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 457 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// bolometerL 

p u b l i c s t a t i c void createBolometerL ( Struct currentStruct , double x , 

double y , double w1 , double w2 , double w3 , double g1 , double g2 , 

double g3 , double L1 , double L2 , double r , double r i , i n t numSides , 

double a , double b , double c , double d , double e , double f , i n t La 

, i n t Lb , i n t Lc , i n t Ld , i n t Le , i n t Lf , double THETA , double 

shapeReso ) 

// bolometerU 

p u b l i c s t a t i c A r r a y L i s t <GArea> createBolometerU ( double x , double y , 

double w1 , double w2 , double w3 , double g1 , double g2 , double g3 , 

double L1 , double L2 , double r , double r i , i n t numSides , double a , 

double b , double c , double d , double e , double f , i n t La , i n t Lb , 

i n t Lc , i n t Ld , i n t Le , i n t Lf , double THETA , double shapeReso ) 

// bolometerU 

p u b l i c s t a t i c void createBolometerU ( Struct currentStruct , double x , 

double y , double w1 , double w2 , double w3 , double g1 , double g2 , 

double g3 , double L1 , double L2 , double r , double r i , i n t numSides , 

double a , double b , double c , double d , double e , double f , i n t La 

, i n t Lb , i n t Lc , i n t Ld , i n t Le , i n t Lf , double THETA , double 

shapeReso ) 

// gear 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGear ( double x , double y , double 

rad , double width , double height , i n t numberOfGears , i n t numSides , 

double THETA , i n t gdsLayer ) 

// gear 

p u b l i c s t a t i c void createGear ( Struct currentStruct , double x , double y , 

double rad , double width , double height , i n t numberOfGears , i n t 

numSides , double THETA , i n t gdsLayer ) 

// gearT 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGearT ( double x , double y , double 

rad , double width , double height , i n t numberOfGears , double 

t r i a n g l e L , i n t numSides , double THETA , i n t gdsLayer ) 

// gearT 

p u b l i c s t a t i c void createGearT ( Struct currentStruct , double x , double y 

, double rad , double width , double height , i n t numberOfGears , 

double t r i a n g l e L , i n t numSides , double THETA , i n t gdsLayer ) 

// s t r a i g h t S p r i n g 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e S t r a i g h t S p r i n g ( double x , double y , 

double width , double radiusCenterHub , double widthRing , double 

radiusRing , i n t numSides , i n t numElements , double anchorDistance , 

i n t anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 458 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// s t r a i g h t S p r i n g 

p u b l i c s t a t i c void c r e a t e S t r a i g h t S p r i n g ( Struct currentStruct , double x , 

double y , double width , double radiusCenterHub , double widthRing , 

double radiusRing , i n t numSides , i n t numElements , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// c i r c u l a r S p r i n g 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e C i r c u l a r S p r i n g ( double x , double y , 

double width , double radiusCenterHub , double widthRing , double 

radiusRing , i n t numSides , i n t numElements , double anchorDistance , 

i n t anchorLayer , double THETA , i n t gdsLayer ) 

// c i r c u l a r S p r i n g 

p u b l i c s t a t i c void c r e a t e C i r c u l a r S p r i n g ( Struct currentStruct , double x , 

double y , double width , double radiusCenterHub , double widthRing , 

double radiusRing , i n t numSides , i n t numElements , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// s t r a i g h t S p r i n g E 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e S t r a i g h t S p r i n g E ( double x , double y 

, double width , double radiusCenterHub , double widthRing , double 

radiusRing , i n t numSides , i n t numElements , double gap , double 

electrodeWidth , i n t numElectrodes , double gapFraction , double 

anchorElectrodeDistance , double anchorDistance , i n t anchorLayer , 

double THETA , i n t gdsLayer ) 

// s t r a i g h t S p r i n g E 

p u b l i c s t a t i c void c r e a t e S t r a i g h t S p r i n g E ( Struct currentStruct , double x 

, double y , double width , double radiusCenterHub , double widthRing , 

double radiusRing , i n t numSides , i n t numElements , double gap , 

double electrodeWidth , i n t numElectrodes , double gapFraction , 

double anchorElectrodeDistance , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// c i r c u l a r S p r i n g E 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e C i r c u l a r S p r i n g E ( double x , double y 

, double width , double radiusCenterHub , double widthRing , double 

radiusRing , i n t numSides , i n t numElements , double gap , double 

electrodeWidth , i n t numElectrodes , double gapFraction , double 

anchorElectrodeDistance , double anchorDistance , i n t anchorLayer , 

double THETA , i n t gdsLayer ) 

// c i r c u l a r S p r i n g E 

p u b l i c s t a t i c void c r e a t e C i r c u l a r S p r i n g E ( Struct currentStruct , double x 

, double y , double width , double radiusCenterHub , double widthRing , 

double radiusRing , i n t numSides , i n t numElements , double gap , 

double electrodeWidth , i n t numElectrodes , double gapFraction , 

double anchorElectrodeDistance , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 459 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// combRadialV1 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCombRadialV1 ( double x , double y , 

double w1 , double r1 , double w2 , double r2 , double wc , double gap , 

i n t numElements , i n t numSides , double thetaComb , double 

thetaOverlap , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// combRadialV1 

p u b l i c s t a t i c void createCombRadialV1 ( Struct currentStruct , double x , 

double y , double w1 , double r1 , double w2 , double r2 , double wc , 

double gap , i n t numElements , i n t numSides , double thetaComb , double 

thetaOverlap , double anchorDistance , i n t anchorLayer , double THETA 

, i n t gdsLayer ) 

// combRadialV2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCombRadialV2 ( double x , double y , 

double w1 , double r1 , double w2 , double r2 , double wc , double gap , 

i n t numElements , i n t numSides , double thetaComb , double 

thetaOverlap , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// combRadialV2 

p u b l i c s t a t i c void createCombRadialV2 ( Struct currentStruct , double x , 

double y , double w1 , double r1 , double w2 , double r2 , double wc , 

double gap , i n t numElements , i n t numSides , double thetaComb , double 

thetaOverlap , double anchorDistance , i n t anchorLayer , double THETA 

, i n t gdsLayer ) 

// flexure2A 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure2A ( double x , double y , 

double width , double length1 , double length2 , double widthMass , 

double lengthMass , double baseHeight , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2A 

p u b l i c s t a t i c void createFlexure2A ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

widthMass , double lengthMass , double baseHeight , double baseWidth , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2B 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure2B ( double x , double y , 

double width , double length1 , double length2 , double widthMass , 

double lengthMass , double connectorHeight , double connectorWidth , 

double squareHeight , double squareWidth , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 460 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// flexure2B 

p u b l i c s t a t i c void createFlexure2B ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

widthMass , double lengthMass , double connectorHeight , double 

connectorWidth , double squareHeight , double squareWidth , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2C 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure2C ( double x , double y , 

double width , double length1 , double length2 , double length3 , 

double widthMass , double lengthMass , double amplitude , i n t periods , 

double baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2C 

p u b l i c s t a t i c void createFlexure2C ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

length3 , double widthMass , double lengthMass , double amplitude , i n t 

periods , double baseHeight , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2D 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure2D ( double x , double y , 

double width1 , double width2 , double width3 , double width4 , double 

length1 , double length2 , double length3 , double length4 , double 

length5 , double length6 , double baseWidth , double anchorDistance , 

i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2D 

p u b l i c s t a t i c void createFlexure2D ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double width3 , double 

width4 , double length1 , double length2 , double length3 , double 

length4 , double length5 , double length6 , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure2E 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure2E ( double x , double y , 

double width1 , double width2 , double width3 , double width4 , double 

width5 , double length1 , double length2 , double length3 , double 

length4 , double gap , double baseExtent , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// flexure2E 

p u b l i c s t a t i c void createFlexure2E ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double width3 , double 

width4 , double width5 , double length1 , double length2 , double 

length3 , double length4 , double gap , double baseExtent , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 461 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// flexure4A 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure4A ( double x , double y , 

double width , double length1 , double length2 , double widthMass , 

double lengthMass , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure4A 

p u b l i c s t a t i c void createFlexure4A ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

widthMass , double lengthMass , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer 

) 

// flexure4B 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure4B ( double x , double y , 

double width , double length1 , double length2 , double widthMass , 

double gap , double baseHeight , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure4B 

p u b l i c s t a t i c void createFlexure4B ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

widthMass , double gap , double baseHeight , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure4C 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure4C ( double x , double y , 

double width , double length1 , double length2 , double length3 , 

double length4 , double widthMass , double gap , double baseHeight , 

double baseWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// flexure4C 

p u b l i c s t a t i c void createFlexure4C ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

length3 , double length4 , double widthMass , double gap , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// flexure4D 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure4D ( double x , double y , 

double width1 , double width2 , double width3 , double length1 , double 

length2 , double widthMass , double lengthMass , double gap , double 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 462 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// flexure4D 

p u b l i c s t a t i c void createFlexure4D ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double width3 , double 

length1 , double length2 , double widthMass , double lengthMass , 

double gap , double baseHeight , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure4E 

p u b l i c s t a t i c A r r a y L i s t <GArea> createFlexure4E ( double x , double y , 

double width1 , double width2 , double width3 , double width4 , double 

length1 , double length2 , double length3 , double length4 , double 

length5 , double baseHeight , double baseWidth , double anchorDistance 

, i n t anchorLayer , double THETA , i n t gdsLayer ) 

// flexure4E 

p u b l i c s t a t i c void createFlexure4E ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double width3 , double 

width4 , double length1 , double length2 , double length3 , double 

length4 , double length5 , double baseHeight , double baseWidth , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// c a n t i l e v e r L 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e C a n t i l e v e r L ( double x , double y , 

double width , double startL , double pitch , i n t numElements , double 

baseHeight , double baseExtent , double linearVar , double THETA , i n t 

gdsLayer ) 

// c a n t i l e v e r L 

p u b l i c s t a t i c void c r e a t e C a n t i l e v e r L ( Struct currentStruct , double x , 

double y , double width , double startL , double pitch , i n t 

numElements , double baseHeight , double baseExtent , double linearVar 

, double THETA , i n t gdsLayer ) 

// c a n t i l e v e r P 

p u b l i c s t a t i c A r r a y L i s t <GArea> cr ea teC an til ev erP ( double x , double y , 

double width , double startL , double pitch , i n t numElements , double 

baseHeight , double baseExtent , double percentageVar , double THETA , 

i n t gdsLayer ) 

// c a n t i l e v e r P 

p u b l i c s t a t i c void cre at eCa nti le ver P ( Struct currentStruct , double x , 

double y , double width , double startL , double pitch , i n t 

numElements , double baseHeight , double baseExtent , double 

percentageVar , double THETA , i n t gdsLayer ) 

// c a n t i l e v e r S i n e 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e C a n t i l e v e r S i n e ( double x , double y , 

double width , double startL , double pitch , i n t numElements , double 

baseHeight , double baseExtent , double sineAmplitude , double THETA , 

i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 463 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// c a n t i l e v e r S i n e 

p u b l i c s t a t i c void c r e a t e C a n t i l e v e r S i n e ( Struct currentStruct , double x , 

double y , double width , double startL , double pitch , i n t
 

numElements , double baseHeight , double baseExtent , double
 

sineAmplitude , double THETA , i n t gdsLayer )
 

// c a n t i l e v e r L S E 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverLSE ( double x , double y , 

double width , double startL , double endL , double pitch , i n t 

numElements , double baseHeight , double baseExtent , double THETA , 

i n t gdsLayer ) 

// c a n t i l e v e r L S E 

p u b l i c s t a t i c void createCantileverLSE ( Struct currentStruct , double x , 

double y , double width , double startL , double endL , double pitch , 

i n t numElements , double baseHeight , double baseExtent , double THETA 

, i n t gdsLayer ) 

// cantileverNLSE 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverNLSE ( double x , double y , 

double width , double startL , double endL , double pitch , i n t 

numElements , double baseHeight , double baseExtent , double THETA , 

i n t gdsLayer ) 

// cantileverNLSE 

p u b l i c s t a t i c void createCantileverNLSE ( Struct currentStruct , double x , 

double y , double width , double startL , double endL , double pitch , 

i n t numElements , double baseHeight , double baseExtent , double THETA 

, i n t gdsLayer ) 

// cantileverCustom − a l i s an array l i s t with values s1 w1 L1 . . . . sn 

wn Ln 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverCustom ( double x , double 

y , A r r a y L i s t <Double> al , double sEnd , double bH , double THETA , i n t 

gdsLayer ) 

// cantileverCustom − a l i s an array l i s t with values s1 w1 L1 . . . . sn 

wn Ln 

p u b l i c s t a t i c void createCantileverCustom ( Struct currentStruct , double 

x , double y , A r r a y L i s t <Double> al , double sEnd , double bH , double 

THETA , i n t gdsLayer ) 

// c a n t il e v er S R 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverSR ( double x , double y , 

double width , double length , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 464 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// c a n t il e v er S R 

p u b l i c s t a t i c void createCantileverSR ( Struct currentStruct , double x , 

double y , double width , double length , double baseHeight , double 

baseExtent , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// c a n t i l e v e r S T r i 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e C a n t i l e v e r S T r i ( double x , double y , 

double width , double length , double t r i a n g l e H e i g h t , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// c a n t i l e v e r S T r i 

p u b l i c s t a t i c void c r e a t e C a n t i l e v e r S T r i ( Struct currentStruct , double x , 

double y , double width , double length , double t r i a n g l e H e i g h t , 

double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSTrap 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverSTrap ( double x , double y 

, double widthBottom , double widthTop , double length , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSTrap 

p u b l i c s t a t i c void createCantileverSTrap ( Struct currentStruct , double x 

, double y , double widthBottom , double widthTop , double length , 

double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSPaddle 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverSPaddle ( double x , double 

y , double widthBot , double widthTop , double lengthBot , double 

lengthTop , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSPaddle 

p u b l i c s t a t i c void createCantileverSPaddle ( Struct currentStruct , double 

x , double y , double widthBot , double widthTop , double lengthBot , 

double lengthTop , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSCH 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverSCH ( double x , double y , 

double width , double radius , i n t numSides , double baseHeight , 

double baseExtent , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 465 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// cantileverSCH 

p u b l i c s t a t i c void createCantileverSCH ( Struct currentStruct , double x , 

double y , double width , double radius , i n t numSides , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSCF 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverSCF ( double x , double y , 

double width , double radius , i n t numSides , double length , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverSCF 

p u b l i c s t a t i c void createCantileverSCF ( Struct currentStruct , double x , 

double y , double width , double radius , i n t numSides , double length , 

double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHR 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverHR ( double x , double y , 

double width , double length , double hollowW , double baseHeight , 

double baseExtent , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// cantileverHR 

p u b l i c s t a t i c void createCantileverHR ( Struct currentStruct , double x , 

double y , double width , double length , double hollowW , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// c a n t i l e v e r H T r i 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e C a n t i l e v e r H T r i ( double x , double y , 

double width , double length , double t r i a n g l e H e i g h t , double hollowW 

, double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// c a n t i l e v e r H T r i 

p u b l i c s t a t i c void c r e a t e C a n t i l e v e r H T r i ( Struct currentStruct , double x , 

double y , double width , double length , double t r i a n g l e H e i g h t , 

double hollowW , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHTrap 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverHTrap ( double x , double y 

, double widthBottom , double widthTop , double length , double 

hollowW , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 466 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// cantileverHTrap 

p u b l i c s t a t i c void createCantileverHTrap ( Struct currentStruct , double x 

, double y , double widthBottom , double widthTop , double length , 

double hollowW , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHPaddle 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverHPaddle ( double x , double 

y , double widthBot , double widthTop , double lengthBot , double 

lengthTop , double hollowW , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHPaddle 

p u b l i c s t a t i c void createCantileverHPaddle ( Struct currentStruct , double 

x , double y , double widthBot , double widthTop , double lengthBot , 

double lengthTop , double hollowW , double baseHeight , double 

baseExtent , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// cantileverHCH 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverHCH ( double x , double y , 

double width , double radius , i n t numSides , double hollowW , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHCH 

p u b l i c s t a t i c void createCantileverHCH ( Struct currentStruct , double x , 

double y , double width , double radius , i n t numSides , double hollowW 

, double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHCF 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverHCF ( double x , double y , 

double width , double radius , i n t numSides , double length , double 

hollowW , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverHCF 

p u b l i c s t a t i c void createCantileverHCF ( Struct currentStruct , double x , 

double y , double width , double radius , i n t numSides , double length , 

double hollowW , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverPB2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverPB2 ( double x , double y , 

double width , double length1 , double length2 , double lengthTop , 

double gap , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 467 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// cantileverPB2 

p u b l i c s t a t i c void createCantileverPB2 ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

lengthTop , double gap , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) { 

// cantileverPB3 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverPB3 ( double x , double y , 

double width , double length1 , double length2 , double length3 , 

double lengthTop , double gap , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer 

) 

// cantileverPB3 

p u b l i c s t a t i c void createCantileverPB3 ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

length3 , double lengthTop , double gap , double baseHeight , double 

baseExtent , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// cantileverUR 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverUR ( double x , double y , 

double width , double length1 , double length2 , double lengthTop , 

double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverUR 

p u b l i c s t a t i c void createCantileverUR ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

lengthTop , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverUCF 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverUCF ( double x , double y , 

double width , double length1 , double length2 , double lengthTop , 

double radius , i n t numSides , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverUCF 

p u b l i c s t a t i c void createCantileverUCF ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

lengthTop , double radius , i n t numSides , double baseHeight , double 

baseExtent , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// cantileverUC 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverUC ( double x , double y , 

double width , double length1 , double length2 , double diameter , i n t 

numSides , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 468 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// cantileverUC 

p u b l i c s t a t i c void createCantileverUC ( Struct currentStruct , double x , 

double y , double width , double length1 , double length2 , double 

diameter , i n t numSides , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverUCC 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverUCC ( double x , double y , 

double width1 , double width2 , double length1 , double length2 , 

double length3 , double lengthTop , double baseHeight , double 

baseExtent , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// cantileverUCC 

p u b l i c s t a t i c void createCantileverUCC ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2 , double length3 , double lengthTop , double baseHeight , 

double baseExtent , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

// cantileverUCP 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverUCP ( double x , double y , 

double width1 , double width2 , double length1 , double length2a , 

double length2b , double length3 , double lengthTop , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverUCP 

p u b l i c s t a t i c void createCantileverUCP ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double length1 , double 

length2a , double length2b , double length3 , double lengthTop , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileve rCE 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCantileverCE ( double x , double y , 

double width , double length , double rX , double rY , i n t numSides , 

double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// cantileve rCE 

p u b l i c s t a t i c void createCantileverCE ( Struct currentStruct , double x , 

double y , double width , double length , double rX , double rY , i n t 

numSides , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverCEPaddle 

p u b l i c s t a t i c A r r a y L i s t <GArea> createCnntileverCEPaddle ( double x , 

double y , double width , double length , double rX1 , double rY1 , 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 469 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double rX2 , double rY2 , i n t numSides , double paddleW , double 

paddleL , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// cantileverCEPaddle 

p u b l i c s t a t i c void createCnntileverCEPaddle ( Struct currentStruct , 

double x , double y , double width , double length , double rX1 , double 

rY1 , double rX2 , double rY2 , i n t numSides , double paddleW , double 

paddleL , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamL 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamL ( double x , double y , double 

width , double startL , double pitch , i n t numElements , double 

baseHeight , double baseExtent , double linearVar , double THETA , i n t 

gdsLayer ) 

// dcBeamL 

p u b l i c s t a t i c void createDcBeamL ( Struct currentStruct , double x , double 

y , double width , double startL , double pitch , i n t numElements , 

double baseHeight , double baseExtent , double linearVar , double 

THETA , i n t gdsLayer ) 

// dcBeamP 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamP ( double x , double y , double 

width , double startL , double pitch , i n t numElements , double 

baseHeight , double baseExtent , double percentageVar , double THETA , 

i n t gdsLayer ) 

// dcBeamP 

p u b l i c s t a t i c void createDcBeamP ( Struct currentStruct , double x , double 

y , double width , double startL , double pitch , i n t numElements , 

double baseHeight , double baseExtent , double percentageVar , double 

THETA , i n t gdsLayer ) 

// dcBeamLSE 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamLSE ( double x , double y , 

double width , double startL , double endL , double pitch , i n t 

numElements , double baseHeight , double baseExtent , double THETA , 

i n t gdsLayer ) 

// dcBeamLSE 

p u b l i c s t a t i c void createDcBeamLSE ( Struct currentStruct , double x , 

double y , double width , double startL , double endL , double pitch , 

i n t numElements , double baseHeight , double baseExtent , double THETA 

, i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 470 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// dcBeamNLSE 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamNLSE ( double x , double y , 

double width , double startL , double endL , double pitch , i n t 

numElements , double baseHeight , double baseExtent , double THETA , 

i n t gdsLayer ) 

// dcBeamNLSE 

p u b l i c s t a t i c void createDcBeamNLSE ( Struct currentStruct , double x , 

double y , double width , double startL , double endL , double pitch , 

i n t numElements , double baseHeight , double baseExtent , double THETA 

, i n t gdsLayer ) 

// dcBeamCustom − a l i s a vector array of s1 w1 L1 . . . . sn wn LN values 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamCustom ( double x , double y , 

A r r a y L i s t <Double> al , double sEnd , double bH , double THETA , i n t 

gdsLayer ) 

// dcBeamCustom − a l i s a vector array of s1 w1 L1 . . . . sn wn LN values 

p u b l i c s t a t i c void createDcBeamCustom ( Struct currentStruct , double x , 

double y , A r r a y L i s t <Double> al , double sEnd , double bH , double 

THETA , i n t gdsLayer ) 

// dcBeamR 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamR ( double x , double y , double 

width , double length , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamR 

p u b l i c s t a t i c void createDcBeamR ( Struct currentStruct , double x , double 

y , double width , double length , double baseHeight , double 

baseExtent , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// dcBeamT 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamT ( double x , double y , double 

width1 , double length1 , double width2 , double length2 , double 

baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamT 

p u b l i c s t a t i c void createDcBeamT ( Struct currentStruct , double x , double 

y , double width1 , double length1 , double width2 , double length2 , 

double baseHeight , double baseExtent , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamT2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamT2 ( double x , double y , 

double width1 , double width2 , double width3 , double width4 , double 

length1 , double length2 , double length3 , double gap , double 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 471 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamT2 

p u b l i c s t a t i c void createDcBeamT2 ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double width3 , double 

width4 , double length1 , double length2 , double length3 , double gap , 

double baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamCB 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamCB ( double x , double y , 

double width , double lengthStart , double lengthEnd , i n t numElements 

, double baseHeight , double baseWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamCB 

p u b l i c s t a t i c void createDcBeamCB ( Struct currentStruct , double x , 

double y , double width , double lengthStart , double lengthEnd , i n t 

numElements , double baseHeight , double baseWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamC 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDcBeamC ( double x , double y , double 

width , double length , double rX1 , double rY1 , double rX2 , double 

rY2 , i n t numSides , double baseHeight , double baseExtent , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// dcBeamC 

p u b l i c s t a t i c void createDcBeamC ( Struct currentStruct , double x , double 

y , double width , double length , double rX1 , double rY1 , double rX2 

, double rY2 , i n t numSides , double baseHeight , double baseExtent , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// MARAs 

p u b l i c s t a t i c void createMARAs ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1, double L2 , 

double W2, double space , double hOverlap , double lengthSide , double 

hElectrode , double LB , double HB , double diameter , i n t numSides , 

i n t layerFront , i n t layerBack , i n t layerMetal , double THETA ) 

// MARA 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMARA ( double x , double y , i n t 

numElements , double L1 , double W1, double L2 , double W2, double 

space , double hOverlap , double lengthSide , double hElectrode , 

double LB , double HB , double diameter , i n t numSides , i n t layerFront 

, i n t layerBack , i n t layerMetal , double THETA ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 472 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// MARA 

p u b l i c s t a t i c void createMARA ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1, double L2 , double W2, 

double space , double hOverlap , double lengthSide , double hElectrode 

, double LB , double HB , double diameter , i n t numSides , i n t 

layerFront , i n t layerBack , i n t layerMetal , double THETA ) 

// MATALWs 

p u b l i c s t a t i c void createMATALWs ( Struct currentStruct , S t r i n g id , 

double x , double y , i n t numElements , double L , double Wa, double Wb 

, double space , double hOverlap , double lengthSide , double 

hElectrode , double LB , double HB , double diameter , i n t numSides , 

i n t layerFront , i n t layerBack , i n t layerMetal , double THETA ) 

// MATALW 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMATALW ( double x , double y , i n t 

numElements , double L , double Wa, double Wb, double space , double 

hOverlap , double lengthSide , double hElectrode , double LB , double 

HB , double diameter , i n t numSides , i n t layerFront , i n t layerBack , 

i n t layerMetal , double THETA ) 

// MATALW 

p u b l i c s t a t i c void createMATALW ( Struct currentStruct , double x , double 

y , i n t numElements , double L , double Wa, double Wb, double space , 

double hOverlap , double lengthSide , double hElectrode , double LB , 

double HB , double diameter , i n t numSides , i n t layerFront , i n t 

layerBack , i n t layerMetal , double THETA ) 

// MATAs 

p u b l i c s t a t i c void createMATAs ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

double L2 , double W2a, double W2b, double space , double hOverlap , 

double lengthSide , double hElectrode , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MATA 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMATA ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double hOverlap , double lengthSide , 

double hElectrode , double LB , double HB , double diameter , i n t 

numSides , i n t layerFront , i n t layerBack , i n t layerMetal , double 

THETA ) 

// MATA 

p u b l i c s t a t i c void createMATA ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double hOverlap , double 

lengthSide , double hElectrode , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 473 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// MAR2s 

p u b l i c s t a t i c void createMAR2s ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

double L2 , double W2a, double W2b, double space , double lowerSpace , 

double hOverlap , double hElectrode , double lengthSide , double LB , 

double HB , double diameter , i n t numSides , i n t layerFront , i n t 

layerBack , i n t layerMetal , double THETA ) 

// MAR2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMAR2 ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double lowerSpace , double hOverlap , 

double hElectrode , double lengthSide , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MAR2 

p u b l i c s t a t i c void createMAR2 ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double lowerSpace , double 

hOverlap , double hElectrode , double lengthSide , double LB , double 

HB , double diameter , i n t numSides , i n t layerFront , i n t layerBack , 

i n t layerMetal , double THETA ) 

// MAR3s 

p u b l i c s t a t i c void createMAR3s ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

double L2 , double W2a, double W2b, double space , double lowerSpace , 

double hOverlap , double hElectrode , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MAR3 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMAR3 ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double lowerSpace , double hOverlap , 

double hElectrode , double LB , double HB , double diameter , i n t 

numSides , i n t layerFront , i n t layerBack , i n t layerMetal , double 

THETA ) 

// MAR3 

p u b l i c s t a t i c void createMAR3 ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double lowerSpace , double 

hOverlap , double hElectrode , double LB , double HB , double diameter , 

i n t numSides , i n t layerFront , i n t layerBack , i n t layerMetal , 

double THETA ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 474 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// MARCs 

p u b l i c s t a t i c void createMARCs ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

double L2 , double W2a, double W2b, double space , double lowerSpace , 

double hOverlap , double hElectrode , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MARC 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMARC ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double lowerSpace , double hOverlap , 

double hElectrode , double LB , double HB , double diameter , i n t 

numSides , i n t layerFront , i n t layerBack , i n t layerMetal , double 

THETA ) 

// MARC 

p u b l i c s t a t i c void createMARC ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double lowerSpace , double 

hOverlap , double hElectrode , double LB , double HB , double diameter , 

i n t numSides , i n t layerFront , i n t layerBack , i n t layerMetal , 

double THETA ) 

// MAT2s 

p u b l i c s t a t i c void createMAT2s ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

double L2 , double W2a, double W2b, double space , double lowerSpace , 

double hOverlap , double hElectrode , double lengthSide , double LB , 

double HB , double diameter , i n t numSides , i n t layerFront , i n t 

layerBack , i n t layerMetal , double THETA ) 

// MAT2 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMAT2 ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double lowerSpace , double hOverlap , 

double hElectrode , double lengthSide , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MAT2 

p u b l i c s t a t i c void createMAT2 ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double lowerSpace , double 

hOverlap , double hElectrode , double lengthSide , double LB , double 

HB , double diameter , i n t numSides , i n t layerFront , i n t layerBack , 

i n t layerMetal , double THETA ) 

// MAT3s 

p u b l i c s t a t i c void createMAT3s ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 475 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

double L2 , double W2a, double W2b, double space , double lowerSpace , 

double hOverlap , double hElectrode , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MAT3 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMAT3 ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double lowerSpace , double hOverlap , 

double hElectrode , double LB , double HB , double diameter , i n t 

numSides , i n t layerFront , i n t layerBack , i n t layerMetal , double 

THETA ) 

// MAT3 

p u b l i c s t a t i c void createMAT3 ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double lowerSpace , double 

hOverlap , double hElectrode , double LB , double HB , double diameter , 

i n t numSides , i n t layerFront , i n t layerBack , i n t layerMetal , 

double THETA ) 

// MATCs 

p u b l i c s t a t i c void createMATCs ( Struct currentStruct , S t r i n g id , double 

x , double y , i n t numElements , double L1 , double W1a, double W1b, 

double L2 , double W2a, double W2b, double space , double lowerSpace , 

double hOverlap , double hElectrode , double LB , double HB , double 

diameter , i n t numSides , i n t layerFront , i n t layerBack , i n t 

layerMetal , double THETA ) 

// MATC 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMATC ( double x , double y , i n t 

numElements , double L1 , double W1a, double W1b, double L2 , double 

W2a, double W2b, double space , double lowerSpace , double hOverlap , 

double hElectrode , double LB , double HB , double diameter , i n t 

numSides , i n t layerFront , i n t layerBack , i n t layerMetal , double 

THETA ) 

// MATC 

p u b l i c s t a t i c void createMATC ( Struct currentStruct , double x , double y , 

i n t numElements , double L1 , double W1a, double W1b, double L2 , 

double W2a, double W2b, double space , double lowerSpace , double 

hOverlap , double hElectrode , double LB , double HB , double diameter , 

i n t numSides , i n t layerFront , i n t layerBack , i n t layerMetal , 

double THETA ) 

// MARALINEARs 

p u b l i c s t a t i c void createMARALINEARs ( Struct currentStruct , S t r i n g id , 

double x , double y , i n t numElements , double L , double dL , double W, 

double space , double hOverlap , double lengthSide , double 

hElectrode , double LB , double HB , double diameter , i n t numSides , 

i n t layerFront , i n t layerBack , i n t layerMetal , double THETA ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 476 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// MARALINEAR 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMARALINEAR ( double x , double y , i n t 

numElements , double L , double dL , double W, double space , double 

hOverlap , double lengthSide , double hElectrode , double LB , double 

HB , double diameter , i n t numSides , i n t layerFront , i n t layerBack , 

i n t layerMetal , double THETA ) 

// MARALINEAR 

p u b l i c s t a t i c void createMARALINEAR ( Struct currentStruct , double x , 

double y , i n t numElements , double L , double dL , double W, double 

space , double hOverlap , double lengthSide , double hElectrode , 

double LB , double HB , double diameter , i n t numSides , i n t layerFront 

, i n t layerBack , i n t layerMetal ) 

// MARACURVEs 

p u b l i c s t a t i c void createMARACURVEs ( Struct currentStruct , S t r i n g id , 

double x , double y , i n t numElements , double L , double dL , double W, 

double space , double hOverlap , double lengthSide , double 

hElectrode , double LB , double HB , double diameter , i n t numSides , 

i n t layerFront , i n t layerBack , i n t layerMetal , double THETA , double 

shapeReso ) 

// MARACURVE 

p u b l i c s t a t i c A r r a y L i s t <GArea> createMARACURVE ( double x , double y , i n t 

numElements , double L , double dL , double W, double space , double 

hOverlap , double lengthSide , double hElectrode , double LB , double 

HB , double diameter , i n t numSides , i n t layerFront , i n t layerBack , 

i n t layerMetal , double THETA , double shapeReso ) 

// MARACURVE 

p u b l i c s t a t i c void createMARACURVE ( Struct currentStruct , double x , 

double y , i n t numElements , double L , double dL , double W, double 

space , double hOverlap , double lengthSide , double hElectrode , 

double LB , double HB , double diameter , i n t numSides , i n t layerFront 

, i n t layerBack , i n t layerMetal , double THETA , double shapeReso ) 

// GuckelRing 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGuckelRing ( double x , double y , 

double ringWidth , double radius , i n t numOfSides , double beamWidth , 

double base , double connectorLegth , double connectorWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// GuckelRing 

p u b l i c s t a t i c void createGuckelRing ( Struct currentStruct , double x , 

double y , double ringWidth , double radius , i n t numOfSides , double 

beamWidth , double base , double connectorLegth , double 

connectorWidth , double anchorDistance , i n t anchorLayer , double 

THETA , i n t gdsLayer ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 477 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

// GuckelRingArray 

p u b l i c s t a t i c A r r a y L i s t <GArea> createGuckelRingArray ( double x , double y 

, double ringWidth , double radiusStart , double radiusEnd , double 

deltaRadius , i n t numOfSides , double beamWidth , double base , double 

connectorLegth , double connectorWidth , double anchorDistance , i n t 

anchorLayer , double THETA , i n t gdsLayer ) 

// GuckelRingArray 

p u b l i c s t a t i c void createGuckelRingArray ( Struct currentStruct , double x 

, double y , double ringWidth , double radiusStart , double radiusEnd , 

double deltaRadius , i n t numOfSides , double beamWidth , double base , 

double connectorLegth , double connectorWidth , double 

anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// diamondRing 

p u b l i c s t a t i c A r r a y L i s t <GArea> createDiamondRing ( double x , double y , 

double width1 , double width2 , double width3 , double length1 , double 

length2 , double length3 , double baseHeight , double baseWidth , 

double anchorDistance , i n t anchorLayer , double THETA , i n t gdsLayer ) 

// diamondRing 

p u b l i c s t a t i c void createDiamondRing ( Struct currentStruct , double x , 

double y , double width1 , double width2 , double width3 , double 

length1 , double length2 , double length3 , double baseHeight , double 

baseWidth , double anchorDistance , i n t anchorLayer , double THETA , 

i n t gdsLayer ) 

// f l u i d C e l l 

p u b l i c s t a t i c A r r a y L i s t <GArea> c r e a t e F l u i d C e l l ( double x , double y , 

double w1 , double w2 , double w2T , double w3 , double w4 , double L1 , 

double L2 , double r , double r1 , double r2 , double r3 , i n t numSides , 

double a , double b , double c , double d , double e , double f , double 

g , double h , double i , i n t La , i n t Lb , i n t Lc , i n t Ld , i n t Le , i n t 

Lf , double THETA , double shapeReso ) 

// f l u i d C e l l 

p u b l i c s t a t i c void c r e a t e F l u i d C e l l ( Struct currentStruct , double x , 

double y , double w1 , double w2 , double w2T , double w3 , double w4 , 

double L1 , double L2 , double r , double r1 , double r2 , double r3 , 

i n t numSides , double a , double b , double c , double d , double e , 

double f , double g , double h , double i , i n t La , i n t Lb , i n t Lc , i n t 

Ld , i n t Le , i n t Lf , double THETA , double shapeReso ) 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 478 of 488 
Bibliography

Email: Nanolithography.Toolbox@nist.gov

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[1]	 A. J. Speth, A. D. Wilson, A. Kern, and T. H. P. Chang, “Electron beam 

lithography using vector scan techniques,” Journal of Vacuum Science 

& Technology, vol. 12, pp. 1235–1239, Nov. 1975. 

[2]	 W. D. Grobman and T. W. Studwell, “Data compaction and vector scan 

e-beam system performance improvement using a novel algorithm for 

recognition of pattern step and repeats,” Journal of Vacuum Science & 

Technology, vol. 16, pp. 1803–1808, Nov. 1979. 

[3]	 W. D. Grobman, “An overview of pattern data preparation for vector scan 

electron beam lithography,” Journal of Vacuum Science & Technology, 

vol. 17, pp. 1156–1163, Sept. 1980. 

[4]	 S. M. Arnold, “Electron beam fabrication of computer-generated holograms,” Optical engineering, vol. 24, no. 5, pp. 245803–245803, 1985. 

[5]	 T. Shiono, K. Setsune, O. Yamazaki, and K. Wasa, “Computer-controlled 

electron beam writing system for thin film micro-optics,” Journal of 

Vacuum Science & Technology B, vol. 5, pp. 33–36, Jan. 1987. 

[6]	 V. Bogli, P. Unger, H. Beneking, B. Niemann, P. Guttmann, and W. MeyerIlse, “Electron Beam Lithography And Nanometer Structures: Fabrication 

Of Microzone Plates,” Optical Engineering, vol. 27, no. 2, pp. 272143– 

272143–, 1988. 

[7]	 M. A. Gesley, F. J. Hohn, R. G. Viswanathan, and A. D. Wilson, “A vector scan 

thermal field emission nanolithography system,” Journal of Vacuum 

Science & Technology B, vol. 6, pp. 2014–2018, Nov. 1988. 

[8]	 U. Klein and F. Gotz, “Definition of geometries with complicated, curved 

boundaries for electron beam pattern generation,” Microelectronic Engineering, vol. 9, no. 1, pp. 495–497, 1989. 

[9]	 K. S. Urquhart, S. H. Lee, C. C. Guest, M. R. Feldman, and H. Farhoosh, 

“Computer aided design of computer generated holograms for electron 

beam fabrication,” Applied Optics, vol. 28, pp. 3387–3396, Aug. 1989. 

[10]	 R. W. Hawley and N. C. Gallagher Jr, “Efficient electron-beam pattern data 

format for the production of binary computer-generated holograms,” 

in OE/LASE’90, 14-19 Jan., Los Angeles, CA, pp. 11–23, International 

Society for Optics and Photonics, 1990. 

479 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[11]	 T. Shiono and H. Ogawa, “Diffraction-limited blazed reflection diffractive 

microlenses for oblique incidence fabricated by electron-beam lithography,” Applied optics, vol. 30, no. 25, pp. 3643–3649, 1991. 

[12]	 T. Erdogan, O. King, G. W. Wicks, D. G. Hall, E. H. Anderson, and M. J. 

Rooks, “Circularly symmetric operation of a concentric-circle-grating, 

surface- emitting, AlGaAs/GaAs quantum-well semiconductor laser,” 

Applied Physics Letters, vol. 60, no. 16, p. 1921, 1992. 

[13]	 O. King, “Curved grating fabrication techniques for surface-emitting 

distributed feedback lasers,” Journal of Vacuum Science & Technology 

B: Microelectronics and Nanometer Structures, vol. 10, p. 2974, Nov. 

1992. 

[14]	 D. M. Newman, R. W. Hawley, D. L. Goeckel, R. D. Crawford, S. Abraham, 

and N. C. Gallagher, “Efficient storage, computation, and exposure of 

computer-generated holograms by electron-beam lithography,” Applied 

optics, vol. 32, no. 14, pp. 2555–2565, 1993. 

[15]	 T. Shiono and H. Ogawa, “Planar-optic-disk pickup with diffractive microoptics,” Applied optics, vol. 33, no. 31, pp. 7350–7355, 1994. 

[16]	 F. Vasey, “Electron-beam lithography of curved structures with an enhanced vector-scan pattern generator supporting conic-based primitives,” Journal of Vacuum Science & Technology B: Microelectronics 

and Nanometer Structures, vol. 12, p. 3460, Nov. 1994. 

[17]	 E. H. Anderson, V. Boegli, and L. P. Muray, “Electron beam lithography digital pattern generator and electronics for generalized curvilinear structures,” Journal of Vacuum Science & Technology B, vol. 13, pp. 2529– 

2534, Nov. 1995. 

[18]	 J. Fan, D. Zaleta, K. S. Urquhart, and S. H. Lee, “Efficient encoding algorithms for computer-aided design of diffractive optical elements by 

the use of electron-beam fabrication,” Applied optics, vol. 34, no. 14, 

pp. 2522–2533, 1995. 

[19]	 K. A. Goldberg, R. Beguiristain, J. Bokor, H. Medecki, D. T. Attwood, K. Jackson, E. Tejnil, and G. E. Sommargren, “Progress towards λ/20 extreme 

ultraviolet interferometry,” Journal of Vacuum Science & Technology B, 

vol. 13, pp. 2923–2927, Nov. 1995. 

[20]	 D. Prongue, H. Rothuizen, F. Vasey, and P. Vettiger, “Enhanced e-beam system for the fabrication of optical elements,” Microelectronic engineering, 

vol. 27, no. 1, pp. 163–166, 1995. 

[21]	 S. J. Spector, C. J. Jacobsen, and D. M. Tennant, “Process optimization 

for production of sub-20 nm soft x-ray zone plates,” Journal of Vacuum 

Science & Technology B, vol. 15, pp. 2872–2876, Nov. 1997. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 480 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[22]	 H. Rothuizen, D. Prongue, F. Vasey, and P. Vettiger, “A conic primitivebased pattern generator for electron-beam lithography of diffractive 

optical elements,” Microelectronic Engineering, vol. 34, pp. 243–260, 

Dec. 1997. 

[23]	 E. Di Fabrizio, F. Romanato, M. Gentili, S. Cabrini, B. Kaulich, J. Susini, 

and R. Barrett, “High-efficiency multilevel zone plates for keV X-rays,” 

Nature, vol. 401, pp. 895–898, Oct. 1999. 

[24]	 E. H. Anderson, D. L. Olynick, B. Harteneck, E. Veklerov, G. Denbeaux, 

W. Chao, A. Lucero, L. Johnson, and D. Attwood, “Nanofabrication and 

diffractive optics for high-resolution x-ray applications,” Journal of Vacuum Science & Technology B, vol. 18, pp. 2970–2975, Nov. 2000. 

[25]	 K. K. Lee, D. R. Lim, H.-C. Luan, A. Agarwal, J. Foresi, and L. C. Kimerling, 

“Effect of size and roughness on light transmission in a Si/SiO2 waveguide: Experiments and model,” Applied Physics Letters, vol. 77, no. 11, 

p. 1617, 2000. 

[26]	 W. Chao, B. D. Harteneck, J. A. Liddle, E. H. Anderson, and D. T. Attwood, 

“Soft X-ray microscopy at a spatial resolution better than 15 nm,” Nature, 

vol. 435, pp. 1210–1213, June 2005. 

[27]	 http://www.genisysgmbh.de/web/applications.html, “Mixed Exposure 

Options, HighResolution and Fast Writing, Multi-Pass Exposure, Fracture 

Optimization, Application Notes.” 

[28]	 E. Gogolides, V. Constantoudis, G. P. Patsis, and A. Tserepi, “A review of 

line edge roughness and surface nanotexture resulting from patterning 

processes,” Microelectronic Engineering, vol. 83, pp. 1067–1072, Apr. 

2006. 

[29]	 M. Lu, D. M. Tennant, and C. J. Jacobsen, “Orientation dependence 

of linewidth variation in sub-50-nm Gaussian e-beam lithography and 

its correction,” Journal of Vacuum Science & Technology B, vol. 24, 

pp. 2881–2885, Nov. 2006. 

[30]	 K. Evans-Lutterodt, A. Stein, J. M. Ablett, N. Bozovic, A. Taylor, and D. M. 

Tennant, “Using Compound Kinoform Hard-X-Ray Lenses to Exceed the 

Critical Angle Limit,” Physical Review Letters, vol. 99, p. 134801, Sept. 

2007. 

[31]	 M. Ubaldi, V. Stasi, D. Piccinin, and M. Martinelli, “Molecular roughness 

analysis of developed resist by LER method,” Microelectronic Engineering, vol. 84, pp. 1088–1091, May 2007. 

[32]	 M. Lu, L. E. Ocola, S. K. Gray, and G. P. Wiederrecht, “Fabrication of metallic 

nanoslit waveguides with sharp bends,” Journal of Vacuum Science & 

Technology B, vol. 26, pp. 2151–2155, Nov. 2008. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 481 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[33]	 S. Sardo, F. Giacometti, S. Doneda, U. Colombo, M. D. Muri, A. Donghi, 

R. Morson, G. Mutinati, A. Nottola, M. Gentili, and M. C. Ubaldi, “Line edge 

roughness (LER) reduction strategy for SOI waveguides fabrication,” 

Microelectronic Engineering, vol. 85, pp. 1210–1213, May 2008. 

[34]	 A. Stein, K. Evans-Lutterodt, N. Bozovic, and A. Taylor, “Fabrication of 

silicon kinoform lenses for hard x-ray focusing by electron beam lithography and deep reactive ion etching,” Journal of Vacuum Science & 

Technology B, vol. 26, pp. 122–127, Jan. 2008. 

[35]	 L. E. Ocola, “Nanoscale geometry assisted proximity effect correction for 

electron beam direct write nanolithography,” Journal of Vacuum Science 

& Technology B, vol. 27, pp. 2569–2571, Nov. 2009. 

[36]	 R. J. Bojko, J. Li, L. He, T. Baehr-Jones, M. Hochberg, and Y. Aida, “Electron 

beam lithography writing strategies for low loss, high confinement silicon 

optical waveguides,” Journal of Vacuum Science & Technology B, vol. 29, 

no. 6, p. 06F309, 2011. 

[37]	 C. Browning, T. Quaglio, T. Figueiro, S. Pauliac, J. Belledent, A. Fay, J. Bustos, J.-C. Marusic, and P. Schiavone, “Photonic curvilinear data processing,” p. 92350V, Oct. 2014. 

[38]	 M. I. Davanco and K. Srinivasan, “Efficient spectroscopy of single embedded emitters using optical fiber taper waveguides,” Optics Express, 

vol. 17, pp. 10542–10563, June 2009. 

[39]	 M. Davanco and K. Srinivasan, “Fiber-coupled semiconductor waveguides 

as an efficient optical interface to a single quantum dipole,” Optics 

Letters, vol. 34, pp. 2542–2544, Aug. 2009. 

[40]	 M. T. Rakher, L. Ma, O. Slattery, X. Tang, and K. Srinivasan, “Quantum 

transduction of telecommunications-band single photons from a quantum dot by frequency upconversion,” Nature Photonics, vol. 4, pp. 786– 

791, Nov. 2010. 

[41]	 M. Davanco and K. Srinivasan, “Hybrid gap modes induced by fiber taper 

waveguides: Application in spectroscopy of single solid-state emitters 

deposited on thin films,” Optics Express, vol. 18, pp. 10995–11007, May 

2010. 

[42]	 M. Davanco, M. T. Rakher, W. Wegscheider, D. Schuh, A. Badolato, and 

K. Srinivasan, “Efficient quantum dot single photon extraction into an 

optical fiber using a nanophotonic directional coupler,” Applied Physics 

Letters, vol. 99, p. 121101, Sept. 2011. 

[43]	 M. Davanco, M. T. Rakher, D. Schuh, A. Badolato, and K. Srinivasan, “A 

circular dielectric grating for vertical extraction of single quantum dot 

emission,” Applied Physics Letters, vol. 99, p. 041102, July 2011. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 482 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[44]	 M. T. Rakher and K. Srinivasan, “Subnanosecond electro-optic modulation of triggered single photons from a quantum dot,” Applied Physics 

Letters, vol. 98, p. 211103, May 2011. 

[45]	 F. Ferdous, H. Miao, D. E. Leaird, K. Srinivasan, J. Wang, L. Chen, L. T. 

Varghese, and A. M. Weiner, “Spectral line-by-line pulse shaping of onchip microresonator frequency combs,” Nature Photonics, vol. 5, pp. 770– 

776, Dec. 2011. 

[46]	 K. Srinivasan, H. Miao, M. T. Rakher, M. Davanco, and V. Aksyuk, “Optomechanical Transduction of an Integrated Silicon Cantilever Probe Using a 

Microdisk Resonator,” Nano Letters, vol. 11, pp. 791–797, Feb. 2011. 

[47]	 M. T. Rakher, L. Ma, M. Davanco, O. Slattery, X. Tang, and K. Srinivasan, 

“Simultaneous Wavelength Translation and Amplitude Modulation of 

Single Photons from a Quantum Dot,” Physical Review Letters, vol. 107, 

p. 083602, Aug. 2011. 

[48]	 S. Ates, I. Agha, A. Gulinatti, I. Rech, M. T. Rakher, A. Badolato, and K. Srinivasan, “Two-Photon Interference Using Background-Free Quantum Frequency Conversion of Single Photons Emitted by an InAs Quantum Dot,” 

Physical Review Letters, vol. 109, p. 147405, Oct. 2012. 

[49]	 M. Davanco, J. Chan, A. H. Safavi-Naeini, O. Painter, and K. Srinivasan, 

“Slot-mode-coupled optomechanical crystals,” Optics Express, vol. 20, 

pp. 24394–24410, Oct. 2012. 

[50]	 M. DavanÃğo, J. R. Ong, A. B. Shehata, A. Tosi, I. Agha, S. Assefa, F. Xia, 

W. M. J. Green, S. Mookherjea, and K. Srinivasan, “Telecommunicationsband heralded single photons from a silicon nanophotonic chip,” Applied 

Physics Letters, vol. 100, p. 261104, June 2012. 

[51]	 F. Ferdous, H. Miao, P.-H. Wang, D. E. Leaird, K. Srinivasan, L. Chen, 

V. Aksyuk, and A. M. Weiner, “Probing coherence in microcavity frequency 

combs via optical pulse shaping,” Optics Express, vol. 20, pp. 21033– 

21043, Sept. 2012. 

[52]	 I. Agha, M. Davanco, B. Thurston, and K. Srinivasan, “Low-noise chipbased frequency conversion by four-wave-mixing Bragg scattering in 

SiNx waveguides,” Optics Letters, vol. 37, pp. 2997–2999, July 2012. 

[53]	 H. Miao, K. Srinivasan, and V. Aksyuk, “A microelectromechanically controlled cavity optomechanical sensing system,” New Journal of Physics, 

vol. 14, p. 075015, July 2012. 

[54]	 Y. Liu, H. Miao, V. Aksyuk, and K. Srinivasan, “Wide cantilever stiffness 

range cavity optomechanical sensors for atomic force microscopy,” Optics Express, vol. 20, pp. 18268–18280, July 2012. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 483 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[55]	 S. Ates, L. Sapienza, M. Davanco, A. Badolato, and K. Srinivasan, “Bright 

Single-Photon Emission From a Quantum Dot in a Circular Bragg Grating 

Microcavity,” IEEE Journal of Selected Topics in Quantum Electronics, 

vol. 18, pp. 1711–1721, Nov. 2012. 

[56]	 F. Intravaia, P. S. Davids, R. S. Decca, V. A. Aksyuk, D. Lopez, and D. A. R. 

Dalvit, “Quasianalytical modal approach for computing Casimir interactions in periodic nanostructures,” Physical Review A, vol. 86, p. 042101, 

Oct. 2012. 

[57]	 K. J. Chau and H. J. Lezec, “Revisiting the Balazs thought experiment 

in the case of a left-handed material: electromagnetic-pulse-induced 

displacement of a dispersive, dissipative negative-index slab,” Optics 

Express, vol. 20, pp. 10138–10162, Apr. 2012. 

[58]	 P.-H. Wang, F. Ferdous, H. Miao, J. Wang, D. E. Leaird, K. Srinivasan, L. Chen, 

V. Aksyuk, and A. M. Weiner, “Observation of correlation between route 

to formation, coherence, noise, and communication performance of Kerr 

combs,” Optics Express, vol. 20, pp. 29284–29295, Dec. 2012. 

[59]	 R. Kumar, J. R. Ong, J. Recchio, K. Srinivasan, and S. Mookherjea, “Spectrally multiplexed and tunable-wavelength photon pairs at 1.55 Îijm from 

a silicon coupled-resonator optical waveguide,” Optics Letters, vol. 38, 

pp. 2969–2971, Aug. 2013. 

[60]	 Y. Liu, M. Davanco, V. Aksyuk, and K. Srinivasan, “Electromagnetically 

Induced Transparency and Wideband Wavelength Conversion in Silicon 

Nitride Microdisk Optomechanical Resonators,” Physical Review Letters, 

vol. 110, p. 223603, May 2013. 

[61]	 I. Agha, S. Ates, M. Davanco, and K. Srinivasan, “A chip-scale, 

telecommunications-band frequency conversion interface for quantum 

emitters,” Optics Express, vol. 21, pp. 21628–21638, Sept. 2013. 

[62]	 K. C. Balram, M. Davanco, J. Y. Lim, J. D. Song, and K. Srinivasan, “Moving 

boundary and photoelastic coupling in GaAs optomechanical resonators,” 

Optica, vol. 1, pp. 414–420, Dec. 2014. 

[63]	 M. Davanco, S. Ates, Y. Liu, and K. Srinivasan, “Si3N4 optomechanical crystals in the resolved-sideband regime,” Applied Physics Letters, 

vol. 104, p. 041101, Jan. 2014. 

[64]	 M. Davanco, C. S. Hellberg, S. Ates, A. Badolato, and K. Srinivasan, “Multiple time scale blinking in InAs quantum dot single-photon sources,” 

Physical Review B, vol. 89, p. 161303, Apr. 2014. 

[65]	 I. Agha, S. Ates, L. Sapienza, and K. Srinivasan, “Spectral broadening and 

shaping of nanosecond pulses: toward shaping of single photons from 

quantum emitters,” Optics Letters, vol. 39, pp. 5677–5680, Oct. 2014. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 484 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[66]	 R. Zhang, C. Ti, M. I. Davanco, Y. Ren, V. Aksyuk, Y. Liu, and K. Srinivasan, 

“Integrated tuning fork nanocavity optomechanical transducers with high 

fMQM product and stress-engineered frequency tuning,” Applied Physics 

Letters, vol. 107, p. 131110, Sept. 2015. 

[67]	 K. Grutter, M. Davanco, and K. Srinivasan, “SiN Nanobeam Optomechanical Crystals,” IEEE Journal of Selected Topics in Quantum Electronics, 

vol. 21, pp. 1–11, July 2015. 

[68]	 K. E. Grutter, M. I. Davanco, and K. Srinivasan, “Slot-mode optomechanical crystals: a versatile platform for multimode optomechanics,” Optica, 

vol. 2, p. 994, Nov. 2015. 

[69]	 K. A. Twedt, J. Zou, M. Davanco, K. Srinivasan, J. J. McClelland, and 

V. A. Aksyuk, “Imaging nanophotonic modes of microresonators using a 

focused ion beam,” Nature Photonics, vol. 10, pp. 35–39, Jan. 2016. 

[70]	 T. Tamir and S. T. Peng, “Analysis and design of grating couplers,” Applied 

physics, vol. 14, pp. 235–254, Nov. 1977. 

[71]	 K. A. Bates, L. Li, R. L. Roncone, and J. J. Burke, “Gaussian beams from 

variable groove depth grating couplers in planar waveguides,” Applied 

Optics, vol. 32, p. 2112, Apr. 1993. 

[72]	 R. Waldhausl, B. Schnabel, P. Dannberg, E.-B. Kley, A. Brauer, and K. Wolfgang, “Efficient Coupling into Polymer Waveguides by Gratings,” Applied 

Optics, vol. 36, pp. 9383–9390, Dec. 1997. 

[73]	 D. Taillaert, F. Van Laere, M. Ayre, W. Bogaerts, D. Van Thourhout, P. Bienstman, and R. Baets, “Grating Couplers for Coupling between Optical Fibers 

and Nanophotonic Waveguides,” Japanese Journal of Applied Physics, 

vol. 45, pp. 6071–6077, Aug. 2006. 

[74]	 F. Van Laere, G. Roelkens, M. Ayre, J. Schrauwen, D. Taillaert, 

D. Van Thourhout, T. Krauss, and R. Baets, “Compact and Highly Efficient 

Grating Couplers Between Optical Fiber and Nanophotonic Waveguides,” 

Journal of Lightwave Technology, vol. 25, pp. 151–156, Jan. 2007. 

[75] F. Van Laere, T. Claes, J. Schrauwen, S. Scheerlinck, W. Bogaerts, D. Taillaert, L. O’Faolain, D. Van Thourhout, and R. Baets, “Compact Focusing 

Grating Couplers for Silicon-on-Insulator Integrated Circuits,” IEEE Photonics Technology Letters, vol. 19, pp. 1919–1921, Dec. 2007. 

[76] http://www.skinni.com, “JGDS - Java GDS Library.” 

[77]	 http://www.genisysgmbh.de/web/applications.html, “GenISys - 3-D eBeam Lithography Application Note,” 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 485 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

[78]	 A. Schleunitz and H. Schift, “Fabrication of 3d nanoimprint stamps with 

continuous reliefs using dose-modulated electron beam lithography 

and thermal reflow,” Journal of Micromechanics and Microengineering, 

vol. 20, no. 9, p. 095002, 2010. 

[79]	 A. Schleunitz, C. Spreu, M. Vogler, H. Atasoy, and H. Schift, “Combining 

nanoimprint lithography and a molecular weight selective thermal reflow 

for the generation of mixed 3d structures,” Journal of Vacuum Science 

& Technology B, vol. 29, p. 06FC01, Nov. 2011. 

[80]	 A. Schleunitz, V. A. Guzenko, A. Schander, M. Vogler, and H. Schift, “Selective profile transformation of electron-beam exposed multilevel resist 

structures based on a molecular weight dependent thermal reflow,” Journal of Vacuum Science & Technology B, vol. 29, p. 06F302, Nov. 2011. 

[81]	 H. Schift, M. Altana, and A. Schleunitz, “Sidewall-angle dependent mold 

filling of three-dimensional microcavities in thermal nanoimprint lithography,” Journal of Vacuum Science & Technology B, vol. 30, p. 06FB09, 

Nov. 2012. 

[82]	 N. D. Bassim, A. Giles, J. D. Caldwell, and L. E. Ocola, “Focused Ion Beam 

Direct Write Nanofabrication of Surface Phonon Polariton Metamaterial 

Nanostructures,” Microscopy and Microanalysis, vol. 20, pp. 358–359, 

Aug. 2014. 

[83]	 E. I. Bromley, J. N. Randall, D. C. Flanders, and R. W. Mountain, “A technique for the determination of stress in thin films,” Journal of Vacuum 

Science & Technology B, vol. 1, pp. 1364–1366, Oct. 1983. 

[84]	 H. Guckel, T. Randazzo, and D. W. Burns, “A simple technique for the 

determination of mechanical strain in thin films with applications to 

polysilicon,” Journal of Applied Physics, vol. 57, pp. 1671–1675, Mar. 

1985. 

[85]	 M. G. Allen, M. Mehregany, R. T. Howe, and S. D. Senturia, “Microfabricated 

structures for the insitu measurement of residual stress, Young’s modulus, and ultimate strain of thin films,” Applied Physics Letters, vol. 51, 

pp. 241–243, July 1987. 

[86]	 M. Mehregany, R. T. Howe, and S. D. Senturia, “Novel microstructures for 

the insitu measurement of mechanical properties of thin films,” Journal 

of Applied Physics, vol. 62, pp. 3579–3584, Nov. 1987. 

[87]	 H. Guckel, D. Burns, C. Visser, H. Tilmans, and D. Deroo, “Fine-grained 

polysilicon films with built-in tensile strain,” IEEE Transactions on Electron Devices, vol. 35, pp. 800–801, June 1988. 

[88]	 K. Najafi and K. Suzuki, “A novel technique and structure for the measurement of intrinsic stress and Young’s modulus of thin films,” in IEEE 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 486 of 488 
This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

Micro Electro Mechanical Systems, 1989, Proceedings, An Investigation 

of Micro Structures, Sensors, Actuators, Machines and Robots, pp. 96– 

97, Feb. 1989. 

[89]	 L.-S. Fan, R. Muller, W. Yun, R. Howe, and J. Huang, “Spiral microstructures 

for the measurement of average strain gradients in thin films,” in IEEE 

Micro Electro Mechanical Systems, 1990. Proceedings, An Investigation 

of Micro Structures, Sensors, Actuators, Machines and Robots, pp. 177– 

181, Feb. 1990. 

[90]	 R. Pratt, G. Johnson, R. Howe, and J. Chang, “Micromechanical structures 

for thin film characterization,” in , 1991 International Conference on 

Solid-State Sensors and Actuators, 1991. Digest of Technical Papers, 

TRANSDUCERS ’91, pp. 205–208, June 1991. 

[91]	 H. Guckel, D. Burns, C. Rutigliano, E. Lovell, and B. Choi, “Diagnostic 

microstructures for the measurement of intrinsic strain in thin films,” 

Journal of Micromechanics and Microengineering, vol. 2, no. 2, p. 86, 

1992. 

[92]	 Y. Gianchandani, K. Najafi, and B. Orr, “Silicon micromachined thermal 

profilers,” in Electron Devices Meeting, 1993. IEDM ’93. Technical Digest., International, pp. 191–194, Dec. 1993. 

[93]	 L. Lin, R. Howe, and A. Pisano, “A passive, in situ micro strain gauge,” in 

Micro Electro Mechanical Systems, 1993, MEMS ’93, Proceedings An Investigation of Micro Structures, Sensors, Actuators, Machines and Systems. IEEE., pp. 201–206, Feb. 1993. 

[94]	 F. Ericson, S. Greek, J. Soderkvist, and J. Schweitz, “High Sensitive Internal Film Stress Measurement By An Improved Micromachined Indicator 

Structure,” in The 8th International Conference on Solid-State Sensors 

and Actuators, 1995 and Eurosensors IX.. Transducers ’95, vol. 2, pp. 84– 

87, June 1995. 

[95]	 Y. Gianchandani and K. Najafi, “Bent-beam strain sensors,” Journal of 

Microelectromechanical Systems, vol. 5, pp. 52–58, Mar. 1996. 

[96]	 L. Lin, A. Pisano, and R. Howe, “A micro strain gauge with mechanical 

amplifier,” Journal of Microelectromechanical Systems, vol. 6, pp. 313– 

321, Dec. 1997. 

[97]	 G. T. A. Kovacs, Micromachined transducers sourcebook. Boston, Ma: 

WCB, 1998. 

[98]	 S. D. Senturia, Microsystem design. Boston: Kluwer Academic Publishers, 

2001. 

[99] M. Gad-el Hak, The MEMS handbook. Boca Raton, FL: CRC Press, 2002. 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 487 of 488 
[100]	 N. Lobontiu and E. Garcia, Mechanics of microelectromechanical systems. New York: Kluwer Academic, 2005. 

[101]	 N. Lobontiu, Mechanical design of microresonators: modeling and applications. McGraw-Hill nanoscience and technology series, New York: 

McGraw-Hill, 2006. 

[102]	 J. A. Kubby, A guide to hands-on MEMS design and prototyping. Cambridge, UK ; New York: Cambridge University Press, 2011. 

[103]	 V. Kempe, Inertial MEMS: principles and practice. Cambridge ; New York: 

Cambridge University Press, 2011. 

[104]	 N. Unal, D. Mahalu, O. Raslin, D. Ritter, C. Sambale, and U. Hofmann, 

“Third dimension of proximity effect correction (PEC),” Microelectronic 

Engineering, vol. 87, pp. 940–942, May 2010. 

This publication is available free of charge from: http://dx.doi.org/10.6028/NIST.HB.160 

NIST • CNST Nanolithography Toolbox v2016.09.01 • http://www.nist.gov/cnst/ page 488 of 488