################################################################################################
# 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_02p00x02p00 BJT
ignore_parameter('npn_02p00x02p00', 'AE')
logger.info('Extracting npn_02p00x02p00 BJT')
extract_devices(bjt4('npn_02p00x02p00'), { 'C' => npn_02p00x02p00_c.extents,
                                           'B' => npn_02p00x02p00_b.extents,
                                           'E' => npn_02p00x02p00_e,
                                           'S' => sub.extents,
                                           'tC' => npn_02p00x02p00_c,
                                           'tB' => npn_02p00x02p00_b,
                                           'tE' => npn_02p00x02p00_e,
                                           'tS' => sub })

# npn_05p00x05p00 BJT
ignore_parameter('npn_05p00x05p00', 'AE')
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 })


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

# pnp_10p00x10p00 BJT
ignore_parameter('pnp_10p00x10p00', 'AE')
logger.info('Extracting pnp_10p00x10p00 BJT')
extract_devices(bjt3('pnp_10p00x10p00'), { 'C' => pnp_10p00x10p00_c.extents,
                                           'B' => pnp_10p00x10p00_b.extents,
                                           'E' => pnp_10p00x10p00_e,
                                           'tC' => pnp_10p00x10p00_c,
                                           'tB' => pnp_10p00x10p00_b,
                                           'tE' => pnp_10p00x10p00_e })

# pnp_05p00x05p00 BJT
ignore_parameter('pnp_05p00x05p00', 'AE')
logger.info('Extracting pnp_05p00x05p00 BJT')
extract_devices(bjt3('pnp_05p00x05p00'), { 'C' => pnp_05p00x05p00_c.extents,
                                           'B' => pnp_05p00x05p00_b.extents,
                                           'E' => pnp_05p00x05p00_e,
                                           'tC' => pnp_05p00x05p00_c,
                                           'tB' => pnp_05p00x05p00_b,
                                           'tE' => pnp_05p00x05p00_e })

# pnp_00p46x00p46 BJT
ignore_parameter('pnp_00p46x00p46', 'AE')
logger.info('Extracting pnp_00p46x00p46 BJT')
extract_devices(bjt3('pnp_00p46x00p46'), { 'C' => pnp_00p46x00p46_c.extents,
                                           'B' => pnp_00p46x00p46_b.extents,
                                           'E' => pnp_00p46x00p46_e,
                                           'tC' => pnp_00p46x00p46_c,
                                           'tB' => pnp_00p46x00p46_b,
                                           'tE' => pnp_00p46x00p46_e })

# pnp_00p46x01p20 BJT
ignore_parameter('pnp_00p46x01p20', 'AE')
logger.info('Extracting pnp_00p46x01p20 BJT')
extract_devices(bjt3('pnp_00p46x01p20'), { 'C' => pnp_00p46x01p20_c.extents,
                                           'B' => pnp_00p46x01p20_b.extents,
                                           'E' => pnp_00p46x01p20_e,
                                           'tC' => pnp_00p46x01p20_c,
                                           'tB' => pnp_00p46x01p20_b,
                                           'tE' => pnp_00p46x01p20_e })

# pnp_01p20x02p50 BJT
ignore_parameter('pnp_01p20x02p50', 'AE')
logger.info('Extracting pnp_01p20x02p50 BJT')
extract_devices(bjt3('pnp_01p20x02p50'), { 'C' => pnp_01p20x02p50_c.extents,
                                           'B' => pnp_01p20x02p50_b.extents,
                                           'E' => pnp_01p20x02p50_e,
                                           'tC' => pnp_01p20x02p50_c,
                                           'tB' => pnp_01p20x02p50_b,
                                           'tE' => pnp_01p20x02p50_e })

