################################################################################################
# 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')

# npn_05p00x05p00 [vnpn_5x5] BJT
logger.info('Extracting npn_05p00x05p00 BJT')
extract_devices(bjt4('npn_05p00x05p00'), { '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 })
ignore_parameter('npn_05p00x05p00', 'AE')

# npn_00p54x16p00 [vnpn_0p54x16] BJT
logger.info('Extracting npn_00p54x16p00 BJT')
extract_devices(bjt4('npn_00p54x16p00'), { '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 })
ignore_parameter('npn_00p54x16p00', 'AE')

# npn_00p54x08p00 [vnpn_0p54x8] BJT
logger.info('Extracting npn_00p54x08p00 BJT')
extract_devices(bjt4('npn_00p54x08p00'), { '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 })
ignore_parameter('npn_00p54x08p00', 'AE')

# npn_00p54x04p00 [vnpn_0p54x4] BJT
logger.info('Extracting npn_00p54x04p00 BJT')
extract_devices(bjt4('npn_00p54x04p00'), { 'C' => npn_00p54x04p00_c.extents,
                                           'B' => npn_00p54x04p00_b.extents,
                                           'E' => npn_00p54x04p00_e,
                                           'S' => sub.extents,
                                           'tC' => npn_00p54x04p00_c,
                                           'tB' => npn_00p54x04p00_b,
                                           'tE' => npn_00p54x04p00_e,
                                           'tS' => sub })
ignore_parameter('npn_00p54x04p00', 'AE')

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

# pnp_10p00x10p00_06v0 [vpnp_6p0_10x10] BJT
logger.info('Extracting pnp_10p00x10p00_06v0 BJT')
extract_devices(bjt3('pnp_10p00x10p00_06v0'), { '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 })
ignore_parameter('pnp_10p00x10p00_06v0', 'AE')

# pnp_05p00x05p00_06v0 [vpnp_6p0_5x5] BJT
logger.info('Extracting pnp_05p00x05p00_06v0 BJT')
extract_devices(bjt3('pnp_05p00x05p00_06v0'), { '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 })
ignore_parameter('pnp_05p00x05p00_06v0', 'AE')

# pnp_00p42x20p00_06v0 [vpnp_6p0_0p42x20] BJT
logger.info('Extracting pnp_00p42x20p00_06v0 BJT')
extract_devices(bjt3('pnp_00p42x20p00_06v0'), { '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 })
ignore_parameter('pnp_00p42x20p00_06v0', 'AE')

# pnp_00p42x10p00_06v0 [vpnp_6p0_0p42x10] BJT
logger.info('Extracting pnp_00p42x10p00_06v0 BJT')
extract_devices(bjt3('pnp_00p42x10p00_06v0'), { '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 })
ignore_parameter('pnp_00p42x10p00_06v0', 'AE')

# pnp_00p42x05p00_06v0 [vpnp_6p0_0p42x5] BJT
logger.info('Extracting pnp_00p42x05p00_06v0 BJT')
extract_devices(bjt3('pnp_00p42x05p00_06v0'), { '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 })
ignore_parameter('pnp_00p42x05p00_06v0', 'AE')
