################################################################################################
# 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_05p00x00p42 BJT
ignore_parameter('pnp_05p00x00p42', 'AE')
logger.info('Extracting pnp_05p00x00p42 BJT')
extract_devices(bjt3('pnp_05p00x00p42'), { 'C' => pnp_05p00x00p42_c.extents,
                                           'B' => pnp_05p00x00p42_b.extents,
                                           'E' => pnp_05p00x00p42_e,
                                           'tC' => pnp_05p00x00p42_c,
                                           'tB' => pnp_05p00x00p42_b,
                                           'tE' => pnp_05p00x00p42_e })

# pnp_00p46x1p2 BJT
ignore_parameter('pnp_00p46x1p2', 'AE')
logger.info('Extracting pnp_00p46x1p2 BJT')
extract_devices(bjt3('pnp_00p46x1p2'), { 'C' => pnp_00p46x1p2_c.extents,
                                           'B' => pnp_00p46x1p2_b.extents,
                                           'E' => pnp_00p46x1p2_e,
                                           'tC' => pnp_00p46x1p2_c,
                                           'tB' => pnp_00p46x1p2_b,
                                           'tE' => pnp_00p46x1p2_e })
    

# pnp_1p2x2p5 BJT
ignore_parameter('pnp_1p2x2p5', 'AE')
logger.info('Extracting pnp_1p2x2p5 BJT')
extract_devices(bjt3('pnp_1p2x2p5'), { 'C' => pnp_1p2x2p5_c.extents,
                                           'B' => pnp_1p2x2p5_b.extents,
                                           'E' => pnp_1p2x2p5_e,
                                           'tC' => pnp_1p2x2p5_c,
                                           'tB' => pnp_1p2x2p5_b,
                                           'tE' => pnp_1p2x2p5_e })

