################################################################################################
# Copyright 2023 GlobalFoundries PDK Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################################

#================================
# ------- BJT EXTRACTION --------
#================================

logger.info('Starting BJT EXTRACTION')

# ====================
# ------ vnpn --------
# ====================
logger.info('Starting vnpn BJT EXTRACTION')

# vnpn_5x5 BJT
ignore_parameter('vnpn_5x5', 'AE')
logger.info('Extracting vnpn_5x5 BJT')
extract_devices(bjt4('vnpn_5x5'), { 'C' => npn_05p00x05p00_c.extents,
                                           'B' => npn_05p00x05p00_b.extents,
                                           'E' => npn_05p00x05p00_e,
                                           'S' => sub.extents,
                                           'tC' => npn_05p00x05p00_c,
                                           'tB' => npn_05p00x05p00_b,
                                           'tE' => npn_05p00x05p00_e,
                                           'tS' => sub })

# vnpn_0p54x16 BJT
ignore_parameter('vnpn_0p54x16', 'AE')
logger.info('Extracting vnpn_0p54x16 BJT')
extract_devices(bjt4('vnpn_0p54x16'), { 'C' => npn_00p54x16p00_c.extents,
                                           'B' => npn_00p54x16p00_b.extents,
                                           'E' => npn_00p54x16p00_e,
                                           'S' => sub.extents,
                                           'tC' => npn_00p54x16p00_c,
                                           'tB' => npn_00p54x16p00_b,
                                           'tE' => npn_00p54x16p00_e,
                                           'tS' => sub })

# vnpn_0p54x8 BJT
ignore_parameter('vnpn_0p54x8', 'AE')
logger.info('Extracting vnpn_0p54x8 BJT')
extract_devices(bjt4('vnpn_0p54x8'), { 'C' => npn_00p54x08p00_c.extents,
                                           'B' => npn_00p54x08p00_b.extents,
                                           'E' => npn_00p54x08p00_e,
                                           'S' => sub.extents,
                                           'tC' => npn_00p54x08p00_c,
                                           'tB' => npn_00p54x08p00_b,
                                           'tE' => npn_00p54x08p00_e,
                                           'tS' => sub })

# vnpn_0p54x2 BJT
ignore_parameter('vnpn_0p54x2', 'AE')
logger.info('Extracting vnpn_0p54x2 BJT')
extract_devices(bjt4('vnpn_0p54x2'), { 'C' => npn_00p54x02p00_c.extents,
                                           'B' => npn_00p54x02p00_b.extents,
                                           'E' => npn_00p54x02p00_e,
                                           'S' => sub.extents,
                                           'tC' => npn_00p54x02p00_c,
                                           'tB' => npn_00p54x02p00_b,
                                           'tE' => npn_00p54x02p00_e,
                                           'tS' => sub })

# ====================
# ------- vpnp--------
# ====================
logger.info('Starting vpnp BJT EXTRACTION')

# vpnp_6p0_10x10 BJT
ignore_parameter('vpnp_6p0_10x10', 'AE')
logger.info('Extracting vpnp_6p0_10x10 BJT')
extract_devices(bjt3('vpnp_6p0_10x10'), { 'C' => pnp_10p00x10p00_06v0_c.extents,
                                           'B' => pnp_10p00x10p00_06v0_b.extents,
                                           'E' => pnp_10p00x10p00_06v0_e,
                                           'tC' => pnp_10p00x10p00_06v0_c,
                                           'tB' => pnp_10p00x10p00_06v0_b,
                                           'tE' => pnp_10p00x10p00_06v0_e })

# vpnp_6p0_5x5 BJT
ignore_parameter('vpnp_6p0_5x5', 'AE')
logger.info('Extracting vpnp_6p0_5x5 BJT')
extract_devices(bjt3('vpnp_6p0_5x5'), { 'C' => pnp_05p00x05p00_06v0_c.extents,
                                           'B' => pnp_05p00x05p00_06v0_b.extents,
                                           'E' => pnp_05p00x05p00_06v0_e,
                                           'tC' => pnp_05p00x05p00_06v0_c,
                                           'tB' => pnp_05p00x05p00_06v0_b,
                                           'tE' => pnp_05p00x05p00_06v0_e })

# vpnp_6p0_0p42x20 BJT
ignore_parameter('vpnp_6p0_0p42x20', 'AE')
logger.info('Extracting vpnp_6p0_0p42x20 BJT')
extract_devices(bjt3('vpnp_6p0_0p42x20'), { 'C' => pnp_00p42x20p00_06v0_c.extents,
                                           'B' => pnp_00p42x20p00_06v0_b.extents,
                                           'E' => pnp_00p42x20p00_06v0_e,
                                           'tC' => pnp_00p42x20p00_06v0_c,
                                           'tB' => pnp_00p42x20p00_06v0_b,
                                           'tE' => pnp_00p42x20p00_06v0_e })
# vpnp_6p0_0p42x10 BJT
ignore_parameter('vpnp_6p0_0p42x10', 'AE')
logger.info('Extracting vpnp_6p0_0p42x10 BJT')
extract_devices(bjt3('vpnp_6p0_0p42x10'), { 'C' => pnp_00p42x10p00_06v0_c.extents,
                                           'B' => pnp_00p42x10p00_06v0_b.extents,
                                           'E' => pnp_00p42x10p00_06v0_e,
                                           'tC' => pnp_00p42x10p00_06v0_c,
                                           'tB' => pnp_00p42x10p00_06v0_b,
                                           'tE' => pnp_00p42x10p00_06v0_e })

# vpnp_6p0_0p42x5 BJT
ignore_parameter('vpnp_6p0_0p42x5', 'AE')
logger.info('Extracting vpnp_6p0_0p42x5 BJT')
extract_devices(bjt3('vpnp_6p0_0p42x5'), { 'C' => pnp_00p42x05p00_06v0_c.extents,
                                           'B' => pnp_00p42x05p00_06v0_b.extents,
                                           'E' => pnp_00p42x05p00_06v0_e,
                                           'tC' => pnp_00p42x05p00_06v0_c,
                                           'tB' => pnp_00p42x05p00_06v0_b,
                                           'tE' => pnp_00p42x05p00_06v0_e })
